diff -ruN 1.3.11sr1/404.php 1.4.0sr5-1/404.php
--- 1.3.11sr1/404.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/404.php	2006-08-08 02:53:59.000000000 -0500
@@ -1,19 +1,52 @@
 <?php
 
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | 404.php                                                                   |
+// |                                                                           |
+// | Geeklog "404 Not Found" page                                              |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: 404.php,v 1.10 2005/06/23 08:06:09 dhaun Exp $
+
 require_once ('lib-common.php');
 
 $display = COM_siteHeader ('menu', $LANG_404[1]);
 $display .= COM_startBlock ($LANG_404[1]);
-if (isset ($HTTP_SERVER_VARS['SCRIPT_URI'])) {
-    $url = strip_tags ($HTTP_SERVER_VARS['SCRIPT_URI']);
+if (isset ($_SERVER['SCRIPT_URI'])) {
+    $url = strip_tags ($_SERVER['SCRIPT_URI']);
 } else {
-    $pos = strpos ($HTTP_SERVER_VARS['REQUEST_URI'], '?');
+    $pos = strpos ($_SERVER['REQUEST_URI'], '?');
     if ($pos === false) {
-        $request = $HTTP_SERVER_VARS['REQUEST_URI'];
+        $request = $_SERVER['REQUEST_URI'];
     } else {
-        $request = substr ($HTTP_SERVER_VARS['REQUEST_URI'], 0, $pos);
+        $request = substr ($_SERVER['REQUEST_URI'], 0, $pos);
     }
-    $url = 'http://' . $HTTP_SERVER_VARS['HTTP_HOST'] . strip_tags ($request);
+    $url = 'http://' . $_SERVER['HTTP_HOST'] . strip_tags ($request);
 }
 $display .= sprintf ($LANG_404[2], $url);
 $display .= $LANG_404[3];
diff -ruN 1.3.11sr1/admin/auth.inc.php 1.4.0sr5-1/admin/auth.inc.php
--- 1.3.11sr1/admin/auth.inc.php	2004-12-31 10:02:27.000000000 -0600
+++ 1.4.0sr5-1/admin/auth.inc.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,17 +2,17 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | auth.inc.php                                                              |
 // |                                                                           |
 // | Geeklog admin authentication module                                       |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,43 +31,44 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: auth.inc.php,v 1.21 2004/08/15 12:06:10 dhaun Exp $
+// $Id: auth.inc.php,v 1.30.2.1 2006/05/27 15:38:46 dhaun Exp $
 
 // this file can't be used on its own
-if (eregi ('auth.inc.php', $HTTP_SERVER_VARS['PHP_SELF']))
+if (strpos ($_SERVER['PHP_SELF'], 'auth.inc.php') !== false)
 {
     die ('This file can not be used on its own.');
 }
 
 // MAIN
-
-if (!empty($loginname) && !empty($passwd)) {
-    $mypasswd = COM_getPassword($loginname);
+$uid = '';
+if (!empty ($_POST['loginname']) && !empty ($_POST['passwd'])) {
+    $status = SEC_authenticate (COM_applyFilter ($_POST['loginname']),
+                                $_POST['passwd'], $uid);
 } else {
-    srand((double)microtime()*1000000);
-    $mypasswd = rand();
+    $status = '';
 }
-
 $display = '';
 
-if (!empty ($passwd) && !empty ($mypasswd) && ($mypasswd == md5 ($passwd))) {
-    $_USER = SESS_getUserData ($loginname);
-    $sessid = SESS_newSession ($_USER['uid'], $HTTP_SERVER_VARS['REMOTE_ADDR'],
+if ($status == 3) {
+    DB_change($_TABLES['users'],'pwrequestid',"NULL",'uid',$uid);
+    $_USER = SESS_getUserDataFromId ($uid);
+    $sessid = SESS_newSession ($_USER['uid'], $_SERVER['REMOTE_ADDR'],
             $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
     SESS_setSessionCookie ($sessid, $_CONF['session_cookie_timeout'],
             $_CONF['cookie_session'], $_CONF['cookie_path'],
             $_CONF['cookiedomain'], $_CONF['cookiesecure']);
+    PLG_loginUser ($_USER['uid']);
 
     // Now that we handled session cookies, handle longterm cookie
 
-    if (!isset ($HTTP_COOKIE_VARS[$_CONF['cookie_name']])) {
+    if (!isset ($_COOKIE[$_CONF['cookie_name']])) {
 
         // Either their cookie expired or they are new
 
         $cooktime = COM_getUserCookieTimeout();
 
         if (!empty($cooktime)) {
-		
+
             // They want their cookie to persist for some amount of time so set it now
 
             setcookie ($_CONF['cookie_name'], $_USER['uid'],
@@ -75,12 +76,14 @@
                        $_CONF['cookiedomain'], $_CONF['cookiesecure']);
         }
     }
-    if (!SEC_hasRights('story.edit,block.edit,topic.edit,link.edit,event.edit,poll.edit,user.edit,plugin.edit','OR')) {
+    if (!SEC_hasRights('story.edit,block.edit,topic.edit,event.edit,user.edit,plugin.edit','OR')) {
         $display .= COM_refresh($_CONF['site_admin_url'] . '/moderation.php');
     } else {
         $display .= COM_refresh($_CONF['site_url'] . '/index.php');
     }
-} else if (!SEC_hasRights('story.edit,block.edit,topic.edit,link.edit,event.edit,poll.edit,user.edit,plugin.edit,user.mail','OR') && (count (PLG_getAdminOptions()) == 0)) {
+    echo $display;
+    exit;
+} else if (!SEC_hasRights('story.edit,block.edit,topic.edit,event.edit,user.edit,plugin.edit,user.mail','OR') && (count (PLG_getAdminOptions()) == 0)) {
     $display .= COM_siteHeader();
 
     $display .= COM_startBlock($LANG20[01]);
@@ -88,10 +91,10 @@
     if (!empty($warn)) {
         $display .= $LANG20[02]
         .'<br><br>'
-        .COM_accessLog($LANG20[03] . ' ' . $loginname);
+        .COM_accessLog($LANG20[03] . ' ' . $_POST['loginname']);
     }
-	
-    $display .= '<form action="' . $HTTP_SERVER_VARS['PHP_SELF']
+
+    $display .= '<form action="' . $_SERVER['PHP_SELF']
              . '" method="POST">'
         .'<table cellspacing="0" cellpadding="0" border="0" width="100%">'.LB
         .'<tr><td align="right">'.$LANG20[04].'&nbsp;</td>'.LB
@@ -112,6 +115,4 @@
         exit;
 }
 
-echo $display;
-
 ?>
diff -ruN 1.3.11sr1/admin/block.php 1.4.0sr5-1/admin/block.php
--- 1.3.11sr1/admin/block.php	2004-12-31 10:02:27.000000000 -0600
+++ 1.4.0sr5-1/admin/block.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,19 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | block.php                                                                 |
 // |                                                                           |
 // | Geeklog block administration.                                             |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Michael Jervis    - mike AT fuckingbrit DOT com                  |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,14 +33,14 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: block.php,v 1.63 2004/09/29 17:43:43 dhaun Exp $
+// $Id: block.php,v 1.92 2006/01/14 16:58:01 dhaun Exp $
 
+require_once ('../lib-common.php');
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
+# echo COM_debug($_POST);
 
-require_once ('../lib-common.php');
 require_once ('auth.inc.php');
 
 if (!SEC_hasrights ('block.edit')) {
@@ -54,6 +55,7 @@
     exit;
 }
 
+
 /**
 * Check for block topic access (need to handle 'all' and 'homeonly' as
 * special cases)
@@ -86,10 +88,10 @@
 * @param    int     $access Permissions this user has
 * @return   string          HTML for default block editor
 *
-*/ 
-function editdefaultblock ($A, $access) 
+*/
+function editdefaultblock ($A, $access)
 {
-    global $_CONF, $_TABLES, $_USER, $LANG21, $LANG_ACCESS;
+    global $_CONF, $_TABLES, $_USER, $LANG21, $LANG_ACCESS, $LANG_ADMIN;
 
     $retval = '';
 
@@ -102,27 +104,38 @@
     $block_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
     $block_templates->set_var('layout_url', $_CONF['layout_url']);
     $block_templates->set_var('block_id', $A['bid']);
-    $block_templates->set_var('lang_blocktitle', $LANG21[5]);
+    // standard Admin strings
+    $block_templates->set_var('lang_blocktitle', $LANG_ADMIN['title']);
+    $block_templates->set_var('lang_enabled', $LANG_ADMIN['enabled']);
+    $block_templates->set_var('lang_blockhelpurl', $LANG_ADMIN['help_url']);
+    $block_templates->set_var('lang_topic', $LANG_ADMIN['topic']);
+    $block_templates->set_var('lang_save', $LANG_ADMIN['save']);
+    $block_templates->set_var('lang_cancel', $LANG_ADMIN['cancel']);
+    $block_templates->set_var('lang_blocktype', $LANG_ADMIN['type']);
+
     $block_templates->set_var('block_title', stripslashes ($A['title']));
-    $block_templates->set_var('lang_enabled', $LANG21[53]);
     if ($A['is_enabled'] == 1) {
         $block_templates->set_var('is_enabled', 'checked="CHECKED"');
     } else {
         $block_templates->set_var('is_enabled', '');
     }
-    $block_templates->set_var('lang_blockhelpurl', $LANG21[50]);
     $block_templates->set_var('block_help', $A['help']);
     $block_templates->set_var('lang_includehttp', $LANG21[51]);
     $block_templates->set_var('lang_explanation', $LANG21[52]);
     $block_templates->set_var('block_name',$A['name']);
     $block_templates->set_var('lang_blockname', $LANG21[48]);
-    $block_templates->set_var('lang_topic', $LANG21[6]);
+    $block_templates->set_var('lang_homeonly', $LANG21[43]);
+    if ($A['tid'] == 'all') {
+        $block_templates->set_var('all_selected', 'selected="selected"');
+    } else if ($A['tid'] == 'homeonly') {
+        $block_templates->set_var('homeonly_selected', 'selected="selected"');
+    }
+    $block_templates->set_var('topic_options', COM_topicList('tid,topic',$A['tid']));
     $block_templates->set_var('lang_all', $LANG21[7]);
     $block_templates->set_var('lang_side', $LANG21[39]);
     $block_templates->set_var('lang_left', $LANG21[40]);
     $block_templates->set_var('lang_right', $LANG21[41]);
-    $block_templates->set_var('lang_save', $LANG21[54]);
-    $block_templates->set_var('lang_cancel', $LANG21[55]);
+
     if ($A['onleft'] == 1) {
         $block_templates->set_var('left_selected', 'selected="selected"');
     } else if ($A['onleft'] == 0) {
@@ -130,7 +143,6 @@
     }
     $block_templates->set_var('lang_blockorder', $LANG21[9]);
     $block_templates->set_var('block_order', $A['blockorder']);
-    $block_templates->set_var('lang_blocktype', $LANG21[10]);
     $block_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
     $block_templates->set_var('lang_owner', $LANG_ACCESS['owner']);
     $block_templates->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = '{$A['owner_id']}'"));
@@ -159,25 +171,25 @@
 * @return   string          HTML for block editor
 *
 */
-function editblock ($bid = '') 
+function editblock ($bid = '')
 {
-    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG21, $LANG_ACCESS;
+    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG21, $LANG_ACCESS, $LANG_ADMIN;
 
     $retval = '';
 
     if (!empty($bid)) {
-        $result = DB_query("SELECT * FROM {$_TABLES['blocks']} where bid ='$bid'");
+        $result = DB_query("SELECT * FROM {$_TABLES['blocks']} WHERE bid ='$bid'");
         $A = DB_fetchArray($result);
         $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
         if ($access == 2 || $access == 0 || hasBlockTopicAccess ($A['tid']) < 3) {
-            $retval .= COM_startBlock ($LANG21[44], '',
+            $retval .= COM_startBlock ($LANG_ACCESS['accessdenied'], '',
                                COM_getBlockTemplate ('_msg_block', 'header'))
                     . $LANG21[45]
                     . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
             COM_accessLog("User {$_USER['username']} tried to illegally create or edit block $bid.");
 
             return $retval;
-        } 
+        }
         if ($A['type'] == 'gldefault') {
             $retval .= editdefaultblock($A,$access);
             return $retval;
@@ -191,10 +203,7 @@
         } else {
             $A['group_id'] = SEC_getFeatureGroup ('block.edit');
         }
-        $A['perm_owner'] = 3;
-        $A['perm_group'] = 2;
-        $A['perm_members'] = 2;
-        $A['perm_anon'] = 2;
+        SEC_setDefaultPermissions ($A, $_CONF['default_permissions_block']);
         $A['is_enabled'] = 1;
         $access = 3;
     }
@@ -206,15 +215,23 @@
     $block_templates->set_var('layout_url', $_CONF['layout_url']);
     $block_templates->set_var('start_block_editor', COM_startBlock ($LANG21[3],
             '', COM_getBlockTemplate ('_admin_block', 'header')));
-        
+
     if ($A['type'] != 'layout') {
         if (!empty($bid) && SEC_hasrights('block.delete')) {
-            $block_templates->set_var('delete_option',"<input type=\"submit\" value=\"$LANG21[56]\" name=\"mode\">");
+            $block_templates->set_var('delete_option',"<input type=\"submit\" value=\"{$LANG_ADMIN['delete']}\" name=\"mode\">");
         }
     }
 
     $block_templates->set_var('block_bid', $A['bid']);
-    $block_templates->set_var('lang_blocktitle', $LANG21[5]);
+    // standard Admin strings
+    $block_templates->set_var('lang_blocktitle', $LANG_ADMIN['title']);
+    $block_templates->set_var('lang_enabled', $LANG_ADMIN['enabled']);
+    $block_templates->set_var('lang_blockhelpurl', $LANG_ADMIN['help_url']);
+    $block_templates->set_var('lang_topic', $LANG_ADMIN['topic']);
+    $block_templates->set_var('lang_save', $LANG_ADMIN['save']);
+    $block_templates->set_var('lang_cancel', $LANG_ADMIN['cancel']);
+    $block_templates->set_var('lang_blocktype', $LANG_ADMIN['type']);
+
     $block_templates->set_var('block_title', stripslashes ($A['title']));
     $block_templates->set_var('lang_enabled', $LANG21[53]);
     if ($A['is_enabled'] == 1) {
@@ -223,13 +240,11 @@
         $block_templates->set_var('is_enabled', '');
     }
     $block_templates->set_var('block_help', $A['help']);
-    $block_templates->set_var('lang_blockhelpurl', $LANG21[50]);
     $block_templates->set_var('lang_includehttp', $LANG21[51]);
     $block_templates->set_var('lang_explanation', $LANG21[52]);
     $block_templates->set_var('block_name', $A['name']);
     $block_templates->set_var('lang_blockname', $LANG21[48]);
     $block_templates->set_var('lang_nospaces', $LANG21[49]);
-    $block_templates->set_var('lang_topic', $LANG21[6]);
     $block_templates->set_var('lang_all', $LANG21[7]);
     $block_templates->set_var('lang_homeonly', $LANG21[43]);
     if ($A['tid'] == 'all') {
@@ -241,8 +256,6 @@
     $block_templates->set_var('lang_side', $LANG21[39]);
     $block_templates->set_var('lang_left', $LANG21[40]);
     $block_templates->set_var('lang_right', $LANG21[41]);
-    $block_templates->set_var('lang_save', $LANG21[54]);
-    $block_templates->set_var('lang_cancel', $LANG21[55]);
     if ($A['onleft'] == 1) {
         $block_templates->set_var('left_selected', 'selected="selected"');
     } else if ($A['onleft'] == 0) {
@@ -250,7 +263,6 @@
     }
     $block_templates->set_var('lang_blockorder', $LANG21[9]);
     $block_templates->set_var('block_order', $A['blockorder']);
-    $block_templates->set_var('lang_blocktype', $LANG21[10]);
     $block_templates->set_var('lang_normalblock', $LANG21[12]);
     $block_templates->set_var('lang_phpblock', $LANG21[27]);
     $block_templates->set_var('lang_portalblock', $LANG21[11]);
@@ -260,7 +272,7 @@
         $block_templates->set_var('php_selected', 'selected="selected"');
     } else if ($A['type'] == 'portal') {
         $block_templates->set_var('portal_selected', 'selected="selected"');
-    } 
+    }
     $block_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
     $block_templates->set_var('lang_owner', $LANG_ACCESS['owner']);
     $block_templates->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = '{$A['owner_id']}'"));
@@ -289,7 +301,7 @@
     $block_templates->set_var('group_dropdown', $groupdd);
     $block_templates->set_var('lang_permissions', $LANG_ACCESS['permissions']);
     $block_templates->set_var('lang_perm_key', $LANG_ACCESS['permissionskey']);
-    $block_templates->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']));    
+    $block_templates->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']));
     $block_templates->set_var('lang_permissions_msg', $LANG_ACCESS['permmsg']);
     $block_templates->set_var('lang_phpblockoptions', $LANG21[28]);
     $block_templates->set_var('lang_blockfunction', $LANG21[29]);
@@ -299,16 +311,82 @@
     $block_templates->set_var('lang_rdfurl', $LANG21[14]);
     $block_templates->set_var('max_url_length', 255);
     $block_templates->set_var('block_rdfurl', $A['rdfurl']);
+    $block_templates->set_var('lang_rdflimit', $LANG21[62]);
+    $block_templates->set_var('block_rdflimit', $A['rdflimit']);
     $block_templates->set_var('lang_lastrdfupdate', $LANG21[15]);
-    $block_templates->set_var('block_rdfupdated', $A['rdfupdated']);
+    if ($A['rdfupdated'] == '0000-00-00 00:00:00') {
+        $block_templates->set_var ('block_rdfupdated', '');
+    } else {
+        $block_templates->set_var ('block_rdfupdated', $A['rdfupdated']);
+    }
     $block_templates->set_var('lang_normalblockoptions', $LANG21[16]);
     $block_templates->set_var('lang_blockcontent', $LANG21[17]);
     $block_templates->set_var('block_content', htmlspecialchars (stripslashes ($A['content'])));
     $block_templates->set_var ('end_block',
             COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')));
     $block_templates->parse('output', 'editor');
-    $retval .= $block_templates->finish($block_templates->get_var('output')); 
+    $retval .= $block_templates->finish($block_templates->get_var('output'));
+
+    return $retval;
+}
+
+function listblocks()
+{
+    global $LANG_ADMIN, $LANG21, $_CONF, $_TABLES, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+    
+    reorderblocks();
 
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG21[65], 'field' => 'blockorder', 'sort' => true),
+                    array('text' => $LANG21[46], 'field' => 'move', 'sort' => false),
+                    array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true),
+                    array('text' => $LANG_ADMIN['type'], 'field' => 'type', 'sort' => true),
+                    array('text' => $LANG_ADMIN['topic'], 'field' => 'tid', 'sort' => true),
+                    array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => true)
+
+    );
+
+    $defsort_arr = array('field' => 'blockorder', 'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/block.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home'])
+    );
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG21[19], 'instructions' => $LANG21[25],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/block.'
+                                . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/block.php");
+
+    $query_arr = array('table' => 'blocks',
+                       'sql' => "SELECT * FROM {$_TABLES['blocks']} WHERE 1",
+                       'query_fields' => array('title', 'content'),
+                       'default_filter' => 'AND onleft=1');
+
+    $retval .= ADMIN_list ("blocks", "ADMIN_getListField_blocks", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
+
+    $query_arr = array('table' => 'blocks',
+                       'sql' => "SELECT * FROM {$_TABLES['blocks']} WHERE 1",
+                       'query_fields' => array('title', 'content'),
+                       'default_filter' => 'AND onleft=0');
+
+    $text_arr = array('has_menu' =>  false,
+                      'has_extras'   => true,
+                      'title' => "$LANG21[19] ($LANG21[41])", 'instructions' => $LANG21[25],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/block.'
+                                . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/block.php");
+
+    $retval .= ADMIN_list ("blocks", "ADMIN_getListField_blocks", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
     return $retval;
 }
 
@@ -323,6 +401,7 @@
 * @param    string  $tid            Topic block should appear in
 * @param    string  $rdfurl         URL to headline feed for portal blocks
 * @param    string  $rdfupdated     Date RSS/RDF feed was last updated
+* @param    string  $rdflimit       max. number of entries to import from feed
 * @param    string  $phpblockfn     Name of php function to call to get content
 * @param    int     $onleft         Flag indicates if block shows up on left or right
 * @param    int     $owner_id       ID of owner
@@ -335,12 +414,25 @@
 * @return   string                  HTML redirect or error message
 *
 */
-function saveblock ($bid, $name, $title, $help, $type, $blockorder, $content, $tid, $rdfurl, $rdfupdated, $phpblockfn, $onleft, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $is_enabled) 
+function saveblock ($bid, $name, $title, $help, $type, $blockorder, $content, $tid, $rdfurl, $rdfupdated, $rdflimit, $phpblockfn, $onleft, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $is_enabled)
 {
-    global $_CONF, $_TABLES, $LANG01, $LANG21, $MESSAGE, $HTTP_POST_VARS;
+    global $_CONF, $_TABLES, $LANG01, $LANG21, $MESSAGE, $_POST;
 
     $retval = '';
 
+    $title = addslashes (COM_stripslashes (strip_tags ($title)));
+    $phpblockfn = addslashes (COM_stripslashes ($phpblockfn));
+    if (empty($title)) {
+        $retval .= COM_siteHeader()
+                . COM_startBlock ($LANG21[63], '',
+                          COM_getBlockTemplate ('_msg_block', 'header'))
+                . $LANG21[64]
+                . COM_endBlock (COM_getBlockTemplate ('_msg_block',
+                                                      'footer'))
+                . editblock ($bid)
+                . COM_siteFooter ();
+        return $retval;
+    }
     // Convert array values to numeric permission values
     list($perm_owner,$perm_group,$perm_members,$perm_anon) = SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon);
 
@@ -371,7 +463,7 @@
         } else {
             $is_enabled = 0;
         }
-        
+
         if ($type == 'portal') {
             $content = '';
             $rdfupdated = '';
@@ -383,6 +475,7 @@
             }
             $rdfurl = '';
             $rdfupdated = '';
+            $rdflimit = 0;
             $phpblockfn = '';
         }
         if ($type == 'phpblock') {
@@ -404,22 +497,33 @@
             $content = '';
             $rdfurl = '';
             $rdfupdated = '';
+            $rdflimit = 0;
         }
         if ($type == 'normal') {
             $rdfurl = '';
             $rdfupdated = '';
+            $rdflimit = 0;
             $phpblockfn = '';
             $content = addslashes ($content);
         }
-        if ($type == 'layout') {
-            $rdfurl = '';
-            $rdfupdated = '';
-            $phpblockfn = '';
+        if ($rdflimit < 0) {
+            $rdflimit = 0;
+        }
+
+        if (empty ($rdfupdated)) {
+            $rdfupdated = '0000-00-00 00:00:00';
         }
 
-        $title = addslashes (COM_stripslashes ($title));
-        $phpblockfn = addslashes (COM_stripslashes ($phpblockfn));
-        DB_save($_TABLES['blocks'],'bid,name,title,help,type,blockorder,content,tid,rdfurl,rdfupdated,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled',"$bid,'$name','$title','$help','$type','$blockorder','$content','$tid','$rdfurl','$rdfupdated','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled");
+        if ($bid > 0)
+        {
+            DB_save($_TABLES['blocks'],'bid,name,title,help,type,blockorder,content,tid,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled',"$bid,'$name','$title','$help','$type','$blockorder','$content','$tid','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled");
+        } else {
+            $sql = "INSERT INTO {$_TABLES['blocks']} "
+             .'(name,title,help,type,blockorder,content,tid,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled) '
+             ."VALUES ('$name','$title','$help','$type','$blockorder','$content','$tid','$rdfurl','$rdfupdated','$rdflimit','$phpblockfn',$onleft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled)";
+             DB_query($sql);
+             $bid = DB_insertId();
+        }
 
         if (($type == 'gldefault') && ($name == 'older_stories')) {
             COM_olderStuff ();
@@ -440,7 +544,7 @@
             // Normal block is missing field
             $retval .= $LANG21[35];
         } else if ($type == 'gldefault') {
-            // Default geeklog field missing 
+            // Default geeklog field missing
             $retval .= $LANG21[42];
         } else {
             // Layout block missing content
@@ -450,130 +554,54 @@
                 . editblock ($bid)
                 . COM_siteFooter ();
     }
-    
+
     return $retval;
 }
-
 /**
-* Lists all block in the system
 *
-* @return   string      HTML with list of blocks
+* Re-orders all blocks in steps of 10
 *
 */
-function listblocks() 
+function reorderblocks()
 {
-    global $_CONF, $_TABLES, $LANG21, $LANG32, $LANG_ACCESS;
-
-    // Added enhanced Block admin based on concept from stratosfear
-    $retval = '';
-
-    $block_templates = new Template($_CONF['path_layout'] . 'admin/block');
-    $block_templates->set_file(array('list'=>'listblocks.thtml', 'row'=>'listitem.thtml', 'leftRight'=>'listside.thtml'));
-
-    $retval .= COM_startBlock ($LANG21[19], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-    $block_templates->set_var('site_url', $_CONF['site_url']);
-    $block_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $block_templates->set_var('layout_url', $_CONF['layout_url']);
-    $block_templates->set_var('lang_newblock', $LANG21[46]);
-    $block_templates->set_var('lang_adminhome', $LANG21[47]);
-    $block_templates->set_var('lang_instructions', $LANG21[25]);
-    $block_templates->set_var('lang_blocktitle', $LANG21[20]);
-    $block_templates->set_var('lang_access', $LANG_ACCESS['access']);
-    $block_templates->set_var('lang_blocktype', $LANG21[22]);
-    $block_templates->set_var('lang_side', $LANG21[39]);
-    $block_templates->set_var('lang_blocktopic', $LANG21[24]);
-    $block_templates->set_var('lang_enabled', $LANG21[53]);
- 
-    $result = DB_query("SELECT * FROM {$_TABLES['blocks']} ORDER BY onleft DESC,blockorder");
+    global $_TABLES;
+    $sql = "SELECT * FROM {$_TABLES['blocks']} ORDER BY onleft asc, blockorder asc;";
+    $result = DB_query($sql);
     $nrows = DB_numRows($result);
-    $hasPrintedRight = false;
+
+    $lastside = 0;
     $blockOrd = 10;
     $stepNumber = 10;
 
     for ($i = 0; $i < $nrows; $i++) {
-        if ($i == 0) {
-            $block_templates->set_var('side', $LANG21[40]);
-            $block_templates->parse('blocklist_item', 'leftRight', true);
-        }
         $A = DB_fetchArray($result);
 
-        $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
-        if (($access > 0) && (hasBlockTopicAccess ($A['tid']) > 0)) {
-            if ($access == 3) {
-                $access = $LANG_ACCESS['edit'];
-            } else {
-                $access = $LANG_ACCESS['readonly'];
-            }
-            $block_templates->set_var('block_access', $access);
-            $block_templates->set_var('block_type',$A['type']);
-            $block_templates->set_var('block_id', $A['bid']);
-            $btitle = stripslashes ($A['title']);
-            if (empty ($btitle)) {
-                $btitle = '(' . $A['name'] . ')';
-            }
-            $block_templates->set_var('block_title', $btitle);
-
-            if ($A['is_enabled'] == 1) {
-                $block_templates->set_var('enabled', 'checked="checked"');
-            } else {
-                $block_templates->set_var('enabled', '');
-            }
-            // $block_templates->set_var ('block_enabled', $enabled);
-
-            if ($A['onleft'] == 1) {
-                $side = $LANG21[40];
-                $blockcontrol_image = 'block-right.gif';
-                $moveTitleMsg = $LANG21[59];
-                $switchside = '1';
-            } else {
-                $blockcontrol_image = 'block-left.gif';
-                $moveTitleMsg = $LANG21[60];
-                $switchside = '0';
-                if (!$hasPrintedRight) {
-                    $block_templates->set_var('side', $LANG21[41]);
-                    $block_templates->parse('blocklist_item', 'leftRight', true);
-                    $hasPrintedRight = true;
-                    $blockOrd = 10;
-                }
-                $side = $LANG21[41];
-            }
-            $block_templates->set_var('blockcontrol_image', $blockcontrol_image);
-            $block_templates->set_var('switchside', $switchside);
-            $block_templates->set_var('upTitleMsg', $LANG21[58]);
-            $block_templates->set_var('moveTitleMsg', $moveTitleMsg);
-            $block_templates->set_var('dnTitleMsg', $LANG21[57]);
-            if ($A['blockorder'] != $blockOrd) {
-                $q = "UPDATE " . $_TABLES['blocks'] . " SET blockorder = '" .
-                      $blockOrd . "' WHERE bid = '" . $A['bid'] ."'";
-                DB_query($q);
-            }
-            $block_templates->set_var('block_order', $blockOrd);
-            $block_templates->set_var('block_topic', $A['tid']); 
-            $block_templates->parse('blocklist_item', 'row', true);
-            $blockOrd += $stepNumber;
+        if ($lastside != $A['onleft']) { // we are switching left/right blocks
+            $blockOrd = 10;              // so start with 10 again
+        }
+        if ($A['blockorder'] != $blockOrd) {  // only update incorrect ones
+            $q = "UPDATE " . $_TABLES['blocks'] . " SET blockorder = '" .
+                  $blockOrd . "' WHERE bid = '" . $A['bid'] ."'";
+            DB_query($q);
         }
+        $blockOrd += $stepNumber;
+        $lastside = $A['onleft'];       // save variable for next round
     }
-
-    $block_templates->parse('output','list');
-    $retval .= $block_templates->finish($block_templates->get_var('output'));
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
 }
 
+
 /**
 * Move blocks UP, Down and Switch Sides - Left and Right
 *
 */
 function moveBlock()
 {
-    global $_CONF, $_TABLES, $LANG21, $HTTP_GET_VARS;
+    global $_CONF, $_TABLES, $LANG21, $_GET;
 
     $retval = '';
 
-    $bid = $HTTP_GET_VARS['bid'];
-    $where = $HTTP_GET_VARS['where'];
+    $bid = $_GET['bid'];
+    $where = $_GET['where'];
 
     // if the block id exists
     if (DB_count($_TABLES['blocks'], "bid", $bid) == 1) {
@@ -648,63 +676,60 @@
 }
 
 // MAIN
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-}
-else {
-    $mode = $HTTP_GET_VARS['mode'];
-}
-if (isset ($HTTP_POST_VARS['bid'])) {
-    $bid = COM_applyFilter ($HTTP_POST_VARS['bid']);
+$mode = '';
+if (!empty($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
 }
-else {
-    $bid = COM_applyFilter ($HTTP_GET_VARS['bid']);
+
+$bid = '';
+if (!empty($_REQUEST['bid'])) {
+    $bid = COM_applyFilter ($_REQUEST['bid']);
 }
 
-if (isset($HTTP_POST_VARS['blkChange'])) {
-    changeBlockStatus($HTTP_POST_VARS['blkChange']);
+if (isset ($_POST['blkChange'])) {
+    changeBlockStatus ($_POST['blkChange']);
 }
 
-if (($mode == $LANG21[56]) && !empty ($LANG21[56])) { // delete
+if (($mode == $LANG_ADMIN['delete']) && !empty ($LANG_ADMIN['delete'])) {
     if (!isset ($bid) || empty ($bid) || ($bid == 0)) {
         COM_errorLog ('Attempted to delete block, bid empty or null, value =' . $bid);
         $display .= COM_refresh ($_CONF['site_admin_url'] . '/block.php');
     } else {
         $display .= deleteBlock ($bid);
     }
-} else if (($mode == $LANG21[54]) && !empty ($LANG21[54])) { // save
-    $display .= saveblock ($bid, $HTTP_POST_VARS['name'],
-                $HTTP_POST_VARS['title'], $HTTP_POST_VARS['help'],
-                $HTTP_POST_VARS['type'], $HTTP_POST_VARS['blockorder'],
-                $HTTP_POST_VARS['content'], $HTTP_POST_VARS['tid'],
-                $HTTP_POST_VARS['rdfurl'], $HTTP_POST_VARS['rdfupdated'],
-                $HTTP_POST_VARS['phpblockfn'], $HTTP_POST_VARS['onleft'],
-                $HTTP_POST_VARS['owner_id'], $HTTP_POST_VARS['group_id'],
-                $HTTP_POST_VARS['perm_owner'], $HTTP_POST_VARS['perm_group'],
-                $HTTP_POST_VARS['perm_members'], $HTTP_POST_VARS['perm_anon'],
-                $HTTP_POST_VARS['is_enabled']);
+} else if (($mode == $LANG_ADMIN['save']) && !empty ($LANG_ADMIN['save'])) {
+    $display .= saveblock ($bid, $_POST['name'], $_POST['title'],
+                $_POST['help'], $_POST['type'], $_POST['blockorder'],
+                $_POST['content'], $_POST['tid'], $_POST['rdfurl'],
+                $_POST['rdfupdated'],
+                COM_applyFilter ($_POST['rdflimit'], true),
+                $_POST['phpblockfn'], $_POST['onleft'],
+                $_POST['owner_id'], $_POST['group_id'], $_POST['perm_owner'],
+                $_POST['perm_group'], $_POST['perm_members'],
+                $_POST['perm_anon'], $_POST['is_enabled']);
 } else if ($mode == 'edit') {
-    $display .= COM_siteHeader ()
+    $display .= COM_siteHeader ('menu', $LANG21[3])
              . editblock ($bid)
              . COM_siteFooter ();
 } else if ($mode == 'move') {
-    $display .= COM_siteHeader();
+    $display .= COM_siteHeader('menu', $LANG21[19]);
     $display .= moveBlock();
     $display .= listblocks();
     $display .= COM_siteFooter();
 } else {  // 'cancel' or no mode at all
-    $display .= COM_siteHeader ();
+    $display .= COM_siteHeader ('menu', $LANG21[19]);
     $msg = 0;
-    if (isset ($HTTP_POST_VARS['msg'])) {
-        $msg = COM_applyFilter ($HTTP_POST_VARS['msg'], true);
-    } else if (isset ($HTTP_GET_VARS['msg'])) {
-        $msg = COM_applyFilter ($HTTP_GET_VARS['msg'], true);
+    if (isset ($_POST['msg'])) {
+        $msg = COM_applyFilter ($_POST['msg'], true);
+    } else if (isset ($_GET['msg'])) {
+        $msg = COM_applyFilter ($_GET['msg'], true);
     }
     if ($msg > 0) {
         $display .= COM_showMessage ($msg);
     }
-    $display .= listblocks ();
-    $display .= COM_siteFooter ();
+    $display .= listblocks();
+
+    $display .= COM_siteFooter();
 }
 
 echo $display;
diff -ruN 1.3.11sr1/admin/database.php 1.4.0sr5-1/admin/database.php
--- 1.3.11sr1/admin/database.php	2004-12-31 10:02:27.000000000 -0600
+++ 1.4.0sr5-1/admin/database.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | database.php                                                              |
 // |                                                                           |
 // | Geeklog database backup administration page.                              |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs         - tony@tonybibbs.com                          |
-// |          Blaine Lang        - langmail@sympatico.ca                       |
-// |          Dirk Haun          - dirk@haun-online.de                         |
-// |          Alexander Schmacks - Alexander.Schmacks@gmx.de                   |
+// | Authors: Tony Bibbs         - tony AT tonybibbs DOT com                   |
+// |          Blaine Lang        - langmail AT sympatico DOT ca                |
+// |          Dirk Haun          - dirk AT haun-online DOT de                  |
+// |          Alexander Schmacks - Alexander.Schmacks AT gmx DOT de            |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: database.php,v 1.20 2004/11/21 10:13:34 dhaun Exp $
+// $Id: database.php,v 1.32 2005/12/28 10:11:50 dhaun Exp $
 
 require_once('../lib-common.php');
 require_once('auth.inc.php');
@@ -63,9 +63,72 @@
     return ($lFiletimeA > $lFiletimeB) ? -1 : 1;
 }
 
+function listbackups()
+{
+    global $_CONF, $_TABLES, $_IMAGE_TYPE, $LANG_ADMIN, $LANG_DB_BACKUP;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    if (is_writable ($_CONF['backup_path'])) {
+        $backups = array();
+        $fd = opendir($_CONF['backup_path']);
+        $index = 0;
+        while ((false !== ($file = @readdir ($fd)))) {
+            if ($file <> '.' && $file <> '..' && $file <> 'CVS' &&
+                    preg_match ('/\.sql$/i', $file)) {
+                $index++;
+                clearstatcache();
+                $backups[] = $file;
+            }
+        }
+        // AS, 2004-03-29 - Sort backup files by date, newest first.
+        // Order given by 'readdir' might not be correct.
+        usort ($backups, 'compareBackupFiles');
+        $backups = array_slice ($backups, 0, 10);
+        reset($backups);
+
+        $data_arr = array();
+        for ($i = 0; $i < count ($backups); $i++) {
+            $backupfile = $_CONF['backup_path'] . $backups[$i];
+            $backupfilesize = COM_numberFormat (filesize ($backupfile));
+            $data_arr[$i] = array('file' => $backups[$i],
+                                  'size' => $backupfilesize . " <b>"
+                                            .$LANG_DB_BACKUP['bytes'] . "</b>");
+        }
+
+        $menu_arr = array (
+                        array('url' => $_CONF['site_admin_url']
+                                       . '/database.php?mode=' . $LANG_DB_BACKUP['do_backup'],
+                              'text' => $LANG_ADMIN['create_new']),
+                        array('url' => $_CONF['site_admin_url'],
+                              'text' => $LANG_ADMIN['admin_home'])
+        );
+
+        $header_arr = array(      # dislay 'text' and use table field 'field'
+            array('text' => $LANG_DB_BACKUP['backup_file'], 'field' => 'file'),
+            array('text' => $LANG_DB_BACKUP['size'], 'field' => 'size')
+        );
+
+        $text_arr = array('has_menu' => true,
+                          'instructions' => $LANG_DB_BACKUP['db_explanation']
+                                            . "<br>" . sprintf ($LANG_DB_BACKUP['total_number'], $index),
+                          'icon' => $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE,
+                          'title' => $LANG_DB_BACKUP['last_ten_backups']
+        );
+        $retval .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr, $menu_arr);
+    } else {
+        $retval .= COM_startBlock ($LANG08[06], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'));
+        $retval .= $LANG_DB_BACKUP['no_access'];
+        COM_errorLog ($_CONF['backup_path'] . ' is not writable.', 1);
+        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    }
+    return $retval;
+}
+
 
 $display = '';
-$display .= COM_siteHeader();
+$display .= COM_siteHeader ('menu', $LANG_DB_BACKUP['last_ten_backups']);
 
 // If user isn't a root user or if the backup feature is disabled, bail.
 if (!SEC_inGroup ('Root') OR $_CONF['allow_mysqldump'] == 0) {
@@ -80,10 +143,10 @@
 }
 
 // Perform the backup if asked
-if (isset ($HTTP_POST_VARS['mode']) &&
-        ($HTTP_POST_VARS['mode'] == $LANG_DB_BACKUP['do_backup'])) {
+if (isset ($_GET['mode']) &&
+        ($_GET['mode'] == $LANG_DB_BACKUP['do_backup'])) {
     if (is_dir ($_CONF['backup_path'])) {
-        $curdatetime = date ("Y_m_d");
+        $curdatetime = date ("Y_m_d_H_i_s");
         $backupfile = "{$_CONF['backup_path']}geeklog_db_backup_{$curdatetime}.sql";
         $command = $_DB_mysqldump_path . " -h$_DB_host -u$_DB_user";
         if (!empty ($_DB_pass)) {
@@ -107,7 +170,8 @@
                 $display .= COM_startBlock ($MESSAGE[40] . ' - ' . $timestamp,
                               '', COM_getBlockTemplate ('_msg_block', 'header'))
                          . '<img src="' . $_CONF['layout_url'] . '/images/'
-                         . 'sysmessage.gif" border="0" align="top" alt="">'
+                         . 'sysmessage.' . $_IMAGE_TYPE
+                         . '" border="0" align="top" alt="">'
                          . $LANG_DB_BACKUP['backup_successful'] . '<br><br>'
                          . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
             } else {
@@ -139,66 +203,7 @@
 
 // Show last ten backups
 
-if(is_writable($_CONF['backup_path'])) {
-    $backups = array();
-    $display .= COM_startBlock ($LANG_DB_BACKUP['last_ten_backups'], '',
-                        COM_getBlockTemplate ('_admin_block', 'header'));
-    $fd = opendir($_CONF['backup_path']);
-    $index = 0;
-    while ((false !== ($file = @readdir ($fd)))) {
-        if ($file <> '.' && $file <> '..' && $file <> 'CVS' &&
-                preg_match ('/\.sql$/i', $file)) {
-            $index++;
-            clearstatcache();
-            $backups[] = $file;
-        }
-    }
-    if (is_array($backups) AND $index > 0) {
-        // AS, 2004-03-29 - Sort backup files by date, newest first.
-        // Order given by 'readdir' might not be correct.
-        usort ($backups, 'compareBackupFiles');
-        $backups = array_slice ($backups, 0, 10);
-        reset($backups);
-
-        $database = new Template ($_CONF['path_layout'] . 'admin/database');
-        $database->set_file (array ('list' => 'listbackups.thtml',
-                                    'row'  => 'listitem.thtml'));
-        $database->set_var ('site_url', $_CONF['site_url']);
-        $database->set_var ('layout_url', $_CONF['layout_url']);
-        $database->set_var ('lang_backupfile', $LANG_DB_BACKUP['backup_file']);
-        $database->set_var ('lang_backupsize', $LANG_DB_BACKUP['size']);
-        $database->set_var ('lang_bytes', $LANG_DB_BACKUP['bytes']);
-
-        for ($i = 1; $i <= count ($backups); $i++) {
-            $backupfile = $_CONF['backup_path'] . current ($backups);
-            $backupfilesize = filesize ($backupfile);
-            $database->set_var ('backup_file', current ($backups));
-            $database->set_var ('backup_size', $backupfilesize);
-            $database->parse ('backup_item', 'row', true);
-            next($backups);
-        }
-        $database->set_var ('number_backups',
-                sprintf ($LANG_DB_BACKUP['total_number'], $index));
-        $display .= $database->parse ('output', 'list');
-    } else {
-        $display .= '<p>' . $LANG_DB_BACKUP['no_backups'] . '</p>';
-    }
-
-    // Show backup form
-    $display .= $LANG_DB_BACKUP['db_explanation'];
-    $display .= '<form name="dobackup" method="POST" action="'
-             . $_CONF['site_admin_url'] . '/database.php">';
-    $display .= '<input type="submit" name="mode" value="'
-             . $LANG_DB_BACKUP['do_backup'] . '"></form>';
-
-    $display .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-} else {
-    $display .= COM_startBlock ($LANG08[06], '',
-                        COM_getBlockTemplate ('_msg_block', 'header'));
-    $display .= $LANG_DB_BACKUP['no_access'];
-    COM_errorLog ($_CONF['backup_path'] . ' is not writable.', 1);
-    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-}
+$display .= listbackups();
 
 $display .= COM_siteFooter ();
 
diff -ruN 1.3.11sr1/admin/event.php 1.4.0sr5-1/admin/event.php
--- 1.3.11sr1/admin/event.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/event.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | event.php                                                                 |
 // |                                                                           |
 // | Geeklog event administration page.                                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: event.php,v 1.54 2004/12/11 14:54:49 dhaun Exp $
+// $Id: event.php,v 1.76 2006/01/28 12:16:28 dhaun Exp $
 
 require_once ('../lib-common.php');
 require_once ('auth.inc.php');
@@ -40,10 +40,7 @@
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
-// COM_debug($HTTP_POST_VARS);
-
-// number of events to list per page
-define ('EVENTS_PER_PAGE', 50);
+// COM_debug($_POST);
 
 $display = '';
 
@@ -75,8 +72,10 @@
 */
 function editevent ($mode, $A, $msg = '') 
 {
-    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG12, $LANG22, $LANG30,
-           $LANG_ACCESS, $_STATES;
+    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG10, $LANG12, $LANG22,
+           $LANG30, $LANG_ACCESS, $_STATES, $LANG_ADMIN;
+
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
 
     $retval = '';
 
@@ -92,13 +91,15 @@
     $event_templates->set_var('site_url', $_CONF['site_url']);
     $event_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
     $event_templates->set_var('layout_url',$_CONF['layout_url']);
+    $event_templates->set_var('lang_allowed_html', COM_allowedHTML());
+    $event_templates->set_var('lang_postmode', $LANG22[3]);
 
     if ($mode <> 'editsubmission' AND !empty($A['eid'])) {
         // Get what level of access user has to this object
         $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
         if ($access == 0 OR $access == 2) {
             // Uh, oh!  User doesn't have access to this object
-            $retval .= COM_startBlock ($LANG22[16], '',
+            $retval .= COM_startBlock ($LANG_ACCESS['accessdenied'], '',
                                COM_getBlockTemplate ('_msg_block', 'header'));
             $retval .= $LANG22[17];
             $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
@@ -112,12 +113,15 @@
         } else {
             $A['group_id'] = SEC_getFeatureGroup ('event.edit');
         }
-        $A['perm_owner'] = 3;
-        $A['perm_group'] = 2;
-        $A['perm_members'] = 2;
-        $A['perm_anon'] = 2;
+        SEC_setDefaultPermissions ($A, $_CONF['default_permissions_event']);
         $access = 3;
     }
+    
+    if ($mode == 'editsubmission') {
+        $event_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'],'code,name','plaintext'));
+    } else {
+        $event_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'],'code,name',$A['postmode']));
+    }
 
     $retval .= COM_startBlock($LANG22[1], '',
                               COM_getBlockTemplate ('_admin_block', 'header'));
@@ -141,7 +145,10 @@
     }
 
     $event_templates->set_var('event_id', $A['eid']);
-    $event_templates->set_var('lang_eventtitle', $LANG22[3]);
+    $event_templates->set_var('lang_eventtitle', $LANG_ADMIN['title']);
+    $A['title'] = str_replace('{','&#123;',$A['title']);
+    $A['title'] = str_replace('}','&#125;',$A['title']);
+    $A['title'] = str_replace('"','&quot;',$A['title']);
     $event_templates->set_var('event_title', stripslashes ($A['title']));
     $types  = explode(',',$_CONF['event_types']);
     asort ($types);
@@ -166,10 +173,18 @@
     $event_templates->set_var('lang_starttime', $LANG12[42]);
 
     // Combine date/time for easier manipulation
-    $A['datestart'] = $A['datestart'] . ' ' . $A['timestart'];
-    $start_stamp = strtotime($A['datestart']);
-    $A['dateend'] = $A['dateend'] . ' ' . $A['timeend'];
-    $end_stamp = strtotime($A['dateend']);
+    $A['datestart'] = trim ($A['datestart'] . ' ' . $A['timestart']);
+    if (empty ($A['datestart'])) {
+        $start_stamp = time ();
+    } else {
+        $start_stamp = strtotime ($A['datestart']);
+    }
+    $A['dateend'] = trim ($A['dateend'] . ' ' . $A['timeend']);
+    if (empty ($A['dateend'])) {
+        $end_stamp = time ();
+    } else {
+        $end_stamp = strtotime ($A['dateend']);
+    }
     $start_month = date('m', $start_stamp);
     $start_day = date('d', $start_stamp);
     $start_year = date('Y', $start_stamp);
@@ -282,15 +297,16 @@
     $event_templates->set_var('lang_city',$LANG12[46]);
     $event_templates->set_var('event_city', stripslashes ($A['city']));
     $event_templates->set_var('lang_state',$LANG12[47]);
+
     $state_options = '';
-    for ($i = 1; $i <= count($_STATES); $i++) {
-        $state_options .= '<option value="' . key($_STATES) . '" ';
-        if (key($_STATES) == $A['state']) {
+    foreach ($_STATES as $abbr => $state) {
+        $state_options .= '<option value="' . $abbr . '" ';
+        if ($abbr == $A['state']) {
             $state_options .= 'selected="selected"';
         }
-        $state_options .= '>' . current($_STATES) . '</option>';
-        next($_STATES);
+        $state_options .= '>' . $state . '</option>';
     }
+
     $event_templates->set_var('state_options',$state_options);
     $event_templates->set_var('lang_zipcode',$LANG12[48]);
     $event_templates->set_var('event_zipcode', $A['zipcode']);
@@ -298,6 +314,8 @@
     $event_templates->set_var('event_location', stripslashes ($A['location']));
     $event_templates->set_var('lang_eventdescription', $LANG22[8]);
     $event_templates->set_var('event_description', stripslashes ($A['description']));
+    $event_templates->set_var('lang_hits', $LANG10[30]);
+    $event_templates->set_var('hits', COM_numberFormat ($A['hits']));
     $event_templates->set_var('lang_save', $LANG22[20]);
     $event_templates->set_var('lang_cancel', $LANG22[21]);
 
@@ -347,6 +365,7 @@
 * @param    string  $dateend        Date the event ends on
 * @param    string  $location       Where the event will be held at
 * @param    string  $description    Description about the event
+* @param    string  $postmode       Is this HTML or plain text?
 * @param    string  $owner_id       ID of owner
 * @param    string  $group_id       ID of group event belongs to
 * @param    string  $perm_owner     Permissions the owner has on event
@@ -356,7 +375,7 @@
 * @return   string                  HTML redirect or error message
 *
 */
-function saveevent ($eid, $title, $event_type, $url, $allday, $start_month, $start_day, $start_year, $start_hour, $start_minute, $start_ampm, $end_month, $end_day, $end_year, $end_hour, $end_minute, $end_ampm, $location, $address1, $address2, $city, $state, $zipcode, $description, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $mode) 
+function saveevent ($eid, $title, $event_type, $url, $allday, $start_month, $start_day, $start_year, $start_hour, $start_minute, $start_ampm, $end_month, $end_day, $end_year, $end_hour, $end_minute, $end_ampm, $location, $address1, $address2, $city, $state, $zipcode, $description, $postmode, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $mode)
 {
     global $_CONF, $_TABLES, $_USER, $LANG22;
 
@@ -439,7 +458,12 @@
     }
 
     // clean 'em up 
-    $description = addslashes (COM_checkHTML (COM_checkWords ($description)));
+    if ($postmode == 'html') {
+        $description = COM_checkHTML (COM_checkWords ($description));
+    } else {
+        $description = htmlspecialchars (COM_checkWords ($description));
+    }
+    $description = addslashes ($description);
     $title = addslashes (COM_checkHTML (COM_checkWords ($title)));
     $location = addslashes (COM_checkHTML (COM_checkWords ($location)));
     $address1 = addslashes (COM_checkHTML (COM_checkWords ($address1)));
@@ -470,17 +494,17 @@
     if (!empty ($eid) AND !empty ($description) AND !empty ($title)) {
         DB_delete ($_TABLES['eventsubmission'], 'eid', $eid);
 
-        DB_save($_TABLES['events'],'eid,title,event_type,url,allday,datestart,dateend,timestart,timeend,location,address1,address2,city,state,zipcode,description,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon',"$eid,'$title','$event_type','$url',$allday,'$datestart','$dateend','$timestart','$timeend','$location','$address1','$address2','$city','$state','$zipcode','$description',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon");
+        DB_save($_TABLES['events'],'eid,title,event_type,url,allday,datestart,dateend,timestart,timeend,location,address1,address2,city,state,zipcode,description,postmode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon',"$eid,'$title','$event_type','$url',$allday,'$datestart','$dateend','$timestart','$timeend','$location','$address1','$address2','$city','$state','$zipcode','$description','$postmode',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon");
         if (DB_count ($_TABLES['personal_events'], 'eid', $eid) > 0) {
             $result = DB_query ("SELECT uid FROM {$_TABLES['personal_events']} WHERE eid = '{$eid}'");
             $numrows = DB_numRows ($result);
             for ($i = 1; $i <= $numrows; $i++) {
                 $P = DB_fetchArray ($result);
-                DB_save ($_TABLES['personal_events'], 'eid,title,event_type,datestart,dateend,address1,address2,city,state,zipcode,allday,url,description,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon,uid,location,timestart,timeend',
-                    "$eid,'$title','$event_type','$datestart','$dateend','$address1','$address2','$city','$state','$zipcode',$allday,'$url','$description',$group_id,$owner_id,$perm_owner,$perm_group,$perm_members,$perm_anon,{$P['uid']},'$location','$timestart','$timeend'");
+                DB_save ($_TABLES['personal_events'], 'eid,title,event_type,datestart,dateend,address1,address2,city,state,zipcode,allday,url,description,postmode,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon,uid,location,timestart,timeend',
+                    "$eid,'$title','$event_type','$datestart','$dateend','$address1','$address2','$city','$state','$zipcode',$allday,'$url','$description','$postmode',$group_id,$owner_id,$perm_owner,$perm_group,$perm_members,$perm_anon,{$P['uid']},'$location','$timestart','$timeend'");
             }
         }
-        COM_rdfUpToDateCheck ();
+        COM_rdfUpToDateCheck ('geeklog', '::events', $eid);
 
         return COM_refresh ($_CONF['site_admin_url'] . '/event.php?msg=17');
     } else {
@@ -495,79 +519,50 @@
     }
 }
 
-/**
-* lists all the events in the system
-*
-* @param    int     $page   page number to display 
-* @return   string          HTML for list of events
-*
-*/
-function listevents ($page = 1) 
+function listevents()
 {
-    global $_CONF, $_TABLES, $LANG22, $LANG_ACCESS;
-
+    global $_CONF, $_TABLES, $LANG_ADMIN, $LANG22, $LANG_ACCESS, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
     $retval = '';
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_ADMIN['copy'], 'field' => 'copy', 'sort' => false),
+                    array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true),
+                    array('text' => $LANG22[13], 'field' => 'username', 'sort' => true),
+                    array('text' => $LANG_ACCESS['access'], 'field' => 'access', 'sort' => false),
+                    array('text' => $LANG22[14], 'field' => 'datestart', 'sort' => true),
+                    array('text' => $LANG22[15], 'field' => 'dateend', 'sort' => true)
+    );
+
+    $defsort_arr = array('field' => 'datestart', 'direction' => 'desc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/event.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home'])
+    );
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG22[11], 'instructions' => $LANG22[12],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/event.'
+                                . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/event.php");
+
+    $sql = "SELECT {$_TABLES['events']}.*, {$_TABLES['users']}.username FROM {$_TABLES['events']} "
+          ."LEFT JOIN {$_TABLES['users']} ON {$_TABLES['events']}.owner_id={$_TABLES['users']}.uid "
+          ."WHERE 1 ";
+
+    $query_arr = array('table' => 'events',
+                       'sql' => $sql,
+                       'query_fields' => array('title', 'datestart', 'dateend'),
+                       'default_filter' => COM_getPermSQL('AND'));
 
-    if ($page < 1) {
-        $page = 1;
-    }
-
-    $retval .= COM_startBlock ($LANG22[11], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    $event_templates = new Template($_CONF['path_layout'] . 'admin/event');
-    $event_templates->set_file(array('list'=>'eventlist.thtml','row'=>'listitem.thtml'));
-    $event_templates->set_var('site_url', $_CONF['site_url']);
-    $event_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $event_templates->set_var('lang_newevent', $LANG22[18]);
-    $event_templates->set_var('lang_adminhome', $LANG22[19]);
-    $event_templates->set_var('lang_instructions', $LANG22[12]);
-    $event_templates->set_var('lang_eventtitle', $LANG22[13]);
-    $event_templates->set_var('lang_access', $LANG_ACCESS['access']);
-    $event_templates->set_var('lang_startdate', $LANG22[14]);
-    $event_templates->set_var('lang_enddate', $LANG22[15]);
-    $event_templates->set_var('layout_url',$_CONF['layout_url']);
-
-    $limit = (EVENTS_PER_PAGE * ($page - 1));
-    $result = DB_query ("SELECT * FROM {$_TABLES['events']}" . COM_getPermSQL () . " ORDER BY datestart DESC LIMIT $limit," . EVENTS_PER_PAGE);
-    $nrows = DB_numRows ($result);
-    for ($i = 0; $i < $nrows; $i++) {
-        $A = DB_fetchArray ($result);
-        $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                                 $A['perm_owner'], $A['perm_group'],
-                                 $A['perm_members'], $A['perm_anon']);
-        if ($access == 3) {
-            $access = $LANG_ACCESS['edit'];
-        } else {
-            $access = $LANG_ACCESS['readonly'];
-        }
-        $ecount = (EVENTS_PER_PAGE * ($page - 1)) + $i + 1;
-        $event_templates->set_var('event_id', $A['eid']);
-        $event_templates->set_var('event_title', stripslashes ($A['title']));
-        $event_templates->set_var('event_access', $access);
-        $event_templates->set_var('event_startdate', $A['datestart']);
-        $event_templates->set_var('event_enddate', $A['dateend']); 
-        $event_templates->set_var('row_num', $ecount);
-        $event_templates->parse('event_row', 'row', true);
-    }
-
-    $eresult = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['events']}" . COM_getPermSQL ());
-    $N = DB_fetchArray ($eresult);
-    $numevents = $N['count'];
-    if ($numevents > EVENTS_PER_PAGE) {
-        $baseurl = $_CONF['site_admin_url'] . '/event.php';
-        $numpages = ceil ($numevents / EVENTS_PER_PAGE);
-        $event_templates->set_var ('google_paging',
-                COM_printPageNavigation ($baseurl, $page, $numpages));
-    } else {
-        $event_templates->set_var ('google_paging', '');
-    }
-
-    $event_templates->parse('output', 'list');
-    $retval .= $event_templates->finish($event_templates->get_var('output'));
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
+    $retval .= ADMIN_list ("events", "ADMIN_getListField_events", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
     return $retval;
+
 }
 
 /**
@@ -596,48 +591,46 @@
 }
 
 // MAIN
-if (count ($HTTP_POST_VARS) == 0) {
-    $http_input_vars = $HTTP_GET_VARS;
-} else {
-    $http_input_vars = $HTTP_POST_VARS;
-}   
-$mode = $http_input_vars['mode'];
+$mode = '';
+if (isset($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
+}
 
 if (($mode == $LANG22[22]) && !empty ($LANG22[22])) { // delete
-    $eid = COM_applyFilter ($http_input_vars['eid']);
+    $eid = COM_applyFilter ($_REQUEST['eid']);
     if (!isset ($eid) || empty ($eid) || ($eid == 0)) {
         COM_errorLog ('Attempted to delete event eid=\''
-                      . $http_input_vars['eid'] . "'");
+                      . $_REQUEST['eid'] . "'");
         $display .= COM_refresh ($_CONF['site_admin_url'] . '/event.php');
     } else {
         $display .= deleteEvent ($eid);
     }
 } else if (($mode == $LANG22[20]) && !empty ($LANG22[20])) { // save
-    $display .= saveevent (COM_applyFilter ($HTTP_POST_VARS['eid']),
-            $HTTP_POST_VARS['title'], $HTTP_POST_VARS['event_type'],
-            $HTTP_POST_VARS['url'], $HTTP_POST_VARS['allday'],
-            $HTTP_POST_VARS['start_month'], $HTTP_POST_VARS['start_day'],
-            $HTTP_POST_VARS['start_year'], $HTTP_POST_VARS['start_hour'],
-            $HTTP_POST_VARS['start_minute'], $HTTP_POST_VARS['start_ampm'],
-            $HTTP_POST_VARS['end_month'], $HTTP_POST_VARS['end_day'],
-            $HTTP_POST_VARS['end_year'], $HTTP_POST_VARS['end_hour'],
-            $HTTP_POST_VARS['end_minute'], $HTTP_POST_VARS['end_ampm'],
-            $HTTP_POST_VARS['location'], $HTTP_POST_VARS['address1'],
-            $HTTP_POST_VARS['address2'], $HTTP_POST_VARS['city'],
-            $HTTP_POST_VARS['state'], $HTTP_POST_VARS['zipcode'],
-            $HTTP_POST_VARS['description'], $HTTP_POST_VARS['owner_id'],
-            $HTTP_POST_VARS['group_id'], $HTTP_POST_VARS['perm_owner'],
-            $HTTP_POST_VARS['perm_group'], $HTTP_POST_VARS['perm_members'],
-            $HTTP_POST_VARS['perm_anon'], $mode);
+    $display .= saveevent (COM_applyFilter ($_POST['eid']),
+            $_POST['title'], $_POST['event_type'],
+            $_POST['url'], $_POST['allday'],
+            $_POST['start_month'], $_POST['start_day'],
+            $_POST['start_year'], $_POST['start_hour'],
+            $_POST['start_minute'], $_POST['start_ampm'],
+            $_POST['end_month'], $_POST['end_day'],
+            $_POST['end_year'], $_POST['end_hour'],
+            $_POST['end_minute'], $_POST['end_ampm'],
+            $_POST['location'], $_POST['address1'],
+            $_POST['address2'], $_POST['city'],
+            $_POST['state'], $_POST['zipcode'],
+            $_POST['description'], $_POST['postmode'] ,
+            $_POST['owner_id'], $_POST['group_id'],
+            $_POST['perm_owner'], $_POST['perm_group'],
+            $_POST['perm_members'], $_POST['perm_anon'], $mode);
 } else if ($mode == 'editsubmission') {
-    $id = COM_applyFilter ($http_input_vars['id']);
+    $id = COM_applyFilter ($_REQUEST['id']);
     $result = DB_query ("SELECT * FROM {$_TABLES['eventsubmission']} WHERE eid ='$id'");
     $A = DB_fetchArray ($result);
     $display .= COM_siteHeader ('menu');
     $display .= editevent ($mode, $A);
     $display .= COM_siteFooter ();
 } else if ($mode == 'clone') {
-    $eid = COM_applyFilter ($http_input_vars['eid']);
+    $eid = COM_applyFilter ($_REQUEST['eid']);
     $result = DB_query ("SELECT * FROM {$_TABLES['events']} WHERE eid ='$eid'");
     $A = DB_fetchArray ($result);
     $A['eid'] = COM_makesid ();
@@ -646,25 +639,25 @@
     $display .= editevent ($mode, $A);
     $display .= COM_siteFooter ();
 } else if ($mode == 'edit') {
-    $eid = COM_applyFilter ($http_input_vars['eid']);
+    $eid = COM_applyFilter ($_REQUEST['eid']);
     if (empty ($eid)) {
         $A = array ();
-        $A['datestart'] = COM_applyFilter ($http_input_vars['datestart']);
-        $A['timestart'] = COM_applyFilter ($http_input_vars['timestart']);
+        $A['datestart'] = COM_applyFilter ($_REQUEST['datestart']);
+        $A['timestart'] = COM_applyFilter ($_REQUEST['timestart']);
     } else {
         $result = DB_query ("SELECT * FROM {$_TABLES['events']} WHERE eid ='$eid'");
         $A = DB_fetchArray ($result);
     }
-    $display .= COM_siteHeader ('menu');
+    $display .= COM_siteHeader ('menu', $LANG22[1]);
     $display .= editevent ($mode, $A);
     $display .= COM_siteFooter ();
 } else { // 'cancel' or no mode at all
-    $display .= COM_siteHeader ('menu');
-    if (isset ($http_input_vars['msg'])) {
-        $display .= COM_showMessage (COM_applyFilter ($http_input_vars['msg'],
+    $display .= COM_siteHeader ('menu', $LANG22[11]);
+    if (isset ($_REQUEST['msg'])) {
+        $display .= COM_showMessage (COM_applyFilter ($_REQUEST['msg'],
                                                       true));
     }
-    $display .= listevents (COM_applyFilter ($http_input_vars['page'], true));
+    $display .= listevents();
     $display .= COM_siteFooter ();
 }
 
diff -ruN 1.3.11sr1/admin/group.php 1.4.0sr5-1/admin/group.php
--- 1.3.11sr1/admin/group.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/group.php	2006-08-08 02:39:06.000000000 -0500
@@ -8,12 +8,12 @@
 // |                                                                           |
 // | Geeklog group administration page.                                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: group.php,v 1.42 2004/10/19 10:52:48 dhaun Exp $
+// $Id: group.php,v 1.63 2005/12/22 14:39:46 ospiess Exp $
 
 /**
 * This file is the Geeklog Group administration page
@@ -54,11 +54,11 @@
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
+// echo COM_debug($_POST);
 
 $display = '';
 
-// Make sure user has rights to access this page 
+// Make sure user has rights to access this page
 if (!SEC_hasRights ('group.edit')) {
     $display .= COM_siteHeader ('menu');
     $display .= COM_startBlock ($MESSAGE[30], '',
@@ -78,15 +78,17 @@
 * @return   string      HTML for group editor
 *
 */
-function editgroup($grp_id = '') 
+function editgroup($grp_id = '')
 {
-    global $_TABLES, $_CONF, $_USER, $LANG_ACCESS;
+    global $_TABLES, $_CONF, $_USER, $LANG_ACCESS, $VERBOSE;
 
     $retval = '';
 
     $thisUsersGroups = SEC_getUserGroups ();
-    if (!empty ($grp_id) && ($grp_id > 0) &&
-            !in_array ($grp_id, $thisUsersGroups)) {
+    if (!empty ($grp_id) &&
+        ($grp_id > 0) &&
+        !in_array ($grp_id, $thisUsersGroups) &&
+        !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $thisUsersGroups)) {
         $retval .= COM_startBlock ($LANG_ACCESS['groupeditor'], '',
                            COM_getBlockTemplate ('_msg_block', 'header'));
         if (!SEC_inGroup ('Root') && (DB_getItem ($_TABLES['groups'],
@@ -116,7 +118,7 @@
         $A['owner_id'] = $_USER['uid'];
 
         // this is the one instance where we default the group
-        // most topics should belong to the normal user group 
+        // most topics should belong to the normal user group
         $A['group_id'] = DB_getItem($_TABLES['groups'],'grp_id',"grp_name = 'Normal User'");
         $A['grp_gl_core'] = 0;
     }
@@ -139,7 +141,7 @@
 
     $group_templates->set_var('lang_groupname', $LANG_ACCESS['groupname']);
 
-    if ($A['grp_gl_core'] == 0) {    
+    if ($A['grp_gl_core'] == 0) {
         $group_templates->set_var('groupname_inputtype', 'text');
         $group_templates->set_var('groupname_static', '');
     } else {
@@ -155,7 +157,7 @@
     //$groups = SEC_getUserGroups('','',$grp_id);
     $selected = '';
     if (!empty($grp_id)) {
-        $tmp = DB_query("SELECT ug_main_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_grp_id = $grp_id"); 
+        $tmp = DB_query("SELECT ug_main_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_grp_id = $grp_id");
         $num_groups = DB_numRows($tmp);
         for ($x = 1; $x <= $num_groups; $x++) {
             $G = DB_fetchArray($tmp);
@@ -283,7 +285,7 @@
 * @return   string      HTML for rights
 *
 */
-function printrights ($grp_id = '', $core = 0) 
+function printrights ($grp_id = '', $core = 0)
 {
     global $_TABLES, $_USER, $LANG_ACCESS, $VERBOSE;
 
@@ -302,7 +304,7 @@
     }
 
     // now query for all available features
-    $features = DB_query ("SELECT ft_id,ft_name FROM {$_TABLES['features']}{$ftWhere} ORDER BY ft_name");
+    $features = DB_query ("SELECT ft_id,ft_name,ft_descr FROM {$_TABLES['features']}{$ftWhere} ORDER BY ft_name");
     $nfeatures = DB_numRows($features);
 
     if (!empty($grp_id)) {
@@ -317,35 +319,35 @@
 
         // Build an array of indirect features
         $grpftarray = array ();
-        for ($i = 0; $i < sizeof($indirectfeatures); $i++) {        
-            $grpftarray[current($indirectfeatures)] = 'indirect'; 
+        for ($i = 0; $i < sizeof($indirectfeatures); $i++) {
+            $grpftarray[current($indirectfeatures)] = 'indirect';
             next($indirectfeatures);
         }
 
-        // Build an arrray of direct features    
+        // Build an arrray of direct features
         $grpftarray1 = array ();
         $ndirect = DB_numRows($directfeatures);
         for ($i = 0; $i < $ndirect; $i++) {
             $A = DB_fetchArray($directfeatures);
-            $grpftarray1[$A['ft_name']] = 'direct'; 
+            $grpftarray1[$A['ft_name']] = 'direct';
         }
 
-        // Now merge the two arrays    
+        // Now merge the two arrays
         $grpftarray = array_merge ($grpftarray, $grpftarray1);
         if ($VERBOSE) {
             // this is for debugging purposes
             for ($i = 1; $i < sizeof($grpftarray); $i++) {
                 COM_errorLog("element $i is feature " . key($grpftarray) . " and is " . current($grpftarray),1);
-                next($grpftarray); 
+                next($grpftarray);
             }
         }
-    } 
+    }
 
     // OK, now loop through and print all the features giving edit rights
     // to only the ones that are direct features
     $ftcount = 0;
     $retval = '<tr>' . LB;
-    for ($i = 1; $i <= $nfeatures; $i++) {        
+    for ($i = 1; $i <= $nfeatures; $i++) {
         if ($i > 0 AND ($i % 3 == 1)) {
             $retval .= "</tr>\n<tr>";
         }
@@ -355,14 +357,16 @@
             $ftcount++;
             $retval .= '<td><input type="checkbox" name="features[]" value="'. $A['ft_id'] . '"';
             if ($grpftarray[$A['ft_name']] == 'direct') {
-                $retval .= ' CHECKED';
-            } 
-            $retval .= '>' . $A['ft_name'] . '</td>';
+                $retval .= ' checked="checked"';
+            }
+            $retval .= '><span title="' . $A['ft_descr'] . '">' . $A['ft_name']
+                    . '</span></td>';
         } else {
             // either this is an indirect right OR this is a core feature
             if ((($core == 1) AND ($grpftarray[$A['ft_name']] == 'indirect' OR $grpftarray[$A['ft_name']] == 'direct')) OR ($core == 0)) {
                 $ftcount++;
-                $retval .= '<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<i>' .  $A['ft_name'] . '</i>)</td>';
+                $retval .= '<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<i title="'
+                        . $A['ft_descr'] . '">' .  $A['ft_name'] . '</i>)</td>';
             }
         }
     }
@@ -370,7 +374,7 @@
         // This group doesn't have rights to any features
         $retval .= '<td colspan="3">' . $LANG_ACCESS['grouphasnorights'] . '</td>';
     }
-    
+
     $retval .= '</tr>' . LB;
 
     return $retval;
@@ -388,14 +392,16 @@
 * @return   string                  HTML refresh or error message
 *
 */
-function savegroup ($grp_id, $grp_name, $grp_descr, $grp_gl_core, $features, $groups) 
+function savegroup ($grp_id, $grp_name, $grp_descr, $grp_gl_core, $features, $groups)
 {
     global $_CONF, $_TABLES, $_USER, $LANG_ACCESS, $VERBOSE;
 
     if (!empty ($grp_name) && !empty ($grp_descr)) {
         $GroupAdminGroups = SEC_getUserGroups ();
-        if (!empty ($grp_id) && ($grp_id > 0) &&
-                !in_array ($grp_id, $GroupAdminGroups)) {
+        if (!empty ($grp_id) &&
+            ($grp_id > 0) &&
+            !in_array ($grp_id, $GroupAdminGroups) &&
+            !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $GroupAdminGroups)) {
             COM_accessLog ("User {$_USER['username']} tried to edit group '$grp_name' ($grp_id) with insufficient privileges.");
 
             return COM_refresh ($_CONF['site_admin_url'] . '/group.php');
@@ -407,6 +413,24 @@
             return COM_refresh ($_CONF['site_admin_url'] . '/group.php');
         }
 
+        // group names have to be unique, so check if this one exists already
+        $g_id = DB_getItem ($_TABLES['groups'], 'grp_id',
+                            "grp_name = '$grp_name'");
+        if ($g_id > 0) {
+            if (empty ($grp_id) || ($grp_id != $g_id)) {
+                // there already is a group with that name - complain
+                $retval .= COM_siteHeader ('menu', $LANG_ACCESS['groupeditor']);
+                $retval .= COM_startBlock ($LANG_ACCESS['groupexists'], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'));
+                $retval .= $LANG_ACCESS['groupexistsmsg'];
+                $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+                $retval .= editgroup ($grp_id);
+                $retval .= COM_siteFooter ();
+
+                return $retval;
+            }
+        }
+
         $grp_descr = COM_stripslashes ($grp_descr);
         $grp_descr = addslashes ($grp_descr);
         if (empty ($grp_id)) {
@@ -474,7 +498,7 @@
 
         echo COM_refresh($_CONF['site_admin_url'] . '/group.php?msg=49');
     } else {
-        $retval .= COM_siteHeader ('menu');
+        $retval .= COM_siteHeader ('menu', $LANG_ACCESS['groupeditor']);
         $retval .= COM_startBlock ($LANG_ACCESS['missingfields'], '',
                            COM_getBlockTemplate ('_msg_block', 'header'));
         $retval .= $LANG_ACCESS['missingfieldsmsg'];
@@ -483,62 +507,7 @@
         $retval .= COM_siteFooter ();
 
         return $retval;
-    }   
-}
-
-/**
-* Lists all the groups in the system
-*
-* @return   string  HTML for group listing
-*
-*/
-function listgroups() 
-{
-    global $_TABLES, $_CONF, $LANG_ACCESS;
-
-    $retval = COM_startBlock ($LANG_ACCESS['groupmanager'], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    $group_templates = new Template($_CONF['path_layout'] . 'admin/group');
-    $group_templates->set_file(array('list'=>'grouplist.thtml','row'=>'listitem.thtml'));
-    $group_templates->set_var('site_url', $_CONF['site_url']);
-    $group_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $group_templates->set_var('layout_url', $_CONF['layout_url']);
-    $group_templates->set_var('lang_newgroup', $LANG_ACCESS['newgroup']);
-    $group_templates->set_var('lang_adminhome', $LANG_ACCESS['adminhome']);
-    $group_templates->set_var('lang_instructions', $LANG_ACCESS['newgroupmsg']); 
-    $group_templates->set_var('lang_groupname', $LANG_ACCESS['groupname']);
-    $group_templates->set_var('lang_description', $LANG_ACCESS['description']);
-    $group_templates->set_var('lang_coregroup', $LANG_ACCESS['coregroup']);
-    $group_templates->set_var('lang_action', $LANG_ACCESS['action']);
-    $group_templates->set_var('lang_edit', $LANG_ACCESS['edit']);
-    $group_templates->set_var('lang_list_users', $LANG_ACCESS['listusers']);
-
-    $thisUsersGroups = SEC_getUserGroups ();
-
-    $result = DB_query("SELECT * FROM {$_TABLES['groups']}");
-    $nrows = DB_numRows($result);
-    for ($i = 0; $i < $nrows; $i++) {
-        $A = DB_fetchArray ($result);
-        if (in_array ($A['grp_id'], $thisUsersGroups)) {
-            if ($A['grp_gl_core'] == 1) {
-                $core = $LANG_ACCESS['yes'];
-            } else {
-                $core = $LANG_ACCESS['no'];
-            }
-            $group_templates->set_var ('group_id', $A['grp_id']);
-            $group_templates->set_var ('group_name', $A['grp_name']);
-            $group_templates->set_var ('group_description', $A['grp_descr']);
-            $group_templates->set_var ('group_core', $core);
-            $group_templates->set_var ('lang_list', $LANG_ACCESS['listthem']);
-            $group_templates->parse ('group_row', 'row', true);
-        }
     }
-    $group_templates->parse('output', 'list');
-    $retval .= $group_templates->finish($group_templates->get_var('output'));
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
 }
 
 /**
@@ -580,21 +549,21 @@
 /**
 * Display a list of all users in a given group.
 *
-* @param   grp_id        int      group id
-* @param   curpage       int      page number
-* @param   query_limit   int      users per page
-* @return                string   HTML for user listing
+* @param   grp_id   int      group id
+* @return           string   HTML for user listing
 *
 */
-function listusers ($grp_id, $curpage = 1, $query_limit = 50)
+function listusers ($grp_id)
 {
-    global $_TABLES, $_CONF, $LANG28, $LANG_ACCESS;
-
+    global $_CONF, $_TABLES, $LANG28, $LANG_ACCESS, $LANG_ADMIN, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
     $retval = '';
 
     $thisUsersGroups = SEC_getUserGroups ();
-    if (!empty ($grp_id) && ($grp_id > 0) &&
-            !in_array ($grp_id, $thisUsersGroups)) {
+    if (!empty ($grp_id) &&
+        ($grp_id > 0) &&
+        !in_array ($grp_id, $thisUsersGroups) &&
+        !SEC_groupIsRemoteUserAndHaveAccess( $grp_id, $thisUsersGroups)) {
         $retval .= COM_startBlock ($LANG_ACCESS['usergroupadmin'], '',
                            COM_getBlockTemplate ('_msg_block', 'header'));
         $retval .= $LANG_ACCESS['cantlistgroup'];
@@ -603,67 +572,102 @@
         return $retval;
     }
 
-    if ($curpage <= 0) {
-        $curpage = 1;
-    }
-    if ($query_limit == 0) {
-        $limit = 50;
-    } else {
-        $limit = $query_limit;
+    if ($_CONF['lastlogin']) {
+        $login_text = $LANG28[41];
+        $login_field = 'lastlogin';
+    } else {
+        $login_text = $LANG28[40];
+        $login_field = 'regdate';
+    }
+
+    $header_arr = array (
+        array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+        array('text' => $LANG28[37], 'field' => 'uid', 'sort' => true),
+        array('text' => $LANG28[3], 'field' => 'username', 'sort' => true),
+        array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true),
+        array('text' => $login_text, 'field' => $login_field, 'sort' => true),
+        array('text' => $LANG28[7], 'field' => 'email', 'sort' => true)
+    );
+
+    $defsort_arr = array ('field'     => 'username',
+                          'direction' => 'asc'
+    );
+
+    $groupname = DB_getItem ($_TABLES['groups'], 'grp_name',
+                             "grp_id = '$grp_id'");
+    $headline = sprintf ($LANG_ACCESS['usersingroup'], $groupname);
+
+    $text_arr = array ('has_menu'     => false,
+                       'has_extras'   => false,
+                       'title'        => $headline,
+                       'instructions' => '',
+                       'icon'         => '',
+                       'form_url'     => '',
+                       'help_url'     => ''
+    );
+
+    $join_userinfo = '';
+    $select_userinfo = '';
+    if ($_CONF['lastlogin']) {
+        $join_userinfo = "LEFT JOIN {$_TABLES['userinfo']} ON {$_TABLES['users']}.uid={$_TABLES['userinfo']}.uid ";
+        $select_userinfo = ",lastlogin ";
     }
-    $offset = (($curpage - 1) * $limit);
 
     $groups = getGroupList ($grp_id);
     $groupList = implode (',', $groups);
 
-    $sql = "FROM {$_TABLES['users']},{$_TABLES['group_assignments']} WHERE {$_TABLES['users']}.uid > 1 AND {$_TABLES['users']}.uid = {$_TABLES['group_assignments']}.ug_uid AND ({$_TABLES['group_assignments']}.ug_main_grp_id IN ({$groupList}))";
-    $result = DB_query ("SELECT DISTINCT uid,username,fullname,email " . $sql
-                        . " ORDER BY username LIMIT $offset,$limit");
-    $nrows = DB_numRows ($result);
-
-    $cntresult = DB_query ("SELECT COUNT(DISTINCT {$_TABLES['users']}.uid) AS count " . $sql);
-    $C = DB_fetchArray ($cntresult);
-    $num_pages = ceil ($C['count'] / $limit);
-
-    $headline = sprintf ($LANG_ACCESS['usersingroup'],
-                         DB_getItem ($_TABLES['groups'], 'grp_name',
-                         "grp_id = '$grp_id'"));
-    $retval .= COM_startBlock ($headline . ' (' . $C['count'] . ')', '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
+    $sql = "SELECT DISTINCT {$_TABLES['users']}.uid,username,fullname,email,photo,regdate$select_userinfo FROM {$_TABLES['users']},{$_TABLES['group_assignments']} $join_userinfo WHERE {$_TABLES['users']}.uid > 1 AND {$_TABLES['users']}.uid = {$_TABLES['group_assignments']}.ug_uid AND ({$_TABLES['group_assignments']}.ug_main_grp_id IN ({$groupList}))";
 
-    $user_templates = new Template ($_CONF['path_layout'] . 'admin/user');
-    $user_templates->set_file (array ('list' => 'plainlist.thtml',
-                                      'row' => 'listitem.thtml'));
-    $user_templates->set_var ('site_url', $_CONF['site_url']);
-    $user_templates->set_var ('site_admin_url', $_CONF['site_admin_url']);
-    $user_templates->set_var ('layout_url', $_CONF['layout_url']);
-    $user_templates->set_var ('lang_adminhome', $LANG28[16]);
-    $user_templates->set_var ('lang_username', $LANG28[3]);
-    $user_templates->set_var ('lang_fullname', $LANG28[4]);
-    $user_templates->set_var ('lang_emailaddress', $LANG28[7]);
+    $query_arr = array ('table' => 'users',
+                        'sql' => $sql,
+                        'query_fields' => array('username', 'email', 'fullname'),
+                        'default_filter' => "AND {$_TABLES['users']}.uid > 1",
+                        'query' => $_REQUEST['q'],
+                        'query_limit' => COM_applyFilter ($_REQUEST['query_limit'], true)
+    );
 
-    for ($i = 0; $i < $nrows; $i++) {
-        $A = DB_fetchArray ($result);
-        $user_templates->set_var ('user_id', $A['uid']);
-        $user_templates->set_var ('username', $A['username']);
-        $user_templates->set_var ('user_fullname', $A['fullname']);
-        $user_templates->set_var ('user_email', $A['email']);
-        $user_templates->parse ('user_row', 'row', true);
-    }
+    $retval .= ADMIN_list ('user', 'ADMIN_getListField_users', $header_arr, $text_arr, $query_arr, array(), $defsort_arr, "&mode=listusers&grp_id=$grp_id");
 
-    if ($num_pages > 1) {
-        $base_url = $_CONF['site_admin_url']
-                  . '/group.php?mode=listusers&amp;grp_id=' . $grp_id;
-        $user_templates->set_var ('google_paging',
-                COM_printPageNavigation ($base_url, $curpage, $num_pages));    
-    } else {
-        $user_templates->set_var ('google_paging', '');
-    }
-    $user_templates->parse ('output', 'list');
-    $retval .= $user_templates->finish ($user_templates->get_var ('output'));
+    return $retval;
+}
 
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+function listgroups()
+{
+    global $LANG_ADMIN, $LANG_ACCESS, $_IMAGE_TYPE, $_CONF, $_TABLES;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = "";
+
+    $header_arr = array(      # display 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_ACCESS['groupname'], 'field' => 'grp_name', 'sort' => true),
+                    array('text' => $LANG_ACCESS['description'], 'field' => 'grp_descr', 'sort' => true),
+                    array('text' => $LANG_ACCESS['coregroup'], 'field' => 'grp_gl_core', 'sort' => true),
+                    array('text' => $LANG_ACCESS['listusers'], 'field' => 'list', 'sort' => false)
+    );
+
+    $defsort_arr = array('field' => 'grp_name', 'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/group.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home']));
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG_ACCESS['groupmanager'],
+                      'instructions' => $LANG_ACCESS['newgroupmsg'],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/group.'
+                                . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/group.php");
+
+    $query_arr = array('table' => 'groups',
+                       'sql' => "SELECT * FROM {$_TABLES['groups']} WHERE 1",
+                       'query_fields' => array('grp_name', 'grp_descr'),
+                       'default_filter' => "");
 
+    $retval .= ADMIN_list ("groups", "ADMIN_getListField_groups", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
     return $retval;
 }
 
@@ -682,7 +686,7 @@
     } else {
         $groups = getGroupList ($group_id);
         $groupList = implode (',', $groups);
-        $sql = "FROM {$_TABLES['users']},{$_TABLES['group_assignments']} 
+        $sql = "FROM {$_TABLES['users']},{$_TABLES['group_assignments']}
             WHERE {$_TABLES['users']}.uid > 1 AND {$_TABLES['users']}.uid = {$_TABLES['group_assignments']}.ug_uid AND ({$_TABLES['group_assignments']}.ug_main_grp_id IN ({$groupList}))";
         $result = DB_query ("SELECT DISTINCT uid,username " . $sql . " ORDER BY username");
         while(list($uid,$username) = DB_fetchArray($result)) {
@@ -696,11 +700,15 @@
 
 function editusers ($group)
 {
-    global $_CONF, $_TABLES, $_USER, $LANG_ACCESS;
+    global $_CONF, $_TABLES, $_USER, $LANG_ACCESS, $LANG28;
 
     $thisUsersGroups = SEC_getUserGroups ();
-    if (!empty ($group) && ($group > 0) &&
-            !in_array ($group, $thisUsersGroups)) {
+	$groupName = DB_getItem($_TABLES['groups'],'grp_name',"grp_id='$group'");
+    if (!empty ($group) &&
+       ($group > 0) &&
+       !in_array ($group, $thisUsersGroups) &&
+       !SEC_groupIsRemoteUserAndHaveAccess($group, $thisUsersGroups)
+       ) {
         $retval .= COM_startBlock ($LANG_ACCESS['usergroupadmin'], '',
                            COM_getBlockTemplate ('_msg_block', 'header'));
         if (!SEC_inGroup ('Root') && (DB_getItem ($_TABLES['groups'],
@@ -715,13 +723,16 @@
         return $retval;
     }
 
-    $retval .= COM_startBlock ($LANG_ACCESS['usergroupadmin'] , '',
+    $retval .= COM_startBlock ($LANG_ACCESS['usergroupadmin'] . " - $groupName" , '',
                        COM_getBlockTemplate ('_admin_block', 'header'));
     $groupmembers = new Template($_CONF['path_layout'] . 'admin/group');
     $groupmembers->set_file (array ('groupmembers'=>'groupmembers.thtml'));
     $groupmembers->set_var ('site_url', $_CONF['site_url']);
     $groupmembers->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $groupmembers->set_var ('layout_url', $_CONF['layout_url']);
     $groupmembers->set_var ('phpself', $_CONF['site_admin_url'] . '/group.php');
+    $groupmembers->set_var('lang_adminhome', $LANG_ACCESS['adminhome']);
+    $groupmembers->set_var('lang_instructions', $LANG_ACCESS['editgroupmsg']);
     $groupmembers->set_var ('LANG_sitemembers',$LANG_ACCESS['availmembers']);
     $groupmembers->set_var ('LANG_grpmembers',$LANG_ACCESS['groupmembers']);
     $groupmembers->set_var ('sitemembers', grp_selectUsers($group,true) );
@@ -730,6 +741,7 @@
     $groupmembers->set_var ('LANG_remove',$LANG_ACCESS['remove']);
     $groupmembers->set_var('lang_save', $LANG_ACCESS['save']);
     $groupmembers->set_var('lang_cancel', $LANG_ACCESS['cancel']);
+    $groupmembers->set_var ('lang_grouplist', $LANG28[38]);
     $groupmembers->set_var ('group_id',$group);
     $groupmembers->parse ('output', 'groupmembers');
     $retval .= $groupmembers->finish($groupmembers->get_var('output'));
@@ -771,7 +783,7 @@
     }
 
     $GroupAdminGroups = SEC_getUserGroups ();
-    if (!in_array ($grp_id, $GroupAdminGroups)) {
+    if (!in_array ($grp_id, $GroupAdminGroups) && !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $GroupAdminGroups)) {
         COM_accessLog ("User {$_USER['username']} tried to delete group $grp_id with insufficient privileges.");
 
         return COM_refresh ($_CONF['site_admin_url'] . '/group.php');
@@ -788,16 +800,14 @@
 }
 
 // MAIN
-$http_input_vars = array();
-if (count ($HTTP_POST_VARS) == 0) {
-    $http_input_vars = $HTTP_GET_VARS;
-} else {
-    $http_input_vars = $HTTP_POST_VARS;
+$mode = '';
+if (isset($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
 }
-$mode = $http_input_vars['mode'];
+
 
 if (($mode == $LANG_ACCESS['delete']) && !empty ($LANG_ACCESS['delete'])) {
-    $grp_id = COM_applyFilter ($http_input_vars['grp_id'], true);
+    $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true);
     if (!isset ($grp_id) || empty ($grp_id) || ($grp_id == 0)) {
         COM_errorLog ('Attempted to delete group grp_id=' . $grp_id);
         $display .= COM_refresh ($_CONF['site_admin_url'] . '/group.php');
@@ -805,39 +815,35 @@
         $display .= deleteGroup ($grp_id);
     }
 } else if (($mode == $LANG_ACCESS['save']) && !empty ($LANG_ACCESS['save'])) {
-    $display .= savegroup ($HTTP_POST_VARS['grp_id'],
-                           $HTTP_POST_VARS['grp_name'],
-                           $HTTP_POST_VARS['grp_descr'],
-                           $HTTP_POST_VARS['grp_gl_core'],
-                           $HTTP_POST_VARS['features'],
-                           $HTTP_POST_VARS[$_TABLES['groups']]);
+    $display .= savegroup ($_POST['grp_id'], $_POST['grp_name'],
+                           $_POST['grp_descr'], $_POST['grp_gl_core'],
+                           $_POST['features'], $_POST[$_TABLES['groups']]);
 } else if ($mode == 'savegroupusers') {
-    $grp_id = COM_applyFilter ($http_input_vars['grp_id'], true);
-    $display .= savegroupusers ($grp_id, $HTTP_POST_VARS['groupmembers']);
+    $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true);
+    $display .= savegroupusers ($grp_id, $_POST['groupmembers']);
 } else if ($mode == 'edit') {
-    $grp_id = COM_applyFilter ($http_input_vars['grp_id'], true);
-    $display .= COM_siteHeader ('menu');
+    $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true);
+    $display .= COM_siteHeader ('menu', $LANG_ACCESS['groupeditor']);
     $display .= editgroup ($grp_id);
     $display .= COM_siteFooter ();
 } else if ($mode == 'listusers') {
-    $grp_id = COM_applyFilter ($http_input_vars['grp_id'], true);
-    $page = COM_applyFilter ($http_input_vars['page'], true);
+    $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true);
     $display .= COM_siteHeader ('menu');
-    $display .= listusers ($grp_id, $page);
+    $display .= listusers ($grp_id);
     $display .= COM_siteFooter ();
 } else if ($mode == 'editusers') {
-    $grp_id = COM_applyFilter ($http_input_vars['grp_id'], true);
-    $page = COM_applyFilter ($http_input_vars['page'], true);
+    $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true);
+    $page = COM_applyFilter ($_REQUEST['page'], true);
     $display .= COM_siteHeader ('menu');
     $display .= editusers ($grp_id, $page);
     $display .= COM_siteFooter ();
 } else { // 'cancel' or no mode at all
-    $display .= COM_siteHeader ('menu');
-    if (isset ($http_input_vars['msg'])) {
-        $display .= COM_showMessage (COM_applyFilter ($http_input_vars['msg'], true));
+    $display .= COM_siteHeader ('menu', $LANG28[38]);
+    if (isset ($_REQUEST['msg'])) {
+        $display .= COM_showMessage (COM_applyFilter ($_REQUEST['msg'], true));
     }
-    $display .= listgroups ();
-    $display .= COM_siteFooter ();
+    $display .= listgroups();
+    $display .= COM_siteFooter();
 }
 
 echo $display;
diff -ruN 1.3.11sr1/admin/install/addindex.php 1.4.0sr5-1/admin/install/addindex.php
--- 1.3.11sr1/admin/install/addindex.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/addindex.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,145 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | addindex.php                                                              |
+// | Add index field to Geeklog tables.                                        |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2002 by the following authors:                              |
+// |                                                                           |
+// | Authors: Dirk Haun        - dirk@haun-online.de                           |
+// | with the help of Jeffrey Schoolcraft, Marc von Ahn, and Rob Griffiths     |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// 
+// $Id: addindex.php,v 1.3 2005/06/26 08:38:32 mjervis Exp $
+
+
+// Add missing indexes to Geeklog tables
+//
+// Date        Version  Author
+// ----        -------  ------
+//  2002-10-22  0.1      Dirk Haun <dirk@haun-online.de>
+//              Initial version
+//  2002-11-24  0.2      Dirk Haun <dirk@haun-online.de>
+//              Added key names for the indexes, added authentication check
+
+require_once('../../lib-common.php');
+
+if (!SEC_inGroup ('Root')) {
+    COM_errorLog ("Access denied to {$PHP_SELF} for user {$_USER['username']}, IP=" . $_SERVER['REMOTE_ADDR']);
+    $display = COM_siteHeader('menu');
+    $display .= COM_startBlock($LANG20[1]);
+    $display .= $LANG20[6];
+    $display .= COM_endBlock();
+    $display .= COM_siteFooter();
+    echo $display;
+    exit;
+}
+
+// $_DEBUG = 1;
+
+// list according to Jeff's post on geeklog-devel (2002-10-14)
+// plus stories.hits (Rob Griffiths) plus group_assignments.ug_uid
+// <http://www.geeklog.net/article.php?story=20021011151827972>
+
+$index['comments']          = "cid,type,sid,date,uid";
+$index['stories']           = "sid,tid,date,uid,frontpage,featured,hits";
+$index['blocks']            = "bid,is_enabled,tid,type";
+$index['events']            = "eid,datestart,dateend,event_type";
+$index['links']             = "lid,category,date";
+$index['pollquestions']     = "qid,date,display,commentcode,statuscode";
+$index['staticpage']        = "sp_id,sp_uid,sp_date,sp_onmenu";
+$index['userindex']         = "uid,noboxes,maxstories";
+$index['group_assignments'] = "ug_main_grp_id,ug_uid";
+
+
+echo COM_siteHeader('menu');
+echo COM_startBlock("Updating indexes ...");
+
+foreach ($index as $table=>$fields) {
+
+    $idx = explode (",", $fields);
+
+    echo "<p>Table: {$_TABLES[$table]}</p>";
+
+    if ($_DEBUG) {
+        echo "<p>Wanted: ";
+        foreach ($idx as $id) {
+            echo "$id, ";
+        }
+        echo "</p>";
+    }
+
+    $result = DB_query ("show index from {$_TABLES[$table]}");
+    $nrows = DB_numRows ($result);
+    $exidx = array ();
+    for ($i = 0; $i < $nrows; $i++) {
+        $A = DB_fetchArray ($result);
+        $exidx[] = $A['Column_name'];
+    }
+    $newidx = array_diff ($idx, $exidx);
+
+    if ($_DEBUG) {
+        echo "<p>Existing: ";
+        foreach ($exidx as $ex) {
+            echo "$ex, ";
+        }
+        echo "</p>";
+    }
+
+    if ($_DEBUG) {
+        echo "<p>Need to add: ";
+        foreach ($newidx as $ne) {
+            echo "$ne, ";
+        }
+        echo "</p>";
+    }
+
+    if (sizeof ($newidx) > 0) {
+        echo "<p>Adding indexes ...<br>";
+        foreach ($newidx as $ne) {
+            $idxname = $table . '_' . $ne;
+            echo "Adding index \"$idxname\"";
+            flush ();
+
+            $idxtimer = new timerobject ();
+            $idxtimer->setPercision (4);
+            $idxtimer->startTimer ();
+
+            DB_query("ALTER TABLE {$_TABLES[$table]} ADD INDEX $idxname ($ne)");
+
+            $idxtime = $idxtimer->stopTimer ();
+            $idxtimer->setPercision (4);
+            echo " in $idxtime seconds<br>";
+        }
+        echo "Done!</p>";
+    } else {
+        echo "<p>No index to add for table {$_TABLES[$table]}</p>";
+    }
+
+    echo "<hr>";
+}
+
+echo COM_endBlock();
+echo COM_siteFooter();
+
+?>
diff -ruN 1.3.11sr1/admin/install/check.php 1.4.0sr5-1/admin/install/check.php
--- 1.3.11sr1/admin/install/check.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/check.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,225 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | check.php                                                                 |
+// |                                                                           |
+// | Geeklog check installation script                                         |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2002-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Dirk Haun        - dirk AT haun-online DOT de                    |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: check.php,v 1.8 2006/01/28 17:48:49 dhaun Exp $
+
+/**
+* This script tests the file and directory permissions, thus addressing the
+* most common errors / omissions when setting up a new Geeklog site ...
+*
+* @author   Dirk Haun <dirk AT haun-online DOT de>
+*
+*/
+
+require_once ('../../lib-common.php');
+
+$numTests   = 7;  // total number of tests to perform
+$successful = 0;  // number of successful tests
+$failed     = 0;  // number of failed tests
+$notTested  = 0;  // number of tests that were skipped (for disabled features)
+
+echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' . LB;
+echo '<html>' . LB;
+echo '<head>' . LB;
+echo '<title>Geeklog installation check</title>' . LB;
+echo '</head>' . LB;
+echo '<body text="#000000" bgcolor="#ffffff">' . LB;
+echo '<h2>Testing your Geeklog installation ...</h2>' . LB;
+
+echo '<p>Testing <b>logs</b> directory ' . $_CONF['path_log'] . ' ...<br>' . LB;
+$errfile = @fopen ($_CONF['path_log'] . 'error.log', 'a');
+if ($errfile) fclose ($errfile);
+$accfile = @fopen ($_CONF['path_log'] . 'access.log', 'a');
+if ($accfile) fclose ($accfile);
+
+if (!$errfile || !$accfile) {
+    echo '<font color="#ff0000">Could not open ';
+    if (!$errfile) {
+        echo '<b>error.log</b> ';
+    }
+    if (!$errfile && !$accfile) {
+        echo 'and ';
+    }
+    if (!$accfile) {
+        echo '<b>access.log</b> ';
+    }
+    echo 'for writing.</font><br>Please check that you have set the <b>logs</b> directory <em>and</em> the files <b>error.log</b> and <b>access.log</b> in that directory to <b>chmod 775</b>.' . LB;
+    $logPerms = sprintf ("%3o", @fileperms ($_CONF['path_log']) & 0777);
+    $errPerms = sprintf ("%3o", @fileperms ($_CONF['path_log'] . 'error.log') & 0777);
+    $accPerms = sprintf ("%3o", @fileperms ($_CONF['path_log'] . 'access.log') & 0777);
+    echo '<table cellspacing="0" cellpadding="0" border="0">' . LB;
+    echo "<tr><td>Current permissions for <b>logs</b>:&nbsp;</td><td>$logPerms</td></tr>" . LB;
+    echo "<tr><td>Current permissions for <b>error.log</b>:&nbsp;</td><td>$errPerms</td></tr>" . LB;
+    echo "<tr><td>Current permissions for <b>access.log</b>:&nbsp;</td><td>$accPerms</td></tr>" . LB;
+    echo '</table>' . LB;
+    $failed++;
+} else {
+    echo '<b>logs</b> directory and the <b>error.log</b> and <b>access.log</b> files are okay.' . LB;
+    $successful++;
+}
+
+echo '<p>Testing <b>backend</b> directory ' . SYND_getFeedPath() . ' ...<br>' . LB;
+if ($_CONF['backend'] > 0) {
+    if (!$file = @fopen ($_CONF['rdf_file'], 'w')) {
+        echo '<font color="#ff0000">Could not open the RSS file ' . $_CONF['rdf_file'] . ' for writing.</font><br>Please check that you have set both the <b>backend</b> directory <em>and</em> the <b>geeklog.rss</b> file in that directory to <b>chmod 775</b>.' . LB;
+        $endPerms = sprintf ("%3o", @fileperms (SYND_getFeedPath()) & 0777);
+        $rdfPerms = sprintf ("%3o", @fileperms ($_CONF['rdf_file']) & 0777);
+        echo '<table cellspacing="0" cellpadding="0" border="0">' . LB;
+        echo "<tr><td>Current permissions for <b>backend</b>:&nbsp;</td><td>$endPerms</td></tr>" . LB;
+        echo "<tr><td>Current permissions for <b>geeklog.rss</b>:&nbsp;</td><td>$rdfPerms</td></tr>" . LB;
+        echo '</table>' . LB;
+        $failed++;
+    } else {
+        fclose ($file);
+        echo '<b>backend</b> directory and the <b>geeklog.rss</b> file are okay.' . LB;
+        $successful++;
+    }
+} else {
+    echo '<p>Export of Geeklog headlines is switched off - <b>backend</b> directory not tested.</p>' . LB;
+    $notTested++;
+}
+
+if ($_CONF['allow_user_photo'] > 0) {
+    echo '<p>Testing <b>userphotos</b> directory ' . $_CONF['path_images'] . 'userphotos/ ...<br>' . LB;
+    if (!$file = @fopen ($_CONF['path_images'] . 'userphotos/test.gif', 'w')) {
+        echo '<font color="#ff0000">Could not write to <b>' . $_CONF['path_images'] . 'userphotos/</b>.</font><br>Please make sure this directory exists and is set to <b>chmod 775</b>.<br>' . LB; 
+        echo 'Current permissions for <b>userphotos</b>: ' . sprintf ("%3o", @fileperms ($_CONF['path_images'] . 'userphotos/') & 0777);
+        $failed++;
+    } else {
+        fclose ($file);
+        unlink ($_CONF['path_images'] . 'userphotos/test.gif');
+        echo '<b>userphotos</b> directory is okay.' . LB;
+        $successful++;
+    }
+} else {
+    echo '<p>User photos are disabled - <b>userphotos</b> directory not tested.' . LB;
+    $notTested++;
+}
+
+if ($_CONF['maximagesperarticle'] > 0) {
+    echo '<p>Testing <b>articles</b> directory ' . $_CONF['path_images'] . 'articles/ ...<br>' . LB;
+    if (!$file = @fopen ($_CONF['path_images'] . 'articles/test.gif', 'w')) {
+        echo '<font color="#ff0000">Could not write to <b>' . $_CONF['path_images'] . 'articles/</b>.</font><br>Please make sure this directory exists and is set to <b>chmod 775</b>.<br>' . LB; 
+        echo 'Current permissions for <b>articles</b>: ' . sprintf ("%3o", @fileperms ($_CONF['path_images'] . 'articles/') & 0777);
+        $failed++;
+    } else {
+        fclose ($file);
+        unlink ($_CONF['path_images'] . 'articles/test.gif');
+        echo '<b>articles</b> directory is okay.' . LB;
+        $successful++;
+    }
+} else {
+    echo '<p>Images in articles are disabled - <b>articles</b> directory not tested.' . LB;
+    $notTested++;
+}
+
+echo '<p>Testing <b>topics</b> directory ' . $_CONF['path_images'] . 'topics/ ...<br>' . LB;
+if (!$file = @fopen ($_CONF['path_images'] . 'topics/test.gif', 'w')) {
+    echo '<font color="#ff0000">Could not write to <b>' . $_CONF['path_images'] . 'topics/</b>.</font><br>Please make sure this directory exists and is set to <b>chmod 775</b>.<br>' . LB; 
+    echo 'Current permissions for <b>topics</b>: ' . sprintf ("%3o", @fileperms ($_CONF['path_images'] . 'articles/') & 0777);
+    $failed++;
+} else {
+    fclose ($file);
+    unlink ($_CONF['path_images'] . 'topics/test.gif');
+    echo '<b>topics</b> directory is okay.' . LB;
+    $successful++;
+}
+
+/*
+
+if ($_CONF['pdf_enabled'] != 0) {
+    echo '<p>Testing <b>pdfs</b> directory ' . $_CONF['path_pdf'] . ' ...<br>' . LB;
+    if (!$file = @fopen ($_CONF['path_pdf'] . 'test.pdf', 'w')) {
+        echo '<font color="#ff0000">Could not write to <b>' . $_CONF['path_pdf'] . '</b>.</font><br>Please make sure this directory exists and is set to <b>chmod 775</b>.<br>' . LB; 
+        echo 'Current permissions for <b>pdfs</b>: ' . sprintf ("%3o", @fileperms ($_CONF['path_pdf']) & 0777);
+        $failed++;
+    } else {
+        fclose ($file);
+        unlink ($_CONF['path_pdf'] . 'test.pdf');
+        echo '<b>pdfs</b> directory is okay.' . LB;
+        $successful++;
+    }
+} else {
+    echo '<p>PDF support is disabled - <b>pdfs</b> directory not tested.' . LB;
+    $notTested++;
+}
+
+*/
+
+if ($_CONF['allow_mysqldump'] == 1) {
+    echo '<p>Testing <b>backups</b> directory ' . $_CONF['backup_path'] . ' ...<br>' . LB;
+    if (!$file = @fopen ($_CONF['backup_path'] . 'test.txt', 'w')) {
+        echo '<font color="#ff0000">Could not write to <b>' . $_CONF['backup_path'] . '</b>.</font><br>Please make sure this directory exists and is set to <b>chmod 775</b>.<br>' . LB; 
+        echo 'Current permissions for <b>backups</b>: ' . sprintf ("%3o", @fileperms ($_CONF['backup_path']) & 0777);
+        $failed++;
+    } else {
+        fclose ($file);
+        unlink ($_CONF['backup_path'] . 'test.txt');
+        echo '<b>backups</b> directory is okay.' . LB;
+        $successful++;
+    }
+} else {
+    echo '<p>Database backups are disabled - <b>backups</b> directory not tested.' . LB;
+    $notTested++;
+}
+
+echo '<p>Testing <b>data</b> directory ' . $_CONF['path_data'] . ' ...<br>' . LB;
+if (!$file = @fopen ($_CONF['path_data'] . 'test.txt', 'w')) {
+    echo '<font color="#ff0000">Could not write to <b>' . $_CONF['path_data'] . '</b>.</font><br>Please make sure this directory exists and is set to <b>chmod 775</b>.<br>' . LB; 
+    echo 'Current permissions for <b>data</b>: ' . sprintf ("%3o", @fileperms ($_CONF['path_data']) & 0777);
+    $failed++;
+} else {
+    fclose ($file);
+    unlink ($_CONF['path_data'] . 'test.txt');
+    echo '<b>data</b> directory is okay.' . LB;
+    $successful++;
+}
+
+echo "<p><strong>Results:</strong> " . ($numTests - $notTested) . " of $numTests tests performed: $successful successful, ";
+if ($failed > 0) {
+    echo "<font color=\"#ff0000\">$failed failed</font>.</p>" . LB;
+} else {
+    echo "$failed failed.</p>" . LB;
+}
+
+if ($failed > 0) {
+    echo '<h2>Test failed!</h2>';
+    echo '<p><font color="#ff0000"><strong>Warning!</strong> Your Geeklog site is not set up properly. Please fix the errors listed above!</font></p>';
+    echo '<p><strong>Note:</strong> If the above instructions tell you to chmod files and/or directories to 775 but they already are at 775, try <b>chmod 777</b> instead.</p>';
+} else {
+    echo '<h2>Test passed</h2>';
+    echo '<p><strong>Congratulations!</strong> Your Geeklog site is set up properly and ready to go.</p>';
+}
+
+echo '</body>' . LB;
+echo '</html>' . LB;
+
+?>
diff -ruN 1.3.11sr1/admin/install/configinfo.php 1.4.0sr5-1/admin/install/configinfo.php
--- 1.3.11sr1/admin/install/configinfo.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/configinfo.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,91 @@
+<?php
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | configinfo.php                                                            |
+// |                                                                           |
+// | Display contents of config.php                                            |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2002-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Jeffrey Schoolcraft  - dream AT dr3amscap3 DOT com               |
+// |          Dirk Haun            - dirk AT haun-online DOT de                |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: configinfo.php,v 1.3 2005/09/09 19:13:21 dhaun Exp $
+
+/**
+* This script will display file and permission information based on settings in
+* config.php  This is meant to be as a support tool when asked questions in #geeklog
+*
+*
+* @author   Jeffrey Schoolcraft <dream@dr3amscap3.com>
+*
+*/
+
+if (file_exists ('../../../config.php')) {
+    require_once('../../../config.php');
+} else if (file_exists ('../../lib-common.php')) {
+    require_once('../../lib-common.php');
+} else {
+    die ("Sorry, config.php not found ...");
+}
+
+$highlight_on 	= '#EFEFEF';
+$highlight_off	= '#D9D9D9';
+
+if (isset ($_CONF['site_url']) &&
+        strpos ($_CONF['site_url'], 'example.com') === false) {
+    $docs = $_CONF['site_url'] . '/docs/config.html#desc_';
+} else {
+    $docs = '../../docs/config.html#desc_';
+}
+
+$display = "<html>\n<head><title>config.php</title></head>\n<body>\n";
+$n = 0;
+$display .= '<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border: thin black solid;">';
+
+foreach($_CONF as $option => $value) {
+	$display .= '<tr';
+	if ($n % 2 == 0) {
+		$display .= ' style="background-color: ' . $highlight_on . '">';
+	} else {
+		$display .= ' style="background-color: ' . $highlight_off . '">';
+	}
+	$display .= '<td style="border: thin black solid; padding: 2px;"><strong>$_CONF[\'<a href="' . $docs . $option . '">' . $option . '</a>\']</strong></td>';
+	if (is_array($value)) {
+		ob_start();
+		print_r($value);
+		$value=nl2br(ob_get_contents());
+		ob_end_clean();
+    } elseif (is_bool ($value)) {
+        $value = ($value === false) ? 'false' : 'true';
+	} elseif (eregi('[a-z]+html', $option)) {
+		$value = htmlentities($value);
+	} elseif (!isset($value)) {
+		$value = '&nbsp;';
+    }
+	$display .= '<td style="border: thin black solid; padding: 2px;"><strong>' . $value . '</strong></td>';
+	$display .= '</tr>';
+	$n++;
+}
+$display .= "</table>\n</body>\n</html>";
+
+echo $display;
diff -ruN 1.3.11sr1/admin/install/info.php 1.4.0sr5-1/admin/install/info.php
--- 1.3.11sr1/admin/install/info.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/info.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<?php phpinfo(); ?>
diff -ruN 1.3.11sr1/admin/install/install.php 1.4.0sr5-1/admin/install/install.php
--- 1.3.11sr1/admin/install/install.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,951 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | install.php                                                               |
+// |                                                                           |
+// | Geeklog installation script.                                              |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// | You don't need to change anything in this file.                           |
+// | Please read docs/install.html which describes how to install Geeklog.     |
+// +---------------------------------------------------------------------------+
+//
+// $Id: install.php,v 1.83.2.1 2006/07/22 15:20:10 dhaun Exp $
+
+// this should help expose parse errors (e.g. in config.php) even when
+// display_errors is set to Off in php.ini
+if (function_exists ('ini_set')) {
+    ini_set ('display_errors', '1');
+}
+error_reporting (E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
+
+if (!defined ("LB")) {
+    define("LB", "\n");
+}
+if (!defined ('VERSION')) {
+    define('VERSION', '1.4.0');
+}
+
+
+/**
+* Returns the PHP version
+*
+* Note: Removes appendices like 'rc1', etc.
+*
+* @return   array   the 3 separate parts of the PHP version number
+*
+*/
+function php_v ()
+{
+    $phpv = explode ('.', phpversion ());
+                                                                                
+    return array ($phpv[0], $phpv[1], (int) $phpv[2]);
+}
+
+/**
+* Returns the MySQL version
+*
+* @return   array   the 3 separate parts of the MySQL version number
+*
+*/
+function mysql_v ()
+{
+    global $_DB_host, $_DB_user, $_DB_pass;
+
+    mysql_connect ($_DB_host, $_DB_user, $_DB_pass);
+    $mysqlv = '';
+
+    // mysql_get_server_info() is only available as of PHP 4.0.5
+    $phpv = php_v ();
+    if (($phpv[0] > 4) || (($phpv[0] == 4) && ($phpv[1] > 0)) ||
+        (($phpv[0] == 4) && ($phpv[1] == 0) && ($phpv[2] > 4))) {
+        $mysqlv = mysql_get_server_info();
+    }
+
+    if (!empty ($mysqlv)) {
+        preg_match ('/^([0-9]+).([0-9]+).([0-9]+)/', $mysqlv, $match);
+        $mysqlmajorv = $match[1];
+        $mysqlminorv = $match[2];
+        $mysqlrev = $match[3];
+    } else {
+        $mysqlmajorv = 0;
+        $mysqlminorv = 0;
+        $mysqlrev = 0;
+    }
+    mysql_close ();
+
+    return array ($mysqlmajorv, $mysqlminorv, $mysqlrev);
+}
+
+/**
+* Shows welcome page and gets location of /path/to/geeklog/. NOTE: this
+* Doesn't use the template class because we need to know the path to geeklog
+* before we can include it.
+*
+*/
+function INST_welcomePage()
+{
+    global $_DB_dbms;
+
+    $retval = '';
+
+    $retval .= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' . LB;
+    $retval .= '<html>' . LB;
+    $retval .= '<head>' . LB;
+    $retval .= '<title>Geeklog ' . VERSION . ' Installation</title>' . LB;
+    $retval .= '</head>' . LB;
+    $retval .= '<body>' . LB;
+
+    // check the minimum requirements
+
+    $phpv = php_v ();
+    if (($phpv[0] < 4) || (($phpv[0] == 4) && ($phpv[1] < 1))) {
+        $retval .= '<h1>PHP 4.1.0 required</h1>' . LB;
+        $retval .= '<p>Sorry, but Geeklog now requires at least PHP 4.1.0 to run. Please upgrade your PHP install or ask your hosting service to do it for you.</p>' . LB;
+        $retval .= '</body>' . LB . '</html>' . LB;
+
+        return $retval;
+    }
+
+    if ($_DB_dbms == 'mysql') {
+        $myv = mysql_v ();
+        if (($myv[0] < 3) || (($myv[0] == 3) && ($myv[1] < 23)) ||
+                (($myv[0] == 3) && ($myv[1] == 23) && ($myv[2] < 2))) {
+            $retval .= '<h1>MySQL 3.23.2 required</h1>' . LB;
+            $retval .= '<p>Sorry, but Geeklog now requires at least MySQL 3.23.2 to run. Please upgrade your MySQL install or ask your hosting service to do it for you.</p>' . LB;
+            $retval .= '</body>' . LB . '</html>' . LB;
+
+            return $retval;
+        }
+    }
+
+    // prepare some hints about what /path/to/geeklog might be ...
+    $thisFile = __FILE__;
+    $thisFile = strtr ($thisFile, '\\', '/'); // replace all '\' with '/'
+    $glPath = $thisFile;
+    $posted = false;
+    for ($i = 0; $i < 4; $i++) {
+        $remains = strrchr ($glPath, '/');
+        if ($remains === false) {
+            break;
+        } else {
+            $glPath = substr ($glPath, 0, -strlen ($remains));
+        }
+    }
+    if (!file_exists ($glPath . '/config.php')) {
+        $glPath = '';
+    }
+    if (empty ($glPath) && !empty ($_POST['geeklog_path'])) {
+        $glPath = $_POST['geeklog_path'];
+        $posted = true;
+    }
+
+    $retval .= '<h1>Geeklog Installation (Step 1 of 2)</h1>' . LB;
+    $retval .= '<p><strong>Welcome and thank you for choosing Geeklog.</strong> You are only 2 steps away from having Geeklog ' . VERSION . ' running on your system.</p>' . LB;
+    $retval .= "<p>If you haven't already done so, you should <strong>edit config.php prior to running this script</strong>. This script will then apply the database structures for both fresh installations and upgrades.</p>" . LB;
+
+    $retval .= '<h2>Upgrading</h2>' . LB;
+    $retval .= '<p>Before we get started it is important that if you are upgrading an existing Geeklog installation you back up your database AND your file system.  <strong>This installation script will alter your Geeklog database.</strong> Also, if you are upgrading from version 1.3 or older you may need your old lib-database.php file so be sure to save a copy of this file. <strong>YOU HAVE BEEN WARNED</strong>!</p>' . LB;
+    $retval .= '<p>Please make sure to select the correct Geeklog version you are coming from on the next screen. This script will do incremental upgrades after this version (i.e. you can upgrade directly from any old version to ' . VERSION . ').</p>' . LB;
+    $retval .= '<p>Please note this script will <strong>not upgrade</strong> any beta or release candidate versions of Geeklog.</p>' . LB;
+
+    $globals_off     = false;
+    $long_arrays_off = false;
+    $public_html     = false;
+    $warn_message    = '';
+    $help_message    = '';
+
+    if (strpos ($_SERVER['PHP_SELF'], 'public_html') !== false) {
+        $public_html = true;
+    }
+
+    if (!ini_get ('register_globals')) {
+        $globals_off = true;
+        $warn_message .= '<code>register_globals = Off</code>';
+        $help_message .= '<code>register_globals = On</code>';
+    }
+
+    $phpv = php_v ();
+    if (($phpv[0] >= 5) && !ini_get ('register_long_arrays')) {
+        $long_arrays_off = true;
+        if (!empty ($warn_message)) {
+            $warn_message .= ' and ';
+        }
+        $warn_message .= '<code>register_long_arrays = Off</code>';
+        if (!empty ($help_message)) {
+            $help_message .= ' and ';
+        }
+        $help_message .= '<code>register_long_arrays = On</code>';
+    }
+
+    if ($globals_off || $long_arrays_off || $public_html) {
+        $retval .= '<h1>Important Note</h1>' . LB;
+
+        if ($public_html) {
+            $retval .= '<p><strong>Note:</strong> "public_html" should never be part of your site\'s URL. Please read the part about public_html in the <a href="../../docs/install.html#public_html">installation instructions</a> again and change your setup accordingly before you proceed.</p>';
+        }
+
+        if ($globals_off || $long_arrays_off) {
+            $retval .= '<p><strong>Note:</strong> You have '
+                    . $warn_message .' in your <tt>php.ini</tt>. While Geeklog itself will work just fine with that setting, some of the available plugins and add-ons may not. You may want to set '
+                    . $help_message . ' (and restart your webserver) if you plan to install any of those add-ons.</p>' . LB;
+            $retval .= '<p>If you don\'t know where your <tt>php.ini</tt> file is located, please <a href="info.php">click here</a>.</p>' . LB;
+        }
+    }
+
+    $retval .= '<h2>Installation Options</h2>' . LB;
+    $install_options = '<option value="new_db">New Database</option>'.LB;
+    $install_options .= '<option value="upgrade_db">Upgrade Database</option>'.LB;
+    $retval .= '<form action="install.php" method="post">' . LB;
+    $retval .= '<table border="0" cellpadding="0" cellspacing="0" width="100%">' . LB;
+    $retval .= '<tr><td align="right">Installation Type:&nbsp;</td><td><select name="install_type">'. LB;
+    $retval .= $install_options;
+    $retval .= '</select></td></tr>'.LB;
+    $retval .= '<tr><td align="right">Path to Geeklog\'s config.php:&nbsp;</td><td><input type="text" name="geeklog_path" value="' . $glPath . '" size="40"></td></tr>'.LB;
+    $retval .= '<tr><td colspan="2" align="left"><p><br><strong>Hint:</strong> The complete path to this file is <b>' . $thisFile;
+    if (!empty ($glPath) && !$posted) {
+        $retval .= '</b><br>and it appears your Path to Geeklog is <b>' . $glPath;
+    }
+    $retval .= '</b></p></td></tr>';
+    $retval .= '<tr><td colspan="2" align="center"><input type="submit" value="Next &gt;&gt;"></td></tr>' . LB;
+    $retval .= '</table>' . LB;
+    $retval .= '<input type="hidden" name="page" value="1">' . LB;
+    $retval .= '</form>' . LB;
+    $retval .= '</body>' . LB;
+    $retval .= '</html>' . LB;
+
+    return $retval;
+}
+
+function INST_identifyGeeklogVersion ()
+{
+    global $_TABLES, $_DB, $_DB_dbms;
+
+    $_DB->setDisplayError (true);
+
+    // simple tests for the version of the database:
+    // "DESCRIBE sometable somefield", ''
+    //  => just test that the field exists
+    // "DESCRIBE sometable somefield", 'somefield,sometype'
+    //  => test that the field exists and is of the given type
+    //
+    // Should always include a test for the current version so that we can
+    // warn the user if they try to run the update again.
+
+    $test = array(
+        '1.4.0'  => array("DESCRIBE {$_TABLES['users']} remoteusername",''),
+        '1.3.11' => array("DESCRIBE {$_TABLES['comments']} sid", 'sid,varchar(40)'),
+        '1.3.10' => array("DESCRIBE {$_TABLES['comments']} lft",''),
+        '1.3.9'  => array("DESCRIBE {$_TABLES['syndication']} fid",''),
+        '1.3.8'  => array("DESCRIBE {$_TABLES['userprefs']} showonline",'')
+
+        // It's hard to (reliably) test for 1.3.7 - let's just hope nobody uses
+        // such an old version any more ...
+    );
+
+    $version = '';
+
+    if ($_DB_dbms == 'mysql') {
+        foreach ($test as $v => $qarray) {
+            $result = DB_query ($qarray[0], 1);
+            if ($result === false) {
+                // error - continue with next test
+            } else if (DB_numRows ($result) > 0) {
+                $A = DB_fetchArray ($result);
+                if (empty ($qarray[1])) {
+                    // test only for existence of field - succeeded
+                    $version = $v;
+                    break;
+                } else {
+                    // test for certain type of field
+                    $tst = explode (',', $qarray[1]);
+
+                    if (($A['Field'] == $tst[0]) && ($A['Type'] == $tst[1])) {
+                        $version = $v;
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    return $version;
+}
+
+function INST_getDatabaseSettings($install_type, $geeklog_path)
+{
+    global $_CONF, $_TABLES;
+
+    $db_templates = new Template ($_CONF['path_system'] . 'install_templates');
+    $db_templates->set_file (array ('db' => 'databasesettings.tpl'));
+    $db_templates->set_var ('geeklog_path', $geeklog_path);
+
+    if ($install_type == 'upgrade_db') {
+        $db_templates->set_var ('upgrade', 1);
+
+        $old_versions = array('1.2.5-1','1.3','1.3.1','1.3.2','1.3.2-1','1.3.3','1.3.4','1.3.5','1.3.6','1.3.7','1.3.8','1.3.9','1.3.10','1.3.11');
+
+        $curv = INST_identifyGeeklogVersion ();
+        if (empty ($curv)) {
+            $curv = $old_versions[count ($old_versions) - 1];
+        }
+        if ($curv == VERSION) {
+            $versiondd = '<tr><td align="left"><b>Database already up to date!</b>' . LB
+                       . '<p>It looks like your database is already up to date. You probably ran the upgrade before. If you need to run the upgrade again, please re-install your database backup first!</td></tr>';
+            $nextbutton = '';
+        } else {
+            $versiondd = '<tr><td align="right"><b>Current Geeklog Version:</b></td><td><select name="version">';
+            foreach ($old_versions as $version) {
+                $versiondd .= '<option';
+                if ($version == $curv) {
+                    $versiondd .= ' selected="selected"';
+                }
+                $versiondd .= '>' . $version . '</option>';
+            }
+            $versiondd .= '</select></td></tr>';
+            $nextbutton = '<input type="submit" name="action" value="Next &gt;&gt;">';
+        }
+        $db_templates->set_var ('UPGRADE_OPTIONS', $versiondd);
+        $db_templates->set_var ('DB_TABLE_OPTIONS', '');
+        $db_templates->set_var ('NEXT_BUTTON', $nextbutton);
+
+    } else {
+
+        // This is a fresh installation
+        $db_templates->set_var ('upgrade', 0);
+
+        if (innodb_supported ()) {
+            $innodb_option = '<tr><td align="left">';
+            $innodb_option .= '<p>Using InnoDB tables may improve performance on (very) large sites, but makes database backups more complicated. Leave the option unchecked unless you know what you\'re doing.</p>';
+            $innodb_option .= '<input type="checkbox" name="innodb"> Use InnoDB tables';
+            $innodb_option .= '</td></tr>';
+            $db_templates->set_var ('UPGRADE_OPTIONS', $innodb_option);
+        } else {
+            $db_templates->set_var ('UPGRADE_OPTIONS',
+                                    '<tr><td>&nbsp;</td></tr>');
+        }
+        $nextbutton = '<input type="submit" name="action" value="Next &gt;&gt;">';
+        $db_templates->set_var ('NEXT_BUTTON', $nextbutton);
+    }
+
+    return $db_templates->parse('output','db');
+}
+
+function INST_createDatabaseStructures ($use_innodb = false)
+{
+    global $_CONF, $_TABLES, $_DB, $_DB_dbms, $_DB_host, $_DB_user, $_DB_pass;
+
+    $_DB->setDisplayError (true);
+
+    // Because the create table syntax can vary from dbms-to-dbms we are
+    // leaving that up to each database driver (e.g. mysql.class.php, 
+    // postgresql.class.php, etc)
+
+    // Get DBMS-specific create table array and data array
+    require_once ($_CONF['path'] . 'sql/' . $_DB_dbms . '_tableanddata.php');
+
+    $progress = '';
+
+    if ($_DB_dbms == 'mysql') {
+
+        foreach ($_SQL as $sql) {
+
+            if ($use_innodb) {
+                $sql = str_replace ('MyISAM', 'InnoDB', $sql);
+            }
+
+            DB_query ($sql);
+        }
+
+    } else { // in the highly unlikely event that we're not on MySQL ...
+
+        foreach ($_SQL as $sql) {
+            DB_query ($sql);
+        }
+
+    }
+
+    // Now insert mandatory data and a small subset of initial data
+    foreach ($_DATA as $data) {
+        $progress .= "executing " . $data . "<br>\n";
+        DB_query ($data);
+    }
+
+    if ($_DB_dbms == 'mysql') {
+
+        // let's try and personalize the Admin account a bit ...
+
+        if (strpos ($_CONF['site_mail'], 'example.com') === false) {
+            DB_query ("UPDATE {$_TABLES['users']} SET email = '" . addslashes ($_CONF['site_mail']) . "' WHERE uid = 2");
+        }
+        if (strpos ($_CONF['site_url'], 'example.com') === false) {
+            DB_query ("UPDATE {$_TABLES['users']} SET homepage = '" . addslashes ($_CONF['site_url']) . "' WHERE uid = 2");
+        }
+    }
+
+    return true;
+}
+
+/**
+* Check for InnoDB table support (usually as of MySQL 4.0, but may be
+* available in earlier versions, e.g. "Max" or custom builds).
+*
+* @return   true = InnoDB tables supported, false = not supported
+*
+*/
+function innodb_supported()
+{
+    $result = DB_query ("SHOW VARIABLES LIKE 'have_innodb'");
+    $A = DB_fetchArray ($result, true);
+
+    if (strcasecmp ($A[1], 'yes') == 0) {
+        $retval = true;
+    } else {
+        $retval = false;
+    }
+
+    return $retval;
+}
+
+
+/*
+* Checks for Static Pages Version
+*
+* @return   0 = not installed, 1 = original plugin, 2 = plugin by Phill or Tom, 3 = v1.3 (center block, etc.), 4 = 1.4 ('in block' flag)
+*
+*/
+function get_SP_Ver()
+{
+    global $_TABLES;
+
+    $retval = 0;
+
+    if (DB_count ($_TABLES['plugins'], 'pi_name', 'staticpages') > 0) {
+        $result = DB_query ("DESCRIBE {$_TABLES['staticpage']}");
+        $numrows = DB_numRows ($result);
+
+        $retval = 1; // assume v1.1 for now ...
+
+        for ($i = 0; $i < $numrows; $i++) {
+            $A = DB_fetchArray ($result, true);
+            if ($A[0] == 'sp_nf') {
+                $retval = 3; // v1.3
+            } elseif ($A[0] == 'sp_pos') {
+                $retval = 2; // v1.2
+            } elseif ($A[0] == 'sp_inblock') {
+                $retval = 4; // v1.4
+                break;
+            }
+        }
+    }
+
+    return $retval;
+}
+
+/**
+* Check if the SpamX plugin is already installed
+*
+* @return   int     1 = is installed, 0 = not installed
+*
+*/
+function get_SPX_Ver()
+{
+    global $_TABLES;
+
+    $retval = 0;
+
+    if (DB_count ($_TABLES['plugins'], 'pi_name', 'spamx') == 1) {
+        $retval = 1;
+    }
+
+    return $retval;
+}
+
+function INST_doDatabaseUpgrades($current_gl_version, $table_prefix)
+{
+    global $_TABLES, $_CONF, $_SP_CONF, $_DB, $_DB_dbms, $_DB_table_prefix;
+
+    $_DB->setDisplayError (true);
+
+    // Because the upgrade sql syntax can vary from dbms-to-dbms we are
+    // leaving that up to each Geeklog database driver
+
+    $done = false;
+    $progress = '';
+    while ($done == false) {
+        switch ($current_gl_version) {
+        case '1.2.5-1':
+            // Get DMBS-specific update sql
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.2.5-1_to_1.3.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                $progress .= "executing " . current($_SQL) . "<br>\n";
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+            // OK, now we need to add all users except anonymous to the All Users group and Logged in users group
+            // I can hard-code these group numbers because the group table was JUST created with these numbers
+            $result = DB_query("SELECT uid FROM {$_TABLES['users']} WHERE uid <> 1");
+            $nrows = DB_numRows($result);
+            for ($i = 1; $i <= $nrows; $i++) {
+                $U = DB_fetchArray($result);
+                DB_query("INSERT INTO {$_TABLES['group_assignments']} VALUES (2, {$U['uid']}, NULL)");
+                DB_query("INSERT INTO {$_TABLES['group_assignments']} VALUES (13, {$U['uid']}, NULL)");
+            }
+            // Now take care of any orphans off the user table...and let me curse MySQL lack for supporting foreign
+            // keys at this time ;-)
+            $result = DB_query("SELECT MAX(uid) FROM {$_TABLES['users']}");
+            $ITEM = DB_fetchArray($result);
+            $max_uid = $ITEM[0];
+            if (!empty($max_uid) AND $max_uid <> 0) {
+                DB_query("DELETE FROM {$_TABLES['userindex']} WHERE uid > $max_uid");
+                DB_query("DELETE FROM {$_TABLES['userinfo']} WHERE uid > $max_uid");
+                DB_query("DELETE FROM {$_TABLES['userprefs']} WHERE uid > $max_uid");
+                DB_query("DELETE FROM {$_TABLES['usercomment']} WHERE uid > $max_uid");
+            }
+            $current_gl_version = '1.3';
+            $_SQL = '';
+            break;
+        case '1.3':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3_to_1.3.1.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                $progress .= "executing " . current($_SQL) . "<br>\n";
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+            $current_gl_version = '1.3.1';
+            $_SQL = '';
+            break;
+        case '1.3.1':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.1_to_1.3.2.php');
+             for ($i = 1; $i <= count($_SQL); $i++) {
+                $progress .= "executing " . current($_SQL) . "<br>\n";
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+            $current_gl_version = '1.3.2-1';
+            $_SQL = '';
+            break;
+        case '1.3.2':
+        case '1.3.2-1':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.2-1_to_1.3.3.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                $progress .= "executing " . current($_SQL) . "<br>\n";
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+            // Now we need to switch how user blocks are stored.  Right now we only store the blocks the
+            // user wants.  This will switch it to store the ones they don't want which allows us to add
+            // new blocks and ensure they are shown to the user.
+            $result = DB_query("SELECT {$_TABLES['users']}.uid,boxes FROM {$_TABLES['users']},{$_TABLES['userindex']} WHERE boxes IS NOT NULL AND boxes <> '' AND {$_TABLES['users']}.uid = {$_TABLES['userindex']}.uid");
+            $nrows = DB_numRows($result);
+            for ($i = 1; $i <= $nrows; $i++) {
+                $row = DB_fetchArray($result);
+                $ublocks = str_replace(' ',',',$row['boxes']);
+                $result2 = DB_query("SELECT bid,name FROM {$_TABLES['blocks']} WHERE bid NOT IN ($ublocks)");
+                $newblocks = '';
+                for ($x = 1; $x <= DB_numRows($result2); $x++) {
+                    $curblock = DB_fetchArray($result2);
+                    if ($curblock['name'] <> 'user_block' AND $curblock['name'] <> 'admin_block' AND $curblock['name'] <> 'section_block') {
+                        $newblocks .= $curblock['bid'];
+                        if ($x <> DB_numRows($result2)) {
+                            $newblocks .= ' ';
+                        }
+                    }
+                }
+                DB_query("UPDATE {$_TABLES['userindex']} SET boxes = '$newblocks' WHERE uid = {$row['uid']}");
+            }
+            $current_gl_version = '1.3.3';
+            $_SQL = '';
+            break;
+        case '1.3.3':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.3_to_1.3.4.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+
+            $current_gl_version = '1.3.4';
+            $_SQL = '';
+            break;
+	case '1.3.4':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.4_to_1.3.5.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+            $result = DB_query("SELECT ft_id FROM {$_TABLES['features']} WHERE ft_name = 'user.mail'");
+            $row = DB_fetchArray($result);
+            $mail_ft = $row['ft_id'];
+            $result = DB_query("SELECT grp_id FROM {$_TABLES['groups']} WHERE grp_name = 'Mail Admin'");
+            $row = DB_fetchArray($result);
+            $group_id = $row['grp_id'];
+            DB_query("INSERT INTO {$_TABLES['access']} (acc_grp_id, acc_ft_id) VALUES ($group_id, $mail_ft)");
+
+            $current_gl_version = '1.3.5';
+            $_SQL = '';
+            break;
+        case '1.3.5':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.5_to_1.3.6.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+
+            if (!empty ($_DB_table_prefix)) {
+                DB_query ("RENAME TABLE staticpage TO {$_TABLES['staticpage']}");
+            }
+
+            $current_gl_version = '1.3.6';
+            $_SQL = '';
+            break;
+        case '1.3.6':
+            // fix wrong permissions value
+            DB_query ("UPDATE {$_TABLES['topics']} SET perm_anon = 2 WHERE perm_anon = 3");
+
+            // check for existence of 'date' field in gl_links table
+            DB_query ("SELECT date FROM {$_TABLES['links']}", 1);
+            $dterr = DB_error ();
+            if (strpos ($dterr, 'date') > 0) {
+                DB_query ("ALTER TABLE {$_TABLES['links']} ADD date datetime default NULL");
+            }
+
+            // Fix primary key so that more than one user can add an event
+            // to his/her personal calendar.
+            DB_query ("ALTER TABLE {$_TABLES['personal_events']} DROP PRIMARY KEY, ADD PRIMARY KEY (eid,uid)");
+
+            $current_gl_version = '1.3.7';
+            $_SQL = '';
+            break;
+        case '1.3.7':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.7_to_1.3.8.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+
+            // upgrade Static Pages plugin
+            $spversion = get_SP_ver ();
+            if ($spversion == 1) { // original version
+                DB_query ("ALTER TABLE {$_TABLES['staticpage']} "
+                    . "ADD COLUMN group_id mediumint(8) unsigned DEFAULT '1',"
+                    . "ADD COLUMN owner_id mediumint(8) unsigned DEFAULT '1',"
+                    . "ADD COLUMN perm_owner tinyint(1) unsigned DEFAULT '3',"
+                    . "ADD COLUMN perm_group tinyint(1) unsigned DEFAULT '2',"
+                    . "ADD COLUMN perm_members tinyint(1) unsigned DEFAULT '2',"
+                    . "ADD COLUMN perm_anon tinyint(1) unsigned DEFAULT '2',"
+                    . "ADD COLUMN sp_php tinyint(1) unsigned DEFAULT '0',"
+                    . "ADD COLUMN sp_nf tinyint(1) unsigned DEFAULT '0',"
+                    . "ADD COLUMN sp_centerblock tinyint(1) unsigned NOT NULL default '0',"
+                    . "ADD COLUMN sp_tid varchar(20) NOT NULL default 'none',"
+                    . "ADD COLUMN sp_where tinyint(1) unsigned NOT NULL default '1'");
+                DB_query ("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) VALUES ('staticpages.PHP','Ability to use PHP in static pages')");
+                $php_id = DB_insertId ();
+                $group_id = DB_getItem ($_TABLES['groups'], 'grp_id', "grp_name = 'Static Page Admin'");
+                DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($php_id, $group_id)");
+            } elseif ($spversion == 2) { // extended version by Phill or Tom
+                DB_query ("ALTER TABLE {$_TABLES['staticpage']} "
+                    . "DROP COLUMN sp_pos,"
+                    . "DROP COLUMN sp_search_keywords,"
+                    . "ADD COLUMN sp_nf tinyint(1) unsigned DEFAULT '0',"
+                    . "ADD COLUMN sp_centerblock tinyint(1) unsigned NOT NULL default '0',"
+                    . "ADD COLUMN sp_tid varchar(20) NOT NULL default 'none',"
+                    . "ADD COLUMN sp_where tinyint(1) unsigned NOT NULL default '1'");
+            }
+
+            if ($spversion > 0) {
+                // update plugin version number
+                DB_query ("UPDATE {$_TABLES['plugins']} SET pi_version = '1.3', pi_gl_version = '1.3.8' WHERE pi_name = 'staticpages'");
+
+                // remove Static Pages 'lock' flag
+                DB_query ("DELETE FROM {$_TABLES['vars']} WHERE name = 'staticpages'");
+
+                // remove Static Pages Admin group id
+                DB_query ("DELETE FROM {$_TABLES['vars']} WHERE name = 'sp_group_id'");
+
+                if ($spversion == 1) {
+                    $result = DB_query ("SELECT DISTINCT sp_uid FROM {$_TABLES['staticpage']}");
+                    $authors = DB_numRows ($result);
+                    for ($i = 0; $i < $authors; $i++) {
+                        $A = DB_fetchArray ($result);
+                        DB_query ("UPDATE {$_TABLES['staticpage']} SET owner_id = '{$A['sp_uid']}' WHERE sp_uid = '{$A['sp_uid']}'");
+                    }
+                }
+
+                $result = DB_query ("SELECT sp_label FROM {$_TABLES['staticpage']} WHERE sp_title = 'Frontpage'");
+                if (DB_numRows ($result) > 0) {
+                    $A = DB_fetchArray ($result);
+                    if ($A['sp_label'] == 'nonews') {
+                        DB_query ("UPDATE {$_TABLES['staticpage']} SET sp_centerblock = 1, sp_where = 0 WHERE sp_title = 'Frontpage'");
+                    } else if (!empty ($A['sp_label'])) {
+                        DB_query ("UPDATE {$_TABLES['staticpage']} SET sp_centerblock = 1, sp_title = '{$A['sp_label']}' WHERE sp_title = 'Frontpage'");
+                    } else {
+                        DB_query ("UPDATE {$_TABLES['staticpage']} SET sp_centerblock = 1 WHERE sp_title = 'Frontpage'");
+                    }
+                }
+            }
+
+            $current_gl_version = '1.3.8';
+            $_SQL = '';
+            break;
+        case '1.3.8':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.8_to_1.3.9.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+
+            $pos = strrpos ($_CONF['rdf_file'], '/');
+            $filename = substr ($_CONF['rdf_file'], $pos + 1);
+            $sitename = addslashes ($_CONF['site_name']);
+            $siteslogan = addslashes ($_CONF['site_slogan']);
+            DB_query ("INSERT INTO {$_TABLES['syndication']} (title, description, limits, content_length, filename, charset, language, is_enabled, updated, update_info) VALUES ('{$sitename}', '{$siteslogan}', '{$_CONF['rdf_limit']}', {$_CONF['rdf_storytext']}, '{$filename}', '{$_CONF['default_charset']}', '{$_CONF['rdf_language']}', {$_CONF['backend']}, '0000-00-00 00:00:00', NULL)");
+
+            // upgrade static pages plugin
+            $spversion = get_SP_ver ();
+            if ($spversion > 0) {
+                if ($spversion < 4) {
+                    if (!isset ($_SP_CONF['in_block'])) {
+                        $_SP_CONF['in_block'] = 1;
+                    } else if ($_SP_CONF['in_block'] > 1) {
+                        $_SP_CONF['in_block'] = 1;
+                    } else if ($_SP_CONF['in_block'] < 0) {
+                        $_SP_CONF['in_block'] = 0;
+                    }
+                    DB_query ("ALTER TABLE {$_TABLES['staticpage']} ADD COLUMN sp_inblock tinyint(1) unsigned DEFAULT '{$_SP_CONF['in_block']}'");
+                }
+                DB_query ("UPDATE {$_TABLES['plugins']} SET pi_version = '1.4', pi_gl_version = '1.3.9' WHERE pi_name = 'staticpages'");
+            }
+
+            // recreate 'date' field for old links
+            $result = DB_query ("SELECT lid FROM {$_TABLES['links']} WHERE date IS NULL");
+            $num = DB_numRows ($result);
+            if ($num > 0) {
+                for ($i = 0; $i < $num; $i++) {
+                    $A = DB_fetchArray ($result);
+
+                    $myyear = substr ($A['lid'], 0, 4);
+                    $mymonth = substr ($A['lid'], 4, 2);
+                    $myday = substr ($A['lid'], 6, 2);
+                    $myhour = substr ($A['lid'], 8, 2);
+                    $mymin = substr ($A['lid'], 10, 2);
+                    $mysec = substr ($A['lid'], 12, 2);
+
+                    $mtime = mktime ($myhour, $mymin, $mysec,
+                                     $mymonth, $myday, $myyear);
+                    $date = date ("Y-m-d H:i:s", $mtime);
+                    DB_query ("UPDATE {$_TABLES['links']} SET date = '$date' WHERE lid = '{$A['lid']}'");
+                }
+            }
+
+            // remove unused entries left over from deleted groups
+            $result = DB_query ("SELECT grp_id FROM {$_TABLES['groups']}");
+            $num = DB_numRows ($result);
+            $groups = array ();
+            for ($i = 0; $i < $num; $i++) {
+                $A = DB_fetchArray ($result);
+                $groups[] = $A['grp_id'];
+            }
+            $grouplist = '(' . implode (',', $groups) . ')';
+
+            DB_query ("DELETE FROM {$_TABLES['group_assignments']} WHERE (ug_main_grp_id NOT IN $grouplist) OR (ug_grp_id NOT IN $grouplist)");
+
+            $current_gl_version = '1.3.9';
+            $_SQL = '';
+            break;
+	case '1.3.9':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.9_to_1.3.10.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+            commentsToPreorderTree();
+
+            $result = DB_query ("SELECT sid,introtext,bodytext FROM {$_TABLES['stories']}");
+            $numStories = DB_numRows ($result);
+            for ($i = 0; $i < $numStories; $i++) {
+                $A = DB_fetchArray ($result);
+                $related = addslashes (implode ("\n", UPDATE_extractLinks ($A['introtext'] . ' ' . $A['bodytext'])));
+                if (empty ($related)) {
+                    DB_query ("UPDATE {$_TABLES['stories']} SET related = NULL WHERE sid = '{$A['sid']}'");
+                } else {
+                    DB_query ("UPDATE {$_TABLES['stories']} SET related = '$related' WHERE sid = '{$A['sid']}'");
+                }
+            }
+
+            $spversion = get_SP_ver ();
+            if ($spversion > 0) {
+                // no database changes this time, but set new version number
+                DB_query ("UPDATE {$_TABLES['plugins']} SET pi_version = '1.4.1', pi_gl_version = '1.3.10' WHERE pi_name = 'staticpages'");
+            }
+
+            // install SpamX plugin
+            // (also handles updates from version 1.0)
+            install_spamx_plugin ();
+
+            $current_gl_version = '1.3.10';
+            $_SQL = '';
+            break;
+	case '1.3.10':
+            require_once($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.10_to_1.3.11.php');
+            for ($i = 1; $i <= count($_SQL); $i++) {
+                DB_query(current($_SQL));
+                next($_SQL);
+            }
+
+            $current_gl_version = '1.3.11';
+            $_SQL = '';
+            break;
+
+    case '1.3.11':
+            require_once ($_CONF['path'] . 'sql/updates/' . $_DB_dbms . '_1.3.11_to_1.4.0.php');
+            for ($i = 0; $i < count ($_SQL); $i++) {
+                DB_query (current ($_SQL));
+                next ($_SQL);
+            }
+
+            upgrade_addFeature ();
+            upgrade_uniqueGroupNames ();
+
+            $current_gl_version = '1.4.0';
+            $_SQL = '';
+            break;
+
+        default:
+            $done = true;
+        }
+    }
+    return true;
+}
+
+// Main
+if (isset ($_POST['page'])) {
+    $page = $_POST['page'];
+} else {
+    $page = 0;
+}
+
+if (isset ($_POST['action']) && ($_POST['action'] == '<< Previous')) {
+    $page = 0;
+}
+
+// If possible, load the config file so we can get current settings.  If we
+// can't then that means this is a fresh installation OR they want to start
+// with our system defaults.
+
+// Include template class if we got it
+if ($page > 0) {
+    $geeklog_path = trim ($_POST['geeklog_path']);
+    $notapath = false;
+    if (!empty ($geeklog_path)) {
+        // do some sanity checks ...
+
+        if (strpos ($geeklog_path, 'http:') !== false) {
+            $notapath = true;
+        }
+        if (strpos ($geeklog_path, 'config.php') !== false) {
+            $pos = strpos ($geeklog_path, 'config.php');
+            if ($pos + strlen ('config.php') == strlen ($geeklog_path)) {
+                // strip 'config.php' silently ...
+                $geeklog_path = substr ($geeklog_path, 0, $pos);
+            }
+        }
+
+        // silently fix the usual problems with slashes ...
+        $geeklog_path = str_replace ('\\', '/', $geeklog_path);
+        $geeklog_path = str_replace ('//', '/', $geeklog_path);
+        while (substr ($geeklog_path, -1) == '/') {
+            $geeklog_path = substr ($geeklog_path, 0, -1);
+        }
+    }
+
+    if (!$notapath && !empty ($geeklog_path) && file_exists ($geeklog_path . '/config.php')) {
+        require_once($geeklog_path . '/system/classes/template.class.php');
+        require_once($geeklog_path . '/config.php');
+        require_once($geeklog_path . '/system/lib-database.php');
+    } else {
+        $display = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' . LB;
+        $display .= '<html>' . LB;
+        $display .= '<head><title>Geeklog Installation - Error</title></head>' . LB;
+        $display .= '<body bgcolor="#ffffff">' . LB;
+        $display .= '<h2>Geeklog Installation - Error</h2>' . LB;
+        if ($notapath) {
+            $display .= '<p><b>' . $_POST['geeklog_path'] . '</b> is not a path.<br>Please enter the path to where config.php can be found on your webserver\'s file system.</p>';
+        } else {
+            $display .= '<p>Geeklog could not find config.php in the path you just entered: <b>' . $_POST['geeklog_path'] . '</b><br>' . LB;
+            $display .= 'Please check this path and try again. Remember that you should be using absolute paths, starting at the root of your file system.</p>' . LB;
+        }
+        $display .= '<form action="install.php" method="post">' . LB;
+        $display .= '<p align="center"><input type="submit" name="action" value="<< Previous"><input type="hidden" name="geeklog_path" value="' . $_POST['geeklog_path'] . '"></p>' . LB . '</form>';
+        $display .= '</body>' . LB . '</html>';
+        echo $display;
+        exit;
+    }
+}
+
+$display = '';
+
+switch ($page) {
+case 1:
+    if ($_POST['install_type'] == 'complete_upgrade') {
+        $upgrade = 1;
+    } else {
+        $upgrade = 0;
+    }
+    $display .= INST_getDatabaseSettings ($_POST['install_type'],
+                                          $_POST['geeklog_path']); 
+    break;
+
+case 2:
+    if (!empty ($_POST['version'])) {
+        if (INST_doDatabaseUpgrades ($_POST['version'], $_POST['prefix'])) {
+            // Great, installation is complete
+            // Done with installation...redirect to success page
+            echo '<html><head><meta http-equiv="refresh" content="0; URL=' . $_CONF['site_admin_url'] . '/install/success.php"></head></html>';
+        }
+    } else {
+        $use_innodb = false;
+        if (isset ($_POST['innodb']) && ($_POST['innodb'] == 'on')) {
+            $use_innodb = true;
+        }
+        if (INST_createDatabaseStructures ($use_innodb)) {
+            // Done with installation...redirect to success page
+            echo '<html><head><meta http-equiv="refresh" content="0; URL=' . $_CONF['site_admin_url'] . '/install/success.php"></head></html>';
+            // Great, installation is complete
+        }
+    }
+    break;
+
+default:
+    // Ok, let's display a welcome page
+    $display .= INST_welcomePage();
+    break;
+}
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/admin/install/success.php 1.4.0sr5-1/admin/install/success.php
--- 1.3.11sr1/admin/install/success.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/success.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,29 @@
+<?php 
+
+require_once ('../../lib-common.php');
+
+$display = COM_siteHeader ('menu', 'Installation complete');
+$display .= COM_startBlock ('Installation complete');
+$display .= '<h2>Installation of Geeklog ' . VERSION . ' complete!</h2>';
+
+$display .= '<p>Congratulations, you have successfully installed Geeklog. Please take a minute to read the information displayed below.</p>';
+
+$display .= '<p>Then <a href="' . $_CONF['site_url'] . '">click here</a> to go to your site\'s front page and <b>learn about the default login</b>.</p>';
+
+$display .= '<h2>Check Permissions</h2>';
+$display .= '<p>Geeklog requires certain files and directories to be writable. To check if those are set up properly, please use <a href="check.php">this script</a>.</p>';
+
+$display .= '<h2>Security Warning</h2>';
+$display .= '<p>Once your site is up and running, don\'t forget to <strong>remove the install directory</strong>, <tt>' . $_CONF['path_html'] . 'admin/install</tt>, and <strong>change the password</strong> of the default \'Admin\' account.</p>';
+
+// note for those upgrading from Geeklog 1.2.5-1 or older
+if (DB_count ($_TABLES['users'], 'username', 'NewAdmin') > 0) {
+    $display .= '<p><strong>Note:</strong> Because the security model has been changed, we have created a new account with the rights you need to administer your new site.  The username for this new account is <b>NewAdmin</b> and the password is <b>password</b></p>.';
+}
+
+$display .= COM_endBlock ();
+$display .= COM_siteFooter ();
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/admin/install/toinnodb.php 1.4.0sr5-1/admin/install/toinnodb.php
--- 1.3.11sr1/admin/install/toinnodb.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/install/toinnodb.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,107 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | toinnodb.php                                                              |
+// |                                                                           |
+// | Change Geeklog tables from MyISAM to InnoDB.                              |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2004 by the following authors:                              |
+// |                                                                           |
+// | Authors: Dirk Haun - dirk@haun-online.de                                  |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: toinnodb.php,v 1.1 2004/08/14 09:05:11 dhaun Exp $
+
+require_once ('../../lib-common.php');
+
+// bail if user isn't a root user
+if (!SEC_inGroup ('Root')) {
+    $display = COM_siteHeader ('menu');
+    $display .= COM_startBlock ($MESSAGE[30], '',
+                    COM_getBlockTemplate ('_msg_block', 'header'));
+    $display .= $LANG20[6];
+    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    $display .= COM_siteFooter ();
+    COM_accessLog ("User {$_USER['username']} tried to illegally access the optimize database screen.");
+    echo $display;
+    exit;
+}
+
+/**
+* Check for InnoDB table support (usually as of MySQL 4.0, but may be
+* available in earlier versions, e.g. "Max" or custom builds).
+*
+* @return   true = InnoDB tables supported, false = not supported
+*
+*/
+function innodb_supported ()
+{
+    $result = DB_query ("SHOW VARIABLES LIKE 'have_innodb'");
+    $A = DB_fetchArray ($result, true);
+
+    if (strcasecmp ($A[1], 'yes') == 0) {
+        $retval = true;
+    } else {
+        $retval = false;
+    }
+
+    return $retval;
+}
+
+
+// MAIN
+
+echo COM_siteHeader ('menu');
+echo COM_startBlock ('Changing tables to InnoDB');
+
+if (innodb_supported ()) {
+
+    echo '<p>This may take a while ...</p>' . LB;
+    flush ();
+
+    $opt_time = new timerobject ();
+    $opt_time->startTimer ();
+
+    $result = DB_query ("SHOW TABLES");
+    $numTables = DB_numRows ($result);
+    for ($i = 0; $i < $numTables; $i++) {
+        $A = DB_fetchArray ($result, true);
+        if (in_array ($A[0], $_TABLES)) {
+            DB_query ("ALTER TABLE $A[0] TYPE=InnoDB");
+        }
+    }
+
+    $exectime = $opt_time->stopTimer ();
+
+    echo '<p>Changing ' . sizeof ($_TABLES) . ' tables to InnoDB took '
+         . $exectime . ' seconds.<p>' . LB;
+
+} else {
+
+    echo '<p>Sorry, your database does not support InnoDB tables.</p>' . LB;
+
+}
+
+echo COM_endBlock ();
+echo COM_siteFooter ();
+
+?>
diff -ruN 1.3.11sr1/admin/link.php 1.4.0sr5-1/admin/link.php
--- 1.3.11sr1/admin/link.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/link.php	1969-12-31 18:00:00.000000000 -0600
@@ -1,433 +0,0 @@
-<?php
-
-/* Reminder: always indent with 4 spaces (no tabs). */
-// +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
-// +---------------------------------------------------------------------------+
-// | link.php                                                                  |
-// |                                                                           |
-// | Geeklog links administration page.                                        |
-// +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
-// |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
-// +---------------------------------------------------------------------------+
-// |                                                                           |
-// | This program is free software; you can redistribute it and/or             |
-// | modify it under the terms of the GNU General Public License               |
-// | as published by the Free Software Foundation; either version 2            |
-// | of the License, or (at your option) any later version.                    |
-// |                                                                           |
-// | This program is distributed in the hope that it will be useful,           |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
-// | GNU General Public License for more details.                              |
-// |                                                                           |
-// | You should have received a copy of the GNU General Public License         |
-// | along with this program; if not, write to the Free Software Foundation,   |
-// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-//
-// $Id: link.php,v 1.45 2004/09/29 17:43:43 dhaun Exp $
-
-require_once ('../lib-common.php');
-require_once ('auth.inc.php');
-
-// Uncomment the line below if you need to debug the HTTP variables being passed
-// to the script.  This will sometimes cause errors but it will allow you to see
-// the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
-
-// number of links to list per page
-define ('LINKS_PER_PAGE', 50);
-
-$display = '';
-
-if (!SEC_hasRights ('link.edit')) {
-    $display .= COM_siteHeader ('menu');
-    $display .= COM_startBlock ($MESSAGE[30], '',
-                                COM_getBlockTemplate ('_msg_block', 'header'));
-    $display .= $MESSAGE[34];
-    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-    $display .= COM_siteFooter ();
-    COM_accessLog ("User {$_USER['username']} tried to illegally access the link administration screen.");
-    echo $display;
-    exit;
-}
-
-/**
-* Shows the link editor
-*
-* @param    string  $mode   Used to see if we are moderating a link or simply editing one 
-* @param    string  $lid    ID of link to edit
-* @return   string          HTML for the link editor form
-*
-*/
-function editlink ($mode, $lid = '') 
-{
-    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG23, $LANG_ACCESS;
-
-    $retval = '';
-
-    $link_templates = new Template($_CONF['path_layout'] . 'admin/link');
-    $link_templates->set_file('editor','linkeditor.thtml');
-    $link_templates->set_var('site_url', $_CONF['site_url']);
-    $link_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $link_templates->set_var('layout_url',$_CONF['layout_url']);
-    if ($mode <> 'editsubmission' AND !empty($lid)) {
-        $result = DB_query("SELECT * FROM {$_TABLES['links']} WHERE lid ='$lid'");
-        $A = DB_fetchArray($result);
-        $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
-        if ($access == 0 OR $access == 2) {
-            $retval .= COM_startBlock($LANG24[16], '',
-                               COM_getBlockTemplate ('_msg_block', 'header'));
-            $retval .= $LANG23[17];
-            $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-            COM_accessLog("User {$_USER['username']} tried to illegally submit or edit link $lid.");
-            return $retval;
-        }
-    } else {
-        if ($mode == 'editsubmission') {
-            $result = DB_query ("SELECT * FROM {$_TABLES['linksubmission']} WHERE lid = '$lid'");
-            $A = DB_fetchArray($result);
-        }
-        $A['hits'] = 0;
-        $A['owner_id'] = $_USER['uid'];
-        if (isset ($_GROUPS['Link Admin'])) {
-            $A['group_id'] = $_GROUPS['Link Admin'];
-        } else {
-            $A['group_id'] = SEC_getFeatureGroup ('link.edit');
-        }
-        $A['perm_owner'] = 3;
-        $A['perm_group'] = 2;
-        $A['perm_members'] = 2;
-        $A['perm_anon'] = 2;
-        $access = 3;
-    }
-    $retval .= COM_startBlock ($LANG23[1], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    $link_templates->set_var('link_id', $A['lid']);
-    if (!empty($lid) && SEC_hasRights('link.edit')) {
-        $link_templates->set_var ('delete_option', '<input type="submit" value="' . $LANG23[23] . '" name="mode">');
-    }
-    $link_templates->set_var('lang_linktitle', $LANG23[3]);
-    $link_templates->set_var('link_title',
-                             htmlspecialchars (stripslashes ($A['title'])));
-    $link_templates->set_var('lang_linkurl', $LANG23[4]);
-    $link_templates->set_var('max_url_length', 255);
-    $link_templates->set_var('link_url', $A['url']);
-    $link_templates->set_var('lang_includehttp', $LANG23[6]);
-    $link_templates->set_var('lang_category', $LANG23[5]);
-    $result    = DB_query("SELECT DISTINCT category FROM {$_TABLES['links']}");
-    $nrows    = DB_numRows($result);
-    $catdd = '<option value="' . $LANG23[7] . '">' . $LANG23[7] . '</option>';
-    if ($nrows > 0) {
-        for ($i = 1; $i <= $nrows; $i++) {
-            $C = DB_fetchArray($result);
-            $category = $C['category'];
-            $catdd .= '<option value="' . $category . '"';
-            if ($A['category'] == $category) {
-                $catdd .= ' selected="selected"'; 
-            }
-            $catdd .= '>' . $category . '</option>';
-        }
-    }
-    $link_templates->set_var('category_options', $catdd); 
-    $link_templates->set_var('lang_ifotherspecify', $LANG23[20]);
-    $link_templates->set_var('lang_linkhits', $LANG23[8]); 
-    $link_templates->set_var('link_hits', $A['hits']);
-    $link_templates->set_var('lang_linkdescription', $LANG23[9]);
-    $link_templates->set_var('link_description', stripslashes($A['description']));
-    $link_templates->set_var('lang_save', $LANG23[21]); 
-    $link_templates->set_var('lang_cancel', $LANG23[22]); 
-
-    // user access info
-    $link_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
-    $link_templates->set_var('lang_owner', $LANG_ACCESS['owner']);
-    $link_templates->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = {$A['owner_id']}")); 
-    $link_templates->set_var('link_ownerid', $A['owner_id']);
-    $link_templates->set_var('lang_group', $LANG_ACCESS['group']);
-
-    $usergroups = SEC_getUserGroups();
-    if ($access == 3) {
-        $groupdd = '<select name="group_id">' . LB;
-        for ($i = 0; $i < count($usergroups); $i++) {
-            $groupdd .= '<option value="' . $usergroups[key($usergroups)] . '"';
-            if ($A['group_id'] == $usergroups[key($usergroups)]) {
-               $groupdd .= ' selected="selected"';
-            }
-            $groupdd.= '>' . key($usergroups) . '</option>' . LB;
-            next($usergroups);
-        }
-        $groupdd .= '</select>' . LB;
-    } else {
-        // they can't set the group then
-        $groupdd .= DB_getItem($_TABLES['groups'],'grp_name',"grp_id = {$A['group_id']}");
-        $groupdd .= '<input type="hidden" name="group_id" value="' . $A['group_id'] . '">';
-    }
-    $link_templates->set_var('group_dropdown', $groupdd);
-    $link_templates->set_var('lang_permissions', $LANG_ACCESS['permissions']);
-    $link_templates->set_var('lang_permissionskey', $LANG_ACCESS['permissionskey']);
-    $link_templates->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']));
-    $link_templates->set_var('lang_lockmsg', $LANG_ACCESS['permmsg']);
-    $link_templates->parse('output', 'editor');
-    $retval .= $link_templates->finish($link_templates->get_var('output'));
-
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
-}
-
-/**
-* Saves link to the database
-*
-* @param    string  $lid            ID for link
-* @param    string  $category       Category link belongs to
-* @param    string  $categorydd     Category links belong to
-* @param    string  $url            URL of link to save
-* @param    string  $description    Description of link
-* @param    string  $title          Title of link
-* @param    int     $hits           Number of hits for link
-* @param    int     $owner_id       ID of owner
-* @param    int     $group_id       ID of group link belongs to
-* @param    int     $perm_owner     Permissions the owner has
-* @param    int     $perm_group     Permissions the group has
-* @param    int     $perm_members   Permissions members have
-* @param    int     $perm_anon      Permissions anonymous users have
-* @return   string                  HTML redirect or error message
-*
-*/
-function savelink ($lid, $category, $categorydd, $url, $description, $title, $hits, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon) 
-{
-    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG23, $MESSAGE;
-
-    // Convert array values to numeric permission values
-    if (is_array($perm_owner) OR is_array($perm_group) OR is_array($perm_members) OR is_array($perm_anon)) {
-        list($perm_owner,$perm_group,$perm_members,$perm_anon) = SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon);
-    }
-
-    // clean 'em up 
-    $description = addslashes (COM_checkHTML (COM_checkWords ($description)));
-    $title = addslashes (COM_checkHTML (COM_checkWords ($title)));
-    $category = addslashes ($category);
-
-    if (empty ($lid)) {
-        // this is a submission, set default values
-        $lid = COM_makesid ();
-        if (empty ($owner_id)) {
-            $owner_id = $_USER['uid'];
-            if (isset ($_GROUPS['Link Admin'])) {
-                $group_id = $_GROUPS['Link Admin'];
-            } else {
-                $group_id = SEC_getFeatureGroup ('link.edit');
-            }
-            $perm_owner = 3;
-            $perm_group = 2;
-            $perm_members = 2;
-            $perm_anon = 2;
-        }
-    }
-
-    $access = 0;
-    $lid = addslashes ($lid);
-    if (DB_count ($_TABLES['links'], 'lid', $lid) > 0) {
-        $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE lid = '{$lid}'");
-        $A = DB_fetchArray ($result);
-        $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                $A['perm_owner'], $A['perm_group'], $A['perm_members'],
-                $A['perm_anon']);
-    } else {
-        $access = SEC_hasAccess ($owner_id, $group_id, $perm_owner, $perm_group,
-                $perm_members, $perm_anon);
-    }
-    if (($access < 3) || !SEC_inGroup ($group_id)) {
-        $display .= COM_siteHeader ('menu');
-        $display .= COM_startBlock ($MESSAGE[30], '',
-                            COM_getBlockTemplate ('_msg_block', 'header'));
-        $display .= $MESSAGE[31];
-        $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        $display .= COM_siteFooter ();
-        COM_accessLog("User {$_USER['username']} tried to illegally submit or edit link $lid.");
-        echo $display;
-        exit;
-    } elseif (!empty($title) && !empty($description) && !empty($url)) {
-
-        if ($categorydd != $LANG23[7] && !empty($categorydd)) {
-            $category = addslashes ($categorydd);
-        } else if ($categorydd != $LANG23[7]) {
-            echo COM_refresh($_CONF['site_admin_url'] . '/link.php');
-        }
-
-        DB_delete ($_TABLES['linksubmission'], 'lid', $lid);
-        DB_delete ($_TABLES['links'], 'lid', $lid);
-
-        DB_save ($_TABLES['links'], 'lid,category,url,description,title,date,hits,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon', "$lid,'$category','$url','$description','$title',NOW(),'$hits',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon");
-        COM_rdfUpToDateCheck ();
-
-        return COM_refresh ($_CONF['site_admin_url'] . '/link.php?msg=15');
-    } else {
-        $retval .= COM_siteHeader('menu');
-        $retval .= COM_errorLog($LANG23[10],2);
-        if (DB_count ($_TABLES['links'], 'lid', $lid) > 0) {
-            $retval .= editlink ($mode, $lid);
-        } else {
-            $retval .= editlink ($mode, '');
-        }
-        $retval .= COM_siteFooter();
-        return $retval;
-    }
-}
-
-/**
-* Lists all the links in the database
-*
-* @param    int     $page   page number to display
-* @return   string          HTML for list of links
-*
-*/
-function listlinks ($page = 1) 
-{
-    global $_CONF, $_TABLES, $LANG23, $LANG_ACCESS;
-
-    $retval = '';
-
-    if ($page <= 0) {
-        $page = 1;
-    }
-
-    $retval .= COM_startBlock ($LANG23[11], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    $link_templates = new Template($_CONF['path_layout'] . 'admin/link');
-    $link_templates->set_file(array('list'=>'linklist.thtml', 'row'=>'listitem.thtml'));
-    $link_templates->set_var('site_url', $_CONF['site_url']);
-    $link_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $link_templates->set_var('layout_url', $_CONF['layout_url']);
-    $link_templates->set_var('lang_newlink', $LANG23[18]);
-    $link_templates->set_var('lang_adminhome', $LANG23[19]);
-    $link_templates->set_var('lang_instructions', $LANG23[12]);
-    $link_templates->set_var('lang_linktitle', $LANG23[13]);
-    $link_templates->set_var('lang_access', $LANG_ACCESS['access']);
-    $link_templates->set_var('lang_linkcategory', $LANG23[14]);
-    $link_templates->set_var('lang_linkurl', $LANG23[15]); 
-
-    $limit = (LINKS_PER_PAGE * $page) - LINKS_PER_PAGE;
-    $result = DB_query("SELECT * FROM {$_TABLES['links']}" . COM_getPermSQL () . " ORDER BY category ASC,title LIMIT $limit," . LINKS_PER_PAGE);
-    $nrows = DB_numRows($result);
-    for ($i = 0; $i < $nrows; $i++) {
-        $lcount = (LINKS_PER_PAGE * ($page - 1)) + $i + 1;
-        $A = DB_fetchArray($result);
-        $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
-        if ($access > 0) {
-            if ($access == 3) {
-               $access = $LANG_ACCESS['edit'];
-            } else {
-               $access = $LANG_ACCESS['readonly'];
-            }
-            $link_templates->set_var('link_id', $A['lid']);
-            $link_templates->set_var('link_name', stripslashes($A['title']));
-            $link_templates->set_var('link_access', $access);
-            $link_templates->set_var('link_category', $A['category']);
-            $link_templates->set_var('link_url', $A['url']);
-            $link_templates->set_var('row_num', $lcount);
-            $link_templates->parse('link_row', 'row', true);
-        }
-    }
-    $nresult = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['links']}" . COM_getPermSQL ());
-    $N = DB_fetchArray ($nresult);
-    $numlinks = $N['count'];
-    if ($numlinks > LINKS_PER_PAGE) {
-        $baseurl = $_CONF['site_admin_url'] . '/link.php';
-        $numpages = ceil ($numlinks / LINKS_PER_PAGE);
-        $link_templates->set_var ('google_paging',
-                COM_printPageNavigation ($baseurl, $page, $numpages));
-    } else {
-        $link_templates->set_var ('google_paging', '');
-    }
-    $link_templates->parse('output','list');
-    $retval .= $link_templates->finish($link_templates->get_var('output'));
-
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
-}
-
-/**
-* Delete a link
-*
-* @param    string  $lid    id of link to delete
-* @return   string          HTML redirect
-*
-*/
-function deleteLink ($lid)
-{
-    global $_CONF, $_TABLES, $_USER;
-
-    $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE lid ='$lid'");
-    $A = DB_fetchArray ($result);
-    $access = SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'],
-            $A['perm_group'], $A['perm_members'], $A['perm_anon']);
-    if ($access < 3) {
-        COM_accessLog ("User {$_USER['username']} tried to illegally delete link $lid.");
-        return COM_refresh ($_CONF['site_admin_url'] . '/link.php');
-    }
-
-    DB_delete ($_TABLES['links'], 'lid', $lid);
-
-    return COM_refresh ($_CONF['site_admin_url'] . '/link.php?msg=16');
-}
-
-// MAIN
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-} else {
-    $mode = $HTTP_GET_VARS['mode'];
-}
-
-if (($mode == $LANG23[23]) && !empty ($LANG23[23])) { // delete
-    $lid = COM_applyFilter ($HTTP_POST_VARS['lid']);
-    if (!isset ($lid) || empty ($lid) || ($lid == 0)) {
-        COM_errorLog ('Attempted to delete link lid=' . $lid);
-        $display .= COM_refresh ($_CONF['site_admin_url'] . '/link.php');
-    } else {
-        $display .= deleteLink ($lid);
-    }
-} else if (($mode == $LANG23[21]) && !empty ($LANG23[21])) { // save
-    $display .= savelink (COM_applyFilter ($HTTP_POST_VARS['lid']),
-            $HTTP_POST_VARS['category'], $HTTP_POST_VARS['categorydd'],
-            $HTTP_POST_VARS['url'], $HTTP_POST_VARS['description'],
-            $HTTP_POST_VARS['title'],
-            COM_applyFilter ($HTTP_POST_VARS['hits'], true),
-            $HTTP_POST_VARS['owner_id'], $HTTP_POST_VARS['group_id'],
-            $HTTP_POST_VARS['perm_owner'], $HTTP_POST_VARS['perm_group'],
-            $HTTP_POST_VARS['perm_members'], $HTTP_POST_VARS['perm_anon']);
-} else if ($mode == 'editsubmission') {
-    $display .= COM_siteHeader ('menu');
-    $display .= editlink ($mode, COM_applyFilter ($HTTP_GET_VARS['id']));
-    $display .= COM_siteFooter ();
-} else if ($mode == 'edit') {
-    $display .= COM_siteHeader ('menu');
-    $display .= editlink ($mode, COM_applyFilter ($HTTP_GET_VARS['lid']));
-    $display .= COM_siteFooter ();
-} else { // 'cancel' or no mode at all
-    $display .= COM_siteHeader ('menu');
-    if (isset ($HTTP_POST_VARS['msg'])) {
-        $msg = COM_applyFilter ($HTTP_POST_VARS['msg'], true);
-    } else {
-        $msg = COM_applyFilter ($HTTP_GET_VARS['msg'], true);
-    }
-    if (isset ($msg) && ($msg > 0)) {
-        $display .= COM_showMessage ($msg);
-    }
-    $display .= listlinks (COM_applyFilter ($HTTP_GET_VARS['page'], true));
-    $display .= COM_siteFooter ();
-}
-
-echo $display;
-
-?>
diff -ruN 1.3.11sr1/admin/mail.php 1.4.0sr5-1/admin/mail.php
--- 1.3.11sr1/admin/mail.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/mail.php	2006-08-08 02:39:06.000000000 -0500
@@ -8,10 +8,10 @@
 // |                                                                           |
 // | Geeklog mail administration page.                                         |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2001-2004 by the following authors:                         |
+// | Copyright (C) 2001-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs - tony@tonybibbs.com                                  |
-// |          Dirk Haun  - dirk@haun-online.de                                 |
+// | Authors: Tony Bibbs - tony AT tonybibbs DOT com                           |
+// |          Dirk Haun  - dirk AT haun-online DOT de                          |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -30,7 +30,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: mail.php,v 1.27 2004/10/19 10:53:18 dhaun Exp $
+// $Id: mail.php,v 1.31 2005/11/05 14:02:11 dhaun Exp $
 
 require_once ('../lib-common.php');
 require_once ('auth.inc.php');
@@ -67,6 +67,7 @@
     $mail_templates->set_file (array ('form' => 'mailform.thtml'));
     $mail_templates->set_var ('site_url', $_CONF['site_url']);
     $mail_templates->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $mail_templates->set_var ('layout_url', $_CONF['layout_url']);
     $mail_templates->set_var ('startblock_email', COM_startBlock ($LANG31[1],
             '', COM_getBlockTemplate ('_admin_block', 'header')));
     $mail_templates->set_var ('php_self', $_CONF['site_admin_url']
@@ -113,7 +114,7 @@
 /**
 * This function actually sends the messages to the specified group
 *
-* @param    array   $vars   Same as $HTTP_POST_VARS, holds all the email info
+* @param    array   $vars   Same as $_POST, holds all the email info
 * @return   string          HTML with success or error message
 *
 */
@@ -151,9 +152,11 @@
     // and now mail it
     if (isset ($vars['overstyr'])) {
         $sql = "SELECT username,fullname,email FROM {$_TABLES['users']},{$_TABLES['group_assignments']} WHERE uid > 1";
+        $sql .= " AND {$_TABLES['users']}.status = 3 AND ((email is not null) and (email != ''))";
         $sql .= " AND {$_TABLES['users']}.uid = ug_uid AND ug_main_grp_id = {$vars['to_group']}";
     } else {
         $sql = "SELECT username,fullname,email,emailfromadmin FROM {$_TABLES['users']},{$_TABLES['userprefs']},{$_TABLES['group_assignments']} WHERE {$_TABLES['users']}.uid > 1";
+        $sql .= " AND {$_TABLES['users']}.status = 3 AND ((email is not null) and (email != ''))";
         $sql .= " AND {$_TABLES['users']}.uid = {$_TABLES['userprefs']}.uid AND emailfromadmin = 1";
         $sql .= " AND ug_uid = {$_TABLES['users']}.uid AND ug_main_grp_id = {$vars['to_group']}";
     }
@@ -215,10 +218,10 @@
 
 // MAIN
 
-$display .= COM_siteHeader ();
+$display .= COM_siteHeader ('menu', $LANG31[1]);
 
-if (isset ($HTTP_POST_VARS['mail']) && ($HTTP_POST_VARS['mail'] == 'mail')) {
-    $display .= send_messages ($HTTP_POST_VARS);
+if (isset ($_POST['mail']) && ($_POST['mail'] == 'mail')) {
+    $display .= send_messages ($_POST);
 } else {
     $display .= display_form ();
 }
diff -ruN 1.3.11sr1/admin/moderation.php 1.4.0sr5-1/admin/moderation.php
--- 1.3.11sr1/admin/moderation.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/moderation.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | moderation.php                                                            |
 // |                                                                           |
 // | Geeklog main administration page.                                         |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: moderation.php,v 1.53 2004/12/17 12:04:46 dhaun Exp $
+// $Id: moderation.php,v 1.87 2006/01/06 11:03:48 dhaun Exp $
 
 require_once ('../lib-common.php');
 require_once ('auth.inc.php');
@@ -42,98 +42,159 @@
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
+// echo COM_debug($_POST);
+
+define ('ICONS_PER_ROW', 6);
+
+/**
+* Renders an entry (icon) for the "Command and Control" center
+*
+* @param    template    $template   template to use
+* @param    string      $url        URL the entry links to
+* @param    string      $image      URL of the icon
+* @param    string      $label      text to use under the icon
+* @return   void
+*
+*/
+function render_cc_item (&$template, $url = '', $image = '', $label = '')
+{
+
+    if (!empty ($url)) {
+        $template->set_var ('page_url', $url);
+        $template->set_var ('page_image', $image);
+        $template->set_var ('option_label', $label);
+        $template->set_var ('cell_width', ((int)(100 / ICONS_PER_ROW)) . '%');
+        return $template->parse ('cc_main_options', 'ccitem', false);
+    } else {
+        return '';
+    }
+}
 
 /**
 * Prints the command & control block at the top
 *
 */
-function commandcontrol() 
+function commandcontrol()
 {
-    global $_CONF, $_TABLES, $LANG01, $LANG29;
+    global $_CONF, $_TABLES, $LANG01, $LANG29, $_IMAGE_TYPE;
 
     $retval = '';
 
     $admin_templates = new Template($_CONF['path_layout'] . 'admin/moderation');
-    $admin_templates->set_file (array ('cc' => 'moderation.thtml',
+    $admin_templates->set_file (array ('cc'     => 'moderation.thtml',
+                                       'ccrow'  => 'ccrow.thtml',
                                        'ccitem' => 'ccitem.thtml'));
-    
+
     $retval .= COM_startBlock ('Geeklog ' . VERSION . ' -- ' . $LANG29[34], '',
                                COM_getBlockTemplate ('_admin_block', 'header'));
 
-    if (SEC_hasRights('story.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/story.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/story.gif');
-        $admin_templates->set_var('option_label', $LANG01[11]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('block.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/block.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/block.gif');
-        $admin_templates->set_var('option_label',$LANG01[12]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('topic.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/topic.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/topic.gif');
-        $admin_templates->set_var('option_label', $LANG01[13]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('link.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/link.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/link.gif');
-        $admin_templates->set_var('option_label', $LANG01[14]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('event.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/event.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/event.gif');
-        $admin_templates->set_var('option_label', $LANG01[15]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('poll.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/poll.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/poll.gif');
-        $admin_templates->set_var('option_label', $LANG01[16]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('user.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/user.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/user.gif');
-        $admin_templates->set_var('option_label', $LANG01[17]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('group.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/group.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/group.gif');
-        $admin_templates->set_var('option_label', $LANG01[96]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-    if (SEC_hasRights('plugin.edit')) {
-        $admin_templates->set_var('page_url', $_CONF['site_admin_url'] . '/plugins.php');
-        $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/plugins.gif');
-        $admin_templates->set_var('option_label', $LANG01[98]);
-        $admin_templates->parse('cc_main_options','ccitem',true);
-    }
-
-    $admin_templates->set_var('page_url', $_CONF['site_url'] . '/users.php?mode=logout');
-    $admin_templates->set_var('page_image', $_CONF['layout_url'] . '/images/icons/logout.gif');
-    $admin_templates->set_var('option_label',$LANG01[35]);
-    $admin_templates->parse('cc_main_options','ccitem',true);
-
-    $plugins = PLG_getCCOptions();
-    for ($i = 1; $i <= count($plugins); $i++) {
-    	$cur_plugin = current($plugins);
-        $admin_templates->set_var('page_url', $cur_plugin->adminurl);
-        $admin_templates->set_var('page_image', $cur_plugin->plugin_image);
-        $admin_templates->set_var('option_label', $cur_plugin->adminlabel);
-        $admin_templates->parse('plugin_options','ccitem',true);
-	next($plugins);
-    }
-
-    if (count($plugins) == 0) {
-        $admin_templates->set_var('plugin_options','');
-    }
+    $showTrackbackIcon = (($_CONF['trackback_enabled'] ||
+                          $_CONF['pingback_enabled'] || $_CONF['ping_enabled'])
+                         && SEC_hasRights('story.ping'));
+    $cc_arr = array(
+                  array('condition' => SEC_hasRights('story.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/story.php',
+                        'lang' => $LANG01[11], 'image' => '/images/icons/story.'),
+                  array('condition' => SEC_hasRights('block.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/block.php',
+                        'lang' => $LANG01[12], 'image' => '/images/icons/block.'),
+                  array('condition' => SEC_hasRights('topic.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/topic.php',
+                        'lang' => $LANG01[13], 'image' => '/images/icons/topic.'),
+                  array('condition' => SEC_hasRights('event.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/event.php',
+                        'lang' => $LANG01[15], 'image' => '/images/icons/event.'),
+                  array('condition' => SEC_hasRights('user.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/user.php',
+                        'lang' => $LANG01[17], 'image' => '/images/icons/user.'),
+                  array('condition' => SEC_hasRights('group.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/group.php',
+                        'lang' => $LANG01[96], 'image' => '/images/icons/group.'),
+                  array('condition' => SEC_hasRights('user.mail'),
+                        'url' => $_CONF['site_admin_url'] . '/mail.php',
+                        'lang' => $LANG01[105], 'image' => '/images/icons/mail.'),
+                  array('condition' => SEC_inGroup('Root'),
+                        'url' => $_CONF['site_admin_url'] . '/syndication.php',
+                        'lang' => $LANG01[38], 'image' => '/images/icons/syndication.'),
+                  array('condition' => $showTrackbackIcon,
+                        'url' => $_CONF['site_admin_url'] . '/trackback.php',
+                        'lang' => $LANG01[116], 'image' => '/images/icons/trackback.'),
+                  array('condition' => SEC_hasRights('plugin.edit'),
+                        'url' => $_CONF['site_admin_url'] . '/plugins.php',
+                        'lang' => $LANG01[98], 'image' => '/images/icons/plugins.')
+    );
+
+    for ($i = 0; $i < count ($cc_arr); $i++) {
+        if ($cc_arr[$i]['condition']) {
+            $item = render_cc_item ($admin_templates, $cc_arr[$i]['url'],
+                    $_CONF['layout_url'] . $cc_arr[$i]['image'] . $_IMAGE_TYPE,
+                    $cc_arr[$i]['lang']);
+            $items[$cc_arr[$i]['lang']] = $item;
+        }
+    }
+
+    // now add the plugins
+    $plugins = PLG_getCCOptions ();
+    for ($i = 0; $i < count ($plugins); $i++) {
+        $cur_plugin = current ($plugins);
+        $item = render_cc_item ($admin_templates, $cur_plugin->adminurl,
+                        $cur_plugin->plugin_image, $cur_plugin->adminlabel);
+        $items[$cur_plugin->adminlabel] = $item;
+        next ($plugins);
+    }
+
+    // and finally, add the remaining admin items
+    $cc_arr = array(
+                  array('condition' => ($_CONF['allow_mysqldump'] == 1) && SEC_inGroup ('Root'),
+                        'url' => $_CONF['site_admin_url'] . '/database.php',
+                        'lang' => $LANG01[103], 'image' => '/images/icons/database.'),
+                  array('condition' => ($_CONF['link_documentation'] == 1),
+                        'url' => $_CONF['site_url'] . '/docs/',
+                        'lang' => $LANG01[113], 'image' => '/images/icons/docs.'),
+                  array('condition' => (SEC_inGroup ('Root')),
+                        'url' => 'http://www.geeklog.net/versionchecker.php?version=' . VERSION,
+                        'lang' => $LANG01[107], 'image' => '/images/icons/versioncheck.')
+    );
+
+    for ($i = 0; $i < count ($cc_arr); $i++) {
+        if ($cc_arr[$i]['condition']) {
+            $item = render_cc_item ($admin_templates, $cc_arr[$i]['url'],
+                    $_CONF['layout_url'] . $cc_arr[$i]['image'] . $_IMAGE_TYPE,
+                    $cc_arr[$i]['lang']);
+            $items[$cc_arr[$i]['lang']] = $item;
+        }
+    }
+
+    if ($_CONF['sort_admin'])
+    {
+        ksort($items);
+    }
+     // logout is always the last entry
+    $item = render_cc_item ($admin_templates,
+                    $_CONF['site_url'] . '/users.php?mode=logout',
+                    $_CONF['layout_url'] . '/images/icons/logout.' . $_IMAGE_TYPE,
+                    $LANG01[35]);
+    $items[$LANG01[35]] = $item;
+    reset($items);
+    $cols = 0;
+    $cc_main_options = '';
+    while (list($key, $val) = each($items))
+    {
+        $cc_main_options .= $val . LB;
+        $cols++;
+        if ($cols == ICONS_PER_ROW)
+        {
+            $admin_templates->set_var('cc_main_options', $cc_main_options);
+            $admin_templates->parse ('cc_rows', 'ccrow', true);
+            $admin_templates->clear_var ('cc_main_options');
+            $cc_main_options = '';
+            $cols = 0;
+        }
+    }
+    // "flush out" any unrendered entries
+    $admin_templates->set_var('cc_main_options', $cc_main_options);
+    $admin_templates->parse ('cc_rows', 'ccrow', true);
+    $admin_templates->clear_var ('cc_main_options');
 
     $retval .= $admin_templates->parse('output','cc');
 
@@ -146,9 +207,6 @@
             $retval .= draftlist ();
         }
     }
-    if (SEC_hasRights('link.moderate')) {
-        $retval .= itemlist('link');
-    }
     if (SEC_hasRights('event.moderate')) {
         $retval .= itemlist('event');
     }
@@ -164,34 +222,6 @@
 }
 
 /**
-* Build part of an SQL request to check the topic permissions of current user.
-*
-* @return   string   SQL request to check for topic permissions (can be empty)
-*
-*/
-function buildTopicSql ()
-{
-    global $_TABLES;
-
-    $topicsql = '';
-    $tresult = DB_query ("SELECT tid FROM {$_TABLES['topics']}"
-                         . COM_getPermSQL ());
-    $trows = DB_numRows ($tresult);
-    if ($trows > 0) {
-        $tids = array ();
-        for ($i = 0; $i < $trows; $i++) {
-            $T = DB_fetchArray ($tresult);
-            $tids[] = $T['tid'];
-        }
-        if (sizeof ($tids) > 0) {
-            $topicsql = " (tid IN ('" . implode ("','", $tids) . "'))";
-        }
-    }
-
-    return $topicsql;
-}
-
-/**
 * Diplays items needing moderation
 *
 * Displays the moderation list of items from the submission tables
@@ -199,25 +229,19 @@
 * @type     string      Type of object to build list for
 *
 */
-function itemlist($type) 
+function itemlist($type)
 {
-    global $_TABLES, $LANG29, $_CONF;
-
+    global $_TABLES, $LANG29, $_CONF, $LANG_ADMIN;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
     $isplugin = false;
     $retval = '';
 
     switch ($type) {
     case 'event':
-        $retval .= COM_startBlock ($LANG29[37], 'cceventsubmission.html',
-                COM_getBlockTemplate ('_admin_block', 'header'));
         $sql = "SELECT eid AS id,title,datestart as day,url FROM {$_TABLES['eventsubmission']} ORDER BY datestart ASC";
         $H = array($LANG29[10],$LANG29[11],$LANG29[12]);
-        break;
-    case 'link':
-        $retval .= COM_startBlock ($LANG29[36], 'cclinksubmission.html',
-                COM_getBlockTemplate ('_admin_block', 'header'));
-        $sql = "SELECT lid AS id,title,category,url FROM {$_TABLES['linksubmission']} ORDER BY title ASC";
-        $H = array($LANG29[10],$LANG29[13],$LANG29[12]);
+        $section_title = $LANG29[37];
+        $section_help = 'cceventsubmission.html';
         break;
     default:
         if ((strlen($type) > 0) && ($type <> 'story')) {
@@ -227,22 +251,18 @@
                 $plugin = new Plugin();
                 $plugin = $function();
                 $helpfile = $plugin->submissionhelpfile;
-                $retval .= COM_startBlock ($plugin->submissionlabel, $helpfile,
-                               COM_getBlockTemplate ('_admin_block', 'header'));
                 $sql = $plugin->getsubmissionssql;
                 $H = $plugin->submissionheading;
                 $isplugin = true;
+                $section_title = $plugin->submissionlabel;
+                $section_help = $helpfile;
                 break;
             }
-        } else {
-            $retval .= COM_startBlock ($LANG29[35], 'ccstorysubmission.html',
-                    COM_getBlockTemplate ('_admin_block', 'header'));
-            $topicsql = buildTopicSql ();
-            if (!empty ($topicsql)) {
-                $topicsql = ' WHERE' . $topicsql;
-            }
-            $sql = "SELECT sid AS id,title,UNIX_TIMESTAMP(date) AS day,tid FROM {$_TABLES['storysubmission']}" . $topicsql . " ORDER BY date ASC";
+        } else { # story submission
+            $sql = "SELECT sid AS id,title,date,tid FROM {$_TABLES['storysubmission']}" . COM_getTopicSQL ('WHERE') . " ORDER BY date ASC";
             $H =  array($LANG29[10],$LANG29[14],$LANG29[15]);
+            $section_title = $LANG29[35];
+            $section_help = 'ccstorysubmission.html';
             break;
         }
     }
@@ -258,56 +278,46 @@
     } else {
         $nrows = DB_numRows($result);
     }
-
-    if ($nrows > 0) {
-        $mod_templates = new Template($_CONF['path_layout'] . 'admin/moderation');
-        $mod_templates->set_file(array('itemlist'=>'itemlist.thtml',
-                                       'itemrows'=>'itemlistrows.thtml'));
-        $mod_templates->set_var('form_action', $_CONF['site_admin_url'] . '/moderation.php');
-        $mod_templates->set_var('item_type', $type);
-        $mod_templates->set_var('num_rows', $nrows);
-        $mod_templates->set_var('heading_col1', $H[0]);
-        $mod_templates->set_var('heading_col2', $H[1]);
-        $mod_templates->set_var('heading_col3', $H[2]);
-        $mod_templates->set_var('lang_approve', $LANG29[2]);
-        $mod_templates->set_var('lang_delete', $LANG29[1]);
- 
-        for ($i = 1; $i <= $nrows; $i++) {
-            $A = DB_fetchArray($result, true);
-            if ($type == 'story') {
-                $A[2] = strftime("%c",$A[2]);
-            }
-            if ($isplugin)  {
-                $mod_templates->set_var ('edit_submission_url',
-                    $_CONF['site_admin_url'] . '/plugins/' . $type
-                    . '/index.php?mode=editsubmission&amp;id=' . $A['id']);
-            } else {
-                $mod_templates->set_var('edit_submission_url', $_CONF['site_admin_url'] . '/' .  $type
-                    . '.php?mode=editsubmission&amp;id=' . $A['id']); 
-            }
-            $mod_templates->set_var('lang_edit', $LANG29[3]);
-
-            for ($j = 1; $j <= 3; $j++) {
-                $A[$j] = COM_makeClickableLinks (stripslashes ($A[$j]));
-            }
-            $mod_templates->set_var('data_col1', $A[1]);
-            $mod_templates->set_var('data_col2', $A[2]);
-            $mod_templates->set_var('data_col3', $A[3]);
-            $mod_templates->set_var('cur_row', $i);
-            $mod_templates->set_var('item_id', $A[0]);
-            $mod_templates->parse('list_of_items','itemrows',true);
-        }
-        $mod_templates->set_var('lang_submit', $LANG29[38]);
-        $mod_templates->parse('output','itemlist');
-        $retval .= $mod_templates->finish($mod_templates->get_var('output'));
-    } else {
-        if ($nrows <> -1) {
-            $retval .= $LANG29[39];
+    $data_arr = array();
+    for ($i = 0; $i < $nrows; $i++) {
+        $A = DB_fetchArray($result);
+        if ($isplugin)  {
+            $A['edit'] = $_CONF['site_admin_url'] . '/plugins/' . $type
+                     . '/index.php?mode=editsubmission&amp;id=' . $A[0];
+        } else {
+            $A['edit'] = $_CONF['site_admin_url'] . '/' .  $type
+                     . '.php?mode=editsubmission&amp;id=' . $A[0];
         }
+        $A['row'] = $i;
+        $data_arr[$i] = $A;
     }
 
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+        array('text' => $LANG_ADMIN['edit'], 'field' => 0),
+        array('text' => $H[0], 'field' => 1),
+        array('text' => $H[1], 'field' => 2),
+        array('text' => $H[2], 'field' => 3),
+        array('text' => $LANG29[2], 'field' => 'delete'),
+        array('text' => $LANG29[1], 'field' => 'approve'));
+
+    $text_arr = array('has_menu'    => false,
+                      'title'       => $section_title,
+                      'help_url'    => $section_help,
+                      'no_data'     => $LANG29[39]);
 
+    $table = ADMIN_simpleList("ADMIN_getListField_moderation", $header_arr, $text_arr, $data_arr, array());
+    if ($nrows > 0) {
+        $retval .= LB . '<form action="' . $_CONF['site_admin_url']
+                . '/moderation.php" method="POST">' . LB
+                . '<input type="hidden" name="type" value="' . $type . '">' . LB
+                . '<input type="hidden" name="mode" value="moderation">' . LB
+                . '<input type="hidden" name="count" value="' . $nrows . '">'
+                . LB . $table . LB
+                . '<p align="center"><input type="submit" value="'
+                . $LANG_ADMIN['submit'] . '"></p></form>' . LB;
+    } else {
+        $retval .= $table;
+    }
     return $retval;
 }
 
@@ -321,50 +331,51 @@
 */
 function userlist ()
 {
-    global $_CONF, $_TABLES, $LANG29;
+    global $_CONF, $_TABLES, $LANG29, $LANG_ADMIN;
+
+    require_once ($_CONF['path_system'] . 'lib-admin.php');
+
+    $retval = '';
 
-    $retval = COM_startBlock ($LANG29[40], '',
-                              COM_getBlockTemplate ('_admin_block', 'header'));
-    $emptypwd = md5('');
-    $result = DB_query ("SELECT uid,username,fullname,email FROM {$_TABLES['users']} WHERE passwd = '$emptypwd'");
+    $sql = "SELECT uid as id,username,fullname,email FROM {$_TABLES['users']} WHERE status = 2";
+    $result = DB_query ($sql);
     $nrows = DB_numRows($result);
+    $data_arr = array();
+    for ($i = 0; $i < $nrows; $i++) {
+        $A = DB_fetchArray($result);
+        $A['edit'] = $_CONF['site_admin_url'].'/user.php?mode=edit&amp;uid='.$A['id'];
+        $A['row'] = $i;
+        $A['fullname'] = stripslashes($A['fullname']);
+        $A['email'] = stripslashes($A['email']);
+        $data_arr[$i] = $A;
+    }
+    $header_arr = array(
+        array('text' => $LANG_ADMIN['edit'], 'field' => 0),
+        array('text' => $LANG29[16], 'field' => 1),
+        array('text' => $LANG29[17], 'field' => 2),
+        array('text' => $LANG29[18], 'field' => 3),
+        array('text' => $LANG29[2], 'field' => 'delete'),
+        array('text' => $LANG29[1], 'field' => 'approve')
+    );
+
+    $text_arr = array('has_menu'    => false,
+                        'title'     => $LANG29[40],
+                        'help_url'  => '',
+                        'no_data'   => $LANG29[39]
+    );
+    $table = ADMIN_simpleList("ADMIN_getListField_moderation", $header_arr, $text_arr, $data_arr, array());
     if ($nrows > 0) {
-        $mod_templates = new Template($_CONF['path_layout'] . 'admin/moderation');
-        $mod_templates->set_file(array('itemlist'=>'itemlist.thtml',
-                                       'itemrows'=>'itemlistrows.thtml'));
-        $mod_templates->set_var('form_action', $_CONF['site_admin_url'] . '/moderation.php');
-        $mod_templates->set_var('item_type', 'user');
-        $mod_templates->set_var('num_rows', $nrows);
-        $mod_templates->set_var('heading_col1', $LANG29[16]);
-        $mod_templates->set_var('heading_col2', $LANG29[17]);
-        $mod_templates->set_var('heading_col3', $LANG29[18]);
-        $mod_templates->set_var('lang_approve', $LANG29[2]);
-        $mod_templates->set_var('lang_delete', $LANG29[1]);
- 
-        for ($i = 1; $i <= $nrows; $i++) {
-            $A = DB_fetchArray($result);
-            $mod_templates->set_var ('edit_submission_url',
-                $_CONF['site_admin_url'] . '/user.php?mode=edit&amp;uid='
-                . $A['uid']);
-            $mod_templates->set_var('lang_edit', $LANG29[3]);
-            $mod_templates->set_var ('data_col1', '<a href="'
-                . $_CONF['site_url'] . '/users.php?mode=profile&amp;uid='
-                . $A['uid'] . '">' . stripslashes ($A['username']) . '</a>');
-            $mod_templates->set_var('data_col2', stripslashes($A['fullname']));
-            $mod_templates->set_var('data_col3', stripslashes($A['email']));
-            $mod_templates->set_var('cur_row', $i);
-            $mod_templates->set_var('item_id', $A['uid']);
-            $mod_templates->parse('list_of_items','itemrows',true);
-        }
-        $mod_templates->set_var('lang_submit', $LANG29[38]);
-        $mod_templates->parse('output','itemlist');
-        $retval .= $mod_templates->finish($mod_templates->get_var('output'));
+        $retval .= LB . '<form action="' . $_CONF['site_admin_url']
+                . '/moderation.php" method="POST">' . LB
+                . '<input type="hidden" name="type" value="user">' . LB
+                . '<input type="hidden" name="mode" value="moderation">' . LB
+                . '<input type="hidden" name="count" value="' . $nrows . '">'
+                . LB . $table . LB
+                . '<p align="center"><input type="submit" value="'
+                . $LANG_ADMIN['submit'] . '"></p></form>' . LB;
     } else {
-        if ($nrows <> -1) {
-            $retval .= $LANG29[39];
-        }
+        $retval .= $table;
     }
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
 
     return $retval;
 }
@@ -379,110 +390,64 @@
 */
 function draftlist ()
 {
-    global $_CONF, $_TABLES, $LANG24, $LANG29;
+    global $_CONF, $_TABLES, $LANG24, $LANG29, $LANG_ADMIN;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
 
-    $retval = COM_startBlock ($LANG29[35] . ' (' . $LANG24[34] . ')', '',
-            COM_getBlockTemplate ('_admin_block', 'header'));
+    $result = DB_query ("SELECT sid AS id,title,UNIX_TIMESTAMP(date) AS day,tid FROM {$_TABLES['stories']} WHERE (draft_flag = 1)" . COM_getTopicSQL ('AND') . COM_getPermSQL ('AND', 0, 3) . " ORDER BY date ASC");
+    $nrows = DB_numRows($result);
+    $data_arr = array();
 
-    $topicsql = buildTopicSql ();
-    if (!empty ($topicsql)) {
-        $topicsql = ' AND' . $topicsql;
-    }
+    for ($i = 0; $i < $nrows; $i++) {
+        $A = DB_fetchArray($result);
+        $A['edit'] = $_CONF['site_admin_url'] . '/story.php?mode=edit&amp;sid='
+                    . $A['id'];
+        $A['row'] = $i;
+        $A['title'] = stripslashes($A['title']);
+        $A['tid'] = stripslashes($A['tid']);
+        $data_arr[$i] = $A;
+    }
+
+    $header_arr = array(
+        array('text' => $LANG_ADMIN['edit'], 'field' => 0),
+        array('text' => $LANG29[10], 'field' => 'title'),
+        array('text' => $LANG29[14], 'field' => 'day'),
+        array('text' => $LANG29[15], 'field' => 'tid'),
+        array('text' => $LANG29[2], 'field' => 'delete'),
+        array('text' => $LANG29[1], 'field' => 'approve'));
+
+    $text_arr = array('has_menu'    => false,
+                        'title'     => $LANG29[35] . ' (' . $LANG24[34] . ')',
+                        'help_url'  => '',
+                        'no_data'   => $LANG29[39]);
 
-    $result = DB_query ("SELECT sid AS id,title,UNIX_TIMESTAMP(date) AS day,tid FROM {$_TABLES['stories']} WHERE (draft_flag = 1)" . $topicsql . COM_getPermSQL ('AND', 0, 3) . " ORDER BY date ASC");
-    $nrows = DB_numRows($result);
+    $table = ADMIN_simpleList("ADMIN_getListField_moderation", $header_arr, $text_arr, $data_arr, array());
     if ($nrows > 0) {
-        $mod_templates = new Template($_CONF['path_layout'] . 'admin/moderation');
-        $mod_templates->set_file(array('itemlist'=>'itemlist.thtml',
-                                       'itemrows'=>'itemlistrows.thtml'));
-        $mod_templates->set_var('form_action', $_CONF['site_admin_url'] . '/moderation.php');
-        $mod_templates->set_var('item_type', 'draft');
-        $mod_templates->set_var('num_rows', $nrows);
-        $mod_templates->set_var('heading_col1', $LANG29[10]);
-        $mod_templates->set_var('heading_col2', $LANG29[14]);
-        $mod_templates->set_var('heading_col3', $LANG29[15]);
-        $mod_templates->set_var('lang_approve', $LANG29[2]);
-        $mod_templates->set_var('lang_delete', $LANG29[1]);
- 
-        for ($i = 1; $i <= $nrows; $i++) {
-            $A = DB_fetchArray($result);
-            $mod_templates->set_var('edit_submission_url',
-                    $_CONF['site_admin_url'] . '/story.php?mode=edit&amp;sid='
-                    . $A['id']);
-            $mod_templates->set_var('lang_edit', $LANG29[3]);
-            $mod_templates->set_var('data_col1', stripslashes($A['title']));
-            $mod_templates->set_var('data_col2', strftime ("%c", $A['day']));
-            $mod_templates->set_var('data_col3', stripslashes($A['tid']));
-            $mod_templates->set_var('cur_row', $i);
-            $mod_templates->set_var('item_id', $A['id']);
-            $mod_templates->parse('list_of_items','itemrows',true);
-        }
-        $mod_templates->set_var('lang_submit', $LANG29[38]);
-        $mod_templates->parse('output','itemlist');
-        $retval .= $mod_templates->finish($mod_templates->get_var('output'));
+        $retval .= "\n\n<form action=\"{$_CONF['site_admin_url']}/moderation.php\" method=\"POST\">"
+                    ."<input type=\"hidden\" name=\"type\" value=\"draft\">"
+                    ."<input type=\"hidden\" name=\"mode\" value=\"moderation\">"
+                    .$table
+                    ."<center><input type=\"submit\" value=\"{$LANG_ADMIN['submit']}\"></center></form>\n\n";
     } else {
-        if ($nrows <> -1) {
-            $retval .= $LANG29[39];
-        }
+        $retval .= $table;
     }
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
 
     return $retval;
 }
 
 /**
-* Delete a story.
-*
-* This is used to delete a story from the list of stories with the 'draft' flag
-* set (see function draftlist() above).
-* Note: This code has been lifted from admin/story.php and should be kept in
-*       sync with the code there.
-*
-* @sid      string      ID of the story to delete
-*
-*/
-function deletestory ($sid)
-{
-    global $_TABLES, $_CONF;
-
-    $result = DB_query ("SELECT ai_filename FROM {$_TABLES['article_images']} WHERE ai_sid = '$sid'");
-    $nrows = DB_numRows ($result);
-    for ($i = 1; $i <= $nrows; $i++) {
-        $A = DB_fetchArray ($result);
-        $filename = $_CONF['path_html'] . 'images/articles/' . $A['ai_filename'];
-        if (!unlink ($filename)) {
-            echo COM_errorLog ('Unable to remove the following image from the article: ' . $filename);
-            exit;
-        }
-
-        // remove unscaled image, if it exists
-        $lFilename_large = substr_replace ($A['ai_filename'], '_original.',
-                strrpos ($A['ai_filename'], '.'), 1);
-        $lFilename_large_complete = $_CONF['path_html'] . 'images/articles/'
-                                  . $lFilename_large;
-        if (file_exists ($lFilename_large_complete)) {
-            if (!unlink ($lFilename_large_complete)) {
-                echo COM_errorLog ('Unable to remove the following image from the article: ' . $lFilename_large_complete);
-                exit;
-            }
-        }
-    }
-    DB_delete ($_TABLES['article_images'], 'ai_sid', $sid);
-    DB_delete ($_TABLES['comments'], 'sid', $sid);
-    DB_delete ($_TABLES['stories'], 'sid', $sid);
-}
-
-/**
 * Moderates an item
 *
 * This will actually perform moderation (approve or delete) one or more items
 *
-* @mid          array       Array of items
-* @action       array       Array of actions to perform on items
-* @count        int         Number of items to moderate
+* @param    array   $mid        Array of items
+* @param    array   $action     Array of actions to perform on items
+* @param    string  $type       Type of items ('story', 'event', etc.)
+* @param    int     $count      Number of items to moderate
+* @return   string              HTML for "command and control" page
 *
 */
-function moderation($mid,$action,$type,$count) 
+function moderation ($mid, $action, $type, $count)
 {
     global $_CONF, $_TABLES;
 
@@ -495,12 +460,6 @@
         $submissiontable = $_TABLES['eventsubmission'];
         $fields = 'eid,title,description,location,address1,address2,city,state,zipcode,datestart,timestart,dateend,timeend,url';
         break;
-    case 'link':
-        $id = 'lid';
-        $table = $_TABLES['links'];
-        $submissiontable = $_TABLES['linksubmission'];
-        $fields = 'lid,category,url,description,title,date';
-        break;
     case 'story':
         $id = 'sid';
         $table = $_TABLES['stories'];
@@ -514,12 +473,12 @@
             return $retval;
         }
         list($id, $table, $fields, $submissiontable) = PLG_getModerationValues($type);
-	}
+    }
 
-    for ($i = 1; $i <= $count; $i++) {
+    for ($i = 0; $i < $count; $i++) {
         switch ($action[$i]) {
         case 'delete':
-            if ((strlen($type) > 0) && ($type <> 'story') && ($type <> 'draft')) {
+            if (!empty ($type) && ($type <> 'story') && ($type <> 'draft')) {
                 // There may be some plugin specific processing that needs to
                 // happen first.
                 $retval .= PLG_deleteSubmission($type, $mid[$i]);
@@ -529,14 +488,14 @@
                 return $retval;
             }
             if ($type == 'draft') {
-                deletestory ($mid[$i]);
+                STORY_deleteStory($mid[$i]);
             } else {
                 DB_delete($submissiontable,"$id",$mid[$i]);
             }
             break;
         case 'approve':
             if ($type == 'story') {
-                $result = DB_query ("SELECT * FROM {$_TABLES['storysubmission']} where sid = '$mid[$i]'");
+                $result = DB_query ("SELECT * FROM {$_TABLES['storysubmission']} WHERE sid = '$mid[$i]'");
                 $A = DB_fetchArray ($result);
                 $A['related'] = addslashes (implode ("\n", STORY_extractLinks ($A['introtext'])));
                 $A['owner_id'] = $A['uid'];
@@ -549,17 +508,26 @@
                 } else {
                     $frontpage = 1;
                 }
-                DB_save ($_TABLES['stories'],'sid,uid,tid,title,introtext,related,date,commentcode,postmode,frontpage,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon',
-                "{$A['sid']},{$A['uid']},'{$A['tid']}','{$A['title']}','{$A['introtext']}','{$A['related']}','{$A['date']}',{$_CONF['comment_code']},'{$A['postmode']}',$frontpage,{$A['owner_id']},{$T['group_id']},{$T['perm_owner']},{$T['perm_group']},{$T['perm_members']},{$T['perm_anon']}");
+                DB_save ($_TABLES['stories'],'sid,uid,tid,title,introtext,related,date,show_topic_icon,commentcode,trackbackcode,postmode,frontpage,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon',
+                "'{$A['sid']}',{$A['uid']},'{$A['tid']}','{$A['title']}','{$A['introtext']}','{$A['related']}','{$A['date']}','{$_CONF['show_topic_icon']}','{$_CONF['comment_code']}','{$_CONF['trackback_code']}','{$A['postmode']}',$frontpage,{$A['owner_id']},{$T['group_id']},{$T['perm_owner']},{$T['perm_group']},{$T['perm_members']},{$T['perm_anon']}");
                 DB_delete($_TABLES['storysubmission'],"$id",$mid[$i]);
 
-                COM_rdfUpToDateCheck ();    
-                COM_olderStuff ();    
+                COM_rdfUpToDateCheck ();
+                COM_olderStuff ();
+            } else if ($type == 'event') {
+                // first, copy entry from the submission to the events table
+                DB_copy ($table, $fields, $fields, $submissiontable, $id,
+                         $mid[$i]);
+                // then set the default permissions
+                $A = array ();
+                SEC_setDefaultPermissions ($A,
+                                           $_CONF['default_permissions_event']);
+                DB_query ("UPDATE {$_TABLES['events']} SET perm_owner = {$A['perm_owner']}, perm_group = {$A['perm_group']}, perm_members = {$A['perm_members']}, perm_anon = {$A['perm_anon']} WHERE eid = {$mid[$i]}");
             } else if ($type == 'draft') {
-                DB_query ("UPDATE {$_TABLES['stories']} SET draft_flag = 0 WHERE sid = {$mid[$i]}");
+                DB_query ("UPDATE {$_TABLES['stories']} SET draft_flag = 0 WHERE sid = '{$mid[$i]}'");
 
-                COM_rdfUpToDateCheck ();    
-                COM_olderStuff ();    
+                COM_rdfUpToDateCheck ();
+                COM_olderStuff ();
             } else {
                 // This is called in case this is a plugin. There may be some
                 // plugin specific processing that needs to happen.
@@ -581,12 +549,10 @@
 * Users from the user submission queue are either appoved (an email containing
 * the password is sent out) or deleted.
 *
-* Note: The code for sending the password is coped&pasted from users.php
-*
-* @param    uid      int      array of items
-* @param    action   string   action to perform ('delete', 'approve')
-* @param    count    int      number of items
-* @return            string   HTML for "command and control" page
+* @param    int     $uid        Array of items
+* @param    array   $action     Action to perform ('delete', 'approve')
+* @param    int     $count      Number of items
+* @return   string              HTML for "command and control" page
 *
 */
 function moderateusers ($uid, $action, $count)
@@ -595,7 +561,7 @@
 
     $retval = '';
 
-    for ($i = 1; $i <= $count; $i++) {
+    for ($i = 0; $i < $count; $i++) {
         switch ($action[$i]) {
             case 'delete': // Ok, delete everything related to this user
                 if ($uid[$i] > 1) {
@@ -603,12 +569,13 @@
                 }
                 break;
             case 'approve':
-                $result = DB_query ("SELECT email,username FROM {$_TABLES['users']} WHERE uid = $uid[$i]");
+                $result = DB_query ("SELECT email,username, uid FROM {$_TABLES['users']} WHERE uid = $uid[$i]");
                 $nrows = DB_numRows($result);
                 if ($nrows == 1) {
                     $A = DB_fetchArray($result);
-
-                    USER_createAndSendPassword ($A['username'], $A['email']);
+                    $sql = "UPDATE {$_TABLES['users']} SET status=3 WHERE uid={$A['uid']}";
+                    DB_Query($sql);
+                    USER_createAndSendPassword ($A['username'], $A['email'], $A['uid']);
                 }
                 break;
         }
@@ -619,44 +586,22 @@
     return $retval;
 }
 
-function register_globals_warning ()
-{
-    global $_CONF, $LANG01, $MESSAGE;
-
-    $retval = '';
-
-    if (!ini_get ('register_globals')) {
-        $retval .= COM_startBlock ($MESSAGE[40], '',
-                           COM_getBlockTemplate ('_msg_block', 'header'));
-        $retval .= '<p><img src="' . $_CONF['layout_url']
-                . '/images/sysmessage.gif" border="0" align="left" alt="">';
-        $retval .= $LANG01[40] . '</p>';
-        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-    }
-
-    return $retval;
-}
-
-
 // MAIN
 
 $display = '';
-$display .= COM_siteHeader();
-if (isset ($HTTP_GET_VARS['msg'])) {
-    $display .= COM_showMessage ($HTTP_GET_VARS['msg']);
+$display .= COM_siteHeader ('menu', $LANG29[34]);
+if (isset ($_GET['msg'])) {
+    $display .= COM_showMessage ($_GET['msg']);
 }
 
-if (isset ($HTTP_POST_VARS['mode']) && ($HTTP_POST_VARS['mode'] == 'moderation')) {
-    if ($HTTP_POST_VARS['type'] == 'user') {
-        $display .= moderateusers ($HTTP_POST_VARS['id'],
-                $HTTP_POST_VARS['action'], $HTTP_POST_VARS['count']);
+if (isset ($_POST['mode']) && ($_POST['mode'] == 'moderation')) {
+    if ($_POST['type'] == 'user') {
+        $display .= moderateusers ($_POST['id'], $_POST['action'],
+                                  COM_applyFilter ($_POST['count'], true));
     } else {
-        $display .= moderation ($HTTP_POST_VARS['id'],
-                $HTTP_POST_VARS['action'], $HTTP_POST_VARS['type'],
-                $HTTP_POST_VARS['count']);
+        $display .= moderation ($_POST['id'], $_POST['action'], $_POST['type'],                                 COM_applyFilter ($_POST['count'], true));
     }
 } else {
-    $display .= register_globals_warning ();
     $display .= commandcontrol();
 }
 
diff -ruN 1.3.11sr1/admin/plugins/links/index.php 1.4.0sr5-1/admin/plugins/links/index.php
--- 1.3.11sr1/admin/plugins/links/index.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/links/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,441 @@
+<?php
+
+// Reminder: always indent with 4 spaces (no tabs). 
+// +---------------------------------------------------------------------------+
+// | Links Plugin 1.0                                                          |
+// +---------------------------------------------------------------------------+
+// | index.php                                                                 |
+// |                                                                           |
+// | Geeklog links administration page.                                        |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+
+/** 
+ * Geeklog links administration page. 
+ * 
+ * @package Links
+ * @subpackage admin
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ */
+ 
+// $Id: index.php,v 1.25 2006/01/28 14:13:48 dhaun Exp $
+
+require_once ('../../../lib-common.php');
+require_once ('../../auth.inc.php');
+
+// Uncomment the lines below if you need to debug the HTTP variables being passed
+// to the script.  This will sometimes cause errors but it will allow you to see
+// the data being passed in a POST operation
+// echo COM_debug($_POST);
+// exit;
+
+// number of links to list per page
+define ('LINKS_PER_PAGE', 50);
+
+$display = '';
+
+if (!SEC_hasRights ('links.edit')) {
+    $display .= COM_siteHeader ('menu');
+    $display .= COM_startBlock ($MESSAGE[30], '',
+                                COM_getBlockTemplate ('_msg_block', 'header'));
+    $display .= $MESSAGE[34];
+    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    $display .= COM_siteFooter ();
+    COM_accessLog ("User {$_USER['username']} tried to illegally access the links administration screen.");
+    echo $display;
+    exit;
+}
+
+/**
+* Shows the links editor
+*
+* @param  string  $mode   Used to see if we are moderating a link or simply editing one 
+* @param  string  $lid    ID of link to edit
+* @global array core config vars
+* @global array core group data
+* @global array core table data
+* @global array core user data
+* @global array links plugin config vars
+* @global array links plugin lang vars
+* @global array core lang access vars
+* @return string HTML for the link editor form
+*
+*/
+function editlink ($mode, $lid = '') 
+{
+    global $_CONF, $_GROUPS, $_TABLES, $_USER, $_LI_CONF,
+           $LANG_LINKS_ADMIN, $LANG_ACCESS;
+
+    $retval = '';
+
+    $link_templates = new Template($_CONF['path'] . 'plugins/links/templates/admin/');
+    $link_templates->set_file('editor','linkeditor.thtml');
+    $link_templates->set_var('site_url', $_CONF['site_url']);
+    $link_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
+    $link_templates->set_var('layout_url',$_CONF['layout_url']);
+    if ($mode <> 'editsubmission' AND !empty($lid)) {
+        $result = DB_query("SELECT * FROM {$_TABLES['links']} WHERE lid ='$lid'");
+        $A = DB_fetchArray($result);
+        $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
+        if ($access == 0 OR $access == 2) {
+            $retval .= COM_startBlock($LANG_LINKS_ADMIN[16], '',
+                               COM_getBlockTemplate ('_msg_block', 'header'));
+            $retval .= $LANG_LINKS_ADMIN[17];
+            $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+            COM_accessLog("User {$_USER['username']} tried to illegally submit or edit link $lid.");
+            return $retval;
+        }
+    } else {
+        if ($mode == 'editsubmission') {
+            $result = DB_query ("SELECT * FROM {$_TABLES['linksubmission']} WHERE lid = '$lid'");
+            $A = DB_fetchArray($result);
+        } else {
+            $A['lid'] = COM_makesid();
+            $A['category'] = '';
+            $A['url'] = '';
+            $A['description'] = '';
+            $A['title']= '';
+        }
+        $A['hits'] = 0;
+        $A['owner_id'] = $_USER['uid'];
+        if (isset ($_GROUPS['Links Admin'])) {
+            $A['group_id'] = $_GROUPS['Links Admin'];
+        } else {
+            $A['group_id'] = SEC_getFeatureGroup ('links.edit');
+        }
+        SEC_setDefaultPermissions ($A, $_LI_CONF['default_permissions']);
+        $access = 3;
+    }
+    $retval .= COM_startBlock ($LANG_LINKS_ADMIN[1], '',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+
+    $link_templates->set_var('link_id', $A['lid']);
+    if (!empty($lid) && SEC_hasRights('links.edit')) {
+        $link_templates->set_var ('delete_option', '<input type="submit" value="' . $LANG_LINKS_ADMIN[23] . '" name="mode">');
+    }
+    $link_templates->set_var('lang_linktitle', $LANG_LINKS_ADMIN[3]);
+    $link_templates->set_var('link_title',
+                             htmlspecialchars (stripslashes ($A['title'])));
+    $link_templates->set_var('lang_linkid', $LANG_LINKS_ADMIN[2]);
+    $link_templates->set_var('lang_linkurl', $LANG_LINKS_ADMIN[4]);
+    $link_templates->set_var('max_url_length', 255);
+    $link_templates->set_var('link_url', $A['url']);
+    $link_templates->set_var('lang_includehttp', $LANG_LINKS_ADMIN[6]);
+    $link_templates->set_var('lang_category', $LANG_LINKS_ADMIN[5]);
+    $othercategory = $A['category'];
+    $link_templates->set_var('category_options',
+                             links_getCategoryList ($othercategory));
+    $link_templates->set_var('lang_ifotherspecify', $LANG_LINKS_ADMIN[20]);
+    $link_templates->set_var('category', $othercategory);
+    $link_templates->set_var('lang_linkhits', $LANG_LINKS_ADMIN[8]);
+    $link_templates->set_var('link_hits', $A['hits']);
+    $link_templates->set_var('lang_linkdescription', $LANG_LINKS_ADMIN[9]);
+    $link_templates->set_var('link_description', stripslashes($A['description']));
+    $link_templates->set_var('lang_save', $LANG_LINKS_ADMIN[21]);
+    $link_templates->set_var('lang_cancel', $LANG_LINKS_ADMIN[22]);
+
+    // user access info
+    $link_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
+    $link_templates->set_var('lang_owner', $LANG_ACCESS['owner']);
+    $link_templates->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = {$A['owner_id']}")); 
+    $link_templates->set_var('link_ownerid', $A['owner_id']);
+    $link_templates->set_var('lang_group', $LANG_ACCESS['group']);
+
+    $usergroups = SEC_getUserGroups();
+    if ($access == 3) {
+        $groupdd = '<select name="group_id">' . LB;
+        for ($i = 0; $i < count($usergroups); $i++) {
+            $groupdd .= '<option value="' . $usergroups[key($usergroups)] . '"';
+            if ($A['group_id'] == $usergroups[key($usergroups)]) {
+               $groupdd .= ' selected="selected"';
+            }
+            $groupdd.= '>' . key($usergroups) . '</option>' . LB;
+            next($usergroups);
+        }
+        $groupdd .= '</select>' . LB;
+    } else {
+        // they can't set the group then
+        $groupdd .= DB_getItem($_TABLES['groups'],'grp_name',"grp_id = {$A['group_id']}");
+        $groupdd .= '<input type="hidden" name="group_id" value="' . $A['group_id'] . '">';
+    }
+    $link_templates->set_var('group_dropdown', $groupdd);
+    $link_templates->set_var('lang_permissions', $LANG_ACCESS['permissions']);
+    $link_templates->set_var('lang_permissionskey', $LANG_ACCESS['permissionskey']);
+    $link_templates->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']));
+    $link_templates->set_var('lang_lockmsg', $LANG_ACCESS['permmsg']);
+    $link_templates->parse('output', 'editor');
+    $retval .= $link_templates->finish($link_templates->get_var('output'));
+
+    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+
+    return $retval;
+}
+
+/**
+* Saves link to the database
+*
+* @param    string  $lid            ID for link
+* @param    string  $old_lid        old ID for link
+* @param    string  $category       Category link belongs to
+* @param    string  $categorydd     Category links belong to
+* @param    string  $url            URL of link to save
+* @param    string  $description    Description of link
+* @param    string  $title          Title of link
+* @param    int     $hits           Number of hits for link
+* @param    int     $owner_id       ID of owner
+* @param    int     $group_id       ID of group link belongs to
+* @param    int     $perm_owner     Permissions the owner has
+* @param    int     $perm_group     Permissions the group has
+* @param    int     $perm_members   Permissions members have
+* @param    int     $perm_anon      Permissions anonymous users have
+* @return   string                  HTML redirect or error message
+* @global array core config vars
+* @global array core group data
+* @global array core table data
+* @global array core user data
+* @global array core msg data
+* @global array links plugin lang admin vars
+*
+*/
+function savelink ($lid, $old_lid, $category, $categorydd, $url, $description, $title, $hits, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon)
+{
+    global $_CONF, $_GROUPS, $_TABLES, $_USER, $MESSAGE, $LANG_LINKS_ADMIN;
+
+    $retval = '';
+
+    // Convert array values to numeric permission values
+    if (is_array($perm_owner) OR is_array($perm_group) OR is_array($perm_members) OR is_array($perm_anon)) {
+        list($perm_owner,$perm_group,$perm_members,$perm_anon) = SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon);
+    }
+
+    // clean 'em up 
+    $description = addslashes (COM_checkHTML (COM_checkWords ($description)));
+    $title = addslashes (COM_checkHTML (COM_checkWords ($title)));
+    $category = addslashes ($category);
+
+    if (empty ($owner_id)) {
+        // this is new link from admin, set default values
+        $owner_id = $_USER['uid'];
+        if (isset ($_GROUPS['Links Admin'])) {
+            $group_id = $_GROUPS['Links Admin'];
+        } else {
+            $group_id = SEC_getFeatureGroup ('links.edit');
+        }
+        $perm_owner = 3;
+        $perm_group = 2;
+        $perm_members = 2;
+        $perm_anon = 2;
+    }
+
+    if (empty ($lid)) {
+        if (empty ($old_lid)) {
+            $lid = COM_makeSid ();
+        } else {
+            $lid = $old_lid;
+        }
+    }
+
+    $access = 0;
+    $old_lid = addslashes ($old_lid);
+    if (DB_count ($_TABLES['links'], 'lid', $old_lid) > 0) {
+        $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE lid = '{$old_lid}'");
+        $A = DB_fetchArray ($result);
+        $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
+                $A['perm_owner'], $A['perm_group'], $A['perm_members'],
+                $A['perm_anon']);
+    } else {
+        $access = SEC_hasAccess ($owner_id, $group_id, $perm_owner, $perm_group,
+                $perm_members, $perm_anon);
+    }
+    if (($access < 3) || !SEC_inGroup ($group_id)) {
+        $display .= COM_siteHeader ('menu');
+        $display .= COM_startBlock ($MESSAGE[30], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'));
+        $display .= $MESSAGE[31];
+        $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+        $display .= COM_siteFooter ();
+        COM_accessLog("User {$_USER['username']} tried to illegally submit or edit link $lid.");
+        echo $display;
+        exit;
+    } elseif (!empty($title) && !empty($description) && !empty($url)) {
+
+        if ($categorydd != $LANG_LINKS_ADMIN[7] && !empty($categorydd)) {
+            $category = addslashes ($categorydd);
+        } else if ($categorydd != $LANG_LINKS_ADMIN[7]) {
+            echo COM_refresh($_CONF['site_admin_url'] . '/plugins/links/index.php');
+        }
+
+        DB_delete ($_TABLES['linksubmission'], 'lid', $old_lid);
+        DB_delete ($_TABLES['links'], 'lid', $old_lid);
+
+        DB_save ($_TABLES['links'], 'lid,category,url,description,title,date,hits,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon', "'$lid','$category','$url','$description','$title',NOW(),'$hits',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon");
+        COM_rdfUpToDateCheck ('links', $category, $lid);
+
+        return COM_refresh ($_CONF['site_admin_url'] . '/plugins/links/index.php?msg=2');
+    } else { // missing fields
+        $retval .= COM_siteHeader('menu');
+        $retval .= COM_errorLog($LANG_LINKS_ADMIN[10],2);
+        if (DB_count ($_TABLES['links'], 'lid', $old_lid) > 0) {
+            $retval .= editlink ('edit', $old_lid);
+        } else {
+            $retval .= editlink ('edit', '');
+        }
+        $retval .= COM_siteFooter();
+
+        return $retval;
+    }
+}
+/**
+ * List links
+ * @global array core config vars
+ * @global array core table data
+ * @global array core user data
+ * @global array core lang admin vars
+ * @global array links plugin lang vars
+ * @global array core lang access vars
+ */
+function listlinks ()
+{
+    global $_CONF, $_TABLES, $LANG_ADMIN, $LANG_LINKS_ADMIN, $LANG_ACCESS, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_LINKS_ADMIN[2], 'field' => 'lid', 'sort' => true),
+                    array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true),
+                    array('text' => $LANG_ACCESS['access'], 'field' => 'access', 'sort' => false),
+                    array('text' => $LANG_LINKS_ADMIN[14], 'field' => 'category', 'sort' => true));
+
+    $defsort_arr = array('field' => 'title', 'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_url'] . '/admin/plugins/links/index.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home']));
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG_LINKS_ADMIN[11], 'instructions' => $LANG_LINKS_ADMIN[12],
+                      'icon' => $_CONF['site_url'] . '/links/images/links.png',
+                      'form_url' => $_CONF['site_admin_url'] . "/plugins/links/index.php");
+
+    $query_arr = array('table' => 'links',
+                       'sql' => "SELECT * FROM {$_TABLES['links']} WHERE 1",
+                       'query_fields' => array('title', 'category', 'url'),
+                       'default_filter' => COM_getPermSql ('AND'));
+
+    $retval .= ADMIN_list ("links", "plugin_getListField_links", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
+    return $retval;
+
+}
+
+/**
+* Delete a link
+*
+* @param    string  $lid    id of link to delete
+* @return   string          HTML redirect
+*
+*/
+function deleteLink ($lid)
+{
+    global $_CONF, $_TABLES, $_USER;
+
+    $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE lid ='$lid'");
+    $A = DB_fetchArray ($result);
+    $access = SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'],
+            $A['perm_group'], $A['perm_members'], $A['perm_anon']);
+    if ($access < 3) {
+        COM_accessLog ("User {$_USER['username']} tried to illegally delete link $lid.");
+        return COM_refresh ($_CONF['site_admin_url'] . '/plugins/links/index.php');
+    }
+
+    DB_delete ($_TABLES['links'], 'lid', $lid);
+
+    return COM_refresh ($_CONF['site_admin_url'] . '/plugins/links/index.php?msg=3');
+}
+
+// MAIN
+$mode = '';
+if (isset ($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
+}
+
+if (($mode == $LANG_LINKS_ADMIN[23]) && !empty ($LANG_LINKS_ADMIN[23])) { // delete
+    $lid = COM_applyFilter ($_POST['lid']);
+    if (!isset ($lid) || empty ($lid)) {  // || ($lid == 0)
+        COM_errorLog ('Attempted to delete link lid=' . $lid );
+        $display .= COM_refresh ($_CONF['site_admin_url'] . '/plugins/links/index.php');
+    } else {
+        $display .= deleteLink ($lid);
+    }
+} else if (($mode == $LANG_LINKS_ADMIN[21]) && !empty ($LANG_LINKS_ADMIN[21])) { // save
+    $display .= savelink (COM_applyFilter ($_POST['lid']),
+            COM_applyFilter ($_POST['old_lid']),
+            $_POST['category'], $_POST['categorydd'],
+            $_POST['url'], $_POST['description'], $_POST['title'],
+            COM_applyFilter ($_POST['hits'], true),
+            $_POST['owner_id'], $_POST['group_id'],
+            $_POST['perm_owner'], $_POST['perm_group'],
+            $_POST['perm_members'], $_POST['perm_anon']);
+} else if ($mode == 'editsubmission') {
+    $display .= COM_siteHeader ('menu', $LANG_LINKS_ADMIN[1]);
+    $display .= editlink ($mode, COM_applyFilter ($_GET['id']));
+    $display .= COM_siteFooter ();
+} else if ($mode == 'edit') {
+    $display .= COM_siteHeader ('menu', $LANG_LINKS_ADMIN[1]);
+    if (empty ($_GET['lid'])) {
+        $display .= editlink ($mode);
+    } else {
+        $display .= editlink ($mode, COM_applyFilter ($_GET['lid']));
+    }
+    $display .= COM_siteFooter ();
+} else { // 'cancel' or no mode at all
+    $display .= COM_siteHeader ('menu', $LANG_LINKS_ADMIN[11]);
+    if (isset ($_REQUEST['msg'])) {
+        $msg = COM_applyFilter ($_REQUEST['msg'], true);
+        if ($msg > 0) {
+            $display .= COM_showMessage ($msg, 'links');
+        }
+    }
+    $display .= listlinks();
+    $display .= COM_siteFooter ();
+}
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/admin/plugins/links/install.php 1.4.0sr5-1/admin/plugins/links/install.php
--- 1.3.11sr1/admin/plugins/links/install.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/links/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,358 @@
+<?php
+
+// Reminder: always indent with 4 spaces (no tabs). 
+// +---------------------------------------------------------------------------+
+// | Links plugin 1.0 for Geeklog                                              |
+// +---------------------------------------------------------------------------+
+// | install.php                                                               |
+// |                                                                           |
+// | This file installs and removes the data structures for the                |
+// | Links plugin for Geeklog.                                                 |
+// +---------------------------------------------------------------------------+
+// | Based on the Universal Plugin and prior work by the following authors:    |
+// |                                                                           |
+// | Copyright (C) 2002-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Tom Willett       - tom AT pigstye DOT net                       |
+// |          Blaine Lang       - blaine AT portalparts DOT com                |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+
+/** 
+ * This file installs and removes the data structures for the    
+ * Links plugin for Geeklog.  
+ * 
+ * @package Links
+ * @subpackage admin
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+// $Id: install.php,v 1.11 2006/02/11 10:21:05 dhaun Exp $
+
+require_once ('../../../lib-common.php');
+
+// Plugin information
+/**
+ * plugin display name
+ * @global string $pi_display_name
+ */
+$pi_display_name = 'Links';
+/**
+ * plugin name
+ * @global string $pi_name
+ */
+$pi_name         = 'links';
+/**
+ * plugin version
+ * @global string $pi_version
+ */
+$pi_version      = '1.0';
+/**
+ * plugin suported GL version
+ * @global string $gl_version
+ */
+$gl_version      = '1.4.0';
+/**
+ * plugin suport website url
+ * @global string $pi_url
+ */
+$pi_url          = 'http://www.geeklog.net/';
+/**
+ * name of the Admin group
+ * @global string $pi_admin
+ */
+$pi_admin        = $pi_display_name . ' Admin';
+
+
+/**
+ * the plugin's groups - assumes first group to be the Admin group
+ * @global array $GROUPS
+ * 
+ */
+$GROUPS = array();
+$GROUPS[$pi_admin] = 'Has full access to ' . $pi_name . ' features';
+
+/**
+* @global array $FEATURES
+* 
+*/
+$FEATURES = array();
+$FEATURES['links.edit']         = 'Access to links editor';
+$FEATURES['links.moderate']     = 'Ability to moderate pending links';
+$FEATURES['links.submit']       = 'May skip the links submission queue';
+
+/**
+ * @global array $MAPPINGS
+ * 
+ */
+$MAPPINGS = array();
+$MAPPINGS['links.edit']         = array ($pi_admin);
+$MAPPINGS['links.moderate']     = array ($pi_admin);
+$MAPPINGS['links.submit']       = array ($pi_admin);
+
+/**
+ * (optional) data to pre-populate tables with
+ * Insert table name and sql to insert default data for your plugin.
+ * Note: '#group#' will be replaced with the id of the plugin's admin group.
+ * @global array $DEFVALUES
+ * @name $DEFVALUES
+ */
+$DEFVALUES = array();
+$DEFVALUES[] = "INSERT INTO {$_TABLES['links']} (lid, category, url, description, title, date, owner_id, group_id, perm_group) VALUES ('geeklog.net', 'Geeklog Sites', 'http://www.geeklog.net/', 'Visit the Geeklog homepage for support, FAQs, updates, add-ons, and a great community.', 'Geeklog Project Homepage', NOW(), 1, #group#, 3)";
+
+/**
+ * Checks the requirements for this plugin and if it is compatible with this
+ * version of Geeklog.
+ *
+ * @return   boolean     true = proceed with install, false = not compatible
+ *
+ */
+function plugin_compatible_with_this_geeklog_version ()
+{
+    return true;
+}
+//
+// ----------------------------------------------------------------------------
+//
+// The code below should be the same for most plugins and usually won't
+// require modifications.
+
+$base_path = $_CONF['path'] . 'plugins/' . $pi_name . '/';
+$langfile = $base_path . $_CONF['language'] . '.php';
+if (file_exists ($langfile)) {
+    require_once ($langfile);
+} else {
+    require_once ($base_path . 'language/english.php');
+}
+require_once ($base_path . 'config.php');
+require_once ($base_path . 'functions.inc');
+
+
+// Only let Root users access this page
+if (!SEC_inGroup ('Root')) {
+    // Someone is trying to illegally access this page
+    COM_accessLog ("Someone has tried to illegally access the {$pi_display_name} install/uninstall page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$_SERVER['REMOTE_ADDR']}", 1);
+
+    $display = COM_siteHeader ('menu', $LANG_ACCESS['accessdenied'])
+             . COM_startBlock ($LANG_ACCESS['accessdenied'])
+             . $LANG_ACCESS['plugin_access_denied_msg']
+             . COM_endBlock ()
+             . COM_siteFooter ();
+
+    echo $display;
+    exit;
+}
+ 
+
+/**
+* Puts the datastructures for this plugin into the Geeklog database
+* @global array core config vars
+* @global array core table data
+* @global array core user data
+* @global array plugin group data
+* @global array plugin feature data
+* @global array plugin feature mapping data
+* @global array data to preopulate db
+* @global string path data
+* @global string plugin name
+* @global string plugin display name
+* @global string plugin version
+* @global string geeklog supported version
+* @global string plugin support url
+* @return boolean true if compleated false if failed
+*/
+function plugin_install_now()
+{
+    global $_CONF, $_TABLES, $_USER, $GROUPS, $FEATURES, $MAPPINGS, $DEFVALUES,
+           $base_path,
+           $pi_name, $pi_display_name, $pi_version, $gl_version, $pi_url;
+
+    COM_errorLog ("Attempting to install the $pi_display_name plugin", 1);
+
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+
+    // create the plugin's groups
+    $admin_group_id = 0;
+    foreach ($GROUPS as $name => $desc) {
+        COM_errorLog ("Attempting to create $name group", 1);
+
+        $grp_name = addslashes ($name);
+        $grp_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr) VALUES ('$grp_name', '$grp_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+
+        // replace the description with the new group id so we can use it later
+        $GROUPS[$name] = DB_insertId ();
+
+        // assume that the first group is the plugin's Admin group
+        if ($admin_group_id == 0) {
+            $admin_group_id = $GROUPS[$name];
+        }
+    }
+
+    // Create the plugin's table(s)
+    $_SQL = array ();
+    if (file_exists ($base_path . 'sql/install.php')) {
+        require_once ($base_path . 'sql/install.php');
+    }
+
+    foreach ($_SQL as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql);
+        if (DB_error ()) {
+            COM_errorLog ('Error creating table', 1);
+            $uninstall_plugin ();
+
+            return false;
+        }
+    }
+
+    // Add the plugin's features
+    COM_errorLog ("Attempting to add $pi_display_name feature(s)", 1);
+
+    foreach ($FEATURES as $feature => $desc) {
+        $ft_name = addslashes ($feature);
+        $ft_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
+                  . "VALUES ('$ft_name', '$ft_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+
+        $feat_id = DB_insertId ();
+
+        if (isset ($MAPPINGS[$feature])) {
+            foreach ($MAPPINGS[$feature] as $group) {
+                COM_errorLog ("Adding $feature feature to the $group group", 1);
+                DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($feat_id, {$GROUPS[$group]})");
+                if (DB_error ()) {
+                    $uninstall_plugin ();
+
+                    return false;
+                }
+            }
+        }
+    }
+
+    // Add plugin's Admin group to the Root user group
+    // (assumes that the Root group's ID is always 1)
+    COM_errorLog ("Attempting to give all users in the Root group access to the $pi_display_name's Admin group", 1);
+
+    DB_query ("INSERT INTO {$_TABLES['group_assignments']} VALUES "
+              . "($admin_group_id, NULL, 1)");
+    if (DB_error ()) {
+        $uninstall_plugin ();
+
+        return false;
+    }
+
+    // Pre-populate tables or run any other SQL queries
+    COM_errorLog ('Inserting default data', 1);
+    foreach ($DEFVALUES as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql, 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+    }
+
+    // Finally, register the plugin with Geeklog
+    COM_errorLog ("Registering $pi_display_name plugin with Geeklog", 1);
+
+    // silently delete an existing entry
+    DB_delete ($_TABLES['plugins'], 'pi_name', $pi_name);
+
+    DB_query("INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_homepage, pi_enabled) VALUES "
+        . "('$pi_name', '$pi_version', '$gl_version', '$pi_url', 1)");
+
+    if (DB_error ()) {
+        $uninstall_plugin ();
+
+        return false;
+    }
+
+    COM_errorLog ("Successfully installed the $pi_display_name plugin!", 1);
+
+    return true;
+}
+
+
+// MAIN
+$display = '';
+
+if ($_REQUEST['action'] == 'uninstall') {
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+    if ($uninstall_plugin ()) {
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=45');
+    } else {
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=73');
+    }
+} else if (DB_count ($_TABLES['plugins'], 'pi_name', $pi_name) == 0) {
+    // plugin not installed
+
+    if (plugin_compatible_with_this_geeklog_version ()) {
+        if (plugin_install_now ()) {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=44');
+        } else {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=72');
+        }
+    } else {
+        // plugin needs a newer version of Geeklog
+        $display .= COM_siteHeader ('menu', $LANG32[8])
+                 . COM_startBlock ($LANG32[8])
+                 . '<p>' . $LANG32[9] . '</p>'
+                 . COM_endBlock ()
+                 . COM_siteFooter ();
+    }
+} else {
+    // plugin already installed
+    $display .= COM_siteHeader ('menu', $LANG01[77])
+             . COM_startBlock ($LANG32[6])
+             . '<p>' . $LANG32[7] . '</p>'
+             . COM_endBlock ()
+             . COM_siteFooter();
+}
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/admin/plugins/polls/index.php 1.4.0sr5-1/admin/plugins/polls/index.php
--- 1.3.11sr1/admin/plugins/polls/index.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/polls/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,445 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | index.php                                                                 |
+// |                                                                           |
+// | Geeklog poll administration page                                          |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: index.php,v 1.23 2005/12/22 14:39:46 ospiess Exp $
+
+// Set this to true if you want to log debug messages to error.log
+$_POLL_VERBOSE = false;
+
+require_once ('../../../lib-common.php');
+require_once ('../../auth.inc.php');
+
+// number of polls to list per page
+define ('POLLS_PER_PAGE', 50);
+
+$display = '';
+
+if (!SEC_hasRights ('polls.edit')) {
+    $display .= COM_siteHeader ('menu');
+    $display .= COM_startBlock ($MESSAGE[30], '',
+                                COM_getBlockTemplate ('_msg_block', 'header'));
+    $display .= $MESSAGE[36];
+    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    $display .= COM_siteFooter ();
+    COM_accessLog ("User {$_USER['username']} tried to illegally access the poll administration screen.");
+    echo $display;
+    exit;
+}
+
+// Uncomment the line below if you need to debug the HTTP variables being passed
+// to the script.  This will sometimes cause errors but it will allow you to see
+// the data being passed in a POST operation
+// echo COM_debug($_POST);
+
+function listpolls()
+{
+    global $_CONF, $_TABLES, $_IMAGE_TYPE, $LANG_ADMIN, $LANG25, $LANG_ACCESS;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG25[9], 'field' => 'question', 'sort' => true),
+                    array('text' => $LANG25[20], 'field' => 'voters', 'sort' => true),
+                    array('text' => $LANG_ACCESS['access'], 'field' => 'access', 'sort' => false),
+                    array('text' => $LANG25[3], 'field' => 'unixdate', 'sort' => true),
+                    array('text' => $LANG25[8], 'field' => 'display', 'sort' => true));
+
+    $defsort_arr = array('field' => 'unixdate', 'direction' => 'desc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/plugins/polls/index.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home']));
+
+    $text_arr = array('has_menu' =>  true,
+                      'title' => $LANG25[18], 'instructions' => $LANG25[19],
+                      'icon' => $_CONF['site_url'] . '/polls/images/polls.png',
+                      'form_url' => $_CONF['site_admin_url'] . "/plugins/polls/index.php");
+
+    $query_arr = array('table' => 'pollquestions',
+                       'sql' => "SELECT *,UNIX_TIMESTAMP(date) AS unixdate FROM {$_TABLES['pollquestions']} WHERE 1",
+                       'query_fields' => array('question'),
+                       'default_filter' => '');
+
+    $retval = ADMIN_list ("polls", "plugin_getListField_polls", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
+    return $retval;
+}
+
+/**
+* Saves a poll
+*
+* Saves a poll question and potential answers to the database
+*
+* @param    string  $qid            Question ID
+* @param    int     $display        Flag to indicate if poll appears on homepage
+* @param    string  $question       The text for the question
+* @param    int     $voters         Number of votes
+* @param    int     $statuscode     (unused)
+* @param    int     $commentcode    Indicates if users can comment on poll
+* @param    array   $A              Array of possible answers
+* @param    array   $V              Array of vote per each answer 
+* @param    int     $owner_id       ID of poll owner
+* @param    int     $group_id       ID of group poll belongs to
+* @param    int     $perm_owner     Permissions the owner has on poll
+* @param    int     $perm_grup      Permissions the group has on poll
+* @param    int     $perm_members   Permissions logged in members have on poll
+* @param    int     $perm_anon      Permissions anonymous users have on poll
+* @return   string                  HTML redirect or error message
+*
+*/
+function savepoll ($qid, $mainpage, $question, $voters, $statuscode, $commentcode, $A, $V, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon) 
+{
+    global $_CONF, $_TABLES, $LANG21, $LANG25, $MESSAGE, $_POLL_VERBOSE;
+
+    // Convert array values to numeric permission values
+    list($perm_owner,$perm_group,$perm_members,$perm_anon) = SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon);
+
+    $qid = COM_sanitizeID ($qid);
+
+    $question = COM_stripslashes ($question);
+    for ($i = 0; $i < sizeof ($A); $i++) {
+        $A[$i] = COM_stripslashes ($A[$i]);
+    }
+    if (!empty ($question) && (sizeof ($A) > 0) && strlen ($A[0]) > 0) {
+
+        if ($_POLL_VERBOSE) {
+            COM_errorLog ('**** Inside savepoll() in '
+                          . $_CONF['site_admin_url'] . '/plugins/polls/index.php ***');
+        }
+
+        $qid = str_replace (' ', '', $qid); // strip spaces from poll id
+
+        $access = 0;
+        if (DB_count ($_TABLES['pollquestions'], 'qid', $qid) > 0) {
+            $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid = '{$qid}'");
+            $P = DB_fetchArray ($result);
+            $access = SEC_hasAccess ($P['owner_id'], $P['group_id'],
+                    $P['perm_owner'], $P['perm_group'], $P['perm_members'],
+                    $P['perm_anon']);
+        } else {
+            $access = SEC_hasAccess ($owner_id, $group_id, $perm_owner,
+                                     $perm_group, $perm_members, $perm_anon);
+        }
+        if (($access < 3) || !SEC_inGroup ($group_id)) {
+            $display .= COM_siteHeader ('menu');
+            $display .= COM_startBlock ($MESSAGE[30], '',
+                                COM_getBlockTemplate ('_msg_block', 'header'));
+            $display .= $MESSAGE[31];
+            $display .= COM_endBlock ();
+            $display .= COM_siteFooter (COM_getBlockTemplate ('_msg_block',
+                                                              'footer'));
+            COM_accessLog("User {$_USER['username']} tried to illegally submit or edit poll $qid.");
+            echo $display;
+            exit;
+        }
+
+        if (empty ($voters)) { 
+            $voters = '0'; 
+        }
+
+        if ($_POLL_VERBOSE) {
+            COM_errorLog('owner permissions: ' . $perm_owner, 1);
+            COM_errorLog('group permissions: ' . $perm_group, 1);
+            COM_errorLog('member permissions: ' . $perm_members, 1);
+            COM_errorLog('anonymous permissions: ' . $perm_anon, 1);
+        }
+
+        DB_delete ($_TABLES['pollquestions'], 'qid', $qid);
+        DB_delete ($_TABLES['pollanswers'], 'qid', $qid);
+
+        $question = addslashes ($question);
+        $sql = "'$qid','$question',$voters,'" . date ('Y-m-d H:i:s');
+
+        if ($mainpage == 'on') { 
+            $sql .= "',1";
+        } else {
+            $sql .= "',0";
+        }
+
+        $sql .= ",'$statuscode','$commentcode',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon";
+
+        // Save poll question
+        DB_save($_TABLES['pollquestions'],"qid, question, voters, date, display, statuscode, commentcode, owner_id, group_id, perm_owner, perm_group, perm_members, perm_anon",$sql);
+
+        // Save poll answers
+        for ($i = 0; $i < sizeof($A); $i++) {
+            if (strlen ($A[$i]) > 0) {
+                if (empty($V[$i])) { 
+                    $V[$i] = "0"; 
+                }
+                $A[$i] = addslashes ($A[$i]);
+                DB_save ($_TABLES['pollanswers'], 'qid, aid, answer, votes',
+                         "'$qid', $i+1, '$A[$i]', $V[$i]");
+            }
+        }
+
+        if ($_POLL_VERBOSE) {
+            COM_errorLog ('**** Leaving savepoll() in '
+                          . $_CONF['site_admin_url'] . '/plugins/polls/index.php ***');
+        }
+
+        return COM_refresh($_CONF['site_admin_url'] . '/plugins/polls/index.php?msg=19');
+
+    } else {
+        $retval .= COM_siteHeader ('menu');
+        $retval .= COM_startBlock ($LANG21[32], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'));
+        $retval .= $LANG25[2];
+        $retval .= COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
+        $retval .= editpoll ($qid);
+        $retval .= COM_siteFooter ();
+
+        return $retval;
+    }
+}
+
+/**
+* Shows poll editor
+*
+* Diplays the poll editor form
+*
+* @param    string  $qid    ID of poll to edit
+* @return   string          HTML for poll editor form
+*
+*/
+function editpoll ($qid = '')
+{
+    global $_CONF, $_PO_CONF, $_GROUPS, $_TABLES, $_USER, $LANG25, $LANG_ACCESS;
+
+    $retval = '';
+
+    $poll_templates = new Template($_CONF['path'] . 'plugins/polls/templates/admin/');
+    $poll_templates->set_file(array('editor'=>'polleditor.thtml','answer'=>'pollansweroption.thtml'));
+    $poll_templates->set_var('site_url', $_CONF['site_url']);
+    $poll_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
+    $poll_templates->set_var('layout_url', $_CONF['layout_url']);
+
+    if (!empty ($qid)) {
+        $question = DB_query("SELECT * FROM {$_TABLES['pollquestions']} WHERE qid='$qid'");
+        $answers = DB_query("SELECT answer,aid,votes FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY aid");
+        $Q = DB_fetchArray($question);
+
+        // Get permissions for poll
+    
+        $access = SEC_hasAccess($Q['owner_id'],$Q['group_id'],$Q['perm_owner'],$Q['perm_group'],$Q['perm_members'],$Q['perm_anon']);
+    
+        if ($access == 0 OR $access == 2) {
+            // User doesn't have access...bail
+            $retval .= COM_startBlock ($LANG25[21], '',
+                               COM_getBlockTemplate ('_msg_block', 'header'));
+            $retval .= $LANG25[22];
+            $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+            COM_accessLog("User {$_USER['username']} tried to illegally submit or edit poll $qid.");
+            return $retval;
+        }
+    }
+
+    $retval .= COM_startBlock ($LANG25[5], '',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+
+    if (!empty ($qid) AND ($access == 3) AND !empty ($Q['owner_id'])) {
+        $poll_templates->set_var('delete_option',
+            '<input type="submit" name="mode" value="' . $LANG25[16] . '">');
+    } else {
+        $Q['owner_id'] = $_USER['uid'];
+        if (isset ($_GROUPS['Polls Admin'])) {
+            $Q['group_id'] = $_GROUPS['Polls Admin'];
+        } else {
+            $Q['group_id'] = SEC_getFeatureGroup ('polls.edit');
+        }
+        SEC_setDefaultPermissions ($Q, $_PO_CONF['default_permissions']);
+        $Q['statuscode'] = 0;
+        $Q['commentcode'] = $_CONF['comment_code'];
+        $access = 3;
+    }
+
+    $poll_templates->set_var('lang_pollid', $LANG25[6]);
+    $poll_templates->set_var('poll_id', $Q['qid']);
+    $poll_templates->set_var('lang_donotusespaces', $LANG25[7]);
+    $poll_templates->set_var('lang_question', $LANG25[9]);
+    $poll_templates->set_var('poll_question', htmlspecialchars ($Q['question']));
+    $poll_templates->set_var('lang_mode', $LANG25[1]);
+    $poll_templates->set_var ('status_options', COM_optionList ($_TABLES['statuscodes'], 'code,name', $Q['statuscode'])); 
+    $poll_templates->set_var('comment_options', COM_optionList($_TABLES['commentcodes'],'code,name',$Q['commentcode']));
+    $poll_templates->set_var('lang_appearsonhomepage', $LANG25[8]);
+
+    if ($Q['display'] == 1) { 
+        $poll_templates->set_var('poll_display', 'checked');
+    }
+
+    // user access info 
+    $poll_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
+    $poll_templates->set_var('lang_owner', $LANG_ACCESS['owner']);
+    $poll_templates->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = {$Q['owner_id']}"));
+    $poll_templates->set_var('owner_id', $Q['owner_id']);
+    $poll_templates->set_var('lang_group', $LANG_ACCESS['group']);
+   
+    $groupdd = ''; 
+    $usergroups = SEC_getUserGroups();
+    if ($access == 3) {
+        $groupdd .= '<select name="group_id">';
+        for ($i = 0; $i < count($usergroups); $i++) {
+            $groupdd .= '<option value="' . $usergroups[key($usergroups)] . '"';
+            if ($Q['group_id'] == $usergroups[key($usergroups)]) {
+                $groupdd .= ' selected';
+            }
+            $groupdd .=  '>' . key($usergroups) . '</option>';
+            next($usergroups);
+        }
+        $groupdd .=  '</SELECT>';
+    } else {
+        // they can't set the group then
+        $groupdd .= DB_getItem($_TABLES['groups'],'grp_name',"grp_id = {$Q['group_id']}");
+        $groupdd .= '<input type="hidden" name="group_id" value="' . $A['group_id'] . '">';
+    }
+    $poll_templates->set_var('group_dropdown', $groupdd);
+    $poll_templates->set_var('lang_permissions', $LANG_ACCESS['permissions']);
+    $poll_templates->set_var('lang_permissionskey', $LANG_ACCESS['permissionskey']);
+    $poll_templates->set_var('permissions_editor', SEC_getPermissionsHTML($Q['perm_owner'],$Q['perm_group'],$Q['perm_members'],$Q['perm_anon']));
+    $poll_templates->set_var('lang_permissions_msg', $LANG_ACCESS['permmsg']);
+    $poll_templates->set_var('lang_answersvotes', $LANG25[10]);   
+    $poll_templates->set_var('lang_save', $LANG25[14]);   
+    $poll_templates->set_var('lang_cancel', $LANG25[15]);   
+ 
+    for ($i = 1; $i <= $_PO_CONF['maxanswers']; $i++) {
+        $A = DB_fetchArray($answers);
+        $poll_templates->set_var('answer_text', htmlspecialchars ($A['answer']));
+        $poll_templates->set_var('answer_votes', $A['votes']);
+        if ($i < $_PO_CONF['maxanswers']) {
+            $poll_templates->parse('answer_option','answer',true);
+        }
+    }
+
+    $poll_templates->parse('output','editor');
+    $retval .= $poll_templates->finish($poll_templates->get_var('output'));
+
+    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+
+    return $retval;
+}
+
+/**
+* Delete a poll
+*
+* @param    string  $qid    ID of poll to delete
+* @return   string          HTML redirect
+*
+*/
+function deletePoll ($qid)
+{
+    global $_CONF, $_TABLES, $_USER;
+
+    $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid = '$qid'");
+    $Q = DB_fetchArray ($result);
+    $access = SEC_hasAccess ($Q['owner_id'], $Q['group_id'], $Q['perm_owner'],
+            $Q['perm_group'], $Q['perm_members'], $Q['perm_anon']);
+    if ($access < 3) {
+        COM_accessLog ("User {$_USER['username']} tried to illegally delete poll $qid.");
+        return COM_refresh ($_CONF['site_admin_url'] . '/plugins/polls/index.php');
+    }
+
+    DB_delete ($_TABLES['pollquestions'], 'qid', $qid);
+    DB_delete ($_TABLES['pollanswers'], 'qid', $qid);
+    DB_query ("DELETE FROM {$_TABLES['comments']} WHERE sid = '$qid' AND type = 'polls'");
+
+    return COM_refresh ($_CONF['site_admin_url'] . '/plugins/polls/index.php?msg=20');
+}
+
+// MAIN
+
+$display = '';
+
+$mode = '';
+if (isset ($_REQUEST['mode'])) {
+    $mode = COM_applyFilter($_REQUEST['mode']);
+}
+
+if ($mode == 'edit') {
+    $display .= COM_siteHeader ('menu', $LANG25[5]);
+    $display .= editpoll (COM_applyFilter ($_GET['qid']));
+    $display .= COM_siteFooter ();
+} else if (($mode == $LANG25[14]) && !empty ($LANG25[14])) { // save
+    $qid = COM_applyFilter ($_POST['qid']);
+    if (!empty ($qid)) {
+        $voters = 0;
+        for ($i = 0; $i < sizeof ($_POST['answer']); $i++) {
+            $voters = $voters + $_POST['votes'][$i];
+        }
+        $display .= savepoll ($qid, $_POST['mainpage'],
+                        $_POST['question'], $voters,
+                        COM_applyFilter ($_POST['statuscode'], true),
+                        COM_applyFilter ($_POST['commentcode'], true),
+                        $_POST['answer'], $_POST['votes'],
+                        $_POST['owner_id'],
+                        $_POST['group_id'],
+                        $_POST['perm_owner'],
+                        $_POST['perm_group'],
+                        $_POST['perm_members'],
+                        $_POST['perm_anon']);
+    } else {
+        $display .= COM_siteHeader ('menu');
+        $display .= COM_startBlock ($LANG21[32], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'));
+        $display .= $LANG25[17];
+        $display .= COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
+        $display .= editpoll ();
+        $display .= COM_siteFooter ();
+    }
+} else if (($mode == $LANG25[16]) && !empty ($LANG25[16])) { // delete
+    $qid = COM_applyFilter ($_POST['qid']);
+    if (!isset ($qid) || empty ($qid)) {
+        COM_errorLog ('Attempted to delete poll qid=' . $_POST['qid']);
+        $display .= COM_refresh ($_CONF['site_admin_url'] . '/plugins/polls/index.php');
+    } else {
+        $display .= deletePoll ($qid);
+    }
+} else { // 'cancel' or no mode at all
+
+    $display .= COM_siteHeader ('menu', $LANG25[18]);
+    if (isset ($_REQUEST['msg'])) {
+        $msg = COM_applyFilter ($_REQUEST['msg'], true);
+        if ($msg > 0) {
+            $display .= COM_showMessage ($msg, 'polls');
+        }
+    }
+    $display .= listpolls();
+    $display .= COM_siteFooter ();
+}
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/admin/plugins/polls/install.php 1.4.0sr5-1/admin/plugins/polls/install.php
--- 1.3.11sr1/admin/plugins/polls/install.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/polls/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,287 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Polls plugin 1.0 for Geeklog                                              |
+// +---------------------------------------------------------------------------+
+// | install.php                                                               |
+// |                                                                           |
+// | This file installs and removes the data structures for the                |
+// | Polls plugin for Geeklog.                                                 |
+// +---------------------------------------------------------------------------+
+// | Based on the Universal Plugin and prior work by the following authors:    |
+// |                                                                           |
+// | Copyright (C) 2002-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Tom Willett       - tom AT pigstye DOT net                       |
+// |          Blaine Lang       - blaine AT portalparts DOT com                |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: install.php,v 1.8 2006/02/11 10:21:06 dhaun Exp $
+
+require_once ('../../../lib-common.php');
+
+// Plugin information
+//
+// ----------------------------------------------------------------------------
+//
+$pi_display_name = 'Polls';
+$pi_name         = 'polls';
+$pi_version      = '1.0';
+$gl_version      = '1.4.0';
+$pi_url          = 'http://www.geeklog.net/';
+
+// name of the Admin group
+$pi_admin        = $pi_display_name . ' Admin';
+
+// the plugin's groups - assumes first group to be the Admin group
+$GROUPS = array();
+$GROUPS[$pi_admin] = 'Has full access to ' . $pi_name . ' features';
+
+$FEATURES = array();
+$FEATURES['polls.edit']         = 'Access to polls editor';
+
+$MAPPINGS = array();
+$MAPPINGS['polls.edit']         = array ($pi_admin);
+
+// (optional) data to pre-populate tables with
+// Insert table name and sql to insert default data for your plugin.
+// Note: '#group#' will be replaced with the id of the plugin's admin group.
+$DEFVALUES = array();
+$DEFVALUES[] = "INSERT INTO {$_TABLES['pollquestions']} (qid, question, voters, date, display, commentcode, statuscode, owner_id, group_id, perm_owner, perm_group) VALUES ('geeklogfeaturepoll','What is the best new feature of Geeklog?',0,NOW(),1,0,0,{$_USER['uid']},#group#,3,3)";
+// more default data is in the install SQL file in the plugin's directory
+
+/**
+* Checks the requirements for this plugin and if it is compatible with this
+* version of Geeklog.
+*
+* @return   boolean     true = proceed with install, false = not compatible
+*
+*/
+function plugin_compatible_with_this_geeklog_version ()
+{
+    return true;
+}
+//
+// ----------------------------------------------------------------------------
+//
+// The code below should be the same for most plugins and usually won't
+// require modifications.
+
+$base_path = $_CONF['path'] . 'plugins/' . $pi_name . '/';
+$langfile = $base_path . $_CONF['language'] . '.php';
+if (file_exists ($langfile)) {
+    require_once ($langfile);
+} else {
+    require_once ($base_path . 'language/english.php');
+}
+require_once ($base_path . 'config.php');
+require_once ($base_path . 'functions.inc');
+
+
+// Only let Root users access this page
+if (!SEC_inGroup ('Root')) {
+    // Someone is trying to illegally access this page
+    COM_accessLog ("Someone has tried to illegally access the {$pi_display_name} install/uninstall page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$_SERVER['REMOTE_ADDR']}", 1);
+
+    $display = COM_siteHeader ('menu', $LANG_ACCESS['accessdenied'])
+             . COM_startBlock ($LANG_ACCESS['accessdenied'])
+             . $LANG_ACCESS['plugin_access_denied_msg']
+             . COM_endBlock ()
+             . COM_siteFooter ();
+
+    echo $display;
+    exit;
+}
+ 
+
+/**
+* Puts the datastructures for this plugin into the Geeklog database
+*
+*/
+function plugin_install_now()
+{
+    global $_CONF, $_TABLES, $_USER, $GROUPS, $FEATURES, $MAPPINGS, $DEFVALUES,
+           $base_path,
+           $pi_name, $pi_display_name, $pi_version, $gl_version, $pi_url;
+
+    COM_errorLog ("Attempting to install the $pi_display_name plugin", 1);
+
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+
+    // create the plugin's groups
+    $admin_group_id = 0;
+    foreach ($GROUPS as $name => $desc) {
+        COM_errorLog ("Attempting to create $name group", 1);
+
+        $grp_name = addslashes ($name);
+        $grp_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr) VALUES ('$grp_name', '$grp_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+
+        // replace the description with the new group id so we can use it later
+        $GROUPS[$name] = DB_insertId ();
+
+        // assume that the first group is the plugin's Admin group
+        if ($admin_group_id == 0) {
+            $admin_group_id = $GROUPS[$name];
+        }
+    }
+
+    // Create the plugin's table(s)
+    $_SQL = array ();
+    if (file_exists ($base_path . 'sql/install.php')) {
+        require_once ($base_path . 'sql/install.php');
+    }
+
+    foreach ($_SQL as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql);
+        if (DB_error ()) {
+            COM_errorLog ('Error creating table', 1);
+            $uninstall_plugin ();
+
+            return false;
+        }
+    }
+
+    // Add the plugin's features
+    COM_errorLog ("Attempting to add $pi_display_name feature(s)", 1);
+
+    foreach ($FEATURES as $feature => $desc) {
+        $ft_name = addslashes ($feature);
+        $ft_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
+                  . "VALUES ('$ft_name', '$ft_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+
+        $feat_id = DB_insertId ();
+
+        if (isset ($MAPPINGS[$feature])) {
+            foreach ($MAPPINGS[$feature] as $group) {
+                COM_errorLog ("Adding $feature feature to the $group group", 1);
+                DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($feat_id, {$GROUPS[$group]})");
+                if (DB_error ()) {
+                    $uninstall_plugin ();
+
+                    return false;
+                }
+            }
+        }
+    }
+
+    // Add plugin's Admin group to the Root user group
+    // (assumes that the Root group's ID is always 1)
+    COM_errorLog ("Attempting to give all users in the Root group access to the $pi_display_name's Admin group", 1);
+
+    DB_query ("INSERT INTO {$_TABLES['group_assignments']} VALUES "
+              . "($admin_group_id, NULL, 1)");
+    if (DB_error ()) {
+        $uninstall_plugin ();
+
+        return false;
+    }
+
+    // Pre-populate tables or run any other SQL queries
+    COM_errorLog ('Inserting default data', 1);
+    foreach ($DEFVALUES as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql, 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+    }
+
+    // Finally, register the plugin with Geeklog
+    COM_errorLog ("Registering $pi_display_name plugin with Geeklog", 1);
+
+    // silently delete an existing entry
+    DB_delete ($_TABLES['plugins'], 'pi_name', $pi_name);
+
+    DB_query("INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_homepage, pi_enabled) VALUES "
+        . "('$pi_name', '$pi_version', '$gl_version', '$pi_url', 1)");
+
+    if (DB_error ()) {
+        $uninstall_plugin ();
+
+        return false;
+    }
+
+    COM_errorLog ("Successfully installed the $pi_display_name plugin!", 1);
+
+    return true;
+}
+
+
+// MAIN
+$display = '';
+
+if ($_REQUEST['action'] == 'uninstall') {
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+    if ($uninstall_plugin ()) {
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=45');
+    } else {
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=73');
+    }
+} else if (DB_count ($_TABLES['plugins'], 'pi_name', $pi_name) == 0) {
+    // plugin not installed
+
+    if (plugin_compatible_with_this_geeklog_version ()) {
+        if (plugin_install_now ()) {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=44');
+        } else {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=72');
+        }
+    } else {
+        // plugin needs a newer version of Geeklog
+        $display .= COM_siteHeader ('menu', $LANG32[8])
+                 . COM_startBlock ($LANG32[8])
+                 . '<p>' . $LANG32[9] . '</p>'
+                 . COM_endBlock ()
+                 . COM_siteFooter ();
+    }
+} else {
+    // plugin already installed
+    $display .= COM_siteHeader ('menu', $LANG01[77])
+             . COM_startBlock ($LANG32[6])
+             . '<p>' . $LANG32[7] . '</p>'
+             . COM_endBlock ()
+             . COM_siteFooter();
+}
+
+echo $display;
+
+?>
Files 1.3.11sr1/admin/plugins/spamx/images/spamx.gif and 1.4.0sr5-1/admin/plugins/spamx/images/spamx.gif differ
Files 1.3.11sr1/admin/plugins/spamx/images/spamx.png and 1.4.0sr5-1/admin/plugins/spamx/images/spamx.png differ
diff -ruN 1.3.11sr1/admin/plugins/spamx/index.php 1.4.0sr5-1/admin/plugins/spamx/index.php
--- 1.3.11sr1/admin/plugins/spamx/index.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/spamx/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,7 +1,7 @@
 <?php
 
 // +---------------------------------------------------------------------------+
-// | SpamX plugin 1.0.1                                                        |
+// | Spam-X plugin 1.0.2                                                       |
 // +---------------------------------------------------------------------------+
 // | admin/index.php                                                           |
 // |                                                                           |
@@ -41,7 +41,7 @@
 // Only let admin users access this page
 if (!SEC_hasRights ('spamx.admin')) {
     // Someone is trying to illegally access this page
-    COM_errorLog ("Someone has tried to illegally access the spamx Admin page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$HTTP_SERVER_VARS['REMOTE_ADDR']}", 1);
+    COM_accessLog ("Someone has tried to illegally access the Spam-X Admin page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$_SERVER['REMOTE_ADDR']}", 1);
     $display = COM_siteHeader ();
     $display .= COM_startBlock ($LANG_SX00['access_denied']);
     $display .= $LANG_SX00['access_denied_msg'];
diff -ruN 1.3.11sr1/admin/plugins/spamx/install.html 1.4.0sr5-1/admin/plugins/spamx/install.html
--- 1.3.11sr1/admin/plugins/spamx/install.html	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/spamx/install.html	1969-12-31 18:00:00.000000000 -0600
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
-	<title>SpamX Comment Spam Plugin</title>
-</head>
-
-<body>
-<h1>SpamX Comment Spam Plugin Install Instructions</h1>
- 
-Tom Willett    tomw@pigstye.net<br>
-Unionville, Indiana, USA<br>
-June 13, 2004<p>
-
-Install/Uninstall instruction for the Geeklog SpamX plugin.<p>
-
-INSTALL:<p>
-
-Step 1:  Back up your Geeklog Database.  <p>
-
-Step 2: Uncompress the SpamX plugin archive while in the <geeklog_dir>/plugins directory.  The archive will 
-create a directory called spamx in the plugins directory.<p>
-
-Step 3:  Create the public_html and admin directories.  Under your html directory (usually public_html) 
-create a directory called spamx.  Under your admin/plugins/ directory create a directory called spamx.<p>
-
-Step 4:  Change to your <geeklog_dir>/plugins/spamx/ directory.  Copy the files in the admin directory 
-to the admin/plugins/spamx/ directory your created in step 3.  Copy the files and directories in the 
-public_html directory to the public_html/spamx/ directory your created in step 3.<p>
-
-Step 5: Make the files spamx_action.php, spamx_examine.php, blacklist.php and mtblacklist.php in the 
-public_html/spamx directory writable by you webserver.  Either chmod 766 or preferably chown the files 
-to the user the webserver runs under eg nobody or apache.  If you do not do this you will not be able 
-to use the admin interface.<p>
-
-Step 6:  Log in to your Geeklog as a root user and run install.php in your admin/plugins/SpamX/ directory 
-or run the plugin app in the admin interface and install from there. The install page will tell you if the 
-install was successful or not.  If not examine Geeklog system errorlog for possible problems.<p>
-
-Step 7: The final thing you must do is edit your comment.php (in public_html directory) and change the 
-function savecomment name to savecomment1.  The SpamX plugin should now be installed and functioning.  
-Clicking on the SpamX Icon will take you to the admin page.  <p>
-
-Step 7: Set up security.  On install only the root users have access to SpamX administration.  
-You can delegate control for admin through the user and group editors.<p>
-
-UNINSTALL:<p>
-
-Step 1:  Run the install.php page in your admin/plugins/SpamX directory.  This will remove all the data from 
-your database.<p>
-
-Step 2: Rename savecomment1 in comment.php back to savecomment.<p>
-
-Step 3:  Delete the three plugin directories created in the install process:  <geeklog-dir>plugins/SpamX/ 
-<public_html>/SpamX/ and <admin>/plugins/SpamX/<p>
-
-Thats it.
-</body>
-</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/admin/plugins/spamx/install.php 1.4.0sr5-1/admin/plugins/spamx/install.php
--- 1.3.11sr1/admin/plugins/spamx/install.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/spamx/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,38 +1,24 @@
 <?php
 
+/* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Universal Plugin 1.0 for Geeklog - The Ultimate Weblog                    |
+// | Spam-X plugin 1.0.3                                                       |
 // +---------------------------------------------------------------------------+
-// | install.php for spamx plugin                                              |
+// | install.php                                                               |
 // |                                                                           |
 // | This file installs and removes the data structures for the                |
-// | plugin for Geeklog.                                                       |
-// | This is a complete functioning install routine.  All you have to do is    |
-// | remove the sample data from the arrays and fill in the $NEWTABLE,         |
-// | $DEFVALUES, and $NEWFEATURE arrays with your data.  Then replace all      |
-// | occurances of spamx with the name of your plugin and you will have a   |
-// | functioning install page for your plugin.  Then customize the install     |
-// | display language in english.php and you are ready to distribute your      |
-// | plugin.                                                                   |
-// | Simply put here is what this install does:                                |
-// | 1) It creates the tables                                                  |
-// | 2) It creates an admin security group for you plugin                      |
-// | 3) It adds the security features and adds them to the admin group         |
-// | 4) It adds the plugin to the gl_plugins table                             |
-// | 5) It adds any default data you have provided                             |
+// | Spam-X plugin for Geeklog.                                                |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2002 by the following authors:                              |
+// | Based on the Universal Plugin and prior work by the following authors:    |
 // |                                                                           |
-// | Author:                                                                   |
-// | Constructed with the Universal Plugin                                     |
-// | Copyright (C) 2002 by the following authors:                              |
-// | Tom Willett                 -    twillett@users.sourceforge.net           |
-// | Blaine Lang                 -    langmail@sympatico.ca                    |
-// | The Universal Plugin is based on prior work by:                           |
-// | Tony Bibbs                  -    tony@tonybibbs.com                       |
+// | Copyright (C) 2002-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Tom Willett       - tom AT pigstye DOT net                       |
+// |          Blaine Lang       - blaine AT portalparts DOT com                |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
 // +---------------------------------------------------------------------------+
-// | Spamx Plugin Copyright (C) 2004 by                                        |
-// | Tom Willett             -   tomw@pigstye.net                              |
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
 // | modify it under the terms of the GNU General Public License               |
@@ -50,225 +36,250 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
+// $Id: install.php,v 1.14 2006/02/11 09:25:33 dhaun Exp $
 
-require_once('../../../lib-common.php');
-require_once($_CONF['path'] . 'plugins/spamx/config.php');
-require_once($_CONF['path'] . 'plugins/spamx/functions.inc');
+require_once ('../../../lib-common.php');
 
+// Plugin information
 //
-// Universal plugin install variables
-// Change these to match your plugin
+// ----------------------------------------------------------------------------
 //
+$pi_display_name = 'Spam-X';
+$pi_name         = 'spamx';
+$pi_version      = '1.0.3';
+$gl_version      = '1.4.0';
+$pi_url          = 'http://www.pigstye.net/gplugs/staticpages/index.php/spamx';
+
+// name of the Admin group
+$pi_admin        = $pi_name . ' Admin';
+
+// the plugin's groups - assumes first group to be the Admin group
+$GROUPS = array();
+$GROUPS[$pi_admin] = 'Users in this group can administer the Spam-X plugin';
 
-$pi_name = 'spamx';             // Plugin name  Must be 15 chars or less
-$pi_version = '1.0.1';          // Plugin Version
-$gl_version = '1.3.10';         // GL Version plugin for
-$pi_url = 'http://www.pigstye.net/gplugs/staticpages/index.php/spamx';      // Plugin Homepage
+$FEATURES = array();
+$FEATURES['spamx.admin']    = 'Full access to Spam-X plugin';
 
-//
-// $NEWTABLE contains table name(s) and sql to create it(them)
-// Fill it in and you are ready to go.
-// Note: you must put the table names in the uninstall routine in functions.inc 
-// and in the $_TABLES array in config.php.
-// Note: Be sure to replace table1, table2 with the actual names of your tables.
-// and the table definition with the definition of your table
-//
+$MAPPINGS = array();
+$MAPPINGS['spamx.admin']    = array ($pi_admin);
 
-$NEWTABLE = array();
-$NEWTABLE['spamx'] = "CREATE TABLE {$_TABLES['spamx']} ("
-	. " name varchar(20) NOT NULL default '',"
-	. " value varchar(255) NOT NULL default '',"
-	. " INDEX spamx_name(name)"
-	. ") TYPE=MyISAM";
-	
-//
-// Default data
+// (optional) data to pre-populate tables with
 // Insert table name and sql to insert default data for your plugin.
-//
+// Note: '#group#' will be replaced with the id of the plugin's admin group.
 $DEFVALUES = array();
-$DEFVALUES[]="INSERT INTO {$_TABLES['spamx']} VALUES ('Action','DeleteComment')";
-$DEFVALUES[]="INSERT INTO {$_TABLES['spamx']} VALUES ('Examine','BlackList')";
-$DEFVALUES[]="INSERT INTO {$_TABLES['spamx']} VALUES ('Examine','MTBlackList')";
-$DEFVALUES[]="INSERT INTO {$_TABLES['spamx']} VALUES ('Personal','zaraz.com')";
- 
+$DEFVALUES[] = "INSERT INTO {$_TABLES['vars']} VALUES ('spamx.counter', '0')";
+
+/**
+* Checks the requirements for this plugin and if it is compatible with this
+* version of Geeklog.
+*
+* @return   boolean     true = proceed with install, false = not compatible
+*
+*/
+function plugin_compatible_with_this_geeklog_version ()
+{
+    return true;
+}
 //
-// Security Feature to add
-// Fill in your security features here
-// Note you must add these features to the uninstall routine in function.inc so that they will
-// be removed when the uninstall routine runs.
-// You do not have to use these particular features.  You can edit/add/delete them
-// to fit your plugins security model
+// ----------------------------------------------------------------------------
 //
+// The code below should be the same for most plugins and usually won't
+// require modifications.
+
+$base_path = $_CONF['path'] . 'plugins/' . $pi_name . '/';
+$langfile = $base_path . $_CONF['language'] . '.php';
+if (file_exists ($langfile)) {
+    require_once ($langfile);
+} else {
+    require_once ($base_path . 'language/english.php');
+}
+require_once ($base_path . 'config.php');
+require_once ($base_path . 'functions.inc');
 
-$NEWFEATURE = array();
-$NEWFEATURE['spamx.admin']="spamx Admin";
 
 // Only let Root users access this page
-if (!SEC_inGroup('Root')) {
+if (!SEC_inGroup ('Root')) {
     // Someone is trying to illegally access this page
-    COM_errorLog("Someone has tried to illegally access the spamx install/uninstall page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$HTTP_SERVER_VARS['REMOTE_ADDR']}",1);
-    $display = COM_siteHeader();
-    $display .= COM_startBlock($LANG_SX00['access_denied']);
-    $display .= $LANG_SX00['access_denied_msg'];
-    $display .= COM_endBlock();
-    $display .= COM_siteFooter(true);
+    COM_accessLog ("Someone has tried to illegally access the {$pi_display_name} install/uninstall page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$_SERVER['REMOTE_ADDR']}", 1);
+
+    $display = COM_siteHeader ('menu', $LANG_ACCESS['accessdenied'])
+             . COM_startBlock ($LANG_ACCESS['accessdenied'])
+             . $LANG_ACCESS['plugin_access_denied_msg']
+             . COM_endBlock ()
+             . COM_siteFooter ();
+
     echo $display;
     exit;
 }
  
+
 /**
 * Puts the datastructures for this plugin into the Geeklog database
 *
-* Note: Corresponding uninstall routine is in functions.inc
-* 
-* @return   boolean True if successful False otherwise
-*
 */
-function plugin_install_spamx()
+function plugin_install_now()
 {
-    global $pi_name, $pi_version, $gl_version, $pi_url, $NEWTABLE, $DEFVALUES, $NEWFEATURE;
-    global $_TABLES, $_CONF;
+    global $_CONF, $_TABLES, $_USER, $GROUPS, $FEATURES, $MAPPINGS, $DEFVALUES,
+           $base_path,
+           $pi_name, $pi_display_name, $pi_version, $gl_version, $pi_url;
+
+    COM_errorLog ("Attempting to install the $pi_display_name plugin", 1);
+
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+
+    // create the plugin's groups
+    $admin_group_id = 0;
+    foreach ($GROUPS as $name => $desc) {
+        COM_errorLog ("Attempting to create $name group", 1);
+
+        $grp_name = addslashes ($name);
+        $grp_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr) VALUES ('$grp_name', '$grp_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
 
-    COM_errorLog("Attempting to install the $pi_name Plugin",1);
-
-    // Create the Plugins Tables
-    
-    foreach ($NEWTABLE as $table => $sql) {
-        COM_errorLog("Creating $table table",1);
-        DB_query($sql,1);
-        if (DB_error()) {
-            COM_errorLog("Error Creating $table table",1);
-            plugin_uninstall_spamx();
             return false;
-            exit;
         }
-        COM_errorLog("Success - Created $table table",1);
+
+        // replace the description with the new group id so we can use it later
+        $GROUPS[$name] = DB_insertId ();
+
+        // assume that the first group is the plugin's Admin group
+        if ($admin_group_id == 0) {
+            $admin_group_id = $GROUPS[$name];
+        }
     }
-     
-    // Insert Default Data
-    
-    foreach ($DEFVALUES as $sql) {
-		$table = $_TABLES['spamx'];
-        COM_errorLog("Inserting default data into $table table",1);
-        DB_query($sql,1);
-        if (DB_error()) {
-            COM_errorLog("Error inserting default data into $table table",1);
-            plugin_uninstall_spamx();
+
+    // Create the plugin's table(s)
+    $_SQL = array ();
+    if (file_exists ($base_path . 'sql/install.php')) {
+        require_once ($base_path . 'sql/install.php');
+    }
+
+    foreach ($_SQL as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql);
+        if (DB_error ()) {
+            COM_errorLog ('Error creating table', 1);
+            $uninstall_plugin ();
+
             return false;
-            exit;
         }
-        COM_errorLog("Success - inserting data into $table table",1);
     }
 
-    // Create the plugin admin security group
-    COM_errorLog("Attempting to create $pi_name admin group", 1);
-    DB_query("INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr) "
-        . "VALUES ('$pi_name Admin', 'Users in this group can administer the $pi_name plugin')",1);
-    if (DB_error()) {
-        plugin_uninstall_spamx();
-        return false;
-        exit;
+    // Add the plugin's features
+    COM_errorLog ("Attempting to add $pi_display_name feature(s)", 1);
+
+    foreach ($FEATURES as $feature => $desc) {
+        $ft_name = addslashes ($feature);
+        $ft_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
+                  . "VALUES ('$ft_name', '$ft_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
+            return false;
+        }
+
+        $feat_id = DB_insertId ();
+
+        if (isset ($MAPPINGS[$feature])) {
+            foreach ($MAPPINGS[$feature] as $group) {
+                COM_errorLog ("Adding $feature feature to the $group group", 1);
+                DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($feat_id, {$GROUPS[$group]})");
+                if (DB_error ()) {
+                    $uninstall_plugin ();
+
+                    return false;
+                }
+            }
+        }
     }
-    COM_errorLog('...success',1);
-    $group_id = DB_insertId();
-    
-    // Save the grp id for later uninstall
-    COM_errorLog('About to save group_id to vars table for use during uninstall',1);
-    DB_query("INSERT INTO {$_TABLES['vars']} VALUES ('{$pi_name}_gid', $group_id)",1);
-    if (DB_error()) {
-        plugin_uninstall_spamx();
+
+    // Add plugin's Admin group to the Root user group
+    // (assumes that the Root group's ID is always 1)
+    COM_errorLog ("Attempting to give all users in the Root group access to the $pi_display_name's Admin group", 1);
+
+    DB_query ("INSERT INTO {$_TABLES['group_assignments']} VALUES "
+              . "($admin_group_id, NULL, 1)");
+    if (DB_error ()) {
+        $uninstall_plugin ();
+
         return false;
-        exit;
     }
-    COM_errorLog('...success',1);
-    
-    // Add plugin Features
-    foreach ($NEWFEATURE as $feature => $desc) {
-        COM_errorLog("Adding $feature feature",1);
-        DB_query("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
-            . "VALUES ('$feature','$desc')",1);
-        if (DB_error()) {
-            COM_errorLog("Failure adding $feature feature",1);
-            plugin_uninstall_spamx();
-            return false;
-            exit;
-        }
-        $feat_id = DB_insertId();
-        COM_errorLog("Success",1);
-        COM_errorLog("Adding $feature feature to admin group",1);
-        DB_query("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($feat_id, $group_id)");
-        if (DB_error()) {
-            COM_errorLog("Failure adding $feature feature to admin group",1);
-            plugin_uninstall_spamx();
+
+    // Pre-populate tables or run any other SQL queries
+    COM_errorLog ('Inserting default data', 1);
+    foreach ($DEFVALUES as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql, 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
             return false;
-            exit;
         }
-        COM_errorLog("Success",1);
-    }        
-    
-    // OK, now give Root users access to this plugin now! NOTE: Root group should always be 1
-    COM_errorLog("Attempting to give all users in Root group access to $pi_name admin group",1);
-    DB_query("INSERT INTO {$_TABLES['group_assignments']} VALUES ($group_id, NULL, 1)");
-    if (DB_error()) {
-        plugin_uninstall_spamx();
-        return false;
-        exit;
     }
 
-    // Register the plugin with Geeklog
-    COM_errorLog("Registering $pi_name plugin with Geeklog", 1);
-    DB_delete($_TABLES['plugins'],'pi_name','spamx');
-    DB_query("INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_homepage, pi_enabled) "
-        . "VALUES ('$pi_name', '$pi_version', '$gl_version', '$pi_url', 1)");
+    // Finally, register the plugin with Geeklog
+    COM_errorLog ("Registering $pi_display_name plugin with Geeklog", 1);
+
+    // silently delete an existing entry
+    DB_delete ($_TABLES['plugins'], 'pi_name', $pi_name);
+
+    DB_query("INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_homepage, pi_enabled) VALUES "
+        . "('$pi_name', '$pi_version', '$gl_version', '$pi_url', 1)");
+
+    if (DB_error ()) {
+        $uninstall_plugin ();
 
-    if (DB_error()) {
-        plugin_uninstall_spamx();
         return false;
-        exit;
     }
 
-    COM_errorLog("Succesfully installed the $pi_name Plugin!",1);
+    COM_errorLog ("Successfully installed the $pi_display_name plugin!", 1);
+
     return true;
 }
 
-/* 
-* Main Function
-*/
 
-$display = COM_siteHeader();
-$T = new Template($_CONF['path'] . 'plugins/spamx/templates');
-$T->set_file('install', 'install.thtml');
-$T->set_var('install_header', $LANG_SX00['install_header']);
-$T->set_var('img',$_CONF['site_admin_url'] . '/plugins/spamx/images/spamx.gif');
-$T->set_var('cgiurl', $_CONF['site_admin_url'] . '/plugins/spamx/install.php');
-$T->set_var('admin_url', $_CONF['site_admin_url'] . '/plugins/spamx/index.php');
-$T->set_var('plugin_name', $LANG_SX00['plugin_name']);
-
-if ($HTTP_POST_VARS['action'] == 'install') {
-    if (plugin_install_spamx()) {
-        $T->set_var('installmsg1',$LANG_SX00['install_success']);
+// MAIN
+$display = '';
+
+if ($_REQUEST['action'] == 'uninstall') {
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+    if ($uninstall_plugin ()) {
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=45');
     } else {
-        $T->set_var('installmsg1',$LANG_SX00['install_failed']);
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=73');
     }
-} else if ($HTTP_POST_VARS['action'] == "uninstall") {
-   plugin_uninstall_spamx('installed');
-   $T->set_var('installmsg1',$LANG_SX00['uninstall_msg']);
-}
+} else if (DB_count ($_TABLES['plugins'], 'pi_name', $pi_name) == 0) {
+    // plugin not installed
 
-if (DB_count($_TABLES['plugins'], 'pi_name', 'spamx') == 0) {
-    $T->set_var('installmsg2', $LANG_SX00['uninstalled']);
-    $T->set_var('readme', $LANG_SX00['readme']);
-    $T->set_var('installdoc', $LANG_SX00['installdoc']);
-	$T->set_var('btnmsg', $LANG_SX00['install']);
-	$T->set_var('action','install');
+    if (plugin_compatible_with_this_geeklog_version ()) {
+        if (plugin_install_now ()) {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=44');
+        } else {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=72');
+        }
+    } else {
+        // plugin needs a newer version of Geeklog
+        $display .= COM_siteHeader ('menu', $LANG32[8])
+                 . COM_startBlock ($LANG32[8])
+                 . '<p>' . $LANG32[9] . '</p>'
+                 . COM_endBlock ()
+                 . COM_siteFooter ();
+    }
 } else {
-    $T->set_var('installmsg2', $LANG_SX00['installed']);
-	$T->set_var('btnmsg', $LANG_SX00['uninstall']);
-	$T->set_var('action','uninstall');
+    // plugin already installed
+    $display .= COM_siteHeader ('menu', $LANG01[77])
+             . COM_startBlock ($LANG32[6])
+             . '<p>' . $LANG32[7] . '</p>'
+             . COM_endBlock ()
+             . COM_siteFooter();
 }
-$T->parse('output','install');
-$display .= $T->finish($T->get_var('output'));
-$display .= COM_siteFooter(true);
 
 echo $display;
 
diff -ruN 1.3.11sr1/admin/plugins/staticpages/index.php 1.4.0sr5-1/admin/plugins/staticpages/index.php
--- 1.3.11sr1/admin/plugins/staticpages/index.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/staticpages/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Static Pages Geeklog Plugin 1.4.1                                         |
+// | Static Pages Geeklog Plugin 1.4.2                                         |
 // +---------------------------------------------------------------------------+
 // | index.php                                                                 |
 // |                                                                           |
 // | Administration page.                                                      |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
-// |          Phill Gillespie  - phill@mediaaustralia.com.au                   |
-// |          Tom Willett      - twillett@users.sourceforge.net                |
-// |          Dirk Haun        - dirk@haun-online.de                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Phill Gillespie  - phill AT mediaaustralia DOT com DOT au        |
+// |          Tom Willett      - twillett AT users DOT sourceforge DOT net     |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: index.php,v 1.38 2004/09/25 18:38:17 dhaun Exp $
+// $Id: index.php,v 1.59 2006/01/30 14:50:14 dhaun Exp $
 
 require_once ('../../../lib-common.php');
 require_once ('../../auth.inc.php');
@@ -59,27 +59,25 @@
 */ 
 function form ($A, $error = false) 
 {
-	global $_CONF, $_TABLES, $_USER, $HTTP_POST_VARS, $LANG_STATIC, $_SP_CONF, $LANG_ACCESS, $mode, $sp_id;
+    global $_CONF, $_TABLES, $_USER, $LANG_STATIC, $_SP_CONF, $LANG_ACCESS;
+    global $mode, $sp_id, $LANG24;
 
-	if (!empty($sp_id) && $mode=='edit') {
-    	$access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
-	} else {
-    	$A['owner_id'] = $_USER['uid'];
-		$A['group_id'] = DB_getItem($_TABLES['groups'],'grp_id',"grp_name = 'Static Page Admin'");
-		$A['perm_owner'] = 3;
-		$A['perm_group'] = 2;
-		$A['perm_members'] = 2;
-		$A['perm_anon'] = 2;
+    if (!empty($sp_id) && $mode=='edit') {
+        $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
+    } else {
+        $A['owner_id'] = $_USER['uid'];
+        $A['group_id'] = DB_getItem($_TABLES['groups'],'grp_id',"grp_name = 'Static Page Admin'");
+        SEC_setDefaultPermissions ($A, $_SP_CONF['default_permissions']);
         $A['sp_inblock'] = $_SP_CONF['in_block'];
-		$access = 3;
-	}
+        $access = 3;
+    }
     $retval = '';
 
     if (empty ($A['owner_id'])) {
-	    $error = COM_startBlock ($LANG_ACCESS['accessdenied'], '',
+        $error = COM_startBlock ($LANG_ACCESS['accessdenied'], '',
                         COM_getBlockTemplate ('_msg_block', 'header'));
-    	$error .= $LANG_STATIC['deny_msg'];
-	    $error .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+        $error .= $LANG_STATIC['deny_msg'];
+        $error .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
     }
     
     if ($error) {
@@ -87,39 +85,50 @@
     } else {
         $template_path = staticpages_templatePath ('admin');
         $sp_template = new Template ($template_path);
-        if (isset ($_CONF['advanced_editor']) && ($_CONF['advanced_editor'] == 1) && file_exists ($template_path . '/editor_advanced.thtml')) {
+        if (isset ($_CONF['advanced_editor']) && ($_CONF['advanced_editor'] == 1)
+&& file_exists ($template_path . '/editor_advanced.thtml')) {
             $sp_template->set_file ('form', 'editor_advanced.thtml');
+            $sp_template->set_var ('lang_expandhelp', $LANG24[67]);
+            $sp_template->set_var ('lang_reducehelp', $LANG24[68]);
+            $sp_template->set_var ('lang_toolbar', $LANG24[70]);
+            $sp_template->set_var ('toolbar1', $LANG24[71]);
+            $sp_template->set_var ('toolbar2', $LANG24[72]);
+            $sp_template->set_var ('toolbar3', $LANG24[73]);
+            $sp_template->set_var ('toolbar4', $LANG24[74]);
+            $sp_template->set_var ('toolbar5', $LANG24[75]);
         } else {
             $sp_template->set_file ('form', 'editor.thtml');
         }
+        $sp_template->set_var('layout_url', $_CONF['layout_url']);
+        
         $sp_template->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
-    	$sp_template->set_var('lang_owner', $LANG_ACCESS['owner']);
+        $sp_template->set_var('lang_owner', $LANG_ACCESS['owner']);
         $sp_template->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = {$A['owner_id']}"));
         $sp_template->set_var('owner_id', $A['owner_id']);
         $sp_template->set_var('lang_group', $LANG_ACCESS['group']);
-    	$usergroups = SEC_getUserGroups();
+        $usergroups = SEC_getUserGroups();
         $groupdd = '';
-    	if ($access == 3) {
-			$groupdd .= '<select name="group_id">';
-        	for ($i = 0; $i < count($usergroups); $i++) {
-            	$groupdd .= '<option value="' . $usergroups[key($usergroups)] . '"';
-            	if ($A['group_id'] == $usergroups[key($usergroups)]) {
-                	$groupdd .= ' selected="selected"';
-            	}
-            	$groupdd .= '>' . key($usergroups) . '</option>';
-            	next($usergroups);
-        	}
-        	$groupdd .= '</select>';
-    	} else {
-        	// they can't set the group then
-        	$groupdd .= DB_getItem($_TABLES['groups'],'grp_name',"grp_id = {$A['group_id']}");
-        	$groupdd .= '<input type="hidden" name="group_id" value="' . $A['group_id'] . '">';
-    	}
-    	$sp_template->set_var('group_dropdown', $groupdd);
-    	$sp_template->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']));
-    	$sp_template->set_var('lang_permissions', $LANG_ACCESS['permissions']);
-    	$sp_template->set_var('lang_perm_key', $LANG_ACCESS['permissionskey']);
-		$sp_template->set_var('permissions_msg', $LANG_ACCESS['permmsg']);
+        if ($access == 3) {
+            $groupdd .= '<select name="group_id">';
+            for ($i = 0; $i < count($usergroups); $i++) {
+                $groupdd .= '<option value="' . $usergroups[key($usergroups)] . '"';
+                if ($A['group_id'] == $usergroups[key($usergroups)]) {
+                    $groupdd .= ' selected="selected"';
+                }
+                $groupdd .= '>' . key($usergroups) . '</option>';
+                next($usergroups);
+            }
+            $groupdd .= '</select>';
+        } else {
+            // they can't set the group then
+            $groupdd .= DB_getItem($_TABLES['groups'],'grp_name',"grp_id = {$A['group_id']}");
+            $groupdd .= '<input type="hidden" name="group_id" value="' . $A['group_id'] . '">';
+        }
+        $sp_template->set_var('group_dropdown', $groupdd);
+        $sp_template->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']));
+        $sp_template->set_var('lang_permissions', $LANG_ACCESS['permissions']);
+        $sp_template->set_var('lang_perm_key', $LANG_ACCESS['permissionskey']);
+        $sp_template->set_var('permissions_msg', $LANG_ACCESS['permmsg']);
         $sp_template->set_var('site_url', $_CONF['site_url']);
         $sp_template->set_var('site_admin_url', $_CONF['site_admin_url']);
         $sp_template->set_var('start_block_editor',
@@ -225,7 +234,7 @@
         $sp_template->set_var ('php_type', 'hidden');
 
         if ($A['sp_nf'] == 1) {
-            $sp_template->set_var('exit_checked','checked');
+            $sp_template->set_var('exit_checked','checked="checked"');
         } else {
             $sp_template->set_var('exit_checked','');
         }
@@ -233,7 +242,7 @@
         $sp_template->set_var('exit_info',$LANG_STATIC['exit_info']);
 
         if ($A['sp_inblock'] == 1) {
-            $sp_template->set_var ('inblock_checked', 'checked');
+            $sp_template->set_var ('inblock_checked', 'checked="checked"');
         } else {
             $sp_template->set_var ('inblock_checked', '');
         }
@@ -246,7 +255,8 @@
         $sp_template->set_var('sp_formateddate', $curtime[0]);
         $sp_template->set_var('sp_date', $curtime[1]);
         $sp_template->set_var('lang_title', $LANG_STATIC['title']);
-        $sp_template->set_var('sp_title', stripslashes($A['sp_title']));
+        $sp_template->set_var('sp_title',
+                htmlspecialchars (stripslashes ($A['sp_title'])));
         $sp_template->set_var('lang_addtomenu', $LANG_STATIC['addtomenu']);
         if ($A['sp_onmenu'] == 1) {
             $sp_template->set_var('onmenu_checked', 'checked="checked"');
@@ -260,26 +270,26 @@
         $sp_template->set_var('lang_noblocks', $LANG_STATIC['noblocks']);
         $sp_template->set_var('lang_leftblocks', $LANG_STATIC['leftblocks']);
         $sp_template->set_var('lang_leftrightblocks', $LANG_STATIC['leftrightblocks']);
-		if ($A['sp_format'] == 'noblocks') {
-			$sp_template->set_var('noblock_selected', 'selected="selected"');
-		} else {
-			$sp_template->set_var('noblock_selected', '');
-		}
-		if ($A['sp_format'] == 'leftblocks') {
-			$sp_template->set_var('leftblocks_selected', 'selected="selected"');
-		} else {
-			$sp_template->set_var('leftblocks_selected', '');
-		}
+        if ($A['sp_format'] == 'noblocks') {
+            $sp_template->set_var('noblock_selected', 'selected="selected"');
+        } else {
+            $sp_template->set_var('noblock_selected', '');
+        }
+        if ($A['sp_format'] == 'leftblocks') {
+            $sp_template->set_var('leftblocks_selected', 'selected="selected"');
+        } else {
+            $sp_template->set_var('leftblocks_selected', '');
+        }
         if ($A['sp_format'] == 'blankpage') {
             $sp_template->set_var('blankpage_selected', 'selected="selected"');
         } else {
             $sp_template->set_var('blankpage_selected', '');
         }
-		if (($A['sp_format'] == 'allblocks') OR empty($A['sp_format'])) {
-			$sp_template->set_var('allblocks_selected', 'selected="selected"');
-		} else {
-			$sp_template->set_var('allblocks_selected', '');
-		}
+        if (($A['sp_format'] == 'allblocks') OR empty($A['sp_format'])) {
+            $sp_template->set_var('allblocks_selected', 'selected="selected"');
+        } else {
+            $sp_template->set_var('allblocks_selected', '');
+        }
 
         $sp_template->set_var('lang_content', $LANG_STATIC['content']);
         $sp_template->set_var('sp_content', htmlspecialchars (stripslashes($A['sp_content'])));
@@ -288,18 +298,64 @@
         } else {
             $sp_template->set_var('lang_allowedhtml', $LANG_STATIC['all_html_allowed']);
         }
-        $sp_template->set_var('lang_hits', $LANG_STATIC['hits']);
-        if (empty($A['sp_hits'])) {
-            $sp_template->set_var('sp_hits', '0');
-        } else {
-            $sp_template->set_var('sp_hits', $A['sp_hits']);
+        $sp_template->set_var ('lang_hits', $LANG_STATIC['hits']);
+        if (empty ($A['sp_hits'])) {
+            $sp_template->set_var ('sp_hits', '0');
+            $sp_template->set_var ('sp_hits_formatted', '0');
+        } else {
+            $sp_template->set_var ('sp_hits', $A['sp_hits']);
+            $sp_template->set_var ('sp_hits_formatted',
+                                   COM_numberFormat ($A['sp_hits']));
         }
         $sp_template->set_var('end_block',
                 COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')));
         $retval .= $sp_template->parse('output','form');
-	}
+    }
+
+    return $retval;
+}
 
+function liststaticpages()
+{
+    global $_CONF, $_TABLES, $_IMAGE_TYPE, $LANG_ADMIN, $LANG_STATIC;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_ADMIN['copy'], 'field' => 'copy', 'sort' => false),
+                    array('text' => $LANG_STATIC['id'], 'field' => 'sp_id', 'sort' => true),
+                    array('text' => $LANG_ADMIN['title'], 'field' => 'sp_title', 'sort' => true),
+                    array('text' => $LANG_STATIC['writtenby'], 'field' => 'sp_uid', 'sort' => false),
+                    array('text' => $LANG_STATIC['head_centerblock'], 'field' => 'sp_centerblock', 'sort' => true),
+                    array('text' => $LANG_STATIC['date'], 'field' => 'unixdate', 'sort' => true)
+    );
+    $defsort_arr = array('field' => 'sp_title', 'direction' => 'desc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/plugins/staticpages/index.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home'])
+    );
+
+     $text_arr = array('has_menu' =>  true,
+                       'has_extras'   => true,
+                       'title' => $LANG_STATIC['staticpagelist'],
+                       'instructions' => $LANG_STATIC['instructions'],
+                       'icon' => $_CONF['site_url'] . '/staticpages/images/staticpages.png',
+                       'form_url' => $_CONF['site_admin_url'] . "/plugins/staticpages/index.php");
+
+    $query_arr = array('table' => 'staticpage',
+                       'sql' => "SELECT *,UNIX_TIMESTAMP(sp_date) AS unixdate "
+                               ."FROM {$_TABLES['staticpage']} WHERE 1 ",
+                       'query_fields' => array('sp_title', 'sp_id'),
+                       'default_filter' => COM_getPermSQL ('AND', 0, 3));
+
+    $retval = ADMIN_list ("static pages", "plugin_getListField_staticpages", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
     return $retval;
+
 }
 
 /**
@@ -309,9 +365,9 @@
 * @mode         string      Mode
 *
 */
-function staticpageeditor ($sp_id, $mode = '') 
+function staticpageeditor ($sp_id, $mode = '', $editor = '')
 {
-    global $HTTP_POST_VARS, $_USER, $_CONF, $_TABLES;
+    global $_CONF, $_TABLES, $_USER;
 
     if (!empty ($sp_id) && $mode == 'edit') {
         $result = DB_query ("SELECT *,UNIX_TIMESTAMP(sp_date) AS unixdate FROM {$_TABLES['staticpage']} WHERE sp_id = '$sp_id'" . COM_getPermSQL ('AND', 0, 3));
@@ -332,124 +388,14 @@
         $A['sp_hits'] = 0;
         $A['sp_old_id'] = '';
     } else {
-        $A = $HTTP_POST_VARS;
+        $A = $_POST;
         $A['sp_content'] = COM_checkHTML (COM_checkWords ($A['sp_content']));
-        $A['sp_old_id'] = $HTTP_POST_VARS['sp_old_id'];
     }
     $A['sp_title'] = strip_tags ($A['sp_title']);
-
+    $A['editor'] = $editor;
     return form ($A);
 }
 
-###############################################################################
-# Displays a list of static pages 
-
-function liststaticpages ($page = 1) 
-{
-    global $_TABLES, $LANG_STATIC, $_CONF;
-
-    $retval = '';
-
-    $template_path = staticpages_templatePath ('admin');
-    $sp_templates = new Template ($template_path);
-    $sp_templates->set_file(array('list'=>'list.thtml','row'=>'row.thtml'));
-    $sp_templates->set_var('site_url', $_CONF['site_url']);
-    $sp_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $sp_templates->set_var('start_block_list', COM_startBlock($LANG_STATIC['staticpagelist']), '', COM_getBlockTemplate ('_admin_block', 'header'));
-    $sp_templates->set_var('new_page_url', COM_buildURL($_CONF['site_admin_url'] . '/plugins/staticpages/index.php?mode=edit'));
-    $sp_templates->set_var('lang_newpage', $LANG_STATIC['newpage']);
-    $sp_templates->set_var('lang_adminhome', $LANG_STATIC['adminhome']);
-    $sp_templates->set_var('lang_instructions', $LANG_STATIC['instructions']);
-    $sp_templates->set_var('lang_title', $LANG_STATIC['title']);
-    $sp_templates->set_var('lang_writtenby', $LANG_STATIC['writtenby']);
-    $sp_templates->set_var('lang_lastupdated', $LANG_STATIC['date']);
-    $sp_templates->set_var('lang_url', $LANG_STATIC['url']);
-    $sp_templates->set_var('lang_centerblock', $LANG_STATIC['head_centerblock']);
-    $sp_templates->set_var ('lang_title_edit', $LANG_STATIC['title_edit']);
-    $sp_templates->set_var ('lang_title_copy', $LANG_STATIC['title_copy']);
-    $sp_templates->set_var ('lang_title_display', $LANG_STATIC['title_display']);
-
-    $perpage = 50;
-    if ($page <= 0) {
-        $page = 1;
-    }
-
-    $perms = COM_getPermSQL ('WHERE', 0, 3);
-    $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['staticpage']}" . $perms);
-    $C = DB_fetchArray ($result);
-    $numpages = ceil ($C['count'] / $perpage);
-
-    if ($page > $numpages) {
-        $page = 1;
-    }
-    $start = ($page - 1) * $perpage;
-
-    $result = DB_query ("SELECT *,UNIX_TIMESTAMP(sp_date) AS unixdate FROM {$_TABLES['staticpage']}" . $perms . " ORDER BY sp_date DESC LIMIT $start,$perpage");
-    $nrows = DB_numRows ($result);
-    if ($nrows > 0) {
-        for ($i = 1; $i <= $nrows; $i++) {
-            $A = DB_fetchArray($result);
-            $sp_templates->set_var ('sp_id', $A['sp_id']);
-            $sp_templates->set_var ('page_edit_url',
-                    COM_buildURL ($_CONF['site_admin_url']
-                    . '/plugins/staticpages/index.php?mode=edit&amp;sp_id='
-                    . $A['sp_id']));
-            $sp_templates->set_var ('row_number', $i + $start);
-            $sp_templates->set_var ('page_display_url',
-                    COM_buildURL ($_CONF['site_url']
-                    . '/staticpages/index.php?page=' . $A['sp_id']));
-            $sp_templates->set_var ('page_clone_url',
-                    COM_buildURL ($_CONF['site_admin_url']
-                    . '/plugins/staticpages/index.php?mode=clone&amp;sp_id='
-                    . $A['sp_id']));
-            $sp_templates->set_var ('sp_title', stripslashes ($A['sp_title']));
-
-            $nresult = DB_query ("SELECT username,fullname FROM {$_TABLES['users']} WHERE uid = {$A['sp_uid']}");
-            $N = DB_fetchArray ($nresult);
-            $sp_templates->set_var ('username', $N['username']);
-            if (empty ($N['fullname'])) {
-                $sp_templates->set_var ('fullname', $N['username']);
-            } else {
-                $sp_templates->set_var ('fullname', $N['fullname']);
-            }
-
-            if ($A['sp_centerblock']) {
-                switch ($A['sp_where']) {
-                    case '1': $where = $LANG_STATIC['centerblock_top']; break;
-                    case '2': $where = $LANG_STATIC['centerblock_feat']; break;
-                    case '3': $where = $LANG_STATIC['centerblock_bottom']; break;
-                    default:  $where = $LANG_STATIC['centerblock_entire']; break;
-                }
-                $sp_templates->set_var ('sp_centerblock', $where);
-            } else {
-                $sp_templates->set_var ('sp_centerblock', $LANG_STATIC['centerblock_no']);
-            }
-            $curtime = COM_getUserDateTimeFormat ($A['unixdate']);
-            $sp_templates->set_var ('sp_date', $curtime[0]);
-            $sp_templates->parse ('list_item', 'row', true);
-        }
-        $sp_templates->set_var ('lang_nopages_msg', '');
-
-        $baseurl = $_CONF['site_admin_url'] . '/plugins/staticpages/index.php';
-        if ($numpages > 1) {
-            $sp_templates->set_var ('google_paging',
-                    COM_printPageNavigation ($baseurl, $page, $numpages));
-        } else {
-            $sp_templates->set_var ('google_paging', '');
-        }
-    } else {
-        $sp_templates->set_var ('lang_nopages_msg', $LANG_STATIC['nopages']);
-        $sp_templates->set_var ('list_item', '');
-        $sp_templates->set_var ('google_paging', '');
-    }
-    $sp_templates->set_var ('end_block',
-            COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')));
-
-    $retval .= $sp_templates->parse('output', 'list');
-
-    return $retval;
-}
-
 /** 
 * Saves a Static Page to the database
 *
@@ -460,7 +406,7 @@
 * @param unixdate        string  date page was last updated
 * @param sp_hits         int     Number of page views
 * @param sp_format       string  HTML or plain text
-* @param sp_onmenu       int     Flag to place entry on menu
+* @param sp_onmenu       string  Flag to place entry on menu
 * @param sp_label        string  Menu Entry
 * @param owner_id        int     Permission bits
 * @param group_id        int
@@ -468,12 +414,12 @@
 * @param perm_members    int
 * @param perm_anon       int
 * @param sp_php          int     Flag to indicate PHP usage
-* @param sp_nf           int     Flag to indicate type of not found message
+* @param sp_nf           string  Flag to indicate type of not found message
 * @param sp_old_id       string  original ID of this static page
-* @param sp_centerblock  int     Flag to indicate display as a center block
+* @param sp_centerblock  string  Flag to indicate display as a center block
 * @param sp_tid          string  topid id (for center block)
 * @param sp_where        int     position of center block
-* @param sp_inblock      int     Flag: wrap page in a block (or not)
+* @param sp_inblock      string  Flag: wrap page in a block (or not)
 *
 */
 function submitstaticpage ($sp_id, $sp_uid, $sp_title, $sp_content, $unixdate, $sp_hits, $sp_format, $sp_onmenu, $sp_label, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon, $sp_php, $sp_nf, $sp_old_id, $sp_centerblock, $sp_tid, $sp_where, $sp_inblock)
@@ -504,18 +450,30 @@
     } elseif (!empty ($sp_title) && !empty ($sp_content)) {
         $date = date ('Y-m-d H:i:s', $unixdate);
 
-        if (empty ($sp_hits)) $sp_hits = 0;
+        if (empty ($sp_hits)) {
+            $sp_hits = 0;
+        }
 
-        if ($sp_onmenu== 'on') {
+        if ($sp_onmenu == 'on') {
             $sp_onmenu = 1;
         } else {
             $sp_onmenu = 0;
         }
-        if ($sp_centerblock== 'on') {
+        if ($sp_nf == 'on') {
+            $sp_nf = 1;
+        } else {
+            $sp_nf = 0;
+        }
+        if ($sp_centerblock == 'on') {
             $sp_centerblock = 1;
         } else {
             $sp_centerblock = 0;
         }
+        if ($sp_inblock == 'on') {
+            $sp_inblock = 1;
+        } else {
+            $sp_inblock = 0;
+        }
 
         // Clean up the text
         if ($_SP_CONF['censor'] == 1) {
@@ -543,7 +501,7 @@
         }
 
         list($perm_owner,$perm_group,$perm_members,$perm_anon) = SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon);
-		DB_save ($_TABLES['staticpage'], 'sp_id,sp_uid,sp_title,sp_content,sp_date,sp_hits,sp_format,sp_onmenu,sp_label,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,sp_php,sp_nf,sp_centerblock,sp_tid,sp_where,sp_inblock', "'$sp_id',$sp_uid,'$sp_title','$sp_content','$date',$sp_hits,'$sp_format',$sp_onmenu,'$sp_label',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,'$sp_php','$sp_nf',$sp_centerblock,'$sp_tid',$sp_where,'$sp_inblock'");
+        DB_save ($_TABLES['staticpage'], 'sp_id,sp_uid,sp_title,sp_content,sp_date,sp_hits,sp_format,sp_onmenu,sp_label,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,sp_php,sp_nf,sp_centerblock,sp_tid,sp_where,sp_inblock', "'$sp_id',$sp_uid,'$sp_title','$sp_content','$date',$sp_hits,'$sp_format',$sp_onmenu,'$sp_label',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,'$sp_php','$sp_nf',$sp_centerblock,'$sp_tid',$sp_where,'$sp_inblock'");
         if ($delete_old_page && !empty ($sp_old_id)) {
             DB_delete ($_TABLES['staticpage'], 'sp_id', $sp_old_id);
         }
@@ -560,15 +518,15 @@
 
 
 // MAIN
-
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = COM_applyFilter ($HTTP_POST_VARS['mode']);
-    $sp_id = COM_applyFilter ($HTTP_POST_VARS['sp_id']);
-} else {
-    COM_setArgNames (array ('mode', 'sp_id'));    
-    $mode = COM_applyFilter (COM_getArgument ('mode'));
-    $sp_id = COM_applyFilter (COM_getArgument ('sp_id'));
+$mode = '';
+if (isset($_REQUEST['mode'])) {
+    $mode = COM_applyFilter ($_REQUEST['mode']);
 }
+$sp_id = '';
+if (isset($_REQUEST['sp_id'])) {
+    $sp_id = COM_applyFilter ($_REQUEST['sp_id']);
+}
+
 
 if (($mode == $LANG_STATIC['delete']) && !empty ($LANG_STATIC['delete'])) {
     if (empty ($sp_id) || (is_numeric ($sp_id) && ($sp_id == 0))) {
@@ -578,12 +536,15 @@
                 $_CONF['site_admin_url'] . '/plugins/staticpages/index.php');
     }
 } else if ($mode == 'edit') {
-    $display .= COM_siteHeader ('menu');
-    $display .= staticpageeditor ($sp_id, $mode);
+    $display .= COM_siteHeader ('menu', $LANG_STATIC['staticpageeditor']);
+    if (isset ($_GET['editor'])) {
+        $editor = COM_applyFilter ($_GET['editor']);
+    }
+    $display .= staticpageeditor ($sp_id, $mode,$editor);
     $display .= COM_siteFooter ();
 } else if ($mode == 'clone') {
     if (!empty ($sp_id)) {
-        $display .= COM_siteHeader('menu');
+        $display .= COM_siteHeader('menu', $LANG_STATIC['staticpageeditor']);
         $display .= staticpageeditor($sp_id,$mode);
         $display .= COM_siteFooter();
     } else {
@@ -591,24 +552,20 @@
     }
 } else if (($mode == $LANG_STATIC['save']) && !empty ($LANG_STATIC['save'])) {
     if (!empty ($sp_id)) {
-        submitstaticpage ($sp_id, $HTTP_POST_VARS['sp_uid'],
-            $HTTP_POST_VARS['sp_title'], $HTTP_POST_VARS['sp_content'],
-            $HTTP_POST_VARS['unixdate'], $HTTP_POST_VARS['sp_hits'],
-            $HTTP_POST_VARS['sp_format'], $HTTP_POST_VARS['sp_onmenu'],
-            $HTTP_POST_VARS['sp_label'], $HTTP_POST_VARS['owner_id'],
-            $HTTP_POST_VARS['group_id'], $HTTP_POST_VARS['perm_owner'],
-            $HTTP_POST_VARS['perm_group'], $HTTP_POST_VARS['perm_members'],
-            $HTTP_POST_VARS['perm_anon'], $HTTP_POST_VARS['sp_php'],
-            $HTTP_POST_VARS['sp_nf'], $HTTP_POST_VARS['sp_old_id'],
-            $HTTP_POST_VARS['sp_centerblock'], $HTTP_POST_VARS['sp_tid'],
-            $HTTP_POST_VARS['sp_where'], $HTTP_POST_VARS['sp_inblock']);
+        submitstaticpage ($sp_id, $_POST['sp_uid'], $_POST['sp_title'],
+            $_POST['sp_content'], $_POST['unixdate'], $_POST['sp_hits'],
+            $_POST['sp_format'], $_POST['sp_onmenu'], $_POST['sp_label'],
+            $_POST['owner_id'], $_POST['group_id'], $_POST['perm_owner'],
+            $_POST['perm_group'], $_POST['perm_members'], $_POST['perm_anon'],
+            $_POST['sp_php'], $_POST['sp_nf'], $_POST['sp_old_id'],
+            $_POST['sp_centerblock'], $_POST['sp_tid'], $_POST['sp_where'],
+            $_POST['sp_inblock']);
     } else {
         $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php');
     }
 } else {
-    $page = COM_applyFilter ($HTTP_GET_VARS['page'], true);
-    $display .= COM_siteHeader ('menu');
-    $display .= liststaticpages ($page);
+    $display .= COM_siteHeader ('menu', $LANG_STATIC['staticpagelist']);
+    $display .= liststaticpages();
     $display .= COM_siteFooter ();
 }
 
diff -ruN 1.3.11sr1/admin/plugins/staticpages/install.php 1.4.0sr5-1/admin/plugins/staticpages/install.php
--- 1.3.11sr1/admin/plugins/staticpages/install.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins/staticpages/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,17 +2,22 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Static Pages Plugin 1.4 for Geeklog - The Ultimate Weblog                 |
+// | Static Pages Plugin 1.4.2                                                 |
 // +---------------------------------------------------------------------------+
 // | install.php                                                               |
 // |                                                                           |
-// | This file installs and removes the data structures for the Static Pages   |
-// | plugin for Geeklog.                                                       |
+// | This file installs and removes the data structures for the                |
+// | Static pages plugin for Geeklog.                                          |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2002-2004 by the following authors:                         |
+// | Based on the Universal Plugin and prior work by the following authors:    |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
-// |          Tom Willett      - twillett@users.sourceforge.net
+// | Copyright (C) 2002-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Tom Willett       - tom AT pigstye DOT net                       |
+// |          Blaine Lang       - blaine AT portalparts DOT com                |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,230 +36,255 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: install.php,v 1.14 2004/08/15 12:06:10 dhaun Exp $
+// $Id: install.php,v 1.20 2006/02/11 10:21:06 dhaun Exp $
+
+require_once ('../../../lib-common.php');
+
+// Plugin information
+//
+// ----------------------------------------------------------------------------
+//
+$pi_display_name = 'Static Page';
+$pi_name         = 'staticpages';
+$pi_version      = '1.4.2';
+$gl_version      = '1.4.0';
+$pi_url          = 'http://www.geeklog.net/';
+
+// name of the Admin group
+$pi_admin        = $pi_display_name . ' Admin';
+
+// the plugin's groups - assumes first group to be the Admin group
+$GROUPS = array();
+$GROUPS[$pi_admin] = 'Users in this group can administer the Static Pages plugin';
+
+$FEATURES = array();
+$FEATURES['staticpages.edit']    = 'Access to Static Pages editor';
+$FEATURES['staticpages.delete']  = 'Ability to delete static pages';
+$FEATURES['staticpages.PHP']     = 'Ability use PHP in static pages';
+
+$MAPPINGS = array();
+$MAPPINGS['staticpages.edit']       = array ($pi_admin);
+$MAPPINGS['staticpages.delete']     = array ($pi_admin);
+// Note: 'staticpages.PHP' is not assigned to any group by default
+
+// (optional) data to pre-populate tables with
+// Insert table name and sql to insert default data for your plugin.
+// Note: '#group#' will be replaced with the id of the plugin's admin group.
+$DEFVALUES = array();
+// no default data
+
+/**
+* Checks the requirements for this plugin and if it is compatible with this
+* version of Geeklog.
+*
+* @return   boolean     true = proceed with install, false = not compatible
+*
+*/
+function plugin_compatible_with_this_geeklog_version ()
+{
+    return true;
+}
+//
+// ----------------------------------------------------------------------------
+//
+// The code below should be the same for most plugins and usually won't
+// require modifications.
 
-require_once('../../../lib-common.php');
-$langfile = $_CONF['path'] . 'plugins/staticpages/language/' . $_CONF['language'] . '.php';
+$base_path = $_CONF['path'] . 'plugins/' . $pi_name . '/';
+$langfile = $base_path . $_CONF['language'] . '.php';
 if (file_exists ($langfile)) {
     require_once ($langfile);
 } else {
-    require_once ($_CONF['path'] . 'plugins/staticpages/language/english.php');
+    require_once ($base_path . 'language/english.php');
 }
-require_once($_CONF['path'] . 'plugins/staticpages/config.php');
-require_once($_CONF['path'] . 'plugins/staticpages/functions.inc');
+require_once ($base_path . 'config.php');
+require_once ($base_path . 'functions.inc');
+
 
 // Only let Root users access this page
-if (!SEC_inGroup('Root')) {
+if (!SEC_inGroup ('Root')) {
     // Someone is trying to illegally access this page
-    COM_errorLog("Someone has tried to illegally access the Static Pages install/uninstall page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$HTTP_SERVER_VARS['REMOTE_ADDR']}",1);
-    $display = COM_siteHeader();
-    $display .= COM_startBlock($LANG_STATIC['access_denied']);
-    $display .= $LANG_STATIC['access_denied_msg'];
-    $display .= COM_endBlock();
-    $display .= COM_siteFooter();
+    COM_accessLog ("Someone has tried to illegally access the {$pi_display_name} install/uninstall page.  User id: {$_USER['uid']}, Username: {$_USER['username']}, IP: {$_SERVER['REMOTE_ADDR']}", 1);
+
+    $display = COM_siteHeader ('menu', $LANG_ACCESS['accessdenied'])
+             . COM_startBlock ($LANG_ACCESS['accessdenied'])
+             . $LANG_ACCESS['plugin_access_denied_msg']
+             . COM_endBlock ()
+             . COM_siteFooter ();
+
     echo $display;
     exit;
 }
  
+
 /**
 * Puts the datastructures for this plugin into the Geeklog database
 *
 */
-function plugin_install_staticpages()
+function plugin_install_now()
 {
-    global $_TABLES, $_CONF, $_SP_CONF;
+    global $_CONF, $_TABLES, $_USER, $GROUPS, $FEATURES, $MAPPINGS, $DEFVALUES,
+           $base_path,
+           $pi_name, $pi_display_name, $pi_version, $gl_version, $pi_url;
+
+    COM_errorLog ("Attempting to install the $pi_display_name plugin", 1);
+
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+
+    // create the plugin's groups
+    $admin_group_id = 0;
+    foreach ($GROUPS as $name => $desc) {
+        COM_errorLog ("Attempting to create $name group", 1);
+
+        $grp_name = addslashes ($name);
+        $grp_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr) VALUES ('$grp_name', '$grp_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
 
-    COM_errorLog('Attempting to install the Static Page Plugin',1);
-
-    // Installs the static pages plugin
+            return false;
+        }
 
-    $createsql = "CREATE TABLE {$_TABLES['staticpage']} (sp_id varchar(20) DEFAULT '' NOT NULL,"
-        . "sp_uid mediumint(8) DEFAULT '1' NOT NULL,"
-        . "sp_title varchar(128) DEFAULT '' NOT NULL,"
-        . "sp_content text DEFAULT '' NOT NULL,"
-        . "sp_hits mediumint(8) unsigned DEFAULT '0' NOT NULL,"
-        . "sp_date datetime NOT NULL,"
-        . "sp_format varchar(20) NOT NULL,"
-        . "sp_onmenu tinyint(1) unsigned NOT NULL DEFAULT '0',"
-        . "sp_label varchar(64),"
-        . "group_id mediumint(8) unsigned NOT NULL default '1',"
-        . "owner_id mediumint(8) unsigned NOT NULL default '1',"
-        . "perm_owner tinyint(1) unsigned NOT NULL default '3',"
-        . "perm_group tinyint(1) unsigned NOT NULL default '2',"
-        . "perm_members tinyint(1) unsigned NOT NULL default '2',"
-        . "perm_anon tinyint(1) unsigned NOT NULL default '2',"
-        . "sp_centerblock tinyint(1) unsigned NOT NULL default '0',"
-        . "sp_tid varchar(20) NOT NULL default 'none',"
-        . "sp_where tinyint(1) unsigned NOT NULL default '1',"
-        . "sp_php tinyint(1) unsigned NOT NULL default '0',"
-        . "sp_nf tinyint(1) unsigned default '0',"
-        . "sp_inblock tinyint(1) unsigned default '1',"
-        . "PRIMARY KEY (sp_id),"
-        . "KEY staticpage_sp_uid (sp_uid),"
-        . "KEY staticpage_sp_date (sp_date),"
-        . "KEY staticpage_sp_onmenu (sp_onmenu),"
-        . "KEY staticpage_sp_centerblock (sp_centerblock),"
-        . "KEY staticpage_sp_tid (sp_tid),"
-        . "KEY staticpage_sp_where (sp_where)"
-        . ") TYPE=MyISAM";
+        // replace the description with the new group id so we can use it later
+        $GROUPS[$name] = DB_insertId ();
 
-    COM_errorLog("Attempting to create table staticpage for Static Page plugin", 1);
-    DB_query($createsql,1);
+        // assume that the first group is the plugin's Admin group
+        if ($admin_group_id == 0) {
+            $admin_group_id = $GROUPS[$name];
+        }
+    }
 
-    if (DB_error()) {
-        return false;
+    // Create the plugin's table(s)
+    $_SQL = array ();
+    if (file_exists ($base_path . 'sql/install.php')) {
+        require_once ($base_path . 'sql/install.php');
     }
 
-    COM_errorLog('...success',1);
-    $steps['createtable'] = 1;
+    foreach ($_SQL as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql);
+        if (DB_error ()) {
+            COM_errorLog ('Error creating table', 1);
+            $uninstall_plugin ();
 
-    // Create the static page admin security group
-    COM_errorLog("Attempting to create Static Page admin group", 1);
-    DB_query("INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr) "
-        . "VALUES ('Static Page Admin', 'Users in this group can administer the Static Pages plugin')",1);
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
+            return false;
+        }
     }
-    COM_errorLog('...success',1);
-    $steps['insertgroup'] = 1;
 
-    $group_id = DB_getItem($_TABLES['groups'], 'grp_id', "grp_name = 'Static Page Admin'");
+    // Add the plugin's features
+    COM_errorLog ("Attempting to add $pi_display_name feature(s)", 1);
 
-    // Add static page features
-    COM_errorLog('Attempting to add staticpages.edit feature',1);
-    DB_query("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
-        . "VALUES ('staticpages.edit','Access to Static Pages editor')",1);
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
-    }
-    $edit_id = DB_insertId();
-    COM_errorLog('...success',1);
-    $steps['insertedfeatureedit'] = 1;
-
-    COM_errorLog('Attempting to add staticpages.delete feature',1);
-    DB_query("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
-        . "VALUES ('staticpages.delete','Ability to delete static pages')",1);
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
-    }
-    $delete_id = DB_insertId();
-    COM_errorLog('...success',1);
-    $steps['insertedfeaturedelete'] = 1;
-
-    COM_errorLog('Attempting to add staticpages.PHP feature',1);
-    DB_query("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
-        . "VALUES ('staticpages.PHP','Ability use PHP in static pages')",1);
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
-    }
-    $php_id = DB_insertId();
-    COM_errorLog('...success',1);
-    $steps['insertedphpfeature'] = 1;
-    
-    // Now add the features to the group
-    COM_errorLog('Attempting to give Static Page Admin group access to staticpages.edit feature',1);
-    DB_query("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($edit_id, $group_id)");
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
-    }
-    COM_errorLog('...success',1);
-    $steps['addededittogroup'] = 1;
+    foreach ($FEATURES as $feature => $desc) {
+        $ft_name = addslashes ($feature);
+        $ft_desc = addslashes ($desc);
+        DB_query ("INSERT INTO {$_TABLES['features']} (ft_name, ft_descr) "
+                  . "VALUES ('$ft_name', '$ft_desc')", 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
 
-    COM_errorLog('Attempting to give Static Page Admin group access to staticpages.delete feature',1);
-    DB_query("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($delete_id, $group_id)",1);
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
-    }
-    COM_errorLog('...success',1);
-    $steps['addeddeletetogroup'] = 1;
+            return false;
+        }
 
-    COM_errorLog('Attempting to give Static Page Admin group access to staticpages.PHP feature',1);
-    DB_query("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($php_id, $group_id)",1);
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
-        return false;
+        $feat_id = DB_insertId ();
+
+        if (isset ($MAPPINGS[$feature])) {
+            foreach ($MAPPINGS[$feature] as $group) {
+                COM_errorLog ("Adding $feature feature to the $group group", 1);
+                DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($feat_id, {$GROUPS[$group]})");
+                if (DB_error ()) {
+                    $uninstall_plugin ();
+
+                    return false;
+                }
+            }
+        }
     }
-    COM_errorLog('...success',1);
-    $steps['addedphptogroup']=1;
-    
-    // OK, now give Root users access to this plugin now! NOTE: Root group should always be 1
-    COM_errorLog('Attempting to give all users in Root group access static page admin group',1);
-    DB_query("INSERT INTO {$_TABLES['group_assignments']} VALUES ($group_id, NULL, 1)");
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
+
+    // Add plugin's Admin group to the Root user group
+    // (assumes that the Root group's ID is always 1)
+    COM_errorLog ("Attempting to give all users in the Root group access to the $pi_display_name's Admin group", 1);
+
+    DB_query ("INSERT INTO {$_TABLES['group_assignments']} VALUES "
+              . "($admin_group_id, NULL, 1)");
+    if (DB_error ()) {
+        $uninstall_plugin ();
+
         return false;
     }
-    COM_errorLog('...success',1);
-    $steps['addedrootuserstogroup'] = 1;
 
-    // Register the plugin with Geeklog
-    if (DB_count($_TABLES['plugins'],'pi_name','staticpages') > 0) {
-        COM_errorLog('Attempting to remove staticpage entry prior to adding an updated entry',1);
-        DB_query("DELETE FROM {$_TABLES['plugins']} WHERE pi_name = 'staticpages'");
-        if (DB_error()) {
-            plugin_uninstall_staticpages($steps);
+    // Pre-populate tables or run any other SQL queries
+    COM_errorLog ('Inserting default data', 1);
+    foreach ($DEFVALUES as $sql) {
+        $sql = str_replace ('#group#', $admin_group_id, $sql);
+        DB_query ($sql, 1);
+        if (DB_error ()) {
+            $uninstall_plugin ();
+
             return false;
         }
-        COM_errorLog('...success',1);
-    } else {
-        // Only install data on a fresh installation
-        // This plugin has no install data
     }
 
-    COM_errorLog('Registering Static Page plugin with Geeklog', 1);
-    DB_delete($_TABLES['plugins'],'pi_name','staticpages');
-    DB_query("INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_homepage, pi_enabled) "
-        . "VALUES ('staticpages', '{$_SP_CONF['version']}', '1.3.9', 'http://www.tonybibbs.com', 1)");
+    // Finally, register the plugin with Geeklog
+    COM_errorLog ("Registering $pi_display_name plugin with Geeklog", 1);
+
+    // silently delete an existing entry
+    DB_delete ($_TABLES['plugins'], 'pi_name', $pi_name);
+
+    DB_query("INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_homepage, pi_enabled) VALUES "
+        . "('$pi_name', '$pi_version', '$gl_version', '$pi_url', 1)");
+
+    if (DB_error ()) {
+        $uninstall_plugin ();
 
-    if (DB_error()) {
-        plugin_uninstall_staticpages($steps);
         return false;
     }
-    COM_errorLog('...success',1);
-    COM_errorLog('Succesfully installed the Static Page Plugin!',1);
+
+    COM_errorLog ("Successfully installed the $pi_display_name plugin!", 1);
 
     return true;
 }
 
-$display = COM_siteHeader();
 
-if ($action == 'uninstall') {
-    if (plugin_uninstall_staticpages ()) {
-        $display .= COM_showMessage (45);
+// MAIN
+$display = '';
+
+if ($_REQUEST['action'] == 'uninstall') {
+    $uninstall_plugin = 'plugin_uninstall_' . $pi_name;
+    if ($uninstall_plugin ()) {
+        $display = COM_refresh ($_CONF['site_admin_url']
+                                . '/plugins.php?msg=45');
     } else {
-        $timestamp = strftime($_CONF['daytime']);
-        $display .= COM_startBlock ($MESSAGE[40] . ' - ' . $timestamp)
-                 . '<p><img src="' . $_CONF['layout_url']
-                 . '/images/sysmessage.gif" border="0" align="top" alt="">'
-                 . $LANG08[6] . '</p>' . COM_endBlock ();
-    }
-} else if (DB_count ($_TABLES['plugins'], 'pi_name', 'staticpages') == 0) {
-    // plugin not installed - do it now
-    if (plugin_install_staticpages ()) {
         $display = COM_refresh ($_CONF['site_admin_url']
-                                . '/plugins.php?msg=44');
+                                . '/plugins.php?msg=73');
+    }
+} else if (DB_count ($_TABLES['plugins'], 'pi_name', $pi_name) == 0) {
+    // plugin not installed
+
+    if (plugin_compatible_with_this_geeklog_version ()) {
+        if (plugin_install_now ()) {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=44');
+        } else {
+            $display = COM_refresh ($_CONF['site_admin_url']
+                                    . '/plugins.php?msg=72');
+        }
     } else {
-        $timestamp = strftime($_CONF['daytime']);
-        $display .= COM_startBlock ($MESSAGE[40] . ' - ' . $timestamp)
-                 . '<p><img src="' . $_CONF['layout_url']
-                 . '/images/sysmessage.gif" border="0" align="top" alt="">'
-                 . $LANG08[6] . '</p>' . COM_endBlock ();
+        // plugin needs a newer version of Geeklog
+        $display .= COM_siteHeader ('menu', $LANG32[8])
+                 . COM_startBlock ($LANG32[8])
+                 . '<p>' . $LANG32[9] . '</p>'
+                 . COM_endBlock ()
+                 . COM_siteFooter ();
     }
 } else {
     // plugin already installed
-    $display .= COM_startBlock ($LANG32[6])
+    $display .= COM_siteHeader ('menu', $LANG01[77])
+             . COM_startBlock ($LANG32[6])
              . '<p>' . $LANG32[7] . '</p>'
-             . COM_endBlock ();
+             . COM_endBlock ()
+             . COM_siteFooter();
 }
 
-$display .= COM_siteFooter();
-
 echo $display;
 
 ?>
diff -ruN 1.3.11sr1/admin/plugins.php 1.4.0sr5-1/admin/plugins.php
--- 1.3.11sr1/admin/plugins.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/plugins.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | plugins.php                                                               |
 // |                                                                           |
 // | Geeklog plugin administration page.                                       |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: plugins.php,v 1.42 2004/10/23 21:31:38 blaine Exp $
+// $Id: plugins.php,v 1.57 2005/12/22 14:39:46 ospiess Exp $
 
 require_once ('../lib-common.php');
 require_once ('auth.inc.php');
@@ -40,7 +40,7 @@
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
+// echo COM_debug($_POST);
 
 // Number of plugins to list per page
 // We use 25 here instead of the 50 entries in other lists to leave room
@@ -49,7 +49,7 @@
 
 $display = '';
 
-if (!SEC_inGroup('Root')) {
+if (!SEC_hasrights ('plugin.edit')) {
     $display .= COM_siteHeader ('menu');
     $display .= COM_startBlock ($MESSAGE[30], '',
                                 COM_getBlockTemplate ('_msg_block', 'header'));
@@ -71,7 +71,7 @@
 */ 
 function plugineditor ($pi_name, $confirmed = 0) 
 {
-    global $_CONF, $_TABLES, $_USER, $LANG32, $HTTP_POST_VARS;
+    global $_CONF, $_TABLES, $_USER, $LANG32, $_POST;
 
     $retval = '';
 
@@ -109,22 +109,7 @@
     $plg_templates->set_var('lang_save', $LANG32[23]);
     $plg_templates->set_var('lang_cancel', $LANG32[24]);
     $plg_templates->set_var('lang_delete', $LANG32[25]);
-    $public_img = $_CONF['site_url'] . '/' . $pi_name . '/images/' . $pi_name . '.gif';
-    $fh = @fopen ($public_img, 'r');
-    if ($fh === false) {
-        $admin_img = $_CONF['site_admin_url'] . '/plugins/' . $pi_name
-                   . '/images/' . $pi_name . '.gif';
-        $fh2 = @fopen ($admin_img, 'r');
-        if ($fh2 === false) {
-            $default_img = $_CONF['site_url'] . '/images/icons/plugins.gif';
-            $plg_templates->set_var ('pi_icon', $default_img);
-        } else {
-            $plg_templates->set_var ('pi_icon', $admin_img);
-        }
-    } else {
-        fclose ($fh);
-        $plg_templates->set_var ('pi_icon', $public_img);
-    }
+    $plg_templates->set_var ('pi_icon', PLG_getIcon ($pi_name));
     if (!empty($pi_name)) {
         $plg_templates->set_var ('delete_option', '<input type="submit" value="'
                                  . $LANG32[25] . '" name="mode">');
@@ -165,86 +150,27 @@
 }
 
 /**
-* Shows all installed Geeklog plugins
+* Toggle status of a plugin from enabled to disabled and back
 *
-* @param    int     $page   Page number to show
-* @return   string          HTML for list of plugins
+* @param    string  $pi_name    name of the plugin
+* @return   void
 *
 */
-function listplugins ($page = 1) 
+function changePluginStatus ($pi_name)
 {
-    global $_CONF, $_TABLES, $LANG32;
-
-    $retval = '';
-
-    if ($page < 1) {
-        $page = 1;
-    }
-
-    $plg_templates = new Template ($_CONF['path_layout'] . 'admin/plugins');
-    $plg_templates->set_file (array ('list' => 'pluginlist.thtml',
-                                     'row'  => 'listitem.thtml'));
-    $plg_templates->set_var('site_url', $_CONF['site_url']);
-    $plg_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $plg_templates->set_var('layout_url', $_CONF['layout_url']);
-    $plg_templates->set_var('start_block_pluginlist', COM_startBlock($LANG32[5],
-            '', COM_getBlockTemplate ('_admin_block', 'header')));
-    $plg_templates->set_var('lang_newplugin', $LANG32[14]);
-    $plg_templates->set_var('lang_adminhome', $LANG32[15]);
-    $plg_templates->set_var('lang_instructions', $LANG32[11]);
-    $plg_templates->set_var('lang_pluginname', $LANG32[16]);
-    $plg_templates->set_var('lang_pluginversion', $LANG32[17]);
-    $plg_templates->set_var('lang_geeklogversion', $LANG32[18]);
-    $plg_templates->set_var('lang_enabled', $LANG32[19]);
+    global $_TABLES;
 
-    $limit = (PLUGINS_PER_PAGE * $page) - PLUGINS_PER_PAGE;
-    $result = DB_query("SELECT pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage FROM {$_TABLES['plugins']} LIMIT $limit," . PLUGINS_PER_PAGE);
-    $nrows = DB_numRows($result);
-    if ($nrows > 0) {
-         for ($i = 0; $i < $nrows; $i++) {
-            $pcount = (PLUGINS_PER_PAGE * ($page - 1)) + $i + 1;
-            $A = DB_fetchArray($result);
-            $plugin_code_version = PLG_chkVersion($A['pi_name']);
-            if ($plugin_code_version == '') {
-                $plugin_code_version = 'N/A';
-            }
-            $plg_templates->set_var('pi_name', $A['pi_name']);
-            $plg_templates->set_var('row_num', $pcount);
-            $plg_templates->set_var('pi_url', $A['pi_homepage']);
-            $plg_templates->set_var('pi_installed_version', $A['pi_version']);
-            $plg_templates->set_var('pi_code_version', $plugin_code_version);
-            $plg_templates->set_var('pi_gl_version', $A['pi_gl_version']);
-            if ($A['pi_enabled'] == 1) {
-                $plg_templates->set_var('pi_enabled', $LANG32[20]);
-            } else {
-                $plg_templates->set_var('pi_enabled', $LANG32[21]);
-            }
-            $plg_templates->parse('plugin_list', 'row', true);
+    $pi_name = addslashes (COM_applyFilter ($pi_name));
+    if (!empty ($pi_name)) {
+        $pi_enabled = 1;
+        if (DB_getItem ($_TABLES['plugins'], 'pi_enabled', "pi_name = '$pi_name'")) {
+            $pi_enabled = 0;
         }
-    } else {
-        // no plug-ins installed, give a message that says as much
-        $plg_templates->set_var('lang_nopluginsinstalled', $LANG32[10]);
+        DB_query ("UPDATE {$_TABLES['plugins']} SET pi_enabled = '$pi_enabled' WHERE pi_name = '$pi_name'");
     }
-
-    $numplugins = DB_count ($_TABLES['plugins']);
-    if ($numplugins > PLUGINS_PER_PAGE) {
-        $baseurl = $_CONF['site_admin_url'] . '/plugins.php';
-        $numpages = ceil ($numplugins / PLUGINS_PER_PAGE);
-        $plg_templates->set_var ('google_paging',
-                COM_printPageNavigation ($baseurl, $page, $numpages));
-    } else {
-        $plg_templates->set_var ('google_paging', '');
-    }
-
-    $plg_templates->set_var('end_block',
-            COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')));
-    $plg_templates->parse('output', 'list');
-    $retval .= $plg_templates->finish($plg_templates->get_var('output'));
-    $retval .= show_newplugins();
-
-    return $retval;
 }
 
+
 /**
 * Saves a plugin
 *
@@ -258,7 +184,7 @@
 */ 
 function saveplugin($pi_name, $pi_version, $pi_gl_version, $enabled, $pi_homepage) 
 {
-    global $_CONF, $_TABLES;
+    global $_CONF, $_TABLES, $LANG32;
 
     $retval = '';
 
@@ -357,6 +283,7 @@
                 $newtemplate->set_var ('lang_install', $LANG32[22]);
                 $newtemplate->set_var ('pi_name', $newplugins[$i]);
                 $newtemplate->set_var ('row_num', $i + 1);
+                $newtemplate->set_var ('cssid', $i%2 + 1);
                 $newtemplate->set_var ('start_install_anchortag', '<a href="'
                     . $_CONF['site_admin_url'] . '/plugins/' . $newplugins[$i]
                     . '/install.php?action=install">');
@@ -396,7 +323,7 @@
 */
 function do_update ($pi_name)
 {
-    global $_CONF, $LANG32, $LANG08, $MESSAGE;
+    global $_CONF, $LANG32, $LANG08, $MESSAGE, $_IMAGE_TYPE;
 
     $retval = '';
 
@@ -411,17 +338,19 @@
     $result = PLG_upgrade ($pi_name);
     if ($result > 0 ) {
         if ($result === TRUE) { // Catch returns that are just true/false
-            $retval .= COM_showMessage (60);
+            $retval .= COM_refresh ($_CONF['site_admin_url']
+                    . '/plugins.php?msg=60');
         } else {  // Plugin returned a message number
-            $retval = COM_refresh($_CONF['site_url'] .'/index.php?msg='.$result.'&amp;plugin='.$pi_name);
+            $retval = COM_refresh ($_CONF['site_url'] . '/index.php?msg='
+                    . $result . '&amp;plugin=' . $pi_name);
         }
     } else {  // Plugin function returned a false
         $timestamp = strftime ($_CONF['daytime']);
         $retval .= COM_startBlock ($MESSAGE[40] . ' - ' . $timestamp, '',
                            COM_getBlockTemplate ('_msg_block', 'header'))
                 . '<img src="' . $_CONF['layout_url']
-                . '/images/sysmessage.gif" border="0" align="top" alt="">'
-                . $LANG08[6] . '<br><br>'
+                . '/images/sysmessage.' . $_IMAGE_TYPE
+                . '" border="0" align="top" alt="">' . $LANG08[6] . '<br><br>'
                 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
     }
 
@@ -429,9 +358,6 @@
 }
 
 
-
-
-
 /**
 * Uninstall a plugin (call its uninstall function).
 *
@@ -441,7 +367,7 @@
 */
 function do_uninstall ($pi_name)
 {
-    global $_CONF, $LANG32, $LANG08, $MESSAGE;
+    global $_CONF, $LANG32, $LANG08, $MESSAGE, $_IMAGE_TYPE;
 
     $retval = '';
 
@@ -466,31 +392,83 @@
         $retval .= COM_startBlock ($MESSAGE[40] . ' - ' . $timestamp, '',
                            COM_getBlockTemplate ('_msg_block', 'header'))
                 . '<img src="' . $_CONF['layout_url']
-                . '/images/sysmessage.gif" border="0" align="top" alt="">'
-                . $LANG08[6] . '<br><br>'
+                . '/images/sysmessage.' . $_IMAGE_TYPE
+                . '" border="0" align="top" alt="">' . $LANG08[6] . '<br><br>'
                 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
     }
 
     return $retval;
 }
 
+/**
+* List available plugins
+*
+* @return   string                  formatted list of plugins
+*
+*/
+function listplugins ()
+{
+    global $_CONF, $_TABLES, $LANG32, $LANG_ADMIN, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    
+    $header_arr = array(      # display 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG32[16], 'field' => 'pi_name', 'sort' => true),
+                    array('text' => $LANG32[17], 'field' => 'pi_version', 'sort' => true),
+                    array('text' => $LANG32[18], 'field' => 'pi_gl_version', 'sort' => true),
+                    array('text' => $LANG_ADMIN['enabled'], 'field' => 'enabled', 'sort' => false)
+    );
+
+    $defsort_arr = array('field' => 'pi_name', 'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home']));
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras' => true,
+                      'title' => $LANG32[5],
+                      'instructions' => $LANG32[11],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/plugins.'
+                                . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . '/plugins.php');
+
+    $query_arr = array('table' => 'plugins',
+                       'sql' => "SELECT pi_name, pi_version, pi_gl_version, "
+                               ."pi_enabled, pi_homepage FROM {$_TABLES['plugins']} WHERE 1",
+                       'query_fields' => array('pi_name'),
+                       'default_filter' => '');
+
+    return ADMIN_list ('plugins', 'ADMIN_getListField_plugins', $header_arr,
+                       $text_arr, $query_arr, $menu_arr, $defsort_arr);
+                            
+}
+
 // MAIN
 $display = '';
+if (isset ($_POST['pluginChange'])) {
+    changePluginStatus ($_POST['pluginChange']);
 
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-} else {
-    $mode = $HTTP_GET_VARS['mode'];
+    // force a refresh so that the information of the plugin that was just
+    // enabled / disabled (menu entries, etc.) is displayed properly
+    header ('Location: ' . $_CONF['site_admin_url'] . '/plugins.php');
+    exit;
+}
+
+$mode = '';
+if (isset ($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
 }
 if (($mode == $LANG32[25]) && !empty ($LANG32[25])) { // delete
-    $pi_name = COM_applyFilter ($HTTP_POST_VARS['pi_name']);
-    if ($HTTP_POST_VARS['confirmed'] == 1) {
-        $display .= COM_siteHeader ('menu');
+    $pi_name = COM_applyFilter ($_POST['pi_name']);
+    if ($_POST['confirmed'] == 1) {
+        $display .= COM_siteHeader ('menu', $LANG32[30]);
         $display .= do_uninstall ($pi_name);
-        $display .= listplugins (COM_applyFilter ($HTTP_POST_VARS['page']));
+        $display .= listplugins ();
+        $display .= show_newplugins();
         $display .= COM_siteFooter ();
     } else { // ask user for confirmation
-        $display .= COM_siteHeader ('menu');
+        $display .= COM_siteHeader ('menu', $LANG32[30]);
         $display .= COM_startBlock ($LANG32[30], '',
                             COM_getBlockTemplate ('_msg_block', 'header'));
         $display .= $LANG32[31];
@@ -499,40 +477,33 @@
         $display .= COM_siteFooter ();
     }
 
-} else if ($mode == $LANG32[34]) {
-        $pi_name = COM_applyFilter ($HTTP_POST_VARS['pi_name']);
+} else if (($mode == $LANG32[34]) && !empty ($LANG32[34])) { // update
+        $pi_name = COM_applyFilter ($_POST['pi_name']);
         $display .= COM_siteHeader ('menu');
         $display .= do_update ($pi_name);
         $display .= COM_siteFooter ();
 
 } else if ($mode == 'edit') {
-    $display .= COM_siteHeader ('menu');
-    $display .= plugineditor (COM_applyFilter ($HTTP_GET_VARS['pi_name']));
+    $display .= COM_siteHeader ('menu', $LANG32[13]);
+    $display .= plugineditor (COM_applyFilter ($_GET['pi_name']));
     $display .= COM_siteFooter ();
 
 } else if (($mode == $LANG32[23]) && !empty ($LANG32[23])) { // save
-    $display .= saveplugin (COM_applyFilter ($HTTP_POST_VARS['pi_name']),
-                            COM_applyFilter ($HTTP_POST_VARS['pi_version']),
-                            COM_applyFilter ($HTTP_POST_VARS['pi_gl_version']),
-                            COM_applyFilter ($HTTP_POST_VARS['enabled']),
-                            COM_applyFilter ($HTTP_POST_VARS['pi_homepage']));
+    $display .= saveplugin (COM_applyFilter ($_POST['pi_name']),
+                            COM_applyFilter ($_POST['pi_version']),
+                            COM_applyFilter ($_POST['pi_gl_version']),
+                            COM_applyFilter ($_POST['enabled']),
+                            COM_applyFilter ($_POST['pi_homepage']));
+
 } else { // 'cancel' or no mode at all
-    $display .= COM_siteHeader ('menu');
-    if (isset ($HTTP_POST_VARS['msg'])) {
-        $msg = $HTTP_POST_VARS['msg'];
-    } else {
-        $msg = $HTTP_GET_VARS['msg'];
-    }
+    $display .= COM_siteHeader ('menu', $LANG32[5]);
+    $msg = COM_applyFilter ($_REQUEST['msg'], true);
     if (!empty ($msg)) {
-        $display .= COM_showMessage(COM_applyFilter ($msg, true));
+        $display .= COM_showMessage ($msg);
     }
-    if (isset ($HTTP_POST_VARS['page'])) {
-        $page = $HTTP_POST_VARS['page'];
-    } else {
-        $page = $HTTP_GET_VARS['page'];
-    }
-    $display .= listplugins (COM_applyFilter ($page, true));
-    $display .= COM_siteFooter ();
+    $display .= listplugins ();
+    $display .= show_newplugins();
+    $display .= COM_siteFooter();
 }
 
 echo $display;
diff -ruN 1.3.11sr1/admin/poll.php 1.4.0sr5-1/admin/poll.php
--- 1.3.11sr1/admin/poll.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/poll.php	1969-12-31 18:00:00.000000000 -0600
@@ -1,504 +0,0 @@
-<?php
-
-/* Reminder: always indent with 4 spaces (no tabs). */
-// +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
-// +---------------------------------------------------------------------------+
-// | poll.php                                                                  |
-// |                                                                           |
-// | Geeklog poll administration page                                          |
-// +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
-// |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
-// +---------------------------------------------------------------------------+
-// |                                                                           |
-// | This program is free software; you can redistribute it and/or             |
-// | modify it under the terms of the GNU General Public License               |
-// | as published by the Free Software Foundation; either version 2            |
-// | of the License, or (at your option) any later version.                    |
-// |                                                                           |
-// | This program is distributed in the hope that it will be useful,           |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
-// | GNU General Public License for more details.                              |
-// |                                                                           |
-// | You should have received a copy of the GNU General Public License         |
-// | along with this program; if not, write to the Free Software Foundation,   |
-// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-//
-// $Id: poll.php,v 1.42 2004/12/10 09:56:34 dhaun Exp $
-
-// Set this to true if you want to log debug messages to error.log
-$_POLL_VERBOSE = false;
-
-require_once ('../lib-common.php');
-require_once ('auth.inc.php');
-
-// number of polls to list per page
-define ('POLLS_PER_PAGE', 50);
-
-$display = '';
-
-if (!SEC_hasRights ('poll.edit')) {
-    $display .= COM_siteHeader ('menu');
-    $display .= COM_startBlock ($MESSAGE[30], '',
-                                COM_getBlockTemplate ('_msg_block', 'header'));
-    $display .= $MESSAGE[36];
-    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-    $display .= COM_siteFooter ();
-    COM_accessLog ("User {$_USER['username']} tried to illegally access the poll administration screen.");
-    echo $display;
-    exit;
-}
-
-// Uncomment the line below if you need to debug the HTTP variables being passed
-// to the script.  This will sometimes cause errors but it will allow you to see
-// the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
-
-/**
-* Saves a poll
-*
-* Saves a poll question and potential answers to the database
-*
-* @param    string  $qid            Question ID
-* @param    int     $display        Flag to indicate if poll appears on homepage
-* @param    string  $question       The text for the question
-* @param    int     $voters         Number of votes
-* @param    int     $statuscode     (unused)
-* @param    int     $commentcode    Indicates if users can comment on poll
-* @param    array   $A              Array of possible answers
-* @param    array   $V              Array of vote per each answer 
-* @param    int     $owner_id       ID of poll owner
-* @param    int     $group_id       ID of group poll belongs to
-* @param    int     $perm_owner     Permissions the owner has on poll
-* @param    int     $perm_grup      Permissions the group has on poll
-* @param    int     $perm_members   Permissions logged in members have on poll
-* @param    int     $perm_anon      Permissions anonymous users have on poll
-* @return   string                  HTML redirect or error message
-*
-*/
-function savepoll ($qid, $mainpage, $question, $voters, $statuscode, $commentcode, $A, $V, $owner_id, $group_id, $perm_owner, $perm_group, $perm_members, $perm_anon) 
-{
-    global $_CONF, $_TABLES, $LANG21, $LANG25, $MESSAGE, $_POLL_VERBOSE;
-
-    // Convert array values to numeric permission values
-    list($perm_owner,$perm_group,$perm_members,$perm_anon) = SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon);
-
-    $qid = COM_sanitizeID ($qid);
-
-    $question = COM_stripslashes ($question);
-    for ($i = 0; $i < sizeof ($A); $i++) {
-        $A[$i] = COM_stripslashes ($A[$i]);
-    }
-    if (!empty ($question) && (sizeof ($A) > 0) && strlen ($A[0]) > 0) {
-
-        if ($_POLL_VERBOSE) {
-            COM_errorLog ('**** Inside savepoll() in '
-                          . $_CONF['site_admin_url'] . '/poll.php ***');
-        }
-
-        $qid = str_replace (' ', '', $qid); // strip spaces from poll id
-
-        $access = 0;
-        if (DB_count ($_TABLES['pollquestions'], 'qid', $qid) > 0) {
-            $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid = '{$qid}'");
-            $P = DB_fetchArray ($result);
-            $access = SEC_hasAccess ($P['owner_id'], $P['group_id'],
-                    $P['perm_owner'], $P['perm_group'], $P['perm_members'],
-                    $P['perm_anon']);
-        } else {
-            $access = SEC_hasAccess ($owner_id, $group_id, $perm_owner,
-                                     $perm_group, $perm_members, $perm_anon);
-        }
-        if (($access < 3) || !SEC_inGroup ($group_id)) {
-            $display .= COM_siteHeader ('menu');
-            $display .= COM_startBlock ($MESSAGE[30], '',
-                                COM_getBlockTemplate ('_msg_block', 'header'));
-            $display .= $MESSAGE[31];
-            $display .= COM_endBlock ();
-            $display .= COM_siteFooter (COM_getBlockTemplate ('_msg_block',
-                                                              'footer'));
-            COM_accessLog("User {$_USER['username']} tried to illegally submit or edit poll $qid.");
-            echo $display;
-            exit;
-        }
-
-        if (empty ($voters)) { 
-            $voters = '0'; 
-        }
-
-        if ($_POLL_VERBOSE) {
-            COM_errorLog('owner permissions: ' . $perm_owner, 1);
-            COM_errorLog('group permissions: ' . $perm_group, 1);
-            COM_errorLog('member permissions: ' . $perm_member, 1);
-            COM_errorLog('anonymous permissions: ' . $perm_anon, 1);
-        }
-
-        DB_delete ($_TABLES['pollquestions'], 'qid', $qid);
-        DB_delete ($_TABLES['pollanswers'], 'qid', $qid);
-
-        $question = addslashes ($question);
-        $sql = "'$qid','$question',$voters,'" . date ('Y-m-d H:i:s');
-
-        if ($mainpage == 'on') { 
-            $sql .= "',1";
-        } else {
-            $sql .= "',0";
-        }
-
-        $sql .= ",'$statuscode','$commentcode',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon";
-
-        // Save poll question
-        DB_save($_TABLES['pollquestions'],"qid, question, voters, date, display, statuscode, commentcode, owner_id, group_id, perm_owner, perm_group, perm_members, perm_anon",$sql);
-
-        // Save poll answers
-        for ($i = 0; $i < sizeof($A); $i++) {
-            if (strlen ($A[$i]) > 0) {
-                if (empty($V[$i])) { 
-                    $V[$i] = "0"; 
-                }
-                $A[$i] = addslashes ($A[$i]);
-                DB_save ($_TABLES['pollanswers'], 'qid, aid, answer, votes',
-                         "'$qid', $i+1, '$A[$i]', $V[$i]");
-            }
-        }
-
-        if ($_POLL_VERBOSE) {
-            COM_errorLog ('**** Leaving savepoll() in '
-                          . $_CONF['site_admin_url'] . '/poll.php ***');
-        }
-
-        return COM_refresh($_CONF['site_admin_url'] . '/poll.php?msg=19');
-
-    } else {
-        $retval .= COM_siteHeader ('menu');
-        $retval .= COM_startBlock ($LANG21[32], '',
-                           COM_getBlockTemplate ('_msg_block', 'header'));
-        $retval .= $LANG25[2];
-        $retval .= COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
-        $retval .= editpoll ($qid);
-        $retval .= COM_siteFooter ();
-
-        return $retval;
-    }
-}
-
-/**
-* Shows poll editor
-*
-* Diplays the poll editor form
-*
-* @param    string  $qid    ID of poll to edit
-* @return   string          HTML for poll editor form
-*
-*/
-function editpoll ($qid = '')
-{
-    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG25, $LANG_ACCESS;
-
-    $retval = '';
-
-    $poll_templates = new Template($_CONF['path_layout'] . 'admin/poll');
-    $poll_templates->set_file(array('editor'=>'polleditor.thtml','answer'=>'pollansweroption.thtml'));
-    $poll_templates->set_var('site_url', $_CONF['site_url']);
-    $poll_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $poll_templates->set_var('layout_url', $_CONF['layout_url']);
-
-    if (!empty ($qid)) {
-        $question = DB_query("SELECT * FROM {$_TABLES['pollquestions']} WHERE qid='$qid'");
-        $answers = DB_query("SELECT answer,aid,votes FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY aid");
-        $Q = DB_fetchArray($question);
-
-        // Get permissions for poll
-    
-        $access = SEC_hasAccess($Q['owner_id'],$Q['group_id'],$Q['perm_owner'],$Q['perm_group'],$Q['perm_members'],$Q['perm_anon']);
-    
-        if ($access == 0 OR $access == 2) {
-            // User doesn't have access...bail
-            $retval .= COM_startBlock ($LANG25[21], '',
-                               COM_getBlockTemplate ('_msg_block', 'header'));
-            $retval .= $LANG25[22];
-            $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-            COM_accessLog("User {$_USER['username']} tried to illegally submit or edit poll $qid.");
-            return $retval;
-        }
-    }
-
-    $retval .= COM_startBlock ($LANG25[5], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    if (!empty ($qid) AND ($access == 3) AND !empty ($Q['owner_id'])) {
-        $poll_templates->set_var('delete_option',
-            '<input type="submit" name="mode" value="' . $LANG25[16] . '">');
-    } else {
-        $Q['owner_id'] = $_USER['uid'];
-        if (isset ($_GROUPS['Poll Admin'])) {
-            $Q['group_id'] = $_GROUPS['Poll Admin'];
-        } else {
-            $Q['group_id'] = SEC_getFeatureGroup ('poll.edit');
-        }
-        $Q['perm_owner'] = 3;
-        $Q['perm_group'] = 2;
-        $Q['perm_members'] = 2;
-        $Q['perm_anon'] = 2;
-        $Q['statuscode'] = 0;
-        $Q['commentcode'] = $_CONF['comment_code'];
-        $access = 3;
-    }
-
-    $poll_templates->set_var('lang_pollid', $LANG25[6]);
-    $poll_templates->set_var('poll_id', $Q['qid']);
-    $poll_templates->set_var('lang_donotusespaces', $LANG25[7]);
-    $poll_templates->set_var('lang_question', $LANG25[9]);
-    $poll_templates->set_var('poll_question', htmlspecialchars ($Q['question']));
-    $poll_templates->set_var('lang_mode', $LANG25[1]);
-    $poll_templates->set_var ('status_options', COM_optionList ($_TABLES['statuscodes'], 'code,name', $Q['statuscode'])); 
-    $poll_templates->set_var('comment_options', COM_optionList($_TABLES['commentcodes'],'code,name',$Q['commentcode']));
-    $poll_templates->set_var('lang_appearsonhomepage', $LANG25[8]);
-
-    if ($Q['display'] == 1) { 
-        $poll_templates->set_var('poll_display', 'checked');
-    }
-
-    // user access info 
-    $poll_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']);
-    $poll_templates->set_var('lang_owner', $LANG_ACCESS['owner']);
-    $poll_templates->set_var('owner_username', DB_getItem($_TABLES['users'],'username',"uid = {$Q['owner_id']}"));
-    $poll_templates->set_var('owner_id', $Q['owner_id']);
-    $poll_templates->set_var('lang_group', $LANG_ACCESS['group']);
-   
-    $groupdd = ''; 
-    $usergroups = SEC_getUserGroups();
-    if ($access == 3) {
-        $groupdd .= '<select name="group_id">';
-        for ($i = 0; $i < count($usergroups); $i++) {
-            $groupdd .= '<option value="' . $usergroups[key($usergroups)] . '"';
-            if ($Q['group_id'] == $usergroups[key($usergroups)]) {
-                $groupdd .= ' selected';
-            }
-            $groupdd .=  '>' . key($usergroups) . '</option>';
-            next($usergroups);
-        }
-        $groupdd .=  '</SELECT>';
-    } else {
-        // they can't set the group then
-        $groupdd .= DB_getItem($_TABLES['groups'],'grp_name',"grp_id = {$Q['group_id']}");
-        $groupdd .= '<input type="hidden" name="group_id" value="' . $A['group_id'] . '">';
-    }
-    $poll_templates->set_var('group_dropdown', $groupdd);
-    $poll_templates->set_var('lang_permissions', $LANG_ACCESS['permissions']);
-    $poll_templates->set_var('lang_permissionskey', $LANG_ACCESS['permissionskey']);
-    $poll_templates->set_var('permissions_editor', SEC_getPermissionsHTML($Q['perm_owner'],$Q['perm_group'],$Q['perm_members'],$Q['perm_anon']));
-    $poll_templates->set_var('lang_permissions_msg', $LANG_ACCESS['permmsg']);
-    $poll_templates->set_var('lang_answersvotes', $LANG25[10]);   
-    $poll_templates->set_var('lang_save', $LANG25[14]);   
-    $poll_templates->set_var('lang_cancel', $LANG25[15]);   
- 
-    for ($i = 1; $i <= $_CONF['maxanswers']; $i++) {
-        $A = DB_fetchArray($answers);
-        $poll_templates->set_var('answer_text', htmlspecialchars ($A['answer']));
-        $poll_templates->set_var('answer_votes', $A['votes']);
-        if ($i < $_CONF['maxanswers']) {
-            $poll_templates->parse('answer_option','answer',true);
-        }
-    }
-
-    $poll_templates->parse('output','editor');
-    $retval .= $poll_templates->finish($poll_templates->get_var('output'));
-
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
-}
-
-/**
-* lists existing polls
-*
-* @param    int     $page   page to display
-* @return   string          HTML with the list of polls
-*
-*/
-function listpolls ($page = 1) 
-{
-    global $_CONF, $_TABLES, $LANG25, $LANG_ACCESS;
-
-    $retval = '';
-
-    if ($page < 1) {
-        $page = 1;
-    }
-
-    $retval .= COM_startBlock ($LANG25[18], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    $poll_templates = new Template ($_CONF['path_layout'] . 'admin/poll');
-    $poll_templates->set_file (array ('list' => 'polllist.thtml',
-                                      'row'  => 'listitem.thtml'));
-    $poll_templates->set_var('site_url', $_CONF['site_url']);
-    $poll_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $poll_templates->set_var('layout_url', $_CONF['layout_url']);
-    $poll_templates->set_var('lang_newpoll', $LANG25[23]);
-    $poll_templates->set_var('lang_adminhome', $LANG25[24]);
-    $poll_templates->set_var('lang_instructions', $LANG25[19]);
-    $poll_templates->set_var('lang_question', $LANG25[9]);
-    $poll_templates->set_var('lang_access', $LANG_ACCESS['access']);
-    $poll_templates->set_var('lang_voters',  $LANG25[20]);
-    $poll_templates->set_var('lang_pollcreated', $LANG25[3]);
-    $poll_templates->set_var('lang_appearsonhomepage', $LANG25[8]);
- 
-    $limit = (POLLS_PER_PAGE * $page) - POLLS_PER_PAGE;
-    $result = DB_query ("SELECT * FROM {$_TABLES['pollquestions']}" . COM_getPermSQL () . " ORDER BY date DESC LIMIT $limit," . POLLS_PER_PAGE);
-    $nrows = DB_numRows ($result);
-    for ($i = 0; $i < $nrows; $i++) {
-        $pcount = (POLLS_PER_PAGE * ($page - 1)) + $i + 1;
-        $A = DB_fetchArray ($result);
-        $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                                 $A['perm_owner'], $A['perm_group'],
-                                 $A['perm_members'], $A['perm_anon']);
-        if ($access > 0) {
-            if ($access == 3) {
-                $access = $LANG_ACCESS['edit'];
-            } else {
-                $access = $LANG_ACCESS['readonly'];
-            }
-            $curtime = COM_getUserDateTimeFormat ($A['date']); 
-            if ($A['display'] == 1) {
-                $A['display'] = $LANG25[25];
-            } else {
-                $A['display'] = $LANG25[26];
-            }
-            $poll_templates->set_var ('question_id', $A['qid']);
-            $poll_templates->set_var ('poll_question', $A['question']);
-            $poll_templates->set_var ('poll_access', $access);
-            $poll_templates->set_var ('poll_votes', $A['voters']);
-            $poll_templates->set_var ('poll_createdate', $curtime[0]);
-            $poll_templates->set_var ('poll_homepage', $A['display']);
-            $poll_templates->set_var ('row_num', $pcount);
-            $poll_templates->parse ('poll_row', 'row', true);
-        }
-    }
-
-    $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
-    $A = DB_fetchArray ($result);
-    $numpolls = $A['count'];
-    if ($numpolls > POLLS_PER_PAGE) {
-        $baseurl = $_CONF['site_admin_url'] . '/poll.php';
-        $numpages = ceil ($numpolls / POLLS_PER_PAGE);
-        $poll_templates->set_var ('google_paging',
-                COM_printPageNavigation ($baseurl, $page, $numpages));
-    } else {
-        $poll_templates->set_var ('google_paging', '');
-    }
-
-    $poll_templates->parse ('output', 'list');
-    $retval .= $poll_templates->finish ($poll_templates->get_var ('output'));
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
-}
-
-/**
-* Delete a poll
-*
-* @param    string  $qid    ID of poll to delete
-* @return   string          HTML redirect
-*
-*/
-function deletePoll ($qid)
-{
-    global $_CONF, $_TABLES, $_USER;
-
-    $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid = '$qid'");
-    $Q = DB_fetchArray ($result);
-    $access = SEC_hasAccess ($Q['owner_id'], $Q['group_id'], $Q['perm_owner'],
-            $Q['perm_group'], $Q['perm_members'], $Q['perm_anon']);
-    if ($access < 3) {
-        COM_accessLog ("User {$_USER['username']} tried to illegally delete poll $qid.");
-        return COM_refresh ($_CONF['site_admin_url'] . '/poll.php');
-    }
-
-    DB_delete ($_TABLES['pollquestions'], 'qid', $qid);
-    DB_delete ($_TABLES['pollanswers'], 'qid', $qid);
-    DB_query ("DELETE FROM {$_TABLES['comments']} WHERE sid = '$qid' AND type = 'poll'");
-
-    return COM_refresh ($_CONF['site_admin_url'] . '/poll.php?msg=20');
-}
-
-// MAIN
-
-$display = '';
-
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-} else {
-    $mode = $HTTP_GET_VARS['mode'];
-}
-
-if ($mode == 'edit') {
-    $display .= COM_siteHeader ('menu');
-    $display .= editpoll (COM_applyFilter ($HTTP_GET_VARS['qid']));
-    $display .= COM_siteFooter ();
-} else if (($mode == $LANG25[14]) && !empty ($LANG25[14])) { // save
-    $qid = COM_applyFilter ($HTTP_POST_VARS['qid']);
-    if (!empty ($qid)) {
-        $voters = 0;
-        for ($i = 0; $i < sizeof ($HTTP_POST_VARS['answer']); $i++) {
-            $voters = $voters + $HTTP_POST_VARS['votes'][$i];
-        }
-        $display .= savepoll ($qid, $HTTP_POST_VARS['mainpage'],
-                        $HTTP_POST_VARS['question'], $voters,
-                        COM_applyFilter ($HTTP_POST_VARS['statuscode'], true),
-                        COM_applyFilter ($HTTP_POST_VARS['commentcode'], true),
-                        $HTTP_POST_VARS['answer'], $HTTP_POST_VARS['votes'],
-                        $HTTP_POST_VARS['owner_id'],
-                        $HTTP_POST_VARS['group_id'],
-                        $HTTP_POST_VARS['perm_owner'],
-                        $HTTP_POST_VARS['perm_group'],
-                        $HTTP_POST_VARS['perm_members'],
-                        $HTTP_POST_VARS['perm_anon']);
-    } else {
-        $display .= COM_siteHeader ('menu');
-        $display .= COM_startBlock ($LANG21[32], '',
-                            COM_getBlockTemplate ('_msg_block', 'header'));
-        $display .= $LANG25[17];
-        $display .= COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
-        $display .= editpoll ();
-        $display .= COM_siteFooter ();
-    }
-} else if (($mode == $LANG25[16]) && !empty ($LANG25[16])) { // delete
-    $qid = COM_applyFilter ($HTTP_POST_VARS['qid']);
-    if (!isset ($qid) || empty ($qid)) {
-        COM_errorLog ('Attempted to delete poll qid=' . $HTTP_POST_VARS['qid']);
-        $display .= COM_refresh ($_CONF['site_admin_url'] . '/poll.php');
-    } else {
-        $display .= deletePoll ($qid);
-    }
-} else { // 'cancel' or no mode at all
-    $display .= COM_siteHeader ('menu');
-    if (isset ($HTTP_POST_VARS['msg'])) {
-        $msg = COM_applyFilter ($HTTP_POST_VARS['msg'], true);
-    } else {
-        $msg = COM_applyFilter ($HTTP_GET_VARS['msg'], true);
-    }
-    if (isset ($msg) && ($msg > 0)) {
-        $display .= COM_showMessage ($msg);
-    }
-    if (isset ($HTTP_POST_VARS['page'])) {
-        $page = $HTTP_POST_VARS['page'];
-    } else {
-        $page = $HTTP_GET_VARS['page'];
-    }
-    $display .= listpolls ($page);
-    $display .= COM_siteFooter ();
-}
-
-echo $display;
-
-?>
diff -ruN 1.3.11sr1/admin/story.php 1.4.0sr5-1/admin/story.php
--- 1.3.11sr1/admin/story.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/story.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | story.php                                                                 |
 // |                                                                           |
 // | Geeklog story administration page.                                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: story.php,v 1.144 2004/12/31 10:22:45 dhaun Exp $
+// $Id: story.php,v 1.199 2006/01/28 18:59:46 dhaun Exp $
 
 /**
 * This is the Geeklog story administration page.
@@ -53,7 +53,7 @@
 */
 require_once ('auth.inc.php');
 
-// Set this to true if you want to have this code output debug messages to 
+// Set this to true if you want to have this code output debug messages to
 // the error log
 $_STORY_VERBOSE = false;
 
@@ -62,7 +62,7 @@
 if (!SEC_hasRights('story.edit')) {
     $display .= COM_siteHeader ('menu');
     $display .= COM_startBlock ($MESSAGE[30], '',
-                                COM_getBlockTemplate ('_msg_block', 'header')); 
+                                COM_getBlockTemplate ('_msg_block', 'header'));
     $display .= $MESSAGE[31];
     $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
     $display .= COM_siteFooter ();
@@ -71,6 +71,7 @@
     exit;
 }
 
+
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
@@ -103,40 +104,152 @@
     return $retval;
 }
 
+function liststories()
+{
+    global $_CONF, $_TABLES, $_IMAGE_TYPE, $LANG09, $LANG_ADMIN, $LANG_ACCESS, $LANG24;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+    
+    if (!empty ($_GET['tid'])) {
+        $current_topic = $_GET['tid'];
+    } elseif (!empty ($_POST['tid'])) {
+        $current_topic = $_POST['tid'];
+    } else {
+        $current_topic = $LANG09[9];
+    }
+
+    if ($current_topic == $LANG09[9]) {
+        $excludetopics = '';
+        $seltopics = '';
+        $topicsql = "SELECT tid,topic FROM {$_TABLES['topics']}" . COM_getPermSQL ();
+        $tresult = DB_query( $topicsql );
+        $trows = DB_numRows( $tresult );
+        if( $trows > 0 )
+        {
+            $excludetopics .= ' (';
+            for( $i = 1; $i <= $trows; $i++ )  {
+                $T = DB_fetchArray ($tresult);
+                if ($i > 1)  {
+                    $excludetopics .= ' OR ';
+                }
+                $excludetopics .= "tid = '{$T['tid']}'";
+                $seltopics .= '<option value="' .$T['tid']. '"';
+                if ($current_topic == "{$T['tid']}") {
+                    $seltopics .= ' selected="selected"';
+                }
+                $seltopics .= '>' . $T['topic'] . '</option>' . LB;
+            }
+            $excludetopics .= ') ';
+        }
+    } else {
+        $excludetopics = " tid = '$current_topic' ";
+        $seltopics = COM_topicList ('tid,topic', $current_topic);
+    }
+
+    $alltopics = '<option value="' .$LANG09[9]. '"';
+    if ($current_topic == $LANG09[9]) {
+        $alltopics .= ' selected="selected"';
+    }
+    $alltopics .= '>' .$LANG09[9]. '</option>' . LB;
+    $filter = $LANG_ADMIN['topic'] . ': <select name="tid" style="width: 125px" onchange="this.form.submit()">' . $alltopics . $seltopics . '</select>';
+
+    $header_arr = array(
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true),
+                    array('text' => $LANG_ACCESS['access'], 'field' => 'access', 'sort' => false),
+                    array('text' => $LANG24[34], 'field' => 'draft_flag', 'sort' => true),
+                    array('text' => $LANG24[7], 'field' => 'username', 'sort' => true), //author
+                    array('text' => $LANG24[15], 'field' => 'unixdate', 'sort' => true), //date
+                    array('text' => $LANG_ADMIN['topic'], 'field' => 'tid', 'sort' => true),
+                    array('text' => $LANG24[32], 'field' => 'featured', 'sort' => true));
+
+    if (SEC_hasRights ('story.ping') && ($_CONF['trackback_enabled'] ||
+            $_CONF['pingback_enabled'] || $_CONF['ping_enabled'])) {
+        $header_arr[] = array('text' => $LANG24[20], 'field' => 'ping', 'sort' => false);
+    }
+
+    $defsort_arr = array('field' => 'unixdate', 'direction' => 'desc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/story.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home']));
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG24[22], 'instructions' => $LANG24[23],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/story.' . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/story.php");
+
+    $sql = "SELECT {$_TABLES['stories']}.*, {$_TABLES['users']}.username, "
+          ."UNIX_TIMESTAMP(date) AS unixdate  FROM {$_TABLES['stories']} "
+          ."LEFT JOIN {$_TABLES['users']} ON {$_TABLES['stories']}.uid={$_TABLES['users']}.uid "
+          ."WHERE 1 ";
+
+    $query_arr = array('table' => 'stories',
+                       'sql' => $sql,
+                       'query_fields' => array('title', 'introtext', 'bodytext', 'sid', 'tid'),
+                       'default_filter' => 'AND ' . $excludetopics . COM_getPermSQL ('AND'),);
+
+    $retval .= ADMIN_list ("story", "ADMIN_getListField_stories", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr, $filter);
+    return $retval;
+}
+
 /**
 * Shows story editor
 *
 * Displays the story entry form
 *
-* @param    string      $sid    ID of story to edit
-* @param    string      $mode   mode: preview, 'edit', 'editsubmission'
+* @param    string      $sid            ID of story to edit
+* @param    string      $mode           'preview', 'edit', 'editsubmission'
+* @param    string      $errormsg       a message to display on top of the page
+* @param    string      $currenttopic   topic selection for drop-down menu
 * @return   string      HTML for story editor
 *
 */
-function storyeditor($sid = '', $mode = '') 
+function storyeditor($sid = '', $mode = '', $errormsg = '', $currenttopic = '')
 {
-    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG24, $LANG_ACCESS;
+    global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG24, $LANG_ACCESS, $LANG_ADMIN;
 
     $display = '';
 
-    if (!empty($sid) && $mode == 'edit') {
-        $result = DB_query ("SELECT STRAIGHT_JOIN s.*, UNIX_TIMESTAMP(s.date) as unixdate, "
+    if (!empty ($errormsg)) {
+        $display .= COM_startBlock($LANG24[25], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'));
+        $display .= $errormsg;
+        $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    }
+
+    if (!empty ($currenttopic)) {
+        $allowed = DB_getItem ($_TABLES['topics'], 'tid',
+                                "tid = '" . addslashes ($currenttopic) . "'" .
+                                COM_getTopicSql ('AND'));
+
+        if ($allowed != $currenttopic) {
+            $currenttopic = '';
+        }
+    }
+
+    if (!empty ($sid) && ($mode == 'edit')) {
+        $result = DB_query ("SELECT STRAIGHT_JOIN s.*, UNIX_TIMESTAMP(s.date) AS unixdate, "
          . "u.username, u.fullname, u.photo, t.topic, t.imageurl, UNIX_TIMESTAMP(s.expire) AS expiredate "
-         . "FROM {$_TABLES['stories']} as s, {$_TABLES['users']} as u, {$_TABLES['topics']} as t "
+         . "FROM {$_TABLES['stories']} AS s, {$_TABLES['users']} AS u, {$_TABLES['topics']} AS t "
          . "WHERE (s.uid = u.uid) AND (s.tid = t.tid) AND (sid = '$sid')");
         $A = DB_fetchArray($result);
         $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
         $access = min ($access, SEC_hasTopicAccess ($A['tid']));
         if ($access == 2) {
-            $display .= COM_startBlock($LANG24[40], '',
+            $display .= COM_startBlock($LANG_ACCESS['accessdenied'], '',
                                 COM_getBlockTemplate ('_msg_block', 'header'));
             $display .= $LANG24[41];
             $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-            $display .= STORY_renderArticle ($A, 'n');
+            $display .= STORY_renderArticle ($A, 'p');
             COM_accessLog("User {$_USER['username']} tried to illegally edit story $sid.");
             return $display;
         } else if ($access == 0) {
-            $display .= COM_startBlock($LANG24[40], '',
+            $display .= COM_startBlock($LANG_ACCESS['accessdenied'], '',
                                 COM_getBlockTemplate ('_msg_block', 'header'));
             $display .= $LANG24[42];
             $display .= COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
@@ -148,31 +261,46 @@
             $A['introtext'] = COM_undoClickableLinks ($A['introtext']);
             $A['bodytext'] = COM_undoClickableLinks ($A['bodytext']);
         }
-    } elseif (!empty($sid) && $mode == 'editsubmission') {
-        $result = DB_query ("SELECT STRAIGHT_JOIN s.*, UNIX_TIMESTAMP(s.date) as unixdate, "
+    } elseif (!empty ($sid) && ($mode == 'editsubmission')) {
+        $result = DB_query ("SELECT STRAIGHT_JOIN s.*, UNIX_TIMESTAMP(s.date) AS unixdate, "
          . "u.username, u.fullname, u.photo, t.topic, t.imageurl, t.group_id, "
          . "t.perm_owner, t.perm_group, t.perm_members, t.perm_anon "
-         . "FROM {$_TABLES['storysubmission']} as s, {$_TABLES['users']} as u, {$_TABLES['topics']} as t "
+         . "FROM {$_TABLES['storysubmission']} AS s, {$_TABLES['users']} AS u, {$_TABLES['topics']} AS t "
          . "WHERE (s.uid = u.uid) AND (s.tid = t.tid) AND (sid = '$sid')");
         if (DB_numRows ($result) > 0) {
             $A = DB_fetchArray($result);
-            $A['show_topic_icon'] = 1;
+            if (isset ($_CONF['show_topic_icon'])) {
+                $A['show_topic_icon'] = $_CONF['show_topic_icon'];
+            } else {
+                $A['show_topic_icon'] = 1;
+            }
             $A['commentcode'] = $_CONF['comment_code'];
+            $A['trackbackcode'] = $_CONF['trackback_code'];
             $A['featured'] = 0;
+            $A['expire'] = '0000-00-00 00:00:00';
+            $A['expiredate'] = 0;
             if (DB_getItem ($_TABLES['topics'], 'archive_flag',
                     "tid = '{$A['tid']}'") == 1) {
                 $A['frontpage'] = 0;
             } else {
                 $A['frontpage'] = 1;
             }
+            $A['comments'] = 0;
+            $A['trackbacks'] = 0;
+            $A['numemails'] = 0;
             $A['statuscode'] = 0;
             $A['owner_id'] = $A['uid'];
             $access = 3;
-            $A['title'] = htmlspecialchars ($A['title']);
             $A['old_sid'] = $A['sid'];
+            $A['title'] = htmlspecialchars ($A['title']);
+            if (!isset ($A['bodytext'])) {
+                $A['bodytext'] = '';
+            }
             if ($A['postmode'] == 'plaintext') {
                 $A['introtext'] = COM_undoClickableLinks ($A['introtext']);
-                $A['bodytext'] = COM_undoClickableLinks ($A['bodytext']);
+                if (!empty ($A['bodytext'])) {
+                    $A['bodytext'] = COM_undoClickableLinks ($A['bodytext']);
+                }
             }
         } else {
             // that submission doesn't seem to be there any more (may have been
@@ -182,12 +310,32 @@
     } elseif ($mode == 'edit') {
         $A['sid'] = COM_makesid();
         $A['old_sid'] = '';
-        $A['show_topic_icon'] = 1;
+        if (isset ($_CONF['show_topic_icon'])) {
+            $A['show_topic_icon'] = $_CONF['show_topic_icon'];
+        } else {
+            $A['show_topic_icon'] = 1;
+        }
         $A['uid'] = $_USER['uid'];
         $A['unixdate'] = time();
         $A['expiredate'] = time();
         $A['commentcode'] = $_CONF['comment_code'];
-        $A['postmode'] = $_CONF['postmode'];
+        $A['trackbackcode'] = $_CONF['trackback_code'];
+        $A['title'] = '';
+        $A['introtext'] = '';
+        $A['bodytext'] = '';
+        $A['frontpage'] = 1;
+        $A['hits'] = 0;
+        $A['comments'] = 0;
+        $A['trackbacks'] = 0;
+        $A['numemails'] = 0;
+
+        /* @TODO -o"Blaine" Add a user-preference option to set if user wants to`use advanced-editor */
+        if (isset ($_CONF['advanced_editor']) && ($_CONF['advanced_editor'] == 1)) {
+            $A['postmode'] = 'html';
+        } else {
+            $A['postmode'] = $_CONF['postmode'];
+        }
+
         $A['statuscode'] = 0;
         $A['featured'] = 0;
         $A['owner_id'] = $_USER['uid'];
@@ -196,10 +344,7 @@
         } else {
             $A['group_id'] = SEC_getFeatureGroup ('story.edit');
         }
-        $A['perm_owner'] = 3;
-        $A['perm_group'] = 2;
-        $A['perm_members'] = 2;
-        $A['perm_anon'] = 2;
+        SEC_setDefaultPermissions ($A, $_CONF['default_permissions_story']);
         $access = 3;
     } else {
         $A = $_POST;
@@ -210,16 +355,19 @@
         if (empty ($A['ampm'])) {
             $A['ampm'] = $A['publish_ampm'];
         }
-        if ($A['draft_flag'] == 'on') {
+        if (isset ($A['draft_flag']) && ($A['draft_flag'] == 'on')) {
             $A['draft_flag'] = 1;
         } else {
             $A['draft_flag'] = 0;
         }
-        if ($A['show_topic_icon'] == 'on') {
+        if (isset ($A['show_topic_icon']) && ($A['show_topic_icon'] == 'on')) {
             $A['show_topic_icon'] = 1;
         } else {
             $A['show_topic_icon'] = 0;
         }
+        if (!isset ($A['statuscode'])) {
+            $A['statuscode'] = 0;
+        }
 
         // Convert array values to numeric permission values
         list($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']) = SEC_getPermissionValues($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
@@ -233,14 +381,50 @@
             $A['title'] = htmlspecialchars(COM_checkWords($A['title']));
         }
         $A['title'] = strip_tags($A['title']);
+        $access = 3;
     }
 
     // Load HTML templates
     $story_templates = new Template($_CONF['path_layout'] . 'admin/story');
-    if (isset ($_CONF['advanced_editor']) && ($_CONF['advanced_editor'] == 1) && file_exists ($_CONF['path_layout'] . 'admin/story/storyeditor_advanced.thtml')) {
+    if ( $A['postmode'] == 'html' AND isset ($_CONF['advanced_editor'])
+        && ($_CONF['advanced_editor'] == 1 ) && file_exists ($_CONF['path_layout'] . 'admin/story/storyeditor_advanced.thtml')) {
+        $advanced_editormode = true;
         $story_templates->set_file(array('editor'=>'storyeditor_advanced.thtml'));
+        $story_templates->set_var ('change_editormode', 'onChange="change_editmode(this);"');
+
+        include ($_CONF['path_system'] . 'classes/navbar.class.php');
+
+        $navbar = new navbar;
+        $navbar->add_menuitem($LANG24[79],'showhideEditorDiv("preview");return false;',true);
+        $navbar->add_menuitem($LANG24[80],'showhideEditorDiv("editor");return false;',true);
+        $navbar->add_menuitem($LANG24[81],'showhideEditorDiv("publish");return false;',true);
+        $navbar->add_menuitem($LANG24[82],'showhideEditorDiv("images");return false;',true);
+        $navbar->add_menuitem($LANG24[83],'showhideEditorDiv("archive");return false;',true);
+        $navbar->add_menuitem($LANG24[84],'showhideEditorDiv("perms");return false;',true);
+        $navbar->add_menuitem($LANG24[85],'showhideEditorDiv("all");return false',true);
+
+        $story_templates->set_var ('navbar', $navbar->generate() );
+        $story_templates->set_var ('show_preview', 'none');
+        $story_templates->set_var ('lang_expandhelp', $LANG24[67]);
+        $story_templates->set_var ('lang_reducehelp', $LANG24[68]);
+        $story_templates->set_var ('lang_publishdate', $LANG24[69]);
+        $story_templates->set_var ('lang_toolbar', $LANG24[70]);
+        $story_templates->set_var ('toolbar1', $LANG24[71]);
+        $story_templates->set_var ('toolbar2', $LANG24[72]);
+        $story_templates->set_var ('toolbar3', $LANG24[73]);
+        $story_templates->set_var ('toolbar4', $LANG24[74]);
+        $story_templates->set_var ('toolbar5', $LANG24[75]);
+ 
+        if ($A['postmode'] == 'html') {
+            $story_templates->set_var ('show_texteditor', 'none');
+            $story_templates->set_var ('show_htmleditor', '');
+        } else {
+            $story_templates->set_var ('show_texteditor', '');
+            $story_templates->set_var ('show_htmleditor', 'none');
+        }
     } else {
         $story_templates->set_file(array('editor'=>'storyeditor.thtml'));
+        $advanced_editormode = false;
     }
     $story_templates->set_var('site_url', $_CONF['site_url']);
     $story_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
@@ -261,37 +445,53 @@
     }
 
     if (!empty($A['title'])) {
-        $display .= COM_startBlock ($LANG24[26], '',
-                            COM_getBlockTemplate ('_admin_block', 'header'));
+
         $A['day'] = $A['unixdate'];
         if (empty ($A['hits'])) {
             $A['hits'] = 0;
         }
 
+        $tmpsid = addslashes ($A['sid']);
+        if (DB_count ($_TABLES['article_images'], 'ai_sid', $tmpsid) > 0) {
+            $has_images = true;
+        } else {
+            $has_images = false;
+        }
+
         if ($A['postmode'] == 'plaintext') {
             $B = $A;
 
             // if the plain-text story has images embedded, we'll have to do
             // some awkward back-and-forth conversion ...
-            $has_images = false;
-            $tmpsid = addslashes ($A['sid']);
-            if (DB_count ($_TABLES['article_images'], 'ai_sid', $tmpsid) > 0) {
-                $has_images = true;
-                list ($B['introtext'], $B['bodytext']) = replace_images ($A['sid'], $B['introtext'], $B['bodytext']);
+            if ($has_images) {
+                list ($B['introtext'], $B['bodytext']) = STORY_replace_images ($A['sid'], $B['introtext'], $B['bodytext']);
             }
 
             $B['introtext'] = COM_makeClickableLinks ($B['introtext']);
-            $B['bodytext'] = COM_makeClickableLinks ($B['bodytext']);
+            if (!empty ($B['bodytext'])) {
+                $B['bodytext'] = COM_makeClickableLinks ($B['bodytext']);
+            }
+
+            if ($has_images) {
+                list ($errors, $B['introtext'], $B['bodytext']) = STORY_insert_images ($A['sid'], $B['introtext'], $B['bodytext']);
+            }
+            $previewContent = STORY_renderArticle ($B, 'p');
 
+        } else {
             if ($has_images) {
-                list ($errors, $B['introtext'], $B['bodytext']) = insert_images ($A['sid'], $B['introtext'], $B['bodytext']);
+                list ($errors, $A['introtext'], $A['bodytext']) = STORY_insert_images ($A['sid'], $A['introtext'], $A['bodytext']);
             }
+            $previewContent = STORY_renderArticle ($A, 'p');
+        }
 
-            $display .= STORY_renderArticle ($B, 'n');
+        if ($advanced_editormode) {
+            $story_templates->set_var('preview_content', $previewContent);
         } else {
-            $display .= STORY_renderArticle ($A, 'n');
+            $display = COM_startBlock ($LANG24[26], '',
+                            COM_getBlockTemplate ('_admin_block', 'header'));
+            $display .= $previewContent;
+            $display .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
         }
-        $display .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
     }
 
     $display .= COM_startBlock ($LANG24[5], '',
@@ -299,9 +499,9 @@
 
     if ($access == 3) {
         $story_templates->set_var ('delete_option',
-            '<input type="submit" value="' . $LANG24[11] . '" name="mode">');
+            '<input type="submit" value="' . $LANG24[11] . '" name="mode" onClick="return delconfirm()">');
     }
-    if ($A['type'] == 'editsubmission' || $mode == 'editsubmission') {
+    if ($mode == 'editsubmission') {
         $story_templates->set_var ('submission_option',
                 '<input type="hidden" name="type" value="submission">');
     }
@@ -368,7 +568,7 @@
     }
     $month_options = COM_getMonthFormOptions($publish_month);
     $story_templates->set_var('publish_month_options', $month_options);
-    
+
     $day_options = COM_getDayFormOptions($publish_day);
     $story_templates->set_var('publish_day_options', $day_options);
 
@@ -376,16 +576,16 @@
     $story_templates->set_var('publish_year_options', $year_options);
 
     $hour_options = COM_getHourFormOptions($publish_hour);
-    $story_templates->set_var('publish_hour_options', $hour_options);   
+    $story_templates->set_var('publish_hour_options', $hour_options);
 
     $minute_options = COM_getMinuteOptions($publish_minute);
     $story_templates->set_var('publish_minute_options', $minute_options);
 
     $story_templates->set_var('publish_date_explanation', $LANG24[46]);
 
-    $story_templates->set_var('story_unixstamp', $A['unixdate']); 
+    $story_templates->set_var('story_unixstamp', $A['unixdate']);
     /* Auto Story Archive or Delete Feature */
-    if ($A['expiredate'] == 0 or date('Y', $A['expiredate']) < 2000) {
+    if (empty ($A['expiredate']) or date('Y', $A['expiredate']) < 2000) {
         $A['expiredate'] = time();
     }
     $expire_month = date('m', $A['expiredate']);
@@ -416,37 +616,43 @@
     $year_options = COM_getYearFormOptions($expire_year);
     $story_templates->set_var('expire_year_options', $year_options);
     $hour_options = COM_getHourFormOptions($expire_hour);
-    $story_templates->set_var('expire_hour_options', $hour_options);   
+    $story_templates->set_var('expire_hour_options', $hour_options);
     $minute_options = COM_getMinuteOptions($expire_minute);
     $story_templates->set_var('expire_minute_options', $minute_options);
     $story_templates->set_var('expire_date_explanation', $LANG24[46]);
-    $story_templates->set_var('story_unixstamp', $A['expiredate']); 
+    $story_templates->set_var('story_unixstamp', $A['expiredate']);
     if ($A['statuscode'] == STORY_ARCHIVE_ON_EXPIRE) {
         $story_templates->set_var('is_checked2', 'checked="checked"');
         $story_templates->set_var('is_checked3', 'checked="checked"');
+        $story_templates->set_var('showarchivedisabled', 'false');
     } elseif ($A['statuscode'] == STORY_DELETE_ON_EXPIRE) {
         $story_templates->set_var('is_checked2', 'checked="checked"');
         $story_templates->set_var('is_checked4', 'checked="checked"');
+        $story_templates->set_var('showarchivedisabled', 'false');
     } else {
-        $story_templates->set_var('showarchivedisabled', true);
+        $story_templates->set_var('showarchivedisabled', 'true');
     }
     $story_templates->set_var('lang_archivetitle', $LANG24[58]);
     $story_templates->set_var('lang_option', $LANG24[59]);
-    $story_templates->set_var('lang_enabled', $LANG24[60]);
+    $story_templates->set_var('lang_enabled', $LANG_ADMIN['enabled']);
     $story_templates->set_var('lang_optionarchive', $LANG24[61]);
     $story_templates->set_var('lang_optiondelete', $LANG24[62]);
-    $story_templates->set_var('lang_title', $LANG24[13]);
+    $story_templates->set_var('lang_title', $LANG_ADMIN['title']);
     if ($A['postmode'] == 'plaintext') {
         $A['title'] = str_replace ('$', '&#36;', $A['title']);
     }
-    
+
     $A['title'] = str_replace('{','&#123;',$A['title']);
     $A['title'] = str_replace('}','&#125;',$A['title']);
     $A['title'] = str_replace('"','&quot;',$A['title']);
     $story_templates->set_var('story_title', stripslashes ($A['title']));
-    $story_templates->set_var('lang_topic', $LANG24[14]);
+    $story_templates->set_var('lang_topic', $LANG_ADMIN['topic']);
+    if (empty ($A['tid']) && !empty ($currenttopic)) {
+        $A['tid'] = $currenttopic;
+    }
     if (empty ($A['tid'])) {
-        $A['tid'] = DB_getItem ($_TABLES['topics'], 'tid', 'is_default = 1' . COM_getPermSQL ('AND'));
+        $A['tid'] = DB_getItem ($_TABLES['topics'], 'tid',
+                                'is_default = 1' . COM_getPermSQL ('AND'));
     }
     $story_templates->set_var ('topic_options', COM_topicList ('tid,topic', $A['tid']));
     $story_templates->set_var('lang_show_topic_icon', $LANG24[56]);
@@ -456,21 +662,34 @@
         $story_templates->set_var('show_topic_icon_checked', '');
     }
     $story_templates->set_var('lang_draft', $LANG24[34]);
-    if ($A['draft_flag'] == 1) {
+    if (isset ($A['draft_flag']) && ($A['draft_flag'] == 1)) {
         $story_templates->set_var('is_checked', 'checked="checked"');
     }
-    $story_templates->set_var('lang_mode', $LANG24[3]);
-    $story_templates->set_var('status_options', COM_optionList($_TABLES['statuscodes'],'code,name',$A['statuscode']));
-    $story_templates->set_var('comment_options', COM_optionList($_TABLES['commentcodes'],'code,name',$A['commentcode']));
-    $story_templates->set_var('featured_options', COM_optionList($_TABLES['featurecodes'],'code,name',$A['featured']));
-    $story_templates->set_var('frontpage_options', COM_optionList($_TABLES['frontpagecodes'],'code,name',$A['frontpage']));
+    $story_templates->set_var ('lang_mode', $LANG24[3]);
+    $story_templates->set_var ('status_options',
+            COM_optionList ($_TABLES['statuscodes'], 'code,name',
+                            $A['statuscode']));
+    $story_templates->set_var ('comment_options',
+            COM_optionList ($_TABLES['commentcodes'], 'code,name',
+                            $A['commentcode']));
+    $story_templates->set_var ('trackback_options',
+            COM_optionList ($_TABLES['trackbackcodes'], 'code,name',
+                            $A['trackbackcode']));
+    $story_templates->set_var ('featured_options',
+            COM_optionList ($_TABLES['featurecodes'], 'code,name',
+                            $A['featured']));
+    $story_templates->set_var ('frontpage_options',
+            COM_optionList ($_TABLES['frontpagecodes'], 'code,name',
+                            $A['frontpage']));
 
     if ($A['postmode'] == 'plaintext') {
         $A['introtext'] = COM_undoClickableLinks ($A['introtext']);
-        $A['bodytext']  = COM_undoClickableLinks ($A['bodytext']);
+        if (!empty ($A['bodytext'])) {
+            $A['bodytext']  = COM_undoClickableLinks ($A['bodytext']);
+        }
     }
 
-    list($newintro, $newbody) = replace_images ($A['sid'],
+    list($newintro, $newbody) = STORY_replace_images ($A['sid'],
         stripslashes ($A['introtext']), stripslashes ($A['bodytext']));
 
     $story_templates->set_var('lang_introtext', $LANG24[16]);
@@ -490,11 +709,15 @@
     if ($A['postmode'] == 'plaintext') {
         $newbody = str_replace('$','&#36;',$newbody);
     }
-    
+
     $newbody = str_replace('{','&#123;',$newbody);
     $newbody = str_replace('}','&#125;',$newbody);
     $story_templates->set_var('story_bodytext', $newbody);
     $story_templates->set_var('lang_postmode', $LANG24[4]);
+    $story_templates->set_var('lang_publishoptions',$LANG24[76]);
+    $story_templates->set_var('lang_nojavascript',$LANG24[77]);
+    $story_templates->set_var('no_javascript_return_link',sprintf($LANG24[78],$_CONF['site_admin_url'], $sid));
+
     $story_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'],'code,name',$A['postmode']));
     $story_templates->set_var('lang_allowed_html', COM_allowedHTML());
     $fileinputs = '';
@@ -507,10 +730,10 @@
             for ($z = 1; $z <= $icount; $z++) {
                 $I = DB_fetchArray($result_articles);
                 $saved_images .= $z . ') <a href="' . $_CONF['site_url'] . '/images/articles/' . $I['ai_filename'] . '">' . $I['ai_filename'] . '</a>';
-                $saved_images .= '&nbsp;&nbsp;&nbsp;' . $LANG24[52] . ': <input type="checkbox" name="delete[' .$I['ai_img_num'] . ']"><br>';
+                $saved_images .= '&nbsp;&nbsp;&nbsp;' . $LANG_ADMIN['delete'] . ': <input type="checkbox" name="delete[' .$I['ai_img_num'] . ']"><br>';
             }
         }
-        
+
         $newallowed = $_CONF['maximagesperarticle'] - $icount;
         for ($z = $icount + 1; $z <= $_CONF['maximagesperarticle']; $z++) {
             $fileinputs .= $z . ') <input type="file" name="file' . $z . '">';
@@ -518,7 +741,11 @@
                 $fileinputs .= '<br>';
             }
         }
-        $fileinputs .= '<br>' . $LANG24[51] . '<br>';
+        $fileinputs .= '<br>' . $LANG24[51];
+        if ($_CONF['allow_user_scaling'] == 1) {
+            $fileinputs .= $LANG24[27];
+        }
+        $fileinputs .= $LANG24[28] . '<br>';
     }
     $story_templates->set_var('saved_images', $saved_images);
     $story_templates->set_var('image_form_elements', $fileinputs);
@@ -526,15 +753,17 @@
     $story_templates->set_var('story_hits', $A['hits']);
     $story_templates->set_var('lang_comments', $LANG24[19]);
     $story_templates->set_var('story_comments', $A['comments']);
-    $story_templates->set_var('lang_emails', $LANG24[39]); 
+    $story_templates->set_var('lang_trackbacks', $LANG24[29]);
+    $story_templates->set_var('story_trackbacks', $A['trackbacks']);
+    $story_templates->set_var('lang_emails', $LANG24[39]);
     $story_templates->set_var('story_emails', $A['numemails']);
     $story_templates->set_var('story_id', $A['sid']);
     $story_templates->set_var('old_story_id', $A['old_sid']);
-    $story_templates->set_var('lang_sid', $LANG24[12]); 
-    $story_templates->set_var('lang_save', $LANG24[8]); 
-    $story_templates->set_var('lang_preview', $LANG24[9]); 
-    $story_templates->set_var('lang_cancel', $LANG24[10]); 
-    $story_templates->set_var('lang_delete', $LANG24[11]); 
+    $story_templates->set_var('lang_sid', $LANG24[12]);
+    $story_templates->set_var('lang_save', $LANG24[8]);
+    $story_templates->set_var('lang_preview', $LANG24[9]);
+    $story_templates->set_var('lang_cancel', $LANG24[10]);
+    $story_templates->set_var('lang_delete', $LANG24[11]);
     $story_templates->parse('output','editor');
     $display .= $story_templates->finish($story_templates->get_var('output'));
     $display .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
@@ -543,348 +772,6 @@
 }
 
 /**
-* List all stories in the system
-*
-* This lists all the stories in the database
-*
-* @param    int     $page   Page to show user
-* @return   string  HTML for story listing
-*
-*/
-function liststories($page = 1) 
-{
-    global $_CONF, $_TABLES, $_USER, $LANG09, $LANG24, $LANG_ACCESS,
-           $_POST, $_GET;
-
-    $display = '';
-
-    $display .= COM_startBlock ($LANG24[22], '',
-                        COM_getBlockTemplate ('_admin_block', 'header'));
-    $story_templates = new Template($_CONF['path_layout'] . 'admin/story');
-    $story_templates->set_file (array ('list' => 'liststories.thtml',
-                                       'row' => 'listitem.thtml'));
-
-    $story_templates->set_var('layout_url', $_CONF['layout_url']);
-    $story_templates->set_var('site_url', $_CONF['site_url']);
-    $story_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $story_templates->set_var('lang_newstory', $LANG24[43]);
-    $story_templates->set_var('lang_adminhome', $LANG24[44]);
-    $story_templates->set_var('lang_instructions', $LANG24[23]);
-    $story_templates->set_var('lang_title', $LANG24[13]);
-    $story_templates->set_var('lang_access', $LANG_ACCESS['access']);
-    $story_templates->set_var('lang_draft', $LANG24[34]);
-    $story_templates->set_var('lang_author', $LANG24[7]);
-    $story_templates->set_var('lang_date', $LANG24[15]);
-    $story_templates->set_var('lang_topic', $LANG24[14]);
-    $story_templates->set_var('lang_featured', $LANG24[32]); 
-
-    if (!empty ($_GET['tid'])) {
-        $current_topic = $_GET['tid'];
-    } elseif (!empty ($_POST['tid'])) {
-        $current_topic = $_POST['tid'];
-    } else {
-        $current_topic = $LANG09[9];
-    }
-    if (empty($page)) {
-        $page = 1;
-    }
-
-    if ($current_topic == $LANG09[9]) {
-        $excludetopics = '';
-        $seltopics = '';
-        $topicsql = "SELECT tid,topic FROM {$_TABLES['topics']}" . COM_getPermSQL ();
-        $tresult = DB_query( $topicsql );
-        $trows = DB_numRows( $tresult );     
-        if( $trows > 0 )
-        {
-            $excludetopics .= ' WHERE (';
-            for( $i = 1; $i <= $trows; $i++ )  {
-                $T = DB_fetchArray ($tresult);
-                if ($i > 1)  {
-                    $excludetopics .= ' OR ';
-                }
-                $excludetopics .= "tid = '{$T['tid']}'";
-                $seltopics .= '<option value="' .$T['tid']. '"';
-                if ($current_topic == "{$T['tid']}") {
-                    $seltopics .= ' selected="selected"';
-                }
-                $seltopics .= '>' . $T['topic'] . '</option>' . LB;
-            }
-            $excludetopics .= ') ';
-        } 
-    } else {
-        $excludetopics = " WHERE tid = '$current_topic' ";
-        $seltopics = COM_topicList ('tid,topic', $current_topic);
-    }
-
-    $alltopics = '<option value="' .$LANG09[9]. '"';
-    if ($current_topic == $LANG09[9]) {
-        $alltopics .= ' selected="selected"';
-    }
-    $alltopics .= '>' .$LANG09[9]. '</option>' . LB;
-    $story_templates->set_var ('topic_selection', '<select name="tid" style="width: 125px" onchange="this.form.submit()">' . $alltopics . $seltopics . '</select>');
-
-    $limit = (50 * $page) - 50;
-    $result = DB_query("SELECT *,UNIX_TIMESTAMP(date) AS unixdate FROM {$_TABLES['stories']} " . $excludetopics . COM_getPermSQL ('AND') . "ORDER BY date DESC LIMIT $limit,50");
-    $nrows = DB_numRows($result);
-    if ($nrows > 0) {
-        for ($i = 1; $i <= $nrows; $i++) {
-            $A = DB_fetchArray ($result);
-            $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                                     $A['perm_owner'], $A['perm_group'],
-                                     $A['perm_members'], $A['perm_anon']);
-            if ($access == 3) {
-                if (SEC_hasTopicAccess ($A['tid']) == 3) {
-                    $access = $LANG_ACCESS['edit'];
-                } else {
-                    $access = $LANG_ACCESS['readonly'];
-                }
-            } else {
-                $access = $LANG_ACCESS['readonly'];
-            }
-            $scount = (50 * $page) - 50 + $i;
-            $curtime = COM_getUserDateTimeFormat ($A['unixdate']);
-            $story_templates->set_var ('story_id', $A['sid']);
-            $story_templates->set_var ('article_url',
-                    COM_buildUrl ($_CONF['site_url'] . '/article.php?story='
-                                  . $A['sid']));
-            $story_templates->set_var ('row_num', $scount);
-            $A['title'] = str_replace('$', '&#36;', $A['title']);
-            $story_templates->set_var('story_title', stripslashes($A['title']));
-            $story_templates->set_var('story_access', $access);
-            if ($A['draft_flag'] == 1) {
-                $story_templates->set_var('story_draft', $LANG24[35]);
-            } else {
-                $story_templates->set_var('story_draft', $LANG24[36]);
-            }
-            $story_templates->set_var('story_author', DB_getItem($_TABLES['users'],'username',"uid = {$A['uid']}"));
-            $story_templates->set_var('story_date', strftime($_CONF['shortdate'], $curtime[1]));
-            $story_templates->set_var('story_topic', $A['tid']);
-            if ($A['featured'] == 1) {
-                $story_templates->set_var('story_feature', $LANG24[35]);
-            } else {
-                $story_templates->set_var('story_feature', $LANG24[36]);
-            }
-            $story_templates->parse('storylist_item','row',true);
-        }
-
-        // Print prev/next page links if needed
-        $nresult = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['stories']}" . $excludetopics);
-        $N = DB_fetchArray ($nresult);
-        $numstories = $N['count'];
-        if ($numstories > 50) {
-            $prevpage = $page - 1;
-            $nextpage = $page + 1;
-            $pagestart = ($page - 1) * 50;
-            if ($pagestart >= 50) {
-                $story_templates->set_var ('previouspage_link', '<a href="'
-                    . $_CONF['site_admin_url']
-                    . '/story.php?mode=list&amp;page=' . $prevpage . '">'
-                    . $LANG24[1] . '</a> ');
-            } else {
-                $story_templates->set_var('previouspage_link','');
-            }
-            if ($pagestart <= ($numstories - 50)) {
-                $story_templates->set_var ('nextpage_link', '<a href="'
-                    . $_CONF['site_admin_url']
-                    . '/story.php?mode=list&amp;page=' . $nextpage . '">'
-                    . $LANG24[2] . '</a> ');
-            } else {
-                $story_templates->set_var('nextpage_link','');
-            }
-            $baseurl = $_CONF['site_admin_url'] . '/story.php?mode=list&amp;tid=' .$current_topic;
-            $numpages = ceil ($numstories / 50);
-            $story_templates->set_var ('google_paging',
-                    COM_printPageNavigation ($baseurl, $page, $numpages));
-        } else {
-            $story_templates->set_var ('previouspage_link' ,'');
-            $story_templates->set_var ('nextpage_link' ,'');
-            $story_templates->set_var ('google_paging' ,'');
-        }
-
-    } else {
-        // There are no news items
-        $story_templates->set_var ('storylist_item', '<tr><td colspan="8">'
-                . $LANG24[6] . '</td></tr>');
-        $story_templates->set_var ('previouspage_link', '');
-        $story_templates->set_var ('nextpage_link', '');
-        $story_templates->set_var ('google_paging' ,'');
-    }
-    $display .= $story_templates->parse('output','list');
-    $display .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $display;
-}
-
-/**
-* This replaces all article image HTML in intro and body with
-* GL special syntax
-*
-* @param    string      $sid    ID for story to parse
-* @param    string      $intro  Intro text
-* @param    string      $body   Body text
-* @return   string      processed text
-*
-*/
-function replace_images($sid, $intro, $body)
-{
-    global $_CONF, $_TABLES, $LANG24;
-
-    $stdImageLoc = true;
-    if (!strstr($_CONF['path_images'], $_CONF['path_html'])) {
-        $stdImageLoc = false;
-    }
-    $result = DB_query("SELECT ai_filename FROM {$_TABLES['article_images']} WHERE ai_sid = '$sid' ORDER BY ai_img_num");
-    $nrows = DB_numRows($result);
-    for ($i = 1; $i <= $nrows; $i++) {
-        $A = DB_fetchArray($result);
-
-        $imageX       = '[image' . $i . ']';
-        $imageX_left  = '[image' . $i . '_left]';
-        $imageX_right = '[image' . $i . '_right]';
-
-        $dimensions = GetImageSize($_CONF['path_images'] . 'articles/' . $A['ai_filename']);
-        if (!empty($dimensions[0]) AND !empty($dimensions[1])) {
-            $sizeattributes = 'width="' . $dimensions[0] . '" height="' . $dimensions[1] . '" ';
-        } else {
-            $sizeattributes = '';
-        }
-
-        $lLinkPrefix = '';      
-        $lLinkSuffix = '';
-        if ($_CONF['keep_unscaled_image'] == 1) {
-            $lFilename_large = substr_replace ($A['ai_filename'], '_original.',
-                    strrpos ($A['ai_filename'], '.'), 1);
-            $lFilename_large_complete = $_CONF['path_images'] . 'articles/'
-                                      . $lFilename_large;
-            if ($stdImageLoc) {
-                $imgpath = substr ($_CONF['path_images'],
-                                   strlen ($_CONF['path_html']));
-                $lFilename_large_URL = $_CONF['site_url'] . '/' . $imgpath
-                                     . 'articles/' . $lFilename_large;
-            } else {
-                $lFilename_large_URL = $_CONF['site_url']
-                    . '/getimage.php?mode=show&amp;image=' . $lFilename_large;
-            }
-            if (file_exists ($lFilename_large_complete)) {
-                $lLinkPrefix = '<a href="' . $lFilename_large_URL
-                             . '" title="' . $LANG24[57] . '">';
-                $lLinkSuffix = '</a>';
-            }
-        }
-
-        if ($stdImageLoc) {
-            $imgpath = substr ($_CONF['path_images'],
-                               strlen ($_CONF['path_html']));
-            $imgSrc = $_CONF['site_url'] . '/' . $imgpath . 'articles/'
-                    . $A['ai_filename'];
-        } else {
-            $imgSrc = $_CONF['site_url']
-                . '/getimage.php?mode=articles&amp;image=' . $A['ai_filename'];
-        }
-        $norm = $lLinkPrefix . '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">' . $lLinkSuffix;
-        $left = $lLinkPrefix . '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">' . $lLinkSuffix;
-        $right = $lLinkPrefix . '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">' . $lLinkSuffix;
-        $fulltext = $intro . ' ' . $body;
-        $count = substr_count($fulltext, $norm) + substr_count($fulltext, $left) + substr_count($fulltext, $right);
-        $intro = str_replace ($norm,  $imageX,       $intro);
-        $body  = str_replace ($norm,  $imageX,       $body);
-        $intro = str_replace ($left,  $imageX_left,  $intro);
-        $body  = str_replace ($left,  $imageX_left,  $body);
-        $intro = str_replace ($right, $imageX_right, $intro);
-        $body  = str_replace ($right, $imageX_right, $body);
-    }
-
-    return array($intro, $body);
-}
-
-/**
-* Replaces simple image syntax with actual HTML in the intro and body.
-* If errors occur it will return all errors in $error
-*
-* @param    string      $sid    ID for story to parse
-* @param    string      $intro  Intro text
-* @param    string      $body   Body text
-* @return   string      Processed text
-*
-*/
-function insert_images($sid, $intro, $body)
-{
-    global $_CONF, $_TABLES, $LANG24;
-
-    $result = DB_query("SELECT ai_filename FROM {$_TABLES['article_images']} WHERE ai_sid = '$sid' ORDER BY ai_img_num");
-    $nrows = DB_numRows($result);
-    $errors = array();
-    $stdImageLoc = true;
-    if (!strstr($_CONF['path_images'], $_CONF['path_html'])) {
-        $stdImageLoc = false;
-    }
-    for ($i = 1; $i <= $nrows; $i++) {
-        $A = DB_fetchArray($result);
-        $dimensions = GetImageSize($_CONF['path_images'] . 'articles/' . $A['ai_filename']);
-        if (!empty($dimensions[0]) AND !empty($dimensions[1])) {
-            $sizeattributes = 'width="' . $dimensions[0] . '" height="' . $dimensions[1] . '" ';
-        } else {
-            $sizeattributes = '';
-        }
-
-        $lLinkPrefix = '';
-        $lLinkSuffix = '';
-        if ($_CONF['keep_unscaled_image'] == 1) {
-            $lFilename_large = substr_replace ($A['ai_filename'], '_original.',
-                    strrpos ($A['ai_filename'], '.'), 1);
-            $lFilename_large_complete = $_CONF['path_images'] . 'articles/'
-                                      . $lFilename_large;
-            if ($stdImageLoc) {
-                $imgpath = substr ($_CONF['path_images'],
-                                   strlen ($_CONF['path_html']));
-                $lFilename_large_URL = $_CONF['site_url'] . '/' . $imgpath
-                                     . 'articles/' . $lFilename_large;
-            } else {
-                $lFilename_large_URL = $_CONF['site_url']
-                    . '/getimage.php?mode=show&amp;image=' . $lFilename_large;
-            }
-            if (file_exists ($lFilename_large_complete)) {
-                $lLinkPrefix = '<a href="' . $lFilename_large_URL
-                             . '" title="' . $LANG24[57] . '">';   
-                $lLinkSuffix = '</a>';
-            }
-        }
-
-        $norm  = '[image' . $i . ']';
-        $left  = '[image' . $i . '_left]';
-        $right = '[image' . $i . '_right]';
-
-        $fulltext = $intro . ' ' . $body;
-        $icount = substr_count($fulltext, $norm) + substr_count($fulltext, $left) + substr_count($fulltext, $right);
-        if ($icount == 0) {
-            // There is an image that wasn't used, create an error
-            $errors[] = $LANG24[48] . " #$i, {$A['ai_filename']}, " . $LANG24[53];
-        } else {
-            // Only parse if we haven't encountered any error to this point
-            if (count($errors) == 0) {
-                if ($stdImageLoc) {
-                    $imgpath = substr ($_CONF['path_images'],
-                                       strlen ($_CONF['path_html']));
-                    $imgSrc = $_CONF['site_url'] . '/' . $imgpath . 'articles/'
-                            . $A['ai_filename'];
-                } else {
-                    $imgSrc = $_CONF['site_url'] . '/getimage.php?mode=articles&amp;image=' . $A['ai_filename'];
-                }
-                $intro = str_replace($norm, $lLinkPrefix . '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $intro);
-                $body = str_replace($norm, $lLinkPrefix . '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $body);
-                $intro = str_replace($left, $lLinkPrefix . '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $intro);
-                $body = str_replace($left, $lLinkPrefix . '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $body);
-                $intro = str_replace($right, $lLinkPrefix . '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $intro);
-                $body = str_replace($right, $lLinkPrefix . '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $body);
-            }
-        }
-    }
-
-    return array($errors, $intro, $body);
-}
-
-/** 
 * Saves story to database
 *
 * @param    string      $type           story submission or (new) story
@@ -899,6 +786,7 @@
 * @param    int         $comments       Number of user comments made to this story
 * @param    int         $featured       Flag on whether or not this is a featured article
 * @param    string      $commentcode    Indicates if comments are allowed to be made to article
+* @param    string      $trackbackcode  Indicates if trackbacks are allowed to be made to article
 * @param    string      $statuscode     Status of the story
 * @param    string      $postmode       Is this HTML or plain text?
 * @param    string      $frontpage      Flag indicates if story will appear on front page and topic or just topic
@@ -913,7 +801,7 @@
 * @param    int         $delete         String array of attached images to delete from article
 *
 */
-function submitstory($type='',$sid,$uid,$tid,$title,$introtext,$bodytext,$hits,$unixdate,$expiredate,$comments,$featured,$commentcode,$statuscode,$postmode,$frontpage,$draft_flag,$numemails,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$delete,$show_topic_icon,$old_sid) 
+function submitstory($type='',$sid,$uid,$tid,$title,$introtext,$bodytext,$hits,$unixdate,$expiredate,$comments,$featured,$commentcode,$trackbackcode,$statuscode,$postmode,$frontpage,$draft_flag,$numemails,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$delete,$show_topic_icon,$old_sid)
 {
     global $_CONF, $_TABLES, $_USER, $LANG24, $MESSAGE;
 
@@ -971,15 +859,6 @@
             $draft_flag = 1;
         } else {
             $draft_flag = 0;
-
-            // OK, if this story was already in the database and the user
-            // changed this from a draft to an actual story then update the
-            // date to be now
-            if (DB_count($_TABLES['stories'],'sid',$sid) == 1) {
-                if (DB_getItem($_TABLES['stories'],'draft_flag',"sid = '$sid'") == 1) {
-                    $unixdate = time();
-                }
-            }
         }
 
         if ($featured == '1') {
@@ -991,23 +870,26 @@
                 $values[2] = 0;
                 DB_change($_TABLES['stories'],'featured','0',$id,$values);
             }
-
-            // if set to featured force to show on front page
-            $frontpage = 1;
         }
 
         if (empty($numemails)) {
             $numemails = 0;
         }
-        
+
         if ($show_topic_icon == 'on') {
             $show_topic_icon = 1;
         } else {
             $show_topic_icon = 0;
         }
-        
+
         // Clean up the text
         if ($postmode == 'html') {
+            // Advanced Editor: Are you editing this story and switching mode from text to html
+            if ( (DB_count($_TABLES['stories'],'sid',$sid) == 1) AND 
+                 (DB_getItem($_TABLES['stories'], 'postmode',"sid='$sid'") == 'plaintext') AND
+                 ($_CONF['advanced_editor'] == 1) ) {
+                     $introtext = str_replace("\n",'<br>',$introtext);
+            }
             $introtext = COM_checkHTML (COM_checkWords ($introtext));
             $bodytext = COM_checkHTML (COM_checkWords ($bodytext));
         } else {
@@ -1112,7 +994,7 @@
                 $retval .= COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
                 $retval .= COM_siteFooter();
                 echo $retval;
-                exit; 
+                exit;
             }
 
             reset($filenames);
@@ -1136,7 +1018,7 @@
                 // story id has changed - update article_images table first
                 DB_query ("UPDATE {$_TABLES['article_images']} SET ai_sid = '{$sid}' WHERE ai_sid = '{$old_sid}'");
             }
-            list($errors, $introtext, $bodytext) = insert_images($sid, $introtext, $bodytext);
+            list($errors, $introtext, $bodytext) = STORY_insert_images($sid, $introtext, $bodytext);
             if (count($errors) > 0) {
                 $display = COM_siteHeader ('menu');
                 $display .= COM_startBlock ($LANG24[54], '',
@@ -1157,7 +1039,7 @@
         $introtext = addslashes ($introtext);
         $bodytext = addslashes ($bodytext);
 
-        DB_save ($_TABLES['stories'], 'sid,uid,tid,title,introtext,bodytext,hits,date,comments,related,featured,commentcode,statuscode,expire,postmode,frontpage,draft_flag,numemails,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,show_topic_icon', "'$sid',$uid,'$tid','$title','$introtext','$bodytext',$hits,FROM_UNIXTIME($unixdate),'$comments','$related',$featured,'$commentcode','$statuscode','$expire','$postmode','$frontpage',$draft_flag,$numemails,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$show_topic_icon");
+        DB_save ($_TABLES['stories'], 'sid,uid,tid,title,introtext,bodytext,hits,date,comments,related,featured,commentcode,trackbackcode,statuscode,expire,postmode,frontpage,draft_flag,numemails,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,show_topic_icon,in_transit', "'$sid',$uid,'$tid','$title','$introtext','$bodytext',$hits,FROM_UNIXTIME($unixdate),'$comments','$related',$featured,'$commentcode','$trackbackcode','$statuscode',FROM_UNIXTIME($expiredate),'$postmode','$frontpage',$draft_flag,$numemails,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$show_topic_icon,1");
 
         // If this is done as part of the moderation then delete the submission
         if (empty ($old_sid)) {
@@ -1173,8 +1055,23 @@
             DB_query ("UPDATE {$_TABLES['comments']} SET sid = '$sid' WHERE type = 'article' AND sid = '$old_sid'");
         }
 
+        // see if any plugins want to act on that story
+        $plugin_error = PLG_itemSaved ($sid, 'article');
+
+        // always clear 'in_transit' flag
+        DB_change ($_TABLES['stories'], 'in_transit', 0, 'sid', $sid);
+
+        // in case of an error go back to the story editor
+        if ($plugin_error !== false) {
+            $display .= COM_siteHeader ('menu');
+            $display .= storyeditor ($sid, 'retry', $plugin_error);
+            $display .= COM_siteFooter ();
+            echo $display;
+            exit;
+        }
+
         // update feed(s) and Older Stories block
-        COM_rdfUpToDateCheck ();
+        COM_rdfUpToDateCheck ('geeklog', $tid, $sid);
         COM_olderStuff ();
 
         if ($type == 'submission') {
@@ -1193,40 +1090,18 @@
     }
 }
 
-/**
-* Delete a story from the database.
-*
-* @param    string   $sid   id of story to delete
-* @return   string          HTML for a redirect to admin/story.php
-*
-*/
-function deletestory ($sid)
-{
-    global $_CONF, $_TABLES, $_USER;
-
-    $result = DB_query ("SELECT tid,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['stories']} WHERE sid = '$sid'");
-    $A = DB_fetchArray ($result);
-    $access = SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'],
-            $A['perm_group'], $A['perm_members'], $A['perm_anon']);
-    $access = min ($access, SEC_hasTopicAccess ($A['tid']));
-    if ($access < 3) {
-        COM_accessLog ("User {$_USER['username']} tried to illegally delete story $sid.");
-        return COM_refresh ($_CONF['site_admin_url'] . '/story.php');
-    }
-
-    STORY_deleteImages ($sid);
-    DB_query("DELETE FROM {$_TABLES['comments']} WHERE sid = '$sid' AND type = 'article'");
-    DB_delete ($_TABLES['stories'], 'sid', $sid);
-
-    // update RSS feed and Older Stories block
-    COM_rdfUpToDateCheck ();
-    COM_olderStuff ();
-
-    return COM_refresh ($_CONF['site_admin_url'] . '/story.php?msg=10');
+// MAIN
+$mode = '';
+if (isset($_REQUEST['mode'])){
+    $mode = COM_applyFilter ($_REQUEST['mode']);
 }
 
-// MAIN
-$mode = COM_applyFilter ($_REQUEST['mode']);
+if (isset($_REQUEST['editopt'])){
+    $editopt = COM_applyFilter ($_REQUEST['editopt']);
+    if ($editopt == 'default') {
+        $_CONF['advanced_editor'] = false;
+    }
+}
 
 $display = '';
 if (($mode == $LANG24[11]) && !empty ($LANG24[11])) { // delete
@@ -1245,20 +1120,27 @@
                        $_CONF['site_admin_url'] . '/moderation.php');
         }
     } else {
-        echo deletestory ($sid);
+        echo STORY_deleteStory ($sid);
     }
 } else if (($mode == $LANG24[9]) && !empty ($LANG24[9])) { // preview
-    $display .= COM_siteHeader('menu');
+    $display .= COM_siteHeader('menu', $LANG24[5]);
     $display .= storyeditor (COM_applyFilter ($_POST['sid']), $mode);
     $display .= COM_siteFooter();
     echo $display;
 } else if ($mode == 'edit') {
-    $display .= COM_siteHeader('menu');
-    $display .= storyeditor (COM_applyFilter ($_GET['sid']), $mode);
+    $display .= COM_siteHeader('menu', $LANG24[5]);
+    $sid = '';
+    if (isset ($_GET['sid'])) {
+        $sid = COM_applyFilter ($_GET['sid']);
+    }
+    if (isset ($_GET['topic'])) {
+        $topic = COM_applyFilter ($_GET['topic']);
+    }
+    $display .= storyeditor ($sid, $mode, '', $topic);
     $display .= COM_siteFooter();
     echo $display;
 } else if ($mode == 'editsubmission') {
-    $display .= COM_siteHeader('menu');
+    $display .= COM_siteHeader('menu', $LANG24[5]);
     $display .= storyeditor (COM_applyFilter ($_GET['id']), $mode);
     $display .= COM_siteFooter();
     echo $display;
@@ -1317,10 +1199,11 @@
                  COM_applyFilter ($_POST['hits'], true), $unixdate, $expiredate,
                  COM_applyFilter ($_POST['comments'], true),
                  COM_applyFilter ($_POST['featured'], true),
-                 COM_applyFilter ($_POST['commentcode']),
-                 COM_applyFilter ($_POST['statuscode']),
+                 COM_applyFilter ($_POST['commentcode'], true),
+                 COM_applyFilter ($_POST['trackbackcode'], true),
+                 COM_applyFilter ($_POST['statuscode'], true),
                  COM_applyFilter ($_POST['postmode']),
-                 COM_applyFilter ($_POST['frontpage']),
+                 COM_applyFilter ($_POST['frontpage'], true),
                  COM_applyFilter ($_POST['draft_flag']),
                  COM_applyFilter ($_POST['numemails'], true),
                  COM_applyFilter ($_POST['owner_id'], true),
@@ -1330,14 +1213,21 @@
                  COM_applyFilter ($_POST['show_topic_icon']),
                  COM_applyFilter ($_POST['old_sid']));
 } else { // 'cancel' or no mode at all
-    $type = COM_applyFilter ($_POST['type']);
+    $type = '';
+    if (isset($_POST['type'])){
+        $type = COM_applyFilter ($_POST['type']);
+    }
     if (($mode == $LANG24[10]) && !empty ($LANG24[10]) &&
             ($type == 'submission')) {
         $display = COM_refresh ($_CONF['site_admin_url'] . '/moderation.php');
     } else {
-        $display .= COM_siteHeader('menu');
-        $display .= COM_showMessage (COM_applyFilter ($_GET['msg'], true));
-        $display .= liststories (COM_applyFilter ($_GET['page'], true));
+        $display .= COM_siteHeader('menu', $LANG24[22]);
+        $msg = "";
+        if (isset($_GET['msg'])) {
+            $msg = COM_applyFilter($_GET['msg'], true);
+        }
+        $display .= COM_showMessage ($msg);
+        $display .= liststories();
         $display .= COM_siteFooter();
     }
     echo $display;
diff -ruN 1.3.11sr1/admin/syndication.php 1.4.0sr5-1/admin/syndication.php
--- 1.3.11sr1/admin/syndication.php	2004-12-31 10:02:26.000000000 -0600
+++ 1.4.0sr5-1/admin/syndication.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,15 +2,16 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | syndication.php                                                           |
 // |                                                                           |
 // | Geeklog content syndication administration                                |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2003-2004 by the following authors:                         |
+// | Copyright (C) 2003-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Michael Jervis    - mike AT fuckingbrit DOT com                  |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -29,10 +30,11 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: syndication.php,v 1.6 2004/01/13 19:15:52 dhaun Exp $
+// $Id: syndication.php,v 1.34 2006/01/28 12:26:34 dhaun Exp $
 
 
 require_once ('../lib-common.php');
+require_once ('auth.inc.php');
 
 if (!SEC_inGroup ('Root')) {
     $display .= COM_siteHeader ()
@@ -47,100 +49,42 @@
 }
 
 /**
-* Display a list of all available feeds.
+* Toggle status of a feed from enabled to disabled and back
 *
-* @return   string   HTML for the block that contains the list of feeds
+* @param    int     $fid    ID of the feed
+* @return   void
 *
 */
-function listfeeds ()
+function changeFeedStatus ($fid)
 {
-    global $_CONF, $_TABLES, $LANG33;
-
-    $retval = '';
-
-    $feed_template = new Template ($_CONF['path_layout'] . 'admin/syndication');
-    $feed_template->set_file (array ('list' => 'listfeeds.thtml',
-                                     'row' => 'listitem.thtml'));
-
-    $retval .= COM_startBlock ($LANG33[10], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-    $feed_template->set_var ('site_url', $_CONF['site_url']);
-    $feed_template->set_var ('site_admin_url', $_CONF['site_admin_url']);
-    $feed_template->set_var ('layout_url', $_CONF['layout_url']);
+    global $_TABLES;
 
-    $feed_template->set_var ('lang_newfeed', $LANG33[11]);
-    $feed_template->set_var ('lang_adminhome', $LANG33[12]);
-    $feed_template->set_var ('lang_instructions', $LANG33[13]);
-
-    $feed_template->set_var ('lang_title', $LANG33[14]);
-    $feed_template->set_var ('lang_type', $LANG33[15]);
-    $feed_template->set_var ('lang_filename', $LANG33[16]);
-    $feed_template->set_var ('lang_format', $LANG33[17]);
-    $feed_template->set_var ('lang_updated', $LANG33[18]);
-    $feed_template->set_var ('lang_enabled', $LANG33[19]);
-
-    $result = DB_query ("SELECT *,UNIX_TIMESTAMP(updated) as date FROM {$_TABLES['syndication']}");
-    $num = DB_numRows ($result);
-
-    if ($num == 0) {
-        $feed_template->set_var ('feed_title', $LANG33[22]);
-        $feed_template->parse ('feedlist_items', 'row', true);
-    } else {
-        $feedpath = $_CONF['rdf_file'];
-        $pos = strrpos ($feedpath, '/');
-        $feed = substr ($feedpath, 0, $pos + 1);
-        $url = substr_replace ($feed, $_CONF['site_url'], 0,
-                               strlen ($_CONF['path_html']) - 1);
-
-        for ($i = 0; $i < $num; $i++) {
-            $A = DB_fetchArray ($result);
-
-            $link = '<a href="' . $url . $A['filename'] . '">' . $A['filename']
-                  . '</a>';
-
-            $feed_template->set_var ('feed_id', $A['fid']);
-            $feed_template->set_var ('feed_title', $A['title']);
-            $feed_template->set_var ('feed_type', ucwords ($A['type']));
-            $feed_template->set_var ('feed_format', ucwords ($A['format']));
-            $feed_template->set_var ('feed_filename', $A['filename']);
-            $feed_template->set_var ('feed_filename_and_link', $link);
-            $feed_template->set_var ('feed_updated',
-                                     strftime ($_CONF['daytime'], $A['date']));
-            if ($A['is_enabled'] == 1) {
-                $enabled = $LANG33[20];
-            } else {
-                $enabled = $LANG33[21];
-            }
-            $feed_template->set_var ('feed_enabled', $enabled);
-            $feed_template->parse ('feedlist_items', 'row', true);
+    $feed_id = addslashes (COM_applyFilter ($fid, true));
+    if (!empty ($fid)) {
+        $is_enabled = 1;
+        if (DB_getItem ($_TABLES['syndication'], 'is_enabled', "fid = '$fid'")) {
+            $is_enabled = 0;
         }
+        DB_query ("UPDATE {$_TABLES['syndication']} SET is_enabled = '$is_enabled' WHERE fid = '$fid'");
     }
-
-    $retval .= $feed_template->finish ($feed_template->parse ('output','list'));
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-
-    return $retval;
 }
 
 /**
-* Create a list of all available feed formats. Assumes there is a class named
-* xxx.feed.class.php for every format "xxx" (in system/classes).
+* Get a list of feed formats from the feed parser factory.
 *
-* @return   array   array of names of feed formats (and classes)
+* @return   array   array of names of feed formats (and versions)
 *
 */
 function find_feedFormats ()
 {
     global $_CONF;
 
-    $formats = array ();
-    $fd = opendir ($_CONF['path_system'] . '/classes');
-    while (($file = @readdir ($fd)) !== false) {
-        if (preg_match ('/(.*)\.feed\.class\.php$/i', $file, $match)) {
-            $formats[] = $match[1];
-        }
-    }
+    // Import the feed handling classes:
+    require_once ($_CONF['path_system']
+                  . '/classes/syndication/parserfactory.class.php');
 
+    $factory = new FeedParserFactory ();
+    $formats = $factory->getFeedTypes ();
     sort ($formats);
 
     return $formats;
@@ -176,12 +120,53 @@
         $options[] = array ('id' => $A['tid'], 'name' => '-- ' . $A['topic']);
     }
 
-    $options[] = array ('id' => '::links', 'name' => $LANG33[41]);
     $options[] = array ('id' => '::events', 'name' => $LANG33[42]);
 
     return $options;
 }
 
+function listfeeds()
+{
+    global $_CONF, $_TABLES, $LANG_ADMIN, $LANG33, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true),
+                    array('text' => $LANG_ADMIN['type'], 'field' => 'type', 'sort' => true),
+                    array('text' => $LANG33[17], 'field' => 'format', 'sort' => true),
+                    array('text' => $LANG33[16], 'field' => 'filename', 'sort' => true),
+                    array('text' => $LANG_ADMIN['topic'], 'field' => 'header_tid', 'sort' => true),
+                    array('text' => $LANG33[18], 'field' => 'updated', 'sort' => true),
+                    array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => true)
+    );
+
+    $defsort_arr = array('field' => 'title', 'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/syndication.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home'])
+    );
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG33[10], 'instructions' => $LANG33[13],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/syndication.' . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/syndication.php");
+
+    $query_arr = array('table' => 'syndication',
+                       'sql' => "SELECT *,UNIX_TIMESTAMP(updated) AS date FROM {$_TABLES['syndication']} WHERE 1",
+                       'query_fields' => array('title', 'filename'),
+                       'default_filter' => '');
+
+    $retval .= ADMIN_list ("syndication", "ADMIN_getListField_syndication", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
+    return $retval;
+}
+
 /**
 * Display the feed editor.
 *
@@ -203,12 +188,21 @@
         if (!empty ($type)) { // set defaults
             $A['fid'] = $fid;
             $A['type'] = $type;
-            $A['format'] = 'rss';
+            $A['topic'] = '::all';
+            $A['header_tid'] = 'none';
+            $A['format'] = 'RSS-2.0';
             $A['limits'] = $_CONF['rdf_limit'];
             $A['content_length'] = $_CONF['rdf_storytext'];
-            $A['language'] = $_CONF['rdf_language'];
+            $A['title'] = $_CONF['site_name'];
+            $A['description'] = $_CONF['site_slogan'];
+            $A['feedlogo'] = '';
+            $A['filename'] = '';
             $A['charset'] = $_CONF['default_charset'];
+            $A['language'] = $_CONF['rdf_language'];
             $A['is_enabled'] = 1;
+            $A['updated'] = '';
+            $A['update_info'] = '';
+            $A['date'] = time ();
         } else {
             return COM_refresh ($_CONF['site_admin_url'] . '/syndication.php');
         }
@@ -235,13 +229,25 @@
     $feed_template->set_var ('lang_content_length', $LANG33[27]);
     $feed_template->set_var ('lang_clen_explain', $LANG33[28]);
     $feed_template->set_var ('lang_description', $LANG33[29]);
+    $feed_template->set_var ('lang_feedlogo', $LANG33[49]);
+    $feed_template->set_var ('lang_feedlogo_explain', $LANG33[50]);
     $feed_template->set_var ('lang_filename', $LANG33[16]);
     $feed_template->set_var ('lang_updated', $LANG33[30]);
     $feed_template->set_var ('lang_type', $LANG33[15]);
     $feed_template->set_var ('lang_charset', $LANG33[31]);
     $feed_template->set_var ('lang_language', $LANG33[32]);
     $feed_template->set_var ('lang_topic', $LANG33[33]);
+    
+    if ($A['header_tid'] == 'all') {
+        $feed_template->set_var('all_selected', 'selected="selected"');
+    } elseif ($A['header_tid'] == 'none') {
+        $feed_template->set_var('none_selected', 'selected="selected"');
+    }
 
+    $feed_template->set_var('lang_header_all', $LANG33[43]);
+    $feed_template->set_var('lang_header_none', $LANG33[44]);
+    $feed_template->set_var('lang_header_topic', $LANG33[45]);
+    $feed_template->set_var('header_topic_options', COM_topicList('tid,topic',$A['header_tid']));
     $feed_template->set_var('lang_save', $LANG33[2]);
     $feed_template->set_var('lang_cancel', $LANG33[4]);
     if ($A['fid'] > 0) {
@@ -251,6 +257,7 @@
     $feed_template->set_var ('feed_id', $A['fid']);
     $feed_template->set_var ('feed_title', $A['title']);
     $feed_template->set_var ('feed_description', $A['description']);
+    $feed_template->set_var ('feed_logo', $A['feedlogo']);
     $feed_template->set_var ('feed_content_length', $A['content_length']);
     $feed_template->set_var ('feed_filename', $A['filename']);
     $feed_template->set_var ('feed_type', $A['type']);
@@ -264,11 +271,15 @@
     $formats = find_feedFormats ();
     $selection = '<select name="format">' . LB;
     foreach ($formats as $f) {
-        $selection .= '<option value="' . $f . '"';
-        if ($A['format'] == $f) {
+        // if one changes this format below ('name-version'), also change parsing
+        // in COM_siteHeader. It uses explode( "-" , $string )
+        $selection .= '<option value="' . $f['name'] . '-' . $f['version']
+                   . '"';
+        if ($A['format'] == $f['name'] . '-' . $f['version']) {
             $selection .= ' selected="selected"';
         }
-        $selection .= '>' . ucwords ($f) . '</option>' . LB;
+        $selection .= '>' . ucwords ($f['name'] . ' ' . $f['version'])
+                   . '</option>' . LB;
     }
     $selection .= '</select>' . LB;
     $feed_template->set_var ('feed_format', $selection);
@@ -364,7 +375,7 @@
         $feed_template->set_var ('lang_explain', $LANG33[37]);
         $feed_template->set_var ('lang_go', $LANG33[1]);
 
-        $retval .= COM_siteHeader ('menu');
+        $retval .= COM_siteHeader ('menu', $LANG33[11]);
         $retval .= COM_startBlock ($LANG33[36], '',
                 COM_getBlockTemplate ('_admin_block', 'header'));
         $retval .= $feed_template->finish ($feed_template->parse ('output',
@@ -435,7 +446,7 @@
             $A['language'] = $_CONF['locale'];
         }
     }
-    if ($A['content_length'] < 0) {
+    if (empty ($A['content_length']) || ($A['content_length'] < 0)) {
         $A['content_length'] = 0;
     }
 
@@ -443,8 +454,8 @@
         $A[$name] = addslashes ($value);
     }
 
-    DB_save ($_TABLES['syndication'], 'fid,type,topic,format,limits,content_length,title,description,filename,charset,language,is_enabled,updated,update_info',
-        "{$A['fid']},'{$A['type']}','{$A['topic']}','{$A['format']}','{$A['limits']}',{$A['content_length']},'{$A['title']}','{$A['description']}','{$A['filename']}','{$A['charset']}','{$A['language']}',{$A['is_enabled']},'0000-00-00 00:00:00',NULL");
+    DB_save ($_TABLES['syndication'], 'fid,type,topic,header_tid,format,limits,content_length,title,description,feedlogo,filename,charset,language,is_enabled,updated,update_info',
+        "{$A['fid']},'{$A['type']}','{$A['topic']}','{$A['header_tid']}','{$A['format']}','{$A['limits']}',{$A['content_length']},'{$A['title']}','{$A['description']}','{$A['feedlogo']}','{$A['filename']}','{$A['charset']}','{$A['language']}',{$A['is_enabled']},'0000-00-00 00:00:00',NULL");
 
     if ($A['fid'] == 0) {
         $A['fid'] = DB_insertId ();
@@ -479,43 +490,44 @@
 // MAIN
 $display = '';
 
-if (count ($HTTP_POST_VARS) == 0) {
-    $http_input_vars = $HTTP_GET_VARS;
-} else {
-    $http_input_vars = $HTTP_POST_VARS;
+if ($_CONF['backend'] && isset ($_POST['feedChange'])) {
+    changeFeedStatus ($_POST['feedChange']);
 }
-
-if ($http_input_vars['mode'] == 'edit') {
-    if ($http_input_vars['fid'] == 0) {
+$mode = '';
+if (isset($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
+}
+if ($mode == 'edit') {
+    if (empty ($_REQUEST['fid'])) {
         $display .= newfeed ();
     } else {
-        $display .= COM_siteHeader ('menu')
-                 . editfeed ($http_input_vars['fid'])
+        $display .= COM_siteHeader ('menu', $LANG33[24])
+                 . editfeed ($_REQUEST['fid'])
                  . COM_siteFooter ();
     }
 }
-else if (($http_input_vars['mode'] == $LANG33[1]) && !empty ($LANG33[1]))
+else if (($mode == $LANG33[1]) && !empty ($LANG33[1]))
 {
-    $display .= COM_siteHeader ('menu')
-             . editfeed (0, $http_input_vars['type'])
+    $display .= COM_siteHeader ('menu', $LANG33[24])
+             . editfeed (0, $_REQUEST['type'])
              . COM_siteFooter ();
 }
-else if (($http_input_vars['mode'] == $LANG33[2]) && !empty ($LANG33[2]))
+else if (($mode == $LANG33[2]) && !empty ($LANG33[2]))
 {
-    $display .= savefeed ($http_input_vars);
+    $display .= savefeed ($_POST);
 }
-else if (($http_input_vars['mode'] == $LANG33[3]) && !empty ($LANG33[3]))
+else if (($mode == $LANG33[3]) && !empty ($LANG33[3]))
 {
-    $display .= deletefeed ($http_input_vars['fid']);
+    $display .= deletefeed ($_REQUEST['fid']);
 }
 else
 {
-    $display .= COM_siteHeader ('menu');
-    if (isset ($http_input_vars['msg'])) {
-        $display .= COM_showMessage ($http_input_vars['msg']);
+    $display .= COM_siteHeader ('menu', $LANG33[10]);
+    if (isset ($_REQUEST['msg'])) {
+        $display .= COM_showMessage ($_REQUEST['msg']);
     }
-    $display .= listfeeds ()
-             . COM_siteFooter ();
+    $display .= listfeeds();
+    $display .= COM_siteFooter ();
 }
 
 echo $display;
diff -ruN 1.3.11sr1/admin/topic.php 1.4.0sr5-1/admin/topic.php
--- 1.3.11sr1/admin/topic.php	2004-12-31 10:02:27.000000000 -0600
+++ 1.4.0sr5-1/admin/topic.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | topic.php                                                                 |
 // |                                                                           |
 // | Geeklog topic administration page.                                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: topic.php,v 1.50 2004/12/16 19:47:35 dhaun Exp $
+// $Id: topic.php,v 1.59 2006/01/28 10:26:44 dhaun Exp $
 
 require_once ('../lib-common.php');
 require_once ('auth.inc.php');
@@ -53,7 +53,7 @@
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
-// echo COM_debug($HTTP_POST_VARS);
+// echo COM_debug($_POST);
 
 /**
 * Show topic administration form
@@ -66,6 +66,8 @@
 {
     global $_CONF, $_GROUPS, $_TABLES, $_USER, $LANG27, $LANG_ACCESS;
 
+    $retval = '';
+
     if (!empty($tid)) {
         $result = DB_query("SELECT * FROM {$_TABLES['topics']} WHERE tid ='$tid'");
         $A = DB_fetchArray($result);
@@ -92,10 +94,7 @@
         } else {
             $A['group_id'] = SEC_getFeatureGroup ('topic.edit');
         }
-        $A['perm_owner'] = 3;
-        $A['perm_group'] = 2;
-        $A['perm_members'] = 2;
-        $A['perm_anon'] = 2;
+        SEC_setDefaultPermissions ($A, $_CONF['default_permissions_topic']);
         $access = 3;
     }
     $topic_templates = new Template($_CONF['path_layout'] . 'admin/topic');
@@ -147,13 +146,20 @@
     // show sort order only if they specified sortnum as the sort method
     if ($_CONF['sortmethod'] <> 'alpha') {
         $topic_templates->set_var('lang_sortorder', $LANG27[10]);
+        if ($A['sortnum'] == 0) {
+            $A['sortnum'] = '';
+        }
         $topic_templates->set_var('sort_order', '<input type="text" size="3" maxlength="3" name="sortnum" value="' . $A['sortnum'] . '">');
     } else {
         $topic_templates->set_var('lang_sortorder', $LANG27[14]);
         $topic_templates->set_var('sort_order', $LANG27[15]);
     }
     $topic_templates->set_var('lang_storiesperpage', $LANG27[11]);
-    $topic_templates->set_var('story_limit', $A['limitnews']);
+    if ($A['limitnews'] == 0) {
+        $topic_templates->set_var('story_limit', '');
+    } else {
+        $topic_templates->set_var('story_limit', $A['limitnews']);
+    }
     $topic_templates->set_var('default_limit', $_CONF['limitnews']);
     $topic_templates->set_var('lang_defaultis', $LANG27[16]);
     $topic_templates->set_var('lang_topicname', $LANG27[3]);
@@ -162,6 +168,9 @@
         $A['imageurl'] = '/images/icons/'; 
     }
     $topic_templates->set_var('lang_topicimage', $LANG27[4]);
+    $topic_templates->set_var('lang_uploadimage', $LANG27[27]);
+    $topic_templates->set_var('icon_dimensions', $_CONF['max_topicicon_width'].' x '.$_CONF['max_topicicon_height']);
+    $topic_templates->set_var('lang_maxsize', $LANG27[28]);
     $topic_templates->set_var('max_url_length', 255);
     $topic_templates->set_var('image_url', $A['imageurl']); 
     $topic_templates->set_var('warning_msg', $LANG27[6]);
@@ -252,12 +261,20 @@
         } else {
             $is_default = 0;
         }
-        // Only 1 topic can be the archive topic - so check if there already is one
-        if (DB_count($_TABLES['topics'],'archive_flag', '1') > 0) {
+
+        if ($is_archive == 'on') {
+            $is_archive = 1;
+            DB_query ("UPDATE {$_TABLES['topics']} SET archive_flag = 0 WHERE archive_flag = 1");
+        } else {
             $is_archive = 0;
         }
 
         DB_save($_TABLES['topics'],'tid, topic, imageurl, sortnum, limitnews, is_default, archive_flag, owner_id, group_id, perm_owner, perm_group, perm_members, perm_anon',"'$tid', '$topic', '$imageurl','$sortnum','$limitnews',$is_default,'$is_archive',$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon");
+
+        // update feed(s) and Older Stories block
+        COM_rdfUpToDateCheck ('geeklog', $tid);
+        COM_olderStuff ();
+
         $retval = COM_refresh ($_CONF['site_admin_url'] . '/topic.php?msg=13');
     } else {
         $retval .= COM_siteHeader('menu');
@@ -279,7 +296,9 @@
 */
 function listtopics()
 {
-    global $_CONF, $_TABLES, $LANG27, $LANG_ACCESS, $_THEME_URL;
+    global $_CONF, $_TABLES, $LANG27, $LANG_ACCESS, $LANG_ADMIN;
+
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
 
     $retval = '';
 
@@ -291,7 +310,7 @@
     $topic_templates->set_var('site_url', $_CONF['site_url']);
     $topic_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
     $topic_templates->set_var('layout_url', $_CONF['layout_url']);
-    $topic_templates->set_var('lang_newtopic', $LANG27[17]);
+    $topic_templates->set_var('lang_newtopic', $LANG_ADMIN['create_new']);
     $topic_templates->set_var('lang_adminhome', $LANG27[18]);
     $topic_templates->set_var('lang_instructions', $LANG27[9]); 
     $topic_templates->set_var('begin_row', '<tr align="center" valign="bottom">');
@@ -320,15 +339,12 @@
             } else {
                 $topic_templates->set_var ('default_topic', '');
             }
-            if (!empty($A['imageurl'])) {
-                if (isset ($_THEME_URL)) {
-                    $imagebase = $_THEME_URL;
-                } else {
-                    $imagebase = $_CONF['site_url'];
-                }
-                $topic_templates->set_var('image_tag', '<img src="' . $imagebase . $A['imageurl'] . '" border="0" alt=""><br>');
+            if (empty ($A['imageurl'])) {
+                $topic_templates->set_var ('image_tag', '');
             } else {
-                $topic_templates->set_var('image_tag', '');
+                $imageurl = COM_getTopicImageUrl ($A['imageurl']);
+                $topic_templates->set_var ('image_tag', '<img src="' . $imageurl
+                                           . '" border="0" alt=""><br>');
             }
             if ($counter == 5) {
                 $counter = 1;
@@ -394,18 +410,113 @@
     return COM_refresh ($_CONF['site_admin_url'] . '/topic.php?msg=14');
 }
 
+/**
+* Upload new topic icon, replaces previous icon if one exists
+*
+* @param    string  tid     ID of topic to prepend to filename
+* @return   string          filename of new photo (empty = no new photo)
+*
+*/
+function handleIconUpload($tid)
+{
+    global $_CONF, $_TABLES, $LANG27;
+
+    require_once ($_CONF['path_system'] . 'classes/upload.class.php');
+
+    $upload = new upload();
+    if (!empty ($_CONF['image_lib'])) {
+        if ($_CONF['image_lib'] == 'imagemagick') {
+            // Using imagemagick
+            $upload->setMogrifyPath ($_CONF['path_to_mogrify']);
+        } elseif ($_CONF['image_lib'] == 'netpbm') {
+            // using netPBM
+            $upload->setNetPBM ($_CONF['path_to_netpbm']);
+        } elseif ($_CONF['image_lib'] == 'gdlib') {
+            // using the GD library
+            $upload->setGDLib ();
+        }
+        $upload->setAutomaticResize (true);
+        if (isset ($_CONF['debug_image_upload']) &&
+                $_CONF['debug_image_upload']) {
+            $upload->setLogFile ($_CONF['path'] . 'logs/error.log');
+            $upload->setDebug (true);
+        }
+    }
+    $upload->setAllowedMimeTypes (array ('image/gif'   => '.gif',
+                                         'image/jpeg'  => '.jpg,.jpeg',
+                                         'image/pjpeg' => '.jpg,.jpeg',
+                                         'image/x-png' => '.png',
+                                         'image/png'   => '.png'
+                                 )      );
+    if (!$upload->setPath ($_CONF['path_images'] . 'topics')) {
+        $display = COM_siteHeader ('menu');
+        $display .= COM_startBlock ($LANG27[29], '',
+                COM_getBlockTemplate ('_msg_block', 'header'));
+        $display .= $upload->printErrors (false);
+        $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block',
+                                                        'footer'));
+        $display .= COM_siteFooter ();
+        echo $display;
+        exit; // don't return
+    }
+
+    $filename = '';
+
+    // see if user wants to upload a (new) icon
+    $newicon = $_FILES['newicon'];
+    if (!empty ($newicon['name'])) {
+        $pos = strrpos ($newicon['name'], '.') + 1;
+        $fextension = substr ($newicon['name'], $pos);
+        $filename = 'topic_' . $tid . '.' . $fextension;
+    }
+
+    // do the upload
+    if (!empty ($filename)) {
+        $upload->setFileNames ($filename);
+        $upload->setPerms ('0644');
+        if (($_CONF['max_topicicon_width'] > 0) &&
+            ($_CONF['max_topicicon_height'] > 0)) {
+            $upload->setMaxDimensions ($_CONF['max_topicicon_width'],
+                                       $_CONF['max_topicicon_height']);
+        } else {
+            $upload->setMaxDimensions ($_CONF['max_image_width'],
+                                       $_CONF['max_image_height']);
+        }
+        if ($_CONF['max_topicicon_size'] > 0) {
+            $upload->setMaxFileSize($_CONF['max_topicicon_size']);
+        } else {
+            $upload->setMaxFileSize($_CONF['max_image_size']);
+        }
+        $upload->uploadFiles ();
+
+        if ($upload->areErrors ()) {
+            $display = COM_siteHeader ('menu');
+            $display .= COM_startBlock ($LANG27[29], '',
+                    COM_getBlockTemplate ('_msg_block', 'header'));
+            $display .= $upload->printErrors (false);
+            $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block',
+                                                            'footer'));
+            $display .= COM_siteFooter ();
+            echo $display;
+            exit; // don't return
+        }
+        $filename = '/images/topics/' . $filename;
+    }
+
+    return $filename;
+}
+
 
 // MAIN
 $display = '';
 
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-} else {
-    $mode = $HTTP_GET_VARS['mode'];
+$mode = '';
+if (isset ($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
 }
 
 if (($mode == $LANG27[21]) && !empty ($LANG27[21])) { // delete
-    $tid = COM_applyFilter ($HTTP_POST_VARS['tid']);
+    $tid = COM_applyFilter ($_POST['tid']);
     if (!isset ($tid) || empty ($tid)) {
         COM_errorLog ('Attempted to delete topic tid=' . $tid);
         $display .= COM_refresh ($_CONF['site_admin_url'] . '/topic.php');
@@ -413,27 +524,29 @@
         $display .= deleteTopic ($tid);
     }
 } else if (($mode == $LANG27[19]) && !empty ($LANG27[19])) { // save
-    $display .= savetopic (COM_applyFilter ($HTTP_POST_VARS['tid']),
-                           $HTTP_POST_VARS['topic'],
-                           COM_applyFilter ($HTTP_POST_VARS['imageurl']),
-                           COM_applyFilter ($HTTP_POST_VARS['sortnum']),
-                           COM_applyFilter ($HTTP_POST_VARS['limitnews']),
-                           COM_applyFilter ($HTTP_POST_VARS['owner_id'], true),
-                           COM_applyFilter ($HTTP_POST_VARS['group_id'], true),
-                           $HTTP_POST_VARS['perm_owner'],
-                           $HTTP_POST_VARS['perm_group'],
-                           $HTTP_POST_VARS['perm_members'],
-                           $HTTP_POST_VARS['perm_anon'],
-                           $HTTP_POST_VARS['is_default'],
-                           $HTTP_POST_VARS['is_archive']);
+    if (empty ($_FILES['newicon']['name'])){
+        $imageurl = COM_applyFilter ($_POST['imageurl']);
+    } else {
+        $imageurl = handleIconUpload($_POST['tid']);
+        $imageurl = COM_applyFilter ($imageurl);
+    }
+    $display .= savetopic (COM_applyFilter ($_POST['tid']), $_POST['topic'],
+                           $imageurl,
+                           COM_applyFilter ($_POST['sortnum'], true),
+                           COM_applyFilter ($_POST['limitnews'], true),
+                           COM_applyFilter ($_POST['owner_id'], true),
+                           COM_applyFilter ($_POST['group_id'], true),
+                           $_POST['perm_owner'], $_POST['perm_group'],
+                           $_POST['perm_members'], $_POST['perm_anon'],
+                           $_POST['is_default'], $_POST['is_archive']);
 } else if ($mode == 'edit') {
-    $display .= COM_siteHeader('menu');
-    $display .= edittopic (COM_applyFilter ($HTTP_GET_VARS['tid']));
+    $display .= COM_siteHeader('menu', $LANG27[1]);
+    $display .= edittopic (COM_applyFilter ($_GET['tid']));
     $display .= COM_siteFooter();
 } else { // 'cancel' or no mode at all
-    $display .= COM_siteHeader('menu');
-    if (isset ($HTTP_GET_VARS['msg'])) {
-        $display .= COM_showMessage (COM_applyFilter ($HTTP_GET_VARS['msg'], true));
+    $display .= COM_siteHeader('menu', $LANG27[8]);
+    if (isset ($_GET['msg'])) {
+        $display .= COM_showMessage (COM_applyFilter ($_GET['msg'], true));
     }
     $display .= listtopics();
     $display .= COM_siteFooter();
diff -ruN 1.3.11sr1/admin/trackback.php 1.4.0sr5-1/admin/trackback.php
--- 1.3.11sr1/admin/trackback.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/admin/trackback.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1163 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */                         
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | trackback.php                                                             |
+// |                                                                           |
+// | Admin functions handle Trackback, Pingback, and Ping                      |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2005 by the following authors:                              |
+// |                                                                           |
+// | Author: Dirk Haun - dirk AT haun-online DOT de                            |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: trackback.php,v 1.31 2005/12/22 14:39:46 ospiess Exp $
+
+require_once ('../lib-common.php');
+
+/**
+* Security check to ensure user even belongs on this page
+*/
+require_once ('auth.inc.php');
+
+if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled'] &&
+        !$_CONF['ping_enabled']) {
+    echo COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+    exit;
+}
+
+$display = '';
+
+if (!SEC_hasRights ('story.ping')) {
+    $display .= COM_siteHeader ('menu');
+    $display .= COM_startBlock ($MESSAGE[30], '',
+                                COM_getBlockTemplate ('_msg_block', 'header')); 
+    $display .= $MESSAGE[31];
+    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    $display .= COM_siteFooter ();
+    COM_accessLog("User {$_USER['username']} tried to illegally access the trackback administration screen.");
+    echo $display;
+    exit;
+}
+
+require_once ($_CONF['path_system'] . 'lib-trackback.php');
+require_once ($_CONF['path_system'] . 'lib-pingback.php');
+require_once ($_CONF['path_system'] . 'lib-story.php');
+
+/**
+* Display trackback comment submission form.
+*
+* @param    string  $target     URL to send the trackback comment to
+* @param    string  $url        URL of our entry
+* @param    string  $title      title of our entry
+* @param    string  $excerpt    excerpt of our entry
+* @param    string  $blog       name of our site
+* @return   string              HTML for the trackback comment editor
+*
+*/
+function trackback_editor ($target = '', $url = '', $title = '', $excerpt = '', $blog = '')
+{
+    global $_CONF, $LANG_TRB;
+
+    $retval = '';
+
+    // show preview if we have at least the URL
+    if (!empty ($url)) {
+        // filter them for the preview
+        $p_title = TRB_filterTitle ($title);
+        $p_excerpt = TRB_filterExcerpt ($excerpt);
+        $p_blog = TRB_filterBlogname ($blog);
+
+        // MT and other weblogs will shorten the excerpt like this
+        if (strlen ($p_excerpt) > 255) {
+            $p_excerpt = substr ($p_excerpt, 0, 252) . '...';
+        }
+
+        $retval .= COM_startBlock ($LANG_TRB['preview']);
+
+        $preview = new Template ($_CONF['path_layout'] . 'trackback');
+        $preview->set_file (array ('comment' => 'trackbackcomment.thtml'));
+        $comment = TRB_formatComment ($url, $p_title, $p_blog, $p_excerpt);
+        $preview->set_var ('formatted_comment', $comment);
+        $preview->parse ('output', 'comment');
+        $retval .= $preview->finish ($preview->get_var ('output'));
+
+        $retval .= COM_endBlock ();
+    }
+
+    if (empty ($url) && empty ($blog)) {
+        $blog = htmlspecialchars ($_CONF['site_name']);
+    }
+    $title = htmlspecialchars ($title);
+    $excerpt = htmlspecialchars ($excerpt, ENT_NOQUOTES);
+
+    $retval .= COM_startBlock ($LANG_TRB['editor_title'], $_CONF['site_url']
+                               . '/docs/trackback.html#trackback',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+
+    $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+    $template->set_file (array ('editor' => 'trackbackeditor.thtml'));
+
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+    $template->set_var ('php_self', $_CONF['site_admin_url']
+                                    . '/trackback.php');
+
+    if (empty ($url) || empty ($title)) {
+        $template->set_var ('lang_explain', $LANG_TRB['editor_intro_none']);
+    } else {
+        $template->set_var ('lang_explain',
+                            sprintf ($LANG_TRB['editor_intro'], $url, $title));
+    }
+    $template->set_var ('lang_trackback_url', $LANG_TRB['trackback_url']);
+    $template->set_var ('lang_entry_url', $LANG_TRB['entry_url']);
+    $template->set_var ('lang_title', $LANG_TRB['entry_title']);
+    $template->set_var ('lang_blog_name', $LANG_TRB['blog_name']);
+    $template->set_var ('lang_excerpt', $LANG_TRB['excerpt']);
+    $template->set_var ('lang_excerpt_truncated',
+                        $LANG_TRB['truncate_warning']);
+    $template->set_var ('lang_send', $LANG_TRB['button_send']);
+    $template->set_var ('lang_preview', $LANG_TRB['button_preview']);
+
+    $template->set_var ('max_url_length', 255);
+    $template->set_var ('target_url', $target);
+    $template->set_var ('url', $url);
+    $template->set_var ('title', $title);
+    $template->set_var ('blog_name', $blog);
+    $template->set_var ('excerpt', $excerpt);
+
+    $template->parse ('output', 'editor');
+    $retval .= $template->finish ($template->get_var ('output'));
+
+    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+
+    return $retval;
+}
+
+/**
+* Deletes a trackback comment. Checks if the current user has proper
+* permissions first.
+*
+* @param    int     $id     ID of the trackback comment to delete
+* @return   string          HTML redirect
+*
+*/
+function deleteTrackbackComment ($id)
+{
+    global $_TABLES;
+
+    $cid = addslashes ($id);
+    $result = DB_query ("SELECT sid,type FROM {$_TABLES['trackback']} WHERE cid = '$cid'");
+    list ($sid, $type) = DB_fetchArray ($result);
+    $url = getItemInfo ($type, $sid, 'url');
+
+    if (TRB_allowDelete ($sid, $type)) {
+        TRB_deleteTrackbackComment ($id);
+        if ($type == 'article') {
+            DB_query ("UPDATE {$_TABLES['stories']} SET trackbacks = trackbacks - 1 WHERE (sid = '$sid')");
+        }
+        $msg = 62;
+    } else {
+        $msg = 63;
+    }
+    if (strpos ($url, '?') === false) {
+        $url .= '?msg=' . $msg;
+    } else {
+        $url .= '&msg=' . $msg;
+    }
+
+    return COM_refresh ($url);
+}
+
+/**
+* Show an error or warning message
+*
+* @param    string  $title      block title
+* @param    string  $message    the actual message
+* @return   string              HTML for the message block
+*
+*/
+function showTrackbackMessage ($title, $message)
+{
+    $retval = '';
+
+    $retval .= COM_startBlock ($title, '',
+                               COM_getBlockTemplate ('_msg_block', 'header'))
+            . $message
+            . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+
+    return $retval;
+}
+
+/**
+* Send a Pingback to all the links in our entry
+*
+* @param    string  $type   type of entry we're advertising ('article' = story)
+* @param    string  $id     ID of that entry
+* @return   string          pingback results
+*
+*/
+function sendPingbacks ($type, $id)
+{
+    global $_CONF, $LANG_TRB;
+
+    $retval = '';
+
+    list ($url, $text) = getItemInfo ($type, $id, 'url,description');
+
+    // extract all links from the text
+    preg_match_all ("/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text,
+                    $matches);
+    $numlinks = count ($matches[0]);
+    if ($numlinks > 0) {
+        $links = array ();
+        for ($i = 0; $i < $numlinks; $i++) {
+            $links[$matches[2][$i]] = $matches[1][$i];
+        }
+        $links = array_unique ($links);
+
+        $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+        $template->set_file (array ('list' => 'pingbacklist.thtml',
+                                    'item' => 'pingbackitem.thtml'));
+        $template->set_var ('site_url', $_CONF['site_url']);
+        $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+        $template->set_var ('layout_url', $_CONF['layout_url']);
+        $template->set_var ('lang_resend', $LANG_TRB['resend']);
+        $template->set_var ('lang_results', $LANG_TRB['pingback_results']);
+
+        $counter = 1;
+        foreach ($links as $key => $URLtoPing) {
+            $result = PNB_sendPingback ($url, $URLtoPing);
+            $resend = '';
+            if (empty ($result)) {
+                $result = '<b>' . $LANG_TRB['pingback_success'] . '</b>';
+            } else if ($result != $LANG_TRB['no_pingback_url']) {
+                $result = '<span class="warningsmall">' . $result . '</span>';
+                // TBD: $resend = '...';
+            }
+            $parts = parse_url ($URLtoPing);
+
+            $template->set_var ('url_to_ping', $URLtoPing);
+            $template->set_var ('link_text', $key);
+            $template->set_var ('host_name', $parts['host']);
+            $template->set_var ('pingback_result', $result);
+            $template->set_var ('resend', $resend);
+            $template->set_var ('alternate_row',
+                    ($counter % 2) == 0 ? 'row-even' : 'row-odd');
+            $template->set_var ('cssid', ($i % 2) + 1);
+            $template->parse ('pingback_results', 'item', true);
+            $counter++;
+        }
+        $template->parse ('output', 'list');
+        $retval .= $template->finish ($template->get_var ('output'));
+
+    } else {
+        $retval = '<p>' . $LANG_TRB['no_links_pingback'] . '</p>';
+    }
+
+    return $retval;
+}
+
+function pingbackForm ($targetUrl = '')
+{
+    global $_CONF, $LANG_TRB;
+
+    $retval = '';
+    $retval .= COM_startBlock ($LANG_TRB['pingback_button'],
+                               $_CONF['site_url'] . '/docs/trackback.html',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+
+    $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+    $template->set_file (array ('list' => 'pingbackform.thtml'));
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+
+    $template->set_var ('lang_explain', $LANG_TRB['pingback_explain']);
+    $template->set_var ('lang_pingback_url', $LANG_TRB['pingback_url']);
+    $template->set_var ('lang_site_url', $LANG_TRB['site_url']);
+    $template->set_var ('lang_send', $LANG_TRB['button_send']);
+
+    $template->set_var ('target_url', $targetUrl);
+
+    $template->parse ('output', 'list');
+    $retval .= $template->finish ($template->get_var ('output'));
+
+    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+
+    return $retval;
+}
+
+/**
+* Ping weblog directory services
+*
+* @param    string  $type   type of entry we're advertising ('article' = story)
+* @param    string  $id     ID of that entry
+* @return   string          result of the pings
+*
+*/
+function sendPings ($type, $id)
+{
+    global $_CONF, $_TABLES, $LANG_TRB;
+
+    $retval = '';
+
+    list ($itemurl,$feedurl) = getItemInfo ($type, $id, 'url,feed');
+
+    $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+    $template->set_file (array ('list' => 'pinglist.thtml',
+                                'item' => 'pingitem.thtml'));
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+    $template->set_var ('lang_resend', $LANG_TRB['resend']);
+    $template->set_var ('lang_results', $LANG_TRB['ping_results']);
+
+    $result = DB_query ("SELECT ping_url,method,name,site_url FROM {$_TABLES['pingservice']} WHERE is_enabled = 1");
+    $services = DB_numRows ($result);
+    if ($services > 0) {
+        for ($i = 0; $i < $services; $i++) {
+            $A = DB_fetchArray ($result);
+            $resend = '';
+            if ($A['method'] == 'weblogUpdates.ping') {
+                $pinged = PNB_sendPing ($A['ping_url'], $_CONF['site_name'],
+                                        $_CONF['site_url'], $itemurl);
+            } else if ($A['method'] == 'weblogUpdates.extendedPing') {
+                $pinged = PNB_sendExtendedPing ($A['ping_url'],
+                            $_CONF['site_name'], $_CONF['site_url'], $itemurl,
+                            $feedurl);
+            } else {
+                $pinged = $LANG_TRB['unknown_method'] . ': ' . $A['method'];
+            }
+            if (empty ($pinged)) {
+                $pinged = '<b>' . $LANG_TRB['ping_success'] . '</b>';
+            } else {
+                $pinged = '<span class="warningsmall">' . $pinged . '</span>';
+            }
+
+            $template->set_var ('service_name', $A['name']);
+            $template->set_var ('service_url', $A['site_url']);
+            $template->set_var ('service_ping_url', $A['ping_url']);
+            $template->set_var ('ping_result', $pinged);
+            $template->set_var ('resend', $resend);
+            $template->set_var ('alternate_row',
+                                (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd');
+            $template->set_var ('cssid', ($i % 2) + 1);
+            $template->parse ('ping_results', 'item', true);
+        }
+    } else {
+        $template->set_var ('ping_results', '<tr><td colspan="2">' .
+                            $LANG_TRB['no_services'] . '</td></tr>');
+    }
+    $template->parse ('output', 'list');
+    $retval .= $template->finish ($template->get_var ('output'));
+
+    return $retval;
+}
+
+/**
+* Prepare a list of all links in a story/item so that we can ask the user
+* which one to send the trackback to.
+*
+* @param    string  $type   type of entry ('article' = story, etc.)
+* @param    string  $id     ID of that entry
+* @param    string  $text   text of that entry, to get the links from
+* @return   string          formatted list of links
+*
+*/
+function prepareAutodetect ($type, $id, $text)
+{
+    global $_CONF, $LANG_TRB;
+
+    $retval = '';
+
+    $baseurl = $_CONF['site_admin_url']
+             . '/trackback.php?mode=autodetect&id=' . $id;
+    if ($type != 'article') {
+        $baseurl .= '&type' . $type;
+    }
+
+    // extract all links from the text
+    preg_match_all ("/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text,
+                    $matches);
+    $numlinks = count ($matches[0]);
+    if ($numlinks == 1) {
+        // skip the link selection when there's only one link in the story
+        $url = urlencode ($matches[1][0]);
+        $link = $baseurl .= '&url=' . $url;
+
+        echo COM_refresh ($link);
+        exit;
+    } else if ($numlinks > 0) {
+        $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+        $template->set_file (array ('list' => 'autodetectlist.thtml',
+                                    'item' => 'autodetectitem.thtml'));
+        $template->set_var ('site_url', $_CONF['site_url']);
+        $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+        $template->set_var ('layout_url', $_CONF['layout_url']);
+
+        $url = $_CONF['site_admin_url'] . '/trackback.php?mode=new&id=' . $id;
+        if ($type != 'article') {
+            $url .= '&type=' . $type;
+        }
+        $template->set_var ('lang_trackback_explain',
+                            sprintf ($LANG_TRB['trackback_explain'], $url));
+
+        for ($i = 0; $i < $numlinks; $i++) {
+            $url = urlencode ($matches[1][$i]);
+            $link = $baseurl .= '&url=' . $url;
+
+            $template->set_var ('autodetect_link', $link);
+            $template->set_var ('link_text', $matches[2][$i]);
+            $template->set_var ('link_url', $matches[1][$i]);
+            $template->set_var ('alternate_row',
+                    (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd');
+            $template->set_var ('cssid', ($i % 2) + 1);
+            $template->parse ('autodetect_items', 'item', true);
+        }
+        $template->parse ('output', 'list');
+        $retval .= $template->finish ($template->get_var ('output'));
+    } else {
+        $retval .= $LANG_TRB['no_links_trackback'];
+    }
+
+    return $retval;
+}
+
+/**
+* Wrapper for STORY_getItemInfo / PLG_getItemInfo to keep things readable
+*
+* @param    string  $type   type of entry ('article' = story, else plugin)
+* @param    string  $id     ID of that entry
+* @param    string  $what   info requested
+* @return   mixed           requested info, as a string or array of strings
+*
+*/
+function getItemInfo ($type, $id, $what)
+{
+    if ($type == 'article') {
+        return STORY_getItemInfo ($id, $what);
+    } else {
+        return PLG_getItemInfo ($type, $id, $what);
+    }
+}
+
+/**
+* Display a list of all weblog directory services in the system
+*
+* @return   string          HTML for the list
+*
+*/
+function listServices ()
+{
+    global $LANG_ADMIN, $LANG_TRB, $_CONF, $_IMAGE_TYPE, $_TABLES;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    $header_arr = array(      # display 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG_TRB['service'], 'field' => 'name', 'sort' => true),
+                    array('text' => $LANG_TRB['ping_method'], 'field' => 'method', 'sort' => true),
+                    array('text' => $LANG_TRB['service_ping_url'], 'field' => 'ping_url', 'sort' => true),
+                    array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => false));
+
+    $defsort_arr = array('field' => 'name', 'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/trackback.php?mode=editservice',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home']));
+
+    $text_arr = array('has_menu' =>  true,
+                      'has_extras'   => true,
+                      'title' => $LANG_TRB['services_headline'],
+                      'instructions' =>  $LANG_TRB['service_explain'],
+                      'icon' => $_CONF['layout_url'] . '/images/icons/trackback.'
+                                . $_IMAGE_TYPE,
+                      'form_url' => $_CONF['site_admin_url'] . "/trackback.php",
+                      'help_url' => $_CONF['site_url'] . '/docs/trackback.html#ping');
+
+    $query_arr = array('table' => 'trackback',
+                       'sql' => "SELECT * FROM {$_TABLES['pingservice']} WHERE 1",
+                       'query_fields' => array('name', 'ping_url'),
+                       'default_filter' => "",
+                       'no_data' => $LANG_TRB['no_services']);
+
+    $retval .= ADMIN_list ("groups", "ADMIN_getListField_trackback", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
+
+
+    if ($_CONF['trackback_enabled']) {
+        $retval .= freshTrackback ();
+    }
+    if ($_CONF['pingback_enabled']) {
+        $retval .= freshPingback ();
+    }
+    return $retval;
+}
+
+/**
+* Display weblog directory service editor
+*
+* @param    int     $pid            ID of the service or 0 for new service
+* @param    string  $msg            an error message to display
+* @param    string  $new_name       name of the service
+* @param    string  $new_site_url   URL of the service's site
+* @param    string  $new_ping_url   URL to ping at the service
+* @param    string  $new_method     ping method to use
+* @param    int     $new_enabled    service is enabled (1) / disabled (0)
+* @return   string                  HTML for the editor
+*
+*/
+function editServiceForm ($pid, $msg = '', $new_name = '', $new_site_url = '', $new_ping_url = '', $new_method = '', $new_enabled = -1)
+{
+    global $_CONF, $_TABLES, $LANG_TRB, $LANG_ADMIN;
+
+    $retval = '';
+
+    if ($pid > 0) {
+        $result = DB_query ("SELECT * FROM {$_TABLES['pingservice']} WHERE pid = '$pid'");
+        $A = DB_fetchArray ($result);
+    } else {
+        $A['is_enabled'] = 1;
+        $A['method'] = 'weblogUpdates.ping';
+    }
+
+    if (!empty ($new_name)) {
+        $A['name'] = $new_name;
+    }
+    if (!empty ($new_site_url)) {
+        $A['site_url'] = $new_site_url;
+    }
+    if (!empty ($new_ping_url)) {
+        $A['ping_url'] = $new_ping_url;
+    }
+    if (!empty ($new_method)) {
+        $A['method'] = $new_method;
+    }
+    if ($new_enabled >= 0) {
+        $A['is_enabled'] = $new_enabled;
+    }
+
+    $retval .= COM_siteHeader ('menu', $LANG_TRB['edit_service']);
+
+    if (!empty ($msg)) {
+        $retval .= showTrackbackMessage ('Error', $msg);
+    }
+
+    $retval .= COM_startBlock ($LANG_TRB['edit_service'], $_CONF['site_url']
+                               . '/docs/trackback.html#ping',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+
+    $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+    $template->set_file (array ('editor' => 'serviceeditor.thtml'));
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+    $template->set_var ('max_url_length', 255);
+    $template->set_var ('method_ping', 'weblogUpdates.ping');
+    $template->set_var ('method_ping_extended', 'weblogUpdates.extendedPing');
+
+    $template->set_var ('lang_name', $LANG_TRB['service']);
+    $template->set_var ('lang_site_url', $LANG_TRB['service_website']);
+    $template->set_var ('lang_ping_url', $LANG_TRB['service_ping_url']);
+    $template->set_var ('lang_enabled', $LANG_ADMIN['enabled']);
+    $template->set_var ('lang_method', $LANG_TRB['ping_method']);
+    $template->set_var ('lang_method_standard', $LANG_TRB['ping_standard']);
+    $template->set_var ('lang_method_extended', $LANG_TRB['ping_extended']);
+    $template->set_var ('lang_save', $LANG_ADMIN['save']);
+    $template->set_var ('lang_cancel', $LANG_ADMIN['cancel']);
+
+    if ($pid > 0) {
+        $template->set_var ('delete_option', '<input type="submit" value="'
+                . $LANG_ADMIN['delete'] . '" name="servicemode[2]">');
+    } else {
+        $template->set_var ('delete_option', '');
+    }
+
+    $template->set_var ('service_id', $A['pid']);
+    $template->set_var ('service_name', $A['name']);
+    $template->set_var ('service_site_url', $A['site_url']);
+    $template->set_var ('service_ping_url', $A['ping_url']);
+    if ($A['is_enabled'] == 1) {
+        $template->set_var ('is_enabled', 'checked="checked"');
+    } else {
+        $template->set_var ('is_enabled', '');
+    }
+    if ($A['method'] == 'weblogUpdates.ping') {
+        $template->set_var ('standard_is_checked', 'checked="checked"');
+        $template->set_var ('extended_is_checked', '');
+    } else {
+        $template->set_var ('standard_is_checked', '');
+        $template->set_var ('extended_is_checked', 'checked="checked"');
+    }
+
+    $template->parse ('output', 'editor');
+    $retval .= $template->finish ($template->get_var ('output'));
+
+    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+    $retval .= COM_siteFooter ();
+
+    return $retval;
+}
+
+/**
+* Save information of a weblog directory service
+*
+* @param    int     $pid        ID of service or 0 for new entry
+* @param    string  $name       name of the service
+* @param    string  $site_url   Homepage URL of the service
+* @param    string  $ping_url   URL to ping at the service
+* @param    string  $method     method used for the ping
+* @param    string  $enabled    'on' when enabled
+* @return   string              HTML redirect or service editor
+*
+*/
+function saveService ($pid, $name, $site_url, $ping_url, $method, $enabled)
+{
+    global $_CONF, $_TABLES, $LANG_TRB;
+
+    $enabled = ($enabled == 'on' ? 1 : 0);
+    if ($method == 'extended') {
+        $method = 'weblogUpdates.extendedPing';
+    } else {
+        $method = 'weblogUpdates.ping';
+    }
+
+    $name     = strip_tags (COM_stripslashes ($name));
+    $site_url = strip_tags (COM_stripslashes ($site_url));
+    $ping_url = strip_tags (COM_stripslashes ($ping_url));
+
+    $errormsg = '';
+    if (empty ($name)) {
+        $errormsg = $LANG_TRB['error_site_name'];
+    } else {
+        // all URLs must start with http: or https:
+        $parts = explode (':', $site_url);
+        if (($parts[0] != 'http') && ($parts[0] != 'https')) {
+            $errormsg = $LANG_TRB['error_site_url'];
+        } else {
+            $parts = explode (':', $ping_url);
+            if (($parts[0] != 'http') && ($parts[0] != 'https')) {
+                $errormsg = $LANG_TRB['error_ping_url'];
+            }
+        }
+    }
+
+    if (!empty ($errormsg)) {
+        return editServiceForm ($pid, $errormsg, $name, $site_url, $ping_url,
+                                $method, $enabled);
+    }
+
+    $name     = addslashes ($name);
+    $site_url = addslashes ($site_url);
+    $ping_url = addslashes ($ping_url);
+
+    if ($pid > 0) {
+        DB_save ($_TABLES['pingservice'],
+                 'pid,name,site_url,ping_url,method,is_enabled',
+                 "'$pid','$name','$site_url','$ping_url','$method','$enabled'");
+    } else {
+        DB_save ($_TABLES['pingservice'],
+                 'name,site_url,ping_url,method,is_enabled',
+                 "'$name','$site_url','$ping_url','$method','$enabled'");
+    }
+
+    return COM_refresh ($_CONF['site_admin_url']
+                        . '/trackback.php?mode=listservice&msg=65');
+}
+
+/**
+* Toggle status of a ping service from enabled to disabled and back
+*
+* @param    int     $pid    ID of the service
+* @return   void
+*
+*/
+function changeServiceStatus ($pid)
+{
+    global $_TABLES;
+
+    $pid = addslashes (COM_applyFilter ($pid, true));
+    if (!empty ($pid)) {
+        $is_enabled = 1;
+        if (DB_getItem ($_TABLES['pingservice'], 'is_enabled', "pid = '$pid'")) {
+            $is_enabled = 0;
+        }
+        DB_query ("UPDATE {$_TABLES['pingservice']} SET is_enabled = '$is_enabled' WHERE pid = '$pid'");
+    }
+}
+
+/**
+* Display a note about how trackbacks are supposed to be used
+*
+*/
+function freshTrackback ()
+{
+    global $_CONF, $LANG_TRB;
+
+    $retval = '';
+
+    $freshurl = $_CONF['site_admin_url'] . '/trackback.php?mode=fresh';
+
+    $retval .= COM_startBlock ($LANG_TRB['trackback'],
+                               $_CONF['site_url'] . '/docs/trackback.html',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+    $retval .= sprintf ($LANG_TRB['trackback_note'], $freshurl);
+    $retval .= COM_endBlock ();
+
+    return $retval;
+}
+
+/**
+* Display a note about how pingbacks are supposed to be used
+*
+*/
+function freshPingback ()
+{
+    global $_CONF, $LANG_TRB;
+
+    $retval = '';
+
+    $freshurl = $_CONF['site_admin_url'] . '/trackback.php?mode=freepb';
+
+    $retval .= COM_startBlock ($LANG_TRB['pingback'],
+                               $_CONF['site_url'] . '/docs/trackback.html',
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+    $retval .= sprintf ($LANG_TRB['pingback_note'], $freshurl);
+    $retval .= COM_endBlock ();
+
+    return $retval;
+}
+
+
+// MAIN
+$display = '';
+$mode = '';
+if ($_CONF['ping_enabled'] && isset ($_POST['serviceChange'])) {
+    changeServiceStatus ($_POST['serviceChange']);
+}
+
+if (isset ($_POST['mode']) && is_array ($_POST['mode'])) {
+    $mode = $_POST['mode'];
+    if (isset ($mode[0])) {
+        $mode = 'send';
+    } else if (isset ($mode[1])) {
+        $mode = 'preview';
+    } else if (isset ($mode[2])) {
+        $mode = 'sendpingback';
+    } else {
+        $mode = '';
+    }
+} else if (isset ($_POST['servicemode']) && is_array ($_POST['servicemode'])) {
+    $mode = $_POST['servicemode'];
+    if (isset ($mode[0])) {
+        $mode = 'saveservice';
+    } else if (isset ($mode[2])) {
+        $mode = 'deleteservice';
+    } else { // $mode[1], Cancel
+        $mode = '';
+    }
+} else {
+    if (isset($_REQUEST['mode'])) {
+        $mode = COM_applyFilter ($_REQUEST['mode']);
+    }
+    
+}
+
+// sanity check for modes, depending on enabled features ...
+if (!$_CONF['ping_enabled']) {
+    if (($mode == 'deleteservice') || ($mode == 'saveservice') ||
+            ($mode == 'editservice')) {
+        $mode = '';
+    }
+}
+if (!$_CONF['trackback_enabled']) {
+    if (($mode == 'send') || ($mode == 'new') || ($mode == 'pretrackback') ||
+            ($mode == 'autodetect') || ($mode == 'preview')) {
+        $mode = '';
+    }
+}
+if (!$_CONF['pingback_enabled']) {
+    if ($mode == 'pingback') {
+        $mode = '';
+    }
+}
+if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled']) {
+    if ($mode == 'delete') {
+        $mode = '';
+    }
+}
+
+// default action depends on which features are enabled ...
+if (empty ($mode)) {
+    if ($_CONF['ping_enabled']) {
+        $mode = 'listservice';
+    } else if ($_CONF['trackback_enabled']) {
+        $mode = 'fresh';
+    } else if ($_CONF['pinback_enabled']) {
+        $mode = 'freepb';
+    }
+}
+
+if ($mode == 'delete') {
+    $cid = COM_applyFilter ($_REQUEST['cid'], true);
+    if ($cid > 0) {
+        $display = deleteTrackbackComment ($cid);
+    } else {
+        $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+    }
+} else if ($mode == 'send') {
+    $target = COM_applyFilter ($_POST['target']);
+    $url = COM_applyFilter ($_POST['url']);
+    $title = COM_stripslashes ($_POST['title']);
+    $excerpt = COM_stripslashes ($_POST['excerpt']);
+    $blog = COM_stripslashes ($_POST['blog_name']);
+
+    if (empty ($target)) {
+        $display .= COM_siteHeader ('menu');
+        $display .= showTrackbackMessage ($LANG_TRB['target_missing'],
+                                          $LANG_TRB['target_required']);
+        $display .= trackback_editor ($target, $url, $title, $excerpt, $blog);
+    } else if (empty ($url)) {
+        $display .= COM_siteHeader ('menu');
+        $display .= showTrackbackMessage ($LANG_TRB['url_missing'],
+                                          $LANG_TRB['url_required']);
+        $display .= trackback_editor ($target, $url, $title, $excerpt, $blog);
+    } else {
+        // prepare for send
+        $send_title = TRB_filterTitle ($title);
+        $send_excerpt = TRB_filterExcerpt ($excerpt);
+        $send_blog = TRB_filterBlogname ($blog);
+
+        $result = TRB_sendTrackbackPing ($target, $url, $send_title,
+                                         $send_excerpt, $send_blog);
+
+        $display .= COM_siteHeader ('menu');
+        if ($result === true) {
+            $display .= COM_showMessage (64);
+            $display .= trackback_editor ();
+        } else {
+            $message = '<p>' . $LANG_TRB['send_error_details'] . '<br>'
+                     . '<span class="warningsmall">'
+                     . htmlspecialchars ($result) . '</span></p>';
+            $display .= showTrackbackMessage ($LANG_TRB['send_error'], $message);
+
+            // display editor with the same contents again
+            $display .= trackback_editor ($target, $url, $title, $excerpt, $blog);
+        }
+    }
+    $display .= COM_siteFooter ();
+} else if ($mode == 'new') {
+    $type = COM_applyFilter ($_REQUEST['type']);
+    if (empty ($type)) {
+        $type = 'article';
+    }
+    $id = COM_applyFilter ($_REQUEST['id']);
+    if (!empty ($id)) {
+        list ($url, $title, $excerpt) = getItemInfo ($type, $id,
+                                                     'url,title,excerpt');
+        $excerpt = trim (strip_tags ($excerpt));
+        $blog = TRB_filterBlogname ($_CONF['site_name']);
+
+        $display .= COM_siteHeader ('menu')
+                 . trackback_editor ($target, $url, $title, $excerpt, $blog)
+                 . COM_siteFooter ();
+    } else {
+        $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+    }
+} else if ($mode == 'pingback') {
+    $type = COM_applyFilter ($_REQUEST['type']);
+    if (empty ($type)) {
+        $type = 'article';
+    }
+    $id = COM_applyFilter ($_REQUEST['id']);
+    if (!empty ($id)) {
+        $display .= COM_siteHeader ('menu', $LANG_TRB['pingback'])
+                  . COM_startBlock ($LANG_TRB['pingback_results'])
+                  . sendPingbacks ($type, $id)
+                  . COM_endBlock ()
+                  . COM_siteFooter ();
+    } else {
+        $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+    }
+} else if ($mode == 'sendall') {
+    $id = COM_applyFilter ($_REQUEST['id']);
+    if (empty ($id)) {
+        echo COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+        exit;
+    }
+    $type = COM_applyFilter ($_REQUEST['type']);
+    if (empty ($type)) {
+        $type = 'article';
+    }
+
+    $pingback_sent  = isset ($_REQUEST['pingback_sent']);
+    $ping_sent      = isset ($_REQUEST['ping_sent']);
+    $trackback_sent = isset ($_REQUEST['trackback_sent']);
+
+    $pingresult = '';
+    if (isset ($_POST['what']) && is_array ($_POST['what'])) {
+        $what = $_POST['what'];
+        if (isset ($what[0])) {         // Pingback
+            $pingresult = sendPingbacks ($type, $id);
+            $pingback_sent = true;
+        } else if (isset ($what[1])) {  // Ping
+            $pingresult = sendPings ($type, $id);
+            $ping_sent = true;
+        } else if (isset ($what[2])) {  // Trackback
+            $url = $_CONF['site_admin_url']
+                 . '/trackback.php?mode=pretrackback&id=' . $id;
+            if ($type != 'article') {
+                $url .= '&type=' . $type;
+            }
+            echo COM_refresh ($url);
+            exit;
+        }
+    }
+
+    $title = getItemInfo ($type, $id, 'title');
+
+    $display .= COM_siteHeader ('menu', $LANG_TRB['send_pings']);
+    $display .= COM_startBlock (sprintf ($LANG_TRB['send_pings_for'], $title));
+
+    $template = new Template ($_CONF['path_layout'] . 'admin/trackback');
+    $template->set_file (array ('form' => 'pingform.thtml'));
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('site_admin_url', $_CONF['site_admin_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+    $template->set_var ('php_self', $_CONF['site_admin_url']
+                                    . '/trackback.php');
+    $template->set_var ('lang_may_take_a_while', $LANG_TRB['may_take_a_while']);
+    $template->set_var ('lang_ping_explain', $LANG_TRB['ping_all_explain']);
+
+    $template->set_var ('ping_results', $pingresult);
+
+    if ($_CONF['pingback_enabled']) {
+        if (!$pingback_sent) {
+            $template->set_var ('lang_pingback_button',
+                                $LANG_TRB['pingback_button']);
+            $template->set_var ('lang_pingback_short',
+                                $LANG_TRB['pingback_short']);
+            $button = '<input type="submit" name="what[0]" value="'
+                    . $LANG_TRB['pingback_button'] . '">';
+            $template->set_var ('pingback_button', $button);
+        }
+    } else {
+        $template->set_var ('pingback_button', $LANG_TRB['pingback_disabled']);
+    }
+    if ($_CONF['ping_enabled']) {
+        if (!$ping_sent) {
+            $template->set_var ('lang_ping_button', $LANG_TRB['ping_button']);
+            $template->set_var ('lang_ping_short', $LANG_TRB['ping_short']);
+            $button = '<input type="submit" name="what[1]" value="'
+                    . $LANG_TRB['ping_button'] . '">';
+            $template->set_var ('ping_button', $button);
+        }
+    } else {
+        $template->set_var ('ping_button', $LANG_TRB['ping_disabled']);
+    }
+    if ($_CONF['trackback_enabled']) {
+        if (!$trackback_sent) {
+            $template->set_var ('lang_trackback_button',
+                                $LANG_TRB['trackback_button']);
+            $template->set_var ('lang_trackback_short',
+                                $LANG_TRB['trackback_short']);
+            $button = '<input type="submit" name="what[2]" value="'
+                    . $LANG_TRB['trackback_button'] . '">';
+            $template->set_var ('trackback_button', $button);
+        }
+    } else {
+        $template->set_var ('trackback_button', $LANG_TRB['trackback_disabled']);
+    }
+
+    $hidden = '';
+    if ($pingback_sent) {
+        $hidden .= '<input type="hidden" name="pingback_sent" value="1">';
+    }
+    if ($ping_sent) {
+        $hidden .= '<input type="hidden" name="ping_sent" value="1">';
+    }
+    if ($trackback_sent) {
+        $hidden .= '<input type="hidden" name="trackback_sent" value="1">';
+    }
+    $hidden .= '<input type="hidden" name="id" value="' . $id . '">';
+    $hidden .= '<input type="hidden" name="type" value="' . $type . '">';
+    $hidden .= '<input type="hidden" name="mode" value="sendall">';
+    $template->set_var ('hidden_input_fields', $hidden);
+
+    $template->parse ('output', 'form');
+    $display .= $template->finish ($template->get_var ('output'));
+
+    $display .= COM_endBlock ();
+    $display .= COM_siteFooter ();
+} else if ($mode == 'pretrackback') {
+    $id = COM_applyFilter ($_REQUEST['id']);
+    if (empty ($id)) {
+        echo COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+        exit;
+    }
+    $type = COM_applyFilter ($_REQUEST['type']);
+    if (empty ($type)) {
+        $type = 'article';
+    }
+
+    $fulltext = getItemInfo ($type, $id, 'description');
+
+    $display .= COM_siteHeader ('menu', $LANG_TRB['trackback'])
+              . COM_startBlock ($LANG_TRB['select_url'], $_CONF['site_url']
+                                . '/docs/trackback.html#trackback')
+              . prepareAutodetect ($type, $id, $fulltext)
+              . COM_endBlock ()
+              . COM_siteFooter ();
+} else if ($mode == 'autodetect') {
+    $id = COM_applyFilter ($_REQUEST['id']);
+    $url = $_REQUEST['url'];
+    if (empty ($id) || empty ($url)) {
+        echo COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+        exit;
+    }
+    $type = COM_applyFilter ($_REQUEST['type']);
+    if (empty ($type)) {
+        $type = 'article';
+    }
+
+    $trackbackUrl = TRB_detectTrackbackUrl ($url);
+
+    list ($url, $title, $excerpt) = getItemInfo ($type, $id,
+                                                 'url,title,excerpt');
+    $excerpt = trim (strip_tags ($excerpt));
+    $blog = TRB_filterBlogname ($_CONF['site_name']);
+
+    $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']);
+    if ($trackbackUrl === false) {
+        $display .= showTrackbackMessage ($LANG_TRB['not_found'],
+                                          $LANG_TRB['autodetect_failed']);
+    }
+    $display .= trackback_editor ($trackbackUrl, $url, $title, $excerpt, $blog)
+             . COM_siteFooter ();
+} else if (($mode == 'fresh') || ($mode == 'preview')) {
+    $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']);
+
+    if (isset ($_REQUEST['msg'])) {
+        $msg = COM_applyFilter ($_REQUEST['msg'], true);
+        if ($msg > 0) {
+            $display .= COM_showMessage ($msg);
+        }
+    }
+
+    $target = COM_applyFilter ($_REQUEST['target']);
+    $url = COM_applyFilter ($_REQUEST['url']);
+    $title = COM_stripslashes ($_REQUEST['title']);
+    $excerpt = COM_stripslashes ($_REQUEST['excerpt']);
+    $blog = COM_stripslashes ($_REQUEST['blog_name']);
+
+    if (isset ($_REQUEST['id']) && isset ($_REQUEST['type'])) {
+        $id = COM_applyFilter ($_REQUEST['id']);
+        $type = COM_applyFilter ($_REQUEST['type']);
+        if (!empty ($id) && !empty ($type)) {
+            list ($newurl, $newtitle, $newexcerpt) =
+                                getItemInfo ($type, $id, 'url,title,excerpt');
+            $newexcerpt = trim (strip_tags ($newexcerpt));
+
+            if (empty ($url) && !empty ($newurl)) {
+                $url = $newurl;
+            }
+            if (empty ($title) && !empty ($newtitle)) {
+                $title = $newtitle;
+            }
+            if (empty ($newexcerpt) && !empty ($newexcerpt)) {
+                $excerpt = $newexcerpt;
+            }
+
+            if (empty ($blog)) {
+                $blog = TRB_filterBlogname ($_CONF['site_name']);
+            }
+        }
+    }
+
+    if (($mode == 'preview') && empty ($url)) {
+        $display .= showTrackbackMessage ($LANG_TRB['url_missing'],
+                                          $LANG_TRB['url_required']);
+    }
+
+    $display .= trackback_editor ($target, $url, $title, $excerpt, $blog);
+
+    $display .= COM_siteFooter ();
+} else if ($mode == 'deleteservice') {
+    $pid = COM_applyFilter ($_POST['service_id'], true);
+    if ($pid > 0) {
+        DB_delete ($_TABLES['pingservice'], 'pid', $pid);
+        $display = COM_refresh ($_CONF['site_admin_url']
+                 . '/trackback.php?mode=listservice&msg=66');
+    } else {
+        $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+    }
+} else if ($mode == 'saveservice') {
+    $display .= saveService (COM_applyFilter ($_POST['service_id'], true),
+                             $_POST['service_name'], $_POST['service_site_url'],
+                             $_POST['service_ping_url'], $_POST['method'],
+                             $_POST['is_enabled']);
+
+} else if ($mode == 'editservice') {
+    $pid = COM_applyFilter ($_GET['service_id'], true);
+
+    $display .= editServiceForm ($pid);
+} else if ($mode == 'listservice') {
+    $display .= COM_siteHeader ('menu', $LANG_TRB['services_headline']);
+    if (isset ($_REQUEST['msg'])) {
+        $display .= COM_showMessage (COM_applyFilter ($_REQUEST['msg'], true));
+    }
+    $display .= listServices ();
+    $display .= COM_siteFooter();
+} else if ($mode == 'freepb') {
+    $display .= COM_siteHeader ('menu', $LANG_TRB['pingback']);
+    $display .= pingbackForm ();
+    $display .= COM_siteFooter();
+} else if ($mode == 'sendpingback') {
+    $target = COM_applyFilter ($_POST['target']);
+    $display .= COM_siteHeader ('menu', $LANG_TRB['pingback']);
+    if (empty ($target)) {
+        $display .= showTrackbackMessage ($LANG_TRB['pbtarget_missing'],
+                                          $LANG_TRB['pbtarget_required']);
+    } else {
+        $result = PNB_sendPingback ($_CONF['site_url'], $target);
+        if (empty ($result)) {
+            $display .= COM_showMessage (74);
+            $target = '';
+        } else {
+            $message = '<p>' . $LANG_TRB['pb_error_details'] . '<br>'
+                     . '<span class="warningsmall">'
+                     . htmlspecialchars ($result) . '</span></p>';
+            $display .= showTrackbackMessage ($LANG_TRB['send_error'], $message);
+        }
+    }
+    $display .= pingbackForm ($target);
+    $display .= COM_siteFooter ();
+} else {
+    $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php');
+}
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/admin/user.php 1.4.0sr5-1/admin/user.php
--- 1.3.11sr1/admin/user.php	2004-12-31 10:02:27.000000000 -0600
+++ 1.4.0sr5-1/admin/user.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | user.php                                                                  |
 // |                                                                           |
 // | Geeklog user administration page.                                         |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: user.php,v 1.88 2004/11/20 12:16:11 dhaun Exp $
+// $Id: user.php,v 1.139.2.1 2006/06/30 12:03:48 dhaun Exp $
 
 // Set this to true to get various debug messages from this script
 $_USER_VERBOSE = false;
@@ -43,7 +43,7 @@
 
 $display = '';
 
-// Make sure user has access to this page  
+// Make sure user has access to this page
 if (!SEC_hasRights('user.edit')) {
     $retval .= COM_siteHeader ('menu');
     $retval .= COM_startBlock ($MESSAGE[30], '',
@@ -64,9 +64,9 @@
 * @return   string          HTML for user edit form
 *
 */
-function edituser($uid = '', $msg = '') 
+function edituser($uid = '', $msg = '')
 {
-    global $_CONF, $_TABLES, $_USER, $LANG28, $LANG_ACCESS, $MESSAGE;
+    global $_CONF, $_TABLES, $_USER, $LANG28, $LANG_ACCESS, $MESSAGE, $LANG_ADMIN;
 
     $retval = '';
 
@@ -112,6 +112,7 @@
         $curtime =  COM_getUserDateTimeFormat();
         $lastlogin = '';
         $lasttime = '';
+        $A['status'] = USER_ACCOUNT_ACTIVE;
     }
 
     $retval .= COM_startBlock ($LANG28[1], '',
@@ -123,14 +124,11 @@
     $user_templates->set_var('site_url', $_CONF['site_url']);
     $user_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
     $user_templates->set_var('layout_url', $_CONF['layout_url']);
-    $user_templates->set_var('lang_save', $LANG28[20]);
-    if (!empty ($A['uid']) && ($A['uid'] > 1)) { 
-        $user_templates->set_var('change_password_option', '<input type="submit" value="' . $LANG28[17] . '" name="mode">');
-    }
+    $user_templates->set_var('lang_save', $LANG_ADMIN['save']);
     if (!empty($uid) && ($A['uid'] != $_USER['uid']) && SEC_hasRights('user.delete')) {
-        $user_templates->set_var('delete_option', '<input type="submit" value="' . $LANG28[19] . '" name="mode">');
+        $user_templates->set_var('delete_option', '<input type="submit" value="' . $LANG_ADMIN['delete'] . '" name="mode">');
     }
-    $user_templates->set_var('lang_cancel', $LANG28[18]);
+    $user_templates->set_var('lang_cancel', $LANG_ADMIN['cancel']);
 
     $user_templates->set_var('lang_userid', $LANG28[2]);
     if (empty ($A['uid'])) {
@@ -150,19 +148,17 @@
     $user_templates->set_var('lang_username', $LANG28[3]);
     $user_templates->set_var('username', $A['username']);
 
-    if (($_CONF['allow_user_photo'] == 1) && !empty ($A['photo'])) {
-        if (strstr ($_CONF['path_images'], $_CONF['path_html'])) {
-            $imgpath = substr ($_CONF['path_images'],
-                               strlen ($_CONF['path_html']));
-            $user_templates->set_var ('user_photo', '<img src="'
-                . $_CONF['site_url'] . '/' . $imgpath . 'userphotos/'
-                . $A['photo'] . '" alt="">');
-        } else {
-            $user_templates->set_var ('user_photo', '<img src="' . $_CONF['site_url'] . '/getimage.php?mode=userphotos&amp;image=' . $A['photo'] . '" alt="">');
-        }
-        $user_templates->set_var ('lang_delete_photo', $LANG28[28]);
-        $user_templates->set_var ('delete_photo_option',
-                '<input type="checkbox" name="delete_photo">');
+    if ($_CONF['allow_user_photo'] && ($A['uid'] > 0)) {
+        $photo = USER_getPhoto ($A['uid'], $A['photo'], $A['email'], -1);
+        $user_templates->set_var ('user_photo', $photo);
+        if (empty ($A['photo'])) {
+            $user_templates->set_var ('lang_delete_photo', '');
+            $user_templates->set_var ('delete_photo_option', '');
+        } else {
+            $user_templates->set_var ('lang_delete_photo', $LANG28[28]);
+            $user_templates->set_var ('delete_photo_option',
+                    '<input type="checkbox" name="delete_photo">');
+        }
     } else {
         $user_templates->set_var ('user_photo', '');
         $user_templates->set_var ('lang_delete_photo', '');
@@ -171,13 +167,37 @@
 
     $user_templates->set_var('lang_fullname', $LANG28[4]);
     $user_templates->set_var('user_fullname', htmlspecialchars($A['fullname']));
-    $user_templates->set_var('lang_password', $LANG28[5]); 
+    $user_templates->set_var('lang_password', $LANG28[5]);
+    $user_templates->set_var('lang_password_conf', $LANG28[39]);
     $user_templates->set_var('lang_emailaddress', $LANG28[7]);
     $user_templates->set_var('user_email', htmlspecialchars($A['email']));
     $user_templates->set_var('lang_homepage', $LANG28[8]);
     $user_templates->set_var('user_homepage', htmlspecialchars($A['homepage']));
     $user_templates->set_var('do_not_use_spaces', $LANG28[9]);
 
+    $statusarray = array(USER_ACCOUNT_DISABLED => $LANG28[42],
+                        USER_ACCOUNT_AWAITING_ACTIVATION => $LANG28[43],
+                        USER_ACCOUNT_ACTIVE => $LANG28[45] );
+    if ($_CONF['usersubmission'] == 1)
+    {
+        $statusarray[USER_ACCOUNT_AWAITING_APPROVAL] = $LANG28[44];
+        asort($statusarray);
+    }
+    $statusselect = '<select name="userstatus">';
+    while (list($key, $value) = each($statusarray))
+    {
+        if ($key == $A['status'])
+        {
+            $statusselect .= "<option selected=\"true\" value=\"$key\">$value</option>\n";
+        } else {
+            $statusselect .= "<option value=\"$key\">$value</option>\n";
+        }
+    }
+    $statusselect .= '</select><input type="hidden" name="oldstatus" value="'.
+                        $A['status'].'"/>';
+    $user_templates->set_var('user_status', $statusselect);
+    $user_templates->set_var('lang_user_status', $LANG28[46]);
+
     if ($_CONF['custom_registration'] AND (function_exists('custom_useredit'))) {
         if (!empty ($uid) && ($uid > 1)) {
             $user_templates->set_var('customfields', custom_useredit($uid) );
@@ -186,11 +206,11 @@
         }
     }
 
-    if (SEC_inGroup('Group Admin')) {
+    if (SEC_hasRights('group.edit')) {
         $user_templates->set_var('lang_securitygroups', $LANG_ACCESS['securitygroups']);
         $user_templates->set_var('lang_groupinstructions', $LANG_ACCESS['securitygroupsmsg']);
 
-        if (!empty($uid)) { 
+        if (!empty($uid)) {
             $usergroups = SEC_getUserGroups($uid);
             if (is_array($usergroups) && !empty($uid)) {
                 $selected = implode(' ',$usergroups);
@@ -202,6 +222,11 @@
             $selected .= DB_getItem($_TABLES['groups'],'grp_id',"grp_name='Logged-in Users'");
         }
         $thisUsersGroups = SEC_getUserGroups ();
+        $remoteGroup = DB_getItem ($_TABLES['groups'], 'grp_id',
+                                   "grp_name='Remote users'");
+        if (!empty ($remoteGroup)) {
+            $thisUsersGroups[] = $remoteGroup;
+        }
         $where = 'grp_id IN (' . implode (',', $thisUsersGroups) . ')';
         $user_templates->set_var ('group_options',
                 COM_checkList ($_TABLES['groups'], 'grp_id,grp_name',
@@ -214,39 +239,69 @@
                 '<input type="hidden" name="groups" value="-1">');
     }
     $user_templates->parse('output', 'form');
-    $retval .= $user_templates->finish($user_templates->get_var('output')); 
+    $retval .= $user_templates->finish($user_templates->get_var('output'));
     $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
 
     return $retval;
 }
 
-/**
-* Changes a user's password
-*
-* @param    int     $uid        ID of user to change password for
-* @param    string  $passwd     New password
-* @return   string              HTML redirect or error message
-*
-*/
-function changepw ($uid, $passwd)
-{
-    global $_CONF, $_TABLES;
-
-    $retval = '';
-
-    if (!empty ($passwd) && !empty ($uid)) {
-        $passwd = md5 ($passwd);
-        $result = DB_change ($_TABLES['users'], 'passwd', "$passwd",
-                             'uid', $uid);
-
-        $retval .= COM_refresh ($_CONF['site_admin_url'] . '/user.php?msg=5');
+function listusers() {
+    global $LANG_ADMIN, $_TABLES, $_CONF, $LANG28, $_IMAGE_TYPE;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $display = '';
+
+    if ($_CONF['lastlogin']==true) {
+        $login_text = $LANG28[41];
+        $login_field = 'lastlogin';
     } else {
-        $retval .= COM_siteHeader ('menu');
-        $retval .= COM_errorLog ('CHANGEPW ERROR: There was nothing to do!', 3);
-        $retval .= COM_siteFooter ();
+        $login_text = $LANG28[40];
+        $login_field = 'regdate';
     }
-
-    return $retval;
+    
+    $header_arr = array(      # dislay 'text' and use table field 'field'
+                    array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false),
+                    array('text' => $LANG28[37], 'field' => 'uid', 'sort' => true),
+                    array('text' => $LANG28[3], 'field' => 'username', 'sort' => true),
+                    array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true),
+                    array('text' => $login_text, 'field' => $login_field, 'sort' => true),
+                    array('text' => $LANG28[7], 'field' => 'email', 'sort' => true)
+    );
+
+    $defsort_arr = array('field' => 'uid',
+                         'direction' => 'asc');
+
+    $menu_arr = array (
+                    array('url' => $_CONF['site_admin_url'] . '/user.php?mode=edit',
+                          'text' => $LANG_ADMIN['create_new']),
+                    array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform',
+                          'text' => $LANG28[23]),
+                    array('url' => $_CONF['site_admin_url'],
+                          'text' => $LANG_ADMIN['admin_home'])
+    );
+
+    $text_arr = array('has_menu'     => true,
+                      'has_extras'   => true,
+                      'title'        => $LANG28[11],
+                      'instructions' => $LANG28[12],
+                      'icon'         => $_CONF['layout_url'] . '/images/icons/user.' . $_IMAGE_TYPE,
+                      'form_url'     => $_CONF['site_admin_url'] . "/user.php",
+                      'help_url'     => ''
+    );
+
+    if ($_CONF['lastlogin']) {
+        $join_userinfo="LEFT JOIN {$_TABLES['userinfo']} ON {$_TABLES['users']}.uid={$_TABLES['userinfo']}.uid ";
+        $select_userinfo=",lastlogin ";
+    }
+    $sql = "SELECT {$_TABLES['users']}.uid,username,fullname,email,photo,regdate$select_userinfo FROM {$_TABLES['users']} $join_userinfo WHERE 1";
+
+    $query_arr = array('table' => 'users',
+                       'sql' => $sql,
+                       'query_fields' => array('username', 'email', 'fullname'),
+                       'default_filter' => "AND {$_TABLES['users']}.uid > 1");
+
+    $display .= ADMIN_list ("user", "ADMIN_getListField_users", $header_arr, $text_arr,
+                            $query_arr, $menu_arr, $defsort_arr);
+    return $display;
 }
 
 /**
@@ -263,14 +318,19 @@
 * @return   string                  HTML redirect or error message
 *
 */
-function saveusers ($uid, $username, $fullname, $passwd, $email, $regdate, $homepage, $groups, $delete_photo = '') 
+function saveusers ($uid, $username, $fullname, $passwd, $passwd_conf, $email, $regdate, $homepage, $groups, $delete_photo = '', $userstatus=3, $oldstatus=3)
 {
     global $_CONF, $_TABLES, $_USER, $LANG28, $_USER_VERBOSE;
 
     $retval = '';
+    $userChanged = false;
+
+    if ($_USER_VERBOSE) COM_errorLog("**** entering saveusers****",1);
+    if ($_USER_VERBOSE) COM_errorLog("group size at beginning = " . sizeof($groups),1);
 
-    if ($_USER_VERBOSE) COM_errorLog("**** entering saveusers****",1);    
-    if ($_USER_VERBOSE) COM_errorLog("group size at beginning = " . sizeof($groups),1);    
+    if ($passwd!=$passwd_conf) { // passwords dont match
+        return edituser ($uid, 67);
+    }
 
     if (!empty ($username) && !empty ($email)) {
 
@@ -283,8 +343,15 @@
             $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)',
                                   "username = '$uname'");
         } else {
-            $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)',
-                                  "username = '$uname' AND uid <> $uid");
+            $uservice = DB_getItem ($_TABLES['users'], 'remoteservice', "uid = $uid");
+            if ($uservice != '') {
+                $uservice = addslashes($uservice);
+                $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)',
+                            "username = '$uname' AND uid <> $uid AND remoteservice = '$uservice'");
+            } else {
+                $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)',
+                                  "username = '$uname' AND uid <> $uid AND (remoteservice = '' OR remoteservice is null)");
+            }
         }
         if ($ucount > 0) {
             // Admin just changed a user's username to one that already exists
@@ -304,7 +371,7 @@
             return edituser ($uid, 56);
         }
 
-        if (empty ($uid) || !empty ($passwd)) { 
+        if (empty ($uid) || !empty ($passwd)) {
             $passwd = md5 ($passwd);
         } else {
             $passwd = DB_getItem ($_TABLES['users'], 'passwd', "uid = $uid");
@@ -346,7 +413,7 @@
                                 $imgpath . $newphoto) === false) {
                         $display = COM_siteHeader ('menu');
                         $display .= COM_errorLog ('Could not rename userphoto "'
-                                        . $photo . '" to "' . $newphoto . '".');
+                                        . $curphoto . '" to "' . $newphoto . '".');
                         $display .= COM_siteFooter ();
                         return $display;
                     }
@@ -355,11 +422,17 @@
             }
 
             $curphoto = addslashes ($curphoto);
-            DB_query("UPDATE {$_TABLES['users']} SET username = '$username', fullname = '$fullname', passwd = '$passwd', email = '$email', homepage = '$homepage', photo = '$curphoto' WHERE uid = $uid");
+            DB_query("UPDATE {$_TABLES['users']} SET username = '$username', fullname = '$fullname', passwd = '$passwd', email = '$email', homepage = '$homepage', photo = '$curphoto', status='$userstatus' WHERE uid = $uid");
             if ($_CONF['custom_registration'] AND (function_exists('custom_usersave'))) {
                 custom_usersave($uid);
             }
-            PLG_userInfoChanged ($uid);
+            if( ($_CONF['usersubmission'] == 1) && ($oldstatus == USER_ACCOUNT_AWAITING_APPROVAL)
+                   && ($userstatus == USER_ACCOUNT_ACTIVE) )
+            {
+                //USER_sendActivationEmail($username, $email);
+                USER_createAndSendPassword ($username, $email, $uid);
+            }
+            $userChanged = true;
         }
 
         // if groups is -1 then this user isn't allowed to change any groups so ignore
@@ -368,7 +441,7 @@
                 $rootgrp = DB_getItem ($_TABLES['groups'], 'grp_id',
                                        "grp_name = 'Root'");
                 if (in_array ($rootgrp, $groups)) {
-                    COM_accessLog ("User {$_USER['username']} just tried to give Root permissions to user $username.");
+                    COM_accessLog ("User {$_USER['username']} ({$_USER['uid']}) just tried to give Root permissions to user $username.");
                     echo COM_refresh ($_CONF['site_admin_url'] . '/index.php');
                     exit;
                 }
@@ -386,12 +459,17 @@
                         $sql = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES (" . current($groups) . ",$uid)";
                         DB_query($sql);
                     }
-                    next($groups);        
+                    next($groups);
                 }
             }
         }
+
+        if ($userChanged)
+        {
+            PLG_userInfoChanged ($uid);
+        }
         $errors = DB_error();
-        if (empty($errors)) { 
+        if (empty($errors)) {
             echo COM_refresh($_CONF['site_admin_url'] . '/user.php?msg=21');
         } else {
             $retval .= COM_siteHeader ('menu');
@@ -414,101 +492,7 @@
         exit;
     }
 
-    if ($_USER_VERBOSE) COM_errorLog("***************leaving saveusers*****************",1);    
-
-    return $retval;
-}
-
-/**
-* Lists all users in the system
-*
-* @param    int     $offset         start of list
-* @param    int     $curpage        current page
-* @param    string  $query          query string for search
-* @param    int     $query_limit    max. entries per page
-* @return   string                  HTML for list of users
-*
-*/
-function listusers ($offset, $curpage, $query = '', $query_limit = 50) 
-{
-    global $_CONF, $_TABLES, $LANG28;
-        
-    $retval = '';
-
-    $retval .= COM_startBlock ($LANG28[11], '',
-                               COM_getBlockTemplate ('_admin_block', 'header'));
-
-    $user_templates = new Template($_CONF['path_layout'] . 'admin/user');
-    $user_templates->set_file (array ('list' => 'userslist.thtml',
-                                      'row' => 'listitem.thtml'));
-    $user_templates->set_var('site_url', $_CONF['site_url']);
-    $user_templates->set_var('site_admin_url', $_CONF['site_admin_url']);
-    $user_templates->set_var('layout_url', $_CONF['layout_url']);
-    $user_templates->set_var('lang_newuser', $LANG28[15]);
-    $user_templates->set_var('lang_batchadd',$LANG28[23]);
-    $user_templates->set_var('lang_adminhome', $LANG28[16]);
-    $user_templates->set_var('lang_instructions', $LANG28[12]);
-    $user_templates->set_var('lang_search', $LANG28[26]);
-    $user_templates->set_var('lang_submit', $LANG28[33]);
-    $user_templates->set_var('last_query', $query);
-    $user_templates->set_var('lang_limit_results', $LANG28[27]);
-    $user_templates->set_var('lang_username', $LANG28[3]);
-    $user_templates->set_var('lang_fullname', $LANG28[4]);
-    $user_templates->set_var('lang_emailaddress', $LANG28[7]);
-
-    if (empty($query_limit)) {
-        $limit = 50;
-    } else {
-        $limit = $query_limit;
-    }
-    $user_templates->set_var($limit . '_selected', 'selected="selected"');
-    
-    if (!empty ($query)) {
-        $query = addslashes (str_replace ('*', '%', $query));
-        $num_pages = ceil (DB_getItem ($_TABLES['users'], 'count(*)',
-                "uid > 1 AND (username LIKE '$query' OR email LIKE '$query' OR fullname LIKE '$query')") / $limit);
-        if ($num_pages < $curpage) {
-            $curpage = 1;
-        }
-    } else {
-        $num_pages = ceil (DB_getItem ($_TABLES['users'], 'count(*)',
-                                       'uid > 1') / $limit);
-    }
-
-    $offset = (($curpage - 1) * $limit);
-
-    if (!empty($query)) {
-        $sql = "SELECT uid,username,fullname,email FROM {$_TABLES['users']} WHERE uid > 1 AND (username LIKE '$query' OR email LIKE '$query' OR fullname LIKE '$query') ORDER BY uid LIMIT $offset,$limit";
-    } else {
-        $sql = "SELECT uid,username,fullname,email FROM {$_TABLES['users']} WHERE uid > 1 ORDER BY uid LIMIT $offset,$limit";
-    }
-    $result = DB_query($sql);
-    $nrows = DB_numRows($result);
-
-    for ($i = 0; $i < $nrows; $i++) {
-        $A = DB_fetchArray($result);
-        $user_templates->set_var('user_id', $A['uid']);
-        $user_templates->set_var('username', $A['username']);
-        $user_templates->set_var('user_fullname', $A['fullname']);
-        $user_templates->set_var('user_email', $A['email']);
-        $user_templates->parse('user_row', 'row', true);
-    }
-    if (!empty($query)) {
-        $query = str_replace('%','*',$query);
-        $base_url = $_CONF['site_admin_url'] . '/user.php?q=' . urlencode($query) . '&amp;query_limit=' . $query_limit;
-    } else {
-        $base_url = $_CONF['site_admin_url'] . '/user.php?query_limit=' . $query_limit;
-    }
-
-    if ($num_pages > 1) {
-        $user_templates->set_var('google_paging',COM_printPageNavigation($base_url,$curpage,$num_pages));
-    } else {
-        $user_templates->set_var('google_paging', '');
-    }
-    $user_templates->parse('output', 'list');
-    $retval .= $user_templates->finish($user_templates->get_var('output'));
-
-    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+    if ($_USER_VERBOSE) COM_errorLog("***************leaving saveusers*****************",1);
 
     return $retval;
 }
@@ -522,7 +506,7 @@
 */
 function importusers ($file)
 {
-    global $_CONF, $_TABLES, $LANG04, $LANG28, $HTTP_POST_FILES;
+    global $_CONF, $_TABLES, $LANG04, $LANG28;
 
     // Setting this to true will cause import to print processing status to
     // webpage and to the error.log file
@@ -539,7 +523,7 @@
     $upload->setFileNames ('user_import_file.txt');
     if ($upload->uploadFiles ()) {
         // Good, file got uploaded, now install everything
-        $thefile =  current ($HTTP_POST_FILES);
+        $thefile =  current ($_FILES);
         $filename = $_CONF['path_data'] . 'user_import_file.txt';
     } else {
         // A problem occurred, print debug information
@@ -552,16 +536,7 @@
         return $retval;
     }
 
-    $handle = @fopen ($filename, 'r');
-    if (empty ($handle)) {
-        $retval = COM_siteHeader ('menu', $LANG28[22]);
-        $retval .= COM_startBlock ($LANG28[24], '',
-                COM_getBlockTemplate ('_msg_block', 'header'));
-        $retval .= $LANG28[34];
-        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-
-        return $retval;
-    }
+    $users = file ($filename);
 
     $retval .= COM_siteHeader ('menu', $LANG28[22]);
     $retval .= COM_startBlock ($LANG28[31], '',
@@ -570,9 +545,13 @@
     // Following variables track import processing statistics
     $successes = 0;
     $failures = 0;
-    while ($user1 = fgets ($handle, 4096)) {
-        $user = rtrim ($user1);
-        list ($full_name, $u_name, $email) = split ("\t", $user);
+    foreach ($users as $line) {
+        $line = rtrim ($line);
+        if (empty ($line)) {
+            continue;
+        }
+
+        list ($full_name, $u_name, $email) = explode ("\t", $line);
 
         $full_name = strip_tags ($full_name);
         $u_name = COM_applyFilter ($u_name);
@@ -599,7 +578,8 @@
                 // user doesn't already exist
                 $uid = USER_createAccount ($userName, $emailAddr, '',
                                            $fullName);
-                emailpassword ($userName);
+
+                USER_createAndSendPassword ($userName, $emailAddr, $uid);
 
                 if ($verbose_import) {
                     $retval .= "<br> Account for <b>$u_name</b> created successfully.<br>\n";
@@ -620,37 +600,19 @@
             }
             $failures++;
         } // end if COM_isEmail($email)
-    } // end while
+    } // end foreach
 
-    fclose ($handle);
     unlink ($filename);
 
     $retval .= '<p>' . sprintf ($LANG28[32], $successes, $failures);
 
     $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
-    $retval .= COM_siteFooter ();  
+    $retval .= COM_siteFooter ();
 
     return $retval;
 }
 
 /**
-* Send password to newly created user
-*
-* @param    string  $username   name of user
-*
-*/
-function emailpassword ($username)
-{
-    global $_TABLES;
-
-    $email = DB_getItem ($_TABLES['users'], 'email', "username = '$username'");
-    if (!empty ($email)) {
-        USER_createAndSendPassword ($username, $email);
-    }
-}
-
-
-/**
 * Display "batch add" (import) form
 *
 * @return   string      HTML for import form
@@ -690,42 +652,55 @@
 
 // MAIN
 $mode = '';
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-} else if (isset ($HTTP_GET_VARS['mode'])) {
-    $mode = $HTTP_GET_VARS['mode'];
+if (isset ($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
+}
+
+if (isset ($_REQUEST['order'])) {
+    $order =  COM_applyFilter ($_REQUEST['order'],true);
+}
+
+if (isset ($_GET['direction'])) {
+    $direction =  COM_applyFilter ($_GET['direction']);
 }
 
-if (($mode == $LANG28[19]) && !empty ($LANG28[19])) { // delete
-    $uid = COM_applyFilter ($HTTP_POST_VARS['uid'], true);
+if ($_POST['passwd']!=$_POST['passwd_conf']) { // passwords were entered but two
+        $display .= COM_refresh($_CONF['site_admin_url']
+                            . '/user.php?mode=edit&msg=67&uid='.$_POST['uid']);
+} else if (($mode == $LANG_ADMIN['delete']) && !empty ($LANG_ADMIN['delete'])) { // delete
+    $uid = COM_applyFilter ($_POST['uid'], true);
     if ($uid > 1) {
         $display .= deleteUser ($uid);
     } else {
         COM_errorLog ('Attempted to delete user uid=' . $uid);
         $display = COM_refresh ($_CONF['site_admin_url'] . '/user.php');
     }
-} else if (($mode == $LANG28[20]) && !empty ($LANG28[20])) { // save
-    $display = saveusers (COM_applyFilter ($HTTP_POST_VARS['uid'], true),
-            $HTTP_POST_VARS['username'], $HTTP_POST_VARS['fullname'],
-            $HTTP_POST_VARS['passwd'], $HTTP_POST_VARS['email'],
-            $HTTP_POST_VARS['regdate'], $HTTP_POST_VARS['homepage'],
-            $HTTP_POST_VARS[$_TABLES['groups']],
-            $HTTP_POST_VARS['delete_photo']);
+} else if (($mode == $LANG_ADMIN['save']) && !empty ($LANG_ADMIN['save'])) { // save
+    if (!isset ($_POST['oldstatus'])) {
+        $_POST['oldstatus'] = USER_ACCOUNT_ACTIVE;
+    }
+    if (!isset ($_POST['userstatus'])) {
+        $_POST['userstatus'] = USER_ACCOUNT_ACTIVE;
+    }
+    $display = saveusers (COM_applyFilter ($_POST['uid'], true),
+            $_POST['username'], $_POST['fullname'],
+            $_POST['passwd'], $_POST['passwd_conf'], $_POST['email'],
+            $_POST['regdate'], $_POST['homepage'],
+            $_POST[$_TABLES['groups']],
+            $_POST['delete_photo'], $_POST['userstatus'], $_POST['oldstatus']);
     if (!empty($display)) {
         $tmp = COM_siteHeader('menu');
         $tmp .= $display;
         $tmp .= COM_siteFooter();
         $display = $tmp;
     }
-} else if (($mode == $LANG28[17]) && !empty ($LANG28[17])) { // change password
-    $display .= changepw (COM_applyFilter ($HTTP_POST_VARS['uid'], true),
-                          $HTTP_POST_VARS['passwd']);
 } else if ($mode == 'edit') {
     $display .= COM_siteHeader('menu', $LANG28[1]);
-    $display .= edituser (COM_applyFilter ($HTTP_GET_VARS['uid']));
+    $display .= edituser (COM_applyFilter ($_GET['uid']),
+                                              COM_applyFilter ($_GET['msg']));
     $display .= COM_siteFooter();
 } else if ($mode == 'import') {
-    $display .= importusers ($HTTP_POST_VARS['file']);
+    $display .= importusers ($_POST['file']);
 } else if ($mode == 'importform') {
     $display .= COM_siteHeader('menu', $LANG28[24]);
     $display .= COM_startBlock ($LANG28[24], '',
@@ -736,27 +711,10 @@
     $display .= COM_siteFooter();
 } else { // 'cancel' or no mode at all
     $display .= COM_siteHeader ('menu', $LANG28[11]);
-    if (isset ($HTTP_POST_VARS['q']) || isset ($HTTP_POST_VARS['query_limit'])) {
-        $VARS = $HTTP_POST_VARS;
-    } else {
-        $VARS = $HTTP_GET_VARS;
-    }
-    if (isset ($VARS['msg'])) {
-        $display .= COM_showMessage (COM_applyFilter ($VARS['msg'], true));
-    }
-    $offset = 0;
-    if (isset ($VARS['offset'])) {
-        $offset = COM_applyFilter ($VARS['offset'], true);
-    }
-    $page = 1;
-    if (isset ($VARS['page'])) {
-        $page = COM_applyFilter ($VARS['page'], true);
-    }
-    if ($page < 1) {
-        $page = 1;
+    if (isset ($_REQUEST['msg'])) {
+        $display .= COM_showMessage (COM_applyFilter ($_REQUEST['msg'], true));
     }
-    $display .= listusers ($offset, $page, $VARS['q'],
-                           COM_applyFilter ($VARS['query_limit'], true));
+    $display .= listusers();
     $display .= COM_siteFooter();
 }
 
diff -ruN 1.3.11sr1/article.php 1.4.0sr5-1/article.php
--- 1.3.11sr1/article.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/article.php	2006-08-08 02:53:59.000000000 -0500
@@ -8,11 +8,12 @@
 // |                                                                           |
 // | Shows articles in various formats.                                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: article.php,v 1.56 2004/10/02 13:28:31 dhaun Exp $
+// $Id: article.php,v 1.76 2005/12/03 12:16:28 ospiess Exp $
 
 /**
 * This page is responsible for showing a single article in different modes which
@@ -39,6 +40,7 @@
 *
 * @author   Jason Whittenburg
 * @author   Tony Bibbbs <tony@tonybibbs.com>
+* @author   Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
 */
 
 /**
@@ -46,29 +48,49 @@
 */
 require_once ('lib-common.php');
 require_once ($_CONF['path_system'] . 'lib-story.php');
+if ($_CONF['trackback_enabled']) {
+    require_once ($_CONF['path_system'] . 'lib-trackback.php');
+}
 
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
 
-// echo COM_debug($HTTP_POST_VARS);
+// echo COM_debug($_POST);
 
 // MAIN
+$display = '';
 
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $story = COM_applyFilter ($HTTP_POST_VARS['story']);
-    $mode = COM_applyFilter ($HTTP_POST_VARS['mode']);
-    $order = COM_applyFilter ($HTTP_POST_VARS['order']);
-    $query = COM_applyFilter ($HTTP_POST_VARS['query']);
-    $reply = COM_applyFilter ($HTTP_POST_VARS['reply']);
+$order = '';
+$query = '';
+$reply = '';
+if (isset ($_POST['mode'])) {
+    $story = COM_applyFilter ($_POST['story']);
+    $mode = COM_applyFilter ($_POST['mode']);
+    if (isset ($_POST['order'])) {
+        $order = COM_applyFilter ($_POST['order']);
+    }
+    if (isset ($_POST['query'])) {
+        $query = COM_applyFilter ($_POST['query']);
+    }
+    if (isset ($_POST['reply'])) {
+        $reply = COM_applyFilter ($_POST['reply']);
+    }
 } else {
     COM_setArgNames (array ('story', 'mode'));
     $story = COM_applyFilter (COM_getArgument ('story'));
     $mode = COM_applyFilter (COM_getArgument ('mode'));
-    $order = COM_applyFilter ($HTTP_GET_VARS['order']);
-    $query = COM_applyFilter ($HTTP_GET_VARS['query']);
-    $reply = COM_applyFilter ($HTTP_GET_VARS['reply']);
+    if (isset ($_GET['order'])) {
+        $order = COM_applyFilter ($_GET['order']);
+    }
+    if (isset ($_GET['query'])) {
+        $query = COM_applyFilter ($_GET['query']);
+    }
+    if (isset ($_GET['reply'])) {
+        $reply = COM_applyFilter ($_GET['reply']);
+    }
 }
+
 if (empty ($story)) {
     echo COM_refresh ($_CONF['site_url'] . '/index.php');
     exit();
@@ -77,173 +99,215 @@
     $order = '';
 }
 
-// First see if we have a plugin that may be trying to use the Geeklog comment engine
-if (isset ($HTTP_POST_VARS['type'])) {
-    $type = COM_applyFilter ($HTTP_POST_VARS['type']);
-} else {
-    $type = COM_applyFilter ($HTTP_GET_VARS['type']);
-}
-if (!empty ($type) && PLG_supportsComments ($type)) {
-    // Yes, this is a plugin wanting to be commented on...do it
-    $display .= PLG_callCommentForm($type,$story,$mode,$order,$reply);
-    echo $display;
-    exit();
-}
-
-if ($type == 'poll') {
-    $result = DB_query("SELECT COUNT(*) AS count FROM {$_TABLES['pollquestions']} WHERE qid = '$story'");
-} else {
-    $result = DB_query("SELECT COUNT(*) AS count FROM {$_TABLES['stories']} WHERE sid = '$story'");
-}
+$result = DB_query("SELECT COUNT(*) AS count FROM {$_TABLES['stories']} WHERE sid = '$story'" . COM_getPermSql ('AND'));
 $A = DB_fetchArray($result);
 
 if ($A['count'] > 0) {
-    if ($reply == $LANG01[25]) {
-        echo COM_refresh ($_CONF['site_url']
-                . "/comment.php?sid=$story&amp;pid=$pid&amp;type=$type");
+    $result = DB_query ("SELECT STRAIGHT_JOIN s.*, UNIX_TIMESTAMP(s.date) AS day, "
+     . "u.username, u.fullname, u.photo, t.topic, t.imageurl "
+     . "FROM {$_TABLES['stories']} as s, {$_TABLES['users']} as u, {$_TABLES['topics']} as t "
+     . "WHERE (s.uid = u.uid) AND (s.tid = t.tid) AND (sid = '$story')");
+    $A = DB_fetchArray ($result);
+
+    $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
+            $A['perm_owner'], $A['perm_group'], $A['perm_members'],
+            $A['perm_anon']);
+    if (($access == 0) OR !SEC_hasTopicAccess ($A['tid']) OR
+        (($A['draft_flag'] == 1) AND !SEC_hasRights ('story.edit'))) {
+        $display .= COM_siteHeader ('menu')
+                 . COM_startBlock ($LANG_ACCESS['accessdenied'], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'))
+                 . $LANG_ACCESS['storydenialmsg']
+                 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
+                 . COM_siteFooter ();
+    } elseif (($mode == 'print') && ($_CONF['hideprintericon'] == 0)) {
+        $story_template = new Template($_CONF['path_layout'] . 'article');
+        $story_template->set_file('article','printable.thtml');
+        $story_template->set_var('page_title',
+                $_CONF['site_name'] . ': ' . stripslashes($A['title'])); 
+        $story_template->set_var('story_title',stripslashes($A['title']));
+        if( empty( $LANG_CHARSET )) {
+            $charset = $_CONF['default_charset'];
+            if( empty( $charset )) {
+                $charset = 'iso-8859-1';
+            }
+        } else {
+            $charset = $LANG_CHARSET;
+        }
+        header ('Content-Type: text/html; charset='. $charset);
+        $curtime = COM_getUserDateTimeFormat($A['day']);
+        $story_template->set_var('story_date', $curtime[0]);
+
+        if ($_CONF['contributedbyline'] == 1) {
+            $story_template->set_var('lang_contributedby', $LANG01[1]);
+            $story_template->set_var('story_author', $A['username']);
+        }
+
+        if ($A['postmode'] == 'plaintext') {
+            $A['introtext'] = nl2br ($A['introtext']);
+            $A['bodytext'] = nl2br ($A['bodytext']);
+        }
+        $story_template->set_var ('story_introtext',
+                PLG_replaceTags (stripslashes ($A['introtext'])));
+        $story_template->set_var ('story_bodytext',
+                PLG_replaceTags (stripslashes ($A['bodytext'])));
+
+        $story_template->set_var('site_url', $_CONF['site_url']);
+        $story_template->set_var('layout_url', $_CONF['layout_url']);
+        $story_template->set_var('story_id', $A['sid']);
+        $story_template->set_var('story_comments', DB_count($_TABLES['comments'],'sid',$A['sid']));
+        $story_template->set_var('lang_comments', $LANG01[3]);
+        $articleUrl = COM_buildUrl ($_CONF['site_url']
+                                    . '/article.php?story=' . $A['sid']);
+        $story_template->set_var ('article_url', $articleUrl);
+        $story_template->parse('output','article');
+        $display = $story_template->finish($story_template->get_var('output')); 
     } else {
-	$result = DB_query ("SELECT STRAIGHT_JOIN s.*, UNIX_TIMESTAMP(s.date) as day, "
-         . "u.username, u.fullname, u.photo, t.topic, t.imageurl "
-         . "FROM {$_TABLES['stories']} as s, {$_TABLES['users']} as u, {$_TABLES['topics']} as t "
-         . "WHERE (s.uid = u.uid) AND (s.tid = t.tid) AND (sid = '$story')");
-        $A = DB_fetchArray ($result);
-
-        $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                $A['perm_owner'], $A['perm_group'], $A['perm_members'],
-                $A['perm_anon']);
-        if (($access == 0) OR !SEC_hasTopicAccess ($A['tid']) OR
-            (($A['draft_flag'] == 1) AND !SEC_hasRights ('story.edit'))) {
-            $display .= COM_siteHeader ('menu')
-                     . COM_startBlock ($LANG_ACCESS['accessdenied'], '',
-                               COM_getBlockTemplate ('_msg_block', 'header'))
-                     . $LANG_ACCESS['storydenialmsg']
-                     . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
-                     . COM_siteFooter ();
-        } elseif (($mode == 'print') && ($_CONF['hideprintericon'] == 0)) {
-            $story_template = new Template($_CONF['path_layout'] . 'article');
-            $story_template->set_file('article','printable.thtml');
-            $story_template->set_var('page_title',
-                    $_CONF['site_name'] . ': ' . stripslashes($A['title'])); 
-            $story_template->set_var('story_title',stripslashes($A['title']));
-            $curtime = COM_getUserDateTimeFormat($A['day']);
-            $story_template->set_var('story_date', $curtime[0]);
- 
-            if ($_CONF['contributedbyline'] == 1) {
-                $story_template->set_var('lang_contributedby', $LANG01[1]);
-                $story_template->set_var('story_author', DB_getItem($_TABLES['users'],'username',"uid = '{$A['uid']}'"));
-            }
-            if ($A['postmode'] == 'html') {
-                $story_template->set_var ('story_introtext',
-                        stripslashes ($A['introtext']));
-                $story_template->set_var ('story_bodytext',
-                        stripslashes ($A['bodytext']));
-            } else {
-                $story_template->set_var ('story_introtext',
-                        nl2br (stripslashes ($A['introtext'])));
-                $story_template->set_var ('story_bodytext',
-                        nl2br (stripslashes ($A['bodytext'])));
-            }
-            $story_template->set_var('site_url',$_CONF['site_url']);
-            $story_template->set_var('layout_url',$_CONF['layout_url']);
-            $story_template->set_var('story_id', $A['sid']);
-            $story_template->set_var('story_comments', DB_count($_TABLES['comments'],'sid',$A['sid']));
-            $story_template->set_var('lang_comments', $LANG01[3]);
-            $articleUrl = COM_buildUrl ($_CONF['site_url']
-                                        . '/article.php?story=' . $A['sid']);
-            $story_template->set_var ('article_url', $articleUrl);
-            $story_template->parse('output','article');
-            $display = $story_template->finish($story_template->get_var('output')); 
+        // Set page title
+        $pagetitle = stripslashes (str_replace ('$', '&#36;', $A['title']));
+
+        $rdf = '';
+        if ($A['trackbackcode'] == 0) {
+            if ($_CONF['trackback_enabled']) {
+                $permalink = COM_buildUrl ($_CONF['site_url']
+                                           . '/article.php?story=' . $story);
+                $trackbackurl = TRB_makeTrackbackUrl ($story);
+                $rdf = '<!--' . LB
+                     . TRB_trackbackRdf ($permalink, $A['title'], $trackbackurl)
+                     . LB . '-->' . LB;
+            }
+            if ($_CONF['pingback_enabled']) {
+                header ('X-Pingback: ' . $_CONF['site_url'] . '/pingback.php');
+            }
+        }
+        $display .= COM_siteHeader ('menu', $pagetitle, $rdf);
+
+        DB_query ("UPDATE {$_TABLES['stories']} SET hits = hits + 1 WHERE (sid = '$story') AND (date <= NOW()) AND (draft_flag = 0)");
+
+        // Display whats related
+
+        $story_template = new Template($_CONF['path_layout'] . 'article');
+        $story_template->set_file('article','article.thtml');
+
+        $story_template->set_var('site_url', $_CONF['site_url']);
+        $story_template->set_var('layout_url', $_CONF['layout_url']);
+        $story_template->set_var('story_id', $story);
+        $story_options = array ();
+        if (($_CONF['hideemailicon'] == 0) && (!empty ($_USER['username']) ||
+                (($_CONF['loginrequired'] == 0) &&
+                 ($_CONF['emailstoryloginrequired'] == 0)))) {
+            $emailUrl = $_CONF['site_url'] . '/profiles.php?sid=' . $story
+                      . '&amp;what=emailstory';
+            $story_options[] = '<a href="' . $emailUrl . '">' . $LANG11[2]
+                             . '</a>';
+            $story_template->set_var ('email_story_url', $emailUrl);
+            $story_template->set_var ('lang_email_story', $LANG11[2]);
+            $story_template->set_var ('lang_email_story_alt', $LANG01[64]);
+        }
+        $printUrl = COM_buildUrl ($_CONF['site_url']
+                . '/article.php?story=' . $story .  '&amp;mode=print');
+        if ($_CONF['hideprintericon'] == 0) {
+            $story_options[] = '<a href="' . $printUrl . '">' . $LANG11[3]
+                             . '</a>';
+            $story_template->set_var ('print_story_url', $printUrl);
+            $story_template->set_var ('lang_print_story', $LANG11[3]);
+            $story_template->set_var ('lang_print_story_alt', $LANG01[65]);
+        }
+        if ($_CONF['pdf_enabled'] == 1) {
+            $pdfUrl = $_CONF['site_url']
+                    . '/pdfgenerator.php?pageType=2&amp;pageData='
+                    . urlencode ($printUrl);
+            $story_options[] = '<a href="' . $pdfUrl . '">' . $LANG11[5]
+                             . '</a>';
+            $story_template->set_var ('pdf_story_url', $printUrl);
+            $story_template->set_var ('lang_pdf_story', $LANG11[5]);
+        }
+        $related = STORY_whatsRelated ($A['related'], $A['uid'], $A['tid']);
+        if (!empty ($related)) {
+            $related = COM_startBlock ($LANG11[1], '',
+                COM_getBlockTemplate ('whats_related_block', 'header'))
+                . $related
+                . COM_endBlock (COM_getBlockTemplate ('whats_related_block',
+                    'footer'));
+        }
+        if (count ($story_options) > 0) {
+            $optionsblock = COM_startBlock ($LANG11[4], '',
+                    COM_getBlockTemplate ('story_options_block', 'header'))
+                . COM_makeList ($story_options, 'list-story-options')
+                . COM_endBlock (COM_getBlockTemplate ('story_options_block',
+                    'footer'));
         } else {
-            // Set page title
-            $_CONF['pagetitle'] = stripslashes (str_replace ('$', '&#36;',
-                                                $A['title']));
-            $display .= COM_siteHeader ('menu');
-
-            DB_query ("UPDATE {$_TABLES['stories']} SET hits = hits + 1 WHERE (sid = '$story') AND (date <= NOW()) AND (draft_flag = 0)");
-
-            if (!empty ($query)) {
-                $A['introtext'] = COM_highlightQuery ($A['introtext'], $query);
-                $A['bodytext'] = COM_highlightQuery ($A['bodytext'], $query);
-            }
-
-            // Display whats related any polls configured for this page
-
-            $story_template = new Template($_CONF['path_layout'] . 'article');
-            $story_template->set_file('article','article.thtml');
-
-            $story_template->set_var('site_url', $_CONF['site_url']);
-            $story_template->set_var('layout_url', $_CONF['layout_url']);
-            $story_options = array ();
-            if ($_CONF['hideemailicon'] == 0) {
-                $emailUrl = $_CONF['site_url'] . '/profiles.php?sid=' . $story
-                          . '&amp;what=emailstory';
-                $story_options[] = '<a href="' . $emailUrl . '">' . $LANG11[2]
-                                 . '</a>';
-                $story_template->set_var ('email_story_url', $emailUrl);
-                $story_template->set_var ('lang_email_story', $LANG11[2]);
-                $story_template->set_var ('lang_email_story_alt', $LANG01[64]);
-            }
-            $printUrl = COM_buildUrl ($_CONF['site_url']
-                    . '/article.php?story=' . $story .  '&amp;mode=print');
-            if ($_CONF['hideprintericon'] == 0) {
-                $story_options[] = '<a href="' . $printUrl . '">' . $LANG11[3]
-                                 . '</a>';
-                $story_template->set_var ('print_story_url', $printUrl);
-                $story_template->set_var ('lang_print_story', $LANG11[3]);
-                $story_template->set_var ('lang_print_story_alt', $LANG01[65]);
-            }
-            if ($_CONF['pdf_enabled'] == 1) {
-                $pdfUrl = $_CONF['site_url']
-                        . '/pdfgenerator.php?pageType=2&amp;pageData='
-                        . urlencode ($printUrl);
-                $story_options[] = '<a href="' . $pdfUrl . '">' . $LANG11[5]
-                                 . '</a>';
-                $story_template->set_var ('pdf_story_url', $printUrl);
-                $story_template->set_var ('lang_pdf_story', $LANG11[5]);
-            }
-            $related = STORY_whatsRelated ($A['related'], $A['uid'], $A['tid']);
-            if (!empty ($related)) {
-                $related = COM_startBlock ($LANG11[1], '',
-                    COM_getBlockTemplate ('whats_related_block', 'header'))
-                    . $related
-                    . COM_endBlock (COM_getBlockTemplate ('whats_related_block',
-                        'footer'));
-            }
-            if (count ($story_options) > 0) {
-                $optionsblock = COM_startBlock ($LANG11[4], '',
-                        COM_getBlockTemplate ('story_options_block', 'header'))
-                    . COM_makeList ($story_options, 'list-story-options')
-                    . COM_endBlock (COM_getBlockTemplate ('story_options_block',
-                        'footer'));
+            $optionsblock = '';
+        }
+        $story_template->set_var ('whats_related', $related);
+        $story_template->set_var ('story_options', $optionsblock);
+        $story_template->set_var ('whats_related_story_options',
+                                  $related . $optionsblock);
+
+        $story_template->set_var ('formatted_article',
+                                  STORY_renderArticle ($A, 'n', '', $query));
+
+        // display comments or not?
+        if ( (is_numeric($mode)) and ($_CONF['allow_page_breaks'] == 1) )
+        {
+            $story_page = $mode;
+            $mode = '';
+            if( $story_page <= 0 ) {
+                $story_page = 1;
+            }
+            $article_arr = explode( '[page_break]', $A['bodytext']);
+            $conf = $_CONF['page_break_comments'];
+            if  (
+                 ($conf == 'all') or
+                 ( ($conf =='first') and ($story_page == 1) ) or
+                 ( ($conf == 'last') and (count($article_arr) == ($story_page)) )
+                ) {
+                $show_comments = true;
             } else {
-                $optionsblock = '';
+                $show_comments = false;
             }
-            $story_template->set_var ('whats_related', $related);
-            $story_template->set_var ('story_options', $optionsblock);
-            $story_template->set_var ('whats_related_story_options',
-                    $related . $optionsblock);
-
-            // if (DB_count($_TABLES['pollquestions'],'qid',$story) > 0) {
-            //     $display .= COM_showPoll(80,$story);
-            // }
-
-            $story_template->set_var ('formatted_article',
-                                      STORY_renderArticle ($A, 'n'));
-            // Display the comments, if there are any ..
-            if ($A['commentcode'] >= 0) {
-                $delete_option = (SEC_hasRights('story.edit') && ($access == 3)
-                                 ? true : false);
-                $story_template->set_var ('commentbar',
-                        COM_userComments ($story, $A['title'], 'article',
-                                          $order, $mode, 0, $page, false, $delete_option));
+        } else {
+            $show_comments = true;
+        }
+
+        // Display the comments, if there are any ..
+        if (($A['commentcode'] >= 0) and $show_comments) {
+            $delete_option = (SEC_hasRights('story.edit') && ($access == 3)
+                             ? true : false);
+            require_once ( $_CONF['path_system'] . 'lib-comment.php' );
+            $story_template->set_var ('commentbar',
+                    CMT_userComments ($story, $A['title'], 'article',
+                                      $order, $mode, 0, $page, false, $delete_option));
+        }
+        if ($_CONF['trackback_enabled'] && ($A['trackbackcode'] >= 0) &&
+                $show_comments) {
+            if (SEC_hasRights ('story.ping')) {
+                if (($A['draft_flag'] == 0) && ($A['day'] < time ())) {
+                    $url = $_CONF['site_admin_url']
+                         . '/trackback.php?mode=sendall&amp;id=' . $A['sid'];
+                    $story_template->set_var ('send_trackback_link', '<a href="'
+                         . $url . '">' . $LANG_TRB['send_trackback'] . '</a>');
+                    $story_template->set_var ('send_trackback_url', $url);
+                    $story_template->set_var ('lang_send_trackback_text',
+                                              $LANG_TRB['send_trackback']);
+                }
             }
-            $display .= $story_template->finish ($story_template->parse ('output', 'article'));
-            $display .= COM_siteFooter ();
+
+            $permalink = COM_buildUrl ($_CONF['site_url']
+                                       . '/article.php?story=' . $story);
+            $story_template->set_var ('trackback',
+                    TRB_renderTrackbackComments ($story, 'article',
+                                                 $A['title'], $permalink));
+        } else {
+            $story_template->set_var ('trackback', '');
         }
+        $display .= $story_template->finish ($story_template->parse ('output', 'article'));
+        $display .= COM_siteFooter ();
     }
 } else {
     $display .= COM_refresh($_CONF['site_url'] . '/index.php');
 }
+
 echo $display;
 
 ?>
diff -ruN 1.3.11sr1/calendar_event.php 1.4.0sr5-1/calendar_event.php
--- 1.3.11sr1/calendar_event.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/calendar_event.php	2006-08-08 02:53:59.000000000 -0500
@@ -8,12 +8,12 @@
 // |                                                                           |
 // | Shows details of an event or events                                       |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: calendar_event.php,v 1.38 2004/12/15 14:55:09 dhaun Exp $
+// $Id: calendar_event.php,v 1.45 2005/11/14 10:28:00 ospiess Exp $
 
 require_once ('lib-common.php');
 require_once ($_CONF['path_system'] . 'classes/calendar.class.php');
@@ -158,6 +158,9 @@
     $cal_templates->set_var('site_url', $_CONF['site_url']);
     $cal_templates->set_var('layout_url', $_CONF['layout_url']);
     $cal_templates->set_var('lang_title', $LANG12[10]);
+    $A['title'] = str_replace('{','&#123;',$A['title']);
+    $A['title'] = str_replace('}','&#125;',$A['title']);
+    $A['title'] = str_replace('"','&quot;',$A['title']);
     $cal_templates->set_var('event_title', stripslashes ($A['title']));
     $cal_templates->set_var('lang_eventtype', $LANG12[49]);
     $etypes = explode(',',$_CONF['event_types']);
@@ -459,8 +462,14 @@
     break;
 
 default:
-    $mode = COM_applyFilter ($_GET['mode']);
-    $eid = COM_applyFilter ($_GET['eid']);
+    $mode = '';
+    if (isset ($_GET['mode'])) {
+        $mode = COM_applyFilter ($_GET['mode']);
+    }
+    $eid = '';
+    if (isset ($_GET['eid'])) {
+        $eid = COM_applyFilter ($_GET['eid']);
+    }
     if (!empty ($eid)) {
         if (($mode == 'personal') && ($_CONF['personalcalendars'] == 1) &&
                 (isset ($_USER['uid']) && ($_USER['uid'] > 1))) {
@@ -473,15 +482,25 @@
             } else {
                 $pagetitle = sprintf ($LANG30[9], $_CONF['site_name']);
             }
+            DB_query ("UPDATE {$_TABLES['events']} SET hits = hits + 1 WHERE eid = '$eid'");
         }
 
         $display .= COM_siteHeader ('menu', $pagetitle);
         $display .= COM_startBlock ($pagetitle);
 
     } else {
-        $year = COM_applyFilter ($_GET['year'], true);
-        $month = COM_applyFilter ($_GET['month'], true);
-        $day = COM_applyFilter ($_GET['day'], true);
+        $year = 0;
+        if (isset ($_GET['year'])) {
+            $year = COM_applyFilter ($_GET['year'], true);
+        }
+        $month = 0;
+        if (isset ($_GET['month'])) {
+            $month = COM_applyFilter ($_GET['month'], true);
+        }
+        $day = 0;
+        if (isset ($_GET['day'])) {
+            $day = COM_applyFilter ($_GET['day'], true);
+        }
         if (($year == 0) || ($month == 0) || ($day == 0)) {
             $year = date ('Y');
             $month = date ('n');
@@ -494,7 +513,7 @@
         $display .= COM_startBlock ($pagetitle);
 
         $thedate = sprintf ('%4d-%02d-%02d', $year, $month, $day);
-        $datesql = "SELECT *,datestart AS start,dateend AS end FROM {$_TABLES['events']} WHERE \"$thedate\" BETWEEN DATE_FORMAT(datestart,'%Y-%m-%d') and DATE_FORMAT(dateend,'%Y-%m-%d') ORDER BY datestart ASC,title";
+        $datesql = "SELECT *,datestart AS start,dateend AS end FROM {$_TABLES['events']} WHERE \"$thedate\" BETWEEN DATE_FORMAT(datestart,'%Y-%m-%d') and DATE_FORMAT(dateend,'%Y-%m-%d') ORDER BY datestart ASC,timestart ASC,title";
     }
     $cal_templates = new Template($_CONF['path_layout'] . 'calendar');
     $cal_templates->set_file (array (
@@ -567,7 +586,7 @@
                     $cal_templates->parse('addremove_event','addremove');
                 }
                 $cal_templates->set_var('lang_when', $LANG02[3]);
-                if ($A['allday'] == 0 OR ($A['allday'] == 1 AND $A['start'] <> $A['end'])) {
+                if ($A['allday'] == 0) {
                     $thedatetime = COM_getUserDateTimeFormat ($A['start'] . ' '
                                                             . $A['timestart']);
                     $cal_templates->set_var ('event_start', $thedatetime[0]);
@@ -580,6 +599,14 @@
                                                         . ' ' . $A['timeend']);
                     }
                     $cal_templates->set_var ('event_end', $thedatetime[0]);
+                } elseif ($A['allday'] == 1 AND $A['start'] <> $A['end']) {
+                    $thedatetime1 = strftime ('%A, ' . $_CONF['shortdate'],
+                                             strtotime ($A['start']));
+                    $cal_templates->set_var ('event_start', $thedatetime1);
+                    $thedatetime2 = strftime ('%A, ' . $_CONF['shortdate'],
+                                                  strtotime ($A['end']));
+                    $cal_templates->set_var ('event_end', $thedatetime2
+                                                        . ' ' . $LANG30[26]);
                 } else {
                     $thedatetime = strftime ('%A, ' . $_CONF['shortdate'],
                                              strtotime ($A['start']));
@@ -640,23 +667,26 @@
                 }
 
                 $cal_templates->set_var ('lang_description', $LANG02[5]);
+                if ($A['postmode'] == 'plaintext') {
+                    $A['description'] = nl2br ($A['description']);
+                }
                 $cal_templates->set_var ('event_description',
-                        nl2br (stripslashes ($A['description'])));
+                                            stripslashes ($A['description']));
                 $cal_templates->set_var ('lang_event_type', $LANG12[49]);
                 $cal_templates->set_var ('event_type', $A['event_type']);
                 $cal_templates->parse ('event_details', 'details', true); 
             }
         }
 
-        if ($mode == personal) {
+        if ($mode == 'personal') {
             $editurl = $_CONF['site_url'] . '/calendar_event.php?action=edit'
                      . '&amp;eid=' . $eid;
             $cal_templates->set_var ('event_edit', '<a href="' .$editurl . '">'
                     . $LANG01[4] . '</a>');
             $cal_templates->set_var ('edit_icon', '<a href="' . $editurl
                     . '"><img src="' . $_CONF['layout_url']
-                    . '/images/edit.gif" alt="' . $LANG01[4] . '" title="'
-                    . $LANG01[4] . '" border="0"></a>');
+                    . '/images/edit.' . $_IMAGE_TYPE . '" alt="' . $LANG01[4]
+                    . '" title="' . $LANG01[4] . '" border="0"></a>');
         } else if ((SEC_hasAccess ($A['owner_id'], $A['group_id'],
                 $A['perm_owner'], $A['perm_group'], $A['perm_members'],
                 $A['perm_anon']) == 3) && SEC_hasRights ('event.edit')) {
@@ -666,12 +696,17 @@
                     . $LANG01[4] . '</a>');
             $cal_templates->set_var ('edit_icon', '<a href="' . $editurl
                     . '"><img src="' . $_CONF['layout_url']
-                    . '/images/edit.gif" alt="' . $LANG01[4] . '" title="'
-                    . $LANG01[4] . '" border="0"></a>');
+                    . '/images/edit.' . $_IMAGE_TYPE . '" alt="' . $LANG01[4]
+                    . '" title="' . $LANG01[4] . '" border="0"></a>');
+            $cal_templates->set_var ('hits_admin',
+                                     COM_numberFormat ($A['hits']));
+            $cal_templates->set_var ('lang_hits_admin', $LANG10[30]);
         } else {
             $cal_templates->set_var ('event_edit', '');
             $cal_templates->set_var ('edit_icon', '');
         }
+        $cal_templates->set_var ('hits', COM_numberFormat ($A['hits']));
+        $cal_templates->set_var ('lang_hits', $LANG10[30]);
 
         $cal_templates->parse ('output', 'events');
         $display .= $cal_templates->finish ($cal_templates->get_var ('output'));
diff -ruN 1.3.11sr1/calendar.php 1.4.0sr5-1/calendar.php
--- 1.3.11sr1/calendar.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/calendar.php	2006-08-08 02:53:59.000000000 -0500
@@ -8,12 +8,12 @@
 // |                                                                           |
 // | Geeklog calendar.                                                         |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: calendar.php,v 1.54 2004/12/15 20:51:46 dhaun Exp $
+// $Id: calendar.php,v 1.57 2005/12/22 09:01:26 dhaun Exp $
 
 require_once ('lib-common.php');
 require_once ($_CONF['path_system'] . 'classes/calendar.class.php');
@@ -78,6 +78,7 @@
     $thedata = array();
     $nrows = DB_numRows($result);
 
+    $alldaydata = array ();
     for ($i = 1; $i <= $nrows; $i++) {
         $A = DB_fetchArray($result);
         if ($A['allday'] == 1 OR (($A['datestart'] < date('Y-m-d',$cur_time)) AND ($A['dateend'] > date('Y-m-d',$cur_time)))) {
@@ -133,27 +134,66 @@
     $aCalendar->setLanguage ($lang_days, $lang_months, $_CONF['week_start']);
 }
 
+/**
+* Returns an abbreviated day's name
+*
+* Note: This is a workaround, to be replaced with something more sensible
+*       in future versions ...
+*
+* @param    int     $day    1 = Sunday, 2 = Monday, ...
+* @return   string          abbreviated day's name (3 characters)
+*
+* The problem here is that substr may return nonsense for UTF-8 strings, but
+* mb_substr may not be available.
+*
+*/
+function shortDaysName ($day)
+{
+    global $LANG_CHARSET, $LANG30;
+
+    static $mb_enabled;
+
+    if (!isset ($mb_enabled)) {
+        $mb_enabled = function_exists ('mb_substr');
+    }
+
+    $shortday = '';
+    if ($mb_enabled) {
+        // when mb_substr is available, use it
+        $shortday = mb_substr ($LANG30[$day], 0, 2, $LANG_CHARSET);
+    } else if ($LANG_CHARSET == 'utf-8') {
+        // no mb_substr, but UTF-8 string: cheat and hope that the locale
+        // matches the current language ...
+        // Note: May 1st, 2005 was a Sunday
+        $shortday = date ('D', mktime (0, 0, 0, 5, $day, 2005));
+    } else {
+        $shortday = substr ($LANG30[$day], 0, 2);
+    }
+
+    return $shortday;
+}
+
 function makeDaysHeadline ()
 {
     global $_CONF, $LANG30;
 
     $retval = '<tr><th>';
     if ($_CONF['week_start'] == 'Mon') {
-        $retval .= substr ($LANG30[2], 0, 2) . '</th><th>'
-                . substr ($LANG30[3], 0, 2) . '</th><th>'
-                . substr ($LANG30[4], 0, 2) . '</th><th>'
-                . substr ($LANG30[5], 0, 2) . '</th><th>'
-                . substr ($LANG30[6], 0, 2) . '</th><th>'
-                . substr ($LANG30[7], 0, 2) . '</th><th>'
-                . substr ($LANG30[1], 0, 2) . '</th></tr>';
-    } else {
-        $retval .= substr ($LANG30[1], 0, 2) . '</th><th>'
-                . substr ($LANG30[2], 0, 2) . '</th><th>'
-                . substr ($LANG30[3], 0, 2) . '</th><th>'
-                . substr ($LANG30[4], 0, 2) . '</th><th>'
-                . substr ($LANG30[5], 0, 2) . '</th><th>'
-                . substr ($LANG30[6], 0, 2) . '</th><th>'
-                . substr ($LANG30[7], 0, 2) . '</th></tr>';
+        $retval .= shortDaysName (2) . '</th><th>'
+                . shortDaysName (3) . '</th><th>'
+                . shortDaysName (4) . '</th><th>'
+                . shortDaysName (5) . '</th><th>'
+                . shortDaysName (6) . '</th><th>'
+                . shortDaysName (7) . '</th><th>'
+                . shortDaysName (1) . '</th></tr>';
+    } else {
+        $retval .= shortDaysName (1) . '</th><th>'
+                . shortDaysName (2) . '</th><th>'
+                . shortDaysName (3) . '</th><th>'
+                . shortDaysName (4) . '</th><th>'
+                . shortDaysName (5) . '</th><th>'
+                . shortDaysName (6) . '</th><th>'
+                . shortDaysName (7) . '</th></tr>';
     }
 
     return $retval;
@@ -194,7 +234,7 @@
 */
 function getDeleteImageLink ($mode, $A)
 {
-    global $_CONF, $LANG22, $LANG30;
+    global $_CONF, $LANG22, $LANG30, $_IMAGE_TYPE;
 
     $retval = '';
 
@@ -205,8 +245,9 @@
             $retval = '<a href="' . $_CONF['site_url']
                     . '/calendar_event.php?action=deleteevent&amp;eid='
                     . $A['eid'] . '"><img src="' . $_CONF['layout_url']
-                    . '/images/icons/delete_event.gif" border="0" alt="'
-                    . $LANG30[30] . '" title="' . $LANG30[30] . '"></a>';
+                    . '/images/icons/delete_event.' . $_IMAGE_TYPE
+                    . '" border="0" alt="' . $LANG30[30] . '" title="'
+                    . $LANG30[30] . '"></a>';
         }
     } else if (SEC_hasRights ('event.edit')) {
         if (SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'],
@@ -215,8 +256,9 @@
             $retval = '<a href="' . $_CONF['site_admin_url']
                     . '/event.php?mode=' . $LANG22[22] . '&amp;eid='
                     . $A['eid'] . '"><img src="' . $_CONF['layout_url']
-                    . '/images/icons/delete_event.gif" border="0" alt="'
-                    . $LANG30[30] . '" title="' . $LANG30[30] . '"></a>';
+                    . '/images/icons/delete_event.' . $_IMAGE_TYPE
+                    . '" border="0" alt="' . $LANG30[30] . '" title="'
+                    . $LANG30[30] . '"></a>';
         }
     }
 
@@ -391,9 +433,18 @@
     $view = '';
 }
 
-$year = COM_applyFilter ($_REQUEST['year'], true);
-$month = COM_applyFilter ($_REQUEST['month'], true);
-$day = COM_applyFilter ($_REQUEST['day'], true);
+$year = 0;
+if (isset ($_REQUEST['year'])) {
+    $year = COM_applyFilter ($_REQUEST['year'], true);
+}
+$month = 0;
+if (isset ($_REQUEST['month'])) {
+    $month = COM_applyFilter ($_REQUEST['month'], true);
+}
+$day = 0;
+if (isset ($_REQUEST['day'])) {
+    $day = COM_applyFilter ($_REQUEST['day'], true);
+}
 
 // Create new calendar object
 $cal = new Calendar();
@@ -929,7 +980,8 @@
     $cal_templates->set_var('lang_mastercal', $LANG30[25] . $LANG30[11]);
     $cal_templates->parse('master_calendar_option','mastercal',true); 
 } else {
-    if ($_USER['uid'] > 1 AND $_CONF['personalcalendars'] == 1) {
+    if (isset ($_USER['uid']) && ($_USER['uid'] > 1) &&
+            ($_CONF['personalcalendars'] == 1)) {
         $cal_templates->set_var('lang_mycalendar', $LANG30[12]);
         $cal_templates->parse('personal_calendar_option','personalcal',true); 
     } else {
diff -ruN 1.3.11sr1/comment.php 1.4.0sr5-1/comment.php
--- 1.3.11sr1/comment.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/comment.php	2006-08-08 02:53:59.000000000 -0500
@@ -6,15 +6,15 @@
 // +---------------------------------------------------------------------------+
 // | comment.php                                                               |
 // |                                                                           |
-// | Let user comment on a story, poll, or plugin.                             |
+// | Let user comment on a story or plugin.                                    |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
 // | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
 // |          Mark Limburg      - mlimburg@users.sourceforge.net               |
 // |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
 // |          Dirk Haun         - dirk@haun-online.de                          |
-// |          Vincent Furia     - vinny01@users.sourceforge.net                |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -33,7 +33,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: comment.php,v 1.85 2004/12/16 11:09:51 dhaun Exp $
+// $Id: comment.php,v 1.100 2005/12/06 05:03:15 vinny Exp $
 
 /**
 * This file is responsible for letting user enter a comment and saving the
@@ -41,6 +41,7 @@
 *
 * @author   Jason Whittenburg
 * @author   Tony Bibbs  <tony@tonybibbs.com>
+* @author   Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
 *
 */
 
@@ -49,657 +50,189 @@
 */
 require_once('lib-common.php');
 
+/**
+ * Geeklog comment function library
+ */
+require_once( $_CONF['path_system'] . 'lib-comment.php' );
+
 // Uncomment the line below if you need to debug the HTTP variables being passed
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
 // echo COM_debug($_POST);
 
 /**
-* Displays the comment form
-*
-* @param    int     $uid        User ID
-* @param    string  $title      Title of comment
-* @param    string  $comment    Text of comment
-* @param    string  $sid        ID of object comment belongs to
-* @param    int     $pid        ID of parent comment
-* @param    string  $type       Type of object comment is posted to
-* @param    string  $mode       Mode, e.g. 'preview'
-* @param    string  $postmode   Indicates if comment is plain text or HTML
-* @return   string  HTML for comment form
-*
-*/
-function commentform($uid,$title,$comment,$sid,$pid='0',$type,$mode,$postmode) 
-{
-    global $_CONF, $_TABLES, $_USER, $LANG03, $LANG12, $LANG_LOGIN;
-
-    $retval = '';
-
-    // never trust $uid ...
-    if (empty ($_USER['uid'])) {
-        $uid = 1;
-    } else {
-        $uid = $_USER['uid'];
-    }
-
-    if (empty($_USER['username']) &&
-        (($_CONF['loginrequired'] == 1) || ($_CONF['commentsloginrequired'] == 1))) {
-        $retval .= COM_startBlock ($LANG_LOGIN[1], '',
-                           COM_getBlockTemplate ('_msg_block', 'header'));
-        $loginreq = new Template($_CONF['path_layout'] . 'submit');
-        $loginreq->set_file('loginreq', 'submitloginrequired.thtml');
-        $loginreq->set_var('login_message', $LANG_LOGIN[2]);
-        $loginreq->set_var('site_url', $_CONF['site_url']);
-        $loginreq->set_var('lang_login', $LANG_LOGIN[3]);
-        $loginreq->set_var('lang_newuser', $LANG_LOGIN[4]);
-        $loginreq->parse('errormsg', 'loginreq');
-        $retval .= $loginreq->finish($loginreq->get_var('errormsg'));
-        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        return $retval;
-    } else {
-        COM_clearSpeedlimit ($_CONF['commentspeedlimit'], 'comment');
-
-        $last = COM_checkSpeedlimit ('comment');
-
-        if ($last > 0) {
-            $retval .= COM_startBlock ($LANG12[26], '',
-                               COM_getBlockTemplate ('_msg_block', 'header'))
-                . $LANG03[7]
-                . $last
-                . $LANG03[8]
-                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        } else {
-
-            if (empty ($postmode)) {
-                $postmode = $_CONF['postmode'];
-            }
-
-            $sig = '';
-            if ($uid > 1) {
-                $sig = DB_getItem ($_TABLES['users'], 'sig', "uid = '$uid'");
-            }
-
-            // Note:
-            // $comment / $newcomment is what goes into the preview / is
-            // actually stored in the database -> strip HTML
-            // $commenttext is what the user entered and goes back into the
-            // <textarea> -> don't strip HTML
-
-            $commenttext = htmlspecialchars (COM_stripslashes ($comment));
-
-            $fakepostmode = $postmode;
-            if ($postmode == 'html') {
-                $comment = COM_checkWords (COM_checkHTML (addslashes (COM_stripslashes ($comment))));
-            } else {
-                $comment = htmlspecialchars (COM_checkWords (COM_stripslashes ($comment)));
-                $newcomment = COM_makeClickableLinks ($comment);
-                if (strcmp ($comment, $newcomment) != 0) {
-                    $comment = nl2br ($newcomment);
-                    $fakepostmode = 'html';
-                }
-            }
-            // Replace $, {, and } with special HTML equivalents
-            $commenttext = str_replace('$','&#36;',$commenttext);
-            $commenttext = str_replace('{','&#123;',$commenttext);
-            $commenttext = str_replace('}','&#125;',$commenttext);
-
-            $title = htmlspecialchars (COM_checkWords (strip_tags (COM_stripslashes ($title))));
-            // $title = str_replace('$','&#36;',$title); done in COM_getComment
-            $title = str_replace('{','&#123;',$title);
-            $title = str_replace('}','&#125;',$title);
-
-            $_POST['title'] = addslashes ($title);
-            $newcomment = $comment;
-            if (!empty ($sig)) {
-                if (($postmode == 'html') || ($fakepostmode == 'html')) {
-                    $newcomment .= '<p>---<br>' . nl2br ($sig);
-                } else {
-                    $newcomment .= LB . LB . '---' . LB . $sig;
-                }
-            }
-            $_POST['comment'] = addslashes ($newcomment);
-
-            if ($mode == $LANG03[14] && !empty($title) && !empty($comment) ) {
-                $start = new Template( $_CONF['path_layout'] . 'comment' );
-                $start->set_file( array( 'comment' => 'startcomment.thtml' ));
-                $start->set_var( 'site_url', $_CONF['site_url'] );
-                $start->set_var( 'layout_url', $_CONF['layout_url'] );
-
-                if (empty ($_POST['username'])) {
-                    $_POST['username'] = DB_getItem ($_TABLES['users'],
-                            'username', "uid = $uid");
-                }
-                $thecomments = COM_getComment ($_POST, 'flat', $type,
-                                               'ASC', false, true );
-
-                $start->set_var( 'comments', $thecomments );
-                $retval .= COM_startBlock ($LANG03[14])
-                        . $start->finish( $start->parse( 'output', 'comment' ))
-                        . COM_endBlock ();
-            } else if ($mode == $LANG03[14]) {
-                $retval .= COM_startBlock ($LANG03[17], '',
-                               COM_getBlockTemplate ('_msg_block', 'header'))
-                    . $LANG03[12]
-                    . COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
-                $mode = 'error';
-            }
-
-            $comment_template = new Template($_CONF['path_layout'] . 'comment');
-            if (($_CONF['advanced_editor'] == 1) && file_exists ($_CONF['path_layout'] . 'comment/commentform_advanced.thtml')) {
-                $comment_template->set_file('form','commentform_advanced.thtml');
-            } else {
-                $comment_template->set_file('form','commentform.thtml');
-            }
-            $comment_template->set_var('site_url', $_CONF['site_url']);
-            $comment_template->set_var('start_block_postacomment', COM_startBlock($LANG03[1]));
-            $comment_template->set_var('lang_username', $LANG03[5]);
-            $comment_template->set_var('sid', $sid);
-            $comment_template->set_var('pid', $pid);
-            $comment_template->set_var('type', $type);
-
-            if (!empty($_USER['username'])) {
-                $comment_template->set_var('uid', $_USER['uid']);
-                $comment_template->set_var('username', $_USER['username']);
-                $comment_template->set_var('action_url', $_CONF['site_url'] . '/users.php?mode=logout');
-                $comment_template->set_var('lang_logoutorcreateaccount', $LANG03[03]);
-            } else {
-                $comment_template->set_var('uid', 1);
-                $comment_template->set_var('username', $LANG03[24]);
-                $comment_template->set_var('action_url', $_CONF['site_url'] . '/users.php?mode=new'); 
-                $comment_template->set_var('lang_logoutorcreateaccount', $LANG03[04]);
-            }
-
-            $comment_template->set_var('lang_title', $LANG03[16]);
-            $comment_template->set_var('title', stripslashes($title));
-            $comment_template->set_var('lang_comment', $LANG03[9]);
-            $comment_template->set_var('comment', $commenttext);
-            $comment_template->set_var('lang_postmode', $LANG03[2]);
-            $comment_template->set_var('postmode_options', COM_optionList($_TABLES['postmodes'],'code,name',$postmode));
-            $comment_template->set_var('allowed_html', COM_allowedHTML());
-            $comment_template->set_var('lang_importantstuff', $LANG03[18]);
-            $comment_template->set_var('lang_instr_line1', $LANG03[19]);        
-            $comment_template->set_var('lang_instr_line2', $LANG03[20]);        
-            $comment_template->set_var('lang_instr_line3', $LANG03[21]);        
-            $comment_template->set_var('lang_instr_line4', $LANG03[22]);        
-            $comment_template->set_var('lang_instr_line5', $LANG03[23]);        
-            $comment_template->set_var('lang_preview', $LANG03[14]);
-
-            if (($_CONF['skip_preview'] == 1) || ($mode == $LANG03[14])) {
-                $comment_template->set_var('save_option', '<input type="submit" name="mode" value="' . $LANG03[11] . '">');
-            }
-
-            $comment_template->set_var('end_block', COM_endBlock());        
-            $comment_template->parse('output', 'form');
-            $retval .= $comment_template->finish($comment_template->get_var('output'));
-        }
-    }
-
-    return $retval;
-}
-
-/**
-* Save a comment
-*
-* @param        int         $uid        User ID of user making the comment
-* @param        string      $title      Title of comment
-* @param        string      $comment    Text of comment
-* @param        string      $sid        ID of object receiving comment
-* @param        int         $pid        ID of parent comment
-* @param        string      $type       Type of comment this is (article, poll, etc)
-* @param        string      $postmode   Indicates if text is HTML or plain text
-* @param        string        $prepocessed Indicates that preprocessing by another plugin
-*                                        i.e. Spamx has already occured
-* @return       string      either nothing or HTML formated error
-*
-*/
-function savecomment ($uid, $title, $comment, $sid, $pid, $type, $postmode) 
-{
-    global $_CONF, $_TABLES, $_USER, $LANG03;
-    
-    $retval = '';
-
-    // ignore $uid as it may be manipulated anyway
-    if (empty ($_USER['uid'])) {
-        $uid = 1;
-    } else {
-        $uid = $_USER['uid'];
-    }
-
-    if (empty ($sid) || empty ($title) || empty ($comment) || empty ($type) ||
-            (($uid == 1) && (($_CONF['loginrequired'] == 1) ||
-                ($_CONF['commentsloginrequired'] == 1)))) {
-        $retval .= COM_refresh ($_CONF['site_url'] . '/index.php');
-        return $retval;
-    }
-
-    // Check for people breaking the speed limit
-    COM_clearSpeedlimit ($_CONF['commentspeedlimit'], 'comment');
-    $last = COM_checkSpeedlimit ('comment');
-    if ($last > 0) {
-        $retval .= COM_startBlock ($LANG12[26], '', COM_getBlockTemplate ('_msg_block', 'header'))
-                . $LANG03[7]
-                . $last
-                . $LANG03[8]
-                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        return $retval;
-    }
-
-    // Let plugins have a chance to check for SPAM
-    $result = PLG_checkforSpam($comment, $_CONF['spamx']);
-    // Now check the result and redirect to index.php if spam action was taken
-    if ($result > 0) {
-        echo COM_refresh($_CONF['site_url'] . '/index.php?msg='.$result.'&amp;plugin=spamx');
-        exit;
-    }
-    // Let plugins have a chance to decide what to do before saving the comment.
-    $someError = PLG_commentPreSave($uid, $title, $comment, $sid, $pid, $type, $postmode);
-    
-    // If a plugin returned an error, return it
-    if ($someError) {
-        return $someError;
-    }
-    
-    $commentcode = 0;
-    if ($type == 'article') {
-        $commentcode = DB_getItem ($_TABLES['stories'], 'commentcode',
-                                   "sid = '$sid'");
-    } else if ($type == 'poll') {
-        $commentcode = DB_getItem ($_TABLES['pollquestions'], 'commentcode',
-                                   "qid = '$sid'");
-    }
-    if ($commentcode < 0) {
-        return COM_refresh ($_CONF['site_url'] . '/index.php');
-    }
-
-    // Clean 'em up a bit!
-    if ($postmode == 'html') {
-        $comment = COM_checkWords (COM_checkHTML (addslashes (COM_stripslashes ($comment))));
-    } else {
-        $comment = htmlspecialchars (COM_checkWords (COM_stripslashes ($comment)));
-        $newcomment = COM_makeClickableLinks ($comment);
-        if (strcmp ($comment, $newcomment) != 0) {
-            $comment = nl2br ($newcomment);
-            $postmode = 'html';
-        }
-    }
-
-    // Get signature
-    $sig = '';
-    if ($uid > 1) {
-        $sig = DB_getItem($_TABLES['users'],'sig', "uid = '$uid'");
-    }
-    if (!empty ($sig)) {
-        if ($postmode == 'html') {
-            $comment .= '<p>---<br>' . nl2br($sig);
-        } else {
-            $comment .= LB . LB . '---' . LB . $sig;
-        }
-    }
-
-    // check again for non-int pid's
-    // this should just create a top level comment that is a reply to the original item
-    if (!is_numeric($pid)) {
-        $pid = 0;
-    }
-
-    $title = htmlspecialchars (COM_checkWords (strip_tags (COM_stripslashes ($title))));
-
-    if (!empty ($title) && !empty ($comment)) {
-        COM_updateSpeedlimit ('comment');
-        $title = addslashes ($title);
-        $comment = addslashes ($comment);
-
-        // Insert the comment into the comment table
-        DB_query("LOCK TABLES {$_TABLES['comments']} WRITE");
-        if ($pid > 0) {
-            $result = DB_query("SELECT rht, indent FROM {$_TABLES['comments']} WHERE cid = $pid");
-            list($rht, $indent) = DB_fetchArray($result);
-            DB_query("UPDATE {$_TABLES['comments']} SET lft = lft + 2 "
-                   . "WHERE sid = '$sid' AND lft >= $rht");
-            DB_query("UPDATE {$_TABLES['comments']} SET rht = rht + 2 "
-                   . "WHERE sid = '$sid' AND rht >= $rht");
-            DB_save ($_TABLES['comments'], 'sid,uid,comment,date,title,pid,lft,rht,indent,type,ipaddress',
-                    "'$sid',$uid,'$comment',now(),'$title',$pid,$rht,$rht+1,$indent+1,'$type','{$_SERVER['REMOTE_ADDR']}'");
-        } else {
-            $rht = DB_getItem($_TABLES['comments'], 'MAX(rht)');
-            DB_save ($_TABLES['comments'], 'sid,uid,comment,date,title,pid,lft,rht,indent,type,ipaddress',
-                    "'$sid',$uid,'$comment',now(),'$title',$pid,$rht+1,$rht+2,0,'$type','{$_SERVER['REMOTE_ADDR']}'");
-        }
-        $cid = DB_insertId();
-        DB_query('UNLOCK TABLES');
-
-        if (isset ($_CONF['notification']) &&
-                in_array ('comment', $_CONF['notification'])) {
-            sendNotification ($title, $comment, $uid, $_SERVER['REMOTE_ADDR'],
-                              $type, $cid);
-        }
-
-        if ($type == 'poll') {
-            $retval = COM_refresh ($_CONF['site_url']
-                    . "/pollbooth.php?qid=$sid&aid=-1");
-        } elseif ($type == 'article') {
-            $comments = DB_count ($_TABLES['comments'], 'sid', $sid);
-            DB_change ($_TABLES['stories'], 'comments', $comments, 'sid', $sid);
-            COM_olderStuff (); // update comment count in Older Stories block
-            $retval = COM_refresh (COM_buildUrl ($_CONF['site_url']
+ * Hanldes a comment submission
+ *
+ * @copyright Vincent Furia 2005
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @return string HTML (possibly a refresh)
+ */
+function handleSubmit() {
+    global $_POST, $_TABLES, $_CONF, $LANG03;
+
+    $type = COM_applyFilter ($_POST['type']);
+    $sid = COM_applyFilter ($_POST['sid']);
+    switch ( $type ) {
+        case 'article':
+            $commentcode = DB_getItem ($_TABLES['stories'], 'commentcode',
+                                       "sid = '$sid'" . COM_getPermSQL('AND') . COM_getTopicSQL('AND'));
+            if (!isset($commentcode) || $commentcode < 0) {
+                return COM_refresh ($_CONF['site_url'] . '/index.php');
+            }
+
+            $ret = CMT_saveComment ( strip_tags ($_POST['title']), 
+                $_POST['comment'], $sid, COM_applyFilter ($_POST['pid'], true), 
+                'article', COM_applyFilter ($_POST['postmode']));
+
+            if ( $ret > 0 ) { // failure //FIXME: some failures should not return to comment form
+                $display .= COM_siteHeader()
+                    . CMT_commentform ($_USER['uid'], $_POST['title'], $_POST['comment'], $sid, 
+                                       $_POST['pid'], $type, $LANG03[14], $_POST['postmode'])
+                    . COM_siteFooter();
+            } else { // success
+                $comments = DB_count ($_TABLES['comments'], 'sid', $sid);
+                DB_change ($_TABLES['stories'], 'comments', $comments, 'sid', $sid);
+                COM_olderStuff (); // update comment count in Older Stories block
+                $display = COM_refresh (COM_buildUrl ($_CONF['site_url']
                     . "/article.php?story=$sid"));
-        } else { // assume it's a comment handled by a plugin
-            $cid = DB_getItem ($_TABLES['comments'], 'cid', "(type = '$type') AND (pid = '$pid') AND (sid = '$sid') AND (uid = '$uid')");
-            $retval = PLG_handlePluginComment ($type, $cid, 'save');
-            if (empty ($retval)) {
-                $retval = COM_refresh ($_CONF['site_url'] . '/index.php');
             }
-        }
-    } else {
-        $retval .= COM_siteHeader()
-            . commentform ($uid, $title, $comment, $sid, $pid, $type,
-                           $LANG03[14], $postmode)
-            . COM_siteFooter();
-    }
-
-    return $retval;
-}
-
-/**
-* Send an email notification for a new comment submission.
-*
-* @param    $title      string      comment title
-* @param    $comment    string      text of the comment
-* @param    $uid        integer     user id
-* @param    $ipaddress  string      poster's IP address
-* @param    $type       string      type of comment ('article', 'poll', ...)
-* @param    $cid        integer     comment id
-*
-*/
-function sendNotification ($title, $comment, $uid, $ipaddress, $type, $cid)
-{
-    global $_CONF, $_TABLES, $LANG03, $LANG08, $LANG09;
-
-    // we have to undo the addslashes() call from savecomment()
-    $title = stripslashes ($title);
-    $comment = stripslashes ($comment);
-
-    // strip HTML if posted in HTML mode
-    if (preg_match ('/<.*>/', $comment) != 0) {
-        $comment = strip_tags ($comment);
-    }
-
-    $author = DB_getItem ($_TABLES['users'], 'username', "uid = '$uid'");
-    if (($uid <= 1) && !empty ($ipaddress)) {
-        // add IP address for anonymous posters
-        $author .= ' (' . $ipaddress . ')';
-    }
-
-    $mailbody = "$LANG03[16]: $title\n"
-              . "$LANG03[5]: $author\n";
-
-    if (($type != 'article') && ($type != 'poll')) {
-        $mailbody .= "$LANG09[5]: $type\n";
-    }
-
-    if ($_CONF['emailstorieslength'] > 0) {
-        if ($_CONF['emailstorieslength'] > 1) {
-            $comment = substr ($comment, 0, $_CONF['emailstorieslength'])
-                     . '...';
-        }
-        $mailbody .= $comment . "\n\n";
+            break;
+        default: // assume plugin
+            if ( !($display = PLG_commentSave($type, strip_tags ($_POST['title']), 
+                                $_POST['comment'], $sid, COM_applyFilter ($_POST['pid'], true),
+                                COM_applyFilter ($_POST['postmode']))) ) {
+                $display = COM_refresh ($_CONF['site_url'] . '/index.php');
+            }
+            break;
     }
 
-    $mailbody .= $LANG08[33] . ' <' . $_CONF['site_url']
-              . '/comment.php?mode=view&cid=' . $cid . ">\n\n";
-
-    $mailbody .= "\n------------------------------\n";
-    $mailbody .= "\n$LANG08[34]\n";
-    $mailbody .= "\n------------------------------\n";
-
-    $mailsubject = $_CONF['site_name'] . ' ' . $LANG03[9];
-
-    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
+    return $display;
 }
 
 /**
-* Deletes a given comment
-*
-* @param    int         $cid    Comment ID
-* @param    string      $sid    ID of object comment belongs to
-* @param    string      $type   Comment type (e.g. article, poll, etc)
-* @return   string      Returns string needed to redirect page to right place
-*
-*/
-function deletecomment ($cid, $sid, $type) 
-{
-    global $_CONF, $_TABLES, $_USER;
-
-    $retval = '';
-
-    if (is_numeric ($cid) && ($cid > 0) && !empty ($sid) && !empty ($type)) {
+ * Hanldes a comment submission
+ *
+ * @copyright Vincent Furia 2005
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @return string HTML (possibly a refresh)
+ */
+function handleDelete() {
+    global $_REQUEST, $_TABLES, $_CONF;
 
-        // only comments of type 'article' and 'poll' are handled by Geeklog
-        if (($type == 'article') || ($type == 'poll')) {
-
-            if ($type == 'article') {
-                $table = $_TABLES['stories'];
-                $idname = 'sid';
-                $has_editPermissions = SEC_hasRights ('story.edit');
-            } else {
-                $table = $_TABLES['pollquestions'];
-                $idname = 'qid';
-                $has_editPermissions = SEC_hasRights ('poll.edit');
-            }
-            $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$table} WHERE {$idname} = '{$sid}'");
+    $type = COM_applyFilter ($_REQUEST['type']);
+    $sid = COM_applyFilter ($_REQUEST['sid']);
+    switch ( $type ) {
+        case 'article':
+            $has_editPermissions = SEC_hasRights ('story.edit');
+            $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['stories']} WHERE sid = '$sid'");
             $A = DB_fetchArray ($result);
 
             if ($has_editPermissions && SEC_hasAccess ($A['owner_id'],
                     $A['group_id'], $A['perm_owner'], $A['perm_group'],
                     $A['perm_members'], $A['perm_anon']) == 3) {
-                DB_query("LOCK TABLES {$_TABLES['comments']} WRITE");
-                $result = DB_query("SELECT pid, lft, rht FROM {$_TABLES['comments']} "
-                                 . "WHERE cid = $cid");
-                list($pid,$lft,$rht) = DB_fetchArray($result); 
-                DB_change ($_TABLES['comments'], 'pid', $pid, 'pid', $cid);
-                DB_delete ($_TABLES['comments'], 'cid', $cid);
-                DB_query("UPDATE {$_TABLES['comments']} SET indent = indent - 1 "
-                   . "WHERE sid = '$sid' AND lft BETWEEN $lft AND $rht");
-                DB_query("UPDATE {$_TABLES['comments']} SET lft = lft - 2 "
-                   . "WHERE sid = '$sid' AND lft >= $rht");
-                DB_query("UPDATE {$_TABLES['comments']} SET rht = rht - 2 "
-                   . "WHERE sid = '$sid' AND rht >= $rht");
-                DB_query('UNLOCK TABLES');
-
-                if ($type == 'poll') {
-                    $retval .= COM_refresh ($_CONF['site_url']
-                            . '/pollbooth.php?qid=' . $sid . '&aid=-1');
-                } else {
-                    $comments = DB_count ($_TABLES['comments'], 'sid', $sid);
-                    DB_change ($_TABLES['stories'], 'comments', $comments,
-                               'sid', $sid);
-                    $retval .= COM_refresh (COM_buildUrl ($_CONF['site_url']
-                            . '/article.php?story=' . $sid) . '#comments');
-                }
+                CMT_deleteComment(COM_applyFilter($_REQUEST['cid'], true), $sid, 'article');
+                $comments = DB_count ($_TABLES['comments'], 'sid', $sid);
+                DB_change ($_TABLES['stories'], 'comments', $comments,
+                           'sid', $sid);
+                $display .= COM_refresh (COM_buildUrl ($_CONF['site_url']
+                                . "/article.php?story=$sid") . '#comments');
             } else {
-                COM_errorLog ('User ' . $_USER['username'] . ' (IP: '
-                        . $_SERVER['REMOTE_ADDR']
-                        . ') tried to illegally delete comment '
-                        . $cid . ' from ' . $type . ' ' . $sid);
-                $retval .= COM_refresh ($_CONF['site_url'] . '/index.php');
+                COM_errorLog ("User {$_USER['username']} (IP: {$_SERVER['REMOTE_ADDR']}) "
+                            . "tried to illegally delete comment $cid from $type $sid");
+                $display .= COM_refresh ($_CONF['site_url'] . '/index.php');
             }
-        } else {
-            // See if plugin will handle this
-            $retval = PLG_handlePluginComment ($type, $cid, 'delete');
-            if (empty ($retval)) {
-                $retval = COM_refresh ($_CONF['site_url'] . '/index.php');
+            break;
+        default: //assume plugin
+            if ( !($display = PLG_commentDelete($type, 
+                                COM_applyFilter($_REQUEST['cid'], true), $sid)) ) {
+                $display = COM_refresh ($_CONF['site_url'] . '/index.php');
             }
-        }
-    } else {
-        $retval .= COM_refresh ($_CONF['site_url'] . '/index.php');
+            break;
     }
 
-    return $retval;
+    return $display;
 }
 
 /**
-* Display form to report abusive comment.
-*
-* @param    string  $cid    comment id
-* @param    string  $type   type of comment ('article', 'poll', ...)
-* @return   string          HTML for the form (or error message)
-*
-*/
-function report_abusive_comment ($cid, $type)
+ * Handles a comment view request
+ *
+ * @copyright Vincent Furia 2005
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param boolean $view View or display (true for view)
+ * @return string HTML (possibly a refresh)
+ */
+function handleView($view = true)
 {
-    global $_CONF, $_TABLES, $_USER, $LANG03, $LANG12, $LANG_LOGIN;
-
-    $retval = '';
-
-    if (empty ($_USER['username'])) {
-        $retval .= COM_startBlock ($LANG_LOGIN[1], '',
-                           COM_getBlockTemplate ('_msg_block', 'header'));     
-        $loginreq = new Template ($_CONF['path_layout'] . 'submit');            
-        $loginreq->set_file ('loginreq', 'submitloginrequired.thtml');          
-        $loginreq->set_var ('login_message', $LANG_LOGIN[2]);
-        $loginreq->set_var ('site_url', $_CONF['site_url']);                    
-        $loginreq->set_var ('lang_login', $LANG_LOGIN[3]);
-        $loginreq->set_var ('lang_newuser', $LANG_LOGIN[4]);
-        $loginreq->parse ('errormsg', 'loginreq');
-        $retval .= $loginreq->finish ($loginreq->get_var ('errormsg'));
-        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-
-        return $retval;
-    }
-
-    COM_clearSpeedlimit ($_CONF['speedlimit'], 'mail');
-    $last = COM_checkSpeedlimit ('mail');
-    if ($last > 0) {
-        $retval .= COM_startBlock ($LANG12[26], '',
-                            COM_getBlockTemplate ('_msg_block', 'header'))
-                . $LANG12[30] . $last . $LANG12[31]
-                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-
-        return $retval;
-    }
-
-    $start = new Template ($_CONF['path_layout'] . 'comment');
-    $start->set_file (array ('report' => 'reportcomment.thtml'));
-    $start->set_var ('site_url', $_CONF['site_url']);
-    $start->set_var ('layout_url', $_CONF['layout_url']);
-    $start->set_var ('lang_report_this', $LANG03[25]);
-    $start->set_var ('lang_send_report', $LANG03[10]);
-    $start->set_var ('cid', $cid);
-    $start->set_var ('type', $type);
-
-    $result = DB_query ("SELECT uid,sid,pid,title,comment,UNIX_TIMESTAMP(date) AS nice_date FROM {$_TABLES['comments']} WHERE cid = $cid AND type = '$type'");
-    $A = DB_fetchArray ($result);
-
-    $result = DB_query ("SELECT username,fullname,photo FROM {$_TABLES['users']} WHERE uid = {$A['uid']}");
-    $B = DB_fetchArray ($result);
-
-    // prepare data for comment preview
-    $A['cid'] = $cid;
-    $A['type'] = $type;
-    $A['username'] = $B['username'];
-    $A['fullname'] = $B['fullname'];
-    $A['photo'] = $B['photo'];
-    $A['indent'] = 0;
-    $A['pindent'] = 0;
-
-    $thecomment = COM_getComment ($A, 'flat', $type, 'ASC', false, true);
-    $start->set_var ('comment', $thecomment);
-    $retval .= COM_startBlock ($LANG03[15])
-            . $start->finish ($start->parse ('output', 'report'))
-            . COM_endBlock ();
+    global $_CONF, $_TABLES, $_USER, $LANG_ACCESS;
 
-    return $retval;
-}
-
-/**
-* Send report about abusive comment
-*
-* @param    string  $cid    comment id
-* @param    string  $type   type of comment ('article', 'poll', ...)
-* @return   string          Meta refresh or HTML for error message
-*
-*/
-function send_report ($cid, $type)
-{
-    global $_CONF, $_TABLES, $_USER, $LANG03, $LANG08, $LANG_LOGIN;
-
-    if (empty ($_USER['username'])) {
-        $retval = COM_siteHeader ('menu');
-        $retval .= COM_startBlock ($LANG_LOGIN[1], '',
-                           COM_getBlockTemplate ('_msg_block', 'header'));     
-        $loginreq = new Template ($_CONF['path_layout'] . 'submit');            
-        $loginreq->set_file ('loginreq', 'submitloginrequired.thtml');          
-        $loginreq->set_var ('login_message', $LANG_LOGIN[2]);
-        $loginreq->set_var ('site_url', $_CONF['site_url']);                    
-        $loginreq->set_var ('lang_login', $LANG_LOGIN[3]);
-        $loginreq->set_var ('lang_newuser', $LANG_LOGIN[4]);
-        $loginreq->parse ('errormsg', 'loginreq');
-        $retval .= $loginreq->finish ($loginreq->get_var ('errormsg'));
-        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        $retval .= COM_siteFooter ();
-
-        return $retval;
-    }
-
-    COM_clearSpeedlimit ($_CONF['speedlimit'], 'mail');
-    if (COM_checkSpeedlimit ('mail') > 0) {
-        return COM_refresh ($_CONF['site_url'] . '/index.php');
-    }
-
-    $username = DB_getItem ($_TABLES['users'], 'username',
-                            "uid = {$_USER['uid']}");
-    $result = DB_query ("SELECT uid,title,comment,sid,ipaddress FROM {$_TABLES['comments']} WHERE cid = $cid AND type = '$type'");
-    $A = DB_fetchArray ($result);
-
-    $title = stripslashes ($A['title']);
-    $comment = stripslashes ($A['comment']);
-
-    // strip HTML if posted in HTML mode
-    if (preg_match ('/<.*>/', $comment) != 0) {
-        $comment = strip_tags ($comment);
+    if ($view) {
+        $cid = COM_applyFilter ($_REQUEST['cid'], true);
+    } else {
+        $cid = COM_applyFilter ($_REQUEST['pid'], true);
     }
 
-    $author = DB_getItem ($_TABLES['users'], 'username', "uid = {$A['uid']}");
-    if (($A['uid'] <= 1) && !empty ($A['ipaddress'])) {
-        // add IP address for anonymous posters
-        $author .= ' (' . $A['ipaddress'] . ')';
+    if ($cid <= 0) {
+        return COM_refresh($_CONF['site_url'] . '/index.php');
     }
-
-    $mailbody = sprintf ($LANG03[26], $username);
-    $mailbody .= "\n\n"
-              . "$LANG03[16]: $title\n"
-              . "$LANG03[5]: $author\n";
     
-    if (($type != 'article') && ($type != 'poll')) {
-        $mailbody .= "$LANG09[5]: $type\n";
-    }
-
-    if ($_CONF['emailstorieslength'] > 0) {
-        if ($_CONF['emailstorieslength'] > 1) {
-            $comment = substr ($comment, 0, $_CONF['emailstorieslength'])
-                     . '...';
+    $sql = "SELECT sid, title, type FROM {$_TABLES['comments']} WHERE cid = $cid";
+    $A = DB_fetchArray( DB_query($sql) );
+    $sid   = $A['sid'];
+    $title = $A['title'];
+    $type  = $A['type'];
+
+    $format = COM_applyFilter ($_REQUEST['format']);
+    if ( $format != 'threaded' && $format != 'nested' && $format != 'flat' ) {
+        if ( $_USER['uid'] > 1 ) {
+            $format = DB_getItem( $_TABLES['usercomment'], 'commentmode', 
+                                  "uid = {$_USER['uid']}" );
+        } else {
+            $format = $_CONF['comment_mode'];
         }
-        $mailbody .= $comment . "\n\n";
     }
 
-    $mailbody .= $LANG08[33] . ' <' . $_CONF['site_url']
-              . '/comment.php?mode=view&cid=' . $cid . ">\n\n";
-
-    $mailbody .= "\n------------------------------\n";
-    $mailbody .= "\n$LANG08[34]\n";
-    $mailbody .= "\n------------------------------\n";
-
-    $mailsubject = $_CONF['site_name'] . ' ' . $LANG03[27];
+    switch ( $type ) {
+        case 'article':
+            $sql = 'SELECT COUNT(*) AS count, owner_id, group_id, perm_owner, perm_group, '
+                 . "perm_members, perm_anon FROM {$_TABLES['stories']} WHERE (sid = '$sid') "
+                 . 'AND (draft_flag = 0) AND (date <= NOW())' . COM_getPermSQL('AND') 
+                 . COM_getTopicSQL('AND') . 'GROUP BY sid';
+            $result = DB_query ($sql);
+            $B = DB_fetchArray ($result);
+            $allowed = $B['count'];
+
+            if ( $allowed == 1 ) {
+                $delete_option = ( SEC_hasRights( 'story.edit' ) &&
+                    ( SEC_hasAccess( $B['owner_id'], $B['group_id'],
+                        $B['perm_owner'], $B['perm_group'], $B['perm_members'],
+                        $B['perm_anon'] ) == 3 ) );
+                $display .= CMT_userComments ($sid, $title, $type, 
+                        COM_applyFilter ($_REQUEST['order']), $format, $cid,
+                        COM_applyFilter ($_REQUEST['page'], true), $view, $delete_option);
+            } else {
+                $display .= COM_startBlock ($LANG_ACCESS['accessdenied'], '',
+                                    COM_getBlockTemplate ('_msg_block', 'header'))
+                         . $LANG_ACCESS['storydenialmsg']
+                         . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+            }
+            break;
 
-    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
-    COM_updateSpeedlimit ('mail');
+        default: // assume plugin
+            if ( !($display = PLG_displayComment($type, $sid, $cid, $title,
+                                  COM_applyFilter ($_REQUEST['order']), $format, 
+                                  COM_applyFilter ($_REQUEST['page'], true), $view)) ) {
+                return COM_refresh($_CONF['site_url'] . '/index.php');
+            }
+            break;
+    }
 
-    return COM_refresh ($_CONF['site_url'] . '/index.php?msg=27');
+    return COM_siteHeader() . $display . COM_siteFooter();
 }
 
-
 // MAIN
 $display = '';
 
+// If reply specified, force comment submission form
 if (isset ($_REQUEST['reply'])) {
     $_REQUEST['mode'] = '';
 }
@@ -707,193 +240,67 @@
 switch ( $_REQUEST['mode'] ) {
 case $LANG03[14]: // Preview
     $display .= COM_siteHeader()
-        . commentform (COM_applyFilter ($_POST['uid'], true),
-            strip_tags ($_POST['title']), $_POST['comment'],
-            COM_applyFilter ($_POST['sid']),
-            COM_applyFilter ($_POST['pid'], true),
+        . CMT_commentForm ( strip_tags ($_POST['title']), $_POST['comment'],
+            COM_applyFilter ($_POST['sid']), COM_applyFilter ($_POST['pid'], true),
             COM_applyFilter ($_POST['type']), COM_applyFilter ($_POST['mode']),
             COM_applyFilter ($_POST['postmode']))
         . COM_siteFooter(); 
     break;
 
 case $LANG03[11]: // Submit Comment
-    $display .= savecomment (COM_applyFilter ($_POST['uid'], true),
-            strip_tags ($_POST['title']), $_POST['comment'],
-            COM_applyFilter ($_POST['sid']),
-            COM_applyFilter ($_POST['pid'], true),
-            COM_applyFilter ($_POST['type']),
-            COM_applyFilter ($_POST['postmode']));
+    $display .= handleSubmit();  // moved to function for readibility
     break;
 
 case 'delete':
-    $display .= deletecomment (COM_applyFilter ($_REQUEST['cid'], true),
-                               COM_applyFilter ($_REQUEST['sid']),
-                               COM_applyFilter ($_REQUEST['type']));
+    $display .= handleDelete();  // moved to function for readibility
     break;
 
 case 'view':
-    $cid = COM_applyFilter ($_REQUEST['cid'], true);
-    if ($cid > 0) {
-        $sql = "SELECT sid, title, type FROM {$_TABLES['comments']} WHERE cid = $cid";
-        $A = DB_fetchArray( DB_query($sql) );
-        $sid = $A['sid'];
-        $title = $A['title'];
-        $type = $A['type'];
-        $allowed = 1;
-        if ($type == 'article') {
-            $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['stories']} WHERE (sid = '$sid') AND (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND') . COM_getTopicSQL ('AND'));
-            $A = DB_fetchArray ($result);
-            $allowed = $A['count'];
-        } else if ($type == 'poll') {
-            $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['pollquestions']} WHERE (qid = '$sid')" . COM_getPermSQL ('AND'));
-            $A = DB_fetchArray ($result);
-            $allowed = $A['count'];
-        }
-        $display .= COM_siteHeader();
-        if ($allowed == 1) {
-            $format = COM_applyFilter ($_REQUEST['format']);
-            if ( $format != 'threaded' && $format != 'nested' && $format != 'flat' ) {
-                if ( $_USER['uid'] > 1 ) {
-                    $format = DB_getItem( $_TABLES['usercomment'], 'commentmode', 
-                                          "uid = {$_USER['uid']}" );
-                } else {
-                    $format = $_CONF['comment_mode'];
-                }
-            }
-            if ($type == 'poll' || $type == 'article') {
-                if ( $type == 'poll' ) {
-                    $delete_option = SEC_hasRights( 'poll.edit' );
-                } else {
-                    $delete_option = SEC_hasRights( 'story.edit' );
-                }
-                $delete_option = ( $delete_option &&
-                    SEC_hasAccess( $A['owner_id'], $A['group_id'],
-                    $A['perm_owner'], $A['perm_group'], $A['perm_members'],
-                    $A['perm_anon'] ) == 3 ? true : false );
-            } else {
-                $delete_option = false;
-            }
-            $display .= COM_userComments ($sid, $title, $type, 
-                            COM_applyFilter ($_REQUEST['order']), $format, $cid,
-                            COM_applyFilter ($_REQUEST['page'], true), true, $delete_option);
-        } else {
-            $display .= COM_startBlock ($LANG_ACCESS['accessdenied'], '',
-                                COM_getBlockTemplate ('_msg_block', 'header'))
-                     . $LANG_ACCESS['storydenialmsg']
-                     . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        }
-        $display .= COM_siteFooter();
-    } else {
-        $display .= COM_refresh($_CONF['site_url'] . '/index.php');
-    }
+    $display .= handleView(true);  // moved to function for readibility
     break;
 
 case 'display':
-    $pid = COM_applyFilter ($_REQUEST['pid'], true);
-    if ($pid > 0) {
-        $sql = "SELECT sid, title, type FROM {$_TABLES['comments']} WHERE cid = $pid";
-        $A = DB_fetchArray( DB_query($sql) );
-        $sid = $A['sid'];
-        $title = $A['title'];
-        $type = $A['type'];
-        $allowed = 1;
-        if ($type == 'article') {
-            $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['stories']} WHERE (sid = '$sid') AND (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND') . COM_getTopicSQL ('AND'));
-            $A = DB_fetchArray ($result);
-            $allowed = $A['count'];
-        } else if ($type == 'poll') {
-            $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['pollquestions']} WHERE (qid = '$sid')" . COM_getPermSQL ('AND'));
-            $A = DB_fetchArray ($result);
-            $allowed = $A['count'];
-        }
-        $display .= COM_siteHeader();
-        if ($allowed == 1) {
-            $format = COM_applyFilter ($_REQUEST['format']);
-            if ( $format != 'threaded' && $format != 'nested' && $format != 'flat' ) {
-                $format = 'threaded';
-            }
-            if ($type == 'poll' || $type == 'article') {
-                if ( $type == 'poll' ) {
-                    $delete_option = SEC_hasRights( 'poll.edit' );
-                } else {
-                    $delete_option = SEC_hasRights( 'story.edit' );
-                }
-                $delete_option = ( $delete_option &&
-                    SEC_hasAccess( $A['owner_id'], $A['group_id'],
-                    $A['perm_owner'], $A['perm_group'], $A['perm_members'],
-                    $A['perm_anon'] ) == 3 ? true : false );
-            } else {
-                $delete_option = false;
-            }
-            $display .= COM_userComments ($sid, $title, $type,
-                    COM_applyFilter ($_REQUEST['order']), $format, $pid,
-                    COM_applyFilter ($_REQUEST['page'], true), false, $delete_option);
-        } else {
-            $display .= COM_startBlock ($LANG_ACCESS['accessdenied'], '',
-                                COM_getBlockTemplate ('_msg_block', 'header'))
-                     . $LANG_ACCESS['storydenialmsg']
-                     . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-        }
-        $display .= COM_siteFooter();
-    } else {
-        $display .= COM_refresh($_CONF['site_url'] . '/index.php');
-    }
+    $display .= handleView(false);  // moved to function for readibility
     break;
 
 case 'report':
-    $display = COM_siteHeader ('menu')
-             . report_abusive_comment (COM_applyFilter ($_GET['cid'], true),
-                                       COM_applyFilter ($_GET['type']))
-             . COM_siteFooter ();
+    $display .= COM_siteHeader ('menu')
+              . CMT_reportAbusiveComment (COM_applyFilter ($_GET['cid'], true),
+                                          COM_applyFilter ($_GET['type']))
+              . COM_siteFooter ();
     break;
 
 case 'sendreport':
-    $display = send_report (COM_applyFilter ($_POST['cid'], true),
-                            COM_applyFilter ($_POST['type']));
+    $display .= CMT_sendReport (COM_applyFilter ($_POST['cid'], true),
+                                COM_applyFilter ($_POST['type']));
     break;
 
-default:
+default:  // New Comment
     $sid = COM_applyFilter ($_REQUEST['sid']);
     $type = COM_applyFilter ($_REQUEST['type']);
     $title = strip_tags ($_REQUEST['title']);
-    $pid = COM_applyFilter ($_REQUEST['pid'], true);
-    $mode = COM_applyFilter ($_REQUEST['mode']);
-    $postmode = COM_applyFilter ($_REQUEST['postmode']);
 
-    if (!empty ($sid)) {
+    if (!empty ($sid) && !empty ($type)) { 
         if (empty ($title)) {
             if ($type == 'article') {
                 $title = DB_getItem ($_TABLES['stories'], 'title',
-                                     "sid = '{$sid}'");
-            } elseif ($type == 'poll') {
-                $title = DB_getItem ($_TABLES['pollquestions'], 'question',
-                                     "qid = '{$sid}'");
+                                     "sid = '{$sid}'" . COM_getPermSQL('AND') . COM_getTopicSQL('AND'));
             }
             $title = str_replace ('$', '&#36;', $title);
-        }
-        if (!empty ($type)) {
-            $display .= COM_siteHeader('menu', $LANG03[1])
-                . commentform ($_USER['uid'], $title, '', $sid, $pid, $type,
-                               $mode, $postmode)
-                . COM_siteFooter();
-        } else {
-            $display .= COM_refresh($_CONF['site_url'] . '/index.php');
-        }
+            // CMT_commentForm expects non-htmlspecial chars for title...
+            $title = str_replace ( '&amp;', '&', $title );
+            $title = str_replace ( '&quot;', '"', $title );
+            $title = str_replace ( '&lt;', '<', $title );
+            $title = str_replace ( '&gt;', '>', $title );
+        }
+        $display .= COM_siteHeader('menu', $LANG03[1])
+            . CMT_commentForm ($title, '', $sid, COM_applyFilter ($_REQUEST['pid'], true),
+                $type, COM_applyFilter ($_REQUEST['mode']), COM_applyFilter ($_REQUEST['postmode']))
+            . COM_siteFooter();
     } else {
-        // This could still be a plugin wanting comments
-        $cid = COM_applyFilter ($_REQUEST['cid'], true);
-        $format = COM_applyFilter ($_REQUEST['format']);
-        $order = COM_applyFilter ($_REQUEST['order']);
-        $reply = COM_applyFilter ($_REQUEST['reply']);
-        $type = COM_applyFilter ($_REQUEST['type']);
-
-        if (!empty ($type) && !empty ($cid)) {
-            $display .= PLG_callCommentForm ($type, $cid, $format, $order, $reply);
-        } else {
-            // must be a mistake at this point
-            $display .= COM_refresh($_CONF['site_url'] . '/index.php');
-        }
+        $display .= COM_refresh($_CONF['site_url'] . '/index.php');
     }
+    break;
 }
 
 echo $display;
diff -ruN 1.3.11sr1/cpanel-glprivate/config.php 1.4.0sr5-1/cpanel-glprivate/config.php
--- 1.3.11sr1/cpanel-glprivate/config.php	2005-08-12 14:16:33.000000000 -0500
+++ 1.4.0sr5-1/cpanel-glprivate/config.php	2006-08-08 02:55:55.000000000 -0500
@@ -2,16 +2,16 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | config.php                                                                |
 // |                                                                           |
 // | Geeklog configuration file.                                               |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2001-2004 by the following authors:                         |
+// | Copyright (C) 2001-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs - tony@tonybibbs.com                                  |
-// |          Dirk Haun  - dirk@haun-online.de                                 |
+// | Authors: Tony Bibbs - tony AT tonybibbs DOT com                           |
+// |          Dirk Haun  - dirk AT haun-online DOT de                          |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -33,7 +33,7 @@
 // | on configuration.                                                         |
 // +---------------------------------------------------------------------------+
 //
-// $Id: config.php,v 1.148.2.1 2005/07/03 08:43:40 dhaun Exp $
+// $Id: config.php,v 1.208.2.6 2006/07/22 15:10:52 dhaun Exp $
 
 // When setting up Geeklog for the first time, you need to make sure the
 // settings in the following 3 sections are correct:
@@ -152,7 +152,7 @@
 // - 'smtp', i.e. talk directly to your SMTP server
 // The default is 'mail' and will work in most environments.
 
-$_CONF['mail_settings'] = array (  
+$_CONF['mail_settings'] = array (
     'backend' => 'mail', // can be one of 'mail', 'sendmail', 'smtp'
 
     // sendmail parameters (only needed for 'backend' => 'sendmail')
@@ -200,11 +200,10 @@
 (
     // 'home',      // link to homepage
     'contribute',   // contribute / "submit a story" link
-    'links',        // link to the links section (aka web resources)
-    'polls',        // link to past polls
     'calendar',     // link to the site calendar
     'search',       // link to advanced search
     'stats',        // link to site stats
+    'directory',    // link to list of past stories
     // 'prefs',     // link to user's preferences
     'plugins'       // links added by plugins, like {plg_menu_elements}
     // 'custom'     // for custom links (see lib-custom.php)
@@ -215,6 +214,9 @@
 $_CONF['path_themes']       = $_CONF['path_html'] . 'layout/';
 $_CONF['path_layout']       = $_CONF['path_themes'] . $_CONF['theme'] . '/';
 
+// stops new registrations if set to true.
+$_CONF['disable_new_user_registration'] = false; // set to true to block users.
+
 // optional settings (1 = on, 0 = off)
 $_CONF['allow_user_themes']   = 1;
 $_CONF['allow_user_language'] = 1;
@@ -232,6 +234,9 @@
 // Used by COM_displayName to return Members's Full Name else username  (1 = yes, 0 = no)
 $_CONF['show_fullname'] = 0;
 
+// Used by COM_displayName to return users remote login service, if they have one.
+$_CONF['show_servicename'] = true; // Set to false to not show it.
+
 // +---------------------------------------------------------------------------+
 // | Support for custom user registration form and account details             |
 // | Requires custom functions to be written that can be placed in lib-custom  |
@@ -240,21 +245,32 @@
 $_CONF['custom_registration'] = false;  // Set to true if you have custom code
 
 // +---------------------------------------------------------------------------+
-// | Define action to be taken by SPAMX module if spam detected                |
-// | Current SPAMX module supports two actions which can be combined           |
+// | Support for remote authentication of users, i.e. logging in via other     |
+// | supported remote servers. Requires custom classes in:                     |
+// | system/classes/authentication/                                            |
+// +---------------------------------------------------------------------------+
+$_CONF['remoteauthentication'] = false;  // Set to true to enable remote logins.
+
+// +---------------------------------------------------------------------------+
+// | Define action to be taken by Spam-X module if spam detected               |
+// | Current Spam-X module supports two actions which can be combined          |
 // | Additional classes can be added as well as other plugin extensions        |
 // | Actions: 128 = ignore comment and redirect to homepage                    |
-// |          8 = mail admin message                                           |
-// |          136 (SUM) ignore and email adming                                |
+// |            8 = mail admin message                                         |
+// |          136 (SUM) ignore and email admin                                 |
 // +---------------------------------------------------------------------------+
 $_CONF['spamx'] = 128;  // Default to ignore comment.
 
 // +---------------------------------------------------------------------------+
-// | Support for custom templaes to support advanced Rich Text Editor          |
-// | Checked in comment.php, submit.php, admin/story.php and                   |
-// | staticpages/index.php. If set true and advanced template exists           |
+// | Sort the links in the admin block and the admin panel.                    |
 // +---------------------------------------------------------------------------+
-$_CONF['advanced_editor'] = false;
+$_CONF['sort_admin'] = true;
+
+// +---------------------------------------------------------------------------+
+// | Path to user files relative to the $_CONF['site_url'] (no trailing slash) |
+// | Relative Directory where the Editor Image Library store                   |
+// +---------------------------------------------------------------------------+
+$_CONF_FCK['imagelibrary'] = '/images/library';
 
 // +---------------------------------------------------------------------------+
 // | LOCALE SETTINGS                                                           |
@@ -262,7 +278,7 @@
 // | see docs/config.html#locale for details                                   |
 // +---------------------------------------------------------------------------+
 $_CONF['language']        = 'english';
-$_CONF['locale']          = 'en-gb';
+$_CONF['locale']          = 'en_GB';
 $_CONF['date']            = '%A, %B %d %Y @ %I:%M %p %Z';
 $_CONF['daytime']         = '%m/%d %I:%M%p';
 $_CONF['shortdate']       = '%x';
@@ -271,6 +287,12 @@
 $_CONF['week_start']      = 'Sun'; // can be 'Sun' or 'Mon'
 $_CONF['default_charset'] = 'iso-8859-1';
 
+// Number formatting
+$_CONF['thousand_separator'] = ",";  // could be ' , . etc.
+$_CONF['decimal_separator']  = ".";  // could be , . etc.
+$_CONF['decimal_count']      = "2";  // if a number has decimals,
+                                     //  force to this depth
+
 // "Timezone Hack"
 // If your webserver is located in a different timezone than yourself but you
 // prefer Geeklog to post stories in your local time, then set your local
@@ -318,8 +340,6 @@
 $_CONF['cookie_password']               = 'password';
 $_CONF['cookie_theme']                  = 'theme';
 $_CONF['cookie_language']               = 'language';
-$_CONF['cookie_lastvisit']              = 'LastVisit';
-$_CONF['cookie_lastvisittemp']          = 'LastVisitTemp';
 
 $_CONF['cookie_ip']                     = 0;
 $_CONF['default_perm_cookie_timeout']   = 28800;
@@ -335,7 +355,7 @@
 
 // +---------------------------------------------------------------------------+
 // | This is really redundant but I am including this as a reminder that those |
-// | people writing Geeklog Plug-ins that are OS dependent should check either |
+// | people writing Geeklog Plugins that are OS dependent should check either  |
 // | the $_CONF variable below or PHP_OS directly.  If you are writing an      |
 // | addon that is OS specific your addon should check the system is using the |
 // | right OS.  If not, be sure to show a friendly message that says their GL  |
@@ -351,24 +371,12 @@
 
 // +---------------------------------------------------------------------------+
 // | SEARCH SETTINGS                                                           |
-// |                                                                           |
-// | These aren't really used at the moment - leave as is ...                  |
 // +---------------------------------------------------------------------------+
 
-// Indicates if we should expand search results or not.
-//     true = show title with summary
-//     false = title date author hits on one line
-$_CONF['expanded_search_results']  =  true;
-    
-// 0: use users max stories per page
-// 1: Show all
-// any other number is the # of results per page
-$_CONF['max_search_results']  =  1;
-    
-// maximum length for the summary text for search results should be    
-$_CONF['summary_length']  =  250;
-    
-    
+// default number of search results (per type) to be displayed per page
+$_CONF['num_search_results'] = 10;
+
+
 // +---------------------------------------------------------------------------+
 // | MISCELLANEOUS SETTINGS                                                    |
 // |                                                                           |
@@ -376,24 +384,22 @@
 // | for most situations.                                                      |
 // +---------------------------------------------------------------------------+
 
-// this lets you select which functions are available for registered users only 
-$_CONF['loginrequired'] = 0; // all of them, if set to 1 will override all else 
-$_CONF['submitloginrequired'] = 0;
-$_CONF['commentsloginrequired'] = 0;
-$_CONF['linksloginrequired'] = 0;
-$_CONF['pollsloginrequired'] = 0;
-$_CONF['calendarloginrequired'] = 0;
-$_CONF['statsloginrequired'] = 0;
-$_CONF['searchloginrequired'] = 0;
-$_CONF['profileloginrequired'] = 0;
-$_CONF['emailuserloginrequired'] = 0;
+// this lets you select which functions are available for registered users only
+$_CONF['loginrequired'] = 0; // all of them, if set to 1 will override all else
+$_CONF['submitloginrequired']     = 0;
+$_CONF['commentsloginrequired']   = 0;
+$_CONF['calendarloginrequired']   = 0;
+$_CONF['statsloginrequired']      = 0;
+$_CONF['searchloginrequired']     = 0;
+$_CONF['profileloginrequired']    = 0;
+$_CONF['emailuserloginrequired']  = 0;
 $_CONF['emailstoryloginrequired'] = 0;
+$_CONF['directoryloginrequired']  = 0;
 
 // Submission Settings
 
 // enable (set to 1) or disable (set to 0) submission queues:
 $_CONF['storysubmission'] = 1;
-$_CONF['linksubmission']  = 1;
 $_CONF['eventsubmission'] = 1;
 $_CONF['usersubmission']  = 0; // 1 = new users must be approved
 
@@ -402,9 +408,9 @@
 $_CONF['listdraftstories'] = 0;
 
 // Send an email notification when a new submission has been made. The contents
-// of the array can be any combination of 'story', 'comment', 'link', 'event',
-// and 'user'.
-// Example: $_CONF['notification'] = array ('story', 'link', 'event');
+// of the array can be any combination of 'story', 'comment', 'trackback',
+// 'pingback', 'event', and 'user'.
+// Example: $_CONF['notification'] = array ('story', 'event');
 // The email will be sent to $_CONF['site_mail'] (see above).
 $_CONF['notification'] = array ();
 
@@ -412,6 +418,21 @@
 $_CONF['speedlimit']    = 45;           // in seconds
 $_CONF['skip_preview']  = 0; // If = 1, allow user to submit comments and stories without previewing
 
+// +---------------------------------------------------------------------------+
+// | Support for custom templaes to support advanced Rich Text Editor          |
+// | Checked in comment.php, submit.php, admin/story.php and                   |
+// | staticpages/index.php. If set true and advanced template exists           |
+// | Note: If enabled, the default postmode will be html                       |
+// +---------------------------------------------------------------------------+
+$_CONF['advanced_editor'] = false;
+
+// +---------------------------------------------------------------------------+
+// | Internal Geeklog CRON or scheduled Task/Function setting                  |
+// | Plugins can use the runSheduledTask API to activate any automated tasks   |
+// | or add code in lib-custom to the CUSTOM_runSheduledTask function          |
+// +---------------------------------------------------------------------------+
+$_CONF['cron_schedule_interval']        = 86400;   // Seconds - Default 1 day
+
 
 // Topic Settings
 
@@ -431,18 +452,12 @@
 // Hide 'Home' link from Topics block (if set to 1)
 $_CONF['hide_home_link'] = 0;
 
-// Show blocks for empty search results
-$_CONF['showemptysearchresults'] = 0;
-
 
 // Who's Online block settings
 
 // How long an anonymous (guest) user session is good for
 $_CONF['whosonline_threshold'] = 300; // in seconds
 
-// Show full names (= 1) or usernames (= 0) in Who's Online block
-$_CONF['whosonline_fullname'] = 0; // 1 = show full names, 0 = usernames
-
 // If set to 1, don't show names of registered users to anonymous users
 $_CONF['whosonline_anonymous'] = 0; // 1 = don't show names to anon. users
 
@@ -467,15 +482,43 @@
 $_CONF['allow_domains'] = ''; // e.g. 'mycompany.com,myothercompany.com'
 
 // Following times are in seconds
-$_CONF['newstoriesinterval']  =   86400; // = 24 hours
-$_CONF['newcommentsinterval'] =  172800; // = 48 hours
-$_CONF['newlinksinterval']    = 1209600; // = 14 days
+$_CONF['newstoriesinterval']   =   86400; // = 24 hours
+$_CONF['newcommentsinterval']  =  172800; // = 48 hours
+$_CONF['newtrackbackinterval'] =  172800; // = 48 hours
 
 // Set to 1 to hide a section from the What's New block:
-$_CONF['hidenewstories']  = 0;
-$_CONF['hidenewcomments'] = 0;
-$_CONF['hidenewlinks']    = 0;
-$_CONF['hidenewplugins']  = 0;
+$_CONF['hidenewstories']    = 0;
+$_CONF['hidenewcomments']   = 0;
+$_CONF['hidenewtrackbacks'] = 0;
+$_CONF['hidenewplugins']    = 0;
+
+// Disable trackback comments by setting this to 'false'
+$_CONF['trackback_enabled'] = true;
+
+// Disable pingbacks by setting this to 'false'
+$_CONF['pingback_enabled'] = true;
+
+// Disable pinging weblog directory services by setting this to 'false'.
+$_CONF['ping_enabled'] = true;
+
+// Allow / disallow trackbacks and pingbacks to stories by default
+// (can be changed individually for every story)
+$_CONF['trackback_code'] = 0;   // 0 = trackbacks enabled, -1 = disabled
+
+// min. time between trackbacks or pingbacks, in seconds
+$_CONF['trackbackspeedlimit'] = 300;
+
+// whether to check if trackbacks actually link to us:
+// 0 = don't check, 1 = check against $_CONF['site_url'], 2 = check full URL
+$_CONF['check_trackback_link'] = 2;
+
+// how to handle multiple trackbacks and pingbacks from the same URL:
+// 0 = reject, 1 = only keep the latest, 2 = allow multiple posts
+$_CONF['multiple_trackbacks'] = 0;
+
+// how to handle pingbacks from one article on our site to another:
+// 0 = skip, 1 = allow, with speed limit, 2 = allow, without speed limit
+$_CONF['pingback_self'] = 0;
 
 // Link to the documentation from the Admin block (0 = hide link, 1 = show)
 $_CONF['link_documentation'] = 1;
@@ -489,14 +532,31 @@
 // Story Settings
 $_CONF['maximagesperarticle']   = 5;
 $_CONF['limitnews']             = 10;
-$_CONF['minnews']               = 1;	// minimum number of stories per page
-$_CONF['contributedbyline']     = 1;	// If 1, show contributed by line
-$_CONF['article_image_align']   = 'right';   // Topic icon on left or right.
+$_CONF['minnews']               = 1;        // minimum number of stories per page
+$_CONF['contributedbyline']     = 1;        // If 1, show contributed by line
+$_CONF['hideviewscount']        = 0;        // If 1, hide Viewed X times line
 $_CONF['hideemailicon']         = 0;    // If 1, hide "email story" option
 $_CONF['hideprintericon']       = 0;    // If 1, hide "printer friendly" option
+$_CONF['allow_page_breaks']     = 1;    // allow [page_break] in stories
+$_CONF['page_break_comments']   = 'last';  // When an article has a page break,
+                                           // show comments on the 'first',
+                                           //'last' or 'all' pages?
+$_CONF['article_image_align']   = 'right'; // Topic icon on left or right.
+$_CONF['show_topic_icon']       = 1;       // default for new stories
 
 
 // Advanced theme settings
+
+// Set the default whether to display the right-side blocks (= true) or not
+// (= false). In the default configuration, Geeklog will only display the
+// right-side blocks on the index page. Please note that setting this to true
+// will reduce the amount of space available for the actual page content,
+// especially for users with narrow browser windows.
+// May require theme changes in article/article.thtml (depending on the theme
+// used) to avoid the What's Related and Story Options "blocks" showing up in
+// an extra (fourth) column.
+$_CONF['show_right_blocks'] = false;
+
 // It is recommended to leave these unchanged and overwrite them in the theme's
 // functions.php instead.
 
@@ -521,25 +581,30 @@
 $_CONF['backend']       = 1;    // 1 = activate feeds, 0 = off
 
 // path to your site's default RSS feed
-$_CONF['rdf_file']      = $_CONF['path_html'] . 'backend/geeklog.rdf';
+$_CONF['rdf_file']      = $_CONF['path_html'] . 'backend/geeklog.rss';
 
 // This allows a person to limit the rss feed to a certain number of stories
 // (e.g. 10 or 12) or else limit the rss feed to all stories within a certain
-// period of time in hours (e.g. 24h or 168h). 
+// period of time in hours (e.g. 24h or 168h).
 $_CONF['rdf_limit']     = 10;   // number of stories (10) or hours (24h)
 
 // Include the story's entire intro text in the feed (= 1) or limit the number
 // of characters from the intro text (any number > 1) or don't include the text
 // at all (= 0).
-$_CONF['rdf_storytext'] = 0;
+$_CONF['rdf_storytext'] = 1;
 
 // Default language for the feed - may have to be different than the locale
 $_CONF['rdf_language']  = 'en-gb';
 
+// Upper limit for all imported feeds (0 = unlimited, i.e. import all of the
+// headlines from the feed).
+// Individual limits can be set for every feed in the portal block's settings.
+$_CONF['syndication_max_headlines'] = 0;
+
 
 // Uncomment the following line to set the copyright year in the site's footer
 // to a specific year. Otherwise, the current year will be used.
-// $_CONF['copyrightyear'] = '2004';
+// $_CONF['copyrightyear'] = '2006';
 
 
 // Optional Image Settings
@@ -575,57 +640,72 @@
 // the smaller image link to the unscaled image.
 $_CONF['keep_unscaled_image']   = 0; // 1 = keep original images
 
+// when above is set to one and this here also, the user can choose between
+// using the original or scaled image in a story
+$_CONF['allow_user_scaling']    = 1; // 1 = allow the user to choose
+
 // Story image settings
 $_CONF['max_image_width']       = 160;  // In pixels
 $_CONF['max_image_height']      = 120;  // In pixels
-$_CONF['max_image_size']        = 1048576; // 1048576 = 1MB 
+$_CONF['max_image_size']        = 1048576; // 1048576 = 1MB
+
+// Topic icon settings
+$_CONF['max_topicicon_width']   = 48; // In pixels
+$_CONF['max_topicicon_height']  = 48; // In pixels
+$_CONF['max_topicicon_size']    = 65536; // 65536 = 64KB
 
 // User photo settings
 $_CONF['max_photo_width']       = 128; // In pixels
 $_CONF['max_photo_height']      = 128; // In pixels
 $_CONF['max_photo_size']        = 65536; // 65536 = 64KB
 
+// Use avatars from gravatar.com (if set = true).
+// A gravatar will only be requested if there is no uploaded photo.
+$_CONF['use_gravatar'] = false;
+
+// gravatar.com provides "movie-style" ratings of the avatars (G, PG, R, X).
+// Setting this to 'R' would allow avatars rated as G, PG, and R (but not X).
+// $_CONF['gravatar_rating'] = 'R';
+
+// Force a max. width when displaying the user photo (also used for gravatars)
+// $_CONF['force_photo_width'] = 75;
+
+// Use this image when there's neither an uploaded photo nor a gravatar.
+// Should be the complete URL of the image.
+// $_CONF['default_photo'] = 'http://example.com/default.jpg';
+
 // Comment Settings
-$_CONF['commentspeedlimit']     = 45;
+$_CONF['commentspeedlimit']     = 45;         // minimum time between comment posts, in seconds
 $_CONF['comment_limit']         = 100;        // Default Number of Comments under Story
-$_CONF['comment_mode']          = 'threaded'; // Default Comment Mode; from 'threaded','nested','nocomments',and 'flat'
+// Default Comment Mode; from 'threaded','nested', 'nocomments', or 'flat'
+$_CONF['comment_mode']          = 'threaded';
 // Allow / disallow comments to stories by default (can be changed individually for every story)
-$_CONF['comment_code']          = 0; // 0 = comments enabled, -1 = disabled
-
-// Poll Settings
-$_CONF['maxanswers']        = 10; // max. number of options in a poll
-// 'submitorder' is the order in which answers are saved in admin/poll.php
-// 'voteorder' will list answers ordered by number of votes (highest->lowest);
-$_CONF['answerorder']       = 'submitorder';
-$_CONF['pollcookietime']    = 86400;
-$_CONF['polladdresstime']   = 604800;
+$_CONF['comment_code']          = 0;          // 0 = comments enabled, -1 = disabled
 
 // Password setting: minimum time between two requests for a new password
 $_CONF['passwordspeedlimit'] = 300; // seconds = 5 minutes
 
-// Links Settings
-// You can set both of the following to 0 to get back the old (pre-1.3.6)
-// style of the links section. Setting only linkcols to 0 will hide the
-// categories but keep the paging. Setting only linksperpage to 0 will list
-// all the links of the selected category on one page.
-$_CONF['linkcols']     =  3; // categories per column
-$_CONF['linksperpage'] = 10; // links per page
+// Login Speedlimit.
+$_CONF['login_attempts']   = 3;   // number of login attempts allowed before speedlimit kicks in
+$_CONF['login_speedlimit'] = 300; // wait (in seconds) after $_CONF['login_attempts'] failed logins
+
 
 // Parameters for checking HTML tags
 
-// *** Warning: Adding the following tags to the list of allowable HTML can     
+// *** Warning: Adding the following tags to the list of allowable HTML can
 // *** make your site vulnerable to scripting attacks!
-// *** Use with care: <img> <span> <marquee> <script> <embed> <object> <iframe> 
+// *** Use with care: <img> <span> <marquee> <script> <embed> <object> <iframe>
 
 /* This is a list of HTML tags that users are allowed to use in their posts.
  * Each tag can have a list of allowed attributes (see 'a' for an example).
  * Any attributes not listed will be filtered, i.e. removed.
  */
-$_CONF['user_html'] = array ( 
+$_CONF['user_html'] = array (
     'p'    => array(),
     'b'    => array(),
+    'strong'  => array(),
     'i'    => array(),
-    'a'    => array('href' => 1, 'title' => 1),
+    'a'    => array('href' => 1, 'title' => 1, 'rel' => 1),
     'em'   => array(),
     'br'   => array(),
     'tt'   => array(),
@@ -656,8 +736,32 @@
                      'colspan' => 1, 'rowspan' => 1)
 );
 
+/* Optional HTML Tags that will be enabled if advanced editor is enabled
+ * Posible to add tags to the allowable general USER $_CONF['user_html'] as well
+*/
+if ($_CONF['advanced_editor']) {
+    $_CONF['admin_html']['a']       = array('href' => 1, 'title' => 1, 'id' => 1, 'lang' => 1, 'name' => 1, 'type' => 1, 'rel' => 1);
+    $_CONF['admin_html']['hr']      = array ('style' => 1);
+    $_CONF['admin_html']['ol']      = array ('style' => 1);
+    $_CONF['admin_html']['ul']      = array ('style' => 1);
+    $_CONF['admin_html']['caption'] = array ();
+    $_CONF['admin_html']['table']   = array ('class' => 1, 'id' => 1, 'style' => 1, 'align' => 1, 'width' => 1,
+                                             'border' => 1, 'cellspacing' => 1, 'cellpadding' => 1);
+    $_CONF['admin_html']['tbody']   = array ();
+    $_CONF['admin_html']['img']     = array('src' => 1, 'width' => 1, 'height' => 1, 'vspace' => 1, 'hspace' => 1,
+                                            'dir' => 1, 'align' => 1, 'valign' => 1, 'border' => 1, 'lang' => 1,
+                                            'longdesc' => 1, 'title' => 1, 'id' => 1, 'alt' => 1);
+    $_CONF['admin_html']['font']    = array('face' => 1, 'size' => 1, 'style' => 1);
+}
+
+// When set to 1, disables the HTML filter for all users in the 'Root' group.
+// Obviously, you should only enable this if you know what you're doing and
+// when you can trust all the users in the 'Root' group not to use this for
+// Cross Site Scripting, defacements, etc. USE AT YOUR OWN RISK!
+$_CONF['skip_html_filter_for_root'] = 0;
+
 // list of protocols that are allowed in links
-$_CONF['allowed_protocols'] = array ('http:', 'https:', 'ftp:');
+$_CONF['allowed_protocols'] = array ('http', 'https', 'ftp');
 
 // disables autolinks if set to 1
 $_CONF['disable_autolinks'] = 0; // 0 = autolinks enabled
@@ -688,6 +792,18 @@
 //       Unresolvable issues with systems running IIS; known PHP CGI bug.
 $_CONF['url_rewrite'] = false; // false = off, true = on
 
+// Define default permissions for new objects created from the Admin panels.
+// Permissions are perm_owner, perm_group, perm_members, perm_anon (in that
+// order). Possible values:
+// 3 = read + write permissions (perm_owner and perm_group only)
+// 2 = read-only
+// 0 = neither read nor write permissions
+// (a value of 1, ie. write-only, does not make sense and is not allowed)
+$_CONF['default_permissions_block'] = array (3, 2, 2, 2);
+$_CONF['default_permissions_event'] = array (3, 2, 2, 2);
+$_CONF['default_permissions_story'] = array (3, 2, 2, 2);
+$_CONF['default_permissions_topic'] = array (3, 2, 2, 2);
+
 // Define a few useful things for GL
 
 // Story Record Options for the STATUS Field
@@ -698,7 +814,7 @@
     define('LB',"\n");
 }
 if (!defined ('VERSION')) {
-    define('VERSION', '1.3.11sr1');
+    define('VERSION', '1.4.0sr5-1');
 }
 
 $_STATES = array(
diff -ruN 1.3.11sr1/cpanel-glprivate/.htaccess 1.4.0sr5-1/cpanel-glprivate/.htaccess
--- 1.3.11sr1/cpanel-glprivate/.htaccess	2005-08-10 15:07:23.000000000 -0500
+++ 1.4.0sr5-1/cpanel-glprivate/.htaccess	1969-12-31 18:00:00.000000000 -0600
@@ -1 +0,0 @@
-Deny from all
diff -ruN 1.3.11sr1/cpanel-glprivate/language/afrikaans.php 1.4.0sr5-1/cpanel-glprivate/language/afrikaans.php
--- 1.3.11sr1/cpanel-glprivate/language/afrikaans.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/afrikaans.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1504 @@
+<?php
+
+###############################################################################
+# afrikaans.php
+# Hierdie is die Afrikaanse taaller vir Geeklog 1.4
+# Opgestel deur Renier Maritz epos:renier@gigaskills.co.za
+#
+# Kopiereg (C) 2000 Jason Whittenburg
+# jwhitten AT securitygeeks DOT com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'iso-8859-1';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Geskryf deur:',
+    2 => 'lees verder',
+    3 => 'kommentaar',
+    4 => 'Wysig',
+    5 => 'Stem',
+    6 => 'Resultaat',
+    7 => 'Peiling resultate',
+    8 => 'stemme',
+    9 => 'Admin Funksies:',
+    10 => 'Bydraes',
+    11 => 'Artikels',
+    12 => 'Blokke',
+    13 => 'Onderwerpe',
+    14 => 'Skakels',
+    15 => 'Gebeure',
+    16 => 'Peilings',
+    17 => 'Gebruikers',
+    18 => 'SQL Query',
+    19 => 'Teken Uit',
+    20 => 'Gebruikersinligting:',
+    21 => 'Gebruikernaam',
+    22 => 'Gebruiker ID',
+    23 => 'Sekuriteitsvlak',
+    24 => 'Anoniem',
+    25 => 'Antwoord',
+    26 => 'Die volgende kommentaar is die eiendom van wie dit ookal gepos het.  Hierdie werf is geensins verantwoordelik vir wat daar ges&ecirc; word nie.',
+    27 => 'Mees Onlangse Plasing',
+    28 => 'Verwyder',
+    29 => 'Geen gebruiker kommentaar.',
+    30 => 'Ouer Artikels',
+    31 => 'Toegelate HTML Etikette:',
+    32 => 'Fout, ongeldige gebruikernaam',
+    33 => 'Fout, kon nie na die log l&ecirc;er skryf nie',
+    34 => 'Fout',
+    35 => 'Teken Uit',
+    36 => 'aan',
+    37 => 'Geen gebruiker artikels',
+    38 => 'Inhoud Sindikasie',
+    39 => 'Herlaai',
+    40 => 'Jou <tt>register_globals = Off</tt> in jou <tt>php.ini</tt>. Geekolog vereis egter dat <tt>register_globals</tt> <strong>aan</strong> is. Voordat jy verder gaan, stel dit na <strong>on</strong> en herlaai jou webblaaier.',
+    41 => 'Besoekers',
+    42 => 'Geskryf deur:',
+    43 => 'Antwoord hierop',
+    44 => 'Stam',
+    45 => 'MySQL Foutnommer',
+    46 => 'MySQL Foutboodskap',
+    47 => 'Gebruikersfunksies',
+    48 => 'Rekeninginligting',
+    49 => 'Voorkeure',
+    50 => 'Fout in SQL stelling',
+    51 => 'help',
+    52 => 'Nuut',
+    53 => 'Admin Tuiste',
+    54 => 'Kon die l&ecirc;er nie oopmaak nie.',
+    55 => 'Fout by',
+    56 => 'Stem',
+    57 => 'Wagwoord',
+    58 => 'Teken in',
+    59 => "Nog nie 'n rekening? Registreer dan as 'n <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nuwe Gebruiker</a>",
+    60 => 'Lewer kommentaar',
+    61 => 'Skep Nuwe Rekening',
+    62 => 'woorde',
+    63 => 'Kommentaar Voorkeure',
+    64 => "Epos Artikel aan 'n Vriend",
+    65 => 'Vertoon Drukbare Weergawe',
+    66 => 'My Kalender',
+    67 => 'Welkom by',
+    68 => 'Tuisblad',
+    69 => 'Kontak',
+    70 => 'Soek',
+    71 => 'Skryf iets',
+    72 => 'Web Hulpmiddele',
+    73 => 'Ou Peilings',
+    74 => 'Kalender',
+    75 => 'Gevorderde Soektog',
+    76 => 'Werfstatistieke',
+    77 => 'Proppies',
+    78 => 'Opkomende Gebeure',
+    79 => 'Wat\'s Nuut',
+    80 => 'artikels in laaste',
+    81 => 'artikel in laaste',
+    82 => 'ure',
+    83 => 'KOMMENTARE',
+    84 => 'SKAKELS',
+    85 => 'laaste 48 uur',
+    86 => 'Geen nuwe kommentaar',
+    87 => 'laaste 2 weke',
+    88 => 'Geen onlangse nuwe skakels',
+    89 => 'Daar is geen opkomende gebeure',
+    90 => 'Tuisblad',
+    91 => 'Hierdie blad geskep in',
+    92 => 'sekondes',
+    93 => 'Kopiereg',
+    94 => 'Alle handelsmerke en kopieregte op hierdie blad word deur hulle onderskeie eienaars besit.',
+    95 => 'Aangedryf Deur',
+    96 => 'Groepe',
+    97 => 'Woordelys',
+    98 => 'Proppies',
+    99 => 'ARTIKELS',
+    100 => 'Geen nuwe artikels',
+    101 => 'Jou Gebeure',
+    102 => 'Werfgebeure',
+    103 => 'DB Rugsteuning',
+    104 => 'deur',
+    105 => 'EPOS aan Gebruikers',
+    106 => 'Besigtigings:',
+    107 => 'GL Weergawe Toets',
+    108 => 'Vee Kas skoon',
+    109 => 'Meld misbruik aan',
+    110 => 'Rapporteer hierdie plasing aan die werfadmin',
+    111 => 'Vertoon PDF Weergawe',
+    112 => 'Geregistreerde Gebruikers',
+    113 => 'Dokumentasie',
+    114 => 'TRACKBACKS',
+    115 => 'Geen nuwe trackback kommentaar',
+    116 => 'Trackback',
+    117 => 'Gids',
+    118 => 'Lees asseblief verder op die volgende bladsy:',
+    119 => "Jou <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">wagwoord</a> vergeet?",
+    120 => 'Permanente skakel na hierdie kommentaar',
+    121 => 'Kommentaar (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Alle HTML word toegelaat'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalender van Gebeure',
+    2 => "Ek's jammer daar is geen gebeure om te vertoon nie",
+    3 => 'Wanneer',
+    4 => 'Waar',
+    5 => 'Beskrywing',
+    6 => "Sit 'n Gebeurtenis by",
+    7 => 'Opkomende Gebeure',
+    8 => 'Deur hierdie gebeurtenis by jou kalender te voeg kan jy vinnig die gebeure wat jou interesseer vertoon deur op "My Kalender" by die Gebruikersfunksies te kliek.',
+    9 => 'Sit by My Kalender',
+    10 => 'Verwyder uit My Kalender',
+    11 => "Besig om 'n Gebeurtenis by {$_USER['username']} se Kalender te sit",
+    12 => 'Gebeure',
+    13 => 'Begin',
+    14 => 'Eindig',
+    15 => 'Terug na Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Lewer Kommentaar',
+    2 => 'Plasingmodus',
+    3 => 'Teken Uit',
+    4 => 'Skep Rekening',
+    5 => 'Gebruikernaam',
+    6 => 'Hierdie werf vereis dat jy ingeteken moet wees om kommentaar te kan lewer, teken asseblief in.  As jy nie \'n rekening het nie kan jy die vorm hier onder gebruik om een te skep.',
+    7 => 'Jou laast kommentaar was ',
+    8 => " sekondes gelede.  Hierdie werf vereis dat ten minstne {$_CONF['commentspeedlimit']} sekondes tussen kommentare verstryk.",
+    9 => 'Kommentaar',
+    10 => 'Stuur Verslag',
+    11 => 'Stuur Kommentaar',
+    12 => 'Vul asseblief die Titel en Kommentaar velde in, dit is \'n vereiste.',
+    13 => 'Jou Inligting',
+    14 => 'Voorskou',
+    15 => 'Rapporteer hierdie plasing',
+    16 => 'Titel',
+    17 => 'Fout',
+    18 => 'Belangrike Goed',
+    19 => 'Die plasing moet verkieslik met die onderwerp verband hou.',
+    20 => 'Probeer eerder om kommentaar te lewer eerder as om \'n nuwe artikel te begin oor dieselfde besprekingsonderwerp.',
+    21 => 'Lees ander mense se boodskappe voordat jy jou eie plaas om te verhoed dat jy herhaal wat reeds ges&ecirc; is.',
+    22 => 'Gebruik \'n duidelike onderwerp wat beskryf waaroor jou boodskap gaan.',
+    23 => 'Jou epos adres sal NIE geopenbaar word nie.',
+    24 => 'Anonieme Gebruiker',
+    25 => 'Is jy seker dat jy hierdie plasing aan die werf admin wil rapporteer?',
+    26 => '%s het die volgende beledigende plasing of misbruik gerapporteer:',
+    27 => 'Misbruikverslag'
+);
+
+###############################################################################
+# usersettings.php
+
+$LANG04 = array(
+    1 => 'Gebruikersprofiel van',
+    2 => 'Gebruikernaam',
+    3 => 'Volle Naam',
+    4 => 'Nuwe Wagwoord',
+    5 => 'Epos',
+    6 => 'Tuisblad',
+    7 => 'Bio',
+    8 => 'PGP Sleutel',
+    9 => 'Stoor Inligting',
+    10 => 'Laaste 10 kommentare van gebruiker',
+    11 => 'Geen Gebruikerkommentaar',
+    12 => 'Gebruikersvoorkeure van',
+    13 => 'Epos Nagtelike Opsomming',
+    14 => 'Hierdie wagwoord word deur \'n lukraak algoritme saamgestel. Daar word aanbeveel dat jy dit onmiddelik verander.  Om jou wagwoord te verander moet jy inteken en dan op Rekeninginligting kliek by die Gebruikersfunksies keusebalk.',
+    15 => "Jou {$_CONF['site_name']} rekening is suksesvol opgestel. Om dit te kan gebruik moet jy inteken deur die onderstaande inligting te gebruik.  Stoor hierdie epos vir latere verwysing.",
+    16 => 'Jou Rekeninginligting',
+    17 => 'Rekening bestaan nie',
+    18 => 'Die epos adres wat verskaf is blyk nie \'n geldige een te wees nie',
+    19 => 'Die gebruikernaam of epos adres wat verskaf is bestaan reeds',
+    20 => 'Die epos adres verskaf blyk nie \'n geldige adres te wees nie',
+    21 => 'Fout',
+    22 => "Registreer by {$_CONF['site_name']}!",
+    23 => "Die skep van 'n gebruikersrekening sal jou al die voordele gee van lidmaatskap by {$_CONF['site_name']} en sal jou in staat stel om kommentaar te plaas asook om artikels self te skep. As jy nie 'n rekening het nie, sal jy slegs anonieme plasing kan maak. Neem asseblief kennis dat jou epos adres <b><i>nooit</i></b> op hierdie werf geopenbaar sal word nie.",
+    24 => 'Jou wagwoord sal na die eposadres wat jy verskaf gestuur word.',
+    25 => 'Het jy jou Wagwoord vergeet?',
+    26 => 'Sleutel <em>of</em> jou gebruikernaam <em>of</em> die epos adres wat jy gebruik het om mee te registreer en kliek Epos Wagwoord. Instruksies oor hoe om \'n nuwe wagwoord in te stel sal aan die betrokke epos adres op rekord gestuur word.',
+    27 => 'Registreer Nou!',
+    28 => 'Epos Wagwoord',
+    29 => 'uitgeteken vanuit',
+    30 => 'ingeteken vanuit',
+    31 => 'Die funksie wat jy gekies het vereis dat jy inteken',
+    32 => 'Handtekening',
+    33 => 'Nooit vertoon',
+    34 => 'Dit is jou regte naam',
+    35 => 'Sleutel wagwoord in om dit te verander',
+    36 => 'Begin met http://',
+    37 => 'Aangeheg by jou kommentaar',
+    38 => 'Dit gaan alles oor jou!  Enigeen kan dit lees',
+    39 => 'Jou publieke PGP sleutel om te deel',
+    40 => 'Geen Onderwerp Ikone',
+    41 => 'Gewillig om te Modereer',
+    42 => 'Datumformaat',
+    43 => 'Maksimum Artikels',
+    44 => 'Geen bokse',
+    45 => 'Vertoon Voorkeure vir',
+    46 => 'Uitgeslote Items vir',
+    47 => 'Nuwe boks Konfigurasie vir',
+    48 => 'Onderwerpe',
+    49 => 'Geen ikone in artikels',
+    50 => 'Verwyder merk as jy nie hierin belangstel nie',
+    51 => 'Slegs die nuusartikels',
+    52 => 'Die standaard is',
+    53 => 'Ontvang die dag se stories elke nag',
+    54 => 'Merk die boksies vir die onderwerpe en skrywers wat jy nie wil sien nie.',
+    55 => 'As jy almal ongemerk laat beteken dit dat jy die standaard keuse van bokse wil sien. As jy bokse merk onthou om almal wat jy wil sien te merk aangesien die standaard keuses ge&iuml;gnoreer gaan word.  Standaard items word in drukskrif aangedui.',
+    56 => 'Skrywers',
+    57 => 'Vertoonmodus',
+    58 => 'Sorteer Volgorde',
+    59 => 'Kommentaar Limiet',
+    60 => 'Hoe wil jy h&ecirc; dat jou kommentaar vertoon word?',
+    61 => 'Nuutste of oudstes eerste?',
+    62 => 'Die standaard is 100',
+    63 => "Jou wagwoord is aan jou gestuur per epos en behoort kortliks by jou uit te kom. Volg asseblief die aanwysings in die boodskap en dankie dat jy {$_CONF['site_name']} gebruik",
+    64 => 'Kommentaarvoorkeure van',
+    65 => 'Probeer weer Inteken',
+    66 => 'Jy het moontlik jou besonderhede verkeerd ingesleutel.  Probeer asseblief weer om hieronder in te teken.',
+    67 => 'Lid Sedert',
+    68 => 'Onthou My vir',
+    69 => 'Hoe lank moet ons jou onthou na jy ingeteken het? Tydsverloop waarop jy kan terugkom sonder om weer in te teken',
+    70 => "Verander die uitleg en inhoud van {$_CONF['site_name']} na jou sin",
+    71 => "Een van die beste kenmerke van {$_CONF['site_name']} is dat jy die inhoud wat jy ontvang en die uitleg van die werf kan maak pas by jou eie sin.  Om van hierdie kenmerke gebruik te kan maak moet jy eers <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registreer</a> by {$_CONF['site_name']}.  Is jy reeds 'n lid?  Gebruik dan die intekenvorm aan die linkerkant om in te teken!",
+    72 => 'Tema',
+    73 => 'Taal',
+    74 => 'Verander hoe die werf vertoon!',
+    75 => 'Onderwerpe Gepos aan',
+    76 => 'As jy \'n onderwerp hieronder kies sal jy enige nuwe stories wat by daardie onderwerp gevoeg word aan die einde van elke dag ontvang.  Kies slegs die onderwerpe wat jou intereseer!',
+    77 => 'Foto',
+    78 => 'Sit \'n foto van jouself op!',
+    79 => 'Merk hier om die foto te verwyder',
+    80 => 'Teken in',
+    81 => 'Stuur Epos',
+    82 => 'Laaste 10 artikel vir gebruiker',
+    83 => 'Plasingstatistiek van gebruiker',
+    84 => 'Totale aantal artikels:',
+    85 => 'Totale aantal kommentare:',
+    86 => 'Vind alle plasings deur',
+    87 => 'Jou gebruikernaam',
+    88 => "Iemand (moontlik jy) het versoek dat 'n nuwe wagwoord geskep word vir jou rekening \"%s\" op {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nAs jy dit werklik wou doen, kliek op die volgende skakel:\n\n",
+    89 => "As jy dit nie wil doen nie, ignoreer eenvoudig hierdie boodskap en die versoek sal ge&iuml;gnoreer word (jou wagwoord sal dan onveranderd bly).\n\n",
+    90 => 'Jy kan \'n nuwe wagwoord vir jou rekening hieronder insleutel. Neem asseblief kennis dat jou ou wagwoord steeds geldig bly totdat jy hierdie vorm instuur.',
+    91 => 'Stel Nuwe Wagwoord',
+    92 => 'Sleutel Nuwe Wagwoord in',
+    93 => 'Jou laaste versoek vir \'n nuwe wagwoord was %d sekondes gelede. Hierdie werf vereis dat ten minste %d sekondes verstryk tussen wagwoordversoeke.',
+    94 => 'Verwyder Rekening "%s"',
+    95 => 'Kliek die "verwyder rekening" knop hieronder om jou rekening van ons databasis te verwyder.  Neem kennis dat enige artikels en kommentaar onder hierdie rekening bygedra <strong>nie</strong> verwyder sal word nie maar gemerk sal word as deur "Anoniem" gepos.',
+    96 => 'verwyder rekening',
+    97 => 'Bevestig Verwydering van Rekening',
+    98 => 'Is jy seker dat jy jou rekening wil verwyder? Deur dit te doen sal jy nie meer op hierdie werf kan inteken nie (tensy jy \'n nuwe rekening skep). As jy seker is, kliek weer op "verwyder rekening" op die vorm hieronder.',
+    99 => 'Privaatheidsopsis vir',
+    100 => 'Epos van Admin',
+    101 => 'Laat epos van Werf Admin toe',
+    102 => 'Epos van Gebruikers',
+    103 => 'Laat epos toe vanaf onder gebruikers',
+    104 => 'Vertoon Aanlyn Status',
+    105 => 'Vertoon in die Wie\'s Aanlyn blok',
+    106 => 'Ligging',
+    107 => 'Vertoon in jou openbare profiel',
+    108 => 'Bevestig nuwe wagwoord',
+    109 => 'Sleutel die Nuwe wagwoord weer hier in',
+    110 => 'Huidige Wagwoord',
+    111 => 'Sleutel asseblief jou Huidige wagwoord in',
+    112 => 'Jy het die toelaatbare getal intekenpogings oorskry.  Probeer asseblief weer later.',
+    113 => 'Intekenpoging  het Misluk',
+    114 => 'Rekening Gedeaktiveer',
+    115 => 'Jou rekening is gedeatkiveer, jy mag nie inteken nie. Kontak die Administrateur.',
+    116 => 'Rekening Wag op Aktivering',
+    117 => 'Jou rekening is tans gelys vir aktivering deur die administrateur. Jy sal nie kan inteken alvorens jou rekening goedgekeur is nie.',
+    118 => "Jou {$_CONF['site_name']} rekening is nou geaktiveer deur \'n administrateur. Jy mag nou inteken op die werf by die url hieronder deur jou gebruikernaam en wagwoord te gebruik soos voorheen aan jou ge-epos.",
+    119 => "As jy jou wagwoord vergeet het, kan jy \'n nuwe een aanvra by die volgende url:",
+    120 => 'Rekening Geaktiveer',
+    121 => 'Diens',
+    122 => 'Jammer, nuwe gebruiker registrasie is gedeaktiveer',
+    123 => "Is jy 'n <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nuwe gebruiker</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Geen Nuus om te Vertoon',
+    2 => 'Daar is geen nuwe nuusartikels om te vertoon nie.  Daar mag dalk geen nuusartikels vir hierdie onderwerp wees nie of jou gebruikersvoorkeure mag dalk te beperkend wees.',
+    3 => ' vir onderwerp %s',
+    4 => 'Artikel van die Dag',
+    5 => 'Volgende',
+    6 => 'Vorige',
+    7 => 'Eerste',
+    8 => 'Laaste'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Daar was \'n fout tydens die stuur van jou boodskap. Probeer asseblief weer.',
+    2 => 'Boodskap suksesvol gestuur.',
+    3 => 'Maak asseblief seker dat jy \'n geldige epos adres in die Antwoord Na veld ingevul het.',
+    4 => 'Vul asseblief jou Naam, Antwoord Aan, Onderwerp en Boodskapvelde in',
+    5 => 'Fout: Geen sodanige gebruiker.',
+    6 => 'Daar was \'n fout.',
+    7 => 'Gebruikersprofiel vir',
+    8 => 'Gebruikernaam',
+    9 => 'Gebruiker URL',
+    10 => 'Stuur epos aan',
+    11 => 'Jou Naam:',
+    12 => 'Antwoord Na:',
+    13 => 'Onderwerp:',
+    14 => 'Boodskap:',
+    15 => 'HTML word nie vertaal nie.',
+    16 => 'Stuur Boodskap',
+    17 => 'Epos Artikel aan \'n Vriend',
+    18 => 'Aan Naam',
+    19 => 'Na Epos Adres',
+    20 => 'Van Naam',
+    21 => 'Van Epos Adres',
+    22 => 'Alle velde word vereis',
+    23 => "Hierdie epos is aan jou gestuur deur %s by %s omdat hulle gedink het dat jy dalk mag belangstel in hierdie artikel op {$_CONF['site_url']}.  Hierdie is nie gemorspos nie en die epos adres van die ontvanger is nie op 'n lys gestoor vir latere gebruik nie.",
+    24 => 'Kommentaar op hierdie artikel by',
+    25 => 'Jy moet ingetekn wees om hierdie kenmerk te benut.  Deur jou te laat inteken vermy ons misbruik van die stelsel',
+    26 => 'Hierdie vorm sal jou toelaat om \'n epos aan die gekose gebruiker te stuur.  Alle velde word vereis.',
+    27 => 'Kort boodskap',
+    28 => '%s het geskryf: ',
+    29 => "Hierdie is die daaglikse opsomming van {$_CONF['site_name']} vir ",
+    30 => ' Daaglikse Nuusbrief vir ',
+    31 => 'Titel',
+    32 => 'Datum',
+    33 => 'Lees die volledige artikel by',
+    34 => 'Einde van Boodskap',
+    35 => 'Jammer, hierdie gebruiker verkies om nie epos te ontvang nie.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Gevorderde Soektog',
+    2 => 'Sleutelwoorde',
+    3 => 'Onderwerp',
+    4 => 'Almal',
+    5 => 'Tipe',
+    6 => 'Artikels',
+    7 => 'Kommentaar',
+    8 => 'Skrywers',
+    9 => 'Almal',
+    10 => 'Soek',
+    11 => 'Soekresultate',
+    12 => 'passende artikels',
+    13 => 'Soekresultate: Geen passende artikels',
+    14 => 'Geen artikels het by jou sleutelwoorde gepas nie',
+    15 => 'Probeer asseblief weer.',
+    16 => 'Titel',
+    17 => 'Datum',
+    18 => 'Skrywer',
+    19 => "Deursoek die hele {$_CONF['site_name']} databasis vir huidige en ouer artikels",
+    20 => 'Datum',
+    21 => 'tot',
+    22 => '(Datum Formaat YYYY-MM-DD)',
+    23 => 'Besigtigings',
+    24 => '%d items gevind',
+    25 => 'Gesoek vir',
+    26 => 'items ',
+    27 => 'sekondes',
+    28 => 'Geen artikel of kommentaar pas by jou soeknavraag nie',
+    29 => 'Artikel- en Kommentaarresultate',
+    30 => 'Geen skakels pas by jou soektog nie',
+    31 => 'Hierdie proppie het geen passende resultaat gelewer nie',
+    32 => 'Gebeure',
+    33 => 'URL',
+    34 => 'Ligging',
+    35 => 'Heeldag',
+    36 => 'Geen gebeure het by jou soeknavraag gepas nie',
+    37 => 'Gebeureresultate',
+    38 => 'Skakelresultate',
+    39 => 'Skakels',
+    40 => 'Gebeure',
+    41 => 'Jou soeknavraag moet ten minste 3 karakters bevat.',
+    42 => 'Gebruik asseblief \'n datum wat as sulks geformatteer is YYYY-MM-DD (jaar-maand-dag).',
+    43 => 'presiese sinsnede',
+    44 => 'al hierdie woorde',
+    45 => 'enige van hierdie woorde',
+    46 => 'Volgende',
+    47 => 'Vorige',
+    48 => 'Skrywer',
+    49 => 'Datum',
+    50 => 'Kere aangevra',
+    51 => 'Skakels',
+    52 => 'Ligging',
+    53 => 'Artikelresultate',
+    54 => 'Kommentaarresultate',
+    55 => 'die sinsnede',
+    56 => 'EN',
+    57 => 'OF',
+    58 => 'Meer resultate &gt;&gt;',
+    59 => 'Resultate',
+    60 => 'per bladsy',
+    61 => 'Verfyn soektog'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Werfstatistiek',
+    2 => 'Totale kere Aangevra vanaf die stelsel',
+    3 => 'Artikels (Kommentare) in die stelsel',
+    4 => '',
+    5 => '',
+    6 => 'Gebeure in die stelsel',
+    7 => 'Top Tien Artikels volgens besigtigings',
+    8 => 'Titel van Artikel',
+    9 => 'Besigtigings',
+    10 => 'Dit wil voorkom asof daar geen sntories op hierdie werf is nie of dalk het niemand hulle nog besigtig nie.',
+    11 => 'Top Tien Artikels volgens getal Kommentare gelewer',
+    12 => 'Kommentaar',
+    13 => 'Dit wil voorkom asof daar geen artikels op die werf is nie of dalk het niemand nog kommentaar op hulle gelewer nie.',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => 'Dit wil voorkom asof daar geen skakels op die werf is nie of dalk het niemand nog ooit daarop gekliek nie.',
+    22 => 'Top Tien Artikel volgens getal per Epos aangestuur',
+    23 => 'Eposse',
+    24 => 'Dit wil voorkom asof niemand nog \'n storie per epos aangestuur het op hierdie werf nie',
+    25 => 'Top Tien Trackback Kommentaar Artikels',
+    26 => 'Geen trackback kommentaar gevind.',
+    27 => 'Aantal aktiewe gebruikers',
+    28 => 'Top Tien Gebeurtenisse',
+    29 => 'Gebeurtenis',
+    30 => 'Kere Aangevra',
+    31 => 'Dit wil voorkom asof daar geen gebeure op die werf geplaas is nie of dalk het niemand nog op een gekliek het nie.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Verwante Artikels',
+    2 => 'Epos Artikel aan \'n Vriend',
+    3 => 'Drukbare artikelformaat',
+    4 => 'Artikelopsies',
+    5 => 'PDF Artikelformaat'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Om \'n %s te plaas word daar vereis dat jy as gebruiker ingeteken is.',
+    2 => 'Teken in',
+    3 => 'Nuwe Gebruiker',
+    4 => 'Sit Gebeurtenis by',
+    5 => '',
+    6 => 'Plaas \'n Artikel',
+    7 => 'Intekening word Vereis',
+    8 => 'Stuur',
+    9 => 'Wanneer jy inligting verskaf vir gebruik op hierdie werf versoek ons dat jy die volgende riglyne volg...<ul><li>Vul al die velde in aangesien dit vereis word<li>Verskaf volledig en akkurate inligting<li>Gaan die URL\'le deeglik na</ul>',
+    10 => 'Titel',
+    11 => 'Skakel',
+    12 => 'Begindatum',
+    13 => 'Einddatum',
+    14 => 'Ligging',
+    15 => 'Beskrywing',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => 'Lees eers hier',
+    20 => '',
+    21 => '',
+    22 => 'Fout: Vermiste Velde',
+    23 => 'Vul asseblief al die velde op die vorm in.  Alle velde word vereis.',
+    24 => 'Bydrae Gestoor',
+    25 => 'U %s bydrae is suksesvol gestoor.',
+    26 => 'Spoedbeperking',
+    27 => 'Gebruikernaam',
+    28 => 'Onderwerp',
+    29 => 'Artikel',
+    30 => 'Jou laaste bydrae was ',
+    31 => " sekondes gelede.  Hierdie werf vereis dat ten minste {$_CONF['speedlimit']} sekondes tussen voorleggings verstryk",
+    32 => 'Voorskou',
+    33 => 'Artikel Voorskou',
+    34 => 'Teken Uit',
+    35 => 'HTML tags word nie toegelaat nie',
+    36 => 'Post Modus',
+    37 => "Die voorlegging van 'n gebeurtenis aan {$_CONF['site_name']} sal jou gebeurtenis op die hoofkalender plaas waar gebruikers die keuse het om jou gebeurtenis op hulle eie persoonlike kalender te plaas. Hierdie funksie is <b>NIE</b> bedoel om jou persoonlike gebeure te plaas nie.<br><br>Wanneer jy jou gebeurtenis voorl&ecirc; word dit aan ons administrateurs voorgel&ecirc; en indien hulle dit goedkeur sal jou gebeurtenis op die hoofkalender verskyn.",
+    38 => 'Voeg Gebeurtenis By',
+    39 => 'Hoofkalender',
+    40 => 'Persoonlike Kalender',
+    41 => 'Eindtyd',
+    42 => 'Begintyd',
+    43 => 'Heeldag Gebeurtenis',
+    44 => 'Adreslyn 1',
+    45 => 'Adreslyn 2',
+    46 => 'Stad/Dorp',
+    47 => 'Provinsie',
+    48 => 'Poskode',
+    49 => 'Gebeurtenistipe',
+    50 => 'Wysig Gebeurtenistipes',
+    51 => 'Ligging',
+    52 => 'Verwyder',
+    53 => 'Skep Rekening'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Bevestiging van ID Vereis',
+    2 => 'Geweier! Ongeldige Intekeninligting',
+    3 => 'Ongeldige wagwoord vir gebruiker',
+    4 => 'Gebruikernaam:',
+    5 => 'Wagwoord:',
+    6 => 'Alle toegang tot administratiewe gedeeltes van hierdie werf word aangeteken en hersien.<br>Hierdie bladsy is allenlik vir die gebruik van regmatige personeel.',
+    7 => 'teken in'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Onvoldoende Adminregte',
+    2 => 'Jy het nie voldoende regte om hierdie blok te wysig nie.',
+    3 => 'Blokverwerker',
+    4 => 'Daar was \'n probleem met die lees van hierdie voer (sien error.log vir besonderhede).',
+    5 => '',
+    6 => '',
+    7 => 'Almal',
+    8 => 'Blok Beveiligingsvlak',
+    9 => 'Blok Volgorde',
+    10 => '',
+    11 => 'Portaalblok',
+    12 => 'Normale Blok',
+    13 => 'Portaalblok Opsies',
+    14 => 'RSS URL',
+    15 => 'Laaste RSS Opdatering',
+    16 => 'Normale Blok Opsies',
+    17 => 'Blokinhoud',
+    18 => 'Vul asseblief die Blok se titel- en inhoudvelde in',
+    19 => 'Blokbestuurder',
+    20 => '',
+    21 => 'Blok SecLev',
+    22 => '',
+    23 => 'Blok Volgorde',
+    24 => '',
+    25 => 'Om \'n blok te wysig of verwyder, kliek op daardie blok se wysig ikoon hieronder.  Om \'n nuwe blok te skep, kliek op "Maak Nuwe" hierbo. Om \'n blok te skuif, kliek op die pyltjies op of die [R] en [L] bokse.',
+    26 => 'Uitlegblok',
+    27 => 'PHP-Blok',
+    28 => 'PHP-Blok Opsies',
+    29 => 'Blokfunksie',
+    30 => 'As jy sou wou h&ecirc; dat een van jou blokke PHP-kode gebruik, tik die naam van die funksie hierbo in.  Jou funksie moet begin met die voorvoegsel "phpblock_" (bv. phpblock_kryweer).  As dit nie hierdie voorvoegsel het nie, sal jou funksie nie uitgevoer word nie.  Ons doen dit om te keer dat mense wat dalk onregmatige toegang tot jou stelsel se installasie verkry het daarvan te weerhou om willekeurig kode uit te voer wat skadelik mag wees vir jou stelsel.  Maak seker dat jy le&euml; hakies "()" agter jou funksie naam bysit.  Verder word jy ook aangeraai dat jy al jou PHP-Blok kode in /pad/na/geeklog/system/lib-custom.php stoor.  Dit sal dit vir jou moontlik maak om jou kode te behou al gradeer jy na \'n nuwe weergawe van Geeklog op.',
+    31 => 'Fout in PHP-Blok. Funksie, %s, bestaan nie.',
+    32 => 'Fout Vermiste Veld(e)',
+    33 => 'Jy moet die URL na die RSS l&ecirc;er vir portaalblokke insleutel',
+    34 => 'Jy moet die titel en funksie vir PHP-blokke insleutel',
+    35 => 'Jy moet die titel en inhoud vir normale blokke invoer',
+    36 => 'Jy moet die inhoed vir uitlegblokke invoer',
+    37 => 'Ongeldige PHP-blok funksienaam',
+    38 => 'Funksies vir PHP Blokke moet die voorvoegsel \'phpblock_\' (bv. phpblock_kryweer) h.  Die \'phpblock_\' voorvoegsel word vereis vir veiligheisredes om die arbitr&ecirc;re uitvoer van kode te verhoed.',
+    39 => 'Kant',
+    40 => 'Links',
+    41 => 'Regs',
+    42 => 'U moet die bloktitel en blokvolgorde insleutel vir Geeklog se standaardblokke.',
+    43 => 'Slegs Tuisblad',
+    44 => '',
+    45 => "U probeer om toegang tot 'n blok te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken. Gaan terug na die <a href=\"{$_CONF['site_admin_url']}/block.php\">blokadministrasieskerm</a>.",
+    46 => 'Skuif',
+    47 => '',
+    48 => 'Bloknaam',
+    49 => ' (geen spasies en moet uniek wees)',
+    50 => '',
+    51 => 'sluit http:// in',
+    52 => 'As jy hierdie leeg los sal die hulp-ikoon vir hierdie blok nie vertoon word nie',
+    53 => 'Geaktiveer',
+    54 => 'stoor',
+    55 => 'kanselleer',
+    56 => 'verwyder',
+    57 => 'Skuif Blok Ondertoe',
+    58 => 'Skuif Blok Boontoe',
+    59 => 'Skuif blok na die regterkant',
+    60 => 'Skuif blok na die linkerkant',
+    61 => 'Geen Titel',
+    62 => 'Artikel Limiet',
+    63 => 'Ongeldige Bloktitel',
+    64 => 'Jou Titel mag nie leeg wees of HTML bevat nie!',
+    65 => 'Volgorde'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Gebeure bestuur',
+    2 => 'Fout',
+    3 => 'Post Modus',
+    4 => 'Gebeurtenis URL',
+    5 => 'Gebeurtenis Begindatum',
+    6 => 'Gebeurtenis Einddatum',
+    7 => 'Gebeurtenis Ligging',
+    8 => 'Gebeurtenis Beskrywing',
+    9 => '(sluit http:// in)',
+    10 => 'U moet die datum/tye, gebeurtenistitel en beskrywing verskaf',
+    11 => 'Gebeurtenis Bestuur',
+    12 => 'Om \'n gebeurtenis te wysig of te verwyder, kliek om daardie gebeurtenis se wysig ikoon hierdonder.  Om \'n nuwe gebeurtenis te skep, kliek op "Skep Nuwe" hierbo.  Kliek op die kopie&euml;r ikoon om \'n kopie van \'n bestaande gebeurtenis te skep.',
+    13 => 'Bydraer',
+    14 => 'Begindatum',
+    15 => 'Einddatum',
+    16 => '',
+    17 => "U probeer om toegang te verkry tot 'n gebeurtenis waartoe u nie regte het nie.  Hierdie poging is aangeteken. Gaan asseblief terug <a href=\"{$_CONF['site_admin_url']}/event.php\">na die gebeurtenisbestuurskerm</a>.",
+    18 => '',
+    19 => '',
+    20 => 'stoor',
+    21 => 'kanselleer',
+    22 => 'verwyder',
+    23 => 'Ongeldige begindatum.',
+    24 => 'Ongeldige einddatum.',
+    25 => 'Einddatum is voor die begindatum.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Vorige Artikels',
+    2 => 'Volgende Artikels',
+    3 => 'Modus',
+    4 => 'Post Modus',
+    5 => 'Artikel Redigeerder',
+    6 => 'Daar is geen artikels in die stelsel nie',
+    7 => 'Skrywer',
+    8 => 'stoor',
+    9 => 'voorskou',
+    10 => 'kanselleer',
+    11 => 'verwyder',
+    12 => 'ID',
+    13 => '',
+    14 => '',
+    15 => 'Datum',
+    16 => 'Inleidende Teks',
+    17 => 'Inhoud',
+    18 => 'Besigtig',
+    19 => 'Kommentaar',
+    20 => 'Pieng',
+    21 => 'Stuur Pieng',
+    22 => 'Artikellys',
+    23 => 'Om \'n artikel uit te vee, kliek op die artikel se wysig ikoon hieronder. Om \'n artikel ten volle te vertoon, kliek op die titel van die artikel wat jy wil lees.  Om \'n nuwe artikel te skep, kliek op "Skryf iets" hierbo.',
+    24 => 'Die ID wat jy vir die artikel gekies het is reeds in gebruik. Gebruik asb \'n ander ID.',
+    25 => 'Fout tydens stoor van artikel',
+    26 => 'Artikelvoorskou',
+    27 => 'As jy [unscaledX] in plaas van [imageX] gebruik sal die beeld op sy oorspronklike grootte geplaas word.',
+    28 => '<p><b>VOORSKOU</b>: Die voorskou van \'n artikel met prente daarin kan beter gedoen word deur die artikel as \'n draft te stoor eerder as om die voorskou knop te kliek.  Gebruik die voorskou slegs as daar geen prente ingesluit is by die artikel nie.',
+    29 => 'Trackbacks',
+    30 => 'Foute tydens oplaai van l&ecirc;ers',
+    31 => 'Vul asseblief die Titel en Inleiding teksvelde in',
+    32 => 'Uitgeligte Artikel',
+    33 => 'Slegs een artikel kan uitgelig word',
+    34 => 'Draft',
+    35 => 'Ja',
+    36 => 'Nee',
+    37 => 'Meer deur',
+    38 => 'Meer van',
+    39 => 'Eposse',
+    40 => '',
+    41 => "U probeer om toegang tot 'n artikel te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken.  U kan die artikel in lees-alleen formaat hieronder besigtig. Gaan <a href=\"{$_CONF['site_admin_url']}/story.php\">asseblief terug na artikel administrasieskerm</a> as u klaar is.",
+    42 => "U probeer om toegang tot \'n storie te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken.  Gaan asseblief <a href=\"{$_CONF['site_admin_url']}/story.php\">terug na die artikel administrasieskerm</a>.",
+    43 => '',
+    44 => '',
+    45 => '',
+    46 => '<b>LET WEL:</b> as u hierdie datum na \'n toekomstige datum wysig, sal die artikel eers op daardie datum gepubliseer word.  Dit beteken ook dat die artikel nie in jou RSS nuusvoer ingesluit sal word nie en deur die soekfunksie en statistiese bladsye ge&iuml;gnoreer sal word.',
+    47 => 'Beelde',
+    48 => 'beeld',
+    49 => 'regs',
+    50 => 'links',
+    51 => 'Om een van die beelde wat jy by die artikel aanheg in die artikel te laat vertoon moet jy spesiale teks gebruik.  Die formaat van die spesiale teks is [imageX], [imageX_right] of [imageX_left] waar X die nommer is van die beeld/prent wat jy aangeheg het.  LET WEL: Jy moet die beelde gebruik wat jy aanheg gebruik.  As jy dit nie doen nie sal jy nie jou artikel kan stoor nie.<br>',
+    52 => '',
+    53 => 'is nie gebruik nie.  Jy moet hierdie beeld in die Inleiding of Kern van jou teks insluit alvorens jy jou veranderinge kan stoor',
+    54 => 'Aangehegte Beelde nie Gebruik',
+    55 => 'Die volgende foute het voorgekom tydens die poging om u storie te stoor.  Stel hierdie foute reg alvorens u probeer stoor',
+    56 => 'Wys Onderwerp Ikoon',
+    57 => 'Vertoon Ongeskaalde Beeld',
+    58 => 'Argief Opsies',
+    59 => 'Opsie',
+    60 => '',
+    61 => 'Outo-argief',
+    62 => 'Outo-verwydering',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Maak die Inhoud skryfarea groter',
+    68 => 'Maak die Inhoud skryfarea kleiner',
+    69 => 'Publikasie Datum vir Artikel',
+    70 => 'Kies Keusebalk',
+    71 => 'Basiese Keusebalk',
+    72 => 'Gewone Keusebalk',
+    73 => 'Gevorderde Keusebalk',
+    74 => 'Gevorderde II Keusebalk',
+    75 => 'Volkeuse',
+    76 => 'Opsies vir Publikasie',
+    77 => 'Javascript moet geaktiveer wees vir die Gevorderde Skryfblok. Opsie kan in die hoofwerf config.php buite werking gestel word',
+    78 => 'Kliek <a href="%s/story.php?mode=edit&sid=%s&editopt=default">hier</a> om die Standaard Skryfblok te gebruik',
+    79 => 'Voorskou',
+    80 => 'Skryfblok',
+    81 => 'Publikasievoorkeure',
+    82 => 'Beelde',
+    83 => 'Argiefvoorkeure',
+    84 => 'Regte',
+    85 => 'Wys Alles'
+);
+
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Onderwerpbestuur',
+    2 => 'Onderwerp ID',
+    3 => 'Onderwerpnaam',
+    4 => 'Onderwerpbeeld',
+    5 => '(moenie spasies gebruik nie)',
+    6 => 'Die verwydering van \'n onderwerp verwyder alle verbonde artikels en blokke daarmee saam',
+    7 => 'Vul asseblief die Onderwerp ID- en Naamvelde in',
+    8 => 'Onderwerpbestuur',
+    9 => 'Om \'n onderwerp te wysig of te verwyder kliek op daardie onderwerp.  Om \'n nuwe onderwerp te skep, kliek op "Skep Nuwe" hierbo. Jy sal jou toegangsvlak vir elke onderwerp in hakies sien. Die sterretjie(*) verwys na die standaard onderwerp.',
+    10 => 'Sorteer Volgorde',
+    11 => 'Artikels/Bladsy',
+    12 => 'Toegang Geweier',
+    13 => "U probeer om toegang tot 'n onderwerp te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken. Gaan asseblief <a href=\"{$_CONF['site_admin_url']}/topic.php\">terug na die onderwerpbestuurskerm</a>.",
+    14 => 'Sorteer Metode',
+    15 => 'alfabeties',
+    16 => 'standaard is',
+    17 => 'Nuwe Onderwerp',
+    18 => 'Admin Tuisblad',
+    19 => 'stoor',
+    20 => 'kanselleer',
+    21 => 'verwyder',
+    22 => 'Standaard',
+    23 => 'maak hierdie die standaard onderwerp vir nuwe artikel bydraes',
+    24 => '(*)',
+    25 => 'Argief Onderwerp',
+    26 => 'maak hierdie die standaard onderwerp vir die artikelargief. Slegs een onderwerp toegelaat.',
+    27 => 'of Laai Onderwerp Ikoon',
+    28 => 'Maksimum',
+    29 => 'L&ecirc;er Oplaai Foute'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Gebruikersbestuur',
+    2 => 'Gebruiker ID',
+    3 => 'Gebruikersnaam',
+    4 => 'Volle Naam',
+    5 => 'Wagwoord',
+    6 => 'Sekuriteitsvlak',
+    7 => 'Epos-adres',
+    8 => 'Tuisblad',
+    9 => '(moenie spasies gebruik nie)',
+    10 => 'Vul asseblief die Gebruikersnaam en Epos-adresvelde in',
+    11 => 'Gebruikersbestuur',
+    12 => 'Om \'n gebruiker te wysig of te verwyder, kliek op daardie gebruiker se wysig ikoon hieronder. Om \'n gebruiker se besonderhede te vertoon, kliek op die gebruikersnaam wat u wil bekyk. Om \'n nuwe gebruiker te skep, kliek op "Skep Nuwe" hierbo. U kan eenvoudige soektogte doen deur dele van die gebruikersnaam, epos-adres of volle naam (bv. *son* or *.edu) in die onderstaande vorm in te tik.',
+    13 => 'Sekvlak',
+    14 => 'Reg. Datum',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => 'stoor',
+    21 => 'Die gebruikersnaam wat u probeer stoor het bestaan reeds.',
+    22 => 'Fout',
+    23 => 'Lysbyvoeging',
+    24 => 'Voer Lys van Gebruikers in',
+    25 => 'Jy kan \'n lys van gebruikers in Geeklog invoer.  Die invoerl&ecirc;er moet \'n tab-geskeide teksl&ecirc;er wees en moet die velde in die volgende volgorde h&ecirc;: volle naam, gebruikersnaam, epos-adres,.  Aan elke gebruiker wat jy so invoer sal \'n lukraak geskepte wagwoord gepos word.  Daar moet slegs een gebruiker per lyn verskyn.  As jy in gebreke bly om die aanwysings te volg kan baie probleme veroorsaak word wat baie werk kan verg om die inskrywings weer na te gaan!',
+    26 => '',
+    27 => '',
+    28 => 'Merk hier om die prent te verwyder',
+    29 => 'Pad',
+    30 => 'Voer in',
+    31 => 'Nuwe Gebruikers',
+    32 => 'Verwerking voltooi. %d ingevoer met %d foute',
+    33 => 'stuur',
+    34 => 'Fout: Jy moet \'n l&ecirc;er spesifiseer om op te laai.',
+    35 => 'Laaste Intekening',
+    36 => '(nooit)',
+    37 => 'GID',
+    38 => 'Groepslys',
+    39 => 'Wagwoord (weereens)',
+    40 => 'Registrasie Datum',
+    41 => 'Laaste Intekendatum',
+    42 => 'Verban',
+    43 => 'Wag op Aktivering',
+    44 => 'Wag op Goedkeuring',
+    45 => 'Aktief',
+    46 => 'Gebruikerstatus',
+    47 => 'Wysig',
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Keur goed',
+    2 => 'Verwyder',
+    3 => 'Wysig',
+    4 => 'Profiel',
+    10 => 'Titel',
+    11 => 'Begindatum',
+    12 => 'URL',
+    13 => 'Bydraes',
+    14 => 'Datum',
+    15 => 'Onderwerp',
+    16 => 'Gebruikersnaam',
+    17 => 'Volle naam',
+    18 => 'Epos',
+    34 => 'Bestuur en Beheer',
+    35 => 'Artikel Bydraes',
+    36 => '',
+    37 => 'Gebeure Bydraes',
+    38 => 'Stuur',
+    39 => 'Daar is geen bydraes op hierdie tydstip wat aksie vereis nie',
+    40 => 'Gebruikersbydraes'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sondag',
+    2 => 'Maandag',
+    3 => 'Dinsdag',
+    4 => 'Woensdag',
+    5 => 'Donderdag',
+    6 => 'Vrydag',
+    7 => 'Saterdag',
+    8 => 'Sit Gebeurtenis By',
+    9 => '%s Gebeurtenis',
+    10 => 'Gebeure vir',
+    11 => 'MeesterKalender',
+    12 => 'My Kalender',
+    13 => 'Januarie',
+    14 => 'Februarie',
+    15 => 'Maart',
+    16 => 'April',
+    17 => 'Mei',
+    18 => 'Junie',
+    19 => 'Julie',
+    20 => 'Augustus',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'Desember',
+    25 => 'Terug na ',
+    26 => 'Heeldag',
+    27 => 'Week',
+    28 => 'Persoonlike Kalender van',
+    29 => 'Openbare Kalender',
+    30 => 'verwyder gebeurtenis',
+    31 => 'Sit by',
+    32 => 'Gebeurtenis',
+    33 => 'Datum',
+    34 => 'Tyd',
+    35 => 'Vinnig Byvoeg',
+    36 => 'Stuur',
+    37 => 'Jammer, die persoonlike kalender funksie is nie op hierdie werf geaktiveer nie',
+    38 => 'Persoonlike Gebeurtenis Wysiging',
+    39 => 'Dag',
+    40 => 'Week',
+    41 => 'Maand'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'Vanaf',
+    3 => 'Antwoord na',
+    4 => 'Onderwerp',
+    5 => 'Hoofdeel',
+    6 => 'Stuur na:',
+    7 => 'Alle gebruikers',
+    8 => 'Admin',
+    9 => 'Opsies',
+    10 => 'HTML',
+    11 => 'Dringende Boodskap!',
+    12 => 'Stuur',
+    13 => 'Herstel',
+    14 => 'Ignoreer gebruikersverstellings',
+    15 => 'Fout tydens poging om te stuur na: ',
+    16 => 'Boodskappe suksesvol gestuur na: ',
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Stuur 'n ander boodskap</a>",
+    18 => 'Aan',
+    19 => 'LET WEL: as u \'n boodskap aan alle werflede wil stuur, kies die Logged-in Users groep in die keuselys.',
+    20 => "<successcount> Boodskappe is suksesvol gestuur en <failcount> pogings het misluk.  Die besonderhede van elke poging is hieronder gelys indien jy dit sou benodig.  Andersins kan u <a href=\"{$_CONF['site_admin_url']}/mail.php\">\'n ander boodskap stuur</a> of u kan <a href=\"{$_CONF['site_admin_url']}/moderation.php\">terugkeer na die administrasieblad</a>.",
+    21 => 'Mislukkings',
+    22 => 'Suksesse',
+    23 => 'Geen mislukkings',
+    24 => 'Geen suksesse',
+    25 => '-- Kies Groep --',
+    26 => 'Vul asseblief al die velde op die onderstaande vorm in en kies \'n groep gebruikers uit die keuselys.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Die installasie van proppe kan moontlik skade aan u Geeklog installasie verrig en dalk selfs aan u stelsel.  Dit is daarom belangrik dat u slegs proppe installeer wat afgelaai is vanaf die <a href="http://www.geeklog.net">Geeklog Tuisblad</a> aangesien ons alle proppe wat aaan ons gestuur word deeglik toets op \'n verkseidenheid bedryfstelsels.  Dit is belangrik dat u daarop let dat die prop installasieproses die uitvoer van \'n l&ecirc;erstelsel bevele vereis wat kan aanleiding gee tot sekuriteitsprobleme veral as u proppe vanaf derdeparty werwe gebruik.  Selfs met die waarskuwing kan ons nie die sukses aldan mislukking van enige installasie waarborg nie en aanvaar ons nie verantwoordelikheid vir skade wat veroorsaak word deur die installasie van \'n Geeklog prop nie.  Met ander woorde, u installeer op eie verantwoordelikheid.  Vir die versigtiges is aanwysings ingesluit oor hoe om \'n prop handmatig te installeer ook by elke proppakket ingesluit.',
+    2 => 'Prop Installasie Vrywaring',
+    3 => 'Prop Installasie Vorm',
+    4 => 'Propl&ecirc;er',
+    5 => 'Proplys',
+    6 => 'Waarskuwing: Prop reeds ge&iuml;nstalleer!',
+    7 => 'Die prop wat u probeer installeer bestaan reeds.  Verwyder asseblief die prop alvorens u dit herinstalleer',
+    8 => 'Prop Versoenbaarheidstoets het Misluk',
+    9 => 'Hierdie prop vereis \'n nuwer weergawe van Geeklog. Gradeer of u kopie van <a href="http://www.geeklog.net">Geeklog</a> op of kry \'n nuwer weergawe van die prop.',
+    10 => '<br><b>Daar is tans geen proppe ge&iuml;nstalleer nie.</b><br><br>',
+    11 => 'Om \'n prop te wysig of te verwyder,  kliek op daardie prop se ikoon hieronder. Dit sal die prop se besonderhede vertoon, insluitend die samesteller se webwerf.  Beide die ge&iuml;nstalleerde weergawe en die weergawe wat vanaf die prop se eie kode teruggestuur is, word vertoon.  Dit sal u in staat stel om vas te stel of die prop opgegradeer moet word.  Vir aanwysings oor hoe om \'n prop te installeer of op te gradeer raadpleeg daardie prop se dokumentasie.',
+    12 => 'geen propnaam is aan plugineditor() verskaf nie',
+    13 => 'Propbestuurder',
+    14 => 'Nuwe Prop',
+    15 => 'Admin Tuiste',
+    16 => 'Propnaam',
+    17 => 'Prop weergawe',
+    18 => 'Geeklog Weergawe',
+    19 => 'Aktief',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => 'Installeer',
+    23 => 'Stoor',
+    24 => 'Kanselleer',
+    25 => 'Verwyder',
+    26 => 'Propnaam',
+    27 => 'Prop Tuisblad',
+    28 => 'Ge&iuml;nstalleerde Weergawe',
+    29 => 'Geeklog Weergawe',
+    30 => 'Verwyder Prop?',
+    31 => 'Is u seker dat u hierdie prop wil verwyder?  Deur dit te doen verwyder u al die data en datastrukture wat deur hierdie prop gebruik word.  As u seker is, kliek dan weer op verwyder in die onderstaande vorm.',
+    32 => '<p><b>Fout AutoLink tag nie in korrekte formaat</b></p>',
+    33 => 'Kode Weergawe',
+    34 => 'Opdateer',
+    35 => 'Wysig',
+    36 => 'Kode',
+    37 => 'Data',
+    38 => 'Opdateer!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'skep nuusvoer',
+    2 => 'stoor',
+    3 => 'verwyder',
+    4 => 'kanselleer',
+    10 => 'Inhoud Sindikasie',
+    11 => 'Nuwe Nuusvoer',
+    12 => 'Admin Tuiste',
+    13 => 'Om \'n nuusvoer te wysig of te verwyder kliek op die nuusvoer se wysig ikoon hieronder. Om \'n nuwe voer te skep kliek op "Skep Nuwe" hierbo.',
+    14 => 'Titel',
+    15 => 'Soort',
+    16 => 'L&ecirc;ernaam',
+    17 => 'Formaat',
+    18 => 'Laaste opdatering',
+    19 => 'Aktief',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => '<i>(geen nuusvoere)</i>',
+    23 => 'alle Artikels',
+    24 => 'Nuusvoerbestuurder',
+    25 => 'Nuusvoertitel',
+    26 => 'Limiet',
+    27 => 'Lengte van inskrywings',
+    28 => '(0 = geen teks, 1 = volledige teks, ander = beperk tot die aantal karakters)',
+    29 => 'Beskrywing',
+    30 => 'Laaste Opdatering',
+    31 => 'Karakterstel',
+    32 => 'Taal',
+    33 => 'Inhoud',
+    34 => 'Inskrywings',
+    35 => 'Ure',
+    36 => 'Kies jou soort nuusvoer',
+    37 => 'U het ten minste een prop ge&iuml;nstalleer wat inhoudsindikasie ondersteun. Hieronder moet u kies of u \'n Geeklog nuusvoer wil h&ecirc; of \'n voer vanaf een van die proppe.',
+    38 => 'Fout: Vermiste Velde',
+    39 => 'Vul asseblief die Nuusvoer se Titel, Beskrywing en L&ecirc;ernaam in.',
+    40 => 'Vul asseblief die aantal inskrywings of aantal ure in.',
+    41 => 'Stuur',
+    42 => 'Gebeure',
+    43 => 'Alles',
+    44 => 'Geen',
+    45 => 'Opskrifskakel in onderwerp',
+    46 => 'Beperk Resultate',
+    47 => 'Soek',
+    48 => 'Wysig',
+    49 => 'Nuusvoer Logo',
+    50 => "Relatief tot werf se url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "U wagwoord is aan u gepos en u behoort dit binnekort te ontvang. Volg asseblief die aanwysings in die boodskap.  Dankie dat u {$_CONF['site_name']} gebruik.",
+    2 => "Dankie vir die artikel wat u voorgel&ecirc; het vir plasing op {$_CONF['site_name']}.  Dit sal ter goedkeuring aan ons personeel voorgel&ecirc; word. Indien dit goedgekeur word, sal u artikel beskikbaar wees sodat ander dit op ons werf kan lees.",
+    3 => "",
+    4 => "Dankie vir die gebeurtenis wat u vir plasing op {$_CONF['site_name']} voorgel&ecirc; het.  Dit sal ter goedkeuring aan ons personeel voorgel&ecirc; word.  Indien dit goedgekeur word, sal u gebeurtenis in ons <a href=\"{$_CONF['site_url']}/calendar.php\">kalender</a> verskyn.",
+    5 => 'U rekeninginligting is suksesvol gestoor.',
+    6 => 'U voorkeure is suksesvol gestoor.',
+    7 => 'U kommentaarvoorkeure is suksesvol gestoor.',
+    8 => 'U is suksesvol uitgeteken.',
+    9 => 'U artikel is suksesvol gestoor.',
+    10 => 'Die artikel is suksesvol verwyder.',
+    11 => 'U blok is suksesvol gestoor.',
+    12 => 'Die blok is suksesvol verwyder.',
+    13 => 'U onderwerp is suksesvol gestoor.',
+    14 => 'Die onderwerp en al sy artikels en blokke is suksesvol verwyder.',
+    15 => '',
+    16 => '',
+    17 => 'U gebeurtenis is suksesvol gestoor.',
+    18 => 'Die gebeurtenis is suksesvol verwyder.',
+    19 => 'U peiling is suksesvol gestoor.',
+    20 => 'Die peiling is suksesvol verwyder.',
+    21 => 'Die gebruiker is suksesvol gestoor.',
+    22 => 'Die gebruiker is suksesvol verwyder.',
+    23 => '\'n Fout het voorgekom tydens die byvoeg van \'n gebeurtenis op u kalender.  Geen gebeurtenis id is aangestuur.',
+    24 => 'Die gebeurtenis is in u kalender gestoor',
+    25 => 'Kan nie u persoonlike kalender oopmaak alvorens u inteken nie',
+    26 => 'Gebeurtenis is suksesvol verwyder vanuit u persoonlike kalender',
+    27 => 'Boodskap suksesvol gestuur.',
+    28 => 'Die proppie is suksesvol gestoor',
+    29 => 'Jammer, die persoonlike kalenderfunksie is nie op hierdie werf geaktiveer nie',
+    30 => 'Toegang geweier',
+    31 => 'Jammer, u het nie toegang tot die artikel adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    32 => 'Jammer, u het nie toegang tot die onderwerp adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    33 => 'Jammer, u het nie toegang tot die blok adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    34 => 'Jammer, u het nie toegang tot die skakel adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    35 => 'Jammer, u het nie toegang tot die gebeure adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    36 => 'Jammer, u het nie toegang tot die peiling adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    37 => 'Jammer, u het nie toegang tot die gebruiker adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    38 => 'Jammer, u het nie toegang tot die prop adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    39 => 'Jammer, u het nie toegang tot die epos adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    40 => 'Stelselboodskap',
+    41 => 'Jammer, u het nie toegang to die woordvervangingsblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    42 => 'U woord is suksesvol gestoor.',
+    43 => 'Die woord is suksesvol verwyder.',
+    44 => 'Die prop is suksesvol gestoor!',
+    45 => 'Die prop is suksesvol verwyder.',
+    46 => 'Jammer, u het nie toegang tot die databasis rugsteunfunksie nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    47 => 'Hierdie funksie werk slegs onder *nix stelsels.  Indien u wel \'n *nix bedryfstelsel gebruik is u kasgeheue suksesvol skoongevee. As u op Windows werk, moet u na l&ecirc;ers soek met die naam adodb_*.php en hulle handmatig verwyder.',
+    48 => "Dankie vir u aansoek vir lidmaatskap tot {$_CONF['site_name']}. Ons span sal u aansoek nagaan.  Indien goedgekeur, sal u wagwoord gestuur word aan die epos adres wat u verskaf het.",
+    49 => 'U groep is suksesvol gestoor.',
+    50 => 'Die groep is suksesvol verwyder.',
+    51 => 'Hierdie gebruikersnaam is reeds in gebruik.  Kies asseblief \'n ander een.',
+    52 => 'Die epos adres deur u verskaf blyk nie \'n geldige epos adres te wees nie.',
+    53 => 'U nuwe wagwoord is aanvaar.  Gebruik u nuwe wagwoord hieronder om nou in te teken.',
+    54 => 'U versoek vir \'n nuwe wagwoord het verval.  Probeer weer hieronder.',
+    55 => '\'n Epos is aan u gestuur en behoort u binnekort te bereik.  Volg asseblief die aanwysings in die boodskap om \'n nuwe wagwoord vir u rekening op te stel.',
+    56 => 'Die epos-adres verskaf is reeds in gebruik vir \'n ander rekening.',
+    57 => 'U rekening is suksesvol verwyder.',
+    58 => 'U nuusvoer is suksesvol gestoor.',
+    59 => 'Die nuusvoer is suksesvol verwyder.',
+    60 => 'Die prop is suksesvol opgedateer',
+    61 => 'Prop %s: Onbekende boodskap plekhouer',
+    62 => 'Die terugspoor kommentaar is verwyder.',
+    63 => '\'n Fout het voorgekom tydens die verwydering van die terugspoorkommentaar.',
+    64 => 'U terugspoorkommentaar is suksesvol gestuur.',
+    65 => 'Boernaal gidsdiens suksesvol gestoor.',
+    66 => 'Die boernaal gidsdiens is suksesvol verwyder.',
+    67 => 'Die nuwe wagwoord stem nie met die bevestigingswagwoord ooreen nie!',
+    68 => 'U moet die korrekte huidige wagwoord insleutel.',
+    69 => 'U rekening is geblokeer!',
+    70 => 'U rekening is nog hangende goedkeuring deur die administrateur.',
+    71 => 'U rekening is bevestig en aktivering is nog hangende goedkeuring deur die administrateur.',
+    72 => '\'n Fout het voorgekom tydens die poging om die prop te installeer.  Sien error.log vir besonderhede.',
+    73 => '\'n Fout het voorgekom met die poging om die prop te verwyder.  Sien error.log vir besonderhede.',
+    74 => 'Die skakelkennisgewing is suksesvol gestuur.',
+    75 => 'Terugsporings moet gestuur word deur die POST versoek.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Toegang',
+    'ownerroot' => 'Eienaar/Root',
+    'group' => 'Groep',
+    'readonly' => 'Lees-Alleen',
+    'accessrights' => 'Toegangsregte',
+    'owner' => 'Eienaar',
+    'grantgrouplabel' => 'Gee Bogenoemde Groep Wysigingsregte',
+    'permmsg' => 'Let Wel: lede is al die ingetekende lede van die werf en anoniem is alle gebruikers wat die werf lees sonder om in te teken.',
+    'securitygroups' => 'Sekuriteitsgroepe',
+    'editrootmsg' => "Selfs al is u 'n Administrateur, kan u nie 'n kerngebruiker wysig sonder om self 'n kerngebruiker te wees nie.  U kan alle ander gebruikers wysig buiten die kerngebruikers. Let wel dat alle pogings om kerngebruikers onregmatig te wysig aangeteken word.  Gaan asseblief terug na die <a href=\"{$_CONF['site_admin_url']}/user.php\">Gebruiker Adminblad</a>.",
+    'securitygroupsmsg' => 'Merk die keuseboksies vir die groep waaraan u die gebruiker wil toewys.',
+    'groupeditor' => 'Groepbestuur',
+    'description' => 'Beskrywing',
+    'name' => 'Naam',
+    'rights' => 'Regte',
+    'missingfields' => 'Vermiste velde',
+    'missingfieldsmsg' => 'U moet die naam en beskrywing van die groep verskaf',
+    'groupmanager' => 'Groepbestuurder',
+    'newgroupmsg' => 'Om \'n groep te wysig of te verwyder kliek op daardie groep se wysig ikoon hieronder. Om \'n nuwe groep te skep kliek op "Skep Nuwe" hierbo. Let asseblief daarop dat kerngroepe nie verwyder kan word nie omdat hulle deur die stelsel gebruik word.',
+    'groupname' => 'Groepnaam',
+    'coregroup' => 'Kerngroep',
+    'yes' => 'Ja',
+    'no' => 'Nee',
+    'corerightsdescr' => "Hierdie groep is 'n kerngroep van {$_CONF['site_name']}.  Daarom kan die regte vir hierdie groep nie gewysig word nie.  Hieronder is 'n lees-alleen lys van die regte waartoe hierdie groep toegang het.",
+    'groupmsg' => 'Sekuriteitsgroepe op hierdie werf is hi&euml;rargies.  Deur hierdie groep by enige van die ander groepe hieronder te voeg sal u hierdie groep dieselfde regte gee wat daardie groep het.  Waar moontlik word u aangemoedig om die onderstaande groepe te gebruik om regte aan \'n groep toe te ken.  As u pasgemaakte regte aan \'n groep wil toeken kan u die regte tot die verskeie werf-funksies in die afdeling genaamd \'Regte\' kies.  Om hierdie groep by enige van die onderstaandes te voeg merk u eenvoudig die boksie langs die groep(e) wat u verlang.',
+    'coregroupmsg' => "Hierdie groep is 'n kerngroep van {$_CONF['site_name']}.  Daarom sal die groepe wat aan hierdie groep behoort nie gewysig kan word nie.  Hieronder is 'n lees-alleen lys van die groepe waaraan hierdie groep behoort.",
+    'rightsdescr' => '\'n Groep se toegang tot sekere regte hieronder aangetoon kan direk aan die groep toegeken word OF aan \'n ander groep waarvan hierdie groep \'n lid is.  Diegene wat u hieronder sien sonder \'n keuseblok is die regte wat aan hierdie groep toegeken is uit hoofde van sy lidmaatskap aan \'n ander groep met daardie regte.  Die regte hieronder met keusebokse daarlangsaan is regte wat direk aan hierdie groep toegeken kan word.',
+    'lock' => 'Sluit',
+    'members' => 'Lede',
+    'anonymous' => 'Anoniem',
+    'permissions' => 'Regte',
+    'permissionskey' => 'R = Lees, E = Wysig, wysigingsregte impliseer leesregte is toegeken',
+    'edit' => 'Wysig',
+    'none' => 'Geen',
+    'accessdenied' => 'Toegang Geweier',
+    'storydenialmsg' => "U het nie toegang tot hierdie artikel nie.  Dit kan wees omdat u nie 'n lid van {$_CONF['site_name']} is nie.  Registreer asseblief <a href=\"{$_CONF['site_url']}/users.php?mode=new\">as 'n lid</a> of {$_CONF['site_name']} om volle ledetoegang  te verkry!",
+    'eventdenialmsg' => "U het nie toegang om hierdie gebeurtenis te vertoon nie.  Dit kan wees omdat u nie 'n lid van {$_CONF['site_name']} is nie.  Registreer asseblief <a href=\"{$_CONF['site_url']}/users.php?mode=new\">as 'n lid</a> of {$_CONF['site_name']} om volle ledetoegang  te verkry!",
+    'nogroupsforcoregroup' => 'Hierdie groep behoort nie aan enige ander groep nie',
+    'grouphasnorights' => 'Hierdie groep het nie toegang tot enige van die administratiewe funksies van hierdie werf nie',
+    'newgroup' => 'Nuwe Groep',
+    'adminhome' => 'Admin Tuisblad',
+    'save' => 'stoor',
+    'cancel' => 'kanselleer',
+    'delete' => 'verwyder',
+    'canteditroot' => 'U het probeer om die kerngroep te wysig maar u is nie \'n lid van die kerngroep nie, daarom word u toegang tot die groep geweier.  Kontak die stelseladministrateur as u voel dat dit \'n fout is.',
+    'listusers' => 'Lede',
+    'listthem' => 'lys',
+    'usersingroup' => 'Gebruikers in groep "%s"',
+    'usergroupadmin' => 'Gebruikersgroep Administrasie',
+    'add' => 'Sit by',
+    'remove' => 'Verwyder',
+    'availmembers' => 'Beskikbare Lede',
+    'groupmembers' => 'Groepslede',
+    'canteditgroup' => 'Om hierdie groep te wysig, moet u \'n lid van die groep wees.  Kontak asseblief die stelseladministrateur as u voel dat dit \'n fout is.',
+    'cantlistgroup' => 'Om die lede van hierdie groep te besigtig, moet u self \'n lid wees. Kontak asseblief die stelseladministrateur as u voel dat dit \'n fout is.',
+    'editgroupmsg' => 'Om die ledelys van die groep te wysig kliek op die lidnaam/name en gebruik die Sit by of Verwyder knop. As die lede aan die groep behoort sal hul name sleg aan die regterkant verskyn. Wanneer u klaar is - druk <b>Stoor</b> om die groep op datum te bring en dan terug te keer na die hoof groep adminblad.',
+    'listgroupmsg' => 'Lys van alle huidige lede in die groep: <b>%s</b>',
+    'search' => 'Soektog',
+    'submit' => 'Stuur',
+    'limitresults' => 'Beperk Resultate',
+    'group_id' => 'Groep ID',
+    'plugin_access_denied_msg' => 'U probeer onregmatiglik om toegang tot \'n prop se administrasieblad te verkry.  Let wel alle pogings tot onregmatige toegang tot hierdie blad word aangeteken.',
+    'groupexists' => 'Groepnaam bestaan reeds',
+    'groupexistsmsg' => 'Daar is reeds \'n groep met hierdie naam.  Groepname moet uniek wees.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Laaste 10 Rugsteunings',
+    'do_backup' => 'Voer Rugsteun uit',
+    'backup_successful' => 'Databasis rugsteuning was suksesvol.',
+    'db_explanation' => 'Om \'n nuwe rugsteunkopie van u werf se databasis te skep kliek op "Skep Nuwe" hierbo.',
+    'not_found' => "Foutiewe pad of mysqldump program is nie uitvoerbaar nie.<br>Gaan die <strong>\$_DB_mysqldump_path</strong> definisie in config.php na.<br>Veranderlike is tans gedefinie&euml;r as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Rugsteuning het Misluk: L&ecirc;ergrootte was 0 grepe',
+    'path_not_found' => "{$_CONF['backup_path']} bestaan nie of is nie 'n gids (directory) nie",
+    'no_access' => "Fout: Gids (directory) {$_CONF['backup_path']} is nie toeganklik nie.",
+    'backup_file' => 'Rugsteunl&ecirc;er',
+    'size' => 'Grootte',
+    'bytes' => 'Grepe',
+    'total_number' => 'Totale aantal rugsteunings: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Tuisblad',
+    2 => 'Kontak',
+    3 => 'Publiseer u Werk',
+    4 => 'Skakels',
+    5 => 'Peilings',
+    6 => 'Kalender',
+    7 => 'Werfstatistieke',
+    8 => 'Verpersoonlik',
+    9 => 'Soektog',
+    10 => 'gevorderde soektog',
+    11 => 'Gids'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Fout',
+    2 => 'Gits, ek het oral gesoek maar kan nie <b>%s</b> opspoor nie.',
+    3 => "<p>Ons is jammer, maar die l&ecirc;er wat u versoek het bestaan nie. Gaan gerus die <a href=\"{$_CONF['site_url']}\">tuisblad</a> of die <a href=\"{$_CONF['site_url']}/search.php\">soekblad</a> na om te sien of u dit wat u verloor het kan opspoor."
+);
+
+###############################################################################
+
+$LANG_LOGIN = array(
+    1 => 'Intekening word vereis',
+    2 => 'Jammer, om toegang to hierdie blad te verkry moet u as gebruiker ingeteken wees.',
+    3 => 'Intekening',
+    4 => 'Nuwe Gebruiker'
+);
+
+$LANG_PDF = array(
+    1 => 'Die PDF funksie is gedeaktiveer',
+    2 => 'Die verskafde dokument is nie vertaal nie.  Die dokument is ontvang maar kon nie verwerk word nie.  Maak seker dat u slegs html formaat dokument voorl&ecirc; wat aan die xHTML standaard voldoen. Neem kennis dat onnodig komplekse html dokumente nie noodwendig korrek of enigsins vertaal sal word nie. Die dokument uit u poging was 0 grepe in lengte en is verwyder. As u seker is dat u dokument behoorlik vertaal behoort te word, stuur dit weereens.',
+    3 => 'Onbekende fout tydens skep van PDF',
+    4 => 'Geen bladsy is verskaf of u wil dalk die ad-hoc PDF funksie hieronder gebruik.  As u glo dat u verkeerdelik die blad gekry het, kontak die stelseladministrateur.  Andersins kan u die onderstaande vorm gebruik om die PDF op \'n ad-hoc wyse te skep.',
+    5 => 'Besig om u dokument te laai.',
+    6 => 'Wag asseblief terwyl u dokument gelaai word.',
+    7 => 'U kan met regterknop op die onderstaande knop kliek en dan kies \'save target...\' of \'save link location...\' om \'n kopie van u dokument te stoor.',
+    8 => 'Die gegewe pad wat in die konfigurasie l&ecirc;er van die HTMLDoc program is ongeldig of di&eacute; stelsel kan dit nie uitvoer nie.  Kontak die werfadministrateur as die probleem voortduur.',
+    9 => 'PDF-Skrywer',
+    10 => 'Hierdie is die Ad-hoc PDF-skrywer hulpmiddel. Dit sal poog om enige URL wat u verskaf na \'n PDF om te skakel.  Neem kennis dat sommige web-bladsye nie korrek vertaal sal word met hierdie funksie nie.  Dit is \'n beperking van die HTMLDoc PDF-skrywer program en sulke foute moet dus nie aan die administrateur van die werf gerapporteer word nie',
+    11 => 'URL',
+    12 => 'Skryf PDF!',
+    13 => 'Die PHP konfigurasie op hierde bediener laat nie toe dat URL\'le gebruik word met die fopen() bevel nie.  Die stelseladministrateur moet die php.ini l&ecirc;er wysig en die set allow_url_fopen veranderlike na On toe stel',
+    14 => 'Die PDF wat u versoek het bestaan nie of u het probeer om onregmatiglik toegang tot \'n l&ecirc;er te verkry.'
+);
+
+###############################################################################
+# trackback
+
+$LANG_TRB = array (
+    'trackback'          => 'Terugspoor',
+    'from'               => 'vanaf',
+    'tracked_on'         => 'Gespoor op',
+    'read_more'          => '[lees verder]',
+    'intro_text'         => "Hier is wat ander oor '%s' te s&ecirc; gehad het:",
+    'no_comments'        => 'Geen terugspoorkommentaar vir hierdie inskrywing nie.',
+    'this_trackback_url' => 'Terugspoor URL vir hierdie inskrywing:',
+    'num_comments'       => '%d terugspoorkommentare',
+    'send_trackback'     => 'Stuur Skakelkennisgewings',
+    'preview'            => 'Voorskou',
+    'editor_title'       => 'Stuur terugspoorkommentaar',
+    'trackback_url'      => 'Terugspoor URL',
+    'entry_url'          => 'Inskrywing URL',
+    'entry_title'        => 'Inskrywing Titel',
+    'blog_name'          => 'Werfnaam',
+    'excerpt'            => 'Uittreksel',
+    'truncate_warning'   => 'Let wel: Die werf wat ontvang kan dalk u uittreksel kortknip',
+    'button_send'        => 'Stuur',
+    'button_preview'     => 'Voorskou',
+    'send_error'         => 'Fout',
+    'send_error_details' => 'Fout tydens stuur van terugspoorkommentaar:',
+    'url_missing'        => 'Geen Inskrywing URL',
+    'url_required'       => 'Verskaf asseblief ten minste \'n URL vir die inskrywing.',
+    'target_missing'     => 'Geen Terugspoor URL',
+    'target_required'    => 'Sleutel asseblief \'n terugspoor URL in',
+    'error_socket'       => 'Kon nie socket oopmaak nie.',
+    'error_response'     => 'Terugvoer nie verstaan.',
+    'error_unspecified'  => 'Onbekende fout.',
+    'select_url'         => 'Kies Terugspoor URL',
+    'not_found'          => 'Terugspoor URL nie gevind',
+    'autodetect_failed'  => 'Geeklog kon nie die Terugspoor URL opspoor vir die inskrywing waarna u, u kommentaar wil stuur nie.  Sleutel dit asseblief per hand hieronder in.',
+    'trackback_explain'  => 'Kies asseblief uit die skakels hieronder die URL waarheen u, u Terugspoorkommentaar wil stuur. Geeklog sal dan poog om die korrekte Terugspoor URL vir daardie inskrywing op te spoor. Of u kan <a href="%s">dit met die hand insleutel</a> as u dit reeds ken.',
+    'no_links_trackback' => 'Geen skakels opgespoor nie.  U kan nie \'n Terugspoorkommentaar vir hierdie inskrywing stuur nie.',
+    'pingback'           => 'Skakelkennisgewing',
+    'pingback_results'   => 'Skakelkennisgewing resultate',
+    'send_pings'         => 'Stuur Skakelkennisgewings',
+    'send_pings_for'     => 'Stuur Skakelkennisgewing vir "%s"',
+    'no_links_pingback'  => 'Geen skakels opgespoor.  Geen Skakelkennisgewing is vir hierdie inskrywing gestuur nie.',
+    'pingback_success'   => 'Skakelkennisgewing gestuur.',
+    'no_pingback_url'    => 'Geen skakelkennisgewing URL gevind.',
+    'resend'             => 'Stuur weer',
+    'ping_all_explain'   => 'U kan nou werwe waarna u skakel daarvan in kennis stel deur (<a href="http://af.wikipedia.org/wiki/Skakelkennisgewing">Skakelkennisgewing</a>), adverteer dat u werf opgedateer is deur boernaalgids dienste te raadpleeg of \'n <a href="http://af.wikipedia.org/wiki/Terugspoorkommentaar">Terugspoorkommentaar</a> te stuur in geval u kommentaar gelewer het op \'n inskrywing op iemand anders se werf.',
+    'pingback_button'    => 'Stuur Skakelkennisgewing',
+    'pingback_short'     => 'Stuur Skakelkennisgewing na al die werwe wat waarna in hierdie inskrywing geskakel word.',
+    'pingback_disabled'  => '(Skakelkennisgewings gedeaktiveer)',
+    'ping_button'        => 'Stuur Kennisgewing',
+    'ping_short'         => 'Stel boernaalgids dienste in kennis.',
+    'ping_disabled'      => '(Kennisgewing  gedeaktiveer)',
+    'trackback_button'   => 'Stuur Terugsporing',
+    'trackback_short'    => 'Stuur \'n Terugspoorkommentaar.',
+    'trackback_disabled' => '(Terugspoor gedeaktiveer)',
+    'may_take_a_while'   => 'Neem kennis dat Skakelkennisgewings en Kennisgewings \'n tydjie mag neem.',
+    'ping_results'       => 'Kennisgewingresultate',
+    'unknown_method'     => 'Onbekende kennisgewingmetode',
+    'ping_success'       => 'Kennisgewing gestuur.',
+    'error_site_name'    => 'Sleutel die werf se naam in.',
+    'error_site_url'     => 'Sleutel die werf se URL in.',
+    'error_ping_url'     => 'Sleutel \'n geldige Kennisgewing URL in.',
+    'no_services'        => 'Geen boernaalgidsdiens is opgestel nie.',
+    'services_headline'  => 'Boernaalgidsdienste',
+    'service_explain'    => 'Om \'n boernaalgidsdiens te wysig of te verwyder kliek op die wysig ikoon van daardie diens hieronder. Om \'n nuwe boernaal diensgids by te voeg, kliek op "Skep Nuwe" hierbo.',
+    'service'            => 'Diens',
+    'ping_method'        => 'Kennisgewingsmetode',
+    'service_website'    => 'Webwerf',
+    'service_ping_url'   => 'URL om in kennis te stel',
+    'ping_standard'      => 'Standaard Kennisgewing',
+    'ping_extended'      => 'Uitgebreide Kennisgewing',
+    'ping_unknown'       => '(onbekende metode)',
+    'edit_service'       => 'Wysig Boernaalgidsdiens',
+    'trackbacks'         => 'Terugsporings',
+    'editor_intro'       => 'Berei u terugspoorkommentaar vir <a href="%s">%s</a> voor.',
+    'editor_intro_none'  => 'Berei u terugspoorkommentaar voor.',
+    'trackback_note'     => 'Om \'n terugspoorkommentaar vir \'n artikel te stuur, gaan na die lys van artikels en kliek op "' . $LANG24[21] . '" vir die artikel. Om \'n terugspoor te stuur wat nie verband hou met \'n artikel nie, <a href="%s">kliek hier</a>.',
+    'pingback_explain'   => 'Sleutel \'n URL in waarna die Skakelkennisgewing gestuur moet word.  Die kennisgewing sal sal na u werf se tuisblad verwys.',
+    'pingback_url'       => 'Skakelkennisgewing URL',
+    'site_url'           => 'Hierdie werf se URL',
+    'pingback_note'      => 'Om \'n skakelkennisgewing vir \'n artikel te stuur gaan na die lys van artikels en kliek op stories en kliek op "' . $LANG24[21] . '" vir die artikel. Om \'n skakelkennisgewing te stuur wat nie verband hou met \'n artikel nie, <a href="%s">kliek hier</a>.',
+    'pbtarget_missing'   => 'Geen Skakelkennisgewing URL',
+    'pbtarget_required'  => 'Sleutel asseblief \'n skakelkennisgewing URL in',
+    'pb_error_details'   => 'Fout tydens stuur van skakelkennisgewing:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array (
+    'title'            => 'Artikelgids',
+    'title_year'       => 'Artikelgids vir  %d',
+    'title_month_year' => 'Artikelgids vir %s %d',
+    'nav_top'          => 'Terug na die Artikelgids',
+    'no_articles'      => 'Geen Artikels.'
+);
+
+################################################################################
+# "What's New" Time Strings
+
+$LANG_WHATSNEW = array (
+    # This here determines the order of the sentence "No new stories in 2 hrs"
+    # order it so it makes sense in your language:
+    # %i    item, "Stories"
+    # %n    amount, "2", "20" etc
+    # %t    time, "2" (weeks)
+    # %s    scale, "hrs", "weeks"
+    'new_string'  => '%n nuwe %i in die laaste %t %s',
+    'new_last'    => 'laaste %t %s',
+    # other strings
+    'minutes'     => 'minute',
+    'hours'       => 'ure',
+    'days'        => 'dae',
+    'weeks'       => 'weke',
+    'months'      => 'maande',
+    'minute'      => 'minuut',
+    'hour'        => 'uur',
+    'day'         => 'dag',
+    'week'        => 'week',
+    'month'       => 'maand'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display adminiatration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Soektog',
+    'limit_results' => 'Beperk Resultate',
+    'submit'        => 'Stuur',
+    'edit'          => 'Wysig',
+    'admin_home'    => 'Admin Tuisblad',
+    'create_new'    => 'Skryf iets',
+    'enabled'       => 'Aktief',
+    'title'         => 'Titel',
+    'type'          => 'Tipe',
+    'topic'         => 'Onderwerp',
+    'help_url'      => 'Hulpl&ecirc;er URL',
+    'save'          => 'Stoor',
+    'cancel'        => 'Kanselleer',
+    'delete'        => 'Verwyder',
+    'copy'          => 'Kopi&euml;er',
+    'no_results'    => '- Geen inskrywings opgespoor -',
+    'data_error'    => 'Daar was \'n fout tydens die verwerking van die intekenlysdata. Gaan asseblief databron na.'
+
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Kommentaar Aktief',
+    -1  => 'Kommentaar Onaktief'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Plat',
+    'nested'    => 'Genestel',
+    'threaded'  => 'Geryg',
+    'nocomment' => 'Geen Kommentaar'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(moenie)',
+    3600    => '1 Uur',
+    7200    => '2 Ure',
+    10800   => '3 Ure',
+    28800   => '8 Ure',
+    86400   => '1 Dag',
+    604800  => '1 Week',
+    2678400 => '1 Maand'
+);
+
+$LANG_dateformats = array(
+    0   => 'Stelselstandaard'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Nie Uitgelig',
+    1 => 'Uitgelig'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Wys Slegs in Onderwerp',
+    1 => 'Wys op Voorblad'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Gewone Teks',
+    'html'      => 'HTML Formaat'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Oudste Eerste',
+    'DESC' => 'Nuutste Eerste'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Terugsporings Aktief',
+    -1  => 'Terugsporings Onaktief'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/afrikaans_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/afrikaans_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/afrikaans_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/afrikaans_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1504 @@
+<?php
+
+###############################################################################
+# afrikaans.php
+# Hierdie is die Afrikaanse taallêer vir Geeklog 1.4
+# Opgestel deur Renier Maritz epos:renier@gigaskills.co.za
+#
+# Kopiereg (C) 2000 Jason Whittenburg
+# jwhitten AT securitygeeks DOT com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'utf-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Geskryf deur:',
+    2 => 'lees verder',
+    3 => 'kommentaar',
+    4 => 'Wysig',
+    5 => 'Stem',
+    6 => 'Resultaat',
+    7 => 'Peiling resultate',
+    8 => 'stemme',
+    9 => 'Admin Funksies:',
+    10 => 'Bydraes',
+    11 => 'Artikels',
+    12 => 'Blokke',
+    13 => 'Onderwerpe',
+    14 => 'Skakels',
+    15 => 'Gebeure',
+    16 => 'Peilings',
+    17 => 'Gebruikers',
+    18 => 'SQL Query',
+    19 => 'Teken Uit',
+    20 => 'Gebruikersinligting:',
+    21 => 'Gebruikernaam',
+    22 => 'Gebruiker ID',
+    23 => 'Sekuriteitsvlak',
+    24 => 'Anoniem',
+    25 => 'Antwoord',
+    26 => 'Die volgende kommentaar is die eiendom van wie dit ookal gepos het.  Hierdie werf is geensins verantwoordelik vir wat daar ges&ecirc; word nie.',
+    27 => 'Mees Onlangse Plasing',
+    28 => 'Verwyder',
+    29 => 'Geen gebruiker kommentaar.',
+    30 => 'Ouer Artikels',
+    31 => 'Toegelate HTML Etikette:',
+    32 => 'Fout, ongeldige gebruikernaam',
+    33 => 'Fout, kon nie na die log l&ecirc;er skryf nie',
+    34 => 'Fout',
+    35 => 'Teken Uit',
+    36 => 'aan',
+    37 => 'Geen gebruiker artikels',
+    38 => 'Inhoud Sindikasie',
+    39 => 'Herlaai',
+    40 => 'Jou <tt>register_globals = Off</tt> in jou <tt>php.ini</tt>. Geekolog vereis egter dat <tt>register_globals</tt> <strong>aan</strong> is. Voordat jy verder gaan, stel dit na <strong>on</strong> en herlaai jou webblaaier.',
+    41 => 'Besoekers',
+    42 => 'Geskryf deur:',
+    43 => 'Antwoord hierop',
+    44 => 'Stam',
+    45 => 'MySQL Foutnommer',
+    46 => 'MySQL Foutboodskap',
+    47 => 'Gebruikersfunksies',
+    48 => 'Rekeninginligting',
+    49 => 'Voorkeure',
+    50 => 'Fout in SQL stelling',
+    51 => 'help',
+    52 => 'Nuut',
+    53 => 'Admin Tuiste',
+    54 => 'Kon die l&ecirc;er nie oopmaak nie.',
+    55 => 'Fout by',
+    56 => 'Stem',
+    57 => 'Wagwoord',
+    58 => 'Teken in',
+    59 => "Nog nie 'n rekening? Registreer dan as 'n <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nuwe Gebruiker</a>",
+    60 => 'Lewer kommentaar',
+    61 => 'Skep Nuwe Rekening',
+    62 => 'woorde',
+    63 => 'Kommentaar Voorkeure',
+    64 => "Epos Artikel aan 'n Vriend",
+    65 => 'Vertoon Drukbare Weergawe',
+    66 => 'My Kalender',
+    67 => 'Welkom by',
+    68 => 'Tuisblad',
+    69 => 'Kontak',
+    70 => 'Soek',
+    71 => 'Skryf iets',
+    72 => 'Web Hulpmiddele',
+    73 => 'Ou Peilings',
+    74 => 'Kalender',
+    75 => 'Gevorderde Soektog',
+    76 => 'Werfstatistieke',
+    77 => 'Proppies',
+    78 => 'Opkomende Gebeure',
+    79 => 'Wat\'s Nuut',
+    80 => 'artikels in laaste',
+    81 => 'artikel in laaste',
+    82 => 'ure',
+    83 => 'KOMMENTARE',
+    84 => 'SKAKELS',
+    85 => 'laaste 48 uur',
+    86 => 'Geen nuwe kommentaar',
+    87 => 'laaste 2 weke',
+    88 => 'Geen onlangse nuwe skakels',
+    89 => 'Daar is geen opkomende gebeure',
+    90 => 'Tuisblad',
+    91 => 'Hierdie blad geskep in',
+    92 => 'sekondes',
+    93 => 'Kopiereg',
+    94 => 'Alle handelsmerke en kopieregte op hierdie blad word deur hulle onderskeie eienaars besit.',
+    95 => 'Aangedryf Deur',
+    96 => 'Groepe',
+    97 => 'Woordelys',
+    98 => 'Proppies',
+    99 => 'ARTIKELS',
+    100 => 'Geen nuwe artikels',
+    101 => 'Jou Gebeure',
+    102 => 'Werfgebeure',
+    103 => 'DB Rugsteuning',
+    104 => 'deur',
+    105 => 'EPOS aan Gebruikers',
+    106 => 'Besigtigings:',
+    107 => 'GL Weergawe Toets',
+    108 => 'Vee Kas skoon',
+    109 => 'Meld misbruik aan',
+    110 => 'Rapporteer hierdie plasing aan die werfadmin',
+    111 => 'Vertoon PDF Weergawe',
+    112 => 'Geregistreerde Gebruikers',
+    113 => 'Dokumentasie',
+    114 => 'TRACKBACKS',
+    115 => 'Geen nuwe trackback kommentaar',
+    116 => 'Trackback',
+    117 => 'Gids',
+    118 => 'Lees asseblief verder op die volgende bladsy:',
+    119 => "Jou <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">wagwoord</a> vergeet?",
+    120 => 'Permanente skakel na hierdie kommentaar',
+    121 => 'Kommentaar (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Alle HTML word toegelaat'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalender van Gebeure',
+    2 => "Ek's jammer daar is geen gebeure om te vertoon nie",
+    3 => 'Wanneer',
+    4 => 'Waar',
+    5 => 'Beskrywing',
+    6 => "Sit 'n Gebeurtenis by",
+    7 => 'Opkomende Gebeure',
+    8 => 'Deur hierdie gebeurtenis by jou kalender te voeg kan jy vinnig die gebeure wat jou interesseer vertoon deur op "My Kalender" by die Gebruikersfunksies te kliek.',
+    9 => 'Sit by My Kalender',
+    10 => 'Verwyder uit My Kalender',
+    11 => "Besig om 'n Gebeurtenis by {$_USER['username']} se Kalender te sit",
+    12 => 'Gebeure',
+    13 => 'Begin',
+    14 => 'Eindig',
+    15 => 'Terug na Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Lewer Kommentaar',
+    2 => 'Plasingmodus',
+    3 => 'Teken Uit',
+    4 => 'Skep Rekening',
+    5 => 'Gebruikernaam',
+    6 => 'Hierdie werf vereis dat jy ingeteken moet wees om kommentaar te kan lewer, teken asseblief in.  As jy nie \'n rekening het nie kan jy die vorm hier onder gebruik om een te skep.',
+    7 => 'Jou laast kommentaar was ',
+    8 => " sekondes gelede.  Hierdie werf vereis dat ten minstne {$_CONF['commentspeedlimit']} sekondes tussen kommentare verstryk.",
+    9 => 'Kommentaar',
+    10 => 'Stuur Verslag',
+    11 => 'Stuur Kommentaar',
+    12 => 'Vul asseblief die Titel en Kommentaar velde in, dit is \'n vereiste.',
+    13 => 'Jou Inligting',
+    14 => 'Voorskou',
+    15 => 'Rapporteer hierdie plasing',
+    16 => 'Titel',
+    17 => 'Fout',
+    18 => 'Belangrike Goed',
+    19 => 'Die plasing moet verkieslik met die onderwerp verband hou.',
+    20 => 'Probeer eerder om kommentaar te lewer eerder as om \'n nuwe artikel te begin oor dieselfde besprekingsonderwerp.',
+    21 => 'Lees ander mense se boodskappe voordat jy jou eie plaas om te verhoed dat jy herhaal wat reeds ges&ecirc; is.',
+    22 => 'Gebruik \'n duidelike onderwerp wat beskryf waaroor jou boodskap gaan.',
+    23 => 'Jou epos adres sal NIE geopenbaar word nie.',
+    24 => 'Anonieme Gebruiker',
+    25 => 'Is jy seker dat jy hierdie plasing aan die werf admin wil rapporteer?',
+    26 => '%s het die volgende beledigende plasing of misbruik gerapporteer:',
+    27 => 'Misbruikverslag'
+);
+
+###############################################################################
+# usersettings.php
+
+$LANG04 = array(
+    1 => 'Gebruikersprofiel van',
+    2 => 'Gebruikernaam',
+    3 => 'Volle Naam',
+    4 => 'Nuwe Wagwoord',
+    5 => 'Epos',
+    6 => 'Tuisblad',
+    7 => 'Bio',
+    8 => 'PGP Sleutel',
+    9 => 'Stoor Inligting',
+    10 => 'Laaste 10 kommentare van gebruiker',
+    11 => 'Geen Gebruikerkommentaar',
+    12 => 'Gebruikersvoorkeure van',
+    13 => 'Epos Nagtelike Opsomming',
+    14 => 'Hierdie wagwoord word deur \'n lukraak algoritme saamgestel. Daar word aanbeveel dat jy dit onmiddelik verander.  Om jou wagwoord te verander moet jy inteken en dan op Rekeninginligting kliek by die Gebruikersfunksies keusebalk.',
+    15 => "Jou {$_CONF['site_name']} rekening is suksesvol opgestel. Om dit te kan gebruik moet jy inteken deur die onderstaande inligting te gebruik.  Stoor hierdie epos vir latere verwysing.",
+    16 => 'Jou Rekeninginligting',
+    17 => 'Rekening bestaan nie',
+    18 => 'Die epos adres wat verskaf is blyk nie \'n geldige een te wees nie',
+    19 => 'Die gebruikernaam of epos adres wat verskaf is bestaan reeds',
+    20 => 'Die epos adres verskaf blyk nie \'n geldige adres te wees nie',
+    21 => 'Fout',
+    22 => "Registreer by {$_CONF['site_name']}!",
+    23 => "Die skep van 'n gebruikersrekening sal jou al die voordele gee van lidmaatskap by {$_CONF['site_name']} en sal jou in staat stel om kommentaar te plaas asook om artikels self te skep. As jy nie 'n rekening het nie, sal jy slegs anonieme plasing kan maak. Neem asseblief kennis dat jou epos adres <b><i>nooit</i></b> op hierdie werf geopenbaar sal word nie.",
+    24 => 'Jou wagwoord sal na die eposadres wat jy verskaf gestuur word.',
+    25 => 'Het jy jou Wagwoord vergeet?',
+    26 => 'Sleutel <em>of</em> jou gebruikernaam <em>of</em> die epos adres wat jy gebruik het om mee te registreer en kliek Epos Wagwoord. Instruksies oor hoe om \'n nuwe wagwoord in te stel sal aan die betrokke epos adres op rekord gestuur word.',
+    27 => 'Registreer Nou!',
+    28 => 'Epos Wagwoord',
+    29 => 'uitgeteken vanuit',
+    30 => 'ingeteken vanuit',
+    31 => 'Die funksie wat jy gekies het vereis dat jy inteken',
+    32 => 'Handtekening',
+    33 => 'Nooit vertoon',
+    34 => 'Dit is jou regte naam',
+    35 => 'Sleutel wagwoord in om dit te verander',
+    36 => 'Begin met http://',
+    37 => 'Aangeheg by jou kommentaar',
+    38 => 'Dit gaan alles oor jou!  Enigeen kan dit lees',
+    39 => 'Jou publieke PGP sleutel om te deel',
+    40 => 'Geen Onderwerp Ikone',
+    41 => 'Gewillig om te Modereer',
+    42 => 'Datumformaat',
+    43 => 'Maksimum Artikels',
+    44 => 'Geen bokse',
+    45 => 'Vertoon Voorkeure vir',
+    46 => 'Uitgeslote Items vir',
+    47 => 'Nuwe boks Konfigurasie vir',
+    48 => 'Onderwerpe',
+    49 => 'Geen ikone in artikels',
+    50 => 'Verwyder merk as jy nie hierin belangstel nie',
+    51 => 'Slegs die nuusartikels',
+    52 => 'Die standaard is',
+    53 => 'Ontvang die dag se stories elke nag',
+    54 => 'Merk die boksies vir die onderwerpe en skrywers wat jy nie wil sien nie.',
+    55 => 'As jy almal ongemerk laat beteken dit dat jy die standaard keuse van bokse wil sien. As jy bokse merk onthou om almal wat jy wil sien te merk aangesien die standaard keuses ge&iuml;gnoreer gaan word.  Standaard items word in drukskrif aangedui.',
+    56 => 'Skrywers',
+    57 => 'Vertoonmodus',
+    58 => 'Sorteer Volgorde',
+    59 => 'Kommentaar Limiet',
+    60 => 'Hoe wil jy h&ecirc; dat jou kommentaar vertoon word?',
+    61 => 'Nuutste of oudstes eerste?',
+    62 => 'Die standaard is 100',
+    63 => "Jou wagwoord is aan jou gestuur per epos en behoort kortliks by jou uit te kom. Volg asseblief die aanwysings in die boodskap en dankie dat jy {$_CONF['site_name']} gebruik",
+    64 => 'Kommentaarvoorkeure van',
+    65 => 'Probeer weer Inteken',
+    66 => 'Jy het moontlik jou besonderhede verkeerd ingesleutel.  Probeer asseblief weer om hieronder in te teken.',
+    67 => 'Lid Sedert',
+    68 => 'Onthou My vir',
+    69 => 'Hoe lank moet ons jou onthou na jy ingeteken het? Tydsverloop waarop jy kan terugkom sonder om weer in te teken',
+    70 => "Verander die uitleg en inhoud van {$_CONF['site_name']} na jou sin",
+    71 => "Een van die beste kenmerke van {$_CONF['site_name']} is dat jy die inhoud wat jy ontvang en die uitleg van die werf kan maak pas by jou eie sin.  Om van hierdie kenmerke gebruik te kan maak moet jy eers <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registreer</a> by {$_CONF['site_name']}.  Is jy reeds 'n lid?  Gebruik dan die intekenvorm aan die linkerkant om in te teken!",
+    72 => 'Tema',
+    73 => 'Taal',
+    74 => 'Verander hoe die werf vertoon!',
+    75 => 'Onderwerpe Gepos aan',
+    76 => 'As jy \'n onderwerp hieronder kies sal jy enige nuwe stories wat by daardie onderwerp gevoeg word aan die einde van elke dag ontvang.  Kies slegs die onderwerpe wat jou intereseer!',
+    77 => 'Foto',
+    78 => 'Sit \'n foto van jouself op!',
+    79 => 'Merk hier om die foto te verwyder',
+    80 => 'Teken in',
+    81 => 'Stuur Epos',
+    82 => 'Laaste 10 artikel vir gebruiker',
+    83 => 'Plasingstatistiek van gebruiker',
+    84 => 'Totale aantal artikels:',
+    85 => 'Totale aantal kommentare:',
+    86 => 'Vind alle plasings deur',
+    87 => 'Jou gebruikernaam',
+    88 => "Iemand (moontlik jy) het versoek dat 'n nuwe wagwoord geskep word vir jou rekening \"%s\" op {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nAs jy dit werklik wou doen, kliek op die volgende skakel:\n\n",
+    89 => "As jy dit nie wil doen nie, ignoreer eenvoudig hierdie boodskap en die versoek sal ge&iuml;gnoreer word (jou wagwoord sal dan onveranderd bly).\n\n",
+    90 => 'Jy kan \'n nuwe wagwoord vir jou rekening hieronder insleutel. Neem asseblief kennis dat jou ou wagwoord steeds geldig bly totdat jy hierdie vorm instuur.',
+    91 => 'Stel Nuwe Wagwoord',
+    92 => 'Sleutel Nuwe Wagwoord in',
+    93 => 'Jou laaste versoek vir \'n nuwe wagwoord was %d sekondes gelede. Hierdie werf vereis dat ten minste %d sekondes verstryk tussen wagwoordversoeke.',
+    94 => 'Verwyder Rekening "%s"',
+    95 => 'Kliek die "verwyder rekening" knop hieronder om jou rekening van ons databasis te verwyder.  Neem kennis dat enige artikels en kommentaar onder hierdie rekening bygedra <strong>nie</strong> verwyder sal word nie maar gemerk sal word as deur "Anoniem" gepos.',
+    96 => 'verwyder rekening',
+    97 => 'Bevestig Verwydering van Rekening',
+    98 => 'Is jy seker dat jy jou rekening wil verwyder? Deur dit te doen sal jy nie meer op hierdie werf kan inteken nie (tensy jy \'n nuwe rekening skep). As jy seker is, kliek weer op "verwyder rekening" op die vorm hieronder.',
+    99 => 'Privaatheidsopsis vir',
+    100 => 'Epos van Admin',
+    101 => 'Laat epos van Werf Admin toe',
+    102 => 'Epos van Gebruikers',
+    103 => 'Laat epos toe vanaf onder gebruikers',
+    104 => 'Vertoon Aanlyn Status',
+    105 => 'Vertoon in die Wie\'s Aanlyn blok',
+    106 => 'Ligging',
+    107 => 'Vertoon in jou openbare profiel',
+    108 => 'Bevestig nuwe wagwoord',
+    109 => 'Sleutel die Nuwe wagwoord weer hier in',
+    110 => 'Huidige Wagwoord',
+    111 => 'Sleutel asseblief jou Huidige wagwoord in',
+    112 => 'Jy het die toelaatbare getal intekenpogings oorskry.  Probeer asseblief weer later.',
+    113 => 'Intekenpoging  het Misluk',
+    114 => 'Rekening Gedeaktiveer',
+    115 => 'Jou rekening is gedeatkiveer, jy mag nie inteken nie. Kontak die Administrateur.',
+    116 => 'Rekening Wag op Aktivering',
+    117 => 'Jou rekening is tans gelys vir aktivering deur die administrateur. Jy sal nie kan inteken alvorens jou rekening goedgekeur is nie.',
+    118 => "Jou {$_CONF['site_name']} rekening is nou geaktiveer deur \'n administrateur. Jy mag nou inteken op die werf by die url hieronder deur jou gebruikernaam en wagwoord te gebruik soos voorheen aan jou ge-epos.",
+    119 => "As jy jou wagwoord vergeet het, kan jy \'n nuwe een aanvra by die volgende url:",
+    120 => 'Rekening Geaktiveer',
+    121 => 'Diens',
+    122 => 'Jammer, nuwe gebruiker registrasie is gedeaktiveer',
+    123 => "Is jy 'n <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nuwe gebruiker</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Geen Nuus om te Vertoon',
+    2 => 'Daar is geen nuwe nuusartikels om te vertoon nie.  Daar mag dalk geen nuusartikels vir hierdie onderwerp wees nie of jou gebruikersvoorkeure mag dalk te beperkend wees.',
+    3 => ' vir onderwerp %s',
+    4 => 'Artikel van die Dag',
+    5 => 'Volgende',
+    6 => 'Vorige',
+    7 => 'Eerste',
+    8 => 'Laaste'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Daar was \'n fout tydens die stuur van jou boodskap. Probeer asseblief weer.',
+    2 => 'Boodskap suksesvol gestuur.',
+    3 => 'Maak asseblief seker dat jy \'n geldige epos adres in die Antwoord Na veld ingevul het.',
+    4 => 'Vul asseblief jou Naam, Antwoord Aan, Onderwerp en Boodskapvelde in',
+    5 => 'Fout: Geen sodanige gebruiker.',
+    6 => 'Daar was \'n fout.',
+    7 => 'Gebruikersprofiel vir',
+    8 => 'Gebruikernaam',
+    9 => 'Gebruiker URL',
+    10 => 'Stuur epos aan',
+    11 => 'Jou Naam:',
+    12 => 'Antwoord Na:',
+    13 => 'Onderwerp:',
+    14 => 'Boodskap:',
+    15 => 'HTML word nie vertaal nie.',
+    16 => 'Stuur Boodskap',
+    17 => 'Epos Artikel aan \'n Vriend',
+    18 => 'Aan Naam',
+    19 => 'Na Epos Adres',
+    20 => 'Van Naam',
+    21 => 'Van Epos Adres',
+    22 => 'Alle velde word vereis',
+    23 => "Hierdie epos is aan jou gestuur deur %s by %s omdat hulle gedink het dat jy dalk mag belangstel in hierdie artikel op {$_CONF['site_url']}.  Hierdie is nie gemorspos nie en die epos adres van die ontvanger is nie op 'n lys gestoor vir latere gebruik nie.",
+    24 => 'Kommentaar op hierdie artikel by',
+    25 => 'Jy moet ingetekn wees om hierdie kenmerk te benut.  Deur jou te laat inteken vermy ons misbruik van die stelsel',
+    26 => 'Hierdie vorm sal jou toelaat om \'n epos aan die gekose gebruiker te stuur.  Alle velde word vereis.',
+    27 => 'Kort boodskap',
+    28 => '%s het geskryf: ',
+    29 => "Hierdie is die daaglikse opsomming van {$_CONF['site_name']} vir ",
+    30 => ' Daaglikse Nuusbrief vir ',
+    31 => 'Titel',
+    32 => 'Datum',
+    33 => 'Lees die volledige artikel by',
+    34 => 'Einde van Boodskap',
+    35 => 'Jammer, hierdie gebruiker verkies om nie epos te ontvang nie.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Gevorderde Soektog',
+    2 => 'Sleutelwoorde',
+    3 => 'Onderwerp',
+    4 => 'Almal',
+    5 => 'Tipe',
+    6 => 'Artikels',
+    7 => 'Kommentaar',
+    8 => 'Skrywers',
+    9 => 'Almal',
+    10 => 'Soek',
+    11 => 'Soekresultate',
+    12 => 'passende artikels',
+    13 => 'Soekresultate: Geen passende artikels',
+    14 => 'Geen artikels het by jou sleutelwoorde gepas nie',
+    15 => 'Probeer asseblief weer.',
+    16 => 'Titel',
+    17 => 'Datum',
+    18 => 'Skrywer',
+    19 => "Deursoek die hele {$_CONF['site_name']} databasis vir huidige en ouer artikels",
+    20 => 'Datum',
+    21 => 'tot',
+    22 => '(Datum Formaat YYYY-MM-DD)',
+    23 => 'Besigtigings',
+    24 => '%d items gevind',
+    25 => 'Gesoek vir',
+    26 => 'items ',
+    27 => 'sekondes',
+    28 => 'Geen artikel of kommentaar pas by jou soeknavraag nie',
+    29 => 'Artikel- en Kommentaarresultate',
+    30 => 'Geen skakels pas by jou soektog nie',
+    31 => 'Hierdie proppie het geen passende resultaat gelewer nie',
+    32 => 'Gebeure',
+    33 => 'URL',
+    34 => 'Ligging',
+    35 => 'Heeldag',
+    36 => 'Geen gebeure het by jou soeknavraag gepas nie',
+    37 => 'Gebeureresultate',
+    38 => 'Skakelresultate',
+    39 => 'Skakels',
+    40 => 'Gebeure',
+    41 => 'Jou soeknavraag moet ten minste 3 karakters bevat.',
+    42 => 'Gebruik asseblief \'n datum wat as sulks geformatteer is YYYY-MM-DD (jaar-maand-dag).',
+    43 => 'presiese sinsnede',
+    44 => 'al hierdie woorde',
+    45 => 'enige van hierdie woorde',
+    46 => 'Volgende',
+    47 => 'Vorige',
+    48 => 'Skrywer',
+    49 => 'Datum',
+    50 => 'Kere aangevra',
+    51 => 'Skakels',
+    52 => 'Ligging',
+    53 => 'Artikelresultate',
+    54 => 'Kommentaarresultate',
+    55 => 'die sinsnede',
+    56 => 'EN',
+    57 => 'OF',
+    58 => 'Meer resultate &gt;&gt;',
+    59 => 'Resultate',
+    60 => 'per bladsy',
+    61 => 'Verfyn soektog'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Werfstatistiek',
+    2 => 'Totale kere Aangevra vanaf die stelsel',
+    3 => 'Artikels (Kommentare) in die stelsel',
+    4 => '',
+    5 => '',
+    6 => 'Gebeure in die stelsel',
+    7 => 'Top Tien Artikels volgens besigtigings',
+    8 => 'Titel van Artikel',
+    9 => 'Besigtigings',
+    10 => 'Dit wil voorkom asof daar geen sntories op hierdie werf is nie of dalk het niemand hulle nog besigtig nie.',
+    11 => 'Top Tien Artikels volgens getal Kommentare gelewer',
+    12 => 'Kommentaar',
+    13 => 'Dit wil voorkom asof daar geen artikels op die werf is nie of dalk het niemand nog kommentaar op hulle gelewer nie.',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => 'Dit wil voorkom asof daar geen skakels op die werf is nie of dalk het niemand nog ooit daarop gekliek nie.',
+    22 => 'Top Tien Artikel volgens getal per Epos aangestuur',
+    23 => 'Eposse',
+    24 => 'Dit wil voorkom asof niemand nog \'n storie per epos aangestuur het op hierdie werf nie',
+    25 => 'Top Tien Trackback Kommentaar Artikels',
+    26 => 'Geen trackback kommentaar gevind.',
+    27 => 'Aantal aktiewe gebruikers',
+    28 => 'Top Tien Gebeurtenisse',
+    29 => 'Gebeurtenis',
+    30 => 'Kere Aangevra',
+    31 => 'Dit wil voorkom asof daar geen gebeure op die werf geplaas is nie of dalk het niemand nog op een gekliek het nie.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Verwante Artikels',
+    2 => 'Epos Artikel aan \'n Vriend',
+    3 => 'Drukbare artikelformaat',
+    4 => 'Artikelopsies',
+    5 => 'PDF Artikelformaat'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Om \'n %s te plaas word daar vereis dat jy as gebruiker ingeteken is.',
+    2 => 'Teken in',
+    3 => 'Nuwe Gebruiker',
+    4 => 'Sit Gebeurtenis by',
+    5 => '',
+    6 => 'Plaas \'n Artikel',
+    7 => 'Intekening word Vereis',
+    8 => 'Stuur',
+    9 => 'Wanneer jy inligting verskaf vir gebruik op hierdie werf versoek ons dat jy die volgende riglyne volg...<ul><li>Vul al die velde in aangesien dit vereis word<li>Verskaf volledig en akkurate inligting<li>Gaan die URL\'le deeglik na</ul>',
+    10 => 'Titel',
+    11 => 'Skakel',
+    12 => 'Begindatum',
+    13 => 'Einddatum',
+    14 => 'Ligging',
+    15 => 'Beskrywing',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => 'Lees eers hier',
+    20 => '',
+    21 => '',
+    22 => 'Fout: Vermiste Velde',
+    23 => 'Vul asseblief al die velde op die vorm in.  Alle velde word vereis.',
+    24 => 'Bydrae Gestoor',
+    25 => 'U %s bydrae is suksesvol gestoor.',
+    26 => 'Spoedbeperking',
+    27 => 'Gebruikernaam',
+    28 => 'Onderwerp',
+    29 => 'Artikel',
+    30 => 'Jou laaste bydrae was ',
+    31 => " sekondes gelede.  Hierdie werf vereis dat ten minste {$_CONF['speedlimit']} sekondes tussen voorleggings verstryk",
+    32 => 'Voorskou',
+    33 => 'Artikel Voorskou',
+    34 => 'Teken Uit',
+    35 => 'HTML tags word nie toegelaat nie',
+    36 => 'Post Modus',
+    37 => "Die voorlegging van 'n gebeurtenis aan {$_CONF['site_name']} sal jou gebeurtenis op die hoofkalender plaas waar gebruikers die keuse het om jou gebeurtenis op hulle eie persoonlike kalender te plaas. Hierdie funksie is <b>NIE</b> bedoel om jou persoonlike gebeure te plaas nie.<br><br>Wanneer jy jou gebeurtenis voorl&ecirc; word dit aan ons administrateurs voorgel&ecirc; en indien hulle dit goedkeur sal jou gebeurtenis op die hoofkalender verskyn.",
+    38 => 'Voeg Gebeurtenis By',
+    39 => 'Hoofkalender',
+    40 => 'Persoonlike Kalender',
+    41 => 'Eindtyd',
+    42 => 'Begintyd',
+    43 => 'Heeldag Gebeurtenis',
+    44 => 'Adreslyn 1',
+    45 => 'Adreslyn 2',
+    46 => 'Stad/Dorp',
+    47 => 'Provinsie',
+    48 => 'Poskode',
+    49 => 'Gebeurtenistipe',
+    50 => 'Wysig Gebeurtenistipes',
+    51 => 'Ligging',
+    52 => 'Verwyder',
+    53 => 'Skep Rekening'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Bevestiging van ID Vereis',
+    2 => 'Geweier! Ongeldige Intekeninligting',
+    3 => 'Ongeldige wagwoord vir gebruiker',
+    4 => 'Gebruikernaam:',
+    5 => 'Wagwoord:',
+    6 => 'Alle toegang tot administratiewe gedeeltes van hierdie werf word aangeteken en hersien.<br>Hierdie bladsy is allenlik vir die gebruik van regmatige personeel.',
+    7 => 'teken in'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Onvoldoende Adminregte',
+    2 => 'Jy het nie voldoende regte om hierdie blok te wysig nie.',
+    3 => 'Blokverwerker',
+    4 => 'Daar was \'n probleem met die lees van hierdie voer (sien error.log vir besonderhede).',
+    5 => '',
+    6 => '',
+    7 => 'Almal',
+    8 => 'Blok Beveiligingsvlak',
+    9 => 'Blok Volgorde',
+    10 => '',
+    11 => 'Portaalblok',
+    12 => 'Normale Blok',
+    13 => 'Portaalblok Opsies',
+    14 => 'RSS URL',
+    15 => 'Laaste RSS Opdatering',
+    16 => 'Normale Blok Opsies',
+    17 => 'Blokinhoud',
+    18 => 'Vul asseblief die Blok se titel- en inhoudvelde in',
+    19 => 'Blokbestuurder',
+    20 => '',
+    21 => 'Blok SecLev',
+    22 => '',
+    23 => 'Blok Volgorde',
+    24 => '',
+    25 => 'Om \'n blok te wysig of verwyder, kliek op daardie blok se wysig ikoon hieronder.  Om \'n nuwe blok te skep, kliek op "Maak Nuwe" hierbo. Om \'n blok te skuif, kliek op die pyltjies op of die [R] en [L] bokse.',
+    26 => 'Uitlegblok',
+    27 => 'PHP-Blok',
+    28 => 'PHP-Blok Opsies',
+    29 => 'Blokfunksie',
+    30 => 'As jy sou wou h&ecirc; dat een van jou blokke PHP-kode gebruik, tik die naam van die funksie hierbo in.  Jou funksie moet begin met die voorvoegsel "phpblock_" (bv. phpblock_kryweer).  As dit nie hierdie voorvoegsel het nie, sal jou funksie nie uitgevoer word nie.  Ons doen dit om te keer dat mense wat dalk onregmatige toegang tot jou stelsel se installasie verkry het daarvan te weerhou om willekeurig kode uit te voer wat skadelik mag wees vir jou stelsel.  Maak seker dat jy le&euml; hakies "()" agter jou funksie naam bysit.  Verder word jy ook aangeraai dat jy al jou PHP-Blok kode in /pad/na/geeklog/system/lib-custom.php stoor.  Dit sal dit vir jou moontlik maak om jou kode te behou al gradeer jy na \'n nuwe weergawe van Geeklog op.',
+    31 => 'Fout in PHP-Blok. Funksie, %s, bestaan nie.',
+    32 => 'Fout Vermiste Veld(e)',
+    33 => 'Jy moet die URL na die RSS l&ecirc;er vir portaalblokke insleutel',
+    34 => 'Jy moet die titel en funksie vir PHP-blokke insleutel',
+    35 => 'Jy moet die titel en inhoud vir normale blokke invoer',
+    36 => 'Jy moet die inhoed vir uitlegblokke invoer',
+    37 => 'Ongeldige PHP-blok funksienaam',
+    38 => 'Funksies vir PHP Blokke moet die voorvoegsel \'phpblock_\' (bv. phpblock_kryweer) hê.  Die \'phpblock_\' voorvoegsel word vereis vir veiligheisredes om die arbitr&ecirc;re uitvoer van kode te verhoed.',
+    39 => 'Kant',
+    40 => 'Links',
+    41 => 'Regs',
+    42 => 'U moet die bloktitel en blokvolgorde insleutel vir Geeklog se standaardblokke.',
+    43 => 'Slegs Tuisblad',
+    44 => '',
+    45 => "U probeer om toegang tot 'n blok te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken. Gaan terug na die <a href=\"{$_CONF['site_admin_url']}/block.php\">blokadministrasieskerm</a>.",
+    46 => 'Skuif',
+    47 => '',
+    48 => 'Bloknaam',
+    49 => ' (geen spasies en moet uniek wees)',
+    50 => '',
+    51 => 'sluit http:// in',
+    52 => 'As jy hierdie leeg los sal die hulp-ikoon vir hierdie blok nie vertoon word nie',
+    53 => 'Geaktiveer',
+    54 => 'stoor',
+    55 => 'kanselleer',
+    56 => 'verwyder',
+    57 => 'Skuif Blok Ondertoe',
+    58 => 'Skuif Blok Boontoe',
+    59 => 'Skuif blok na die regterkant',
+    60 => 'Skuif blok na die linkerkant',
+    61 => 'Geen Titel',
+    62 => 'Artikel Limiet',
+    63 => 'Ongeldige Bloktitel',
+    64 => 'Jou Titel mag nie leeg wees of HTML bevat nie!',
+    65 => 'Volgorde'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Gebeure bestuur',
+    2 => 'Fout',
+    3 => 'Post Modus',
+    4 => 'Gebeurtenis URL',
+    5 => 'Gebeurtenis Begindatum',
+    6 => 'Gebeurtenis Einddatum',
+    7 => 'Gebeurtenis Ligging',
+    8 => 'Gebeurtenis Beskrywing',
+    9 => '(sluit http:// in)',
+    10 => 'U moet die datum/tye, gebeurtenistitel en beskrywing verskaf',
+    11 => 'Gebeurtenis Bestuur',
+    12 => 'Om \'n gebeurtenis te wysig of te verwyder, kliek om daardie gebeurtenis se wysig ikoon hierdonder.  Om \'n nuwe gebeurtenis te skep, kliek op "Skep Nuwe" hierbo.  Kliek op die kopie&euml;r ikoon om \'n kopie van \'n bestaande gebeurtenis te skep.',
+    13 => 'Bydraer',
+    14 => 'Begindatum',
+    15 => 'Einddatum',
+    16 => '',
+    17 => "U probeer om toegang te verkry tot 'n gebeurtenis waartoe u nie regte het nie.  Hierdie poging is aangeteken. Gaan asseblief terug <a href=\"{$_CONF['site_admin_url']}/event.php\">na die gebeurtenisbestuurskerm</a>.",
+    18 => '',
+    19 => '',
+    20 => 'stoor',
+    21 => 'kanselleer',
+    22 => 'verwyder',
+    23 => 'Ongeldige begindatum.',
+    24 => 'Ongeldige einddatum.',
+    25 => 'Einddatum is voor die begindatum.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Vorige Artikels',
+    2 => 'Volgende Artikels',
+    3 => 'Modus',
+    4 => 'Post Modus',
+    5 => 'Artikel Redigeerder',
+    6 => 'Daar is geen artikels in die stelsel nie',
+    7 => 'Skrywer',
+    8 => 'stoor',
+    9 => 'voorskou',
+    10 => 'kanselleer',
+    11 => 'verwyder',
+    12 => 'ID',
+    13 => '',
+    14 => '',
+    15 => 'Datum',
+    16 => 'Inleidende Teks',
+    17 => 'Inhoud',
+    18 => 'Besigtig',
+    19 => 'Kommentaar',
+    20 => 'Pieng',
+    21 => 'Stuur Pieng',
+    22 => 'Artikellys',
+    23 => 'Om \'n artikel uit te vee, kliek op die artikel se wysig ikoon hieronder. Om \'n artikel ten volle te vertoon, kliek op die titel van die artikel wat jy wil lees.  Om \'n nuwe artikel te skep, kliek op "Skryf iets" hierbo.',
+    24 => 'Die ID wat jy vir die artikel gekies het is reeds in gebruik. Gebruik asb \'n ander ID.',
+    25 => 'Fout tydens stoor van artikel',
+    26 => 'Artikelvoorskou',
+    27 => 'As jy [unscaledX] in plaas van [imageX] gebruik sal die beeld op sy oorspronklike grootte geplaas word.',
+    28 => '<p><b>VOORSKOU</b>: Die voorskou van \'n artikel met prente daarin kan beter gedoen word deur die artikel as \'n draft te stoor eerder as om die voorskou knop te kliek.  Gebruik die voorskou slegs as daar geen prente ingesluit is by die artikel nie.',
+    29 => 'Trackbacks',
+    30 => 'Foute tydens oplaai van l&ecirc;ers',
+    31 => 'Vul asseblief die Titel en Inleiding teksvelde in',
+    32 => 'Uitgeligte Artikel',
+    33 => 'Slegs een artikel kan uitgelig word',
+    34 => 'Draft',
+    35 => 'Ja',
+    36 => 'Nee',
+    37 => 'Meer deur',
+    38 => 'Meer van',
+    39 => 'Eposse',
+    40 => '',
+    41 => "U probeer om toegang tot 'n artikel te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken.  U kan die artikel in lees-alleen formaat hieronder besigtig. Gaan <a href=\"{$_CONF['site_admin_url']}/story.php\">asseblief terug na artikel administrasieskerm</a> as u klaar is.",
+    42 => "U probeer om toegang tot \'n storie te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken.  Gaan asseblief <a href=\"{$_CONF['site_admin_url']}/story.php\">terug na die artikel administrasieskerm</a>.",
+    43 => '',
+    44 => '',
+    45 => '',
+    46 => '<b>LET WEL:</b> as u hierdie datum na \'n toekomstige datum wysig, sal die artikel eers op daardie datum gepubliseer word.  Dit beteken ook dat die artikel nie in jou RSS nuusvoer ingesluit sal word nie en deur die soekfunksie en statistiese bladsye ge&iuml;gnoreer sal word.',
+    47 => 'Beelde',
+    48 => 'beeld',
+    49 => 'regs',
+    50 => 'links',
+    51 => 'Om een van die beelde wat jy by die artikel aanheg in die artikel te laat vertoon moet jy spesiale teks gebruik.  Die formaat van die spesiale teks is [imageX], [imageX_right] of [imageX_left] waar X die nommer is van die beeld/prent wat jy aangeheg het.  LET WEL: Jy moet die beelde gebruik wat jy aanheg gebruik.  As jy dit nie doen nie sal jy nie jou artikel kan stoor nie.<br>',
+    52 => '',
+    53 => 'is nie gebruik nie.  Jy moet hierdie beeld in die Inleiding of Kern van jou teks insluit alvorens jy jou veranderinge kan stoor',
+    54 => 'Aangehegte Beelde nie Gebruik',
+    55 => 'Die volgende foute het voorgekom tydens die poging om u storie te stoor.  Stel hierdie foute reg alvorens u probeer stoor',
+    56 => 'Wys Onderwerp Ikoon',
+    57 => 'Vertoon Ongeskaalde Beeld',
+    58 => 'Argief Opsies',
+    59 => 'Opsie',
+    60 => '',
+    61 => 'Outo-argief',
+    62 => 'Outo-verwydering',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Maak die Inhoud skryfarea groter',
+    68 => 'Maak die Inhoud skryfarea kleiner',
+    69 => 'Publikasie Datum vir Artikel',
+    70 => 'Kies Keusebalk',
+    71 => 'Basiese Keusebalk',
+    72 => 'Gewone Keusebalk',
+    73 => 'Gevorderde Keusebalk',
+    74 => 'Gevorderde II Keusebalk',
+    75 => 'Volkeuse',
+    76 => 'Opsies vir Publikasie',
+    77 => 'Javascript moet geaktiveer wees vir die Gevorderde Skryfblok. Opsie kan in die hoofwerf config.php buite werking gestel word',
+    78 => 'Kliek <a href="%s/story.php?mode=edit&sid=%s&editopt=default">hier</a> om die Standaard Skryfblok te gebruik',
+    79 => 'Voorskou',
+    80 => 'Skryfblok',
+    81 => 'Publikasievoorkeure',
+    82 => 'Beelde',
+    83 => 'Argiefvoorkeure',
+    84 => 'Regte',
+    85 => 'Wys Alles'
+);
+
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Onderwerpbestuur',
+    2 => 'Onderwerp ID',
+    3 => 'Onderwerpnaam',
+    4 => 'Onderwerpbeeld',
+    5 => '(moenie spasies gebruik nie)',
+    6 => 'Die verwydering van \'n onderwerp verwyder alle verbonde artikels en blokke daarmee saam',
+    7 => 'Vul asseblief die Onderwerp ID- en Naamvelde in',
+    8 => 'Onderwerpbestuur',
+    9 => 'Om \'n onderwerp te wysig of te verwyder kliek op daardie onderwerp.  Om \'n nuwe onderwerp te skep, kliek op "Skep Nuwe" hierbo. Jy sal jou toegangsvlak vir elke onderwerp in hakies sien. Die sterretjie(*) verwys na die standaard onderwerp.',
+    10 => 'Sorteer Volgorde',
+    11 => 'Artikels/Bladsy',
+    12 => 'Toegang Geweier',
+    13 => "U probeer om toegang tot 'n onderwerp te verkry waartoe u nie regte het nie.  Hierdie poging is aangeteken. Gaan asseblief <a href=\"{$_CONF['site_admin_url']}/topic.php\">terug na die onderwerpbestuurskerm</a>.",
+    14 => 'Sorteer Metode',
+    15 => 'alfabeties',
+    16 => 'standaard is',
+    17 => 'Nuwe Onderwerp',
+    18 => 'Admin Tuisblad',
+    19 => 'stoor',
+    20 => 'kanselleer',
+    21 => 'verwyder',
+    22 => 'Standaard',
+    23 => 'maak hierdie die standaard onderwerp vir nuwe artikel bydraes',
+    24 => '(*)',
+    25 => 'Argief Onderwerp',
+    26 => 'maak hierdie die standaard onderwerp vir die artikelargief. Slegs een onderwerp toegelaat.',
+    27 => 'of Laai Onderwerp Ikoon',
+    28 => 'Maksimum',
+    29 => 'L&ecirc;er Oplaai Foute'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Gebruikersbestuur',
+    2 => 'Gebruiker ID',
+    3 => 'Gebruikersnaam',
+    4 => 'Volle Naam',
+    5 => 'Wagwoord',
+    6 => 'Sekuriteitsvlak',
+    7 => 'Epos-adres',
+    8 => 'Tuisblad',
+    9 => '(moenie spasies gebruik nie)',
+    10 => 'Vul asseblief die Gebruikersnaam en Epos-adresvelde in',
+    11 => 'Gebruikersbestuur',
+    12 => 'Om \'n gebruiker te wysig of te verwyder, kliek op daardie gebruiker se wysig ikoon hieronder. Om \'n gebruiker se besonderhede te vertoon, kliek op die gebruikersnaam wat u wil bekyk. Om \'n nuwe gebruiker te skep, kliek op "Skep Nuwe" hierbo. U kan eenvoudige soektogte doen deur dele van die gebruikersnaam, epos-adres of volle naam (bv. *son* or *.edu) in die onderstaande vorm in te tik.',
+    13 => 'Sekvlak',
+    14 => 'Reg. Datum',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => 'stoor',
+    21 => 'Die gebruikersnaam wat u probeer stoor het bestaan reeds.',
+    22 => 'Fout',
+    23 => 'Lysbyvoeging',
+    24 => 'Voer Lys van Gebruikers in',
+    25 => 'Jy kan \'n lys van gebruikers in Geeklog invoer.  Die invoerl&ecirc;er moet \'n tab-geskeide teksl&ecirc;er wees en moet die velde in die volgende volgorde h&ecirc;: volle naam, gebruikersnaam, epos-adres,.  Aan elke gebruiker wat jy so invoer sal \'n lukraak geskepte wagwoord gepos word.  Daar moet slegs een gebruiker per lyn verskyn.  As jy in gebreke bly om die aanwysings te volg kan baie probleme veroorsaak word wat baie werk kan verg om die inskrywings weer na te gaan!',
+    26 => '',
+    27 => '',
+    28 => 'Merk hier om die prent te verwyder',
+    29 => 'Pad',
+    30 => 'Voer in',
+    31 => 'Nuwe Gebruikers',
+    32 => 'Verwerking voltooi. %d ingevoer met %d foute',
+    33 => 'stuur',
+    34 => 'Fout: Jy moet \'n l&ecirc;er spesifiseer om op te laai.',
+    35 => 'Laaste Intekening',
+    36 => '(nooit)',
+    37 => 'GID',
+    38 => 'Groepslys',
+    39 => 'Wagwoord (weereens)',
+    40 => 'Registrasie Datum',
+    41 => 'Laaste Intekendatum',
+    42 => 'Verban',
+    43 => 'Wag op Aktivering',
+    44 => 'Wag op Goedkeuring',
+    45 => 'Aktief',
+    46 => 'Gebruikerstatus',
+    47 => 'Wysig',
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Keur goed',
+    2 => 'Verwyder',
+    3 => 'Wysig',
+    4 => 'Profiel',
+    10 => 'Titel',
+    11 => 'Begindatum',
+    12 => 'URL',
+    13 => 'Bydraes',
+    14 => 'Datum',
+    15 => 'Onderwerp',
+    16 => 'Gebruikersnaam',
+    17 => 'Volle naam',
+    18 => 'Epos',
+    34 => 'Bestuur en Beheer',
+    35 => 'Artikel Bydraes',
+    36 => '',
+    37 => 'Gebeure Bydraes',
+    38 => 'Stuur',
+    39 => 'Daar is geen bydraes op hierdie tydstip wat aksie vereis nie',
+    40 => 'Gebruikersbydraes'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sondag',
+    2 => 'Maandag',
+    3 => 'Dinsdag',
+    4 => 'Woensdag',
+    5 => 'Donderdag',
+    6 => 'Vrydag',
+    7 => 'Saterdag',
+    8 => 'Sit Gebeurtenis By',
+    9 => '%s Gebeurtenis',
+    10 => 'Gebeure vir',
+    11 => 'MeesterKalender',
+    12 => 'My Kalender',
+    13 => 'Januarie',
+    14 => 'Februarie',
+    15 => 'Maart',
+    16 => 'April',
+    17 => 'Mei',
+    18 => 'Junie',
+    19 => 'Julie',
+    20 => 'Augustus',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'Desember',
+    25 => 'Terug na ',
+    26 => 'Heeldag',
+    27 => 'Week',
+    28 => 'Persoonlike Kalender van',
+    29 => 'Openbare Kalender',
+    30 => 'verwyder gebeurtenis',
+    31 => 'Sit by',
+    32 => 'Gebeurtenis',
+    33 => 'Datum',
+    34 => 'Tyd',
+    35 => 'Vinnig Byvoeg',
+    36 => 'Stuur',
+    37 => 'Jammer, die persoonlike kalender funksie is nie op hierdie werf geaktiveer nie',
+    38 => 'Persoonlike Gebeurtenis Wysiging',
+    39 => 'Dag',
+    40 => 'Week',
+    41 => 'Maand'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'Vanaf',
+    3 => 'Antwoord na',
+    4 => 'Onderwerp',
+    5 => 'Hoofdeel',
+    6 => 'Stuur na:',
+    7 => 'Alle gebruikers',
+    8 => 'Admin',
+    9 => 'Opsies',
+    10 => 'HTML',
+    11 => 'Dringende Boodskap!',
+    12 => 'Stuur',
+    13 => 'Herstel',
+    14 => 'Ignoreer gebruikersverstellings',
+    15 => 'Fout tydens poging om te stuur na: ',
+    16 => 'Boodskappe suksesvol gestuur na: ',
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Stuur 'n ander boodskap</a>",
+    18 => 'Aan',
+    19 => 'LET WEL: as u \'n boodskap aan alle werflede wil stuur, kies die Logged-in Users groep in die keuselys.',
+    20 => "<successcount> Boodskappe is suksesvol gestuur en <failcount> pogings het misluk.  Die besonderhede van elke poging is hieronder gelys indien jy dit sou benodig.  Andersins kan u <a href=\"{$_CONF['site_admin_url']}/mail.php\">\'n ander boodskap stuur</a> of u kan <a href=\"{$_CONF['site_admin_url']}/moderation.php\">terugkeer na die administrasieblad</a>.",
+    21 => 'Mislukkings',
+    22 => 'Suksesse',
+    23 => 'Geen mislukkings',
+    24 => 'Geen suksesse',
+    25 => '-- Kies Groep --',
+    26 => 'Vul asseblief al die velde op die onderstaande vorm in en kies \'n groep gebruikers uit die keuselys.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Die installasie van proppe kan moontlik skade aan u Geeklog installasie verrig en dalk selfs aan u stelsel.  Dit is daarom belangrik dat u slegs proppe installeer wat afgelaai is vanaf die <a href="http://www.geeklog.net">Geeklog Tuisblad</a> aangesien ons alle proppe wat aaan ons gestuur word deeglik toets op \'n verkseidenheid bedryfstelsels.  Dit is belangrik dat u daarop let dat die prop installasieproses die uitvoer van \'n l&ecirc;erstelsel bevele vereis wat kan aanleiding gee tot sekuriteitsprobleme veral as u proppe vanaf derdeparty werwe gebruik.  Selfs met die waarskuwing kan ons nie die sukses aldan mislukking van enige installasie waarborg nie en aanvaar ons nie verantwoordelikheid vir skade wat veroorsaak word deur die installasie van \'n Geeklog prop nie.  Met ander woorde, u installeer op eie verantwoordelikheid.  Vir die versigtiges is aanwysings ingesluit oor hoe om \'n prop handmatig te installeer ook by elke proppakket ingesluit.',
+    2 => 'Prop Installasie Vrywaring',
+    3 => 'Prop Installasie Vorm',
+    4 => 'Propl&ecirc;er',
+    5 => 'Proplys',
+    6 => 'Waarskuwing: Prop reeds ge&iuml;nstalleer!',
+    7 => 'Die prop wat u probeer installeer bestaan reeds.  Verwyder asseblief die prop alvorens u dit herinstalleer',
+    8 => 'Prop Versoenbaarheidstoets het Misluk',
+    9 => 'Hierdie prop vereis \'n nuwer weergawe van Geeklog. Gradeer of u kopie van <a href="http://www.geeklog.net">Geeklog</a> op of kry \'n nuwer weergawe van die prop.',
+    10 => '<br><b>Daar is tans geen proppe ge&iuml;nstalleer nie.</b><br><br>',
+    11 => 'Om \'n prop te wysig of te verwyder,  kliek op daardie prop se ikoon hieronder. Dit sal die prop se besonderhede vertoon, insluitend die samesteller se webwerf.  Beide die ge&iuml;nstalleerde weergawe en die weergawe wat vanaf die prop se eie kode teruggestuur is, word vertoon.  Dit sal u in staat stel om vas te stel of die prop opgegradeer moet word.  Vir aanwysings oor hoe om \'n prop te installeer of op te gradeer raadpleeg daardie prop se dokumentasie.',
+    12 => 'geen propnaam is aan plugineditor() verskaf nie',
+    13 => 'Propbestuurder',
+    14 => 'Nuwe Prop',
+    15 => 'Admin Tuiste',
+    16 => 'Propnaam',
+    17 => 'Prop weergawe',
+    18 => 'Geeklog Weergawe',
+    19 => 'Aktief',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => 'Installeer',
+    23 => 'Stoor',
+    24 => 'Kanselleer',
+    25 => 'Verwyder',
+    26 => 'Propnaam',
+    27 => 'Prop Tuisblad',
+    28 => 'Ge&iuml;nstalleerde Weergawe',
+    29 => 'Geeklog Weergawe',
+    30 => 'Verwyder Prop?',
+    31 => 'Is u seker dat u hierdie prop wil verwyder?  Deur dit te doen verwyder u al die data en datastrukture wat deur hierdie prop gebruik word.  As u seker is, kliek dan weer op verwyder in die onderstaande vorm.',
+    32 => '<p><b>Fout AutoLink tag nie in korrekte formaat</b></p>',
+    33 => 'Kode Weergawe',
+    34 => 'Opdateer',
+    35 => 'Wysig',
+    36 => 'Kode',
+    37 => 'Data',
+    38 => 'Opdateer!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'skep nuusvoer',
+    2 => 'stoor',
+    3 => 'verwyder',
+    4 => 'kanselleer',
+    10 => 'Inhoud Sindikasie',
+    11 => 'Nuwe Nuusvoer',
+    12 => 'Admin Tuiste',
+    13 => 'Om \'n nuusvoer te wysig of te verwyder kliek op die nuusvoer se wysig ikoon hieronder. Om \'n nuwe voer te skep kliek op "Skep Nuwe" hierbo.',
+    14 => 'Titel',
+    15 => 'Soort',
+    16 => 'L&ecirc;ernaam',
+    17 => 'Formaat',
+    18 => 'Laaste opdatering',
+    19 => 'Aktief',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => '<i>(geen nuusvoere)</i>',
+    23 => 'alle Artikels',
+    24 => 'Nuusvoerbestuurder',
+    25 => 'Nuusvoertitel',
+    26 => 'Limiet',
+    27 => 'Lengte van inskrywings',
+    28 => '(0 = geen teks, 1 = volledige teks, ander = beperk tot die aantal karakters)',
+    29 => 'Beskrywing',
+    30 => 'Laaste Opdatering',
+    31 => 'Karakterstel',
+    32 => 'Taal',
+    33 => 'Inhoud',
+    34 => 'Inskrywings',
+    35 => 'Ure',
+    36 => 'Kies jou soort nuusvoer',
+    37 => 'U het ten minste een prop ge&iuml;nstalleer wat inhoudsindikasie ondersteun. Hieronder moet u kies of u \'n Geeklog nuusvoer wil h&ecirc; of \'n voer vanaf een van die proppe.',
+    38 => 'Fout: Vermiste Velde',
+    39 => 'Vul asseblief die Nuusvoer se Titel, Beskrywing en L&ecirc;ernaam in.',
+    40 => 'Vul asseblief die aantal inskrywings of aantal ure in.',
+    41 => 'Stuur',
+    42 => 'Gebeure',
+    43 => 'Alles',
+    44 => 'Geen',
+    45 => 'Opskrifskakel in onderwerp',
+    46 => 'Beperk Resultate',
+    47 => 'Soek',
+    48 => 'Wysig',
+    49 => 'Nuusvoer Logo',
+    50 => "Relatief tot werf se url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "U wagwoord is aan u gepos en u behoort dit binnekort te ontvang. Volg asseblief die aanwysings in die boodskap.  Dankie dat u {$_CONF['site_name']} gebruik.",
+    2 => "Dankie vir die artikel wat u voorgel&ecirc; het vir plasing op {$_CONF['site_name']}.  Dit sal ter goedkeuring aan ons personeel voorgel&ecirc; word. Indien dit goedgekeur word, sal u artikel beskikbaar wees sodat ander dit op ons werf kan lees.",
+    3 => "",
+    4 => "Dankie vir die gebeurtenis wat u vir plasing op {$_CONF['site_name']} voorgel&ecirc; het.  Dit sal ter goedkeuring aan ons personeel voorgel&ecirc; word.  Indien dit goedgekeur word, sal u gebeurtenis in ons <a href=\"{$_CONF['site_url']}/calendar.php\">kalender</a> verskyn.",
+    5 => 'U rekeninginligting is suksesvol gestoor.',
+    6 => 'U voorkeure is suksesvol gestoor.',
+    7 => 'U kommentaarvoorkeure is suksesvol gestoor.',
+    8 => 'U is suksesvol uitgeteken.',
+    9 => 'U artikel is suksesvol gestoor.',
+    10 => 'Die artikel is suksesvol verwyder.',
+    11 => 'U blok is suksesvol gestoor.',
+    12 => 'Die blok is suksesvol verwyder.',
+    13 => 'U onderwerp is suksesvol gestoor.',
+    14 => 'Die onderwerp en al sy artikels en blokke is suksesvol verwyder.',
+    15 => '',
+    16 => '',
+    17 => 'U gebeurtenis is suksesvol gestoor.',
+    18 => 'Die gebeurtenis is suksesvol verwyder.',
+    19 => 'U peiling is suksesvol gestoor.',
+    20 => 'Die peiling is suksesvol verwyder.',
+    21 => 'Die gebruiker is suksesvol gestoor.',
+    22 => 'Die gebruiker is suksesvol verwyder.',
+    23 => '\'n Fout het voorgekom tydens die byvoeg van \'n gebeurtenis op u kalender.  Geen gebeurtenis id is aangestuur.',
+    24 => 'Die gebeurtenis is in u kalender gestoor',
+    25 => 'Kan nie u persoonlike kalender oopmaak alvorens u inteken nie',
+    26 => 'Gebeurtenis is suksesvol verwyder vanuit u persoonlike kalender',
+    27 => 'Boodskap suksesvol gestuur.',
+    28 => 'Die proppie is suksesvol gestoor',
+    29 => 'Jammer, die persoonlike kalenderfunksie is nie op hierdie werf geaktiveer nie',
+    30 => 'Toegang geweier',
+    31 => 'Jammer, u het nie toegang tot die artikel adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    32 => 'Jammer, u het nie toegang tot die onderwerp adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    33 => 'Jammer, u het nie toegang tot die blok adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    34 => 'Jammer, u het nie toegang tot die skakel adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    35 => 'Jammer, u het nie toegang tot die gebeure adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    36 => 'Jammer, u het nie toegang tot die peiling adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    37 => 'Jammer, u het nie toegang tot die gebruiker adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    38 => 'Jammer, u het nie toegang tot die prop adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    39 => 'Jammer, u het nie toegang tot die epos adminblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    40 => 'Stelselboodskap',
+    41 => 'Jammer, u het nie toegang to die woordvervangingsblad nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    42 => 'U woord is suksesvol gestoor.',
+    43 => 'Die woord is suksesvol verwyder.',
+    44 => 'Die prop is suksesvol gestoor!',
+    45 => 'Die prop is suksesvol verwyder.',
+    46 => 'Jammer, u het nie toegang tot die databasis rugsteunfunksie nie.  Neem kennis dat alle pogings tot ongemagtigde toegang aangeteken word',
+    47 => 'Hierdie funksie werk slegs onder *nix stelsels.  Indien u wel \'n *nix bedryfstelsel gebruik is u kasgeheue suksesvol skoongevee. As u op Windows werk, moet u na l&ecirc;ers soek met die naam adodb_*.php en hulle handmatig verwyder.',
+    48 => "Dankie vir u aansoek vir lidmaatskap tot {$_CONF['site_name']}. Ons span sal u aansoek nagaan.  Indien goedgekeur, sal u wagwoord gestuur word aan die epos adres wat u verskaf het.",
+    49 => 'U groep is suksesvol gestoor.',
+    50 => 'Die groep is suksesvol verwyder.',
+    51 => 'Hierdie gebruikersnaam is reeds in gebruik.  Kies asseblief \'n ander een.',
+    52 => 'Die epos adres deur u verskaf blyk nie \'n geldige epos adres te wees nie.',
+    53 => 'U nuwe wagwoord is aanvaar.  Gebruik u nuwe wagwoord hieronder om nou in te teken.',
+    54 => 'U versoek vir \'n nuwe wagwoord het verval.  Probeer weer hieronder.',
+    55 => '\'n Epos is aan u gestuur en behoort u binnekort te bereik.  Volg asseblief die aanwysings in die boodskap om \'n nuwe wagwoord vir u rekening op te stel.',
+    56 => 'Die epos-adres verskaf is reeds in gebruik vir \'n ander rekening.',
+    57 => 'U rekening is suksesvol verwyder.',
+    58 => 'U nuusvoer is suksesvol gestoor.',
+    59 => 'Die nuusvoer is suksesvol verwyder.',
+    60 => 'Die prop is suksesvol opgedateer',
+    61 => 'Prop %s: Onbekende boodskap plekhouer',
+    62 => 'Die terugspoor kommentaar is verwyder.',
+    63 => '\'n Fout het voorgekom tydens die verwydering van die terugspoorkommentaar.',
+    64 => 'U terugspoorkommentaar is suksesvol gestuur.',
+    65 => 'Boernaal gidsdiens suksesvol gestoor.',
+    66 => 'Die boernaal gidsdiens is suksesvol verwyder.',
+    67 => 'Die nuwe wagwoord stem nie met die bevestigingswagwoord ooreen nie!',
+    68 => 'U moet die korrekte huidige wagwoord insleutel.',
+    69 => 'U rekening is geblokeer!',
+    70 => 'U rekening is nog hangende goedkeuring deur die administrateur.',
+    71 => 'U rekening is bevestig en aktivering is nog hangende goedkeuring deur die administrateur.',
+    72 => '\'n Fout het voorgekom tydens die poging om die prop te installeer.  Sien error.log vir besonderhede.',
+    73 => '\'n Fout het voorgekom met die poging om die prop te verwyder.  Sien error.log vir besonderhede.',
+    74 => 'Die skakelkennisgewing is suksesvol gestuur.',
+    75 => 'Terugsporings moet gestuur word deur die POST versoek.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Toegang',
+    'ownerroot' => 'Eienaar/Root',
+    'group' => 'Groep',
+    'readonly' => 'Lees-Alleen',
+    'accessrights' => 'Toegangsregte',
+    'owner' => 'Eienaar',
+    'grantgrouplabel' => 'Gee Bogenoemde Groep Wysigingsregte',
+    'permmsg' => 'Let Wel: lede is al die ingetekende lede van die werf en anoniem is alle gebruikers wat die werf lees sonder om in te teken.',
+    'securitygroups' => 'Sekuriteitsgroepe',
+    'editrootmsg' => "Selfs al is u 'n Administrateur, kan u nie 'n kerngebruiker wysig sonder om self 'n kerngebruiker te wees nie.  U kan alle ander gebruikers wysig buiten die kerngebruikers. Let wel dat alle pogings om kerngebruikers onregmatig te wysig aangeteken word.  Gaan asseblief terug na die <a href=\"{$_CONF['site_admin_url']}/user.php\">Gebruiker Adminblad</a>.",
+    'securitygroupsmsg' => 'Merk die keuseboksies vir die groep waaraan u die gebruiker wil toewys.',
+    'groupeditor' => 'Groepbestuur',
+    'description' => 'Beskrywing',
+    'name' => 'Naam',
+    'rights' => 'Regte',
+    'missingfields' => 'Vermiste velde',
+    'missingfieldsmsg' => 'U moet die naam en beskrywing van die groep verskaf',
+    'groupmanager' => 'Groepbestuurder',
+    'newgroupmsg' => 'Om \'n groep te wysig of te verwyder kliek op daardie groep se wysig ikoon hieronder. Om \'n nuwe groep te skep kliek op "Skep Nuwe" hierbo. Let asseblief daarop dat kerngroepe nie verwyder kan word nie omdat hulle deur die stelsel gebruik word.',
+    'groupname' => 'Groepnaam',
+    'coregroup' => 'Kerngroep',
+    'yes' => 'Ja',
+    'no' => 'Nee',
+    'corerightsdescr' => "Hierdie groep is 'n kerngroep van {$_CONF['site_name']}.  Daarom kan die regte vir hierdie groep nie gewysig word nie.  Hieronder is 'n lees-alleen lys van die regte waartoe hierdie groep toegang het.",
+    'groupmsg' => 'Sekuriteitsgroepe op hierdie werf is hi&euml;rargies.  Deur hierdie groep by enige van die ander groepe hieronder te voeg sal u hierdie groep dieselfde regte gee wat daardie groep het.  Waar moontlik word u aangemoedig om die onderstaande groepe te gebruik om regte aan \'n groep toe te ken.  As u pasgemaakte regte aan \'n groep wil toeken kan u die regte tot die verskeie werf-funksies in die afdeling genaamd \'Regte\' kies.  Om hierdie groep by enige van die onderstaandes te voeg merk u eenvoudig die boksie langs die groep(e) wat u verlang.',
+    'coregroupmsg' => "Hierdie groep is 'n kerngroep van {$_CONF['site_name']}.  Daarom sal die groepe wat aan hierdie groep behoort nie gewysig kan word nie.  Hieronder is 'n lees-alleen lys van die groepe waaraan hierdie groep behoort.",
+    'rightsdescr' => '\'n Groep se toegang tot sekere regte hieronder aangetoon kan direk aan die groep toegeken word OF aan \'n ander groep waarvan hierdie groep \'n lid is.  Diegene wat u hieronder sien sonder \'n keuseblok is die regte wat aan hierdie groep toegeken is uit hoofde van sy lidmaatskap aan \'n ander groep met daardie regte.  Die regte hieronder met keusebokse daarlangsaan is regte wat direk aan hierdie groep toegeken kan word.',
+    'lock' => 'Sluit',
+    'members' => 'Lede',
+    'anonymous' => 'Anoniem',
+    'permissions' => 'Regte',
+    'permissionskey' => 'R = Lees, E = Wysig, wysigingsregte impliseer leesregte is toegeken',
+    'edit' => 'Wysig',
+    'none' => 'Geen',
+    'accessdenied' => 'Toegang Geweier',
+    'storydenialmsg' => "U het nie toegang tot hierdie artikel nie.  Dit kan wees omdat u nie 'n lid van {$_CONF['site_name']} is nie.  Registreer asseblief <a href=\"{$_CONF['site_url']}/users.php?mode=new\">as 'n lid</a> of {$_CONF['site_name']} om volle ledetoegang  te verkry!",
+    'eventdenialmsg' => "U het nie toegang om hierdie gebeurtenis te vertoon nie.  Dit kan wees omdat u nie 'n lid van {$_CONF['site_name']} is nie.  Registreer asseblief <a href=\"{$_CONF['site_url']}/users.php?mode=new\">as 'n lid</a> of {$_CONF['site_name']} om volle ledetoegang  te verkry!",
+    'nogroupsforcoregroup' => 'Hierdie groep behoort nie aan enige ander groep nie',
+    'grouphasnorights' => 'Hierdie groep het nie toegang tot enige van die administratiewe funksies van hierdie werf nie',
+    'newgroup' => 'Nuwe Groep',
+    'adminhome' => 'Admin Tuisblad',
+    'save' => 'stoor',
+    'cancel' => 'kanselleer',
+    'delete' => 'verwyder',
+    'canteditroot' => 'U het probeer om die kerngroep te wysig maar u is nie \'n lid van die kerngroep nie, daarom word u toegang tot die groep geweier.  Kontak die stelseladministrateur as u voel dat dit \'n fout is.',
+    'listusers' => 'Lede',
+    'listthem' => 'lys',
+    'usersingroup' => 'Gebruikers in groep "%s"',
+    'usergroupadmin' => 'Gebruikersgroep Administrasie',
+    'add' => 'Sit by',
+    'remove' => 'Verwyder',
+    'availmembers' => 'Beskikbare Lede',
+    'groupmembers' => 'Groepslede',
+    'canteditgroup' => 'Om hierdie groep te wysig, moet u \'n lid van die groep wees.  Kontak asseblief die stelseladministrateur as u voel dat dit \'n fout is.',
+    'cantlistgroup' => 'Om die lede van hierdie groep te besigtig, moet u self \'n lid wees. Kontak asseblief die stelseladministrateur as u voel dat dit \'n fout is.',
+    'editgroupmsg' => 'Om die ledelys van die groep te wysig kliek op die lidnaam/name en gebruik die Sit by of Verwyder knop. As die lede aan die groep behoort sal hul name sleg aan die regterkant verskyn. Wanneer u klaar is - druk <b>Stoor</b> om die groep op datum te bring en dan terug te keer na die hoof groep adminblad.',
+    'listgroupmsg' => 'Lys van alle huidige lede in die groep: <b>%s</b>',
+    'search' => 'Soektog',
+    'submit' => 'Stuur',
+    'limitresults' => 'Beperk Resultate',
+    'group_id' => 'Groep ID',
+    'plugin_access_denied_msg' => 'U probeer onregmatiglik om toegang tot \'n prop se administrasieblad te verkry.  Let wel alle pogings tot onregmatige toegang tot hierdie blad word aangeteken.',
+    'groupexists' => 'Groepnaam bestaan reeds',
+    'groupexistsmsg' => 'Daar is reeds \'n groep met hierdie naam.  Groepname moet uniek wees.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Laaste 10 Rugsteunings',
+    'do_backup' => 'Voer Rugsteun uit',
+    'backup_successful' => 'Databasis rugsteuning was suksesvol.',
+    'db_explanation' => 'Om \'n nuwe rugsteunkopie van u werf se databasis te skep kliek op "Skep Nuwe" hierbo.',
+    'not_found' => "Foutiewe pad of mysqldump program is nie uitvoerbaar nie.<br>Gaan die <strong>\$_DB_mysqldump_path</strong> definisie in config.php na.<br>Veranderlike is tans gedefinie&euml;r as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Rugsteuning het Misluk: L&ecirc;ergrootte was 0 grepe',
+    'path_not_found' => "{$_CONF['backup_path']} bestaan nie of is nie 'n gids (directory) nie",
+    'no_access' => "Fout: Gids (directory) {$_CONF['backup_path']} is nie toeganklik nie.",
+    'backup_file' => 'Rugsteunl&ecirc;er',
+    'size' => 'Grootte',
+    'bytes' => 'Grepe',
+    'total_number' => 'Totale aantal rugsteunings: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Tuisblad',
+    2 => 'Kontak',
+    3 => 'Publiseer u Werk',
+    4 => 'Skakels',
+    5 => 'Peilings',
+    6 => 'Kalender',
+    7 => 'Werfstatistieke',
+    8 => 'Verpersoonlik',
+    9 => 'Soektog',
+    10 => 'gevorderde soektog',
+    11 => 'Gids'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Fout',
+    2 => 'Gits, ek het oral gesoek maar kan nie <b>%s</b> opspoor nie.',
+    3 => "<p>Ons is jammer, maar die l&ecirc;er wat u versoek het bestaan nie. Gaan gerus die <a href=\"{$_CONF['site_url']}\">tuisblad</a> of die <a href=\"{$_CONF['site_url']}/search.php\">soekblad</a> na om te sien of u dit wat u verloor het kan opspoor."
+);
+
+###############################################################################
+
+$LANG_LOGIN = array(
+    1 => 'Intekening word vereis',
+    2 => 'Jammer, om toegang to hierdie blad te verkry moet u as gebruiker ingeteken wees.',
+    3 => 'Intekening',
+    4 => 'Nuwe Gebruiker'
+);
+
+$LANG_PDF = array(
+    1 => 'Die PDF funksie is gedeaktiveer',
+    2 => 'Die verskafde dokument is nie vertaal nie.  Die dokument is ontvang maar kon nie verwerk word nie.  Maak seker dat u slegs html formaat dokument voorl&ecirc; wat aan die xHTML standaard voldoen. Neem kennis dat onnodig komplekse html dokumente nie noodwendig korrek of enigsins vertaal sal word nie. Die dokument uit u poging was 0 grepe in lengte en is verwyder. As u seker is dat u dokument behoorlik vertaal behoort te word, stuur dit weereens.',
+    3 => 'Onbekende fout tydens skep van PDF',
+    4 => 'Geen bladsy is verskaf of u wil dalk die ad-hoc PDF funksie hieronder gebruik.  As u glo dat u verkeerdelik die blad gekry het, kontak die stelseladministrateur.  Andersins kan u die onderstaande vorm gebruik om die PDF op \'n ad-hoc wyse te skep.',
+    5 => 'Besig om u dokument te laai.',
+    6 => 'Wag asseblief terwyl u dokument gelaai word.',
+    7 => 'U kan met regterknop op die onderstaande knop kliek en dan kies \'save target...\' of \'save link location...\' om \'n kopie van u dokument te stoor.',
+    8 => 'Die gegewe pad wat in die konfigurasie l&ecirc;er van die HTMLDoc program is ongeldig of di&eacute; stelsel kan dit nie uitvoer nie.  Kontak die werfadministrateur as die probleem voortduur.',
+    9 => 'PDF-Skrywer',
+    10 => 'Hierdie is die Ad-hoc PDF-skrywer hulpmiddel. Dit sal poog om enige URL wat u verskaf na \'n PDF om te skakel.  Neem kennis dat sommige web-bladsye nie korrek vertaal sal word met hierdie funksie nie.  Dit is \'n beperking van die HTMLDoc PDF-skrywer program en sulke foute moet dus nie aan die administrateur van die werf gerapporteer word nie',
+    11 => 'URL',
+    12 => 'Skryf PDF!',
+    13 => 'Die PHP konfigurasie op hierde bediener laat nie toe dat URL\'le gebruik word met die fopen() bevel nie.  Die stelseladministrateur moet die php.ini l&ecirc;er wysig en die set allow_url_fopen veranderlike na On toe stel',
+    14 => 'Die PDF wat u versoek het bestaan nie of u het probeer om onregmatiglik toegang tot \'n l&ecirc;er te verkry.'
+);
+
+###############################################################################
+# trackback
+
+$LANG_TRB = array (
+    'trackback'          => 'Terugspoor',
+    'from'               => 'vanaf',
+    'tracked_on'         => 'Gespoor op',
+    'read_more'          => '[lees verder]',
+    'intro_text'         => "Hier is wat ander oor '%s' te s&ecirc; gehad het:",
+    'no_comments'        => 'Geen terugspoorkommentaar vir hierdie inskrywing nie.',
+    'this_trackback_url' => 'Terugspoor URL vir hierdie inskrywing:',
+    'num_comments'       => '%d terugspoorkommentare',
+    'send_trackback'     => 'Stuur Skakelkennisgewings',
+    'preview'            => 'Voorskou',
+    'editor_title'       => 'Stuur terugspoorkommentaar',
+    'trackback_url'      => 'Terugspoor URL',
+    'entry_url'          => 'Inskrywing URL',
+    'entry_title'        => 'Inskrywing Titel',
+    'blog_name'          => 'Werfnaam',
+    'excerpt'            => 'Uittreksel',
+    'truncate_warning'   => 'Let wel: Die werf wat ontvang kan dalk u uittreksel kortknip',
+    'button_send'        => 'Stuur',
+    'button_preview'     => 'Voorskou',
+    'send_error'         => 'Fout',
+    'send_error_details' => 'Fout tydens stuur van terugspoorkommentaar:',
+    'url_missing'        => 'Geen Inskrywing URL',
+    'url_required'       => 'Verskaf asseblief ten minste \'n URL vir die inskrywing.',
+    'target_missing'     => 'Geen Terugspoor URL',
+    'target_required'    => 'Sleutel asseblief \'n terugspoor URL in',
+    'error_socket'       => 'Kon nie socket oopmaak nie.',
+    'error_response'     => 'Terugvoer nie verstaan.',
+    'error_unspecified'  => 'Onbekende fout.',
+    'select_url'         => 'Kies Terugspoor URL',
+    'not_found'          => 'Terugspoor URL nie gevind',
+    'autodetect_failed'  => 'Geeklog kon nie die Terugspoor URL opspoor vir die inskrywing waarna u, u kommentaar wil stuur nie.  Sleutel dit asseblief per hand hieronder in.',
+    'trackback_explain'  => 'Kies asseblief uit die skakels hieronder die URL waarheen u, u Terugspoorkommentaar wil stuur. Geeklog sal dan poog om die korrekte Terugspoor URL vir daardie inskrywing op te spoor. Of u kan <a href="%s">dit met die hand insleutel</a> as u dit reeds ken.',
+    'no_links_trackback' => 'Geen skakels opgespoor nie.  U kan nie \'n Terugspoorkommentaar vir hierdie inskrywing stuur nie.',
+    'pingback'           => 'Skakelkennisgewing',
+    'pingback_results'   => 'Skakelkennisgewing resultate',
+    'send_pings'         => 'Stuur Skakelkennisgewings',
+    'send_pings_for'     => 'Stuur Skakelkennisgewing vir "%s"',
+    'no_links_pingback'  => 'Geen skakels opgespoor.  Geen Skakelkennisgewing is vir hierdie inskrywing gestuur nie.',
+    'pingback_success'   => 'Skakelkennisgewing gestuur.',
+    'no_pingback_url'    => 'Geen skakelkennisgewing URL gevind.',
+    'resend'             => 'Stuur weer',
+    'ping_all_explain'   => 'U kan nou werwe waarna u skakel daarvan in kennis stel deur (<a href="http://af.wikipedia.org/wiki/Skakelkennisgewing">Skakelkennisgewing</a>), adverteer dat u werf opgedateer is deur boernaalgids dienste te raadpleeg of \'n <a href="http://af.wikipedia.org/wiki/Terugspoorkommentaar">Terugspoorkommentaar</a> te stuur in geval u kommentaar gelewer het op \'n inskrywing op iemand anders se werf.',
+    'pingback_button'    => 'Stuur Skakelkennisgewing',
+    'pingback_short'     => 'Stuur Skakelkennisgewing na al die werwe wat waarna in hierdie inskrywing geskakel word.',
+    'pingback_disabled'  => '(Skakelkennisgewings gedeaktiveer)',
+    'ping_button'        => 'Stuur Kennisgewing',
+    'ping_short'         => 'Stel boernaalgids dienste in kennis.',
+    'ping_disabled'      => '(Kennisgewing  gedeaktiveer)',
+    'trackback_button'   => 'Stuur Terugsporing',
+    'trackback_short'    => 'Stuur \'n Terugspoorkommentaar.',
+    'trackback_disabled' => '(Terugspoor gedeaktiveer)',
+    'may_take_a_while'   => 'Neem kennis dat Skakelkennisgewings en Kennisgewings \'n tydjie mag neem.',
+    'ping_results'       => 'Kennisgewingresultate',
+    'unknown_method'     => 'Onbekende kennisgewingmetode',
+    'ping_success'       => 'Kennisgewing gestuur.',
+    'error_site_name'    => 'Sleutel die werf se naam in.',
+    'error_site_url'     => 'Sleutel die werf se URL in.',
+    'error_ping_url'     => 'Sleutel \'n geldige Kennisgewing URL in.',
+    'no_services'        => 'Geen boernaalgidsdiens is opgestel nie.',
+    'services_headline'  => 'Boernaalgidsdienste',
+    'service_explain'    => 'Om \'n boernaalgidsdiens te wysig of te verwyder kliek op die wysig ikoon van daardie diens hieronder. Om \'n nuwe boernaal diensgids by te voeg, kliek op "Skep Nuwe" hierbo.',
+    'service'            => 'Diens',
+    'ping_method'        => 'Kennisgewingsmetode',
+    'service_website'    => 'Webwerf',
+    'service_ping_url'   => 'URL om in kennis te stel',
+    'ping_standard'      => 'Standaard Kennisgewing',
+    'ping_extended'      => 'Uitgebreide Kennisgewing',
+    'ping_unknown'       => '(onbekende metode)',
+    'edit_service'       => 'Wysig Boernaalgidsdiens',
+    'trackbacks'         => 'Terugsporings',
+    'editor_intro'       => 'Berei u terugspoorkommentaar vir <a href="%s">%s</a> voor.',
+    'editor_intro_none'  => 'Berei u terugspoorkommentaar voor.',
+    'trackback_note'     => 'Om \'n terugspoorkommentaar vir \'n artikel te stuur, gaan na die lys van artikels en kliek op "' . $LANG24[21] . '" vir die artikel. Om \'n terugspoor te stuur wat nie verband hou met \'n artikel nie, <a href="%s">kliek hier</a>.',
+    'pingback_explain'   => 'Sleutel \'n URL in waarna die Skakelkennisgewing gestuur moet word.  Die kennisgewing sal sal na u werf se tuisblad verwys.',
+    'pingback_url'       => 'Skakelkennisgewing URL',
+    'site_url'           => 'Hierdie werf se URL',
+    'pingback_note'      => 'Om \'n skakelkennisgewing vir \'n artikel te stuur gaan na die lys van artikels en kliek op stories en kliek op "' . $LANG24[21] . '" vir die artikel. Om \'n skakelkennisgewing te stuur wat nie verband hou met \'n artikel nie, <a href="%s">kliek hier</a>.',
+    'pbtarget_missing'   => 'Geen Skakelkennisgewing URL',
+    'pbtarget_required'  => 'Sleutel asseblief \'n skakelkennisgewing URL in',
+    'pb_error_details'   => 'Fout tydens stuur van skakelkennisgewing:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array (
+    'title'            => 'Artikelgids',
+    'title_year'       => 'Artikelgids vir  %d',
+    'title_month_year' => 'Artikelgids vir %s %d',
+    'nav_top'          => 'Terug na die Artikelgids',
+    'no_articles'      => 'Geen Artikels.'
+);
+
+################################################################################
+# "What's New" Time Strings
+
+$LANG_WHATSNEW = array (
+    # This here determines the order of the sentence "No new stories in 2 hrs"
+    # order it so it makes sense in your language:
+    # %i    item, "Stories"
+    # %n    amount, "2", "20" etc
+    # %t    time, "2" (weeks)
+    # %s    scale, "hrs", "weeks"
+    'new_string'  => '%n nuwe %i in die laaste %t %s',
+    'new_last'    => 'laaste %t %s',
+    # other strings
+    'minutes'     => 'minute',
+    'hours'       => 'ure',
+    'days'        => 'dae',
+    'weeks'       => 'weke',
+    'months'      => 'maande',
+    'minute'      => 'minuut',
+    'hour'        => 'uur',
+    'day'         => 'dag',
+    'week'        => 'week',
+    'month'       => 'maand'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display adminiatration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Soektog',
+    'limit_results' => 'Beperk Resultate',
+    'submit'        => 'Stuur',
+    'edit'          => 'Wysig',
+    'admin_home'    => 'Admin Tuisblad',
+    'create_new'    => 'Skryf iets',
+    'enabled'       => 'Aktief',
+    'title'         => 'Titel',
+    'type'          => 'Tipe',
+    'topic'         => 'Onderwerp',
+    'help_url'      => 'Hulpl&ecirc;er URL',
+    'save'          => 'Stoor',
+    'cancel'        => 'Kanselleer',
+    'delete'        => 'Verwyder',
+    'copy'          => 'Kopi&euml;er',
+    'no_results'    => '- Geen inskrywings opgespoor -',
+    'data_error'    => 'Daar was \'n fout tydens die verwerking van die intekenlysdata. Gaan asseblief databron na.'
+
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Kommentaar Aktief',
+    -1  => 'Kommentaar Onaktief'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Plat',
+    'nested'    => 'Genestel',
+    'threaded'  => 'Geryg',
+    'nocomment' => 'Geen Kommentaar'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(moenie)',
+    3600    => '1 Uur',
+    7200    => '2 Ure',
+    10800   => '3 Ure',
+    28800   => '8 Ure',
+    86400   => '1 Dag',
+    604800  => '1 Week',
+    2678400 => '1 Maand'
+);
+
+$LANG_dateformats = array(
+    0   => 'Stelselstandaard'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Nie Uitgelig',
+    1 => 'Uitgelig'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Wys Slegs in Onderwerp',
+    1 => 'Wys op Voorblad'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Gewone Teks',
+    'html'      => 'HTML Formaat'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Oudste Eerste',
+    'DESC' => 'Nuutste Eerste'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Terugsporings Aktief',
+    -1  => 'Terugsporings Onaktief'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/bosnian.php 1.4.0sr5-1/cpanel-glprivate/language/bosnian.php
--- 1.3.11sr1/cpanel-glprivate/language/bosnian.php	2004-12-31 10:03:36.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/bosnian.php	2006-08-08 02:39:06.000000000 -0500
@@ -157,7 +157,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -324,7 +334,23 @@
     104 => 'Prikazi online status',
     105 => 'Pokazi ko je online u bloku',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -342,27 +368,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Linkovi',
-    2 => 'Nema linkova za prikazati.',
-    3 => 'Dodaj link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Glas spasen',
-    2 => 'Vas glas je zapisan.',
-    3 => 'Glas',
-    4 => 'Anketa na stranicama',
-    5 => 'Glasova',
-    6 => 'Pogledajte ostale ankete'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -463,7 +468,11 @@
     54 => 'Rezultati komentara',
     55 => 'izraz(e)',
     56 => 'I',
-    57 => 'ILI'
+    57 => 'ILI',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -493,7 +502,14 @@
     21 => 'Na stranicama nema niti jednog linka ili nema linka na koji je kliknuto bar jedanput.',
     22 => 'Prvih deset tekstova poslanih emailom',
     23 => 'Emailovi',
-    24 => 'Niko nije poslao tekst emailom s ovih stranica.'
+    24 => 'Niko nije poslao tekst emailom s ovih stranica.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -646,7 +662,12 @@
     57 => 'Pomjeri Blok dole',
     58 => 'Pomjeri Blok gore',
     59 => 'Prebaci Blok na desnu stranu',
-    60 => 'Prebaci Blok na lijevu stranu'
+    60 => 'Prebaci Blok na lijevu stranu',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -681,35 +702,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Uredjivanje linkova',
-    2 => '',
-    3 => 'Naziv linka',
-    4 => 'URL linka',
-    5 => 'Kategorija',
-    6 => '(ukljucujuci http://)',
-    7 => 'Nova kategorija',
-    8 => 'Link Klik',
-    9 => 'Opis linka',
-    10 => 'Potrebno je unijeti Naziv linka, URL i Opis.',
-    11 => 'Link Menadzer',
-    12 => 'Ako zelite modificirati ili obrisati link, kliknite dole na zeljeni link. Ako zelite dodati novi link kliknite iznad na Novi link.',
-    13 => 'Naziv linka',
-    14 => 'Kategorija linka',
-    15 => 'URL linka',
-    16 => 'Pristup odbijen',
-    17 => "Pokusavas pristupati linku za koji nemas prava pristupa. Ovaj pokusaj pristupa je zabiljezen. Molimo <a href=\"{$_CONF['site_admin_url']}/link.php\">vratite se nazad</a>.",
-    18 => 'Novi link',
-    19 => 'Administracija',
-    20 => 'Ako je Nova kategorija, molimo unesite naziv nove kategorije.',
-    21 => 'snimi',
-    22 => 'ponisti',
-    23 => 'obrisi'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -732,16 +724,16 @@
     17 => 'Tijelo teksta',
     18 => 'Posjeta',
     19 => 'Komentari',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Popis tekstova',
     23 => 'Da biste uredili ili izbrisali vijest, pritisnite an broj vijesti ispod. Da biste pregledali vijest, pritisnite na naziv vijesti koju zelite pregledati. Ako zelite napisati novu vijest izaberite opciju nova vijest iznad.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Pregled teksta',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Greska u uploadanju datoteke',
     31 => 'Molimo popunite polja sa Nazivom i Uvodnim tekstom',
     32 => 'Featured',
@@ -774,39 +766,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mod',
-    2 => 'Molimo unesite pitanje i najmanje dva odgovora..',
-    3 => 'Anketa kreirana',
-    4 => 'Ankete %s snimljena',
-    5 => 'Uredjivanje ankete',
-    6 => 'ID Ankete',
-    7 => '(ne koristite prazan prostor)',
-    8 => 'Prikazi na pocetnoj strani',
-    9 => 'Pitanje ankete',
-    10 => 'Odgovora / Glasova',
-    11 => 'Pojavila se greska prilikom prikupljanja odgovora iz ankete %s',
-    12 => 'Pojavila se greska prilikom prikupljanja pitanja iz ankete %s',
-    13 => 'Kreirajte anketu.',
-    14 => 'snimi',
-    15 => 'ponisti',
-    16 => 'obrisi',
-    17 => 'Molim unesite ID ankete.',
-    18 => 'Lista anketa',
-    19 => 'Da biste uredili ili izbrisali anketu pritisnite na tu anketu. Ako zelite napraviti novu anketu pritisnite na nova anketa iznad.',
-    20 => 'Glasaci',
-    21 => 'Pristup odbijen',
-    22 => "Pokusali ste pristupiti anketi ali nemate potrebna odobrenja. Ovaj pokusaj je logiran. Molimo <a href=\"{$_CONF['site_admin_url']}/poll.php\">vratite se natrag</a>.",
-    23 => 'Nova anketa',
-    24 => 'Administracija',
-    25 => 'Da',
-    26 => 'Ne'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -838,7 +821,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -880,7 +866,18 @@
     33 => 'potvrdi',
     34 => 'Error: You must specify a file to upload.',
     35 => 'Zadnji put prijavljen',
-    36 => '(nikada)'
+    36 => '(nikada)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1025,7 +1022,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1068,7 +1069,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Linkovi',
-    42 => 'Dogadjanja'
+    42 => 'Dogadjanja',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1135,7 +1144,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1195,7 +1218,16 @@
     'availmembers' => 'Aktivni clanovi',
     'groupmembers' => 'Clanovi grupe',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1205,7 +1237,6 @@
     'last_ten_backups' => 'Posljednih 10 backupova.',
     'do_backup' => 'Napravi sigurnosnu kopiju',
     'backup_successful' => 'Backup baze podataka je uspjesno napravljen.',
-    'no_backups' => 'Nema backupova.',
     'db_explanation' => 'Da bi napravili sigurnosu kopiju kliknite ovdje dole.',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
@@ -1229,7 +1260,8 @@
     7 => 'Statistika stranice',
     8 => 'Personalizacija',
     9 => 'Pretraga',
-    10 => 'napredna pretraga'
+    10 => 'napredna pretraga',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1271,4 +1303,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/bosnian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/bosnian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/bosnian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/bosnian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1512 @@
+<?php
+
+###############################################################################
+# bosnian.php
+# This is the bosnian language page for GeekLog!
+# Special thanks to me and no one else for work on this project :)
+#
+# Copyright (C) 2004 Kenan 'bX' Hodzic
+# buxus_85@hotmail.com
+#       www.bx.net
+#
+# Iako prevod nije dovrsen kompletno, ili ako korisnici naidju na greske
+# molimo da imaju razumjevanja.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Autor:',
+    2 => 'opsirnije',
+    3 => 'komentar(a)',
+    4 => 'Edituj',
+    5 => 'Anketa',
+    6 => 'Rezultati',
+    7 => 'Rezultati ankete',
+    8 => 'glasova',
+    9 => 'Za Administratora:',
+    10 => 'Zahtjevi',
+    11 => 'Tekstovi',
+    12 => 'Blokovi',
+    13 => 'Teme',
+    14 => 'Linkovi',
+    15 => 'Dogadjanja',
+    16 => 'Ankete',
+    17 => 'Korisnici',
+    18 => 'SQL upit',
+    19 => 'Odjava',
+    20 => 'Korisnicke postavke:',
+    21 => 'Korisnicko ime',
+    22 => 'Korisnicki ID',
+    23 => 'Sigurnosna razina',
+    24 => 'Anonimus',
+    25 => 'Odgovori',
+    26 => 'Sljedeæi komentari su vlasnistvo onog koji ih je napisao. Mi nismo odgovorni na bilo koji nacin u vezi onoga sto autor u njima kaze.',
+    27 => 'Najnoviji tekst',
+    28 => 'Obrisati',
+    29 => 'Nema korisnickih komentara.',
+    30 => 'Stariji tekstovi',
+    31 => 'Dozvoljeni HTML kodovi:',
+    32 => 'Greska, neispravno korisnicko ime',
+    33 => 'Greska, ne mogu pisati u log fajlove',
+    34 => 'Greska',
+    35 => 'Odjava',
+    36 => 'on',
+    37 => 'Nema korisnickih tekstova',
+    38 => 'Razmjena sadrzaja',
+    39 => 'Osvjezi',
+    40 => 'Imate <tt>register_globals = Off</tt> u vasem <tt>php.ini</tt>. Site zahtjeva da <tt>register_globals</tt> bude <strong>on</strong>. Prije nego sto nastavite, molim postavite to na <strong>on</strong> i restartajte web server.',
+    41 => 'Gosti',
+    42 => 'Autor:',
+    43 => 'Odgovorite na ovo',
+    44 => 'Parent',
+    45 => 'MySQL greska broj',
+    46 => 'MySQL poruka greske',
+    47 => 'Korisnici',
+    48 => 'Korisnicke postavke',
+    49 => 'Postavke racuna',
+    50 => 'Error with SQL statement',
+    51 => 'pomoc',
+    52 => 'Novi',
+    53 => 'Administracija',
+    54 => 'Ne mogu otvoriti datoteku.',
+    55 => 'Greska na',
+    56 => 'Glasaj',
+    57 => 'Lozinka',
+    58 => 'Prijava',
+    59 => "Nemate jos korisnicki racun? Kreirajte ga besplatno <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ovdje</a>",
+    60 => 'Posaljite komentar',
+    61 => 'Kreiraj Novi Korisnicki racun',
+    62 => 'rijeci',
+    63 => 'Postavke komentara',
+    64 => 'Posalji tekst mailom.',
+    65 => 'Pogledaj verziju za printanje',
+    66 => 'Moj Kalendar',
+    67 => ' ',
+    68 => 'pocetna stranica',
+    69 => 'kontakt',
+    70 => 'trazi',
+    71 => 'contribute',
+    72 => 'web izvori',
+    73 => 'stari glasovi',
+    74 => 'kalendar',
+    75 => 'poboljsana pretraga',
+    76 => 'statistika web stranice',
+    77 => 'Pluginovi',
+    78 => 'Nadolazeca dogadjanja',
+    79 => 'Sta je novo',
+    80 => 'tekst(ovi) u posljednih',
+    81 => 'tekst(ova) u zadnjih',
+    82 => 'sati',
+    83 => 'KOMENTARI',
+    84 => 'LINKOVI',
+    85 => 'posljednih 48 sati',
+    86 => 'Nema novih komentara',
+    87 => 'posljednje 2 sedmice',
+    88 => 'Nema novih linkova',
+    89 => 'Nema nadolazecih dogadjanja',
+    90 => 'Pocetna stranica',
+    91 => 'Stranica generisana za',
+    92 => 'sekundi',
+    93 => 'Copyright',
+    94 => 'Svi zastitni znakovi i autorska prava su vlasnistvo njihovih navedenih vlasnika',
+    95 => 'Koristeni software',
+    96 => 'Korisnicke grupe',
+    97 => 'Lista rijeci',
+    98 => 'Dodatni software',
+    99 => 'TEKSTOVI',
+    100 => 'Nema novih tekstova',
+    101 => 'Vasa dogadjanja',
+    102 => 'Dogadjanja stranice',
+    103 => 'DB Backups',
+    104 => 'od',
+    105 => 'Salji email',
+    106 => 'Pregledano',
+    107 => 'Test',
+    108 => 'Brisi Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalendar dogadjaja',
+    2 => 'Zao nam je, trenutno nema nikakvih dogadjanja.',
+    3 => 'Kada',
+    4 => 'Gdje',
+    5 => 'Opis',
+    6 => 'Dodaj dogadjaj',
+    7 => 'Nadolazeca dogadjanja',
+    8 => 'Dodavanjem ovog dogadjanja vasem kalendaru, mozete brzo pregledati samo ona dogadjanja koja vas interesiraju pritiskom na  "Moj kalendar" u korisnickim funkcijama.',
+    9 => 'Dodaj u Moj kalendar',
+    10 => 'Makni iz Moj kalendar',
+    11 => "Dodaj dogadjaj u {$_USER['username']} kalendar",
+    12 => 'Dogadjaji',
+    13 => 'Pocetak',
+    14 => 'Kraj',
+    15 => 'Natrag na kalendar'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Posaljite komentar',
+    2 => 'Postavke slanja',
+    3 => 'Odjava',
+    4 => 'Kreirajte korisnicki racun',
+    5 => 'Korisnicko ime',
+    6 => 'Stranica zahtjeva, da bi poslali komentar, da budete prijavljeni. Molimo prijavite se. Ako nemate korisnicki racun mozete ga napraviti besplatno.',
+    7 => 'Vas posljedni komentar je ',
+    8 => " sekundi.  Stranice zahtjevaju da prodje vise od {$_CONF['commentspeedlimit']} sekundi medju slanjem komentara",
+    9 => 'Komentar',
+    10 => 'Send Report',
+    11 => 'Salji komentar',
+    12 => 'Molim popunite Naziv teksta i Komentar da bi bilo poslano, jer je to neophodno za slanje.',
+    13 => 'Vase informacije',
+    14 => 'Pregled',
+    15 => 'Report this post',
+    16 => 'Naslov',
+    17 => 'Greska',
+    18 => 'Vazno',
+    19 => 'Molimo Vas da se vasi komentari pridrzavaju teme.',
+    20 => 'Molimo Vas da odgovarate na vec objavljene komentare umjesto da zapocinjete nove teme.',
+    21 => 'Prije nego posaljete komentar, molim procitajte komentare ostalih korisnika da bi se izbjeglo ponavljanje.',
+    22 => 'Koristite jednostavni naziv teksta da bi bilo jasno o cemu je rijec u va¹em tekstu.',
+    23 => 'Vas email nece biti javno dostupan.',
+    24 => 'Anonimni korisnik',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Korisnicki profil za',
+    2 => 'Korisnicko ime',
+    3 => 'Puno ime',
+    4 => 'Lozinka',
+    5 => 'Email',
+    6 => 'Web stranica',
+    7 => 'Bio',
+    8 => 'PGP kljuc',
+    9 => 'Snimi informacije',
+    10 => 'Posljednih 10 komentara od korisnika',
+    11 => 'Nema korisnickih komentara',
+    12 => 'Korisnicke preference za',
+    13 => 'Email zabiljeske',
+    14 => 'Ova lozinka je kreirana slucajnim izborom. Preporucljivo je promjeniti ovu lozinku sto prije prema vasim zeljama. Da biste promijenili lozinku, logirajte se i pritisnite na Korisnicke informacije u Korisnickom meniu.',
+    15 => "Vas {$_CONF['site_name']} racun je uspjesno kreiran. Da biste ga mogli koristiti, morate se loginovati koristeci vase informacije. Molimo sacuvaj ovaj mail za buduce reference.",
+    16 => 'Informacije o vasem korisnickom racunu',
+    17 => 'Korisnicki racun ne postoji',
+    18 => 'Upisana email addresa nije validna.',
+    19 => 'Korisnicko ime ili email adresa koju ste unijeli vec postoji u bazi.',
+    20 => 'Email adresu koju ste unijeli ne mozemo prihvatiti jer nije odgovarajuce forme',
+    21 => 'Greska',
+    22 => "Registriran na {$_CONF['site_name']}!",
+    23 => "Kreiranjem korisnickog racuna imat cete samo prednosti na {$_CONF['site_name']} i moci cete koristiti neke funkcije koje obicni korisnici nemogu. Ako nemate racun, sve sto uradite bit ce zabiljezeno kao anoniman korisnik. Molimo zabiljezite da vas email <b><i>nikada</i></b> nece biti javno prikazan na ovom siteu.",
+    24 => 'Lozinka ce biti poslana na email adresu koju ste unijeli.',
+    25 => 'Zabopravili ste lozinku?',
+    26 => 'Ukucajte <em>vas</em> username <em>ili</em> email addresu koju ste koristili za registraciju i kliknite Email Password. Instrukcije za kako cete postaviti novu lozinku ce biti poslate sa porukom na vas mail.',
+    27 => 'Registriraj se sada!',
+    28 => 'Lozinka poslana emailom',
+    29 => 'forma za odjavu',
+    30 => 'forma za prijavu',
+    31 => 'Izabrane funkcije zahtjevaju od vas da budete rijavljeni kao clan.',
+    32 => 'Potpis',
+    33 => 'Nikad ne prikazuj javno',
+    34 => 'Ovo je tvoje pravo ime',
+    35 => 'Unesite novu lozinku za promjenu',
+    36 => 'Pocinje sa http://',
+    37 => 'Bit ce dodano na vase komentare',
+    38 => 'Sve o vama! Svi to mogu citati',
+    39 => 'Vas javni PGP kljuc',
+    40 => 'Tema nema ikonu',
+    41 => 'Zelite biti moderator',
+    42 => 'Format datuma',
+    43 => 'Maksimalno tekstova',
+    44 => 'Nema boxova',
+    45 => 'Postavke prikazivanja za',
+    46 => 'Djelovi za izvrsavanje za',
+    47 => 'Konfiguracija vijesti za',
+    48 => 'Teme',
+    49 => 'Nema ikone u tekstu',
+    50 => 'Odznacite ovo ako niste zainteresirani',
+    51 => 'Samo novi tekstovi',
+    52 => 'Obicni je',
+    53 => 'Primi nove vijesti svaku noc',
+    54 => 'Oznaci boxove za naslove i autore koje ne zelis vidjeti.',
+    55 => 'Ako ovo ostavite kako jeste, to znaci da hocete obicne selekcije boxova. Ako pocnete birati boxove, zapamtite da postavite sve one koje zelite zato jer ce obicna postavka biti zanemarena. Obicne postavke su prikazene podebljane.',
+    56 => 'Autori',
+    57 => 'Nacin prikazivanja',
+    58 => 'Sortiraj po',
+    59 => 'Limit komentara',
+    60 => 'Kako zelite da se vasi komentari prikazuju?',
+    61 => 'Noviji ili stariji prvo?',
+    62 => 'Obicni je 100',
+    63 => "Vasa lozinka vam je poslana putem emaila i trebali biste je primiti svakog momenta. Molimo pratite instrukcije koje ste dobili u poruci i zahvaljujemo vam za prijavu na {$_CONF['site_name']}",
+    64 => 'Preference komentara ca',
+    65 => 'Pokusajte ponoviti prijavu',
+    66 => "Vjerovatno ste pogresno unijeli korisnicko ime ili lozinku. Pokusajte se ponovo prijaviti. Jeste li <a href=\"{$_CONF['site_url']}/users.php?mode=new\">novi korisnik</a>?",
+    67 => 'Clan od',
+    68 => 'Pamti me',
+    69 => 'Koliko dugo da vas pamtimo od prijave?',
+    70 => "Postavi izgled sitea {$_CONF['site_name']}",
+    71 => "Jedna od velikih prednosti {$_CONF['site_name']} Je ta sto mozete promjeniti izgled site po vasoj volji. Da biste to mogli uciniti morate se prvo <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrovati</a> na {$_CONF['site_name']}. Ako ste vec clan, koristite vase podatke i prijavite se!",
+    72 => 'Tema',
+    73 => 'Jezik',
+    74 => 'Promijeni izgled sitea!',
+    75 => 'Emaileovane vijesti za',
+    76 => 'Ako selektujete vrstu vijeste iz liste ispod, primit cete svaku novu pricu vezanu za tu vrstu vijest na kraju svakog dana. Izaberi jedino onu vrstu vijesti koje ti se svidjaju!',
+    77 => 'Fotografija',
+    78 => 'Dodaj vlastitu fotografiju!',
+    79 => 'Oznaci ovdje za brisanje fotografije',
+    80 => 'Prijava',
+    81 => 'Salji email',
+    82 => 'Posljednih 10 tekstova od korisnika',
+    83 => 'Statistika slanja tekstova i komentara od korisnika',
+    84 => 'Ukupan broj tekstova:',
+    85 => 'Ukupan broj komentara:',
+    86 => 'Pronadji sve tekstove od',
+    87 => 'Vase korisnicko ime',
+    88 => "Neko (vjerovatno vi) je zatrazio novu lozinku za vas korisnicki racun \"%s\" na {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nAko ste to zaista htjeli molim kliknite na ovaj link za potvrdu:\n\n",
+    89 => "Ako ne zelite to napraviti, jednostavno ignorirajte poruku (lozinka ce ostati nepromijenjena).\n\n",
+    90 => 'Mozete ukucati novu lozinku za vas racun ispod. Molimo zabiljezite da ja vasa stara lozinka idalje validna dok ne posaljete novu.',
+    91 => 'Postavi novu lozinku',
+    92 => 'Unesi novu lozinku',
+    93 => 'Vas poslijenji zahtjev za novom lozinkom je bio prije %d sekundi. Ovaj site zahtjeva barem %d sekundi izmedju zahtjeva za lozinku.',
+    94 => 'Obrisi korisnicki racun "%s"',
+    95 => 'Pritisni "Obrisi korisnicki racun" dugme ispod da biste izbrisali svoj racun iz nase baze podataka. Molimo zabiljezite da bilo koja vijest ili komentar poslata sa vase strane pod ovim korisnickim racunom <strong>nece</strong> biti izbrisana, nego prikazana kao da ju je poslao "Anonymous".',
+    96 => 'obrisite korisnicki racun',
+    97 => 'Potvrdi brisanje korisnickog racuna',
+    98 => 'Dali ste sigurni da zelite izbrisati vas racun? Ako to zelite uraditi necete vise moci koristiti ovaj site kako ste prije mogli (ukoliko ne kreirate novi racun). Ako ste sigurni da to zelite uraditi ritisnite "obrisi korisnicki racun".',
+    99 => 'Opcije privatnosti za ',
+    100 => 'Email od administratora',
+    101 => 'Dozvoli mailove od webmastera',
+    102 => 'Email od korisnika',
+    103 => 'Dozvoli primanje emailova od korisnika',
+    104 => 'Prikazi online status',
+    105 => 'Pokazi ko je online u bloku',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Nema novosti za prikazivanje.',
+    2 => 'Nema novih vijesti za prikazati. Mozda nema novih vijesti za ovu vrstu ili je do necega drugog :)',
+    3 => ' za temu %s',
+    4 => 'Danasnji vazniji tekstovi',
+    5 => 'Iduci',
+    6 => 'Prijasnji',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Prilikom slanja dogodila se greska. Molimo pokusajte ponovo.',
+    2 => 'Poruka je uspjesno poslana.',
+    3 => 'Molimo osigurajte da koristite validnu email adresu u Primalac formi.',
+    4 => 'Molimo popunite polja: Vase ime, Primalac, Naziv maila i Poruku',
+    5 => 'Greska: Korisnik ne postoji.',
+    6 => 'Pojavila se greska.',
+    7 => 'Korisnicki profil za',
+    8 => 'Korisnicko ime',
+    9 => 'Korisnicki URL',
+    10 => 'Salji email',
+    11 => 'Vase ime:',
+    12 => 'Primalac:',
+    13 => 'Naziv maila:',
+    14 => 'Poruka:',
+    15 => 'HTML kod nece biti prikazan.',
+    16 => 'Salji poruku',
+    17 => 'Posalji tekst emailom',
+    18 => 'Saljete (kome)',
+    19 => 'Na email adresu',
+    20 => 'Od',
+    21 => 'Od email adrese',
+    22 => 'Potrebno je sve popuniti',
+    23 => "Ovaj email vam je poslan od %s sa %s zato jer je mislio da ce vas zanimati tekst s web stranice {$_CONF['site_url']}.  Ovo NIJE SPAM, i vase email adrese nisu sacuvane i nece se koristiti za daljnju upotrebu.",
+    24 => 'Komentar za ovu vijest na',
+    25 => 'Morate biti prijavljeni da bi mogli koristiti ovu postavku.',
+    26 => 'Ovaj formular vam dozvoljava slanje emailova odredjenim korisnicima. Potrebno je popuniti sve podatke.',
+    27 => 'Kratka poruka',
+    28 => '%s pise: ',
+    29 => "Ovo su dnevne obavijesti sa {$_CONF['site_name']} za ",
+    30 => ' Dnevne obavijesti za ',
+    31 => 'Naziv',
+    32 => 'Datum',
+    33 => 'Procitaj punu vijest na',
+    34 => 'Kraj poruke',
+    35 => 'Zao mi je, korisnik ne dozvoljava primanje nikakvih poruka.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Napredno pretrazivanje',
+    2 => 'Kljucne rijeci',
+    3 => 'Naslovi',
+    4 => 'Svi',
+    5 => 'Vrsta',
+    6 => 'Tekstovi',
+    7 => 'Komentari',
+    8 => 'Autori',
+    9 => 'Svi',
+    10 => 'Pretrazivanje',
+    11 => 'Rezultati pretrazivanja',
+    12 => 'odgovara',
+    13 => 'Rezultati pretrazivanja: Nema rezultata',
+    14 => 'Nema rezultata koji odgovaraju vasem upitu',
+    15 => 'Molim pokusajte ponovo.',
+    16 => 'Naslov',
+    17 => 'Datum',
+    18 => 'Autor',
+    19 => "Pretrazite bazu podataka web stranice {$_CONF['site_name']} trenutacnih i starijih tekstova",
+    20 => 'Datum',
+    21 => 'do',
+    22 => '(Format datuma GGGG-MM-DD)',
+    23 => 'Pregleda',
+    24 => 'Pronadjeno %d rezultata',
+    25 => 'Trazeno za',
+    26 => 'upita ',
+    27 => 'sekundi',
+    28 => 'Nema odgovarajucih tekstova ili komentara prema vasem upitu',
+    29 => 'Rezultati tekstova i komentara',
+    30 => 'Nema linkova koji odgovaraju vasem upitu',
+    31 => 'Ovaj ponovni plug-in nije nista pronasao',
+    32 => 'Dogadjaj',
+    33 => 'URL',
+    34 => 'Lokacija',
+    35 => 'Cijeli dan',
+    36 => 'Nema dogadjaja koji odgovaraju vasem upitu',
+    37 => 'Rezultati dogadjaja',
+    38 => 'Rezultati linkova',
+    39 => 'Linkovi',
+    40 => 'Dogadjaji',
+    41 => 'Vas upit mora sadrzavati vise od 3 znaka.',
+    42 => 'Molim koristite format datuma GGGG-MM-DD (godina-mjesec-dan).',
+    43 => 'tacan izraz',
+    44 => 'sve rijeci',
+    45 => 'bilo koja od ovih rijeci',
+    46 => 'Iduci',
+    47 => 'Prijasnji',
+    48 => 'Autor',
+    49 => 'Datum',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Lokacija',
+    53 => 'Rezultati tekstova',
+    54 => 'Rezultati komentara',
+    55 => 'izraz(e)',
+    56 => 'I',
+    57 => 'ILI',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistika stranica',
+    2 => 'Ukupno posjeta na stranice',
+    3 => 'Tekstova(Komentara) na stranicama',
+    4 => 'Anketa(Odgovora) na stranicama',
+    5 => 'Linkova(Klikova) na stranicama',
+    6 => 'Dogadjaja na stranicama',
+    7 => 'Prvih deset procitanih tekstova',
+    8 => 'Naslov teksta',
+    9 => 'pregledano',
+    10 => 'Na stranicama nema niti jednog teksta ili niti jedan tekst nije procitan.',
+    11 => 'Prvih deset komentiranih tekstova',
+    12 => 'Komentari',
+    13 => 'Na stranicama nema niti jednog poslanog teksta ili teksta na kojem ima komentara.',
+    14 => 'Prvih deset anketa',
+    15 => 'Pitanje ankete',
+    16 => 'Glasova',
+    17 => 'Trenutacno na siteu nema anketa na kojima ima glasova.',
+    18 => 'Prvih deset posjecenih linkova',
+    19 => 'Linkovi',
+    20 => 'Hits',
+    21 => 'Na stranicama nema niti jednog linka ili nema linka na koji je kliknuto bar jedanput.',
+    22 => 'Prvih deset tekstova poslanih emailom',
+    23 => 'Emailovi',
+    24 => 'Niko nije poslao tekst emailom s ovih stranica.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Linkovi u tekstu',
+    2 => 'Posalji tekst emailom',
+    3 => 'Tekst za printanje',
+    4 => 'Opcije teksta',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Za prijavljivanje %s potrebno je biti ulogiran.',
+    2 => 'Prijava',
+    3 => 'Novi korisnik',
+    4 => 'Posaljite info o dogadjaju',
+    5 => 'Posaljite Link',
+    6 => 'Posaljite tekst',
+    7 => 'Login je potreban',
+    8 => 'Potvrdi',
+    9 => 'Kada saljete potrebne informacije na ovaj site pitamo dali pratite slijedece sugestije suggestions...<ul><li>Popuni sva polja, ona su obavezna<li>Omoguci kompletne i tacne informacije<li>Dva puta provjeti ove URLove</ul>',
+    10 => 'Naziv',
+    11 => 'Link',
+    12 => 'Pocinje dana',
+    13 => 'Zavrsava dana',
+    14 => 'Lokacija',
+    15 => 'Opis',
+    16 => 'Ako je drugo, molim precizirajte',
+    17 => 'Kategorija',
+    18 => 'Ostalo',
+    19 => 'Procitaj prvo',
+    20 => 'Greska: Nedostaje kategorija',
+    21 => 'Kada odaberete "Ostalo" molim upisite i novi naziv kategorije.',
+    22 => 'Greska: Popunite sva polja',
+    23 => 'Molimo popunite sva polja. Sva polja su obavezna.',
+    24 => 'Submisia spasena',
+    25 => 'Vasa %s submisia je uspjesno spasena.',
+    26 => 'Ogranicena brzina',
+    27 => 'Korisnicko ime',
+    28 => 'Topic',
+    29 => 'Tekst',
+    30 => 'Vasa poslijednja submisia bila je prije ',
+    31 => " sekunda. Ovaj site zahtjeva barem {$_CONF['speedlimit']} sekundi izmedju submisia",
+    32 => 'Pregledaj',
+    33 => 'Pregledaj tekst',
+    34 => 'Odjava',
+    35 => 'HTML kodovi nisu dozvoljeni',
+    36 => 'Nacin slanja',
+    37 => "Slanje dogadjaja na {$_CONF['site_name']} ce postaviti vas dogadjaj na glavni kalendar gdje ce korisnici moci dodati vas dogadjaj na njihov vlastiti kalendatr. Ovo <b>NE</b> znaci da mozete postavljati vase vlastite dogadjaje kao sto su rodjendan ili bilo kakva godisnjica.<br><br>Kada jednom posaljete vas dogadjaj on ce automatski biti poslat vasim administratorima i u slucaju njegovog odobravanja, vas dogadjaj ce se pojaviti na glavnom kalendaru.",
+    38 => 'Dodaj dogadjaj na',
+    39 => 'Glavni Kalendar',
+    40 => 'Vlastiti Kalendar',
+    41 => 'Vrijeme zavrsetka',
+    42 => 'Vrijeme pocetka',
+    43 => 'Svakodnevni dogadjaji',
+    44 => 'Adresa 1',
+    45 => 'Adresa 2',
+    46 => 'Grad',
+    47 => 'Drzava',
+    48 => 'Zip kod',
+    49 => 'Ti dogadjaja',
+    50 => 'Uredi tipove dogadjaja',
+    51 => 'Lokacija',
+    52 => 'Izbrisi',
+    53 => 'Kreiraj racun'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autorizacija potrebna',
+    2 => 'Odbijeno! Neispravne prijavne informacije.',
+    3 => 'Neispravna lozinka za korisnika',
+    4 => 'Korisnièko ime:',
+    5 => 'lozinka:',
+    6 => 'Svaki pokusaj pristupanja administratorskom dijelu bit æe logiran i provjeren.<br>Ovi djelovi su SAMO za OVLA©TENE osobe Svaka zloporaba æe biti sankcionirana.',
+    7 => 'prijava'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Neispravna Administracijska prava',
+    2 => 'Nemate potrebna prava da biste uredili ovaj Blok.',
+    3 => 'Blok Editor',
+    4 => 'Pojavio se problem citajuci ovaj dio (pogledaj error.log za detalje).',
+    5 => 'Naziv Bloka',
+    6 => 'Naziv',
+    7 => 'Svi',
+    8 => 'Sigurnosni nivo Bloka',
+    9 => 'Zadatak Bloka',
+    10 => 'Tip Bloka',
+    11 => 'Portalni Blok',
+    12 => 'Normalni Blok',
+    13 => 'Opcije Portalnog Bloka',
+    14 => 'RSS URL',
+    15 => 'Poslijednji RSS Update',
+    16 => 'Opcije Normalnog Bloka',
+    17 => 'Sadrzaj Bloka',
+    18 => 'Molimo popunite Naziv Bloka i polja sa sadrzajem',
+    19 => 'Blok Menadzer',
+    20 => 'Naziv Bloka',
+    21 => 'Specijalni nivo Bloka',
+    22 => 'Tip Bloka',
+    23 => 'Zadatak Bloka',
+    24 => 'Naziv Bloka',
+    25 => 'Da biste modifikovali Blok ili ga izbrisali, kliknite dole na zeljeni link. Da biste napravili novi Blok, pritisnite na novi blok iznad.',
+    26 => 'Izgled Bloka',
+    27 => 'PHP Blok',
+    28 => 'Opcije PHP Bloka',
+    29 => 'Funkcije Bloka',
+    30 => 'Ako zelite da imate jedan svoj Blok koristi PHP kod, upisi ime funkcije iznad. Ime tvoje funkcije mora poceti sa prefiksom "phpblock_" (npr. phpblock_getweather). Ako nema ovaj prefiks, tvoja funkcija NECE biti pozvana. Ovo radimo radi toga da bismo zadrzali ljude (HACKERI) koji su mozda uspjeli upasti u vas proces insllacije mjenjajuci neke funkcije i pozivajuci se na njih i koje mogu biti stetne za vas sistem. Budite sigurni da negdje ne ostavite prazne zagrade "()" poslije vaseg imena funkcije. Na poslijetku, preporucljivo je da smjestite sve svoje PHP kodove Blokova u /path/to/geeklog/system/lib-custom.php. To ce omoguciti kodu da ostane sa tobom i na mjestu i kada nadogradis svoju verziju Geekloga.',
+    31 => 'Greska u PHP Bloku. Funkcija, %s, ne postoji.',
+    32 => 'Greska, nedostaje/u polje/a',
+    33 => 'Moras navesti URL za pristup RSS fileu za portalni blok',
+    34 => 'Moras navesti naziv i funkciju za PHP blokove',
+    35 => 'Moras upisati naziv i sadrzaj za normalne blokove',
+    36 => 'Moras upisati sadrzaj za izgled blokova',
+    37 => 'Lose ime funkcije PHP bloka',
+    38 => 'Funkcije za PHP Blokove moraju imati prefiks \'phpblock_\' (npr. phpblock_getweather). Prefiks \'phpblock_\' je potreban iz sigurnosnih razloga da bi zastitio dio koda za izvrsavanje.',
+    39 => 'Strana',
+    40 => 'Lijevo',
+    41 => 'Desno',
+    42 => 'Moras navesti Ime Bloka i Namjenu Bloka za obicne Geeklog blokove.',
+    43 => 'Jedino na pocetnoj strani(Home/index)',
+    44 => 'Pristup odbijen',
+    45 => "Pokusavas pristupati bloku za koji nemas prava pristupa. Ovaj pokusaj pristupa je zabiljezen. Molimo <a href=\"{$_CONF['site_admin_url']}/block.php\">vratite se nazad</a>.",
+    46 => 'Novi Block',
+    47 => 'Administracija',
+    48 => 'Naziv Bloka',
+    49 => ' (nema odvajanja i mora biti jedinstven)',
+    50 => 'Help File URL',
+    51 => 'ukljucujuci http://',
+    52 => 'Ako ostavite ovo praznim help ikona za ovaj blok se nece prikazati',
+    53 => 'Omoguci',
+    54 => 'spasi',
+    55 => 'odustani',
+    56 => 'izbrisi',
+    57 => 'Pomjeri Blok dole',
+    58 => 'Pomjeri Blok gore',
+    59 => 'Prebaci Blok na desnu stranu',
+    60 => 'Prebaci Blok na lijevu stranu',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editiranje dogaðaja',
+    2 => 'Error',
+    3 => 'Naziv dogadjaja',
+    4 => 'URL dogadjaja',
+    5 => 'Datum opcetka dogadjaja',
+    6 => 'Datum zavrsetka dogadjaja',
+    7 => 'Lokacija dogadjaja',
+    8 => 'Opis dogadjaja',
+    9 => '(ukljucujuci http://)',
+    10 => 'Moras omoguciti datum/vrijeme, opis i lokaciju dogadjaja!',
+    11 => 'Menadzer dogadjaja',
+    12 => 'Da biste uredili ili dodali dogadjaj, kliknite dole na zeljeni link. Da biste kreirali novi dogadjaj kliknite iznad na novi dogadjaj. Pritisnite na [C] da biste kreirali ili napravili postojeci dogadjaj.',
+    13 => 'Naziv dogadjaja',
+    14 => 'Pocetak (datum)',
+    15 => 'Kraj (datum)',
+    16 => 'Pristup Odbijen',
+    17 => "Pokusavas pristupati dogadjaju za koji nemas prava pristupa. Ovaj pokusaj pristupa je zabiljezen. Molimo <a href=\"{$_CONF['site_admin_url']}/event.php\">vratite se nazad</a>.",
+    18 => 'Novi dogadjaj',
+    19 => 'Admin Home',
+    20 => 'snimi',
+    21 => 'ponisti',
+    22 => 'obrisi',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Prethodni tekst',
+    2 => 'Iduci tekst',
+    3 => 'Mode',
+    4 => 'Postavke slanja',
+    5 => 'Editiranje teksta',
+    6 => 'Nema teksta u sistemu.',
+    7 => 'Autor',
+    8 => 'snimi',
+    9 => 'pregled',
+    10 => 'ponisti',
+    11 => 'obrisi',
+    12 => 'ID',
+    13 => 'Naslov',
+    14 => 'Tema',
+    15 => 'Datum',
+    16 => 'Uvodni tekst',
+    17 => 'Tijelo teksta',
+    18 => 'Posjeta',
+    19 => 'Komentari',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Popis tekstova',
+    23 => 'Da biste uredili ili izbrisali vijest, pritisnite an broj vijesti ispod. Da biste pregledali vijest, pritisnite na naziv vijesti koju zelite pregledati. Ako zelite napisati novu vijest izaberite opciju nova vijest iznad.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Pregled teksta',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Greska u uploadanju datoteke',
+    31 => 'Molimo popunite polja sa Nazivom i Uvodnim tekstom',
+    32 => 'Featured',
+    33 => 'There can only be one featured story',
+    34 => 'Draft',
+    35 => 'Da',
+    36 => 'Ne',
+    37 => 'Vise od',
+    38 => 'Vise sa',
+    39 => 'Emailovi',
+    40 => 'Pristup odbijen',
+    41 => "Pokusavas pristupati vijesti za koju nemas prava pristupa. Ovaj pokusaj pristupa je zabiljezen. Mozete pogledati vijest u dijelu read-only ispod. Molimo <a href=\"{$_CONF['site_admin_url']}/story.php\">vratite se nazad</a> kada zavrsite.",
+    42 => "Pokusavas pristupati vijesti za koju nemas prava pristupa. Ovaj pokusaj pristupa je zabiljezen. Molimo <a href=\"{$_CONF['site_admin_url']}/story.php\">vratite se nazad</a>.",
+    43 => 'Novi tekst',
+    44 => 'Admin Home',
+    45 => 'Pristup',
+    46 => '<b>ZABILJESKA:</b> ako uredite ovaj datum da se prikaze u buducnosti, ova vijest se nece objaviti sve do tog datuma. To takodje znaci da ta vijest nece biti ukljucena u vas RSS headline feed i biti ce ignorirana u stranicama za pretrazivanje i statickim stranicama.',
+    47 => 'Slike',
+    48 => 'slika',
+    49 => 'desno',
+    50 => 'lijevo',
+    51 => 'Da biste dodali jednu od vasih slika odredjenoj vijesti morate ubaciti specijano formirani tekst. Taj tekst izgleda ovako [imageX], [imageX_right] ili [imageX_left] gdje je X broj slike koju ste ubacili. ZABILJESKA: Morate koristiti sliku koju ste vec odabrali za tu vijest. Ako to ne ucinite necete moci spasiti vasu vijest.<BR><P><B>PREGLED</B>: Pregled price sa ubacenom slikom je najbolje kada se prvo spasi slika kao draft umjesto pritiska dugmeta preview. Koristite dugme preview jedino kada u tekst nije ukljucena slika.',
+    52 => 'Obrisi',
+    53 => 'nije koristena. Morate ukljuciti ovu sliku u intro ili body prije nego spasite vase izmjene',
+    54 => 'Ukljucene slike nisu koristene',
+    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
+    56 => 'Prikazi ikonu teme',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Topic Editor',
+    2 => 'Topic ID',
+    3 => 'Topic Name',
+    4 => 'Topic Image',
+    5 => '(do not use spaces)',
+    6 => 'Deleting a topic deletes all stories and blocks associated with it',
+    7 => 'Please fill in the Topic ID and Topic Name fields',
+    8 => 'Topic Manager',
+    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find your access level for each topic in parenthesis. The asterisk(*) denotes the default topic.',
+    10 => 'Sortirano po',
+    11 => 'Stories/Page',
+    12 => 'Pristup odbijen.',
+    13 => "You are trying to access a topic that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/topic.php\">go back to the topic administration screen</a>.",
+    14 => 'Metode sortiranja',
+    15 => 'abecedno',
+    16 => 'default is',
+    17 => 'Nova tema',
+    18 => 'Admin Home',
+    19 => 'snimi',
+    20 => 'ponisti',
+    21 => 'obrisi',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Korisnicko uredjivanje',
+    2 => 'Korisnicki ID',
+    3 => 'Korisnicko ime',
+    4 => 'Ime i prezime',
+    5 => 'Lozinka',
+    6 => 'Sigurnosna razina',
+    7 => 'Email adresa',
+    8 => 'Pocetna stranica',
+    9 => '(ne koristite prazan prostor)',
+    10 => 'Please fill in the Username and Email Address fields',
+    11 => 'Uredjivanje korisnika',
+    12 => 'To modify or delete a user, click on that user below.  To create a new user click the new user button to the left. You can do simple searches by entering parts of a username, email address or fullname (e.g. *son* or *.edu) in the form below.',
+    13 => 'Sigurnosna razina',
+    14 => 'Datum registracije',
+    15 => 'Novi korisnik',
+    16 => 'Administracija',
+    17 => 'promijeni lozinku',
+    18 => 'ponisti',
+    19 => 'obrisi',
+    20 => 'snimi',
+    21 => 'The username you tried saving already exists.',
+    22 => 'Greska',
+    23 => 'Batch Add',
+    24 => 'Batch Import of Users',
+    25 => 'You can import a batch of users into Geeklog.  The import file must be a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
+    26 => 'Trazi',
+    27 => 'Limit Results',
+    28 => 'Oznacite ovdje da bi obrisali sliku.',
+    29 => 'Path',
+    30 => 'Uvezi',
+    31 => 'Novi korisnici',
+    32 => 'Done processing. Imported %d and encountered %d failures',
+    33 => 'potvrdi',
+    34 => 'Error: You must specify a file to upload.',
+    35 => 'Zadnji put prijavljen',
+    36 => '(nikada)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Prihvati',
+    2 => 'Obrisi',
+    3 => 'Azuriraj',
+    4 => 'Profil',
+    10 => 'Naziv',
+    11 => 'Pocinje dana',
+    12 => 'URL',
+    13 => 'Kategorija',
+    14 => 'Datum',
+    15 => 'Tema',
+    16 => 'User name',
+    17 => 'Full name',
+    18 => 'Email',
+    34 => 'Command and Control',
+    35 => 'Zahtjev za postavljanje teksta.',
+    36 => 'Zahtjev za postavljanje linka.',
+    37 => 'Zahtjev za postavljanje dogadjaja.',
+    38 => 'Potvrdi',
+    39 => 'Trenutacno nema zahtjeva za administraciju-',
+    40 => 'Zahtjev za reg. novih korisnika'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Nedelja',
+    2 => 'Ponedeljak',
+    3 => 'Utorak',
+    4 => 'Srijeda',
+    5 => 'Cetvrtak',
+    6 => 'Petak',
+    7 => 'Subota',
+    8 => 'Dodaj dogaðaj',
+    9 => '%s Event',
+    10 => 'Events for',
+    11 => 'Master Calendar',
+    12 => 'Moj kalendar',
+    13 => 'Januar',
+    14 => 'Februar',
+    15 => 'Mart',
+    16 => 'April',
+    17 => 'Maj',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'August',
+    21 => 'Septembar',
+    22 => 'Oktobar',
+    23 => 'Novembar',
+    24 => 'Decembar',
+    25 => 'Natrag na ',
+    26 => 'Cijeli dan',
+    27 => 'Sedmica',
+    28 => 'Osobni kalendar za',
+    29 => 'Javni kalendar',
+    30 => 'obrisi dogadjaj',
+    31 => 'Dodaj',
+    32 => 'Dogadjaj',
+    33 => 'Datum',
+    34 => 'Vrijeme',
+    35 => 'Brzo dodavanje',
+    36 => 'Potvrdi',
+    37 => 'Zao mi je. Mogucnost uporabe osobnog kalendara na ovim stranicama nije dozvoljena.',
+    38 => 'Osobni editor dogadjaja',
+    39 => 'Dan',
+    40 => 'Sedmica',
+    41 => 'Mjesec'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail postavke",
+    2 => 'Od',
+    3 => 'Za',
+    4 => 'Tema',
+    5 => 'Tijelo teksta',
+    6 => 'Salji:',
+    7 => 'Svi korisnici',
+    8 => 'Admin',
+    9 => 'Opcije',
+    10 => 'HTML',
+    11 => 'Hitno!',
+    12 => 'Salji',
+    13 => 'Ponisti',
+    14 => 'Ignoriraj postavke korisnika',
+    15 => 'Greska kad saljem: ',
+    16 => 'Uspjesno je poslana poruka za: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Salji jos poruka</a>",
+    18 => 'Za',
+    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
+    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
+    21 => 'Failures',
+    22 => 'Successes',
+    23 => 'No failures',
+    24 => 'No successes',
+    25 => '-- Odaberite grupu --',
+    26 => 'Please fill in all the fields on the form and select a group of users from the drop down.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Plug-in List',
+    6 => 'Warning: Plug-in Already Installed!',
+    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
+    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult its documentation.',
+    12 => 'no plugin name provided to plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'Novi plugin',
+    15 => 'Administracija',
+    16 => 'Plug-in Name',
+    17 => 'Plug-in Version',
+    18 => 'Geeklog Version',
+    19 => 'Enabled',
+    20 => 'Da',
+    21 => 'Ne',
+    22 => 'Instaliraj',
+    23 => 'Snimi',
+    24 => 'Ponisti',
+    25 => 'Obrisi',
+    26 => 'Ime plugina',
+    27 => 'Web stranica plugina',
+    28 => 'Verzija plugina',
+    29 => 'Geeklog Version',
+    30 => 'Obrisati plugin?',
+    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'snimi',
+    3 => 'obrisi',
+    4 => 'ponisti',
+    10 => 'Razmjena sadrzaja',
+    11 => 'New Feed',
+    12 => 'Administracija',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Naslov',
+    15 => 'Vrsta',
+    16 => 'Ime datoteke',
+    17 => 'Format',
+    18 => 'zadnja obnova',
+    19 => 'Enabled',
+    20 => 'Da',
+    21 => 'Ne',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Ogranièenje',
+    27 => 'Length of entries',
+    28 => '(0 = nema teksta, 1 = puni tekst, ostalo = ogranièen broj znakova.)',
+    29 => 'Opis',
+    30 => 'Zadnja obnova',
+    31 => 'Character Set',
+    32 => 'Jezik',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Sati',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Greska: Nepotpun unos',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Linkovi',
+    42 => 'Dogadjanja',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Vasa lozinka vam je poslana emailom. Molimo slijedite upute u tekstu i zahvaljujemo vam sto koristite {$_CONF['site_name']}",
+    2 => "Hvala sto ste poslali tekst na {$_CONF['site_name']}. Tekst ce prvo biti procitan od strane admina. Ako tekst bude prihvacen uskoro ce biti javno dostupan na nasim stranicama.",
+    3 => "Hvala sto ste poslali link na {$_CONF['site_name']}. Link ce prvo biti provjeren od admina. Ukoliko bude prihvacen bit æe dostupan u sekciji <a href={$_CONF['site_url']}/links.php>Linkovi</a>.",
+    4 => "Hvala sto ste poslali dogadjaj na {$_CONF['site_name']}. Nakon sto ga administratori odobre bit ce javno dostupan u <a href={$_CONF['site_url']}/calendar.php>kalendaru</a>.",
+    5 => 'Your account information has been successfully saved.',
+    6 => 'Vase preference su uspjesno spasene.',
+    7 => 'Vase komentatorske preference su uspjesno spasene.',
+    8 => 'Uspjesno ste odjavljeni.',
+    9 => 'Vas tekst je uspjesno snimljen.',
+    10 => 'Tekst je uspjesno obrisan.',
+    11 => 'Vas blok je uspjesno spasen.',
+    12 => 'Blok je uspjesno izbrisan.',
+    13 => 'Vasa Vrsta vijesti je uspjesno spasena.',
+    14 => 'Vrsta vijesti i sve price i blokovi su uspjesno izbrisani.',
+    15 => 'Vas link je uspjesno poslat.',
+    16 => 'Link je uspjesno obrisan.',
+    17 => 'Vas dogadjaj je uspjesno snimljen.',
+    18 => 'Dogadjaj je obrisan.',
+    19 => 'Vasa anketa je uspjesno spasena.',
+    20 => 'Anketa uspjesno izbrisana.',
+    21 => 'Korisnik uspjesno pohranjen u bazu podataka.',
+    22 => 'Korisnik uspjesno izbrisan.',
+    23 => 'Pojavila se greska prilikom upisa dogadjaja u vas kalendar. ID doagadjaja prosao.',
+    24 => 'Dogadjaj je uspjesno spasen na vas kalendar',
+    25 => 'Nije dozvoljeno kreiranje vlastitog kalendara bez prijavljivanja',
+    26 => 'Dogadjaj je uspje¹no maknut iz vaseg osobnog kalendara',
+    27 => 'Poruka je uspjesno poslana.',
+    28 => 'Plug-in je uspjesno spasen',
+    29 => 'Zao mi je, osobni kalendar nije dozvoljen na ovim stranicama.',
+    30 => 'Pristup odbijen',
+    31 => 'Zao nam je, nemate pristup administraciskoj stranici za Vijesti. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    32 => 'Zao nam je, nemate pristup administraciskoj stranici za Naslove. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    33 => 'Zao nam je, nemate pristup administraciskoj stranici za Blokove. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    34 => 'Zao nam je, nemate pristup administraciskoj stranici za Linkove. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    35 => 'Zao nam je, nemate pristup administraciskoj stranici za Dogadjaje. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    36 => 'Zao nam je, nemate pristup administraciskoj stranici za Ankete. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    37 => 'Zao nam je, nemate pristup administraciskoj stranici za Korisnike. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    38 => 'Zao nam je, nemate pristup administraciskoj stranici za Plug-inove. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    39 => 'Zao nam je, nemate pristup administraciskoj stranici za Mailove. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    40 => 'Poruka sistema',
+    41 => 'Zao nam je, nemate pristup stranicama za promjenu rijeci. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    42 => 'Vasa rijec uspjesno spasena.',
+    43 => 'Rijec uspjesno izbirsana.',
+    44 => 'Plug-in uspjesno instaliran!',
+    45 => 'Plug-in uspjesno izbrisan.',
+    46 => 'Zao nam je, nemate pristup bazi podataka za backup. Molimo zabiljezite da su svi pokusaji pristupa neovlastenim dijelovaime sitea zabiljezeni',
+    47 => 'Ove funkcije rade samo pod *nix. Ako koristite *nix kao vas operativni sistem onda je vas kod uspjesno ociscen. Ako koristite Windows, trebat cete traziti fileove po imenu adodb_*.php i ukloniti ih manuelno.',
+    48 => "Zahvaljujemo vam sto ste postali clan {$_CONF['site_name']}. Nas tim ce pregledati i ocjeniti vas zahtjev. Ako bude prihvacen vasa lozinka ce vam biti poslata na vas mail.",
+    49 => 'Vasa grupa je uspjesno spasena.',
+    50 => 'Grupa je uspjesno izbrisana.',
+    51 => 'Ovaj username je vec u upotrebi. Molimo izaberite drugi.',
+    52 => 'Izgleda da email adresa koju ste poslali nije validna.',
+    53 => 'Vasa nova lozinka je prihvacena. Molimo koristite vasu novu lozinku da bi se prijavili ispod.',
+    54 => 'Vas zahtjev za novom lozinkom je istekao. Pokusajte ponovo ispod.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'Ovaj email je vec u upotrebi za drugi racun.',
+    57 => 'Vas racun je uspjesno izbrisan.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Pristup',
+    'ownerroot' => 'Vlasnik/Administrator',
+    'group' => 'Grupa',
+    'readonly' => 'Samo citanje',
+    'accessrights' => 'Prava pristupa',
+    'owner' => 'Vlasnik',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTE: members is all logged in members of the site and anonymous is all users browsing the site that aren\'t logged in.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Opis',
+    'name' => 'Ime',
+    'rights' => 'Prava',
+    'missingfields' => 'Polja koja nedostaju',
+    'missingfieldsmsg' => 'You must supply the name and a description for a group',
+    'groupmanager' => 'Sef grupe',
+    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'groupname' => 'Ime grupe',
+    'coregroup' => 'Sistemska grupa',
+    'yes' => 'Da',
+    'no' => 'Ne',
+    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
+    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
+    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
+    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'lock' => 'Zakljucaj',
+    'members' => 'Clanovi',
+    'anonymous' => 'Anonimac',
+    'permissions' => 'Prava',
+    'permissionskey' => 'R = cita, E = Editira, pravo editiranja ukljucuje i pravo citanja',
+    'edit' => 'Edituj',
+    'none' => 'None',
+    'accessdenied' => 'Pristup odbijen',
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
+    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'newgroup' => 'Nova Grupa',
+    'adminhome' => 'Admin Home',
+    'save' => 'snimi',
+    'cancel' => 'odustani',
+    'delete' => 'izbrisi',
+    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error.',
+    'listusers' => 'Lista korisnika',
+    'listthem' => 'lista',
+    'usersingroup' => 'Korisnici u grupi "%s"',
+    'usergroupadmin' => 'Administrator korisnicke grupe',
+    'add' => 'Dodaj',
+    'remove' => 'Makni',
+    'availmembers' => 'Aktivni clanovi',
+    'groupmembers' => 'Clanovi grupe',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Posljednih 10 backupova.',
+    'do_backup' => 'Napravi sigurnosnu kopiju',
+    'backup_successful' => 'Backup baze podataka je uspjesno napravljen.',
+    'db_explanation' => 'Da bi napravili sigurnosu kopiju kliknite ovdje dole.',
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} nepostoji ili nije direktorij",
+    'no_access' => "GRESKA: Direktorij {$_CONF['backup_path']} nije dostupan.",
+    'backup_file' => 'Backup file',
+    'size' => 'Velicina',
+    'bytes' => 'Bytes',
+    'total_number' => 'Ukupan broj sigurnosnih backupova: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Pocetna stranica',
+    2 => 'Kontakt',
+    3 => 'Posaljite Vijest',
+    4 => 'Linkovi',
+    5 => 'Ankete',
+    6 => 'Kalendar',
+    7 => 'Statistika stranice',
+    8 => 'Personalizacija',
+    9 => 'Pretraga',
+    10 => 'napredna pretraga',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Oj, gledao sam svugdje, ali nigdje nemogu naci <b>%s</b>.',
+    3 => "<p>Zao nam je, ali file koji ste trazili ne postoji. Mozda cete vise srece imati sa <a href=\"{$_CONF['site_url']}\">glavnom stranicom</a> ili sa <a href=\"{$_CONF['site_url']}/search.php\">pretragom</a> da biste nasli ono sto ste zijanili :)."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Potrebna prijava',
+    2 => 'Zao mi je. Da bi pristupili ovdje morate biti registrirani korisnik..',
+    3 => 'Prijava',
+    4 => 'Novi korisnik'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/bulgarian.php 1.4.0sr5-1/cpanel-glprivate/language/bulgarian.php
--- 1.3.11sr1/cpanel-glprivate/language/bulgarian.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/bulgarian.php	2006-08-08 02:39:06.000000000 -0500
@@ -153,7 +153,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -320,7 +330,23 @@
     104 => '      ',
     105 => '     "  "',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -338,27 +364,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => '',
-    2 => '   .',
-    3 => ' '
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => ' ',
-    2 => '   ',
-    3 => '',
-    4 => '  ',
-    5 => '',
-    6 => '  '
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -459,7 +464,11 @@
     54 => '  ',
     55 => 'the phrase',
     56 => '',
-    57 => ''
+    57 => '',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -489,7 +498,14 @@
     21 => '            .',
     22 => ' -  email ',
     23 => 'Email-',
-    24 => '      e-mail .'
+    24 => '      e-mail .',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -642,7 +658,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -677,35 +698,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link ',
-    2 => '',
-    3 => '  ',
-    4 => 'Link URL',
-    5 => '',
-    6 => '( http://)',
-    7 => '',
-    8 => '',
-    9 => '',
-    10 => '     , URL   .',
-    11 => 'Link ',
-    12 => '         .       \' \'  .',
-    13 => '  ',
-    14 => '',
-    15 => 'URL  ',
-    16 => ' ',
-    17 => "     ,    .    .  <a href=\"{$_CONF['site_admin_url']}/link.php\">    </a>.",
-    18 => ' ',
-    19 => 'Admin Home',
-    20 => '  , ',
-    21 => '',
-    22 => '',
-    23 => ''
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -728,16 +720,16 @@
     17 => ' - ',
     18 => '',
     19 => '',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => ' ',
     23 => '      ,     .        .        \' \' .',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => '',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => '  ,     - ',
     32 => 'Featured',
@@ -770,39 +762,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => '',
-    2 => '      .',
-    3 => '  ',
-    4 => ' %s ',
-    5 => '',
-    6 => '  ',
-    7 => '(  )',
-    8 => '    ',
-    9 => '',
-    10 => ' / ',
-    11 => '          %s',
-    12 => '          %s',
-    13 => ' ',
-    14 => '',
-    15 => '',
-    16 => '',
-    17 => '    ',
-    18 => '  ',
-    19 => '      ,    .        -   \' \'.',
-    20 => '',
-    21 => ' ',
-    22 => "     ,    .      .  <a href=\"{$_CONF['site_admin_url']}/poll.php\">    </a>.",
-    23 => ' ',
-    24 => 'Admin Home',
-    25 => '',
-    26 => ''
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -834,7 +817,10 @@
     23 => '   default   ',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -876,7 +862,18 @@
     33 => 'submit',
     34 => ':    .',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1021,7 +1018,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1064,7 +1065,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1131,7 +1140,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1191,7 +1214,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1201,7 +1233,6 @@
     'last_ten_backups' => 'Last 10 Back-ups',
     'do_backup' => 'Do Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
     'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
@@ -1225,7 +1256,8 @@
     7 => 'Site Stats',
     8 => 'Personalize',
     9 => 'Search',
-    10 => ' '
+    10 => ' ',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1267,4 +1299,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/bulgarian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/bulgarian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/bulgarian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/bulgarian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1508 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Изпратено от:',
+    2 => 'прочети повече',
+    3 => 'брой коментари',
+    4 => 'Редактирай',
+    5 => 'Гласувай',
+    6 => 'Резултати',
+    7 => 'Резултати от гласуването',
+    8 => 'гласа',
+    9 => 'Админ функции:',
+    10 => 'Админ панел',
+    11 => 'Текстове',
+    12 => 'Блокове',
+    13 => 'Теми',
+    14 => 'Връзки',
+    15 => 'Събития',
+    16 => 'Гласувания',
+    17 => 'Потребители',
+    18 => 'SQL Query',
+    19 => 'Изход',
+    20 => 'Потребителска информация:',
+    21 => 'Име',
+    22 => 'User ID',
+    23 => 'Ниво на сигурност',
+    24 => 'Анонимен',
+    25 => 'Отговори',
+    26 => 'Екипът на Lameland не носи отговорност за коментарите, побликувани от посетителите.',
+    27 => 'Най-нова публикация',
+    28 => 'Изтрий',
+    29 => 'Няма коментари.',
+    30 => 'По-стари текстове',
+    31 => 'HTML позволен:',
+    32 => 'Грешка, невалидно име',
+    33 => 'Грешка, log файлът не е достъпен за писане',
+    34 => 'Грешка',
+    35 => 'Изход',
+    36 => 'да',
+    37 => 'Няма потребителски текстове',
+    38 => 'Content Syndication',
+    39 => 'Обнови',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Анонимни потребители',
+    42 => 'Автор:',
+    43 => 'Отговор',
+    44 => 'Parent',
+    45 => 'MySQL Error Number',
+    46 => 'MySQL Error Message',
+    47 => 'Потребителски функции',
+    48 => 'Профил',
+    49 => 'Настройки',
+    50 => 'Error with SQL statement',
+    51 => 'help',
+    52 => 'Нов',
+    53 => 'Admin Home',
+    54 => 'Файлът не може да бъде отворен.',
+    55 => 'Грешка при',
+    56 => 'Гласувай',
+    57 => 'Парола',
+    58 => 'Вход',
+    59 => "Все още нямате регистрация?  Регистрирайте се като <a href=\"{$_CONF['site_url']}/users.php?mode=new\">нов потребител</a>",
+    60 => 'Коментар',
+    61 => 'Регистрация',
+    62 => 'думи',
+    63 => 'Настройка на коментарите',
+    64 => 'Изпрати на приятел',
+    65 => 'Принтирай',
+    66 => 'Моят календар',
+    67 => 'Добре дошли в ',
+    68 => 'home',
+    69 => 'contact',
+    70 => 'търсене',
+    71 => 'изпрати публикация',
+    72 => 'връзки',
+    73 => 'стари анкети',
+    74 => 'календар',
+    75 => 'търсене',
+    76 => 'статистика',
+    77 => 'Plugins',
+    78 => 'Предстоящи събития',
+    79 => 'Какво ново',
+    80 => 'публикации за последните',
+    81 => 'публикации през последните',
+    82 => 'часа',
+    83 => 'КОМЕНТАРИ',
+    84 => 'ВРЪЗКИ',
+    85 => 'през последните 48 часа',
+    86 => 'Няма нови коментари',
+    87 => 'през последните две седмици',
+    88 => 'Няма нови връзки',
+    89 => 'Няма нови събития',
+    90 => 'Home',
+    91 => 'Страницата е генерирана за',
+    92 => 'секунди',
+    93 => 'Copyright ©2000 - 2003',
+    94 => 'Всички права запазени.',
+    95 => 'Powered By',
+    96 => 'Групи',
+    97 => 'Списък с думи',
+    98 => 'Plug-ins',
+    99 => 'ПУБЛИКАЦИИ',
+    100 => 'Няма нови публикации',
+    101 => 'Събития по сайта',
+    102 => 'Събития по сайта',
+    103 => 'Back-up на базата данни',
+    104 => 'от',
+    105 => 'Mail Users',
+    106 => 'Прегледи',
+    107 => 'GL Version Test',
+    108 => 'Clear cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Календар на събитията',
+    2 => 'Нямате събития в календара.',
+    3 => 'Кога',
+    4 => 'Къде',
+    5 => 'Описание',
+    6 => 'Добави събитие',
+    7 => 'Предстоящи събития',
+    8 => 'Посредством прибавянето на това събитие към вашия календар вие можете бързо да видите само събитията, от които се интересувате.',
+    9 => 'Добави към \'Моят календар\'',
+    10 => 'Изтрий от \'Моят календар\'',
+    11 => "Добавянето на събитие към календара на {$_USER['username']}'",
+    12 => 'Събитие',
+    13 => 'от',
+    14 => 'до',
+    15 => 'Назад към \'Моят календар\''
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Публикувай коментар',
+    2 => 'Post Mode',
+    3 => 'Изход',
+    4 => 'Създай акаунт',
+    5 => 'Потребителско име',
+    6 => 'За да публикувате коментар, е необходимо да се регистирани.Ако все още нямата акаунт, можете да създадете такъв като попълните празните полета отдолу.',
+    7 => 'Последният ви коментар беше публикуван преди ',
+    8 => " секунди.   Този сайт изисква да са изтекли най-малко\n{$_CONF['commentspeedlimit']} секунди, преди да публикувате нов коментар",
+    9 => 'Коментар',
+    10 => 'Send Report',
+    11 => 'Изпрати коментар',
+    12 => 'Моля попълнете полетата Title и Comment, за да изпратите вашият коментар успешно.',
+    13 => 'Информация',
+    14 => 'Преглед',
+    15 => 'Report this post',
+    16 => 'Заглавие',
+    17 => 'Грешка',
+    18 => 'Важно',
+    19 => 'Моля не се отклонявайте от темата.',
+    20 => 'Отговаряйте на вече публикувани теми, вслучай, че вашата публикация съвпада по съдържание с тях.',
+    21 => 'Преди да постнете ваше собствено съобщение, прочетете тези, които вече са побликувани.',
+    22 => 'Изберете кратка и точна тема, от която да става ясно за какво иде реч във вашето съобщение.',
+    23 => 'Вашият e-mail адрес няма да бъде публикуван.',
+    24 => 'Анонимен потребител',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'User Profile for',
+    2 => 'Потребителско Име',
+    3 => 'Име',
+    4 => 'Парола',
+    5 => 'Email',
+    6 => 'Сайт',
+    7 => '(Авто)Биография',
+    8 => 'PGP Key',
+    9 => 'Запази',
+    10 => 'Последните 10 коментара за потребителя',
+    11 => 'Няма коментари',
+    12 => 'User Preferences for',
+    13 => 'Нощни известния по e-mail',
+    14 => 'Тази парола е генерирана случайно. Желателно е да я смените незабавно. За да направите това, се логнете и след това влезте в \'Настройки\'.',
+    15 => "Вашата {$_CONF['site_name']} регистрация бе създадена успешно. За да я използвате, трябва да се логнете, използвайки информацията по-долу.",
+    16 => 'Инфо за вашия акаунт',
+    17 => 'Такъв акаунт не съществува !',
+    18 => 'Посоченият от вас e-mail не е валиден',
+    19 => 'Такова име и/или регистрация вече съществуват !',
+    20 => 'Посоченият от вас e-mail не е валиден',
+    21 => 'Грешка',
+    22 => "Register with {$_CONF['site_name']}!",
+    23 => "Регистрацията в {$_CONF['site_name']} ви дава правото да публикувате коментари и да изпращате логове/истории (ламерски, разбира се ;))",
+    24 => 'Паролата ви ще бъде изпратена на посочения от вас e-mail адрес.',
+    25 => 'Забравена парола ?',
+    26 => 'Напишете вашето потребителско име <em>и</em> email адрес, с които сте се регистрирали. Инструкции как да смените паролата си ще откриете на вашия e-mail.',
+    27 => 'Регистрирайте се сега !',
+    28 => 'Изпрати парола',
+    29 => 'logged out from',
+    30 => 'логнати сте от',
+    31 => 'Функцията, която избрахте изисква да сте логнати',
+    32 => 'Подпис',
+    33 => 'Never publicly displayed',
+    34 => 'Това е вашето истинско име',
+    35 => 'Нашишете парола, за да я промените',
+    36 => 'Започва с http://',
+    37 => 'Приложено към вашите коментари',
+    38 => 'Това може да бъде прочетено от всеки !',
+    39 => 'Your public PGP key to share',
+    40 => 'Няма topic икони',
+    41 => 'Възможности за модериране',
+    42 => 'Формат на датата',
+    43 => 'Максимален брой публикации',
+    44 => 'No boxes',
+    45 => 'Display опции за',
+    46 => 'Игнориране на раздели/автори за',
+    47 => 'News box Configuration for',
+    48 => 'Теми',
+    49 => 'Няма иконки в публикациите',
+    50 => 'Не отмятайте, ако нямате интерес',
+    51 => 'Само новини',
+    52 => 'По подразбиране е',
+    53 => 'Получавайте по e-mail дневните публикации всяка вечер',
+    54 => 'Отбележете нещата и темите, които нямате желание да разгледате.',
+    55 => 'Ако оставите всичко това неотбелязано се подразбира, че сте избрали стандартната селекция. Ако желаете индивидуални настройки, имайте предвид, че стандартната селекция става невалидна. Стандартните настойки са написани с удебелен шрифт (bold).',
+    56 => 'Автори',
+    57 => 'Display Mode',
+    58 => 'Подредба',
+    59 => 'Лимит на коментарите',
+    60 => 'По какъв начин желаете да виждате коментарите си?',
+    61 => 'Първо най-новите или най-старите ?',
+    62 => 'По подразбиране е 100',
+    63 => "Вашата парола беше изпратена на зададения от вас e-mail адрес. Моля следвайте инструкциите в съобщението. Благодаря че използвахте {$_CONF['site_name']}",
+    64 => 'Настройки на коментарите за',
+    65 => 'Опитайте да влезете отново',
+    66 => "Вероятно сте сгрешили във въвеждането на вашето потребителско име и/или парола. Моля опитайте отново ! <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Нов потребител</a>",
+    67 => 'Member Since',
+    68 => 'Запомни ме за',
+    69 => 'Колко дълго след като излезете, желаете да бъдете запомнени от сървъра ?',
+    70 => "Промени съдържанието и външният вид на {$_CONF['site_name']}",
+    71 => "Една от най-хубавите благинки на {$_CONF['site_name']} е това, че можете да правите каквото си щете с външния вид на сайта. За целта трябва да се <a href=\"{$_CONF['site_url']}/users.php?mode=new\">регистрирате</a> в {$_CONF['site_name']}.  Имате регистрация ? Тогава се логнете чрез log-in формата отляво !",
+    72 => 'Тема',
+    73 => 'Език',
+    74 => 'Променете изгледа на сайта !',
+    75 => 'Emailed Topics for',
+    76 => 'ако изберете тема от списъка ще получите всички постове, побликувани в нея за всички дни досега. Изберете темите, от които сте заинтересувани !',
+    77 => 'Снимка',
+    78 => 'Добавете снимка !',
+    79 => 'Изберете тук, за да изтриете картинката.',
+    80 => 'Вход',
+    81 => 'Изпрати email',
+    82 => 'Последните 10 публикации за потребителя',
+    83 => 'Статистика за постовете за потребителя',
+    84 => 'Общ брой на материалите:',
+    85 => 'Общ брой на коментарите:',
+    86 => 'Намери всички постове на',
+    87 => 'Вашето потребителско име',
+    88 => "Някой (вероятно вие) е пожелал да смени паролата на вашия акаунт \"%s\" на {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nАко искате да промените вашата парола, моля кликнете на следния линк link:\n\n",
+    89 => "Ако НЕ желаете промяна, ингорирайте това съобщение и вашата парола ще остане непроменена.\n\n",
+    90 => 'Можете да въведете новата парола за вашия акаунт в полето по-долу.  Вашата стара парола ще е валидна докато не изпратите тази форма.',
+    91 => 'Сложи нова парола',
+    92 => 'Напиши новата си парола',
+    93 => 'За последен път пожелахте да смените паролата си преди %d секунди. Необходими са минамално %d секунду между две промени.',
+    94 => 'Изтриване на акаунт"%s"',
+    95 => 'Изберете  бутона "изтриване на акаунт" , за да премахнтете вашата регистрацията си от нашата база с данни. Моля обърнете внимание, че всички текстове и коментари, изпратени от този акаунт <strong>няма</strong> да бъдат изтрити и ще бъдат публикувани като изпратени от анонимен посетител.',
+    96 => 'изтриване на акаунт',
+    97 => 'Потвърдете изтриването на акаунта си',
+    98 => 'Сигурни ли сте, че желаете да изтриете вашата регистрация? Всучай че направите това, няма да можете да се логвате в този сайт отново (освен ако не си създадете друг акаунт). Ако сте сигурни, изберете бутона "изтриване на акаунт" по-горе.',
+    99 => 'Privacy опции за',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email от потребители',
+    103 => 'Позволи email от други потребители',
+    104 => 'Показвай потребителското ми име когато съм онлайн',
+    105 => 'Показвай потребителското ми име в "Кой е онлайн"',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Няма изпратени новини',
+    2 => 'Няма изпратени новини.  Може би няма никакви новини в тази секция или сте забранили показването на такъв тип новини от личните ви настройки на акаунта.',
+    3 => ' за тема %s',
+    4 => 'Важно',
+    5 => 'Следваща страница',
+    6 => 'Предишна страница',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Получи се грешка при изпращането на вашето съобщение. Моля опитайте отново.',
+    2 => 'Съобщението бе изпратено успешно.',
+    3 => 'Моля уверете се, че използвате валиден e-mail адрес в Reply формата.',
+    4 => 'Please fill in the Your Name, Reply To, Subject and Message fields',
+    5 => 'Грешка: няма такъв потребител.',
+    6 => 'Грешка.',
+    7 => 'Профил за',
+    8 => 'Име',
+    9 => 'Сайт',
+    10 => 'Изпрати e-mail до',
+    11 => 'Вашето име:',
+    12 => 'Отговори на:',
+    13 => 'Тема:',
+    14 => 'Съобщение:',
+    15 => 'HTML-ът няма да бъде преведен.',
+    16 => 'Изпрати съобщение',
+    17 => 'Изпрати на приятел',
+    18 => 'До име',
+    19 => 'До e-mail адрес',
+    20 => 'От име',
+    21 => 'От Email адрес',
+    22 => 'Изисква се попълването на всички полета',
+    23 => "Този e-mail е изпратен за вас от %s at %s заради породеният интерес от публикацията ви в {$_CONF['site_url']}.  Това не е спам и дадения e-mail не е запазен в списък за по-нататъшна употреба.",
+    24 => 'Comment on this story at',
+    25 => 'Трябва да сте логнати, за да използвате тази функция.',
+    26 => 'Тази форма ще ви позволи да изпратите email до избрания от вас потребител.  Всички полета са задължителни.',
+    27 => 'Кратко съобщение',
+    28 => '%s wrote: ',
+    29 => "This is the daily digest from {$_CONF['site_name']} for ",
+    30 => ' Daily Newsletter for ',
+    31 => 'Title',
+    32 => 'Date',
+    33 => 'Read the full article at',
+    34 => 'End of Message',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'сложно търсене',
+    2 => 'ключови думи',
+    3 => 'Тема',
+    4 => 'Всички',
+    5 => 'Тип',
+    6 => 'Публикации',
+    7 => 'Коментари',
+    8 => 'Автори',
+    9 => 'Всички',
+    10 => 'Търси',
+    11 => 'Резултати от търсенето',
+    12 => 'съвпадения',
+    13 => 'Резултати от търсенето: няма съвпадения',
+    14 => 'Няма съвпадения от вашето търсене',
+    15 => 'Опитайте отново.',
+    16 => 'Заглавие',
+    17 => 'Дата',
+    18 => 'Автор',
+    19 => "Търси из цялата база данни от {$_CONF['site_name']}",
+    20 => 'Дата',
+    21 => 'до',
+    22 => '(Формат на датата ГГГГ-ММ-ДД)',
+    23 => 'Прегледи',
+    24 => 'Открити са %d резултата',
+    25 => 'Търсехте за',
+    26 => 'артикула ',
+    27 => 'секунди',
+    28 => 'Няма никаква публикация или коментар, съвпадащи с вашето търсене',
+    29 => 'Резултати при публикациите и коментарите',
+    30 => 'Няма открити резултати',
+    31 => 'Този plug-in не откри нищо',
+    32 => 'Събитие',
+    33 => 'URL',
+    34 => 'Район',
+    35 => 'Всеки ден',
+    36 => 'Няма открити събития',
+    37 => 'Резултати в събитията',
+    38 => 'Резултати във връзките',
+    39 => 'Връзки',
+    40 => 'Събития',
+    41 => 'Вашото търсене трябва да е от минимум три символа.',
+    42 => 'Моля използвайте следният формат на датата: ГГГГ-ММ-ДД (година-месец-ден).',
+    43 => 'точна фраза',
+    44 => 'всички думи',
+    45 => 'коя да е от думите',
+    46 => 'Напред',
+    47 => 'Назад',
+    48 => 'Автор',
+    49 => 'Дата',
+    50 => 'Посещения',
+    51 => 'Линк',
+    52 => 'Локация',
+    53 => 'Резултат в публикациите',
+    54 => 'Резултати в коментарите',
+    55 => 'the phrase',
+    56 => 'И',
+    57 => 'ИЛИ',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Статистики',
+    2 => 'Общ брой посещения',
+    3 => 'Публикации (коментари) с системата',
+    4 => 'Анкети (отговори) в системата',
+    5 => 'Връзки (посещения) в системата',
+    6 => 'Събития в системата',
+    7 => 'Десетте най-четени публикации',
+    8 => 'Заглавие на публикацията',
+    9 => 'Прегледи',
+    10 => 'Изглежда няма никакви публикации на този сайт или вече някой ги е прегледал.',
+    11 => 'Най-коментираните публикации.',
+    12 => 'Коментари',
+    13 => 'Изглежда няма никакви публикации на сайта или в никоя от тях не е постнат коментар.',
+    14 => 'Десетте най-добри анкети',
+    15 => 'Въпрос',
+    16 => 'Гласове',
+    17 => 'Изглежда няма никакви анкети или никой не е гласувал.',
+    18 => 'Десетте най-посещавани сайта',
+    19 => 'Връзки',
+    20 => 'Посещения',
+    21 => 'Изглежда че няма никакви връзки или никой не е посещавал никоя от тях.',
+    22 => 'Десетте най-изпращаните по email публикации',
+    23 => 'Email-и',
+    24 => 'Изглежда че няма никакви изпратени по e-mail публикации.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Сходни връзки',
+    2 => 'Изпрати на приятел',
+    3 => 'Принтирай',
+    4 => 'Опции за публикацията',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'За да създадете %s трябва да сте влезли като потребител.',
+    2 => 'Вход',
+    3 => 'Нов потребител',
+    4 => 'Изпрати събитие',
+    5 => 'Изпрати линк',
+    6 => 'Изпрати публикация',
+    7 => 'Изисква се да сте логнати',
+    8 => 'Изпрати',
+    9 => 'Когато пускате информация в този сайт ви съветваме да ползвате следните предложения...<ul><li>Попълнете всички полета, те са задължителни<li>Осигурете точна информация<li>Проверявайте URL адресите</ul>',
+    10 => 'Заглавие',
+    11 => 'URL',
+    12 => 'Дата на започване',
+    13 => 'Дата на приключване',
+    14 => 'Място',
+    15 => 'Описание',
+    16 => 'Ако има още нещо, моля уточнете',
+    17 => 'Категория',
+    18 => 'Друго',
+    19 => 'Прочети първо',
+    20 => 'Грешка: Няма такава категория',
+    21 => 'Когато изберете "Други", моля също така дайте ново име на категорията.',
+    22 => 'Грешка: Липсват някои полета',
+    23 => 'Моля попълнете всички полета.  Всички полета са задължителни.',
+    24 => 'Данните са запазени',
+    25 => 'Вашите %s данни бяха запазени успешно.',
+    26 => 'Speed Limit',
+    27 => 'Име',
+    28 => 'Раздел',
+    29 => 'Публикация',
+    30 => 'Последната ви публикация е преди ',
+    31 => " секунди.  Изискват се поне {$_CONF['speedlimit']} секунди, докато можете да постнете отново",
+    32 => 'Предварителен преглед',
+    33 => 'Превю на публикацията',
+    34 => 'Изход',
+    35 => 'HTML не е позволено',
+    36 => 'Режим на публикация',
+    37 => "Submitting an event to {$_CONF['site_name']} will put your event on the master calendar where users can optionally add your event to their personal calendar. This feature is <b>NOT</b> meant to store your personal events such as birthdays and anniversaries.<br><br>Once you submit your event it will be sent to our administrators and if approved, your event will appear on the master calendar.",
+    38 => 'Добова събитието към',
+    39 => 'Общ календар',
+    40 => 'Личен календар',
+    41 => 'Край',
+    42 => 'Начало',
+    43 => 'Събитие през целият ден',
+    44 => 'Адрес 1',
+    45 => 'Адрес 2',
+    46 => 'Град/Село',
+    47 => 'Щат',
+    48 => 'Пощенски код',
+    49 => 'Тип на събитието',
+    50 => 'Редактирай типа на събитието',
+    51 => 'Място',
+    52 => 'Изтрий',
+    53 => 'Регистрация'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Изисква се оторизация',
+    2 => 'Отказ ! Грешна информация',
+    3 => 'Невалидна потребителска парола',
+    4 => 'Име:',
+    5 => 'Парола:',
+    6 => 'Всеки достъп до тази страница се регистрира и записва.<br>Тази страница е само за оторизирани потребители.',
+    7 => 'вход'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Недостатъчни административни права',
+    2 => 'Нямате необходимите права за редакция на този блок.',
+    3 => 'Редактор на блокове (и мивки секви)',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Име на блок',
+    6 => 'Тема',
+    7 => 'Всички',
+    8 => 'Ниво на сигурност за блок',
+    9 => 'Ред на блока',
+    10 => 'Тип на блока',
+    11 => 'Блок портал',
+    12 => 'Нормален блок',
+    13 => 'Опции за Блок Портал',
+    14 => 'RDF URL',
+    15 => 'Последна RDF актуализация',
+    16 => 'Опции за Блок Нормален',
+    17 => 'Съдържание на блок',
+    18 => 'Моля попълнете заглавие на блок, ниво на сигурност за блок и полета съдържание на блок',
+    19 => 'Блок мениджър',
+    20 => 'Заглавие на блок',
+    21 => 'Ниво на сигурност за блок',
+    22 => 'Тип блок',
+    23 => 'Блок ред',
+    24 => 'Блок тема',
+    25 => 'За да модифицирате или изтриете блок кликнете върху него по долу.  За да създадете нов кликнете на Нов Блок по горе.',
+    26 => 'Блок Layout',
+    27 => 'PHP блок',
+    28 => 'Опции за PHP блок',
+    29 => 'Функции на блок',
+    30 => 'Ако искате един от блоковете да използва PHP, въведете името на функцията по-горе.  Функцията трябва да започва с представка "phpblock_" (e.g. phpblock_getweather).  Ако няма тази представка функцията НЯМА да бъде повикана.  Това е направено с цел хора, които може би са хакнали вашият сайт да не могат да извикат глобални функции. Не поставяйте празни скоби "()" след вашите функции.  Препоръчва се да слагате PHP кода в  /path/to/geeklog/system/lib-custom.php.  Това ще позволи на кода да остане при вас дори да актуализирате Geeklog.',
+    31 => 'Грешка при PHP блока.  Функцията, %s, не съществува.',
+    32 => 'Грешка, липсващо поле(та)',
+    33 => 'Трябва въведете URL до .rdf файла за портални блокове',
+    34 => 'Трябва въведете заглавие и функция за PHP blocks',
+    35 => 'Трябва въведете заглавие и съдържание за normal blocks',
+    36 => 'Трябва въведете съдържание за layout blocks',
+    37 => 'Лошо име на PHP block функцията',
+    38 => 'Функциите за PHP блоковете трябва да имат представка \'phpblock_\' (примерно phpblock_getweather).  Представката \'phpblock_\' се изисква поради причини за сигурност за предотвратяване изпълнението на произволен код.',
+    39 => 'Страничен',
+    40 => 'Ляво',
+    41 => 'Дясно',
+    42 => 'Трябва да попълните блок ред и ниво на сигурност за Geeklog default блоковете',
+    43 => 'Само за начална страница',
+    44 => 'Достъпът отказан',
+    45 => "Опитвате се да влезете в блок до когото нямате достъп.  Този опит бе записан. Моля <a href=\"{$_CONF['site_admin_url']}/block.php\">върнете се в административния панел</a>.",
+    46 => 'Нов блок',
+    47 => 'Admin Home',
+    48 => 'Име на блок',
+    49 => ' (брез празни полета и с уникално име)',
+    50 => 'URL адрес до помощния (Help) файл',
+    51 => 'включително http://',
+    52 => 'Ако оставите това празно, помощната икона за този блок няма да бъде показана',
+    53 => 'Активирана',
+    54 => 'запази',
+    55 => 'отказ',
+    56 => 'изтрий',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Редактор на събития',
+    2 => 'Error',
+    3 => 'Име на събитието',
+    4 => 'URL към събитието',
+    5 => 'Стартова дата',
+    6 => 'Крайна дата',
+    7 => 'Местоположение',
+    8 => 'Описание',
+    9 => '(включително http://)',
+    10 => 'Трябва да попълните дните/времето, описание и местоположение!',
+    11 => 'Мениджър на събития',
+    12 => 'За да модифицирате или изтриете събитие, кликнете върху него по-долу.  За да създадете ново събитие кликнете на \'ново събитие\' отгоре. Натиснете [C] за да създадете копие на вече съществуващо събитие.',
+    13 => 'Заглавие на събитието',
+    14 => 'Стартова дата',
+    15 => 'Крайна дата',
+    16 => 'Достъпът отказан',
+    17 => "Опитвате се да влезете в събитие до когото нямате достъп.  Този опит бе записан. Моля <a href=\"{$_CONF['site_admin_url']}/event.php\">върнете се на административния екран</a>.",
+    18 => 'Ново събитие',
+    19 => 'Admin Home',
+    20 => 'запази',
+    21 => 'откажи',
+    22 => 'изтрий',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Напред',
+    2 => 'Назад',
+    3 => 'Тип',
+    4 => 'Тип на публикуване',
+    5 => 'Редактиране на публикации',
+    6 => 'Няма никакви публикации в системата',
+    7 => 'Автор',
+    8 => 'запази',
+    9 => 'преглед',
+    10 => 'откажи',
+    11 => 'изтрий',
+    12 => 'ID',
+    13 => 'Заглавие',
+    14 => 'Тема',
+    15 => 'Дата',
+    16 => 'Текст - въведение',
+    17 => 'Текст - основен',
+    18 => 'Видяна',
+    19 => 'Коментари',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Списък текстове',
+    23 => 'За да модифицирате или изтриете дадена публикация, кликнете върху нейният номер долу. За да я видите кликнете върку нейното заглавие. За да създадете нова публикация кликнете на \'изпрати публикация\' отгоре.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Преглед',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Моля попълнете Автор, Заглавие и поле Текст - въведение',
+    32 => 'Featured',
+    33 => 'Може да има само една публикация',
+    34 => 'Чернова',
+    35 => 'Да',
+    36 => 'Не',
+    37 => 'Още от',
+    38 => 'Още от',
+    39 => 'Emails',
+    40 => 'Достъпът отказан',
+    41 => "Опитвате се да влезете в събитие, до което нямате достъп.  Този опит бе регистриран и записан.  Можете да видите статията в режим четене долу. Моля <a href=\"{$_CONF['site_admin_url']}/story.php\">върнете се на администраторския екран</a> когато сте готов.",
+    42 => "Опитвате се да влезете в събитие, до което нямате достъп. Този опит бе записан . Моля <a href=\"{$_CONF['site_admin_url']}/story.php\">върнете се на администраторския екран</a>.",
+    43 => 'Нова публикация',
+    44 => 'Admin Home',
+    45 => 'Достъп',
+    46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the story will not be included in your RDF headline feed and it will be ignored by the search and statistics pages.',
+    47 => 'Images',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<BR><P><B>PREVIEWING</B>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    52 => 'Изтрий',
+    53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
+    54 => 'Attached Images Not Used',
+    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
+    56 => 'Show Topic Icon',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Редактор на теми',
+    2 => 'Тема номер',
+    3 => 'Тема име',
+    4 => 'Тема изображение',
+    5 => '(не използвайте интервали)',
+    6 => 'Изтриването на тема изтрива всичко в нея.',
+    7 => 'Моля попълнете номера на темата и нейното име, както и всички други полета',
+    8 => 'Topic мениджър',
+    9 => 'За да модифицирате или изтриете тема, кликнете на нея.  За да създадете нова такава кликнете на бутона \'нова тема\' вляво. Ще откриете ниво на достъп за всяка тема.  Темата по подразбиране е обозначена със звездичка (*).',
+    10 => 'Подредба',
+    11 => 'Публикации/Страница',
+    12 => 'Достъпът отказан',
+    13 => "Опитвате се да влезете в тема, за която нямате достъп. Това се регистрира и логва. Моля <a href=\"{$_CONF['site_admin_url']}/topic.php\">върнете се на администраторския панел</a>.",
+    14 => 'Метод на подреждане',
+    15 => 'азбузен',
+    16 => 'по подразбиране е',
+    17 => 'Нова тема',
+    18 => 'Admin Home',
+    19 => 'запази',
+    20 => 'откажи',
+    21 => 'изтрий',
+    22 => 'Default',
+    23 => 'направи тази тема default за всички подчинени',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'User Editor',
+    2 => 'User ID',
+    3 => 'Потребител',
+    4 => 'Пълно име',
+    5 => 'Парола',
+    6 => 'Ниво на сигурност',
+    7 => 'Email адрес',
+    8 => 'HomePage',
+    9 => '(не използвайте интервали)',
+    10 => 'Моля попълнете формите с потребителското име и e-mail адрес',
+    11 => 'User мениджър',
+    12 => 'За да модифицирате или изтриете даден потребител, кликнете на него.  За да създадете нов потребител кликнете на бутона \'нов потребител\'. Можете да направите някои прости търсения по части от потребителко име, email или пълно име (например. *oja* or *.dba).',
+    13 => 'SecLev',
+    14 => 'Reg. Date',
+    15 => 'Нова регистрация',
+    16 => 'Admin Home',
+    17 => 'changepw',
+    18 => 'откажи',
+    19 => 'Изтрий',
+    20 => 'запази',
+    21 => 'The username you tried saving already exists.',
+    22 => 'Error',
+    23 => 'Групова регистрация',
+    24 => 'Масово (групово) добавяне на потребители',
+    25 => 'Можете да добавите определен брой потребители в системата. Трябва просто да import-нете даден текстов файл с имена и полете като пълно име, потребителско име и e-mail. Всеки добавен потребител ще бъде уведомен за своята парола чрез e-mail. При неспазване на изискванията за формат са възможни проблеми, така че е препоръчително да знаете какво правите !',
+    26 => 'Search',
+    27 => 'Limit Results',
+    28 => 'Check here to delete this picture',
+    29 => 'Path',
+    30 => 'Import',
+    31 => 'New Users',
+    32 => 'Done proccessing. Imported %d and encountered %d failures',
+    33 => 'submit',
+    34 => 'Грешка: Трябва да зададете файл.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Одобри',
+    2 => 'Изтрий',
+    3 => 'Редактирай',
+    4 => 'Profile',
+    10 => 'Заглавие',
+    11 => 'Start Date',
+    12 => 'URL',
+    13 => 'Категория',
+    14 => 'Дата',
+    15 => 'Тема',
+    16 => 'потребителско име',
+    17 => 'Пълно име',
+    18 => 'E-mail',
+    34 => 'Admin Panel',
+    35 => 'Изпратени текстове',
+    36 => 'Изпратени връзки',
+    37 => 'Изпратени събития',
+    38 => 'Изпрати',
+    39 => 'Няма изпратени текстове, които да публикувате или изтриете.',
+    40 => 'User Submissions'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Неделя',
+    2 => 'Понеделник',
+    3 => 'Вторник',
+    4 => 'Сряда',
+    5 => 'Четвъртък',
+    6 => 'Петък',
+    7 => 'Събота',
+    8 => 'Add Event',
+    9 => '%s Event',
+    10 => 'Events for',
+    11 => 'Master Calendar',
+    12 => 'My Calendar',
+    13 => 'January',
+    14 => 'February',
+    15 => 'March',
+    16 => 'April',
+    17 => 'May',
+    18 => 'June',
+    19 => 'July',
+    20 => 'August',
+    21 => 'September',
+    22 => 'October',
+    23 => 'November',
+    24 => 'December',
+    25 => 'Back to ',
+    26 => 'All Day',
+    27 => 'Week',
+    28 => 'Персонален календар за',
+    29 => 'Public Calendar',
+    30 => 'събитие изтриване',
+    31 => 'Добави',
+    32 => 'Event',
+    33 => 'Date',
+    34 => 'Time',
+    35 => 'Quick Add',
+    36 => 'Submit',
+    37 => 'Sorry, the personal calendar feature is not enabled on this site',
+    38 => 'Personal Event Editor',
+    39 => 'Day',
+    40 => 'Week',
+    41 => 'Month'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'From',
+    3 => 'Reply-to',
+    4 => 'Subject',
+    5 => 'Body',
+    6 => 'Send to:',
+    7 => 'All users',
+    8 => 'Admin',
+    9 => 'Options',
+    10 => 'HTML',
+    11 => 'Urgent message!',
+    12 => 'Send',
+    13 => 'Reset',
+    14 => 'Ignore user settings',
+    15 => 'Error when sending to: ',
+    16 => 'Successfully sent messages to: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Send another message</a>",
+    18 => 'To',
+    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
+    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
+    21 => 'Failures',
+    22 => 'Successes',
+    23 => 'No failures',
+    24 => 'No successes',
+    25 => '-- Select Group --',
+    26 => 'Please fill in all the fields on the form and select a group of users from the drop down.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Plug-in List',
+    6 => 'Warning: Plug-in Already Installed!',
+    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
+    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
+    12 => 'no plugin name provided to plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'New Plug-in',
+    15 => 'Admin Home',
+    16 => 'Plug-in Name',
+    17 => 'Plug-in Version',
+    18 => 'Geeklog Version',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => 'Install',
+    23 => 'Запази',
+    24 => 'Откажи',
+    25 => 'Delete',
+    26 => 'Plug-in Name',
+    27 => 'Plug-in Homepage',
+    28 => 'Plug-in Version',
+    29 => 'Geeklog Version',
+    30 => 'Delete Plug-in?',
+    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
+    2 => "Thank-you for submitting your story to {$_CONF['site_name']}.  It has been submitted to our staff for approval. If approved, your story will be available for others to read on our site.",
+    3 => "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links.php>links</a> section.",
+    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href={$_CONF['site_url']}/calendar.php>calendar</a> section.",
+    5 => 'Your account information has been successfully saved.',
+    6 => 'Your display preferences have been successfully saved.',
+    7 => 'Your comment preferences have been successfully saved.',
+    8 => 'You have been successfully logged out.',
+    9 => 'Публикацията ви бе запазена успешно.',
+    10 => 'The story has been successfully deleted.',
+    11 => 'Your block has been successfully saved.',
+    12 => 'The block has been successfully deleted.',
+    13 => 'Your topic has been successfully saved.',
+    14 => 'The topic and all it\'s stories and blocks have been successfully deleted.',
+    15 => 'Your link has been successfully saved.',
+    16 => 'The link has been successfully deleted.',
+    17 => 'Your event has been successfully saved.',
+    18 => 'The event has been successfully deleted.',
+    19 => 'Your poll has been successfully saved.',
+    20 => 'The poll has been successfully deleted.',
+    21 => 'The new user has been successfully saved.',
+    22 => 'The user has been successfully deleted',
+    23 => 'Error trying to add an event to your calendar. There was no event id passed.',
+    24 => 'The event has been saved to your calendar',
+    25 => 'Cannot open your personal calendar until you login',
+    26 => 'Event was successfully removed from your personal calendar',
+    27 => 'Message successfully sent.',
+    28 => 'The plug-in has been successfully saved',
+    29 => 'Sorry, personal calendars are not enabled on this site',
+    30 => 'Access Denied',
+    31 => 'Sorry, you do not have access to the story administration page.  Please note that all attempts to access unauthorized features are logged',
+    32 => 'Sorry, you do not have access to the topic administration page.  Please note that all attempts to access unauthorized features are logged',
+    33 => 'Sorry, you do not have access to the block administration page.  Please note that all attempts to access unauthorized features are logged',
+    34 => 'Sorry, you do not have access to the link administration page.  Please note that all attempts to access unauthorized features are logged',
+    35 => 'Sorry, you do not have access to the event administration page.  Please note that all attempts to access unauthorized features are logged',
+    36 => 'Sorry, you do not have access to the poll administration page.  Please note that all attempts to access unauthorized features are logged',
+    37 => 'Sorry, you do not have access to the user administration page.  Please note that all attempts to access unauthorized features are logged',
+    38 => 'Sorry, you do not have access to the plugin administration page.  Please note that all attempts to access unauthorized features are logged',
+    39 => 'Sorry, you do not have access to the mail administration page.  Please note that all attempts to access unauthorized features are logged',
+    40 => 'System Message',
+    41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
+    42 => 'Your word has been successfully saved.',
+    43 => 'The word has been successfully deleted.',
+    44 => 'The plug-in was successfully installed!',
+    45 => 'The plug-in was successfully deleted.',
+    46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
+    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
+    49 => 'Your group has been successfully saved.',
+    50 => 'The group has been successfully deleted.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Access',
+    'ownerroot' => 'Owner/Root',
+    'group' => 'Group',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Access Rights',
+    'owner' => 'Owner',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTE: members is all logged in members of the site and anonymous is all users browsing the site that aren\'t logged in.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Description',
+    'name' => 'Name',
+    'rights' => 'Rights',
+    'missingfields' => 'Missing Fields',
+    'missingfieldsmsg' => 'You must supply the name and a description for a group',
+    'groupmanager' => 'Group Manager',
+    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'groupname' => 'Group Name',
+    'coregroup' => 'Core Group',
+    'yes' => 'Yes',
+    'no' => 'No',
+    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
+    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
+    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
+    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'lock' => 'Lock',
+    'members' => 'Members',
+    'anonymous' => 'Anonymous',
+    'permissions' => 'Permissions',
+    'permissionskey' => 'R = read, E = edit, edit rights assume read rights',
+    'edit' => 'Edit',
+    'none' => 'None',
+    'accessdenied' => 'Access Denied',
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
+    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'newgroup' => 'New Group',
+    'adminhome' => 'Admin Home',
+    'save' => 'save',
+    'cancel' => 'cancel',
+    'delete' => 'delete',
+    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group %s',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Last 10 Back-ups',
+    'do_backup' => 'Do Backup',
+    'backup_successful' => 'Database back up was successful.',
+    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
+    'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
+    'backup_file' => 'Backup file',
+    'size' => 'Size',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Contact',
+    3 => 'Get Published',
+    4 => 'Links',
+    5 => 'Polls',
+    6 => 'Calendar',
+    7 => 'Site Stats',
+    8 => 'Personalize',
+    9 => 'Search',
+    10 => 'разширено търсене',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Gee, I\'ve looked everywhere but I can not find <b>%s</b>.',
+    3 => "<p>We're sorry, but the file you have requested does not exist. Please feel free to check the <a href=\"{$_CONF['site_url']}\">main page</a> or the <a href=\"{$_CONF['site_url']}/search.php\">search page</a> to see if you can find what you lost."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login required',
+    2 => 'Sorry, to access this area you need to be logged in as a user.',
+    3 => 'Login',
+    4 => 'New User'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/catalan.php 1.4.0sr5-1/cpanel-glprivate/language/catalan.php
--- 1.3.11sr1/cpanel-glprivate/language/catalan.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/catalan.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1506 @@
+<?php
+
+###############################################################################
+# This is the Spanish language page for GeekLog!
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'iso-8859-1';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Autor:',
+    2 => 'lectura de l\'artcle complet',
+    3 => 'comentaris',
+    4 => 'Edici',
+    5 => 'Vota',
+    6 => 'Resultats',
+    7 => 'Resultats de l\'enquesta',
+    8 => 'vots',
+    9 => 'Funcions de l\'Administrador/a:',
+    10 => 'Propostes',
+    11 => 'Notcies',
+    12 => 'Blocs',
+    13 => 'Seccions',
+    14 => 'Enllaos',
+    15 => 'Esdeveniments',
+    16 => 'Enquestes',
+    17 => 'Usuaris/es',
+    18 => 'Cerca SQL',
+    19 => 'Sortida',
+    20 => 'Informaci de l\'usuari/a:',
+    21 => 'Nom de l\'usuari/a',
+    22 => 'Identitat (ID) de l\'usuari/a',
+    23 => 'Nivell de Seguretat',
+    24 => 'Annim',
+    25 => 'Respondre',
+    26 => 'Els segents comentaris sn de la persona que els hagi enviat. Aquest lloc no es fa responsable de les opinions expresades pels participants dels frums i seccions de comentaris, i el fet de publicar les mateixes no significa que s\'estigui d\'acord amb elles.',
+    27 => 'Comentari ms recent',
+    28 => 'Borrar',
+    29 => 'No hi ha comentaris dels usuaris.',
+    30 => 'Noticies anteriors',
+    31 => 'Etiquetes HTML permeses:',
+    32 => 'Error, usuari invlid',
+    33 => 'Error, no ha sigut possible escriure el registre',
+    34 => 'Error',
+    35 => 'Sortir',
+    36 => 'sobre',
+    37 => 'No hi ha noticies de l\'usuari/a',
+    38 => 'Sindicaci del contingut',
+    39 => 'Actualitzaci',
+    40 => 'Tens <tt>register_globals = Off</tt> al teu <tt>php.ini</tt>. No obstant, Geeklog requereix que <tt>register_globals</tt> estigui <strong>on</strong>. Abans de continuar, siusplau cambia-ho a <strong>on</strong> i reengega el teu servidor web.',
+    41 => 'Usuaris invitats',
+    42 => 'Escrit per:',
+    43 => 'Respondre a',
+    44 => 'Torna',
+    45 => 'Nmero d\'Error MySQL',
+    46 => 'Missatge d\'Error MySQL',
+    47 => 'Funcions de l\'usuari/a',
+    48 => 'La meva conta',
+    49 => 'Les meves Preferncies',
+    50 => 'Error en una frase SQL',
+    51 => 'ajuda',
+    52 => 'Nuevo',
+    53 => 'Secci d\'Administraci',
+    54 => 'No s\'ha pogut obrir l\'arxiu.',
+    55 => 'Error en',
+    56 => 'Vota',
+    57 => 'Contrassenya',
+    58 => 'Identificaci',
+    59 => "Encara no tens una conta? <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Inscru-te</a>",
+    60 => 'Afegeix un comentari',
+    61 => 'Crea una conta nova',
+    62 => 'paraules',
+    63 => 'Preferncies de Notcies',
+    64 => 'Envia-la a un amic o amiga',
+    65 => 'Veure la versi per imprimir',
+    66 => 'El meu Calendari',
+    67 => 'Benvingut/da a ',
+    68 => 'Pgina Inicial',
+    69 => 'contacte',
+    70 => 'cercar',
+    71 => 'envia la notcia',
+    72 => 'enllaos a altres webs',
+    73 => 'enquestes anteriors',
+    74 => 'calendari',
+    75 => 'cerca avanada',
+    76 => 'estadstiques del lloc',
+    77 => 'Plugins',
+    78 => 'Propers Esdeveniments',
+    79 => 'Novetats',
+    80 => 'noticies',
+    81 => 'noticia',
+    82 => 'hores',
+    83 => 'COMENTARIS',
+    84 => 'ENLLAOS',
+    85 => 'ltimes 48 hores',
+    86 => 'No hi ha comentaris nous',
+    87 => 'ltimes 2 setmanes',
+    88 => 'No hi ha enllaos nous',
+    89 => 'No hi ha propers esdeveniments',
+    90 => 'Pgina Inicial',
+    91 => 'Aquesta plana va ser creada en',
+    92 => 'segons',
+    93 => 'Drets d\'autor',
+    94 => 'Totos les marques i drets en aquesta plana sn dels seus respectius propietaris.',
+    95 => 'Una altra web feta amb',
+    96 => 'Grups',
+    97 => 'Llista de Paraules',
+    98 => 'Plug-ins',
+    99 => 'NOTICIES',
+    100 => 'No hi ha noticies noves',
+    101 => 'Els meus Esdeveniments',
+    102 => 'Esdeveniments del lloc',
+    103 => 'Copies de seguretat de la base de dades',
+    104 => 'per',
+    105 => 'Usuaris del Correu',
+    106 => 'Lectures',
+    107 => 'Comprobaci de la versi de GL',
+    108 => 'Neteja la cpia de visites (Cach)',
+    109 => 'Denncia els abusos',
+    110 => 'Denncia aquest missatge a l\'administrador d\'aquest lloc',
+    111 => 'Veure la versi PDF',
+    112 => 'Usuaris inscrits',
+    113 => 'Documentaci',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendari d\'Esdeveniments',
+    2 => 'Disculpa, no hi ha esdeveniments a mostrar.',
+    3 => 'Quan',
+    4 => 'On',
+    5 => 'Descripci',
+    6 => 'Afegeix un esdeveniment',
+    7 => 'Prxims esdeveniments',
+    8 => 'A l\'afegir aquest esdeveniment al calendari podrs veure rapidament els esdeveniments que t\'interessin. Per fer-ho escull "El meu Calendari" a l\'rea de Funcions de l\'usuari/a.',
+    9 => 'Afegir a "El meu Calendari"',
+    10 => 'Treure de "El meu Calendari"',
+    11 => "Afegint l\'Esdeveniment al calendari de {$_USER['username']}",
+    12 => 'Esdeveniment',
+    13 => 'Comena',
+    14 => 'Acaba',
+    15 => 'Tornar al Calendari'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Afegeix un Comentari',
+    2 => 'Tipo d\'enviament',
+    3 => 'Sortida',
+    4 => 'Crea una conta',
+    5 => 'Nom de l\'usuari/a',
+    6 => 'Aquest lloc requereix que tinguis una conta per a poder enviar un comentari. Si ja la tens, introdueix el nom d\'usuari i la contrassenya. Si no tens una conta, pots crear-ne una de nova al formulari de sota',
+    7 => 'El teu ltim comentari va ser fa ',
+    8 => " segons. Aquest lloc requereix com a mnim {$_CONF['commentspeedlimit']} segons entre comentari i comentari",
+    9 => 'Comentari',
+    10 => 'Envia la denncia',
+    11 => 'Envia el comentari',
+    12 => 'Siusplau completa el Ttol i Comentari, ja que sn dades necessaries per enviar un comentari.',
+    13 => 'La teva Informaci',
+    14 => 'Lectura Prvia',
+    15 => 'Denncia aquest missatge',
+    16 => 'Ttol',
+    17 => 'Error',
+    18 => 'Coses Importants',
+    19 => 'Siusplau, intenta mantindre el tema de la noticia.',
+    20 => 'Intenta respondre als comentaris dels dems en lloc de comenar una nova discussi.',
+    21 => 'Llegeix els comentaris enviats per evitar comentaris duplicats.',
+    22 => 'Utilitza un ttol clar que descrigui el contingut del teu missatge.',
+    23 => 'La teva direcci de correu electrnic NO ser divulgada.',
+    24 => 'Usuari Annim',
+    25 => 'Estas segur/a de que vols denunciar aquest missatge a l\'administrador del lloc?',
+    26 => '%s ha denunciat el segent comentari abusiu:',
+    27 => 'Denncia d\'abs'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Perfil de l\'usuari/a per',
+    2 => 'Nom de l\'usuari/a',
+    3 => 'Nom Complet',
+    4 => 'Contrassenya',
+    5 => 'Correu electrnic',
+    6 => 'Pgina personal',
+    7 => 'Biografa',
+    8 => 'Clau PGP',
+    9 => 'Guardar la Informaci',
+    10 => 'ltims 10 comentaris',
+    11 => 'No hi ha comentaris',
+    12 => 'Preferncies de l\'usuari/a per',
+    13 => 'Enviar un resum cada nit per correu electrnic',
+    14 => 'Aquesta contrassenya es genera a l\'atzar. Es recomana cambiar la contrassenya el ms aviat possible. Per cambiar la contrassenya conecta al lloc amb el teu nom d\'usuari.',
+    15 => "La teva conta a {$_CONF['site_name']} s\'ha creat satisfactoriament. Per poder utilitzar-la tens que ingressar utilizant les dades donades ms aball. Guarda aquest missatge per futures referncies.",
+    16 => 'Informaci de la teva conta',
+    17 => 'La conta no existeix',
+    18 => 'La direcci de correu electrnic ingressada no sembla ser vlida.',
+    19 => 'l\'usuari/a i la direcci de correu electrnic ja existeixen',
+    20 => 'La direcci de correu electrnic ingressada no sembla ser vlida.',
+    21 => 'Error',
+    22 => "Inscru-te a {$_CONF['site_name']}!",
+    23 => "La creaci d\'una conta et donar les ventatges dels usuaris de {$_CONF['site_name']} i et permetr enviar noticies, comentaris, etc. Si no tens una conta noms ho podrs fer annimament. Volem remarcar que la teva direcci de correu electrnic <b><i>mai</i></b> ser publicada en aquest lloc.",
+    24 => 'La Contrassenya s\'enviar a la direcci de correu electrnic que ingressis.',
+    25 => 'No recordes la teva contrassenya?',
+    26 => 'Ingressa <em>o</em> el teu nom d\'usuari <em>o</em> la direcci de correu electrnic que vas utilitzar per inscriure\'t i clica Enviar Contrassenya. T\'arrivaran per correu electrnic les instruccions per crear una nova contrassenya a la direcci que figura a l\'arxiu,.',
+    27 => 'Inscriu-te ara!',
+    28 => 'Enviar la contrassenya per correu electrnic',
+    29 => 'desconectat/da de',
+    30 => 'conectat/da a',
+    31 => 'La funci que has escollit requereix que estiguis connectat/da',
+    32 => 'Firma',
+    33 => 'No es mostrar publicament',
+    34 => 'Aquest es el teu nom de veritat',
+    35 => 'Ingressa la nova contrassenya per cambiar-la',
+    36 => 'Comena amb http://',
+    37 => 'S\'aplica als teus comentaris',
+    38 => 'Tot sobre Tu! Tothomm podr llegir aix.',
+    39 => 'La teva clau pblica de PGP per compartir',
+    40 => 'Sense icones de seccions',
+    41 => 'Intenci de moderar',
+    42 => 'Format de la data',
+    43 => 'Quantitat mxima de noticies',
+    44 => 'Sense requadres',
+    45 => 'Mostrar las preferencies de',
+    46 => 'Elements exclosos de',
+    47 => 'Configuraci de Noticies per',
+    48 => 'Seccions',
+    49 => 'Sense icones en les noticies',
+    50 => 'No seleccionis aix si no ests interessat',
+    51 => 'Noms les noticies noves',
+    52 => 'El valor per defecte es',
+    53 => 'Recepci cada nit les noticies del dia',
+    54 => 'Selecciona les Seccions i Autors que no vols veure.',
+    55 => 'Si no en selecciones cap significa que vols la sellecci per defecte. De seleccionar-ne alguna, selecciona totes les del teu inters ja que les opcions per defecte ja no sern tingudes en compte. Les opcions per defecte es mostren resaltades.',
+    56 => 'Autors',
+    57 => 'Mode de Presentaci',
+    58 => 'Ordre de classificaci',
+    59 => 'Lmit per Comentari',
+    60 => 'Com vols veure els comentaris?',
+    61 => 'Primer els ms antics o els ms recents?',
+    62 => 'El valor per defecte es 100',
+    63 => "Gracies per utilitzar {$_CONF['site_name']}. T\'hem enviat la teva contrassenya per correu electrnic i arribar en uns moments. Siusplau segueix les instruccions del missatge.",
+    64 => 'Preferncies pels comentaris de',
+    65 => 'Intenta reconectar-te una altre vegada',
+    66 => "Les dades ingressades no son vlides. Intenta reconectar a sota. Ets un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">usuari/a nou/va</a>?",
+    67 => 'Membre desde',
+    68 => 'Recorda\'m durant',
+    69 => 'Quanta estona hem de mantenir el teu nom d\'usuari/a en actiu desprs de conectar?',
+    70 => "Personalitza l\'aparena i el contingut de {$_CONF['site_name']}",
+    71 => "Una de les grans virtuts de {$_CONF['site_name']} es que pots personalitzar el contingut que reps i l\'aparena del lloc. Per poder fer-ho, primer has d\'<a href=\"{$_CONF['site_url']}/users.php?mode=new\">inscriure\'t</a> a {$_CONF['site_name']}. Si ja ets membre, utilitza el formulari de l\'esquerra per conectar-te.",
+    72 => 'Tema',
+    73 => 'Idioma',
+    74 => 'Cambia l\'apariena d\'aquesta pgina!',
+    75 => 'Seccions enviades per correu electrnic a',
+    76 => 'Si selecciones una o ms Seccions de la llista de sota, totes les noticies noves d\'aquestes Seccions et seran enviades per correu electrnic al finalitzar el dia.',
+    77 => 'Foto',
+    78 => 'Afegeix una foto teva!',
+    79 => 'Activa aix per borrar aquesta imatge',
+    80 => 'Identificaci',
+    81 => 'Envia per correu electrnic',
+    82 => 'ltimes 10 noticies per l\'usuari/a',
+    83 => 'Estadstiques de noticies per l\'usuari/a',
+    84 => 'Nombre total d\'articles:',
+    85 => 'Nombre total de comentaris:',
+    86 => 'Buscar tots els comentaris de',
+    87 => 'El teu nom d\'accs',
+    88 => "Alg (possiblement tu mateix/a) ha solicitat una contrassenya nova per la teva conta  \"%s\" a {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSi de veritat vols que es porti a terme aquesta acci, siusplau apreta a l\'enlla segent:\n\n",
+    89 => "si no vols que es porti a terme aquesta acci, simplement ignora aquest missatge i la petici ser desatinguda (la teva contrassenya no es modificar).\n\n",
+    90 => 'Pots ingressar a sota una contrassenya nova per la teva conta. Siusplau, tingues en compte que la contrassenya antiga seguira sent vlida fins que enviis aquest formulari.',
+    91 => 'Crea una contrassenya nova',
+    92 => 'Ingressa una contrassenya nova',
+    93 => 'La teva ultima petici d\'una nova contrassenya va ser fa %d segons. Aquest lloc requereix com a mnim %d segons entre peticions de contrassenyes.',
+    94 => 'Borra la conta "%s"',
+    95 => 'Apreta a sota el bot "borrar la conta" per retirar la teva conta de la nostra base de dades. Siusplau, tingues en compte que qualsevol noticia o comentari que hagis publicat amb aquesta conta <strong>no</strong> es borrara, sino que apareixera com "Annim".',
+    96 => 'Borra la conta',
+    97 => 'Confirma el borrat de la Conta',
+    98 => 'Ests segur/a de que vols borrar la teva conta? Al fer-ho, no podras accedir a aquest lloc una altre vegada (a no ser que creis una conta nova). Si ests segur/a, apreta "borrar conta" de nou en el formulari de sota.',
+    99 => 'Opcions de privacitat per',
+    100 => 'Correu de l\'Administrador/a',
+    101 => 'Permet el correu dels Administradors/es del lloc',
+    102 => 'Correu dels usuaris',
+    103 => 'Permet el correu d\'altres usuaris',
+    104 => 'Mostra l\'estat de qui est conectat/da',
+    105 => 'Mostra al bloc Who\'s Online (usuaris conectats)',
+    106 => 'Ubicaci',
+    107 => 'Mostrat en el teu perfil public',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'No hi ha novetats a mostrar',
+    2 => 'No hi ha noves noticies a mostrar. Pot ser que no hi hagi novetats en aquest Secci o que les teves preferncies siguin molt restrictives.',
+    3 => 'per la Secci %s',
+    4 => 'Notcia del Dia',
+    5 => 'Segent',
+    6 => 'Anterior',
+    7 => 'Primer',
+    8 => 'ltim'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Hi ha hagut un error a l\'enviar el teu missatge. Prova-ho de nou siusplau.',
+    2 => 'El missatge s\'ha enviat satisfactoriament.',
+    3 => 'Siusplau assegura\'t d\'ingressar una direcci de correu electrnic vlida al camp \'Respondre a\'.',
+    4 => 'Siusplau completa els camps Remitent, Respondre a, Ttol i Missatge',
+    5 => 'Error: No existeix l\'usuari/a.',
+    6 => 'Hi ha hagut un error.',
+    7 => 'Perfil d\'usuari/a de',
+    8 => 'Nom de l\'usuari/a',
+    9 => 'URL de l\'usuari/a',
+    10 => 'Envia un missatge a',
+    11 => 'Remitent:',
+    12 => 'Respondre a:',
+    13 => 'Ttol:',
+    14 => 'Missatge:',
+    15 => 'No es traduir el codi HTML.',
+    16 => 'Envia el missatge',
+    17 => 'Enviar a un amic o amiga',
+    18 => 'Destinatari/a',
+    19 => 'Direcci de correu electrnic de dest',
+    20 => 'Remitent',
+    21 => 'Respondre a',
+    22 => 'Es necessari omplir tots els camps',
+    23 => "Aquest correu electrnic te l\'ha enviat %s en %s perque va pensar que podria interessar-te aquesta notcia a  {$_CONF['site_url']}. Aix no s SPAM (correu escombraria) i les direccions de correu electrnic involucrades en aquest enviament no s\'han guardat pel seu s posterior.",
+    24 => 'Comentari sobre aquesta notcia a',
+    25 => 'Has de conectar-te per utilitzar aquesta eina. Aquest control es realitza per prevenir del mal s del sistema.',
+    26 => 'Aquest formulari et permetr enviar un correu electrnic a l\'usuari seleccionat. Tots els camps sn necessaris.',
+    27 => 'Missatge curt',
+    28 => '%s va escriure: ',
+    29 => "Aquest s el resum diari de {$_CONF['site_name']} per ",
+    30 => ' Noticies diaries per ',
+    31 => 'Ttol',
+    32 => 'Data',
+    33 => 'Llegeix la Notcia completa a',
+    34 => 'Fi del missatge',
+    35 => 'Ho sento, aquest usuari prefereix no rebre missatges.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Cerca Avanada',
+    2 => 'Paraules Clau',
+    3 => 'Secci',
+    4 => 'Tot',
+    5 => 'Tipo',
+    6 => 'noticies',
+    7 => 'Comentaris',
+    8 => 'Autors',
+    9 => 'Tot',
+    10 => 'Cerca',
+    11 => 'Resultats de la cerca',
+    12 => 'resultats',
+    13 => 'Cerca de noticies: No hi ha hagut coincidencies',
+    14 => 'No s\'han trobat coincidencies al buscar: ',
+    15 => 'Siusplau torna-ho a provar.',
+    16 => 'Ttol',
+    17 => 'Data',
+    18 => 'Autor',
+    19 => "Cerca en tota la base de dades de <B>{$_CONF['site_name']}</B>",
+    20 => 'Data',
+    21 => 'a',
+    22 => '(Format de data DD-MM-YYYY)',
+    23 => 'Lectures',
+    24 => 'Trobats %d elements',
+    25 => 'coincidencies amb',
+    26 => 'elements en ',
+    27 => 'segons',
+    28 => 'No s\'han trobat coincidencies en Noticies i Comentaris',
+    29 => 'Resultats de les Noticies i Comentaris',
+    30 => 'Cap enllae coincideix amb la teva cerca',
+    31 => 'Aquest plug-in no ha donat resultats',
+    32 => 'Esdeveniment',
+    33 => 'URL',
+    34 => 'Ubicaci',
+    35 => 'Tot el dia',
+    36 => 'Cap esdeveniment ha coincidit amb la teva cerca',
+    37 => 'Resultats d\'Esdeveniments',
+    38 => 'Resultats d\'Enllaos',
+    39 => 'Enllaos',
+    40 => 'Esdeveniments',
+    41 => 'La paraula a cercar ha de tenir com a mnim 3 lletres.',
+    42 => 'Siusplau utilitza una data en el segent format: YYYY-MM-DD (any-mes-dia).',
+    43 => 'frase exacta',
+    44 => 'totes aquestes paraules',
+    45 => 'qualsevol d\'aquestes paraules',
+    46 => 'Segent',
+    47 => 'Anterior',
+    48 => 'Autor/a',
+    49 => 'Data',
+    50 => 'Lectures',
+    51 => 'Enlla',
+    52 => 'Ubicaci',
+    53 => 'Resultats de la notcia',
+    54 => 'Resultats de Comentari',
+    55 => 'la frase',
+    56 => 'I',
+    57 => 'O',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Estadstiques del lloc',
+    2 => 'Total d\'accessos al sistema',
+    3 => 'Noticies(Comentaris) en el sistema',
+    4 => 'Enquestes(Respostes) en el sistema',
+    5 => 'Enllaos(Visitats) en el sistema',
+    6 => 'Esdeveniments en el sistema',
+    7 => 'Les 10 Noticies ms llegides',
+    8 => 'Ttol de la Noticia',
+    9 => 'Accessos',
+    10 => 'Sembla que no hi ha notcies en aquest lloc o que ning les ha vist encara.',
+    11 => 'Les 10 noticies ms comentades',
+    12 => 'Comentaris',
+    13 => 'Sembla que no hi ha noticies en aquest lloc o que ning ha escrit un comentari sobre elles.',
+    14 => 'Les 10 Enquestes amb ms vots',
+    15 => 'Pregunta',
+    16 => 'Vots',
+    17 => 'Sembla que no hi ha enquestes en aquest lloc o que ning ha votat encara.',
+    18 => 'Els 10 Enllaos ms visitats',
+    19 => 'Enllaos',
+    20 => 'Visites',
+    21 => 'Sembla que en aquest lloc no hi ha enllaos o que ning els ha visitat.',
+    22 => 'Les 10 Noticies ms enviades per correu electrnic',
+    23 => 'missatges per correu electrnic',
+    24 => 'Sembla que ning ha enviat una notcia per correu electrnic en aquest lloc.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relacionat amb aix...',
+    2 => 'Enva-ho a un amic',
+    3 => 'Versi per imprimir',
+    4 => 'Opcions de la Notcia',
+    5 => 'Format de notcia en PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Per enviar %s has d\'estar conectat com usuari/a.',
+    2 => 'Ingressa',
+    3 => 'Nou Usuari/a',
+    4 => 'Afegeix un Esdeveniment',
+    5 => 'Afegeix un Enlla',
+    6 => 'Afegeix una notcia',
+    7 => 'Has de conectar-te',
+    8 => 'Enviament de collaboracions',
+    9 => 'Quan enves informaci a aquest lloc et demanem que tinguis en compte els segents consells: <ul><li>Completa tots els camps requerits<li>Comprova b les URL\'s<li>Facilita informaci completa i precisa</ul>',
+    10 => 'Ttol',
+    11 => 'Enlla',
+    12 => 'Data d\'inici',
+    13 => 'Data de finalitzaci',
+    14 => 'Lloc',
+    15 => 'Descripci',
+    16 => 'Si es un altre, especifica',
+    17 => 'Categora',
+    18 => 'Un altre',
+    19 => 'Llegeix abans',
+    20 => 'Error: Falta la Categora',
+    21 => 'Siusplau, quan seleccionis \'Un altre\' completa el nom de la categora',
+    22 => 'Error: Falten Camps',
+    23 => 'Siusplau completa tots els camps del formulari. Es necessari omplir tots els camps.',
+    24 => 'Colaboraci guardada',
+    25 => 'Les teves collaboracions s\'han guardat satisfactoriament.',
+    26 => 'Lmit de Velocitat',
+    27 => 'Nom de l\'usuari/a',
+    28 => 'Secci',
+    29 => 'Notcia',
+    30 => 'La teva darrera collaboraci va ser fa ',
+    31 => " segons.  Aquest lloc requereix com a mnim {$_CONF['speedlimit']} segons entre enviaments",
+    32 => 'Lectura Previa',
+    33 => 'Lectura previa de la noticia',
+    34 => 'Sortida',
+    35 => 'No es permeten etiquetes d\'HTML',
+    36 => 'Format del text',
+    37 => "Els esdeveniments enviats a {$_CONF['site_name']} s\'afegeixen al Calendari Pblic, on la resta d\'usuaris poden afegir-lo al seu Calendari Personal. Aquesta funci <b>NO</b> est pensada per guardar els teus esdeveniments personals com ara aniversaris, cites, etc.<br><br>Una vegada enviat, l\'esdeveniment ser evaluat pels Administradors. De ser aprobat, es mostrar al Calendari Pblic",
+    38 => 'Afegeix un esdeveniment a',
+    39 => 'Calendari Pblic',
+    40 => 'Calendari Personal',
+    41 => 'Hora de finalitzaci',
+    42 => 'Hora d\'inici',
+    43 => 'Esdeveniment que dura tot el dia',
+    44 => 'Direcci, linia 1',
+    45 => 'Direcci, linia 2',
+    46 => 'Ciutat/Localitat',
+    47 => 'Provncia/Estat',
+    48 => 'Cdig Postal',
+    49 => 'Tipo d\'Esdeveniment',
+    50 => 'Edita els tipus d\'esdeveniments',
+    51 => 'Lloc',
+    52 => 'Borrar',
+    53 => 'Crea una conta'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Es demana verificaci',
+    2 => 'Accs denegat! La informaci d\'ingrs s incorrecta',
+    3 => 'La contrassenya ingressada es invlida',
+    4 => 'Usuari/a:',
+    5 => 'Contrassenya:',
+    6 => 'Tot accs a les parts administratives queda registrat i revisat.<br>Aquesta pgina s per l\'s exclusiu del personal autoritzat.',
+    7 => 'Identificaci'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'No tens drets d\'Administrador/a',
+    2 => 'No tens els drets suficients per editar aquest bloc.',
+    3 => 'Editor de Blocs',
+    4 => 'Hi ha hagut un problema amb la lectura d\'aquesta transmissi (veure error.log per ms detalls).',
+    5 => 'Ttol del Bloc',
+    6 => 'Secci',
+    7 => 'Tot',
+    8 => 'Nivell de seguretat del bloc',
+    9 => 'Ordre del Bloc',
+    10 => 'Tipus de bloc',
+    11 => 'Bloc del Sistema',
+    12 => 'Bloc Normal',
+    13 => 'Opcions per el Bloc del Sistema',
+    14 => 'RDF(Resource Description Framework)URL',
+    15 => 'ltima actualitzaci del RDF',
+    16 => 'Opcions per el Bloc Normal',
+    17 => 'Contingut del Bloc',
+    18 => 'Siusplau completa els camps Ttol, Nivell de Seguretat i Contingut del bloc',
+    19 => 'Administrador',
+    20 => 'Ttol',
+    21 => 'Nivell de Seguretat',
+    22 => 'Tipus',
+    23 => 'Nombre d\'Ordre',
+    24 => 'Secci',
+    25 => 'Per modificar o borrar un bloc, seleccina\'l ms avall. Per crear-ne un de nou, selecciona \'Nou Bloc\' a dalt.',
+    26 => 'Bloc de maquetaci',
+    27 => 'Bloc de PHP',
+    28 => 'Opcions del Bloc PHP',
+    29 => 'Funcions del Bloc',
+    30 => 'Si vols que el teu bloc utilitzi codi PHP, ingressa aqui el nom de la funci. La funci ha de tenir el prefixe "phpblock_" (ex. phpblock_getweather). De no ser aix NO sera invocada. Assegura\'t de no incluir els parntesis, "()", al final del nom. Per ltim, es recomana que guardis tot cdi PHP a /path/to/geeklog/system/lib-custom.php. Aix et permetr que el teu codi es mantingui als canvis de versio del sistema.',
+    31 => 'Error en un Bloc PHP.  La funci, %s, no existeix.',
+    32 => 'Error, Falten Camps',
+    33 => 'Has d\'ingressar la URL de l\'archivo .rdf pels Blocs del Sistema',
+    34 => 'Has d\'ingressar el Ttol i la Funci als Blocs PHP',
+    35 => 'Has d\'ingressar el Ttulo i el Contingut pels Blocs Normals',
+    36 => 'Has d\'ingressar el contingut pels Blocs de Maquetaci',
+    37 => 'El nom de la funci en el Bloc PHP es invlid',
+    38 => 'Les funcions pels Blocs PHP han de tenir el prefixe \'phpblock_\' (ex. phpblock_getweather). Es demana el prefixe per qestions de seguretat, per evitar que s\'executi codi no desitjat.',
+    39 => 'Ubicaci',
+    40 => 'Esquerra',
+    41 => 'Dreta',
+    42 => 'Has d\'ingressar el nombre d\'ordre i el nivell de seguretat pels blocs per defecte',
+    43 => 'Noms a la Pgina d\'Inici',
+    44 => 'Accs Denegat',
+    45 => "Ests intentant accedir a un bloc al que no tens drets d\'accs. Aquest intent s\'ha registrat. Siusplau <a href=\"{$_CONF['site_admin_url']}/block.php\">torna a la pantalla d\'administraci de blocs</a>.",
+    46 => 'Nou Bloc',
+    47 => 'Pgina d\'Inici - Administrador',
+    48 => 'Nom del Bloc',
+    49 => ' (sense espais i ha de ser nic)',
+    50 => 'URL de l\'archiu d\'ajuda',
+    51 => 'inclou http://',
+    52 => 'Si deixes aquest camp en blanc no es mostrar l\'icona d\'ajuda',
+    53 => 'Habilitat',
+    54 => 'guardar',
+    55 => 'cancelar',
+    56 => 'borrar',
+    57 => 'Mou el bloc aball',
+    58 => 'Mou el bloc amunt',
+    59 => 'Mou el bloc a la dreta',
+    60 => 'Mou el bloc a l\'esquerra',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor d\'Esdeveniments',
+    2 => 'Error',
+    3 => 'Ttol',
+    4 => 'URL',
+    5 => 'Data d\'Inici',
+    6 => 'Data de Finalitzaci',
+    7 => 'Lloc',
+    8 => 'Descripci',
+    9 => '(inclou http://)',
+    10 => 'Has de completar tots els camps d\'aquest formulari.',
+    11 => 'Administrador de l\'Esdeveniment',
+    12 => 'Per modificar o borrar un esdeveniment, clica sobre ell a sota. Per crear un Nou Esdeveniment clica sobre Nou Esdeveniment a dalt. Clica sobre [C] per crear una cpia d\'un esdeveniment ja existent.',
+    13 => 'Ttol',
+    14 => 'Data d\'Inici',
+    15 => 'Data de Finalitzaci',
+    16 => 'Accs Denegat',
+    17 => "No tens perms per accedir a aquest Esdeveniment. Tot intent d\'accs ser registrat. Siusplau, torna a <a href=\"{$_CONF['site_admin_url']}/event.php\">la pgina d\'Administraci d\'Esdeveniments</a>.",
+    18 => 'Nou Esdeveniment',
+    19 => 'Pgina d\'Inici - Administrador',
+    20 => 'guardar',
+    21 => 'cancelar',
+    22 => 'borrar',
+    23 => 'Data d\'inici incorrecta.',
+    24 => 'Data de finalitzaci incorrecta.',
+    25 => 'La data de finalitzaci es anterior a la d\'inici.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Noticies Anteriors',
+    2 => 'Noticies Segents',
+    3 => 'Modo',
+    4 => 'Modo d\'enviament',
+    5 => 'Editor de Noticies',
+    6 => 'No hi ha Noticies en el sistema',
+    7 => 'Autor',
+    8 => 'guardar',
+    9 => 'Lectura previa',
+    10 => 'cancelar',
+    11 => 'borrar',
+    12 => 'ID',
+    13 => 'Ttol',
+    14 => 'Secci',
+    15 => 'Data',
+    16 => 'Introducci',
+    17 => 'Text',
+    18 => 'Accessos',
+    19 => 'Comentaris',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Llista de Noticies',
+    23 => 'Per modificar o borrar una Notcia selecciona el numero de Notcia mes avall. Per veure la Notcia selecciona el ttol de la mateixa. Per crear una nova Notcia selecciona \'Enviar Notcia\' ms amunt.',
+    24 => 'L\'ID que has escollit per aquest tema ja est sent utilitzada. Siusplau, utilitza un altre ID.',
+    25 => 'Error when saving story',
+    26 => 'Lectura Previa',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Errors al Pujar Arxius',
+    31 => 'Siusplau omple els camps d\'Autor, Ttol i Text',
+    32 => 'Destacada',
+    33 => 'Noms hi pot haver una Notcia destacada',
+    34 => 'Borrador',
+    35 => 'Si',
+    36 => 'No',
+    37 => 'Ms de',
+    38 => 'Ms en',
+    39 => 'correus electrnics',
+    40 => 'Accs Denegat',
+    41 => "Ests intentant accedir a una Notcia a la que no tens drets d\'accs, per tant, podrs veure la Notcia per no editar-la. Siusplau torna a la <a href=\"{$_CONF['site_admin_url']}/story.php\">pgina d\'administraci</a> quan hagis acabat.",
+    42 => "Ests intentant accedir a una Notcia a la que no tens drets d\'accs. Siusplau torna a la <a href=\"{$_CONF['site_admin_url']}/story.php\">pgina d\'administraci</a>.",
+    43 => 'Nova Notcia',
+    44 => 'Pgina d\'Inici - Administrador',
+    45 => 'Accs',
+    46 => '<b>NOTA:</b> si modifiques aquesta data per una de futura, la Notcia no es publicar dins aquella data. Aix tamb inclou l\'enviament de titulars RDF(Resource Description Framework), la cerca i les estadistiques del lloc.',
+    47 => 'Imatges',
+    48 => 'imatge',
+    49 => 'dre',
+    50 => 'esq',
+    51 => 'Per insertar una imatge a la Notcia has d\'incloure un text amb el format [imageX], [imageX_left] o [imageX_right], on X es el nombre de la imatge dints de la llista. NOTA: noms pots utilitzar les imatges de la llista, si no la Notcia no es podr guardar',
+    52 => 'Borrar',
+    53 => 'no s\'ha utilitzat.  Has d\'incloure aquesta imatge a la Introducci o el Text per poder guardar els canvis',
+    54 => 'Imatges no utilitzades',
+    55 => 'Hi ha hagut els segents errors a l\'intentar guardar la teva Notcia. Siusplau, corregeix els errors abans de guardar.',
+    56 => 'Mostrar icona de Tema',
+    57 => 'Veure imatge sense proporci',
+    58 => 'Gesti de les noticies',
+    59 => 'Opci',
+    60 => 'Habilitat',
+    61 => 'Auto arxiu',
+    62 => 'Auto borrat',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor de Seccions',
+    2 => 'Identificaci (ID)',
+    3 => 'Nom',
+    4 => 'Imatge',
+    5 => '(no utilitzis espais)',
+    6 => 'Al borrar una Secci es borraran totes les teves Noticies i Blocs associats',
+    7 => 'Siusplau completa els camps ID i Nom',
+    8 => 'Administrador de Seccions',
+    9 => 'Per modificar o borrar un tema, apreta sobre el tema. Per crear un tema nou, apreta el bot de Nou Tema a l\'esquerra. Trobarsel teu nivell d\'accs pel tema entre parntesis. L\'asterisc(*) denota el tema  per defecte.',
+    10 => 'Nombre d\'Ordre',
+    11 => 'Notcies/Pgina',
+    12 => 'Accs Denegat',
+    13 => "Ests intentant accedir a una Secci a la que no tens drets d\'accs. Siusplau torna a la <a href=\"{$_CONF['site_admin_url']}/topic.php\">pgina d\'administraci.",
+    14 => 'Mtode d\'Ordenament',
+    15 => 'alfabtic',
+    16 => 'per defecte s',
+    17 => 'Nova Secci',
+    18 => 'Pgina d\'Inici - Administrador',
+    19 => 'guardar',
+    20 => 'cancelar',
+    21 => 'borrar',
+    22 => 'Per defecte',
+    23 => 'converteix-lo en el tema per defecte per a noves collaboracions',
+    24 => '(*)',
+    25 => 'Arxiva el tema',
+    26 => 'converteix-lo en el tema per defecte per a notcies arxivades. Noms es permet un tema.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor d\'Usuaris',
+    2 => 'ID',
+    3 => 'Nom d\'Usuari/a',
+    4 => 'Nom Complet',
+    5 => 'Contrassenya',
+    6 => 'Nivell de Seguretat',
+    7 => 'Direcci de correu electrnic',
+    8 => 'Pgina d\'Inici',
+    9 => '(no utilitzis espais)',
+    10 => ' Siusplau, omple els camps de Nom d\'Usuari/a i direcci de correu electrnic',
+    11 => 'Administrador d\'Usuaris',
+    12 => 'Per modificar o borrar a un/a usuari/a, apreta sobre l\'usuari/a a sota.  Per crear un/a usuari/a nou apreta el bot de Nou Usuari a l\'esquerra. Pots fer cerques senzilles al teclejar parts del nom d\'usuari, direcci de correu electrnic o nom complet (per exemple *son* o *.edu) al formulari de sota..',
+    13 => 'Nivell de seguretat',
+    14 => 'Data d\'Inscripci',
+    15 => 'Nou Usuari',
+    16 => 'Pgina d\'Inici - Administrador',
+    17 => 'Canvia la contrassenya',
+    18 => 'Cancelar',
+    19 => 'Borrar',
+    20 => 'Guardar',
+    21 => 'El Nom d\'Usuari/a proposat ja existeix.',
+    22 => 'Error',
+    23 => 'Importaci Massiva',
+    24 => 'Importaci massiva d\'Usuaris',
+    25 => "Pots importar una llista d\'Usuaris/es a {$_CONF['site_name']}. L\'arxiu amb la llista d\'usuaris/es ha de tenir un registre per linea i els camps separats per TAB (tabulador). Els camps han d\'estar en el segent ordre: Nom Complet, Nom d\'Usuari, Direcci de Correu electrnic. A cada usuari afegit se li enviar per correu electrnic una contrassenya generada a l\'atzar, que podrn canviar a l\'ingressar al lloc. Siusplau, comprova b l\'arxiu d\'importaci ja que els errors trovats poden arrivar a necessitar arranjaments manuals.",
+    26 => 'Cerca',
+    27 => 'Limita els resultats',
+    28 => 'Marca la casella per borrar aquesta imatge',
+    29 => 'Ruta',
+    30 => 'Importaci',
+    31 => 'Nous Usuaris',
+    32 => 'Procs finalitzat. S\'han importat %d i hi ha hagut %d errors',
+    33 => 'enviar',
+    34 => 'Error: Has d\'especificar l\'arxiu que vols pujar.',
+    35 => 'ltim accs',
+    36 => '(mai)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Aprovar',
+    2 => 'Borrar',
+    3 => 'Editar',
+    4 => 'Perfil',
+    10 => 'Ttol',
+    11 => 'Data d\'Inici',
+    12 => 'URL',
+    13 => 'Categoria',
+    14 => 'Data',
+    15 => 'Tema',
+    16 => 'Nom de l\'usuari/a',
+    17 => 'Nom complet',
+    18 => 'correu electrnic',
+    34 => 'Pgina d\'administraci',
+    35 => 'Enviaments de Noticies',
+    36 => 'Enviaments d\'Enllaos',
+    37 => 'Enviaments d\'Esdeveniments',
+    38 => 'Enviar',
+    39 => 'No hi ha enviaments a moderar en aquest moment',
+    40 => 'Enviaments de l\'usuari/a'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Diumenge',
+    2 => 'Dilluns',
+    3 => 'Dimarts',
+    4 => 'Dimecres',
+    5 => 'Dijous',
+    6 => 'Divendres',
+    7 => 'Dissabte',
+    8 => 'Afegeix un esdeveniment',
+    9 => 'Esdeveniment de %s',
+    10 => 'Esdeveniments per',
+    11 => 'Calendari Mestre',
+    12 => 'El meu Calendari',
+    13 => 'Gener',
+    14 => 'Febrer',
+    15 => 'Mar',
+    16 => 'Abril',
+    17 => 'Maig',
+    18 => 'Juny',
+    19 => 'Juliol',
+    20 => 'Agost',
+    21 => 'Setembre',
+    22 => 'Octubre',
+    23 => 'Novembre',
+    24 => 'Desembre',
+    25 => 'Tornar a ',
+    26 => 'Tot el dia',
+    27 => 'Setmana',
+    28 => 'Calendari Personal per',
+    29 => 'Calendari Pblic',
+    30 => 'borra l\'esdeveniment',
+    31 => 'Afegeix',
+    32 => 'Esdeveniment',
+    33 => 'Data',
+    34 => 'Hora',
+    35 => 'Afegit rpid',
+    36 => 'Enva',
+    37 => 'Disculpa, l\'opci de calendari personal no es troba habilitada en aquest lloc',
+    38 => 'Editor Personal d\'Esdeveniments',
+    39 => 'Dia',
+    40 => 'Setmana',
+    41 => 'Mes'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']}Utilidad de correo electrnico",
+    2 => 'De',
+    3 => 'Respondre a',
+    4 => 'Ttol',
+    5 => 'Missatge',
+    6 => 'Enviar a:',
+    7 => 'Tots els usuaris',
+    8 => 'Administrador',
+    9 => 'Opcions',
+    10 => 'HTML',
+    11 => 'Missatge Urgent!',
+    12 => 'Enviament',
+    13 => 'Reinici',
+    14 => 'Ignorar les preferencies de l\'usuari/a',
+    15 => 'Error a l\'enviar a: ',
+    16 => 'S\'ha enviat satisfactoriament a: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar un altre missatge</a>",
+    18 => 'Per',
+    19 => 'NOTA: si vols enviar un missatge a tots els membres del lloc, selecciona el grup Logged-In Users a la llista.',
+    20 => "S\'han enviat <successcount> missatges satisfactoriament i <failcount> han fallat.  Si vols, els detalls de cada enviament figuren a sota. Tamb pots <a href=\"{$_CONF['site_admin_url']}/mail.php\">enviar un altre missatge</a> o tornar a <a href=\"{$_CONF['site_admin_url']}/moderation.php\">la pgina d\'administraci</a>.",
+    21 => 'Fallats',
+    22 => 'Exitosos',
+    23 => 'No hi ha hagut enviaments fallits',
+    24 => 'No hi ha hagut enviaments satisfactoris',
+    25 => '-- Selecciona el Grup --',
+    26 => 'Siusplau, omple tots els camps del formulari i selecciona un grup d\'usuaris de la llista desplegable.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'La installaci de Plug-in(s) pot malmetre la teva installaci de Geeklog i, possiblement, el teu sistema. Es important que noms instalis Plug-in(s) obtinguts de <a href="http://www.geeklog.net" target="_blank">Geeklog</a> ja que han sigut comprobats en varis entorns. Es tamb important que entenguis que la installaci del Plug-in necessita la execuci d\'instruccions del sistema que poden portar problemes de seguretat. Tot i aquesta advertencia, no garantitzem l\'xit de la installaci del Plug-in ni ens fem responsables per qualsevol dany causat durant la installaci (o posterior a la mateixa). En altres paraules, installa el Plug-in sota la teca responsabilitat. Les instruccions particulars d\'installaci venen dints de cada Plug-in.',
+    2 => 'Advertncia de la installaci del Plug-in',
+    3 => 'Formulari d\'instalaci del Plug-in',
+    4 => 'Arxiu del Plug-in',
+    5 => 'Llistat de Plug-in(s)',
+    6 => 'Advertencia: El Plug-in ja est installat!',
+    7 => 'El Plug-in que intentes installar ja existeix. Siusplau borra el Plug-in abans de reinstalar-lo.',
+    8 => 'Ha fallat la comprobaci de compatibilitat del Plug-in',
+    9 => 'Aquest Plug-in requereix una versi ms nova de Geeklog. Pots obtenir una cpia actualitzada de <a href=http://www.geeklog.net>Geeklog</a> o installar una altre versi del Plug-in.',
+    10 => '<br><b>No hi ha Plug-in(s) installats.</b><br><br>',
+    11 => 'Per modificar o borrar un Plug-in selecciona el numero a l\'esquerra del mateix. Per accedir a la pgina dels seus creadors seleccioni en el ttol del Plug-in. Per installar un nou Plug-in selecciona \'Nou Plug-in\' ms amunt.',
+    12 => 'no s\'ha donat un nom de plugin a la funci plugineditor()',
+    13 => 'Editor de Plugins',
+    14 => 'Nou Plug-in',
+    15 => 'Pgina d\'Inici - Administrador',
+    16 => 'Nom del Plug-in',
+    17 => 'Versi',
+    18 => 'Versi de Geeklog',
+    19 => 'Habilitat',
+    20 => 'Si',
+    21 => 'No',
+    22 => 'Installaci',
+    23 => 'Guardar',
+    24 => 'Cancelar',
+    25 => 'Borrar',
+    26 => 'Nom',
+    27 => 'Portada',
+    28 => 'Versi',
+    29 => 'Versi de Geeklog',
+    30 => 'Vols borrar el Plug-in?',
+    31 => 'Ests segur/a de que vols esborrar aquest Plug-in? Al fer-ho borrars tots els arxius, estructures i dades associades. Si ests segur/a selecciona "Borrar" al formulari de sota.',
+    32 => '<p><b>Error, l\'etiqueta AutoLink no t el format correcte</b></p>',
+    33 => 'Versi del codi',
+    34 => 'Actualitzaci',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Creaci de la transmissi',
+    2 => 'guardar',
+    3 => 'borrar',
+    4 => 'cancelar',
+    10 => 'Sindicaci del contingut',
+    11 => 'Transmissi nova',
+    12 => 'Seu de l\'Administrador',
+    13 => 'Per modificar o borrar una transmissi, apreta sobre el ttol de la transmissi a sota. Per crear una transmissi nova, apreta sobre Transmissi nova a dalt.',
+    14 => 'Ttol',
+    15 => 'Tecleja',
+    16 => 'Nom de l\'arxiu',
+    17 => 'Format',
+    18 => 'ltima actualitzaci',
+    19 => 'Habilitat',
+    20 => 'Si',
+    21 => 'No',
+    22 => '<i>(no hi ha transmissions)</i>',
+    23 => 'tots els Temes',
+    24 => 'Editor de transmissions',
+    25 => 'Ttol de la transmissi',
+    26 => 'Lmit',
+    27 => 'Duraci de les noticies',
+    28 => '(0 = sense text, 1 = text complet, altres = limita a aquest nombre de carcters.)',
+    29 => 'Descripci',
+    30 => 'Actualitzaci ms recent',
+    31 => 'Conjunt de carcters',
+    32 => 'Idioma',
+    33 => 'Continguts',
+    34 => 'Entrades',
+    35 => 'Hores',
+    36 => 'Selecciona el tipus de transmissi',
+    37 => 'Tens com a mnim un plugin installat que afavoreix la sindicaci de contingut. A sota haurs de seleccionar si vols una transmissi de Geeklog o una transmissi d\'un dels plugins.',
+    38 => 'Error: Falten camps',
+    39 => 'Siusplau, omple el Ttol, Descripci i Nom de l\'arxiu de la transmissi.',
+    40 => 'Siusplau inclueix el nombre d\'entrades o nombre d\'hores.',
+    41 => 'Enllaos',
+    42 => 'Esdeveniments',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "La teva contrassenya s\'ha enviat per correu electrnic i arribar d\'aqu un moment. Siusplau segueix les indicacions del missatge. Gracies per utilitzar {$_CONF['site_name']}",
+    2 => "Gracies per enviar la teva Notcia a {$_CONF['site_name']}. La Notcia es troba en procs d\'aprovaci. De ser aprovada, podr ser llegida per tots els visitants del lloc.",
+    3 => "Gracies per enviar el teu Enlla a {$_CONF['site_name']}. L\'Enlla es troba en procs d\'aprovaci. De ser aprovat, podr ser vist per tots els visitants del lloc.",
+    4 => "Gracies per enviar el teu Esdeveniment a {$_CONF['site_name']}. L\'Esdeveniment es troba en procs d\'aprovaci. De ser aprovat, podr ser vist per tots els visitants del lloc.",
+    5 => 'La informaci de la teva conta s\'ha guardat satisfactoriament.',
+    6 => 'Les teves preferencies s\'han guardat satisfactoriament.',
+    7 => 'Les teves preferencies per a Comentaris han sigut guardades satisfactoriament.',
+    8 => 'T\'has desconectat satisfactoriament.',
+    9 => 'La teva Notcia s\'ha guardat satisfactoriament.',
+    10 => 'La Notcia s\'ha borrat satisfactoriament.',
+    11 => 'El teu Bloc s\'ha guardat satisfactoriament.',
+    12 => 'El Bloc s\'ha borrat satisfactoriament.',
+    13 => 'La teva Secci s\'ha guardat satisfactoriament.',
+    14 => 'La Secci juntament amb totes les teves Noticies i Blocs s\'han borrat satisfactoriament.',
+    15 => 'El teu enlla s\'ha guardat satisfactoriament.',
+    16 => 'L\'enlla s\'ha borrat satisfactoriament.',
+    17 => 'El teu Esdeveniment s\'ha guardat satisfactoriament.',
+    18 => 'L\'Esdeveniment s\'ha borrat satisfactoriament.',
+    19 => 'La teva Enquesta s\'ha guardat satisfactoriament.',
+    20 => 'L\'Enquesta s\'ha borrat satisfactoriament.',
+    21 => 'El Nou Usuari s\'ha guardat satisfactoriament.',
+    22 => 'L\'Usuari s\'ha borrat satisfactoriament',
+    23 => 'Error al guardar l\'Esdeveniment al teu Calendari. No ha sigut processat l\'ID.',
+    24 => 'L\'Esdeveniment s\'ha guardat al teu Calendari',
+    25 => 'No pots accedir al teu Calendari Personal abans de conectar-te com a usuari',
+    26 => 'L\'Esdeveniment s\'ha borrat del teu Calendari Personal',
+    27 => 'Missatge enviat satisfactoriament.',
+    28 => 'El Plug-in s\'ha guardat satisfactoriament',
+    29 => 'Disculpa, els Calendaris Personals no estan habilitats en aquest lloc',
+    30 => 'Accs Denegat',
+    31 => 'Disculpa, no tens accs a la pgina d\'administraci de Noticies. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    32 => 'Disculpa, no tens accs a la pgina d\'administraci de Seccions. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    33 => 'Disculpa, no tens accs a la pgina d\'administraci de Blocs. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    34 => 'Disculpa, no tens accs a la pgina d\'administraci d\'Enllaos. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    35 => 'Disculpa, no tens accs a la pgina d\'administraci d\'Esdeveniments. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    36 => 'Disculpa, no tens accs a la pgina d\'administraci d\'Enquestes. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    37 => 'Disculpa, no tens accs a la pgina d\'administraci d\'Usuaris. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    38 => 'Disculpa, no tens accs a la pgina d\'administraci de Plug-in(s). Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    39 => 'Disculpa, no tens accs a la pgina d\'administraci de Correu electrnic. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    40 => 'Missatge del Sistema',
+    41 => 'Disculpa, no tens accs a la pgina de Substituci de Paraules. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    42 => 'La Paraula s\'ha guardat satisfactoriament.',
+    43 => 'La Paraula s\'ha borrat satisfactoriament.',
+    44 => 'El Plug-In s\'ha instalat satisfactoriament.',
+    45 => 'El Plug-In s\'ha borrat satisfactoriament.',
+    46 => 'Disculpa, no tens accs a l\'eina de cpia de seguretat de la base de dades. Aclarem que tot accs sense autoritzaci queda registrat al servidor.',
+    47 => 'Aquesta funci est disponible sota *nix. Si ests utilitzant *nix com a sistema operatiu, la teva cpia de visites (cache) s\'ha netejat satisfactoriament. Si ests sota Windows, haurs de cercar els arxius adodb_*.php i borrar-los manualment.',
+    48 => "Gracies per registrar-te com a membre a {$_CONF['site_name']}. El nostre equip comprobar la teva solicitut. Si es aprovada, se t\'enviar la teva Contrassenya a la direcci correu electrnico que ens has proporcionat.",
+    49 => 'El teu grup s\'ha guardat satisfactoriament.',
+    50 => 'El grup s\'ha borrat satisfactoriament.',
+    51 => 'Aquest nom d\'usuari/a ja est en s. Siusplau, escolleix-ne un altre.',
+    52 => 'La direcci facilitada no sembla una direcci vlida de correu electrnic.',
+    53 => 'La teva nova contrassenya s\'ha acceptat. Siusplau, utilitza la nova contrassenya que apareix a sota per ingressar de nou.',
+    54 => 'La teva petici de nova contrassenya ha caducat. Siusplau, torna a provar-ho a sota.',
+    55 => 'El sistema t\'ha enviat un correu electrnic i t\'arrivar en breu. Siusplau, segueix les instruccions del missatge per crear una nova contrassenya per la teva conta.',
+    56 => 'La direcci de correu electrnic facilitada ja est en s en una altre conta.',
+    57 => 'La teva conta s\'ha borrat satisfactoriament.',
+    58 => 'La teva transmissi s\'ha guardat satisfactoriament.',
+    59 => 'La teva transmissi s\'ha borrat satisfactoriament.',
+    60 => 'El plugin s\'ha actualitzat satisfactoriament',
+    61 => 'Plugin %s: marcador de missatge desconegut',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Accs',
+    'ownerroot' => 'Propietari/Arrel',
+    'group' => 'Grup',
+    'readonly' => 'Noms-Lectura',
+    'accessrights' => 'Drets d\'accs',
+    'owner' => 'Propietari',
+    'grantgrouplabel' => 'Estableix els drets del Grup',
+    'permmsg' => 'NOTA: membres sn tots els membres conectats i els usuaris annims que estiguin al lloc.',
+    'securitygroups' => 'Grups de Seguretat',
+    'editrootmsg' => "Encara que siguis un/a Administrador/a d\'Usuaris/es, no pots editar un usuari d\'arrel sense abans haber-te donat d\'alta com usuari d\'arrel.  Pots editar a tots els dems usuaris excepte els usuaris d\'arrel. Siusplau, pren nota que qualsevol intent d\'editar illegalment als usuaris d\'arrel quedar registrat. Siusplau torna a <a href=\"{$_CONF['site_admin_url']}/users.php\">la pgina d\'Administraci d\'usuaris</a>.",
+    'securitygroupsmsg' => 'Marca les caselles dels grups als que vols que pertanyi l\'usuari.',
+    'groupeditor' => 'Editor de Grup',
+    'description' => 'Descripci',
+    'name' => 'Nom',
+    'rights' => 'Drets',
+    'missingfields' => 'Camps que falten',
+    'missingfieldsmsg' => 'Has d\'ingressar un nom i una descripci pel Grup.',
+    'groupmanager' => 'Administrador de Grups',
+    'newgroupmsg' => 'Per modificar o borrar un grupo selecciona el grup aqu sota. Per crear un grup selecciona \'Nou Grup\' aqu dalt. Pensa que els Grups del Sistema no es poden borrar.',
+    'groupname' => 'Nom del Grup',
+    'coregroup' => 'Grup del Sistema? ',
+    'yes' => 'Si',
+    'no' => 'No',
+    'corerightsdescr' => "Aquest grup es un Grup de Sistema de {$_CONF['site_name']}, i per tant els seus drts no es poden editar. A continuaci es mostra una llista no editable dels drets d\'accs d\'aquest grup.",
+    'groupmsg' => 'Els Grups de Segurtat d\'aquest lloc sn jerrquics. A l\'afegir aquest grup a qualsevol dels de sota li estar donant els mateixos drets que tinguin aquests grups. De ser possible, es recomana utilitzar els grups existents per donar els drets a un nou grup. Si thas de modificar els drets del grup, pots seleccionar-los a la secci anomenada \'Drets\'. Per afegir aquest grup a qualsevol dels de sota simplement marca els grups que vulguis.',
+    'coregroupmsg' => "Aquest grup es un Grup de Sistema de {$_CONF['site_name']}, per aix els grups que pertanyin a aquest grup no podrn ser editats. A continuaci es mostra un llistat (no editable) dels grups als quals pertany aquest grup.",
+    'rightsdescr' => 'El dret d\'accs d\'un grupo a algun dels drets que s\'especifiquen a sota es poden donar directament al grup O a un grup diferent del que forma part aquest grup.  Els que veus a sota sense la casella marcada son els drets que s\'han otorgat a aquest grup perque pertany a un altre amb aquest dret. Els drets amb les caselles a sota son els drets que es poden otorgar directament a aquest grup.',
+    'lock' => 'Bloqueig',
+    'members' => 'Membres',
+    'anonymous' => 'Annim',
+    'permissions' => 'Permisos',
+    'permissionskey' => 'R = lectura, E = edici, els permisos d\'edici impliquen permisos de lectura',
+    'edit' => 'Editar',
+    'none' => 'Cap',
+    'accessdenied' => 'Accs Denegat',
+    'storydenialmsg' => "No tens accs per veure aquesta Notcia. Aix pot ser perqu no ets membre de {$_CONF['site_name']}. Siusplau <a href=users.php?mode=new>entra entra com a membre</a> de {$_CONF['site_name']} per tenir accs.",
+    'eventdenialmsg' => "No tens accs per veure aquest Esdeveniment. Aix pot ser perqu no ets membre de {$_CONF['site_name']}. Siusplau <a href=users.php?mode=new>entra com a membre</a> de {$_CONF['site_name']} per tenir accs.",
+    'nogroupsforcoregroup' => 'Aquest grup no pertany a cap dels altres grups',
+    'grouphasnorights' => 'Aquest grup no t accs a les funcions d\'administraci',
+    'newgroup' => 'Nou Grupo',
+    'adminhome' => 'Pgina d\'Administraci',
+    'save' => 'Guardar',
+    'cancel' => 'Cancelar',
+    'delete' => 'Borrar',
+    'canteditroot' => 'Has intentat editar el grup Root (Arrel) per no pertanys al grup Root, per tant se t\'ha denegat l\'accs.  Siusplau, contacta amb l\'administrador/a del sistema si creus que es tracta d\'un error',
+    'listusers' => 'Llistat d\'Usuaris',
+    'listthem' => 'llistat',
+    'usersingroup' => 'Usuaris al grup %s',
+    'usergroupadmin' => 'Administraci del grup d\'usuaris',
+    'add' => 'Afegir',
+    'remove' => 'Borrar',
+    'availmembers' => 'Membres disponibles',
+    'groupmembers' => 'Membres del grup',
+    'canteditgroup' => 'Per editar aquest grup, has de ser un membre del grup. Siusplau, contacta amb l\'administrador del sistema si creus que aix es un error.',
+    'cantlistgroup' => 'Per veure els membres d\'aquest grup, n\'has de ser membre. Siusplau contacta amb l\'administrador del sistema si creus que aix es un error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'ltimes 10 cpies de seguretat',
+    'do_backup' => 'Fer una cpia de seguretat',
+    'backup_successful' => 'La cpia de seguretat de la base de dades s\'ha realitzat satisfactoriament.',
+    'db_explanation' => 'Per crear una cpia de seguretat del sistema utilitza el bot de sota',
+    'not_found' => "Ruta incorrecta o la utilitat mysqldump no es pot executar.<br>Comprova la definici de <strong>\$_DB_mysqldump_path</strong> al config.php.<br>La variable est definida actualment com: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Error de la cpia de seguretat: La grandria era de 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} no existeix o no es una ruta",
+    'no_access' => "ERROR: No es pot accedir al directori {$_CONF['backup_path']}.",
+    'backup_file' => 'Arcxiu de copies de seguretat',
+    'size' => 'Grandria',
+    'bytes' => 'Bytes',
+    'total_number' => 'Nombre total de copies de seguretat: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Portada',
+    2 => 'Contacte',
+    3 => 'Collaboracions',
+    4 => 'Enllaos',
+    5 => 'Enquestes',
+    6 => 'Calendari',
+    7 => 'Estadstiques',
+    8 => 'Personalitzaci',
+    9 => 'Cerca',
+    10 => 'Cerca avanada',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Error 404',
+    2 => 'Vaja, he buscat per tot arreu, per no puc trobar <b>%s</b>.',
+    3 => "<p>Ho sentim, per el fitxer que demanes no existeix. Siusplau, consulta la <a href=\"{$_CONF['site_url']}\">pgina principal</a> o la <a href=\"{$_CONF['site_url']}/search.php\">pgina de cerca</a> per verure si pots trobar el que has perdut."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'es necessita ingressar',
+    2 => 'Ho sento, per accedir a aquesta rea has d\'estar verificat/da com usuari/a.',
+    3 => 'ingressa',
+    4 => 'Usuari/a nou/va'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'La funci PDF est inhabilitada',
+    2 => 'El document facilitat no s\'ha reproduit. S\'ha rebut el document per no s\'ha processat. Siusplau, assegura\'t de que noms s\'enviin documents en format html amb l\'estndar xHTML. Siusplau, pensa que els documents molt complexes en html s possible que no es reprodueixin correctament o que no apareguin. El document resultant del teu intent t 0 bytes d\'extensi, i ha sigut borrat. Si no ests segur/a de que el teu document es reprodueixi b, siusplau, torna a enviar-lo.',
+    3 => 'Error desconegut durant la generaci de PDF',
+    4 => 'No has donat dades de la pgina o vols utilitzar l\'eina de generaci ad-hoc de PDF. Si creus que ests rebent aquesta pgina per error, contacta amb l\'administrador del sistema. Sin, pots utilitzar el formulari que hi ha a sota per generar PDFs.',
+    5 => 'Cargant el teu document.',
+    6 => 'Siusplau, espera mentres es carrega el teu document.',
+    7 => 'Pots apretar el bot dret del ratol sobre el bot de sota i escollir \'save target...\' o \'save link location...\' per guardar una cpia del teu document.',
+    8 => 'La ruta donada per l\'arxiu de configuraci a l\'HTMLDoc binari no s vlida o aquest sistema no el pot executar.  Siusplau contacta amb l\'administrador del sistema si aquest problema continua.',
+    9 => 'Creador de PDF',
+    10 => 'Aquesta es l\'eina ad-hoc de creaci de PDF. Intentar convertir qualsevol URL que li donguis en un PDF.  Siusplau, pensa que algunes pgines de la xarxa (Web) no es generarn correctament amb aquesta funci.  Aix s una limitaci de l\'eina generadora d\'HTMLDoc PDF i aquests errors no haurien de ser enviats a l\'administrador d\'aquest lloc',
+    11 => 'URL',
+    12 => 'Crea un PDF!',
+    13 => 'La configuraci PHP en aquest servidor no permet que les URL s\'utilitzin amb la instrucci fopen.  L\'administrador del sistema ha d\'editar l\'arxiu php.ini i que estigui conectat allow_url_fopen',
+    14 => 'El PDF que has solicitat o no existeix o has intentat accedir a un arxiu ilegalment.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/catalan_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/catalan_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/catalan_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/catalan_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1506 @@
+﻿<?php
+
+###############################################################################
+# This is the Spanish language page for GeekLog!
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Autor:',
+    2 => 'lectura de l\'artícle complet',
+    3 => 'comentaris',
+    4 => 'Edició',
+    5 => 'Vota',
+    6 => 'Resultats',
+    7 => 'Resultats de l\'enquesta',
+    8 => 'vots',
+    9 => 'Funcions de l\'Administrador/a:',
+    10 => 'Propostes',
+    11 => 'Notícies',
+    12 => 'Blocs',
+    13 => 'Seccions',
+    14 => 'Enllaços',
+    15 => 'Esdeveniments',
+    16 => 'Enquestes',
+    17 => 'Usuaris/es',
+    18 => 'Cerca SQL',
+    19 => 'Sortida',
+    20 => 'Informació de l\'usuari/a:',
+    21 => 'Nom de l\'usuari/a',
+    22 => 'Identitat (ID) de l\'usuari/a',
+    23 => 'Nivell de Seguretat',
+    24 => 'Anònim',
+    25 => 'Respondre',
+    26 => 'Els següents comentaris són de la persona que els hagi enviat. Aquest lloc no es fa responsable de les opinions expresades pels participants dels fòrums i seccions de comentaris, i el fet de publicar les mateixes no significa que s\'estigui d\'acord amb elles.',
+    27 => 'Comentari més recent',
+    28 => 'Borrar',
+    29 => 'No hi ha comentaris dels usuaris.',
+    30 => 'Noticies anteriors',
+    31 => 'Etiquetes HTML permeses:',
+    32 => 'Error, usuari invàlid',
+    33 => 'Error, no ha sigut possible escriure el registre',
+    34 => 'Error',
+    35 => 'Sortir',
+    36 => 'sobre',
+    37 => 'No hi ha noticies de l\'usuari/a',
+    38 => 'Sindicació del contingut',
+    39 => 'Actualització',
+    40 => 'Tens <tt>register_globals = Off</tt> al teu <tt>php.ini</tt>. No obstant, Geeklog requereix que <tt>register_globals</tt> estigui <strong>on</strong>. Abans de continuar, siusplau cambia-ho a <strong>on</strong> i reengega el teu servidor web.',
+    41 => 'Usuaris invitats',
+    42 => 'Escrit per:',
+    43 => 'Respondre a',
+    44 => 'Torna',
+    45 => 'Número d\'Error MySQL',
+    46 => 'Missatge d\'Error MySQL',
+    47 => 'Funcions de l\'usuari/a',
+    48 => 'La meva conta',
+    49 => 'Les meves Preferències',
+    50 => 'Error en una frase SQL',
+    51 => 'ajuda',
+    52 => 'Nuevo',
+    53 => 'Secció d\'Administració',
+    54 => 'No s\'ha pogut obrir l\'arxiu.',
+    55 => 'Error en',
+    56 => 'Vota',
+    57 => 'Contrassenya',
+    58 => 'Identificació',
+    59 => "¿Encara no tens una conta? <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Inscríu-te</a>",
+    60 => 'Afegeix un comentari',
+    61 => 'Crea una conta nova',
+    62 => 'paraules',
+    63 => 'Preferències de Notícies',
+    64 => 'Envia-la a un amic o amiga',
+    65 => 'Veure la versió per imprimir',
+    66 => 'El meu Calendari',
+    67 => 'Benvingut/da a ',
+    68 => 'Pàgina Inicial',
+    69 => 'contacte',
+    70 => 'cercar',
+    71 => 'envia la notícia',
+    72 => 'enllaços a altres webs',
+    73 => 'enquestes anteriors',
+    74 => 'calendari',
+    75 => 'cerca avançada',
+    76 => 'estadístiques del lloc',
+    77 => 'Plugins',
+    78 => 'Propers Esdeveniments',
+    79 => 'Novetats',
+    80 => 'noticies',
+    81 => 'noticia',
+    82 => 'hores',
+    83 => 'COMENTARIS',
+    84 => 'ENLLAÇOS',
+    85 => 'últimes 48 hores',
+    86 => 'No hi ha comentaris nous',
+    87 => 'últimes 2 setmanes',
+    88 => 'No hi ha enllaços nous',
+    89 => 'No hi ha propers esdeveniments',
+    90 => 'Pàgina Inicial',
+    91 => 'Aquesta plana va ser creada en',
+    92 => 'segons',
+    93 => 'Drets d\'autor',
+    94 => 'Totos les marques i drets en aquesta plana són dels seus respectius propietaris.',
+    95 => 'Una altra web feta amb',
+    96 => 'Grups',
+    97 => 'Llista de Paraules',
+    98 => 'Plug-ins',
+    99 => 'NOTICIES',
+    100 => 'No hi ha noticies noves',
+    101 => 'Els meus Esdeveniments',
+    102 => 'Esdeveniments del lloc',
+    103 => 'Copies de seguretat de la base de dades',
+    104 => 'per',
+    105 => 'Usuaris del Correu',
+    106 => 'Lectures',
+    107 => 'Comprobació de la versió de GL',
+    108 => 'Neteja la còpia de visites (Caché)',
+    109 => 'Denúncia els abusos',
+    110 => 'Denúncia aquest missatge a l\'administrador d\'aquest lloc',
+    111 => 'Veure la versió PDF',
+    112 => 'Usuaris inscrits',
+    113 => 'Documentació',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendari d\'Esdeveniments',
+    2 => 'Disculpa, no hi ha esdeveniments a mostrar.',
+    3 => 'Quan',
+    4 => 'On',
+    5 => 'Descripció',
+    6 => 'Afegeix un esdeveniment',
+    7 => 'Pròxims esdeveniments',
+    8 => 'A l\'afegir aquest esdeveniment al calendari podràs veure rapidament els esdeveniments que t\'interessin. Per fer-ho escull "El meu Calendari" a l\'àrea de Funcions de l\'usuari/a.',
+    9 => 'Afegir a "El meu Calendari"',
+    10 => 'Treure de "El meu Calendari"',
+    11 => "Afegint l\'Esdeveniment al calendari de {$_USER['username']}",
+    12 => 'Esdeveniment',
+    13 => 'Comença',
+    14 => 'Acaba',
+    15 => 'Tornar al Calendari'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Afegeix un Comentari',
+    2 => 'Tipo d\'enviament',
+    3 => 'Sortida',
+    4 => 'Crea una conta',
+    5 => 'Nom de l\'usuari/a',
+    6 => 'Aquest lloc requereix que tinguis una conta per a poder enviar un comentari. Si ja la tens, introdueix el nom d\'usuari i la contrassenya. Si no tens una conta, pots crear-ne una de nova al formulari de sota',
+    7 => 'El teu últim comentari va ser fa ',
+    8 => " segons. Aquest lloc requereix com a mínim {$_CONF['commentspeedlimit']} segons entre comentari i comentari",
+    9 => 'Comentari',
+    10 => 'Envia la denúncia',
+    11 => 'Envia el comentari',
+    12 => 'Siusplau completa el Títol i Comentari, ja que són dades necessaries per enviar un comentari.',
+    13 => 'La teva Informació',
+    14 => 'Lectura Prèvia',
+    15 => 'Denúncia aquest missatge',
+    16 => 'Títol',
+    17 => 'Error',
+    18 => 'Coses Importants',
+    19 => 'Siusplau, intenta mantindre el tema de la noticia.',
+    20 => 'Intenta respondre als comentaris dels demés en lloc de començar una nova discussió.',
+    21 => 'Llegeix els comentaris enviats per evitar comentaris duplicats.',
+    22 => 'Utilitza un títol clar que descrigui el contingut del teu missatge.',
+    23 => 'La teva direcció de correu electrònic NO serà divulgada.',
+    24 => 'Usuari Anònim',
+    25 => '¿Estas segur/a de que vols denunciar aquest missatge a l\'administrador del lloc?',
+    26 => '%s ha denunciat el següent comentari abusiu:',
+    27 => 'Denúncia d\'abús'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Perfil de l\'usuari/a per',
+    2 => 'Nom de l\'usuari/a',
+    3 => 'Nom Complet',
+    4 => 'Contrassenya',
+    5 => 'Correu electrònic',
+    6 => 'Pàgina personal',
+    7 => 'Biografía',
+    8 => 'Clau PGP',
+    9 => 'Guardar la Informació',
+    10 => 'Últims 10 comentaris',
+    11 => 'No hi ha comentaris',
+    12 => 'Preferències de l\'usuari/a per',
+    13 => 'Enviar un resum cada nit per correu electrònic',
+    14 => 'Aquesta contrassenya es genera a l\'atzar. Es recomana cambiar la contrassenya el més aviat possible. Per cambiar la contrassenya conecta al lloc amb el teu nom d\'usuari.',
+    15 => "La teva conta a {$_CONF['site_name']} s\'ha creat satisfactoriament. Per poder utilitzar-la tens que ingressar utilizant les dades donades més aball. Guarda aquest missatge per futures referències.",
+    16 => 'Informació de la teva conta',
+    17 => 'La conta no existeix',
+    18 => 'La direcció de correu electrònic ingressada no sembla ser vàlida.',
+    19 => 'l\'usuari/a i la direcció de correu electrònic ja existeixen',
+    20 => 'La direcció de correu electrònic ingressada no sembla ser vàlida.',
+    21 => 'Error',
+    22 => "Inscríu-te a {$_CONF['site_name']}!",
+    23 => "La creació d\'una conta et donarà les ventatges dels usuaris de {$_CONF['site_name']} i et permetrà enviar noticies, comentaris, etc. Si no tens una conta només ho podràs fer anònimament. Volem remarcar que la teva direcció de correu electrònic <b><i>mai</i></b> serà publicada en aquest lloc.",
+    24 => 'La Contrassenya s\'enviarà a la direcció de correu electrònic que ingressis.',
+    25 => '¿No recordes la teva contrassenya?',
+    26 => 'Ingressa <em>o</em> el teu nom d\'usuari <em>o</em> la direcció de correu electrònic que vas utilitzar per inscriure\'t i clica Enviar Contrassenya. T\'arrivaran per correu electrònic les instruccions per crear una nova contrassenya a la direcció que figura a l\'arxiu,.',
+    27 => '¡Inscriu-te ara!',
+    28 => 'Enviar la contrassenya per correu electrònic',
+    29 => 'desconectat/da de',
+    30 => 'conectat/da a',
+    31 => 'La funció que has escollit requereix que estiguis connectat/da',
+    32 => 'Firma',
+    33 => 'No es mostrarà publicament',
+    34 => 'Aquest es el teu nom de veritat',
+    35 => 'Ingressa la nova contrassenya per cambiar-la',
+    36 => 'Comença amb http://',
+    37 => 'S\'aplica als teus comentaris',
+    38 => '¡Tot sobre Tu! Tothomm podrà llegir això.',
+    39 => 'La teva clau pública de PGP per compartir',
+    40 => 'Sense icones de seccions',
+    41 => 'Intenció de moderar',
+    42 => 'Format de la data',
+    43 => 'Quantitat màxima de noticies',
+    44 => 'Sense requadres',
+    45 => 'Mostrar las preferencies de',
+    46 => 'Elements exclosos de',
+    47 => 'Configuració de Noticies per',
+    48 => 'Seccions',
+    49 => 'Sense icones en les noticies',
+    50 => 'No seleccionis això si no estàs interessat',
+    51 => 'Només les noticies noves',
+    52 => 'El valor per defecte es',
+    53 => 'Recepció cada nit les noticies del dia',
+    54 => 'Selecciona les Seccions i Autors que no vols veure.',
+    55 => 'Si no en selecciones cap significa que vols la sel·lecció per defecte. De seleccionar-ne alguna, selecciona totes les del teu interès ja que les opcions per defecte ja no seràn tingudes en compte. Les opcions per defecte es mostren resaltades.',
+    56 => 'Autors',
+    57 => 'Mode de Presentació',
+    58 => 'Ordre de classificació',
+    59 => 'Límit per Comentari',
+    60 => 'Com vols veure els comentaris?',
+    61 => 'Primer els més antics o els més recents?',
+    62 => 'El valor per defecte es 100',
+    63 => "Gracies per utilitzar {$_CONF['site_name']}. T\'hem enviat la teva contrassenya per correu electrònic i arribarà en uns moments. Siusplau segueix les instruccions del missatge.",
+    64 => 'Preferències pels comentaris de',
+    65 => 'Intenta reconectar-te una altre vegada',
+    66 => "Les dades ingressades no son vàlides. Intenta reconectar a sota. ¿Ets un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">usuari/a nou/va</a>?",
+    67 => 'Membre desde',
+    68 => 'Recorda\'m durant',
+    69 => '¿Quanta estona hem de mantenir el teu nom d\'usuari/a en actiu després de conectar?',
+    70 => "Personalitza l\'aparença i el contingut de {$_CONF['site_name']}",
+    71 => "Una de les grans virtuts de {$_CONF['site_name']} es que pots personalitzar el contingut que reps i l\'aparença del lloc. Per poder fer-ho, primer has d\'<a href=\"{$_CONF['site_url']}/users.php?mode=new\">inscriure\'t</a> a {$_CONF['site_name']}. Si ja ets membre, utilitza el formulari de l\'esquerra per conectar-te.",
+    72 => 'Tema',
+    73 => 'Idioma',
+    74 => '¡Cambia l\'apariença d\'aquesta pàgina!',
+    75 => 'Seccions enviades per correu electrònic a',
+    76 => 'Si selecciones una o més Seccions de la llista de sota, totes les noticies noves d\'aquestes Seccions et seran enviades per correu electrònic al finalitzar el dia.',
+    77 => 'Foto',
+    78 => '¡Afegeix una foto teva!',
+    79 => 'Activa això per borrar aquesta imatge',
+    80 => 'Identificació',
+    81 => 'Envia per correu electrònic',
+    82 => 'Últimes 10 noticies per l\'usuari/a',
+    83 => 'Estadístiques de noticies per l\'usuari/a',
+    84 => 'Nombre total d\'articles:',
+    85 => 'Nombre total de comentaris:',
+    86 => 'Buscar tots els comentaris de',
+    87 => 'El teu nom d\'accés',
+    88 => "Algú (possiblement tu mateix/a) ha solicitat una contrassenya nova per la teva conta  \"%s\" a {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSi de veritat vols que es porti a terme aquesta acció, siusplau apreta a l\'enllaç següent:\n\n",
+    89 => "si no vols que es porti a terme aquesta acció, simplement ignora aquest missatge i la petició serà desatinguda (la teva contrassenya no es modificarà).\n\n",
+    90 => 'Pots ingressar a sota una contrassenya nova per la teva conta. Siusplau, tingues en compte que la contrassenya antiga seguira sent vàlida fins que enviis aquest formulari.',
+    91 => 'Crea una contrassenya nova',
+    92 => 'Ingressa una contrassenya nova',
+    93 => 'La teva ultima petició d\'una nova contrassenya va ser fa %d segons. Aquest lloc requereix com a mínim %d segons entre peticions de contrassenyes.',
+    94 => 'Borra la conta "%s"',
+    95 => 'Apreta a sota el botó "borrar la conta" per retirar la teva conta de la nostra base de dades. Siusplau, tingues en compte que qualsevol noticia o comentari que hagis publicat amb aquesta conta <strong>no</strong> es borrara, sino que apareixera com "Anònim".',
+    96 => 'Borra la conta',
+    97 => 'Confirma el borrat de la Conta',
+    98 => 'Estàs segur/a de que vols borrar la teva conta? Al fer-ho, no podras accedir a aquest lloc una altre vegada (a no ser que creis una conta nova). Si estàs segur/a, apreta "borrar conta" de nou en el formulari de sota.',
+    99 => 'Opcions de privacitat per',
+    100 => 'Correu de l\'Administrador/a',
+    101 => 'Permet el correu dels Administradors/es del lloc',
+    102 => 'Correu dels usuaris',
+    103 => 'Permet el correu d\'altres usuaris',
+    104 => 'Mostra l\'estat de qui està conectat/da',
+    105 => 'Mostra al bloc Who\'s Online (usuaris conectats)',
+    106 => 'Ubicació',
+    107 => 'Mostrat en el teu perfil public',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'No hi ha novetats a mostrar',
+    2 => 'No hi ha noves noticies a mostrar. Pot ser que no hi hagi novetats en aquest Secció o que les teves preferències siguin molt restrictives.',
+    3 => 'per la Secció %s',
+    4 => 'Notícia del Dia',
+    5 => 'Següent',
+    6 => 'Anterior',
+    7 => 'Primer',
+    8 => 'Últim'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Hi ha hagut un error a l\'enviar el teu missatge. Prova-ho de nou siusplau.',
+    2 => 'El missatge s\'ha enviat satisfactoriament.',
+    3 => 'Siusplau assegura\'t d\'ingressar una direcció de correu electrònic vàlida al camp \'Respondre a\'.',
+    4 => 'Siusplau completa els camps Remitent, Respondre a, Títol i Missatge',
+    5 => 'Error: No existeix l\'usuari/a.',
+    6 => 'Hi ha hagut un error.',
+    7 => 'Perfil d\'usuari/a de',
+    8 => 'Nom de l\'usuari/a',
+    9 => 'URL de l\'usuari/a',
+    10 => 'Envia un missatge a',
+    11 => 'Remitent:',
+    12 => 'Respondre a:',
+    13 => 'Títol:',
+    14 => 'Missatge:',
+    15 => 'No es traduirà el codi HTML.',
+    16 => 'Envia el missatge',
+    17 => 'Enviar a un amic o amiga',
+    18 => 'Destinatari/a',
+    19 => 'Direcció de correu electrònic de destí',
+    20 => 'Remitent',
+    21 => 'Respondre a',
+    22 => 'Es necessari omplir tots els camps',
+    23 => "Aquest correu electrònic te l\'ha enviat %s en %s perque va pensar que podria interessar-te aquesta notícia a  {$_CONF['site_url']}. Això no és SPAM (correu escombraria) i les direccions de correu electrònic involucrades en aquest enviament no s\'han guardat pel seu ús posterior.",
+    24 => 'Comentari sobre aquesta notícia a',
+    25 => 'Has de conectar-te per utilitzar aquesta eina. Aquest control es realitza per prevenir del mal ús del sistema.',
+    26 => 'Aquest formulari et permetrà enviar un correu electrònic a l\'usuari seleccionat. Tots els camps són necessaris.',
+    27 => 'Missatge curt',
+    28 => '%s va escriure: ',
+    29 => "Aquest és el resum diari de {$_CONF['site_name']} per ",
+    30 => ' Noticies diaries per ',
+    31 => 'Títol',
+    32 => 'Data',
+    33 => 'Llegeix la Notícia completa a',
+    34 => 'Fi del missatge',
+    35 => 'Ho sento, aquest usuari prefereix no rebre missatges.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Cerca Avançada',
+    2 => 'Paraules Clau',
+    3 => 'Secció',
+    4 => 'Tot',
+    5 => 'Tipo',
+    6 => 'noticies',
+    7 => 'Comentaris',
+    8 => 'Autors',
+    9 => 'Tot',
+    10 => 'Cerca',
+    11 => 'Resultats de la cerca',
+    12 => 'resultats',
+    13 => 'Cerca de noticies: No hi ha hagut coincidencies',
+    14 => 'No s\'han trobat coincidencies al buscar: ',
+    15 => 'Siusplau torna-ho a provar.',
+    16 => 'Títol',
+    17 => 'Data',
+    18 => 'Autor',
+    19 => "Cerca en tota la base de dades de <B>{$_CONF['site_name']}</B>",
+    20 => 'Data',
+    21 => 'a',
+    22 => '(Format de data DD-MM-YYYY)',
+    23 => 'Lectures',
+    24 => 'Trobats %d elements',
+    25 => 'coincidencies amb',
+    26 => 'elements en ',
+    27 => 'segons',
+    28 => 'No s\'han trobat coincidencies en Noticies i Comentaris',
+    29 => 'Resultats de les Noticies i Comentaris',
+    30 => 'Cap enllaçe coincideix amb la teva cerca',
+    31 => 'Aquest plug-in no ha donat resultats',
+    32 => 'Esdeveniment',
+    33 => 'URL',
+    34 => 'Ubicació',
+    35 => 'Tot el dia',
+    36 => 'Cap esdeveniment ha coincidit amb la teva cerca',
+    37 => 'Resultats d\'Esdeveniments',
+    38 => 'Resultats d\'Enllaços',
+    39 => 'Enllaços',
+    40 => 'Esdeveniments',
+    41 => 'La paraula a cercar ha de tenir com a mínim 3 lletres.',
+    42 => 'Siusplau utilitza una data en el següent format: YYYY-MM-DD (any-mes-dia).',
+    43 => 'frase exacta',
+    44 => 'totes aquestes paraules',
+    45 => 'qualsevol d\'aquestes paraules',
+    46 => 'Següent',
+    47 => 'Anterior',
+    48 => 'Autor/a',
+    49 => 'Data',
+    50 => 'Lectures',
+    51 => 'Enllaç',
+    52 => 'Ubicació',
+    53 => 'Resultats de la notícia',
+    54 => 'Resultats de Comentari',
+    55 => 'la frase',
+    56 => 'I',
+    57 => 'O',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Estadístiques del lloc',
+    2 => 'Total d\'accessos al sistema',
+    3 => 'Noticies(Comentaris) en el sistema',
+    4 => 'Enquestes(Respostes) en el sistema',
+    5 => 'Enllaços(Visitats) en el sistema',
+    6 => 'Esdeveniments en el sistema',
+    7 => 'Les 10 Noticies més llegides',
+    8 => 'Títol de la Noticia',
+    9 => 'Accessos',
+    10 => 'Sembla que no hi ha notícies en aquest lloc o que ningú les ha vist encara.',
+    11 => 'Les 10 noticies més comentades',
+    12 => 'Comentaris',
+    13 => 'Sembla que no hi ha noticies en aquest lloc o que ningú ha escrit un comentari sobre elles.',
+    14 => 'Les 10 Enquestes amb més vots',
+    15 => 'Pregunta',
+    16 => 'Vots',
+    17 => 'Sembla que no hi ha enquestes en aquest lloc o que ningú ha votat encara.',
+    18 => 'Els 10 Enllaços més visitats',
+    19 => 'Enllaços',
+    20 => 'Visites',
+    21 => 'Sembla que en aquest lloc no hi ha enllaços o que ningú els ha visitat.',
+    22 => 'Les 10 Noticies més enviades per correu electrònic',
+    23 => 'missatges per correu electrònic',
+    24 => 'Sembla que ningú ha enviat una notícia per correu electrònic en aquest lloc.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relacionat amb això...',
+    2 => 'Envía-ho a un amic',
+    3 => 'Versió per imprimir',
+    4 => 'Opcions de la Notícia',
+    5 => 'Format de notícia en PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Per enviar %s has d\'estar conectat com usuari/a.',
+    2 => 'Ingressa',
+    3 => 'Nou Usuari/a',
+    4 => 'Afegeix un Esdeveniment',
+    5 => 'Afegeix un Enllaç',
+    6 => 'Afegeix una notícia',
+    7 => 'Has de conectar-te',
+    8 => 'Enviament de col·laboracions',
+    9 => 'Quan envíes informació a aquest lloc et demanem que tinguis en compte els següents consells: <ul><li>Completa tots els camps requerits<li>Comprova bé les URL\'s<li>Facilita informació completa i precisa</ul>',
+    10 => 'Títol',
+    11 => 'Enllaç',
+    12 => 'Data d\'inici',
+    13 => 'Data de finalització',
+    14 => 'Lloc',
+    15 => 'Descripció',
+    16 => 'Si es un altre, especifica',
+    17 => 'Categoría',
+    18 => 'Un altre',
+    19 => 'Llegeix abans',
+    20 => 'Error: Falta la Categoría',
+    21 => 'Siusplau, quan seleccionis \'Un altre\' completa el nom de la categoría',
+    22 => 'Error: Falten Camps',
+    23 => 'Siusplau completa tots els camps del formulari. Es necessari omplir tots els camps.',
+    24 => 'Colaboració guardada',
+    25 => 'Les teves col·laboracions s\'han guardat satisfactoriament.',
+    26 => 'Límit de Velocitat',
+    27 => 'Nom de l\'usuari/a',
+    28 => 'Secció',
+    29 => 'Notícia',
+    30 => 'La teva darrera col·laboració va ser fa ',
+    31 => " segons.  Aquest lloc requereix com a mínim {$_CONF['speedlimit']} segons entre enviaments",
+    32 => 'Lectura Previa',
+    33 => 'Lectura previa de la noticia',
+    34 => 'Sortida',
+    35 => 'No es permeten etiquetes d\'HTML',
+    36 => 'Format del text',
+    37 => "Els esdeveniments enviats a {$_CONF['site_name']} s\'afegeixen al Calendari Públic, on la resta d\'usuaris poden afegir-lo al seu Calendari Personal. Aquesta funció <b>NO</b> està pensada per guardar els teus esdeveniments personals com ara aniversaris, cites, etc.<br><br>Una vegada enviat, l\'esdeveniment serà evaluat pels Administradors. De ser aprobat, es mostrarà al Calendari Públic",
+    38 => 'Afegeix un esdeveniment a',
+    39 => 'Calendari Públic',
+    40 => 'Calendari Personal',
+    41 => 'Hora de finalització',
+    42 => 'Hora d\'inici',
+    43 => 'Esdeveniment que dura tot el dia',
+    44 => 'Direcció, linia 1',
+    45 => 'Direcció, linia 2',
+    46 => 'Ciutat/Localitat',
+    47 => 'Província/Estat',
+    48 => 'Còdig Postal',
+    49 => 'Tipo d\'Esdeveniment',
+    50 => 'Edita els tipus d\'esdeveniments',
+    51 => 'Lloc',
+    52 => 'Borrar',
+    53 => 'Crea una conta'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Es demana verificació',
+    2 => 'Accés denegat! La informació d\'ingrés és incorrecta',
+    3 => 'La contrassenya ingressada es invàlida',
+    4 => 'Usuari/a:',
+    5 => 'Contrassenya:',
+    6 => 'Tot accés a les parts administratives queda registrat i revisat.<br>Aquesta pàgina és per l\'ús exclusiu del personal autoritzat.',
+    7 => 'Identificació'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'No tens drets d\'Administrador/a',
+    2 => 'No tens els drets suficients per editar aquest bloc.',
+    3 => 'Editor de Blocs',
+    4 => 'Hi ha hagut un problema amb la lectura d\'aquesta transmissió (veure error.log per més detalls).',
+    5 => 'Títol del Bloc',
+    6 => 'Secció',
+    7 => 'Tot',
+    8 => 'Nivell de seguretat del bloc',
+    9 => 'Ordre del Bloc',
+    10 => 'Tipus de bloc',
+    11 => 'Bloc del Sistema',
+    12 => 'Bloc Normal',
+    13 => 'Opcions per el Bloc del Sistema',
+    14 => 'RDF(Resource Description Framework)URL',
+    15 => 'última actualització del RDF',
+    16 => 'Opcions per el Bloc Normal',
+    17 => 'Contingut del Bloc',
+    18 => 'Siusplau completa els camps Títol, Nivell de Seguretat i Contingut del bloc',
+    19 => 'Administrador',
+    20 => 'Títol',
+    21 => 'Nivell de Seguretat',
+    22 => 'Tipus',
+    23 => 'Nombre d\'Ordre',
+    24 => 'Secció',
+    25 => 'Per modificar o borrar un bloc, seleccióna\'l més avall. Per crear-ne un de nou, selecciona \'Nou Bloc\' a dalt.',
+    26 => 'Bloc de maquetació',
+    27 => 'Bloc de PHP',
+    28 => 'Opcions del Bloc PHP',
+    29 => 'Funcions del Bloc',
+    30 => 'Si vols que el teu bloc utilitzi codi PHP, ingressa aqui el nom de la funció. La funció ha de tenir el prefixe "phpblock_" (ex. phpblock_getweather). De no ser així NO sera invocada. Assegura\'t de no incluir els parèntesis, "()", al final del nom. Per últim, es recomana que guardis tot códi PHP a /path/to/geeklog/system/lib-custom.php. Això et permetrà que el teu codi es mantingui als canvis de versio del sistema.',
+    31 => 'Error en un Bloc PHP.  La funció, %s, no existeix.',
+    32 => 'Error, Falten Camps',
+    33 => 'Has d\'ingressar la URL de l\'archivo .rdf pels Blocs del Sistema',
+    34 => 'Has d\'ingressar el Títol i la Funció als Blocs PHP',
+    35 => 'Has d\'ingressar el Título i el Contingut pels Blocs Normals',
+    36 => 'Has d\'ingressar el contingut pels Blocs de Maquetació',
+    37 => 'El nom de la funció en el Bloc PHP es invàlid',
+    38 => 'Les funcions pels Blocs PHP han de tenir el prefixe \'phpblock_\' (ex. phpblock_getweather). Es demana el prefixe per qüestions de seguretat, per evitar que s\'executi codi no desitjat.',
+    39 => 'Ubicació',
+    40 => 'Esquerra',
+    41 => 'Dreta',
+    42 => 'Has d\'ingressar el nombre d\'ordre i el nivell de seguretat pels blocs per defecte',
+    43 => 'Només a la Pàgina d\'Inici',
+    44 => 'Accés Denegat',
+    45 => "Estàs intentant accedir a un bloc al que no tens drets d\'accés. Aquest intent s\'ha registrat. Siusplau <a href=\"{$_CONF['site_admin_url']}/block.php\">torna a la pantalla d\'administració de blocs</a>.",
+    46 => 'Nou Bloc',
+    47 => 'Pàgina d\'Inici - Administrador',
+    48 => 'Nom del Bloc',
+    49 => ' (sense espais i ha de ser únic)',
+    50 => 'URL de l\'archiu d\'ajuda',
+    51 => 'inclou http://',
+    52 => 'Si deixes aquest camp en blanc no es mostrarà l\'icona d\'ajuda',
+    53 => 'Habilitat',
+    54 => 'guardar',
+    55 => 'cancelar',
+    56 => 'borrar',
+    57 => 'Mou el bloc aball',
+    58 => 'Mou el bloc amunt',
+    59 => 'Mou el bloc a la dreta',
+    60 => 'Mou el bloc a l\'esquerra',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor d\'Esdeveniments',
+    2 => 'Error',
+    3 => 'Títol',
+    4 => 'URL',
+    5 => 'Data d\'Inici',
+    6 => 'Data de Finalització',
+    7 => 'Lloc',
+    8 => 'Descripció',
+    9 => '(inclou http://)',
+    10 => 'Has de completar tots els camps d\'aquest formulari.',
+    11 => 'Administrador de l\'Esdeveniment',
+    12 => 'Per modificar o borrar un esdeveniment, clica sobre ell a sota. Per crear un Nou Esdeveniment clica sobre Nou Esdeveniment a dalt. Clica sobre [C] per crear una còpia d\'un esdeveniment ja existent.',
+    13 => 'Títol',
+    14 => 'Data d\'Inici',
+    15 => 'Data de Finalització',
+    16 => 'Accés Denegat',
+    17 => "No tens permís per accedir a aquest Esdeveniment. Tot intent d\'accés serà registrat. Siusplau, torna a <a href=\"{$_CONF['site_admin_url']}/event.php\">la pàgina d\'Administració d\'Esdeveniments</a>.",
+    18 => 'Nou Esdeveniment',
+    19 => 'Pàgina d\'Inici - Administrador',
+    20 => 'guardar',
+    21 => 'cancelar',
+    22 => 'borrar',
+    23 => 'Data d\'inici incorrecta.',
+    24 => 'Data de finalització incorrecta.',
+    25 => 'La data de finalització es anterior a la d\'inici.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Noticies Anteriors',
+    2 => 'Noticies Següents',
+    3 => 'Modo',
+    4 => 'Modo d\'enviament',
+    5 => 'Editor de Noticies',
+    6 => 'No hi ha Noticies en el sistema',
+    7 => 'Autor',
+    8 => 'guardar',
+    9 => 'Lectura previa',
+    10 => 'cancelar',
+    11 => 'borrar',
+    12 => 'ID',
+    13 => 'Títol',
+    14 => 'Secció',
+    15 => 'Data',
+    16 => 'Introducció',
+    17 => 'Text',
+    18 => 'Accessos',
+    19 => 'Comentaris',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Llista de Noticies',
+    23 => 'Per modificar o borrar una Notícia selecciona el numero de Notícia mes avall. Per veure la Notícia selecciona el títol de la mateixa. Per crear una nova Notícia selecciona \'Enviar Notícia\' més amunt.',
+    24 => 'L\'ID que has escollit per aquest tema ja està sent utilitzada. Siusplau, utilitza un altre ID.',
+    25 => 'Error when saving story',
+    26 => 'Lectura Previa',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Errors al Pujar Arxius',
+    31 => 'Siusplau omple els camps d\'Autor, Títol i Text',
+    32 => 'Destacada',
+    33 => 'Només hi pot haver una Notícia destacada',
+    34 => 'Borrador',
+    35 => 'Si',
+    36 => 'No',
+    37 => 'Més de',
+    38 => 'Més en',
+    39 => 'correus electrònics',
+    40 => 'Accés Denegat',
+    41 => "Estàs intentant accedir a una Notícia a la que no tens drets d\'accés, per tant, podràs veure la Notícia però no editar-la. Siusplau torna a la <a href=\"{$_CONF['site_admin_url']}/story.php\">pàgina d\'administració</a> quan hagis acabat.",
+    42 => "Estàs intentant accedir a una Notícia a la que no tens drets d\'accés. Siusplau torna a la <a href=\"{$_CONF['site_admin_url']}/story.php\">pàgina d\'administració</a>.",
+    43 => 'Nova Notícia',
+    44 => 'Pàgina d\'Inici - Administrador',
+    45 => 'Accés',
+    46 => '<b>NOTA:</b> si modifiques aquesta data per una de futura, la Notícia no es publicarà dins aquella data. Això també inclou l\'enviament de titulars RDF(Resource Description Framework), la cerca i les estadistiques del lloc.',
+    47 => 'Imatges',
+    48 => 'imatge',
+    49 => 'dre',
+    50 => 'esq',
+    51 => 'Per insertar una imatge a la Notícia has d\'incloure un text amb el format [imageX], [imageX_left] o [imageX_right], on X es el nombre de la imatge dints de la llista. NOTA: només pots utilitzar les imatges de la llista, si no la Notícia no es podrà guardar',
+    52 => 'Borrar',
+    53 => 'no s\'ha utilitzat.  Has d\'incloure aquesta imatge a la Introducció o el Text per poder guardar els canvis',
+    54 => 'Imatges no utilitzades',
+    55 => 'Hi ha hagut els següents errors a l\'intentar guardar la teva Notícia. Siusplau, corregeix els errors abans de guardar.',
+    56 => 'Mostrar icona de Tema',
+    57 => 'Veure imatge sense proporció',
+    58 => 'Gestió de les noticies',
+    59 => 'Opció',
+    60 => 'Habilitat',
+    61 => 'Auto arxiu',
+    62 => 'Auto borrat',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor de Seccions',
+    2 => 'Identificació (ID)',
+    3 => 'Nom',
+    4 => 'Imatge',
+    5 => '(no utilitzis espais)',
+    6 => 'Al borrar una Secció es borraran totes les teves Noticies i Blocs associats',
+    7 => 'Siusplau completa els camps ID i Nom',
+    8 => 'Administrador de Seccions',
+    9 => 'Per modificar o borrar un tema, apreta sobre el tema. Per crear un tema nou, apreta el botó de Nou Tema a l\'esquerra. Trobaràsel teu nivell d\'accés pel tema entre parèntesis. L\'asterisc(*) denota el tema  per defecte.',
+    10 => 'Nombre d\'Ordre',
+    11 => 'Notícies/Pàgina',
+    12 => 'Accés Denegat',
+    13 => "Estàs intentant accedir a una Secció a la que no tens drets d\'accés. Siusplau torna a la <a href=\"{$_CONF['site_admin_url']}/topic.php\">pàgina d\'administració.",
+    14 => 'Mètode d\'Ordenament',
+    15 => 'alfabètic',
+    16 => 'per defecte és',
+    17 => 'Nova Secció',
+    18 => 'Pàgina d\'Inici - Administrador',
+    19 => 'guardar',
+    20 => 'cancelar',
+    21 => 'borrar',
+    22 => 'Per defecte',
+    23 => 'converteix-lo en el tema per defecte per a noves col·laboracions',
+    24 => '(*)',
+    25 => 'Arxiva el tema',
+    26 => 'converteix-lo en el tema per defecte per a notícies arxivades. Només es permet un tema.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor d\'Usuaris',
+    2 => 'ID',
+    3 => 'Nom d\'Usuari/a',
+    4 => 'Nom Complet',
+    5 => 'Contrassenya',
+    6 => 'Nivell de Seguretat',
+    7 => 'Direcció de correu electrònic',
+    8 => 'Pàgina d\'Inici',
+    9 => '(no utilitzis espais)',
+    10 => ' Siusplau, omple els camps de Nom d\'Usuari/a i direcció de correu electrònic',
+    11 => 'Administrador d\'Usuaris',
+    12 => 'Per modificar o borrar a un/a usuari/a, apreta sobre l\'usuari/a a sota.  Per crear un/a usuari/a nou apreta el botó de Nou Usuari a l\'esquerra. Pots fer cerques senzilles al teclejar parts del nom d\'usuari, direcció de correu electrònic o nom complet (per exemple *son* o *.edu) al formulari de sota..',
+    13 => 'Nivell de seguretat',
+    14 => 'Data d\'Inscripció',
+    15 => 'Nou Usuari',
+    16 => 'Pàgina d\'Inici - Administrador',
+    17 => 'Canvia la contrassenya',
+    18 => 'Cancelar',
+    19 => 'Borrar',
+    20 => 'Guardar',
+    21 => 'El Nom d\'Usuari/a proposat ja existeix.',
+    22 => 'Error',
+    23 => 'Importació Massiva',
+    24 => 'Importació massiva d\'Usuaris',
+    25 => "Pots importar una llista d\'Usuaris/es a {$_CONF['site_name']}. L\'arxiu amb la llista d\'usuaris/es ha de tenir un registre per linea i els camps separats per TAB (tabulador). Els camps han d\'estar en el següent ordre: Nom Complet, Nom d\'Usuari, Direcció de Correu electrònic. A cada usuari afegit se li enviarà per correu electrònic una contrassenya generada a l\'atzar, que podràn canviar a l\'ingressar al lloc. Siusplau, comprova bé l\'arxiu d\'importació ja que els errors trovats poden arrivar a necessitar arranjaments manuals.",
+    26 => 'Cerca',
+    27 => 'Limita els resultats',
+    28 => 'Marca la casella per borrar aquesta imatge',
+    29 => 'Ruta',
+    30 => 'Importació',
+    31 => 'Nous Usuaris',
+    32 => 'Procés finalitzat. S\'han importat %d i hi ha hagut %d errors',
+    33 => 'enviar',
+    34 => 'Error: Has d\'especificar l\'arxiu que vols pujar.',
+    35 => 'Últim accés',
+    36 => '(mai)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Aprovar',
+    2 => 'Borrar',
+    3 => 'Editar',
+    4 => 'Perfil',
+    10 => 'Títol',
+    11 => 'Data d\'Inici',
+    12 => 'URL',
+    13 => 'Categoria',
+    14 => 'Data',
+    15 => 'Tema',
+    16 => 'Nom de l\'usuari/a',
+    17 => 'Nom complet',
+    18 => 'correu electrònic',
+    34 => 'Pàgina d\'administració',
+    35 => 'Enviaments de Noticies',
+    36 => 'Enviaments d\'Enllaços',
+    37 => 'Enviaments d\'Esdeveniments',
+    38 => 'Enviar',
+    39 => 'No hi ha enviaments a moderar en aquest moment',
+    40 => 'Enviaments de l\'usuari/a'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Diumenge',
+    2 => 'Dilluns',
+    3 => 'Dimarts',
+    4 => 'Dimecres',
+    5 => 'Dijous',
+    6 => 'Divendres',
+    7 => 'Dissabte',
+    8 => 'Afegeix un esdeveniment',
+    9 => 'Esdeveniment de %s',
+    10 => 'Esdeveniments per',
+    11 => 'Calendari Mestre',
+    12 => 'El meu Calendari',
+    13 => 'Gener',
+    14 => 'Febrer',
+    15 => 'Març',
+    16 => 'Abril',
+    17 => 'Maig',
+    18 => 'Juny',
+    19 => 'Juliol',
+    20 => 'Agost',
+    21 => 'Setembre',
+    22 => 'Octubre',
+    23 => 'Novembre',
+    24 => 'Desembre',
+    25 => 'Tornar a ',
+    26 => 'Tot el dia',
+    27 => 'Setmana',
+    28 => 'Calendari Personal per',
+    29 => 'Calendari Públic',
+    30 => 'borra l\'esdeveniment',
+    31 => 'Afegeix',
+    32 => 'Esdeveniment',
+    33 => 'Data',
+    34 => 'Hora',
+    35 => 'Afegit ràpid',
+    36 => 'Envía',
+    37 => 'Disculpa, l\'opció de calendari personal no es troba habilitada en aquest lloc',
+    38 => 'Editor Personal d\'Esdeveniments',
+    39 => 'Dia',
+    40 => 'Setmana',
+    41 => 'Mes'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']}Utilidad de correo electrónico",
+    2 => 'De',
+    3 => 'Respondre a',
+    4 => 'Títol',
+    5 => 'Missatge',
+    6 => 'Enviar a:',
+    7 => 'Tots els usuaris',
+    8 => 'Administrador',
+    9 => 'Opcions',
+    10 => 'HTML',
+    11 => 'Missatge Urgent!',
+    12 => 'Enviament',
+    13 => 'Reinici',
+    14 => 'Ignorar les preferencies de l\'usuari/a',
+    15 => 'Error a l\'enviar a: ',
+    16 => 'S\'ha enviat satisfactoriament a: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar un altre missatge</a>",
+    18 => 'Per',
+    19 => 'NOTA: si vols enviar un missatge a tots els membres del lloc, selecciona el grup Logged-In Users a la llista.',
+    20 => "S\'han enviat <successcount> missatges satisfactoriament i <failcount> han fallat.  Si vols, els detalls de cada enviament figuren a sota. També pots <a href=\"{$_CONF['site_admin_url']}/mail.php\">enviar un altre missatge</a> o tornar a <a href=\"{$_CONF['site_admin_url']}/moderation.php\">la pàgina d\'administració</a>.",
+    21 => 'Fallats',
+    22 => 'Exitosos',
+    23 => 'No hi ha hagut enviaments fallits',
+    24 => 'No hi ha hagut enviaments satisfactoris',
+    25 => '-- Selecciona el Grup --',
+    26 => 'Siusplau, omple tots els camps del formulari i selecciona un grup d\'usuaris de la llista desplegable.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'La instal·lació de Plug-in(s) pot malmetre la teva instal·lació de Geeklog i, possiblement, el teu sistema. Es important que només instalis Plug-in(s) obtinguts de <a href="http://www.geeklog.net" target="_blank">Geeklog</a> ja que han sigut comprobats en varis entorns. Es també important que entenguis que la instal·lació del Plug-in necessita la execució d\'instruccions del sistema que poden portar problemes de seguretat. Tot i aquesta advertencia, no garantitzem l\'èxit de la instal·lació del Plug-in ni ens fem responsables per qualsevol dany causat durant la instal·lació (o posterior a la mateixa). En altres paraules, instal·la el Plug-in sota la teca responsabilitat. Les instruccions particulars d\'instal·lació venen dints de cada Plug-in.',
+    2 => 'Advertència de la instal·lació del Plug-in',
+    3 => 'Formulari d\'instalació del Plug-in',
+    4 => 'Arxiu del Plug-in',
+    5 => 'Llistat de Plug-in(s)',
+    6 => 'Advertencia: El Plug-in ja està instal·lat!',
+    7 => 'El Plug-in que intentes instal·lar ja existeix. Siusplau borra el Plug-in abans de reinstalar-lo.',
+    8 => 'Ha fallat la comprobació de compatibilitat del Plug-in',
+    9 => 'Aquest Plug-in requereix una versió més nova de Geeklog. Pots obtenir una còpia actualitzada de <a href=http://www.geeklog.net>Geeklog</a> o instal·lar una altre versió del Plug-in.',
+    10 => '<br><b>No hi ha Plug-in(s) instal·lats.</b><br><br>',
+    11 => 'Per modificar o borrar un Plug-in selecciona el numero a l\'esquerra del mateix. Per accedir a la pàgina dels seus creadors seleccioni en el títol del Plug-in. Per instal·lar un nou Plug-in selecciona \'Nou Plug-in\' més amunt.',
+    12 => 'no s\'ha donat un nom de plugin a la funció plugineditor()',
+    13 => 'Editor de Plugins',
+    14 => 'Nou Plug-in',
+    15 => 'Pàgina d\'Inici - Administrador',
+    16 => 'Nom del Plug-in',
+    17 => 'Versió',
+    18 => 'Versió de Geeklog',
+    19 => 'Habilitat',
+    20 => 'Si',
+    21 => 'No',
+    22 => 'Instal·lació',
+    23 => 'Guardar',
+    24 => 'Cancelar',
+    25 => 'Borrar',
+    26 => 'Nom',
+    27 => 'Portada',
+    28 => 'Versió',
+    29 => 'Versió de Geeklog',
+    30 => 'Vols borrar el Plug-in?',
+    31 => 'Estàs segur/a de que vols esborrar aquest Plug-in? Al fer-ho borraràs tots els arxius, estructures i dades associades. Si estàs segur/a selecciona "Borrar" al formulari de sota.',
+    32 => '<p><b>Error, l\'etiqueta AutoLink no té el format correcte</b></p>',
+    33 => 'Versió del codi',
+    34 => 'Actualització',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Creació de la transmissió',
+    2 => 'guardar',
+    3 => 'borrar',
+    4 => 'cancelar',
+    10 => 'Sindicació del contingut',
+    11 => 'Transmissió nova',
+    12 => 'Seu de l\'Administrador',
+    13 => 'Per modificar o borrar una transmissió, apreta sobre el títol de la transmissió a sota. Per crear una transmissió nova, apreta sobre Transmissió nova a dalt.',
+    14 => 'Títol',
+    15 => 'Tecleja',
+    16 => 'Nom de l\'arxiu',
+    17 => 'Format',
+    18 => 'última actualització',
+    19 => 'Habilitat',
+    20 => 'Si',
+    21 => 'No',
+    22 => '<i>(no hi ha transmissions)</i>',
+    23 => 'tots els Temes',
+    24 => 'Editor de transmissions',
+    25 => 'Títol de la transmissió',
+    26 => 'Límit',
+    27 => 'Duració de les noticies',
+    28 => '(0 = sense text, 1 = text complet, altres = limita a aquest nombre de caràcters.)',
+    29 => 'Descripció',
+    30 => 'Actualització més recent',
+    31 => 'Conjunt de caràcters',
+    32 => 'Idioma',
+    33 => 'Continguts',
+    34 => 'Entrades',
+    35 => 'Hores',
+    36 => 'Selecciona el tipus de transmissió',
+    37 => 'Tens com a mínim un plugin instal·lat que afavoreix la sindicació de contingut. A sota hauràs de seleccionar si vols una transmissió de Geeklog o una transmissió d\'un dels plugins.',
+    38 => 'Error: Falten camps',
+    39 => 'Siusplau, omple el Títol, Descripció i Nom de l\'arxiu de la transmissió.',
+    40 => 'Siusplau inclueix el nombre d\'entrades o nombre d\'hores.',
+    41 => 'Enllaços',
+    42 => 'Esdeveniments',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "La teva contrassenya s\'ha enviat per correu electrònic i arribarà d\'aquí un moment. Siusplau segueix les indicacions del missatge. Gracies per utilitzar {$_CONF['site_name']}",
+    2 => "Gracies per enviar la teva Notícia a {$_CONF['site_name']}. La Notícia es troba en procés d\'aprovació. De ser aprovada, podrà ser llegida per tots els visitants del lloc.",
+    3 => "Gracies per enviar el teu Enllaç a {$_CONF['site_name']}. L\'Enllaç es troba en procés d\'aprovació. De ser aprovat, podrà ser vist per tots els visitants del lloc.",
+    4 => "Gracies per enviar el teu Esdeveniment a {$_CONF['site_name']}. L\'Esdeveniment es troba en procés d\'aprovació. De ser aprovat, podrà ser vist per tots els visitants del lloc.",
+    5 => 'La informació de la teva conta s\'ha guardat satisfactoriament.',
+    6 => 'Les teves preferencies s\'han guardat satisfactoriament.',
+    7 => 'Les teves preferencies per a Comentaris han sigut guardades satisfactoriament.',
+    8 => 'T\'has desconectat satisfactoriament.',
+    9 => 'La teva Notícia s\'ha guardat satisfactoriament.',
+    10 => 'La Notícia s\'ha borrat satisfactoriament.',
+    11 => 'El teu Bloc s\'ha guardat satisfactoriament.',
+    12 => 'El Bloc s\'ha borrat satisfactoriament.',
+    13 => 'La teva Secció s\'ha guardat satisfactoriament.',
+    14 => 'La Secció juntament amb totes les teves Noticies i Blocs s\'han borrat satisfactoriament.',
+    15 => 'El teu enllaç s\'ha guardat satisfactoriament.',
+    16 => 'L\'enllaç s\'ha borrat satisfactoriament.',
+    17 => 'El teu Esdeveniment s\'ha guardat satisfactoriament.',
+    18 => 'L\'Esdeveniment s\'ha borrat satisfactoriament.',
+    19 => 'La teva Enquesta s\'ha guardat satisfactoriament.',
+    20 => 'L\'Enquesta s\'ha borrat satisfactoriament.',
+    21 => 'El Nou Usuari s\'ha guardat satisfactoriament.',
+    22 => 'L\'Usuari s\'ha borrat satisfactoriament',
+    23 => 'Error al guardar l\'Esdeveniment al teu Calendari. No ha sigut processat l\'ID.',
+    24 => 'L\'Esdeveniment s\'ha guardat al teu Calendari',
+    25 => 'No pots accedir al teu Calendari Personal abans de conectar-te com a usuari',
+    26 => 'L\'Esdeveniment s\'ha borrat del teu Calendari Personal',
+    27 => 'Missatge enviat satisfactoriament.',
+    28 => 'El Plug-in s\'ha guardat satisfactoriament',
+    29 => 'Disculpa, els Calendaris Personals no estan habilitats en aquest lloc',
+    30 => 'Accés Denegat',
+    31 => 'Disculpa, no tens accés a la pàgina d\'administració de Noticies. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    32 => 'Disculpa, no tens accés a la pàgina d\'administració de Seccions. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    33 => 'Disculpa, no tens accés a la pàgina d\'administració de Blocs. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    34 => 'Disculpa, no tens accés a la pàgina d\'administració d\'Enllaços. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    35 => 'Disculpa, no tens accés a la pàgina d\'administració d\'Esdeveniments. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    36 => 'Disculpa, no tens accés a la pàgina d\'administració d\'Enquestes. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    37 => 'Disculpa, no tens accés a la pàgina d\'administració d\'Usuaris. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    38 => 'Disculpa, no tens accés a la pàgina d\'administració de Plug-in(s). Aclarem que tot accés sense autorització queda registrat al servidor.',
+    39 => 'Disculpa, no tens accés a la pàgina d\'administració de Correu electrònic. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    40 => 'Missatge del Sistema',
+    41 => 'Disculpa, no tens accés a la pàgina de Substitució de Paraules. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    42 => 'La Paraula s\'ha guardat satisfactoriament.',
+    43 => 'La Paraula s\'ha borrat satisfactoriament.',
+    44 => 'El Plug-In s\'ha instalat satisfactoriament.',
+    45 => 'El Plug-In s\'ha borrat satisfactoriament.',
+    46 => 'Disculpa, no tens accés a l\'eina de còpia de seguretat de la base de dades. Aclarem que tot accés sense autorització queda registrat al servidor.',
+    47 => 'Aquesta funció està disponible sota *nix. Si estàs utilitzant *nix com a sistema operatiu, la teva còpia de visites (cache) s\'ha netejat satisfactoriament. Si estàs sota Windows, hauràs de cercar els arxius adodb_*.php i borrar-los manualment.',
+    48 => "Gracies per registrar-te com a membre a {$_CONF['site_name']}. El nostre equip comprobarà la teva solicitut. Si es aprovada, se t\'enviarà la teva Contrassenya a la direcció correu electrònico que ens has proporcionat.",
+    49 => 'El teu grup s\'ha guardat satisfactoriament.',
+    50 => 'El grup s\'ha borrat satisfactoriament.',
+    51 => 'Aquest nom d\'usuari/a ja està en ús. Siusplau, escolleix-ne un altre.',
+    52 => 'La direcció facilitada no sembla una direcció vàlida de correu electrònic.',
+    53 => 'La teva nova contrassenya s\'ha acceptat. Siusplau, utilitza la nova contrassenya que apareix a sota per ingressar de nou.',
+    54 => 'La teva petició de nova contrassenya ha caducat. Siusplau, torna a provar-ho a sota.',
+    55 => 'El sistema t\'ha enviat un correu electrònic i t\'arrivarà en breu. Siusplau, segueix les instruccions del missatge per crear una nova contrassenya per la teva conta.',
+    56 => 'La direcció de correu electrònic facilitada ja està en ús en una altre conta.',
+    57 => 'La teva conta s\'ha borrat satisfactoriament.',
+    58 => 'La teva transmissió s\'ha guardat satisfactoriament.',
+    59 => 'La teva transmissió s\'ha borrat satisfactoriament.',
+    60 => 'El plugin s\'ha actualitzat satisfactoriament',
+    61 => 'Plugin %s: marcador de missatge desconegut',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Accés',
+    'ownerroot' => 'Propietari/Arrel',
+    'group' => 'Grup',
+    'readonly' => 'Només-Lectura',
+    'accessrights' => 'Drets d\'accés',
+    'owner' => 'Propietari',
+    'grantgrouplabel' => 'Estableix els drets del Grup',
+    'permmsg' => 'NOTA: membres són tots els membres conectats i els usuaris anònims que estiguin al lloc.',
+    'securitygroups' => 'Grups de Seguretat',
+    'editrootmsg' => "Encara que siguis un/a Administrador/a d\'Usuaris/es, no pots editar un usuari d\'arrel sense abans haber-te donat d\'alta com usuari d\'arrel.  Pots editar a tots els demés usuaris excepte els usuaris d\'arrel. Siusplau, pren nota que qualsevol intent d\'editar il·legalment als usuaris d\'arrel quedarà registrat. Siusplau torna a <a href=\"{$_CONF['site_admin_url']}/users.php\">la pàgina d\'Administració d\'usuaris</a>.",
+    'securitygroupsmsg' => 'Marca les caselles dels grups als que vols que pertanyi l\'usuari.',
+    'groupeditor' => 'Editor de Grup',
+    'description' => 'Descripció',
+    'name' => 'Nom',
+    'rights' => 'Drets',
+    'missingfields' => 'Camps que falten',
+    'missingfieldsmsg' => 'Has d\'ingressar un nom i una descripció pel Grup.',
+    'groupmanager' => 'Administrador de Grups',
+    'newgroupmsg' => 'Per modificar o borrar un grupo selecciona el grup aquí sota. Per crear un grup selecciona \'Nou Grup\' aquí dalt. Pensa que els Grups del Sistema no es poden borrar.',
+    'groupname' => 'Nom del Grup',
+    'coregroup' => 'Grup del Sistema? ',
+    'yes' => 'Si',
+    'no' => 'No',
+    'corerightsdescr' => "Aquest grup es un Grup de Sistema de {$_CONF['site_name']}, i per tant els seus drts no es poden editar. A continuació es mostra una llista no editable dels drets d\'accés d\'aquest grup.",
+    'groupmsg' => 'Els Grups de Segurtat d\'aquest lloc són jeràrquics. A l\'afegir aquest grup a qualsevol dels de sota li estarà donant els mateixos drets que tinguin aquests grups. De ser possible, es recomana utilitzar els grups existents per donar els drets a un nou grup. Si thas de modificar els drets del grup, pots seleccionar-los a la secció anomenada \'Drets\'. Per afegir aquest grup a qualsevol dels de sota simplement marca els grups que vulguis.',
+    'coregroupmsg' => "Aquest grup es un Grup de Sistema de {$_CONF['site_name']}, per això els grups que pertanyin a aquest grup no podràn ser editats. A continuació es mostra un llistat (no editable) dels grups als quals pertany aquest grup.",
+    'rightsdescr' => 'El dret d\'accés d\'un grupo a algun dels drets que s\'especifiquen a sota es poden donar directament al grup O a un grup diferent del que forma part aquest grup.  Els que veus a sota sense la casella marcada son els drets que s\'han otorgat a aquest grup perque pertany a un altre amb aquest dret. Els drets amb les caselles a sota son els drets que es poden otorgar directament a aquest grup.',
+    'lock' => 'Bloqueig',
+    'members' => 'Membres',
+    'anonymous' => 'Anònim',
+    'permissions' => 'Permisos',
+    'permissionskey' => 'R = lectura, E = edició, els permisos d\'edició impliquen permisos de lectura',
+    'edit' => 'Editar',
+    'none' => 'Cap',
+    'accessdenied' => 'Accés Denegat',
+    'storydenialmsg' => "No tens accés per veure aquesta Notícia. Això pot ser perquè no ets membre de {$_CONF['site_name']}. Siusplau <a href=users.php?mode=new>entra entra com a membre</a> de {$_CONF['site_name']} per tenir accés.",
+    'eventdenialmsg' => "No tens accés per veure aquest Esdeveniment. Això pot ser perquè no ets membre de {$_CONF['site_name']}. Siusplau <a href=users.php?mode=new>entra com a membre</a> de {$_CONF['site_name']} per tenir accés.",
+    'nogroupsforcoregroup' => 'Aquest grup no pertany a cap dels altres grups',
+    'grouphasnorights' => 'Aquest grup no té accés a les funcions d\'administració',
+    'newgroup' => 'Nou Grupo',
+    'adminhome' => 'Pàgina d\'Administració',
+    'save' => 'Guardar',
+    'cancel' => 'Cancelar',
+    'delete' => 'Borrar',
+    'canteditroot' => 'Has intentat editar el grup Root (Arrel) però no pertanys al grup Root, per tant se t\'ha denegat l\'accés.  Siusplau, contacta amb l\'administrador/a del sistema si creus que es tracta d\'un error',
+    'listusers' => 'Llistat d\'Usuaris',
+    'listthem' => 'llistat',
+    'usersingroup' => 'Usuaris al grup %s',
+    'usergroupadmin' => 'Administració del grup d\'usuaris',
+    'add' => 'Afegir',
+    'remove' => 'Borrar',
+    'availmembers' => 'Membres disponibles',
+    'groupmembers' => 'Membres del grup',
+    'canteditgroup' => 'Per editar aquest grup, has de ser un membre del grup. Siusplau, contacta amb l\'administrador del sistema si creus que això es un error.',
+    'cantlistgroup' => 'Per veure els membres d\'aquest grup, n\'has de ser membre. Siusplau contacta amb l\'administrador del sistema si creus que això es un error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Últimes 10 còpies de seguretat',
+    'do_backup' => 'Fer una còpia de seguretat',
+    'backup_successful' => 'La còpia de seguretat de la base de dades s\'ha realitzat satisfactoriament.',
+    'db_explanation' => 'Per crear una còpia de seguretat del sistema utilitza el botó de sota',
+    'not_found' => "Ruta incorrecta o la utilitat mysqldump no es pot executar.<br>Comprova la definició de <strong>\$_DB_mysqldump_path</strong> al config.php.<br>La variable està definida actualment com: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Error de la còpia de seguretat: La grandària era de 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} no existeix o no es una ruta",
+    'no_access' => "ERROR: No es pot accedir al directori {$_CONF['backup_path']}.",
+    'backup_file' => 'Arcxiu de copies de seguretat',
+    'size' => 'Grandària',
+    'bytes' => 'Bytes',
+    'total_number' => 'Nombre total de copies de seguretat: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Portada',
+    2 => 'Contacte',
+    3 => 'Col·laboracions',
+    4 => 'Enllaços',
+    5 => 'Enquestes',
+    6 => 'Calendari',
+    7 => 'Estadístiques',
+    8 => 'Personalització',
+    9 => 'Cerca',
+    10 => 'Cerca avançada',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Error 404',
+    2 => 'Vaja, he buscat per tot arreu, però no puc trobar <b>%s</b>.',
+    3 => "<p>Ho sentim, però el fitxer que demanes no existeix. Siusplau, consulta la <a href=\"{$_CONF['site_url']}\">pàgina principal</a> o la <a href=\"{$_CONF['site_url']}/search.php\">pàgina de cerca</a> per verure si pots trobar el que has perdut."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'es necessita ingressar',
+    2 => 'Ho sento, per accedir a aquesta àrea has d\'estar verificat/da com usuari/a.',
+    3 => 'ingressa',
+    4 => 'Usuari/a nou/va'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'La funció PDF està inhabilitada',
+    2 => 'El document facilitat no s\'ha reproduit. S\'ha rebut el document però no s\'ha processat. Siusplau, assegura\'t de que només s\'enviin documents en format html amb l\'estàndar xHTML. Siusplau, pensa que els documents molt complexes en html és possible que no es reprodueixin correctament o que no apareguin. El document resultant del teu intent té 0 bytes d\'extensió, i ha sigut borrat. Si no estàs segur/a de que el teu document es reprodueixi bé, siusplau, torna a enviar-lo.',
+    3 => 'Error desconegut durant la generació de PDF',
+    4 => 'No has donat dades de la pàgina o vols utilitzar l\'eina de generació ad-hoc de PDF. Si creus que estàs rebent aquesta pàgina per error, contacta amb l\'administrador del sistema. Sinó, pots utilitzar el formulari que hi ha a sota per generar PDFs.',
+    5 => 'Cargant el teu document.',
+    6 => 'Siusplau, espera mentres es carrega el teu document.',
+    7 => 'Pots apretar el botó dret del ratolí sobre el botó de sota i escollir \'save target...\' o \'save link location...\' per guardar una còpia del teu document.',
+    8 => 'La ruta donada per l\'arxiu de configuració a l\'HTMLDoc binari no és vàlida o aquest sistema no el pot executar.  Siusplau contacta amb l\'administrador del sistema si aquest problema continua.',
+    9 => 'Creador de PDF',
+    10 => 'Aquesta es l\'eina ad-hoc de creació de PDF. Intentarà convertir qualsevol URL que li donguis en un PDF.  Siusplau, pensa que algunes pàgines de la xarxa (Web) no es generaràn correctament amb aquesta funció.  Això és una limitació de l\'eina generadora d\'HTMLDoc PDF i aquests errors no haurien de ser enviats a l\'administrador d\'aquest lloc',
+    11 => 'URL',
+    12 => 'Crea un PDF!',
+    13 => 'La configuració PHP en aquest servidor no permet que les URL s\'utilitzin amb la instrucció fopen.  L\'administrador del sistema ha d\'editar l\'arxiu php.ini i que estigui conectat allow_url_fopen',
+    14 => 'El PDF que has solicitat o no existeix o has intentat accedir a un arxiu ilegalment.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/chinese_big5.php 1.4.0sr5-1/cpanel-glprivate/language/chinese_big5.php
--- 1.3.11sr1/cpanel-glprivate/language/chinese_big5.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/chinese_big5.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,5 +1,5 @@
-<?php
-
+<?php
+
 ###############################################################################
 # chinese_traditional_big5.php
 #
@@ -26,1248 +26,1486 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
 ###############################################################################
-
-$LANG_CHARSET = 'Big5';
-
-###############################################################################
-# Array Format:
-# $LANGXX[YY]:  $LANG - variable name
-#               XX    - file id number
-#               YY    - phrase id number
-###############################################################################
-
-###############################################################################
-# USER PHRASES - These are file phrases used in end user scripts
-###############################################################################
-
-###############################################################################
-# lib-common.php
-
-$LANG01 = array(
-    1 => '@̡J',
-    2 => 'Ū',
-    3 => 'ӵ',
-    4 => 's',
-    5 => '벼',
-    6 => 'G',
-    7 => '벼G',
-    8 => '벼',
-    9 => '޲z̥\J',
-    10 => '檫',
-    11 => '峹',
-    12 => 'ե',
-    13 => 'DD',
-    14 => 's',
-    15 => 'ƥ',
-    16 => '벼',
-    17 => 'Τ',
-    18 => 'SQL ',
-    19 => 'hX',
-    20 => 'ΤTJ',
-    21 => 'ΤW',
-    22 => 'ΤѧO',
-    23 => 'w',
-    24 => 'ΦW',
-    25 => '^_',
-    26 => 'HUץuݱiK̭ӤH[IC',
-    27 => '̪o',
-    28 => 'R',
-    29 => 'SסC',
-    30 => 'ª峹',
-    31 => '\ HTML аO:',
-    32 => '~ALĪΤW',
-    33 => '~AgtΤx;',
-    34 => '~',
-    35 => 'hX',
-    36 => '',
-    37 => 'S峹',
-    38 => 'e}[',
-    39 => 'Ϸs',
-    40 => 'AA <tt>php.ini</tt> س]w <tt>register_globals = Off</tt>. iOnݭnN <tt>register_globals</tt> ]w <strong>on</strong>. ҥHbA~HeAN]w<strong>on</strong>AM᭫s}.',
-    41 => 'ȤH',
-    42 => '@:',
-    43 => '^_o',
-    44 => '',
-    45 => 'MySQL ~X',
-    46 => 'MySQL ~T',
-    47 => 'Τ\',
-    48 => 'bT',
-    49 => '',
-    50 => '~ SQL statement',
-    51 => 'U',
-    52 => 's',
-    53 => '޲z̭',
-    54 => 'ॴ}ɡC',
-    55 => 'B',
-    56 => '벼',
-    57 => 'KX',
-    58 => 'nJ',
-    59 => "SbH<a href=\"{$_CONF['site_url']}/users.php?mode=new\">bnO</a>",
-    60 => 'o',
-    61 => 'sWb',
-    62 => 'r',
-    63 => '׳]w',
-    64 => '峹qlB',
-    65 => '[ݥiCL',
-    66 => 'ڪ',
-    67 => 'wӨ',
-    68 => '',
-    69 => 'p',
-    70 => 'jM',
-    71 => 'Z',
-    72 => '귽',
-    73 => '벼',
-    74 => '',
-    75 => 'ij',
-    76 => 'έp',
-    77 => '',
-    78 => 'YNoͪ',
-    79 => 'sAF',
-    80 => 'ӷs峹(',
-    81 => 's峹(',
-    82 => ' pɤ)',
-    83 => '',
-    84 => 's',
-    85 => '̪|QKp',
-    86 => 'Ss',
-    87 => '̪ӬP',
-    88 => 'Sss',
-    89 => 'SƵo',
-    90 => '',
-    91 => 'JoΤF',
-    92 => '',
-    93 => 'v',
-    94 => 'ҦӼЩMvݩL̦U۪Ҧ.',
-    95 => 'ʤO',
-    96 => 'p',
-    97 => 'r',
-    98 => '',
-    99 => '峹',
-    100 => 'Ss峹',
-    101 => 'Aƥ',
-    102 => 'ƥ',
-    103 => 'Ʈwƥ',
-    104 => '',
-    105 => 'HΤ',
-    106 => '[',
-    107 => 'GL ',
-    108 => 'MwĶJs',
-    109 => 'iݥ',
-    110 => 'iݵn嵹޲z',
-    111 => 'PDF ',
-    112 => 'nOΤ',
-    113 => 'ϥλ'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG02 = array(
-    1 => 'ƥ',
-    2 => 'pASƥC',
-    3 => '',
-    4 => 'a',
-    5 => '',
-    6 => 'sWƥ',
-    7 => 'YNoͪ',
-    8 => 'bNoƥ[iA䤧AAiI "ڪ" [',
-    9 => '[iڪ',
-    10 => 'qڪ䤤h',
-    11 => "oƥ[i {$_USER['username']} ",
-    12 => 'ƥ',
-    13 => '}l',
-    14 => '',
-    15 => '^'
-);
-
-###############################################################################
-# comment.php
-
-$LANG03 = array(
-    1 => 'o',
-    2 => 'o覡',
-    3 => 'hX',
-    4 => 'sWb',
-    5 => 'ΤW',
-    6 => 'ݭnnJ~ioסAеnJCpGASbAШϥΤUnOC',
-    7 => 'A̫o׬Ob ',
-    8 => " eCwܤ {$_CONF['commentspeedlimit']} ~iAo",
-    9 => '',
-    10 => 'eXi',
-    11 => 'o',
-    12 => 'жgD`',
-    13 => 'ѧAѦ',
-    14 => 'w',
-    15 => 'iogݵn',
-    16 => 'D',
-    17 => '~',
-    18 => 'nF',
-    19 => 'оqnDC',
-    20 => 'ɥi^_OHסAӤO}sסC',
-    21 => 'קKơAoפeХŪOHҼgC',
-    22 => 'оq²䪺DC',
-    23 => 'ڭ̤|}Aqla}C',
-    24 => 'ΦWΤ',
-    25 => 'A֩wQniݵn嵹޲z_?',
-    26 => '%s iHUݵn:',
-    27 => 'ݥγi'
-);
-
-###############################################################################
-# users.php
-
-$LANG04 = array(
-    1 => 'Τᷧp',
-    2 => 'ΤW',
-    3 => 'W',
-    4 => 'KX',
-    5 => 'qll',
-    6 => '',
-    7 => 'p',
-    8 => 'PGP _',
-    9 => 'Os]w',
-    10 => 'Τ᪺̫Qӵ',
-    11 => 'S',
-    12 => 'Τ]w',
-    13 => 'C]qlK',
-    14 => 'oOHKXAо֧CnKXХnJtΡAMIbTC',
-    15 => "Ab {$_CONF['site_name']} bwإߤFCШϥΥHUTnJtΨëOdol@ѦҡC",
-    16 => 'AbT',
-    17 => 'bäsb',
-    18 => 'AѪO@ӦĪql',
-    19 => 'ΤWιqlwgsb',
-    20 => 'ѪO@ӦĪql',
-    21 => '~',
-    22 => "nO {$_CONF['site_name']} I",
-    23 => "b {$_CONF['site_name']} nOΤiɦ|nBCL̥iHΦۤvWroשMs귽CЪ`N<b><i>|</i></b>}Τ᪺qlC",
-    24 => 'AKXNQeAJqlHc',
-    25 => 'ѰOFAKXܡH',
-    26 => 'ЧAJΤWMIqlKXAڭ̷|oe@ӷsKXAqlHcC',
-    27 => '{bNnOI',
-    28 => 'qlKX',
-    29 => 'hX',
-    30 => 'nJ',
-    31 => 'ݭnnJ~i',
-    32 => 'pW',
-    33 => '|}',
-    34 => 'oOAuW',
-    35 => 'nܽпJKX',
-    36 => '}lO http://',
-    37 => 'N|[bAoפW',
-    38 => 'A²',
-    39 => 'A@ PGP _',
-    40 => 'SDDϥ',
-    41 => '@ND',
-    42 => '榡',
-    43 => '峹',
-    44 => 'Sե',
-    45 => 'ܳ]w',
-    46 => ']A',
-    47 => 'stm',
-    48 => 'DD',
-    49 => '峹بSϹ',
-    50 => 'n_pGAP',
-    51 => 'uOs峹',
-    52 => 'w]ȬO',
-    53 => 'C߱骺峹',
-    54 => '_pGAݳoǥDDΧ@̡C',
-    55 => 'pGASܡAoNAnιw]եCpGAܤAҦw]cNQCw]F|βʵܡC',
-    56 => '@',
-    57 => 'ܤ覡',
-    58 => 'ƧǤ覡',
-    59 => '׭()',
-    60 => 'iܧA׶ܡH',
-    61 => '̷sγªH',
-    62 => 'w]O100',
-    63 => 'KXwQoeAA|ܧ֦쪺C',
-    64 => '׳]w',
-    65 => 'йզAnJ',
-    66 => "AiॴFAйզAnJCAO_<a href=\"{$_CONF['site_url']}/users.php?mode=new\">sΤ</a>H",
-    67 => '',
-    68 => 'Oڬ',
-    69 => 'bnJHAڭӰOAh[H',
-    70 => "w {$_CONF['site_name']} GMe",
-    71 => "@ {$_CONF['site_name']} DnSIOAiHwۤvGMeAOAO|C<a href=\"{$_CONF['site_url']}/users.php?mode=new\">bnO</a>CpGAwgOnOAШϥΥ䪺ϰnJC",
-    72 => 'D',
-    73 => 'y',
-    74 => 'ܥ~',
-    75 => 'DDwql',
-    76 => 'ХuܧAP쪺DDA]ҦsiK峹N|qlAHcC',
-    77 => 'ۤ',
-    78 => 'AۤvϤ',
-    79 => 'nRϤAboإ_',
-    80 => 'nJ',
-    81 => 'oeqll',
-    82 => 'Τ̪oQӤ峹',
-    83 => 'Τoέp',
-    84 => '峹`ơJ',
-    85 => '`ơJ',
-    86 => 'MҦoL峹J',
-    87 => 'AnJW',
-    88 => "H(]\OA)nFsKX \"%s\"  {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nYAuno˧@, ЧAIHUp:\n\n",
-    89 => "AYQno˧@, ЩoTCoƴNN|Q߱AӧAKXNO즳.\n\n",
-    90 => 'AibUJ@ӷsKXCЪ`NA±KXMĪANC',
-    91 => ']wsKX',
-    92 => 'JsKX',
-    93 => 'Ab %d enF@ӷsKX. Ww̤֭n %d H~iAnDsKXC',
-    94 => 'NΤ \'%s\' R',
-    95 => 'ڤU \'RΤ\' KNAbڭ̸ƮwتΤCЪ`NAAHΤҵnL峹Mפ|RAiO|HLW@̪ܡC',
-    96 => 'RΤ',
-    97 => 'TwΤR',
-    98 => 'A֩wnRAΤ? ANbϥΦ,DAs]wsΤ. YA֩wܽЦAڤU RΤᡨ.',
-    99 => 'pﶵ',
-    100 => '޲zӫH',
-    101 => '\޲zӫH',
-    102 => 'ΤӫH',
-    103 => '\LΤӫH',
-    104 => 'pp',
-    105 => 'b֦bp',
-    106 => 'm',
-    107 => 'ܦbA}²'
-);
-
-###############################################################################
-# index.php
-
-$LANG05 = array(
-    1 => 'SsDi',
-    2 => 'Ss峹iܡC',
-    3 => 'o]\OuSsDDάOA %s ]woӹLʡC',
-    4 => 'Y',
-    5 => 'U',
-    6 => 'W',
-    7 => 'Ĥ@',
-    8 => '̲'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => '귽',
-    2 => 'S귽i',
-    3 => '[@s'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => '벼OsF',
-    2 => 'A벼wQOsF',
-    3 => '벼',
-    4 => 'tΤ벼',
-    5 => '벼',
-    6 => 'ݨL벼D'
-);
-
-###############################################################################
-# profiles.php
-
-$LANG08 = array(
-    1 => 'oeqllɵoͿ~CЦAաC',
-    2 => 'qlweXC',
-    3 => 'нTwAb^_榳@ӥiΪqll}C',
-    4 => 'жgAWrB^_BDDMe',
-    5 => '~GSoΤC',
-    6 => 'oͿ~C',
-    7 => 'Τ',
-    8 => 'ΤW',
-    9 => 'ΤW URL',
-    10 => 'oel',
-    11 => 'AWrG',
-    12 => '^_G',
-    13 => 'DDG',
-    14 => 'eG',
-    15 => 'HTML |Q½ĶC',
-    16 => 'oel',
-    17 => '峹qlB',
-    18 => 'HWr',
-    19 => 'Hql',
-    20 => 'HHWr',
-    21 => 'HHql',
-    22 => 'Ҧ泣ng',
-    23 => "oqllO %s (%s) HAAL{A]\ogb {$_CONF['site_url']} 峹PCoOUl(SPAM)AAql}]|QC",
-    24 => 'oӤ峹צb',
-    25 => 'Uڭ̨tγQݥΡAAnJC',
-    26 => 'oӪ椹\AeqllAܪΤᤤCжgҦC',
-    27 => 'uH',
-    28 => '%s gDG',
-    29 => "Ӧ۩ {$_CONF['site_name']} CKAG",
-    30 => ' C骺ɨƳqTAG',
-    31 => 'D',
-    32 => '',
-    33 => '㪺峹bG',
-    34 => 'ql',
-    35 => '藍_AΤᤣ@NqH.'
-);
-
-###############################################################################
-# search.php
-
-$LANG09 = array(
-    1 => 'ijM',
-    2 => 'r',
-    3 => 'DD',
-    4 => 'Ҧ',
-    5 => '',
-    6 => '峹',
-    7 => '',
-    8 => '@',
-    9 => 'Ҧ',
-    10 => 'jM',
-    11 => 'jMG',
-    12 => '۰t',
-    13 => 'jMGGS۰t',
-    14 => 'SAM䪺FJ',
-    15 => 'ЦA',
-    16 => 'DD',
-    17 => '',
-    18 => '@',
-    19 => "jM {$_CONF['site_name']} s¤峹Ʈw",
-    20 => '',
-    21 => '',
-    22 => '(榡 ~-- YYYY-MM-DD)',
-    23 => 'ļ˼',
-    24 => '',
-    25 => 'Ӭ۰tb',
-    26 => 'ӶؤA@ΤF',
-    27 => '',
-    28 => 'SAҴM䪺峹ε',
-    29 => '峹MתG',
-    30 => 'SAҴM䪺s',
-    31 => 'SAҴM䪺',
-    32 => 'ƥ',
-    33 => 'URL',
-    34 => 'aI',
-    35 => 'Ҧl',
-    36 => 'SAҴM䪺ƥ',
-    37 => 'ƥ󪺵G',
-    38 => 'sG',
-    39 => 's',
-    40 => 'ƥ',
-    41 => 'jMr̤֭nTӦrC',
-    42 => 'Шϥ YYYY-MM-DD (~--) 榡C',
-    43 => 'ӵuy',
-    44 => 'Ҧr',
-    45 => '䤤r',
-    46 => 'HU',
-    47 => 'HW',
-    48 => '@',
-    49 => '',
-    50 => 'ļ˼',
-    51 => 'p',
-    52 => 'm',
-    53 => '峹G',
-    54 => '׵G',
-    55 => 'yl',
-    56 => 'M',
-    57 => ''
-);
-
-###############################################################################
-# stats.php
-
-$LANG10 = array(
-    1 => 'έp',
-    2 => 'tI`',
-    3 => '峹()`',
-    4 => '벼(o벼)`',
-    5 => 's(I)`',
-    6 => 'ƥ`',
-    7 => '̦h[ݪQӤ峹',
-    8 => '峹D',
-    9 => '[',
-    10 => 'ݨӥS峹άOSH[ݹL峹C',
-    11 => '̦hתQӤ峹',
-    12 => '',
-    13 => 'ݨӥS峹άOSH׹L峹C',
-    14 => '̦hH벼Qӿ|',
-    15 => '벼D',
-    16 => '벼',
-    17 => 'ݨӥS벼άOSHLC',
-    18 => '̦hHIQӳs',
-    19 => 's',
-    20 => 'I',
-    21 => 'ݨӥSsάOSHILsC',
-    22 => '̦hHHXQӤ峹',
-    23 => 'ql',
-    24 => 'ݨӨSHHXL峹'
-);
-
-###############################################################################
-# article.php
-
-$LANG11 = array(
-    1 => '?O',
-    2 => 'H峹B',
-    3 => 'iL峹榡',
-    4 => '峹ﶵ',
-    5 => 'PDF 峹'
-);
-
-###############################################################################
-# submit.php
-
-$LANG12 = array(
-    1 => 'AݭnnJ~io %s ',
-    2 => 'nJ',
-    3 => 'sΤ',
-    4 => 'o@',
-    5 => 'o@ӳs',
-    6 => 'o@Ӥ峹',
-    7 => 'AݭnnJ',
-    8 => 'o',
-    9 => 'boFɽиHHUĳ...<ul><li>gҦ<li>ѧMǽTT<li>ATˬd URLs</ul>',
-    10 => 'D',
-    11 => 's',
-    12 => '}l',
-    13 => '',
-    14 => 'aI',
-    15 => 'yz',
-    16 => 'pGOLAЫw',
-    17 => 'O',
-    18 => 'L',
-    19 => 'Ūo',
-    20 => '~GʤO',
-    21 => '"L"дѤ@OW',
-    22 => '~Gʤ',
-    23 => 'жgҦ',
-    24 => 'AowQOsF',
-    25 => 'A %s wQOsF',
-    26 => 't',
-    27 => 'ΤW',
-    28 => 'DD',
-    29 => '峹',
-    30 => 'A̫oO',
-    31 => " eCwܤ {$_CONF['speedlimit']} ~iAo",
-    32 => 'w',
-    33 => '峹 w',
-    34 => 'hX',
-    35 => '\ HTML аO',
-    36 => 'oҦ',
-    37 => "[ƥ {$_CONF['site_name']} |NAƥ[D䤤ALΤiHNa⥦[iۤvӤHC<b>n</b>AӤHƥĴpͤMP~[ihC<br><br>un޲zAƥ󥦱NX{bDWC",
-    38 => '[ƥ',
-    39 => 'D',
-    40 => 'ӤH',
-    41 => 'ɶ',
-    42 => '}lɶ',
-    43 => '骺ƥ',
-    44 => 'a} 1',
-    45 => 'a} 2',
-    46 => '/',
-    47 => '{',
-    48 => 'lϸ',
-    49 => 'ƥ',
-    50 => 'sƥ',
-    51 => 'aI',
-    52 => 'R',
-    53 => 's[b'
-);
-
-###############################################################################
-# ADMIN PHRASES - These are file phrases used in admin scripts
-###############################################################################
-
-###############################################################################
-# admin/auth.inc.php
-
-$LANG20 = array(
-    1 => 'nD{',
-    2 => 'ڵITnJ',
-    3 => 'LĪKX',
-    4 => 'ΤWG',
-    5 => 'KXG',
-    6 => 'ouѱvHϥΡC<br>ҦsNQOMˬdC',
-    7 => 'nJ'
-);
-
-###############################################################################
-# admin/block.php
-
-$LANG21 = array(
-    1 => 'vO',
-    2 => 'ASvhsoӤC',
-    3 => 'եs边',
-    4 => 'Ūyɵo{~AЦbA~Oɮ error.log جݲӸ`.',
-    5 => 'եD',
-    6 => 'DD',
-    7 => 'Ҧ',
-    8 => 'w',
-    9 => 'ե󦸧',
-    10 => 'ե',
-    11 => 'Jfե',
-    12 => '`',
-    13 => 'Jfﶵ',
-    14 => 'y RDF  URL',
-    15 => '̫᪺y RDF s',
-    16 => '`ﶵ',
-    17 => '󤺮e',
-    18 => 'жg󪺼DMeC',
-    19 => 'ե޲z',
-    20 => 'եD',
-    21 => 'w',
-    22 => 'ե',
-    23 => 'ե󦸧',
-    24 => 'DD',
-    25 => 'IUեiקΧRAIWsiгy@ӷsC',
-    26 => 'ե',
-    27 => 'PHP ե',
-    28 => 'PHP ﶵ',
-    29 => '',
-    30 => 'pGAQΦۤv PHP ƤAЦbWJƪWrCʪsXAPHP ƦWH "phpblock_" @}l (e.g. phpblock_getweather)CФnŪA "()" bƫC̫AĳAҦ PHP եb /path/to/geeklog/system/lib-custom.php إHKtΤɯšC',
-    31 => 'PHP ~J %s äsbC',
-    32 => '~Jʤ줸C',
-    33 => 'bJfA URL J .rdf ɮ',
-    34 => 'b PHP AJDDM',
-    35 => 'b`AJDDMe',
-    36 => 'bAJe',
-    37 => 'A PHP ƦW',
-    38 => 'ʪsXAPHP ƦWH "phpblock_" @}l (e.g. phpblock_getweather)C',
-    39 => 'b',
-    40 => '',
-    41 => 'k',
-    42 => 'btΪw]AJDM',
-    43 => 'uiO',
-    44 => 'sQڵ',
-    45 => "Ϧs\wQOC<a href=\"{$_CONF['site_admin_url']}/block.php\">Ϧ^ե޲zޭ</a>C",
-    46 => 'sե',
-    47 => '޲z',
-    48 => 'եW',
-    49 => ' (iŹjMOߤ@)',
-    50 => 'DU URL',
-    51 => ']A http://',
-    52 => 'pGoدdաA󪺨DUɹϥܱNQ',
-    53 => 'Ϧ',
-    54 => 'Os',
-    55 => '',
-    56 => 'R',
-    57 => 'Uե',
-    58 => 'Wե',
-    59 => 'եk',
-    60 => 'ե쥪'
-);
-
-###############################################################################
-# admin/event.php
-
-$LANG22 = array(
-    1 => 'ƥs边',
-    2 => 'Error',
-    3 => 'ƥD',
-    4 => 'ƥ URL',
-    5 => 'ƥ}l',
-    6 => 'ƥ󵲧',
-    7 => 'ƥaI',
-    8 => 'ƥyz',
-    9 => '(]A http://)',
-    10 => 'AѤɶBƥDDBPƥyzI',
-    11 => 'ƥ޲z',
-    12 => 'IUƥiקΧRAIWsƥiгy@ӷsC',
-    13 => 'ƥD',
-    14 => '}l',
-    15 => '',
-    16 => 'sQڵ',
-    17 => "Ϧs\ƥwQOC<a href=\"{$_CONF['site_admin_url']}/event.php\">Ϧ^ƥ޲zޭ</a>C",
-    18 => 'sƥ',
-    19 => '޲z',
-    20 => 'Os',
-    21 => '',
-    22 => 'R',
-    23 => '~}l.',
-    24 => '~.',
-    25 => 'b}le.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'ss边',
-    2 => '',
-    3 => 'sD',
-    4 => 's URL',
-    5 => 'O',
-    6 => '(]A http://)',
-    7 => 'L',
-    8 => 'sQ',
-    9 => 'syz',
-    10 => 'AݭnѳsDB URL MyzI',
-    11 => 's޲z',
-    12 => 'IUsiקΧRAIWssiгy@ӷsC',
-    13 => 'sD',
-    14 => 'sO',
-    15 => 's URL',
-    16 => 'sQڵ',
-    17 => "Ϧs\swQOC<a href=\"{$_CONF['site_admin_url']}/link.php\">Ϧ^s޲zޭ</a>C",
-    18 => 'ss',
-    19 => '޲z',
-    20 => 'pGOLAЫw',
-    21 => 'Os',
-    22 => '',
-    23 => 'R'
-);
-
-###############################################################################
-# admin/story.php
-
-$LANG24 = array(
-    1 => 'Wg峹',
-    2 => 'Ug峹',
-    3 => 'Ҧ',
-    4 => 'oҦ',
-    5 => '峹s边',
-    6 => 'S峹',
-    7 => '@',
-    8 => 'Os',
-    9 => 'w',
-    10 => '',
-    11 => 'R',
-    12 => 'ID',
-    13 => 'D',
-    14 => 'DD',
-    15 => '',
-    16 => '峹²',
-    17 => '峹e',
-    18 => 'I',
-    19 => '',
-    20 => '',
-    21 => '',
-    22 => '峹M',
-    23 => 'IU峹siקΧRAIU峹Di[ݥAIWs峹iгy@ӷsC',
-    24 => 'A諸ΤWHHbΡCХΥt@ӥΤWC',
-    25 => '',
-    26 => '峹w',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'W~',
-    31 => 'Aݭnѧ@̡BDM峹²I',
-    32 => 'Y',
-    33 => 'ui@Y峹',
-    34 => 'Z',
-    35 => 'O',
-    36 => '_',
-    37 => 'hӦ۩',
-    38 => 'ho',
-    39 => 'ql',
-    40 => 'sQڵ',
-    41 => "Ϧs\峹wQOCAiHHŪҦ[ݤU峹Cݧ<a href=\"{$_CONF['site_admin_url']}/story.php\">Ϧ^峹޲zޭ</a>C",
-    42 => "Ϧs\峹wQOC<a href=\"{$_CONF['site_admin_url']}/story.php\">Ϧ^峹޲zޭ</a>C",
-    43 => 's峹',
-    44 => '޲z',
-    45 => 'sv',
-    46 => '<b>`NJ</b>pGA令NӡAbӤeog峹N|QoCåB N۳og峹|]AbA RDF DAbjMMέp|QC',
-    47 => 'Ϲ',
-    48 => 'Ϲ',
-    49 => 'k',
-    50 => '',
-    51 => 'ХίSO榡r([imageX]B[imageX_right]  [imageX_left])ӴJϹA X OA[ϹsC`NJAuiϥΧA[Ϲ_hANLkOsA峹C<BR><P><B>w</B>J̨ιw峹kO峹OsZӤOwsCuS[Ϲɤ~ιwsC',
-    52 => 'R',
-    53 => 'SQϥΡCOseAAoӹϹ]tb峹²Τ峹eC',
-    54 => '[ϹQϥ',
-    55 => 'OsA峹ɵoͥHU~CЧ勵oǿ~AOs',
-    56 => 'ܥDDϥ',
-    57 => 'ݨSYpϹ',
-    58 => '峹޲z',
-    59 => 'ﶵ',
-    60 => 'wҰ',
-    61 => '۰ʫOs',
-    62 => '۰ʧR'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Ҧ',
-    2 => 'пJ@ӰDM̤֤@ӵ.',
-    3 => '벼o_',
-    4 => '벼 %s QOsF',
-    5 => 's벼',
-    6 => '벼s',
-    7 => '(iŹj)',
-    8 => 'X{bW',
-    9 => 'D',
-    10 => ' / 벼',
-    11 => 'o벼 (%s) ׮ɵoͿ~C',
-    12 => 'o벼 (%s) DɵoͿ~C',
-    13 => 's[벼',
-    14 => 'Os',
-    15 => '',
-    16 => 'R',
-    17 => 'пJ@ӧ벼 ID',
-    18 => '벼M',
-    19 => 'IU벼iקΧRAIWs벼iгy@ӷsC',
-    20 => '벼',
-    21 => 'sQڵ',
-    22 => "Ϧs\벼wQOC<a href=\"{$_CONF['site_admin_url']}/poll.php\">Ϧ^벼޲zޭ</a>C",
-    23 => 's벼',
-    24 => '޲z',
-    25 => 'O',
-    26 => '_'
-);
-
-###############################################################################
-# admin/topic.php
-
-$LANG27 = array(
-    1 => 'DDs边',
-    2 => 'DDs',
-    3 => 'DDW',
-    4 => 'DDϹ',
-    5 => '(iŹj)',
-    6 => 'RDD|PɧRҦ峹MեI',
-    7 => 'AݭnѥDDsMDDWI',
-    8 => 'DD޲z',
-    9 => 'IUDDiקΧRAIWsDDiгy@ӷsCbAاANo{AsŧOC',
-    10 => 'ƧǦ',
-    11 => '峹 / ',
-    12 => 'sQڵ',
-    13 => "Ϧs\DDwQOC<a href=\"{$_CONF['site_admin_url']}/topic.php\">Ϧ^DD޲zޭ</a>.",
-    14 => 'ƧǤk',
-    15 => 'rƧ',
-    16 => 'w]O',
-    17 => 'sDD',
-    18 => '޲z',
-    19 => 'Os',
-    20 => '',
-    21 => 'R',
-    22 => 'w]',
-    23 => 'ΦDD@sZw]D',
-    24 => '(*)',
-    25 => 'OsɪD',
-    26 => 'ΦDا@Osɪq{DءCu\@DءC'
-);
-
-###############################################################################
-# admin/user.php
-
-$LANG28 = array(
-    1 => 'Τs边',
-    2 => 'Τs',
-    3 => 'ΤW',
-    4 => 'W',
-    5 => 'KX',
-    6 => 'wŧO',
-    7 => 'qla}',
-    8 => '',
-    9 => '(iŹj)',
-    10 => 'AݭnѥΤWBWBwŧOMqla}C',
-    11 => 'Τ޲z',
-    12 => 'IUΤiקΧRAIWsΤiгy@ӷsCbU椤JΤWBql}ΥW (e.g.*son* or *.edu) Ai²檺MC',
-    13 => 'wŧO',
-    14 => 'nO',
-    15 => 'sΤ',
-    16 => '޲z',
-    17 => 'KX',
-    18 => '',
-    19 => 'R',
-    20 => 'Os',
-    21 => 'ΤWwgsb',
-    22 => '~',
-    23 => 'jqW[',
-    24 => 'jqJΤ',
-    25 => 'Ai@LJjqΤ Geeklog CJɮץO@ӥ tab jrɮסA줸ǬOJWBΤWBqla}CC@ӳQJΤN|@ӥHqlloeHKXCɮפC@O@ӥΤCSuoǭnDNyDA]\ݭnʧ@~AЦATˬdAɮסI',
-    26 => 'M',
-    27 => 'Gd',
-    28 => 'boإ_iRoiϤ',
-    29 => '|',
-    30 => 'J',
-    31 => 'sΤ',
-    32 => 'BzCJF %d ӡF%d ӥ',
-    33 => '',
-    34 => '~JAwWɮסC',
-    35 => '̫@nJ',
-    36 => '(q)'
-);
-
-###############################################################################
-# admin/moderation.php
-
-$LANG29 = array(
-    1 => '',
-    2 => 'R',
-    3 => 's',
-    4 => '²nyz',
-    10 => 'D',
-    11 => '}l',
-    12 => 'URL',
-    13 => 'O',
-    14 => '',
-    15 => 'DD',
-    16 => 'ΤW',
-    17 => 'W',
-    18 => 'qll',
-    34 => 'ROM',
-    35 => 'w檺峹',
-    36 => 'w檺s',
-    37 => 'w檺ƥ',
-    38 => '',
-    39 => 'ɨS檺F',
-    40 => 'ӽЪΤ'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG30 = array(
-    1 => 'Sunday',
-    2 => 'Monday',
-    3 => 'Tuesday',
-    4 => 'Wednesday',
-    5 => 'Thursday',
-    6 => 'Friday',
-    7 => 'Saturday',
-    8 => 'sWƥ',
-    9 => 'Geeklog ƥ',
-    10 => 'ƥ',
-    11 => 'D',
-    12 => 'ڪ',
-    13 => '@',
-    14 => 'G',
-    15 => 'T',
-    16 => '|',
-    17 => '',
-    18 => '',
-    19 => 'C',
-    20 => 'K',
-    21 => 'E',
-    22 => 'Q',
-    23 => 'Q@',
-    24 => 'QG',
-    25 => '^',
-    26 => '',
-    27 => 'P',
-    28 => 'ӤHJ',
-    29 => '',
-    30 => 'Rƥ',
-    31 => 'sW',
-    32 => 'ƥ',
-    33 => 'P',
-    34 => 'ɶ',
-    35 => 'tW[',
-    36 => '',
-    37 => 'pAäѭӤHC',
-    38 => 'ӤHƥs边',
-    39 => '',
-    40 => 'P',
-    41 => ''
-);
-
-###############################################################################
-# admin/mail.php
-
-$LANG31 = array(
-    1 => "{$_CONF['site_name']} l{",
-    2 => 'HH',
-    3 => '^_',
-    4 => 'DD',
-    5 => 'e',
-    6 => 'HJ',
-    7 => 'ҦΤ',
-    8 => '޲z',
-    9 => 'ﶵ',
-    10 => 'HTML',
-    11 => 'TI',
-    12 => 'oe',
-    13 => ']',
-    14 => 'Τ]w',
-    15 => '~AoeJ',
-    16 => 'TwoeJ',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>oeLH</a>",
-    18 => 'H',
-    19 => '`NJpGAƱoeT쥻ҦAЦbpտ줤 Logged-in Users groupC',
-    20 => "woe <successcount> ӰTA <failcount> ӤoeCoeӸ`bUCpQݲӸ`AAi<a href=\"{$_CONF['site_admin_url']}/mail.php\">oeLT</a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">Ϧ^޲z</a>C",
-    21 => '',
-    22 => '\ ',
-    23 => '\ ',
-    24 => '',
-    25 => '-- пp --',
-    26 => 'жgҦW줸Mܤ@ӤpաC'
-);
-
-###############################################################################
-# admin/plugins.php
-
-$LANG32 = array(
-    1 => 'w˴laADtΡC ݭnSOpߡC ̦nnw˥AAѪC',
-    2 => 'wn',
-    3 => 'w˪',
-    4 => 'ɮ',
-    5 => 'M',
-    6 => 'ĵiJwgQw˹LI',
-    7 => 'AQw˪wgsbAХ⥦RAwˡC',
-    8 => '󤣯qLۮeʮC',
-    9 => 'onD@ӧs Geeklog. AiHɯŧA<a href="http://www.geeklog.net">Geeklog</a>άOt@ӾAXC',
-    10 => '<br><b>Sw˪C</b><br><br>',
-    11 => 'YQקΧRAIHU󪺦W١Co|ܴ󪺸ԲӤeMs@̪Cw˪MqNXӪ|XӡCo|ADO_ӧsCYnw˩ΤɯŴпԸߥC',
-    12 => 'plugineditor() 䤣촡W',
-    13 => 's边',
-    14 => 's',
-    15 => '޲z',
-    16 => 'Wr',
-    17 => '󪩥',
-    18 => 'Geeklog ',
-    19 => 'Ϧ',
-    20 => 'O',
-    21 => '_',
-    22 => 'w',
-    23 => 'Os',
-    24 => '',
-    25 => 'R',
-    26 => 'W',
-    27 => '󭺭',
-    28 => 'ww˪󪩥',
-    29 => 'Geeklog ',
-    30 => 'RH',
-    31 => 'A֩wnRoӴܡHo?|RҦoɡBƩMƵcCpGA֩wAЦAIU椤RsC',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'NX',
-    34 => 's'
-);
-
-###############################################################################
-# admin/syndication.php
-
-$LANG33 = array(
-    1 => 'إߤy',
-    2 => 'Os',
-    3 => 'R',
-    4 => '',
-    10 => 'e}[',
-    11 => 'sy',
-    12 => '޲zB',
-    13 => 'YnקΧR@Ӥy, A@UDDWI. Ynإ߷sy, IHWsy.',
-    14 => 'D',
-    15 => '',
-    16 => 'ɮצW',
-    17 => '榡',
-    18 => '̫@s',
-    19 => 'Ұ',
-    20 => 'O',
-    21 => '_',
-    22 => '<i>(Ly)</i>',
-    23 => 'Ҧ峹',
-    24 => 'ys',
-    25 => 'yD',
-    26 => 'w',
-    27 => 'ت',
-    28 => '(0 = L, 1 = , other = w󦹦r.)',
-    29 => '',
-    30 => '̫@s',
-    31 => 'r',
-    32 => 'y',
-    33 => 'e',
-    34 => '',
-    35 => 'p',
-    36 => 'ܤy',
-    37 => 'A̤֤@ӦwˤFtXe}[.@UAݭnܧAO_nإߤ@ӥDtΤyδy.',
-    38 => '~: ʤָT',
-    39 => 'жJyD, , MɮצW.',
-    40 => 'пJؼƥةΤpɼƥ.',
-    41 => 's',
-    42 => 'ƥ'
-);
-
-###############################################################################
-# confirmation and error messages
-
-$MESSAGE = array(
-    1 => "ڭ̤wqlFAKXAqlHcAиHl󤤪ܡCh¨ϥ {$_CONF['site_name']}",
-    2 => "h»A峹 {$_CONF['site_name']} CungLڭ̭uֹAA峹NX{bڭ̪WC",
-    3 => "h»s {$_CONF['site_name']} CungLڭ̭uֹAAsNX{bڭ̪WC",
-    4 => "h»ƥ {$_CONF['site_name']} CungLڭ̭uֹAAƥNX{bڭ̪<a href={$_CONF['site_url']}/calendar.php></a>WC",
-    5 => 'Ab]wwQOsFC',
-    6 => 'AӤH]wwQOsFC',
-    7 => 'Aפ]wwQOsFC',
-    8 => 'AwhXC',
-    9 => 'A峹wQOsFC',
-    10 => 'A峹wQRFC',
-    11 => 'AեwQOsFC',
-    12 => 'AեwQRFC',
-    13 => 'ADDwQOsFC',
-    14 => 'ADDMҦ峹wQRFC',
-    15 => 'AswQOsFC',
-    16 => 'AswQRFC',
-    17 => 'AƥwQOsFC',
-    18 => 'AƥwQRFC',
-    19 => 'A벼wQOsFC',
-    20 => 'A벼wQRFC',
-    21 => 'ΤwQOsFC',
-    22 => 'ΤwQRFC',
-    23 => 'W[ƥAɵoͿ~Aʤ֤FƥsC',
-    24 => 'ƥwW[A䤤C',
-    25 => 'AnnJ~i}ҧAӤHC',
-    26 => 'ƥwqA䤤C',
-    27 => 'TwoeC',
-    28 => 'wQOsFC',
-    29 => 'pAäѭӤHC',
-    30 => 'sQڵ',
-    31 => 'pAAiJ峹޲zCЪ`NAϤwQOC',
-    32 => 'pAAiJDD޲zCЪ`NAϤwQOC',
-    33 => 'pAAiJե޲zCЪ`NAϤwQOC',
-    34 => 'pAAiJs޲zCЪ`NAϤwQOC',
-    35 => 'pAAiJƥ޲zCЪ`NAϤwQOC',
-    36 => 'pAAiJ벼޲zCЪ`NAϤwQOC',
-    37 => 'pAAiJΤ޲zCЪ`NAϤwQOC',
-    38 => 'pAAiJ Plug-in ޲zCЪ`NAϤwQOC',
-    39 => 'pAAiJql޲zCЪ`NAϤwQOC',
-    40 => 'tΰT',
-    41 => 'pAAiJrCЪ`NAϤwQOC',
-    42 => 'ArwQOsFC',
-    43 => 'ArwQRFC',
-    44 => 'wQwˤFC',
-    45 => 'wQRFC',
-    46 => 'pAAiJƮwƥ{CЪ`NAϤwQOC',
-    47 => 'ouAΩ *nix pGA@~tάO *nixA?AwľwQMFCpGA@~tάO WindowsAAnʴMɩRW adodb _ *.php ɮרç⥦̰hC',
-    48 => "P§AӽЦ {$_CONF['site_name']} |CungLڭ̭uֹAڭ̷|KXHAҵnOqlC",
-    49 => 'ApդwQOsFC',
-    50 => 'pդwQRFC',
-    51 => 'ΤWwHbΡCпܥt@ӡC',
-    52 => 'AqH}OġC',
-    53 => 'AsKXwQC{bHUХΧAsKXӵnJ.',
-    54 => 'AnDsKXHLCЦbUqsnDC',
-    55 => 'wgAHF@ʹqHCзӦHӳ]wsKXC',
-    56 => 'AѵqH}wOΤbϥΡC',
-    57 => 'AΤwg\aRFC',
-    58 => 'Ayw\OsF.',
-    59 => 'Ayw\RF.',
-    60 => 'wgs',
-    61 => ' %s: WTe줸'
-);
-
-###############################################################################
-
-$LANG_ACCESS = array(
-    'access' => 's',
-    'ownerroot' => 'Ҧ/Root',
-    'group' => 'p',
-    'readonly' => 'Ū',
-    'accessrights' => 'sv',
-    'owner' => 'Ҧ',
-    'grantgrouplabel' => 'WpսsvQ',
-    'permmsg' => '`NJ|OҦUMnJΤFӰΦWOҦDUy̩ΨSnJΤC',
-    'securitygroups' => 'wp',
-    'editrootmsg' => "YϧAOΤ޲zFAs root ΤCAsҦΤᰣF root ΤCЪ`NҦϫDkas root Τ᪺ʧ@wQOCЦ^<a href=\"{$_CONF['site_admin_url']}/user.php\">Τ޲z</a>hC",
-    'securitygroupsmsg' => 'ܳoΤݩ󪺤pաC',
-    'groupeditor' => 'pսs边',
-    'description' => 'yz',
-    'name' => 'Wr',
-    'rights' => '\iv',
-    'missingfields' => 'ʤ',
-    'missingfieldsmsg' => 'AѤpժWrMyz',
-    'groupmanager' => 'pպ޲z',
-    'newgroupmsg' => 'IUpեiקΧRAIWspեiгy@ӷsCЪ`NҮ֤ߤpդQRC',
-    'groupname' => 'զW',
-    'coregroup' => '֤ߤp',
-    'yes' => 'O',
-    'no' => '_',
-    'corerightsdescr' => "oӤpժ\ivQsA]oO {$_CONF['site_name']} ֤ߤpաCHUOopժ\ivM(Ū)C",
-    'groupmsg' => 'wpզboOŨתCW[oӤpըt@էOAoӤpձNo쨺էO\ivCкɥipե[UCէOhCpGopջݭnSO\ivAAiHbHU"vQ"ϰ줤DCnpե[էOhAAuݭnbէO䪺Dﲰ_C',
-    'coregroupmsg' => "]oO {$_CONF['site_name']} ֤ߤpաAoӤpժ\ivQsCHUOopժէOM(Ū)C",
-    'rightsdescr' => 'pժ\iviHOӦ۩pեάOopթݪէOCHU\ivpS粰YNo\ivOӦ۩pթݪէOFp粰YNAiH\ivopաC',
-    'lock' => '',
-    'members' => '',
-    'anonymous' => 'ΦW',
-    'permissions' => '\iv',
-    'permissionskey' => 'R = ŪA E = sAsvYŪv',
-    'edit' => 's',
-    'none' => 'S',
-    'accessdenied' => 'sQڵ',
-    'storydenialmsg' => "]QAAiH[ݳoӤ峹CoOiO]AäO {$_CONF['site_name']} |C<a href=users.php?mode=new>|</a>C",
-    'eventdenialmsg' => "]QAAiH[ݳoӨƥCoOiO]AäO {$_CONF['site_name']} |C<a href=users.php?mode=new>|</a>C",
-    'nogroupsforcoregroup' => 'opդݩLp',
-    'grouphasnorights' => ' opըS޲zvC',
-    'newgroup' => 'sp',
-    'adminhome' => '޲z',
-    'save' => 'Os',
-    'cancel' => '',
-    'delete' => 'R',
-    'canteditroot' => ']Aݩ Root pաAҥHA Root pժקQڵFCpDлPtκ޲zpôC',
-    'listusers' => 'CXΤ',
-    'listthem' => 'CX',
-    'usersingroup' => 'ݩ "%s" pժΤ',
-    'usergroupadmin' => 'Τpպ޲z',
-    'add' => '[J',
-    'remove' => 'K',
-    'availmembers' => 'iΪ',
-    'groupmembers' => 'pզ',
-    'canteditgroup' => 'Ynק惡p, AnɳoӤpժ. YA{oO~, ЧAptκ޲z.',
-    'cantlistgroup' => 'nݦpժ|AAOpժ|CAY{oO~Aptκ޲zC'
-);
-
-###############################################################################
-# admin/database.php
-
-$LANG_DB_BACKUP = array(
-    'last_ten_backups' => '̫Qӳƥ',
-    'do_backup' => 'ƥ',
-    'backup_successful' => 'ƮwƥC',
-    'no_backups' => 'Sƥ',
-    'db_explanation' => 'ns Geeklog ƥAIHUs',
-    'not_found' => "T| mysqldump {iC<br>ˬd<strong>$_DB_mysqldump_path</strong>wqb config.php.<br>ܼƲ{bQwqJ<var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => 'ƥѡJɮ׬O 0 jp',
-    'path_not_found' => "{$_CONF['backup_path']} sbΤOؿ",
-    'no_access' => "~Jؿ {$_CONF['backup_path']} AsC",
-    'backup_file' => 'ƥɮ',
-    'size' => 'jp',
-    'bytes' => '줸',
-    'total_number' => '`ƥ: %d'
-);
-
-###############################################################################
-
-$LANG_BUTTONS = array(
-    1 => '',
-    2 => 'p',
-    3 => 'Z',
-    4 => 's',
-    5 => '벼',
-    6 => '',
-    7 => 'έp',
-    8 => 'ӤH',
-    9 => 'j',
-    10 => 'ijM'
-);
-
-###############################################################################
-# 404.php
-
-$LANG_404 = array(
-    1 => '404 ~',
-    2 => 'xAڨBݹLF䤣<b>%s</b>.',
-    3 => "<p>ܩpAAnDɤsbCˬd<a href=\"{$_CONF['site_url']}\">D</a><a href=\"{$_CONF['site_url']}/search.php\">j</a>ݬݯo{?C"
-);
-
-###############################################################################
-# login form
-
-$LANG_LOGIN = array(
-    1 => 'nDnJ',
-    2 => 'pAnDnJ~isoӰϰC',
-    3 => 'nJ',
-    4 => 'sΤ'
-);
-
-###############################################################################
-# pdfgenerator.php
-
-$LANG_PDF = array(
-    1 => 'PDF @ΤwQT',
-    2 => 'ҴѪɨSeCɤwAOLkBzCЪ֩wAҴ檺ɬO html 榡ɼg xHTML зǡCЪ`NL html ɤ]iLkTeCAɴ檺GO 0 bytes ӥBwQRCAY֩wAӶQeAAC',
-    3 => 'WPDF ɻs@~C',
-    4 => "SѭƸƩΧAnΥHUSO PDF s@uCYA{Aұo쪺oO~C ptκ޲zCnMAAiΥHUӯSOs@ PDFC",
-    5 => 'b˸mAɡC',
-    6 => 'AɳQ˸mɽеݡC',
-    7 => 'AiΥkHUsAM \'save target...\' or \'save link location...\' ӦsAɪ@ӫC',
-    8 => "btmɮت HTMLDocGiɮ׸|~AΦtεLk榹ɮסCYD~o͡Ap޲zC",
-    9 => 'PDF s@',
-    10 => "oOSO PDF s@uC|N URL ഫ PDF CЪ`NAǺ|TQouBz\CoO HTMLDoc PDF s@u㪺BAӳo˪~ݭni޲zC",
-    11 => 'URL',
-    12 => 's@ PDF!',
-    13 => 'A PHP tm\ fopen() ROΦb URL WC tκ޲zק  php.ini ɮסAM]w allow_url_fopen  On',
-    14 => 'AnD PDF sbΧAbDkJ@ɮסC'
-);
-
-?>
+
+$LANG_CHARSET = 'Big5';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => '@̡J',
+    2 => 'Ū',
+    3 => 'ӵ',
+    4 => 's',
+    5 => '벼',
+    6 => 'G',
+    7 => '벼G',
+    8 => '벼',
+    9 => '޲z̥\J',
+    10 => '檫',
+    11 => '峹',
+    12 => 'ե',
+    13 => 'DD',
+    14 => 's',
+    15 => 'ƥ',
+    16 => '벼',
+    17 => 'Τ',
+    18 => 'SQL ',
+    19 => 'hX',
+    20 => 'ΤTJ',
+    21 => 'ΤW',
+    22 => 'ΤѧO',
+    23 => 'w',
+    24 => 'ΦW',
+    25 => '^_',
+    26 => 'HUץuݱiK̭ӤH[IC',
+    27 => '̪o',
+    28 => 'R',
+    29 => 'SסC',
+    30 => 'ª峹',
+    31 => '\ HTML аO:',
+    32 => '~ALĪΤW',
+    33 => '~AgtΤx;',
+    34 => '~',
+    35 => 'hX',
+    36 => '',
+    37 => 'S峹',
+    38 => 'e}[',
+    39 => 'Ϸs',
+    40 => 'AA <tt>php.ini</tt> س]w <tt>register_globals = Off</tt>. iOnݭnN <tt>register_globals</tt> ]w <strong>on</strong>. ҥHbA~HeAN]w<strong>on</strong>AM᭫s}.',
+    41 => 'ȤH',
+    42 => '@:',
+    43 => '^_o',
+    44 => '',
+    45 => 'MySQL ~X',
+    46 => 'MySQL ~T',
+    47 => 'Τ\',
+    48 => 'bT',
+    49 => '',
+    50 => '~ SQL statement',
+    51 => 'U',
+    52 => 's',
+    53 => '޲z̭',
+    54 => 'ॴ}ɡC',
+    55 => 'B',
+    56 => '벼',
+    57 => 'KX',
+    58 => 'nJ',
+    59 => "SbH<a href=\"{$_CONF['site_url']}/users.php?mode=new\">bnO</a>",
+    60 => 'o',
+    61 => 'sWb',
+    62 => 'r',
+    63 => '׳]w',
+    64 => '峹qlB',
+    65 => '[ݥiCL',
+    66 => 'ڪ',
+    67 => 'wӨ',
+    68 => '',
+    69 => 'p',
+    70 => 'jM',
+    71 => 'Z',
+    72 => '귽',
+    73 => '벼',
+    74 => '',
+    75 => 'ij',
+    76 => 'έp',
+    77 => '',
+    78 => 'YNoͪ',
+    79 => 'sAF',
+    80 => 'ӷs峹(',
+    81 => 's峹(',
+    82 => ' pɤ)',
+    83 => '',
+    84 => 's',
+    85 => '̪|QKp',
+    86 => 'Ss',
+    87 => '̪ӬP',
+    88 => 'Sss',
+    89 => 'SƵo',
+    90 => '',
+    91 => 'JoΤF',
+    92 => '',
+    93 => 'v',
+    94 => 'ҦӼЩMvݩL̦U۪Ҧ.',
+    95 => 'ʤO',
+    96 => 'p',
+    97 => 'r',
+    98 => '',
+    99 => '峹',
+    100 => 'Ss峹',
+    101 => 'Aƥ',
+    102 => 'ƥ',
+    103 => 'Ʈwƥ',
+    104 => '',
+    105 => 'HΤ',
+    106 => '[',
+    107 => 'GL ',
+    108 => 'MwĶJs',
+    109 => 'iݥ',
+    110 => 'iݵn嵹޲z',
+    111 => 'PDF ',
+    112 => 'nOΤ',
+    113 => 'ϥλ',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'ƥ',
+    2 => 'pASƥC',
+    3 => '',
+    4 => 'a',
+    5 => '',
+    6 => 'sWƥ',
+    7 => 'YNoͪ',
+    8 => 'bNoƥ[iA䤧AAiI "ڪ" [',
+    9 => '[iڪ',
+    10 => 'qڪ䤤h',
+    11 => "oƥ[i {$_USER['username']} ",
+    12 => 'ƥ',
+    13 => '}l',
+    14 => '',
+    15 => '^'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'o',
+    2 => 'o覡',
+    3 => 'hX',
+    4 => 'sWb',
+    5 => 'ΤW',
+    6 => 'ݭnnJ~ioסAеnJCpGASbAШϥΤUnOC',
+    7 => 'A̫o׬Ob ',
+    8 => " eCwܤ {$_CONF['commentspeedlimit']} ~iAo",
+    9 => '',
+    10 => 'eXi',
+    11 => 'o',
+    12 => 'жgD`',
+    13 => 'ѧAѦ',
+    14 => 'w',
+    15 => 'iogݵn',
+    16 => 'D',
+    17 => '~',
+    18 => 'nF',
+    19 => 'оqnDC',
+    20 => 'ɥi^_OHסAӤO}sסC',
+    21 => 'קKơAoפeХŪOHҼgC',
+    22 => 'оq²䪺DC',
+    23 => 'ڭ̤|}Aqla}C',
+    24 => 'ΦWΤ',
+    25 => 'A֩wQniݵn嵹޲z_?',
+    26 => '%s iHUݵn:',
+    27 => 'ݥγi'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Τᷧp',
+    2 => 'ΤW',
+    3 => 'W',
+    4 => 'KX',
+    5 => 'qll',
+    6 => '',
+    7 => 'p',
+    8 => 'PGP _',
+    9 => 'Os]w',
+    10 => 'Τ᪺̫Qӵ',
+    11 => 'S',
+    12 => 'Τ]w',
+    13 => 'C]qlK',
+    14 => 'oOHKXAо֧CnKXХnJtΡAMIbTC',
+    15 => "Ab {$_CONF['site_name']} bwإߤFCШϥΥHUTnJtΨëOdol@ѦҡC",
+    16 => 'AbT',
+    17 => 'bäsb',
+    18 => 'AѪO@ӦĪql',
+    19 => 'ΤWιqlwgsb',
+    20 => 'ѪO@ӦĪql',
+    21 => '~',
+    22 => "nO {$_CONF['site_name']} I",
+    23 => "b {$_CONF['site_name']} nOΤiɦ|nBCL̥iHΦۤvWroשMs귽CЪ`N<b><i>|</i></b>}Τ᪺qlC",
+    24 => 'AKXNQeAJqlHc',
+    25 => 'ѰOFAKXܡH',
+    26 => 'ЧAJΤWMIqlKXAڭ̷|oe@ӷsKXAqlHcC',
+    27 => '{bNnOI',
+    28 => 'qlKX',
+    29 => 'hX',
+    30 => 'nJ',
+    31 => 'ݭnnJ~i',
+    32 => 'pW',
+    33 => '|}',
+    34 => 'oOAuW',
+    35 => 'nܽпJKX',
+    36 => '}lO http://',
+    37 => 'N|[bAoפW',
+    38 => 'A²',
+    39 => 'A@ PGP _',
+    40 => 'SDDϥ',
+    41 => '@ND',
+    42 => '榡',
+    43 => '峹',
+    44 => 'Sե',
+    45 => 'ܳ]w',
+    46 => ']A',
+    47 => 'stm',
+    48 => 'DD',
+    49 => '峹بSϹ',
+    50 => 'n_pGAP',
+    51 => 'uOs峹',
+    52 => 'w]ȬO',
+    53 => 'C߱骺峹',
+    54 => '_pGAݳoǥDDΧ@̡C',
+    55 => 'pGASܡAoNAnιw]եCpGAܤAҦw]cNQCw]F|βʵܡC',
+    56 => '@',
+    57 => 'ܤ覡',
+    58 => 'ƧǤ覡',
+    59 => '׭()',
+    60 => 'iܧA׶ܡH',
+    61 => '̷sγªH',
+    62 => 'w]O100',
+    63 => 'KXwQoeAA|ܧ֦쪺C',
+    64 => '׳]w',
+    65 => 'йզAnJ',
+    66 => "AiॴFAйզAnJCAO_<a href=\"{$_CONF['site_url']}/users.php?mode=new\">sΤ</a>H",
+    67 => '',
+    68 => 'Oڬ',
+    69 => 'bnJHAڭӰOAh[H',
+    70 => "w {$_CONF['site_name']} GMe",
+    71 => "@ {$_CONF['site_name']} DnSIOAiHwۤvGMeAOAO|C<a href=\"{$_CONF['site_url']}/users.php?mode=new\">bnO</a>CpGAwgOnOAШϥΥ䪺ϰnJC",
+    72 => 'D',
+    73 => 'y',
+    74 => 'ܥ~',
+    75 => 'DDwql',
+    76 => 'ХuܧAP쪺DDA]ҦsiK峹N|qlAHcC',
+    77 => 'ۤ',
+    78 => 'AۤvϤ',
+    79 => 'nRϤAboإ_',
+    80 => 'nJ',
+    81 => 'oeqll',
+    82 => 'Τ̪oQӤ峹',
+    83 => 'Τoέp',
+    84 => '峹`ơJ',
+    85 => '`ơJ',
+    86 => 'MҦoL峹J',
+    87 => 'AnJW',
+    88 => "H(]\OA)nFsKX \"%s\"  {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nYAuno˧@, ЧAIHUp:\n\n",
+    89 => "AYQno˧@, ЩoTCoƴNN|Q߱AӧAKXNO즳.\n\n",
+    90 => 'AibUJ@ӷsKXCЪ`NA±KXMĪANC',
+    91 => ']wsKX',
+    92 => 'JsKX',
+    93 => 'Ab %d enF@ӷsKX. Ww̤֭n %d H~iAnDsKXC',
+    94 => 'NΤ \'%s\' R',
+    95 => 'ڤU \'RΤ\' KNAbڭ̸ƮwتΤCЪ`NAAHΤҵnL峹Mפ|RAiO|HLW@̪ܡC',
+    96 => 'RΤ',
+    97 => 'TwΤR',
+    98 => 'A֩wnRAΤ? ANbϥΦ,DAs]wsΤ. YA֩wܽЦAڤU RΤᡨ.',
+    99 => 'pﶵ',
+    100 => '޲zӫH',
+    101 => '\޲zӫH',
+    102 => 'ΤӫH',
+    103 => '\LΤӫH',
+    104 => 'pp',
+    105 => 'b֦bp',
+    106 => 'm',
+    107 => 'ܦbA}²',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'SsDi',
+    2 => 'Ss峹iܡC',
+    3 => 'o]\OuSsDDάOA %s ]woӹLʡC',
+    4 => 'Y',
+    5 => 'U',
+    6 => 'W',
+    7 => 'Ĥ@',
+    8 => '̲'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'oeqllɵoͿ~CЦAաC',
+    2 => 'qlweXC',
+    3 => 'нTwAb^_榳@ӥiΪqll}C',
+    4 => 'жgAWrB^_BDDMe',
+    5 => '~GSoΤC',
+    6 => 'oͿ~C',
+    7 => 'Τ',
+    8 => 'ΤW',
+    9 => 'ΤW URL',
+    10 => 'oel',
+    11 => 'AWrG',
+    12 => '^_G',
+    13 => 'DDG',
+    14 => 'eG',
+    15 => 'HTML |Q½ĶC',
+    16 => 'oel',
+    17 => '峹qlB',
+    18 => 'HWr',
+    19 => 'Hql',
+    20 => 'HHWr',
+    21 => 'HHql',
+    22 => 'Ҧ泣ng',
+    23 => "oqllO %s (%s) HAAL{A]\ogb {$_CONF['site_url']} 峹PCoOUl(SPAM)AAql}]|QC",
+    24 => 'oӤ峹צb',
+    25 => 'Uڭ̨tγQݥΡAAnJC',
+    26 => 'oӪ椹\AeqllAܪΤᤤCжgҦC',
+    27 => 'uH',
+    28 => '%s gDG',
+    29 => "Ӧ۩ {$_CONF['site_name']} CKAG",
+    30 => ' C骺ɨƳqTAG',
+    31 => 'D',
+    32 => '',
+    33 => '㪺峹bG',
+    34 => 'ql',
+    35 => '藍_AΤᤣ@NqH.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'ijM',
+    2 => 'r',
+    3 => 'DD',
+    4 => 'Ҧ',
+    5 => '',
+    6 => '峹',
+    7 => '',
+    8 => '@',
+    9 => 'Ҧ',
+    10 => 'jM',
+    11 => 'jMG',
+    12 => '۰t',
+    13 => 'jMGGS۰t',
+    14 => 'SAM䪺FJ',
+    15 => 'ЦA',
+    16 => 'DD',
+    17 => '',
+    18 => '@',
+    19 => "jM {$_CONF['site_name']} s¤峹Ʈw",
+    20 => '',
+    21 => '',
+    22 => '(榡 ~-- YYYY-MM-DD)',
+    23 => 'ļ˼',
+    24 => '',
+    25 => 'Ӭ۰tb',
+    26 => 'ӶؤA@ΤF',
+    27 => '',
+    28 => 'SAҴM䪺峹ε',
+    29 => '峹MתG',
+    30 => 'SAҴM䪺s',
+    31 => 'SAҴM䪺',
+    32 => 'ƥ',
+    33 => 'URL',
+    34 => 'aI',
+    35 => 'Ҧl',
+    36 => 'SAҴM䪺ƥ',
+    37 => 'ƥ󪺵G',
+    38 => 'sG',
+    39 => 's',
+    40 => 'ƥ',
+    41 => 'jMr̤֭nTӦrC',
+    42 => 'Шϥ YYYY-MM-DD (~--) 榡C',
+    43 => 'ӵuy',
+    44 => 'Ҧr',
+    45 => '䤤r',
+    46 => 'HU',
+    47 => 'HW',
+    48 => '@',
+    49 => '',
+    50 => 'ļ˼',
+    51 => 'p',
+    52 => 'm',
+    53 => '峹G',
+    54 => '׵G',
+    55 => 'yl',
+    56 => 'M',
+    57 => '',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'έp',
+    2 => 'tI`',
+    3 => '峹()`',
+    4 => '벼(o벼)`',
+    5 => 's(I)`',
+    6 => 'ƥ`',
+    7 => '̦h[ݪQӤ峹',
+    8 => '峹D',
+    9 => '[',
+    10 => 'ݨӥS峹άOSH[ݹL峹C',
+    11 => '̦hתQӤ峹',
+    12 => '',
+    13 => 'ݨӥS峹άOSH׹L峹C',
+    14 => '̦hH벼Qӿ|',
+    15 => '벼D',
+    16 => '벼',
+    17 => 'ݨӥS벼άOSHLC',
+    18 => '̦hHIQӳs',
+    19 => 's',
+    20 => 'I',
+    21 => 'ݨӥSsάOSHILsC',
+    22 => '̦hHHXQӤ峹',
+    23 => 'ql',
+    24 => 'ݨӨSHHXL峹',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => '?O',
+    2 => 'H峹B',
+    3 => 'iL峹榡',
+    4 => '峹ﶵ',
+    5 => 'PDF 峹'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'AݭnnJ~io %s ',
+    2 => 'nJ',
+    3 => 'sΤ',
+    4 => 'o@',
+    5 => 'o@ӳs',
+    6 => 'o@Ӥ峹',
+    7 => 'AݭnnJ',
+    8 => 'o',
+    9 => 'boFɽиHHUĳ...<ul><li>gҦ<li>ѧMǽTT<li>ATˬd URLs</ul>',
+    10 => 'D',
+    11 => 's',
+    12 => '}l',
+    13 => '',
+    14 => 'aI',
+    15 => 'yz',
+    16 => 'pGOLAЫw',
+    17 => 'O',
+    18 => 'L',
+    19 => 'Ūo',
+    20 => '~GʤO',
+    21 => '"L"дѤ@OW',
+    22 => '~Gʤ',
+    23 => 'жgҦ',
+    24 => 'AowQOsF',
+    25 => 'A %s wQOsF',
+    26 => 't',
+    27 => 'ΤW',
+    28 => 'DD',
+    29 => '峹',
+    30 => 'A̫oO',
+    31 => " eCwܤ {$_CONF['speedlimit']} ~iAo",
+    32 => 'w',
+    33 => '峹 w',
+    34 => 'hX',
+    35 => '\ HTML аO',
+    36 => 'oҦ',
+    37 => "[ƥ {$_CONF['site_name']} |NAƥ[D䤤ALΤiHNa⥦[iۤvӤHC<b>n</b>AӤHƥĴpͤMP~[ihC<br><br>un޲zAƥ󥦱NX{bDWC",
+    38 => '[ƥ',
+    39 => 'D',
+    40 => 'ӤH',
+    41 => 'ɶ',
+    42 => '}lɶ',
+    43 => '骺ƥ',
+    44 => 'a} 1',
+    45 => 'a} 2',
+    46 => '/',
+    47 => '{',
+    48 => 'lϸ',
+    49 => 'ƥ',
+    50 => 'sƥ',
+    51 => 'aI',
+    52 => 'R',
+    53 => 's[b'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'nD{',
+    2 => 'ڵITnJ',
+    3 => 'LĪKX',
+    4 => 'ΤWG',
+    5 => 'KXG',
+    6 => 'ouѱvHϥΡC<br>ҦsNQOMˬdC',
+    7 => 'nJ'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'vO',
+    2 => 'ASvhsoӤC',
+    3 => 'եs边',
+    4 => 'Ūyɵo{~AЦbA~Oɮ error.log جݲӸ`.',
+    5 => 'եD',
+    6 => 'DD',
+    7 => 'Ҧ',
+    8 => 'w',
+    9 => 'ե󦸧',
+    10 => 'ե',
+    11 => 'Jfե',
+    12 => '`',
+    13 => 'Jfﶵ',
+    14 => 'y RDF  URL',
+    15 => '̫᪺y RDF s',
+    16 => '`ﶵ',
+    17 => '󤺮e',
+    18 => 'жg󪺼DMeC',
+    19 => 'ե޲z',
+    20 => 'եD',
+    21 => 'w',
+    22 => 'ե',
+    23 => 'ե󦸧',
+    24 => 'DD',
+    25 => 'IUեiקΧRAIWsiгy@ӷsC',
+    26 => 'ե',
+    27 => 'PHP ե',
+    28 => 'PHP ﶵ',
+    29 => '',
+    30 => 'pGAQΦۤv PHP ƤAЦbWJƪWrCʪsXAPHP ƦWH "phpblock_" @}l (e.g. phpblock_getweather)CФnŪA "()" bƫC̫AĳAҦ PHP եb /path/to/geeklog/system/lib-custom.php إHKtΤɯšC',
+    31 => 'PHP ~J %s äsbC',
+    32 => '~Jʤ줸C',
+    33 => 'bJfA URL J .rdf ɮ',
+    34 => 'b PHP AJDDM',
+    35 => 'b`AJDDMe',
+    36 => 'bAJe',
+    37 => 'A PHP ƦW',
+    38 => 'ʪsXAPHP ƦWH "phpblock_" @}l (e.g. phpblock_getweather)C',
+    39 => 'b',
+    40 => '',
+    41 => 'k',
+    42 => 'btΪw]AJDM',
+    43 => 'uiO',
+    44 => 'sQڵ',
+    45 => "Ϧs\wQOC<a href=\"{$_CONF['site_admin_url']}/block.php\">Ϧ^ե޲zޭ</a>C",
+    46 => 'sե',
+    47 => '޲z',
+    48 => 'եW',
+    49 => ' (iŹjMOߤ@)',
+    50 => 'DU URL',
+    51 => ']A http://',
+    52 => 'pGoدdաA󪺨DUɹϥܱNQ',
+    53 => 'Ϧ',
+    54 => 'Os',
+    55 => '',
+    56 => 'R',
+    57 => 'Uե',
+    58 => 'Wե',
+    59 => 'եk',
+    60 => 'ե쥪',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'ƥs边',
+    2 => 'Error',
+    3 => 'ƥD',
+    4 => 'ƥ URL',
+    5 => 'ƥ}l',
+    6 => 'ƥ󵲧',
+    7 => 'ƥaI',
+    8 => 'ƥyz',
+    9 => '(]A http://)',
+    10 => 'AѤɶBƥDDBPƥyzI',
+    11 => 'ƥ޲z',
+    12 => 'IUƥiקΧRAIWsƥiгy@ӷsC',
+    13 => 'ƥD',
+    14 => '}l',
+    15 => '',
+    16 => 'sQڵ',
+    17 => "Ϧs\ƥwQOC<a href=\"{$_CONF['site_admin_url']}/event.php\">Ϧ^ƥ޲zޭ</a>C",
+    18 => 'sƥ',
+    19 => '޲z',
+    20 => 'Os',
+    21 => '',
+    22 => 'R',
+    23 => '~}l.',
+    24 => '~.',
+    25 => 'b}le.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Wg峹',
+    2 => 'Ug峹',
+    3 => 'Ҧ',
+    4 => 'oҦ',
+    5 => '峹s边',
+    6 => 'S峹',
+    7 => '@',
+    8 => 'Os',
+    9 => 'w',
+    10 => '',
+    11 => 'R',
+    12 => 'ID',
+    13 => 'D',
+    14 => 'DD',
+    15 => '',
+    16 => '峹²',
+    17 => '峹e',
+    18 => 'I',
+    19 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => '峹M',
+    23 => 'IU峹siקΧRAIU峹Di[ݥAIWs峹iгy@ӷsC',
+    24 => 'A諸ΤWHHbΡCХΥt@ӥΤWC',
+    25 => 'Error when saving story',
+    26 => '峹w',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'W~',
+    31 => 'Aݭnѧ@̡BDM峹²I',
+    32 => 'Y',
+    33 => 'ui@Y峹',
+    34 => 'Z',
+    35 => 'O',
+    36 => '_',
+    37 => 'hӦ۩',
+    38 => 'ho',
+    39 => 'ql',
+    40 => 'sQڵ',
+    41 => "Ϧs\峹wQOCAiHHŪҦ[ݤU峹Cݧ<a href=\"{$_CONF['site_admin_url']}/story.php\">Ϧ^峹޲zޭ</a>C",
+    42 => "Ϧs\峹wQOC<a href=\"{$_CONF['site_admin_url']}/story.php\">Ϧ^峹޲zޭ</a>C",
+    43 => 's峹',
+    44 => '޲z',
+    45 => 'sv',
+    46 => '<b>`NJ</b>pGA令NӡAbӤeog峹N|QoCåB N۳og峹|]AbA RDF DAbjMMέp|QC',
+    47 => 'Ϲ',
+    48 => 'Ϲ',
+    49 => 'k',
+    50 => '',
+    51 => 'ХίSO榡r([imageX]B[imageX_right]  [imageX_left])ӴJϹA X OA[ϹsC`NJAuiϥΧA[Ϲ_hANLkOsA峹C<BR><P><B>w</B>J̨ιw峹kO峹OsZӤOwsCuS[Ϲɤ~ιwsC',
+    52 => 'R',
+    53 => 'SQϥΡCOseAAoӹϹ]tb峹²Τ峹eC',
+    54 => '[ϹQϥ',
+    55 => 'OsA峹ɵoͥHU~CЧ勵oǿ~AOs',
+    56 => 'ܥDDϥ',
+    57 => 'ݨSYpϹ',
+    58 => '峹޲z',
+    59 => 'ﶵ',
+    60 => 'wҰ',
+    61 => '۰ʫOs',
+    62 => '۰ʧR',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'DDs边',
+    2 => 'DDs',
+    3 => 'DDW',
+    4 => 'DDϹ',
+    5 => '(iŹj)',
+    6 => 'RDD|PɧRҦ峹MեI',
+    7 => 'AݭnѥDDsMDDWI',
+    8 => 'DD޲z',
+    9 => 'IUDDiקΧRAIWsDDiгy@ӷsCbAاANo{AsŧOC',
+    10 => 'ƧǦ',
+    11 => '峹 / ',
+    12 => 'sQڵ',
+    13 => "Ϧs\DDwQOC<a href=\"{$_CONF['site_admin_url']}/topic.php\">Ϧ^DD޲zޭ</a>.",
+    14 => 'ƧǤk',
+    15 => 'rƧ',
+    16 => 'w]O',
+    17 => 'sDD',
+    18 => '޲z',
+    19 => 'Os',
+    20 => '',
+    21 => 'R',
+    22 => 'w]',
+    23 => 'ΦDD@sZw]D',
+    24 => '(*)',
+    25 => 'OsɪD',
+    26 => 'ΦDا@Osɪq{DءCu\@DءC',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Τs边',
+    2 => 'Τs',
+    3 => 'ΤW',
+    4 => 'W',
+    5 => 'KX',
+    6 => 'wŧO',
+    7 => 'qla}',
+    8 => '',
+    9 => '(iŹj)',
+    10 => 'AݭnѥΤWBWBwŧOMqla}C',
+    11 => 'Τ޲z',
+    12 => 'IUΤiקΧRAIWsΤiгy@ӷsCbU椤JΤWBql}ΥW (e.g.*son* or *.edu) Ai²檺MC',
+    13 => 'wŧO',
+    14 => 'nO',
+    15 => 'sΤ',
+    16 => '޲z',
+    17 => 'KX',
+    18 => '',
+    19 => 'R',
+    20 => 'Os',
+    21 => 'ΤWwgsb',
+    22 => '~',
+    23 => 'jqW[',
+    24 => 'jqJΤ',
+    25 => 'Ai@LJjqΤ Geeklog CJɮץO@ӥ tab jrɮסA줸ǬOJWBΤWBqla}CC@ӳQJΤN|@ӥHqlloeHKXCɮפC@O@ӥΤCSuoǭnDNyDA]\ݭnʧ@~AЦATˬdAɮסI',
+    26 => 'M',
+    27 => 'Gd',
+    28 => 'boإ_iRoiϤ',
+    29 => '|',
+    30 => 'J',
+    31 => 'sΤ',
+    32 => 'BzCJF %d ӡF%d ӥ',
+    33 => '',
+    34 => '~JAwWɮסC',
+    35 => '̫@nJ',
+    36 => '(q)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => '',
+    2 => 'R',
+    3 => 's',
+    4 => '²nyz',
+    10 => 'D',
+    11 => '}l',
+    12 => 'URL',
+    13 => 'O',
+    14 => '',
+    15 => 'DD',
+    16 => 'ΤW',
+    17 => 'W',
+    18 => 'qll',
+    34 => 'ROM',
+    35 => 'w檺峹',
+    36 => 'w檺s',
+    37 => 'w檺ƥ',
+    38 => '',
+    39 => 'ɨS檺F',
+    40 => 'ӽЪΤ'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sunday',
+    2 => 'Monday',
+    3 => 'Tuesday',
+    4 => 'Wednesday',
+    5 => 'Thursday',
+    6 => 'Friday',
+    7 => 'Saturday',
+    8 => 'sWƥ',
+    9 => 'Geeklog ƥ',
+    10 => 'ƥ',
+    11 => 'D',
+    12 => 'ڪ',
+    13 => '@',
+    14 => 'G',
+    15 => 'T',
+    16 => '|',
+    17 => '',
+    18 => '',
+    19 => 'C',
+    20 => 'K',
+    21 => 'E',
+    22 => 'Q',
+    23 => 'Q@',
+    24 => 'QG',
+    25 => '^',
+    26 => '',
+    27 => 'P',
+    28 => 'ӤHJ',
+    29 => '',
+    30 => 'Rƥ',
+    31 => 'sW',
+    32 => 'ƥ',
+    33 => 'P',
+    34 => 'ɶ',
+    35 => 'tW[',
+    36 => '',
+    37 => 'pAäѭӤHC',
+    38 => 'ӤHƥs边',
+    39 => '',
+    40 => 'P',
+    41 => ''
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} l{",
+    2 => 'HH',
+    3 => '^_',
+    4 => 'DD',
+    5 => 'e',
+    6 => 'HJ',
+    7 => 'ҦΤ',
+    8 => '޲z',
+    9 => 'ﶵ',
+    10 => 'HTML',
+    11 => 'TI',
+    12 => 'oe',
+    13 => ']',
+    14 => 'Τ]w',
+    15 => '~AoeJ',
+    16 => 'TwoeJ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>oeLH</a>",
+    18 => 'H',
+    19 => '`NJpGAƱoeT쥻ҦAЦbpտ줤 Logged-in Users groupC',
+    20 => "woe <successcount> ӰTA <failcount> ӤoeCoeӸ`bUCpQݲӸ`AAi<a href=\"{$_CONF['site_admin_url']}/mail.php\">oeLT</a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">Ϧ^޲z</a>C",
+    21 => '',
+    22 => '\ ',
+    23 => '\ ',
+    24 => '',
+    25 => '-- пp --',
+    26 => 'жgҦW줸Mܤ@ӤpաC'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'w˴laADtΡC ݭnSOpߡC ̦nnw˥AAѪC',
+    2 => 'wn',
+    3 => 'w˪',
+    4 => 'ɮ',
+    5 => 'M',
+    6 => 'ĵiJwgQw˹LI',
+    7 => 'AQw˪wgsbAХ⥦RAwˡC',
+    8 => '󤣯qLۮeʮC',
+    9 => 'onD@ӧs Geeklog. AiHɯŧA<a href="http://www.geeklog.net">Geeklog</a>άOt@ӾAXC',
+    10 => '<br><b>Sw˪C</b><br><br>',
+    11 => 'YQקΧRAIHU󪺦W١Co|ܴ󪺸ԲӤeMs@̪Cw˪MqNXӪ|XӡCo|ADO_ӧsCYnw˩ΤɯŴпԸߥC',
+    12 => 'plugineditor() 䤣촡W',
+    13 => 's边',
+    14 => 's',
+    15 => '޲z',
+    16 => 'Wr',
+    17 => '󪩥',
+    18 => 'Geeklog ',
+    19 => 'Ϧ',
+    20 => 'O',
+    21 => '_',
+    22 => 'w',
+    23 => 'Os',
+    24 => '',
+    25 => 'R',
+    26 => 'W',
+    27 => '󭺭',
+    28 => 'ww˪󪩥',
+    29 => 'Geeklog ',
+    30 => 'RH',
+    31 => 'A֩wnRoӴܡHo?|RҦoɡBƩMƵcCpGA֩wAЦAIU椤RsC',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'NX',
+    34 => 's',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'إߤy',
+    2 => 'Os',
+    3 => 'R',
+    4 => '',
+    10 => 'e}[',
+    11 => 'sy',
+    12 => '޲zB',
+    13 => 'YnקΧR@Ӥy, A@UDDWI. Ynإ߷sy, IHWsy.',
+    14 => 'D',
+    15 => '',
+    16 => 'ɮצW',
+    17 => '榡',
+    18 => '̫@s',
+    19 => 'Ұ',
+    20 => 'O',
+    21 => '_',
+    22 => '<i>(Ly)</i>',
+    23 => 'Ҧ峹',
+    24 => 'ys',
+    25 => 'yD',
+    26 => 'w',
+    27 => 'ت',
+    28 => '(0 = L, 1 = , other = w󦹦r.)',
+    29 => '',
+    30 => '̫@s',
+    31 => 'r',
+    32 => 'y',
+    33 => 'e',
+    34 => '',
+    35 => 'p',
+    36 => 'ܤy',
+    37 => 'A̤֤@ӦwˤFtXe}[.@UAݭnܧAO_nإߤ@ӥDtΤyδy.',
+    38 => '~: ʤָT',
+    39 => 'жJyD, , MɮצW.',
+    40 => 'пJؼƥةΤpɼƥ.',
+    41 => 's',
+    42 => 'ƥ',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "ڭ̤wqlFAKXAqlHcAиHl󤤪ܡCh¨ϥ {$_CONF['site_name']}",
+    2 => "h»A峹 {$_CONF['site_name']} CungLڭ̭uֹAA峹NX{bڭ̪WC",
+    3 => "h»s {$_CONF['site_name']} CungLڭ̭uֹAAsNX{bڭ̪WC",
+    4 => "h»ƥ {$_CONF['site_name']} CungLڭ̭uֹAAƥNX{bڭ̪<a href={$_CONF['site_url']}/calendar.php></a>WC",
+    5 => 'Ab]wwQOsFC',
+    6 => 'AӤH]wwQOsFC',
+    7 => 'Aפ]wwQOsFC',
+    8 => 'AwhXC',
+    9 => 'A峹wQOsFC',
+    10 => 'A峹wQRFC',
+    11 => 'AեwQOsFC',
+    12 => 'AեwQRFC',
+    13 => 'ADDwQOsFC',
+    14 => 'ADDMҦ峹wQRFC',
+    15 => 'AswQOsFC',
+    16 => 'AswQRFC',
+    17 => 'AƥwQOsFC',
+    18 => 'AƥwQRFC',
+    19 => 'A벼wQOsFC',
+    20 => 'A벼wQRFC',
+    21 => 'ΤwQOsFC',
+    22 => 'ΤwQRFC',
+    23 => 'W[ƥAɵoͿ~Aʤ֤FƥsC',
+    24 => 'ƥwW[A䤤C',
+    25 => 'AnnJ~i}ҧAӤHC',
+    26 => 'ƥwqA䤤C',
+    27 => 'TwoeC',
+    28 => 'wQOsFC',
+    29 => 'pAäѭӤHC',
+    30 => 'sQڵ',
+    31 => 'pAAiJ峹޲zCЪ`NAϤwQOC',
+    32 => 'pAAiJDD޲zCЪ`NAϤwQOC',
+    33 => 'pAAiJե޲zCЪ`NAϤwQOC',
+    34 => 'pAAiJs޲zCЪ`NAϤwQOC',
+    35 => 'pAAiJƥ޲zCЪ`NAϤwQOC',
+    36 => 'pAAiJ벼޲zCЪ`NAϤwQOC',
+    37 => 'pAAiJΤ޲zCЪ`NAϤwQOC',
+    38 => 'pAAiJ Plug-in ޲zCЪ`NAϤwQOC',
+    39 => 'pAAiJql޲zCЪ`NAϤwQOC',
+    40 => 'tΰT',
+    41 => 'pAAiJrCЪ`NAϤwQOC',
+    42 => 'ArwQOsFC',
+    43 => 'ArwQRFC',
+    44 => 'wQwˤFC',
+    45 => 'wQRFC',
+    46 => 'pAAiJƮwƥ{CЪ`NAϤwQOC',
+    47 => 'ouAΩ *nix pGA@~tάO *nixA?AwľwQMFCpGA@~tάO WindowsAAnʴMɩRW adodb _ *.php ɮרç⥦̰hC',
+    48 => "P§AӽЦ {$_CONF['site_name']} |CungLڭ̭uֹAڭ̷|KXHAҵnOqlC",
+    49 => 'ApդwQOsFC',
+    50 => 'pդwQRFC',
+    51 => 'ΤWwHbΡCпܥt@ӡC',
+    52 => 'AqH}OġC',
+    53 => 'AsKXwQC{bHUХΧAsKXӵnJ.',
+    54 => 'AnDsKXHLCЦbUqsnDC',
+    55 => 'wgAHF@ʹqHCзӦHӳ]wsKXC',
+    56 => 'AѵqH}wOΤbϥΡC',
+    57 => 'AΤwg\aRFC',
+    58 => 'Ayw\OsF.',
+    59 => 'Ayw\RF.',
+    60 => 'wgs',
+    61 => ' %s: WTe줸',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 's',
+    'ownerroot' => 'Ҧ/Root',
+    'group' => 'p',
+    'readonly' => 'Ū',
+    'accessrights' => 'sv',
+    'owner' => 'Ҧ',
+    'grantgrouplabel' => 'WpսsvQ',
+    'permmsg' => '`NJ|OҦUMnJΤFӰΦWOҦDUy̩ΨSnJΤC',
+    'securitygroups' => 'wp',
+    'editrootmsg' => "YϧAOΤ޲zFAs root ΤCAsҦΤᰣF root ΤCЪ`NҦϫDkas root Τ᪺ʧ@wQOCЦ^<a href=\"{$_CONF['site_admin_url']}/user.php\">Τ޲z</a>hC",
+    'securitygroupsmsg' => 'ܳoΤݩ󪺤pաC',
+    'groupeditor' => 'pսs边',
+    'description' => 'yz',
+    'name' => 'Wr',
+    'rights' => '\iv',
+    'missingfields' => 'ʤ',
+    'missingfieldsmsg' => 'AѤpժWrMyz',
+    'groupmanager' => 'pպ޲z',
+    'newgroupmsg' => 'IUpեiקΧRAIWspեiгy@ӷsCЪ`NҮ֤ߤpդQRC',
+    'groupname' => 'զW',
+    'coregroup' => '֤ߤp',
+    'yes' => 'O',
+    'no' => '_',
+    'corerightsdescr' => "oӤpժ\ivQsA]oO {$_CONF['site_name']} ֤ߤpաCHUOopժ\ivM(Ū)C",
+    'groupmsg' => 'wpզboOŨתCW[oӤpըt@էOAoӤpձNo쨺էO\ivCкɥipե[UCէOhCpGopջݭnSO\ivAAiHbHU"vQ"ϰ줤DCnpե[էOhAAuݭnbէO䪺Dﲰ_C',
+    'coregroupmsg' => "]oO {$_CONF['site_name']} ֤ߤpաAoӤpժ\ivQsCHUOopժէOM(Ū)C",
+    'rightsdescr' => 'pժ\iviHOӦ۩pեάOopթݪէOCHU\ivpS粰YNo\ivOӦ۩pթݪէOFp粰YNAiH\ivopաC',
+    'lock' => '',
+    'members' => '',
+    'anonymous' => 'ΦW',
+    'permissions' => '\iv',
+    'permissionskey' => 'R = ŪA E = sAsvYŪv',
+    'edit' => 's',
+    'none' => 'S',
+    'accessdenied' => 'sQڵ',
+    'storydenialmsg' => "]QAAiH[ݳoӤ峹CoOiO]AäO {$_CONF['site_name']} |C<a href=users.php?mode=new>|</a>C",
+    'eventdenialmsg' => "]QAAiH[ݳoӨƥCoOiO]AäO {$_CONF['site_name']} |C<a href=users.php?mode=new>|</a>C",
+    'nogroupsforcoregroup' => 'opդݩLp',
+    'grouphasnorights' => ' opըS޲zvC',
+    'newgroup' => 'sp',
+    'adminhome' => '޲z',
+    'save' => 'Os',
+    'cancel' => '',
+    'delete' => 'R',
+    'canteditroot' => ']Aݩ Root pաAҥHA Root pժקQڵFCpDлPtκ޲zpôC',
+    'listusers' => 'CXΤ',
+    'listthem' => 'CX',
+    'usersingroup' => 'ݩ "%s" pժΤ',
+    'usergroupadmin' => 'Τpպ޲z',
+    'add' => '[J',
+    'remove' => 'K',
+    'availmembers' => 'iΪ',
+    'groupmembers' => 'pզ',
+    'canteditgroup' => 'Ynק惡p, AnɳoӤpժ. YA{oO~, ЧAptκ޲z.',
+    'cantlistgroup' => 'nݦpժ|AAOpժ|CAY{oO~Aptκ޲zC',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '̫Qӳƥ',
+    'do_backup' => 'ƥ',
+    'backup_successful' => 'ƮwƥC',
+    'db_explanation' => 'ns Geeklog ƥAIHUs',
+    'not_found' => "T| mysqldump {iC<br>ˬd<strong>\$_DB_mysqldump_path</strong>wqb config.php.<br>ܼƲ{bQwqJ<var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'ƥѡJɮ׬O 0 jp',
+    'path_not_found' => "{$_CONF['backup_path']} sbΤOؿ",
+    'no_access' => "~Jؿ {$_CONF['backup_path']} AsC",
+    'backup_file' => 'ƥɮ',
+    'size' => 'jp',
+    'bytes' => '줸',
+    'total_number' => '`ƥ: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => '',
+    2 => 'p',
+    3 => 'Z',
+    4 => 's',
+    5 => '벼',
+    6 => '',
+    7 => 'έp',
+    8 => 'ӤH',
+    9 => 'j',
+    10 => 'ijM',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 ~',
+    2 => 'xAڨBݹLF䤣<b>%s</b>.',
+    3 => "<p>ܩpAAnDɤsbCˬd<a href=\"{$_CONF['site_url']}\">D</a><a href=\"{$_CONF['site_url']}/search.php\">j</a>ݬݯo{?C"
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'nDnJ',
+    2 => 'pAnDnJ~isoӰϰC',
+    3 => 'nJ',
+    4 => 'sΤ'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF @ΤwQT',
+    2 => 'ҴѪɨSeCɤwAOLkBzCЪ֩wAҴ檺ɬO html 榡ɼg xHTML зǡCЪ`NL html ɤ]iLkTeCAɴ檺GO 0 bytes ӥBwQRCAY֩wAӶQeAAC',
+    3 => 'WPDF ɻs@~C',
+    4 => 'SѭƸƩΧAnΥHUSO PDF s@uCYA{Aұo쪺oO~C ptκ޲zCnMAAiΥHUӯSOs@ PDFC',
+    5 => 'b˸mAɡC',
+    6 => 'AɳQ˸mɽеݡC',
+    7 => 'AiΥkHUsAM \'save target...\' or \'save link location...\' ӦsAɪ@ӫC',
+    8 => 'btmɮت HTMLDocGiɮ׸|~AΦtεLk榹ɮסCYD~o͡Ap޲zC',
+    9 => 'PDF s@',
+    10 => 'oOSO PDF s@uC|N URL ഫ PDF CЪ`NAǺ|TQouBz\CoO HTMLDoc PDF s@u㪺BAӳo˪~ݭni޲zC',
+    11 => 'URL',
+    12 => 's@ PDF!',
+    13 => 'A PHP tm\ fopen() ROΦb URL WC tκ޲zק  php.ini ɮסAM]w allow_url_fopen  On',
+    14 => 'AnD PDF sbΧAbDkJ@ɮסC'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/chinese_gb2312.php 1.4.0sr5-1/cpanel-glprivate/language/chinese_gb2312.php
--- 1.3.11sr1/cpanel-glprivate/language/chinese_gb2312.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/chinese_gb2312.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,5 +1,5 @@
-<?php
-
+<?php
+
 ###############################################################################
 # chinese_simplified_gb2312.php
 #
@@ -26,1248 +26,1486 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
 ###############################################################################
-
-$LANG_CHARSET = 'GB2312';
-
-###############################################################################
-# Array Format:
-# $LANGXX[YY]:  $LANG - variable name
-#               XX    - file id number
-#               YY    - phrase id number
-###############################################################################
-
-###############################################################################
-# USER PHRASES - These are file phrases used in end user scripts
-###############################################################################
-
-###############################################################################
-# lib-common.php
-
-$LANG01 = array(
-    1 => 'ߩU',
-    2 => '',
-    3 => '',
-    4 => '༭',
-    5 => 'ͶƱ',
-    6 => '',
-    7 => 'ͶƱ',
-    8 => 'ͶƱ',
-    9 => '߹ܩU',
-    10 => 'ύ',
-    11 => '',
-    12 => '',
-    13 => '',
-    14 => '',
-    15 => '¼',
-    16 => 'ͶƱ',
-    17 => 'û',
-    18 => 'SQL ',
-    19 => '˳',
-    20 => 'ûѶϢU',
-    21 => 'û',
-    22 => 'ûʶ',
-    23 => 'ȫȼ',
-    24 => '',
-    25 => 'ظ',
-    26 => 'ֻ߸˹۵㡣',
-    27 => '',
-    28 => 'ɾ',
-    29 => 'ûۡ',
-    30 => 'ɵ',
-    31 => ' HTML :',
-    32 => 'Чû',
-    33 => '󣬲дϵͳ־;',
-    34 => '',
-    35 => '˳',
-    36 => '',
-    37 => 'û',
-    38 => 'ϼ',
-    39 => 'ʹ',
-    40 => 'ķ <tt>php.ini</tt> 趨Ϊ <tt>register_globals = Off</tt>. ǴҪ <tt>register_globals</tt> 趨 <strong>on</strong>. ǰ뽫趨Ϊ<strong>on</strong>Ȼ¿.',
-    41 => '',
-    42 => ':',
-    43 => 'ظ',
-    44 => 'ĸ',
-    45 => 'MySQL ',
-    46 => 'MySQL ѶϢ',
-    47 => 'û',
-    48 => 'ʻѶϢ',
-    49 => 'ѡ',
-    50 => ' SQL statement',
-    51 => '',
-    52 => '',
-    53 => 'ҳ',
-    54 => 'ܴļ',
-    55 => '',
-    56 => 'ͶƱ',
-    57 => '',
-    58 => '',
-    59 => "ûʻ<a href=\"{$_CONF['site_url']}/users.php?mode=new\">ڴ˵Ǽ</a>",
-    60 => '',
-    61 => 'ʻ',
-    62 => '',
-    63 => '趨',
-    64 => 'µʸ',
-    65 => 'ۿӡİ汾',
-    66 => 'ҵ',
-    67 => 'ӭ',
-    68 => 'ҳ',
-    69 => '',
-    70 => 'Ѱ',
-    71 => 'Ͷ',
-    72 => '·Դ',
-    73 => 'ͶƱ',
-    74 => '',
-    75 => '',
-    76 => 'վͳ',
-    77 => '',
-    78 => '',
-    79 => 'ʵĶ',
-    80 => '(',
-    81 => 'µ(',
-    82 => ' Сʱ)',
-    83 => '',
-    84 => '',
-    85 => 'ʮСʱ',
-    86 => 'ûµ',
-    87 => '',
-    88 => 'ûµ',
-    89 => 'û·',
-    90 => 'ҳ',
-    91 => 'ҳ',
-    92 => '',
-    93 => 'Ȩ',
-    94 => 'վе̱ͰȨǸԵ.',
-    95 => '',
-    96 => 'С',
-    97 => 'ִʵ',
-    98 => '',
-    99 => '',
-    100 => 'ûµ',
-    101 => '¼',
-    102 => 'վ¼',
-    103 => 'Ͽⱸ',
-    104 => '',
-    105 => 'ĸû',
-    106 => 'ۿ',
-    107 => 'GL 汾',
-    108 => '',
-    109 => '',
-    110 => 'ĵĸվԱ',
-    111 => 'PDF 汾',
-    112 => 'Ǽû',
-    113 => 'ʹ˵'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG02 = array(
-    1 => '¼',
-    2 => 'Ǹû¼',
-    3 => 'ʱ',
-    4 => '',
-    5 => '',
-    6 => '¼',
-    7 => '',
-    8 => 'ڽ¼ӽ֮ᣬɵ "ҵ" ۿ',
-    9 => 'ӽҵ',
-    10 => 'ҵȥ',
-    11 => "¼ӽ {$_USER['username']} ",
-    12 => '¼',
-    13 => 'ʼ',
-    14 => '',
-    15 => 'ص'
-);
-
-###############################################################################
-# comment.php
-
-$LANG03 = array(
-    1 => '',
-    2 => 'ʽ',
-    3 => '˳',
-    4 => 'ʻ',
-    5 => 'û',
-    6 => 'վҪſɷۣ롣ûʻʹıǼǡ',
-    7 => 'ᷢ ',
-    8 => " ֮ǰվ޶ {$_CONF['commentspeedlimit']} ſٷ",
-    9 => '',
-    10 => 'ͳ',
-    11 => '',
-    12 => 'дע',
-    13 => 'ο',
-    14 => 'Ԥ',
-    15 => 'ƪĵ',
-    16 => '',
-    17 => '',
-    18 => 'ҪĶ',
-    19 => '뾡Ҫ⡣',
-    20 => 'ܻظ˵ۣǿµۡ',
-    21 => 'Ϊظ֮ǰȶдġ',
-    22 => '뾡üı⡣',
-    23 => 'ǲṫĵʵַ',
-    24 => 'û',
-    25 => '϶ҪĵĸվԱ?',
-    26 => '%s ĵǵ:',
-    27 => 'ñ'
-);
-
-###############################################################################
-# users.php
-
-$LANG04 = array(
-    1 => 'ûſ',
-    2 => 'û',
-    3 => 'ȫ',
-    4 => '',
-    5 => 'ʼ',
-    6 => 'ҳ',
-    7 => 'С',
-    8 => 'PGP Կ',
-    9 => '趨',
-    10 => 'ûʮ',
-    11 => 'û',
-    12 => 'û趨',
-    13 => 'ÿҹժ',
-    14 => 'Ǹ룬뾡ġҪȵϵͳȻʻѶϢ',
-    15 => " {$_CONF['site_name']} ʻѽˡʹѶϢϵͳʼο",
-    16 => 'ʻѶϢ',
-    17 => 'ʻ',
-    18 => 'ṩĲһЧĵĵ',
-    19 => 'ûѾ',
-    20 => 'ṩĲһЧĵĵ',
-    21 => '',
-    22 => "Ǽ {$_CONF['site_name']} ",
-    23 => " {$_CONF['site_name']} ǼǵûеĻԱôǿԼַۺʹȡվԴעⱾվ<b><i></i></b>ûĵʡ",
-    24 => '뽫͵ĵ',
-    25 => '',
-    26 => 'û͵룬ǻᷢһµ뵽ĵ䡣',
-    27 => 'ھ͵Ǽǣ',
-    28 => '',
-    29 => '˳ʱ',
-    30 => 'ʱ',
-    31 => 'Ҫſ',
-    32 => '',
-    33 => 'ṫ',
-    34 => '',
-    35 => 'Ҫı',
-    36 => 'ʼ http://',
-    37 => 'ḽ㷢',
-    38 => 'ļ',
-    39 => 'Ĺ PGP Կ',
-    40 => 'ûͼʾ',
-    41 => 'Ը',
-    42 => 'ڸʽ',
-    43 => '޶',
-    44 => 'û',
-    45 => 'ʾ趨',
-    46 => '',
-    47 => 'Ϊ',
-    48 => '',
-    49 => 'ûͼ',
-    50 => 'Ҫ㲻Ȥ',
-    51 => 'ֻ',
-    52 => 'Ԥֵ',
-    53 => 'ÿյյ',
-    54 => '㲻Щߡ',
-    55 => 'ûѡζҪԤѡԤ佫ԡԤĶôֱʻʾ',
-    56 => '',
-    57 => 'ʾʽ',
-    58 => 'ʽ',
-    59 => '()',
-    60 => 'ʾ',
-    61 => '»ɵȣ',
-    62 => 'Ԥ100',
-    63 => 'ѱͣܿյġ',
-    64 => '趨',
-    65 => '볢ٵ',
-    66 => "ܴˣ볢ٵ롣Ƿ<a href=\"{$_CONF['site_url']}/users.php?mode=new\">û</a>",
-    67 => 'Ա',
-    68 => 'סΪ',
-    69 => 'ڵᣬӦüסã',
-    70 => " {$_CONF['site_name']} Ĳֺ",
-    71 => "һ {$_CONF['site_name']} ҪصԶԼĲֺݣǱվĻԱ<a href=\"{$_CONF['site_url']}/users.php?mode=new\">ڴ˵Ǽ</a>ѾǵǼǣʹߵ롣",
-    72 => '',
-    73 => '',
-    74 => 'ı䱾վ',
-    75 => 'ѵʸ',
-    76 => 'ֻѡȤ⣬Ϊе½ʵ䡣',
-    77 => 'Ƭ',
-    78 => 'ԼͼƬ',
-    79 => 'ҪɾͼƬ',
-    80 => '',
-    81 => '͵ʼ',
-    82 => 'ûʮΪ',
-    83 => 'ûͳ',
-    84 => 'U',
-    85 => 'U',
-    86 => 'Ѱз©U',
-    87 => 'ĵ',
-    88 => "(Ҳ)Ҫ \"%s\"  {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nҪ, :\n\n",
-    89 => "Ҫ, Ϣ¾ͽᱻͱԭ.\n\n",
-    90 => 'һµ롣עľȻЧֱ㽫˱ύ',
-    91 => '趨',
-    92 => '',
-    93 => ' %d ǰҪһ. վ涨Ҫ %d ԺſٴҪ롣',
-    94 => 'û \'%s\' ɾ',
-    95 => ' \'ɾû\' 㽫Ͽûע⣬ûعº۲ɾǻߵʾ',
-    96 => 'ɾû',
-    97 => 'ȷûɾ',
-    98 => '϶Ҫɾû? Ͳʹôվ,趨û. ϶Ļٴε ɾû.',
-    99 => '˽ѡ',
-    100 => 'Ա',
-    101 => '׼Ա',
-    102 => 'û',
-    103 => '׼û',
-    104 => 'ʾ״',
-    105 => 'ڡ˭ʾ',
-    106 => 'λ',
-    107 => 'ʾĹ'
-);
-
-###############################################################################
-# index.php
-
-$LANG05 = array(
-    1 => 'ûſʾ',
-    2 => 'û¿ʾ',
-    3 => 'Ҳû %s 趨̫ԡ',
-    4 => 'ͷ',
-    5 => 'ҳ',
-    6 => 'ҳ',
-    7 => 'һ',
-    8 => ''
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => '·Դ',
-    2 => 'ûԴʾ',
-    3 => 'һ'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'ͶƱ',
-    2 => 'ͶƱѱ',
-    3 => 'ͶƱ',
-    4 => 'ϵͳеͶƱ',
-    5 => 'ͶƱ',
-    6 => 'ͶƱ'
-);
-
-###############################################################################
-# profiles.php
-
-$LANG08 = array(
-    1 => '͵ʼʱٳԡ',
-    2 => 'ͳ',
-    3 => 'ȷڻظһõĵʼַ',
-    4 => 'д֡ظ',
-    5 => 'ûû',
-    6 => '',
-    7 => 'û',
-    8 => 'û',
-    9 => 'û URL',
-    10 => 'ʼ',
-    11 => '֣',
-    12 => 'ظ',
-    13 => '⣺',
-    14 => 'ݣ',
-    15 => 'HTML ᱻ롣',
-    16 => 'ʼ',
-    17 => 'µʸ',
-    18 => 'ռ',
-    19 => 'ռ˵',
-    20 => 'ļ',
-    21 => 'ļ˵',
-    22 => 'Ҫд',
-    23 => "ʼ %s (%s) ĸģΪҲƪ {$_CONF['site_url']} ¸Ȥⲻʼ(SPAM)ĵʵַҲᱻ¼",
-    24 => 'µ',
-    25 => 'ΪǷֹϵͳã롣',
-    26 => '͵ʼѡûСдеλ',
-    27 => '',
-    28 => '%s д',
-    29 => " {$_CONF['site_name']} ÿժ裺",
-    30 => ' ÿյʱͨѶ裺',
-    31 => '',
-    32 => '',
-    33 => 'ڣ',
-    34 => 'ʽ',
-    35 => 'Բ𣬴ûԸյ.'
-);
-
-###############################################################################
-# search.php
-
-$LANG09 = array(
-    1 => 'Ѱ',
-    2 => 'ؼ',
-    3 => '',
-    4 => '',
-    5 => '',
-    6 => '',
-    7 => '',
-    8 => '',
-    9 => '',
-    10 => 'Ѱ',
-    11 => 'Ѱ',
-    12 => '',
-    13 => 'Ѱû',
-    14 => 'ûѰҵĶU',
-    15 => 'ٳ',
-    16 => '',
-    17 => '',
-    18 => '',
-    19 => "Ѱ {$_CONF['site_name']} ¾Ͽ",
-    20 => '',
-    21 => '',
-    22 => '(ڸʽ -- YYYY-MM-DD)',
-    23 => '',
-    24 => 'ҵ',
-    25 => '',
-    26 => 'ĿУ',
-    27 => '',
-    28 => 'ûѰҵ»',
-    29 => 'º۵Ľ',
-    30 => 'ûѰҵ',
-    31 => 'ûѰҵĲ',
-    32 => '¼',
-    33 => 'URL',
-    34 => 'ص',
-    35 => '',
-    36 => 'ûѰҵ¼',
-    37 => '¼Ľ',
-    38 => 'Ľ',
-    39 => '',
-    40 => '¼',
-    41 => 'ѰĹؼҪ֡',
-    42 => 'ʹ YYYY-MM-DD (--) ڸʽ',
-    43 => '',
-    44 => 'ִ',
-    45 => 'κִ',
-    46 => '',
-    47 => '',
-    48 => '',
-    49 => '',
-    50 => '',
-    51 => '',
-    52 => 'λ',
-    53 => '½',
-    54 => '۽',
-    55 => '',
-    56 => '',
-    57 => ''
-);
-
-###############################################################################
-# stats.php
-
-$LANG10 = array(
-    1 => 'վͳ',
-    2 => 'ϵͳ',
-    3 => '()',
-    4 => 'ͶƱ(ͶƱ)',
-    5 => '()',
-    6 => '¼',
-    7 => 'ۿʮ',
-    8 => '±',
-    9 => 'ۿ',
-    10 => 'վû»û˹ۿվ¡',
-    11 => '۵ʮ',
-    12 => '',
-    13 => 'վû»û۹վ¡',
-    14 => 'ͶƱʮѡ',
-    15 => 'ͶƱ',
-    16 => 'ͶƱ',
-    17 => 'վûͶƱûͶƱ',
-    18 => '˵ʮ',
-    19 => '',
-    20 => '',
-    21 => 'վûû˵վᡣ',
-    22 => '˼ĳʮ',
-    23 => '',
-    24 => 'û˼ĳվ'
-);
-
-###############################################################################
-# article.php
-
-$LANG11 = array(
-    1 => 'ʲص',
-    2 => '¸',
-    3 => 'ӡ¸ʽ',
-    4 => 'ѡ',
-    5 => 'PDF °汾'
-);
-
-###############################################################################
-# submit.php
-
-$LANG12 = array(
-    1 => 'Ҫſɷ %s ',
-    2 => '',
-    3 => 'û',
-    4 => 'һ',
-    5 => 'һ',
-    6 => 'һ',
-    7 => 'Ҫ',
-    8 => '',
-    9 => 'ڱվʱ½...<ul><li>де<li>ṩȫ׼ȷѶϢ<li>Щ URLs</ul>',
-    10 => '',
-    11 => '',
-    12 => 'ʼ',
-    13 => '',
-    14 => 'ص',
-    15 => '',
-    16 => 'ָ',
-    17 => '',
-    18 => '',
-    19 => '',
-    20 => 'ȱ',
-    21 => 'ѡ""ṩһ',
-    22 => 'ȱλ',
-    23 => 'деλ',
-    24 => '㷢ѱ',
-    25 => ' %s ѱ',
-    26 => '',
-    27 => 'û',
-    28 => '',
-    29 => '',
-    30 => 'ᷢ',
-    31 => " ֮ǰվ޶ {$_CONF['speedlimit']} ſٷ",
-    32 => 'Ԥ',
-    33 => ' Ԥ',
-    34 => '˳',
-    35 => '׼ HTML ',
-    36 => 'ģʽ',
-    37 => "¼ {$_CONF['site_name']} Ὣ¼ӵУûذӽԼĸ<b>Ҫ</b>ĸ¼Ʃպӽȥ<br><br>ֻҪԱ׼¼ϡ",
-    38 => '¼',
-    39 => '',
-    40 => '',
-    41 => 'ʱ',
-    42 => 'ʼʱ',
-    43 => 'յ¼',
-    44 => 'ַ 1',
-    45 => 'ַ 2',
-    46 => '/',
-    47 => '',
-    48 => '',
-    49 => '¼',
-    50 => '༭¼',
-    51 => 'ص',
-    52 => 'ɾ',
-    53 => '¼ʻ'
-);
-
-###############################################################################
-# ADMIN PHRASES - These are file phrases used in admin scripts
-###############################################################################
-
-###############################################################################
-# admin/auth.inc.php
-
-$LANG20 = array(
-    1 => 'Ҫ֤',
-    2 => 'ܾȷĵ',
-    3 => 'Ч',
-    4 => 'û',
-    5 => '룺',
-    6 => 'ҳֻȨԱʹá<br>дȡ¼ͼ顣',
-    7 => ''
-);
-
-###############################################################################
-# admin/block.php
-
-$LANG21 = array(
-    1 => 'Ȩ',
-    2 => 'ûȨȥ༭',
-    3 => '༭',
-    4 => 'ȡʱִĴ¼ error.log ￴ϸ.',
-    5 => '',
-    6 => '',
-    7 => '',
-    8 => 'ȫˮƽ',
-    9 => '',
-    10 => '',
-    11 => '',
-    12 => '',
-    13 => 'ѡ',
-    14 => ' RDF  URL',
-    15 => ' RDF ',
-    16 => 'ѡ',
-    17 => '',
-    18 => 'дıݡ',
-    19 => 'Ա',
-    20 => '',
-    21 => 'ȫˮƽ',
-    22 => '',
-    23 => '',
-    24 => '',
-    25 => '޸Ļɾɴһµġ',
-    26 => '',
-    27 => 'PHP ',
-    28 => 'PHP ѡ',
-    29 => '',
-    30 => 'Լ PHP 뺯֡ΪִֹԵı룬PHP  "phpblock_" ʼ (e.g. phpblock_getweather)벻ҪѿյԲ "()" ںᡣᣬе PHP  /path/to/geeklog/system/lib-custom.php Էϵͳ',
-    31 => 'PHP U %s ڡ',
-    32 => 'Uȱλ',
-    33 => ' URL 뵽 .rdf ',
-    34 => ' PHP ͺ',
-    35 => '',
-    36 => 'ڰ',
-    37 => 'ʵ PHP ',
-    38 => 'ΪִֹԵı룬PHP  "phpblock_" ʼ (e.g. phpblock_getweather)',
-    39 => 'Ǳ',
-    40 => '',
-    41 => '',
-    42 => 'ڱϵͳԤʹ',
-    43 => 'ֻҳ',
-    44 => 'ȡܾ',
-    45 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/block.php\">Ա</a>",
-    46 => '',
-    47 => 'Աҳ',
-    48 => '',
-    49 => ' (пոͱΨһ)',
-    50 => 'ļ URL',
-    51 => ' http://',
-    52 => 'ףļͼʾʾ',
-    53 => 'ʹЧ',
-    54 => '',
-    55 => 'ȡ',
-    56 => 'ɾ',
-    57 => '',
-    58 => '',
-    59 => 'ұ',
-    60 => ''
-);
-
-###############################################################################
-# admin/event.php
-
-$LANG22 = array(
-    1 => '¼༭',
-    2 => 'Error',
-    3 => '¼',
-    4 => '¼ URL',
-    5 => '¼ʼ',
-    6 => '¼',
-    7 => '¼ص',
-    8 => '¼',
-    9 => '( http://)',
-    10 => 'ṩʱ䡢¼⡢¼',
-    11 => '¼Ա',
-    12 => '¼޸Ļɾ¼ɴһµġ',
-    13 => '¼',
-    14 => 'ʼ',
-    15 => '',
-    16 => 'ȡܾ',
-    17 => "ͼȡ¼ѱ¼<a href=\"{$_CONF['site_admin_url']}/event.php\">¼Ա</a>",
-    18 => '¼',
-    19 => 'Աҳ',
-    20 => '',
-    21 => 'ȡ',
-    22 => 'ɾ',
-    23 => 'Ŀʼ.',
-    24 => 'Ľ.',
-    25 => 'ڿʼǰ.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => '༭',
-    2 => '',
-    3 => '',
-    4 => ' URL',
-    5 => '',
-    6 => '( http://)',
-    7 => '',
-    8 => 'ᱻ',
-    9 => '',
-    10 => 'Ҫṩ⡢ URL ',
-    11 => 'Ա',
-    12 => '޸Ļɾɴһµġ',
-    13 => '',
-    14 => '',
-    15 => ' URL',
-    16 => 'ȡܾ',
-    17 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/link.php\">Ա</a>",
-    18 => '',
-    19 => 'Աҳ',
-    20 => 'ָ',
-    21 => '',
-    22 => 'ȡ',
-    23 => 'ɾ'
-);
-
-###############################################################################
-# admin/story.php
-
-$LANG24 = array(
-    1 => 'ƪ',
-    2 => 'ƪ',
-    3 => 'ģʽ',
-    4 => 'ģʽ',
-    5 => '±༭',
-    6 => 'û',
-    7 => '',
-    8 => '',
-    9 => 'Ԥ',
-    10 => 'ȡ',
-    11 => 'ɾ',
-    12 => 'ID',
-    13 => '',
-    14 => '',
-    15 => '',
-    16 => '¼',
-    17 => '',
-    18 => '',
-    19 => '',
-    20 => '',
-    21 => '',
-    22 => '嵥',
-    23 => '±ſ޸Ļɾ±ɹۿ¿ɴһµġ',
-    24 => 'ѡûáһû',
-    25 => '',
-    26 => 'Ԥ',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'ش',
-    31 => 'Ҫṩߡ¼飡',
-    32 => 'ͷ',
-    33 => 'ֻһͷ',
-    34 => 'ݸ',
-    35 => '',
-    36 => '',
-    37 => '',
-    38 => '෢',
-    39 => '',
-    40 => 'ȡܾ',
-    41 => "ͼȡѱ¼Ψģʽۿ¡<a href=\"{$_CONF['site_admin_url']}/story.php\">¹Ա</a>",
-    42 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/story.php\">¹Ա</a>",
-    43 => '',
-    44 => 'Աҳ',
-    45 => 'ȡȨ',
-    46 => '<b>עU</b>ڸĳɽǸǰƪ½ᱻ ζƪ² RDF ڣѰͳҳлᱻԡ',
-    47 => 'ͼ',
-    48 => 'ͼ',
-    49 => '',
-    50 => '',
-    51 => 'رʽ([imageX][imageX_right]  [imageX_left])ͼ X 㸽ͼıšעUֻʹ㸽ӵͼ㽫޷¡<BR><P><B>Ԥ</B>UԤµķǰ±ɲݸֱԤťֻûиͼʱԤť',
-    52 => 'ɾ',
-    53 => 'ûбʹáǰͼ¼С',
-    54 => 'ͼδʹ',
-    55 => 'ʱ´Щٱ',
-    56 => 'ʾͼʾ',
-    57 => 'ûζСͼ',
-    58 => '¹',
-    59 => 'ѡ',
-    60 => '',
-    61 => 'Զ',
-    62 => 'Զɾ'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'ģʽ',
-    2 => 'һһ.',
-    3 => 'ͶƱ',
-    4 => 'ͶƱ %s ',
-    5 => '༭ͶƱ',
-    6 => 'ͶƱ',
-    7 => '(пո)',
-    8 => 'ҳ',
-    9 => '',
-    10 => ' / ͶƱ',
-    11 => 'ȡͶƱ (%s) ʱ',
-    12 => 'ȡͶƱ (%s) ʱ',
-    13 => '¼ͶƱ',
-    14 => '',
-    15 => 'ȡ',
-    16 => 'ɾ',
-    17 => 'һͶƱ ID',
-    18 => 'ͶƱ嵥',
-    19 => 'ͶƱ޸ĻɾͶƱɴһµġ',
-    20 => 'ͶƱ',
-    21 => 'ȡܾ',
-    22 => "ͼȡͶƱѱ¼<a href=\"{$_CONF['site_admin_url']}/poll.php\">ͶƱԱ</a>",
-    23 => 'ͶƱ',
-    24 => 'Աҳ',
-    25 => '',
-    26 => ''
-);
-
-###############################################################################
-# admin/topic.php
-
-$LANG27 = array(
-    1 => '༭',
-    2 => '',
-    3 => '',
-    4 => 'ͼ',
-    5 => '(пո)',
-    6 => 'ɾͬʱɾйصº',
-    7 => 'Ҫṩź',
-    8 => 'Ա',
-    9 => '޸Ļɾɴһµġ㽫Ĵȡ',
-    10 => '',
-    11 => ' / ҳ',
-    12 => 'ȡܾ',
-    13 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/topic.php\">Ա</a>.",
-    14 => '򷽷',
-    15 => 'ĸ',
-    16 => 'Ԥ',
-    17 => '',
-    18 => 'Աҳ',
-    19 => '',
-    20 => 'ȡ',
-    21 => 'ɾ',
-    22 => 'Ԥ',
-    23 => 'ôΪ¸Ԥ',
-    24 => '(*)',
-    25 => 'ļĿ',
-    26 => 'ôĿļĬĿֻ׼һĿ'
-);
-
-###############################################################################
-# admin/user.php
-
-$LANG28 = array(
-    1 => 'û༭',
-    2 => 'û',
-    3 => 'û',
-    4 => 'ȫ',
-    5 => '',
-    6 => 'ȫ',
-    7 => 'ʵַ',
-    8 => 'ҳ',
-    9 => '(пո)',
-    10 => 'Ҫṩûȫȫ͵ʵַ',
-    11 => 'ûԱ',
-    12 => 'û޸Ļɾûɴһµġı벿ݵûʵַȫ (e.g.*son* or *.edu) 򵥵Ѱҡ',
-    13 => 'ȫ',
-    14 => 'Ǽ',
-    15 => 'û',
-    16 => 'Աҳ',
-    17 => '',
-    18 => 'ȡ',
-    19 => 'ɾ',
-    20 => '',
-    21 => 'ûѾ',
-    22 => '',
-    23 => '',
-    24 => 'û',
-    25 => 'һιû Geeklog 뵵һ tab ֵָλ˳ǩUȫûʵַÿһûյһԵʼ͵롣ÿһһûûЩҪ⣬ҲҪֶҵ㵵',
-    26 => 'Ѱ',
-    27 => 'Χ',
-    28 => '򹳿ɾͼƬ',
-    29 => '·',
-    30 => '',
-    31 => 'û',
-    32 => 'ɡ %d %d ʧ',
-    33 => 'ݽ',
-    34 => 'Uָص',
-    35 => 'һε',
-    36 => '(δ)'
-);
-
-###############################################################################
-# admin/moderation.php
-
-$LANG29 = array(
-    1 => '׼',
-    2 => 'ɾ',
-    3 => '༭',
-    4 => 'Ҫ',
-    10 => '',
-    11 => 'ʼ',
-    12 => 'URL',
-    13 => '',
-    14 => '',
-    15 => '',
-    16 => 'û',
-    17 => 'ȫ',
-    18 => 'ʼ',
-    34 => 'Ϳ',
-    35 => 'ѵݽ',
-    36 => 'ѵݽ',
-    37 => 'ѵݽ¼',
-    38 => 'ݽ',
-    39 => 'ʱûеݽĶ',
-    40 => 'û'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG30 = array(
-    1 => 'Sunday',
-    2 => 'Monday',
-    3 => 'Tuesday',
-    4 => 'Wednesday',
-    5 => 'Thursday',
-    6 => 'Friday',
-    7 => 'Saturday',
-    8 => '¼',
-    9 => 'Geeklog ¼',
-    10 => '¼',
-    11 => '',
-    12 => 'ҵ',
-    13 => 'һ',
-    14 => '',
-    15 => '',
-    16 => '',
-    17 => '',
-    18 => '',
-    19 => '',
-    20 => '',
-    21 => '',
-    22 => 'ʮ',
-    23 => 'ʮһ',
-    24 => 'ʮ',
-    25 => 'ص',
-    26 => '',
-    27 => '',
-    28 => 'U',
-    29 => '',
-    30 => 'ɾ¼',
-    31 => '',
-    32 => '¼',
-    33 => '',
-    34 => 'ʱ',
-    35 => 'Ѹ',
-    36 => 'ݽ',
-    37 => 'Ǹվṩ',
-    38 => '¼༭',
-    39 => '',
-    40 => '',
-    41 => ''
-);
-
-###############################################################################
-# admin/mail.php
-
-$LANG31 = array(
-    1 => "{$_CONF['site_name']} ʼʽ",
-    2 => 'ļ',
-    3 => 'ظ',
-    4 => '',
-    5 => '',
-    6 => 'ռ˩U',
-    7 => 'û',
-    8 => 'Ա',
-    9 => 'ѡ',
-    10 => 'HTML',
-    11 => 'еѶϢ',
-    12 => '',
-    13 => '',
-    14 => 'û趨',
-    15 => '󣬵͵U',
-    16 => 'ѶϢѷ͵U',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>ż</a>",
-    18 => 'ռ',
-    19 => 'עUϣѶϢվеĳԱСѡλѡ Logged-in Users group',
-    20 => "ѷ <successcount> ѶϢ <failcount> ܷ͡͵ϸ档粻뿴ϸڣ<a href=\"{$_CONF['site_admin_url']}/mail.php\">ѶϢ</a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">عԱҳ</a>",
-    21 => 'ʧ',
-    22 => 'ɹ ',
-    23 => 'ȫɹ ',
-    24 => 'ȫʧ',
-    25 => '-- ѡС --',
-    26 => 'дбϵλѡһС顣'
-);
-
-###############################################################################
-# admin/plugins.php
-
-$LANG32 = array(
-    1 => 'װϵͳ ҪرСġ òҪװκ㲻˽Ĳ',
-    2 => 'װ',
-    3 => 'װ',
-    4 => '',
-    5 => '嵥',
-    6 => 'UѾװ',
-    7 => '밲װĲѾڣȰɾٰװ',
-    8 => 'ͨУ顣',
-    9 => 'Ҫһ°汾 Geeklog. <a href="http://www.geeklog.net">Geeklog</a>һʺϵİ汾',
-    10 => '<br><b>ûаװĲ</b><br><br>',
-    11 => '޸Ļɾ²ơʾϸݺߵվװİ汾ʹӴİ汾Գ֪˲ǷӦø¡Ҫװѯ˵ļ',
-    12 => 'plugineditor() Ҳ',
-    13 => '༭',
-    14 => '²',
-    15 => 'Աҳ',
-    16 => '',
-    17 => '汾',
-    18 => 'Geeklog 汾',
-    19 => 'ʹЧ',
-    20 => '',
-    21 => '',
-    22 => 'װ',
-    23 => '',
-    24 => 'ȡ',
-    25 => 'ɾ',
-    26 => '',
-    27 => 'ҳ',
-    28 => 'ѰװĲ汾',
-    29 => 'Geeklog 汾',
-    30 => 'ɾ',
-    31 => '϶ҪɾɾйļϺϽṹ϶ģٵеɾť',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => '汾',
-    34 => ''
-);
-
-###############################################################################
-# admin/syndication.php
-
-$LANG33 = array(
-    1 => '',
-    2 => '',
-    3 => 'ɾ',
-    4 => 'ȡ',
-    10 => 'ϼ',
-    11 => '',
-    12 => 'ҳ',
-    13 => 'Ҫ޸Ļɾһ, һϵ. Ҫµ, ϵ.',
-    14 => '',
-    15 => '',
-    16 => 'ļ',
-    17 => 'ʽ',
-    18 => 'һθ',
-    19 => '',
-    20 => '',
-    21 => '',
-    22 => '<i>()</i>',
-    23 => '',
-    24 => '༭',
-    25 => '',
-    26 => '޶',
-    27 => 'Ŀ',
-    28 => '(0 = , 1 = , other = ޶ڴ.)',
-    29 => '˵',
-    30 => 'һθ',
-    31 => 'ַ',
-    32 => '',
-    33 => '',
-    34 => 'Ŀ',
-    35 => 'Сʱ',
-    36 => 'ѡ',
-    37 => 'һװ˵Ĳϼ.һҪѡǷҪһϵͳ.',
-    38 => ': ȱϢ',
-    39 => ', ˵, ļ.',
-    40 => 'ĿĿСʱĿ.',
-    41 => '',
-    42 => '¼'
-);
-
-###############################################################################
-# confirmation and error messages
-
-$MESSAGE = array(
-    1 => "ѵ뵽ĵ䣬ʼеָʾлʹ {$_CONF['site_name']}",
-    2 => "лݽµ {$_CONF['site_name']} ֻҪԱĺ˶ԣ½ǵĸҳϡ",
-    3 => "лݽᵽ {$_CONF['site_name']} ֻҪԱĺ˶ԣὫǵĸҳϡ",
-    4 => "лݽ¼ {$_CONF['site_name']} ֻҪԱĺ˶ԣ¼ǵ<a href={$_CONF['site_url']}/calendar.php></a>ϡ",
-    5 => 'ʻ趨ѱˡ',
-    6 => 'ĸ趨ѱˡ',
-    7 => '۽趨ѱˡ',
-    8 => '˳',
-    9 => 'ѱˡ',
-    10 => 'ѱɾˡ',
-    11 => 'ѱˡ',
-    12 => 'ѱɾˡ',
-    13 => 'ѱˡ',
-    14 => 'صѱɾˡ',
-    15 => 'ѱˡ',
-    16 => 'ѱɾˡ',
-    17 => '¼ѱˡ',
-    18 => '¼ѱɾˡ',
-    19 => 'ͶƱѱˡ',
-    20 => 'ͶƱѱɾˡ',
-    21 => 'ûѱˡ',
-    22 => 'ûѱɾˡ',
-    23 => '¼ʱȱ¼š',
-    24 => '¼ӵС',
-    25 => 'Ҫſɿĸ',
-    26 => '¼ѴƳ',
-    27 => 'Ϣѷ͡',
-    28 => 'ѱˡ',
-    29 => 'Ǹվṩ',
-    30 => 'ȡܾ',
-    31 => 'Ǹ㲻ܽ¹ҳעͼѱ¼',
-    32 => 'Ǹ㲻ܽҳעͼѱ¼',
-    33 => 'Ǹ㲻ܽҳעͼѱ¼',
-    34 => 'Ǹ㲻ܽҳעͼѱ¼',
-    35 => 'Ǹ㲻ܽ¼ҳעͼѱ¼',
-    36 => 'Ǹ㲻ܽͶƱҳעͼѱ¼',
-    37 => 'Ǹ㲻ܽûҳעͼѱ¼',
-    38 => 'Ǹ㲻ܽ Plug-in ҳעͼѱ¼',
-    39 => 'Ǹ㲻ܽʹҳעͼѱ¼',
-    40 => 'ϵͳѶϢ',
-    41 => 'Ǹ㲻ִܽ滻ҳעͼѱ¼',
-    42 => 'ִѱˡ',
-    43 => 'ִѱɾˡ',
-    44 => 'ѱװˡ',
-    45 => 'ѱɾˡ',
-    46 => 'Ǹ㲻ܽϿⱸݳʽעͼѱ¼',
-    47 => 'ֻ *nix ҵϵͳ *nixĻѱˡҵϵͳ WindowsҪֶѰļΪ adodb _ *.php ĵǳȥ',
-    48 => "лΪ {$_CONF['site_name']} ĻԱֻҪԱĺ˶ԣǻĵǼǵĵС",
-    49 => 'Сѱˡ',
-    50 => 'Сѱɾˡ',
-    51 => 'ûáѡһ',
-    52 => 'ĵŵַЧ',
-    53 => 'ѱܡ.',
-    54 => 'ҪԹҪ',
-    55 => 'Ѿһšմŵ˵趨롣',
-    56 => '㹩ĵŵַбûʹá',
-    57 => 'ûѾɹɾˡ',
-    58 => 'ѳɹı.',
-    59 => 'ѳɹɾ.',
-    60 => 'Ѿ³ɹ',
-    61 => ' %s: ֪Ϣռλ'
-);
-
-###############################################################################
-
-$LANG_ACCESS = array(
-    'access' => 'ȡ',
-    'ownerroot' => '/Root',
-    'group' => 'С',
-    'readonly' => 'Ψ',
-    'accessrights' => 'ȡȨ',
-    'owner' => '',
-    'grantgrouplabel' => '֮С༭Ȩ',
-    'permmsg' => 'עUԱָע͵ûָзע߻ûеû',
-    'securitygroups' => 'ȫС',
-    'editrootmsg' => "ʹûԱ㲻ܱ༭ root ûܱ༭еû root ûעͼǷر༭ root ûĶѱ¼ص<a href=\"{$_CONF['site_admin_url']}/user.php\">ûҳ</a>ȥ",
-    'securitygroupsmsg' => 'ѡλû춵С顣',
-    'groupeditor' => 'С༭',
-    'description' => '',
-    'name' => '',
-    'rights' => 'Ȩ',
-    'missingfields' => 'ȱλ',
-    'missingfieldsmsg' => 'ṩСֺ',
-    'groupmanager' => 'СԱ',
-    'newgroupmsg' => 'С޸ĻɾСɴһµġעС鲻ܱɾ',
-    'groupname' => '',
-    'coregroup' => 'С',
-    'yes' => '',
-    'no' => '',
-    'corerightsdescr' => "СȨ޲ܱ༭ΪǸ {$_CONF['site_name']} ĺС顣СȨ嵥(Ψ)",
-    'groupmsg' => 'ȫСվеȼƶȵġС鵽һС齫õȨޡ뾡СеȥСҪرȨޣµ"Ȩ"ѡҪСӵȥֻҪԱߵѡд򹳡',
-    'coregroupmsg' => "ΪǸ {$_CONF['site_name']} ĺС飬СȨ޲ܱ༭С嵥(Ψ)",
-    'rightsdescr' => 'СȨ޿С鱾СµȨûммȨСммֱӰȨ޸С顣',
-    'lock' => 'ס',
-    'members' => 'Ա',
-    'anonymous' => '',
-    'permissions' => 'Ȩ',
-    'permissionskey' => 'R = Ψ E = ༭б༭ȨΨȨ',
-    'edit' => '༭',
-    'none' => 'û',
-    'accessdenied' => 'ȡܾ',
-    'storydenialmsg' => "δ׼㲻Թۿ¡ǿΪ㲢 {$_CONF['site_name']} ĻԱ<a href=users.php?mode=new>ΪԱ</a>",
-    'eventdenialmsg' => "δ׼㲻Թۿ¼ǿΪ㲢 {$_CONF['site_name']} ĻԱ<a href=users.php?mode=new>ΪԱ</a>",
-    'nogroupsforcoregroup' => 'С鲻κС',
-    'grouphasnorights' => ' СûйȨ',
-    'newgroup' => 'С',
-    'adminhome' => 'Աҳ',
-    'save' => '',
-    'cancel' => 'ȡ',
-    'delete' => 'ɾ',
-    'canteditroot' => 'Ϊ㲻 Root С飬 Root С޸ıܾˡϵͳԱϵ',
-    'listusers' => 'гû',
-    'listthem' => 'г',
-    'usersingroup' => ' "%s" Сû',
-    'usergroupadmin' => 'ûС',
-    'add' => '',
-    'remove' => '',
-    'availmembers' => 'õĳԱ',
-    'groupmembers' => 'СԱ',
-    'canteditgroup' => 'Ҫ޸ĴС, ҪʱСĳԱ. ΪǴ, ϵͳԱ.',
-    'cantlistgroup' => 'ҪСĻԱǴСĻԱΪǴϵͳԱ'
-);
-
-###############################################################################
-# admin/database.php
-
-$LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'ʮ',
-    'do_backup' => '',
-    'backup_successful' => 'Ͽⱸɡ',
-    'no_backups' => 'ûб',
-    'db_explanation' => 'Ҫµ Geeklog ݣµİť',
-    'not_found' => "ȷ· mysqldump ʽִС<br><strong>$_DB_mysqldump_path</strong> config.php.<br>ڱΪU<var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => 'ʧܩU 0 С',
-    'path_not_found' => "{$_CONF['backup_path']} ڻĿ¼",
-    'no_access' => "UĿ¼ {$_CONF['backup_path']} ܴȡ",
-    'backup_file' => 'ݵ',
-    'size' => 'С',
-    'bytes' => 'λԪ',
-    'total_number' => 'ܱݴ: %d'
-);
-
-###############################################################################
-
-$LANG_BUTTONS = array(
-    1 => 'ҳ',
-    2 => '',
-    3 => 'Ͷ',
-    4 => '',
-    5 => 'ͶƱ',
-    6 => '',
-    7 => 'վͳ',
-    8 => '˻',
-    9 => '',
-    10 => 'Ѱ'
-);
-
-###############################################################################
-# 404.php
-
-$LANG_404 = array(
-    1 => '404 ',
-    2 => 'ףҵ˵Ҳ<b>%s</b>.',
-    3 => "<p>ܱǸҪļڡ<a href=\"{$_CONF['site_url']}\">ҳ</a><a href=\"{$_CONF['site_url']}/search.php\">ҳ</a>ܷʲᡣ"
-);
-
-###############################################################################
-# login form
-
-$LANG_LOGIN = array(
-    1 => 'Ҫ',
-    2 => 'ǸҪſɴȡ',
-    3 => '',
-    4 => 'û'
-);
-
-###############################################################################
-# pdfgenerator.php
-
-$LANG_PDF = array(
-    1 => 'PDF 汾ѱֹ',
-    2 => 'ṩļûгʵݡļյ޷϶ύļ html ʽļд xHTML ı׼עָӵ html ļҲ޷ȷʵݡļύĽ 0 bytes ѱɾ϶ļӦ˳ĳʵݣٴύ',
-    3 => '֪PDF ļ',
-    4 => "ûṩҳϻҪµر PDF ߡΪõҳǴ ϵͳԱҪȻµıر PDF",
-    5 => 'װļ',
-    6 => 'ļװʱȴ',
-    7 => 'һµİťȻѡ \'save target...\' or \'save link location...\' ļһ',
-    8 => "õ HTMLDocƵ·д󣬻ϵͳ޷ִд˵վԱ",
-    9 => 'PDF ',
-    10 => "ر PDF ߡὫκ URL ת PDF 汾ע⣬Щҳȷı⹤ߴɹ HTMLDoc PDF ߵ֮ĴҪվĹԱ",
-    11 => 'URL',
-    12 => ' PDF!',
-    13 => '˷ PHP ò׼ fopen()  URL ϡ ϵͳԱ޸  php.ini Ȼ趨 allow_url_fopen  On',
-    14 => 'Ҫ PDF ڻڷǷȡһ'
-);
-
+
+$LANG_CHARSET = 'GB2312';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'ߩU',
+    2 => '',
+    3 => '',
+    4 => '༭',
+    5 => 'ͶƱ',
+    6 => '',
+    7 => 'ͶƱ',
+    8 => 'ͶƱ',
+    9 => '߹ܩU',
+    10 => 'ύ',
+    11 => '',
+    12 => '',
+    13 => '',
+    14 => '',
+    15 => '¼',
+    16 => 'ͶƱ',
+    17 => 'û',
+    18 => 'SQL ',
+    19 => '˳',
+    20 => 'ûѶϢU',
+    21 => 'û',
+    22 => 'ûʶ',
+    23 => 'ȫȼ',
+    24 => '',
+    25 => 'ظ',
+    26 => 'ֻ߸˹۵㡣',
+    27 => '',
+    28 => 'ɾ',
+    29 => 'ûۡ',
+    30 => 'ɵ',
+    31 => ' HTML :',
+    32 => 'Чû',
+    33 => '󣬲дϵͳ־;',
+    34 => '',
+    35 => '˳',
+    36 => '',
+    37 => 'û',
+    38 => 'ϼ',
+    39 => 'ʹ',
+    40 => 'ķ <tt>php.ini</tt> 趨Ϊ <tt>register_globals = Off</tt>. ǴҪ <tt>register_globals</tt> 趨 <strong>on</strong>. ǰ뽫趨Ϊ<strong>on</strong>Ȼ¿.',
+    41 => '',
+    42 => ':',
+    43 => 'ظ',
+    44 => 'ĸ',
+    45 => 'MySQL ',
+    46 => 'MySQL ѶϢ',
+    47 => 'û',
+    48 => 'ʻѶϢ',
+    49 => 'ѡ',
+    50 => ' SQL statement',
+    51 => '',
+    52 => '',
+    53 => 'ҳ',
+    54 => 'ܴļ',
+    55 => '',
+    56 => 'ͶƱ',
+    57 => '',
+    58 => '',
+    59 => "ûʻ<a href=\"{$_CONF['site_url']}/users.php?mode=new\">ڴ˵Ǽ</a>",
+    60 => '',
+    61 => 'ʻ',
+    62 => '',
+    63 => '趨',
+    64 => 'µʸ',
+    65 => 'ۿӡİ汾',
+    66 => 'ҵ',
+    67 => 'ӭ',
+    68 => 'ҳ',
+    69 => '',
+    70 => 'Ѱ',
+    71 => 'Ͷ',
+    72 => '·Դ',
+    73 => 'ͶƱ',
+    74 => '',
+    75 => '',
+    76 => 'վͳ',
+    77 => '',
+    78 => '',
+    79 => 'ʵĶ',
+    80 => '(',
+    81 => 'µ(',
+    82 => ' Сʱ)',
+    83 => '',
+    84 => '',
+    85 => 'ʮСʱ',
+    86 => 'ûµ',
+    87 => '',
+    88 => 'ûµ',
+    89 => 'û·',
+    90 => 'ҳ',
+    91 => 'ҳ',
+    92 => '',
+    93 => 'Ȩ',
+    94 => 'վе̱ͰȨǸԵ.',
+    95 => '',
+    96 => 'С',
+    97 => 'ִʵ',
+    98 => '',
+    99 => '',
+    100 => 'ûµ',
+    101 => '¼',
+    102 => 'վ¼',
+    103 => 'Ͽⱸ',
+    104 => '',
+    105 => 'ĸû',
+    106 => 'ۿ',
+    107 => 'GL 汾',
+    108 => '',
+    109 => '',
+    110 => 'ĵĸվԱ',
+    111 => 'PDF 汾',
+    112 => 'Ǽû',
+    113 => 'ʹ˵',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => '¼',
+    2 => 'Ǹû¼',
+    3 => 'ʱ',
+    4 => '',
+    5 => '',
+    6 => '¼',
+    7 => '',
+    8 => 'ڽ¼ӽ֮ᣬɵ "ҵ" ۿ',
+    9 => 'ӽҵ',
+    10 => 'ҵȥ',
+    11 => "¼ӽ {$_USER['username']} ",
+    12 => '¼',
+    13 => 'ʼ',
+    14 => '',
+    15 => 'ص'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => '',
+    2 => 'ʽ',
+    3 => '˳',
+    4 => 'ʻ',
+    5 => 'û',
+    6 => 'վҪſɷۣ롣ûʻʹıǼǡ',
+    7 => 'ᷢ ',
+    8 => " ֮ǰվ޶ {$_CONF['commentspeedlimit']} ſٷ",
+    9 => '',
+    10 => 'ͳ',
+    11 => '',
+    12 => 'дע',
+    13 => 'ο',
+    14 => 'Ԥ',
+    15 => 'ƪĵ',
+    16 => '',
+    17 => '',
+    18 => 'ҪĶ',
+    19 => '뾡Ҫ⡣',
+    20 => 'ܻظ˵ۣǿµۡ',
+    21 => 'Ϊظ֮ǰȶдġ',
+    22 => '뾡üı⡣',
+    23 => 'ǲṫĵʵַ',
+    24 => 'û',
+    25 => '϶ҪĵĸվԱ?',
+    26 => '%s ĵǵ:',
+    27 => 'ñ'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'ûſ',
+    2 => 'û',
+    3 => 'ȫ',
+    4 => '',
+    5 => 'ʼ',
+    6 => 'ҳ',
+    7 => 'С',
+    8 => 'PGP Կ',
+    9 => '趨',
+    10 => 'ûʮ',
+    11 => 'û',
+    12 => 'û趨',
+    13 => 'ÿҹժ',
+    14 => 'Ǹ룬뾡ġҪȵϵͳȻʻѶϢ',
+    15 => " {$_CONF['site_name']} ʻѽˡʹѶϢϵͳʼο",
+    16 => 'ʻѶϢ',
+    17 => 'ʻ',
+    18 => 'ṩĲһЧĵĵ',
+    19 => 'ûѾ',
+    20 => 'ṩĲһЧĵĵ',
+    21 => '',
+    22 => "Ǽ {$_CONF['site_name']} ",
+    23 => " {$_CONF['site_name']} ǼǵûеĻԱôǿԼַۺʹȡվԴעⱾվ<b><i></i></b>ûĵʡ",
+    24 => '뽫͵ĵ',
+    25 => '',
+    26 => 'û͵룬ǻᷢһµ뵽ĵ䡣',
+    27 => 'ھ͵Ǽǣ',
+    28 => '',
+    29 => '˳ʱ',
+    30 => 'ʱ',
+    31 => 'Ҫſ',
+    32 => '',
+    33 => 'ṫ',
+    34 => '',
+    35 => 'Ҫı',
+    36 => 'ʼ http://',
+    37 => 'ḽ㷢',
+    38 => 'ļ',
+    39 => 'Ĺ PGP Կ',
+    40 => 'ûͼʾ',
+    41 => 'Ը',
+    42 => 'ڸʽ',
+    43 => '޶',
+    44 => 'û',
+    45 => 'ʾ趨',
+    46 => '',
+    47 => 'Ϊ',
+    48 => '',
+    49 => 'ûͼ',
+    50 => 'Ҫ㲻Ȥ',
+    51 => 'ֻ',
+    52 => 'Ԥֵ',
+    53 => 'ÿյյ',
+    54 => '㲻Щߡ',
+    55 => 'ûѡζҪԤѡԤ佫ԡԤĶôֱʻʾ',
+    56 => '',
+    57 => 'ʾʽ',
+    58 => 'ʽ',
+    59 => '()',
+    60 => 'ʾ',
+    61 => '»ɵȣ',
+    62 => 'Ԥ100',
+    63 => 'ѱͣܿյġ',
+    64 => '趨',
+    65 => '볢ٵ',
+    66 => "ܴˣ볢ٵ롣Ƿ<a href=\"{$_CONF['site_url']}/users.php?mode=new\">û</a>",
+    67 => 'Ա',
+    68 => 'סΪ',
+    69 => 'ڵᣬӦüסã',
+    70 => " {$_CONF['site_name']} Ĳֺ",
+    71 => "һ {$_CONF['site_name']} ҪصԶԼĲֺݣǱվĻԱ<a href=\"{$_CONF['site_url']}/users.php?mode=new\">ڴ˵Ǽ</a>ѾǵǼǣʹߵ롣",
+    72 => '',
+    73 => '',
+    74 => 'ı䱾վ',
+    75 => 'ѵʸ',
+    76 => 'ֻѡȤ⣬Ϊе½ʵ䡣',
+    77 => 'Ƭ',
+    78 => 'ԼͼƬ',
+    79 => 'ҪɾͼƬ',
+    80 => '',
+    81 => '͵ʼ',
+    82 => 'ûʮΪ',
+    83 => 'ûͳ',
+    84 => 'U',
+    85 => 'U',
+    86 => 'Ѱз©U',
+    87 => 'ĵ',
+    88 => "(Ҳ)Ҫ \"%s\"  {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nҪ, :\n\n",
+    89 => "Ҫ, Ϣ¾ͽᱻͱԭ.\n\n",
+    90 => 'һµ롣עľȻЧֱ㽫˱ύ',
+    91 => '趨',
+    92 => '',
+    93 => ' %d ǰҪһ. վ涨Ҫ %d ԺſٴҪ롣',
+    94 => 'û \'%s\' ɾ',
+    95 => ' \'ɾû\' 㽫Ͽûע⣬ûعº۲ɾǻߵʾ',
+    96 => 'ɾû',
+    97 => 'ȷûɾ',
+    98 => '϶Ҫɾû? Ͳʹôվ,趨û. ϶Ļٴε ɾû.',
+    99 => '˽ѡ',
+    100 => 'Ա',
+    101 => '׼Ա',
+    102 => 'û',
+    103 => '׼û',
+    104 => 'ʾ״',
+    105 => 'ڡ˭ʾ',
+    106 => 'λ',
+    107 => 'ʾĹ',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'ûſʾ',
+    2 => 'û¿ʾ',
+    3 => 'Ҳû %s 趨̫ԡ',
+    4 => 'ͷ',
+    5 => 'ҳ',
+    6 => 'ҳ',
+    7 => 'һ',
+    8 => ''
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => '͵ʼʱٳԡ',
+    2 => 'ͳ',
+    3 => 'ȷڻظһõĵʼַ',
+    4 => 'д֡ظ',
+    5 => 'ûû',
+    6 => '',
+    7 => 'û',
+    8 => 'û',
+    9 => 'û URL',
+    10 => 'ʼ',
+    11 => '֣',
+    12 => 'ظ',
+    13 => '⣺',
+    14 => 'ݣ',
+    15 => 'HTML ᱻ롣',
+    16 => 'ʼ',
+    17 => 'µʸ',
+    18 => 'ռ',
+    19 => 'ռ˵',
+    20 => 'ļ',
+    21 => 'ļ˵',
+    22 => 'Ҫд',
+    23 => "ʼ %s (%s) ĸģΪҲƪ {$_CONF['site_url']} ¸Ȥⲻʼ(SPAM)ĵʵַҲᱻ¼",
+    24 => 'µ',
+    25 => 'ΪǷֹϵͳã롣',
+    26 => '͵ʼѡûСдеλ',
+    27 => '',
+    28 => '%s д',
+    29 => " {$_CONF['site_name']} ÿժ裺",
+    30 => ' ÿյʱͨѶ裺',
+    31 => '',
+    32 => '',
+    33 => 'ڣ',
+    34 => 'ʽ',
+    35 => 'Բ𣬴ûԸյ.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Ѱ',
+    2 => 'ؼ',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => '',
+    7 => '',
+    8 => '',
+    9 => '',
+    10 => 'Ѱ',
+    11 => 'Ѱ',
+    12 => '',
+    13 => 'Ѱû',
+    14 => 'ûѰҵĶU',
+    15 => 'ٳ',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => "Ѱ {$_CONF['site_name']} ¾Ͽ",
+    20 => '',
+    21 => '',
+    22 => '(ڸʽ -- YYYY-MM-DD)',
+    23 => '',
+    24 => 'ҵ',
+    25 => '',
+    26 => 'ĿУ',
+    27 => '',
+    28 => 'ûѰҵ»',
+    29 => 'º۵Ľ',
+    30 => 'ûѰҵ',
+    31 => 'ûѰҵĲ',
+    32 => '¼',
+    33 => 'URL',
+    34 => 'ص',
+    35 => '',
+    36 => 'ûѰҵ¼',
+    37 => '¼Ľ',
+    38 => 'Ľ',
+    39 => '',
+    40 => '¼',
+    41 => 'ѰĹؼҪ֡',
+    42 => 'ʹ YYYY-MM-DD (--) ڸʽ',
+    43 => '',
+    44 => 'ִ',
+    45 => 'κִ',
+    46 => '',
+    47 => '',
+    48 => '',
+    49 => '',
+    50 => '',
+    51 => '',
+    52 => 'λ',
+    53 => '½',
+    54 => '۽',
+    55 => '',
+    56 => '',
+    57 => '',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'վͳ',
+    2 => 'ϵͳ',
+    3 => '()',
+    4 => 'ͶƱ(ͶƱ)',
+    5 => '()',
+    6 => '¼',
+    7 => 'ۿʮ',
+    8 => '±',
+    9 => 'ۿ',
+    10 => 'վû»û˹ۿվ¡',
+    11 => '۵ʮ',
+    12 => '',
+    13 => 'վû»û۹վ¡',
+    14 => 'ͶƱʮѡ',
+    15 => 'ͶƱ',
+    16 => 'ͶƱ',
+    17 => 'վûͶƱûͶƱ',
+    18 => '˵ʮ',
+    19 => '',
+    20 => '',
+    21 => 'վûû˵վᡣ',
+    22 => '˼ĳʮ',
+    23 => '',
+    24 => 'û˼ĳվ',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'ʲص',
+    2 => '¸',
+    3 => 'ӡ¸ʽ',
+    4 => 'ѡ',
+    5 => 'PDF °汾'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Ҫſɷ %s ',
+    2 => '',
+    3 => 'û',
+    4 => 'һ',
+    5 => 'һ',
+    6 => 'һ',
+    7 => 'Ҫ',
+    8 => '',
+    9 => 'ڱվʱ½...<ul><li>де<li>ṩȫ׼ȷѶϢ<li>Щ URLs</ul>',
+    10 => '',
+    11 => '',
+    12 => 'ʼ',
+    13 => '',
+    14 => 'ص',
+    15 => '',
+    16 => 'ָ',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => 'ȱ',
+    21 => 'ѡ""ṩһ',
+    22 => 'ȱλ',
+    23 => 'деλ',
+    24 => '㷢ѱ',
+    25 => ' %s ѱ',
+    26 => '',
+    27 => 'û',
+    28 => '',
+    29 => '',
+    30 => 'ᷢ',
+    31 => " ֮ǰվ޶ {$_CONF['speedlimit']} ſٷ",
+    32 => 'Ԥ',
+    33 => ' Ԥ',
+    34 => '˳',
+    35 => '׼ HTML ',
+    36 => 'ģʽ',
+    37 => "¼ {$_CONF['site_name']} Ὣ¼ӵУûذӽԼĸ<b>Ҫ</b>ĸ¼Ʃպӽȥ<br><br>ֻҪԱ׼¼ϡ",
+    38 => '¼',
+    39 => '',
+    40 => '',
+    41 => 'ʱ',
+    42 => 'ʼʱ',
+    43 => 'յ¼',
+    44 => 'ַ 1',
+    45 => 'ַ 2',
+    46 => '/',
+    47 => '',
+    48 => '',
+    49 => '¼',
+    50 => '༭¼',
+    51 => 'ص',
+    52 => 'ɾ',
+    53 => '¼ʻ'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Ҫ֤',
+    2 => 'ܾȷĵ',
+    3 => 'Ч',
+    4 => 'û',
+    5 => '룺',
+    6 => 'ҳֻȨԱʹá<br>дȡ¼ͼ顣',
+    7 => ''
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Ȩ',
+    2 => 'ûȨȥ༭',
+    3 => '༭',
+    4 => 'ȡʱִĴ¼ error.log ￴ϸ.',
+    5 => '',
+    6 => '',
+    7 => '',
+    8 => 'ȫˮƽ',
+    9 => '',
+    10 => '',
+    11 => '',
+    12 => '',
+    13 => 'ѡ',
+    14 => ' RDF  URL',
+    15 => ' RDF ',
+    16 => 'ѡ',
+    17 => '',
+    18 => 'дıݡ',
+    19 => 'Ա',
+    20 => '',
+    21 => 'ȫˮƽ',
+    22 => '',
+    23 => '',
+    24 => '',
+    25 => '޸Ļɾɴһµġ',
+    26 => '',
+    27 => 'PHP ',
+    28 => 'PHP ѡ',
+    29 => '',
+    30 => 'Լ PHP 뺯֡ΪִֹԵı룬PHP  "phpblock_" ʼ (e.g. phpblock_getweather)벻ҪѿյԲ "()" ںᡣᣬе PHP  /path/to/geeklog/system/lib-custom.php Էϵͳ',
+    31 => 'PHP U %s ڡ',
+    32 => 'Uȱλ',
+    33 => ' URL 뵽 .rdf ',
+    34 => ' PHP ͺ',
+    35 => '',
+    36 => 'ڰ',
+    37 => 'ʵ PHP ',
+    38 => 'ΪִֹԵı룬PHP  "phpblock_" ʼ (e.g. phpblock_getweather)',
+    39 => 'Ǳ',
+    40 => '',
+    41 => '',
+    42 => 'ڱϵͳԤʹ',
+    43 => 'ֻҳ',
+    44 => 'ȡܾ',
+    45 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/block.php\">Ա</a>",
+    46 => '',
+    47 => 'Աҳ',
+    48 => '',
+    49 => ' (пոͱΨһ)',
+    50 => 'ļ URL',
+    51 => ' http://',
+    52 => 'ףļͼʾʾ',
+    53 => 'ʹЧ',
+    54 => '',
+    55 => 'ȡ',
+    56 => 'ɾ',
+    57 => '',
+    58 => '',
+    59 => 'ұ',
+    60 => '',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => '¼༭',
+    2 => 'Error',
+    3 => '¼',
+    4 => '¼ URL',
+    5 => '¼ʼ',
+    6 => '¼',
+    7 => '¼ص',
+    8 => '¼',
+    9 => '( http://)',
+    10 => 'ṩʱ䡢¼⡢¼',
+    11 => '¼Ա',
+    12 => '¼޸Ļɾ¼ɴһµġ',
+    13 => '¼',
+    14 => 'ʼ',
+    15 => '',
+    16 => 'ȡܾ',
+    17 => "ͼȡ¼ѱ¼<a href=\"{$_CONF['site_admin_url']}/event.php\">¼Ա</a>",
+    18 => '¼',
+    19 => 'Աҳ',
+    20 => '',
+    21 => 'ȡ',
+    22 => 'ɾ',
+    23 => 'Ŀʼ.',
+    24 => 'Ľ.',
+    25 => 'ڿʼǰ.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'ƪ',
+    2 => 'ƪ',
+    3 => 'ģʽ',
+    4 => 'ģʽ',
+    5 => '±༭',
+    6 => 'û',
+    7 => '',
+    8 => '',
+    9 => 'Ԥ',
+    10 => 'ȡ',
+    11 => 'ɾ',
+    12 => 'ID',
+    13 => '',
+    14 => '',
+    15 => '',
+    16 => '¼',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => '嵥',
+    23 => '±ſ޸Ļɾ±ɹۿ¿ɴһµġ',
+    24 => 'ѡûáһû',
+    25 => 'Error when saving story',
+    26 => 'Ԥ',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'ش',
+    31 => 'Ҫṩߡ¼飡',
+    32 => 'ͷ',
+    33 => 'ֻһͷ',
+    34 => 'ݸ',
+    35 => '',
+    36 => '',
+    37 => '',
+    38 => '෢',
+    39 => '',
+    40 => 'ȡܾ',
+    41 => "ͼȡѱ¼Ψģʽۿ¡<a href=\"{$_CONF['site_admin_url']}/story.php\">¹Ա</a>",
+    42 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/story.php\">¹Ա</a>",
+    43 => '',
+    44 => 'Աҳ',
+    45 => 'ȡȨ',
+    46 => '<b>עU</b>ڸĳɽǸǰƪ½ᱻ ζƪ² RDF ڣѰͳҳлᱻԡ',
+    47 => 'ͼ',
+    48 => 'ͼ',
+    49 => '',
+    50 => '',
+    51 => 'رʽ([imageX][imageX_right]  [imageX_left])ͼ X 㸽ͼıšעUֻʹ㸽ӵͼ㽫޷¡<BR><P><B>Ԥ</B>UԤµķǰ±ɲݸֱԤťֻûиͼʱԤť',
+    52 => 'ɾ',
+    53 => 'ûбʹáǰͼ¼С',
+    54 => 'ͼδʹ',
+    55 => 'ʱ´Щٱ',
+    56 => 'ʾͼʾ',
+    57 => 'ûζСͼ',
+    58 => '¹',
+    59 => 'ѡ',
+    60 => '',
+    61 => 'Զ',
+    62 => 'Զɾ',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => '༭',
+    2 => '',
+    3 => '',
+    4 => 'ͼ',
+    5 => '(пո)',
+    6 => 'ɾͬʱɾйصº',
+    7 => 'Ҫṩź',
+    8 => 'Ա',
+    9 => '޸Ļɾɴһµġ㽫Ĵȡ',
+    10 => '',
+    11 => ' / ҳ',
+    12 => 'ȡܾ',
+    13 => "ͼȡѱ¼<a href=\"{$_CONF['site_admin_url']}/topic.php\">Ա</a>.",
+    14 => '򷽷',
+    15 => 'ĸ',
+    16 => 'Ԥ',
+    17 => '',
+    18 => 'Աҳ',
+    19 => '',
+    20 => 'ȡ',
+    21 => 'ɾ',
+    22 => 'Ԥ',
+    23 => 'ôΪ¸Ԥ',
+    24 => '(*)',
+    25 => 'ļĿ',
+    26 => 'ôĿļĬĿֻ׼һĿ',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'û༭',
+    2 => 'û',
+    3 => 'û',
+    4 => 'ȫ',
+    5 => '',
+    6 => 'ȫ',
+    7 => 'ʵַ',
+    8 => 'ҳ',
+    9 => '(пո)',
+    10 => 'Ҫṩûȫȫ͵ʵַ',
+    11 => 'ûԱ',
+    12 => 'û޸Ļɾûɴһµġı벿ݵûʵַȫ (e.g.*son* or *.edu) 򵥵Ѱҡ',
+    13 => 'ȫ',
+    14 => 'Ǽ',
+    15 => 'û',
+    16 => 'Աҳ',
+    17 => '',
+    18 => 'ȡ',
+    19 => 'ɾ',
+    20 => '',
+    21 => 'ûѾ',
+    22 => '',
+    23 => '',
+    24 => 'û',
+    25 => 'һιû Geeklog 뵵һ tab ֵָλ˳ǩUȫûʵַÿһûյһԵʼ͵롣ÿһһûûЩҪ⣬ҲҪֶҵ㵵',
+    26 => 'Ѱ',
+    27 => 'Χ',
+    28 => '򹳿ɾͼƬ',
+    29 => '·',
+    30 => '',
+    31 => 'û',
+    32 => 'ɡ %d %d ʧ',
+    33 => 'ݽ',
+    34 => 'Uָص',
+    35 => 'һε',
+    36 => '(δ)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => '׼',
+    2 => 'ɾ',
+    3 => '༭',
+    4 => 'Ҫ',
+    10 => '',
+    11 => 'ʼ',
+    12 => 'URL',
+    13 => '',
+    14 => '',
+    15 => '',
+    16 => 'û',
+    17 => 'ȫ',
+    18 => 'ʼ',
+    34 => 'Ϳ',
+    35 => 'ѵݽ',
+    36 => 'ѵݽ',
+    37 => 'ѵݽ¼',
+    38 => 'ݽ',
+    39 => 'ʱûеݽĶ',
+    40 => 'û'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sunday',
+    2 => 'Monday',
+    3 => 'Tuesday',
+    4 => 'Wednesday',
+    5 => 'Thursday',
+    6 => 'Friday',
+    7 => 'Saturday',
+    8 => '¼',
+    9 => 'Geeklog ¼',
+    10 => '¼',
+    11 => '',
+    12 => 'ҵ',
+    13 => 'һ',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => 'ʮ',
+    23 => 'ʮһ',
+    24 => 'ʮ',
+    25 => 'ص',
+    26 => '',
+    27 => '',
+    28 => 'U',
+    29 => '',
+    30 => 'ɾ¼',
+    31 => '',
+    32 => '¼',
+    33 => '',
+    34 => 'ʱ',
+    35 => 'Ѹ',
+    36 => 'ݽ',
+    37 => 'Ǹվṩ',
+    38 => '¼༭',
+    39 => '',
+    40 => '',
+    41 => ''
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} ʼʽ",
+    2 => 'ļ',
+    3 => 'ظ',
+    4 => '',
+    5 => '',
+    6 => 'ռ˩U',
+    7 => 'û',
+    8 => 'Ա',
+    9 => 'ѡ',
+    10 => 'HTML',
+    11 => 'еѶϢ',
+    12 => '',
+    13 => '',
+    14 => 'û趨',
+    15 => '󣬵͵U',
+    16 => 'ѶϢѷ͵U',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>ż</a>",
+    18 => 'ռ',
+    19 => 'עUϣѶϢվеĳԱСѡλѡ Logged-in Users group',
+    20 => "ѷ <successcount> ѶϢ <failcount> ܷ͡͵ϸ档粻뿴ϸڣ<a href=\"{$_CONF['site_admin_url']}/mail.php\">ѶϢ</a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">عԱҳ</a>",
+    21 => 'ʧ',
+    22 => 'ɹ ',
+    23 => 'ȫɹ ',
+    24 => 'ȫʧ',
+    25 => '-- ѡС --',
+    26 => 'дбϵλѡһС顣'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'װϵͳ ҪرСġ òҪװκ㲻˽Ĳ',
+    2 => 'װ',
+    3 => 'װ',
+    4 => '',
+    5 => '嵥',
+    6 => 'UѾװ',
+    7 => '밲װĲѾڣȰɾٰװ',
+    8 => 'ͨУ顣',
+    9 => 'Ҫһ°汾 Geeklog. <a href="http://www.geeklog.net">Geeklog</a>һʺϵİ汾',
+    10 => '<br><b>ûаװĲ</b><br><br>',
+    11 => '޸Ļɾ²ơʾϸݺߵվװİ汾ʹӴİ汾Գ֪˲ǷӦø¡Ҫװѯ˵ļ',
+    12 => 'plugineditor() Ҳ',
+    13 => '༭',
+    14 => '²',
+    15 => 'Աҳ',
+    16 => '',
+    17 => '汾',
+    18 => 'Geeklog 汾',
+    19 => 'ʹЧ',
+    20 => '',
+    21 => '',
+    22 => 'װ',
+    23 => '',
+    24 => 'ȡ',
+    25 => 'ɾ',
+    26 => '',
+    27 => 'ҳ',
+    28 => 'ѰװĲ汾',
+    29 => 'Geeklog 汾',
+    30 => 'ɾ',
+    31 => '϶ҪɾɾйļϺϽṹ϶ģٵеɾť',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => '汾',
+    34 => '',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => '',
+    2 => '',
+    3 => 'ɾ',
+    4 => 'ȡ',
+    10 => 'ϼ',
+    11 => '',
+    12 => 'ҳ',
+    13 => 'Ҫ޸Ļɾһ, һϵ. Ҫµ, ϵ.',
+    14 => '',
+    15 => '',
+    16 => 'ļ',
+    17 => 'ʽ',
+    18 => 'һθ',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '<i>()</i>',
+    23 => '',
+    24 => '༭',
+    25 => '',
+    26 => '޶',
+    27 => 'Ŀ',
+    28 => '(0 = , 1 = , other = ޶ڴ.)',
+    29 => '˵',
+    30 => 'һθ',
+    31 => 'ַ',
+    32 => '',
+    33 => '',
+    34 => 'Ŀ',
+    35 => 'Сʱ',
+    36 => 'ѡ',
+    37 => 'һװ˵Ĳϼ.һҪѡǷҪһϵͳ.',
+    38 => ': ȱϢ',
+    39 => ', ˵, ļ.',
+    40 => 'ĿĿСʱĿ.',
+    41 => '',
+    42 => '¼',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "ѵ뵽ĵ䣬ʼеָʾлʹ {$_CONF['site_name']}",
+    2 => "лݽµ {$_CONF['site_name']} ֻҪԱĺ˶ԣ½ǵĸҳϡ",
+    3 => "лݽᵽ {$_CONF['site_name']} ֻҪԱĺ˶ԣὫǵĸҳϡ",
+    4 => "лݽ¼ {$_CONF['site_name']} ֻҪԱĺ˶ԣ¼ǵ<a href={$_CONF['site_url']}/calendar.php></a>ϡ",
+    5 => 'ʻ趨ѱˡ',
+    6 => 'ĸ趨ѱˡ',
+    7 => '۽趨ѱˡ',
+    8 => '˳',
+    9 => 'ѱˡ',
+    10 => 'ѱɾˡ',
+    11 => 'ѱˡ',
+    12 => 'ѱɾˡ',
+    13 => 'ѱˡ',
+    14 => 'صѱɾˡ',
+    15 => 'ѱˡ',
+    16 => 'ѱɾˡ',
+    17 => '¼ѱˡ',
+    18 => '¼ѱɾˡ',
+    19 => 'ͶƱѱˡ',
+    20 => 'ͶƱѱɾˡ',
+    21 => 'ûѱˡ',
+    22 => 'ûѱɾˡ',
+    23 => '¼ʱȱ¼š',
+    24 => '¼ӵС',
+    25 => 'Ҫſɿĸ',
+    26 => '¼ѴƳ',
+    27 => 'Ϣѷ͡',
+    28 => 'ѱˡ',
+    29 => 'Ǹվṩ',
+    30 => 'ȡܾ',
+    31 => 'Ǹ㲻ܽ¹ҳעͼѱ¼',
+    32 => 'Ǹ㲻ܽҳעͼѱ¼',
+    33 => 'Ǹ㲻ܽҳעͼѱ¼',
+    34 => 'Ǹ㲻ܽҳעͼѱ¼',
+    35 => 'Ǹ㲻ܽ¼ҳעͼѱ¼',
+    36 => 'Ǹ㲻ܽͶƱҳעͼѱ¼',
+    37 => 'Ǹ㲻ܽûҳעͼѱ¼',
+    38 => 'Ǹ㲻ܽ Plug-in ҳעͼѱ¼',
+    39 => 'Ǹ㲻ܽʹҳעͼѱ¼',
+    40 => 'ϵͳѶϢ',
+    41 => 'Ǹ㲻ִܽ滻ҳעͼѱ¼',
+    42 => 'ִѱˡ',
+    43 => 'ִѱɾˡ',
+    44 => 'ѱװˡ',
+    45 => 'ѱɾˡ',
+    46 => 'Ǹ㲻ܽϿⱸݳʽעͼѱ¼',
+    47 => 'ֻ *nix ҵϵͳ *nixĻѱˡҵϵͳ WindowsҪֶѰļΪ adodb _ *.php ĵǳȥ',
+    48 => "лΪ {$_CONF['site_name']} ĻԱֻҪԱĺ˶ԣǻĵǼǵĵС",
+    49 => 'Сѱˡ',
+    50 => 'Сѱɾˡ',
+    51 => 'ûáѡһ',
+    52 => 'ĵŵַЧ',
+    53 => 'ѱܡ.',
+    54 => 'ҪԹҪ',
+    55 => 'Ѿһšմŵ˵趨롣',
+    56 => '㹩ĵŵַбûʹá',
+    57 => 'ûѾɹɾˡ',
+    58 => 'ѳɹı.',
+    59 => 'ѳɹɾ.',
+    60 => 'Ѿ³ɹ',
+    61 => ' %s: ֪Ϣռλ',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'ȡ',
+    'ownerroot' => '/Root',
+    'group' => 'С',
+    'readonly' => 'Ψ',
+    'accessrights' => 'ȡȨ',
+    'owner' => '',
+    'grantgrouplabel' => '֮С༭Ȩ',
+    'permmsg' => 'עUԱָע͵ûָзע߻ûеû',
+    'securitygroups' => 'ȫС',
+    'editrootmsg' => "ʹûԱ㲻ܱ༭ root ûܱ༭еû root ûעͼǷر༭ root ûĶѱ¼ص<a href=\"{$_CONF['site_admin_url']}/user.php\">ûҳ</a>ȥ",
+    'securitygroupsmsg' => 'ѡλû춵С顣',
+    'groupeditor' => 'С༭',
+    'description' => '',
+    'name' => '',
+    'rights' => 'Ȩ',
+    'missingfields' => 'ȱλ',
+    'missingfieldsmsg' => 'ṩСֺ',
+    'groupmanager' => 'СԱ',
+    'newgroupmsg' => 'С޸ĻɾСɴһµġעС鲻ܱɾ',
+    'groupname' => '',
+    'coregroup' => 'С',
+    'yes' => '',
+    'no' => '',
+    'corerightsdescr' => "СȨ޲ܱ༭ΪǸ {$_CONF['site_name']} ĺС顣СȨ嵥(Ψ)",
+    'groupmsg' => 'ȫСվеȼƶȵġС鵽һС齫õȨޡ뾡СеȥСҪرȨޣµ"Ȩ"ѡҪСӵȥֻҪԱߵѡд򹳡',
+    'coregroupmsg' => "ΪǸ {$_CONF['site_name']} ĺС飬СȨ޲ܱ༭С嵥(Ψ)",
+    'rightsdescr' => 'СȨ޿С鱾СµȨûммȨСммֱӰȨ޸С顣',
+    'lock' => 'ס',
+    'members' => 'Ա',
+    'anonymous' => '',
+    'permissions' => 'Ȩ',
+    'permissionskey' => 'R = Ψ E = ༭б༭ȨΨȨ',
+    'edit' => '༭',
+    'none' => 'û',
+    'accessdenied' => 'ȡܾ',
+    'storydenialmsg' => "δ׼㲻Թۿ¡ǿΪ㲢 {$_CONF['site_name']} ĻԱ<a href=users.php?mode=new>ΪԱ</a>",
+    'eventdenialmsg' => "δ׼㲻Թۿ¼ǿΪ㲢 {$_CONF['site_name']} ĻԱ<a href=users.php?mode=new>ΪԱ</a>",
+    'nogroupsforcoregroup' => 'С鲻κС',
+    'grouphasnorights' => ' СûйȨ',
+    'newgroup' => 'С',
+    'adminhome' => 'Աҳ',
+    'save' => '',
+    'cancel' => 'ȡ',
+    'delete' => 'ɾ',
+    'canteditroot' => 'Ϊ㲻 Root С飬 Root С޸ıܾˡϵͳԱϵ',
+    'listusers' => 'гû',
+    'listthem' => 'г',
+    'usersingroup' => ' "%s" Сû',
+    'usergroupadmin' => 'ûС',
+    'add' => '',
+    'remove' => '',
+    'availmembers' => 'õĳԱ',
+    'groupmembers' => 'СԱ',
+    'canteditgroup' => 'Ҫ޸ĴС, ҪʱСĳԱ. ΪǴ, ϵͳԱ.',
+    'cantlistgroup' => 'ҪСĻԱǴСĻԱΪǴϵͳԱ',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'ʮ',
+    'do_backup' => '',
+    'backup_successful' => 'Ͽⱸɡ',
+    'db_explanation' => 'Ҫµ Geeklog ݣµİť',
+    'not_found' => "ȷ· mysqldump ʽִС<br><strong>\$_DB_mysqldump_path</strong> config.php.<br>ڱΪU<var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'ʧܩU 0 С',
+    'path_not_found' => "{$_CONF['backup_path']} ڻĿ¼",
+    'no_access' => "UĿ¼ {$_CONF['backup_path']} ܴȡ",
+    'backup_file' => 'ݵ',
+    'size' => 'С',
+    'bytes' => 'λԪ',
+    'total_number' => 'ܱݴ: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'ҳ',
+    2 => '',
+    3 => 'Ͷ',
+    4 => '',
+    5 => 'ͶƱ',
+    6 => '',
+    7 => 'վͳ',
+    8 => '˻',
+    9 => '',
+    10 => 'Ѱ',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 ',
+    2 => 'ףҵ˵Ҳ<b>%s</b>.',
+    3 => "<p>ܱǸҪļڡ<a href=\"{$_CONF['site_url']}\">ҳ</a><a href=\"{$_CONF['site_url']}/search.php\">ҳ</a>ܷʲᡣ"
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Ҫ',
+    2 => 'ǸҪſɴȡ',
+    3 => '',
+    4 => 'û'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF 汾ѱֹ',
+    2 => 'ṩļûгʵݡļյ޷϶ύļ html ʽļд xHTML ı׼עָӵ html ļҲ޷ȷʵݡļύĽ 0 bytes ѱɾ϶ļӦ˳ĳʵݣٴύ',
+    3 => '֪PDF ļ',
+    4 => 'ûṩҳϻҪµر PDF ߡΪõҳǴ ϵͳԱҪȻµıر PDF',
+    5 => 'װļ',
+    6 => 'ļװʱȴ',
+    7 => 'һµİťȻѡ \'save target...\' or \'save link location...\' ļһ',
+    8 => 'õ HTMLDocƵ·д󣬻ϵͳ޷ִд˵վԱ',
+    9 => 'PDF ',
+    10 => 'ر PDF ߡὫκ URL ת PDF 汾ע⣬Щҳȷı⹤ߴɹ HTMLDoc PDF ߵ֮ĴҪվĹԱ',
+    11 => 'URL',
+    12 => ' PDF!',
+    13 => '˷ PHP ò׼ fopen()  URL ϡ ϵͳԱ޸  php.ini Ȼ趨 allow_url_fopen  On',
+    14 => 'Ҫ PDF ڻڷǷȡһ'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/chinese_simplified_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/chinese_simplified_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/chinese_simplified_utf-8.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/chinese_simplified_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,1273 +1,1517 @@
-<?php
-
-###############################################################################
-# chinese_simplified_utf-8.php
-#
-# Last Modified: 2004-10-26
-# Version: 1.3.10
-#
-# This is the Chinese Simplified (UTF-8) language set for GeekLog 1.3.10
-#
-# Copyright (C) 2003 Samuel M. Stone
-# sam@stonemicro.com
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-###############################################################################
-
-$LANG_CHARSET = 'UTF-8';
-
-###############################################################################
-# Array Format:
-# $LANGXX[YY]:  $LANG - variable name
-#               XX    - file id number
-#               YY    - phrase id number
-###############################################################################
-
-###############################################################################
-# USER PHRASES - These are file phrases used in end user scripts
-###############################################################################
-
-###############################################################################
-# lib-common.php
-
-$LANG01 = array(
-    1 => '作者︰',
-    2 => '读整文',
-    3 => '个评论',
-    4 => '编辑',
-    5 => '投票',
-    6 => '结果',
-    7 => '投票结果',
-    8 => '投票',
-    9 => '管理者功能︰',
-    10 => '提交物',
-    11 => '文章',
-    12 => '组件',
-    13 => '主题',
-    14 => '连结',
-    15 => '事件',
-    16 => '投票',
-    17 => '用户',
-    18 => 'SQL 质问',
-    19 => '退出',
-    20 => '用户讯息︰',
-    21 => '用户名',
-    22 => '用户识别号',
-    23 => '安全等级',
-    24 => '匿名',
-    25 => '回复',
-    26 => '以下评论只属张贴者个人观点。',
-    27 => '最近发表的',
-    28 => '删除',
-    29 => '没有评论。',
-    30 => '旧的文章',
-    31 => '允许的 HTML 标记:',
-    32 => '错误，无效的用户名',
-    33 => '错误，不能写系统日志;',
-    34 => '错误',
-    35 => '退出',
-    36 => '于',
-    37 => '没有文章',
-    38 => '内容辛迪加',
-    39 => '使新',
-    40 => '你的服务器的 <tt>php.ini</tt> 里设定为 <tt>register_globals = Off</tt>. 可是此软件需要将 <tt>register_globals</tt> 设定成 <strong>on</strong>. 所以在你继续以前，必须将它设定为<strong>on</strong>，然后重新开机.',
-    41 => '客人',
-    42 => '作者:',
-    43 => '回复这个',
-    44 => '父母',
-    45 => 'MySQL 错误号码',
-    46 => 'MySQL 错误讯息',
-    47 => '用户功能',
-    48 => '帐户讯息',
-    49 => '风格选择',
-    50 => '错误的 SQL statement',
-    51 => '帮助',
-    52 => '新',
-    53 => '管理者首页',
-    54 => '不能打开文件。',
-    55 => '错处',
-    56 => '投票',
-    57 => '密码',
-    58 => '登入',
-    59 => "没有帐户？<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登记</a>",
-    60 => '发表评论',
-    61 => '新增帐户',
-    62 => '字',
-    63 => '评论设定',
-    64 => '把文章电邮给朋友',
-    65 => '观看可列印的版本',
-    66 => '我的日历',
-    67 => '欢迎来到',
-    68 => '首页',
-    69 => '联络',
-    70 => '搜寻',
-    71 => '投稿',
-    72 => '网路资源',
-    73 => '投票中心',
-    74 => '日历',
-    75 => '进阶搜索',
-    76 => '本站统计数据',
-    77 => '插件',
-    78 => '即将发生的事',
-    79 => '新鲜的东西',
-    80 => '个新文章(',
-    81 => '新的文章(',
-    82 => ' 小时内)',
-    83 => '评论',
-    84 => '连结',
-    85 => '最近四十八小时',
-    86 => '没有新的评论',
-    87 => '最近两个星期',
-    88 => '没有新的连结',
-    89 => '没有事发生',
-    90 => '首页',
-    91 => '载入这页用了',
-    92 => '秒',
-    93 => '版权',
-    94 => '此网站所有的商标和版权属于他们各自的所有者.',
-    95 => '动力于',
-    96 => '小组',
-    97 => '字词单',
-    98 => '插件',
-    99 => '文章',
-    100 => '没有新的文章',
-    101 => '你的事件',
-    102 => '本站的事件',
-    103 => '资料库备份',
-    104 => '由',
-    105 => '寄给用户',
-    106 => '观看',
-    107 => 'GL 版本测试',
-    108 => '清除缓冲贮存区',
-    109 => '报告滥用',
-    110 => '报告此滥登文给网站管理员',
-    111 => '看PDF 版本',
-    112 => '登记用户',
-    113 => '使用说明'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG02 = array(
-    1 => '事件日历',
-    2 => '抱歉，没有事件。',
-    3 => '时',
-    4 => '地',
-    5 => '事',
-    6 => '新增事件',
-    7 => '即将发生的事',
-    8 => '在将这事加进你的日历之後，你可点击 "我的日历" 来观看',
-    9 => '加进我的日历',
-    10 => '从我的日历中去除',
-    11 => "把这事加进 {$_USER['username']} 的日历",
-    12 => '事件',
-    13 => '开始',
-    14 => '结束',
-    15 => '回到日历'
-);
-
-###############################################################################
-# comment.php
-
-$LANG03 = array(
-    1 => '发表评论',
-    2 => '发表方式',
-    3 => '退出',
-    4 => '新增帐户',
-    5 => '用户名',
-    6 => '本站需要登入才可发表评论，请登入。如果你没有帐户，请使用下面的表格登记。',
-    7 => '你最後发表的评论是在 ',
-    8 => " 秒之前。本站限定至少 {$_CONF['commentspeedlimit']} 秒後才可再发表评论",
-    9 => '评论',
-    10 => '送出报告',
-    11 => '发表评论',
-    12 => '请填写标题注评论栏',
-    13 => '供你参考',
-    14 => '预览',
-    15 => '报告这篇滥登文',
-    16 => '标题',
-    17 => '错误',
-    18 => '重要的东西',
-    19 => '请尽量不要离题。',
-    20 => '尽可能回复别人的评论，而不是开新的评论。',
-    21 => '为避免重复，发表评论之前请先读别人所写的。',
-    22 => '请尽量用简洁的标题。',
-    23 => '我们不会公开你的电邮地址。',
-    24 => '匿名用户',
-    25 => '你肯定想要报告此滥登文给网站管理员否?',
-    26 => '%s 报告以下滥登的评论:',
-    27 => '滥用报告'
-);
-
-###############################################################################
-# users.php
-
-$LANG04 = array(
-    1 => '用户概况',
-    2 => '用户名',
-    3 => '全名',
-    4 => '密码',
-    5 => '电子邮件',
-    6 => '首页',
-    7 => '小传',
-    8 => 'PGP 钥匙',
-    9 => '保存设定',
-    10 => '给用户的最後十个评论',
-    11 => '没有评论',
-    12 => '用户设定',
-    13 => '每夜电邮文摘',
-    14 => '这是个随机的密码，请尽快更改。要更改密码请先登入系统，然後点击帐户讯息。',
-    15 => "你在 {$_CONF['site_name']} 的帐户已建立了。请使用以下讯息登入系统并保留这邮件作日後参考。",
-    16 => '你的帐户讯息',
-    17 => '帐户并不存在',
-    18 => '你提供的不是一个有效的的电邮',
-    19 => '用户名或电邮已经存在',
-    20 => '提供的不是一个有效的的电邮',
-    21 => '错误',
-    22 => "登记用 {$_CONF['site_name']} ！",
-    23 => "在 {$_CONF['site_name']} 登记的用户可享有的会员好处。他们可以用自己的名字发表评论和存取本站的资源。请注意本站<b><i>绝不会</i></b>公开用户的电邮。",
-    24 => '你的密码将被送到你输入的电邮信箱',
-    25 => '忘记了你的密码吗？',
-    26 => '请你输入的用户名和点击电邮密码，我们会发送一个新的密码到你的电邮信箱。',
-    27 => '现在就登记！',
-    28 => '电邮密码',
-    29 => '退出时',
-    30 => '登入时',
-    31 => '需要登入才可用',
-    32 => '署名',
-    33 => '绝不会公开',
-    34 => '这是你的真名',
-    35 => '要改变请输入密码',
-    36 => '开始是 http://',
-    37 => '将会附加在你发表的评论上',
-    38 => '你的简介',
-    39 => '你的公共 PGP 钥匙',
-    40 => '没有主题图示',
-    41 => '愿意主持',
-    42 => '日期格式',
-    43 => '文章限度',
-    44 => '没有组件',
-    45 => '显示设定',
-    46 => '不包括的',
-    47 => '新组件配置为',
-    48 => '主题',
-    49 => '文章里没有图像',
-    50 => '不要打钩如果你不感兴趣',
-    51 => '只是新文章',
-    52 => '预设值是',
-    53 => '每晚接收当日的文章',
-    54 => '打钩如果你不看这些主题或作者。',
-    55 => '如果你没有选择，这意味你要用预设的组件。如果你选择组件，所有预设的箱将被忽略。预设的东西会用粗笔画显示。',
-    56 => '作者',
-    57 => '显示方式',
-    58 => '排序方式',
-    59 => '评论限制(个)',
-    60 => '可显示你的评论吗？',
-    61 => '最新或最旧的先？',
-    62 => '预设是100',
-    63 => '密码已被发送，你会很快收到的。',
-    64 => '评论设定',
-    65 => '请尝试再登入',
-    66 => "你可能打错了，请尝试再登入。你是否<a href=\"{$_CONF['site_url']}/users.php?mode=new\">新用户</a>？",
-    67 => '成员自',
-    68 => '记住我为',
-    69 => '在登入以後，我们应该记住你多久？',
-    70 => "定做 {$_CONF['site_name']} 的布局和内容",
-    71 => "一个 {$_CONF['site_name']} 的主要特点是你可以定做自己的布局和内容，但是你必须是本站的会员。<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登记</a>。如果你已经是登记，请使用左边的区域登入。",
-    72 => '题材',
-    73 => '语言',
-    74 => '改变本站外表',
-    75 => '主题已电邮给',
-    76 => '请只选择你感兴趣的主题，因为所有当日新张贴的文章将会电邮到你的信箱。',
-    77 => '相片',
-    78 => '你自己的图片',
-    79 => '要删除图片，在这里打钩',
-    80 => '登入',
-    81 => '发送电子邮件',
-    82 => '用户最近发表的十个文章为',
-    83 => '用户发表统计',
-    84 => '文章总数︰',
-    85 => '评论总数︰',
-    86 => '寻找所有发表过的文章︰',
-    87 => '你的登入名',
-    88 => "有人(也许是你)要了新密码 \"%s\" 于 {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n若你真的要这样作, 请你点击以下联结:\n\n",
-    89 => "你若不想要这样作, 请忽视这信息。这项事就将会被抛弃，而你的密码就保持原有.\n\n",
-    90 => '你可在下面输入一个新的密码。请注意你的旧密码任然有效直到你将此表提交。',
-    91 => '设定新密码',
-    92 => '输入新密码',
-    93 => '你在 %d 秒钟前刚要了一个新密码. 此站规定最少要 %d 秒钟以后才可再次要求新密码。',
-    94 => '将用户 \'%s\' 删除',
-    95 => '单据下面的 \'删除用户\' 便将你在我们资料库里的用户。请注意，你以其用户所登载过的文章和评论不会删除，可是会以无名作者的身份显示。',
-    96 => '删除用户',
-    97 => '确定用户删除',
-    98 => '你肯定要删除你的用户吗? 其后你就不在能使用此站,除非你重新设定新用户. 若你肯定的话请再次单据下面的 “删除用户”.',
-    99 => '隐私选项于',
-    100 => '管理员来信',
-    101 => '准许管理员来信',
-    102 => '用户来信',
-    103 => '准许其他用户来信',
-    104 => '显示联机状况',
-    105 => '让在“谁在联机”组件里显示',
-    106 => '位置',
-    107 => '显示在你的公开简介'
-);
-
-###############################################################################
-# index.php
-
-$LANG05 = array(
-    1 => '没有新闻可显示',
-    2 => '没有新文章可显示。',
-    3 => '这也许是真的没有新主题或是你的 %s 设定得太过限制性。',
-    4 => '今天头条',
-    5 => '下页',
-    6 => '上页',
-    7 => '第一',
-    8 => '最终'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => '网路资源',
-    2 => '没有资源可显示',
-    3 => '加一连结'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => '投票保存了',
-    2 => '你的投票已被保存了',
-    3 => '投票',
-    4 => '系统中的投票',
-    5 => '投票',
-    6 => '看其他投票问题'
-);
-
-###############################################################################
-# profiles.php
-
-$LANG08 = array(
-    1 => '发送电子邮件时发生错误。请再尝试。',
-    2 => '电邮已送出。',
-    3 => '请确定你在回复栏有一个可用的电子邮件地址。',
-    4 => '请填写你的名字、回复栏、主题和内容',
-    5 => '错误：没有这用户。',
-    6 => '发生错误。',
-    7 => '用户资料',
-    8 => '用户名',
-    9 => '用户名的 URL',
-    10 => '发送邮件到',
-    11 => '你的名字：',
-    12 => '回复到：',
-    13 => '主题：',
-    14 => '内容：',
-    15 => 'HTML 不会被翻译。',
-    16 => '发送邮件',
-    17 => '把文章电邮给朋友',
-    18 => '收件人名字',
-    19 => '收件人电邮',
-    20 => '寄件人名字',
-    21 => '寄件人电邮',
-    22 => '所有栏都要填写',
-    23 => "这电子邮件是由 %s (%s) 寄给你的，他认为你也许对这篇在 {$_CONF['site_url']} 的文章感兴趣。这不是垃圾邮件(SPAM)，你的电邮地址也不会被纪录。",
-    24 => '关於这个文章的评论在',
-    25 => '为帮助我们防止系统被滥用，你必须登入。',
-    26 => '这个表格允许你送电子邮件到你选择的用户中。请填写所有的栏位。',
-    27 => '短信',
-    28 => '%s 写道：',
-    29 => "来自於 {$_CONF['site_name']} 的每日文摘，给予：",
-    30 => ' 每日的时事通讯，给予：',
-    31 => '标题',
-    32 => '日期',
-    33 => '完整的文章在：',
-    34 => '电邮结束',
-    35 => '对不起，此用户不愿意收电信.'
-);
-
-###############################################################################
-# search.php
-
-$LANG09 = array(
-    1 => '进阶搜寻',
-    2 => '关键词',
-    3 => '主题',
-    4 => '所有',
-    5 => '类型',
-    6 => '文章',
-    7 => '评论',
-    8 => '作者',
-    9 => '所有',
-    10 => '搜寻',
-    11 => '搜寻结果',
-    12 => '相配',
-    13 => '搜寻结果：没有相配的',
-    14 => '没有你寻找的东西︰',
-    15 => '请再尝试',
-    16 => '主题',
-    17 => '日期',
-    18 => '作者',
-    19 => "搜寻整个 {$_CONF['site_name']} 的新旧文章资料库",
-    20 => '日期',
-    21 => '到',
-    22 => '(日期格式 年-月-日 YYYY-MM-DD)',
-    23 => '采样数',
-    24 => '找到',
-    25 => '个相配在',
-    26 => '个项目中，共用了',
-    27 => '秒',
-    28 => '没有你所寻找的文章或评论',
-    29 => '文章和评论的结果',
-    30 => '没有你所寻找的连结',
-    31 => '没有你所寻找的插件',
-    32 => '事件',
-    33 => 'URL',
-    34 => '地点',
-    35 => '所有日子',
-    36 => '没有你所寻找的事件',
-    37 => '事件的结果',
-    38 => '连结的结果',
-    39 => '连结',
-    40 => '事件',
-    41 => '搜寻的关键词最少要有三个字。',
-    42 => '请使用 YYYY-MM-DD (年-月-日) 日期格式。',
-    43 => '整个短语',
-    44 => '所有字词',
-    45 => '其中任何字词',
-    46 => '以下',
-    47 => '以上',
-    48 => '作者',
-    49 => '日期',
-    50 => '采样数',
-    51 => '联结',
-    52 => '位置',
-    53 => '文章结果',
-    54 => '评论结果',
-    55 => '句子',
-    56 => '和',
-    57 => '或'
-);
-
-###############################################################################
-# stats.php
-
-$LANG10 = array(
-    1 => '本站统计数据',
-    2 => '系统点击总数',
-    3 => '文章(评论)总数',
-    4 => '投票(获得投票)总数',
-    5 => '连结(点击)总数',
-    6 => '事件总数',
-    7 => '最多观看的十个文章',
-    8 => '文章标题',
-    9 => '观看',
-    10 => '看来本站没有文章或是没人观看过本站的文章。',
-    11 => '最多评论的十个文章',
-    12 => '评论',
-    13 => '看来本站没有文章或是没人评论过本站的文章。',
-    14 => '最多人投票的十个选举',
-    15 => '投票标题',
-    16 => '投票',
-    17 => '看来本站没有投票或是没人投过票。',
-    18 => '最多人点击的十个连结',
-    19 => '连结',
-    20 => '点击',
-    21 => '看来本站没有连结或是没人点击过本站的连结。',
-    22 => '最多人寄出的十个文章',
-    23 => '电邮',
-    24 => '看来没人寄出过本站的文章'
-);
-
-###############################################################################
-# article.php
-
-$LANG11 = array(
-    1 => '有什麽是相关的',
-    2 => '寄文章给朋友',
-    3 => '可印的文章格式',
-    4 => '文章选项',
-    5 => 'PDF 文章版本'
-);
-
-###############################################################################
-# submit.php
-
-$LANG12 = array(
-    1 => '你需要登入才可发表 %s ',
-    2 => '登入',
-    3 => '新用户',
-    4 => '发表一件事',
-    5 => '发表一个连结',
-    6 => '发表一个文章',
-    7 => '你需要登入',
-    8 => '发表',
-    9 => '在本站发表东西时请跟随以下建议...<ul><li>填写所有的栏<li>提供完全和准确的讯息<li>再三检查那些 URLs</ul>',
-    10 => '标题',
-    11 => '连结',
-    12 => '开始日期',
-    13 => '结束日期',
-    14 => '地点',
-    15 => '描述',
-    16 => '如果是其他，请指定',
-    17 => '类别',
-    18 => '其他',
-    19 => '读这先',
-    20 => '错误：缺少类别',
-    21 => '当选择"其他"请提供一个类别名',
-    22 => '错误：缺少栏位',
-    23 => '请填写所有的栏位',
-    24 => '你发表的已被保存了',
-    25 => '你的 %s 已被保存了',
-    26 => '限速',
-    27 => '用户名',
-    28 => '主题',
-    29 => '文章',
-    30 => '你最後发表的是',
-    31 => " 秒之前。本站限定至少 {$_CONF['speedlimit']} 秒後才可再发表",
-    32 => '预览',
-    33 => '文章 预览',
-    34 => '退出',
-    35 => '不准许 HTML 标记',
-    36 => '发表模式',
-    37 => "加事件到 {$_CONF['site_name']} 会将你的事件加到主日历中，其他的用户可随意地把它加进自己的个人日历。请<b>不要</b>把你的个人事件譬如生日和周年纪念加进去。<br><br>只要管理员批准你的事件它将出现在主日历上。",
-    38 => '加事件到',
-    39 => '主日历',
-    40 => '个人日历',
-    41 => '结束时间',
-    42 => '开始时间',
-    43 => '整日的事件',
-    44 => '地址 1',
-    45 => '地址 2',
-    46 => '城市/市镇',
-    47 => '州',
-    48 => '邮政编码',
-    49 => '事件类型',
-    50 => '编辑事件类型',
-    51 => '地点',
-    52 => '删除',
-    53 => '新加帐户'
-);
-
-###############################################################################
-# ADMIN PHRASES - These are file phrases used in admin scripts
-###############################################################################
-
-###############################################################################
-# admin/auth.inc.php
-
-$LANG20 = array(
-    1 => '要求认证',
-    2 => '拒绝！不正确的登入资料',
-    3 => '无效的密码',
-    4 => '用户名：',
-    5 => '密码：',
-    6 => '这页只供授权人员使用。<br>所有存取将被记录和检查。',
-    7 => '登入'
-);
-
-###############################################################################
-# admin/block.php
-
-$LANG21 = array(
-    1 => '权力不足',
-    2 => '你没有权去编辑这个组件。',
-    3 => '组件编辑器',
-    4 => '读取此文流时发现错误，请在你的错误记录档案 error.log 里看细节.',
-    5 => '组件标题',
-    6 => '主题',
-    7 => '所有',
-    8 => '组件安全水平',
-    9 => '组件次序',
-    10 => '组件类型',
-    11 => '入口组件',
-    12 => '正常组件',
-    13 => '入口组件选项',
-    14 => '文流 RDF 的 URL',
-    15 => '最後的文流 RDF 更新',
-    16 => '正常组件选项',
-    17 => '组件内容',
-    18 => '请填写组件的标题和内容。',
-    19 => '组件管理员',
-    20 => '组件标题',
-    21 => '组件安全水平',
-    22 => '组件类型',
-    23 => '组件次序',
-    24 => '组件主题',
-    25 => '点击下面的组件可修改或删除它，点击上面的新组件可创造一个新的。',
-    26 => '版面组件',
-    27 => 'PHP 组件',
-    28 => 'PHP 组件选项',
-    29 => '组件函数',
-    30 => '如果你想用自己的 PHP 函数组件，请在上面输入函数的名字。为防止执行任性的编码，PHP 组件函数名必须以 "phpblock_" 作开始 (e.g. phpblock_getweather)。请不要把空的圆括号 "()" 放在函数後。最後，建议你把所有的 PHP 组件放在 /path/to/geeklog/system/lib-custom.php 里以方便系统升级。',
-    31 => 'PHP 组件错误︰函数 %s 并不存在。',
-    32 => '错误︰缺少栏位。',
-    33 => '在入口组件你必须把 URL 输入到 .rdf 档案',
-    34 => '在 PHP 组件你必须输入主题和函数',
-    35 => '在正常组件你必须输入主题和内容',
-    36 => '在版面组件你必须输入内容',
-    37 => '不适当的 PHP 组件函数名',
-    38 => '为防止执行任性的编码，PHP 组件函数名必须以 "phpblock_" 作开始 (e.g. phpblock_getweather)。',
-    39 => '放在那边',
-    40 => '左',
-    41 => '右',
-    42 => '在本系统的预设组件你必须输入组件标题和次序',
-    43 => '只可是首页',
-    44 => '存取被拒绝',
-    45 => "企图存取不允许的组件已被记录。请<a href=\"{$_CONF['site_admin_url']}/block.php\">反回组件管理员昼面</a>。",
-    46 => '新组件',
-    47 => '管理员首页',
-    48 => '组件名',
-    49 => ' (不可有空隔和必须是唯一的)',
-    50 => '求助文件的 URL',
-    51 => '包括 http://',
-    52 => '如果这里留白，组件的求助文件图示将不被显示',
-    53 => '使有效',
-    54 => '保存',
-    55 => '取消',
-    56 => '删除',
-    57 => '下移组件',
-    58 => '上移组件',
-    59 => '移组件到右边',
-    60 => '移组件到左边'
-);
-
-###############################################################################
-# admin/event.php
-
-$LANG22 = array(
-    1 => '事件编辑器',
-    2 => 'Error',
-    3 => '事件标题',
-    4 => '事件 URL',
-    5 => '事件开始日期',
-    6 => '事件结束日期',
-    7 => '事件地点',
-    8 => '事件描述',
-    9 => '(包括 http://)',
-    10 => '你必须提供日期时间、事件主题、与事件描述！',
-    11 => '事件管理员',
-    12 => '点击下面的事件可修改或删除它，点击上面的新事件可创造一个新的。',
-    13 => '事件标题',
-    14 => '开始日期',
-    15 => '结束日期',
-    16 => '存取被拒绝',
-    17 => "企图存取不允许的事件已被记录。请<a href=\"{$_CONF['site_admin_url']}/event.php\">反回事件管理员昼面</a>。",
-    18 => '新事件',
-    19 => '管理员首页',
-    20 => '保存',
-    21 => '取消',
-    22 => '删除',
-    23 => '错误的开始日期.',
-    24 => '错误的结束日期.',
-    25 => '结束日期在开始日期前.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => '连结编辑器',
-    2 => '',
-    3 => '连结标题',
-    4 => '连结 URL',
-    5 => '类别',
-    6 => '(包括 http://)',
-    7 => '其他',
-    8 => '连结被击次数',
-    9 => '连结描述',
-    10 => '你需要提供连结标题、 URL 和描述！',
-    11 => '连结管理员',
-    12 => '点击下面的连结可修改或删除它，点击上面的新连结可创造一个新的。',
-    13 => '连结标题',
-    14 => '连结类别',
-    15 => '连结 URL',
-    16 => '存取被拒绝',
-    17 => "企图存取不允许的连结已被记录。请<a href=\"{$_CONF['site_admin_url']}/link.php\">反回连结管理员昼面</a>。",
-    18 => '新连结',
-    19 => '管理员首页',
-    20 => '如果是其他，请指定',
-    21 => '保存',
-    22 => '取消',
-    23 => '删除'
-);
-
-###############################################################################
-# admin/story.php
-
-$LANG24 = array(
-    1 => '上篇文章',
-    2 => '下篇文章',
-    3 => '模式',
-    4 => '发表模式',
-    5 => '文章编辑器',
-    6 => '没有文章',
-    7 => '作者',
-    8 => '保存',
-    9 => '预览',
-    10 => '取消',
-    11 => '删除',
-    12 => 'ID',
-    13 => '标题',
-    14 => '主题',
-    15 => '日期',
-    16 => '文章简介',
-    17 => '文章内容',
-    18 => '点击次数',
-    19 => '评论',
-    20 => '',
-    21 => '',
-    22 => '文章清单',
-    23 => '点击下面的文章编号可修改或删除它，点击下面的文章标题可观看它，点击上面的新文章可创造一个新的。',
-    24 => '你选的用户名以有人在用。请用另一个用户名。',
-    25 => '',
-    26 => '文章预览',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => '上载错误',
-    31 => '你需要提供作者、标题和文章简介！',
-    32 => '头条的',
-    33 => '只可有一个头条文章',
-    34 => '草稿',
-    35 => '是',
-    36 => '否',
-    37 => '更多来自於',
-    38 => '更多发表於',
-    39 => '电邮',
-    40 => '存取被拒绝',
-    41 => "企图存取不允许的文章已被记录。你可以以唯读模式观看下面文章。看完後请<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理员昼面</a>。",
-    42 => "企图存取不允许的文章已被记录。请<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理员昼面</a>。",
-    43 => '新文章',
-    44 => '管理员首页',
-    45 => '存取权',
-    46 => '<b>注意︰</b>如果你把日期改成将来，在那个日期前这篇文章将不会被发表。并且 意味着这篇文章不会包括在你的 RDF 标题内，在搜寻和统计页中会被忽略。',
-    47 => '图像',
-    48 => '图像',
-    49 => '右',
-    50 => '左',
-    51 => '请用特别格式的文字([imageX]、[imageX_right] 或 [imageX_left])来插入图像， X 是你附加图像的编号。注意︰你只可使用你附加的图像否则你将无法保存你的文章。<BR><P><B>预览</B>︰最佳预览文章的方法是把文章保存成草稿而不是直击预览按钮。只有没有附加图像时才用预览按钮。',
-    52 => '删除',
-    53 => '没有被使用。保存前，你必须把这个图像包含在文章简介或文章内容中。',
-    54 => '附加图像未被使用',
-    55 => '保存你的文章时发生以下错误。请改正这些错误再保存',
-    56 => '显示主题图示',
-    57 => '看没味缩小的图像',
-    58 => '文章管理',
-    59 => '选项',
-    60 => '已启动',
-    61 => '自动保存',
-    62 => '自动删除'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => '模式',
-    2 => '请输入一个问题和最少一个答案.',
-    3 => '投票发起日',
-    4 => '投票 %s 被保存了',
-    5 => '编辑投票',
-    6 => '投票编号',
-    7 => '(不可有空隔)',
-    8 => '出现在首页上',
-    9 => '问题',
-    10 => '答案 / 投票',
-    11 => '取得投票 (%s) 答案时发生错误。',
-    12 => '取得投票 (%s) 问题时发生错误。',
-    13 => '新加投票',
-    14 => '保存',
-    15 => '取消',
-    16 => '删除',
-    17 => '请输入一个投票 ID',
-    18 => '投票清单',
-    19 => '点击下面的投票可修改或删除它，点击上面的新投票可创造一个新的。',
-    20 => '投票者',
-    21 => '存取被拒绝',
-    22 => "企图存取不允许的投票已被记录。请<a href=\"{$_CONF['site_admin_url']}/poll.php\">反回投票管理员昼面</a>。",
-    23 => '新投票',
-    24 => '管理员首页',
-    25 => '是',
-    26 => '否'
-);
-
-###############################################################################
-# admin/topic.php
-
-$LANG27 = array(
-    1 => '主题编辑器',
-    2 => '主题编号',
-    3 => '主题名',
-    4 => '主题图像',
-    5 => '(不可有空隔)',
-    6 => '删除主题会同时删除所有有关的文章和组件！',
-    7 => '你需要提供主题编号和主题名！',
-    8 => '主题管理员',
-    9 => '点击下面的主题可修改或删除它，点击上面的新主题可创造一个新的。在括号里你将发现你的存取级别。',
-    10 => '排序次序',
-    11 => '文章 / 页',
-    12 => '存取被拒绝',
-    13 => "企图存取不允许的主题已被记录。请<a href=\"{$_CONF['site_admin_url']}/topic.php\">反回主题管理员昼面</a>.",
-    14 => '排序方法',
-    15 => '按字母排序',
-    16 => '预设是',
-    17 => '新主题',
-    18 => '管理员首页',
-    19 => '保存',
-    20 => '取消',
-    21 => '删除',
-    22 => '预设',
-    23 => '用此主题作为新稿的预设主体',
-    24 => '(*)',
-    25 => '保存文件的题目',
-    26 => '用此题目作保存文件的默认题目。只准许一个题目。'
-);
-
-###############################################################################
-# admin/user.php
-
-$LANG28 = array(
-    1 => '用户编辑器',
-    2 => '用户编号',
-    3 => '用户名',
-    4 => '全名',
-    5 => '密码',
-    6 => '安全级别',
-    7 => '电邮地址',
-    8 => '首页',
-    9 => '(不可有空隔)',
-    10 => '你需要提供用户名、全名、安全级别和电邮地址。',
-    11 => '用户管理员',
-    12 => '点击下面的用户可修改或删除它，点击上面的新用户可创造一个新的。在下面的表格中输入部份的用户名、电邮地址或全名 (e.g.*son* or *.edu) ，可做简单的寻找。',
-    13 => '安全级别',
-    14 => '登记日',
-    15 => '新用户',
-    16 => '管理员首页',
-    17 => '改密码',
-    18 => '取消',
-    19 => '删除',
-    20 => '保存',
-    21 => '用户名已经存在',
-    22 => '错误',
-    23 => '大量增加',
-    24 => '大量输入用户',
-    25 => '你可一次过输入大量的用户到 Geeklog 。输入档案必须是一个用 tab 分隔的文字档案，栏位的顺序是︰全名、用户名、电邮地址。每一个被输入的用户将会收到一个以电子邮件发送的随机密码。档案中每一行是一个用户。没遵守这些要求将造成问题，也许需要手动作业，请再三检查你档案！',
-    26 => '寻找',
-    27 => '结果范围',
-    28 => '在这里打钩可删除这张图片',
-    29 => '路径',
-    30 => '输入',
-    31 => '新用户',
-    32 => '处理完成。输入了 %d 个；%d 个失败',
-    33 => '递交',
-    34 => '错误︰你必须指定上载档案。',
-    35 => '最后一次登入',
-    36 => '(从未)'
-);
-
-###############################################################################
-# admin/moderation.php
-
-$LANG29 = array(
-    1 => '批准',
-    2 => '删除',
-    3 => '编辑',
-    4 => '简要描述',
-    10 => '标题',
-    11 => '开始日期',
-    12 => 'URL',
-    13 => '类别',
-    14 => '日期',
-    15 => '主题',
-    16 => '用户名',
-    17 => '全名',
-    18 => '电子邮件',
-    34 => '命令和控制',
-    35 => '已递交的文章',
-    36 => '已递交的连结',
-    37 => '已递交的事件',
-    38 => '递交',
-    39 => '此时没有递交的东西',
-    40 => '申请的用户'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG30 = array(
-    1 => 'Sunday',
-    2 => 'Monday',
-    3 => 'Tuesday',
-    4 => 'Wednesday',
-    5 => 'Thursday',
-    6 => 'Friday',
-    7 => 'Saturday',
-    8 => '新增事件',
-    9 => 'Geeklog 事件',
-    10 => '事件给',
-    11 => '主日历',
-    12 => '我的日历',
-    13 => '一月',
-    14 => '二月',
-    15 => '三月',
-    16 => '四月',
-    17 => '五月',
-    18 => '六月',
-    19 => '七月',
-    20 => '八月',
-    21 => '九月',
-    22 => '十月',
-    23 => '十一月',
-    24 => '十二月',
-    25 => '回到',
-    26 => '整日',
-    27 => '星期',
-    28 => '个人日历︰',
-    29 => '公众日历',
-    30 => '删除事件',
-    31 => '新增',
-    32 => '事件',
-    33 => '星期',
-    34 => '时间',
-    35 => '迅速增加',
-    36 => '递交',
-    37 => '抱歉，本站并不提供个人日历。',
-    38 => '个人事件编辑器',
-    39 => '日',
-    40 => '周',
-    41 => '月'
-);
-
-###############################################################################
-# admin/mail.php
-
-$LANG31 = array(
-    1 => "{$_CONF['site_name']} 邮件程式",
-    2 => '寄件人',
-    3 => '回复到',
-    4 => '主题',
-    5 => '内容',
-    6 => '收件人︰',
-    7 => '所有用户',
-    8 => '管理员',
-    9 => '选项',
-    10 => 'HTML',
-    11 => '迫切的讯息！',
-    12 => '发送',
-    13 => '重设',
-    14 => '忽略用户设定',
-    15 => '错误，当发送到︰',
-    16 => '讯息已发送到︰',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>发送其它信件</a>",
-    18 => '收件人',
-    19 => '注意︰如果你希望发送讯息到本站所有的成员，请在小组选择栏位中选择 Logged-in Users group。',
-    20 => "已发送 <successcount> 个讯息，有 <failcount> 个不能发送。发送的细节在下面。如不想看细节，你可<a href=\"{$_CONF['site_admin_url']}/mail.php\">发送其它讯息</a> 或 <a href=\"{$_CONF['site_admin_url']}/moderation.php\">反回管理员首页</a>。",
-    21 => '失败',
-    22 => '成功 ',
-    23 => '全部成功 ',
-    24 => '全部失败',
-    25 => '-- 请选小组 --',
-    26 => '请填写所有表格上的栏位和选择一个小组。'
-);
-
-###############################################################################
-# admin/plugins.php
-
-$LANG32 = array(
-    1 => '安装插件能损坏你的主系统。 必需要特别小心。 最好不要安装任何你不了解的插件。',
-    2 => '插件安装声明',
-    3 => '插件安装表格',
-    4 => '插件档案',
-    5 => '插件清单',
-    6 => '警告︰插件已经被安装过！',
-    7 => '你想安装的插件已经存在，请先把它删除再安装。',
-    8 => '插件不能通过兼容性校验。',
-    9 => '这插件要求一个更新版本的 Geeklog. 你可以升级你的<a href="http://www.geeklog.net">Geeklog</a>或是另找一个适合的版本。',
-    10 => '<br><b>没有安装的插件。</b><br><br>',
-    11 => '若想修改或删除插件，点击以下插件的名称。这会显示插件的详细内容和制作者的网站。安装的版本和从代码中来的版本都会显出来。这会让你知道此插件是否应该更新。若要安装或升级插件请咨询它的说明文件。',
-    12 => 'plugineditor() 找不到插件名',
-    13 => '插件编辑器',
-    14 => '新插件',
-    15 => '管理员首页',
-    16 => '插件名字',
-    17 => '插件版本',
-    18 => 'Geeklog 版本',
-    19 => '使有效',
-    20 => '是',
-    21 => '否',
-    22 => '安装',
-    23 => '保存',
-    24 => '取消',
-    25 => '删除',
-    26 => '插件名',
-    27 => '插件首页',
-    28 => '已安装的插件版本',
-    29 => 'Geeklog 版本',
-    30 => '删除插件？',
-    31 => '你肯定要删除这个插件吗？这麽会删除所有有关这插件的文件、资料和资料结构。如果你肯定的，请再点击下面表格中的删除钮。',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => '代码版本',
-    34 => '更新'
-);
-
-###############################################################################
-# admin/syndication.php
-
-$LANG33 = array(
-    1 => '建立文流',
-    2 => '保存',
-    3 => '删除',
-    4 => '取消',
-    10 => '内容辛迪加',
-    11 => '新文流',
-    12 => '管理处首页',
-    13 => '若要修改或删除一个文流, 再一下主题上点击. 若要建立新的文流, 点击以上的新文流.',
-    14 => '标题',
-    15 => '种类',
-    16 => '文件名',
-    17 => '格式',
-    18 => '最后一次更新',
-    19 => '启动',
-    20 => '是',
-    21 => '否',
-    22 => '<i>(无文流)</i>',
-    23 => '所有文章',
-    24 => '文流编辑',
-    25 => '文流标题',
-    26 => '限定',
-    27 => '条目长度',
-    28 => '(0 = 无内文, 1 = 整文, other = 限定于此字数.)',
-    29 => '说明',
-    30 => '最后一次更新',
-    31 => '字符集',
-    32 => '语言',
-    33 => '内容',
-    34 => '条目',
-    35 => '小时',
-    36 => '选择文流种类',
-    37 => '你有最少一个安装了的插件能配合内容辛迪加.一下你需要选择你是否要建立一个主系统文流或插件文流.',
-    38 => '错误: 缺少信息',
-    39 => '请填入文流标题, 说明, 和文件名.',
-    40 => '请输入条目数目或小时数目.',
-    41 => '连结',
-    42 => '事件'
-);
-
-###############################################################################
-# confirmation and error messages
-
-$MESSAGE = array(
-    1 => "我们已电邮了你的密码到你的电邮信箱，请跟随邮件中的指示。多谢使用 {$_CONF['site_name']}",
-    2 => "多谢递交你的文章到 {$_CONF['site_name']} 。只要经过我们员工的核对，你的文章将出现在我们的纲页上。",
-    3 => "多谢递交连结到 {$_CONF['site_name']} 。只要经过我们员工的核对，你的连结将出现在我们的纲页上。",
-    4 => "多谢递交事件到 {$_CONF['site_name']} 。只要经过我们员工的核对，你的事件将出现在我们的<a href={$_CONF['site_url']}/calendar.php>日历</a>上。",
-    5 => '你的帐户设定已被保存了。',
-    6 => '你的个人设定已被保存了。',
-    7 => '你的评论界面设定已被保存了。',
-    8 => '你已退出。',
-    9 => '你的文章已被保存了。',
-    10 => '你的文章已被删除了。',
-    11 => '你的组件已被保存了。',
-    12 => '你的组件已被删除了。',
-    13 => '你的主题已被保存了。',
-    14 => '你的主题和所有相关的文章已被删除了。',
-    15 => '你的连结已被保存了。',
-    16 => '你的连结已被删除了。',
-    17 => '你的事件已被保存了。',
-    18 => '你的事件已被删除了。',
-    19 => '你的投票已被保存了。',
-    20 => '你的投票已被删除了。',
-    21 => '用户已被保存了。',
-    22 => '用户已被删除了。',
-    23 => '增加事件到你的日历时发生错误，缺少了事件编号。',
-    24 => '事件已增加到你的日历中。',
-    25 => '你要登入才可开启你的个人日历。',
-    26 => '事件已从你的日历中移除。',
-    27 => '信息已发送。',
-    28 => '插件已被保存了。',
-    29 => '抱歉，本站并不提供个人日历。',
-    30 => '存取被拒绝',
-    31 => '抱歉，你不能进入文章管理的首页。请注意你的企图已被记录。',
-    32 => '抱歉，你不能进入主题管理的首页。请注意你的企图已被记录。',
-    33 => '抱歉，你不能进入组件管理的首页。请注意你的企图已被记录。',
-    34 => '抱歉，你不能进入连结管理的首页。请注意你的企图已被记录。',
-    35 => '抱歉，你不能进入事件管理的首页。请注意你的企图已被记录。',
-    36 => '抱歉，你不能进入投票管理的首页。请注意你的企图已被记录。',
-    37 => '抱歉，你不能进入用户管理的首页。请注意你的企图已被记录。',
-    38 => '抱歉，你不能进入 Plug-in 管理的首页。请注意你的企图已被记录。',
-    39 => '抱歉，你不能进入电邮管理的首页。请注意你的企图已被记录。',
-    40 => '系统讯息',
-    41 => '抱歉，你不能进入字词替换的首页。请注意你的企图已被记录。',
-    42 => '你的字词已被保存了。',
-    43 => '你的字词已被删除了。',
-    44 => '插件已被安装了。',
-    45 => '插件已被删除了。',
-    46 => '抱歉，你不能进入资料库备份程式。请注意你的企图已被记录。',
-    47 => '这只适用於 *nix 如果你的作业系统是 *nix，那麽你的缓冲器已被清除了。如果你的作业系统是 Windows，你要手动寻找文件命名为 adodb _ *.php 的档案并把它们除去。',
-    48 => "感谢你申请成为 {$_CONF['site_name']} 的会员。只要经过我们员工的核对，我们会把密码寄到你所登记的电邮中。",
-    49 => '你的小组已被保存了。',
-    50 => '小组已被删除了。',
-    51 => '此用户名已有人在用。请选择另一个。',
-    52 => '你给的电信地址不像是有效。',
-    53 => '你的新密码已被接受。现在以下请用你的新密码来登入.',
-    54 => '你要求新密码的期限以过。请在下面从新要求。',
-    55 => '已经给你寄了一封电信。请照此信的说明来设定新密码。',
-    56 => '你供给的电信地址已有别的用户在使用。',
-    57 => '你的用户已经成功地删除了。',
-    58 => '你的文流已成功的保存了.',
-    59 => '你的文流已成功的删除了.',
-    60 => '插件已经更新成功',
-    61 => '插件 %s: 不知名的信息占位符'
-);
-
-###############################################################################
-
-$LANG_ACCESS = array(
-    'access' => '存取',
-    'ownerroot' => '所有者/Root',
-    'group' => '小组',
-    'readonly' => '唯读',
-    'accessrights' => '存取权',
-    'owner' => '所有者',
-    'grantgrouplabel' => '给予之上小组编辑权利',
-    'permmsg' => '注意︰会员是指所有注册和登入的用户；而匿名是指所有非注册的浏览者或没有登入的用户。',
-    'securitygroups' => '安全小组',
-    'editrootmsg' => "即使你是用户管理员；但你不能编辑 root 用户。你能编辑所有的用户除了 root 用户。请注意所有企图非法地编辑 root 用户的动作已被记录。请回到<a href=\"{$_CONF['site_admin_url']}/user.php\">用户管理页</a>去。",
-    'securitygroupsmsg' => '选择这位用户属於的小组。',
-    'groupeditor' => '小组编辑器',
-    'description' => '描述',
-    'name' => '名字',
-    'rights' => '权限',
-    'missingfields' => '缺少栏位',
-    'missingfieldsmsg' => '你必须提供小组的名字和描述',
-    'groupmanager' => '小组管理员',
-    'newgroupmsg' => '点击下面的小组可修改或删除它，点击上面的新小组可创造一个新的。请注意所核心小组不能被删除。',
-    'groupname' => '组名',
-    'coregroup' => '核心小组',
-    'yes' => '是',
-    'no' => '否',
-    'corerightsdescr' => "这个小组的权限不能被编辑，因为这是个 {$_CONF['site_name']} 的核心小组。以下是这小组的权限清单(唯读的)。",
-    'groupmsg' => '安全小组在这纲站是有等级制度的。当增加这个小组到另一组别，这个小组将得到那组别的权限。请尽可能小组加下列的组别去。如果这小组需要特别的权限，你可以在以下的"权利"区域中挑选。要把小组加到组别去，你只需要在组别旁边的挑选盒打钩。',
-    'coregroupmsg' => "因为这是个 {$_CONF['site_name']} 的核心小组，这个小组的权限不能被编辑。以下是这小组的组别清单(唯读的)。",
-    'rightsdescr' => '小组的权限可以是来自於小组本身或是这小组所属的组别。以下的权限中如没有检验盒即代表这权限是来自於小组所属的组别；如有检验盒即代表你可以直接把权限给予这小组。',
-    'lock' => '锁住',
-    'members' => '成员',
-    'anonymous' => '匿名',
-    'permissions' => '权限',
-    'permissionskey' => 'R = 唯读， E = 编辑，有编辑权即有唯读权',
-    'edit' => '编辑',
-    'none' => '没有',
-    'accessdenied' => '存取被拒绝',
-    'storydenialmsg' => "因未被批准，你不可以观看这个文章。这是可能是因为你并不是 {$_CONF['site_name']} 的会员。请<a href=users.php?mode=new>成为会员</a>。",
-    'eventdenialmsg' => "因未被批准，你不可以观看这个事件。这是可能是因为你并不是 {$_CONF['site_name']} 的会员。请<a href=users.php?mode=new>成为会员</a>。",
-    'nogroupsforcoregroup' => '这小组不属於任何其它的小组',
-    'grouphasnorights' => ' 这小组没有管理权。',
-    'newgroup' => '新小组',
-    'adminhome' => '管理员首页',
-    'save' => '保存',
-    'cancel' => '取消',
-    'delete' => '删除',
-    'canteditroot' => '因为你不属于 Root 小组，所以你对 Root 小组的修改被拒绝了。如有问题请与系统管理员联系。',
-    'listusers' => '列出用户',
-    'listthem' => '列出',
-    'usersingroup' => '属于 "%s" 小组的用户',
-    'usergroupadmin' => '用户小组管理',
-    'add' => '加入',
-    'remove' => '免除',
-    'availmembers' => '可用的成员',
-    'groupmembers' => '小组成员',
-    'canteditgroup' => '若要修改此小组, 你必要时这个小组的成员. 若你认为这是错误, 请你联络系统管理员.',
-    'cantlistgroup' => '要看此小组的会员，你必须是此小组的会员。你若认为这是错误，请联络系统管理员。'
-);
-
-###############################################################################
-# admin/database.php
-
-$LANG_DB_BACKUP = array(
-    'last_ten_backups' => '最後十个备份',
-    'do_backup' => '做备份',
-    'backup_successful' => '资料库备份完成。',
-    'no_backups' => '没有备份',
-    'db_explanation' => '要做新的 Geeklog 备份，点击以下的按钮',
-    'not_found' => "不正确的路径或 mysqldump 程式不可执行。<br>检查<strong>$_DB_mysqldump_path</strong>定义在 config.php.<br>变数现在被定义为︰<var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => '备份失败︰档案是 0 大小',
-    'path_not_found' => "{$_CONF['backup_path']} 不存在或不是目录",
-    'no_access' => "错误︰目录 {$_CONF['backup_path']} ，不能存取。",
-    'backup_file' => '备份档案',
-    'size' => '大小',
-    'bytes' => '位元组',
-    'total_number' => '总备份次数: %d'
-);
-
-###############################################################################
-
-$LANG_BUTTONS = array(
-    1 => '首页',
-    2 => '联络',
-    3 => '投稿',
-    4 => '连结',
-    5 => '投票',
-    6 => '日历',
-    7 => '本站统计数据',
-    8 => '个人化',
-    9 => '搜索',
-    10 => '进阶搜寻'
-);
-
-###############################################################################
-# 404.php
-
-$LANG_404 = array(
-    1 => '404 错误',
-    2 => '咦，我到处都看过了但找不到<b>%s</b>.',
-    3 => "<p>很抱歉，但你要求的文件不存在。请检查<a href=\"{$_CONF['site_url']}\">主页</a>或<a href=\"{$_CONF['site_url']}/search.php\">搜索页</a>看看能发现什麽。"
-);
-
-###############################################################################
-# login form
-
-$LANG_LOGIN = array(
-    1 => '要求登入',
-    2 => '抱歉，要求登入才可存取这个区域。',
-    3 => '登入',
-    4 => '新用户'
-);
-
-###############################################################################
-# pdfgenerator.php
-
-$LANG_PDF = array(
-    1 => 'PDF 版本的作用已被禁止',
-    2 => '所提供的文件没有呈递。文件已收到，但是无法处理。请肯定你所提交的文件是 html 格式的文件写于 xHTML 的标准。请注意过分复杂的 html 文件也可能无法正确呈递。你的文件提交的结果是 0 bytes 而且已被删除。你若肯定你的文件应该顺利的呈递，其再次提交。',
-    3 => '不知名的PDF 文件制作错误。',
-    4 => "没提供页数资料或你要用以下的特别 PDF 制作工具。若你认为你所得到的这页是错误。 请联络系统管理员。要不然，你可用以下的表格来特别制作 PDF。",
-    5 => '正在装置你的文件。',
-    6 => '你的文件被装置时请等待。',
-    7 => '你可用右击以下的按钮，然后选 \'save target...\' or \'save link location...\' 来存续你的文件的一个拷贝。',
-    8 => "在配置档案里的 HTMLDoc二进制档案路径有错误，或此系统无法执行此档案。若此问题继续发生，请联络网站管理员。",
-    9 => 'PDF 制作器',
-    10 => "这是特别的 PDF 制作工具。它会将任何 URL 转换成 PDF 版本。请注意，有些网页不会正确的被这工具处理成功。这是 HTMLDoc PDF 制作工具的有限之处，而这样的错误不需要报告给此网站的管理员。",
-    11 => 'URL',
-    12 => '制作 PDF!',
-    13 => '此服务器的 PHP 配置不准许 fopen() 命令用在 URL 上。 系统管理员必须先修改  php.ini 档案，然后设定 allow_url_fopen 到 On',
-    14 => '你要求的 PDF 不存在或你在非法的入取一个档案。'
-);
-
+<?php
+
+###############################################################################
+# chinese_simplified_utf-8.php
+#
+# Last Modified: 2006-01-10
+# Version: 1.4.0
+#
+# This is the Chinese Simplified (UTF-8) language set for GeekLog 1.4.0
+#
+# Copyright (C) 2003 Samuel M. Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => '作者︰',
+    2 => '读整文',
+    3 => '个评论',
+    4 => '编辑',
+    5 => '投票',
+    6 => '结果',
+    7 => '投票结果',
+    8 => '投票',
+    9 => '管理者功能︰',
+    10 => '提交物',
+    11 => '文章',
+    12 => '组件',
+    13 => '主题',
+    14 => '连结',
+    15 => '事件',
+    16 => '投票',
+    17 => '用户',
+    18 => 'SQL 质问',
+    19 => '退出',
+    20 => '用户讯息︰',
+    21 => '用户名',
+    22 => '用户识别号',
+    23 => '安全等级',
+    24 => '匿名',
+    25 => '回复',
+    26 => '以下评论只属张贴者个人观点。',
+    27 => '最近发表的',
+    28 => '删除',
+    29 => '没有评论。',
+    30 => '旧的文章',
+    31 => '允许的 HTML 标记:',
+    32 => '错误，无效的用户名',
+    33 => '错误，不能写系统日志;',
+    34 => '错误',
+    35 => '退出',
+    36 => '于',
+    37 => '没有文章',
+    38 => '内容辛迪加',
+    39 => '使新',
+    40 => '你的服务器的 <tt>php.ini</tt> 里设定为 <tt>register_globals = Off</tt>. 可是此软件需要将 <tt>register_globals</tt> 设定成 <strong>on</strong>. 所以在你继续以前，必须将它设定为<strong>on</strong>，然后重新开机.',
+    41 => '客人',
+    42 => '作者:',
+    43 => '回复这个',
+    44 => '母体',
+    45 => 'MySQL 错误号码',
+    46 => 'MySQL 错误讯息',
+    47 => '用户功能',
+    48 => '帐户讯息',
+    49 => '风格选择',
+    50 => '错误的 SQL statement',
+    51 => '帮助',
+    52 => '新',
+    53 => '管理者首页',
+    54 => '不能打开文件。',
+    55 => '错处',
+    56 => '投票',
+    57 => '密码',
+    58 => '登入',
+    59 => "没有帐户？<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登记</a>",
+    60 => '发表评论',
+    61 => '新增帐户',
+    62 => '字',
+    63 => '评论设定',
+    64 => '把文章电邮给朋友',
+    65 => '观看可列印的版本',
+    66 => '我的日历',
+    67 => '欢迎来到',
+    68 => '首页',
+    69 => '联络',
+    70 => '搜寻',
+    71 => '投稿',
+    72 => '网路资源',
+    73 => '投票中心',
+    74 => '日历',
+    75 => '进阶搜索',
+    76 => '本站统计数据',
+    77 => '插件',
+    78 => '即将发生的事',
+    79 => '新鲜的东西',
+    80 => '个新文章(',
+    81 => '新的文章(',
+    82 => ' 小时内)',
+    83 => '评论',
+    84 => '连结',
+    85 => '最近四十八小时',
+    86 => '没有新的评论',
+    87 => '最近两个星期',
+    88 => '没有新的连结',
+    89 => '没有事发生',
+    90 => '首页',
+    91 => '载入这页用了',
+    92 => '秒',
+    93 => '版权',
+    94 => '此网站所有的商标和版权属于他们各自的所有者.',
+    95 => '动力于',
+    96 => '小组',
+    97 => '字词单',
+    98 => '插件',
+    99 => '文章',
+    100 => '没有新的文章',
+    101 => '你的事件',
+    102 => '本站的事件',
+    103 => '资料库备份',
+    104 => '由',
+    105 => '寄给用户',
+    106 => '采样数:',
+    107 => 'GL 版本测试',
+    108 => '清除缓冲贮存区',
+    109 => '报告滥用',
+    110 => '报告此滥登文给网站管理员',
+    111 => '看PDF 版本',
+    112 => '登记用户',
+    113 => '使用说明',
+    114 => '迹回',
+    115 => '没有新迹回的评论',
+    116 => '迹回',
+    117 => '目录',
+    118 => '请继续看下页',	
+    119 => "丢失了<a ref=\"{$_CONF['site_url']}/users.php?mode=getpassword\">密码</a>?",
+    120 => '永久联结此评论',	
+    121 => '评论 (%d)',
+    122 => '迹回 (%d)',	
+    123 => '准许用所有的HTML'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+
+    1 => '事件日历',
+    2 => '抱歉，没有事件。',
+    3 => '时',
+    4 => '地',
+    5 => '事',
+    6 => '新增事件',
+    7 => '即将发生的事',
+    8 => '在将这事加进你的日历之後，你可点击 "我的日历" 来观看',
+    9 => '加进我的日历',
+    10 => '从我的日历中去除',
+    11 => "把这事加进 {$_USER['username']} 的日历",
+    12 => '事件',
+    13 => '开始',
+    14 => '结束',
+    15 => '回到日历'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => '发表评论',
+    2 => '发表方式',
+    3 => '退出',
+    4 => '新增帐户',
+    5 => '用户名',
+    6 => '本站需要登入才可发表评论，请登入。如果你没有帐户，请使用下面的表格登记。',
+    7 => '你最後发表的评论是在 ',
+    8 => " 秒之前。本站限定至少 {$_CONF['commentspeedlimit']} 秒後才可再发表评论",
+    9 => '评论',
+    10 => '送出报告',
+    11 => '发表评论',
+    12 => '请填写标题注评论栏',
+    13 => '供你参考',
+
+    14 => '预览',
+    15 => '报告这篇滥登文',
+    16 => '标题',
+    17 => '错误',
+    18 => '重要的东西',
+    19 => '请尽量不要离题。',
+    20 => '尽可能回复别人的评论，而不是开新的评论。',
+    21 => '为避免重复，发表评论之前请先读别人所写的。',
+    22 => '请尽量用简洁的标题。',
+    23 => '我们不会公开你的电邮地址。',
+    24 => '匿名用户',
+    25 => '你肯定想要报告此滥登文给网站管理员否?',
+    26 => '%s 报告以下滥登的评论:',
+    27 => '滥用报告'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => '用户概况',
+    2 => '用户名',
+    3 => '全名',
+    4 => '密码',
+    5 => '电子邮件',
+    6 => '首页',
+    7 => '小传',
+    8 => 'PGP 钥匙',
+    9 => '保存设定',
+    10 => '给用户的最後十个评论',
+    11 => '没有评论',
+    12 => '用户设定',
+    13 => '每夜电邮文摘',
+    14 => '这是个随机的密码，请尽快更改。要更改密码请先登入系统，然後点击帐户讯息。',
+    15 => "你在 {$_CONF['site_name']} 的帐户已建立了。请使用以下讯息登入系统并保留这邮件作日後参考。",
+    16 => '你的帐户讯息',
+    17 => '帐户并不存在',
+    18 => '你提供的不是一个有效的的电邮',
+    19 => '用户名或电邮已经存在',
+    20 => '提供的不是一个有效的的电邮',
+    21 => '错误',
+    22 => "登记用 {$_CONF['site_name']} ！",
+    23 => "在 {$_CONF['site_name']} 登记的用户可享有的会员好处。他们可以用自己的名字发表评论和存取本站的资源。请注意本站<b><i>绝不会</i></b>公开用户的电邮。",
+    24 => '你的密码将被送到你输入的电邮信箱',
+    25 => '忘记了你的密码吗？',
+    26 => '请你输入的用户名和点击电邮密码，我们会发送一个新的密码到你的电邮信箱。',
+    27 => '现在就登记！',
+    28 => '电邮密码',
+    29 => '退出时',
+    30 => '登入时',
+    31 => '需要登入才可用',
+    32 => '署名',
+    33 => '绝不会公开',
+    34 => '这是你的真名',
+    35 => '要改变请输入密码',
+    36 => '开始是 http://',
+    37 => '将会附加在你发表的评论上',
+    38 => '你的简介',
+    39 => '你的公共 PGP 钥匙',
+    40 => '没有主题图示',
+    41 => '愿意主持',
+    42 => '日期格式',
+    43 => '文章限度',
+    44 => '没有组件',
+    45 => '显示设定',
+    46 => '不包括的',
+    47 => '新组件配置为',
+    48 => '主题',
+    49 => '文章里没有图像',
+    50 => '不要打钩如果你不感兴趣',
+    51 => '只是新文章',
+    52 => '预设值的是',
+    53 => '每晚接收当日的文章',
+    54 => '打钩如果你不看这些主题或作者。',
+    55 => '如果你没有选择，这意味你要用预设的组件。如果你选择组件，所有预设的箱将被忽略。预设的东西会用粗笔画显示。',
+    56 => '作者',
+    57 => '显示方式',
+    58 => '排序方式',
+    59 => '评论限制(个)',
+    60 => '可显示你的评论吗？',
+    61 => '最新或最旧的先？',
+    62 => '预设是100',
+    63 => '密码已被发送，你会很快收到的。',
+    64 => '评论设定',
+    65 => '请尝试再登入',
+    66 => "你可能打错了，请尝试再登入。你是否<a href=\"{$_CONF['site_url']}/users.php?mode=new\">新用户</a>？",
+    67 => '成员自',
+    68 => '记住我为',
+    69 => '在登入以後，我们应该记住你多久？',
+    70 => "定做 {$_CONF['site_name']} 的布局和内容",
+    71 => "一个 {$_CONF['site_name']} 的主要特点是你可以定做自己的布局和内容，但是你必须是本站的会员。<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登记</a>。如果你已经是登记，请使用左边的区域登入。",
+    72 => '题材',
+    73 => '语言',
+    74 => '改变本站外表',
+    75 => '主题已电邮给',
+    76 => '请只选择你感兴趣的主题，因为所有当日新张贴的文章将会电邮到你的信箱。',
+    77 => '相片',
+    78 => '你自己的图片',
+    79 => '要删除图片，在这里打钩',
+    80 => '登入',
+    81 => '发送电子邮件',
+    82 => '用户最近发表的十个文章为',
+    83 => '用户发表统计',
+    84 => '文章总数︰',
+    85 => '评论总数︰',
+    86 => '寻找所有发表过的文章︰',
+    87 => '你的登入名',
+    88 => "有人(也许是你)要了新密码 \"%s\" 于 {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n若你真的要这样作, 请你点击以下联结:\n\n",
+    89 => "你若不想要这样作, 请忽视这信息。这项事就将会被抛弃，而你的密码就保持原有.\n\n",
+    90 => '你可在下面输入一个新的密码。请注意你的旧密码任然有效直到你将此表提交。',
+    91 => '设定新密码',
+    92 => '输入新密码',
+    93 => '你在 %d 秒钟前刚要了一个新密码. 此站规定最少要 %d 秒钟以后才可再次要求新密码。',
+    94 => '将用户 \'%s\' 删除',
+    95 => '单据下面的 \'删除用户\' 便将你在我们资料库里的用户。请注意，你以其用户所登载过的文章和评论不会删除，可是会以无名作者的身份显示。',
+    96 => '删除用户',
+    97 => '确定用户删除',
+    98 => '你肯定要删除你的用户吗? 其后你就不在能使用此站,除非你重新设定新用户. 若你肯定的话请再次单据下面的 “删除用户”.',
+    99 => '隐私选项于',
+    100 => '管理员来信',
+    101 => '准许管理员来信',
+    102 => '用户来信',
+    103 => '准许其他用户来信',
+    104 => '显示联机状况',
+    105 => '让在“谁在联机”组件里显示',
+    106 => '位置',
+    107 => '显示在你的公开简介',
+    108 => '肯定新密码',
+    109 => '再次输入密码',
+    110 => '目前的密码',
+    111 => '请输入目前的密码',
+    112 => '你已超过准许的登入次数. 情稍候再努力.',
+    113 => '登入失败',
+    114 => '账户已被中止',
+    115 => '你的账户已被中止, 你不能继续登入. 请跟管理员联络.',
+    116 => '等待启动的账户',
+    117 => '你的账户现在等待管理员的启动. 在账户未批准以前, 你还不能登入.',
+    118 => "你的 {$_CONF['site_name']} 账户已被启动. 你可通过以下的url 用先前以电信寄给你的用户名 (<username>) 和密码来登入.",
+    119 => "你若已忘记了你的密码你可通过此 url 来要求一个新密码",
+    120 => '帐户已被启动',
+    121 => '服务',
+    122 => '对不起, 目前禁止新用户登记',
+    123 => "你是否 <a href=\"{$_CONF['site_url']}/users.php?mode=new\">新用户</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => '没有新闻可显示',
+    2 => '没有新文章可显示。',
+    3 => '这也许是真的没有新主题或是你的 %s 设定得太过限制性。',
+    4 => '今天头条',
+    5 => '下页',
+    6 => '上页',
+    7 => '第一',
+    8 => '最终'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => '发送电子邮件时发生错误。请再尝试。',
+    2 => '电邮已送出。',
+    3 => '请确定你在回复栏有一个可用的电子邮件地址。',
+    4 => '请填写你的名字、回复栏、主题和内容',
+    5 => '错误：没有这用户。',
+    6 => '发生错误。',
+    7 => '用户资料',
+    8 => '用户名',
+    9 => '用户名的 URL',
+    10 => '发送邮件到',
+    11 => '你的名字：',
+    12 => '回复到：',
+    13 => '主题：',
+    14 => '内容：',
+    15 => 'HTML 不会被翻译。',
+    16 => '发送邮件',
+    17 => '把文章电邮给朋友',
+    18 => '收件人名字',
+    19 => '收件人电邮',
+    20 => '寄件人名字',
+    21 => '寄件人电邮',
+    22 => '所有栏都要填写',
+    23 => "这电子邮件是由 %s (%s) 寄给你的，他认为你也许对这篇在 {$_CONF['site_url']} 的文章感兴趣。这不是垃圾邮件(SPAM)，你的电邮地址也不会被纪录。",
+    24 => '关於这个文章的评论在',
+    25 => '为帮助我们防止系统被滥用，你必须登入。',
+    26 => '这个表格允许你送电子邮件到你选择的用户中。请填写所有的栏位。',
+    27 => '短信',
+    28 => '%s 写道：',
+    29 => "来自於 {$_CONF['site_name']} 的每日文摘，给予：",
+    30 => ' 每日的时事通讯，给予：',
+    31 => '标题',
+    32 => '日期',
+    33 => '完整的文章在：',
+    34 => '电邮结束',
+    35 => '对不起，此用户不愿意收电信.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => '进阶搜寻',
+    2 => '关键词',
+    3 => '主题',
+    4 => '所有',
+    5 => '类型',
+    6 => '文章',
+    7 => '评论',
+    8 => '作者',
+    9 => '所有',
+    10 => '搜寻',
+    11 => '搜寻结果',
+    12 => '相配',
+    13 => '搜寻结果：没有相配的',
+    14 => '没有你寻找的东西︰',
+    15 => '请再尝试',
+    16 => '主题',
+    17 => '日期',
+    18 => '作者',
+    19 => "搜寻整个 {$_CONF['site_name']} 的新旧文章资料库",
+    20 => '日期',
+    21 => '到',
+    22 => '(日期格式 年-月-日 YYYY-MM-DD)',
+    23 => '采样数',
+    24 => '找到',
+    25 => '个相配在',
+    26 => '个项目中，共用了',
+    27 => '秒',
+    28 => '没有你所寻找的文章或评论',
+    29 => '文章和评论的结果',
+    30 => '没有你所寻找的连结',
+    31 => '没有你所寻找的插件',
+    32 => '事件',
+    33 => 'URL',
+    34 => '地点',
+    35 => '所有日子',
+    36 => '没有你所寻找的事件',
+    37 => '事件的结果',
+    38 => '连结的结果',
+    39 => '连结',
+    40 => '事件',
+    41 => '搜寻的关键词最少要有三个字。',
+    42 => '请使用 YYYY-MM-DD (年-月-日) 日期格式。',
+    43 => '整个短语',
+    44 => '所有字词',
+    45 => '其中任何字词',
+    46 => '以下',
+    47 => '以上',
+    48 => '作者',
+    49 => '日期',
+    50 => '采样数',
+    51 => '联结',
+    52 => '位置',
+    53 => '文章结果',
+    54 => '评论结果',
+    55 => '句子',
+    56 => '和',
+    57 => '或',
+    58 => '更多的结果 &gt;&gt;',
+    59 => '结果',
+    60 => '每页',
+    61 => '改进搜寻'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => '本站统计数据',
+    2 => '系统点击总数',
+    3 => '文章(评论)总数',
+    4 => '投票(获得投票)总数',
+    5 => '连结(点击)总数',
+    6 => '事件总数',
+    7 => '采样数最高的十个文章',
+    8 => '文章标题',
+    9 => '采样数',
+    10 => '看来本站没有文章或是没人观看过本站的文章。',
+    11 => '最多评论的十个文章',
+    12 => '评论',
+    13 => '看来本站没有文章或是没人评论过本站的文章。',
+    14 => '最多人投票的十个选举',
+    15 => '投票标题',
+    16 => '投票',
+    17 => '看来本站没有投票或是没人投过票。',
+    18 => '最多人点击的十个连结',
+    19 => '连结',
+    20 => '点击',
+    21 => '看来本站没有连结或是没人点击过本站的连结。',
+    22 => '最多人寄出的十个文章',
+    23 => '电邮',
+    24 => '看来没人寄出过本站的文章',
+    25 => '头十个迹回评论的文章',
+    26 => '找不到迹回评论.',
+    27 => '用户人数',
+    28 => '头十项事件',
+    29 => '事件',
+    30 => '采样数',
+    31 => '看来此站无事件, 或没有人曾点击过任何事件.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => '有什麽是相关的',
+    2 => '寄文章给朋友',
+    3 => '可印的文章格式',
+    4 => '文章选项',
+    5 => 'PDF 文章版本'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => '你需要登入才可发表 %s ',
+    2 => '登入',
+    3 => '新用户',
+    4 => '发表一件事',
+    5 => '发表一个连结',
+    6 => '发表一个文章',
+    7 => '你需要登入',
+    8 => '发表',
+    9 => '在本站发表东西时请跟随以下建议...<ul><li>填写所有的栏<li>提供完全和准确的讯息<li>再三检查那些 URLs</ul>',
+    10 => '标题',
+    11 => '连结',
+    12 => '开始日期',
+    13 => '结束日期',
+    14 => '地点',
+    15 => '描述',
+    16 => '如果是其他，请指定',
+    17 => '类别',
+    18 => '其他',
+    19 => '读这先',
+    20 => '错误：缺少类别',
+    21 => '当选择"其他"请提供一个类别名',
+    22 => '错误：缺少栏位',
+    23 => '请填写所有的栏位',
+    24 => '你发表的已被保存了',
+    25 => '你的 %s 已被保存了',
+    26 => '限速',
+    27 => '用户名',
+    28 => '主题',
+    29 => '文章',
+    30 => '你最後发表的是',
+    31 => " 秒之前。本站限定至少 {$_CONF['speedlimit']} 秒後才可再发表",
+    32 => '预览',
+    33 => '文章 预览',
+    34 => '退出',
+    35 => '不准许 HTML 标记',
+    36 => '发表模式',
+    37 => "加事件到 {$_CONF['site_name']} 会将你的事件加到主日历中，其他的用户可随意地把它加进自己的个人日历。请<b>不要</b>把你的个人事件譬如生日和周年纪念加进去。<br><br>只要管理员批准你的事件它将出现在主日历上。",
+    38 => '加事件到',
+    39 => '主日历',
+    40 => '个人日历',
+    41 => '结束时间',
+    42 => '开始时间',
+    43 => '整日的事件',
+    44 => '地址 1',
+    45 => '地址 2',
+    46 => '城市/市镇',
+    47 => '州',
+    48 => '邮政编码',
+    49 => '事件类型',
+    50 => '编辑事件类型',
+    51 => '地点',
+    52 => '删除',
+    53 => '新加帐户'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => '要求认证',
+    2 => '拒绝！不正确的登入资料',
+    3 => '无效的密码',
+    4 => '用户名：',
+    5 => '密码：',
+    6 => '这页只供授权人员使用。<br>所有存取将被记录和检查。',
+    7 => '登入'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => '权力不足',
+    2 => '你没有权去编辑这个组件。',
+    3 => '组件编辑器',
+    4 => '读取此文流时发现错误，请在你的错误记录档案 error.log 里看细节.',
+    5 => '组件标题',
+    6 => '主题',
+    7 => '所有',
+    8 => '组件安全水平',
+    9 => '组件次序',
+    10 => '组件类型',
+    11 => '入口组件',
+    12 => '正常组件',
+    13 => '入口组件选项',
+    14 => '文流 RDF 的 URL',
+    15 => '最後的文流 RDF 更新',
+    16 => '正常组件选项',
+    17 => '组件内容',
+    18 => '请填写组件的标题和内容。',
+    19 => '组件管理员',
+    20 => '组件标题',
+    21 => '组件安全水平',
+    22 => '组件类型',
+    23 => '组件次序',
+    24 => '组件主题',
+    25 => '点击下面的组件可修改或删除它，点击上面的新组件可创造一个新的。',
+    26 => '版面组件',
+    27 => 'PHP 组件',
+    28 => 'PHP 组件选项',
+    29 => '组件函数',
+    30 => '如果你想用自己的 PHP 函数组件，请在上面输入函数的名字。为防止执行任性的编码，PHP 组件函数名必须以 "phpblock_" 作开始 (e.g. phpblock_getweather)。请不要把空的圆括号 "()" 放在函数後。最後，建议你把所有的 PHP 组件放在 /path/to/geeklog/system/lib-custom.php 里以方便系统升级。',
+    31 => 'PHP 组件错误︰函数 %s 并不存在。',
+    32 => '错误︰缺少栏位。',
+    33 => '在入口组件你必须把 URL 输入到 .rdf 档案',
+    34 => '在 PHP 组件你必须输入主题和函数',
+    35 => '在正常组件你必须输入主题和内容',
+    36 => '在版面组件你必须输入内容',
+    37 => '不适当的 PHP 组件函数名',
+    38 => '为防止执行任性的编码，PHP 组件函数名必须以 "phpblock_" 作开始 (e.g. phpblock_getweather)。',
+    39 => '放在那边',
+    40 => '左',
+
+    41 => '右',
+    42 => '在本系统的预设组件你必须输入组件标题和次序',
+    43 => '只可是首页',
+    44 => '存取被拒绝',
+    45 => "企图存取不允许的组件已被记录。请<a href=\"{$_CONF['site_admin_url']}/block.php\">反回组件管理员昼面</a>。",
+    46 => '新组件',
+    47 => '管理员首页',
+    48 => '组件名',
+    49 => ' (不可有空隔和必须是唯一的)',
+    50 => '求助文件的 URL',
+    51 => '包括 http://',
+    52 => '如果这里留白，组件的求助文件图示将不被显示',
+    53 => '使有效',
+    54 => '保存',
+    55 => '取消',
+    56 => '删除',
+    57 => '下移组件',
+    58 => '上移组件',
+    59 => '移组件到右边',
+    60 => '移组件到左边',
+    61 => '无标题',
+    62 => '文章限制',
+    63 => '错误组件标题',
+    64 => '你的标题不能空白或有HTML!',
+    65 => '次序'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => '事件编辑器',
+    2 => 'Error',
+    3 => '事件标题',
+    4 => '事件 URL',
+    5 => '事件开始日期',
+    6 => '事件结束日期',
+    7 => '事件地点',
+    8 => '事件描述',
+    9 => '(包括 http://)',
+    10 => '你必须提供日期时间、事件主题、与事件描述！',
+    11 => '事件管理员',
+    12 => '点击下面的事件可修改或删除它，点击上面的新事件可创造一个新的。',
+    13 => '事件标题',
+    14 => '开始日期',
+    15 => '结束日期',
+    16 => '存取被拒绝',
+    17 => "企图存取不允许的事件已被记录。请<a href=\"{$_CONF['site_admin_url']}/event.php\">反回事件管理员昼面</a>。",
+    18 => '新事件',
+    19 => '管理员首页',
+    20 => '保存',
+    21 => '取消',
+    22 => '删除',
+    23 => '错误的开始日期.',
+    24 => '错误的结束日期.',
+    25 => '结束日期在开始日期前.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => '上篇文章',
+    2 => '下篇文章',
+    3 => '模式',
+    4 => '发表模式',
+    5 => '文章编辑器',
+    6 => '没有文章',
+    7 => '作者',
+    8 => '保存',
+    9 => '预览',
+    10 => '取消',
+    11 => '删除',
+    12 => 'ID',
+    13 => '标题',
+    14 => '主题',
+    15 => '日期',
+    16 => '文章简介',
+    17 => '文章内容',
+    18 => '点击次数',
+    19 => '评论',
+    20 => 'Ping',
+    21 => '传送 Ping',
+    22 => '文章清单',
+    23 => '点击下面的文章编号可修改或删除它，点击下面的文章标题可观看它，点击上面的新文章可创造一个新的。',
+    24 => '你选的用户名以有人在用。请用另一个用户名。',
+    25 => '存续文章时发生错误',
+    26 => '文章预览',
+    27 => '你若用 [unscaledX] 而不是[imageX], 图像将会以原来的尺寸插入.',
+    28 => '<p><b>预览</b>: 预览有图像的文章的最好方法是将它存为草稿。用预览按钮来预览没有图像的文章。',
+    29 => '迹回',
+    30 => '上载错误',
+    31 => '你需要提供作者、标题和文章简介！',
+    32 => '头条的',
+    33 => '只可有一个头条文章',
+    34 => '草稿',
+    35 => '是',
+    36 => '否',
+    37 => '更多来自於',
+    38 => '更多发表於',
+    39 => '电邮',
+    40 => '存取被拒绝',
+    41 => "企图存取不允许的文章已被记录。你可以以唯读模式观看下面文章。看完後请<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理员昼面</a>。",
+    42 => "企图存取不允许的文章已被记录。请<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理员昼面</a>。",
+    43 => '新文章',
+    44 => '管理员首页',
+    45 => '存取权',
+    46 => '<b>注意︰</b>如果你把日期改成将来，在那个日期前这篇文章将不会被发表。并且 意味着这篇文章不会包括在你的 RDF 标题内，在搜寻和统计页中会被忽略。',
+    47 => '图像',
+    48 => '图像',
+    49 => '右',
+    50 => '左',
+    51 => '请用特别格式的文字([imageX]、[imageX_right] 或 [imageX_left])来插入图像， X 是你附加图像的编号。注意︰你只可使用你附加的图像否则你将无法保存你的文章。<BR><P><B>预览</B>︰最佳预览文章的方法是把文章保存成草稿而不是直击预览按钮。只有没有附加图像时才用预览按钮。',
+    52 => '删除',
+    53 => '没有被使用。保存前，你必须把这个图像包含在文章简介或文章内容中。',
+    54 => '附加图像未被使用',
+    55 => '保存你的文章时发生以下错误。请改正这些错误再保存',
+    56 => '显示主题图示',
+    57 => '看没味缩小的图像',
+    58 => '有期文章管理',
+    59 => '选项',
+    60 => '定期',
+    61 => '过期后自动存档',
+    62 => '过期后自动删除',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => '扩大内容编辑范围',
+    68 => '缩小内容编辑范围',
+    69 => '登高日期',
+    70 => '工具列选择',
+    71 => '基本工具列',
+    72 => '普通工具列',
+    73 => '先进工具列',
+    74 => '先进II 工具列',
+    75 => '全部功能',
+    76 => '出版选项',
+    77 => '必须启动Javascript 来用高级的编辑器。此选项可再config.php 关掉。',
+    78 => '点击<a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">这里</a>来用预设值的编辑器',
+    79 => '预览',
+    80 => '编辑器',
+    81 => '出版选项',
+    82 => '图像处理',
+    83 => '有期文章管理',
+    84 => '权限',
+    85 => '完全显示'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => '主题编辑器',
+    2 => '主题编号',
+    3 => '主题名',
+    4 => '主题图像',
+    5 => '(不可有空隔)',
+    6 => '删除主题会同时删除所有有关的文章和组件！',
+    7 => '你需要提供主题编号和主题名！',
+    8 => '主题管理员',
+    9 => '点击下面的主题可修改或删除它，点击上面的新主题可创造一个新的。在括号里你将发现你的存取级别。',
+    10 => '排序次序',
+    11 => '文章 / 页',
+    12 => '存取被拒绝',
+    13 => "企图存取不允许的主题已被记录。请<a href=\"{$_CONF['site_admin_url']}/topic.php\">反回主题管理员昼面</a>.",
+    14 => '排序方法',
+    15 => '按字母排序',
+    16 => '预设是',
+    17 => '新主题',
+    18 => '管理员首页',
+    19 => '保存',
+    20 => '取消',
+    21 => '删除',
+    22 => '预设',
+    23 => '用此主题作为新稿的预设主体',
+    24 => '(*)',
+    25 => '保存文件的题目',
+    26 => '用此题目作保存文件的默认题目。只准许一个题目。',
+    27 => '或上载主题图像',
+    28 => '最大',
+    29 => '文件上载出了问题'
+);
+
+###############################################################################
+# admin/user.php
+
+
+$LANG28 = array(
+    1 => '用户编辑器',
+    2 => '用户编号',
+    3 => '用户名',
+    4 => '全名',
+    5 => '密码',
+    6 => '安全级别',
+    7 => '电邮地址',
+    8 => '首页',
+    9 => '(不可有空隔)',
+    10 => '你需要提供用户名、全名、安全级别和电邮地址。',
+    11 => '用户管理员',
+    12 => '点击下面的用户可修改或删除它，点击上面的新用户可创造一个新的。在下面的表格中输入部份的用户名、电邮地址或全名 (e.g.*son* or *.edu) ，可做简单的寻找。',
+    13 => '安全级别',
+    14 => '登记日',
+    15 => '新用户',
+    16 => '管理员首页',
+    17 => '改密码',
+    18 => '取消',
+    19 => '删除',
+    20 => '保存',
+    21 => '用户名已经存在',
+    22 => '错误',
+    23 => '大量增加',
+    24 => '大量输入用户',
+    25 => '你可一次过输入大量的用户到志乐。输入档案必须是一个用 tab 分隔的文字档案，栏位的顺序是︰全名、用户名、电邮地址。每一个被输入的用户将会收到一个以电子邮件发送的随机密码。档案中每一行是一个用户。没遵守这些要求将造成问题，也许需要手动作业，请再三检查你档案！',
+    26 => '寻找',
+    27 => '结果范围',
+    28 => '在这里打钩可删除这张图片',
+    29 => '路径',
+    30 => '输入',
+    31 => '新用户',
+    32 => '处理完成。输入了 %d 个；%d 个失败',
+    33 => '递交',
+    34 => '错误︰你必须指定上载档案。',
+    35 => '最后一次登入',
+    36 => '(从未)',
+    37 => 'UID',
+    38 => '小组目录',
+    39 => '密码 (再次)',
+    40 => '登记日期',
+    41 => '最后登入日期',
+    42 => '被禁止的',
+    43 => '等待启动',
+    44 => '等待准许',
+    45 => '有效的',
+    46 => '用户状态',
+    47 => '编辑',
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => '批准',
+    2 => '删除',
+    3 => '编辑',
+    4 => '简要描述',
+    10 => '标题',
+    11 => '开始日期',
+    12 => 'URL',
+    13 => '类别',
+    14 => '日期',
+    15 => '主题',
+    16 => '用户名',
+    17 => '全名',
+    18 => '电子邮件',
+    34 => '命令和控制',
+    35 => '已递交的文章',
+    36 => '已递交的连结',
+    37 => '已递交的事件',
+    38 => '递交',
+    39 => '此时没有递交的东西',
+    40 => '申请的用户'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sunday',
+    2 => 'Monday',
+    3 => 'Tuesday',
+    4 => 'Wednesday',
+    5 => 'Thursday',
+    6 => 'Friday',
+    7 => 'Saturday',
+    8 => '新增事件',
+    9 => '志乐事件',
+    10 => '事件给',
+    11 => '主日历',
+    12 => '我的日历',
+    13 => '一月',
+    14 => '二月',
+    15 => '三月',
+    16 => '四月',
+    17 => '五月',
+    18 => '六月',
+    19 => '七月',
+    20 => '八月',
+    21 => '九月',
+    22 => '十月',
+    23 => '十一月',
+    24 => '十二月',
+    25 => '回到',
+    26 => '整日',
+    27 => '星期',
+    28 => '个人日历︰',
+    29 => '公众日历',
+    30 => '删除事件',
+    31 => '新增',
+    32 => '事件',
+    33 => '星期',
+    34 => '时间',
+    35 => '迅速增加',
+    36 => '递交',
+    37 => '抱歉，本站并不提供个人日历。',
+    38 => '个人事件编辑器',
+    39 => '日',
+    40 => '周',
+    41 => '月'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} 邮件程式",
+    2 => '寄件人',
+    3 => '回复到',
+    4 => '主题',
+    5 => '内容',
+    6 => '收件人︰',
+    7 => '所有用户',
+    8 => '管理员',
+    9 => '选项',
+    10 => 'HTML',
+    11 => '迫切的讯息！',
+    12 => '发送',
+    13 => '重设',
+    14 => '忽略用户设定',
+    15 => '错误，当发送到︰',
+    16 => '讯息已发送到︰',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>发送其它信件</a>",
+    18 => '收件人',
+    19 => '注意︰如果你希望发送讯息到本站所有的成员，请在小组选择栏位中选择 Logged-in Users group。',
+    20 => "已发送 <successcount> 个讯息，有 <failcount> 个不能发送。发送的细节在下面。如不想看细节，你可<a href=\"{$_CONF['site_admin_url']}/mail.php\">发送其它讯息</a> 或 <a href=\"{$_CONF['site_admin_url']}/moderation.php\">反回管理员首页</a>。",
+    21 => '失败',
+    22 => '成功 ',
+    23 => '全部成功 ',
+    24 => '全部失败',
+    25 => '-- 请选小组 --',
+    26 => '请填写所有表格上的栏位和选择一个小组。'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => '安装插件能损坏你的主系统。 必需要特别小心。 最好不要安装任何你不了解的插件。',
+    2 => '插件安装声明',
+    3 => '插件安装表格',
+    4 => '插件档案',
+    5 => '插件清单',
+    6 => '警告︰插件已经被安装过！',
+    7 => '你想安装的插件已经存在，请先把它删除再安装。',
+    8 => '插件不能通过兼容性校验。',
+    9 => '这插件要求一个更新版本的志乐. 你可以升级你的<a href="http://www.geeklog.net">志乐</a>或是另找一个适合的版本。',
+    10 => '<br><b>没有安装的插件。</b><br><br>',
+    11 => '若想修改或删除插件，点击以下插件的名称。这会显示插件的详细内容和制作者的网站。安装的版本和从代码中来的版本都会显出来。这会让你知道此插件是否应该更新。若要安装或升级插件请咨询它的说明文件。',
+    12 => 'plugineditor() 找不到插件名',
+    13 => '插件编辑器',
+    14 => '新插件',
+    15 => '管理员首页',
+    16 => '插件名字',
+    17 => '插件版本',
+    18 => '志乐版本',
+    19 => '使有效',
+    20 => '是',
+    21 => '否',
+    22 => '安装',
+    23 => '保存',
+    24 => '取消',
+    25 => '删除',
+    26 => '插件名',
+    27 => '插件首页',
+    28 => '已安装的插件版本',
+    29 => '志乐版本',
+    30 => '删除插件？',
+    31 => '你肯定要删除这个插件吗？这麽会删除所有有关这插件的文件、资料和资料结构。如果你肯定的，请再点击下面表格中的删除钮。',
+    32 => '<p><b>错误：AutoLink 标签不对</b></p>',
+    33 => '代码版本',
+    34 => '更新',
+    35 => '编辑',
+    36 => '代码',
+    37 => '数据',
+    38 => '更新!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => '建立文流',
+    2 => '保存',
+    3 => '删除',
+    4 => '取消',
+    10 => '内容辛迪加',
+    11 => '新文流',
+    12 => '管理处首页',
+    13 => '若要修改或删除一个文流, 再一下主题上点击. 若要建立新的文流, 点击以上的新文流.',
+    14 => '标题',
+    15 => '种类',
+    16 => '文件名',
+    17 => '格式',
+    18 => '最后一次更新',
+    19 => '启动',
+    20 => '是',
+    21 => '否',
+    22 => '<i>(无文流)</i>',
+    23 => '所有文章',
+    24 => '文流编辑',
+    25 => '文流标题',
+    26 => '限定',
+    27 => '条目长度',
+    28 => '(0 = 无内文, 1 = 整文, other = 限定于此字数.)',
+    29 => '说明',
+    30 => '最后一次更新',
+    31 => '字符集',
+    32 => '语言',
+    33 => '内容',
+    34 => '条目',
+    35 => '小时',
+    36 => '选择文流种类',
+    37 => '你有最少一个安装了的插件能配合内容辛迪加.一下你需要选择你是否要建立一个主系统文流或插件文流.',
+    38 => '错误: 缺少信息',
+    39 => '请填入文流标题, 说明, 和文件名.',
+    40 => '请输入条目数目或小时数目.',
+    41 => '连结',
+    42 => '事件',
+    43 => '全部',
+    44 => '无',
+    45 => '题目内的标题联结',
+    46 => '限制结果',
+    47 => '搜寻',
+    48 => '编辑',
+    49 => '新闻 Feed 的标志',
+    50 => "跟网址有关 ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "我们已电邮了你的密码到你的电邮信箱，请跟随邮件中的指示。多谢使用 {$_CONF['site_name']}",
+    2 => "多谢递交你的文章到 {$_CONF['site_name']} 。只要经过我们员工的核对，你的文章将出现在我们的纲页上。",
+    3 => "多谢递交连结到 {$_CONF['site_name']} 。只要经过我们员工的核对，你的连结将出现在我们的纲页上。",
+    4 => "多谢递交事件到 {$_CONF['site_name']} 。只要经过我们员工的核对，你的事件将出现在我们的<a href={$_CONF['site_url']}/calendar.php>日历</a>上。",
+    5 => '你的帐户设定已被保存了。',
+    6 => '你的个人设定已被保存了。',
+    7 => '你的评论界面设定已被保存了。',
+    8 => '你已退出。',
+    9 => '你的文章已被保存了。',
+    10 => '你的文章已被删除了。',
+    11 => '你的组件已被保存了。',
+    12 => '你的组件已被删除了。',
+    13 => '你的主题已被保存了。',
+    14 => '你的主题和所有相关的文章已被删除了。',
+    15 => '你的连结已被保存了。',
+    16 => '你的连结已被删除了。',
+    17 => '你的事件已被保存了。',
+    18 => '你的事件已被删除了。',
+    19 => '你的投票已被保存了。',
+    20 => '你的投票已被删除了。',
+    21 => '用户已被保存了。',
+    22 => '用户已被删除了。',
+    23 => '增加事件到你的日历时发生错误，缺少了事件编号。',
+    24 => '事件已增加到你的日历中。',
+    25 => '你要登入才可开启你的个人日历。',
+    26 => '事件已从你的日历中移除。',
+    27 => '信息已发送。',
+    28 => '插件已被保存了。',
+    29 => '抱歉，本站并不提供个人日历。',
+    30 => '存取被拒绝',
+    31 => '抱歉，你不能进入文章管理的首页。请注意你的企图已被记录。',
+    32 => '抱歉，你不能进入主题管理的首页。请注意你的企图已被记录。',
+    33 => '抱歉，你不能进入组件管理的首页。请注意你的企图已被记录。',
+    34 => '抱歉，你不能进入连结管理的首页。请注意你的企图已被记录。',
+    35 => '抱歉，你不能进入事件管理的首页。请注意你的企图已被记录。',
+
+    36 => '抱歉，你不能进入投票管理的首页。请注意你的企图已被记录。',
+    37 => '抱歉，你不能进入用户管理的首页。请注意你的企图已被记录。',
+    38 => '抱歉，你不能进入 Plug-in 管理的首页。请注意你的企图已被记录。',
+    39 => '抱歉，你不能进入电邮管理的首页。请注意你的企图已被记录。',
+    40 => '系统讯息',
+    41 => '抱歉，你不能进入字词替换的首页。请注意你的企图已被记录。',
+    42 => '你的字词已被保存了。',
+    43 => '你的字词已被删除了。',
+    44 => '插件已被安装了。',
+    45 => '插件已被删除了。',
+    46 => '抱歉，你不能进入资料库备份程式。请注意你的企图已被记录。',
+    47 => '这只适用於 *nix 如果你的作业系统是 *nix，那麽你的缓冲器已被清除了。如果你的作业系统是 Windows，你要手动寻找文件命名为 adodb _ *.php 的档案并把它们除去。',
+    48 => "感谢你申请成为 {$_CONF['site_name']} 的会员。只要经过我们员工的核对，我们会把密码寄到你所登记的电邮中。",
+    49 => '你的小组已被保存了。',
+    50 => '小组已被删除了。',
+    51 => '此用户名已有人在用。请选择另一个。',
+    52 => '你给的电信地址不像是有效。',
+    53 => '你的新密码已被接受。现在以下请用你的新密码来登入.',
+    54 => '你要求新密码的期限以过。请在下面从新要求。',
+    55 => '已经给你寄了一封电信。请照此信的说明来设定新密码。',
+    56 => '你供给的电信地址已有别的用户在使用。',
+    57 => '你的用户已经成功地删除了。',
+    58 => '你的文流已成功的保存了.',
+    59 => '你的文流已成功的删除了.',
+    60 => '插件已经更新成功',
+    61 => '插件 %s: 不知名的信息占位符',
+    62 => '迹回评论已被删除.',
+    63 => '删除迹回评论时发生错误.',
+    64 => '你的迹回评论已成功地传送出.',
+    65 => '网志目录服务已成功的存续.',
+    66 => '网志目录服务已被删除.',
+    67 => '你输入的新密码跟证实密码不同!',
+    68 => '你必要输入正确的目前密码.',
+    69 => '你的账户已被禁止!',
+    70 => '你的账户在等待管理员的批准.',
+    71 => '你的账户已证实并且等待管理员的批准.',
+    72 => '安装插件时发生错误，细节请看 error.log.',
+    73 => '卸载插件时发生错误，细节请看error.log.',
+    74 => 'Ping 回已成功地送出.',
+    75 => '迹回必须用 POST 要求.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => '存取',
+    'ownerroot' => '所有者/Root',
+    'group' => '小组',
+    'readonly' => '唯读',
+    'accessrights' => '存取权',
+    'owner' => '所有者',
+    'grantgrouplabel' => '给予之上小组编辑权利',
+    'permmsg' => '注意︰会员是指所有注册和登入的用户；而匿名是指所有非注册的浏览者或没有登入的用户。',
+    'securitygroups' => '安全小组',
+    'editrootmsg' => "即使你是用户管理员；但你不能编辑 root 用户。你能编辑所有的用户除了 root 用户。请注意所有企图非法地编辑 root 用户的动作已被记录。请回到<a href=\"{$_CONF['site_admin_url']}/user.php\">用户管理页</a>去。",
+    'securitygroupsmsg' => '选择这位用户属於的小组。',
+    'groupeditor' => '小组编辑器',
+    'description' => '描述',
+    'name' => '名字',
+    'rights' => '权限',
+    'missingfields' => '缺少栏位',
+    'missingfieldsmsg' => '你必须提供小组的名字和描述',
+    'groupmanager' => '小组管理员',
+    'newgroupmsg' => '点击下面的小组可修改或删除它，点击上面的新小组可创造一个新的。请注意所核心小组不能被删除。',
+    'groupname' => '组名',
+    'coregroup' => '核心小组',
+    'yes' => '是',
+    'no' => '否',
+    'corerightsdescr' => "这个小组的权限不能被编辑，因为这是个 {$_CONF['site_name']} 的核心小组。以下是这小组的权限清单(唯读的)。",
+    'groupmsg' => '安全小组在这纲站是有等级制度的。当增加这个小组到另一组别，这个小组将得到那组别的权限。请尽可能小组加下列的组别去。如果这小组需要特别的权限，你可以在以下的"权利"区域中挑选。要把小组加到组别去，你只需要在组别旁边的挑选盒打钩。',
+    'coregroupmsg' => "因为这是个 {$_CONF['site_name']} 的核心小组，这个小组的权限不能被编辑。以下是这小组的组别清单(唯读的)。",
+    'rightsdescr' => '小组的权限可以是来自於小组本身或是这小组所属的组别。以下的权限中如没有检验盒即代表这权限是来自於小组所属的组别；如有检验盒即代表你可以直接把权限给予这小组。',
+    'lock' => '锁住',
+    'members' => '成员',
+    'anonymous' => '匿名',
+    'permissions' => '权限',
+    'permissionskey' => 'R = 唯读， E = 编辑，有编辑权即有唯读权',
+    'edit' => '编辑',
+    'none' => '没有',
+    'accessdenied' => '存取被拒绝',
+    'storydenialmsg' => "因未被批准，你不可以观看这个文章。这是可能是因为你并不是 {$_CONF['site_name']} 的会员。请<a href=users.php?mode=new>成为会员</a>。",
+    'eventdenialmsg' => "因未被批准，你不可以观看这个事件。这是可能是因为你并不是 {$_CONF['site_name']} 的会员。请<a href=users.php?mode=new>成为会员</a>。",
+    'nogroupsforcoregroup' => '这小组不属於任何其它的小组',
+    'grouphasnorights' => ' 这小组没有管理权。',
+    'newgroup' => '新小组',
+    'adminhome' => '管理员首页',
+    'save' => '保存',
+    'cancel' => '取消',
+    'delete' => '删除',
+    'canteditroot' => '因为你不属于 Root 小组，所以你对 Root 小组的修改被拒绝了。如有问题请与系统管理员联系。',
+    'listusers' => '列出用户',
+    'listthem' => '列出',
+    'usersingroup' => '属于 "%s" 小组的用户',
+    'usergroupadmin' => '用户小组管理',
+    'add' => '加入',
+    'remove' => '免除',
+    'availmembers' => '可用的成员',
+    'groupmembers' => '小组成员',
+    'canteditgroup' => '若要修改此小组, 你必要时这个小组的成员. 若你认为这是错误, 请你联络系统管理员.',
+    'cantlistgroup' => '要看此小组的会员，你必须是此小组的会员。你若认为这是错误，请联络系统管理员。',
+    'editgroupmsg' => '若要修改小组会员，点击会员名，然后用增加或删除的按钮. 如果一个会员是一个小组的会员，他们的名字只会显现在右边. 一旦完成，按 <b>保存</b> 来更新小组，然后回到小组管理主页.',
+    'listgroupmsg' => '列出此小组目前所有的会员: <b>%s</b>',
+    'search' => '搜寻',
+    'submit' => '提交',
+    'limitresults' => '控制结果',
+    'group_id' => '小组 ID',
+    'plugin_access_denied_msg' => '你在非法的进入插件管理页.  请注意所有的非法登入都被登记.',
+    'groupexists' => '小组名称已存在',
+    'groupexistsmsg' => '目前已有用此名的小组. 小组名称必须独特.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '最後十个备份',
+    'do_backup' => '做备份',
+    'backup_successful' => '资料库备份完成。',
+    'db_explanation' => '要做新的志乐备份，点击以下的按钮',
+    'not_found' => "不正确的路径或 mysqldump 程式不可执行。<br>检查<strong>\$_DB_mysqldump_path</strong>定义在 config.php.<br>变数现在被定义为︰<var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => '备份失败︰档案是 0 大小',
+    'path_not_found' => "{$_CONF['backup_path']} 不存在或不是目录",
+    'no_access' => "错误︰目录 {$_CONF['backup_path']} ，不能存取。",
+    'backup_file' => '备份档案',
+    'size' => '大小',
+    'bytes' => '位元组',
+    'total_number' => '总备份次数: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => '首页',
+    2 => '联络',
+    3 => '投稿',
+    4 => '连结',
+    5 => '投票',
+    6 => '日历',
+    7 => '本站统计数据',
+    8 => '个人化',
+    9 => '搜索',
+    10 => '进阶搜寻',
+    11 => '目录'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 错误',
+    2 => '咦，我到处都看过了但找不到<b>%s</b>.',
+    3 => "<p>很抱歉，但你要求的文件不存在。请检查<a href=\"{$_CONF['site_url']}\">主页</a>或<a href=\"{$_CONF['site_url']}/search.php\">搜索页</a>看看能发现什麽。"
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => '要求登入',
+    2 => '抱歉，要求登入才可存取这个区域。',
+    3 => '登入',
+    4 => '新用户'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF 版本的作用已被禁止',
+    2 => '所提供的文件没有呈递。文件已收到，但是无法处理。请肯定你所提交的文件是 html 格式的文件写于 xHTML 的标准。请注意过分复杂的 html 文件也可能无法正确呈递。你的文件提交的结果是 0 bytes 而且已被删除。你若肯定你的文件应该顺利的呈递，其再次提交。',
+    3 => '不知名的PDF 文件制作错误。',
+    4 => '没提供页数资料或你要用以下的特别 PDF 制作工具。若你认为你所得到的这页是错误。 请联络系统管理员。要不然，你可用以下的表格来特别制作 PDF。',
+    5 => '正在装置你的文件。',
+    6 => '你的文件被装置时请等待。',
+    7 => '你可用右击以下的按钮，然后选 \'save target...\' or \'save link location...\' 来存续你的文件的一个拷贝。',
+    8 => '在配置档案里的 HTMLDoc二进制档案路径有错误，或此系统无法执行此档案。若此问题继续发生，请联络网站管理员。',
+    9 => 'PDF 制作器',
+    10 => '这是特别的 PDF 制作工具。它会将任何 URL 转换成 PDF 版本。请注意，有些网页不会正确的被这工具处理成功。这是 HTMLDoc PDF 制作工具的有限之处，而这样的错误不需要报告给此网站的管理员。',
+    11 => 'URL',
+    12 => '制作 PDF!',
+    13 => '此服务器的 PHP 配置不准许 fopen() 命令用在 URL 上。 系统管理员必须先修改  php.ini 档案，然后设定 allow_url_fopen 到 On',
+    14 => '你要求的 PDF 不存在或你在非法的入取一个档案。'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array (
+    'trackback'          => '迹回',
+    'from'               => '从',
+    'tracked_on'         => '迹回于',
+    'read_more'          => '[读下文]',
+    'intro_text'         => "这是别人对 '%s' 的看法:",
+    'no_comments'        => '此登录无迹回评论.',
+    'this_trackback_url' => '此登录的迹回 URL:',
+    'num_comments'       => '%d 迹回评论',
+    'send_trackback'     => '送出 Ping',
+    'preview'            => '预览',
+    'editor_title'       => '送出迹回评论',
+    'trackback_url'      => '迹回 URL',
+    'entry_url'          => '登录 URL',
+    'entry_title'        => '登录标题',
+    'blog_name'          => '网站名',
+    'excerpt'            => '摘录',
+    'truncate_warning'   => '注: 目的站可能将你的摘录缩短',
+    'button_send'        => '送出',
+    'button_preview'     => '预览',
+    'send_error'         => '错误',
+    'send_error_details' => '送出迹回评论时发生错误:',
+    'url_missing'        => '无登录 URL',
+    'url_required'       => '请输入登录的最少一个 URL.',
+    'target_missing'     => '无迹回 URL',
+    'target_required'    => '请输入一个迹回 URL',
+    'error_socket'       => '无法打开 socket.',
+    'error_response'     => '不明白你的反应.',
+    'error_unspecified'  => '为指明的错误.',
+    'select_url'         => '选择迹回 URL',
+    'not_found'          => '找不到迹回 URL',
+    'autodetect_failed'  => '志乐探测不到关于你要送出评论的迹回 URL. 以下请输入.',
+    'trackback_explain'  => '从以下的联结中，请选你要送出评论的 URL. 志乐将会决定正确的迹回 URL. 或者你若已知道的话，可 <a href="%s">在此输入它</a>.',
+    'no_links_trackback' => '找不到联结. 你不能送出此登录的迹回评论.',
+    'pingback'           => 'Ping 回',
+    'pingback_results'   => 'Ping 回的结果',
+    'send_pings'         => '送出 ping',
+    'send_pings_for'     => '送出ping 于 "%s"',
+    'no_links_pingback'  => '找不到联结. 为此登录无 Ping 回送出.',
+    'pingback_success'   => 'Ping 回已送出.',
+    'no_pingback_url'    => '无 ping 回 URL.',
+    'resend'             => '重送',
+    'ping_all_explain'   => '你现在可通知你所联结的网站 (<a href="http://en.wikipedia.org/wiki/Pingback">Ping 回</a>), 广告你的站已经被更新于ping 过网志目录服务, 或送出一个 <a href="http://en.wikipedia.org/wiki/Trackback">迹回</a> 评论若你写过有关一个在别人的网站上的登录.',
+    'pingback_button'    => '送出Ping 回',
+    'pingback_short'     => '送出Ping 回到所有跟此登录联结的网站.',
+    'pingback_disabled'  => '(Ping 回已中止)',
+    'ping_button'        => '送出Ping',
+    'ping_short'         => 'Ping 网志目录服务.',
+    'ping_disabled'      => '(Ping 已中止)',
+    'trackback_button'   => '送出迹回',
+    'trackback_short'    => '送出一个迹回评论.',
+    'trackback_disabled' => '(迹回一中止)',
+    'may_take_a_while'   => '请注意，送出 Ping回 和 Ping 可需要一段时间.',
+    'ping_results'       => 'Ping 的结果',
+    'unknown_method'     => '无知 ping 法',
+    'ping_success'       => 'Ping 已送出.',
+    'error_site_name'    => '请输入网站名.',
+    'error_site_url'     => '请输入网站 URL.',
+    'error_ping_url'     => '请输入正确的 Ping URL.',
+    'no_services'        => '未设定网志目录服务.',
+    'services_headline'  => '网志目录服务',
+    'service_explain'    => '若要更改或删除网志目录服务，请点击一下服务的编辑标图. 要增加一个新的网志目录服务，请点击以上的 "建新".',
+    'service'            => '服务',
+    'ping_method'        => 'Ping 法',
+    'service_website'    => '网站',
+    'service_ping_url'   => '要ping 的URL',
+    'ping_standard'      => '标准 Ping',
+    'ping_extended'      => '扩大的 Ping',
+    'ping_unknown'       => '(无知法)',
+    'edit_service'       => '编辑网志目录服务',
+    'trackbacks'         => '迹回',
+    'editor_intro'       => '准备你的迹回评论于 <a href="%s">%s</a>.',
+    'editor_intro_none'  => '准备你的迹回评论.',
+    'trackback_note'     => '若要送出一个迹回评论于一个文章，去到文章目录然后点击那文章的"' . $LANG24[21] . '". 若要送出跟任何文章都无关的迹回, <a href="%s">请点击此处</a>.',
+    'pingback_explain'   => '输入一个 URL 来送出 Ping回. Ping回将会指到你的网站主页.',
+    'pingback_url'       => 'Ping回 URL',
+    'site_url'           => '此站的 URL',
+    'pingback_note'      => '若要给一个文章送出 ping回, 去到文章目录然后点击那文章的 "' . $LANG24[21] . '". 要送出一个跟任何文章都无关的 ping回, <a href="%s">请点击此处</a>.',
+    'pbtarget_missing'   => '无 Ping回 URL',
+    'pbtarget_required'  => '请输入一个ping回 URL',
+    'pb_error_details'   => '送出 ping回时发生错误:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title'            => '文章目录',
+    'title_year'       => '文章目录为 %d',
+    'title_month_year' => '文章目录为 %s %d',
+    'nav_top'          => '回到文章目录',
+    'no_articles'      => '没有文章.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n 新 %i 在最后 %t %s',
+    'new_last' => '最后 %t %s',
+    'minutes'     => '分钟',
+    'hours'       => '小时',
+    'days'        => '日',
+    'weeks'       => '周',
+    'months'      => '月',
+    'minute'      => '分钟',
+    'hour'        => '小时',
+    'day'         => '日',
+    'week'        => '周',
+    'month'       => '月'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search'        => '搜寻',
+    'limit_results' => '限制结果',
+    'submit'        => '提交',
+    'edit'          => '编辑',
+    'admin_home'    => '管理主页',
+    'create_new'    => '建新',
+    'enabled'       => '启动',
+    'title'         => '标题',
+    'type'          => '类型',
+    'topic'         => '题目',
+    'help_url'      => '帮助文 URL',
+    'save'          => '存续',
+    'cancel'        => '取消',
+    'delete'        => '删除',
+    'copy'          => '复制',
+    'no_results'    => '- 找不到任何登录 -',
+    'data_error' => '处理订阅资料时发现错误. 请检查资料来源.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => '评论已启动',
+    -1 => '评论已关掉'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => '平面的',
+    'nested' => '嵌套的',
+    'threaded' => '线状的',
+
+    'nocomment' => '勿评论'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 小时',
+    7200 => '2 小时',
+    10800 => '3 小时',
+    28800 => '8 小时',
+    86400 => '1 日',
+    604800 => '1 周',
+    2678400 => '1 月'
+);
+
+$LANG_dateformats = array(
+    0 => '系统指定的'
+);
+
+$LANG_featurecodes = array(
+    0 => '不定为重要文章',
+    1 => '定为重要文章'
+);
+
+$LANG_frontpagecodes = array(
+    0 => '只显在主提版',
+    1 => '显在标题版'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => '普通文字',
+    'html' => 'HTML 格式'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => '最老的在前',
+    'DESC' => '最新的在前'
+);
+
+$LANG_trackbackcodes = array(
+    0 => '迹回已启动',
+    -1 => '迹回已关掉'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/chinese_traditional_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/chinese_traditional_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/chinese_traditional_utf-8.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/chinese_traditional_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,1273 +1,1520 @@
-<?php
-
-###############################################################################
-# chinese_traditional_utf-8.php
-#
-# Last Modified: 2004-10-26
-# Version: 1.3.10
-#
-# This is the Chinese Traditional (UTF-8) language set for GeekLog 1.3.10
-#
-# Copyright (C) 2003 Samuel M. Stone
-# sam@stonemicro.com
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-###############################################################################
-
-$LANG_CHARSET = 'UTF-8';
-
-###############################################################################
-# Array Format:
-# $LANGXX[YY]:  $LANG - variable name
-#               XX    - file id number
-#               YY    - phrase id number
-###############################################################################
-
-###############################################################################
-# USER PHRASES - These are file phrases used in end user scripts
-###############################################################################
-
-###############################################################################
-# lib-common.php
-
-$LANG01 = array(
-    1 => '作者︰',
-    2 => '讀整文',
-    3 => '個評論',
-    4 => '編輯',
-    5 => '投票',
-    6 => '結果',
-    7 => '投票結果',
-    8 => '投票',
-    9 => '管理者功能︰',
-    10 => '提交物',
-    11 => '文章',
-    12 => '組件',
-    13 => '主題',
-    14 => '連結',
-    15 => '事件',
-    16 => '投票',
-    17 => '用戶',
-    18 => 'SQL 質問',
-    19 => '退出',
-    20 => '用戶訊息︰',
-    21 => '用戶名',
-    22 => '用戶識別號',
-    23 => '安全等級',
-    24 => '匿名',
-    25 => '回復',
-    26 => '以下評論只屬張貼者個人觀點。',
-    27 => '最近發表的',
-    28 => '刪除',
-    29 => '沒有評論。',
-    30 => '舊的文章',
-    31 => '允許的 HTML 標記:',
-    32 => '錯誤，無效的用戶名',
-    33 => '錯誤，不能寫系統日誌;',
-    34 => '錯誤',
-    35 => '退出',
-    36 => '於',
-    37 => '沒有文章',
-    38 => '內容辛迪加',
-    39 => '使新',
-    40 => '你的伺服器的 <tt>php.ini</tt> 裏設定為 <tt>register_globals = Off</tt>. 可是此軟體需要將 <tt>register_globals</tt> 設定成 <strong>on</strong>. 所以在你繼續以前，必須將它設定為<strong>on</strong>，然後重新開機.',
-    41 => '客人',
-    42 => '作者:',
-    43 => '回復這個',
-    44 => '父母',
-    45 => 'MySQL 錯誤號碼',
-    46 => 'MySQL 錯誤訊息',
-    47 => '用戶功能',
-    48 => '帳戶訊息',
-    49 => '風格選擇',
-    50 => '錯誤的 SQL statement',
-    51 => '幫助',
-    52 => '新',
-    53 => '管理者首頁',
-    54 => '不能打開檔。',
-    55 => '錯處',
-    56 => '投票',
-    57 => '密碼',
-    58 => '登入',
-    59 => "沒有帳戶？<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登記</a>",
-    60 => '發表評論',
-    61 => '新增帳戶',
-    62 => '字',
-    63 => '評論設定',
-    64 => '把文章電郵給朋友',
-    65 => '觀看可列印的版本',
-    66 => '我的日曆',
-    67 => '歡迎來到',
-    68 => '首頁',
-    69 => '聯絡',
-    70 => '搜尋',
-    71 => '投稿',
-    72 => '網路資源',
-    73 => '投票中心',
-    74 => '日曆',
-    75 => '進階搜索',
-    76 => '本站統計資料',
-    77 => '插件',
-    78 => '即將發生的事',
-    79 => '新鮮的東西',
-    80 => '個新文章(',
-    81 => '新的文章(',
-    82 => ' 小時內)',
-    83 => '評論',
-    84 => '連結',
-    85 => '最近四十八小時',
-    86 => '沒有新的評論',
-    87 => '最近兩個星期',
-    88 => '沒有新的連結',
-    89 => '沒有事發生',
-    90 => '首頁',
-    91 => '載入這頁用了',
-    92 => '秒',
-    93 => '版權',
-    94 => '此網站所有的商標和版權屬於他們各自的所有者.',
-    95 => '動力於',
-    96 => '小組',
-    97 => '字詞單',
-    98 => '插件',
-    99 => '文章',
-    100 => '沒有新的文章',
-    101 => '你的事件',
-    102 => '本站的事件',
-    103 => '資料庫備份',
-    104 => '由',
-    105 => '寄給用戶',
-    106 => '觀看',
-    107 => 'GL 版本測試',
-    108 => '清除緩衝貯存區',
-    109 => '報告濫用',
-    110 => '報告此濫登文給網站管理員',
-    111 => '看PDF 版本',
-    112 => '登記用戶',
-    113 => '使用說明'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG02 = array(
-    1 => '事件日曆',
-    2 => '抱歉，沒有事件。',
-    3 => '時',
-    4 => '地',
-    5 => '事',
-    6 => '新增事件',
-    7 => '即將發生的事',
-    8 => '在將這事加進你的日曆之後，你可點擊 "我的日曆" 來觀看',
-    9 => '加進我的日曆',
-    10 => '從我的日曆中去除',
-    11 => "把這事加進 {$_USER['username']} 的日曆",
-    12 => '事件',
-    13 => '開始',
-    14 => '結束',
-    15 => '回到日曆'
-);
-
-###############################################################################
-# comment.php
-
-$LANG03 = array(
-    1 => '發表評論',
-    2 => '發表方式',
-    3 => '退出',
-    4 => '新增帳戶',
-    5 => '用戶名',
-    6 => '本站需要登入才可發表評論，請登入。如果你沒有帳戶，請使用下面的表格登記。',
-    7 => '你最後發表的評論是在 ',
-    8 => " 秒之前。本站限定至少 {$_CONF['commentspeedlimit']} 秒後才可再發表評論",
-    9 => '評論',
-    10 => '送出報告',
-    11 => '發表評論',
-    12 => '請填寫標題注評論欄',
-    13 => '供你參考',
-    14 => '預覽',
-    15 => '報告這篇濫登文',
-    16 => '標題',
-    17 => '錯誤',
-    18 => '重要的東西',
-    19 => '請儘量不要離題。',
-    20 => '盡可能回復別人的評論，而不是開新的評論。',
-    21 => '為避免重複，發表評論之前請先讀別人所寫的。',
-    22 => '請儘量用簡潔的標題。',
-    23 => '我們不會公開你的電郵地址。',
-    24 => '匿名用戶',
-    25 => '你肯定想要報告此濫登文給網站管理員否?',
-    26 => '%s 報告以下濫登的評論:',
-    27 => '濫用報告'
-);
-
-###############################################################################
-# users.php
-
-$LANG04 = array(
-    1 => '用戶概況',
-    2 => '用戶名',
-    3 => '全名',
-    4 => '密碼',
-    5 => '電子郵件',
-    6 => '首頁',
-    7 => '小傳',
-    8 => 'PGP 鑰匙',
-    9 => '保存設定',
-    10 => '給用戶的最後十個評論',
-    11 => '沒有評論',
-    12 => '用戶設定',
-    13 => '每夜電郵文摘',
-    14 => '這是個隨機的密碼，請儘快更改。要更改密碼請先登入系統，然後點擊帳戶訊息。',
-    15 => "你在 {$_CONF['site_name']} 的帳戶已建立了。請使用以下訊息登入系統並保留這郵件作日後參考。",
-    16 => '你的帳戶訊息',
-    17 => '帳戶並不存在',
-    18 => '你提供的不是一個有效的的電郵',
-    19 => '用戶名或電郵已經存在',
-    20 => '提供的不是一個有效的的電郵',
-    21 => '錯誤',
-    22 => "登記用 {$_CONF['site_name']} ！",
-    23 => "在 {$_CONF['site_name']} 登記的用戶可享有的會員好處。他們可以用自己的名字發表評論和存取本站的資源。請注意本站<b><i>絕不會</i></b>公開用戶的電郵。",
-    24 => '你的密碼將被送到你輸入的電郵信箱',
-    25 => '忘記了你的密碼嗎？',
-    26 => '請你輸入的用戶名和點擊電郵密碼，我們會發送一個新的密碼到你的電郵信箱。',
-    27 => '現在就登記！',
-    28 => '電郵密碼',
-    29 => '退出時',
-    30 => '登入時',
-    31 => '需要登入才可用',
-    32 => '署名',
-    33 => '絕不會公開',
-    34 => '這是你的真名',
-    35 => '要改變請輸入密碼',
-    36 => '開始是 http://',
-    37 => '將會附加在你發表的評論上',
-    38 => '你的簡介',
-    39 => '你的公共 PGP 鑰匙',
-    40 => '沒有主題圖示',
-    41 => '願意主持',
-    42 => '日期格式',
-    43 => '文章限度',
-    44 => '沒有組件',
-    45 => '顯示設定',
-    46 => '不包括的',
-    47 => '新元件配置為',
-    48 => '主題',
-    49 => '文章裏沒有圖像',
-    50 => '不要打鉤如果你不感興趣',
-    51 => '只是新文章',
-    52 => '預設值是',
-    53 => '每晚接收當日的文章',
-    54 => '打鉤如果你不看這些主題或作者。',
-    55 => '如果你沒有選擇，這意味你要用預設的組件。如果你選擇元件，所有預設的箱將被忽略。預設的東西會用粗筆劃顯示。',
-    56 => '作者',
-    57 => '顯示方式',
-    58 => '排序方式',
-    59 => '評論限制(個)',
-    60 => '可顯示你的評論嗎？',
-    61 => '最新或最舊的先？',
-    62 => '預設是100',
-    63 => '密碼已被發送，你會很快收到的。',
-    64 => '評論設定',
-    65 => '請嘗試再登入',
-    66 => "你可能打錯了，請嘗試再登入。你是否<a href=\"{$_CONF['site_url']}/users.php?mode=new\">新用戶</a>？",
-    67 => '成員自',
-    68 => '記住我為',
-    69 => '在登入以後，我們應該記住你多久？',
-    70 => "定做 {$_CONF['site_name']} 的佈局和內容",
-    71 => "一個 {$_CONF['site_name']} 的主要特點是你可以定做自己的佈局和內容，但是你必須是本站的會員。<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登記</a>。如果你已經是登記，請使用左邊的區域登入。",
-    72 => '題材',
-    73 => '語言',
-    74 => '改變本站外表',
-    75 => '主題已電郵給',
-    76 => '請只選擇你感興趣的主題，因為所有當日新張貼的文章將會電郵到你的信箱。',
-    77 => '相片',
-    78 => '你自己的圖片',
-    79 => '要刪除圖片，在這裏打鉤',
-    80 => '登入',
-    81 => '發送電子郵件',
-    82 => '用戶最近發表的十個文章為',
-    83 => '用戶發表統計',
-    84 => '文章總數︰',
-    85 => '評論總數︰',
-    86 => '尋找所有發表過的文章︰',
-    87 => '你的登入名',
-    88 => "有人(也許是你)要了新密碼 \"%s\" 於 {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n若你真的要這樣作, 請你點擊以下聯結:\n\n",
-    89 => "你若不想要這樣作, 請忽視這資訊。這項事就將會被拋棄，而你的密碼就保持原有.\n\n",
-    90 => '你可在下面輸入一個新的密碼。請注意你的舊密碼任然有效直到你將此表提交。',
-    91 => '設定新密碼',
-    92 => '輸入新密碼',
-    93 => '你在 %d 秒鐘前剛要了一個新密碼. 此站規定最少要 %d 秒鐘以後才可再次要求新密碼。',
-    94 => '將用戶 \'%s\' 刪除',
-    95 => '單據下面的 \'刪除用戶\' 便將你在我們資料庫裏的用戶。請注意，你以其用戶所登載過的文章和評論不會刪除，可是會以無名作者的身份顯示。',
-    96 => '刪除用戶',
-    97 => '確定用戶刪除',
-    98 => '你肯定要刪除你的用戶嗎? 其後你就不在能使用此站,除非你重新設定新用戶. 若你肯定的話請再次單據下面的 “刪除用戶”.',
-    99 => '隱私選項於',
-    100 => '管理員來信',
-    101 => '准許管理員來信',
-    102 => '用戶來信',
-    103 => '准許其他用戶來信',
-    104 => '顯示聯機狀況',
-    105 => '讓在“誰在聯機”元件裏顯示',
-    106 => '位置',
-    107 => '顯示在你的公開簡介'
-);
-
-###############################################################################
-# index.php
-
-$LANG05 = array(
-    1 => '沒有新聞可顯示',
-    2 => '沒有新文章可顯示。',
-    3 => '這也許是真的沒有新主題或是你的 %s 設定得太過限制性。',
-    4 => '今天頭條',
-    5 => '下頁',
-    6 => '上頁',
-    7 => '第一',
-    8 => '最終'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => '網路資源',
-    2 => '沒有資源可顯示',
-    3 => '加一連結'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => '投票保存了',
-    2 => '你的投票已被保存了',
-    3 => '投票',
-    4 => '系統中的投票',
-    5 => '投票',
-    6 => '看其他投票問題'
-);
-
-###############################################################################
-# profiles.php
-
-$LANG08 = array(
-    1 => '發送電子郵件時發生錯誤。請再嘗試。',
-    2 => '電郵已送出。',
-    3 => '請確定你在回復欄有一個可用的電子郵件位址。',
-    4 => '請填寫你的名字、回復欄、主題和內容',
-    5 => '錯誤：沒有這用戶。',
-    6 => '發生錯誤。',
-    7 => '用戶資料',
-    8 => '用戶名',
-    9 => '用戶名的 URL',
-    10 => '發送郵件到',
-    11 => '你的名字：',
-    12 => '回復到：',
-    13 => '主題：',
-    14 => '內容：',
-    15 => 'HTML 不會被翻譯。',
-    16 => '發送郵件',
-    17 => '把文章電郵給朋友',
-    18 => '收件人名字',
-    19 => '收件人電郵',
-    20 => '寄件人名字',
-    21 => '寄件人電郵',
-    22 => '所有欄都要填寫',
-    23 => "這電子郵件是由 %s (%s) 寄給你的，他認為你也許對這篇在 {$_CONF['site_url']} 的文章感興趣。這不是垃圾郵件(SPAM)，你的電郵位址也不會被紀錄。",
-    24 => '關於這個文章的評論在',
-    25 => '為幫助我們防止系統被濫用，你必須登入。',
-    26 => '這個表格允許你送電子郵件到你選擇的用戶中。請填寫所有的欄位。',
-    27 => '短信',
-    28 => '%s 寫道：',
-    29 => "來自於 {$_CONF['site_name']} 的每日文摘，給予：",
-    30 => ' 每日的時事通訊，給予：',
-    31 => '標題',
-    32 => '日期',
-    33 => '完整的文章在：',
-    34 => '電郵結束',
-    35 => '對不起，此用戶不願意收電信.'
-);
-
-###############################################################################
-# search.php
-
-$LANG09 = array(
-    1 => '進階搜尋',
-    2 => '關鍵字',
-    3 => '主題',
-    4 => '所有',
-    5 => '類型',
-    6 => '文章',
-    7 => '評論',
-    8 => '作者',
-    9 => '所有',
-    10 => '搜尋',
-    11 => '搜尋結果',
-    12 => '相配',
-    13 => '搜尋結果：沒有相配的',
-    14 => '沒有你尋找的東西︰',
-    15 => '請再嘗試',
-    16 => '主題',
-    17 => '日期',
-    18 => '作者',
-    19 => "搜尋整個 {$_CONF['site_name']} 的新舊文章資料庫",
-    20 => '日期',
-    21 => '到',
-    22 => '(日期格式 年-月-日 YYYY-MM-DD)',
-    23 => '採樣數',
-    24 => '找到',
-    25 => '個相配在',
-    26 => '個項目中，共用了',
-    27 => '秒',
-    28 => '沒有你所尋找的文章或評論',
-    29 => '文章和評論的結果',
-    30 => '沒有你所尋找的連結',
-    31 => '沒有你所尋找的插件',
-    32 => '事件',
-    33 => 'URL',
-    34 => '地點',
-    35 => '所有日子',
-    36 => '沒有你所尋找的事件',
-    37 => '事件的結果',
-    38 => '連結的結果',
-    39 => '連結',
-    40 => '事件',
-    41 => '搜尋的關鍵字最少要有三個字。',
-    42 => '請使用 YYYY-MM-DD (年-月-日) 日期格式。',
-    43 => '整個短語',
-    44 => '所有字詞',
-    45 => '其中任何字詞',
-    46 => '以下',
-    47 => '以上',
-    48 => '作者',
-    49 => '日期',
-    50 => '採樣數',
-    51 => '聯結',
-    52 => '位置',
-    53 => '文章結果',
-    54 => '評論結果',
-    55 => '句子',
-    56 => '和',
-    57 => '或'
-);
-
-###############################################################################
-# stats.php
-
-$LANG10 = array(
-    1 => '本站統計資料',
-    2 => '系統點擊總數',
-    3 => '文章(評論)總數',
-    4 => '投票(獲得投票)總數',
-    5 => '連結(點擊)總數',
-    6 => '事件總數',
-    7 => '最多觀看的十個文章',
-    8 => '文章標題',
-    9 => '觀看',
-    10 => '看來本站沒有文章或是沒人觀看過本站的文章。',
-    11 => '最多評論的十個文章',
-    12 => '評論',
-    13 => '看來本站沒有文章或是沒人評論過本站的文章。',
-    14 => '最多人投票的十個選舉',
-    15 => '投票標題',
-    16 => '投票',
-    17 => '看來本站沒有投票或是沒人投過票。',
-    18 => '最多人點擊的十個連結',
-    19 => '連結',
-    20 => '點擊',
-    21 => '看來本站沒有連結或是沒人點擊過本站的連結。',
-    22 => '最多人寄出的十個文章',
-    23 => '電郵',
-    24 => '看來沒人寄出過本站的文章'
-);
-
-###############################################################################
-# article.php
-
-$LANG11 = array(
-    1 => '有什麽是相關的',
-    2 => '寄文章給朋友',
-    3 => '可印的文章格式',
-    4 => '文章選項',
-    5 => 'PDF 文章版本'
-);
-
-###############################################################################
-# submit.php
-
-$LANG12 = array(
-    1 => '你需要登入才可發表 %s ',
-    2 => '登入',
-    3 => '新用戶',
-    4 => '發表一件事',
-    5 => '發表一個連結',
-    6 => '發表一個文章',
-    7 => '你需要登入',
-    8 => '發表',
-    9 => '在本站發表東西時請跟隨以下建議...<ul><li>填寫所有的欄<li>提供完全和準確的訊息<li>再三檢查那些 URLs</ul>',
-    10 => '標題',
-    11 => '連結',
-    12 => '開始日期',
-    13 => '結束日期',
-    14 => '地點',
-    15 => '描述',
-    16 => '如果是其他，請指定',
-    17 => '類別',
-    18 => '其他',
-    19 => '讀這先',
-    20 => '錯誤：缺少類別',
-    21 => '當選擇"其他"請提供一個類別名',
-    22 => '錯誤：缺少欄位',
-    23 => '請填寫所有的欄位',
-    24 => '你發表的已被保存了',
-    25 => '你的 %s 已被保存了',
-    26 => '限速',
-    27 => '用戶名',
-    28 => '主題',
-    29 => '文章',
-    30 => '你最後發表的是',
-    31 => " 秒之前。本站限定至少 {$_CONF['speedlimit']} 秒後才可再發表",
-    32 => '預覽',
-    33 => '文章 預覽',
-    34 => '退出',
-    35 => '不准許 HTML 標記',
-    36 => '發表模式',
-    37 => "加事件到 {$_CONF['site_name']} 會將你的事件加到主日曆中，其他的用戶可隨意地把它加進自己的個人日曆。請<b>不要</b>把你的個人事件譬如生日和周年紀念加進去。<br><br>只要管理員批准你的事件它將出現在主日曆上。",
-    38 => '加事件到',
-    39 => '主日曆',
-    40 => '個人日曆',
-    41 => '結束時間',
-    42 => '開始時間',
-    43 => '整日的事件',
-    44 => '地址 1',
-    45 => '地址 2',
-    46 => '城市/市鎮',
-    47 => '州',
-    48 => '郵遞區號',
-    49 => '事件類型',
-    50 => '編輯事件類型',
-    51 => '地點',
-    52 => '刪除',
-    53 => '新加帳戶'
-);
-
-###############################################################################
-# ADMIN PHRASES - These are file phrases used in admin scripts
-###############################################################################
-
-###############################################################################
-# admin/auth.inc.php
-
-$LANG20 = array(
-    1 => '要求認證',
-    2 => '拒絕！不正確的登入資料',
-    3 => '無效的密碼',
-    4 => '用戶名：',
-    5 => '密碼：',
-    6 => '這頁只供授權人員使用。<br>所有存取將被記錄和檢查。',
-    7 => '登入'
-);
-
-###############################################################################
-# admin/block.php
-
-$LANG21 = array(
-    1 => '權力不足',
-    2 => '你沒有權去編輯這個元件。',
-    3 => '組件編輯器',
-    4 => '讀取此文流時發現錯誤，請在你的錯誤記錄檔案 error.log 裏看細節.',
-    5 => '組件標題',
-    6 => '主題',
-    7 => '所有',
-    8 => '元件安全水平',
-    9 => '組件次序',
-    10 => '組件類型',
-    11 => '入口組件',
-    12 => '正常元件',
-    13 => '入口元件選項',
-    14 => '文流 RDF 的 URL',
-    15 => '最後的文流 RDF 更新',
-    16 => '正常元件選項',
-    17 => '元件內容',
-    18 => '請填寫元件的標題和內容。',
-    19 => '組件管理員',
-    20 => '組件標題',
-    21 => '元件安全水平',
-    22 => '組件類型',
-    23 => '組件次序',
-    24 => '元件主題',
-    25 => '點擊下面的組件可修改或刪除它，點擊上面的新元件可創造一個新的。',
-    26 => '版面組件',
-    27 => 'PHP 組件',
-    28 => 'PHP 元件選項',
-    29 => '元件函數',
-    30 => '如果你想用自己的 PHP 函數元件，請在上面輸入函數的名字。為防止執行任性的編碼，PHP 元件函數名必須以 "phpblock_" 作開始 (e.g. phpblock_getweather)。請不要把空的圓括號 "()" 放在函數後。最後，建議你把所有的 PHP 組件放在 /path/to/geeklog/system/lib-custom.php 裏以方便系統升級。',
-    31 => 'PHP 元件錯誤︰函數 %s 並不存在。',
-    32 => '錯誤︰缺少欄位元。',
-    33 => '在入口元件你必須把 URL 輸入到 .rdf 檔案',
-    34 => '在 PHP 元件你必須輸入主題和函數',
-    35 => '在正常元件你必須輸入主題和內容',
-    36 => '在版面元件你必須輸入內容',
-    37 => '不適當的 PHP 元件函數名',
-    38 => '為防止執行任性的編碼，PHP 元件函數名必須以 "phpblock_" 作開始 (e.g. phpblock_getweather)。',
-    39 => '放在那邊',
-    40 => '左',
-    41 => '右',
-    42 => '在本系統的預設元件你必須輸入元件標題和次序',
-    43 => '只可是首頁',
-    44 => '存取被拒絕',
-    45 => "企圖存取不允許的元件已被記錄。請<a href=\"{$_CONF['site_admin_url']}/block.php\">反回組件管理員晝面</a>。",
-    46 => '新組件',
-    47 => '管理員首頁',
-    48 => '組件名',
-    49 => ' (不可有空隔和必須是唯一的)',
-    50 => '求助文件的 URL',
-    51 => '包括 http://',
-    52 => '如果這裏留白，元件的求助檔圖示將不被顯示',
-    53 => '使有效',
-    54 => '保存',
-    55 => '取消',
-    56 => '刪除',
-    57 => '下移組件',
-    58 => '上移組件',
-    59 => '移組件到右邊',
-    60 => '移組件到左邊'
-);
-
-###############################################################################
-# admin/event.php
-
-$LANG22 = array(
-    1 => '事件編輯器',
-    2 => 'Error',
-    3 => '事件標題',
-    4 => '事件 URL',
-    5 => '事件開始日期',
-    6 => '事件結束日期',
-    7 => '事件地點',
-    8 => '事件描述',
-    9 => '(包括 http://)',
-    10 => '你必須提供日期時間、事件主題、與事件描述！',
-    11 => '事件管理員',
-    12 => '點擊下面的事件可修改或刪除它，點擊上面的新事件可創造一個新的。',
-    13 => '事件標題',
-    14 => '開始日期',
-    15 => '結束日期',
-    16 => '存取被拒絕',
-    17 => "企圖存取不允許的事件已被記錄。請<a href=\"{$_CONF['site_admin_url']}/event.php\">反回事件管理員晝面</a>。",
-    18 => '新事件',
-    19 => '管理員首頁',
-    20 => '保存',
-    21 => '取消',
-    22 => '刪除',
-    23 => '錯誤的開始日期.',
-    24 => '錯誤的結束日期.',
-    25 => '結束日期在開始日期前.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => '連結編輯器',
-    2 => '',
-    3 => '連結標題',
-    4 => '連結 URL',
-    5 => '類別',
-    6 => '(包括 http://)',
-    7 => '其他',
-    8 => '連結被擊次數',
-    9 => '連結描述',
-    10 => '你需要提供連結標題、 URL 和描述！',
-    11 => '連結管理員',
-    12 => '點擊下面的連結可修改或刪除它，點擊上面的新連結可創造一個新的。',
-    13 => '連結標題',
-    14 => '連結類別',
-    15 => '連結 URL',
-    16 => '存取被拒絕',
-    17 => "企圖存取不允許的連結已被記錄。請<a href=\"{$_CONF['site_admin_url']}/link.php\">反回連結管理員晝面</a>。",
-    18 => '新連結',
-    19 => '管理員首頁',
-    20 => '如果是其他，請指定',
-    21 => '保存',
-    22 => '取消',
-    23 => '刪除'
-);
-
-###############################################################################
-# admin/story.php
-
-$LANG24 = array(
-    1 => '上篇文章',
-    2 => '下篇文章',
-    3 => '模式',
-    4 => '發表模式',
-    5 => '文章編輯器',
-    6 => '沒有文章',
-    7 => '作者',
-    8 => '保存',
-    9 => '預覽',
-    10 => '取消',
-    11 => '刪除',
-    12 => 'ID',
-    13 => '標題',
-    14 => '主題',
-    15 => '日期',
-    16 => '文章簡介',
-    17 => '文章內容',
-    18 => '點擊次數',
-    19 => '評論',
-    20 => '',
-    21 => '',
-    22 => '文章清單',
-    23 => '點擊下面的文章編號可修改或刪除它，點擊下面的文章標題可觀看它，點擊上面的新文章可創造一個新的。',
-    24 => '你選的用戶名以有人在用。請用另一個用戶名。',
-    25 => '',
-    26 => '文章預覽',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => '上載錯誤',
-    31 => '你需要提供作者、標題和文章簡介！',
-    32 => '頭條的',
-    33 => '只可有一個頭條文章',
-    34 => '草稿',
-    35 => '是',
-    36 => '否',
-    37 => '更多來自於',
-    38 => '更多發表於',
-    39 => '電郵',
-    40 => '存取被拒絕',
-    41 => "企圖存取不允許的文章已被記錄。你可以以唯讀模式觀看下面文章。看完後請<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理員晝面</a>。",
-    42 => "企圖存取不允許的文章已被記錄。請<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理員晝面</a>。",
-    43 => '新文章',
-    44 => '管理員首頁',
-    45 => '存取權',
-    46 => '<b>注意︰</b>如果你把日期改成將來，在那個日期前這篇文章將不會被發表。並且 意味著這篇文章不會包括在你的 RDF 標題內，在搜尋和統計頁中會被忽略。',
-    47 => '圖像',
-    48 => '圖像',
-    49 => '右',
-    50 => '左',
-    51 => '請用特別格式的文字([imageX]、[imageX_right] 或 [imageX_left])來插入圖像， X 是你附加圖像的編號。注意︰你只可使用你附加的圖像否則你將無法保存你的文章。<BR><P><B>預覽</B>︰最佳預覽文章的方法是把文章保存成草稿而不是直擊預覽按鈕。只有沒有附加圖像時才用預覽按鈕。',
-    52 => '刪除',
-    53 => '沒有被使用。保存前，你必須把這個圖像包含在文章簡介或文章內容中。',
-    54 => '附加圖像未被使用',
-    55 => '保存你的文章時發生以下錯誤。請改正這些錯誤再保存',
-    56 => '顯示主題圖示',
-    57 => '看沒味縮小的圖像',
-    58 => '文章管理',
-    59 => '選項',
-    60 => '已啟動',
-    61 => '自動保存',
-    62 => '自動刪除'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => '模式',
-    2 => '請輸入一個問題和最少一個答案.',
-    3 => '投票發起日',
-    4 => '投票 %s 被保存了',
-    5 => '編輯投票',
-    6 => '投票編號',
-    7 => '(不可有空隔)',
-    8 => '出現在首頁上',
-    9 => '問題',
-    10 => '答案 / 投票',
-    11 => '取得投票 (%s) 答案時發生錯誤。',
-    12 => '取得投票 (%s) 問題時發生錯誤。',
-    13 => '新加投票',
-    14 => '保存',
-    15 => '取消',
-    16 => '刪除',
-    17 => '請輸入一個投票 ID',
-    18 => '投票清單',
-    19 => '點擊下面的投票可修改或刪除它，點擊上面的新投票可創造一個新的。',
-    20 => '投票者',
-    21 => '存取被拒絕',
-    22 => "企圖存取不允許的投票已被記錄。請<a href=\"{$_CONF['site_admin_url']}/poll.php\">反回投票管理員晝面</a>。",
-    23 => '新投票',
-    24 => '管理員首頁',
-    25 => '是',
-    26 => '否'
-);
-
-###############################################################################
-# admin/topic.php
-
-$LANG27 = array(
-    1 => '主題編輯器',
-    2 => '主題編號',
-    3 => '主題名',
-    4 => '主題圖像',
-    5 => '(不可有空隔)',
-    6 => '刪除主題會同時刪除所有有關的文章和組件！',
-    7 => '你需要提供主題編號和主題名！',
-    8 => '主題管理員',
-    9 => '點擊下面的主題可修改或刪除它，點擊上面的新主題可創造一個新的。在括弧裏你將發現你的存取級別。',
-    10 => '排序次序',
-    11 => '文章 / 頁',
-    12 => '存取被拒絕',
-    13 => "企圖存取不允許的主題已被記錄。請<a href=\"{$_CONF['site_admin_url']}/topic.php\">反回主題管理員晝面</a>.",
-    14 => '排序方法',
-    15 => '按字母排序',
-    16 => '預設是',
-    17 => '新主題',
-    18 => '管理員首頁',
-    19 => '保存',
-    20 => '取消',
-    21 => '刪除',
-    22 => '預設',
-    23 => '用此主題作為新稿的預設主體',
-    24 => '(*)',
-    25 => '保存檔的題目',
-    26 => '用此題目作保存檔的默認題目。只准許一個題目。'
-);
-
-###############################################################################
-# admin/user.php
-
-$LANG28 = array(
-    1 => '用戶編輯器',
-    2 => '用戶編號',
-    3 => '用戶名',
-    4 => '全名',
-    5 => '密碼',
-    6 => '安全級別',
-    7 => '電郵地址',
-    8 => '首頁',
-    9 => '(不可有空隔)',
-    10 => '你需要提供用戶名、全名、安全級別和電郵地址。',
-    11 => '用戶管理員',
-    12 => '點擊下面的用戶可修改或刪除它，點擊上面的新用戶可創造一個新的。在下面的表格中輸入部份的用戶名、電郵位址或全名 (e.g.*son* or *.edu) ，可做簡單的尋找。',
-    13 => '安全級別',
-    14 => '登記日',
-    15 => '新用戶',
-    16 => '管理員首頁',
-    17 => '改密碼',
-    18 => '取消',
-    19 => '刪除',
-    20 => '保存',
-    21 => '用戶名已經存在',
-    22 => '錯誤',
-    23 => '大量增加',
-    24 => '大量輸入用戶',
-    25 => '你可一次過輸入大量的用戶到 Geeklog 。輸入檔案必須是一個用 tab 分隔的文字檔案，欄位元的順序是︰全名、用戶名、電郵地址。每一個被輸入的用戶將會收到一個以電子郵件發送的隨機密碼。檔案中每一行是一個用戶。沒遵守這些要求將造成問題，也許需要手動作業，請再三檢查你檔案！',
-    26 => '尋找',
-    27 => '結果範圍',
-    28 => '在這裏打鉤可刪除這張圖片',
-    29 => '路徑',
-    30 => '輸入',
-    31 => '新用戶',
-    32 => '處理完成。輸入了 %d 個；%d 個失敗',
-    33 => '遞交',
-    34 => '錯誤︰你必須指定上載檔案。',
-    35 => '最後一次登入',
-    36 => '(從未)'
-);
-
-###############################################################################
-# admin/moderation.php
-
-$LANG29 = array(
-    1 => '批准',
-    2 => '刪除',
-    3 => '編輯',
-    4 => '簡要描述',
-    10 => '標題',
-    11 => '開始日期',
-    12 => 'URL',
-    13 => '類別',
-    14 => '日期',
-    15 => '主題',
-    16 => '用戶名',
-    17 => '全名',
-    18 => '電子郵件',
-    34 => '命令和控制',
-    35 => '已遞交的文章',
-    36 => '已遞交的連結',
-    37 => '已遞交的事件',
-    38 => '遞交',
-    39 => '此時沒有遞交的東西',
-    40 => '申請的用戶'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG30 = array(
-    1 => 'Sunday',
-    2 => 'Monday',
-    3 => 'Tuesday',
-    4 => 'Wednesday',
-    5 => 'Thursday',
-    6 => 'Friday',
-    7 => 'Saturday',
-    8 => '新增事件',
-    9 => 'Geeklog 事件',
-    10 => '事件給',
-    11 => '主日曆',
-    12 => '我的日曆',
-    13 => '一月',
-    14 => '二月',
-    15 => '三月',
-    16 => '四月',
-    17 => '五月',
-    18 => '六月',
-    19 => '七月',
-    20 => '八月',
-    21 => '九月',
-    22 => '十月',
-    23 => '十一月',
-    24 => '十二月',
-    25 => '回到',
-    26 => '整日',
-    27 => '星期',
-    28 => '個人日曆︰',
-    29 => '公眾日曆',
-    30 => '刪除事件',
-    31 => '新增',
-    32 => '事件',
-    33 => '星期',
-    34 => '時間',
-    35 => '迅速增加',
-    36 => '遞交',
-    37 => '抱歉，本站並不提供個人日曆。',
-    38 => '個人事件編輯器',
-    39 => '日',
-    40 => '周',
-    41 => '月'
-);
-
-###############################################################################
-# admin/mail.php
-
-$LANG31 = array(
-    1 => "{$_CONF['site_name']} 郵件程式",
-    2 => '寄件人',
-    3 => '回復到',
-    4 => '主題',
-    5 => '內容',
-    6 => '收件人︰',
-    7 => '所有用戶',
-    8 => '管理員',
-    9 => '選項',
-    10 => 'HTML',
-    11 => '迫切的訊息！',
-    12 => '發送',
-    13 => '重設',
-    14 => '忽略用戶設定',
-    15 => '錯誤，當發送到︰',
-    16 => '訊息已發送到︰',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>發送其他信件</a>",
-    18 => '收件人',
-    19 => '注意︰如果你希望發送訊息到本站所有的成員，請在小組選擇欄位中選擇 Logged-in Users group。',
-    20 => "已發送 <successcount> 個訊息，有 <failcount> 個不能發送。發送的細節在下面。如不想看細節，你可<a href=\"{$_CONF['site_admin_url']}/mail.php\">發送其他訊息</a> 或 <a href=\"{$_CONF['site_admin_url']}/moderation.php\">反回管理員首頁</a>。",
-    21 => '失敗',
-    22 => '成功 ',
-    23 => '全部成功 ',
-    24 => '全部失敗',
-    25 => '-- 請選小組 --',
-    26 => '請填寫所有表格上的欄位元和選擇一個小組。'
-);
-
-###############################################################################
-# admin/plugins.php
-
-$LANG32 = array(
-    1 => '安裝插件能損壞你的主系統。 必需要特別小心。 最好不要安裝任何你不瞭解的插件。',
-    2 => '插件安裝聲明',
-    3 => '插件安裝表格',
-    4 => '插件檔案',
-    5 => '插件清單',
-    6 => '警告︰插件已經被安裝過！',
-    7 => '你想安裝的插件已經存在，請先把它刪除再安裝。',
-    8 => '插件不能通過相容性校驗。',
-    9 => '這插件要求一個更新版本的 Geeklog. 你可以升級你的<a href="http://www.geeklog.net">Geeklog</a>或是另找一個適合的版本。',
-    10 => '<br><b>沒有安裝的插件。</b><br><br>',
-    11 => '若想修改或刪除插件，點擊以下插件的名稱。這會顯示插件的詳細內容和製作者的網站。安裝的版本和從代碼中來的版本都會顯出來。這會讓你知道此插件是否應該更新。若要安裝或升級插件請諮詢它的說明文件。',
-    12 => 'plugineditor() 找不到插件名',
-    13 => '插件編輯器',
-    14 => '新插件',
-    15 => '管理員首頁',
-    16 => '插件名字',
-    17 => '插件版本',
-    18 => 'Geeklog 版本',
-    19 => '使有效',
-    20 => '是',
-    21 => '否',
-    22 => '安裝',
-    23 => '保存',
-    24 => '取消',
-    25 => '刪除',
-    26 => '插件名',
-    27 => '插件首頁',
-    28 => '已安裝的插件版本',
-    29 => 'Geeklog 版本',
-    30 => '刪除插件？',
-    31 => '你肯定要刪除這個插件嗎？這麽會刪除所有有關這插件的檔、資料和資料結構。如果你肯定的，請再點擊下面表格中的刪除鈕。',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => '代碼版本',
-    34 => '更新'
-);
-
-###############################################################################
-# admin/syndication.php
-
-$LANG33 = array(
-    1 => '建立文流',
-    2 => '保存',
-    3 => '刪除',
-    4 => '取消',
-    10 => '內容辛迪加',
-    11 => '新文流',
-    12 => '管理處首頁',
-    13 => '若要修改或刪除一個文流, 再一下主題上點擊. 若要建立新的文流, 點擊以上的新文流.',
-    14 => '標題',
-    15 => '種類',
-    16 => '檔案名',
-    17 => '格式',
-    18 => '最後一次更新',
-    19 => '啟動',
-    20 => '是',
-    21 => '否',
-    22 => '<i>(無文流)</i>',
-    23 => '所有文章',
-    24 => '文流編輯',
-    25 => '文流標題',
-    26 => '限定',
-    27 => '條目長度',
-    28 => '(0 = 無內文, 1 = 整文, other = 限定於此字數.)',
-    29 => '說明',
-    30 => '最後一次更新',
-    31 => '字元集',
-    32 => '語言',
-    33 => '內容',
-    34 => '條目',
-    35 => '小時',
-    36 => '選擇文流種類',
-    37 => '你有最少一個安裝了的插件能配合內容辛迪加.一下你需要選擇你是否要建立一個主系統文流或插件文流.',
-    38 => '錯誤: 缺少資訊',
-    39 => '請填入文流標題, 說明, 和檔案名.',
-    40 => '請輸入條目數目或小時數目.',
-    41 => '連結',
-    42 => '事件'
-);
-
-###############################################################################
-# confirmation and error messages
-
-$MESSAGE = array(
-    1 => "我們已電郵了你的密碼到你的電郵信箱，請跟隨郵件中的指示。多謝使用 {$_CONF['site_name']}",
-    2 => "多謝遞交你的文章到 {$_CONF['site_name']} 。只要經過我們員工的核對，你的文章將出現在我們的綱頁上。",
-    3 => "多謝遞交連結到 {$_CONF['site_name']} 。只要經過我們員工的核對，你的連結將出現在我們的綱頁上。",
-    4 => "多謝遞交事件到 {$_CONF['site_name']} 。只要經過我們員工的核對，你的事件將出現在我們的<a href={$_CONF['site_url']}/calendar.php>日曆</a>上。",
-    5 => '你的帳戶設定已被保存了。',
-    6 => '你的個人設定已被保存了。',
-    7 => '你的評論介面設定已被保存了。',
-    8 => '你已退出。',
-    9 => '你的文章已被保存了。',
-    10 => '你的文章已被刪除了。',
-    11 => '你的組件已被保存了。',
-    12 => '你的組件已被刪除了。',
-    13 => '你的主題已被保存了。',
-    14 => '你的主題和所有相關的文章已被刪除了。',
-    15 => '你的連結已被保存了。',
-    16 => '你的連結已被刪除了。',
-    17 => '你的事件已被保存了。',
-    18 => '你的事件已被刪除了。',
-    19 => '你的投票已被保存了。',
-    20 => '你的投票已被刪除了。',
-    21 => '用戶已被保存了。',
-    22 => '用戶已被刪除了。',
-    23 => '增加事件到你的日歷時發生錯誤，缺少了事件編號。',
-    24 => '事件已增加到你的日曆中。',
-    25 => '你要登入才可開啟你的個人日曆。',
-    26 => '事件已從你的日曆中移除。',
-    27 => '資訊已發送。',
-    28 => '插件已被保存了。',
-    29 => '抱歉，本站並不提供個人日曆。',
-    30 => '存取被拒絕',
-    31 => '抱歉，你不能進入文章管理的首頁。請注意你的企圖已被記錄。',
-    32 => '抱歉，你不能進入主題管理的首頁。請注意你的企圖已被記錄。',
-    33 => '抱歉，你不能進入組件管理的首頁。請注意你的企圖已被記錄。',
-    34 => '抱歉，你不能進入連結管理的首頁。請注意你的企圖已被記錄。',
-    35 => '抱歉，你不能進入事件管理的首頁。請注意你的企圖已被記錄。',
-    36 => '抱歉，你不能進入投票管理的首頁。請注意你的企圖已被記錄。',
-    37 => '抱歉，你不能進入用戶管理的首頁。請注意你的企圖已被記錄。',
-    38 => '抱歉，你不能進入 Plug-in 管理的首頁。請注意你的企圖已被記錄。',
-    39 => '抱歉，你不能進入電郵管理的首頁。請注意你的企圖已被記錄。',
-    40 => '系統訊息',
-    41 => '抱歉，你不能進入字詞替換的首頁。請注意你的企圖已被記錄。',
-    42 => '你的字詞已被保存了。',
-    43 => '你的字詞已被刪除了。',
-    44 => '插件已被安裝了。',
-    45 => '插件已被刪除了。',
-    46 => '抱歉，你不能進入資料庫備份程式。請注意你的企圖已被記錄。',
-    47 => '這只適用於 *nix 如果你的作業系統是 *nix，那麽你的緩衝器已被清除了。如果你的作業系統是 Windows，你要手動尋找檔命名為 adodb _ *.php 的檔案並把它們除去。',
-    48 => "感謝你申請成為 {$_CONF['site_name']} 的會員。只要經過我們員工的核對，我們會把密碼寄到你所登記的電郵中。",
-    49 => '你的小組已被保存了。',
-    50 => '小組已被刪除了。',
-    51 => '此用戶名已有人在用。請選擇另一個。',
-    52 => '你給的電信位址不像是有效。',
-    53 => '你的新密碼已被接受。現在以下請用你的新密碼來登入.',
-    54 => '你要求新密碼的期限以過。請在下面從新要求。',
-    55 => '已經給你寄了一封電信。請照此信的說明來設定新密碼。',
-    56 => '你供給的電信位址已有別的用戶在使用。',
-    57 => '你的用戶已經成功地刪除了。',
-    58 => '你的文流已成功的保存了.',
-    59 => '你的文流已成功的刪除了.',
-    60 => '插件已經更新成功',
-    61 => '插件 %s: 不知名的資訊占位元符'
-);
-
-###############################################################################
-
-$LANG_ACCESS = array(
-    'access' => '存取',
-    'ownerroot' => '所有者/Root',
-    'group' => '小組',
-    'readonly' => '唯讀',
-    'accessrights' => '存取權',
-    'owner' => '所有者',
-    'grantgrouplabel' => '給予之上小組編輯權利',
-    'permmsg' => '注意︰會員是指所有註冊和登入的用戶；而匿名是指所有非註冊的流覽者或沒有登入的用戶。',
-    'securitygroups' => '安全小組',
-    'editrootmsg' => "即使你是用戶管理員；但你不能編輯 root 用戶。你能編輯所有的用戶除了 root 用戶。請注意所有企圖非法地編輯 root 用戶的動作已被記錄。請回到<a href=\"{$_CONF['site_admin_url']}/user.php\">用戶管理頁</a>去。",
-    'securitygroupsmsg' => '選擇這位用戶屬於的小組。',
-    'groupeditor' => '小組編輯器',
-    'description' => '描述',
-    'name' => '名字',
-    'rights' => '許可權',
-    'missingfields' => '缺少欄位',
-    'missingfieldsmsg' => '你必須提供小組的名字和描述',
-    'groupmanager' => '小組管理員',
-    'newgroupmsg' => '點擊下面的小組可修改或刪除它，點擊上面的新小組可創造一個新的。請注意所核心小組不能被刪除。',
-    'groupname' => '組名',
-    'coregroup' => '核心小組',
-    'yes' => '是',
-    'no' => '否',
-    'corerightsdescr' => "這個小組的許可權不能被編輯，因為這是個 {$_CONF['site_name']} 的核心小組。以下是這小組的許可權清單(唯讀的)。",
-    'groupmsg' => '安全小組在這綱站是有等級制度的。當增加這個小組到另一組別，這個小組將得到那組別的許可權。請盡可能小組加下列的組別去。如果這小組需要特別的許可權，你可以在以下的"權利"區域中挑選。要把小組加到組別去，你只需要在組別旁邊的挑選盒打鉤。',
-    'coregroupmsg' => "因為這是個 {$_CONF['site_name']} 的核心小組，這個小組的許可權不能被編輯。以下是這小組的組別清單(唯讀的)。",
-    'rightsdescr' => '小組的許可權可以是來自於小組本身或是這小組所屬的組別。以下的許可權中如沒有檢驗盒即代表這許可權是來自於小組所屬的組別；如有檢驗盒即代表你可以直接把許可權給予這小組。',
-    'lock' => '鎖住',
-    'members' => '成員',
-    'anonymous' => '匿名',
-    'permissions' => '許可權',
-    'permissionskey' => 'R = 唯讀， E = 編輯，有編輯權即有唯讀權',
-    'edit' => '編輯',
-    'none' => '沒有',
-    'accessdenied' => '存取被拒絕',
-    'storydenialmsg' => "因未被批准，你不可以觀看這個文章。這是可能是因為你並不是 {$_CONF['site_name']} 的會員。請<a href=users.php?mode=new>成為會員</a>。",
-    'eventdenialmsg' => "因未被批准，你不可以觀看這個事件。這是可能是因為你並不是 {$_CONF['site_name']} 的會員。請<a href=users.php?mode=new>成為會員</a>。",
-    'nogroupsforcoregroup' => '這小組不屬於任何其他的小組',
-    'grouphasnorights' => ' 這小組沒有管理權。',
-    'newgroup' => '新小組',
-    'adminhome' => '管理員首頁',
-    'save' => '保存',
-    'cancel' => '取消',
-    'delete' => '刪除',
-    'canteditroot' => '因為你不屬於 Root 小組，所以你對 Root 小組的修改被拒絕了。如有問題請與系統管理員聯繫。',
-    'listusers' => '列出用戶',
-    'listthem' => '列出',
-    'usersingroup' => '屬於 "%s" 小組的用戶',
-    'usergroupadmin' => '用戶小組管理',
-    'add' => '加入',
-    'remove' => '免除',
-    'availmembers' => '可用的成員',
-    'groupmembers' => '小組成員',
-    'canteditgroup' => '若要修改此小組, 你必要時這個小組的成員. 若你認為這是錯誤, 請你聯絡系統管理員.',
-    'cantlistgroup' => '要看此小組的會員，你必須是此小組的會員。你若認為這是錯誤，請聯絡系統管理員。'
-);
-
-###############################################################################
-# admin/database.php
-
-$LANG_DB_BACKUP = array(
-    'last_ten_backups' => '最後十個備份',
-    'do_backup' => '做備份',
-    'backup_successful' => '資料庫備份完成。',
-    'no_backups' => '沒有備份',
-    'db_explanation' => '要做新的 Geeklog 備份，點擊以下的按鈕',
-    'not_found' => "不正確的路徑或 mysqldump 程式不可執行。<br>檢查<strong>$_DB_mysqldump_path</strong>定義在 config.php.<br>變數現在被定義為︰<var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => '備份失敗︰檔案是 0 大小',
-    'path_not_found' => "{$_CONF['backup_path']} 不存在或不是目錄",
-    'no_access' => "錯誤︰目錄 {$_CONF['backup_path']} ，不能存取。",
-    'backup_file' => '備份檔案',
-    'size' => '大小',
-    'bytes' => '位元組',
-    'total_number' => '總備份次數: %d'
-);
-
-###############################################################################
-
-$LANG_BUTTONS = array(
-    1 => '首頁',
-    2 => '聯絡',
-    3 => '投稿',
-    4 => '連結',
-    5 => '投票',
-    6 => '日曆',
-    7 => '本站統計資料',
-    8 => '個人化',
-    9 => '搜索',
-    10 => '進階搜尋'
-);
-
-###############################################################################
-# 404.php
-
-$LANG_404 = array(
-    1 => '404 錯誤',
-    2 => '咦，我到處都看過了但找不到<b>%s</b>.',
-    3 => "<p>很抱歉，但你要求的檔不存在。請檢查<a href=\"{$_CONF['site_url']}\">主頁</a>或<a href=\"{$_CONF['site_url']}/search.php\">搜索頁</a>看看能發現什麽。"
-);
-
-###############################################################################
-# login form
-
-$LANG_LOGIN = array(
-    1 => '要求登入',
-    2 => '抱歉，要求登入才可存取這個區域。',
-    3 => '登入',
-    4 => '新用戶'
-);
-
-###############################################################################
-# pdfgenerator.php
-
-$LANG_PDF = array(
-    1 => 'PDF 版本的作用已被禁止',
-    2 => '所提供的檔沒有呈遞。檔已收到，但是無法處理。請肯定你所提交的檔是 html 格式的檔寫於 xHTML 的標準。請注意過分複雜的 html 檔也可能無法正確呈遞。你的檔提交的結果是 0 bytes 而且已被刪除。你若肯定你的檔應該順利的呈遞，其再次提交。',
-    3 => '不知名的PDF 檔製作錯誤。',
-    4 => "沒提供頁數資料或你要用以下的特別 PDF 製作工具。若你認為你所得到的這頁是錯誤。 請聯絡系統管理員。要不然，你可用以下的表格來特別製作 PDF。",
-    5 => '正在裝置你的檔。',
-    6 => '你的檔被裝置時請等待。',
-    7 => '你可用右擊以下的按鈕，然後選 \'save target...\' or \'save link location...\' 來存續你的檔的一個拷貝。',
-    8 => "在配置檔案裏的 HTMLDoc二進位檔案路徑有錯誤，或此系統無法執行此檔案。若此問題繼續發生，請聯絡網站管理員。",
-    9 => 'PDF 製作器',
-    10 => "這是特別的 PDF 製作工具。它會將任何 URL 轉換成 PDF 版本。請注意，有些網頁不會正確的被這工具處理成功。這是 HTMLDoc PDF 製作工具的有限之處，而這樣的錯誤不需要報告給此網站的管理員。",
-    11 => 'URL',
-    12 => '製作 PDF!',
-    13 => '此伺服器的 PHP 配置不准許 fopen() 命令用在 URL 上。 系統管理員必須先修改  php.ini 檔案，然後設定 allow_url_fopen 到 On',
-    14 => '你要求的 PDF 不存在或你在非法的入取一個檔案。'
-);
-
+<?php
+
+###############################################################################
+# chinese_traditional_utf-8.php
+#
+# Last Modified: 2006-01-10
+# Version: 1.4.0
+#
+# This is the Chinese Traditional (UTF-8) language set for GeekLog 1.4.0
+#
+# Copyright (C) 2003 Samuel M. Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => '作者︰',
+    2 => '讀整文',
+    3 => '個評論',
+    4 => '編輯',
+    5 => '投票',
+    6 => '結果',
+    7 => '投票結果',
+    8 => '投票',
+    9 => '管理者功能︰',
+    10 => '提交物',
+    11 => '文章',
+    12 => '組件',
+    13 => '主題',
+    14 => '連結',
+    15 => '事件',
+    16 => '投票',
+    17 => '用戶',
+    18 => 'SQL 質問',
+    19 => '退出',
+    20 => '用戶訊息︰',
+    21 => '用戶名',
+    22 => '用戶識別號',
+    23 => '安全等級',
+    24 => '匿名',
+    25 => '回復',
+    26 => '以下評論只屬張貼者個人觀點。',
+    27 => '最近發表的',
+    28 => '刪除',
+    29 => '沒有評論。',
+    30 => '舊的文章',
+    31 => '允許的 HTML 標記:',
+    32 => '錯誤，無效的用戶名',
+    33 => '錯誤，不能寫系統日誌;',
+    34 => '錯誤',
+    35 => '退出',
+    36 => '於',
+    37 => '沒有文章',
+    38 => '內容辛迪加',
+    39 => '使新',
+    40 => '你的服務器的 <tt>php.ini</tt> 裏設定為 <tt>register_globals = Off</tt>. 可是此軟件需要將 <tt>register_globals</tt> 設定成 <strong>on</strong>. 所以在你繼續以前，必須將它設定為<strong>on</strong>，然後重新開機.',
+    41 => '客人',
+    42 => '作者:',
+    43 => '回復這個',
+    44 => '母體',
+    45 => 'MySQL 錯誤號碼',
+    46 => 'MySQL 錯誤訊息',
+    47 => '用戶功能',
+    48 => '帳戶訊息',
+    49 => '風格選擇',
+    50 => '錯誤的 SQL statement',
+    51 => '幫助',
+    52 => '新',
+    53 => '管理者首頁',
+    54 => '不能打開文件。',
+    55 => '錯處',
+    56 => '投票',
+    57 => '密碼',
+    58 => '登入',
+    59 => "沒有帳戶？<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登記</a>",
+    60 => '發表評論',
+    61 => '新增帳戶',
+    62 => '字',
+    63 => '評論設定',
+    64 => '把文章電郵給朋友',
+    65 => '觀看可列印的版本',
+    66 => '我的日曆',
+    67 => '歡迎來到',
+    68 => '首頁',
+    69 => '聯絡',
+    70 => '搜尋',
+    71 => '投稿',
+    72 => '網路資源',
+    73 => '投票中心',
+    74 => '日曆',
+    75 => '進階搜索',
+    76 => '本站統計數據',
+    77 => '插件',
+    78 => '即將發生的事',
+    79 => '新鮮的東西',
+    80 => '個新文章(',
+    81 => '新的文章(',
+    82 => ' 小時內)',
+    83 => '評論',
+    84 => '連結',
+    85 => '最近四十八小時',
+    86 => '沒有新的評論',
+    87 => '最近兩個星期',
+    88 => '沒有新的連結',
+    89 => '沒有事發生',
+    90 => '首頁',
+    91 => '載入這頁用了',
+    92 => '秒',
+    93 => '版權',
+    94 => '此網站所有的商標和版權屬於他們各自的所有者.',
+    95 => '動力於',
+    96 => '小組',
+    97 => '字詞單',
+    98 => '插件',
+    99 => '文章',
+    100 => '沒有新的文章',
+    101 => '你的事件',
+    102 => '本站的事件',
+    103 => '資料庫備份',
+    104 => '由',
+    105 => '寄給用戶',
+    106 => '採樣數:',
+    107 => 'GL 版本測試',
+    108 => '清除緩衝貯存區',
+    109 => '報告濫用',
+    110 => '報告此濫登文給網站管理員',
+    111 => '看PDF 版本',
+    112 => '登記用戶',
+    113 => '使用說明',
+    114 => '跡回',
+    115 => '沒有新跡回的評論',
+    116 => '跡回',
+    117 => '目錄',
+    118 => '請繼續看下頁',	
+    119 => "丟失了<a ref=\"{$_CONF['site_url']}/users.php?mode=getpassword\">密碼</a>?",
+    120 => '永久聯結此評論',	
+    121 => '評論 (%d)',
+    122 => '跡回 (%d)',	
+    123 => '准許用所有的HTML'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+
+
+    1 => '事件日曆',
+    2 => '抱歉，沒有事件。',
+    3 => '時',
+    4 => '地',
+    5 => '事',
+    6 => '新增事件',
+    7 => '即將發生的事',
+    8 => '在將這事加進你的日曆之後，你可點擊 "我的日曆" 來觀看',
+    9 => '加進我的日曆',
+    10 => '從我的日曆中去除',
+    11 => "把這事加進 {$_USER['username']} 的日曆",
+    12 => '事件',
+    13 => '開始',
+    14 => '結束',
+    15 => '回到日曆'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => '發表評論',
+    2 => '發表方式',
+    3 => '退出',
+    4 => '新增帳戶',
+    5 => '用戶名',
+    6 => '本站需要登入才可發表評論，請登入。如果你沒有帳戶，請使用下面的表格登記。',
+    7 => '你最後發表的評論是在 ',
+    8 => " 秒之前。本站限定至少 {$_CONF['commentspeedlimit']} 秒後才可再發表評論",
+    9 => '評論',
+    10 => '送出報告',
+    11 => '發表評論',
+    12 => '請填寫標題注評論欄',
+    13 => '供你參考',
+
+    14 => '預覽',
+    15 => '報告這篇濫登文',
+    16 => '標題',
+    17 => '錯誤',
+    18 => '重要的東西',
+    19 => '請儘量不要離題。',
+    20 => '盡可能回復別人的評論，而不是開新的評論。',
+    21 => '為避免重複，發表評論之前請先讀別人所寫的。',
+    22 => '請儘量用簡潔的標題。',
+    23 => '我們不會公開你的電郵地址。',
+    24 => '匿名用戶',
+    25 => '你肯定想要報告此濫登文給網站管理員否?',
+    26 => '%s 報告以下濫登的評論:',
+    27 => '濫用報告'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => '用戶概況',
+    2 => '用戶名',
+    3 => '全名',
+    4 => '密碼',
+    5 => '電子郵件',
+    6 => '首頁',
+    7 => '小傳',
+    8 => 'PGP 鑰匙',
+    9 => '保存設定',
+    10 => '給用戶的最後十個評論',
+    11 => '沒有評論',
+    12 => '用戶設定',
+    13 => '每夜電郵文摘',
+    14 => '這是個隨機的密碼，請儘快更改。要更改密碼請先登入系統，然後點擊帳戶訊息。',
+    15 => "你在 {$_CONF['site_name']} 的帳戶已建立了。請使用以下訊息登入系統並保留這郵件作日後參考。",
+    16 => '你的帳戶訊息',
+    17 => '帳戶並不存在',
+    18 => '你提供的不是一個有效的的電郵',
+    19 => '用戶名或電郵已經存在',
+    20 => '提供的不是一個有效的的電郵',
+    21 => '錯誤',
+    22 => "登記用 {$_CONF['site_name']} ！",
+    23 => "在 {$_CONF['site_name']} 登記的用戶可享有的會員好處。他們可以用自己的名字發表評論和存取本站的資源。請注意本站<b><i>絕不會</i></b>公開用戶的電郵。",
+    24 => '你的密碼將被送到你輸入的電郵信箱',
+    25 => '忘記了你的密碼嗎？',
+    26 => '請你輸入的用戶名和點擊電郵密碼，我們會發送一個新的密碼到你的電郵信箱。',
+    27 => '現在就登記！',
+    28 => '電郵密碼',
+    29 => '退出時',
+    30 => '登入時',
+    31 => '需要登入才可用',
+    32 => '署名',
+    33 => '絕不會公開',
+    34 => '這是你的真名',
+    35 => '要改變請輸入密碼',
+    36 => '開始是 http://',
+    37 => '將會附加在你發表的評論上',
+    38 => '你的簡介',
+    39 => '你的公共 PGP 鑰匙',
+    40 => '沒有主題圖示',
+    41 => '願意主持',
+    42 => '日期格式',
+    43 => '文章限度',
+    44 => '沒有組件',
+    45 => '顯示設定',
+    46 => '不包括的',
+    47 => '新組件配置為',
+    48 => '主題',
+    49 => '文章裏沒有圖像',
+    50 => '不要打鉤如果你不感興趣',
+    51 => '只是新文章',
+    52 => '預設值的是',
+    53 => '每晚接收當日的文章',
+    54 => '打鉤如果你不看這些主題或作者。',
+    55 => '如果你沒有選擇，這意味你要用預設的組件。如果你選擇組件，所有預設的箱將被忽略。預設的東西會用粗筆劃顯示。',
+    56 => '作者',
+    57 => '顯示方式',
+    58 => '排序方式',
+    59 => '評論限制(個)',
+    60 => '可顯示你的評論嗎？',
+    61 => '最新或最舊的先？',
+    62 => '預設是100',
+    63 => '密碼已被發送，你會很快收到的。',
+    64 => '評論設定',
+    65 => '請嘗試再登入',
+    66 => "你可能打錯了，請嘗試再登入。你是否<a href=\"{$_CONF['site_url']}/users.php?mode=new\">新用戶</a>？",
+    67 => '成員自',
+    68 => '記住我為',
+    69 => '在登入以後，我們應該記住你多久？',
+    70 => "定做 {$_CONF['site_name']} 的佈局和內容",
+    71 => "一個 {$_CONF['site_name']} 的主要特點是你可以定做自己的佈局和內容，但是你必須是本站的會員。<a href=\"{$_CONF['site_url']}/users.php?mode=new\">在此登記</a>。如果你已經是登記，請使用左邊的區域登入。",
+    72 => '題材',
+    73 => '語言',
+    74 => '改變本站外表',
+    75 => '主題已電郵給',
+    76 => '請只選擇你感興趣的主題，因為所有當日新張貼的文章將會電郵到你的信箱。',
+    77 => '相片',
+    78 => '你自己的圖片',
+    79 => '要刪除圖片，在這裏打鉤',
+    80 => '登入',
+    81 => '發送電子郵件',
+    82 => '用戶最近發表的十個文章為',
+    83 => '用戶發表統計',
+    84 => '文章總數︰',
+    85 => '評論總數︰',
+    86 => '尋找所有發表過的文章︰',
+    87 => '你的登入名',
+    88 => "有人(也許是你)要了新密碼 \"%s\" 於 {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n若你真的要這樣作, 請你點擊以下聯結:\n\n",
+    89 => "你若不想要這樣作, 請忽視這信息。這項事就將會被拋棄，而你的密碼就保持原有.\n\n",
+    90 => '你可在下面輸入一個新的密碼。請注意你的舊密碼任然有效直到你將此表提交。',
+    91 => '設定新密碼',
+    92 => '輸入新密碼',
+    93 => '你在 %d 秒鐘前剛要了一個新密碼. 此站規定最少要 %d 秒鐘以後才可再次要求新密碼。',
+    94 => '將用戶 \'%s\' 刪除',
+    95 => '單據下面的 \'刪除用戶\' 便將你在我們資料庫裏的用戶。請注意，你以其用戶所登載過的文章和評論不會刪除，可是會以無名作者的身份顯示。',
+    96 => '刪除用戶',
+    97 => '確定用戶刪除',
+    98 => '你肯定要刪除你的用戶嗎? 其後你就不在能使用此站,除非你重新設定新用戶. 若你肯定的話請再次單據下面的 “刪除用戶”.',
+    99 => '隱私選項於',
+    100 => '管理員來信',
+    101 => '准許管理員來信',
+    102 => '用戶來信',
+    103 => '准許其他用戶來信',
+    104 => '顯示聯機狀況',
+    105 => '讓在“誰在聯機”組件裏顯示',
+    106 => '位置',
+    107 => '顯示在你的公開簡介',
+    108 => '肯定新密碼',
+    109 => '再次輸入密碼',
+    110 => '目前的密碼',
+    111 => '請輸入目前的密碼',
+    112 => '你已超過准許的登入次數. 情稍候再努力.',
+    113 => '登入失敗',
+    114 => '賬戶已被中止',
+    115 => '你的賬戶已被中止, 你不能繼續登入. 請跟管理員聯絡.',
+    116 => '等待啟動的賬戶',
+    117 => '你的賬戶現在等待管理員的啟動. 在賬戶未批准以前, 你還不能登入.',
+    118 => "你的 {$_CONF['site_name']} 賬戶已被啟動. 你可通過以下的url 用先前以電信寄給你的用戶名 (<username>) 和密碼來登入.",
+    119 => "你若已忘記了你的密碼你可通過此 url 來要求一個新密碼",
+    120 => '帳戶已被啟動',
+    121 => '服務',
+    122 => '對不起, 目前禁止新用戶登記',
+    123 => "你是否 <a href=\"{$_CONF['site_url']}/users.php?mode=new\">新用戶</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => '沒有新聞可顯示',
+    2 => '沒有新文章可顯示。',
+    3 => '這也許是真的沒有新主題或是你的 %s 設定得太過限制性。',
+    4 => '今天頭條',
+    5 => '下頁',
+    6 => '上頁',
+    7 => '第一',
+    8 => '最終'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => '發送電子郵件時發生錯誤。請再嘗試。',
+    2 => '電郵已送出。',
+    3 => '請確定你在回復欄有一個可用的電子郵件地址。',
+    4 => '請填寫你的名字、回復欄、主題和內容',
+    5 => '錯誤：沒有這用戶。',
+    6 => '發生錯誤。',
+    7 => '用戶資料',
+    8 => '用戶名',
+    9 => '用戶名的 URL',
+    10 => '發送郵件到',
+    11 => '你的名字：',
+    12 => '回復到：',
+    13 => '主題：',
+    14 => '內容：',
+    15 => 'HTML 不會被翻譯。',
+    16 => '發送郵件',
+    17 => '把文章電郵給朋友',
+    18 => '收件人名字',
+    19 => '收件人電郵',
+    20 => '寄件人名字',
+    21 => '寄件人電郵',
+    22 => '所有欄都要填寫',
+    23 => "這電子郵件是由 %s (%s) 寄給你的，他認為你也許對這篇在 {$_CONF['site_url']} 的文章感興趣。這不是垃圾郵件(SPAM)，你的電郵地址也不會被紀錄。",
+    24 => '關於這個文章的評論在',
+    25 => '為幫助我們防止系統被濫用，你必須登入。',
+    26 => '這個表格允許你送電子郵件到你選擇的用戶中。請填寫所有的欄位。',
+    27 => '短信',
+    28 => '%s 寫道：',
+    29 => "來自於 {$_CONF['site_name']} 的每日文摘，給予：",
+    30 => ' 每日的時事通訊，給予：',
+    31 => '標題',
+    32 => '日期',
+    33 => '完整的文章在：',
+    34 => '電郵結束',
+    35 => '對不起，此用戶不願意收電信.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => '進階搜尋',
+    2 => '關鍵詞',
+    3 => '主題',
+    4 => '所有',
+    5 => '類型',
+    6 => '文章',
+    7 => '評論',
+    8 => '作者',
+    9 => '所有',
+    10 => '搜尋',
+    11 => '搜尋結果',
+    12 => '相配',
+    13 => '搜尋結果：沒有相配的',
+    14 => '沒有你尋找的東西︰',
+    15 => '請再嘗試',
+    16 => '主題',
+    17 => '日期',
+    18 => '作者',
+    19 => "搜尋整個 {$_CONF['site_name']} 的新舊文章資料庫",
+    20 => '日期',
+    21 => '到',
+    22 => '(日期格式 年-月-日 YYYY-MM-DD)',
+    23 => '採樣數',
+    24 => '找到',
+    25 => '個相配在',
+    26 => '個項目中，共用了',
+    27 => '秒',
+    28 => '沒有你所尋找的文章或評論',
+    29 => '文章和評論的結果',
+    30 => '沒有你所尋找的連結',
+    31 => '沒有你所尋找的插件',
+    32 => '事件',
+    33 => 'URL',
+    34 => '地點',
+    35 => '所有日子',
+    36 => '沒有你所尋找的事件',
+    37 => '事件的結果',
+    38 => '連結的結果',
+    39 => '連結',
+    40 => '事件',
+    41 => '搜尋的關鍵詞最少要有三個字。',
+    42 => '請使用 YYYY-MM-DD (年-月-日) 日期格式。',
+    43 => '整個短語',
+    44 => '所有字詞',
+    45 => '其中任何字詞',
+    46 => '以下',
+    47 => '以上',
+    48 => '作者',
+    49 => '日期',
+    50 => '採樣數',
+    51 => '聯結',
+    52 => '位置',
+    53 => '文章結果',
+    54 => '評論結果',
+    55 => '句子',
+    56 => '和',
+    57 => '或',
+    58 => '更多的結果 &gt;&gt;',
+    59 => '結果',
+    60 => '每頁',
+    61 => '改進搜尋'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => '本站統計數據',
+    2 => '系統點擊總數',
+    3 => '文章(評論)總數',
+    4 => '投票(獲得投票)總數',
+    5 => '連結(點擊)總數',
+    6 => '事件總數',
+    7 => '採樣數最高的十個文章',
+    8 => '文章標題',
+    9 => '採樣數',
+    10 => '看來本站沒有文章或是沒人觀看過本站的文章。',
+    11 => '最多評論的十個文章',
+    12 => '評論',
+    13 => '看來本站沒有文章或是沒人評論過本站的文章。',
+    14 => '最多人投票的十個選舉',
+    15 => '投票標題',
+    16 => '投票',
+    17 => '看來本站沒有投票或是沒人投過票。',
+    18 => '最多人點擊的十個連結',
+    19 => '連結',
+    20 => '點擊',
+    21 => '看來本站沒有連結或是沒人點擊過本站的連結。',
+    22 => '最多人寄出的十個文章',
+    23 => '電郵',
+    24 => '看來沒人寄出過本站的文章',
+    25 => '頭十個跡回評論的文章',
+    26 => '找不到跡回評論.',
+    27 => '用戶人數',
+    28 => '頭十項事件',
+    29 => '事件',
+    30 => '採樣數',
+    31 => '看來此站無事件, 或沒有人曾點擊過任何事件.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => '有什麽是相關的',
+    2 => '寄文章給朋友',
+    3 => '可印的文章格式',
+    4 => '文章選項',
+    5 => 'PDF 文章版本'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => '你需要登入才可發表 %s ',
+    2 => '登入',
+    3 => '新用戶',
+    4 => '發表一件事',
+    5 => '發表一個連結',
+    6 => '發表一個文章',
+    7 => '你需要登入',
+    8 => '發表',
+    9 => '在本站發表東西時請跟隨以下建議...<ul><li>填寫所有的欄<li>提供完全和準確的訊息<li>再三檢查那些 URLs</ul>',
+    10 => '標題',
+    11 => '連結',
+    12 => '開始日期',
+    13 => '結束日期',
+    14 => '地點',
+    15 => '描述',
+    16 => '如果是其他，請指定',
+    17 => '類別',
+    18 => '其他',
+    19 => '讀這先',
+    20 => '錯誤：缺少類別',
+    21 => '當選擇"其他"請提供一個類別名',
+    22 => '錯誤：缺少欄位',
+    23 => '請填寫所有的欄位',
+    24 => '你發表的已被保存了',
+    25 => '你的 %s 已被保存了',
+    26 => '限速',
+    27 => '用戶名',
+    28 => '主題',
+    29 => '文章',
+    30 => '你最後發表的是',
+    31 => " 秒之前。本站限定至少 {$_CONF['speedlimit']} 秒後才可再發表",
+    32 => '預覽',
+    33 => '文章 預覽',
+    34 => '退出',
+    35 => '不准許 HTML 標記',
+    36 => '發表模式',
+    37 => "加事件到 {$_CONF['site_name']} 會將你的事件加到主日曆中，其他的用戶可隨意地把它加進自己的個人日曆。請<b>不要</b>把你的個人事件譬如生日和周年紀念加進去。<br><br>只要管理員批准你的事件它將出現在主日曆上。",
+    38 => '加事件到',
+    39 => '主日曆',
+    40 => '個人日曆',
+    41 => '結束時間',
+    42 => '開始時間',
+    43 => '整日的事件',
+    44 => '地址 1',
+    45 => '地址 2',
+    46 => '城市/市鎮',
+    47 => '州',
+    48 => '郵政編碼',
+    49 => '事件類型',
+    50 => '編輯事件類型',
+    51 => '地點',
+    52 => '刪除',
+    53 => '新加帳戶'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => '要求認證',
+    2 => '拒絕！不正確的登入資料',
+    3 => '無效的密碼',
+    4 => '用戶名：',
+    5 => '密碼：',
+    6 => '這頁只供授權人員使用。<br>所有存取將被記錄和檢查。',
+    7 => '登入'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => '權力不足',
+    2 => '你沒有權去編輯這個組件。',
+    3 => '組件編輯器',
+    4 => '讀取此文流時發現錯誤，請在你的錯誤記錄檔案 error.log 裏看細節.',
+    5 => '組件標題',
+    6 => '主題',
+    7 => '所有',
+    8 => '組件安全水平',
+    9 => '組件次序',
+    10 => '組件類型',
+    11 => '入口組件',
+    12 => '正常組件',
+    13 => '入口組件選項',
+    14 => '文流 RDF 的 URL',
+    15 => '最後的文流 RDF 更新',
+    16 => '正常組件選項',
+    17 => '組件內容',
+    18 => '請填寫組件的標題和內容。',
+    19 => '組件管理員',
+    20 => '組件標題',
+    21 => '組件安全水平',
+    22 => '組件類型',
+    23 => '組件次序',
+    24 => '組件主題',
+    25 => '點擊下面的組件可修改或刪除它，點擊上面的新組件可創造一個新的。',
+    26 => '版面組件',
+    27 => 'PHP 組件',
+    28 => 'PHP 組件選項',
+    29 => '組件函數',
+    30 => '如果你想用自己的 PHP 函數組件，請在上面輸入函數的名字。為防止執行任性的編碼，PHP 組件函數名必須以 "phpblock_" 作開始 (e.g. phpblock_getweather)。請不要把空的圓括號 "()" 放在函數後。最後，建議你把所有的 PHP 組件放在 /path/to/geeklog/system/lib-custom.php 裏以方便系統升級。',
+    31 => 'PHP 組件錯誤︰函數 %s 並不存在。',
+    32 => '錯誤︰缺少欄位。',
+    33 => '在入口組件你必須把 URL 輸入到 .rdf 檔案',
+    34 => '在 PHP 組件你必須輸入主題和函數',
+    35 => '在正常組件你必須輸入主題和內容',
+    36 => '在版面組件你必須輸入內容',
+    37 => '不適當的 PHP 組件函數名',
+    38 => '為防止執行任性的編碼，PHP 組件函數名必須以 "phpblock_" 作開始 (e.g. phpblock_getweather)。',
+    39 => '放在那邊',
+    40 => '左',
+
+    41 => '右',
+    42 => '在本系統的預設組件你必須輸入組件標題和次序',
+    43 => '只可是首頁',
+    44 => '存取被拒絕',
+    45 => "企圖存取不允許的組件已被記錄。請<a href=\"{$_CONF['site_admin_url']}/block.php\">反回組件管理員晝面</a>。",
+    46 => '新組件',
+    47 => '管理員首頁',
+    48 => '組件名',
+    49 => ' (不可有空隔和必須是唯一的)',
+    50 => '求助文件的 URL',
+    51 => '包括 http://',
+    52 => '如果這裏留白，組件的求助文件圖示將不被顯示',
+    53 => '使有效',
+    54 => '保存',
+    55 => '取消',
+    56 => '刪除',
+    57 => '下移組件',
+    58 => '上移組件',
+    59 => '移組件到右邊',
+    60 => '移組件到左邊',
+    61 => '無標題',
+    62 => '文章限制',
+    63 => '錯誤組件標題',
+    64 => '你的標題不能空白或有HTML!',
+    65 => '次序'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => '事件編輯器',
+    2 => 'Error',
+    3 => '事件標題',
+    4 => '事件 URL',
+    5 => '事件開始日期',
+    6 => '事件結束日期',
+    7 => '事件地點',
+    8 => '事件描述',
+    9 => '(包括 http://)',
+    10 => '你必須提供日期時間、事件主題、與事件描述！',
+    11 => '事件管理員',
+    12 => '點擊下面的事件可修改或刪除它，點擊上面的新事件可創造一個新的。',
+    13 => '事件標題',
+    14 => '開始日期',
+    15 => '結束日期',
+    16 => '存取被拒絕',
+    17 => "企圖存取不允許的事件已被記錄。請<a href=\"{$_CONF['site_admin_url']}/event.php\">反回事件管理員晝面</a>。",
+    18 => '新事件',
+    19 => '管理員首頁',
+    20 => '保存',
+    21 => '取消',
+    22 => '刪除',
+    23 => '錯誤的開始日期.',
+    24 => '錯誤的結束日期.',
+    25 => '結束日期在開始日期前.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => '上篇文章',
+    2 => '下篇文章',
+    3 => '模式',
+    4 => '發表模式',
+    5 => '文章編輯器',
+    6 => '沒有文章',
+    7 => '作者',
+    8 => '保存',
+    9 => '預覽',
+    10 => '取消',
+    11 => '刪除',
+    12 => 'ID',
+    13 => '標題',
+    14 => '主題',
+    15 => '日期',
+    16 => '文章簡介',
+    17 => '文章內容',
+    18 => '點擊次數',
+    19 => '評論',
+    20 => 'Ping',
+    21 => '傳送 Ping',
+    22 => '文章清單',
+    23 => '點擊下面的文章編號可修改或刪除它，點擊下面的文章標題可觀看它，點擊上面的新文章可創造一個新的。',
+    24 => '你選的用戶名以有人在用。請用另一個用戶名。',
+    25 => '存續文章時發生錯誤',
+    26 => '文章預覽',
+    27 => '你若用 [unscaledX] 而不是[imageX], 圖像將會以原來的尺寸插入.',
+    28 => '<p><b>預覽</b>: 預覽有圖像的文章的最好方法是將它存為草稿。用預覽按鈕來預覽沒有圖像的文章。',
+    29 => '跡回',
+    30 => '上載錯誤',
+    31 => '你需要提供作者、標題和文章簡介！',
+    32 => '頭條的',
+    33 => '只可有一個頭條文章',
+    34 => '草稿',
+    35 => '是',
+    36 => '否',
+    37 => '更多來自於',
+    38 => '更多發表於',
+    39 => '電郵',
+    40 => '存取被拒絕',
+    41 => "企圖存取不允許的文章已被記錄。你可以以唯讀模式觀看下面文章。看完後請<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理員晝面</a>。",
+    42 => "企圖存取不允許的文章已被記錄。請<a href=\"{$_CONF['site_admin_url']}/story.php\">反回文章管理員晝面</a>。",
+    43 => '新文章',
+    44 => '管理員首頁',
+    45 => '存取權',
+    46 => '<b>注意︰</b>如果你把日期改成將來，在那個日期前這篇文章將不會被發表。並且 意味著這篇文章不會包括在你的 RDF 標題內，在搜尋和統計頁中會被忽略。',
+    47 => '圖像',
+    48 => '圖像',
+    49 => '右',
+    50 => '左',
+    51 => '請用特別格式的文字([imageX]、[imageX_right] 或 [imageX_left])來插入圖像， X 是你附加圖像的編號。注意︰你只可使用你附加的圖像否則你將無法保存你的文章。<BR><P><B>預覽</B>︰最佳預覽文章的方法是把文章保存成草稿而不是直擊預覽按鈕。只有沒有附加圖像時才用預覽按鈕。',
+    52 => '刪除',
+    53 => '沒有被使用。保存前，你必須把這個圖像包含在文章簡介或文章內容中。',
+    54 => '附加圖像未被使用',
+    55 => '保存你的文章時發生以下錯誤。請改正這些錯誤再保存',
+    56 => '顯示主題圖示',
+    57 => '看沒味縮小的圖像',
+    58 => '有期文章管理',
+    59 => '選項',
+    60 => '定期',
+    61 => '過期後自動存檔',
+    62 => '過期後自動刪除',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => '擴大內容編輯範圍',
+    68 => '縮小內容編輯範圍',
+    69 => '登高日期',
+    70 => '工具列選擇',
+    71 => '基本工具列',
+    72 => '普通工具列',
+    73 => '先進工具列',
+    74 => '先進II 工具列',
+    75 => '全部功能',
+    76 => '出版選項',
+    77 => '必須啟動Javascript 來用高級的編輯器。此選項可再config.php 關掉。',
+    78 => '點擊<a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">這裏</a>來用預設值的編輯器',
+    79 => '預覽',
+    80 => '編輯器',
+    81 => '出版選項',
+    82 => '圖像處理',
+    83 => '有期文章管理',
+    84 => '權限',
+    85 => '完全顯示'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => '主題編輯器',
+    2 => '主題編號',
+    3 => '主題名',
+    4 => '主題圖像',
+    5 => '(不可有空隔)',
+    6 => '刪除主題會同時刪除所有有關的文章和組件！',
+    7 => '你需要提供主題編號和主題名！',
+    8 => '主題管理員',
+    9 => '點擊下面的主題可修改或刪除它，點擊上面的新主題可創造一個新的。在括號裏你將發現你的存取級別。',
+    10 => '排序次序',
+    11 => '文章 / 頁',
+    12 => '存取被拒絕',
+    13 => "企圖存取不允許的主題已被記錄。請<a href=\"{$_CONF['site_admin_url']}/topic.php\">反回主題管理員晝面</a>.",
+    14 => '排序方法',
+    15 => '按字母排序',
+    16 => '預設是',
+    17 => '新主題',
+    18 => '管理員首頁',
+    19 => '保存',
+    20 => '取消',
+    21 => '刪除',
+    22 => '預設',
+    23 => '用此主題作為新稿的預設主體',
+    24 => '(*)',
+    25 => '保存文件的題目',
+    26 => '用此題目作保存文件的默認題目。只准許一個題目。',
+    27 => '或上載主題圖像',
+    28 => '最大',
+    29 => '文件上載出了問題'
+);
+
+###############################################################################
+# admin/user.php
+
+
+$LANG28 = array(
+    1 => '用戶編輯器',
+    2 => '用戶編號',
+    3 => '用戶名',
+    4 => '全名',
+    5 => '密碼',
+    6 => '安全級別',
+    7 => '電郵地址',
+    8 => '首頁',
+    9 => '(不可有空隔)',
+    10 => '你需要提供用戶名、全名、安全級別和電郵地址。',
+    11 => '用戶管理員',
+    12 => '點擊下面的用戶可修改或刪除它，點擊上面的新用戶可創造一個新的。在下面的表格中輸入部份的用戶名、電郵地址或全名 (e.g.*son* or *.edu) ，可做簡單的尋找。',
+    13 => '安全級別',
+    14 => '登記日',
+    15 => '新用戶',
+    16 => '管理員首頁',
+    17 => '改密碼',
+    18 => '取消',
+    19 => '刪除',
+    20 => '保存',
+    21 => '用戶名已經存在',
+    22 => '錯誤',
+    23 => '大量增加',
+    24 => '大量輸入用戶',
+    25 => '你可一次過輸入大量的用戶到志樂。輸入檔案必須是一個用 tab 分隔的文字檔案，欄位的順序是︰全名、用戶名、電郵地址。每一個被輸入的用戶將會收到一個以電子郵件發送的隨機密碼。檔案中每一行是一個用戶。沒遵守這些要求將造成問題，也許需要手動作業，請再三檢查你檔案！',
+    26 => '尋找',
+    27 => '結果範圍',
+    28 => '在這裏打鉤可刪除這張圖片',
+    29 => '路徑',
+    30 => '輸入',
+    31 => '新用戶',
+    32 => '處理完成。輸入了 %d 個；%d 個失敗',
+    33 => '遞交',
+    34 => '錯誤︰你必須指定上載檔案。',
+    35 => '最後一次登入',
+    36 => '(從未)',
+    37 => 'UID',
+    38 => '小組目錄',
+    39 => '密碼 (再次)',
+    40 => '登記日期',
+    41 => '最後登入日期',
+    42 => '被禁止的',
+    43 => '等待啟動',
+    44 => '等待准許',
+    45 => '有效的',
+    46 => '用戶狀態',
+    47 => '編輯',
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => '批准',
+    2 => '刪除',
+    3 => '編輯',
+    4 => '簡要描述',
+    10 => '標題',
+    11 => '開始日期',
+    12 => 'URL',
+    13 => '類別',
+    14 => '日期',
+    15 => '主題',
+    16 => '用戶名',
+    17 => '全名',
+    18 => '電子郵件',
+    34 => '命令和控制',
+    35 => '已遞交的文章',
+    36 => '已遞交的連結',
+    37 => '已遞交的事件',
+    38 => '遞交',
+    39 => '此時沒有遞交的東西',
+    40 => '申請的用戶'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sunday',
+    2 => 'Monday',
+    3 => 'Tuesday',
+    4 => 'Wednesday',
+    5 => 'Thursday',
+    6 => 'Friday',
+    7 => 'Saturday',
+    8 => '新增事件',
+    9 => '志樂事件',
+    10 => '事件給',
+    11 => '主日曆',
+    12 => '我的日曆',
+    13 => '一月',
+    14 => '二月',
+    15 => '三月',
+    16 => '四月',
+    17 => '五月',
+    18 => '六月',
+    19 => '七月',
+    20 => '八月',
+    21 => '九月',
+    22 => '十月',
+    23 => '十一月',
+    24 => '十二月',
+    25 => '回到',
+    26 => '整日',
+    27 => '星期',
+    28 => '個人日曆︰',
+    29 => '公眾日曆',
+    30 => '刪除事件',
+    31 => '新增',
+    32 => '事件',
+    33 => '星期',
+    34 => '時間',
+    35 => '迅速增加',
+    36 => '遞交',
+    37 => '抱歉，本站並不提供個人日曆。',
+    38 => '個人事件編輯器',
+    39 => '日',
+    40 => '周',
+    41 => '月'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} 郵件程式",
+    2 => '寄件人',
+    3 => '回復到',
+    4 => '主題',
+    5 => '內容',
+    6 => '收件人︰',
+    7 => '所有用戶',
+    8 => '管理員',
+    9 => '選項',
+    10 => 'HTML',
+    11 => '迫切的訊息！',
+    12 => '發送',
+    13 => '重設',
+    14 => '忽略用戶設定',
+    15 => '錯誤，當發送到︰',
+    16 => '訊息已發送到︰',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>發送其它信件</a>",
+    18 => '收件人',
+    19 => '注意︰如果你希望發送訊息到本站所有的成員，請在小組選擇欄位中選擇 Logged-in Users group。',
+    20 => "已發送 <successcount> 個訊息，有 <failcount> 個不能發送。發送的細節在下面。如不想看細節，你可<a href=\"{$_CONF['site_admin_url']}/mail.php\">發送其它訊息</a> 或 <a href=\"{$_CONF['site_admin_url']}/moderation.php\">反回管理員首頁</a>。",
+    21 => '失敗',
+    22 => '成功 ',
+    23 => '全部成功 ',
+    24 => '全部失敗',
+    25 => '-- 請選小組 --',
+    26 => '請填寫所有表格上的欄位和選擇一個小組。'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => '安裝插件能損壞你的主系統。 必需要特別小心。 最好不要安裝任何你不瞭解的插件。',
+    2 => '插件安裝聲明',
+    3 => '插件安裝表格',
+    4 => '插件檔案',
+    5 => '插件清單',
+    6 => '警告︰插件已經被安裝過！',
+    7 => '你想安裝的插件已經存在，請先把它刪除再安裝。',
+    8 => '插件不能通過兼容性校驗。',
+    9 => '這插件要求一個更新版本的志樂. 你可以升級你的<a href="http://www.geeklog.net">志樂</a>或是另找一個適合的版本。',
+    10 => '<br><b>沒有安裝的插件。</b><br><br>',
+    11 => '若想修改或刪除插件，點擊以下插件的名稱。這會顯示插件的詳細內容和製作者的網站。安裝的版本和從代碼中來的版本都會顯出來。這會讓你知道此插件是否應該更新。若要安裝或升級插件請咨詢它的說明文件。',
+    12 => 'plugineditor() 找不到插件名',
+    13 => '插件編輯器',
+    14 => '新插件',
+    15 => '管理員首頁',
+    16 => '插件名字',
+    17 => '插件版本',
+    18 => '志樂版本',
+    19 => '使有效',
+    20 => '是',
+    21 => '否',
+    22 => '安裝',
+    23 => '保存',
+    24 => '取消',
+    25 => '刪除',
+    26 => '插件名',
+    27 => '插件首頁',
+    28 => '已安裝的插件版本',
+    29 => '志樂版本',
+    30 => '刪除插件？',
+    31 => '你肯定要刪除這個插件嗎？這麽會刪除所有有關這插件的文件、資料和資料結構。如果你肯定的，請再點擊下面表格中的刪除鈕。',
+    32 => '<p><b>錯誤：AutoLink 標簽不對</b></p>',
+    33 => '代碼版本',
+    34 => '更新',
+    35 => '編輯',
+    36 => '代碼',
+    37 => '數據',
+    38 => '更新!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => '建立文流',
+    2 => '保存',
+    3 => '刪除',
+    4 => '取消',
+    10 => '內容辛迪加',
+    11 => '新文流',
+    12 => '管理處首頁',
+    13 => '若要修改或刪除一個文流, 再一下主題上點擊. 若要建立新的文流, 點擊以上的新文流.',
+    14 => '標題',
+    15 => '種類',
+    16 => '文件名',
+    17 => '格式',
+    18 => '最後一次更新',
+    19 => '啟動',
+    20 => '是',
+    21 => '否',
+    22 => '<i>(無文流)</i>',
+    23 => '所有文章',
+    24 => '文流編輯',
+    25 => '文流標題',
+    26 => '限定',
+    27 => '條目長度',
+    28 => '(0 = 無內文, 1 = 整文, other = 限定於此字數.)',
+    29 => '說明',
+    30 => '最後一次更新',
+    31 => '字符集',
+    32 => '語言',
+    33 => '內容',
+    34 => '條目',
+    35 => '小時',
+    36 => '選擇文流種類',
+    37 => '你有最少一個安裝了的插件能配合內容辛迪加.一下你需要選擇你是否要建立一個主系統文流或插件文流.',
+    38 => '錯誤: 缺少信息',
+    39 => '請填入文流標題, 說明, 和文件名.',
+    40 => '請輸入條目數目或小時數目.',
+    41 => '連結',
+    42 => '事件',
+    43 => '全部',
+    44 => '無',
+    45 => '題目內的標題聯結',
+    46 => '限制結果',
+    47 => '搜尋',
+    48 => '編輯',
+    49 => '新聞 Feed 的標誌',
+    50 => "跟網址有關 ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "我們已電郵了你的密碼到你的電郵信箱，請跟隨郵件中的指示。多謝使用 {$_CONF['site_name']}",
+    2 => "多謝遞交你的文章到 {$_CONF['site_name']} 。只要經過我們員工的核對，你的文章將出現在我們的綱頁上。",
+    3 => "多謝遞交連結到 {$_CONF['site_name']} 。只要經過我們員工的核對，你的連結將出現在我們的綱頁上。",
+    4 => "多謝遞交事件到 {$_CONF['site_name']} 。只要經過我們員工的核對，你的事件將出現在我們的<a href={$_CONF['site_url']}/calendar.php>日曆</a>上。",
+    5 => '你的帳戶設定已被保存了。',
+    6 => '你的個人設定已被保存了。',
+    7 => '你的評論界面設定已被保存了。',
+    8 => '你已退出。',
+    9 => '你的文章已被保存了。',
+    10 => '你的文章已被刪除了。',
+    11 => '你的組件已被保存了。',
+    12 => '你的組件已被刪除了。',
+    13 => '你的主題已被保存了。',
+    14 => '你的主題和所有相關的文章已被刪除了。',
+    15 => '你的連結已被保存了。',
+    16 => '你的連結已被刪除了。',
+    17 => '你的事件已被保存了。',
+    18 => '你的事件已被刪除了。',
+    19 => '你的投票已被保存了。',
+    20 => '你的投票已被刪除了。',
+    21 => '用戶已被保存了。',
+    22 => '用戶已被刪除了。',
+    23 => '增加事件到你的日歷時發生錯誤，缺少了事件編號。',
+    24 => '事件已增加到你的日曆中。',
+    25 => '你要登入才可開啟你的個人日曆。',
+    26 => '事件已從你的日曆中移除。',
+    27 => '信息已發送。',
+    28 => '插件已被保存了。',
+    29 => '抱歉，本站並不提供個人日曆。',
+    30 => '存取被拒絕',
+    31 => '抱歉，你不能進入文章管理的首頁。請注意你的企圖已被記錄。',
+    32 => '抱歉，你不能進入主題管理的首頁。請注意你的企圖已被記錄。',
+    33 => '抱歉，你不能進入組件管理的首頁。請注意你的企圖已被記錄。',
+    34 => '抱歉，你不能進入連結管理的首頁。請注意你的企圖已被記錄。',
+    35 => '抱歉，你不能進入事件管理的首頁。請注意你的企圖已被記錄。',
+
+    36 => '抱歉，你不能進入投票管理的首頁。請注意你的企圖已被記錄。',
+    37 => '抱歉，你不能進入用戶管理的首頁。請注意你的企圖已被記錄。',
+    38 => '抱歉，你不能進入 Plug-in 管理的首頁。請注意你的企圖已被記錄。',
+    39 => '抱歉，你不能進入電郵管理的首頁。請注意你的企圖已被記錄。',
+    40 => '系統訊息',
+    41 => '抱歉，你不能進入字詞替換的首頁。請注意你的企圖已被記錄。',
+    42 => '你的字詞已被保存了。',
+    43 => '你的字詞已被刪除了。',
+    44 => '插件已被安裝了。',
+    45 => '插件已被刪除了。',
+    46 => '抱歉，你不能進入資料庫備份程式。請注意你的企圖已被記錄。',
+    47 => '這只適用於 *nix 如果你的作業系統是 *nix，那麽你的緩衝器已被清除了。如果你的作業系統是 Windows，你要手動尋找文件命名為 adodb _ *.php 的檔案並把它們除去。',
+    48 => "感謝你申請成為 {$_CONF['site_name']} 的會員。只要經過我們員工的核對，我們會把密碼寄到你所登記的電郵中。",
+    49 => '你的小組已被保存了。',
+    50 => '小組已被刪除了。',
+    51 => '此用戶名已有人在用。請選擇另一個。',
+    52 => '你給的電信地址不像是有效。',
+    53 => '你的新密碼已被接受。現在以下請用你的新密碼來登入.',
+    54 => '你要求新密碼的期限以過。請在下面從新要求。',
+    55 => '已經給你寄了一封電信。請照此信的說明來設定新密碼。',
+    56 => '你供給的電信地址已有別的用戶在使用。',
+    57 => '你的用戶已經成功地刪除了。',
+    58 => '你的文流已成功的保存了.',
+    59 => '你的文流已成功的刪除了.',
+    60 => '插件已經更新成功',
+    61 => '插件 %s: 不知名的信息占位符',
+    62 => '跡回評論已被刪除.',
+    63 => '刪除跡回評論時發生錯誤.',
+    64 => '你的跡回評論已成功地傳送出.',
+    65 => '網志目錄服務已成功的存續.',
+    66 => '網志目錄服務已被刪除.',
+    67 => '你輸入的新密碼跟證實密碼不同!',
+    68 => '你必要輸入正確的目前密碼.',
+    69 => '你的賬戶已被禁止!',
+    70 => '你的賬戶在等待管理員的批准.',
+    71 => '你的賬戶已證實並且等待管理員的批准.',
+    72 => '安裝插件時發生錯誤，細節請看 error.log.',
+    73 => '卸載插件時發生錯誤，細節請看error.log.',
+    74 => 'Ping 回已成功地送出.',
+    75 => '跡回必須用 POST 要求.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => '存取',
+    'ownerroot' => '所有者/Root',
+    'group' => '小組',
+    'readonly' => '唯讀',
+    'accessrights' => '存取權',
+    'owner' => '所有者',
+    'grantgrouplabel' => '給予之上小組編輯權利',
+    'permmsg' => '注意︰會員是指所有註冊和登入的用戶；而匿名是指所有非註冊的瀏覽者或沒有登入的用戶。',
+    'securitygroups' => '安全小組',
+    'editrootmsg' => "即使你是用戶管理員；但你不能編輯 root 用戶。你能編輯所有的用戶除了 root 用戶。請注意所有企圖非法地編輯 root 用戶的動作已被記錄。請回到<a href=\"{$_CONF['site_admin_url']}/user.php\">用戶管理頁</a>去。",
+    'securitygroupsmsg' => '選擇這位用戶屬於的小組。',
+
+    'groupeditor' => '小組編輯器',
+    'description' => '描述',
+    'name' => '名字',
+    'rights' => '權限',
+    'missingfields' => '缺少欄位',
+    'missingfieldsmsg' => '你必須提供小組的名字和描述',
+    'groupmanager' => '小組管理員',
+    'newgroupmsg' => '點擊下面的小組可修改或刪除它，點擊上面的新小組可創造一個新的。請注意所核心小組不能被刪除。',
+    'groupname' => '組名',
+    'coregroup' => '核心小組',
+    'yes' => '是',
+    'no' => '否',
+    'corerightsdescr' => "這個小組的權限不能被編輯，因為這是個 {$_CONF['site_name']} 的核心小組。以下是這小組的權限清單(唯讀的)。",
+    'groupmsg' => '安全小組在這綱站是有等級制度的。當增加這個小組到另一組別，這個小組將得到那組別的權限。請盡可能小組加下列的組別去。如果這小組需要特別的權限，你可以在以下的"權利"區域中挑選。要把小組加到組別去，你只需要在組別旁邊的挑選盒打鉤。',
+    'coregroupmsg' => "因為這是個 {$_CONF['site_name']} 的核心小組，這個小組的權限不能被編輯。以下是這小組的組別清單(唯讀的)。",
+    'rightsdescr' => '小組的權限可以是來自於小組本身或是這小組所屬的組別。以下的權限中如沒有檢驗盒即代表這權限是來自於小組所屬的組別；如有檢驗盒即代表你可以直接把權限給予這小組。',
+    'lock' => '鎖住',
+    'members' => '成員',
+    'anonymous' => '匿名',
+    'permissions' => '權限',
+    'permissionskey' => 'R = 唯讀， E = 編輯，有編輯權即有唯讀權',
+    'edit' => '編輯',
+    'none' => '沒有',
+    'accessdenied' => '存取被拒絕',
+
+    'storydenialmsg' => "因未被批准，你不可以觀看這個文章。這是可能是因為你並不是 {$_CONF['site_name']} 的會員。請<a href=users.php?mode=new>成為會員</a>。",
+    'eventdenialmsg' => "因未被批准，你不可以觀看這個事件。這是可能是因為你並不是 {$_CONF['site_name']} 的會員。請<a href=users.php?mode=new>成為會員</a>。",
+    'nogroupsforcoregroup' => '這小組不屬於任何其它的小組',
+    'grouphasnorights' => ' 這小組沒有管理權。',
+    'newgroup' => '新小組',
+    'adminhome' => '管理員首頁',
+    'save' => '保存',
+    'cancel' => '取消',
+    'delete' => '刪除',
+    'canteditroot' => '因為你不屬於 Root 小組，所以你對 Root 小組的修改被拒絕了。如有問題請與系統管理員聯繫。',
+    'listusers' => '列出用戶',
+    'listthem' => '列出',
+    'usersingroup' => '屬於 "%s" 小組的用戶',
+    'usergroupadmin' => '用戶小組管理',
+    'add' => '加入',
+    'remove' => '免除',
+    'availmembers' => '可用的成員',
+    'groupmembers' => '小組成員',
+    'canteditgroup' => '若要修改此小組, 你必要時這個小組的成員. 若你認為這是錯誤, 請你聯絡系統管理員.',
+    'cantlistgroup' => '要看此小組的會員，你必須是此小組的會員。你若認為這是錯誤，請聯絡系統管理員。',
+    'editgroupmsg' => '若要修改小組會員，點擊會員名，然後用增加或刪除的按鈕. 如果一個會員是一個小組的會員，他們的名字只會顯現在右邊. 一旦完成，按 <b>保存</b> 來更新小組，然後回到小組管理主頁.',
+    'listgroupmsg' => '列出此小組目前所有的會員: <b>%s</b>',
+    'search' => '搜尋',
+    'submit' => '提交',
+    'limitresults' => '控制結果',
+    'group_id' => '小組 ID',
+    'plugin_access_denied_msg' => '你在非法的進入插件管理頁.  請注意所有的非法登入都被登記.',
+    'groupexists' => '小組名稱已存在',
+    'groupexistsmsg' => '目前已有用此名的小組. 小組名稱必須獨特.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '最後十個備份',
+    'do_backup' => '做備份',
+    'backup_successful' => '資料庫備份完成。',
+    'db_explanation' => '要做新的志樂備份，點擊以下的按鈕',
+    'not_found' => "不正確的路徑或 mysqldump 程式不可執行。<br>檢查<strong>\$_DB_mysqldump_path</strong>定義在 config.php.<br>變數現在被定義為︰<var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => '備份失敗︰檔案是 0 大小',
+    'path_not_found' => "{$_CONF['backup_path']} 不存在或不是目錄",
+    'no_access' => "錯誤︰目錄 {$_CONF['backup_path']} ，不能存取。",
+    'backup_file' => '備份檔案',
+    'size' => '大小',
+    'bytes' => '位元組',
+    'total_number' => '總備份次數: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => '首頁',
+    2 => '聯絡',
+    3 => '投稿',
+    4 => '連結',
+    5 => '投票',
+    6 => '日曆',
+    7 => '本站統計數據',
+    8 => '個人化',
+    9 => '搜索',
+    10 => '進階搜尋',
+    11 => '目錄'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 錯誤',
+    2 => '咦，我到處都看過了但找不到<b>%s</b>.',
+    3 => "<p>很抱歉，但你要求的文件不存在。請檢查<a href=\"{$_CONF['site_url']}\">主頁</a>或<a href=\"{$_CONF['site_url']}/search.php\">搜索頁</a>看看能發現什麽。"
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => '要求登入',
+    2 => '抱歉，要求登入才可存取這個區域。',
+    3 => '登入',
+    4 => '新用戶'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF 版本的作用已被禁止',
+    2 => '所提供的文件沒有呈遞。文件已收到，但是無法處理。請肯定你所提交的文件是 html 格式的文件寫於 xHTML 的標準。請注意過分複雜的 html 文件也可能無法正確呈遞。你的文件提交的結果是 0 bytes 而且已被刪除。你若肯定你的文件應該順利的呈遞，其再次提交。',
+    3 => '不知名的PDF 文件製作錯誤。',
+    4 => '沒提供頁數資料或你要用以下的特別 PDF 製作工具。若你認為你所得到的這頁是錯誤。 請聯絡系統管理員。要不然，你可用以下的表格來特別製作 PDF。',
+    5 => '正在裝置你的文件。',
+    6 => '你的文件被裝置時請等待。',
+    7 => '你可用右擊以下的按鈕，然後選 \'save target...\' or \'save link location...\' 來存續你的文件的一個拷貝。',
+    8 => '在配置檔案裏的 HTMLDoc二進制檔案路徑有錯誤，或此系統無法執行此檔案。若此問題繼續發生，請聯絡網站管理員。',
+    9 => 'PDF 製作器',
+    10 => '這是特別的 PDF 製作工具。它會將任何 URL 轉換成 PDF 版本。請注意，有些網頁不會正確的被這工具處理成功。這是 HTMLDoc PDF 製作工具的有限之處，而這樣的錯誤不需要報告給此網站的管理員。',
+    11 => 'URL',
+    12 => '製作 PDF!',
+    13 => '此服務器的 PHP 配置不准許 fopen() 命令用在 URL 上。 系統管理員必須先修改  php.ini 檔案，然後設定 allow_url_fopen 到 On',
+    14 => '你要求的 PDF 不存在或你在非法的入取一個檔案。'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array (
+    'trackback'          => '跡回',
+    'from'               => '從',
+    'tracked_on'         => '跡回於',
+    'read_more'          => '[讀下文]',
+    'intro_text'         => "這是別人對 '%s' 的看法:",
+    'no_comments'        => '此登錄無跡回評論.',
+    'this_trackback_url' => '此登錄的跡回 URL:',
+    'num_comments'       => '%d 跡回評論',
+    'send_trackback'     => '送出 Ping',
+    'preview'            => '預覽',
+    'editor_title'       => '送出跡回評論',
+    'trackback_url'      => '跡回 URL',
+    'entry_url'          => '登錄 URL',
+    'entry_title'        => '登錄標題',
+    'blog_name'          => '網站名',
+    'excerpt'            => '摘錄',
+    'truncate_warning'   => '注: 目的站可能將你的摘錄縮短',
+    'button_send'        => '送出',
+    'button_preview'     => '預覽',
+    'send_error'         => '錯誤',
+    'send_error_details' => '送出跡回評論時發生錯誤:',
+    'url_missing'        => '無登錄 URL',
+    'url_required'       => '請輸入登錄的最少一個 URL.',
+    'target_missing'     => '無跡回 URL',
+    'target_required'    => '請輸入一個跡回 URL',
+    'error_socket'       => '無法打開 socket.',
+    'error_response'     => '不明白你的反應.',
+    'error_unspecified'  => '為指明的錯誤.',
+    'select_url'         => '選擇跡回 URL',
+    'not_found'          => '找不到跡回 URL',
+    'autodetect_failed'  => '志樂探測不到關於你要送出評論的跡回 URL. 以下請輸入.',
+    'trackback_explain'  => '從以下的聯結中，請選你要送出評論的 URL. 志樂將會決定正確的跡回 URL. 或者你若已知道的話，可 <a href="%s">在此輸入它</a>.',
+    'no_links_trackback' => '找不到聯結. 你不能送出此登錄的跡回評論.',
+    'pingback'           => 'Ping 回',
+    'pingback_results'   => 'Ping 回的結果',
+    'send_pings'         => '送出 ping',
+    'send_pings_for'     => '送出ping 於 "%s"',
+    'no_links_pingback'  => '找不到聯結. 為此登錄無 Ping 回送出.',
+    'pingback_success'   => 'Ping 回已送出.',
+    'no_pingback_url'    => '無 ping 回 URL.',
+    'resend'             => '重送',
+    'ping_all_explain'   => '你現在可通知你所聯結的網站 (<a href="http://en.wikipedia.org/wiki/Pingback">Ping 回</a>), 廣告你的站已經被更新於ping 過網志目錄服務, 或送出一個 <a href="http://en.wikipedia.org/wiki/Trackback">跡回</a> 評論若你寫過有關一個在別人的網站上的登錄.',
+    'pingback_button'    => '送出Ping 回',
+    'pingback_short'     => '送出Ping 回到所有跟此登錄聯結的網站.',
+    'pingback_disabled'  => '(Ping 回已中止)',
+    'ping_button'        => '送出Ping',
+    'ping_short'         => 'Ping 網志目錄服務.',
+    'ping_disabled'      => '(Ping 已中止)',
+    'trackback_button'   => '送出跡回',
+    'trackback_short'    => '送出一個跡回評論.',
+    'trackback_disabled' => '(跡回一中止)',
+    'may_take_a_while'   => '請注意，送出 Ping回 和 Ping 可需要一段時間.',
+    'ping_results'       => 'Ping 的結果',
+    'unknown_method'     => '無知 ping 法',
+    'ping_success'       => 'Ping 已送出.',
+    'error_site_name'    => '請輸入網站名.',
+    'error_site_url'     => '請輸入網站 URL.',
+    'error_ping_url'     => '請輸入正確的 Ping URL.',
+    'no_services'        => '未設定網志目錄服務.',
+    'services_headline'  => '網志目錄服務',
+    'service_explain'    => '若要更改或刪除網志目錄服務，請點擊一下服務的編輯標圖. 要增加一個新的網志目錄服務，請點擊以上的 "建新".',
+    'service'            => '服務',
+    'ping_method'        => 'Ping 法',
+    'service_website'    => '網站',
+    'service_ping_url'   => '要ping 的URL',
+    'ping_standard'      => '標準 Ping',
+    'ping_extended'      => '擴大的 Ping',
+    'ping_unknown'       => '(無知法)',
+    'edit_service'       => '編輯網志目錄服務',
+    'trackbacks'         => '跡回',
+    'editor_intro'       => '準備你的跡回評論於 <a href="%s">%s</a>.',
+    'editor_intro_none'  => '準備你的跡回評論.',
+    'trackback_note'     => '若要送出一個跡回評論于一個文章，去到文章目錄然後點擊那文章的"' . $LANG24[21] . '". 若要送出跟任何文章都無關的跡回, <a href="%s">請點擊此處</a>.',
+    'pingback_explain'   => '輸入一個 URL 來送出 Ping回. Ping回將會指到你的網站主頁.',
+    'pingback_url'       => 'Ping回 URL',
+    'site_url'           => '此站的 URL',
+    'pingback_note'      => '若要給一個文章送出 ping回, 去到文章目錄然後點擊那文章的 "' . $LANG24[21] . '". 要送出一個跟任何文章都無關的 ping回, <a href="%s">請點擊此處</a>.',
+    'pbtarget_missing'   => '無 Ping回 URL',
+    'pbtarget_required'  => '請輸入一個ping回 URL',
+    'pb_error_details'   => '送出 ping回時發生錯誤:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title'            => '文章目錄',
+    'title_year'       => '文章目錄為 %d',
+    'title_month_year' => '文章目錄為 %s %d',
+    'nav_top'          => '回到文章目錄',
+    'no_articles'      => '沒有文章.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n 新 %i 在最後 %t %s',
+    'new_last' => '最後 %t %s',
+    'minutes'     => '分鐘',
+    'hours'       => '小時',
+    'days'        => '日',
+    'weeks'       => '周',
+    'months'      => '月',
+    'minute'      => '分鐘',
+    'hour'        => '小時',
+    'day'         => '日',
+    'week'        => '周',
+    'month'       => '月'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search'        => '搜尋',
+    'limit_results' => '限制結果',
+    'submit'        => '提交',
+    'edit'          => '編輯',
+    'admin_home'    => '管理主頁',
+    'create_new'    => '建新',
+    'enabled'       => '啟動',
+    'title'         => '標題',
+    'type'          => '類型',
+    'topic'         => '題目',
+    'help_url'      => '幫助文 URL',
+    'save'          => '存續',
+    'cancel'        => '取消',
+    'delete'        => '刪除',
+    'copy'          => '複製',
+    'no_results'    => '- 找不到任何登錄 -',
+    'data_error' => '處理訂閱資料時發現錯誤. 請檢查資料來源.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => '評論已啟動',
+    -1 => '評論已關掉'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => '平面的',
+    'nested' => '嵌套的',
+    'threaded' => '線狀的',
+
+    'nocomment' => '勿評論'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 小時',
+    7200 => '2 小時',
+    10800 => '3 小時',
+    28800 => '8 小時',
+    86400 => '1 日',
+    604800 => '1 周',
+    2678400 => '1 月'
+);
+
+$LANG_dateformats = array(
+    0 => '系統指定的'
+);
+
+$LANG_featurecodes = array(
+    0 => '不定為重要文章',
+    1 => '定為重要文章'
+);
+
+$LANG_frontpagecodes = array(
+    0 => '只顯在主提版',
+    1 => '顯在標題版'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => '普通文字',
+    'html' => 'HTML 格式'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => '最老的在前',
+    'DESC' => '最新的在前'
+);
+
+$LANG_trackbackcodes = array(
+    0 => '跡回已啟動',
+    -1 => '跡回已關掉'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/croatian.php 1.4.0sr5-1/cpanel-glprivate/language/croatian.php
--- 1.3.11sr1/cpanel-glprivate/language/croatian.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/croatian.php	2006-08-08 02:39:06.000000000 -0500
@@ -153,7 +153,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -320,7 +330,23 @@
     104 => 'Prikai online status',
     105 => 'Pokai tko je online u bloku',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -338,27 +364,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Linkovi',
-    2 => 'Nema linkova za prikazati.',
-    3 => 'Dodaj link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Va glas je uspjeno zaprimljen',
-    2 => 'Va glas je zapisan.',
-    3 => 'Glas',
-    4 => 'Anketa na stranicama',
-    5 => 'Glasa',
-    6 => 'Pogledajte ostale ankete'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -459,7 +464,11 @@
     54 => 'Rezultati komentara',
     55 => 'izraz(e)',
     56 => 'I',
-    57 => 'ILI'
+    57 => 'ILI',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -489,7 +498,14 @@
     21 => 'Na stranicama nema niti jednog linka ili nema linka na koji je kliknuto bar jedanput.',
     22 => 'Prvih deset tekstova poslanih emailom',
     23 => 'Emailovi',
-    24 => 'Nitko nije poslao tekst emailom s ovih stranica.'
+    24 => 'Nitko nije poslao tekst emailom s ovih stranica.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -642,7 +658,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -677,35 +698,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Ureivanje linkova',
-    2 => '',
-    3 => 'Naziv linka',
-    4 => 'URL linka',
-    5 => 'Kategorija',
-    6 => '(ukljuujui http://)',
-    7 => 'Nova kategorija',
-    8 => 'Link Klik',
-    9 => 'Opis linka',
-    10 => 'Potrebno je unijeti Naziv linka, URL i Opis.',
-    11 => 'Link Manager',
-    12 => 'Ako elite modificirati ili obrisati link, kliknite dolje na eljeni link. Ako elite dodati novi link kliknite iznad na Novi link.',
-    13 => 'Naziv linka',
-    14 => 'Kategorija linka',
-    15 => 'URL linka',
-    16 => 'Pristup odbijen',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'Novi link',
-    19 => 'Administracija',
-    20 => 'Ako je Nova kategorija, molimo unesite naziv nove kategorije.',
-    21 => 'snimi',
-    22 => 'poniti',
-    23 => 'obrii'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -728,16 +720,16 @@
     17 => 'Tijelo teksta',
     18 => 'Posjeta',
     19 => 'Komentari',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Popis tekstova',
     23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Pregled teksta',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Greka u uploadanju datoteke',
     31 => 'Please fill in the Title and Intro Text fields',
     32 => 'Featured',
@@ -770,39 +762,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Molimo unesite pitanje i najmanje dva odgovora..',
-    3 => 'Anketa kreirana',
-    4 => 'Ankete %s snimljena',
-    5 => 'Ureivanje ankete',
-    6 => 'ID Ankete',
-    7 => '(ne koristite prazan prostor)',
-    8 => 'Prikai na poetnoj strani',
-    9 => 'Pitanje ankete',
-    10 => 'Odgovora / Glasova',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'Kreirajte anketu.',
-    14 => 'snimi',
-    15 => 'poniti',
-    16 => 'obrii',
-    17 => 'Molim unesite ID ankete.',
-    18 => 'Poll List',
-    19 => 'To modify or delete a poll, click on that poll.  To create a new poll click on new poll above.',
-    20 => 'Voters',
-    21 => 'Pristup odbijen',
-    22 => "Pokuali ste pristupiti anketi ali nemate potrebna odobrenja. Ovaj pokuaj je logiran. Molim <a href=\"{$_CONF['site_admin_url']}/poll.php\">vratite se natrag na administraciju anketa</a>.",
-    23 => 'Nova anketa',
-    24 => 'Administracija',
-    25 => 'Da',
-    26 => 'Ne'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -834,7 +817,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -876,7 +862,18 @@
     33 => 'potvrdi',
     34 => 'Error: You must specify a file to upload.',
     35 => 'Zadnji put prijavljen',
-    36 => '(nikada)'
+    36 => '(nikada)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1021,7 +1018,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1064,7 +1065,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Linkovi',
-    42 => 'Dogaanja'
+    42 => 'Dogaanja',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1131,7 +1140,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1191,7 +1214,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1201,7 +1233,6 @@
     'last_ten_backups' => 'Posljednih 10 backupova.',
     'do_backup' => 'Napravi sigurnosnu kopiju',
     'backup_successful' => 'Backup baze podataka je uspjeno napravljen.',
-    'no_backups' => 'Nema backupova.',
     'db_explanation' => 'Da bi napravili sigurnosu kopiju kliknite ovdje dole.',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
@@ -1225,7 +1256,8 @@
     7 => 'Statistika stranice',
     8 => 'Personalizacija',
     9 => 'Trailica',
-    10 => 'napredna trailica'
+    10 => 'napredna trailica',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1267,4 +1299,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/croatian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/croatian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/croatian_utf-8.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/croatian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -155,7 +155,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -322,7 +332,23 @@
     104 => 'Prika¾i online status',
     105 => 'Poka¾i tko je online u bloku',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -340,27 +366,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Web izvori',
-    2 => 'Nema linkova za prikazati.',
-    3 => 'Dodaj link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Va¹ glas je uspje¹no zaprimljen',
-    2 => 'Va¹ glas je poslan u abketu.',
-    3 => 'Glas',
-    4 => 'Anketa na stranicama',
-    5 => 'Glasa',
-    6 => 'Pogledajte ostale ankete'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -461,7 +466,11 @@
     54 => 'Rezultati komentara',
     55 => 'izraz(e)',
     56 => 'I',
-    57 => 'ILI'
+    57 => 'ILI',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -491,7 +500,14 @@
     21 => 'Na stranicama nema niti jednog linka ili nema linka na koji je kliknuto bar jedanput.',
     22 => 'Prvih deset prièa poslanih emailom',
     23 => 'Emailovi',
-    24 => 'Nitko nije poslao tekst emailom s ovih stranica.'
+    24 => 'Nitko nije poslao tekst emailom s ovih stranica.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -644,7 +660,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -679,35 +700,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Link Title',
-    4 => 'Link URL',
-    5 => 'Category',
-    6 => '(include http://)',
-    7 => 'Other',
-    8 => 'Link Hits',
-    9 => 'Link Description',
-    10 => 'You need to provide a link Title, URL and Description.',
-    11 => 'Link Manager',
-    12 => 'To modify or delete a link, click on that link below.  To create a new link click new link above.',
-    13 => 'Link Title',
-    14 => 'Link Category',
-    15 => 'Link URL',
-    16 => 'Access Denied',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'New Link',
-    19 => 'Admin Home',
-    20 => 'If other, specify',
-    21 => 'save',
-    22 => 'cancel',
-    23 => 'delete'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -730,16 +722,16 @@
     17 => 'Body Text',
     18 => 'Posjeta',
     19 => 'Komentari',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Popis tekstova',
     23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Story Preview',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Gre¹ka u uploadanju datoteke',
     31 => 'Please fill in the Title and Intro Text fields',
     32 => 'Featured',
@@ -772,39 +764,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Poll Created',
-    4 => 'Poll %s saved',
-    5 => 'Edit Poll',
-    6 => 'Poll ID',
-    7 => '(do not use spaces)',
-    8 => 'Appears on Homepage',
-    9 => 'Question',
-    10 => 'Answers / Votes',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'Create Poll',
-    14 => 'snimi',
-    15 => 'poni¹ti',
-    16 => 'obri¹i',
-    17 => 'Please enter a Poll ID',
-    18 => 'Poll List',
-    19 => 'To modify or delete a poll, click on that poll.  To create a new poll click on new poll above.',
-    20 => 'Voters',
-    21 => 'Access Denied',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'New Poll',
-    24 => 'Admin Home',
-    25 => 'Da',
-    26 => 'Ne'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -836,7 +819,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -878,7 +864,18 @@
     33 => 'potvrdi',
     34 => 'Error: You must specify a file to upload.',
     35 => 'Zadnji put prijavljen',
-    36 => '(nikada)'
+    36 => '(nikada)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1023,7 +1020,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1066,7 +1067,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Linkovi',
-    42 => 'Dogaðanja'
+    42 => 'Dogaðanja',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1133,7 +1142,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1193,7 +1216,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1203,9 +1235,8 @@
     'last_ten_backups' => 'Last 10 Back-ups',
     'do_backup' => 'Do Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
     'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
-    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
     'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
     'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
@@ -1227,7 +1258,8 @@
     7 => 'Statistika stranice',
     8 => 'Personalizacija',
     9 => 'Tra¾ilica',
-    10 => 'napredna tra¾ilica'
+    10 => 'napredna tra¾ilica',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1269,4 +1301,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/czech.php 1.4.0sr5-1/cpanel-glprivate/language/czech.php
--- 1.3.11sr1/cpanel-glprivate/language/czech.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/czech.php	2006-08-08 02:39:06.000000000 -0500
@@ -152,7 +152,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -319,7 +329,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -337,27 +363,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Webov obsah',
-    2 => 'Nic nenalezeno.',
-    3 => 'Pidat odkaz'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Hlas uloen',
-    2 => 'V hlas v anket byl uloen',
-    3 => 'Hlas',
-    4 => 'Ankety v systmu',
-    5 => 'Hlasy',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -458,7 +463,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -488,7 +497,14 @@
     21 => 'dn odkazy na kter se klickalo zde nejsou.',
     22 => 'Top Ten emailem zaslanch lnk',
     23 => 'Zaslno emailem',
-    24 => 'dn emailem poslan lnky zde nejsou.'
+    24 => 'dn emailem poslan lnky zde nejsou.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -641,7 +657,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -676,35 +697,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor odkaz',
-    2 => '',
-    3 => 'Titulek odkazu',
-    4 => 'URL odkazu',
-    5 => 'Kategorie',
-    6 => '(vetn http://)',
-    7 => 'Jin',
-    8 => 'Klicknuto',
-    9 => 'Popis odkazu',
-    10 => 'Je poteba zadat Titulek, URL a Popis odkazu.',
-    11 => 'Manaer odkaz',
-    12 => 'Pro pravu odkazu, klepnte na poadovan odkaz ne.  Pro vytvoen novho odkazu klepnte na Nov odkaz ve.',
-    13 => 'Titulek odkazu',
-    14 => 'Kategorie',
-    15 => 'URL odkazu',
-    16 => 'Pstup odepen',
-    17 => "Pokoute se editovat odkaz na nj nemte dostaten prva.  Tento pokus byl zaznamenn. Prosm <a href=\"{$_CONF['site_admin_url']}/link.php\">vrate se na administraci odkaz</a>.",
-    18 => 'Nov odkaz',
-    19 => 'Administrace',
-    20 => 'Pokud je jin',
-    21 => 'uloit',
-    22 => 'zruit akci',
-    23 => 'smazat'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -727,16 +719,16 @@
     17 => 'Text',
     18 => 'Zhldnuto',
     19 => 'Komente',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Seznam lnk',
     23 => 'Pro editaci nebo smazn lnku klepnte na jeho slo ne. Pro zobrazen,klepnte na titulek lnku, kter chcete vidt. Pro vytvoen novho lnku klepnte na Nov lnek ve.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Nhled',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Prosm vyplne Autor, Titulek a Intro Text',
     32 => 'Zvraznit',
@@ -758,7 +750,7 @@
     48 => 'obrzek',
     49 => 'vpravo',
     50 => 'vlevo',
-    51 => 'k pidn obrzk (max. velikost 200x200px) do lnku muste vloit speciln formtovan text.<br>Tento text vypad takto: [obrzekX](systm umst sm), [obrzekX_vpravo](systm umst vpravo od textu) nebo [obrzekX_vlevo](systm umst vlevo od textu) - kde X je slo obrzku je je pidvn.<br>PAMATUJTE: muste pout obrzky je jsou pidvny.  V opanm ppad nebude mono publikovat lnek.<BR><P><B>NHLED</B>: Pro nhled lnku s obrzky je nejlpe pout nhled Verze pro tiskrnu.  Tlatko <i>nhled</i> prosm pouvejte jen pro prohlen lnk bez obrzk.',
+    51 => 'k pidn obrzk (max. velikost 200x200px) do lnku muste vloit speciln formtovan text.<br>Tento text vypad takto: [imageX](systm umst sm), [imageX_right](systm umst vpravo od textu) nebo [imageX_left](systm umst vlevo od textu) - kde X je slo obrzku je je pidvn.<br>PAMATUJTE: muste pout obrzky je jsou pidvny.  V opanm ppad nebude mono publikovat lnek.<BR><P><B>NHLED</B>: Pro nhled lnku s obrzky je nejlpe pout nhled Verze pro tiskrnu.  Tlatko <i>nhled</i> prosm pouvejte jen pro prohlen lnk bez obrzk.',
     52 => 'Smazat',
     53 => ' nepouito.  Ped uloenm zmn muste vloit obrzek do Intro textu nebo textu.',
     54 => 'Pidan obrzek nepouit',
@@ -769,39 +761,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Reim',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Anketa vytvoena',
-    4 => 'Anketa %s uloena',
-    5 => 'Editovat anketu',
-    6 => 'ID ankety',
-    7 => '(bez mezer)',
-    8 => 'Zobrazit na Homepage',
-    9 => 'Otzka',
-    10 => 'Odpovd / Hlasujcch',
-    11 => 'There was an Chyba getting poll answer data about the poll %s',
-    12 => 'There was an Chyba getting poll question data about the poll %s',
-    13 => 'Vytvoit anketu',
-    14 => 'uloit',
-    15 => 'zruit akci',
-    16 => 'smazat',
-    17 => 'Please enter a Poll ID',
-    18 => 'Ankety',
-    19 => 'Pro editaci nebo smazn ankety, klepnte na anketu ne.  Pro vytvoen nov ankety klepnte na Nov anketa ve.',
-    20 => 'Hlasujcch',
-    21 => 'Pstup odepen',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'Nov anketa',
-    24 => 'Administrace',
-    25 => 'Ano',
-    26 => 'Ne'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -833,7 +816,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -875,7 +861,18 @@
     33 => 'Potvrdit',
     34 => 'Chyba: Specifikujte soubor.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1020,7 +1017,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1063,7 +1064,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1130,7 +1139,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1190,7 +1213,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1200,7 +1232,6 @@
     'last_ten_backups' => 'Last 10 Back-ups',
     'do_backup' => 'Do Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'Nejsou dn zlohy systmu',
     'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
@@ -1224,7 +1255,8 @@
     7 => 'Statistika',
     8 => 'Vlastn nastaven',
     9 => 'Hledn',
-    10 => 'rozen hledn'
+    10 => 'rozen hledn',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1266,4 +1298,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/czech_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/czech_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/czech_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/czech_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1507 @@
+<?php
+
+###############################################################################
+# 
+# This is the czech language page for GeekLog!
+#
+# Copyright (C) 2002 hermes_trismegistos
+# hermes_trismegistos@post.cz
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Publikoval :',
+    2 => '<b>Číst celé</b>',
+    3 => 'komentářů',
+    4 => 'Editovat',
+    5 => 'Anketa',
+    6 => 'Výsledky',
+    7 => 'Výsledky ankety',
+    8 => 'hlasů',
+    9 => 'Administrátorské funkce:',
+    10 => 'Příspěvky',
+    11 => 'Články',
+    12 => 'Bloky',
+    13 => 'Sekce',
+    14 => 'Odkazy',
+    15 => 'Události',
+    16 => 'Ankety',
+    17 => 'Uživatelé',
+    18 => 'SQL dotaz',
+    19 => '<b>Odhlásit</b>',
+    20 => 'Informace o uživateli:',
+    21 => 'Uživatel',
+    22 => 'Uživatelův ID',
+    23 => 'Úroveň práv',
+    24 => 'Anonymní host',
+    25 => 'Odpověď',
+    26 => ' Následující komentáře jsou názorem jejich vkladatele. <br>Weblog neručí za to co je zde napsáno.',
+    27 => 'Naposledy přidáno',
+    28 => 'Smazat',
+    29 => 'Nejsou žádné komentáře.',
+    30 => 'Starší články',
+    31 => 'HTML tagy povoleny:',
+    32 => 'Chyba, neplatné uživatelské jméno',
+    33 => 'Chyba, nepovolený zápis do log fajlu',
+    34 => 'Chyba',
+    35 => 'Odhlásit',
+    36 => ' - ',
+    37 => 'Bez článků',
+    38 => 'Content Syndication',
+    39 => 'Obnovit',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Hosté',
+    42 => 'Publikováno:',
+    43 => 'Odpovědět na toto',
+    44 => 'Nadřazený',
+    45 => 'MySQL Error Number',
+    46 => 'MySQL Error Message',
+    47 => 'Uživatelské menu',
+    48 => 'Informace o účtu',
+    49 => 'Vlastní nastavení',
+    50 => 'Error with SQL statement',
+    51 => 'help',
+    52 => 'Nové',
+    53 => 'Administrace',
+    54 => 'Nelze otevřít soubor.',
+    55 => 'Nastala chyba - ',
+    56 => 'Hlasovat',
+    57 => 'Heslo',
+    58 => 'Přihlásit',
+    59 => "Nemáte zatím účet?  Přihlašte se jako <a href=\"{$_CONF['site_url']}/users.php?mode=new\"><b>Nový&nbsp;uživatel</b></a>",
+    60 => 'Okomentovat',
+    61 => 'Nový uživatel',
+    62 => 'slov',
+    63 => 'Nastavení komentářů',
+    64 => 'Poslat emailem',
+    65 => 'Verze pro tiskárnu',
+    66 => 'Osobní kalendář',
+    67 => 'Vítejte na ',
+    68 => 'home',
+    69 => 'kontakt',
+    70 => 'hledat',
+    71 => 'příspěvky',
+    72 => 'odkazy',
+    73 => 'ankety',
+    74 => 'kalendář',
+    75 => 'rozšířené hledání',
+    76 => 'statistika',
+    77 => 'Pluginy',
+    78 => 'Blížící se události',
+    79 => 'Co je nového',
+    80 => 'článků za posledních',
+    81 => 'článek za posledních',
+    82 => 'hodin',
+    83 => 'KOMENTÁŘE',
+    84 => 'ODKAZY',
+    85 => 'za posledních 48 hodin',
+    86 => 'Nejsou nové komentáře',
+    87 => 'za poslední 2 týdny',
+    88 => 'Nejsou nové odkazy',
+    89 => 'Nejsou žádné blížící se události',
+    90 => 'Homepage',
+    91 => 'Stránka vytvořena za',
+    92 => 'sekund&nbsp;',
+    93 => 'Copyright',
+    94 => 'Všechna práva a ochranné známky na těchto stránkách patří jejich vlastníkům.',
+    95 => 'Používáme',
+    96 => 'Skupiny',
+    97 => 'Word List',
+    98 => 'Pluginy',
+    99 => 'ČLÁNKY',
+    100 => 'Nejsou nové články',
+    101 => 'Osobní události',
+    102 => 'Události weblogu',
+    103 => 'DB zálohy',
+    104 => '-',
+    105 => 'Emailový démon',
+    106 => 'Zhlédnuto',
+    107 => 'Test Verze GL',
+    108 => 'Smazat cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalendář',
+    2 => 'Nejsou žádné události k zobrazení.',
+    3 => 'Kdy',
+    4 => 'Kde',
+    5 => 'Popis',
+    6 => 'Přidat událost',
+    7 => 'Blížící se události',
+    8 => 'Když toto přidáte do Osobního kalendáře, uvidíte je jen Vy ve svém Osobním kalendáři v Uživatelských funkcích.',
+    9 => 'Přidat do osobního kalendáře',
+    10 => 'Odebrat z osobního kalendáře',
+    11 => "Přidání události do kalendáře {$_USER['username']}'",
+    12 => 'Událost',
+    13 => 'Začíná',
+    14 => 'Končí',
+    15 => 'Zpět na kalendář'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Vložit komentář',
+    2 => 'Typ komentáře',
+    3 => 'Odhlásit',
+    4 => 'Vytvořit účet',
+    5 => 'Uživatel',
+    6 => 'Tato stránka vyžaduje přihlášení pro vložení komentáře, prosím přihlašte se.  Pokud nemáte účet - můžete si ho vytvořit.',
+    7 => 'Váš poslední komentář vložen před ',
+    8 => " sekundami.  Tato stránka vyžaduje prodlevu {$_CONF['commentspeedlimit']} sekund mezi komentáři.",
+    9 => 'Komentář',
+    10 => 'Send Report',
+    11 => 'Vložit komentář',
+    12 => 'Prosím vyplňte Titulek a Komentář, jinak nelze vložit.',
+    13 => 'Vaše info',
+    14 => 'Náhled',
+    15 => 'Report this post',
+    16 => 'Titulek',
+    17 => 'Chyba',
+    18 => 'Důležité',
+    19 => 'Prosím vkládejte komentáře do správné sekce.',
+    20 => 'Komentáře vkládejte pokud možno ve správném pořadí.',
+    21 => 'Přečtěte si prosím nejdříve komentáře ostatních uživatelů, aby nedocházelo k duplicitě.',
+    22 => 'Použijte titulek, který vložil systém.',
+    23 => 'Váš email nebude publikován!',
+    24 => 'Anonymní host',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Uživatelský profil:',
+    2 => 'Přihlašovací jméno',
+    3 => 'Jméno',
+    4 => 'Heslo',
+    5 => 'Email',
+    6 => 'Homepage',
+    7 => 'O vás',
+    8 => 'PGP klíč',
+    9 => 'Uložit změny',
+    10 => 'Posledních 10 comentářů uživatele',
+    11 => 'Bez komentářů uživatele',
+    12 => 'Uživatelské nastavení:',
+    13 => 'Posílat na konci každého dne výtah z weblogu emailem',
+    14 => 'Toto heslo bylo náhodně vygenerováno systémem. Doporučuje se změnit co nejdříve. Pro změnu hesla se přihlašte a změnte si ho poté v menu Informace o účtu v Uživatelském rozhraní.',
+    15 => "Váš {$_CONF['site_name']} účet byl vytvořen. Můžete se přihlásit, níže jsou Vaše přihlašovací data. Prosím uschovejt si tento email pro budoucí reference.",
+    16 => 'Informace o účtu',
+    17 => 'Účet neexistuje',
+    18 => 'Email se zdá být v nesprávném formátu',
+    19 => 'Uživatel nebo email již existuje',
+    20 => 'Email se zdá být v nesprávném formátu',
+    21 => 'Chyba',
+    22 => "Registrace na {$_CONF['site_name']}!",
+    23 => "Anonymní uživatelé - Hosté nemohou například komentovat či přidávat články.<br>Vytvoření účtu Vám umožní využívat všech funkcí na {$_CONF['site_name']}. <br>Vaše emailová adresa nebude <b><i>nikdy a nikde</i></b> zveřejněna na těchto stránkách.",
+    24 => 'Vaše heslo bude posláno na vámi zadanou emailovou adresu.',
+    25 => 'Zapomenuté heslo?',
+    26 => 'Vložte Vaše přihlašovací jméno a klepněte na Poslat-heslo a nové heslo Vám bude zasláno na Vámi zadanou emailovou adresu.',
+    27 => 'Registrovat nyní!',
+    28 => 'Poslat-heslo',
+    29 => 'odhlášen od',
+    30 => 'přihlášen od',
+    31 => 'Tato funkce vyžaduje přihlášení',
+    32 => 'Podpis',
+    33 => 'Nezobrazí se veřejně',
+    34 => 'Toto je vaše pravé jméno',
+    35 => 'Jen pro změnu hesla',
+    36 => 'Na začátku s http://',
+    37 => 'Bude použit v komentářích',
+    38 => 'Toto je o Vás! Kdokoli si to může přečíst',
+    39 => 'Váš veřejný PGP klíč',
+    40 => 'Bez ikon Sekcí',
+    41 => 'Chci být Moderátorem sekce',
+    42 => 'Formát data',
+    43 => 'Maximální počet článků',
+    44 => 'Bez bloků',
+    45 => 'Vlastní nastavení pro',
+    46 => 'Bez těchto položek pro',
+    47 => 'Nastavení bloků pro',
+    48 => 'Sekce',
+    49 => 'Nezobrazovat ikony',
+    50 => 'Odškrtněte pokud vás nezajímá',
+    51 => 'Jen novinky',
+    52 => 'Systémové nastavení - ',
+    53 => 'Dostávat články na konci dne emailem',
+    54 => 'Zaškrtněte to co nechcete zobrazovat.',
+    55 => 'Pokud necháte odškrtlé, bude použito původní nastavení - to co je tučně bude zobrazováno.  Pro vlastní nastavení zaškrtněte jen to co chcete zobrazovat.',
+    56 => 'Autoři',
+    57 => 'Nastavení zobrazování položek pro',
+    58 => 'Řazení',
+    59 => 'Maximální počet komentářů',
+    60 => 'Jak chcete zobrazovat komentáře?',
+    61 => 'Nejnovější nebo nejstarší nejdříve?',
+    62 => 'Systémové nastavení - 100',
+    63 => "Vaše heslo bude posláno na vámi zadanou emailovou adresu. Postupujte podle zaslaných instrukcí pro přihlášení do {$_CONF['site_name']}",
+    64 => 'Nastavení komentářů pro',
+    65 => 'Zkuste se přihlásit znovu',
+    66 => "Spletl jste se v zadání.  Prosím zkuste to znovu. Nebo jste  <a href=\"{$_CONF['site_url']}/users.php?mode=new\"><b>nový uživatel</b></a>?",
+    67 => 'Uživatelem od',
+    68 => 'Pamatovat si mne',
+    69 => 'Jak dlouho si Vás systém bude pamatovat.',
+    70 => "Přizpůsobení vzhledu a obsahu {$_CONF['site_name']}",
+    71 => "Přizpůsobení vzhledu na {$_CONF['site_name']} vám umožní nastavit si vlastní vzhled a řazení položek nezávisle na nastavení pro hosty.  Pro tato nastavení se musíte <a href=\"{$_CONF['site_url']}/users.php?mode=new\">přihlásit</a> na {$_CONF['site_name']}. <br> Jste uživatelem?  Pak použijte přihlašovací formulář vlevo!",
+    72 => 'Grafické téma',
+    73 => 'Jazyk',
+    74 => 'Vyberte jak má weblog vypadat',
+    75 => 'Zasílání sekcí',
+    76 => 'Tyto sekce vám budou zasílána emailem koncem každého dne. Prosím vybírejte jen sekce, které vás zajímají!',
+    77 => 'Foto',
+    78 => 'Přidá Vaše foto (do velikosti 96x96px)!',
+    79 => 'Zaškrtnout pro smazání fota',
+    80 => 'Přihlásit',
+    81 => 'Zaslat email',
+    82 => 'Posledních 10 článků uživatele',
+    83 => 'Publikační statistika uživatele',
+    84 => 'Celkově publikací:',
+    85 => 'Celkově komentářů:',
+    86 => 'Najít vše od',
+    87 => 'Your login name',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Set New Password',
+    92 => 'Enter New Password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Delete Account "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'delete account',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Privacy Options for',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email from Users',
+    103 => 'Allow email from other users',
+    104 => 'Show Online Status',
+    105 => 'Show up in Who\'s Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Nic nového k zobrazení',
+    2 => 'Žádné nové články k zobrazení.  Možná nejsou žádné novinky, nebo jste zadali špatné podmínky filtrování',
+    3 => ' pro sekci %s',
+    4 => 'Nejnovější článek',
+    5 => 'Další',
+    6 => 'Předešlé',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Nastala chyba při odesílání emailu, zkuste to prosím znovu.',
+    2 => 'Zpráva úspěšně odeslána.',
+    3 => 'Zkontrolujte si prosím správnost emailové adresy.',
+    4 => 'Prosím vyplňte všechna pole formuláře.',
+    5 => 'Chyba: neexistující uživatel.',
+    6 => 'Vznikla chyba.',
+    7 => 'Uživatelský profil ',
+    8 => 'Jméno',
+    9 => 'URL stránek uživatele',
+    10 => 'Poslat email uživateli ',
+    11 => 'Vaše jméno:',
+    12 => 'Poslat na:',
+    13 => 'Hlavička:',
+    14 => 'Zpráva:',
+    15 => 'Použité HTML tagy nebudou změněny.<br>',
+    16 => 'Poslat zprávu',
+    17 => 'Poslat článek mailem',
+    18 => 'Komu',
+    19 => 'Kam',
+    20 => 'Od koho',
+    21 => 'Email odesilatele',
+    22 => 'Prosím vyplňte všechna pole formuláře.',
+    23 => "Tento email Vám byl poslán %s z %s protože si tento uživatel myslí, že by Vás mohl zaujmut.  Bylo publikováno na {$_CONF['site_url']}.   Toto NENÍ SPAM a Vaše emailová adresa nebyla nikde uložena a nebude tudíž použita k jakýmkoli účelům.",
+    24 => 'Komentář k článku na',
+    25 => 'Musíte být přihlášen jako uživatel pro použití této funkce weblogu.<br>  Touto restrikcí se předchází zneužití systému k spammingu!',
+    26 => 'Tento formulář umožňuje zaslat email vybranému uživateli.  Vyplňte prosím všechna pole.',
+    27 => 'Krátká zpráva',
+    28 => '%s napsáno: ',
+    29 => "Toto jsou denní novinky z {$_CONF['site_name']} pro ",
+    30 => ' Denní novinky pro ',
+    31 => 'Titulek',
+    32 => 'Datum',
+    33 => 'Celý článek si můžete přečíst na ',
+    34 => 'Konec zprávy',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'rozšířené hledání',
+    2 => 'Klíčová slova',
+    3 => 'Sekce',
+    4 => 'Vše',
+    5 => 'Typ',
+    6 => 'Články',
+    7 => 'Komentáře',
+    8 => 'Autoři',
+    9 => 'Vše',
+    10 => 'Hledání',
+    11 => 'Výsledky hledání',
+    12 => 'odpovídající filtru',
+    13 => 'Výsledky hledání: nic neodpovídá zadanému filtru',
+    14 => 'Žádné výsledky neodpovídají zadanému filtru',
+    15 => 'Prosím zkuste znovu.',
+    16 => 'Titulek',
+    17 => 'Datum',
+    18 => 'Autor',
+    19 => "Prohledat celou databázi nových i archivních položek na {$_CONF['site_name']}",
+    20 => 'Datum',
+    21 => 'do',
+    22 => '(Formát data RRRR-MM-DD)',
+    23 => 'Zhlédnuto',
+    24 => 'Nalezeno',
+    25 => 'filtru odpovídajících z celkem ',
+    26 => 'položek během',
+    27 => 'sekund',
+    28 => 'Žádný článek nebo komentář neodpovídá zadanému filtru',
+    29 => 'Výsledky vyhledávání článků a komentářů',
+    30 => 'Žádné výsledky neodpovídají zadanému filtru',
+    31 => 'This plug-in returned no matches',
+    32 => 'Událost',
+    33 => 'URL',
+    34 => 'Umístění',
+    35 => 'Celý den',
+    36 => 'Žádné události neodpovídají zadanému filtru',
+    37 => 'Výsledky hledání',
+    38 => 'Výsledky hledání odkazů',
+    39 => 'Odkazy',
+    40 => 'Události',
+    41 => 'Alespoň 3 znaky v poli vyhledávání.',
+    42 => 'Prosím zadávejte datum v tomto formátu: RRRR-MM-DD (rok-měsíc-den).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Celková statistika stránek',
+    2 => 'Souhrn požadavků na systém',
+    3 => 'Články(komentáře) v systému',
+    4 => 'Anket(odpovědí) v systému',
+    5 => 'Odkazy(jejich následování) v systému',
+    6 => 'Události v systému',
+    7 => 'Top Ten články',
+    8 => 'Titulek článku',
+    9 => 'Zhlédnuto',
+    10 => 'Žádné články zde nejsou.',
+    11 => 'Top Ten komentovaných článků',
+    12 => 'Komentáře',
+    13 => 'Žádné komentované články zde nejsou.',
+    14 => 'Top Ten anket',
+    15 => 'Anketní otázka',
+    16 => 'Hlasů',
+    17 => 'Žádné ankety zde nejsou.',
+    18 => 'Top Ten okazů',
+    19 => 'Odkazy',
+    20 => 'Zhlédnuto',
+    21 => 'Žádné odkazy na které se klickalo zde nejsou.',
+    22 => 'Top Ten emailem zaslaných článků',
+    23 => 'Zasláno emailem',
+    24 => 'Žádné emailem poslané články zde nejsou.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Související',
+    2 => 'Poslat mailem',
+    3 => 'Verze pro tiskárnu',
+    4 => 'Volby článku',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Pro tento %s musíte být přihlášen jako uživatel.',
+    2 => 'Přihlásit',
+    3 => 'Nový uživatel',
+    4 => 'Přidání',
+    5 => 'Přidat odkaz',
+    6 => 'Publikovat článek',
+    7 => 'Vyžadováno přihlášení',
+    8 => 'Publikování',
+    9 => 'Pro publikování na těchto stránkách následujte prosím tato prostá doporučení: <ul><li>Vyplňte všechna povinná pole<li>Zadávejte kompletní a přesné informace<li>Dvakrát si zkontrolujte URL</ul>',
+    10 => 'Titulek',
+    11 => 'Odkaz',
+    12 => 'Datum začátku',
+    13 => 'Datum konce&nbsp;&nbsp;&nbsp;',
+    14 => 'Umístění',
+    15 => 'Popis',
+    16 => 'Pokud je Jiné, specifikujte prosím',
+    17 => 'Kategorie',
+    18 => 'Jiné',
+    19 => 'Přečtěte si',
+    20 => 'Chyba: Chybí Kategorie',
+    21 => 'Pokud vybráno "Jiné" vyberte prosím i kategorii',
+    22 => 'Chyba: nevyplněná pole',
+    23 => 'Prosím vyplňte všechna pole. Vše je povinné.',
+    24 => 'Publikace provedena',
+    25 => 'Vaše %s publikace byla provedena.',
+    26 => 'Omezení rychlosti publikování',
+    27 => 'Uživatel',
+    28 => 'Sekce',
+    29 => 'Článek',
+    30 => 'Poslední publikace byla před ',
+    31 => " sekundami.  Tato stránka vyžaduje {$_CONF['speedlimit']} sekund mezi publikacemi",
+    32 => 'Náhled',
+    33 => 'Náhled článku',
+    34 => 'Odhlásit',
+    35 => 'HTML tagy nejsou podporovány',
+    36 => 'Typ publikace',
+    37 => "Přidání události - {$_CONF['site_name']} přidá tuto do Veřejného kalendáře pokud si nevyberete jen přidání do Osobního kaendáře.<br><br>Pokud přidáte událost do Veřejného kalendáře bude tato po kontrole administrátorem zařazena do Veřejného kalendáře.",
+    38 => 'Přidat událost do',
+    39 => 'Veřejný kalendář',
+    40 => 'Osobní kalendář',
+    41 => 'Čas konce&nbsp;&nbsp;&nbsp;',
+    42 => 'Čas začátku',
+    43 => 'Každodenně',
+    44 => 'Adresa 1',
+    45 => 'Adresa 2',
+    46 => 'Město',
+    47 => 'Země',
+    48 => 'Směrové číslo',
+    49 => 'Typ události',
+    50 => 'Ediovat typ události',
+    51 => 'Umístění',
+    52 => 'Smazat',
+    53 => 'Vytvořit účet'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autentikace vyžadována',
+    2 => 'Přístup odepřen! Nesprávné přihlašovací údaje',
+    3 => 'Neplatné heslo pro uživatele',
+    4 => 'Uživatel:',
+    5 => 'Heslo:',
+    6 => 'Každý přístup do administrátorské části stránek je zapisován do log_file a je tam také kontrolován.<br>Tato stránka je jen pro autorizované uživatele s administrátorskými právy.',
+    7 => 'Přihlásit'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Nedostatečná administrátorská práva',
+    2 => 'Nemáte povolen přístup k této části administrace.',
+    3 => 'Editor bloků',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Titulek bloku',
+    6 => 'Sekce',
+    7 => 'Vše',
+    8 => 'Úroveň práv bloku',
+    9 => 'Pořadí bloku',
+    10 => 'Typ bloku',
+    11 => 'Blok Portálu',
+    12 => 'Normální blok',
+    13 => 'Volby Bloku Portálu',
+    14 => 'RDF URL',
+    15 => 'Last RDF Update',
+    16 => 'Volby bloku',
+    17 => 'Obsah bloku',
+    18 => 'Prosím vyplňte Titulek bloku, Úroveň práv a Obsah',
+    19 => 'Manažer bloků',
+    20 => 'Titulek bloku',
+    21 => 'Úroveň práv bloku',
+    22 => 'Typ bloku',
+    23 => 'Pořadí bloku',
+    24 => 'Sekce bloku',
+    25 => 'Pro smazání a editaci bloku, klepněte na blok níže.  Pro vytvoření nového bloku klepněte na Nový blok výše.',
+    26 => 'Vzhled bloku',
+    27 => 'PHP Blok',
+    28 => 'Volby PHP Bloku',
+    29 => 'Funkce bloku',
+    30 => 'If you would like to have one of your blocks use PHP code, enter the name of the function above.  Your function name must start with the prefix "phpblock_" (e.g. phpblock_getweather).  If it does not have this prefix, your function will NOT be called.  We do this to keep people who may have hacked your Geeklog installation from putting arbitrary function calls that may be harmful to your system.  Be sure not to put empty parenthisis "()" after your function name.  Finally, it is recommended that you put all your PHP Block code in /path/to/geeklog/system/lib-custom.php.  That will allow the code to stay with you even when you upgrade to a newer version of Geeklog.',
+    31 => 'Chyba v PHP Bloku.  Funkce, %s, neexistuje.',
+    32 => 'Chyba - neexistující pole',
+    33 => 'You must enter the URL to the .rdf file for portal blocks',
+    34 => 'You must enter the title and the function for PHP blocks',
+    35 => 'You must enter the title and the content for normal blocks',
+    36 => 'You must enter the content for layout blocks',
+    37 => 'Špatné jméno funkce PHP bloku',
+    38 => 'Functions for PHP Bloky must have the prefix \'phpblock_\' (e.g. phpblock_getweather).  The \'phpblock_\' prefix is required for security reasons to prevent the execution of arbitrary code.',
+    39 => 'Strana',
+    40 => 'Vlevo',
+    41 => 'Vpravo',
+    42 => 'You must enter the blockorder and security level for Geeklog default blocks',
+    43 => 'Jen na Homepage',
+    44 => 'Přístup odepřen',
+    45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
+    46 => 'Nový blok',
+    47 => 'Administrace',
+    48 => 'Jméno bloku',
+    49 => ' (bez mezer, musí být unikátní)',
+    50 => ' URL Help souboru',
+    51 => 'včetně http://',
+    52 => 'Pokud necháte prázdné - ikona helpu se nebude zobrazovat.',
+    53 => 'Povolit',
+    54 => 'uložit',
+    55 => 'zrušit akci',
+    56 => 'smazat',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor událostí',
+    2 => 'Error',
+    3 => 'Titulek události',
+    4 => 'URL události',
+    5 => 'Datum začátku',
+    6 => 'Datum konce&nbsp;&nbsp;&nbsp;',
+    7 => 'Umístění události',
+    8 => 'Popis události',
+    9 => '(včetně http://)',
+    10 => 'Musíte zadat datum/čas, popis a umístění události!',
+    11 => 'Manažer událostí',
+    12 => 'Pro změnu a smazání události, klepněte na tuto níže.  Pro vytvoření nové události klepněte na Nová událost výše.',
+    13 => 'Titulek události',
+    14 => 'Datum začátku',
+    15 => 'Datum konce&nbsp;&nbsp;&nbsp;',
+    16 => 'Přístup odepřen',
+    17 => "Pokoušíte se editovat událost na níž nemáte dostatečná práva.  Tento pokus byl zaznamenán. Prosím <a href=\"{$_CONF['site_admin_url']}/event.php\">vraťte se na administraci událostí</a>.",
+    18 => 'Nová událost',
+    19 => 'Administrace',
+    20 => 'uložit',
+    21 => 'zrušit akci',
+    22 => 'smazat',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Předešlé články',
+    2 => 'Další články',
+    3 => 'Režim',
+    4 => 'Publikační režim',
+    5 => 'Editor článků',
+    6 => 'Nejsou zde články',
+    7 => 'Autor',
+    8 => 'uložit',
+    9 => 'náhled',
+    10 => 'zrušit akci',
+    11 => 'smazat',
+    12 => 'ID',
+    13 => 'Titulek',
+    14 => 'Sekce',
+    15 => 'Datum publikace',
+    16 => 'Intro Text',
+    17 => 'Text',
+    18 => 'Zhlédnuto',
+    19 => 'Komentáře',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Seznam článků',
+    23 => 'Pro editaci nebo smazání článku klepněte na jeho číslo níže. Pro zobrazení,klepněte na titulek článku, který chcete vidět. Pro vytvoření nového článku klepněte na Nový článek výše.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Náhled',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Prosím vyplnťe Autor, Titulek a Intro Text',
+    32 => 'Zvýraznit',
+    33 => 'V sytému může být jen jeden zvýrazněný článek (ten se bude zobrazovat vždy jako první)',
+    34 => 'Verze pro tiskárnu',
+    35 => 'Ano',
+    36 => 'Ne',
+    37 => 'Více od',
+    38 => 'Více z',
+    39 => 'Posláno emailem',
+    40 => 'Přístup odepřen',
+    41 => "Pokoušíte se editovat odkaz na nějž nemáte dostatečná práva.  Tento pokus byl zaznamenán.  Můžete si jen prohlédnout články níže. Prosím <a href=\"{$_CONF['site_admin_url']}/story.php\">vraťte se na administraci článků</a> když skončíte.",
+    42 => "Pokoušíte se editovat odkaz na nějž nemáte dostatečná práva.  Tento pokus byl zaznamenán.  Prosím <a href=\"{$_CONF['site_admin_url']}/story.php\">vraťte se na administraci článků</a>.",
+    43 => 'Nový článek',
+    44 => 'Administrace',
+    45 => 'Přístup',
+    46 => '<b>PAMATUJTE:</b> pokud zadáte datum v budoucnosti, tento článek nebude publikován do tohoto data.  To znamená, že článek nebude vidět ani nebude zahrnut do vyhledávání a do statistiky stránek před tímto datem.',
+    47 => 'Upload obrázků',
+    48 => 'obrázek',
+    49 => 'vpravo',
+    50 => 'vlevo',
+    51 => 'k přidání obrázků (max. velikost 200x200px) do článku musíte vložit speciálně formátovaný text.<br>Tento text vypadá takto: [imageX](systém umístí sám), [imageX_right](systém umístí vpravo od textu) nebo [imageX_left](systém umístí vlevo od textu) - kde X je číslo obrázku jež je přidáván.<br>PAMATUJTE: musíte použít obrázky jež jsou přidávány.  V opačném případě nebude možno publikovat článek.<BR><P><B>NÁHLED</B>: Pro náhled článku s obrázky je nejlépe použít náhled Verze pro tiskárnu.  Tlačítko <i>náhled</i> prosím používejte jen pro prohlížení článků bez obrázků.',
+    52 => 'Smazat',
+    53 => ' nepoužito.  Před uložením změn musíte vložit obrázek do Intro textu nebo textu.',
+    54 => 'Přidaný obrázek nepoužit',
+    55 => 'Následující chyby se vyskytly při publikaci vašeho článku.  Prosím opravte tyto chyby před konečnou publikací.',
+    56 => 'Ikona Sekce.',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor sekcí',
+    2 => 'ID sekce',
+    3 => 'Jméno sekce',
+    4 => 'Ikona sekce',
+    5 => '(bez mezer)',
+    6 => 'Smazání sekce způsobí smazání článků a komentářů k nim i její ikony!',
+    7 => 'Prosím vyplňte ID sekce a Jméno sekce',
+    8 => 'Manažer sekcí',
+    9 => 'Pro úpravu a smazání sekce klepněte na její jméno níže.  Pro vytvoření nové sekce klepněte na Nová sekce výše.',
+    10 => 'pořadí',
+    11 => 'článků/stránku',
+    12 => 'Přístup odepřen',
+    13 => "Pokoušíte se editovat sekci na níž nemáte dostatečná práva.  Tento pokus byl zaznamenán. Prosím <a href=\"{$_CONF['site_admin_url']}/topic.php\">vraťte se na administraci sekcí</a>.",
+    14 => 'typ řazení',
+    15 => 'abecedně',
+    16 => 'nastaveno',
+    17 => 'Nová sekce',
+    18 => 'Administrace',
+    19 => 'uložit',
+    20 => 'zrušit akci',
+    21 => 'smazat',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor uživatelů',
+    2 => 'ID uživatele',
+    3 => 'Uživatel',
+    4 => 'Jméno uživatele',
+    5 => 'Heslo',
+    6 => 'Úroveň práv',
+    7 => 'Emailová adresa',
+    8 => 'Homepage',
+    9 => '(bez mezer)',
+    10 => 'Please fill in the Uživatel, Full name, Security Level and Email Address fields',
+    11 => 'Manažer uživatelů',
+    12 => 'To modify or smazat a user, click on that user below.  To create a new user click the new user button to the left. You can do simple searches by entering parts of a Uživatel,email address or fullname (e.g.*son* or *.edu) in the form below.',
+    13 => 'Úroveň práv',
+    14 => 'Datum registrace',
+    15 => 'Nový uživatel',
+    16 => 'Administrace',
+    17 => 'změna hesla',
+    18 => 'zrušit akci',
+    19 => 'smazat',
+    20 => 'uložit',
+    21 => 'Uživatel již existuje.',
+    22 => 'Chyba',
+    23 => 'Hromadné přidání',
+    24 => 'Hromadné přidání uživatelů',
+    25 => 'You can import a batch of users into Geeklog.  The import file must a tab-delimited text file and must have the fields in the following order: full name, Uživatel, email address.  Each user you import will be emailed with a random Heslo.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
+    26 => 'Hledat',
+    27 => 'Omezit na',
+    28 => 'Zaškrtnout pro smazání obrázku',
+    29 => 'Cesta',
+    30 => 'Import',
+    31 => 'Noví uživatelé',
+    32 => 'HOTOVO. Importováno %d a vyskytlo se %d chyb.',
+    33 => 'Potvrdit',
+    34 => 'Chyba: Specifikujte soubor.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Potvrdit',
+    2 => 'Smazat',
+    3 => 'Editovat',
+    4 => 'Profil',
+    10 => 'Titulek',
+    11 => 'Datum začátku',
+    12 => 'URL',
+    13 => 'Kategorie',
+    14 => 'Datum',
+    15 => 'Sekce',
+    16 => 'Jméno uživatele',
+    17 => 'Celé jméno uživatele',
+    18 => 'Email',
+    34 => 'Administrace weblogu',
+    35 => 'Přidání článku',
+    36 => 'Přidání odkazu',
+    37 => 'Přidání události',
+    38 => 'Přidat',
+    39 => 'Nyní zde není nic k moderování',
+    40 => 'Publikace uživatele'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'neděle',
+    2 => 'pondělí',
+    3 => 'úterý',
+    4 => 'středa',
+    5 => 'čtvrtek',
+    6 => 'pátek',
+    7 => 'sobota',
+    8 => 'Přidat událost',
+    9 => 'Události weblogu',
+    10 => 'Události uživatele',
+    11 => 'Veřejný kalendář',
+    12 => 'Osobní kalendář',
+    13 => 'leden',
+    14 => 'únor',
+    15 => 'březen',
+    16 => 'duben',
+    17 => 'květen',
+    18 => 'červen',
+    19 => 'červenec',
+    20 => 'srpen',
+    21 => 'září',
+    22 => 'říjen',
+    23 => 'listopad',
+    24 => 'prosinec',
+    25 => 'Zpět na ',
+    26 => 'Každý den',
+    27 => 'Týden',
+    28 => 'Osobní kalendář pro',
+    29 => 'Veřejný kalendář',
+    30 => 'smazat událost',
+    31 => 'Přidat událost',
+    32 => 'Událost',
+    33 => 'Datum',
+    34 => 'Čas',
+    35 => 'Rychlé přidání',
+    36 => 'Potvrdit',
+    37 => 'Promiňte, Osobní kalendář není na tšchto stránkách podporován',
+    38 => 'Editor osobních událostí',
+    39 => 'Den',
+    40 => 'Týden',
+    41 => 'Měsíc'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} - zasílání emailů",
+    2 => 'Od',
+    3 => 'Zpětná  adresa',
+    4 => 'Hlavička',
+    5 => 'Zpráva',
+    6 => 'Poslat:',
+    7 => 'Všem uživatelům',
+    8 => 'Admin',
+    9 => 'Možnosti',
+    10 => 'HTML',
+    11 => 'Urgentní zpráva!',
+    12 => 'Poslat',
+    13 => 'Smazat',
+    14 => 'Ignorovat uživ. nastavení',
+    15 => 'Chyba při zasílání: ',
+    16 => 'Zasláno: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Poslat další zprávu</a>",
+    18 => 'Pro',
+    19 => 'POZOR: chcete-li zaslat zprávu všem uživatelům, vyberte Logged-in Users skupinu z roletové nabídky.',
+    20 => "Odesláno <successcount> zpráv a nezasláno <failcount> zpráv.  Detaily jsou níže u každého pokusu o zaslání zvlášť.  Můžete se pokusit znovu <a href=\"{$_CONF['site_admin_url']}/mail.php\">zaslat zprávu</a> nebo <a href=\"{$_CONF['site_admin_url']}/moderation.php\">se vrátit na stránku administrace</a>.",
+    21 => 'Chyby',
+    22 => 'Úspěšně',
+    23 => 'Bez chyb',
+    24 => 'Neúspěšně',
+    25 => '- Vybrat skupinu -',
+    26 => 'Prosím vyplňte všechna pole ve formuláři a vyberte skupinu uživatelů z roletové nabídky.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Plug-in List',
+    6 => 'Warning: Plug-in Already Installed!',
+    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
+    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
+    12 => 'no plugin name provided to plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'New Plug-in',
+    15 => 'Administrace',
+    16 => 'Plug-in Name',
+    17 => 'Plug-in Version',
+    18 => 'Geeklog Version',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => 'Install',
+    23 => 'uložit',
+    24 => 'zrušit akci',
+    25 => 'smazat',
+    26 => 'Plug-in Name',
+    27 => 'Plug-in Homepage',
+    28 => 'Plug-in Version',
+    29 => 'Geeklog Version',
+    30 => 'smazat Plug-in?',
+    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Vaše přihlašovací heslo Vám bylo zasláno na zadanou adresu. Prosím následujte prosté instrukce v poště. Děkujeme Vám za účast na {$_CONF['site_name']}",
+    2 => "Děkujeme za přidání článku na {$_CONF['site_name']}..",
+    3 => "Děkujeme za přidání odkazu na {$_CONF['site_name']}..",
+    4 => "Děkujeme za přidání události na  {$_CONF['site_name']}..",
+    5 => 'Vaše informace o účtu byly uloženy.',
+    6 => 'Vaše vlastní nastavení bylo uloženo.',
+    7 => 'Vaše nastavení komentářů bylo uloženo.',
+    8 => 'Byl jste úspěšně odhlášen.',
+    9 => 'Článek byl uložen.',
+    10 => 'Článek byl vymazán.',
+    11 => 'Bloky byly uloženy.',
+    12 => 'Blok byl odstraněn.',
+    13 => 'Sekce byla uložena.',
+    14 => 'Sekce a články s komentáři v ní byla smazána.',
+    15 => 'Odkaz byl uložen.',
+    16 => 'Odkaz byl odstraněn.',
+    17 => 'Událost byla uložena.',
+    18 => 'Událost byla odstraněna.',
+    19 => 'Anketa byla uložena.',
+    20 => 'Anketa byla odstraněna.',
+    21 => 'Uživatel byl přidán/změněn.',
+    22 => 'Uživatel byl odstraněn.',
+    23 => 'Chyba v přidávání události do Osobního kalendáře. Neexistujíci ID události.',
+    24 => 'Událost bylo vložena do vašeho kalendáře',
+    25 => 'Pro otevření osobního kalendáře musíte být přihlášen',
+    26 => 'Událost byla vymazána z vašeho kalendáře',
+    27 => 'Vzkaz poslán.',
+    28 => 'The plug-in has been successfully saved',
+    29 => 'Promiňte, Osobní kalendář není na tšchto stránkách podporován',
+    30 => 'Přístup odepřen',
+    31 => 'Nemáte práva přístupu k administraci článků.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    32 => 'Nemáte práva přístupu k administraci sekcí.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    33 => 'Nemáte práva přístupu k administraci bloků.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    34 => 'Nemáte práva přístupu k administraci odkazů.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    35 => 'Nemáte práva přístupu k administraci událostí.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    36 => 'Nemáte práva přístupu k administraci anket.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    37 => 'Nemáte práva přístupu k administraci uživatelů.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    38 => 'Nemáte práva přístupu k administraci pluginů.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    39 => 'Nemáte práva přístupu k administraci enailových uživatelů.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    40 => 'Systémové zprávy',
+    41 => 'Nemáte práva přístupu k administraci slov.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    42 => 'Vaše slovo bylo uloženo.',
+    43 => 'Slovo bylo smazáno.',
+    44 => 'The plug-in was successfully installed!',
+    45 => 'The plug-in was successfully deleted.',
+    46 => 'Nemáte práva přístupu k database backup utilitě.  Všechny neoprávněné požadavky a přístupy jsou zaznamenávány',
+    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Děkujeme za registraci na {$_CONF['site_name']}.  Vaše heslo pro přístup do systému Vám bylo zasláno na email, který jste zadali.",
+    49 => 'Skupina byla úspěšně uložena.',
+    50 => 'Skupina byla úspěšně smazána.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Práva',
+    'ownerroot' => 'Vlastník-Root',
+    'group' => 'Skupina',
+    'readonly' => 'Jen pro čtení',
+    'accessrights' => 'Přístupová práva',
+    'owner' => 'Vlastník',
+    'grantgrouplabel' => 'Zaručuje práva vyšší než práva skupiny pro editaci',
+    'permmsg' => 'PAMATUJTE: <i>uživatelé</i> jsou přihlášení uživatelé weblogu a <i>hosté</i> jsou všichni, kdo si prohlížejí weblog bez přihlášení.',
+    'securitygroups' => 'Skupiny/Úroveň práv',
+    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Editor skupin uživatelů',
+    'description' => 'Popis',
+    'name' => 'Jméno',
+    'rights' => 'Práva',
+    'missingfields' => 'Chybějící pole',
+    'missingfieldsmsg' => 'You must supply the name and a description for a group',
+    'groupmanager' => 'Manažer skupin uživatelů',
+    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used v systému.',
+    'groupname' => 'Jméno skupiny uživatelů',
+    'coregroup' => 'Hlavní skupina',
+    'yes' => 'Ano',
+    'no' => 'Ne',
+    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
+    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
+    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
+    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'lock' => 'Uzamčeno',
+    'members' => 'Uživatelé',
+    'anonymous' => 'Hosté',
+    'permissions' => 'Přidělení oprávnění',
+    'permissionskey' => 'R = čtení, E = editace, editační práva v sobě zahrnují i právo číst!',
+    'edit' => 'Editace',
+    'none' => 'Není',
+    'accessdenied' => 'Přístup odepřen',
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
+    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'newgroup' => 'Nová skupina uživatelů',
+    'adminhome' => 'Administrace',
+    'save' => 'uložit',
+    'cancel' => 'zrušit akci',
+    'delete' => 'smazat',
+    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is Chyba',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Last 10 Back-ups',
+    'do_backup' => 'Do Backup',
+    'backup_successful' => 'Database back up was successful.',
+    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
+    'no_access' => "Chyba: Directory {$_CONF['backup_path']} is not accessible.",
+    'backup_file' => 'Backup file',
+    'size' => 'Size',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Homepage',
+    2 => 'Kontakt',
+    3 => 'Publikovat',
+    4 => 'Odkazy',
+    5 => 'Ankety',
+    6 => 'Kalendář',
+    7 => 'Statistika',
+    8 => 'Vlastní nastavení',
+    9 => 'Hledání',
+    10 => 'rozšířené hledání',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Gee, I\'ve looked everywhere but I can not find <b>%s</b>.',
+    3 => "<p>We're sorry, but the file you have requested does not exist. Please feel free to check the <a href=\"{$_CONF['site_url']}\">main page</a> or the <a href=\"{$_CONF['site_url']}/search.php\">search page</a> to see if you can find what you lost."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Je nutné se přihlásit',
+    2 => 'Promiňte, pro přístup je nutné být přihlášen jako uživatel.',
+    3 => 'Přihlásit',
+    4 => 'Nový uživatel'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/danish.php 1.4.0sr5-1/cpanel-glprivate/language/danish.php
--- 1.3.11sr1/cpanel-glprivate/language/danish.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/danish.php	2006-08-08 02:39:06.000000000 -0500
@@ -152,7 +152,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -319,7 +329,23 @@
     104 => 'Vis Online Status',
     105 => 'Vis i Hvem er online blokken',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -337,27 +363,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'Der er ingen links.',
-    3 => 'Tilfj Et Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Afstemningen er Gemt',
-    2 => 'Din stemme er afgivet og gemt',
-    3 => 'Stem',
-    4 => 'Afstemninger i Systemet',
-    5 => 'Stemmer',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -458,7 +463,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -488,7 +497,14 @@
     21 => 'Der er ikke nogen links p dette site eller ogs er der ikke, som har klikket p et.',
     22 => 'Top 10 Emailede Historier',
     23 => 'Emails',
-    24 => 'Der er ikke nogen, der har emailet en historie'
+    24 => 'Der er ikke nogen, der har emailet en historie',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -641,7 +657,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -676,35 +697,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Link Titel',
-    4 => 'Link URL',
-    5 => 'Kategori',
-    6 => '(inkluder http://)',
-    7 => 'Anden',
-    8 => 'Link Hits',
-    9 => 'Link Beskrivelse',
-    10 => 'Du skal angive Titel, URL og Beskrivelse.',
-    11 => 'Link Manager',
-    12 => 'For at redigere eller slette et link, klik p linket herunder. For at oprette et nyt link, klik p nyt link herover.',
-    13 => 'Link Titel',
-    14 => 'Link Kategori',
-    15 => 'Link URL',
-    16 => 'Adgang Ngtet',
-    17 => "Du prver at f adgang til et link, som du ikke har rettigheder til! Dette forsg er blevet logget. G tilbage til <a href=\"{$_CONF['site_url']}/admin/event.php\">administrations interfacet</a>.",
-    18 => 'Nyt Link',
-    19 => 'Admin Hjem',
-    20 => 'Hvis Anden, specificer hvilken',
-    21 => 'gem',
-    22 => 'fortryd',
-    23 => 'slet'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -727,16 +719,16 @@
     17 => 'Krop Tekst',
     18 => 'Hits',
     19 => 'Kommentarer',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Historie Liste',
     23 => 'For at redigere eller slette en historie, klik p historiens nummer herunder. For at se en historie, klik p titlen af den historie du nsker at se. For at oprette en ny historie, klik p ny historie herover.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Gennemse Historie',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Udfyld Forfatter, Titel og Intro Tekst felterne',
     32 => 'Fremhvet',
@@ -769,39 +761,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mde',
-    2 => 'Indtast et sprgsml og mindst et svar',
-    3 => 'Afstemning Lavet',
-    4 => 'Afstemning %s gemt',
-    5 => 'Rediger Afstemning',
-    6 => 'Afstemning ID',
-    7 => '(brug ikke mellemrum)',
-    8 => 'Vises p Siden',
-    9 => 'Sprgsml',
-    10 => 'Svar/Stemmer',
-    11 => 'Der er sket en fejl ved hentning af svardata til afstemning %s',
-    12 => 'Der er sket en fejl ved hentning af sprgsmldata til afstemning %s',
-    13 => 'Lav Afstemning',
-    14 => 'gem',
-    15 => 'fortryd',
-    16 => 'slet',
-    17 => 'Indtast afstemnings ID',
-    18 => 'Afstemning Liste',
-    19 => 'For at redigere eller slette en afstemning, klik p afstemningen. For at oprette en ny afstemning, klik p ny afstemning herover.',
-    20 => 'Stemmere',
-    21 => 'Adgang Ngtet',
-    22 => "Du prver at f adgang til en afstemning, som du ikke har rettigheder til! Dette forsg er blevet logget! G tilbage til <a href=\"{$_CONF['site_url']}/admin/poll.php\">afstemnings administrations interfacet</a>.",
-    23 => 'Ny Afstemning',
-    24 => 'Admin Hjem',
-    25 => 'Ja',
-    26 => 'Nej'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -833,7 +816,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -875,7 +861,18 @@
     33 => 'tilfj',
     34 => 'Fejl: Du skal specificere en fil.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1020,7 +1017,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1063,7 +1064,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1130,7 +1139,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1190,7 +1213,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1200,7 +1232,6 @@
     'last_ten_backups' => 'Sidste 10 Backups',
     'do_backup' => 'Backup',
     'backup_successful' => 'Backup af databasen skete med succes.',
-    'no_backups' => 'Der er ingen backups i systemet',
     'db_explanation' => 'For at lave en ny backup af dit Geeklog system, skal du klikke p knappen herunder',
     'not_found' => "Forkert sti eller ogs er mysqldump vrktjet ikke eksekverbar.<br>Tjek <strong>\$_DB_mysqldump_path</strong> definitionen i filen config.php.<br>Variablen er pt. defineret som: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Mislykkedes: Filestrrelsen var p 0 bytes',
@@ -1224,7 +1255,8 @@
     7 => 'Sidestatistik',
     8 => 'Personificer',
     9 => 'Sg',
-    10 => 'avanceret sgning'
+    10 => 'avanceret sgning',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1266,4 +1298,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/danish_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/danish_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/danish_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/danish_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1507 @@
+<?php
+
+###############################################################################
+# danish.php
+# This is the danish language page for GeekLog!
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Tilføjet af:',
+    2 => 'læs mere',
+    3 => 'kommentarer',
+    4 => 'Rediger',
+    5 => 'Stem',
+    6 => 'Resultater',
+    7 => 'Afstemningsresultater',
+    8 => 'stemmer',
+    9 => 'Adminfuntioner:',
+    10 => 'Tilføjelser',
+    11 => 'Historier',
+    12 => 'Kasser',
+    13 => 'Emner',
+    14 => 'Links',
+    15 => 'Begivenheder',
+    16 => 'Afstemninger',
+    17 => 'Brugere',
+    18 => 'SQL Forespørgsel',
+    19 => 'Log ud',
+    20 => 'Brugerinformation:',
+    21 => 'Brugernavn',
+    22 => 'Bruger ID',
+    23 => 'Sikkerhedsniveau',
+    24 => 'Anonym',
+    25 => 'Svar',
+    26 => 'Følgende kommentarer ejes af de/den, som har tilføjet dem. Hjemmesiden er ikke ansvarlig for hvad de/den har skrevet/sagt.',
+    27 => 'Seneste tilføjelse',
+    28 => 'Slet',
+    29 => 'Der er ingen kommentarer',
+    30 => 'Ældre Historier',
+    31 => 'Tilladte HTML Tags:',
+    32 => 'Fejl, ugyldigt brugernavn',
+    33 => 'Fejl, kunne ikke skrive til logfilen',
+    34 => 'Fejl',
+    35 => 'Log ud',
+    36 => 'den',
+    37 => 'Ingen bruger historier',
+    38 => 'Content Syndication',
+    39 => 'Genindlæs',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Gæster',
+    42 => 'Forfattet af:',
+    43 => 'Svar på dette',
+    44 => 'Top',
+    45 => 'MySQL Fejl Nummer',
+    46 => 'MySQL Fejl Besked',
+    47 => 'Brugerfunktioner',
+    48 => 'Kontoinformation',
+    49 => 'Visningspræferencer',
+    50 => 'Fejl på SQL statement',
+    51 => 'hjælp',
+    52 => 'Ny',
+    53 => 'Admin Hjem',
+    54 => 'Kunne ikke åbne filen.',
+    55 => 'Fejl på',
+    56 => 'Stem',
+    57 => 'Password',
+    58 => 'Log ind',
+    59 => "Har du endnu ikke en konto? Opret en <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ny Brugerkonto</a>",
+    60 => 'Tilføj en kommentar',
+    61 => 'Opret en Ny Konto',
+    62 => 'ord',
+    63 => 'Kommentarpræferencer',
+    64 => 'Send Artiklen Til en Ven',
+    65 => 'Se Printervenlig Version',
+    66 => 'Min Kalender',
+    67 => 'Velkommen til ',
+    68 => 'hjem',
+    69 => 'kontakt',
+    70 => 'søg',
+    71 => 'tilføj',
+    72 => 'links',
+    73 => 'tidligere afstemninger',
+    74 => 'kalender',
+    75 => 'avanceret søgning',
+    76 => 'sidestatistik',
+    77 => 'Plugins',
+    78 => 'Kommende Begivenheder',
+    79 => 'Nyt',
+    80 => 'historier i de sidste',
+    81 => 'historie i de sidste',
+    82 => 'timer',
+    83 => 'KOMMENTARER',
+    84 => 'LINKS',
+    85 => 'sidste 48 timer',
+    86 => 'Ingen nye kommentarer',
+    87 => 'sidste 2 uger',
+    88 => 'Ingen nye links',
+    89 => 'Der er ingen kommende begivenheder',
+    90 => 'Hjem',
+    91 => 'Genererede siden på',
+    92 => 'sekunder',
+    93 => 'Copyright',
+    94 => 'Alle trademarks og copyrights på hjemmesiden tilhører de respektive ejere.',
+    95 => 'Styrket Af',
+    96 => 'Grupper',
+    97 => 'Ordliste',
+    98 => 'Plugins',
+    99 => 'HISTORIER',
+    100 => 'Ingen nye historier',
+    101 => 'Dine Begivenheder',
+    102 => 'Sidebegivenheder',
+    103 => 'DB Backup',
+    104 => 'af',
+    105 => 'Email Brugere',
+    106 => 'Visninger',
+    107 => 'GL Version Test',
+    108 => 'Slet Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalender',
+    2 => 'Desværre, der er ingen begivenheder at vise.',
+    3 => 'Hvornår',
+    4 => 'Hvor',
+    5 => 'Beskrivelse',
+    6 => 'Tilføj En Begivenhed',
+    7 => 'Kommende Begivenheder',
+    8 => 'Hvis du tilføjer denne begivenhed til din kalender, kan du hurtigt få et overblik over kun de begivenheder du er interesseret i, ved at klikke "Min Kalender" i Brugerkassen.',
+    9 => 'Tilføj til Min Kalender',
+    10 => 'Fjern fra Min Kalender',
+    11 => "Tilføjer Begivenhed til {$_USER['username']}'s Kalender",
+    12 => 'Begivenhed',
+    13 => 'Begynder',
+    14 => 'Slutter',
+    15 => 'Tilbage til Kalenderen'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Tilføj en Kommentar',
+    2 => 'Tilføjelsesmåde',
+    3 => 'Log ud',
+    4 => 'Lav en Konto',
+    5 => 'Brugernavn',
+    6 => 'Hjemmesiden kræver, at du er logget ind, for at kunne tilføje en kommentar. Log venligst ind! Hvis du endnu ikke har oprettet en konto, kan du anvende nedenstående form til at oprette én.',
+    7 => 'Din sidste kommentar var ',
+    8 => " sekunder siden. Hjemmesiden kræver mindst {$_CONF['commentspeedlimit']} sekunder mellem kommentarer",
+    9 => 'Kommentar',
+    10 => 'Send Report',
+    11 => 'Tilføj Kommentar',
+    12 => 'Udfyld Titel og Kommentarfelterne, da de er obligatoriske ved tilføjelse af en kommentar.',
+    13 => 'Din Information',
+    14 => 'Gennemse',
+    15 => 'Report this post',
+    16 => 'Titel',
+    17 => 'Fejl',
+    18 => 'Vigtigt',
+    19 => 'Hold venligst kommentaren indenfor det aktuelle emne.',
+    20 => 'Svar på andres kommentarer istedet for at oprette nye diskussioner.',
+    21 => 'Læs øvrige kommentarer før du svarer, for at undgå at gentage hvad andre allerede har sagt.',
+    22 => 'Brug en tydelig Titel, så det skinner igennem hvilket emne din kommentar omhandler.',
+    23 => 'Din emailadresse bliver IKKE offentliggjort.',
+    24 => 'Anonym Bruger',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Brugerprofil for',
+    2 => 'Brugernavn',
+    3 => 'Fuldt Navn',
+    4 => 'Password',
+    5 => 'Email',
+    6 => 'Hjemmeside',
+    7 => 'Biografi',
+    8 => 'PGP Nøgle',
+    9 => 'Gem Information',
+    10 => 'Sidste 10 kommentarer af bruger',
+    11 => 'Ingen Brugerkommentarer',
+    12 => 'Brugerpræferencer for',
+    13 => 'Send Natligt Udtræk via Email',
+    14 => 'Dette password er tilfældigt genereret. Du anbefales at ændre passwordet omgående. For at ændre dit password, skal du logge ind på vejlerWEBben og klikke på kontoinformation i brugerkassen.',
+    15 => "Din {$_CONF['site_name']} konto er oprettet. For at kunne bruge den, skal du logge ind med nedenstående oplysninger. Gem denne email for fremtidig reference.",
+    16 => 'Din Konto Information',
+    17 => 'Kontoen eksisterer ikke',
+    18 => 'Den angivne emailadresse synes at være ugyldig',
+    19 => 'Det angivne brugernavn eller emailadressen eksisterer allerede',
+    20 => 'Den angivne emailadresse synes at være ugyldig',
+    21 => 'Fejl',
+    22 => "Opret konto på {$_CONF['site_name']}!",
+    23 => "Oprettelse af en konto på {$_CONF['site_name']} vil give dig mulighed for at tilføje kommentarer og nyheder/historier i dit eget navn. Hvis du ikke har en konto, vil du kun kunne deltage på hjemmesiden som Anonym. Den emailadresse du opgiver vil <b><i>aldrig</i></b> blive offentliggjort på denne side.",
+    24 => 'Dit password bliver sendt til den emailadresse du angiver.',
+    25 => 'Glemt Dit Password?',
+    26 => 'Indtast dit brugernavn og klik på Email Password, og et nyt password bliver sendt til den emailadresse du har angivet.',
+    27 => 'Opret Konto!',
+    28 => 'Email Password',
+    29 => 'logget ud fra',
+    30 => 'logget ind fra',
+    31 => 'Denne funktion kræver at du er logget ind',
+    32 => 'Signatur',
+    33 => 'Bliver aldrig vist offentligt',
+    34 => 'Dit rigtige navn',
+    35 => 'Indtast password for at ændre det nuværende',
+    36 => 'Begynder med http://',
+    37 => 'Bliver tilføjet dine kommentarer',
+    38 => 'Alt om dig! Alle kan læse dette',
+    39 => 'Din offentlige PGP nøgle',
+    40 => 'Ingen Ikoner ved Emner',
+    41 => 'Willing to Moderate',
+    42 => 'Datoformat',
+    43 => 'Maksimum Antal Historier',
+    44 => 'Ingen kasser',
+    45 => 'Visningspræferencer for',
+    46 => 'Ekskluderede Emner og Forfattere for',
+    47 => 'Kassekonfiguration for',
+    48 => 'Emner',
+    49 => 'Ingen ikoner i historier',
+    50 => 'Afmarker denne hvis du ikke er interesseret',
+    51 => 'Kun nyheder og historier',
+    52 => 'Standard er 10',
+    53 => 'Modtag dagens historier hver nat',
+    54 => 'Marker de emner og forfattere du ikke ønsker at se noget fra.',
+    55 => 'Hvis du lader disse være umarkerede, betyder det at du ser standardvalget af emner/forfattere. Hvis du begynder at markere nogen af disse, skal du markere alle dem du ønsker at se, fordi standardvalget i så fald bliver ignoreret. Standardvalg vises med <b>fed</b> skrift.',
+    56 => 'Forfattere',
+    57 => 'Visningsmåde',
+    58 => 'Sorteringsrækkefølge',
+    59 => 'Kommentarbegrænsning',
+    60 => 'Hvordan vil du have kommmentarer vist på siden?',
+    61 => 'Nyeste eller ældste først?',
+    62 => 'Standard er 100',
+    63 => 'Dit password er blevet sendt, og skulle snart dukke op på din emailadresse. Følg instruktionerne i den modtagne besked',
+    64 => 'Kommentarpræferencer for',
+    65 => 'Prøv at logge ind igen',
+    66 => "Du kan have fejlindtastet dine brugeroplysninger. Prøv at logge ind igen herunder. Er du en <a href=\"{$_CONF['site_url']}/users.php?mode=new\">ny bruger</a>?",
+    67 => 'Oprettet siden',
+    68 => 'Husk mig i',
+    69 => 'Hvor længe skal dine oplysninger huskes efter at du er logget ind?',
+    70 => "Konfigurer udseendet og layoutet på {$_CONF['site_name']}",
+    71 => "En af mulighederne på {$_CONF['site_name']} er at du kan konfigurere indhold, udseende og layout på siden. For at bruge disse funktioner, skal du først <a href=\"{$_CONF['site_url']}/users.php?mode=new\">oprette en konto</a> på {$_CONF['site_name']}. Hvis du allerede er oprettet, kan du anvende loginformen til venstre!",
+    72 => 'Tema',
+    73 => 'Sprog',
+    74 => 'Ændre denne sides udseende!',
+    75 => 'Emailede Emner for',
+    76 => 'Hvis du vælger et eller flere emner fra listen herunder, vil du modtage alle nye historier under det enkelte emne ved dagens afslutning. Vælg de emner som interesserer dig!',
+    77 => 'Foto',
+    78 => 'Tilføj et vellignende foto af dig selv!',
+    79 => 'Marker her for at slette dette billede',
+    80 => 'Login',
+    81 => 'Send Email',
+    82 => 'Sidste 10 historier af bruger',
+    83 => 'Post statistik for bruger',
+    84 => 'Antallet af artikler:',
+    85 => 'Antallet af kommentarer:',
+    86 => 'Find alle poster af',
+    87 => 'Dit brugernavn',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Ændre password',
+    92 => 'Indtast nyt password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Slet konto "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'slet konto',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Private indstillinger for',
+    100 => 'Email fra Admin',
+    101 => 'Tillad email fra bangM administrator',
+    102 => 'Email fra brugere',
+    103 => 'Tillad email fra andre brugere',
+    104 => 'Vis Online Status',
+    105 => 'Vis i Hvem er online blokken',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Der er ingen nyheder at vise',
+    2 => 'Der er ingen nyheder i databasen. Enten er der ikke nogen nyheder tilføjet dette emne, eller også er dine brugerpræferencer muligvis for restriktive.',
+    3 => 'for emnet %s',
+    4 => 'Mest spændende lige nu',
+    5 => 'Næste',
+    6 => 'Forrige',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Der opstod en fejl under afsendelse af din besked. Prøv igen.',
+    2 => 'Beskeden blev sendt.',
+    3 => 'Vær opmærksom på at du angiver en gyldig emailadresse i Svar Til feltet.',
+    4 => 'Udfyld Dit Navn, Svar Til, Emne og Besked felterne',
+    5 => 'Fejl: En sådan bruger eksisterer ikke.',
+    6 => 'Der er sket en fejl.',
+    7 => 'Brugerprofil for',
+    8 => 'Brugernavn',
+    9 => 'Bruger hjemmeside',
+    10 => 'Send email til',
+    11 => 'Dit Navn:',
+    12 => 'Svar Til:',
+    13 => 'Emne:',
+    14 => 'Besked:',
+    15 => 'HTML bliver ikke oversat.',
+    16 => 'Send Besked',
+    17 => 'Email Denne Historie til en Ven',
+    18 => 'Til Navn',
+    19 => 'Til Emailadresse',
+    20 => 'Fra Navn',
+    21 => 'Fra Emailadresse',
+    22 => 'Alle felter skal udfyldes',
+    23 => "Denne email er sendt til dig fra %s (%s), fordi vedkommende mener at du måtte være interesseret i denne nyhed/historie fra {$_CONF['site_url']}. Dette er ikke SPAM (reklameemail), og emailadresserne involveret i denne transaktion blev ikke gemt til senere brug.",
+    24 => 'Kommenter denne historie på',
+    25 => 'Du skal være logget ind for at kunne anvende denne mulighed. Ved at du logger ind, hjælper det os til at undgå misbrug af systemet',
+    26 => 'Denne formular lader dig afsende en email til den valgte bruger. Alle felter skal udfyldes.',
+    27 => 'Kort besked',
+    28 => '%s skrev: ',
+    29 => "Dette er den daglige dosis fra {$_CONF['site_name']} for ",
+    30 => ' Daglig Dosis for ',
+    31 => 'Titel',
+    32 => 'Dato',
+    33 => 'Læs den fulde historie på',
+    34 => 'Slutning af Besked',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Avanceret Søgning',
+    2 => 'Nøgleord',
+    3 => 'Emne',
+    4 => 'Alle',
+    5 => 'Type',
+    6 => 'Historier',
+    7 => 'Kommentarer',
+    8 => 'Forfattere',
+    9 => 'Alle',
+    10 => 'Søg',
+    11 => 'Søgeresultater',
+    12 => 'resultater',
+    13 => 'Søgeresultat: Der var ingen resultat',
+    14 => 'Der var ingen resultat for din søgning på',
+    15 => 'Prøv igen.',
+    16 => 'Titel',
+    17 => 'Dato',
+    18 => 'Forfatter',
+    19 => "Søg hele {$_CONF['site_name']} databasen af nuværende og gamle historier.",
+    20 => 'Dato',
+    21 => 'til',
+    22 => '(Datoformat MM-DD-YYYY)',
+    23 => 'Hits',
+    24 => 'Fandt',
+    25 => 'resultater i',
+    26 => 'muligheder på',
+    27 => 'sekunder',
+    28 => 'Ingen resultater for historier eller kommentarer på din søgning',
+    29 => 'Historie og Kommentar resultater',
+    30 => 'Ingen links passede på din søgning',
+    31 => 'Denne plugin returnerede ingen resultater',
+    32 => 'Begivenhed',
+    33 => 'URL',
+    34 => 'Sted',
+    35 => 'Hele dagen',
+    36 => 'Ingen begivenheder passede på din søgning',
+    37 => 'Begivenhed Resultater',
+    38 => 'Link Resultater',
+    39 => 'Links',
+    40 => 'Begivenheder',
+    41 => 'Din forespørgsel burde indeholde mindst 3 tegn.',
+    42 => 'Anvend venligst et datoformat som YYYY-MM-DD (år-måned-dag).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Sidestatistik',
+    2 => 'Antal Hits i Systemet',
+    3 => 'Historier (Kommentarer) i Systemet',
+    4 => 'Afstemninger (Stemmer) i Systemet',
+    5 => 'Links (Kliks) i Systemet',
+    6 => 'Begivenheder i Systemet',
+    7 => 'Top 10 Viste Historier',
+    8 => 'Historie Titel',
+    9 => 'Visninger',
+    10 => 'Der er ikke nogle historie på dette site eller også er der ingen, som har set dem.',
+    11 => 'Top 10 Kommenterede Historier',
+    12 => 'Kommentarer',
+    13 => 'Der er ikke nogle historier på dette site eller også er der ikke nogen, der har lavet en kommentar.',
+    14 => 'Top 10 Afstemninger',
+    15 => 'Spørgsmål',
+    16 => 'Stemmer',
+    17 => 'Der er ikke nogen afstemninger eller også er der ikke nogen, der har stemt..',
+    18 => 'Top 10 Links',
+    19 => 'Links',
+    20 => 'Hits',
+    21 => 'Der er ikke nogen links på dette site eller også er der ikke, som har klikket på et.',
+    22 => 'Top 10 Emailede Historier',
+    23 => 'Emails',
+    24 => 'Der er ikke nogen, der har emailet en historie',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relateret',
+    2 => 'Send',
+    3 => 'Print',
+    4 => 'Muligheder',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'For at tilføje en %s skal du være logget ind.',
+    2 => 'Log ind',
+    3 => 'Ny Bruger',
+    4 => 'Tilføj en Begivenhed',
+    5 => 'Tilføj et Link',
+    6 => 'Tilføj en Historie',
+    7 => 'Log ind Krævet',
+    8 => 'Tilføj',
+    9 => 'Når du tilføjer information til brug på denne hjemmeside, anmoder vi dig om at følge disse retningslinier...<ul><li>Udfyld alle felter, det er påkrævet<li>Bidrag med nøjagtig viden og information<li>Dobbelttjek alle hjemmesideadresser (URLs)</ul>',
+    10 => 'Titel',
+    11 => 'Link',
+    12 => 'Start Dato',
+    13 => 'Slut Dato',
+    14 => 'Sted',
+    15 => 'Beskrivelse',
+    16 => 'Hvis anden, angiv hvilken',
+    17 => 'Kategori',
+    18 => 'Anden',
+    19 => 'Læs Først',
+    20 => 'Fejl: Manglende Kategori',
+    21 => 'Ved valg af "Anden" angiv da venligst et kategorinavn',
+    22 => 'Fejl: Manglende Felter',
+    23 => 'Udfyld alle felter i formularen. De er alle påkrævet.',
+    24 => 'Tilføjelsen er Gemt',
+    25 => 'Din %s tilføjelse er gemt.',
+    26 => 'Fartbegrænsning',
+    27 => 'Brugernavn',
+    28 => 'Emne',
+    29 => 'Historie',
+    30 => 'Din sidste tilføjelse var ',
+    31 => " sekunder siden. Siden kræver som minimum {$_CONF['speedlimit']} sekunder mellem tilføjelser",
+    32 => 'Gennemse',
+    33 => 'Gennemse Historie',
+    34 => 'Log Ud',
+    35 => 'HTML er ikke tilladt',
+    36 => 'Postmåde',
+    37 => "Når du tilføjer en begivenhed til {$_CONF['site_name']} bliver den automatisk tilføjet den overordnede kalender, hvorefter alle brugere kan tilføje din begivenhed til deres personlige kalender. Denne mulighed er <b>IKKE</b> tænkt som stedet hvor du skal tilføje fødselsdage og andre personlige begivenheder.<br><br>Når du har tilføjet begivenheden, bliver den tilsendt en af vore administratorer, og hvis den derefter bliver godkendt, dukker den op i den overordnede kalender.",
+    38 => 'Tilføj Begivenhed Til',
+    39 => 'Overordnet Kalender',
+    40 => 'Personlig Kalender',
+    41 => 'Sluttid',
+    42 => 'Starttid',
+    43 => 'Hele Dagen',
+    44 => 'Adresse Linie 1',
+    45 => 'Adresse Linie 2',
+    46 => 'By',
+    47 => 'Område',
+    48 => 'Postnummer',
+    49 => 'Begivenhedstype',
+    50 => 'Rediger Begivenhedstyper',
+    51 => 'Sted',
+    52 => 'Slet',
+    53 => 'Lav en Konto'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autorisation Påkrævet',
+    2 => 'Adgang Nægtet! Forkert Log ind Information',
+    3 => 'Ugyldig password for bruger',
+    4 => 'Brugernavn:',
+    5 => 'Password:',
+    6 => 'Al adgang til administrative afdelinger af denne hjemmeside bliver logget og gennemset.<br>Denne side er kun til brug for autoriseret personale.',
+    7 => 'log ind'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Utilstrækkelige Admin Rettigheder',
+    2 => 'Du har ikke tilstrækkelige rettigheder til at kunne redigere denne kasse.',
+    3 => 'Kasse Editor',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Kasse Titel',
+    6 => 'Emne',
+    7 => 'Alle',
+    8 => 'Kasse Sikkerhedsniveau',
+    9 => 'Kasse Orden',
+    10 => 'Kasse Type',
+    11 => 'Portal Kasse',
+    12 => 'Normal Kasse',
+    13 => 'Portal Kasse Muligheder',
+    14 => 'RDF URL',
+    15 => 'Sidste RDF Opdatering',
+    16 => 'Normal Kasse Muligheder',
+    17 => 'Kasse Indhold',
+    18 => 'Udfyld Kasse Titel, Sikkerhedsniveau og Indhold felterne',
+    19 => 'Kasse Manager',
+    20 => 'Kasse Titel',
+    21 => 'Kasse SikNiv',
+    22 => 'Kasse Type',
+    23 => 'Kasse Orden',
+    24 => 'Kasse Emne',
+    25 => 'For at redigere eller slette en kasse, klik på kassen herunder. For at tilføje en ny kasse, klik på ny kasse herover.',
+    26 => 'Layout Kasse',
+    27 => 'PHP Kasse',
+    28 => 'PHP Kasse Muligheder',
+    29 => 'Kasse Funktioner',
+    30 => 'Hvis du vil anvende PHP i en af dine kasser, skal du angive navnet på funktionen herover. Navnet på din funktion skal starte med "phpblock_" (f.eks. phpblock_getweather). Hvis funktionen ikke starter med dette, vil funktionen ikke blive fundet. Vi anvender dette for at undgå, at eventuelle hackere af din hjemmeside, kan anvende harmfulde kald til funktioner, som vil være skadelige for dit system. Anvend IKKE tomme parantser "()" efter funktionsnavnet. Endelig er det anbefalelsesværdigt at du putter al din PHP kode i /path/to/geeklog/system/lib-custom.php. Dette tillader din kode at blive gemt og anvendt selvom du opgraderer til en nyere version af GeekLog.',
+    31 => 'Fejl i PHP kasse. Funktionen, , findes ikke.',
+    32 => 'Fejl, Manglende Felt(er)',
+    33 => 'Du skal indtaste URL adressen til .rdf filen for portal kasser',
+    34 => 'Du skal udfylde felterne titel og funtion for PHP kasser',
+    35 => 'Du skal udfylde felterne titel og indhold for normale kasser',
+    36 => 'Du skal udfylde feltet indhold for layout kasser',
+    37 => 'Dårligt PHP kasse funktionsnavn',
+    38 => 'Funktioner for PHP kasser skal starte med \'phpblock_\' (f.eks. phpblock_getweather). \'phpblock_\' angivelsen er påkrævet af sikkerhedsmæssige årsager for at undgå anvendelse af harmfuld kode.',
+    39 => 'Side',
+    40 => 'Venstre',
+    41 => 'Højre',
+    42 => 'Du skal angive kasserækkefølge og sikkerhedsniveau for standard GeekLog kasser',
+    43 => 'Kun På Hjemmeside',
+    44 => 'Adgang Nægtet',
+    45 => "Du forsøger at få adgang til en kasse, som du ikke har rettigheder til. Dette forsøg er blevet skrevet til loggen. Gå venligst <a href=\"{$_CONF['site_url']}/admin/block.php\">tilbage til kasseadministrationssiden</a> - tak.",
+    46 => 'Ny Kasse',
+    47 => 'Admin Hjem',
+    48 => 'Kasse Navn',
+    49 => ' (ingen mellemrum og skal være unik)',
+    50 => 'Hjælpefil URL',
+    51 => 'inkluder http://',
+    52 => 'Hvis du efterlader dette felt tomt, vil hjælpeikonet for denne kasse ikke vises',
+    53 => 'Slået til',
+    54 => 'gem',
+    55 => 'fortryd',
+    56 => 'slet',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Begivenhed Editor',
+    2 => 'Error',
+    3 => 'Begivenhed Titel',
+    4 => 'Begivenhed URL',
+    5 => 'Begivenhed Start Dato',
+    6 => 'Begivenhed Slut Dato',
+    7 => 'Begivenhed Sted',
+    8 => 'Begivenhed Beskrivelse',
+    9 => '(inkluder http://)',
+    10 => 'Du skal angive dato/tid, beskrivelse og sted!',
+    11 => 'Begivenhed Manager',
+    12 => 'For at redigere eller slette en begivenhed klik på begivenheden herunder. For at oprette en ny begivenhed, klik på ny begivenhed herover.',
+    13 => 'Begivenhed Titel',
+    14 => 'Start Dato',
+    15 => 'Slut Dato',
+    16 => 'Adgang Nægtet',
+    17 => "Du prøver at få adgang til en begivenhed, hvilket du ikke har rettigheder til! Dette forsøg er blevet logget. Gå tilbage til <a href=\"{$_CONF['site_url']}/admin/event.php\">administrations interfacet</a>.",
+    18 => 'Ny Begivenhed',
+    19 => 'Admin Hjem',
+    20 => 'gem',
+    21 => 'fortryd',
+    22 => 'slet',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Forrige Historier',
+    2 => 'Næste Historier',
+    3 => 'Måde',
+    4 => 'Postmåde',
+    5 => 'Historie Editor',
+    6 => 'Der er ingen historier',
+    7 => 'Forfatter',
+    8 => 'gem',
+    9 => 'gennemse',
+    10 => 'fortryd',
+    11 => 'slet',
+    12 => 'ID',
+    13 => 'Titel',
+    14 => 'Emne',
+    15 => 'Dato',
+    16 => 'Intro Tekst',
+    17 => 'Krop Tekst',
+    18 => 'Hits',
+    19 => 'Kommentarer',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Historie Liste',
+    23 => 'For at redigere eller slette en historie, klik på historiens nummer herunder. For at se en historie, klik på titlen af den historie du ønsker at se. For at oprette en ny historie, klik på ny historie herover.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Gennemse Historie',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Udfyld Forfatter, Titel og Intro Tekst felterne',
+    32 => 'Fremhævet',
+    33 => 'Der kan kun være en fremhævet historie',
+    34 => 'Draft',
+    35 => 'Ja',
+    36 => 'Nej',
+    37 => 'Mere af',
+    38 => 'Mere fra',
+    39 => 'Emails',
+    40 => 'Adgang Nægtet',
+    41 => "Du prøver at få adgang til en historie, som du ikke har rettigheder til! Dette forsøg er blevet logget! Gå tilbage til <a href=\"{$_CONF['site_url']}/admin/story.php\">administration af historier interfacet</a>.",
+    42 => "Du prøver at få adgang til en historie, som du ikke har rettigheder til! Dette forsøg er blevet logget! Gå tilbage til <a href=\"{$_CONF['site_url']}/admin/story.php\">administration af historier interfacet</a>.",
+    43 => 'Ny Historie',
+    44 => 'Admin Hjem',
+    45 => 'Access',
+    46 => '<b>BEMÆRK:</b> Hvis du angiver denne dato til engang i fremtiden, bliver denne historie ikke vist før denne dato. Dette inkluderer også at historien ikke medtages i din RDF fil, og bliver samtidig ignoreret af søgnings og statistik funktionerne.',
+    47 => 'Billeder',
+    48 => 'billede',
+    49 => 'højre',
+    50 => 'venstre',
+    51 => 'To add one of the images you are attaching to this article you need to insert specially formated text.  The specially formated text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<BR><P><B>PREVIEWING</B>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    52 => 'Slet',
+    53 => 'blev ikke brugt. Du skal inkludere dette billede i din intro eller krop tekstfør du kan gemme eventuelle ændringer',
+    54 => 'Vedhæftede Billeder Blev Ikke Brugt',
+    55 => 'Følgende fejl opstod ved tilføjelse af din historie. Ret disse før gemning',
+    56 => 'Vis Emneikon',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Emne Redigering',
+    2 => 'Emne ID',
+    3 => 'Emne Navn',
+    4 => 'Emne Billede',
+    5 => '(brug ikke mellemrum)',
+    6 => 'Sletning af et emne sletter gså alle historie og kasser associeret med emnet',
+    7 => 'Udfyld Emne ID og Emne Navn felterne',
+    8 => 'Emne Manager',
+    9 => 'For at redigere eller slette et emne, klik på emnet. For at oprette et nyt emne, klik Nyt Emne knappen herover. Du finder dit adgangsniveau for hvert enkelt emne i paranteser',
+    10 => 'Sorteringsrækkefølge',
+    11 => 'Historier/Sider',
+    12 => 'Adgang Nægtet',
+    13 => "Du prøver at få adgang til et emne, som du ikke har rettigheder til. Dette forsøg er blevet logget. Gå venligst <a href=\"{$_CONF['site_url']}/admin/topic.php\">tilbage til emneredigeringssiden</a>.",
+    14 => 'Sorteringsmetode',
+    15 => 'alfabetisk',
+    16 => 'standard er',
+    17 => 'Nyt Emne',
+    18 => 'Admin Hjem',
+    19 => 'gem',
+    20 => 'fortryd',
+    21 => 'slet',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Bruger Editor',
+    2 => 'Bruger ID',
+    3 => 'Brugernavn',
+    4 => 'Fuld Navn',
+    5 => 'Password',
+    6 => 'Sikkerhedsniveau',
+    7 => 'Emailadresse',
+    8 => 'Hjemmeside',
+    9 => '(brug ikke mellemrum)',
+    10 => 'Udfyld Brugernavn, Fuld Navn, Sikkerhedsniveau og Emailadresse felterne',
+    11 => 'Bruger Manager',
+    12 => 'For at redigere eller slette en bruger, klik på brugeren herunder. For at oprette en ny bruger, klik på ny bruger knappen til venstre. Du kan foretage simple søgninger ved at indtaste dele af et brugernavn, en emailadresse eller det fulde navn (f.eks. *son* or *.edu) i formularen herunder.',
+    13 => 'SikNiv',
+    14 => 'Registreringsdato',
+    15 => 'Ny Bruger',
+    16 => 'Admin Hjem',
+    17 => 'changepw',
+    18 => 'cancel',
+    19 => 'slet',
+    20 => 'gem',
+    21 => 'Brugernavnet eksisterer allerede.',
+    22 => 'Fejl',
+    23 => 'Batch Add',
+    24 => 'Batch Import af Brugere',
+    25 => 'You can import a batch of users into Geeklog.  The import file must a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
+    26 => 'Søg',
+    27 => 'Resultatbegrænsning',
+    28 => 'Marker her for at slette dette billede',
+    29 => 'Sti',
+    30 => 'Importer',
+    31 => 'Nye Brugere',
+    32 => 'Arbejdet er gjort. Importerede %d og stødte på %d fejl',
+    33 => 'tilføj',
+    34 => 'Fejl: Du skal specificere en fil.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Godkend',
+    2 => 'Slet',
+    3 => 'Rediger',
+    4 => 'Profile',
+    10 => 'Titel',
+    11 => 'Start Dato',
+    12 => 'URL',
+    13 => 'Kategori',
+    14 => 'Dato',
+    15 => 'Emne',
+    16 => 'User name',
+    17 => 'Full name',
+    18 => 'Email',
+    34 => 'Kommandocentral',
+    35 => 'Historie Tilføjelser',
+    36 => 'Link Tilføjelser',
+    37 => 'Begivenhed Tilføjelser',
+    38 => 'Tilføj',
+    39 => 'Der er ingen tilføjelser til moderation på dette tidspunkt',
+    40 => 'Bruger Tilføjelser'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Søndag',
+    2 => 'Mandag',
+    3 => 'Tirsdag',
+    4 => 'Onsdag',
+    5 => 'Torsdag',
+    6 => 'Fredag',
+    7 => 'Lørdag',
+    8 => 'Tilføj Begivenhed',
+    9 => 'Geeklog Begivenhed',
+    10 => 'Begivenheder for',
+    11 => 'Overordnet Kalender',
+    12 => 'Min Kalender',
+    13 => 'Januar',
+    14 => 'Februar',
+    15 => 'Marts',
+    16 => 'April',
+    17 => 'Maj',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'August',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'December',
+    25 => 'Tilbage til ',
+    26 => 'Hele Dagen',
+    27 => 'Uge',
+    28 => 'Personlig Kalender for',
+    29 => 'Offentlig Kalender',
+    30 => 'slet begivenhed',
+    31 => 'Tilføj',
+    32 => 'Begivenhed',
+    33 => 'Dato',
+    34 => 'Tid',
+    35 => 'Tilføj Hurtig',
+    36 => 'Tilføj',
+    37 => 'Desværre, den personlige kalenderfunktion er ikke aktiveret på denne side',
+    38 => 'Personlig Begivenhed Editor',
+    39 => 'Dag',
+    40 => 'Uge',
+    41 => 'Måned'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Email Afsendingsprogram",
+    2 => 'Fra',
+    3 => 'Svar Til',
+    4 => 'Emne',
+    5 => 'Krop',
+    6 => 'Send Til:',
+    7 => 'Alle brugere',
+    8 => 'Admin',
+    9 => 'Muligheder',
+    10 => 'HTML',
+    11 => 'Vigtig besked!',
+    12 => 'Send',
+    13 => 'Reset',
+    14 => 'Ignorer bruger indstillinger',
+    15 => 'Fejl ved afsendelse til: ',
+    16 => 'Besked sendt til: ',
+    17 => "<a href={$_CONF['site_url']}/admin/mail.php>Send endnu en besked</a>",
+    18 => 'Til',
+    19 => 'Bemærk: Hvis du ønsker at sende en besked til alle sidens oprettede brugere, vælg da Logged-in Users gruppen fra rullemenuen.',
+    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_url']}/admin/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_url']}/admin/moderation.php\">go back to the administration page</a>.",
+    21 => 'Fejl',
+    22 => 'Succeser',
+    23 => 'Ingen fejl',
+    24 => 'Ingen succeser',
+    25 => '-- Vælg Gruppe --',
+    26 => 'Udfyld venligst alle felterne, og vælg en brugergruppe fra rullelisten.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Plug-in List',
+    6 => 'Warning: Plug-in Already Installed!',
+    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
+    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
+    12 => 'no plugin name provided to plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'New Plug-in',
+    15 => 'Admin Home',
+    16 => 'Plug-in Name',
+    17 => 'Plug-in Version',
+    18 => 'Geeklog Version',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => 'Install',
+    23 => 'Save',
+    24 => 'Cancel',
+    25 => 'Delete',
+    26 => 'Plug-in Name',
+    27 => 'Plug-in Homepage',
+    28 => 'Plug-in Version',
+    29 => 'Geeklog Version',
+    30 => 'Delete Plug-in?',
+    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => 'Dit password er sendt til dig, og skulle snart dukke op. Følg venligst instruktionerne i emailen',
+    2 => "Tak for tilføjelsen til {$_CONF['site_name']}. Tilføjelsen venter på godkendelse. Hvis din tilføjelse bliver godkendt, bliver din historie tilgængelig for alle andre brugere af hjemmesiden.",
+    3 => "Tak for tilføjelsen af et link til {$_CONF['site_name']}. Tilføjelsen venter på godkendelse. Hvis dit link bliver godkendt, bliver linket vist på <a href={$_CONF['site_url']}/links.php>links</a> siden.",
+    4 => "Tak for tilføjelsen af en begivenhed til {$_CONF['site_name']}. Tilføjelsen venter på godkendelse. Hvis din begivenhed bliver godkendt, bliver begivenheden vist på <a href={$_CONF['site_url']}/calendar.php>kalender</a> siden.",
+    5 => 'Din kontoinformation er gemt.',
+    6 => 'Dine visningspræferencer er gemt.',
+    7 => 'Dine kommentarpræferencer er gemt.',
+    8 => 'Du er logget ud fra systemet.',
+    9 => 'Din historietilføjelse er gemt.',
+    10 => 'Historien er slettet fra systemet.',
+    11 => 'Din kasse er blevet gemt.',
+    12 => 'Kassen er blevet slettet.',
+    13 => 'Dit emne er blevet gemt.',
+    14 => 'Emnet og alle dets relaterede historier og kasser er blevet slettet.',
+    15 => 'Dit link er blevet gemt.',
+    16 => 'Linket er blevet slettet.',
+    17 => 'Din begivenhed er gemt.',
+    18 => 'Begivenheden er slettet.',
+    19 => 'Din afstemning er blevet gemt.',
+    20 => 'Afstemningen er slettet.',
+    21 => 'Den nye bruger er blevet oprettet.',
+    22 => 'Brugeren er blevet slettet',
+    23 => 'Fejl ved tilføjelse af en begivenhed til din personlige kalender. Der blev ikke tilføjet et ID.',
+    24 => 'Begivenheden er gemt i din kalender',
+    25 => 'Kan ikke åbne din personlige kalender førend du er logget ind',
+    26 => 'Begivenheden blev slettet fra din personlige kalender',
+    27 => 'Beskeden er sendt.',
+    28 => 'Denne plugin er blevet gemt',
+    29 => 'Desværre, den personlige kalender er ikke implementeret på denne side',
+    30 => 'Adgang Nægtet',
+    31 => 'Desværre, du har ikke adgang til siden for administration af historier. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    32 => 'Desværre, du har ikke adgang til siden for administration af emner. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    33 => 'Desværre, du har ikke adgang til siden for administration af kasser. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    34 => 'Desværre, du har ikke adgang til siden for administration af links. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    35 => 'Desværre, du har ikke adgang til siden for administration af begivenheder. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    36 => 'Desværre, du har ikke adgang til siden for administration af afstemninger. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    37 => 'Desværre, du har ikke adgang til siden for administration af brugere. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    38 => 'Desværre, du har ikke adgang til siden for administration af plugins. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    39 => 'Desværre, du har ikke adgang til siden for administration af emails. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    40 => 'System Besked',
+    41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
+    42 => 'Dit ord er gemt.',
+    43 => 'Ordet er blevet slettet.',
+    44 => 'Denne plugin blev installeret!',
+    45 => 'Denne plugin er blevet slettet.',
+    46 => 'Desværre, du har ikke adgang til siden for backup af databasen. Bemærk at alle forsøg på at få tilgang til administrationssider bliver logget',
+    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
+    49 => 'Your group has been successfully saved.',
+    50 => 'The group has been successfully deleted.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Adgang',
+    'ownerroot' => 'Ejer/Root',
+    'group' => 'Gruppe',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Adgangsrettigheder',
+    'owner' => 'Ejer',
+    'grantgrouplabel' => 'Giv overstående Gruppe ændrings rettigheder',
+    'permmsg' => 'NOTE: Medlemmer er alle sammen logget ind på siden. Anonyme er alle de brugere som ikke er logget ind på siden.',
+    'securitygroups' => 'Sikkerheds grupper',
+    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Gruppe editor',
+    'description' => 'Beskrivelse',
+    'name' => 'Navn',
+    'rights' => 'Rettigheder',
+    'missingfields' => 'Manglende felter',
+    'missingfieldsmsg' => 'Du skal tilføje navn og beskrivelse for en gruppe',
+    'groupmanager' => 'Gruppe manager',
+    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'groupname' => 'Gruppe navn',
+    'coregroup' => 'Core gruppe',
+    'yes' => 'Ja',
+    'no' => 'Nej',
+    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
+    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
+    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
+    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'lock' => 'Lås',
+    'members' => 'Medlemmer',
+    'anonymous' => 'Anonyme',
+    'permissions' => 'Rettigheder',
+    'permissionskey' => 'R = læs, E = ændre, ændre rettigheder fordre læse rettigheder',
+    'edit' => 'Ændre',
+    'none' => 'Igrn',
+    'accessdenied' => 'Adgang nægtet',
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
+    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'newgroup' => 'Ny gruppe',
+    'adminhome' => 'Admin Home',
+    'save' => 'gem',
+    'cancel' => 'annuller',
+    'delete' => 'slet',
+    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Sidste 10 Backups',
+    'do_backup' => 'Backup',
+    'backup_successful' => 'Backup af databasen skete med succes.',
+    'db_explanation' => 'For at lave en ny backup af dit Geeklog system, skal du klikke på knappen herunder',
+    'not_found' => "Forkert sti eller også er mysqldump værktøjet ikke eksekverbar.<br>Tjek <strong>\$_DB_mysqldump_path</strong> definitionen i filen config.php.<br>Variablen er pt. defineret som: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Mislykkedes: Filestørrelsen var på 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} findes ikke, eller er ikke et bibliotek",
+    'no_access' => "FEJL: biblioteket {$_CONF['backup_path']} er ikke tilgængeligt.",
+    'backup_file' => 'Backup fil',
+    'size' => 'Størrelse',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Hjem',
+    2 => 'Kontakt',
+    3 => 'Tilføj',
+    4 => 'Links',
+    5 => 'Afstemninger',
+    6 => 'Kalender',
+    7 => 'Sidestatistik',
+    8 => 'Personificer',
+    9 => 'Søg',
+    10 => 'avanceret søgning',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Fejl',
+    2 => 'Hmmm, jeg har ledt såvel oppe som nede for at finde filen <b>%s</b>.',
+    3 => "<p>Desværre, men filen du efterspørger findes ikke. Du er velkommen til selv at lede via <a href=\"{$_CONF['site_url']}\">forsiden</a> eller <a href=\"{$_CONF['site_url']}/search.php\">søgesiden</a> for at se om du dér kan finde det du søger."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Log ind nødvendig',
+    2 => 'Desværre, for at få adgang til dette område, skal du være logget ind som bruger på siden.',
+    3 => 'Log ind',
+    4 => 'Ny Bruger'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/dutch.php 1.4.0sr5-1/cpanel-glprivate/language/dutch.php
--- 1.3.11sr1/cpanel-glprivate/language/dutch.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/dutch.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,1275 +1,1513 @@
-<?php
-
-###############################################################################
-# dutch.php
-#
-# This is a complete dutch language page for GeekLog!
-# Please contact Ko <ko@depree.nl> if you think anything
-# important is missing ...
-#
-# Ported to level 1.3.8 by W. Niemans <niemans@pbsolo.nl>
-# Ported to level 1.3.10 by Ko de Pree <ko@depree.nl>
-#
-# Copyright (C) 2000 Jason Whittenburg
-# jwhitten@securitygeeks.com
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-###############################################################################
-
-$LANG_CHARSET = 'iso-8859-1';
-
-###############################################################################
-# Array Format:
-# $LANGXX[YY]:  $LANG - variable name
-#               XX    - file id number
-#               YY    - phrase id number
-###############################################################################
-
-###############################################################################
-# USER PHRASES - These are file phrases used in end user scripts
-###############################################################################
-
-###############################################################################
-# lib-common.php
-
-$LANG01 = array(
-    1 => 'Bijdrage van:',
-    2 => 'lees verder',
-    3 => 'reacties',
-    4 => 'Wijzigen',
-    5 => 'Stem',
-    6 => 'Tussenstand',
-    7 => 'Peilingsuitslag',
-    8 => 'stemmen',
-    9 => 'Beheerdersmenu:',
-    10 => 'Ter beoordeling',
-    11 => 'Artikelen',
-    12 => 'Blokken',
-    13 => 'Thema\'s',
-    14 => 'Links',
-    15 => 'Evenementen',
-    16 => 'Peilingen',
-    17 => 'Gebruikers',
-    18 => 'SQL Query',
-    19 => 'Uitloggen',
-    20 => 'Mijn credits',
-    21 => 'Gebruikersnaam',
-    22 => 'Gebruikers ID',
-    23 => 'Beveiligingsniveau',
-    24 => 'Anoniem',
-    25 => 'Reageer',
-    26 => 'Reacties zijn voor verantwoording van degene die ze heeft geplaatst. Dit portaal is niet verantwoordelijk voor de inhoud.',
-    27 => 'Laatste plaatsingen',
-    28 => 'Verwijderen',
-    29 => 'Geen reacties.',
-    30 => 'Oudere artikelen',
-    31 => 'Toegestane HTML Tags:',
-    32 => 'Fout: ongeldige gebruikersnaam',
-    33 => 'Fout: kan niet naar logbestand schrijven',
-    34 => 'Fout',
-    35 => 'Uitloggen',
-    36 => 'aan',
-    37 => 'Geen artikelen',
-    38 => 'Content Syndication',
-    39 => 'vernieuwen',
-    40 => 'De instelling <tt>register_globals = Off</tt> is aanwezig in <tt>php.ini</tt>. Geeklog echter vereist dat <tt>register_globals</tt> ingesteld is op <strong>on</strong>. Voordat u verder gaat, gelieve dit op <strong>on</strong> in te stellen en herstart uw web server.',
-    41 => 'Gast(en)',
-    42 => 'Geschreven door:',
-    43 => 'Hierop reageren',
-    44 => 'Parent',
-    45 => 'MySQL foutnummer',
-    46 => 'MySQL foutmelding',
-    47 => 'Gebruikersmenu',
-    48 => 'Account informatie',
-    49 => 'Voorkeuren',
-    50 => 'Fout in SQL statement',
-    51 => 'help',
-    52 => 'Nieuw',
-    53 => 'Beheerder Home',
-    54 => 'Kan bestand niet openen.',
-    55 => 'Fout in',
-    56 => 'Stem',
-    57 => 'Wachtwoord',
-    58 => 'Inloggen',
-    59 => "Heeft u nog geen account? <br> Meld u dan <strong>nu</strong> aan als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nieuwe gebruiker</a>",
-    60 => 'Geef commentaar',
-    61 => 'Aanmelden nieuw account',
-    62 => 'woorden',
-    63 => 'Artikel weergave',
-    64 => 'Email artikel naar collega',
-    65 => 'afdruk versie',
-    66 => 'Mijn Kalender',
-    67 => 'Welkom bij ',
-    68 => 'home',
-    69 => 'contact',
-    70 => 'zoeken',
-    71 => 'uw Bijdrage',
-    72 => 'Links',
-    73 => 'Opinie\'s',
-    74 => 'Kalender',
-    75 => 'gericht Zoeken',
-    76 => 'Statistieken',
-    77 => 'Plugins',
-    78 => 'Komende evenementen',
-    79 => 'Wat is nieuw',
-    80 => 'artikelen in de laatste',
-    81 => 'artikel in de laatste',
-    82 => 'uren',
-    83 => 'REACTIES',
-    84 => 'LINKS',
-    85 => 'afgelopen 48 uur',
-    86 => 'Geen nieuwe reacties',
-    87 => 'afgelopen 2 weken',
-    88 => 'Geen recente nieuwe links',
-    89 => 'Er zijn geen komende evenementen',
-    90 => 'Home',
-    91 => 'Deze pagina is aangemaakt in',
-    92 => 'seconden',
-    93 => 'Copyright',
-    94 => 'Alle merknamen en copyrights op deze pagina zijn eigendom van hun respectievelijke eigenaren.',
-    95 => 'Bemotord met',
-    96 => 'Groepen',
-    97 => 'Woorden lijst',
-    98 => 'plugins',
-    99 => 'ARTIKELEN',
-    100 => 'Geen nieuwe artikelen',
-    101 => 'Uw evenementen',
-    102 => 'Evenementen',
-    103 => 'DB Backups',
-    104 => 'door',
-    105 => 'Email gebruikers',
-    106 => 'Opgevraagd',
-    107 => 'GL Versie Test',
-    108 => 'Leeg Cache',
-    109 => 'Rapporteer misbruik',
-    110 => 'Rapporteer dit bericht aan de sitebeheerder',
-    111 => 'Bekijk de PDF-versie',
-    112 => 'Geregistreerde gebruikers',
-    113 => 'Documentatie'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG02 = array(
-    1 => 'Evenementen Kalender',
-    2 => 'Er zijn geen evenementen om weer te geven.',
-    3 => 'Wanneer',
-    4 => 'Waar',
-    5 => 'Omschrijving',
-    6 => 'Voeg evenement toe',
-    7 => 'Komende evenementen',
-    8 => 'Door evenementen aan <strong>uw</strong> kalender toe te voegen, kunt u de voor u interessante evenementen verzamelen en snel inzien door op \'Mijn Kalender\' te klikken in het Gebruikersmenu.',
-    9 => 'Voeg toe aan \'Mijn Kalender\'',
-    10 => 'Verwijder van \'Mijn Kalender\'',
-    11 => "Voeg evenement toe aan {$_USER['username']}\'s Kalender",
-    12 => 'Evenement',
-    13 => 'Begint',
-    14 => 'Eindigt',
-    15 => 'Terug naar Kalender'
-);
-
-###############################################################################
-# comment.php
-
-$LANG03 = array(
-    1 => 'Verstuur een reactie',
-    2 => 'Opmaak',
-    3 => 'Uitloggen',
-    4 => 'Aanmelden account',
-    5 => 'Gebruikersnaam',
-    6 => 'Het portaal vereist dat u bent ingelogd om een reactie te versturen: log in a.u.b. Echter, indien u geen account heeft, kunt u het onderstaande formulier gebruiken om u aan te melden.',
-    7 => 'Uw laatste reactie was ',
-    8 => " seconden geleden. Een beveiliging vereist tenminste {$_CONF['commentspeedlimit']} seconden tussen reacties",
-    9 => 'Reactie',
-    10 => 'Send Report',
-    11 => 'Verstuur reactie',
-    12 => 'Vul a.u.b. de velden bij \'Titel\' en \'Reactie\' in. Deze zijn noodzakelijk voor het versturen van een reactie.',
-    13 => 'Uw informatie',
-    14 => 'Preview',
-    15 => 'Rapporteer dit bericht',
-    16 => 'Titel',
-    17 => 'Fout',
-    18 => 'Niet vergeten',
-    19 => 'Houdt u a.u.b. bij het onderwerp.',
-    20 => 'Probeer eerst op reactie\'s van anderen te reageren i.p.v. een nieuwe \'Thread\' te starten.',
-    21 => 'Lees ook de andere berichten voordat u uw bericht gaat versturen. Dit, om te voorkomen dat vele identieke berichten ontstaan.',
-    22 => 'Gebruik een helder onderwerp, dat uw bericht juist omschrijft.',
-    23 => 'Uw email adres zal NIET worden weergegeven.',
-    24 => 'Anonieme gebruiker',
-    25 => 'Weet u zeker dat u dit bericht wilt rapporteren aan de sitebeheerder?',
-    26 => '%s heeft de volgende commentaren met misbruik gerapporteerd:',
-    27 => 'Misbruikrapport'
-);
-
-###############################################################################
-# users.php
-
-$LANG04 = array(
-    1 => 'Profiel van',
-    2 => 'GebruikersNaam',
-    3 => 'Volledige Naam',
-    4 => 'Wachtwoord',
-    5 => 'Emailadres',
-    6 => 'Homepage',
-    7 => 'Bio/CV',
-    8 => 'PGP Code',
-    9 => 'Bewaar Informatie',
-    10 => 'Laatste 10 reacties van gebruiker',
-    11 => 'Geen reacties',
-    12 => 'Voorkeuren voor',
-    13 => 'Email\'s nachts verwerken',
-    14 => 'Dit wachtwoord is gegenereerd door een zgn. randomizer. Het wordt aanbevolen om dit wachtwoord meteen te wijzigen. Om het wachtwoord te wijzigen, log in en klik op \'Account informatie\' van het \'Gebruikersmenu\'.',
-    15 => "Uw {$_CONF['site_name']} account is aangemaakt. Om er gebruik van te maken, dient u in te loggen met gebruik van de onderstaande informatie. Bewaar dit bericht a.u.b. voor gebruik in de toekomst.",
-    16 => 'Uw account informatie',
-    17 => 'Account bestaat niet',
-    18 => 'Het email adres lijkt geen bestaand adres',
-    19 => 'De gebruikersnaam of het email adres is al in gebruik',
-    20 => 'Het email adres lijkt geen juist email adres',
-    21 => 'Fout aangetroffen',
-    22 => "Aanmelding bij {$_CONF['site_name']}",
-    23 => "Door het aanvragen van een account profiteert u van alle voordelen van {$_CONF['site_name']} portaal lidmaadschap en geeft u de mogelijkheid reacties en artikelen onder uw eigen naam te plaatsen. Indien u niet registreert, is dit alleen anoniem mogelijk. Let op, uw email adres zal <strong><i>nooit</i></strong> publiekelijk worden weergegeven op het portaal.",
-    24 => 'Uw wachtwoord wordt verstuurd naar het email adres dat u invoert.',
-    25 => 'Wachtwoord vergeten?',
-    26 => 'Vul uw gebruikersnaam in en klik op \'Email wachtwoord\' en een nieuw wachtwoord wordt verstuurd naar het opgeslagen email adres. Indien u uw gebruikersnaam niet meer weet, kunt u ook volstaan met het invullen van uw emailadres.',
-    27 => 'Registreer Nu!',
-    28 => 'Email wachtwoord',
-    29 => 'Uitgelogd van',
-    30 => 'Ingelogd van',
-    31 => 'De Functie die u wilt gebruiken, is alleen beschikbaar indien u bent ingelogd',
-    32 => 'Ondertekening',
-    33 => 'Nooit publiekelijk weergeven',
-    34 => 'Dit is uw *echte* naam',
-    35 => 'Vul wachtwoord in om deze te mogen wijzigen',
-    36 => 'Begint met http://',
-    37 => 'Toevoegen bij uw reacties',
-    38 => 'Het is aan U! Iedereen kan dit lezen',
-    39 => 'Uw openbare PGP key ',
-    40 => 'Geen iconen voor Thema\'s tonen',
-    41 => 'Beschikbaar voor moderator',
-    42 => 'Datum formaat',
-    43 => 'Maximum artikelen',
-    44 => 'Geen blokken',
-    45 => 'Toon voorkeuren voor',
-    46 => 'Uitgesloten \'Items\' voor',
-    47 => 'Nieuws blok instelling voor',
-    48 => 'Thema\'s',
-    49 => 'Geen iconen in artikelen',
-    50 => 'Afvinken indien u geen interesse heeft',
-    51 => 'Alleen de nieuwe artikelen',
-    52 => 'Standaard is 10',
-    53 => 'Ontvang de artikelen van overdag elke nacht',
-    54 => 'Vink de thema\'s en auteurs aan die NIET wilt zien.',
-    55 => 'Als u ze allemaal heeft afgevinkt, betekent dit dat u de standaard selektie wilt zien. Als u begint te selekteren, selekteer dan alles dat u wilt zien, omdat de standaardinstellingen worden genegeerd. Standaardinstellingen worden vet weergegeven.',
-    56 => 'Auteurs',
-    57 => 'Weergave',
-    58 => 'Sorteer volgorde',
-    59 => 'Reactie limiet',
-    60 => 'Hoe wilt u dat reacties worden weergegeven?',
-    61 => 'Nieuwste of oudste eerst?',
-    62 => 'Standaard is 100',
-    63 => "Uw wachtwoord is naar u verstuurd en zou op dit moment moeten arriveren. Volg a.u.b. de aanwijzingen in het bericht. Het wordt gewaardeerd, dat u gebruik maakt van {$_CONF['site_name']}",
-    64 => 'Voorkeurinstellingen voor Reacties van',
-    65 => 'Probeer opnieuw in te loggen',
-    66 => "U heeft misschien een tikfout gemaakt bij het inloggen. Probeer het hieronder opnieuw. Bent u een <a href=\'{$_CONF['site_url']}/users.php?mode=new\'>nieuwe gebruiker</a>?",
-    67 => 'Aangemeld sinds',
-    68 => 'Mijn gegevens onthouden',
-    69 => 'Hoe lang mogen we u onthouden nadat u bent ingelogd?',
-    70 => "Pas de layout en inhoud aan van {$_CONF['site_name']}",
-    71 => "Een mogelijkheid van {$_CONF['site_name']} is dat u de inhoud en de layout van wat u ontvangt kan aanpassen. Om van deze voorzieningen gebruik te maken dient u zich eerst te <a href=\'{$_CONF['site_url']}/users.php?mode=new\'>registeren</a> bij {$_CONF['site_name']}. Bent u al geregistreerd? Gebruik dan het login formulier, links om in te loggen!",
-    72 => 'Skin',
-    73 => 'Taal',
-    74 => 'Pas het portaal aan uw wensen aan!',
-    75 => 'Email thema\'s voor',
-    76 => 'Indien u een thema uit de onderstaande lijst selecteert, ontvang u alle artikelen die hierin wordt geplaatst aan het eind van de dag thuis. Kies alleen de thema\'s waarin u bent genteresseerd!',
-    77 => 'Foto',
-    78 => 'Voeg een afbeelding toe van u zelf!',
-    79 => 'Aanvinken om uw afbeelding te verwijderen',
-    80 => 'Inloggen',
-    81 => 'Verstuur email',
-    82 => 'Laatste 10 artikelen van gebruiker',
-    83 => 'Statistiek Plaatsingen van gebruiker',
-    84 => 'Totaal aantal artikelen:',
-    85 => 'Totaal aantal commentaren/reacties:',
-    86 => 'Vindt alle bijdragen van',
-    87 => 'Uw login naam',
-    88 => "Iemand (waarschijnlijk uzelf) heeft een nieuw wachtwoord voor uw account -> %s <- aangevraagd bij {$_CONF['site_name']}, <{$_CONF['site_url']}>. Indien u daadwerkelijk een nieuw wachtwoord wilt ingeven, klik dan op de volgende link: ",
-    89 => 'Indien u hier niet mee accoord gaat kunt u dit bericht negeren; de aanvraag wordt weer verwijderd (uw huidige wachtwoord blijft geldig).',
-    90 => 'Gelieve een nieuw wachtwoord voor uw account hieronder in te vullen. Bemerk dat uw huidige wachtwoord nog steeds geldig is totdat dit formulier verstuurd is.',
-    91 => 'Geef nieuw wachtwoord op',
-    92 => 'Toets nieuw wachtwoord',
-    93 => 'Uw laatste aanvraag voor een nieuw wachtwoord is %d seconden geleden. Het portaal vereist dat er minimaal %d seconden tussen dergelijke aanvragen verstrijken.',
-    94 => 'Verwijder Account \'%s\'',
-    95 => 'Klik op \'Verwijder Account\' hieronder om uw account uit de database te verwijderen. Merk op dat uw gepubliceerde artikelen en uw geplaatste reacties <strong>niet</strong> verwijderd worden, maar getoond worden als \'Anonymous\'.',
-    96 => 'verwijder account',
-    97 => 'Bevestig het verwijderen van uw Account',
-    98 => 'Weet u zeker dat uw account verwijderd moet worden? U bent daarna niet meer in staat in te loggen op dit portaal (tenzij u zelf weer aanmeldt). Indien de gevolgen u duidelijk zijn, klik dan nogmaals op \'verwijder account\' in het formulier hieronder.',
-    99 => 'Privacy Opties voor',
-    100 => 'Email van Beheerder',
-    101 => 'Accepteer email van beheerder(s)',
-    102 => 'Email van Gebruikers',
-    103 => 'Accepteer email van andere gebruikers',
-    104 => 'Toon Online Status',
-    105 => 'Vermeld me in het blok Who\'s Online',
-    106 => 'Lokatie',
-    107 => 'Zichtbaar in uw openbaar profiel'
-);
-
-###############################################################################
-# index.php
-
-$LANG05 = array(
-    1 => 'Geen Nieuws om weer te geven',
-    2 => 'Er zijn geen nieuwe artikelen om weer te geven. Er is misschien geen nieuws onder dit thema, of u bent hier niet voor geautoriseerd.',
-    3 => 'voor thema %s',
-    4 => 'Hoofdartikel',
-    5 => 'Volgende',
-    6 => 'Vorige',
-    7 => 'Eerste',
-    8 => 'Laatste'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'Er zijn geen nieuwe Links om weer te geven.',
-    3 => 'Voeg een Link toe'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Stem opgeslagen',
-    2 => 'Uw stem voor de peiling is opgeslagen',
-    3 => 'Stem',
-    4 => 'Peilingen in het portaal',
-    5 => 'Stemmen',
-    6 => 'Toon andere peilingen'
-);
-
-###############################################################################
-# profiles.php
-
-$LANG08 = array(
-    1 => 'Er is een fout opgetreden bij het verzenden van het bericht. Probeer het opnieuw.',
-    2 => 'Bericht met succes verzonden.',
-    3 => 'Controleer of het juiste email adres is ingevuld in het veld \'Antwoord naar\'.',
-    4 => 'Vul de velden in: uw naam, antwoord naar, onderwerp, en bericht',
-    5 => 'Fout: deze gebruiker bestaat niet.',
-    6 => 'Er is een fout opgetreden.',
-    7 => 'Profiel van',
-    8 => 'Gebruiker Naam',
-    9 => 'Gebruiker URL',
-    10 => 'Stuur email naar',
-    11 => 'Uw naam:',
-    12 => 'Antwoord naar:',
-    13 => 'Onderwerp:',
-    14 => 'Bericht:',
-    15 => 'HTML wordt niet geconverteerd.',
-    16 => 'Bericht versturen',
-    17 => 'Email artikel naar collega',
-    18 => 'Naam naar',
-    19 => 'Email adres naar',
-    20 => 'Naam van',
-    21 => 'Email adres van',
-    22 => 'Alle velden zijn vereist',
-    23 => "Deze email is verstuurd door %s at %s om u op de hoogte te brengen van dit artikel van {$_CONF['site_url']}. Dit is geen SPAM en de email adressen in dit bericht zijn NERGENS anders opgeslagen.",
-    24 => 'Reageer op dit artikel bij',
-    25 => 'U moet ingelogd zijn, om van deze mogelijkheid gebruik te kunnen maken. Doordat u ingelogd bent, kan worden voorkomen dat er misbruik van het portaal wordt gemaakt',
-    26 => 'Dit formulier geeft u de mogelijkheid om een email naar de geselekteerde gebruiker te sturen. Alle velden zijn vereist.',
-    27 => 'Kort bericht',
-    28 => '%s schreef: ',
-    29 => "Dit is het dagelijks overzicht van {$_CONF['site_name']} voor ",
-    30 => ' Dagelijkse nieuwsbrief voor ',
-    31 => 'Titel',
-    32 => 'Datum',
-    33 => 'Lees het volledige artikel bij',
-    34 => 'Eind van het Bericht',
-    35 => 'Helaas, deze gebruiker accepteert geen email.'
-);
-
-###############################################################################
-# search.php
-
-$LANG09 = array(
-    1 => 'Gericht Zoeken',
-    2 => 'Trefwoorden',
-    3 => 'Thema',
-    4 => 'Alle',
-    5 => 'Type',
-    6 => 'Artikelen',
-    7 => 'Reacties',
-    8 => 'Auteurs',
-    9 => 'Alle',
-    10 => 'Zoek',
-    11 => 'Zoek resultaten',
-    12 => 'gevonden',
-    13 => 'Zoek resultaten: niets gevonden',
-    14 => 'Er is niets gevonden bij het zoeken naar',
-    15 => 'Probeer opnieuw.',
-    16 => 'Titel',
-    17 => 'Datum',
-    18 => 'Auteur',
-    19 => "Zoek in de gehele {$_CONF['site_name']} database van nieuwe en oude artikelen",
-    20 => 'Datum',
-    21 => 'tot',
-    22 => '(Datum Formaat JJJJ-MM-DD)',
-    23 => 'Hits',
-    24 => 'Gevonden',
-    25 => 'gevonden voor',
-    26 => 'items in',
-    27 => 'seconden',
-    28 => 'Geen artikel of reactie komt overeen met uw zoekopdracht',
-    29 => 'Artikel en reactie resultaten',
-    30 => 'Geen link komt overeen met uw zoekopdracht',
-    31 => 'Deze plugin gaf geen resultaat',
-    32 => 'Evenement',
-    33 => 'URL',
-    34 => 'Locatie',
-    35 => 'Gehele Dag',
-    36 => 'Geen evenement komt overeen met uw zoekopdracht',
-    37 => 'Evenement Resultaat',
-    38 => 'Link Resultaat',
-    39 => 'Links',
-    40 => 'Evenementen',
-    41 => 'het trefwoord dient minimaal 3 tekens te bevatten.',
-    42 => 'Gelieve een datum op te geven in het formaat JJJJ-MM-DD (jaar-maand-dag).',
-    43 => 'exacte zinsnede',
-    44 => 'alle woorden',
-    45 => 'enig woord',
-    46 => 'Volgende',
-    47 => 'Vorige',
-    48 => 'Auteur',
-    49 => 'Datum',
-    50 => 'Treffers',
-    51 => 'Link',
-    52 => 'Locatie',
-    53 => 'Artikel Resultaten',
-    54 => 'Reactie Resultaten',
-    55 => 'de zoekterm',
-    56 => 'EN',
-    57 => 'OF'
-);
-
-###############################################################################
-# stats.php
-
-$LANG10 = array(
-    1 => 'Portaal statistieken',
-    2 => 'Totaal aantal treffers in het portaal',
-    3 => 'Aantal Artikelen (Reacties) in het portaal',
-    4 => 'Aantal Peilingen (Stemmen) in het portaal',
-    5 => 'Aantal Links (Klikken) in het portaal',
-    6 => 'Aantal Evenementen in het portaal',
-    7 => 'Top Tien opgevraagde artikelen',
-    8 => 'Artikel titel',
-    9 => 'Opgevraagd',
-    10 => 'Het lijkt erop dat er geen artikelen op deze site staan, of ze zijn nooit opgevraagd.',
-    11 => 'Top Tien Artikelen met meeste reacties',
-    12 => 'Reacties',
-    13 => 'Het lijkt erop dat er geen artikelen op deze site staan, of er is nooit op gereageerd.',
-    14 => 'Top Tien Peilingen',
-    15 => 'Peiling vragen',
-    16 => 'Stemmen',
-    17 => 'Het lijkt erop dat er geen peilingen op deze site staan, of er is nog nooit gestemd.',
-    18 => 'Top Tien Links',
-    19 => 'Links',
-    20 => 'Hits',
-    21 => 'Het lijkt erop dat er geen links op deze site staan, of ze zijn nooit aangeklikt.',
-    22 => 'Top Tien Artikelen via email',
-    23 => 'Emails',
-    24 => 'Het lijkt erop dat er geen artikelen op deze site staan, of niemand is er op geabonneerd'
-);
-
-###############################################################################
-# article.php
-
-$LANG11 = array(
-    1 => 'Gerelateerd',
-    2 => 'Email artikel naar collega',
-    3 => 'Afdrukversie artikel',
-    4 => 'Artikel opties',
-    5 => 'PDF formaat'
-);
-
-###############################################################################
-# submit.php
-
-$LANG12 = array(
-    1 => 'Om een %s voor te stellen, is het vereist om als gebruiker te zijn ingelogd.',
-    2 => 'Inloggen',
-    3 => 'Nieuwe gebruiker',
-    4 => 'Stel een Evenement voor',
-    5 => 'Stel een Link voor',
-    6 => 'Stel een Artikel voor',
-    7 => 'Inloggen is vereist',
-    8 => 'Voorstellen',
-    9 => 'Indien u informatie voorstelt voor gebruik op dit portaal, vordt u verzocht om de volgende suggesties te volgen...<ul><li>Vul alle velden in. Deze zijn vereist.</li><li>Lever complete en accurate informatie.</li><li>Controleer de op te geven URLs dubbel.</li></ul>Dank u wel.',
-    10 => 'Titel',
-    11 => 'Link',
-    12 => 'Start Datum',
-    13 => 'Eind Datum',
-    14 => 'Locatie',
-    15 => 'Omschrijving',
-    16 => 'Indien anders, specificeer a.u.b.',
-    17 => 'Categorie',
-    18 => 'Anders',
-    19 => 'Lees dit eerst',
-    20 => 'Fout: Geen Categorie ingevuld',
-    21 => 'Indien \'Anders\' geselekteerd: lever dan een ook een categorie naam',
-    22 => 'Fout: niet alle velden Ingevuld',
-    23 => 'Vul alle velden van het formulier in. Alle velden zijn vereist.',
-    24 => 'Voorstel opgeslagen',
-    25 => 'Uw %s voorstel is succesvol opgeslagen.',
-    26 => 'Snelheids limiet',
-    27 => 'Gebruikersnaam',
-    28 => 'Thema',
-    29 => 'Artikel',
-    30 => 'Uw laatste bijdrage was ',
-    31 => " seconden geleden. Het portaal vereist ten minste {$_CONF['speedlimit']} seconden tussen twee voorstellen voor plaatsing",
-    32 => 'Preview',
-    33 => 'Artikel preview',
-    34 => 'Uitloggen',
-    35 => 'HTML tags zijn niet toegestaan',
-    36 => 'Opmaak',
-    37 => "Een voorstel voor plaatsing van een evenement op het {$_CONF['site_name']}, wordt in de hoofdkalender geplaatst. De gebruikers hebben de optie om deze aan hun persoonlijke kalender toe te voegen. Deze voorziening is <strong>NIET</strong> bedoeld voor persoonlijke evenementen, zoals verjaardagen en jubilea.<br><br>Als u een voorstel voor een evenement doet, wordt deze eerst verstuurt naar een beheerder en indien goedgekeurd, verschijnt deze in de hoofdkalender.",
-    38 => 'Evenement toevoegen aan',
-    39 => 'Hoofdkalender',
-    40 => 'Persoonlijke Kalender',
-    41 => 'Eind Tijd',
-    42 => 'Begin Tijd',
-    43 => 'Gehele Dag',
-    44 => 'Adres regel 1',
-    45 => 'Adres regel 2',
-    46 => 'Plaats',
-    47 => 'Provincie',
-    48 => 'Postcode',
-    49 => 'Evenement Type',
-    50 => 'Wijzig Evenement Types',
-    51 => 'Locatie',
-    52 => 'Verwijderen',
-    53 => 'Aanmelden account'
-);
-
-###############################################################################
-# ADMIN PHRASES - These are file phrases used in admin scripts
-###############################################################################
-
-###############################################################################
-# admin/auth.inc.php
-
-$LANG20 = array(
-    1 => 'autorisatie is vereist',
-    2 => 'Geweigerd! Incorrecte Login informatie',
-    3 => 'Geen juist wachtwoord voor gebruiker',
-    4 => 'Gebruikersnaam:',
-    5 => 'Wachtwoord:',
-    6 => 'Alle toegang tot administratieve functies van het portaal wordt vastgelegd en later bekeken.<br>Deze pagina is alleen voor geautoriseerde gebruikers.',
-    7 => 'inloggen'
-);
-
-###############################################################################
-# admin/block.php
-
-$LANG21 = array(
-    1 => 'Onvoldoende rechten',
-    2 => 'U bent niet geautoriseerd om dit blok te wijzigen.',
-    3 => 'Blok Editor',
-    4 => 'Er was een probleem met het lezen van deze feed (kijk in de error.log voor meer informatie).',
-    5 => 'Blok titel',
-    6 => 'Thema',
-    7 => 'Overal',
-    8 => 'Blok beveiligingsniveau',
-    9 => 'Blok volgorde',
-    10 => 'Blok Type',
-    11 => 'Portaal Blok',
-    12 => 'Normaal Blok',
-    13 => 'Portaal Blok opties',
-    14 => 'RDF URL',
-    15 => 'Laatste RDF Update',
-    16 => 'Normaal Blok opties',
-    17 => 'Blok Inhoud',
-    18 => 'Vult u a.u.b. de velden in bij \'Blok Titel\' en \'Inhoud\'',
-    19 => 'Blok Manager',
-    20 => 'Blok Titel',
-    21 => 'Beveiliginsniveau',
-    22 => 'Blok Type',
-    23 => 'Blok Volgorde',
-    24 => 'Blok Thema',
-    25 => 'Om een blok te wijzigen of te verwijderen, klikt u op dat blok hieronder. Om een nieuw blok aan te maken klikt u op \'nieuw blok\' hierboven.',
-    26 => 'Layout Blok',
-    27 => 'PHP Blok',
-    28 => 'PHP Blok opties',
-    29 => 'Blok Menu',
-    30 => 'Indien u PHP code wenst te gebruiken in een van de blokken, vul dan de naam van de php-funktie hierboven in. Deze naam moet beginnen met de prefix \'phpblock_\' (e.g. phpblock_hello_world). Zonder deze prefix wordt de funktie NIET aangeroepen. Dit is een beveiligingsmaatregel om niet zomaar willekeurige kode te moeten accepteren, die wellicht de integriteit kunnen schaden.<br>Zorg er ook voor dat er \'lege haakjes\' \'()\' staan achter de funktienaam in de broncode.<br>Tenslotte: het wordt aanbevolen dat alle PHP-blok-code in /pad/naar/geeklog/system/lib-custom.php wordt opgenomen. Bij nieuwe versies blijft de code gehandhaafd.',
-    31 => 'Fout in PHP Blok. Funktie, %s, bestaat niet.',
-    32 => 'Fout: niet alle velden doorgegeven.',
-    33 => 'Er wordt een URL gevraagd voor het .rdf bestand (portaal blokken)',
-    34 => 'Gelieve de titel en de funktie voor PHP blokken op te geven.',
-    35 => 'Gelieve de titel en de inhoud op te geven (normale blokken)',
-    36 => 'Gelieve de inhoud op te geven (layout blokken)',
-    37 => 'Ongeldige PHP blok funktienaam',
-    38 => 'Funktie voor PHP blokken moeten de prefix \'phpblock_\' (e.g. phpblock_hello_world) bevatten. Deze prefix is vereist ter beveiliging: het voorkomt de uitvoering van willekeurige PHP-code.',
-    39 => 'Zijde',
-    40 => 'Links',
-    41 => 'Rechts',
-    42 => 'Gelieve de bloktitel en de blokvolgorde op te geven (standaard blokken).',
-    43 => 'Alleen Homepagina',
-    44 => 'Geen toegang',
-    45 => "U heeft geprobeerd een blok op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/block.php\'>Terug naar de blok administratie pagina</a>.",
-    46 => 'Nieuw blok',
-    47 => 'Beheerder Home',
-    48 => 'Blok Naam',
-    49 => ' (zonder spaties en verplicht unieke naam)',
-    50 => 'Help File URL',
-    51 => 'inclusief http://',
-    52 => 'Indien u dit niet invult, verschijnt er geen help icon in dit blok.',
-    53 => 'Opname Toestaan',
-    54 => 'opslaan',
-    55 => 'annuleren',
-    56 => 'verwijderen',
-    57 => 'Verplaats blok naar beneden',
-    58 => 'Verplaats blok naar boven',
-    59 => 'Verplaats blok naar de rechterzijde',
-    60 => 'Verplaats blok naar de linkerzijde'
-);
-
-###############################################################################
-# admin/event.php
-
-$LANG22 = array(
-    1 => 'Evenement Editor',
-    2 => 'Fout',
-    3 => 'Evenement Titel',
-    4 => 'Evenement URL',
-    5 => 'Startdatum',
-    6 => 'Einddatum',
-    7 => 'Evenementlocatie',
-    8 => 'Evenementbeschrijving',
-    9 => '(inclusief http://)',
-    10 => 'U dient de datums/tijden, de evenementtitel en de beschrijving te vermelden!',
-    11 => 'Evenement Manager',
-    12 => 'Om een evenement te wijzigen of te verwijderen, klik dan op dat evenement hieronder. Om een evenement aan te maken, klik dan op \'Nieuw Evenement\' hierboven.',
-    13 => 'Evenement Titel',
-    14 => 'Startdatum',
-    15 => 'Einddatum',
-    16 => 'Geen toegang',
-    17 => "U heeft geprobeerd een evenement op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/event.php\'>Terug naar de evenement administratie pagina</a>.",
-    18 => 'Nieuw Evenement',
-    19 => 'Beheerder Home',
-    20 => 'opslaan',
-    21 => 'annuleren',
-    22 => 'verwijderen',
-    23 => 'Onjuiste startdatum.',
-    24 => 'Onjuiste einddatum.',
-    25 => 'Einddatum is eerder dan de startdatum.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Link Titel',
-    4 => 'Link URL',
-    5 => 'Categorie',
-    6 => '(inclusief http://)',
-    7 => 'Anders',
-    8 => 'Link Treffers',
-    9 => 'Link Beschrijving',
-    10 => 'Gelieve een link Titel, URL and Beschrijving op te geven.',
-    11 => 'Link Manager',
-    12 => 'Om een link te wijzigen, klik op die link hieronder. Om een nieuwe link aan te leggen, klik op \'Nieuwe Link\' hierboven.',
-    13 => 'Link Titel',
-    14 => 'Link Categorie',
-    15 => 'Link URL',
-    16 => 'Geen toegang',
-    17 => "U heeft geprobeerd een link op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/link.php\'>Terug naar de link administratie pagina</a>.",
-    18 => 'Nieuwe Link',
-    19 => 'Beheerder Home',
-    20 => 'Indien u kiest voor \'Anders\', a.u.b. specificeren',
-    21 => 'opslaan',
-    22 => 'annuleren',
-    23 => 'verwijderen'
-);
-
-###############################################################################
-# admin/story.php
-
-$LANG24 = array(
-    1 => 'Vorige Artikelen',
-    2 => 'Volgende Artikelen',
-    3 => 'Opties',
-    4 => 'Opmaak',
-    5 => 'Artikel Editor',
-    6 => 'Er bestaan (nog) geen Artikelen in het portaal',
-    7 => 'Auteur',
-    8 => 'opslaan',
-    9 => 'preview',
-    10 => 'annuleren',
-    11 => 'verwijderen',
-    12 => 'ID',
-    13 => 'Titel',
-    14 => 'Thema',
-    15 => 'Datum',
-    16 => 'Introductie Tekst',
-    17 => 'Body Tekst',
-    18 => 'Treffers',
-    19 => 'Opmerkingen',
-    20 => '',
-    21 => '',
-    22 => 'Artikel Lijst',
-    23 => 'Om een Artikel te wijzigen of te verwijderen, klik op het betreffende artikelnummer hieronder. Om een artikel op te roepen, klik op de titel van het betreffende Artikel. Om een nieuw Artikel aan te leggen, klik op \'Nieuw Artikel\' hierboven.',
-    24 => 'De ID die u voor dit artikel heeft gekozen is reeds in gebruik. Kies een andere ID a.u.b.',
-    25 => '',
-    26 => 'Artikel Preview',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'Er zijn File Upload Fouten',
-    31 => 'Gelieve de Auteur, Titel en Introductie Tekst te vermelden.',
-    32 => 'HoofdArtikel',
-    33 => 'Er kan slechts een enkel HoofdArtikel actief zijn !!',
-    34 => 'Draft',
-    35 => 'Ja',
-    36 => 'Nee',
-    37 => 'Meer door..',
-    38 => 'Meer van..',
-    39 => 'Emails',
-    40 => 'Geen toegang',
-    41 => "U heeft geprobeerd een artikel op te roepen zonder geldige autorisatie. De poging is vastgelegd. Het Artikel is hieronder weergegeven. <a href=\'{$_CONF['site_url']}/admin/story.php\'>Terug naar de artikel administratie pagina</a>.",
-    42 => "U heeft geprobeerd een artikel op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/story.php\'>Terug naar de artikel administratie pagina</a>.",
-    43 => 'Nieuw Artikel',
-    44 => 'Beheerder Home',
-    45 => 'Toegang',
-    46 => '<strong>NOTE:</strong> indien de datum in de toekomst ligt, wordt het Artikel pas op die datum gepubliceerd. Dat houdt tevens in dat het artikel niet in de RDF headline feed opgenomen wordt en dat de zoek funktie het buiten beschouwing laat. Er zijn dan ook geen statistieken.',
-    47 => 'Beelden',
-    48 => 'beeld',
-    49 => 'rechts',
-    50 => 'links',
-    51 => 'Om de beelden die hier ingesloten zijn, in het Artikel op te nemen is speciaal geformatteerde tekst nodig. Kies uit: [beeldX], [beeldX_rechts] or [beeldX_links] en vervang de X door het nummer van het beeld dat u bijsluit. NOTE: Bijgesloten beelden MOETEN gebruikt worden. Indien u dat vergeet kan het Artikel niet opgeslagen worden.<br><p><strong>PREVIEW</strong>: Het is gemakkelijker een Preview van een Artikel met beelden op te roepen NADAT het opgeslagen is in draft-vorm, IN PLAATS VAN direkt de preview knop aan te klikken. Gebruik de preview knop alleen indien er geen beelden bijgesloten zijn.',
-    52 => 'Verwijderen',
-    53 => 'werd niet vermeld. Dit beeld MOET opgenomen worden in de introductie of Body voordat uw werk opgeslagen kan worden.',
-    54 => 'Bijgesloten beelden zijn niet opgenomen in tekst',
-    55 => 'De hierna volgende problemen zijn opgetreden bij het opslaan van uw artikel. Gelieve deze op te lossen en daarna opnieuw op te slaan.',
-    56 => 'Toon Thema Icon',
-    57 => 'Toon beeld in originele grootte',
-    58 => 'Story Management',
-    59 => 'Optie',
-    60 => 'Toegestaan',
-    61 => 'Auto archiveren',
-    62 => 'Auto verwijderen'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Opties',
-    2 => 'Vul een vraag in met minstens 1 antwoord.',
-    3 => 'Peiling aangemaakt',
-    4 => 'Peiling %s opgeslagen',
-    5 => 'Wijzigen Peiling',
-    6 => 'Peiling ID',
-    7 => '(zonder spaties)',
-    8 => 'Verschijnt op Homepagina',
-    9 => 'Vraag',
-    10 => 'Reacties / Stemmen',
-    11 => 'Er is een probleem opgetreden met de Peiling database %s (poll answer data)',
-    12 => 'Er is een probleem opgetreden met de Peiling database %s (poll question data)',
-    13 => 'Peiling aanmaken',
-    14 => 'opslaan',
-    15 => 'annuleren',
-    16 => 'verwijderen',
-    17 => 'Gelieve een Peiling ID op te geven',
-    18 => 'Peiling Lijst',
-    19 => 'Om een Peilig te wijzigen of te verwijderen, klik op de betreffende Peiling. Om een nieuwe peiling aan te leggen, klik op \'Nieuwe Peiling\' hierboven.',
-    20 => 'Stemmers',
-    21 => 'Geen toegang',
-    22 => "U heeft geprobeerd een peiling op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/poll.php\'>Terug naar de peiling administratie pagina</a>.",
-    23 => 'Nieuwe Peiling',
-    24 => 'Beheerder Home',
-    25 => 'Ja',
-    26 => 'Nee'
-);
-
-###############################################################################
-# admin/topic.php
-
-$LANG27 = array(
-    1 => 'Thema Editor',
-    2 => 'Thema ID',
-    3 => 'Thema Naam',
-    4 => 'Thema Beeld',
-    5 => '(zonder spaties)',
-    6 => 'Het verwijderen van een Thema is recursief. Alle bijbehorende Artikelen en Blokken worden tevens verwijderd',
-    7 => 'Gelieve het Thema ID en de Thema Naam in te vullen.',
-    8 => 'Thema Manager',
-    9 => 'Om een Thema te wijzigen of te verwijderen, klik op het betreffende Thema. Uw toegangsniveau voor ieder Thema staat daar tussen haakjes.<br>Om een nieuw Thema aan te leggen, klik op \'Nieuw Thema\' hierboven.',
-    10 => 'Sorteer Volgorde',
-    11 => 'Artikelen/Pagina',
-    12 => 'Geen toegang',
-    13 => "U heeft geprobeerd een Thema op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/topic.php\'>Terug naar de Thema administratie pagina</a>.",
-    14 => 'Sorteer Methode',
-    15 => 'alfabetisch',
-    16 => 'standaard is',
-    17 => 'Nieuw Thema',
-    18 => 'Beheerder Home',
-    19 => 'opslaan',
-    20 => 'annuleren',
-    21 => 'verwijderen',
-    22 => 'Standaard',
-    23 => 'Verhef dit thema tot standaard voor nieuwe artikelen',
-    24 => '(*)',
-    25 => 'Archief Topic',
-    26 => 'maak hiervan uw standaard topic voor gearchiveerde artikelen. Slechts 1 topic is toegestaan.'
-);
-
-###############################################################################
-# admin/user.php
-
-$LANG28 = array(
-    1 => 'Gebruiker Editor',
-    2 => 'Gebruiker ID',
-    3 => 'Gebruiker Naam',
-    4 => 'Volledige Naam',
-    5 => 'Wachtwoord',
-    6 => 'Toegangs Niveau',
-    7 => 'Email adres',
-    8 => 'Homepagina',
-    9 => '(zonder spaties)',
-    10 => 'Gelieve de Gebruiker Naam, Volledige naam, toegangsniveau en emailadres in te vullen.',
-    11 => 'Gebruiker Manager',
-    12 => 'Om een Gebruiker te wijzigen of te verwijderen, klik op de betreffende Gebruiker hieronder. Om een nieuwe Gebruiker aan te leggen, klik op \'Nieuwe Gebruiker\' hierboven. Er kan eenvoudig gezocht worden op delen van een Gebruiker Naam, email adres of van de Volledige naam (e.g.*sen* or *.nl).',
-    13 => 'ToegangsNiveau',
-    14 => 'Reg. Datum',
-    15 => 'Nieuwe Gebruiker',
-    16 => 'Beheerder Home',
-    17 => 'wachtwoord wijzigen',
-    18 => 'annuleren',
-    19 => 'verwijderen',
-    20 => 'opslaan',
-    21 => 'De gebruikernaam bestaat reeds.',
-    22 => 'Fout',
-    23 => 'In Batch Toevoegen',
-    24 => 'Batch Import van Gebruikers',
-    25 => 'Een batch met gebruikers kan geimporteerd worden. Het import bestand is dan een tab-delimited tekst bestand en heeft de velden in de volgende layout: Volledige Naam, gebruikersnaam, email adres. Aan elke zo toegevoegde Gebruiker wordt daarna een email verstuurd met een willekeurig wachtwoord. Slechts een enkele Gebruiker per regel! Het niet volgen van deze instructies veroorzaakt problemen die uitsluitend met handwerk opgelost kunnen worden. Dubbelcheck de invullingen !!',
-    26 => 'Zoek',
-    27 => 'Limiteer Resultaten',
-    28 => 'Vink aan om dit beeld te verwijderen',
-    29 => 'Pad',
-    30 => 'Import',
-    31 => 'Nieuwe Gebruiker',
-    32 => 'Klaar met verwerken. %d geimporteerd en %d geweigerd',
-    33 => 'submit',
-    34 => 'Fout: specificeer een bestand voor upload.',
-    35 => 'Laatste Login',
-    36 => '(nooit)'
-);
-
-###############################################################################
-# admin/moderation.php
-
-$LANG29 = array(
-    1 => 'Goedkeuren',
-    2 => 'Verwijderen',
-    3 => 'Wijzigen',
-    4 => 'Profiel',
-    10 => 'Titel',
-    11 => 'Start Datum',
-    12 => 'URL',
-    13 => 'Categorie',
-    14 => 'Datum',
-    15 => 'Thema',
-    16 => 'Gebruiker naam',
-    17 => 'Volledige naam',
-    18 => 'Email',
-    34 => 'Moderator Menu',
-    35 => 'Voorgedragen Artikel(en)',
-    36 => 'Voorgedragen Link(s)',
-    37 => 'Voorgedragen Evenement(en)',
-    38 => 'Submit',
-    39 => 'Er is niets te modereren op dit moment',
-    40 => 'Nieuwe Gebruiker(s)'
-);
-
-###############################################################################
-# calendar.php
-
-$LANG30 = array(
-    1 => 'Zondag',
-    2 => 'Maandag',
-    3 => 'Dinsdag',
-    4 => 'Woensdag',
-    5 => 'Donderdag',
-    6 => 'Vrijdag',
-    7 => 'Zaterdag',
-    8 => 'Evenement Toevoegen',
-    9 => 'Evenement',
-    10 => 'Evenementen voor',
-    11 => 'Hoofdkalender',
-    12 => 'Mijn Kalender',
-    13 => 'Januari',
-    14 => 'Februari',
-    15 => 'Maart',
-    16 => 'April',
-    17 => 'Mei',
-    18 => 'Juni',
-    19 => 'Juli',
-    20 => 'Augustus',
-    21 => 'September',
-    22 => 'Oktober',
-    23 => 'November',
-    24 => 'December',
-    25 => 'Terug naar',
-    26 => 'Gehele Dag',
-    27 => 'Week',
-    28 => 'Persoonlijke Kalender voor',
-    29 => 'Publieke Kalender',
-    30 => 'verwijder evenement',
-    31 => 'Voeg toe',
-    32 => 'Evenement',
-    33 => 'Datum',
-    34 => 'Tijd',
-    35 => 'Snel toevoegen',
-    36 => 'Voorstellen',
-    37 => 'Helaas, de persoonlijke kalender optie is niet beschikbaar op het portaal',
-    38 => 'Persoonlijke Evenementen Editor',
-    39 => 'Dag',
-    40 => 'Week',
-    41 => 'Maand'
-);
-
-###############################################################################
-# admin/mail.php
-
-$LANG31 = array(
-    1 => "{$_CONF['site_name']} Email faciliteit",
-    2 => 'Van',
-    3 => 'Antwoord aan',
-    4 => 'Onderwerp',
-    5 => 'Inhoud',
-    6 => 'Verstuur naar:',
-    7 => 'Alle gebruikers',
-    8 => 'Beheerder',
-    9 => 'Opties',
-    10 => 'HTML',
-    11 => 'Belangrijk bericht!',
-    12 => 'Verstuur',
-    13 => 'Herstel',
-    14 => 'Instellingen van de gebruiker negeren',
-    15 => 'Probleem tijdens verzending naar: ',
-    16 => 'Bericht met succes gezonden naar: ',
-    17 => "<a href=\'{$_CONF['site_url']}/admin/mail.php\'>Stuur nog een bericht</a>",
-    18 => 'To',
-    19 => 'NOTE: Indien u een bericht wilt sturen aan alle portaal leden, kies dan de \'Logged-in\' groep.',
-    20 => "<successcount> berichten verstuurd en <failcount> fouten. Onderstaand vindt u de details van elk bericht ter controle. U kunt nu ook <a href=\'{$_CONF['site_url']}/admin/mail.php\'>nog een bericht versturen</a> of <a href=\'{$_CONF['site_url']}/admin/moderation.php\'>terug gaan naar de administratie pagina</a>.",
-    21 => 'Fouten',
-    22 => 'Succes',
-    23 => 'Geen fouten',
-    24 => 'Niets verstuurd',
-    25 => '-- Selekteer Group --',
-    26 => 'Gelieve alle velden van het formulier in te vullen en tevens een groep gebruikers te kiezen.'
-);
-
-###############################################################################
-# admin/plugins.php
-
-$LANG32 = array(
-    1 => 'Het installeren van plugins kan het portaal als geheel beschadigen en, mogelijk ook, de achterliggende databases. Het is zeer belangrijk dat u alleen plugins van <a href="http://www.geeklog.net">Geeklog Homepage</a> instaleerd, omdat deze degelijk getest zijn. Het is ook belangrijk dat u inziet dat de installatie enige \'onveilige\' commando\'s bevat die kunnen leiden tot beveiligingsproblemen. Dit vergt bijzondere aandacht voor plugins van derden. Zelfs indien u deze waarschuwing ter harte neemt, kan de veiligheid en correctheid van de installatieprocedure niet gegarandeerd worden. De verantwoordelijkheid ligt exclusief bij U! Anders gezegd: installeer op eigen risico. Wees voorzichtig en lees de installatievoorschriften die bij elke plugin meekomen. Tenslotte: volg deze op.',
-    2 => 'plugin Installatie Disclaimer',
-    3 => 'plugin Installatie Formulier',
-    4 => 'plugin File',
-    5 => 'plugin Lijst',
-    6 => 'Waarschuwing: Deze plugin is al Actief!',
-    7 => 'De plugin die u probeert te installeren is er al. gelieve eerst deze plugin te verwijderen voordat u de installatie opnieuw probeert.',
-    8 => 'Plugin Compatibility Check Failed',
-    9 => 'Deze plugin vereist een latere versie van Geeklog. Gelieve deze versie van <a href=http://www.geeklog.net>Geeklog</a> te upgraden of een nieuwere versie op te halen van deze plugin.',
-    10 => '<br><strong>Er zijn geen plugins actief op dit moment.</strong><br><br>',
-    11 => 'Om een plugin te wijzigen of te verwijderen, klik op het nummer van deze plugin\'s hieronder. Dit laat u de detailles zien, inclusief de website van de auteur. Tevens worden de versies van de plugins getoond. Dit helpt u bij de vraag of plugin\'s ge-upgrade moeten worden. Raadpleeg de documentatie voordat u een plugin installeert of upgrade. Om een introductie over deze plugin op te vragen, klik op de naam van de plugin, dit brengt u naar de website van de plugin.',
-    12 => 'geen Naam voor de plugin gevonden door de plugineditor()',
-    13 => 'Plugin Editor',
-    14 => 'Nieuwe plugin',
-    15 => 'Beheerder Home',
-    16 => 'plugin Naam',
-    17 => 'plugin Versie',
-    18 => 'Geeklog Versie',
-    19 => 'Toestaan',
-    20 => 'Ja',
-    21 => 'Nee',
-    22 => 'Installeer',
-    23 => 'Bewaar',
-    24 => 'annuleren',
-    25 => 'Verwijderen',
-    26 => 'plugin Naam',
-    27 => 'plugin Homepage',
-    28 => 'Genstalleerde Versie',
-    29 => 'Geeklog Versie',
-    30 => 'plugin Verwijderen?',
-    31 => 'Weet u het zeker dat deze plugin verwijderd mag worden? Let op! Hiermee worden tevens alle bestanden, data en structuren verwijderd die deze plugin gebruikt. Alleen als u zeker bent, klikt u nogmaals op \'Verwijderen\' in het formulier hieronder.',
-    32 => '<p><b>Fout, AutoLinktag heeft niet het juiste formaat</b></p>',
-    33 => 'Codeversie',
-    34 => 'Vernieuw'
-);
-
-###############################################################################
-# admin/syndication.php
-
-$LANG33 = array(
-    1 => 'aanmaken feed',
-    2 => 'opslaan',
-    3 => 'verwijderen',
-    4 => 'annuleren',
-    10 => 'Content Syndication',
-    11 => 'Nieuwe Feed',
-    12 => 'Beheerder Home',
-    13 => 'Om een feed te wijzigen of te verwijderen, klikt u op de feed\'s tiel hieronder. Om een nieuwe feed aan te maken, klikt u op \'Nieuwe Feed\' hierboven.',
-    14 => 'Titel',
-    15 => 'Type',
-    16 => 'Bestandsnaam',
-    17 => 'Formaat',
-    18 => 'laatste wijziging',
-    19 => 'Actief',
-    20 => 'Ja',
-    21 => 'Nee',
-    22 => '<i>(geen feeds)</i>',
-    23 => 'alle Artikelen',
-    24 => 'Feed Editor',
-    25 => 'Feed Titel',
-    26 => 'Limiet',
-    27 => 'Lengte van de entries',
-    28 => '(0 = geen tekst, 1 = alle tekst, anders = maximaal aanal karakters.)',
-    29 => 'Beschrijving',
-    30 => 'Laatste Wijziging',
-    31 => 'Karakter Set',
-    32 => 'Taal',
-    33 => 'Inhoud',
-    34 => 'Entries',
-    35 => 'Uren',
-    36 => 'Selecteer type van feed',
-    37 => 'Er is minstens een plugin actief die content syndication ondersteunt. Het is nodig dat u hieronder aangeeft of er sprake is van een Geeklog feed of van een feed uit een van de plugins.',
-    38 => 'Fout: Niet alles ingevuld',
-    39 => 'Gelieve de \'Feed Titel\', \'beschrijving\', en \'Filename\' in te vullen.',
-    40 => 'Gelieve het \'aantal entries\' of \'aantal uren\' op te geven.',
-    41 => 'Links',
-    42 => 'Events'
-);
-
-###############################################################################
-# confirmation and error messages
-
-$MESSAGE = array(
-    1 => "Uw wachtwoord is naar u verstuurd, en kan elk moment in uw inbox arriveren. Volg a.u.b. de instructies in het bericht, en we bedanken u voor het gebruik maken van {$_CONF['site_name']}",
-    2 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, wordt het geplaatst op het portaal.",
-    3 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, zal uw link geplaatst worden in het <a href={$_CONF['site_url']}/links.php>links</a> gedeelte.",
-    4 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, zal uw evenement geplaatst worden in het <a href={$_CONF['site_url']}/calendar.php>Kalender</a> gedeelte.",
-    5 => 'Uw account informatie is opgeslagen.',
-    6 => 'Uw voorkeuren zijn opgeslagen.',
-    7 => 'Uw instellingen voor commentaar/reactie zijn opgeslagen.',
-    8 => 'U bent met succes uitgelogd.',
-    9 => 'Het artikel is opgeslagen.',
-    10 => 'Het artikel is verwijderd.',
-    11 => 'Het blok is opgeslagen.',
-    12 => 'Het blok is verwijderd.',
-    13 => 'Het thema is opgeslagen.',
-    14 => 'Het thema, en al de bijbehorende artikelen zijn verwijderd.',
-    15 => 'De link is opgeslagen.',
-    16 => 'De link is verwijderd.',
-    17 => 'Het evenement is opgeslagen.',
-    18 => 'Het evenement is verwijderd.',
-    19 => 'Uw peiling is opgeslagen.',
-    20 => 'Uw peiling is verwijderd.',
-    21 => 'De gebruiker is opgeslagen.',
-    22 => 'De gebruiker is verwijderd',
-    23 => 'Er is een fout opgetreden bij het toevoegen van een evenement aan uw kalender. Er is geen evenement id aangemaakt.',
-    24 => 'Het evenement is toegevoegd aan uw kalender',
-    25 => 'U kan uw persoonlijke kalender pas openen als u bent ingelogd',
-    26 => 'Het evenement is verwijderd van uw persoonlijke kalender',
-    27 => 'Bericht verstuurd.',
-    28 => 'De plugin is opgeslagen',
-    29 => 'Helaas, persoonlijke kalenders zijn niet geactiveerd op dit portaal',
-    30 => 'Toegang Geweigerd',
-    31 => 'Helaas, u heeft geen toegang tot de artikel administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    32 => 'Helaas, u heeft geen toegang tot de thema administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    33 => 'Helaas, u heeft geen toegang tot de blok administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    34 => 'Helaas, u heeft geen toegang tot de links administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    35 => 'Helaas, u heeft geen toegang tot de evenementen administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    36 => 'Helaas, u heeft geen toegang tot de peilingen administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    37 => 'Helaas, u heeft geen toegang tot de gebruiker administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    38 => 'Helaas, u heeft geen toegang tot de plugin administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    39 => 'Helaas, u heeft geen toegang tot de email administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    40 => 'Portaal Bericht',
-    41 => 'Helaas, u heeft geen toegang tot de woordvervang administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    42 => 'Het woord is opgeslagen.',
-    43 => 'Het woord is verwijderd.',
-    44 => 'De plugin is ingevoegd!',
-    45 => 'De plugin is verwijderd.',
-    46 => 'Helaas, u heeft geen toegang tot Database Backup Utility. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
-    47 => 'Deze funktie werkt allen onder *nix. Indien u *nix gebruikt als besturingsysteem dan is uw cache geleegd. Indien u Windows gebruikt, moet u zoeken naar bestanden als adodb_*.php en deze handmatig verwijderen.',
-    48 => "Bedankt voor uw aanvraag voor een gebruikersaccount van {$_CONF['site_name']}. De beheerders zullen uw aanvraag in behandeling nemen. Indien goedgekeurd, wordt uw wachtwoord naar het email adres verstuurd dat u net heeft ingevuld.",
-    49 => 'De groep is opgeslagen.',
-    50 => 'De groep is verwijderd.',
-    51 => 'Deze gebruikersnaam is al in gebruik. Kies a.u.b. een andere.',
-    52 => 'Het opgegeven email adres lijkt niet geldig te zijn.',
-    53 => 'Het nieuwe wachtwoord is geaccepteerd. Gelieve hieronder opnieuw in te loggen, a.u.b.',
-    54 => 'De aanvraag voor een nieuw wachtwoord is verjaard. Gelieve dit hieronder opnieuw aan te vragen.',
-    55 => 'Een email is naar u verstuurd en zal in korte tijd bij u binnenkomen. Gelieve de instructies in dat bericht op te volgen.',
-    56 => 'Het opgegeven email adres is reeds in gebruik bij een ander account. Dit is beveiligd.',
-    57 => 'Uw account is met succes verwijderd.',
-    58 => 'Uw feed is met succes opgeslagen.',
-    59 => 'De feed is met succes verwijderd.',
-    60 => 'De plugin is met succes ge-update',
-    61 => 'Plugin %s: Unknown message placeholder'
-);
-
-###############################################################################
-
-$LANG_ACCESS = array(
-    'access' => 'Toegang',
-    'ownerroot' => 'Owner/Root',
-    'group' => 'Group',
-    'readonly' => 'Read-Only',
-    'accessrights' => 'Toegangs Rechten',
-    'owner' => 'Owner',
-    'grantgrouplabel' => 'Grant Above Group Edit Rights',
-    'permmsg' => 'NOTE: \'Members\': dit zijn alle ingelogde Gebruikers van het portaal -- \'Anonymous\': dit zijn alle niet-ingelogde bezoekers.',
-    'securitygroups' => 'Security Groups',
-    'editrootmsg' => "Ondanks dat u een gebruikersBeheerder bent, kunt u een zgn. 'root user' niet wijzigen. Daarvoor moet u eerst als een zgn. 'root user' ingelogd zijn. U kunt wel alle andere gebruikers wijzigen. Alle pogingen om een zgn. 'root user' ongeautoriseerd te wijzigen, worden vastgelegd. Gelieve terug te gaan naar de <a href=\"{$_CONF['site_admin_url']}/user.php\">Gebruiker Administratie pagina</a>.",
-    'securitygroupsmsg' => 'Vink de groep(en) waarin de gebruiker opgenomen wordt.',
-    'groupeditor' => 'Group Editor',
-    'description' => 'Beschrijving',
-    'name' => 'Naam',
-    'rights' => 'Rechten',
-    'missingfields' => 'Niet alles ingevuld',
-    'missingfieldsmsg' => 'Een naam en beschrijving is verplicht voor een groep.',
-    'groupmanager' => 'Group Manager',
-    'newgroupmsg' => 'Om een groep te wijzigen of te verwijderen, klik op die groep hieronder. Om een nieuwe groep aan te leggen, klik op \'Nieuwe Groep\' hierboven. Let op! Zgn. \'core groups\' kunnen niet verwijderd worden omdat deze in de software een functie hebben.',
-    'groupname' => 'Group Naam',
-    'coregroup' => 'Core Group',
-    'yes' => 'Ja',
-    'no' => 'Nee',
-    'corerightsdescr' => "Deze groep is een zgn. {$_CONF['site_name']} \'Core Group\'. De rechten van de groep kunnen niet gewijzigd worden. Hieronder is een overzicht opgenomen van de rechten voor deze groep.",
-    'groupmsg' => '\'Security Groups\' werken hierarchisch. Door het toevoegen aan andere groep(en), wordt deze groep dezelfde rechten toegekend. Het wordt aanbevolen, waar mogelijk, deze faciliteit te gebruiken. Indien u deze groep een speciale samenstelling wilt geven, kunt u de individuele rechten daarvoor in het gedeelte hieronder (extra) aanvinken, onder het hoofd \'Rechten\'. Om rechten van een andere groep aan deze groep toe te voegen, kunt u volstaan met het aanvinken van deze andere groep(en).',
-    'coregroupmsg' => "Deze groep is een zgn. {$_CONF['site_name']} \'Core Group\'. De groepen die hieraan toegevoegd zijn, kunnen daarom niet gewijzigd worden. Hieronder is een overzicht opgenomen van dergelijke groepen.",
-    'rightsdescr' => 'Een groepsrecht voor een bepaalde faciliteit (zie hieronder) kan direct toegekend worden *OF* aan een andere groep waaraan deze groep eerder is toegevoegd. Wat u hieronder kunt zien aan het ontbreken van een vink-mogelijkheid, zijn de rechten van een andere groep, waaraan deze groep eerder is toegevoegd (en daarmee deze rechten verkreeg). De rechten die u kunt vinken kunt u direct toekennen aan - of afmelden voor - deze groep.',
-    'lock' => 'Lock',
-    'members' => 'Members',
-    'anonymous' => 'Anonymous',
-    'permissions' => 'Permissies',
-    'permissionskey' => 'R = Read, E = Edit, wijzigingsrechten veronderstellen ook leesrechten',
-    'edit' => 'Wijzigen',
-    'none' => 'Geen',
-    'accessdenied' => 'Geen toegang',
-    'storydenialmsg' => "Dit artikel is niet toegankelijk voor u. Dit kan veroorzaakt worden doordat u niet aangemeld bent bij {$_CONF['site_name']}. Gelieve uzelve <a href=users.php?mode=new> aan te melden </a> bij {$_CONF['site_name']} voor soorgelijke toegangsrechten.",
-    'eventdenialmsg' => "Dit evenement is niet toegankelijk voor u. Dit kan veroorzaakt worden doordat u niet aangemeld bent bij {$_CONF['site_name']}. Gelieve uzelve <a href=users.php?mode=new> aan te melden </a> bij {$_CONF['site_name']} voor soorgelijke toegangsrechten.",
-    'nogroupsforcoregroup' => 'Deze groep heeft geen relatie met enige andere groep !!',
-    'grouphasnorights' => 'Deze groep kan geen administratieve functies op het portaal oproepen en/of uitvoeren.',
-    'newgroup' => 'Nieuwe Groep',
-    'adminhome' => 'Beheerder Home',
-    'save' => 'opslaan',
-    'cancel' => 'annuleren',
-    'delete' => 'verwijderen',
-    'canteditroot' => 'U probeert de zgn. \'Root group\' te wijzigen, maar u behoort daar niet toe: de toegang is nu geweigerd. Gelieve contact op te nemen met de Beheerder indien u dit niet terecht vindt.',
-    'listusers' => 'Overzicht Gebruikers',
-    'listthem' => 'lijst',
-    'usersingroup' => 'Gebruikers in groep %s',
-    'usergroupadmin' => 'Gebruikersgroep administratie',
-    'add' => 'Voeg toe',
-    'remove' => 'Verwijder',
-    'availmembers' => 'Beschikbare leden',
-    'groupmembers' => 'Groepsleden',
-    'canteditgroup' => 'Om deze groep te kunnen wijzigen dient u zelf een lid van deze groep te zijn. Neem a.u.b. contact op met de beheerder als u denk dat niet correct is.',
-    'cantlistgroup' => 'Om de leden van deze groep te kunnen zien dient u zelf een lid van deze groep te zijn. Neem a.u.b. contact op met de beheerder als u denk dat niet correct is.'
-);
-
-###############################################################################
-# admin/database.php
-
-$LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'Laatste 10 Back-ups',
-    'do_backup' => 'Maak een Backup',
-    'backup_successful' => 'Database backup met succes uitgevoerd.',
-    'no_backups' => 'Geen backups aanwezig',
-    'db_explanation' => 'Om een nieuwe backup van het portaal te (laten) maken, klik op de knop hieronder',
-    'not_found' => "Incorrect pad of mysqldump utility is niet uitvoerbaar.<br>Controleer de definitie voor <strong>\\$_DB_mysqldump_path</strong> in config.php.<br>De variabele is momenteel opgenomen als: <var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => 'Backup mislukt: bestandsgrootte was 0 bytes',
-    'path_not_found' => "{$_CONF['backup_path']} bestaat niet of is geen directory",
-    'no_access' => "FOUT: Directory {$_CONF['backup_path']} is niet benaderbaar.",
-    'backup_file' => 'Backup bestand',
-    'size' => 'Grootte',
-    'bytes' => 'Bytes',
-    'total_number' => 'Totaal aantal backups: %d'
-);
-
-###############################################################################
-
-$LANG_BUTTONS = array(
-    1 => 'Home',
-    2 => 'Kontakt',
-    3 => 'Publiceren',
-    4 => 'Links',
-    5 => 'Peilingen',
-    6 => 'Kalender',
-    7 => 'Portaal Stats',
-    8 => 'Persoonlijk',
-    9 => 'Zoek',
-    10 => 'gericht zoeken'
-);
-
-###############################################################################
-# 404.php
-
-$LANG_404 = array(
-    1 => '404 fout',
-    2 => 'Helaas, er is overal gezocht en <strong>%s</strong> toch niet gevonden.',
-    3 => "<p>Helaas, het bestand dat u opvraagt bestaat niet (meer). Kijkt u gerust nog eens op de <a href=\'{$_CONF['site_url']}\'>voorpagina</a> of de <a href=\'{$_CONF['site_url']}/search.php\'>zoek pagina</a>. Misschien vindt u het daar."
-);
-
-###############################################################################
-# login form
-
-$LANG_LOGIN = array(
-    1 => 'Login vereist',
-    2 => 'Voor dit gedeelte is een login als Gebruiker vereist.',
-    3 => 'Login',
-    4 => 'Nieuwe Gebruiker'
-);
-
-###############################################################################
-# pdfgenerator.php
-
-$LANG_PDF = array(
-    1 => 'De PDF-optie is geblokkeerd',
-    2 => 'Het aangeleverde document is niet verwerkt. Het document is wel ontvangen, maar kon niet worden omgezet. Verzend alleen html-documenten die zijn geschreven volgens de xHTML standaard. Besef a.u.b. dat al te complexe html-documenten niet goed  - of zelfs helemaal niet -  worden verwerkt. Het document dat na uw poging is aangemaakt was 0 bytes in grootte en is verwijderd. Als u er zeker van bent dat uw document goed verwerkt zou moeten worden, probeert u het dan opnieuw te verzenden.',
-    3 => 'Onbekende fout tijdens de aanmaak van het PDF document',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Uw document wordt geladen.',
-    6 => 'Wacht a.u.b. terwijl uw document wordt geladen.',
-    7 => 'U kunt de rechts-klikken op de onderstaande knop en kiezen voor \'opslaan doel...\' of \'opslaan link lokatie...\' om een copy van uw document te bewaren.',
-    8 => "Het pad naar de HTMLDoc binary in het configuratiebestand is ongeldig of kan niet worden uitgevoerd.  Neem a.u.b. contact op met de beheerder als het probleem\n         zich blijft voordoen.",
-    9 => 'PDF Generator',
-    10 => "Dit is de Ad-hoc PDF Generation tool. Deze zal proberen om uw bestand te converteren.  Besef a.u.b. dat sommige webpaginas niet goed verwerkt kunnen worden.  Dit\n           is een beperking van de HTMLDoc PDF generation tool en zulke fouten kunnen worden gemeld aan de beheerder van deze site",
-    11 => 'URL',
-    12 => 'Genereer PDF!',
-    13 => 'De PHP configuratie op deze server staat het gebruik van URLs met het fopen() commando niet toe.  De systeembeheerder moet het php.ini bestand aanpassen en het allow_url_fopen zetten op: On',
-    14 => 'De PDF die u heeft opgevraagd bestaat niet of u heeft geen toegang tot dit bestand.'
-);
-
-?>
+<?php
+
+###############################################################################
+# dutch.php
+#
+# This is a complete dutch language page for GeekLog!
+# Please contact Ko <ko@depree.nl> if you think anything
+# important is missing ...
+#
+# Ported to level 1.3.8 by W. Niemans <niemans@pbsolo.nl>
+# Ported to level 1.3.10 by Ko de Pree <ko@depree.nl>
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'iso-8859-1';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Bijdrage van:',
+    2 => 'lees verder',
+    3 => 'reacties',
+    4 => 'Wijzigen',
+    5 => 'Stem',
+    6 => 'Tussenstand',
+    7 => 'Peilingsuitslag',
+    8 => 'stemmen',
+    9 => 'Beheerdersmenu:',
+    10 => 'Ter beoordeling',
+    11 => 'Artikelen',
+    12 => 'Blokken',
+    13 => 'Thema\'s',
+    14 => 'Links',
+    15 => 'Evenementen',
+    16 => 'Peilingen',
+    17 => 'Gebruikers',
+    18 => 'SQL Query',
+    19 => 'Uitloggen',
+    20 => 'Mijn credits',
+    21 => 'Gebruikersnaam',
+    22 => 'Gebruikers ID',
+    23 => 'Beveiligingsniveau',
+    24 => 'Anoniem',
+    25 => 'Reageer',
+    26 => 'Reacties zijn voor verantwoording van degene die ze heeft geplaatst. Dit portaal is niet verantwoordelijk voor de inhoud.',
+    27 => 'Laatste plaatsingen',
+    28 => 'Verwijderen',
+    29 => 'Geen reacties.',
+    30 => 'Oudere artikelen',
+    31 => 'Toegestane HTML Tags:',
+    32 => 'Fout: ongeldige gebruikersnaam',
+    33 => 'Fout: kan niet naar logbestand schrijven',
+    34 => 'Fout',
+    35 => 'Uitloggen',
+    36 => 'aan',
+    37 => 'Geen artikelen',
+    38 => 'Content Syndication',
+    39 => 'vernieuwen',
+    40 => 'De instelling <tt>register_globals = Off</tt> is aanwezig in <tt>php.ini</tt>. Geeklog echter vereist dat <tt>register_globals</tt> ingesteld is op <strong>on</strong>. Voordat u verder gaat, gelieve dit op <strong>on</strong> in te stellen en herstart uw web server.',
+    41 => 'Gast(en)',
+    42 => 'Geschreven door:',
+    43 => 'Hierop reageren',
+    44 => 'Parent',
+    45 => 'MySQL foutnummer',
+    46 => 'MySQL foutmelding',
+    47 => 'Gebruikersmenu',
+    48 => 'Account informatie',
+    49 => 'Voorkeuren',
+    50 => 'Fout in SQL statement',
+    51 => 'help',
+    52 => 'Nieuw',
+    53 => 'Beheerder Home',
+    54 => 'Kan bestand niet openen.',
+    55 => 'Fout in',
+    56 => 'Stem',
+    57 => 'Wachtwoord',
+    58 => 'Inloggen',
+    59 => "Heeft u nog geen account? <br> Meld u dan <strong>nu</strong> aan als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nieuwe gebruiker</a>",
+    60 => 'Geef commentaar',
+    61 => 'Aanmelden nieuw account',
+    62 => 'woorden',
+    63 => 'Artikel weergave',
+    64 => 'Email artikel naar collega',
+    65 => 'afdruk versie',
+    66 => 'Mijn Kalender',
+    67 => 'Welkom bij ',
+    68 => 'home',
+    69 => 'contact',
+    70 => 'zoeken',
+    71 => 'uw Bijdrage',
+    72 => 'Links',
+    73 => 'Opinie\'s',
+    74 => 'Kalender',
+    75 => 'gericht Zoeken',
+    76 => 'Statistieken',
+    77 => 'Plugins',
+    78 => 'Komende evenementen',
+    79 => 'Wat is nieuw',
+    80 => 'artikelen in de laatste',
+    81 => 'artikel in de laatste',
+    82 => 'uren',
+    83 => 'REACTIES',
+    84 => 'LINKS',
+    85 => 'afgelopen 48 uur',
+    86 => 'Geen nieuwe reacties',
+    87 => 'afgelopen 2 weken',
+    88 => 'Geen recente nieuwe links',
+    89 => 'Er zijn geen komende evenementen',
+    90 => 'Home',
+    91 => 'Deze pagina is aangemaakt in',
+    92 => 'seconden',
+    93 => 'Copyright',
+    94 => 'Alle merknamen en copyrights op deze pagina zijn eigendom van hun respectievelijke eigenaren.',
+    95 => 'Bemotord met',
+    96 => 'Groepen',
+    97 => 'Woorden lijst',
+    98 => 'plugins',
+    99 => 'ARTIKELEN',
+    100 => 'Geen nieuwe artikelen',
+    101 => 'Uw evenementen',
+    102 => 'Evenementen',
+    103 => 'DB Backups',
+    104 => 'door',
+    105 => 'Email gebruikers',
+    106 => 'Opgevraagd',
+    107 => 'GL Versie Test',
+    108 => 'Leeg Cache',
+    109 => 'Rapporteer misbruik',
+    110 => 'Rapporteer dit bericht aan de sitebeheerder',
+    111 => 'Bekijk de PDF-versie',
+    112 => 'Geregistreerde gebruikers',
+    113 => 'Documentatie',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Evenementen Kalender',
+    2 => 'Er zijn geen evenementen om weer te geven.',
+    3 => 'Wanneer',
+    4 => 'Waar',
+    5 => 'Omschrijving',
+    6 => 'Voeg evenement toe',
+    7 => 'Komende evenementen',
+    8 => 'Door evenementen aan <strong>uw</strong> kalender toe te voegen, kunt u de voor u interessante evenementen verzamelen en snel inzien door op \'Mijn Kalender\' te klikken in het Gebruikersmenu.',
+    9 => 'Voeg toe aan \'Mijn Kalender\'',
+    10 => 'Verwijder van \'Mijn Kalender\'',
+    11 => "Voeg evenement toe aan {$_USER['username']}\'s Kalender",
+    12 => 'Evenement',
+    13 => 'Begint',
+    14 => 'Eindigt',
+    15 => 'Terug naar Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Verstuur een reactie',
+    2 => 'Opmaak',
+    3 => 'Uitloggen',
+    4 => 'Aanmelden account',
+    5 => 'Gebruikersnaam',
+    6 => 'Het portaal vereist dat u bent ingelogd om een reactie te versturen: log in a.u.b. Echter, indien u geen account heeft, kunt u het onderstaande formulier gebruiken om u aan te melden.',
+    7 => 'Uw laatste reactie was ',
+    8 => " seconden geleden. Een beveiliging vereist tenminste {$_CONF['commentspeedlimit']} seconden tussen reacties",
+    9 => 'Reactie',
+    10 => 'Send Report',
+    11 => 'Verstuur reactie',
+    12 => 'Vul a.u.b. de velden bij \'Titel\' en \'Reactie\' in. Deze zijn noodzakelijk voor het versturen van een reactie.',
+    13 => 'Uw informatie',
+    14 => 'Preview',
+    15 => 'Rapporteer dit bericht',
+    16 => 'Titel',
+    17 => 'Fout',
+    18 => 'Niet vergeten',
+    19 => 'Houdt u a.u.b. bij het onderwerp.',
+    20 => 'Probeer eerst op reactie\'s van anderen te reageren i.p.v. een nieuwe \'Thread\' te starten.',
+    21 => 'Lees ook de andere berichten voordat u uw bericht gaat versturen. Dit, om te voorkomen dat vele identieke berichten ontstaan.',
+    22 => 'Gebruik een helder onderwerp, dat uw bericht juist omschrijft.',
+    23 => 'Uw email adres zal NIET worden weergegeven.',
+    24 => 'Anonieme gebruiker',
+    25 => 'Weet u zeker dat u dit bericht wilt rapporteren aan de sitebeheerder?',
+    26 => '%s heeft de volgende commentaren met misbruik gerapporteerd:',
+    27 => 'Misbruikrapport'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profiel van',
+    2 => 'GebruikersNaam',
+    3 => 'Volledige Naam',
+    4 => 'Wachtwoord',
+    5 => 'Emailadres',
+    6 => 'Homepage',
+    7 => 'Bio/CV',
+    8 => 'PGP Code',
+    9 => 'Bewaar Informatie',
+    10 => 'Laatste 10 reacties van gebruiker',
+    11 => 'Geen reacties',
+    12 => 'Voorkeuren voor',
+    13 => 'Email\'s nachts verwerken',
+    14 => 'Dit wachtwoord is gegenereerd door een zgn. randomizer. Het wordt aanbevolen om dit wachtwoord meteen te wijzigen. Om het wachtwoord te wijzigen, log in en klik op \'Account informatie\' van het \'Gebruikersmenu\'.',
+    15 => "Uw {$_CONF['site_name']} account is aangemaakt. Om er gebruik van te maken, dient u in te loggen met gebruik van de onderstaande informatie. Bewaar dit bericht a.u.b. voor gebruik in de toekomst.",
+    16 => 'Uw account informatie',
+    17 => 'Account bestaat niet',
+    18 => 'Het email adres lijkt geen bestaand adres',
+    19 => 'De gebruikersnaam of het email adres is al in gebruik',
+    20 => 'Het email adres lijkt geen juist email adres',
+    21 => 'Fout aangetroffen',
+    22 => "Aanmelding bij {$_CONF['site_name']}",
+    23 => "Door het aanvragen van een account profiteert u van alle voordelen van {$_CONF['site_name']} portaal lidmaadschap en geeft u de mogelijkheid reacties en artikelen onder uw eigen naam te plaatsen. Indien u niet registreert, is dit alleen anoniem mogelijk. Let op, uw email adres zal <strong><i>nooit</i></strong> publiekelijk worden weergegeven op het portaal.",
+    24 => 'Uw wachtwoord wordt verstuurd naar het email adres dat u invoert.',
+    25 => 'Wachtwoord vergeten?',
+    26 => 'Vul uw gebruikersnaam in en klik op \'Email wachtwoord\' en een nieuw wachtwoord wordt verstuurd naar het opgeslagen email adres. Indien u uw gebruikersnaam niet meer weet, kunt u ook volstaan met het invullen van uw emailadres.',
+    27 => 'Registreer Nu!',
+    28 => 'Email wachtwoord',
+    29 => 'Uitgelogd van',
+    30 => 'Ingelogd van',
+    31 => 'De Functie die u wilt gebruiken, is alleen beschikbaar indien u bent ingelogd',
+    32 => 'Ondertekening',
+    33 => 'Nooit publiekelijk weergeven',
+    34 => 'Dit is uw *echte* naam',
+    35 => 'Vul wachtwoord in om deze te mogen wijzigen',
+    36 => 'Begint met http://',
+    37 => 'Toevoegen bij uw reacties',
+    38 => 'Het is aan U! Iedereen kan dit lezen',
+    39 => 'Uw openbare PGP key ',
+    40 => 'Geen iconen voor Thema\'s tonen',
+    41 => 'Beschikbaar voor moderator',
+    42 => 'Datum formaat',
+    43 => 'Maximum artikelen',
+    44 => 'Geen blokken',
+    45 => 'Toon voorkeuren voor',
+    46 => 'Uitgesloten \'Items\' voor',
+    47 => 'Nieuws blok instelling voor',
+    48 => 'Thema\'s',
+    49 => 'Geen iconen in artikelen',
+    50 => 'Afvinken indien u geen interesse heeft',
+    51 => 'Alleen de nieuwe artikelen',
+    52 => 'Standaard is 10',
+    53 => 'Ontvang de artikelen van overdag elke nacht',
+    54 => 'Vink de thema\'s en auteurs aan die NIET wilt zien.',
+    55 => 'Als u ze allemaal heeft afgevinkt, betekent dit dat u de standaard selektie wilt zien. Als u begint te selekteren, selekteer dan alles dat u wilt zien, omdat de standaardinstellingen worden genegeerd. Standaardinstellingen worden vet weergegeven.',
+    56 => 'Auteurs',
+    57 => 'Weergave',
+    58 => 'Sorteer volgorde',
+    59 => 'Reactie limiet',
+    60 => 'Hoe wilt u dat reacties worden weergegeven?',
+    61 => 'Nieuwste of oudste eerst?',
+    62 => 'Standaard is 100',
+    63 => "Uw wachtwoord is naar u verstuurd en zou op dit moment moeten arriveren. Volg a.u.b. de aanwijzingen in het bericht. Het wordt gewaardeerd, dat u gebruik maakt van {$_CONF['site_name']}",
+    64 => 'Voorkeurinstellingen voor Reacties van',
+    65 => 'Probeer opnieuw in te loggen',
+    66 => "U heeft misschien een tikfout gemaakt bij het inloggen. Probeer het hieronder opnieuw. Bent u een <a href=\'{$_CONF['site_url']}/users.php?mode=new\'>nieuwe gebruiker</a>?",
+    67 => 'Aangemeld sinds',
+    68 => 'Mijn gegevens onthouden',
+    69 => 'Hoe lang mogen we u onthouden nadat u bent ingelogd?',
+    70 => "Pas de layout en inhoud aan van {$_CONF['site_name']}",
+    71 => "Een mogelijkheid van {$_CONF['site_name']} is dat u de inhoud en de layout van wat u ontvangt kan aanpassen. Om van deze voorzieningen gebruik te maken dient u zich eerst te <a href=\'{$_CONF['site_url']}/users.php?mode=new\'>registeren</a> bij {$_CONF['site_name']}. Bent u al geregistreerd? Gebruik dan het login formulier, links om in te loggen!",
+    72 => 'Skin',
+    73 => 'Taal',
+    74 => 'Pas het portaal aan uw wensen aan!',
+    75 => 'Email thema\'s voor',
+    76 => 'Indien u een thema uit de onderstaande lijst selecteert, ontvang u alle artikelen die hierin wordt geplaatst aan het eind van de dag thuis. Kies alleen de thema\'s waarin u bent genteresseerd!',
+    77 => 'Foto',
+    78 => 'Voeg een afbeelding toe van u zelf!',
+    79 => 'Aanvinken om uw afbeelding te verwijderen',
+    80 => 'Inloggen',
+    81 => 'Verstuur email',
+    82 => 'Laatste 10 artikelen van gebruiker',
+    83 => 'Statistiek Plaatsingen van gebruiker',
+    84 => 'Totaal aantal artikelen:',
+    85 => 'Totaal aantal commentaren/reacties:',
+    86 => 'Vindt alle bijdragen van',
+    87 => 'Uw login naam',
+    88 => "Iemand (waarschijnlijk uzelf) heeft een nieuw wachtwoord voor uw account -> %s <- aangevraagd bij {$_CONF['site_name']}, <{$_CONF['site_url']}>. Indien u daadwerkelijk een nieuw wachtwoord wilt ingeven, klik dan op de volgende link: ",
+    89 => 'Indien u hier niet mee accoord gaat kunt u dit bericht negeren; de aanvraag wordt weer verwijderd (uw huidige wachtwoord blijft geldig).',
+    90 => 'Gelieve een nieuw wachtwoord voor uw account hieronder in te vullen. Bemerk dat uw huidige wachtwoord nog steeds geldig is totdat dit formulier verstuurd is.',
+    91 => 'Geef nieuw wachtwoord op',
+    92 => 'Toets nieuw wachtwoord',
+    93 => 'Uw laatste aanvraag voor een nieuw wachtwoord is %d seconden geleden. Het portaal vereist dat er minimaal %d seconden tussen dergelijke aanvragen verstrijken.',
+    94 => 'Verwijder Account \'%s\'',
+    95 => 'Klik op \'Verwijder Account\' hieronder om uw account uit de database te verwijderen. Merk op dat uw gepubliceerde artikelen en uw geplaatste reacties <strong>niet</strong> verwijderd worden, maar getoond worden als \'Anonymous\'.',
+    96 => 'verwijder account',
+    97 => 'Bevestig het verwijderen van uw Account',
+    98 => 'Weet u zeker dat uw account verwijderd moet worden? U bent daarna niet meer in staat in te loggen op dit portaal (tenzij u zelf weer aanmeldt). Indien de gevolgen u duidelijk zijn, klik dan nogmaals op \'verwijder account\' in het formulier hieronder.',
+    99 => 'Privacy Opties voor',
+    100 => 'Email van Beheerder',
+    101 => 'Accepteer email van beheerder(s)',
+    102 => 'Email van Gebruikers',
+    103 => 'Accepteer email van andere gebruikers',
+    104 => 'Toon Online Status',
+    105 => 'Vermeld me in het blok Who\'s Online',
+    106 => 'Lokatie',
+    107 => 'Zichtbaar in uw openbaar profiel',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Geen Nieuws om weer te geven',
+    2 => 'Er zijn geen nieuwe artikelen om weer te geven. Er is misschien geen nieuws onder dit thema, of u bent hier niet voor geautoriseerd.',
+    3 => 'voor thema %s',
+    4 => 'Hoofdartikel',
+    5 => 'Volgende',
+    6 => 'Vorige',
+    7 => 'Eerste',
+    8 => 'Laatste'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Er is een fout opgetreden bij het verzenden van het bericht. Probeer het opnieuw.',
+    2 => 'Bericht met succes verzonden.',
+    3 => 'Controleer of het juiste email adres is ingevuld in het veld \'Antwoord naar\'.',
+    4 => 'Vul de velden in: uw naam, antwoord naar, onderwerp, en bericht',
+    5 => 'Fout: deze gebruiker bestaat niet.',
+    6 => 'Er is een fout opgetreden.',
+    7 => 'Profiel van',
+    8 => 'Gebruiker Naam',
+    9 => 'Gebruiker URL',
+    10 => 'Stuur email naar',
+    11 => 'Uw naam:',
+    12 => 'Antwoord naar:',
+    13 => 'Onderwerp:',
+    14 => 'Bericht:',
+    15 => 'HTML wordt niet geconverteerd.',
+    16 => 'Bericht versturen',
+    17 => 'Email artikel naar collega',
+    18 => 'Naam naar',
+    19 => 'Email adres naar',
+    20 => 'Naam van',
+    21 => 'Email adres van',
+    22 => 'Alle velden zijn vereist',
+    23 => "Deze email is verstuurd door %s at %s om u op de hoogte te brengen van dit artikel van {$_CONF['site_url']}. Dit is geen SPAM en de email adressen in dit bericht zijn NERGENS anders opgeslagen.",
+    24 => 'Reageer op dit artikel bij',
+    25 => 'U moet ingelogd zijn, om van deze mogelijkheid gebruik te kunnen maken. Doordat u ingelogd bent, kan worden voorkomen dat er misbruik van het portaal wordt gemaakt',
+    26 => 'Dit formulier geeft u de mogelijkheid om een email naar de geselekteerde gebruiker te sturen. Alle velden zijn vereist.',
+    27 => 'Kort bericht',
+    28 => '%s schreef: ',
+    29 => "Dit is het dagelijks overzicht van {$_CONF['site_name']} voor ",
+    30 => ' Dagelijkse nieuwsbrief voor ',
+    31 => 'Titel',
+    32 => 'Datum',
+    33 => 'Lees het volledige artikel bij',
+    34 => 'Eind van het Bericht',
+    35 => 'Helaas, deze gebruiker accepteert geen email.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Gericht Zoeken',
+    2 => 'Trefwoorden',
+    3 => 'Thema',
+    4 => 'Alle',
+    5 => 'Type',
+    6 => 'Artikelen',
+    7 => 'Reacties',
+    8 => 'Auteurs',
+    9 => 'Alle',
+    10 => 'Zoek',
+    11 => 'Zoek resultaten',
+    12 => 'gevonden',
+    13 => 'Zoek resultaten: niets gevonden',
+    14 => 'Er is niets gevonden bij het zoeken naar',
+    15 => 'Probeer opnieuw.',
+    16 => 'Titel',
+    17 => 'Datum',
+    18 => 'Auteur',
+    19 => "Zoek in de gehele {$_CONF['site_name']} database van nieuwe en oude artikelen",
+    20 => 'Datum',
+    21 => 'tot',
+    22 => '(Datum Formaat JJJJ-MM-DD)',
+    23 => 'Hits',
+    24 => 'Gevonden',
+    25 => 'gevonden voor',
+    26 => 'items in',
+    27 => 'seconden',
+    28 => 'Geen artikel of reactie komt overeen met uw zoekopdracht',
+    29 => 'Artikel en reactie resultaten',
+    30 => 'Geen link komt overeen met uw zoekopdracht',
+    31 => 'Deze plugin gaf geen resultaat',
+    32 => 'Evenement',
+    33 => 'URL',
+    34 => 'Locatie',
+    35 => 'Gehele Dag',
+    36 => 'Geen evenement komt overeen met uw zoekopdracht',
+    37 => 'Evenement Resultaat',
+    38 => 'Link Resultaat',
+    39 => 'Links',
+    40 => 'Evenementen',
+    41 => 'het trefwoord dient minimaal 3 tekens te bevatten.',
+    42 => 'Gelieve een datum op te geven in het formaat JJJJ-MM-DD (jaar-maand-dag).',
+    43 => 'exacte zinsnede',
+    44 => 'alle woorden',
+    45 => 'enig woord',
+    46 => 'Volgende',
+    47 => 'Vorige',
+    48 => 'Auteur',
+    49 => 'Datum',
+    50 => 'Treffers',
+    51 => 'Link',
+    52 => 'Locatie',
+    53 => 'Artikel Resultaten',
+    54 => 'Reactie Resultaten',
+    55 => 'de zoekterm',
+    56 => 'EN',
+    57 => 'OF',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Portaal statistieken',
+    2 => 'Totaal aantal treffers in het portaal',
+    3 => 'Aantal Artikelen (Reacties) in het portaal',
+    4 => 'Aantal Peilingen (Stemmen) in het portaal',
+    5 => 'Aantal Links (Klikken) in het portaal',
+    6 => 'Aantal Evenementen in het portaal',
+    7 => 'Top Tien opgevraagde artikelen',
+    8 => 'Artikel titel',
+    9 => 'Opgevraagd',
+    10 => 'Het lijkt erop dat er geen artikelen op deze site staan, of ze zijn nooit opgevraagd.',
+    11 => 'Top Tien Artikelen met meeste reacties',
+    12 => 'Reacties',
+    13 => 'Het lijkt erop dat er geen artikelen op deze site staan, of er is nooit op gereageerd.',
+    14 => 'Top Tien Peilingen',
+    15 => 'Peiling vragen',
+    16 => 'Stemmen',
+    17 => 'Het lijkt erop dat er geen peilingen op deze site staan, of er is nog nooit gestemd.',
+    18 => 'Top Tien Links',
+    19 => 'Links',
+    20 => 'Hits',
+    21 => 'Het lijkt erop dat er geen links op deze site staan, of ze zijn nooit aangeklikt.',
+    22 => 'Top Tien Artikelen via email',
+    23 => 'Emails',
+    24 => 'Het lijkt erop dat er geen artikelen op deze site staan, of niemand is er op geabonneerd',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Gerelateerd',
+    2 => 'Email artikel naar collega',
+    3 => 'Afdrukversie artikel',
+    4 => 'Artikel opties',
+    5 => 'PDF formaat'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Om een %s voor te stellen, is het vereist om als gebruiker te zijn ingelogd.',
+    2 => 'Inloggen',
+    3 => 'Nieuwe gebruiker',
+    4 => 'Stel een Evenement voor',
+    5 => 'Stel een Link voor',
+    6 => 'Stel een Artikel voor',
+    7 => 'Inloggen is vereist',
+    8 => 'Voorstellen',
+    9 => 'Indien u informatie voorstelt voor gebruik op dit portaal, vordt u verzocht om de volgende suggesties te volgen...<ul><li>Vul alle velden in. Deze zijn vereist.</li><li>Lever complete en accurate informatie.</li><li>Controleer de op te geven URLs dubbel.</li></ul>Dank u wel.',
+    10 => 'Titel',
+    11 => 'Link',
+    12 => 'Start Datum',
+    13 => 'Eind Datum',
+    14 => 'Locatie',
+    15 => 'Omschrijving',
+    16 => 'Indien anders, specificeer a.u.b.',
+    17 => 'Categorie',
+    18 => 'Anders',
+    19 => 'Lees dit eerst',
+    20 => 'Fout: Geen Categorie ingevuld',
+    21 => 'Indien \'Anders\' geselekteerd: lever dan een ook een categorie naam',
+    22 => 'Fout: niet alle velden Ingevuld',
+    23 => 'Vul alle velden van het formulier in. Alle velden zijn vereist.',
+    24 => 'Voorstel opgeslagen',
+    25 => 'Uw %s voorstel is succesvol opgeslagen.',
+    26 => 'Snelheids limiet',
+    27 => 'Gebruikersnaam',
+    28 => 'Thema',
+    29 => 'Artikel',
+    30 => 'Uw laatste bijdrage was ',
+    31 => " seconden geleden. Het portaal vereist ten minste {$_CONF['speedlimit']} seconden tussen twee voorstellen voor plaatsing",
+    32 => 'Preview',
+    33 => 'Artikel preview',
+    34 => 'Uitloggen',
+    35 => 'HTML tags zijn niet toegestaan',
+    36 => 'Opmaak',
+    37 => "Een voorstel voor plaatsing van een evenement op het {$_CONF['site_name']}, wordt in de hoofdkalender geplaatst. De gebruikers hebben de optie om deze aan hun persoonlijke kalender toe te voegen. Deze voorziening is <strong>NIET</strong> bedoeld voor persoonlijke evenementen, zoals verjaardagen en jubilea.<br><br>Als u een voorstel voor een evenement doet, wordt deze eerst verstuurt naar een beheerder en indien goedgekeurd, verschijnt deze in de hoofdkalender.",
+    38 => 'Evenement toevoegen aan',
+    39 => 'Hoofdkalender',
+    40 => 'Persoonlijke Kalender',
+    41 => 'Eind Tijd',
+    42 => 'Begin Tijd',
+    43 => 'Gehele Dag',
+    44 => 'Adres regel 1',
+    45 => 'Adres regel 2',
+    46 => 'Plaats',
+    47 => 'Provincie',
+    48 => 'Postcode',
+    49 => 'Evenement Type',
+    50 => 'Wijzig Evenement Types',
+    51 => 'Locatie',
+    52 => 'Verwijderen',
+    53 => 'Aanmelden account'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'autorisatie is vereist',
+    2 => 'Geweigerd! Incorrecte Login informatie',
+    3 => 'Geen juist wachtwoord voor gebruiker',
+    4 => 'Gebruikersnaam:',
+    5 => 'Wachtwoord:',
+    6 => 'Alle toegang tot administratieve functies van het portaal wordt vastgelegd en later bekeken.<br>Deze pagina is alleen voor geautoriseerde gebruikers.',
+    7 => 'inloggen'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Onvoldoende rechten',
+    2 => 'U bent niet geautoriseerd om dit blok te wijzigen.',
+    3 => 'Blok Editor',
+    4 => 'Er was een probleem met het lezen van deze feed (kijk in de error.log voor meer informatie).',
+    5 => 'Blok titel',
+    6 => 'Thema',
+    7 => 'Overal',
+    8 => 'Blok beveiligingsniveau',
+    9 => 'Blok volgorde',
+    10 => 'Blok Type',
+    11 => 'Portaal Blok',
+    12 => 'Normaal Blok',
+    13 => 'Portaal Blok opties',
+    14 => 'RDF URL',
+    15 => 'Laatste RDF Update',
+    16 => 'Normaal Blok opties',
+    17 => 'Blok Inhoud',
+    18 => 'Vult u a.u.b. de velden in bij \'Blok Titel\' en \'Inhoud\'',
+    19 => 'Blok Manager',
+    20 => 'Blok Titel',
+    21 => 'Beveiliginsniveau',
+    22 => 'Blok Type',
+    23 => 'Blok Volgorde',
+    24 => 'Blok Thema',
+    25 => 'Om een blok te wijzigen of te verwijderen, klikt u op dat blok hieronder. Om een nieuw blok aan te maken klikt u op \'nieuw blok\' hierboven.',
+    26 => 'Layout Blok',
+    27 => 'PHP Blok',
+    28 => 'PHP Blok opties',
+    29 => 'Blok Menu',
+    30 => 'Indien u PHP code wenst te gebruiken in een van de blokken, vul dan de naam van de php-funktie hierboven in. Deze naam moet beginnen met de prefix \'phpblock_\' (e.g. phpblock_hello_world). Zonder deze prefix wordt de funktie NIET aangeroepen. Dit is een beveiligingsmaatregel om niet zomaar willekeurige kode te moeten accepteren, die wellicht de integriteit kunnen schaden.<br>Zorg er ook voor dat er \'lege haakjes\' \'()\' staan achter de funktienaam in de broncode.<br>Tenslotte: het wordt aanbevolen dat alle PHP-blok-code in /pad/naar/geeklog/system/lib-custom.php wordt opgenomen. Bij nieuwe versies blijft de code gehandhaafd.',
+    31 => 'Fout in PHP Blok. Funktie, %s, bestaat niet.',
+    32 => 'Fout: niet alle velden doorgegeven.',
+    33 => 'Er wordt een URL gevraagd voor het .rdf bestand (portaal blokken)',
+    34 => 'Gelieve de titel en de funktie voor PHP blokken op te geven.',
+    35 => 'Gelieve de titel en de inhoud op te geven (normale blokken)',
+    36 => 'Gelieve de inhoud op te geven (layout blokken)',
+    37 => 'Ongeldige PHP blok funktienaam',
+    38 => 'Funktie voor PHP blokken moeten de prefix \'phpblock_\' (e.g. phpblock_hello_world) bevatten. Deze prefix is vereist ter beveiliging: het voorkomt de uitvoering van willekeurige PHP-code.',
+    39 => 'Zijde',
+    40 => 'Links',
+    41 => 'Rechts',
+    42 => 'Gelieve de bloktitel en de blokvolgorde op te geven (standaard blokken).',
+    43 => 'Alleen Homepagina',
+    44 => 'Geen toegang',
+    45 => "U heeft geprobeerd een blok op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/block.php\'>Terug naar de blok administratie pagina</a>.",
+    46 => 'Nieuw blok',
+    47 => 'Beheerder Home',
+    48 => 'Blok Naam',
+    49 => ' (zonder spaties en verplicht unieke naam)',
+    50 => 'Help File URL',
+    51 => 'inclusief http://',
+    52 => 'Indien u dit niet invult, verschijnt er geen help icon in dit blok.',
+    53 => 'Opname Toestaan',
+    54 => 'opslaan',
+    55 => 'annuleren',
+    56 => 'verwijderen',
+    57 => 'Verplaats blok naar beneden',
+    58 => 'Verplaats blok naar boven',
+    59 => 'Verplaats blok naar de rechterzijde',
+    60 => 'Verplaats blok naar de linkerzijde',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Evenement Editor',
+    2 => 'Fout',
+    3 => 'Evenement Titel',
+    4 => 'Evenement URL',
+    5 => 'Startdatum',
+    6 => 'Einddatum',
+    7 => 'Evenementlocatie',
+    8 => 'Evenementbeschrijving',
+    9 => '(inclusief http://)',
+    10 => 'U dient de datums/tijden, de evenementtitel en de beschrijving te vermelden!',
+    11 => 'Evenement Manager',
+    12 => 'Om een evenement te wijzigen of te verwijderen, klik dan op dat evenement hieronder. Om een evenement aan te maken, klik dan op \'Nieuw Evenement\' hierboven.',
+    13 => 'Evenement Titel',
+    14 => 'Startdatum',
+    15 => 'Einddatum',
+    16 => 'Geen toegang',
+    17 => "U heeft geprobeerd een evenement op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/event.php\'>Terug naar de evenement administratie pagina</a>.",
+    18 => 'Nieuw Evenement',
+    19 => 'Beheerder Home',
+    20 => 'opslaan',
+    21 => 'annuleren',
+    22 => 'verwijderen',
+    23 => 'Onjuiste startdatum.',
+    24 => 'Onjuiste einddatum.',
+    25 => 'Einddatum is eerder dan de startdatum.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Vorige Artikelen',
+    2 => 'Volgende Artikelen',
+    3 => 'Opties',
+    4 => 'Opmaak',
+    5 => 'Artikel Editor',
+    6 => 'Er bestaan (nog) geen Artikelen in het portaal',
+    7 => 'Auteur',
+    8 => 'opslaan',
+    9 => 'preview',
+    10 => 'annuleren',
+    11 => 'verwijderen',
+    12 => 'ID',
+    13 => 'Titel',
+    14 => 'Thema',
+    15 => 'Datum',
+    16 => 'Introductie Tekst',
+    17 => 'Body Tekst',
+    18 => 'Treffers',
+    19 => 'Opmerkingen',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Artikel Lijst',
+    23 => 'Om een Artikel te wijzigen of te verwijderen, klik op het betreffende artikelnummer hieronder. Om een artikel op te roepen, klik op de titel van het betreffende Artikel. Om een nieuw Artikel aan te leggen, klik op \'Nieuw Artikel\' hierboven.',
+    24 => 'De ID die u voor dit artikel heeft gekozen is reeds in gebruik. Kies een andere ID a.u.b.',
+    25 => 'Error when saving story',
+    26 => 'Artikel Preview',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Er zijn File Upload Fouten',
+    31 => 'Gelieve de Auteur, Titel en Introductie Tekst te vermelden.',
+    32 => 'HoofdArtikel',
+    33 => 'Er kan slechts een enkel HoofdArtikel actief zijn !!',
+    34 => 'Draft',
+    35 => 'Ja',
+    36 => 'Nee',
+    37 => 'Meer door..',
+    38 => 'Meer van..',
+    39 => 'Emails',
+    40 => 'Geen toegang',
+    41 => "U heeft geprobeerd een artikel op te roepen zonder geldige autorisatie. De poging is vastgelegd. Het Artikel is hieronder weergegeven. <a href=\'{$_CONF['site_url']}/admin/story.php\'>Terug naar de artikel administratie pagina</a>.",
+    42 => "U heeft geprobeerd een artikel op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/story.php\'>Terug naar de artikel administratie pagina</a>.",
+    43 => 'Nieuw Artikel',
+    44 => 'Beheerder Home',
+    45 => 'Toegang',
+    46 => '<strong>NOTE:</strong> indien de datum in de toekomst ligt, wordt het Artikel pas op die datum gepubliceerd. Dat houdt tevens in dat het artikel niet in de RDF headline feed opgenomen wordt en dat de zoek funktie het buiten beschouwing laat. Er zijn dan ook geen statistieken.',
+    47 => 'Beelden',
+    48 => 'beeld',
+    49 => 'rechts',
+    50 => 'links',
+    51 => 'Om de beelden die hier ingesloten zijn, in het Artikel op te nemen is speciaal geformatteerde tekst nodig. Kies uit: [imageX], [imageX_right] or [imageX_left] en vervang de X door het nummer van het beeld dat u bijsluit. NOTE: Bijgesloten beelden MOETEN gebruikt worden. Indien u dat vergeet kan het Artikel niet opgeslagen worden.<br><p><strong>PREVIEW</strong>: Het is gemakkelijker een Preview van een Artikel met beelden op te roepen NADAT het opgeslagen is in draft-vorm, IN PLAATS VAN direkt de preview knop aan te klikken. Gebruik de preview knop alleen indien er geen beelden bijgesloten zijn.',
+    52 => 'Verwijderen',
+    53 => 'werd niet vermeld. Dit beeld MOET opgenomen worden in de introductie of Body voordat uw werk opgeslagen kan worden.',
+    54 => 'Bijgesloten beelden zijn niet opgenomen in tekst',
+    55 => 'De hierna volgende problemen zijn opgetreden bij het opslaan van uw artikel. Gelieve deze op te lossen en daarna opnieuw op te slaan.',
+    56 => 'Toon Thema Icon',
+    57 => 'Toon beeld in originele grootte',
+    58 => 'Story Management',
+    59 => 'Optie',
+    60 => 'Toegestaan',
+    61 => 'Auto archiveren',
+    62 => 'Auto verwijderen',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Thema Editor',
+    2 => 'Thema ID',
+    3 => 'Thema Naam',
+    4 => 'Thema Beeld',
+    5 => '(zonder spaties)',
+    6 => 'Het verwijderen van een Thema is recursief. Alle bijbehorende Artikelen en Blokken worden tevens verwijderd',
+    7 => 'Gelieve het Thema ID en de Thema Naam in te vullen.',
+    8 => 'Thema Manager',
+    9 => 'Om een Thema te wijzigen of te verwijderen, klik op het betreffende Thema. Uw toegangsniveau voor ieder Thema staat daar tussen haakjes.<br>Om een nieuw Thema aan te leggen, klik op \'Nieuw Thema\' hierboven.',
+    10 => 'Sorteer Volgorde',
+    11 => 'Artikelen/Pagina',
+    12 => 'Geen toegang',
+    13 => "U heeft geprobeerd een Thema op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/topic.php\'>Terug naar de Thema administratie pagina</a>.",
+    14 => 'Sorteer Methode',
+    15 => 'alfabetisch',
+    16 => 'standaard is',
+    17 => 'Nieuw Thema',
+    18 => 'Beheerder Home',
+    19 => 'opslaan',
+    20 => 'annuleren',
+    21 => 'verwijderen',
+    22 => 'Standaard',
+    23 => 'Verhef dit thema tot standaard voor nieuwe artikelen',
+    24 => '(*)',
+    25 => 'Archief Topic',
+    26 => 'maak hiervan uw standaard topic voor gearchiveerde artikelen. Slechts 1 topic is toegestaan.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Gebruiker Editor',
+    2 => 'Gebruiker ID',
+    3 => 'Gebruiker Naam',
+    4 => 'Volledige Naam',
+    5 => 'Wachtwoord',
+    6 => 'Toegangs Niveau',
+    7 => 'Email adres',
+    8 => 'Homepagina',
+    9 => '(zonder spaties)',
+    10 => 'Gelieve de Gebruiker Naam, Volledige naam, toegangsniveau en emailadres in te vullen.',
+    11 => 'Gebruiker Manager',
+    12 => 'Om een Gebruiker te wijzigen of te verwijderen, klik op de betreffende Gebruiker hieronder. Om een nieuwe Gebruiker aan te leggen, klik op \'Nieuwe Gebruiker\' hierboven. Er kan eenvoudig gezocht worden op delen van een Gebruiker Naam, email adres of van de Volledige naam (e.g.*sen* or *.nl).',
+    13 => 'ToegangsNiveau',
+    14 => 'Reg. Datum',
+    15 => 'Nieuwe Gebruiker',
+    16 => 'Beheerder Home',
+    17 => 'wachtwoord wijzigen',
+    18 => 'annuleren',
+    19 => 'verwijderen',
+    20 => 'opslaan',
+    21 => 'De gebruikernaam bestaat reeds.',
+    22 => 'Fout',
+    23 => 'In Batch Toevoegen',
+    24 => 'Batch Import van Gebruikers',
+    25 => 'Een batch met gebruikers kan geimporteerd worden. Het import bestand is dan een tab-delimited tekst bestand en heeft de velden in de volgende layout: Volledige Naam, gebruikersnaam, email adres. Aan elke zo toegevoegde Gebruiker wordt daarna een email verstuurd met een willekeurig wachtwoord. Slechts een enkele Gebruiker per regel! Het niet volgen van deze instructies veroorzaakt problemen die uitsluitend met handwerk opgelost kunnen worden. Dubbelcheck de invullingen !!',
+    26 => 'Zoek',
+    27 => 'Limiteer Resultaten',
+    28 => 'Vink aan om dit beeld te verwijderen',
+    29 => 'Pad',
+    30 => 'Import',
+    31 => 'Nieuwe Gebruiker',
+    32 => 'Klaar met verwerken. %d geimporteerd en %d geweigerd',
+    33 => 'submit',
+    34 => 'Fout: specificeer een bestand voor upload.',
+    35 => 'Laatste Login',
+    36 => '(nooit)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Goedkeuren',
+    2 => 'Verwijderen',
+    3 => 'Wijzigen',
+    4 => 'Profiel',
+    10 => 'Titel',
+    11 => 'Start Datum',
+    12 => 'URL',
+    13 => 'Categorie',
+    14 => 'Datum',
+    15 => 'Thema',
+    16 => 'Gebruiker naam',
+    17 => 'Volledige naam',
+    18 => 'Email',
+    34 => 'Moderator Menu',
+    35 => 'Voorgedragen Artikel(en)',
+    36 => 'Voorgedragen Link(s)',
+    37 => 'Voorgedragen Evenement(en)',
+    38 => 'Submit',
+    39 => 'Er is niets te modereren op dit moment',
+    40 => 'Nieuwe Gebruiker(s)'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Zondag',
+    2 => 'Maandag',
+    3 => 'Dinsdag',
+    4 => 'Woensdag',
+    5 => 'Donderdag',
+    6 => 'Vrijdag',
+    7 => 'Zaterdag',
+    8 => 'Evenement Toevoegen',
+    9 => 'Evenement',
+    10 => 'Evenementen voor',
+    11 => 'Hoofdkalender',
+    12 => 'Mijn Kalender',
+    13 => 'Januari',
+    14 => 'Februari',
+    15 => 'Maart',
+    16 => 'April',
+    17 => 'Mei',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'Augustus',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'December',
+    25 => 'Terug naar',
+    26 => 'Gehele Dag',
+    27 => 'Week',
+    28 => 'Persoonlijke Kalender voor',
+    29 => 'Publieke Kalender',
+    30 => 'verwijder evenement',
+    31 => 'Voeg toe',
+    32 => 'Evenement',
+    33 => 'Datum',
+    34 => 'Tijd',
+    35 => 'Snel toevoegen',
+    36 => 'Voorstellen',
+    37 => 'Helaas, de persoonlijke kalender optie is niet beschikbaar op het portaal',
+    38 => 'Persoonlijke Evenementen Editor',
+    39 => 'Dag',
+    40 => 'Week',
+    41 => 'Maand'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Email faciliteit",
+    2 => 'Van',
+    3 => 'Antwoord aan',
+    4 => 'Onderwerp',
+    5 => 'Inhoud',
+    6 => 'Verstuur naar:',
+    7 => 'Alle gebruikers',
+    8 => 'Beheerder',
+    9 => 'Opties',
+    10 => 'HTML',
+    11 => 'Belangrijk bericht!',
+    12 => 'Verstuur',
+    13 => 'Herstel',
+    14 => 'Instellingen van de gebruiker negeren',
+    15 => 'Probleem tijdens verzending naar: ',
+    16 => 'Bericht met succes gezonden naar: ',
+    17 => "<a href=\'{$_CONF['site_url']}/admin/mail.php\'>Stuur nog een bericht</a>",
+    18 => 'To',
+    19 => 'NOTE: Indien u een bericht wilt sturen aan alle portaal leden, kies dan de \'Logged-in\' groep.',
+    20 => "<successcount> berichten verstuurd en <failcount> fouten. Onderstaand vindt u de details van elk bericht ter controle. U kunt nu ook <a href=\'{$_CONF['site_url']}/admin/mail.php\'>nog een bericht versturen</a> of <a href=\'{$_CONF['site_url']}/admin/moderation.php\'>terug gaan naar de administratie pagina</a>.",
+    21 => 'Fouten',
+    22 => 'Succes',
+    23 => 'Geen fouten',
+    24 => 'Niets verstuurd',
+    25 => '-- Selekteer Group --',
+    26 => 'Gelieve alle velden van het formulier in te vullen en tevens een groep gebruikers te kiezen.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Het installeren van plugins kan het portaal als geheel beschadigen en, mogelijk ook, de achterliggende databases. Het is zeer belangrijk dat u alleen plugins van <a href="http://www.geeklog.net">Geeklog Homepage</a> instaleerd, omdat deze degelijk getest zijn. Het is ook belangrijk dat u inziet dat de installatie enige \'onveilige\' commando\'s bevat die kunnen leiden tot beveiligingsproblemen. Dit vergt bijzondere aandacht voor plugins van derden. Zelfs indien u deze waarschuwing ter harte neemt, kan de veiligheid en correctheid van de installatieprocedure niet gegarandeerd worden. De verantwoordelijkheid ligt exclusief bij U! Anders gezegd: installeer op eigen risico. Wees voorzichtig en lees de installatievoorschriften die bij elke plugin meekomen. Tenslotte: volg deze op.',
+    2 => 'plugin Installatie Disclaimer',
+    3 => 'plugin Installatie Formulier',
+    4 => 'plugin File',
+    5 => 'plugin Lijst',
+    6 => 'Waarschuwing: Deze plugin is al Actief!',
+    7 => 'De plugin die u probeert te installeren is er al. gelieve eerst deze plugin te verwijderen voordat u de installatie opnieuw probeert.',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'Deze plugin vereist een latere versie van Geeklog. Gelieve deze versie van <a href=http://www.geeklog.net>Geeklog</a> te upgraden of een nieuwere versie op te halen van deze plugin.',
+    10 => '<br><strong>Er zijn geen plugins actief op dit moment.</strong><br><br>',
+    11 => 'Om een plugin te wijzigen of te verwijderen, klik op het nummer van deze plugin\'s hieronder. Dit laat u de detailles zien, inclusief de website van de auteur. Tevens worden de versies van de plugins getoond. Dit helpt u bij de vraag of plugin\'s ge-upgrade moeten worden. Raadpleeg de documentatie voordat u een plugin installeert of upgrade. Om een introductie over deze plugin op te vragen, klik op de naam van de plugin, dit brengt u naar de website van de plugin.',
+    12 => 'geen Naam voor de plugin gevonden door de plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'Nieuwe plugin',
+    15 => 'Beheerder Home',
+    16 => 'plugin Naam',
+    17 => 'plugin Versie',
+    18 => 'Geeklog Versie',
+    19 => 'Toestaan',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => 'Installeer',
+    23 => 'Bewaar',
+    24 => 'annuleren',
+    25 => 'Verwijderen',
+    26 => 'plugin Naam',
+    27 => 'plugin Homepage',
+    28 => 'Genstalleerde Versie',
+    29 => 'Geeklog Versie',
+    30 => 'plugin Verwijderen?',
+    31 => 'Weet u het zeker dat deze plugin verwijderd mag worden? Let op! Hiermee worden tevens alle bestanden, data en structuren verwijderd die deze plugin gebruikt. Alleen als u zeker bent, klikt u nogmaals op \'Verwijderen\' in het formulier hieronder.',
+    32 => '<p><b>Fout, AutoLinktag heeft niet het juiste formaat</b></p>',
+    33 => 'Codeversie',
+    34 => 'Vernieuw',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'aanmaken feed',
+    2 => 'opslaan',
+    3 => 'verwijderen',
+    4 => 'annuleren',
+    10 => 'Content Syndication',
+    11 => 'Nieuwe Feed',
+    12 => 'Beheerder Home',
+    13 => 'Om een feed te wijzigen of te verwijderen, klikt u op de feed\'s tiel hieronder. Om een nieuwe feed aan te maken, klikt u op \'Nieuwe Feed\' hierboven.',
+    14 => 'Titel',
+    15 => 'Type',
+    16 => 'Bestandsnaam',
+    17 => 'Formaat',
+    18 => 'laatste wijziging',
+    19 => 'Actief',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => '<i>(geen feeds)</i>',
+    23 => 'alle Artikelen',
+    24 => 'Feed Editor',
+    25 => 'Feed Titel',
+    26 => 'Limiet',
+    27 => 'Lengte van de entries',
+    28 => '(0 = geen tekst, 1 = alle tekst, anders = maximaal aanal karakters.)',
+    29 => 'Beschrijving',
+    30 => 'Laatste Wijziging',
+    31 => 'Karakter Set',
+    32 => 'Taal',
+    33 => 'Inhoud',
+    34 => 'Entries',
+    35 => 'Uren',
+    36 => 'Selecteer type van feed',
+    37 => 'Er is minstens een plugin actief die content syndication ondersteunt. Het is nodig dat u hieronder aangeeft of er sprake is van een Geeklog feed of van een feed uit een van de plugins.',
+    38 => 'Fout: Niet alles ingevuld',
+    39 => 'Gelieve de \'Feed Titel\', \'beschrijving\', en \'Filename\' in te vullen.',
+    40 => 'Gelieve het \'aantal entries\' of \'aantal uren\' op te geven.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Uw wachtwoord is naar u verstuurd, en kan elk moment in uw inbox arriveren. Volg a.u.b. de instructies in het bericht, en we bedanken u voor het gebruik maken van {$_CONF['site_name']}",
+    2 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, wordt het geplaatst op het portaal.",
+    3 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, zal uw link geplaatst worden in het <a href={$_CONF['site_url']}/links.php>links</a> gedeelte.",
+    4 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, zal uw evenement geplaatst worden in het <a href={$_CONF['site_url']}/calendar.php>Kalender</a> gedeelte.",
+    5 => 'Uw account informatie is opgeslagen.',
+    6 => 'Uw voorkeuren zijn opgeslagen.',
+    7 => 'Uw instellingen voor commentaar/reactie zijn opgeslagen.',
+    8 => 'U bent met succes uitgelogd.',
+    9 => 'Het artikel is opgeslagen.',
+    10 => 'Het artikel is verwijderd.',
+    11 => 'Het blok is opgeslagen.',
+    12 => 'Het blok is verwijderd.',
+    13 => 'Het thema is opgeslagen.',
+    14 => 'Het thema, en al de bijbehorende artikelen zijn verwijderd.',
+    15 => 'De link is opgeslagen.',
+    16 => 'De link is verwijderd.',
+    17 => 'Het evenement is opgeslagen.',
+    18 => 'Het evenement is verwijderd.',
+    19 => 'Uw peiling is opgeslagen.',
+    20 => 'Uw peiling is verwijderd.',
+    21 => 'De gebruiker is opgeslagen.',
+    22 => 'De gebruiker is verwijderd',
+    23 => 'Er is een fout opgetreden bij het toevoegen van een evenement aan uw kalender. Er is geen evenement id aangemaakt.',
+    24 => 'Het evenement is toegevoegd aan uw kalender',
+    25 => 'U kan uw persoonlijke kalender pas openen als u bent ingelogd',
+    26 => 'Het evenement is verwijderd van uw persoonlijke kalender',
+    27 => 'Bericht verstuurd.',
+    28 => 'De plugin is opgeslagen',
+    29 => 'Helaas, persoonlijke kalenders zijn niet geactiveerd op dit portaal',
+    30 => 'Toegang Geweigerd',
+    31 => 'Helaas, u heeft geen toegang tot de artikel administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    32 => 'Helaas, u heeft geen toegang tot de thema administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    33 => 'Helaas, u heeft geen toegang tot de blok administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    34 => 'Helaas, u heeft geen toegang tot de links administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    35 => 'Helaas, u heeft geen toegang tot de evenementen administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    36 => 'Helaas, u heeft geen toegang tot de peilingen administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    37 => 'Helaas, u heeft geen toegang tot de gebruiker administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    38 => 'Helaas, u heeft geen toegang tot de plugin administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    39 => 'Helaas, u heeft geen toegang tot de email administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    40 => 'Portaal Bericht',
+    41 => 'Helaas, u heeft geen toegang tot de woordvervang administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    42 => 'Het woord is opgeslagen.',
+    43 => 'Het woord is verwijderd.',
+    44 => 'De plugin is ingevoegd!',
+    45 => 'De plugin is verwijderd.',
+    46 => 'Helaas, u heeft geen toegang tot Database Backup Utility. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    47 => 'Deze funktie werkt allen onder *nix. Indien u *nix gebruikt als besturingsysteem dan is uw cache geleegd. Indien u Windows gebruikt, moet u zoeken naar bestanden als adodb_*.php en deze handmatig verwijderen.',
+    48 => "Bedankt voor uw aanvraag voor een gebruikersaccount van {$_CONF['site_name']}. De beheerders zullen uw aanvraag in behandeling nemen. Indien goedgekeurd, wordt uw wachtwoord naar het email adres verstuurd dat u net heeft ingevuld.",
+    49 => 'De groep is opgeslagen.',
+    50 => 'De groep is verwijderd.',
+    51 => 'Deze gebruikersnaam is al in gebruik. Kies a.u.b. een andere.',
+    52 => 'Het opgegeven email adres lijkt niet geldig te zijn.',
+    53 => 'Het nieuwe wachtwoord is geaccepteerd. Gelieve hieronder opnieuw in te loggen, a.u.b.',
+    54 => 'De aanvraag voor een nieuw wachtwoord is verjaard. Gelieve dit hieronder opnieuw aan te vragen.',
+    55 => 'Een email is naar u verstuurd en zal in korte tijd bij u binnenkomen. Gelieve de instructies in dat bericht op te volgen.',
+    56 => 'Het opgegeven email adres is reeds in gebruik bij een ander account. Dit is beveiligd.',
+    57 => 'Uw account is met succes verwijderd.',
+    58 => 'Uw feed is met succes opgeslagen.',
+    59 => 'De feed is met succes verwijderd.',
+    60 => 'De plugin is met succes ge-update',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Toegang',
+    'ownerroot' => 'Owner/Root',
+    'group' => 'Group',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Toegangs Rechten',
+    'owner' => 'Owner',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTE: \'Members\': dit zijn alle ingelogde Gebruikers van het portaal -- \'Anonymous\': dit zijn alle niet-ingelogde bezoekers.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Ondanks dat u een gebruikersBeheerder bent, kunt u een zgn. 'root user' niet wijzigen. Daarvoor moet u eerst als een zgn. 'root user' ingelogd zijn. U kunt wel alle andere gebruikers wijzigen. Alle pogingen om een zgn. 'root user' ongeautoriseerd te wijzigen, worden vastgelegd. Gelieve terug te gaan naar de <a href=\"{$_CONF['site_admin_url']}/user.php\">Gebruiker Administratie pagina</a>.",
+    'securitygroupsmsg' => 'Vink de groep(en) waarin de gebruiker opgenomen wordt.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Beschrijving',
+    'name' => 'Naam',
+    'rights' => 'Rechten',
+    'missingfields' => 'Niet alles ingevuld',
+    'missingfieldsmsg' => 'Een naam en beschrijving is verplicht voor een groep.',
+    'groupmanager' => 'Group Manager',
+    'newgroupmsg' => 'Om een groep te wijzigen of te verwijderen, klik op die groep hieronder. Om een nieuwe groep aan te leggen, klik op \'Nieuwe Groep\' hierboven. Let op! Zgn. \'core groups\' kunnen niet verwijderd worden omdat deze in de software een functie hebben.',
+    'groupname' => 'Group Naam',
+    'coregroup' => 'Core Group',
+    'yes' => 'Ja',
+    'no' => 'Nee',
+    'corerightsdescr' => "Deze groep is een zgn. {$_CONF['site_name']} \'Core Group\'. De rechten van de groep kunnen niet gewijzigd worden. Hieronder is een overzicht opgenomen van de rechten voor deze groep.",
+    'groupmsg' => '\'Security Groups\' werken hierarchisch. Door het toevoegen aan andere groep(en), wordt deze groep dezelfde rechten toegekend. Het wordt aanbevolen, waar mogelijk, deze faciliteit te gebruiken. Indien u deze groep een speciale samenstelling wilt geven, kunt u de individuele rechten daarvoor in het gedeelte hieronder (extra) aanvinken, onder het hoofd \'Rechten\'. Om rechten van een andere groep aan deze groep toe te voegen, kunt u volstaan met het aanvinken van deze andere groep(en).',
+    'coregroupmsg' => "Deze groep is een zgn. {$_CONF['site_name']} \'Core Group\'. De groepen die hieraan toegevoegd zijn, kunnen daarom niet gewijzigd worden. Hieronder is een overzicht opgenomen van dergelijke groepen.",
+    'rightsdescr' => 'Een groepsrecht voor een bepaalde faciliteit (zie hieronder) kan direct toegekend worden *OF* aan een andere groep waaraan deze groep eerder is toegevoegd. Wat u hieronder kunt zien aan het ontbreken van een vink-mogelijkheid, zijn de rechten van een andere groep, waaraan deze groep eerder is toegevoegd (en daarmee deze rechten verkreeg). De rechten die u kunt vinken kunt u direct toekennen aan - of afmelden voor - deze groep.',
+    'lock' => 'Lock',
+    'members' => 'Members',
+    'anonymous' => 'Anonymous',
+    'permissions' => 'Permissies',
+    'permissionskey' => 'R = Read, E = Edit, wijzigingsrechten veronderstellen ook leesrechten',
+    'edit' => 'Wijzigen',
+    'none' => 'Geen',
+    'accessdenied' => 'Geen toegang',
+    'storydenialmsg' => "Dit artikel is niet toegankelijk voor u. Dit kan veroorzaakt worden doordat u niet aangemeld bent bij {$_CONF['site_name']}. Gelieve uzelve <a href=users.php?mode=new> aan te melden </a> bij {$_CONF['site_name']} voor soorgelijke toegangsrechten.",
+    'eventdenialmsg' => "Dit evenement is niet toegankelijk voor u. Dit kan veroorzaakt worden doordat u niet aangemeld bent bij {$_CONF['site_name']}. Gelieve uzelve <a href=users.php?mode=new> aan te melden </a> bij {$_CONF['site_name']} voor soorgelijke toegangsrechten.",
+    'nogroupsforcoregroup' => 'Deze groep heeft geen relatie met enige andere groep !!',
+    'grouphasnorights' => 'Deze groep kan geen administratieve functies op het portaal oproepen en/of uitvoeren.',
+    'newgroup' => 'Nieuwe Groep',
+    'adminhome' => 'Beheerder Home',
+    'save' => 'opslaan',
+    'cancel' => 'annuleren',
+    'delete' => 'verwijderen',
+    'canteditroot' => 'U probeert de zgn. \'Root group\' te wijzigen, maar u behoort daar niet toe: de toegang is nu geweigerd. Gelieve contact op te nemen met de Beheerder indien u dit niet terecht vindt.',
+    'listusers' => 'Overzicht Gebruikers',
+    'listthem' => 'lijst',
+    'usersingroup' => 'Gebruikers in groep %s',
+    'usergroupadmin' => 'Gebruikersgroep administratie',
+    'add' => 'Voeg toe',
+    'remove' => 'Verwijder',
+    'availmembers' => 'Beschikbare leden',
+    'groupmembers' => 'Groepsleden',
+    'canteditgroup' => 'Om deze groep te kunnen wijzigen dient u zelf een lid van deze groep te zijn. Neem a.u.b. contact op met de beheerder als u denk dat niet correct is.',
+    'cantlistgroup' => 'Om de leden van deze groep te kunnen zien dient u zelf een lid van deze groep te zijn. Neem a.u.b. contact op met de beheerder als u denk dat niet correct is.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Laatste 10 Back-ups',
+    'do_backup' => 'Maak een Backup',
+    'backup_successful' => 'Database backup met succes uitgevoerd.',
+    'db_explanation' => 'Om een nieuwe backup van het portaal te (laten) maken, klik op de knop hieronder',
+    'not_found' => "Incorrect pad of mysqldump utility is niet uitvoerbaar.<br>Controleer de definitie voor <strong>\$_DB_mysqldump_path</strong> in config.php.<br>De variabele is momenteel opgenomen als: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup mislukt: bestandsgrootte was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} bestaat niet of is geen directory",
+    'no_access' => "FOUT: Directory {$_CONF['backup_path']} is niet benaderbaar.",
+    'backup_file' => 'Backup bestand',
+    'size' => 'Grootte',
+    'bytes' => 'Bytes',
+    'total_number' => 'Totaal aantal backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Kontakt',
+    3 => 'Publiceren',
+    4 => 'Links',
+    5 => 'Peilingen',
+    6 => 'Kalender',
+    7 => 'Portaal Stats',
+    8 => 'Persoonlijk',
+    9 => 'Zoek',
+    10 => 'gericht zoeken',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 fout',
+    2 => 'Helaas, er is overal gezocht en <strong>%s</strong> toch niet gevonden.',
+    3 => "<p>Helaas, het bestand dat u opvraagt bestaat niet (meer). Kijkt u gerust nog eens op de <a href=\'{$_CONF['site_url']}\'>voorpagina</a> of de <a href=\'{$_CONF['site_url']}/search.php\'>zoek pagina</a>. Misschien vindt u het daar."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login vereist',
+    2 => 'Voor dit gedeelte is een login als Gebruiker vereist.',
+    3 => 'Login',
+    4 => 'Nieuwe Gebruiker'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'De PDF-optie is geblokkeerd',
+    2 => 'Het aangeleverde document is niet verwerkt. Het document is wel ontvangen, maar kon niet worden omgezet. Verzend alleen html-documenten die zijn geschreven volgens de xHTML standaard. Besef a.u.b. dat al te complexe html-documenten niet goed  - of zelfs helemaal niet -  worden verwerkt. Het document dat na uw poging is aangemaakt was 0 bytes in grootte en is verwijderd. Als u er zeker van bent dat uw document goed verwerkt zou moeten worden, probeert u het dan opnieuw te verzenden.',
+    3 => 'Onbekende fout tijdens de aanmaak van het PDF document',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Uw document wordt geladen.',
+    6 => 'Wacht a.u.b. terwijl uw document wordt geladen.',
+    7 => 'U kunt de rechts-klikken op de onderstaande knop en kiezen voor \'opslaan doel...\' of \'opslaan link lokatie...\' om een copy van uw document te bewaren.',
+    8 => "Het pad naar de HTMLDoc binary in het configuratiebestand is ongeldig of kan niet worden uitgevoerd.  Neem a.u.b. contact op met de beheerder als het probleem\n         zich blijft voordoen.",
+    9 => 'PDF Generator',
+    10 => "Dit is de Ad-hoc PDF Generation tool. Deze zal proberen om uw bestand te converteren.  Besef a.u.b. dat sommige webpaginas niet goed verwerkt kunnen worden.  Dit\n           is een beperking van de HTMLDoc PDF generation tool en zulke fouten kunnen worden gemeld aan de beheerder van deze site",
+    11 => 'URL',
+    12 => 'Genereer PDF!',
+    13 => 'De PHP configuratie op deze server staat het gebruik van URLs met het fopen() commando niet toe.  De systeembeheerder moet het php.ini bestand aanpassen en het allow_url_fopen zetten op: On',
+    14 => 'De PDF die u heeft opgevraagd bestaat niet of u heeft geen toegang tot dit bestand.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/dutch_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/dutch_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/dutch_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/dutch_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1513 @@
+<?php
+
+###############################################################################
+# dutch.php
+#
+# This is a complete dutch language page for GeekLog!
+# Please contact Ko <ko@depree.nl> if you think anything
+# important is missing ...
+#
+# Ported to level 1.3.8 by W. Niemans <niemans@pbsolo.nl>
+# Ported to level 1.3.10 by Ko de Pree <ko@depree.nl>
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Bijdrage van:',
+    2 => 'lees verder',
+    3 => 'reacties',
+    4 => 'Wijzigen',
+    5 => 'Stem',
+    6 => 'Tussenstand',
+    7 => 'Peilingsuitslag',
+    8 => 'stemmen',
+    9 => 'Beheerdersmenu:',
+    10 => 'Ter beoordeling',
+    11 => 'Artikelen',
+    12 => 'Blokken',
+    13 => 'Thema\'s',
+    14 => 'Links',
+    15 => 'Evenementen',
+    16 => 'Peilingen',
+    17 => 'Gebruikers',
+    18 => 'SQL Query',
+    19 => 'Uitloggen',
+    20 => 'Mijn credits',
+    21 => 'Gebruikersnaam',
+    22 => 'Gebruikers ID',
+    23 => 'Beveiligingsniveau',
+    24 => 'Anoniem',
+    25 => 'Reageer',
+    26 => 'Reacties zijn voor verantwoording van degene die ze heeft geplaatst. Dit portaal is niet verantwoordelijk voor de inhoud.',
+    27 => 'Laatste plaatsingen',
+    28 => 'Verwijderen',
+    29 => 'Geen reacties.',
+    30 => 'Oudere artikelen',
+    31 => 'Toegestane HTML Tags:',
+    32 => 'Fout: ongeldige gebruikersnaam',
+    33 => 'Fout: kan niet naar logbestand schrijven',
+    34 => 'Fout',
+    35 => 'Uitloggen',
+    36 => 'aan',
+    37 => 'Geen artikelen',
+    38 => 'Content Syndication',
+    39 => 'vernieuwen',
+    40 => 'De instelling <tt>register_globals = Off</tt> is aanwezig in <tt>php.ini</tt>. Geeklog echter vereist dat <tt>register_globals</tt> ingesteld is op <strong>on</strong>. Voordat u verder gaat, gelieve dit op <strong>on</strong> in te stellen en herstart uw web server.',
+    41 => 'Gast(en)',
+    42 => 'Geschreven door:',
+    43 => 'Hierop reageren',
+    44 => 'Parent',
+    45 => 'MySQL foutnummer',
+    46 => 'MySQL foutmelding',
+    47 => 'Gebruikersmenu',
+    48 => 'Account informatie',
+    49 => 'Voorkeuren',
+    50 => 'Fout in SQL statement',
+    51 => 'help',
+    52 => 'Nieuw',
+    53 => 'Beheerder Home',
+    54 => 'Kan bestand niet openen.',
+    55 => 'Fout in',
+    56 => 'Stem',
+    57 => 'Wachtwoord',
+    58 => 'Inloggen',
+    59 => "Heeft u nog geen account? <br> Meld u dan <strong>nu</strong> aan als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nieuwe gebruiker</a>",
+    60 => 'Geef commentaar',
+    61 => 'Aanmelden nieuw account',
+    62 => 'woorden',
+    63 => 'Artikel weergave',
+    64 => 'Email artikel naar collega',
+    65 => 'afdruk versie',
+    66 => 'Mijn Kalender',
+    67 => 'Welkom bij ',
+    68 => 'home',
+    69 => 'contact',
+    70 => 'zoeken',
+    71 => 'uw Bijdrage',
+    72 => 'Links',
+    73 => 'Opinie\'s',
+    74 => 'Kalender',
+    75 => 'gericht Zoeken',
+    76 => 'Statistieken',
+    77 => 'Plugins',
+    78 => 'Komende evenementen',
+    79 => 'Wat is nieuw',
+    80 => 'artikelen in de laatste',
+    81 => 'artikel in de laatste',
+    82 => 'uren',
+    83 => 'REACTIES',
+    84 => 'LINKS',
+    85 => 'afgelopen 48 uur',
+    86 => 'Geen nieuwe reacties',
+    87 => 'afgelopen 2 weken',
+    88 => 'Geen recente nieuwe links',
+    89 => 'Er zijn geen komende evenementen',
+    90 => 'Home',
+    91 => 'Deze pagina is aangemaakt in',
+    92 => 'seconden',
+    93 => 'Copyright',
+    94 => 'Alle merknamen en copyrights op deze pagina zijn eigendom van hun respectievelijke eigenaren.',
+    95 => 'Bemotord met',
+    96 => 'Groepen',
+    97 => 'Woorden lijst',
+    98 => 'plugins',
+    99 => 'ARTIKELEN',
+    100 => 'Geen nieuwe artikelen',
+    101 => 'Uw evenementen',
+    102 => 'Evenementen',
+    103 => 'DB Backups',
+    104 => 'door',
+    105 => 'Email gebruikers',
+    106 => 'Opgevraagd',
+    107 => 'GL Versie Test',
+    108 => 'Leeg Cache',
+    109 => 'Rapporteer misbruik',
+    110 => 'Rapporteer dit bericht aan de sitebeheerder',
+    111 => 'Bekijk de PDF-versie',
+    112 => 'Geregistreerde gebruikers',
+    113 => 'Documentatie',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Evenementen Kalender',
+    2 => 'Er zijn geen evenementen om weer te geven.',
+    3 => 'Wanneer',
+    4 => 'Waar',
+    5 => 'Omschrijving',
+    6 => 'Voeg evenement toe',
+    7 => 'Komende evenementen',
+    8 => 'Door evenementen aan <strong>uw</strong> kalender toe te voegen, kunt u de voor u interessante evenementen verzamelen en snel inzien door op \'Mijn Kalender\' te klikken in het Gebruikersmenu.',
+    9 => 'Voeg toe aan \'Mijn Kalender\'',
+    10 => 'Verwijder van \'Mijn Kalender\'',
+    11 => "Voeg evenement toe aan {$_USER['username']}\'s Kalender",
+    12 => 'Evenement',
+    13 => 'Begint',
+    14 => 'Eindigt',
+    15 => 'Terug naar Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Verstuur een reactie',
+    2 => 'Opmaak',
+    3 => 'Uitloggen',
+    4 => 'Aanmelden account',
+    5 => 'Gebruikersnaam',
+    6 => 'Het portaal vereist dat u bent ingelogd om een reactie te versturen: log in a.u.b. Echter, indien u geen account heeft, kunt u het onderstaande formulier gebruiken om u aan te melden.',
+    7 => 'Uw laatste reactie was ',
+    8 => " seconden geleden. Een beveiliging vereist tenminste {$_CONF['commentspeedlimit']} seconden tussen reacties",
+    9 => 'Reactie',
+    10 => 'Send Report',
+    11 => 'Verstuur reactie',
+    12 => 'Vul a.u.b. de velden bij \'Titel\' en \'Reactie\' in. Deze zijn noodzakelijk voor het versturen van een reactie.',
+    13 => 'Uw informatie',
+    14 => 'Preview',
+    15 => 'Rapporteer dit bericht',
+    16 => 'Titel',
+    17 => 'Fout',
+    18 => 'Niet vergeten',
+    19 => 'Houdt u a.u.b. bij het onderwerp.',
+    20 => 'Probeer eerst op reactie\'s van anderen te reageren i.p.v. een nieuwe \'Thread\' te starten.',
+    21 => 'Lees ook de andere berichten voordat u uw bericht gaat versturen. Dit, om te voorkomen dat vele identieke berichten ontstaan.',
+    22 => 'Gebruik een helder onderwerp, dat uw bericht juist omschrijft.',
+    23 => 'Uw email adres zal NIET worden weergegeven.',
+    24 => 'Anonieme gebruiker',
+    25 => 'Weet u zeker dat u dit bericht wilt rapporteren aan de sitebeheerder?',
+    26 => '%s heeft de volgende commentaren met misbruik gerapporteerd:',
+    27 => 'Misbruikrapport'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profiel van',
+    2 => 'GebruikersNaam',
+    3 => 'Volledige Naam',
+    4 => 'Wachtwoord',
+    5 => 'Emailadres',
+    6 => 'Homepage',
+    7 => 'Bio/CV',
+    8 => 'PGP Code',
+    9 => 'Bewaar Informatie',
+    10 => 'Laatste 10 reacties van gebruiker',
+    11 => 'Geen reacties',
+    12 => 'Voorkeuren voor',
+    13 => 'Email\'s nachts verwerken',
+    14 => 'Dit wachtwoord is gegenereerd door een zgn. randomizer. Het wordt aanbevolen om dit wachtwoord meteen te wijzigen. Om het wachtwoord te wijzigen, log in en klik op \'Account informatie\' van het \'Gebruikersmenu\'.',
+    15 => "Uw {$_CONF['site_name']} account is aangemaakt. Om er gebruik van te maken, dient u in te loggen met gebruik van de onderstaande informatie. Bewaar dit bericht a.u.b. voor gebruik in de toekomst.",
+    16 => 'Uw account informatie',
+    17 => 'Account bestaat niet',
+    18 => 'Het email adres lijkt geen bestaand adres',
+    19 => 'De gebruikersnaam of het email adres is al in gebruik',
+    20 => 'Het email adres lijkt geen juist email adres',
+    21 => 'Fout aangetroffen',
+    22 => "Aanmelding bij {$_CONF['site_name']}",
+    23 => "Door het aanvragen van een account profiteert u van alle voordelen van {$_CONF['site_name']} portaal lidmaadschap en geeft u de mogelijkheid reacties en artikelen onder uw eigen naam te plaatsen. Indien u niet registreert, is dit alleen anoniem mogelijk. Let op, uw email adres zal <strong><i>nooit</i></strong> publiekelijk worden weergegeven op het portaal.",
+    24 => 'Uw wachtwoord wordt verstuurd naar het email adres dat u invoert.',
+    25 => 'Wachtwoord vergeten?',
+    26 => 'Vul uw gebruikersnaam in en klik op \'Email wachtwoord\' en een nieuw wachtwoord wordt verstuurd naar het opgeslagen email adres. Indien u uw gebruikersnaam niet meer weet, kunt u ook volstaan met het invullen van uw emailadres.',
+    27 => 'Registreer Nu!',
+    28 => 'Email wachtwoord',
+    29 => 'Uitgelogd van',
+    30 => 'Ingelogd van',
+    31 => 'De Functie die u wilt gebruiken, is alleen beschikbaar indien u bent ingelogd',
+    32 => 'Ondertekening',
+    33 => 'Nooit publiekelijk weergeven',
+    34 => 'Dit is uw *echte* naam',
+    35 => 'Vul wachtwoord in om deze te mogen wijzigen',
+    36 => 'Begint met http://',
+    37 => 'Toevoegen bij uw reacties',
+    38 => 'Het is aan U! Iedereen kan dit lezen',
+    39 => 'Uw openbare PGP key ',
+    40 => 'Geen iconen voor Thema\'s tonen',
+    41 => 'Beschikbaar voor moderator',
+    42 => 'Datum formaat',
+    43 => 'Maximum artikelen',
+    44 => 'Geen blokken',
+    45 => 'Toon voorkeuren voor',
+    46 => 'Uitgesloten \'Items\' voor',
+    47 => 'Nieuws blok instelling voor',
+    48 => 'Thema\'s',
+    49 => 'Geen iconen in artikelen',
+    50 => 'Afvinken indien u geen interesse heeft',
+    51 => 'Alleen de nieuwe artikelen',
+    52 => 'Standaard is 10',
+    53 => 'Ontvang de artikelen van overdag elke nacht',
+    54 => 'Vink de thema\'s en auteurs aan die NIET wilt zien.',
+    55 => 'Als u ze allemaal heeft afgevinkt, betekent dit dat u de standaard selektie wilt zien. Als u begint te selekteren, selekteer dan alles dat u wilt zien, omdat de standaardinstellingen worden genegeerd. Standaardinstellingen worden vet weergegeven.',
+    56 => 'Auteurs',
+    57 => 'Weergave',
+    58 => 'Sorteer volgorde',
+    59 => 'Reactie limiet',
+    60 => 'Hoe wilt u dat reacties worden weergegeven?',
+    61 => 'Nieuwste of oudste eerst?',
+    62 => 'Standaard is 100',
+    63 => "Uw wachtwoord is naar u verstuurd en zou op dit moment moeten arriveren. Volg a.u.b. de aanwijzingen in het bericht. Het wordt gewaardeerd, dat u gebruik maakt van {$_CONF['site_name']}",
+    64 => 'Voorkeurinstellingen voor Reacties van',
+    65 => 'Probeer opnieuw in te loggen',
+    66 => "U heeft misschien een tikfout gemaakt bij het inloggen. Probeer het hieronder opnieuw. Bent u een <a href=\'{$_CONF['site_url']}/users.php?mode=new\'>nieuwe gebruiker</a>?",
+    67 => 'Aangemeld sinds',
+    68 => 'Mijn gegevens onthouden',
+    69 => 'Hoe lang mogen we u onthouden nadat u bent ingelogd?',
+    70 => "Pas de layout en inhoud aan van {$_CONF['site_name']}",
+    71 => "Een mogelijkheid van {$_CONF['site_name']} is dat u de inhoud en de layout van wat u ontvangt kan aanpassen. Om van deze voorzieningen gebruik te maken dient u zich eerst te <a href=\'{$_CONF['site_url']}/users.php?mode=new\'>registeren</a> bij {$_CONF['site_name']}. Bent u al geregistreerd? Gebruik dan het login formulier, links om in te loggen!",
+    72 => 'Skin',
+    73 => 'Taal',
+    74 => 'Pas het portaal aan uw wensen aan!',
+    75 => 'Email thema\'s voor',
+    76 => 'Indien u een thema uit de onderstaande lijst selecteert, ontvang u alle artikelen die hierin wordt geplaatst aan het eind van de dag thuis. Kies alleen de thema\'s waarin u bent geïnteresseerd!',
+    77 => 'Foto',
+    78 => 'Voeg een afbeelding toe van u zelf!',
+    79 => 'Aanvinken om uw afbeelding te verwijderen',
+    80 => 'Inloggen',
+    81 => 'Verstuur email',
+    82 => 'Laatste 10 artikelen van gebruiker',
+    83 => 'Statistiek Plaatsingen van gebruiker',
+    84 => 'Totaal aantal artikelen:',
+    85 => 'Totaal aantal commentaren/reacties:',
+    86 => 'Vindt alle bijdragen van',
+    87 => 'Uw login naam',
+    88 => "Iemand (waarschijnlijk uzelf) heeft een nieuw wachtwoord voor uw account -> %s <- aangevraagd bij {$_CONF['site_name']}, <{$_CONF['site_url']}>. Indien u daadwerkelijk een nieuw wachtwoord wilt ingeven, klik dan op de volgende link: ",
+    89 => 'Indien u hier niet mee accoord gaat kunt u dit bericht negeren; de aanvraag wordt weer verwijderd (uw huidige wachtwoord blijft geldig).',
+    90 => 'Gelieve een nieuw wachtwoord voor uw account hieronder in te vullen. Bemerk dat uw huidige wachtwoord nog steeds geldig is totdat dit formulier verstuurd is.',
+    91 => 'Geef nieuw wachtwoord op',
+    92 => 'Toets nieuw wachtwoord',
+    93 => 'Uw laatste aanvraag voor een nieuw wachtwoord is %d seconden geleden. Het portaal vereist dat er minimaal %d seconden tussen dergelijke aanvragen verstrijken.',
+    94 => 'Verwijder Account \'%s\'',
+    95 => 'Klik op \'Verwijder Account\' hieronder om uw account uit de database te verwijderen. Merk op dat uw gepubliceerde artikelen en uw geplaatste reacties <strong>niet</strong> verwijderd worden, maar getoond worden als \'Anonymous\'.',
+    96 => 'verwijder account',
+    97 => 'Bevestig het verwijderen van uw Account',
+    98 => 'Weet u zeker dat uw account verwijderd moet worden? U bent daarna niet meer in staat in te loggen op dit portaal (tenzij u zelf weer aanmeldt). Indien de gevolgen u duidelijk zijn, klik dan nogmaals op \'verwijder account\' in het formulier hieronder.',
+    99 => 'Privacy Opties voor',
+    100 => 'Email van Beheerder',
+    101 => 'Accepteer email van beheerder(s)',
+    102 => 'Email van Gebruikers',
+    103 => 'Accepteer email van andere gebruikers',
+    104 => 'Toon Online Status',
+    105 => 'Vermeld me in het blok Who\'s Online',
+    106 => 'Lokatie',
+    107 => 'Zichtbaar in uw openbaar profiel',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Geen Nieuws om weer te geven',
+    2 => 'Er zijn geen nieuwe artikelen om weer te geven. Er is misschien geen nieuws onder dit thema, of u bent hier niet voor geautoriseerd.',
+    3 => 'voor thema %s',
+    4 => 'Hoofdartikel',
+    5 => 'Volgende',
+    6 => 'Vorige',
+    7 => 'Eerste',
+    8 => 'Laatste'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Er is een fout opgetreden bij het verzenden van het bericht. Probeer het opnieuw.',
+    2 => 'Bericht met succes verzonden.',
+    3 => 'Controleer of het juiste email adres is ingevuld in het veld \'Antwoord naar\'.',
+    4 => 'Vul de velden in: uw naam, antwoord naar, onderwerp, en bericht',
+    5 => 'Fout: deze gebruiker bestaat niet.',
+    6 => 'Er is een fout opgetreden.',
+    7 => 'Profiel van',
+    8 => 'Gebruiker Naam',
+    9 => 'Gebruiker URL',
+    10 => 'Stuur email naar',
+    11 => 'Uw naam:',
+    12 => 'Antwoord naar:',
+    13 => 'Onderwerp:',
+    14 => 'Bericht:',
+    15 => 'HTML wordt niet geconverteerd.',
+    16 => 'Bericht versturen',
+    17 => 'Email artikel naar collega',
+    18 => 'Naam naar',
+    19 => 'Email adres naar',
+    20 => 'Naam van',
+    21 => 'Email adres van',
+    22 => 'Alle velden zijn vereist',
+    23 => "Deze email is verstuurd door %s at %s om u op de hoogte te brengen van dit artikel van {$_CONF['site_url']}. Dit is geen SPAM en de email adressen in dit bericht zijn NERGENS anders opgeslagen.",
+    24 => 'Reageer op dit artikel bij',
+    25 => 'U moet ingelogd zijn, om van deze mogelijkheid gebruik te kunnen maken. Doordat u ingelogd bent, kan worden voorkomen dat er misbruik van het portaal wordt gemaakt',
+    26 => 'Dit formulier geeft u de mogelijkheid om een email naar de geselekteerde gebruiker te sturen. Alle velden zijn vereist.',
+    27 => 'Kort bericht',
+    28 => '%s schreef: ',
+    29 => "Dit is het dagelijks overzicht van {$_CONF['site_name']} voor ",
+    30 => ' Dagelijkse nieuwsbrief voor ',
+    31 => 'Titel',
+    32 => 'Datum',
+    33 => 'Lees het volledige artikel bij',
+    34 => 'Eind van het Bericht',
+    35 => 'Helaas, deze gebruiker accepteert geen email.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Gericht Zoeken',
+    2 => 'Trefwoorden',
+    3 => 'Thema',
+    4 => 'Alle',
+    5 => 'Type',
+    6 => 'Artikelen',
+    7 => 'Reacties',
+    8 => 'Auteurs',
+    9 => 'Alle',
+    10 => 'Zoek',
+    11 => 'Zoek resultaten',
+    12 => 'gevonden',
+    13 => 'Zoek resultaten: niets gevonden',
+    14 => 'Er is niets gevonden bij het zoeken naar',
+    15 => 'Probeer opnieuw.',
+    16 => 'Titel',
+    17 => 'Datum',
+    18 => 'Auteur',
+    19 => "Zoek in de gehele {$_CONF['site_name']} database van nieuwe en oude artikelen",
+    20 => 'Datum',
+    21 => 'tot',
+    22 => '(Datum Formaat JJJJ-MM-DD)',
+    23 => 'Hits',
+    24 => 'Gevonden',
+    25 => 'gevonden voor',
+    26 => 'items in',
+    27 => 'seconden',
+    28 => 'Geen artikel of reactie komt overeen met uw zoekopdracht',
+    29 => 'Artikel en reactie resultaten',
+    30 => 'Geen link komt overeen met uw zoekopdracht',
+    31 => 'Deze plugin gaf geen resultaat',
+    32 => 'Evenement',
+    33 => 'URL',
+    34 => 'Locatie',
+    35 => 'Gehele Dag',
+    36 => 'Geen evenement komt overeen met uw zoekopdracht',
+    37 => 'Evenement Resultaat',
+    38 => 'Link Resultaat',
+    39 => 'Links',
+    40 => 'Evenementen',
+    41 => 'het trefwoord dient minimaal 3 tekens te bevatten.',
+    42 => 'Gelieve een datum op te geven in het formaat JJJJ-MM-DD (jaar-maand-dag).',
+    43 => 'exacte zinsnede',
+    44 => 'alle woorden',
+    45 => 'enig woord',
+    46 => 'Volgende',
+    47 => 'Vorige',
+    48 => 'Auteur',
+    49 => 'Datum',
+    50 => 'Treffers',
+    51 => 'Link',
+    52 => 'Locatie',
+    53 => 'Artikel Resultaten',
+    54 => 'Reactie Resultaten',
+    55 => 'de zoekterm',
+    56 => 'EN',
+    57 => 'OF',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Portaal statistieken',
+    2 => 'Totaal aantal treffers in het portaal',
+    3 => 'Aantal Artikelen (Reacties) in het portaal',
+    4 => 'Aantal Peilingen (Stemmen) in het portaal',
+    5 => 'Aantal Links (Klikken) in het portaal',
+    6 => 'Aantal Evenementen in het portaal',
+    7 => 'Top Tien opgevraagde artikelen',
+    8 => 'Artikel titel',
+    9 => 'Opgevraagd',
+    10 => 'Het lijkt erop dat er geen artikelen op deze site staan, of ze zijn nooit opgevraagd.',
+    11 => 'Top Tien Artikelen met meeste reacties',
+    12 => 'Reacties',
+    13 => 'Het lijkt erop dat er geen artikelen op deze site staan, of er is nooit op gereageerd.',
+    14 => 'Top Tien Peilingen',
+    15 => 'Peiling vragen',
+    16 => 'Stemmen',
+    17 => 'Het lijkt erop dat er geen peilingen op deze site staan, of er is nog nooit gestemd.',
+    18 => 'Top Tien Links',
+    19 => 'Links',
+    20 => 'Hits',
+    21 => 'Het lijkt erop dat er geen links op deze site staan, of ze zijn nooit aangeklikt.',
+    22 => 'Top Tien Artikelen via email',
+    23 => 'Emails',
+    24 => 'Het lijkt erop dat er geen artikelen op deze site staan, of niemand is er op geabonneerd',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Gerelateerd',
+    2 => 'Email artikel naar collega',
+    3 => 'Afdrukversie artikel',
+    4 => 'Artikel opties',
+    5 => 'PDF formaat'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Om een %s voor te stellen, is het vereist om als gebruiker te zijn ingelogd.',
+    2 => 'Inloggen',
+    3 => 'Nieuwe gebruiker',
+    4 => 'Stel een Evenement voor',
+    5 => 'Stel een Link voor',
+    6 => 'Stel een Artikel voor',
+    7 => 'Inloggen is vereist',
+    8 => 'Voorstellen',
+    9 => 'Indien u informatie voorstelt voor gebruik op dit portaal, vordt u verzocht om de volgende suggesties te volgen...<ul><li>Vul alle velden in. Deze zijn vereist.</li><li>Lever complete en accurate informatie.</li><li>Controleer de op te geven URLs dubbel.</li></ul>Dank u wel.',
+    10 => 'Titel',
+    11 => 'Link',
+    12 => 'Start Datum',
+    13 => 'Eind Datum',
+    14 => 'Locatie',
+    15 => 'Omschrijving',
+    16 => 'Indien anders, specificeer a.u.b.',
+    17 => 'Categorie',
+    18 => 'Anders',
+    19 => 'Lees dit eerst',
+    20 => 'Fout: Geen Categorie ingevuld',
+    21 => 'Indien \'Anders\' geselekteerd: lever dan een ook een categorie naam',
+    22 => 'Fout: niet alle velden Ingevuld',
+    23 => 'Vul alle velden van het formulier in. Alle velden zijn vereist.',
+    24 => 'Voorstel opgeslagen',
+    25 => 'Uw %s voorstel is succesvol opgeslagen.',
+    26 => 'Snelheids limiet',
+    27 => 'Gebruikersnaam',
+    28 => 'Thema',
+    29 => 'Artikel',
+    30 => 'Uw laatste bijdrage was ',
+    31 => " seconden geleden. Het portaal vereist ten minste {$_CONF['speedlimit']} seconden tussen twee voorstellen voor plaatsing",
+    32 => 'Preview',
+    33 => 'Artikel preview',
+    34 => 'Uitloggen',
+    35 => 'HTML tags zijn niet toegestaan',
+    36 => 'Opmaak',
+    37 => "Een voorstel voor plaatsing van een evenement op het {$_CONF['site_name']}, wordt in de hoofdkalender geplaatst. De gebruikers hebben de optie om deze aan hun persoonlijke kalender toe te voegen. Deze voorziening is <strong>NIET</strong> bedoeld voor persoonlijke evenementen, zoals verjaardagen en jubilea.<br><br>Als u een voorstel voor een evenement doet, wordt deze eerst verstuurt naar een beheerder en indien goedgekeurd, verschijnt deze in de hoofdkalender.",
+    38 => 'Evenement toevoegen aan',
+    39 => 'Hoofdkalender',
+    40 => 'Persoonlijke Kalender',
+    41 => 'Eind Tijd',
+    42 => 'Begin Tijd',
+    43 => 'Gehele Dag',
+    44 => 'Adres regel 1',
+    45 => 'Adres regel 2',
+    46 => 'Plaats',
+    47 => 'Provincie',
+    48 => 'Postcode',
+    49 => 'Evenement Type',
+    50 => 'Wijzig Evenement Types',
+    51 => 'Locatie',
+    52 => 'Verwijderen',
+    53 => 'Aanmelden account'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'autorisatie is vereist',
+    2 => 'Geweigerd! Incorrecte Login informatie',
+    3 => 'Geen juist wachtwoord voor gebruiker',
+    4 => 'Gebruikersnaam:',
+    5 => 'Wachtwoord:',
+    6 => 'Alle toegang tot administratieve functies van het portaal wordt vastgelegd en later bekeken.<br>Deze pagina is alleen voor geautoriseerde gebruikers.',
+    7 => 'inloggen'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Onvoldoende rechten',
+    2 => 'U bent niet geautoriseerd om dit blok te wijzigen.',
+    3 => 'Blok Editor',
+    4 => 'Er was een probleem met het lezen van deze feed (kijk in de error.log voor meer informatie).',
+    5 => 'Blok titel',
+    6 => 'Thema',
+    7 => 'Overal',
+    8 => 'Blok beveiligingsniveau',
+    9 => 'Blok volgorde',
+    10 => 'Blok Type',
+    11 => 'Portaal Blok',
+    12 => 'Normaal Blok',
+    13 => 'Portaal Blok opties',
+    14 => 'RDF URL',
+    15 => 'Laatste RDF Update',
+    16 => 'Normaal Blok opties',
+    17 => 'Blok Inhoud',
+    18 => 'Vult u a.u.b. de velden in bij \'Blok Titel\' en \'Inhoud\'',
+    19 => 'Blok Manager',
+    20 => 'Blok Titel',
+    21 => 'Beveiliginsniveau',
+    22 => 'Blok Type',
+    23 => 'Blok Volgorde',
+    24 => 'Blok Thema',
+    25 => 'Om een blok te wijzigen of te verwijderen, klikt u op dat blok hieronder. Om een nieuw blok aan te maken klikt u op \'nieuw blok\' hierboven.',
+    26 => 'Layout Blok',
+    27 => 'PHP Blok',
+    28 => 'PHP Blok opties',
+    29 => 'Blok Menu',
+    30 => 'Indien u PHP code wenst te gebruiken in een van de blokken, vul dan de naam van de php-funktie hierboven in. Deze naam moet beginnen met de prefix \'phpblock_\' (e.g. phpblock_hello_world). Zonder deze prefix wordt de funktie NIET aangeroepen. Dit is een beveiligingsmaatregel om niet zomaar willekeurige kode te moeten accepteren, die wellicht de integriteit kunnen schaden.<br>Zorg er ook voor dat er \'lege haakjes\' \'()\' staan achter de funktienaam in de broncode.<br>Tenslotte: het wordt aanbevolen dat alle PHP-blok-code in /pad/naar/geeklog/system/lib-custom.php wordt opgenomen. Bij nieuwe versies blijft de code gehandhaafd.',
+    31 => 'Fout in PHP Blok. Funktie, %s, bestaat niet.',
+    32 => 'Fout: niet alle velden doorgegeven.',
+    33 => 'Er wordt een URL gevraagd voor het .rdf bestand (portaal blokken)',
+    34 => 'Gelieve de titel en de funktie voor PHP blokken op te geven.',
+    35 => 'Gelieve de titel en de inhoud op te geven (normale blokken)',
+    36 => 'Gelieve de inhoud op te geven (layout blokken)',
+    37 => 'Ongeldige PHP blok funktienaam',
+    38 => 'Funktie voor PHP blokken moeten de prefix \'phpblock_\' (e.g. phpblock_hello_world) bevatten. Deze prefix is vereist ter beveiliging: het voorkomt de uitvoering van willekeurige PHP-code.',
+    39 => 'Zijde',
+    40 => 'Links',
+    41 => 'Rechts',
+    42 => 'Gelieve de bloktitel en de blokvolgorde op te geven (standaard blokken).',
+    43 => 'Alleen Homepagina',
+    44 => 'Geen toegang',
+    45 => "U heeft geprobeerd een blok op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/block.php\'>Terug naar de blok administratie pagina</a>.",
+    46 => 'Nieuw blok',
+    47 => 'Beheerder Home',
+    48 => 'Blok Naam',
+    49 => ' (zonder spaties en verplicht unieke naam)',
+    50 => 'Help File URL',
+    51 => 'inclusief http://',
+    52 => 'Indien u dit niet invult, verschijnt er geen help icon in dit blok.',
+    53 => 'Opname Toestaan',
+    54 => 'opslaan',
+    55 => 'annuleren',
+    56 => 'verwijderen',
+    57 => 'Verplaats blok naar beneden',
+    58 => 'Verplaats blok naar boven',
+    59 => 'Verplaats blok naar de rechterzijde',
+    60 => 'Verplaats blok naar de linkerzijde',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Evenement Editor',
+    2 => 'Fout',
+    3 => 'Evenement Titel',
+    4 => 'Evenement URL',
+    5 => 'Startdatum',
+    6 => 'Einddatum',
+    7 => 'Evenementlocatie',
+    8 => 'Evenementbeschrijving',
+    9 => '(inclusief http://)',
+    10 => 'U dient de datums/tijden, de evenementtitel en de beschrijving te vermelden!',
+    11 => 'Evenement Manager',
+    12 => 'Om een evenement te wijzigen of te verwijderen, klik dan op dat evenement hieronder. Om een evenement aan te maken, klik dan op \'Nieuw Evenement\' hierboven.',
+    13 => 'Evenement Titel',
+    14 => 'Startdatum',
+    15 => 'Einddatum',
+    16 => 'Geen toegang',
+    17 => "U heeft geprobeerd een evenement op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/event.php\'>Terug naar de evenement administratie pagina</a>.",
+    18 => 'Nieuw Evenement',
+    19 => 'Beheerder Home',
+    20 => 'opslaan',
+    21 => 'annuleren',
+    22 => 'verwijderen',
+    23 => 'Onjuiste startdatum.',
+    24 => 'Onjuiste einddatum.',
+    25 => 'Einddatum is eerder dan de startdatum.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Vorige Artikelen',
+    2 => 'Volgende Artikelen',
+    3 => 'Opties',
+    4 => 'Opmaak',
+    5 => 'Artikel Editor',
+    6 => 'Er bestaan (nog) geen Artikelen in het portaal',
+    7 => 'Auteur',
+    8 => 'opslaan',
+    9 => 'preview',
+    10 => 'annuleren',
+    11 => 'verwijderen',
+    12 => 'ID',
+    13 => 'Titel',
+    14 => 'Thema',
+    15 => 'Datum',
+    16 => 'Introductie Tekst',
+    17 => 'Body Tekst',
+    18 => 'Treffers',
+    19 => 'Opmerkingen',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Artikel Lijst',
+    23 => 'Om een Artikel te wijzigen of te verwijderen, klik op het betreffende artikelnummer hieronder. Om een artikel op te roepen, klik op de titel van het betreffende Artikel. Om een nieuw Artikel aan te leggen, klik op \'Nieuw Artikel\' hierboven.',
+    24 => 'De ID die u voor dit artikel heeft gekozen is reeds in gebruik. Kies een andere ID a.u.b.',
+    25 => 'Error when saving story',
+    26 => 'Artikel Preview',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Er zijn File Upload Fouten',
+    31 => 'Gelieve de Auteur, Titel en Introductie Tekst te vermelden.',
+    32 => 'HoofdArtikel',
+    33 => 'Er kan slechts een enkel HoofdArtikel actief zijn !!',
+    34 => 'Draft',
+    35 => 'Ja',
+    36 => 'Nee',
+    37 => 'Meer door..',
+    38 => 'Meer van..',
+    39 => 'Emails',
+    40 => 'Geen toegang',
+    41 => "U heeft geprobeerd een artikel op te roepen zonder geldige autorisatie. De poging is vastgelegd. Het Artikel is hieronder weergegeven. <a href=\'{$_CONF['site_url']}/admin/story.php\'>Terug naar de artikel administratie pagina</a>.",
+    42 => "U heeft geprobeerd een artikel op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/story.php\'>Terug naar de artikel administratie pagina</a>.",
+    43 => 'Nieuw Artikel',
+    44 => 'Beheerder Home',
+    45 => 'Toegang',
+    46 => '<strong>NOTE:</strong> indien de datum in de toekomst ligt, wordt het Artikel pas op die datum gepubliceerd. Dat houdt tevens in dat het artikel niet in de RDF headline feed opgenomen wordt en dat de zoek funktie het buiten beschouwing laat. Er zijn dan ook geen statistieken.',
+    47 => 'Beelden',
+    48 => 'beeld',
+    49 => 'rechts',
+    50 => 'links',
+    51 => 'Om de beelden die hier ingesloten zijn, in het Artikel op te nemen is speciaal geformatteerde tekst nodig. Kies uit: [imageX], [imageX_right] or [imageX_left] en vervang de X door het nummer van het beeld dat u bijsluit. NOTE: Bijgesloten beelden MOETEN gebruikt worden. Indien u dat vergeet kan het Artikel niet opgeslagen worden.<br><p><strong>PREVIEW</strong>: Het is gemakkelijker een Preview van een Artikel met beelden op te roepen NADAT het opgeslagen is in draft-vorm, IN PLAATS VAN direkt de preview knop aan te klikken. Gebruik de preview knop alleen indien er geen beelden bijgesloten zijn.',
+    52 => 'Verwijderen',
+    53 => 'werd niet vermeld. Dit beeld MOET opgenomen worden in de introductie of Body voordat uw werk opgeslagen kan worden.',
+    54 => 'Bijgesloten beelden zijn niet opgenomen in tekst',
+    55 => 'De hierna volgende problemen zijn opgetreden bij het opslaan van uw artikel. Gelieve deze op te lossen en daarna opnieuw op te slaan.',
+    56 => 'Toon Thema Icon',
+    57 => 'Toon beeld in originele grootte',
+    58 => 'Story Management',
+    59 => 'Optie',
+    60 => 'Toegestaan',
+    61 => 'Auto archiveren',
+    62 => 'Auto verwijderen',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Thema Editor',
+    2 => 'Thema ID',
+    3 => 'Thema Naam',
+    4 => 'Thema Beeld',
+    5 => '(zonder spaties)',
+    6 => 'Het verwijderen van een Thema is recursief. Alle bijbehorende Artikelen en Blokken worden tevens verwijderd',
+    7 => 'Gelieve het Thema ID en de Thema Naam in te vullen.',
+    8 => 'Thema Manager',
+    9 => 'Om een Thema te wijzigen of te verwijderen, klik op het betreffende Thema. Uw toegangsniveau voor ieder Thema staat daar tussen haakjes.<br>Om een nieuw Thema aan te leggen, klik op \'Nieuw Thema\' hierboven.',
+    10 => 'Sorteer Volgorde',
+    11 => 'Artikelen/Pagina',
+    12 => 'Geen toegang',
+    13 => "U heeft geprobeerd een Thema op te roepen zonder geldige autorisatie. De poging is vastgelegd. <a href=\'{$_CONF['site_url']}/admin/topic.php\'>Terug naar de Thema administratie pagina</a>.",
+    14 => 'Sorteer Methode',
+    15 => 'alfabetisch',
+    16 => 'standaard is',
+    17 => 'Nieuw Thema',
+    18 => 'Beheerder Home',
+    19 => 'opslaan',
+    20 => 'annuleren',
+    21 => 'verwijderen',
+    22 => 'Standaard',
+    23 => 'Verhef dit thema tot standaard voor nieuwe artikelen',
+    24 => '(*)',
+    25 => 'Archief Topic',
+    26 => 'maak hiervan uw standaard topic voor gearchiveerde artikelen. Slechts 1 topic is toegestaan.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Gebruiker Editor',
+    2 => 'Gebruiker ID',
+    3 => 'Gebruiker Naam',
+    4 => 'Volledige Naam',
+    5 => 'Wachtwoord',
+    6 => 'Toegangs Niveau',
+    7 => 'Email adres',
+    8 => 'Homepagina',
+    9 => '(zonder spaties)',
+    10 => 'Gelieve de Gebruiker Naam, Volledige naam, toegangsniveau en emailadres in te vullen.',
+    11 => 'Gebruiker Manager',
+    12 => 'Om een Gebruiker te wijzigen of te verwijderen, klik op de betreffende Gebruiker hieronder. Om een nieuwe Gebruiker aan te leggen, klik op \'Nieuwe Gebruiker\' hierboven. Er kan eenvoudig gezocht worden op delen van een Gebruiker Naam, email adres of van de Volledige naam (e.g.*sen* or *.nl).',
+    13 => 'ToegangsNiveau',
+    14 => 'Reg. Datum',
+    15 => 'Nieuwe Gebruiker',
+    16 => 'Beheerder Home',
+    17 => 'wachtwoord wijzigen',
+    18 => 'annuleren',
+    19 => 'verwijderen',
+    20 => 'opslaan',
+    21 => 'De gebruikernaam bestaat reeds.',
+    22 => 'Fout',
+    23 => 'In Batch Toevoegen',
+    24 => 'Batch Import van Gebruikers',
+    25 => 'Een batch met gebruikers kan geimporteerd worden. Het import bestand is dan een tab-delimited tekst bestand en heeft de velden in de volgende layout: Volledige Naam, gebruikersnaam, email adres. Aan elke zo toegevoegde Gebruiker wordt daarna een email verstuurd met een willekeurig wachtwoord. Slechts een enkele Gebruiker per regel! Het niet volgen van deze instructies veroorzaakt problemen die uitsluitend met handwerk opgelost kunnen worden. Dubbelcheck de invullingen !!',
+    26 => 'Zoek',
+    27 => 'Limiteer Resultaten',
+    28 => 'Vink aan om dit beeld te verwijderen',
+    29 => 'Pad',
+    30 => 'Import',
+    31 => 'Nieuwe Gebruiker',
+    32 => 'Klaar met verwerken. %d geimporteerd en %d geweigerd',
+    33 => 'submit',
+    34 => 'Fout: specificeer een bestand voor upload.',
+    35 => 'Laatste Login',
+    36 => '(nooit)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Goedkeuren',
+    2 => 'Verwijderen',
+    3 => 'Wijzigen',
+    4 => 'Profiel',
+    10 => 'Titel',
+    11 => 'Start Datum',
+    12 => 'URL',
+    13 => 'Categorie',
+    14 => 'Datum',
+    15 => 'Thema',
+    16 => 'Gebruiker naam',
+    17 => 'Volledige naam',
+    18 => 'Email',
+    34 => 'Moderator Menu',
+    35 => 'Voorgedragen Artikel(en)',
+    36 => 'Voorgedragen Link(s)',
+    37 => 'Voorgedragen Evenement(en)',
+    38 => 'Submit',
+    39 => 'Er is niets te modereren op dit moment',
+    40 => 'Nieuwe Gebruiker(s)'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Zondag',
+    2 => 'Maandag',
+    3 => 'Dinsdag',
+    4 => 'Woensdag',
+    5 => 'Donderdag',
+    6 => 'Vrijdag',
+    7 => 'Zaterdag',
+    8 => 'Evenement Toevoegen',
+    9 => 'Evenement',
+    10 => 'Evenementen voor',
+    11 => 'Hoofdkalender',
+    12 => 'Mijn Kalender',
+    13 => 'Januari',
+    14 => 'Februari',
+    15 => 'Maart',
+    16 => 'April',
+    17 => 'Mei',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'Augustus',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'December',
+    25 => 'Terug naar',
+    26 => 'Gehele Dag',
+    27 => 'Week',
+    28 => 'Persoonlijke Kalender voor',
+    29 => 'Publieke Kalender',
+    30 => 'verwijder evenement',
+    31 => 'Voeg toe',
+    32 => 'Evenement',
+    33 => 'Datum',
+    34 => 'Tijd',
+    35 => 'Snel toevoegen',
+    36 => 'Voorstellen',
+    37 => 'Helaas, de persoonlijke kalender optie is niet beschikbaar op het portaal',
+    38 => 'Persoonlijke Evenementen Editor',
+    39 => 'Dag',
+    40 => 'Week',
+    41 => 'Maand'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Email faciliteit",
+    2 => 'Van',
+    3 => 'Antwoord aan',
+    4 => 'Onderwerp',
+    5 => 'Inhoud',
+    6 => 'Verstuur naar:',
+    7 => 'Alle gebruikers',
+    8 => 'Beheerder',
+    9 => 'Opties',
+    10 => 'HTML',
+    11 => 'Belangrijk bericht!',
+    12 => 'Verstuur',
+    13 => 'Herstel',
+    14 => 'Instellingen van de gebruiker negeren',
+    15 => 'Probleem tijdens verzending naar: ',
+    16 => 'Bericht met succes gezonden naar: ',
+    17 => "<a href=\'{$_CONF['site_url']}/admin/mail.php\'>Stuur nog een bericht</a>",
+    18 => 'To',
+    19 => 'NOTE: Indien u een bericht wilt sturen aan alle portaal leden, kies dan de \'Logged-in\' groep.',
+    20 => "<successcount> berichten verstuurd en <failcount> fouten. Onderstaand vindt u de details van elk bericht ter controle. U kunt nu ook <a href=\'{$_CONF['site_url']}/admin/mail.php\'>nog een bericht versturen</a> of <a href=\'{$_CONF['site_url']}/admin/moderation.php\'>terug gaan naar de administratie pagina</a>.",
+    21 => 'Fouten',
+    22 => 'Succes',
+    23 => 'Geen fouten',
+    24 => 'Niets verstuurd',
+    25 => '-- Selekteer Group --',
+    26 => 'Gelieve alle velden van het formulier in te vullen en tevens een groep gebruikers te kiezen.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Het installeren van plugins kan het portaal als geheel beschadigen en, mogelijk ook, de achterliggende databases. Het is zeer belangrijk dat u alleen plugins van <a href="http://www.geeklog.net">Geeklog Homepage</a> instaleerd, omdat deze degelijk getest zijn. Het is ook belangrijk dat u inziet dat de installatie enige \'onveilige\' commando\'s bevat die kunnen leiden tot beveiligingsproblemen. Dit vergt bijzondere aandacht voor plugins van derden. Zelfs indien u deze waarschuwing ter harte neemt, kan de veiligheid en correctheid van de installatieprocedure niet gegarandeerd worden. De verantwoordelijkheid ligt exclusief bij U! Anders gezegd: installeer op eigen risico. Wees voorzichtig en lees de installatievoorschriften die bij elke plugin meekomen. Tenslotte: volg deze op.',
+    2 => 'plugin Installatie Disclaimer',
+    3 => 'plugin Installatie Formulier',
+    4 => 'plugin File',
+    5 => 'plugin Lijst',
+    6 => 'Waarschuwing: Deze plugin is al Actief!',
+    7 => 'De plugin die u probeert te installeren is er al. gelieve eerst deze plugin te verwijderen voordat u de installatie opnieuw probeert.',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'Deze plugin vereist een latere versie van Geeklog. Gelieve deze versie van <a href=http://www.geeklog.net>Geeklog</a> te upgraden of een nieuwere versie op te halen van deze plugin.',
+    10 => '<br><strong>Er zijn geen plugins actief op dit moment.</strong><br><br>',
+    11 => 'Om een plugin te wijzigen of te verwijderen, klik op het nummer van deze plugin\'s hieronder. Dit laat u de detailles zien, inclusief de website van de auteur. Tevens worden de versies van de plugins getoond. Dit helpt u bij de vraag of plugin\'s ge-upgrade moeten worden. Raadpleeg de documentatie voordat u een plugin installeert of upgrade. Om een introductie over deze plugin op te vragen, klik op de naam van de plugin, dit brengt u naar de website van de plugin.',
+    12 => 'geen Naam voor de plugin gevonden door de plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'Nieuwe plugin',
+    15 => 'Beheerder Home',
+    16 => 'plugin Naam',
+    17 => 'plugin Versie',
+    18 => 'Geeklog Versie',
+    19 => 'Toestaan',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => 'Installeer',
+    23 => 'Bewaar',
+    24 => 'annuleren',
+    25 => 'Verwijderen',
+    26 => 'plugin Naam',
+    27 => 'plugin Homepage',
+    28 => 'Geïnstalleerde Versie',
+    29 => 'Geeklog Versie',
+    30 => 'plugin Verwijderen?',
+    31 => 'Weet u het zeker dat deze plugin verwijderd mag worden? Let op! Hiermee worden tevens alle bestanden, data en structuren verwijderd die deze plugin gebruikt. Alleen als u zeker bent, klikt u nogmaals op \'Verwijderen\' in het formulier hieronder.',
+    32 => '<p><b>Fout, AutoLinktag heeft niet het juiste formaat</b></p>',
+    33 => 'Codeversie',
+    34 => 'Vernieuw',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'aanmaken feed',
+    2 => 'opslaan',
+    3 => 'verwijderen',
+    4 => 'annuleren',
+    10 => 'Content Syndication',
+    11 => 'Nieuwe Feed',
+    12 => 'Beheerder Home',
+    13 => 'Om een feed te wijzigen of te verwijderen, klikt u op de feed\'s tiel hieronder. Om een nieuwe feed aan te maken, klikt u op \'Nieuwe Feed\' hierboven.',
+    14 => 'Titel',
+    15 => 'Type',
+    16 => 'Bestandsnaam',
+    17 => 'Formaat',
+    18 => 'laatste wijziging',
+    19 => 'Actief',
+    20 => 'Ja',
+    21 => 'Nee',
+    22 => '<i>(geen feeds)</i>',
+    23 => 'alle Artikelen',
+    24 => 'Feed Editor',
+    25 => 'Feed Titel',
+    26 => 'Limiet',
+    27 => 'Lengte van de entries',
+    28 => '(0 = geen tekst, 1 = alle tekst, anders = maximaal aanal karakters.)',
+    29 => 'Beschrijving',
+    30 => 'Laatste Wijziging',
+    31 => 'Karakter Set',
+    32 => 'Taal',
+    33 => 'Inhoud',
+    34 => 'Entries',
+    35 => 'Uren',
+    36 => 'Selecteer type van feed',
+    37 => 'Er is minstens een plugin actief die content syndication ondersteunt. Het is nodig dat u hieronder aangeeft of er sprake is van een Geeklog feed of van een feed uit een van de plugins.',
+    38 => 'Fout: Niet alles ingevuld',
+    39 => 'Gelieve de \'Feed Titel\', \'beschrijving\', en \'Filename\' in te vullen.',
+    40 => 'Gelieve het \'aantal entries\' of \'aantal uren\' op te geven.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Uw wachtwoord is naar u verstuurd, en kan elk moment in uw inbox arriveren. Volg a.u.b. de instructies in het bericht, en we bedanken u voor het gebruik maken van {$_CONF['site_name']}",
+    2 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, wordt het geplaatst op het portaal.",
+    3 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, zal uw link geplaatst worden in het <a href={$_CONF['site_url']}/links.php>links</a> gedeelte.",
+    4 => "Bedankt voor uw bijdrage aan {$_CONF['site_name']}. Het is aan een beheerder aangeboden voor plaatsing. Indien geschikt bevonden, zal uw evenement geplaatst worden in het <a href={$_CONF['site_url']}/calendar.php>Kalender</a> gedeelte.",
+    5 => 'Uw account informatie is opgeslagen.',
+    6 => 'Uw voorkeuren zijn opgeslagen.',
+    7 => 'Uw instellingen voor commentaar/reactie zijn opgeslagen.',
+    8 => 'U bent met succes uitgelogd.',
+    9 => 'Het artikel is opgeslagen.',
+    10 => 'Het artikel is verwijderd.',
+    11 => 'Het blok is opgeslagen.',
+    12 => 'Het blok is verwijderd.',
+    13 => 'Het thema is opgeslagen.',
+    14 => 'Het thema, en al de bijbehorende artikelen zijn verwijderd.',
+    15 => 'De link is opgeslagen.',
+    16 => 'De link is verwijderd.',
+    17 => 'Het evenement is opgeslagen.',
+    18 => 'Het evenement is verwijderd.',
+    19 => 'Uw peiling is opgeslagen.',
+    20 => 'Uw peiling is verwijderd.',
+    21 => 'De gebruiker is opgeslagen.',
+    22 => 'De gebruiker is verwijderd',
+    23 => 'Er is een fout opgetreden bij het toevoegen van een evenement aan uw kalender. Er is geen evenement id aangemaakt.',
+    24 => 'Het evenement is toegevoegd aan uw kalender',
+    25 => 'U kan uw persoonlijke kalender pas openen als u bent ingelogd',
+    26 => 'Het evenement is verwijderd van uw persoonlijke kalender',
+    27 => 'Bericht verstuurd.',
+    28 => 'De plugin is opgeslagen',
+    29 => 'Helaas, persoonlijke kalenders zijn niet geactiveerd op dit portaal',
+    30 => 'Toegang Geweigerd',
+    31 => 'Helaas, u heeft geen toegang tot de artikel administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    32 => 'Helaas, u heeft geen toegang tot de thema administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    33 => 'Helaas, u heeft geen toegang tot de blok administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    34 => 'Helaas, u heeft geen toegang tot de links administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    35 => 'Helaas, u heeft geen toegang tot de evenementen administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    36 => 'Helaas, u heeft geen toegang tot de peilingen administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    37 => 'Helaas, u heeft geen toegang tot de gebruiker administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    38 => 'Helaas, u heeft geen toegang tot de plugin administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    39 => 'Helaas, u heeft geen toegang tot de email administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    40 => 'Portaal Bericht',
+    41 => 'Helaas, u heeft geen toegang tot de woordvervang administratie pagina. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    42 => 'Het woord is opgeslagen.',
+    43 => 'Het woord is verwijderd.',
+    44 => 'De plugin is ingevoegd!',
+    45 => 'De plugin is verwijderd.',
+    46 => 'Helaas, u heeft geen toegang tot Database Backup Utility. Let op: alle pogingen om ongeautoriseerd toegang te krijgen tot beveiligde funkties worden vastgelegd',
+    47 => 'Deze funktie werkt allen onder *nix. Indien u *nix gebruikt als besturingsysteem dan is uw cache geleegd. Indien u Windows gebruikt, moet u zoeken naar bestanden als adodb_*.php en deze handmatig verwijderen.',
+    48 => "Bedankt voor uw aanvraag voor een gebruikersaccount van {$_CONF['site_name']}. De beheerders zullen uw aanvraag in behandeling nemen. Indien goedgekeurd, wordt uw wachtwoord naar het email adres verstuurd dat u net heeft ingevuld.",
+    49 => 'De groep is opgeslagen.',
+    50 => 'De groep is verwijderd.',
+    51 => 'Deze gebruikersnaam is al in gebruik. Kies a.u.b. een andere.',
+    52 => 'Het opgegeven email adres lijkt niet geldig te zijn.',
+    53 => 'Het nieuwe wachtwoord is geaccepteerd. Gelieve hieronder opnieuw in te loggen, a.u.b.',
+    54 => 'De aanvraag voor een nieuw wachtwoord is verjaard. Gelieve dit hieronder opnieuw aan te vragen.',
+    55 => 'Een email is naar u verstuurd en zal in korte tijd bij u binnenkomen. Gelieve de instructies in dat bericht op te volgen.',
+    56 => 'Het opgegeven email adres is reeds in gebruik bij een ander account. Dit is beveiligd.',
+    57 => 'Uw account is met succes verwijderd.',
+    58 => 'Uw feed is met succes opgeslagen.',
+    59 => 'De feed is met succes verwijderd.',
+    60 => 'De plugin is met succes ge-update',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Toegang',
+    'ownerroot' => 'Owner/Root',
+    'group' => 'Group',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Toegangs Rechten',
+    'owner' => 'Owner',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTE: \'Members\': dit zijn alle ingelogde Gebruikers van het portaal -- \'Anonymous\': dit zijn alle niet-ingelogde bezoekers.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Ondanks dat u een gebruikersBeheerder bent, kunt u een zgn. 'root user' niet wijzigen. Daarvoor moet u eerst als een zgn. 'root user' ingelogd zijn. U kunt wel alle andere gebruikers wijzigen. Alle pogingen om een zgn. 'root user' ongeautoriseerd te wijzigen, worden vastgelegd. Gelieve terug te gaan naar de <a href=\"{$_CONF['site_admin_url']}/user.php\">Gebruiker Administratie pagina</a>.",
+    'securitygroupsmsg' => 'Vink de groep(en) waarin de gebruiker opgenomen wordt.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Beschrijving',
+    'name' => 'Naam',
+    'rights' => 'Rechten',
+    'missingfields' => 'Niet alles ingevuld',
+    'missingfieldsmsg' => 'Een naam en beschrijving is verplicht voor een groep.',
+    'groupmanager' => 'Group Manager',
+    'newgroupmsg' => 'Om een groep te wijzigen of te verwijderen, klik op die groep hieronder. Om een nieuwe groep aan te leggen, klik op \'Nieuwe Groep\' hierboven. Let op! Zgn. \'core groups\' kunnen niet verwijderd worden omdat deze in de software een functie hebben.',
+    'groupname' => 'Group Naam',
+    'coregroup' => 'Core Group',
+    'yes' => 'Ja',
+    'no' => 'Nee',
+    'corerightsdescr' => "Deze groep is een zgn. {$_CONF['site_name']} \'Core Group\'. De rechten van de groep kunnen niet gewijzigd worden. Hieronder is een overzicht opgenomen van de rechten voor deze groep.",
+    'groupmsg' => '\'Security Groups\' werken hierarchisch. Door het toevoegen aan andere groep(en), wordt deze groep dezelfde rechten toegekend. Het wordt aanbevolen, waar mogelijk, deze faciliteit te gebruiken. Indien u deze groep een speciale samenstelling wilt geven, kunt u de individuele rechten daarvoor in het gedeelte hieronder (extra) aanvinken, onder het hoofd \'Rechten\'. Om rechten van een andere groep aan deze groep toe te voegen, kunt u volstaan met het aanvinken van deze andere groep(en).',
+    'coregroupmsg' => "Deze groep is een zgn. {$_CONF['site_name']} \'Core Group\'. De groepen die hieraan toegevoegd zijn, kunnen daarom niet gewijzigd worden. Hieronder is een overzicht opgenomen van dergelijke groepen.",
+    'rightsdescr' => 'Een groepsrecht voor een bepaalde faciliteit (zie hieronder) kan direct toegekend worden *OF* aan een andere groep waaraan deze groep eerder is toegevoegd. Wat u hieronder kunt zien aan het ontbreken van een vink-mogelijkheid, zijn de rechten van een andere groep, waaraan deze groep eerder is toegevoegd (en daarmee deze rechten verkreeg). De rechten die u kunt vinken kunt u direct toekennen aan - of afmelden voor - deze groep.',
+    'lock' => 'Lock',
+    'members' => 'Members',
+    'anonymous' => 'Anonymous',
+    'permissions' => 'Permissies',
+    'permissionskey' => 'R = Read, E = Edit, wijzigingsrechten veronderstellen ook leesrechten',
+    'edit' => 'Wijzigen',
+    'none' => 'Geen',
+    'accessdenied' => 'Geen toegang',
+    'storydenialmsg' => "Dit artikel is niet toegankelijk voor u. Dit kan veroorzaakt worden doordat u niet aangemeld bent bij {$_CONF['site_name']}. Gelieve uzelve <a href=users.php?mode=new> aan te melden </a> bij {$_CONF['site_name']} voor soorgelijke toegangsrechten.",
+    'eventdenialmsg' => "Dit evenement is niet toegankelijk voor u. Dit kan veroorzaakt worden doordat u niet aangemeld bent bij {$_CONF['site_name']}. Gelieve uzelve <a href=users.php?mode=new> aan te melden </a> bij {$_CONF['site_name']} voor soorgelijke toegangsrechten.",
+    'nogroupsforcoregroup' => 'Deze groep heeft geen relatie met enige andere groep !!',
+    'grouphasnorights' => 'Deze groep kan geen administratieve functies op het portaal oproepen en/of uitvoeren.',
+    'newgroup' => 'Nieuwe Groep',
+    'adminhome' => 'Beheerder Home',
+    'save' => 'opslaan',
+    'cancel' => 'annuleren',
+    'delete' => 'verwijderen',
+    'canteditroot' => 'U probeert de zgn. \'Root group\' te wijzigen, maar u behoort daar niet toe: de toegang is nu geweigerd. Gelieve contact op te nemen met de Beheerder indien u dit niet terecht vindt.',
+    'listusers' => 'Overzicht Gebruikers',
+    'listthem' => 'lijst',
+    'usersingroup' => 'Gebruikers in groep %s',
+    'usergroupadmin' => 'Gebruikersgroep administratie',
+    'add' => 'Voeg toe',
+    'remove' => 'Verwijder',
+    'availmembers' => 'Beschikbare leden',
+    'groupmembers' => 'Groepsleden',
+    'canteditgroup' => 'Om deze groep te kunnen wijzigen dient u zelf een lid van deze groep te zijn. Neem a.u.b. contact op met de beheerder als u denk dat niet correct is.',
+    'cantlistgroup' => 'Om de leden van deze groep te kunnen zien dient u zelf een lid van deze groep te zijn. Neem a.u.b. contact op met de beheerder als u denk dat niet correct is.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Laatste 10 Back-ups',
+    'do_backup' => 'Maak een Backup',
+    'backup_successful' => 'Database backup met succes uitgevoerd.',
+    'db_explanation' => 'Om een nieuwe backup van het portaal te (laten) maken, klik op de knop hieronder',
+    'not_found' => "Incorrect pad of mysqldump utility is niet uitvoerbaar.<br>Controleer de definitie voor <strong>\$_DB_mysqldump_path</strong> in config.php.<br>De variabele is momenteel opgenomen als: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup mislukt: bestandsgrootte was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} bestaat niet of is geen directory",
+    'no_access' => "FOUT: Directory {$_CONF['backup_path']} is niet benaderbaar.",
+    'backup_file' => 'Backup bestand',
+    'size' => 'Grootte',
+    'bytes' => 'Bytes',
+    'total_number' => 'Totaal aantal backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Kontakt',
+    3 => 'Publiceren',
+    4 => 'Links',
+    5 => 'Peilingen',
+    6 => 'Kalender',
+    7 => 'Portaal Stats',
+    8 => 'Persoonlijk',
+    9 => 'Zoek',
+    10 => 'gericht zoeken',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 fout',
+    2 => 'Helaas, er is overal gezocht en <strong>%s</strong> toch niet gevonden.',
+    3 => "<p>Helaas, het bestand dat u opvraagt bestaat niet (meer). Kijkt u gerust nog eens op de <a href=\'{$_CONF['site_url']}\'>voorpagina</a> of de <a href=\'{$_CONF['site_url']}/search.php\'>zoek pagina</a>. Misschien vindt u het daar."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login vereist',
+    2 => 'Voor dit gedeelte is een login als Gebruiker vereist.',
+    3 => 'Login',
+    4 => 'Nieuwe Gebruiker'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'De PDF-optie is geblokkeerd',
+    2 => 'Het aangeleverde document is niet verwerkt. Het document is wel ontvangen, maar kon niet worden omgezet. Verzend alleen html-documenten die zijn geschreven volgens de xHTML standaard. Besef a.u.b. dat al te complexe html-documenten niet goed  - of zelfs helemaal niet -  worden verwerkt. Het document dat na uw poging is aangemaakt was 0 bytes in grootte en is verwijderd. Als u er zeker van bent dat uw document goed verwerkt zou moeten worden, probeert u het dan opnieuw te verzenden.',
+    3 => 'Onbekende fout tijdens de aanmaak van het PDF document',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Uw document wordt geladen.',
+    6 => 'Wacht a.u.b. terwijl uw document wordt geladen.',
+    7 => 'U kunt de rechts-klikken op de onderstaande knop en kiezen voor \'opslaan doel...\' of \'opslaan link lokatie...\' om een copy van uw document te bewaren.',
+    8 => "Het pad naar de HTMLDoc binary in het configuratiebestand is ongeldig of kan niet worden uitgevoerd.  Neem a.u.b. contact op met de beheerder als het probleem\n         zich blijft voordoen.",
+    9 => 'PDF Generator',
+    10 => "Dit is de Ad-hoc PDF Generation tool. Deze zal proberen om uw bestand te converteren.  Besef a.u.b. dat sommige webpaginas niet goed verwerkt kunnen worden.  Dit\n           is een beperking van de HTMLDoc PDF generation tool en zulke fouten kunnen worden gemeld aan de beheerder van deze site",
+    11 => 'URL',
+    12 => 'Genereer PDF!',
+    13 => 'De PHP configuratie op deze server staat het gebruik van URLs met het fopen() commando niet toe.  De systeembeheerder moet het php.ini bestand aanpassen en het allow_url_fopen zetten op: On',
+    14 => 'De PDF die u heeft opgevraagd bestaat niet of u heeft geen toegang tot dit bestand.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/english.php 1.4.0sr5-1/cpanel-glprivate/language/english.php
--- 1.3.11sr1/cpanel-glprivate/language/english.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/english.php	2006-08-08 02:39:06.000000000 -0500
@@ -6,7 +6,7 @@
 # Special thanks to Mischa Polivanov for his work on this project
 #
 # Copyright (C) 2000 Jason Whittenburg
-# jwhitten@securitygeeks.com
+# jwhitten AT securitygeeks DOT com
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -138,7 +138,7 @@
     95 => 'Powered By',
     96 => 'Groups',
     97 => 'Word List',
-    98 => 'Plug-ins',
+    98 => 'Plugins',
     99 => 'STORIES',
     100 => 'No new stories',
     101 => 'Your Events',
@@ -146,14 +146,24 @@
     103 => 'DB Backups',
     104 => 'by',
     105 => 'Mail Users',
-    106 => 'Views',
+    106 => 'Views:',
     107 => 'GL Version Test',
     108 => 'Clear Cache',
     109 => 'Report abuse',
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -211,13 +221,13 @@
 );
 
 ###############################################################################
-# users.php
+# usersettings.php
 
 $LANG04 = array(
     1 => 'User Profile for',
     2 => 'User Name',
     3 => 'Full Name',
-    4 => 'Password',
+    4 => 'New Password',
     5 => 'Email',
     6 => 'Homepage',
     7 => 'Bio',
@@ -279,7 +289,7 @@
     63 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
     64 => 'Comment Preferences for',
     65 => 'Try Logging in Again',
-    66 => "You may have mistyped your login credentials.  Please try logging in again below. Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?",
+    66 => 'You may have mistyped your login credentials.  Please try logging in again below.',
     67 => 'Member Since',
     68 => 'Remember Me For',
     69 => 'How long should we remember you after logging in?',
@@ -320,7 +330,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => "If you have forgotten your password, you may request a new one at this url:",
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -329,7 +355,7 @@
 $LANG05 = array(
     1 => 'No News to Display',
     2 => 'There are no news stories to display.  There may be no news for this topic or your user preferences may be too restrictive',
-    3 => " for topic %s",
+    3 => ' for topic %s',
     4 => 'Today\'s Featured Article',
     5 => 'Next',
     6 => 'Previous',
@@ -338,27 +364,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Web Resources',
-    2 => 'There are no resources to display.',
-    3 => 'Add A Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Vote Saved',
-    2 => 'Your vote was saved for the poll',
-    3 => 'Vote',
-    4 => 'Polls in System',
-    5 => 'Votes',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -389,7 +394,7 @@
     25 => 'You must be logged in to user this feature.  By having you log in, it helps us prevent misuse of the system',
     26 => 'This form will allow you to send an email to the selected user.  All fields are required.',
     27 => 'Short message',
-    28 => "%s wrote: ",
+    28 => '%s wrote: ',
     29 => "This is the daily digest from {$_CONF['site_name']} for ",
     30 => ' Daily Newsletter for ',
     31 => 'Title',
@@ -433,7 +438,7 @@
     28 => 'No story or comment matches for your search',
     29 => 'Story and Comment Results',
     30 => 'No links matched your search',
-    31 => 'This plug-in returned no matches',
+    31 => 'This plugin returned no matches',
     32 => 'Event',
     33 => 'URL',
     34 => 'Location',
@@ -459,7 +464,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -467,11 +476,11 @@
 
 $LANG10 = array(
     1 => 'Site Statistics',
-    2 => 'Total Hits to the System',
-    3 => 'Stories(Comments) in the System',
-    4 => 'Polls(Answers) in the System',
-    5 => 'Links(Clicks) in the System',
-    6 => 'Events in the System',
+    2 => 'Total Hits to the system',
+    3 => 'Stories (Comments) in the system',
+    4 => '',
+    5 => '',
+    6 => 'Events in the system',
     7 => 'Top Ten Viewed Stories',
     8 => 'Story Title',
     9 => 'Views',
@@ -479,17 +488,24 @@
     11 => 'Top Ten Commented Stories',
     12 => 'Comments',
     13 => 'It appears that there are no stories on this site or no one has ever posted a comment on them.',
-    14 => 'Top Ten Polls',
-    15 => 'Poll Question',
-    16 => 'Votes',
-    17 => 'It appears that there are no polls on this site or no one has ever voted.',
-    18 => 'Top Ten Links',
-    19 => 'Links',
-    20 => 'Hits',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
     21 => 'It appears that there are no links on this site or no one has ever clicked on one.',
     22 => 'Top Ten Emailed Stories',
     23 => 'Emails',
-    24 => 'It appears that no one has emailed a story on this site'
+    24 => 'It appears that no one has emailed a story on this site',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -507,11 +523,11 @@
 # submit.php
 
 $LANG12 = array(
-    1 => "To submit a %s you are required to be logged in as a user.",
+    1 => 'To submit a %s you are required to be logged in as a user.',
     2 => 'Login',
     3 => 'New User',
     4 => 'Submit an Event',
-    5 => 'Submit a Link',
+    5 => '',
     6 => 'Submit a Story',
     7 => 'Login is Required',
     8 => 'Submit',
@@ -522,16 +538,16 @@
     13 => 'End Date',
     14 => 'Location',
     15 => 'Description',
-    16 => 'If other, please specify',
-    17 => 'Category',
-    18 => 'Other',
+    16 => '',
+    17 => '',
+    18 => '',
     19 => 'Read First',
-    20 => 'Error: Missing Category',
-    21 => 'When selecting "Other" please also provide a category name',
+    20 => '',
+    21 => '',
     22 => 'Error: Missing Fields',
     23 => 'Please fill in all the fields on the form.  All fields are required.',
     24 => 'Submission Saved',
-    25 => "Your %s submission has been saved successfully.",
+    25 => 'Your %s submission has been saved successfully.',
     26 => 'Speed Limit',
     27 => 'Username',
     28 => 'Topic',
@@ -587,12 +603,12 @@
     2 => 'You do not have the necessary rights to edit this block.',
     3 => 'Block Editor',
     4 => 'There was a problem reading this feed (see error.log for details).',
-    5 => 'Block Title',
-    6 => 'Topic',
+    5 => '',
+    6 => '',
     7 => 'All',
     8 => 'Block Security Level',
     9 => 'Block Order',
-    10 => 'Block Type',
+    10 => '',
     11 => 'Portal Block',
     12 => 'Normal Block',
     13 => 'Portal Block Options',
@@ -602,12 +618,12 @@
     17 => 'Block Content',
     18 => 'Please fill in the Block Title and Content fields',
     19 => 'Block Manager',
-    20 => 'Block Title',
+    20 => '',
     21 => 'Block SecLev',
-    22 => 'Block Type',
+    22 => '',
     23 => 'Block Order',
-    24 => 'Block Topic',
-    25 => 'To modify or delete a block, click on that block below.  To create a new block click on new block above.',
+    24 => '',
+    25 => 'To modify or delete a block, click on that block\'s edit icon below.  To create a new block, click on "Create New" above. To move a block, click on the arrows or [R] and [L] boxes.',
     26 => 'Layout Block',
     27 => 'PHP Block',
     28 => 'PHP Block Options',
@@ -626,13 +642,13 @@
     41 => 'Right',
     42 => 'You must enter the block title and block order for Geeklog default blocks.',
     43 => 'Homepage Only',
-    44 => 'Access Denied',
+    44 => '',
     45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
-    46 => 'New Block',
-    47 => 'Admin Home',
+    46 => 'Move',
+    47 => '',
     48 => 'Block Name',
     49 => ' (no spaces and must be unique)',
-    50 => 'Help File URL',
+    50 => '',
     51 => 'include http://',
     52 => 'If you leave this blank the help icon for this block will not be displayed',
     53 => 'Enabled',
@@ -642,7 +658,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -651,7 +672,7 @@
 $LANG22 = array(
     1 => 'Event Editor',
     2 => 'Error',
-    3 => 'Event Title',
+    3 => 'Post Mode',
     4 => 'Event URL',
     5 => 'Event Start Date',
     6 => 'Event End Date',
@@ -660,14 +681,14 @@
     9 => '(include http://)',
     10 => 'You must provide the dates/times, event title, and description',
     11 => 'Event Manager',
-    12 => 'To modify or delete an event, click on that event below.  To create a new event click on new event above. Click on [C] to create a copy of an existing event.',
-    13 => 'Event Title',
+    12 => 'To modify or delete an event, click on that event\'s edit icon below.  To create a new event, click on "Create New" above. Click on the copy icon to create a copy of an existing event.',
+    13 => 'Author',
     14 => 'Start Date',
     15 => 'End Date',
-    16 => 'Access Denied',
+    16 => '',
     17 => "You are trying to access an event that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/event.php\">go back to the event administration screen</a>.",
-    18 => 'New Event',
-    19 => 'Admin Home',
+    18 => '',
+    19 => '',
     20 => 'save',
     21 => 'cancel',
     22 => 'delete',
@@ -677,35 +698,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Link Title',
-    4 => 'Link URL',
-    5 => 'Category',
-    6 => '(include http://)',
-    7 => 'Other',
-    8 => 'Link Hits',
-    9 => 'Link Description',
-    10 => 'You need to provide a link Title, URL and Description.',
-    11 => 'Link Manager',
-    12 => 'To modify or delete a link, click on that link below.  To create a new link click new link above.',
-    13 => 'Link Title',
-    14 => 'Link Category',
-    15 => 'Link URL',
-    16 => 'Access Denied',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'New Link',
-    19 => 'Admin Home',
-    20 => 'If other, specify',
-    21 => 'save',
-    22 => 'cancel',
-    23 => 'delete'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -721,23 +713,23 @@
     10 => 'cancel',
     11 => 'delete',
     12 => 'ID',
-    13 => 'Title',
-    14 => 'Topic',
+    13 => '',
+    14 => '',
     15 => 'Date',
     16 => 'Intro Text',
     17 => 'Body Text',
     18 => 'Hits',
     19 => 'Comments',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Story List',
-    23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
+    23 => 'To modify or delete a story, click on that story\'s edit icon below. To view a story, click on the title of the story you wish to view. To create a new story, click on "Create New" above.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Story Preview',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Please fill in the Title and Intro Text fields',
     32 => 'Featured',
@@ -748,62 +740,54 @@
     37 => 'More by',
     38 => 'More from',
     39 => 'Emails',
-    40 => 'Access Denied',
+    40 => '',
     41 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  You may view the article in read-only below. Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a> when you are done.",
     42 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a>.",
-    43 => 'New Story',
-    44 => 'Admin Home',
-    45 => 'Access',
+    43 => '',
+    44 => '',
+    45 => '',
     46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the story will not be included in your RSS headline feed and it will be ignored by the search and statistics pages.',
     47 => 'Images',
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<br><p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
-    52 => 'Delete',
+    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<br>',
+    52 => '',
     53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
     54 => 'Attached Images Not Used',
-    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
+    55 => 'The following errors occurred while trying to save your story.  Please correct these errors before saving',
     56 => 'Show Topic Icon',
     57 => 'View unscaled image',
-    58 => 'Story Management',
+    58 => 'Archive Options',
     59 => 'Option',
-    60 => 'Enabled',
+    60 => '',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&sid=%s&editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Poll Created',
-    4 => "Poll %s saved",
-    5 => 'Edit Poll',
-    6 => 'Poll ID',
-    7 => '(do not use spaces)',
-    8 => 'Appears on Homepage',
-    9 => 'Question',
-    10 => 'Answers / Votes',
-    11 => "There was an error getting poll answer data about the poll %s",
-    12 => "There was an error getting poll question data about the poll %s",
-    13 => 'Create Poll',
-    14 => 'save',
-    15 => 'cancel',
-    16 => 'delete',
-    17 => 'Please enter a Poll ID',
-    18 => 'Poll List',
-    19 => 'To modify or delete a poll, click on that poll.  To create a new poll click on new poll above.',
-    20 => 'Voters',
-    21 => 'Access Denied',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'New Poll',
-    24 => 'Admin Home',
-    25 => 'Yes',
-    26 => 'No'
-);
 
 ###############################################################################
 # admin/topic.php
@@ -817,7 +801,7 @@
     6 => 'Deleting a topic deletes all stories and blocks associated with it',
     7 => 'Please fill in the Topic ID and Topic Name fields',
     8 => 'Topic Manager',
-    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find your access level for each topic in parenthesis. The asterisk(*) denotes the default topic.',
+    9 => 'To modify or delete a topic, click on that topic.  To create a new topic, click on "Create New" above. You will find your access level for each topic in parenthesis. The asterisk(*) denotes the default topic.',
     10 => 'Sort Order',
     11 => 'Stories/Page',
     12 => 'Access Denied',
@@ -834,7 +818,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -852,22 +839,22 @@
     9 => '(do not use spaces)',
     10 => 'Please fill in the Username and Email Address fields',
     11 => 'User Manager',
-    12 => 'To modify or delete a user, click on that user below.  To create a new user click the new user button to the left. You can do simple searches by entering parts of a username, email address or fullname (e.g. *son* or *.edu) in the form below.',
+    12 => 'To modify or delete a user, click on that user\'s edit icon below. To view a user, click on the username you wish to view. To create a new user, click on "Create New" above. You can do simple searches by entering parts of a username, email address or fullname (e.g. *son* or *.edu) in the form below.',
     13 => 'SecLev',
     14 => 'Reg. Date',
-    15 => 'New User',
-    16 => 'Admin Home',
-    17 => 'changepw',
-    18 => 'cancel',
-    19 => 'delete',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
     20 => 'save',
     21 => 'The username you tried saving already exists.',
     22 => 'Error',
     23 => 'Batch Add',
     24 => 'Batch Import of Users',
     25 => 'You can import a batch of users into Geeklog.  The import file must be a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
-    26 => 'Search',
-    27 => 'Limit Results',
+    26 => '',
+    27 => '',
     28 => 'Check here to delete this picture',
     29 => 'Path',
     30 => 'Import',
@@ -876,7 +863,18 @@
     33 => 'submit',
     34 => 'Error: You must specify a file to upload.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit',
 );
 
 ###############################################################################
@@ -890,7 +888,7 @@
     10 => 'Title',
     11 => 'Start Date',
     12 => 'URL',
-    13 => 'Category',
+    13 => 'Submissions',
     14 => 'Date',
     15 => 'Topic',
     16 => 'User name',
@@ -898,7 +896,7 @@
     18 => 'Email',
     34 => 'Command and Control',
     35 => 'Story Submissions',
-    36 => 'Link Submissions',
+    36 => '',
     37 => 'Event Submissions',
     38 => 'Submit',
     39 => 'There are no submissions to moderate at this time',
@@ -972,7 +970,7 @@
     14 => 'Ignore user settings',
     15 => 'Error when sending to: ',
     16 => 'Successfully sent messages to: ',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Send another message</a>",
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a>",
     18 => 'To',
     19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
     20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
@@ -989,22 +987,22 @@
 
 $LANG32 = array(
     1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
-    2 => 'Plug-in Installation Disclaimer',
-    3 => 'Plug-in Installation Form',
-    4 => 'Plug-in File',
-    5 => 'Plug-in List',
-    6 => 'Warning: Plug-in Already Installed!',
-    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    2 => 'Plugin Installation Disclaimer',
+    3 => 'Plugin Installation Form',
+    4 => 'Plugin File',
+    5 => 'Plugin List',
+    6 => 'Warning: Plugin Already Installed!',
+    7 => 'The plugin you are trying to install already exists.  Please delete the plugin before re-installing it',
     8 => 'Plugin Compatibility Check Failed',
-    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plugin.',
     10 => '<br><b>There are no plugins currently installed.</b><br><br>',
-    11 => 'To modify or delete a plug-in, click on that plug-in name below. This will show the plug-in details including the authors\'s website. Both the installed version and the version returned from the plug-in\'s code are shown. This will aid you to know if the plugin needs to be upgraded. To install or upgrade a plug-in please consult its documentation.',
+    11 => 'To modify or delete a plugin, click on that plugin\'s edit icon below. This will show the plugin details including the authors\'s website. Both the installed version and the version returned from the plugin\'s code are shown. This will aid you to know if the plugin needs to be upgraded. To install or upgrade a plugin please consult its documentation.',
     12 => 'no plugin name provided to plugineditor()',
     13 => 'Plugin Editor',
-    14 => 'New Plug-in',
+    14 => 'New Plugin',
     15 => 'Admin Home',
-    16 => 'Plug-in Name',
-    17 => 'Plug-in Version',
+    16 => 'Plugin Name',
+    17 => 'Plugin Version',
     18 => 'Geeklog Version',
     19 => 'Enabled',
     20 => 'Yes',
@@ -1013,16 +1011,19 @@
     23 => 'Save',
     24 => 'Cancel',
     25 => 'Delete',
-    26 => 'Plug-in Name',
-    27 => 'Plug-in Homepage',
+    26 => 'Plugin Name',
+    27 => 'Plugin Homepage',
     28 => 'Installed Version',
     29 => 'Geeklog Version',
-    30 => 'Delete Plug-in?',
-    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    30 => 'Delete Plugin?',
+    31 => 'Are you sure you want to delete this plugin?  By doing so you will remove all the data and data structures that this plugin uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
-
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1036,7 +1037,7 @@
     10 => 'Content Syndication',
     11 => 'New Feed',
     12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    13 => 'To modify or delete a feed, click on the feed\'s edit icon below. To create a new feed, click on "Create New" above.',
     14 => 'Title',
     15 => 'Type',
     16 => 'Filename',
@@ -1064,8 +1065,16 @@
     38 => 'Error: Missing Fields',
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
-    41 => 'Links',
-    42 => 'Events'
+    41 => 'Submit',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1074,8 +1083,8 @@
 $MESSAGE = array(
     1 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
     2 => "Thank-you for submitting your story to {$_CONF['site_name']}.  It has been submitted to our staff for approval. If approved, your story will be available for others to read on our site.",
-    3 => "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links.php>links</a> section.",
-    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href={$_CONF['site_url']}/calendar.php>calendar</a> section.",
+    3 => "",
+    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href=\"{$_CONF['site_url']}/calendar.php\">calendar</a> section.",
     5 => 'Your account information has been successfully saved.',
     6 => 'Your preferences have been successfully saved.',
     7 => 'Your comment preferences have been successfully saved.',
@@ -1086,8 +1095,8 @@
     12 => 'The block has been successfully deleted.',
     13 => 'Your topic has been successfully saved.',
     14 => 'The topic and all its stories and blocks have been successfully deleted.',
-    15 => 'Your link has been successfully saved.',
-    16 => 'The link has been successfully deleted.',
+    15 => '',
+    16 => '',
     17 => 'Your event has been successfully saved.',
     18 => 'The event has been successfully deleted.',
     19 => 'Your poll has been successfully saved.',
@@ -1099,7 +1108,7 @@
     25 => 'Cannot open your personal calendar until you login',
     26 => 'Event was successfully removed from your personal calendar',
     27 => 'Message successfully sent.',
-    28 => 'The plug-in has been successfully saved',
+    28 => 'The plugin has been successfully saved',
     29 => 'Sorry, personal calendars are not enabled on this site',
     30 => 'Access Denied',
     31 => 'Sorry, you do not have access to the story administration page.  Please note that all attempts to access unauthorized features are logged',
@@ -1115,8 +1124,8 @@
     41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
     42 => 'Your word has been successfully saved.',
     43 => 'The word has been successfully deleted.',
-    44 => 'The plug-in was successfully installed!',
-    45 => 'The plug-in was successfully deleted.',
+    44 => 'The plugin was successfully installed!',
+    45 => 'The plugin was successfully deleted.',
     46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
     47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
     48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
@@ -1132,7 +1141,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1156,7 +1179,7 @@
     'missingfields' => 'Missing Fields',
     'missingfieldsmsg' => 'You must supply the name and a description for a group',
     'groupmanager' => 'Group Manager',
-    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'newgroupmsg' => 'To modify or delete a group, click on that group\'s edit icon below. To create a new group, click on "Create New" above. Please note that core groups cannot be deleted because they are used by the system.',
     'groupname' => 'Group Name',
     'coregroup' => 'Core Group',
     'yes' => 'Yes',
@@ -1173,8 +1196,8 @@
     'edit' => 'Edit',
     'none' => 'None',
     'accessdenied' => 'Access Denied',
-    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
-    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\">become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\">become a member</a> of {$_CONF['site_name']} to receive full membership access!",
     'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
     'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
     'newgroup' => 'New Group',
@@ -1183,7 +1206,7 @@
     'cancel' => 'cancel',
     'delete' => 'delete',
     'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error.',
-    'listusers' => 'List Users',
+    'listusers' => 'Members',
     'listthem' => 'list',
     'usersingroup' => 'Users in group "%s"',
     'usergroupadmin' => 'User Group Administration',
@@ -1192,18 +1215,26 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
 # admin/database.php
 
 $LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'Last 10 Back-ups',
+    'last_ten_backups' => 'Last 10 Backups',
     'do_backup' => 'Do Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
-    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
+    'db_explanation' => 'To create a new backup of your site\'s database, click on "Create New" above.',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
     'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
@@ -1226,7 +1257,8 @@
     7 => 'Site Stats',
     8 => 'Personalize',
     9 => 'Search',
-    10 => 'advanced search'
+    10 => 'advanced search',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1264,4 +1296,209 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback
+
+$LANG_TRB = array (
+    'trackback'          => 'Trackback',
+    'from'               => 'from',
+    'tracked_on'         => 'Tracked on',
+    'read_more'          => '[read more]',
+    'intro_text'         => "Here's what others have to say about '%s':",
+    'no_comments'        => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments'       => '%d trackback comments',
+    'send_trackback'     => 'Send Pings',
+    'preview'            => 'Preview',
+    'editor_title'       => 'Send trackback comment',
+    'trackback_url'      => 'Trackback URL',
+    'entry_url'          => 'Entry URL',
+    'entry_title'        => 'Entry Title',
+    'blog_name'          => 'Site Name',
+    'excerpt'            => 'Excerpt',
+    'truncate_warning'   => 'Note: The receiving site may truncate your excerpt',
+    'button_send'        => 'Send',
+    'button_preview'     => 'Preview',
+    'send_error'         => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing'        => 'No Entry URL',
+    'url_required'       => 'Please enter at least a URL for the entry.',
+    'target_missing'     => 'No Trackback URL',
+    'target_required'    => 'Please enter a trackback URL',
+    'error_socket'       => 'Could not open socket.',
+    'error_response'     => 'Response not understood.',
+    'error_unspecified'  => 'Unspecified error.',
+    'select_url'         => 'Select Trackback URL',
+    'not_found'          => 'Trackback URL not found',
+    'autodetect_failed'  => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain'  => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback'           => 'Pingback',
+    'pingback_results'   => 'Pingback results',
+    'send_pings'         => 'Send Pings',
+    'send_pings_for'     => 'Send Pings for "%s"',
+    'no_links_pingback'  => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success'   => 'Pingback sent.',
+    'no_pingback_url'    => 'No pingback URL found.',
+    'resend'             => 'Resend',
+    'ping_all_explain'   => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button'    => 'Send Pingback',
+    'pingback_short'     => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled'  => '(Pingback disabled)',
+    'ping_button'        => 'Send Ping',
+    'ping_short'         => 'Ping weblog directory services.',
+    'ping_disabled'      => '(Ping disabled)',
+    'trackback_button'   => 'Send Trackback',
+    'trackback_short'    => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while'   => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results'       => 'Ping results',
+    'unknown_method'     => 'Unknown ping method',
+    'ping_success'       => 'Ping sent.',
+    'error_site_name'    => 'Please enter the site\'s name.',
+    'error_site_url'     => 'Please enter the site\'s URL.',
+    'error_ping_url'     => 'Please enter a valid Ping URL.',
+    'no_services'        => 'No weblog directory services configured.',
+    'services_headline'  => 'Weblog Directory Services',
+    'service_explain'    => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service'            => 'Service',
+    'ping_method'        => 'Ping method',
+    'service_website'    => 'Website',
+    'service_ping_url'   => 'URL to ping',
+    'ping_standard'      => 'Standard Ping',
+    'ping_extended'      => 'Extended Ping',
+    'ping_unknown'       => '(unknown method)',
+    'edit_service'       => 'Edit Weblog Directory Service',
+    'trackbacks'         => 'Trackbacks',
+    'editor_intro'       => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none'  => 'Prepare your trackback comment.',
+    'trackback_note'     => 'To send a trackback comment for a story, go to the list of stories and click on "' . $LANG24[21] . '" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain'   => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url'       => 'Pingback URL',
+    'site_url'           => 'This site\'s URL',
+    'pingback_note'      => 'To send a pingback for a story, go to the list of stories and click on "' . $LANG24[21] . '" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing'   => 'No Pingback URL',
+    'pbtarget_required'  => 'Please enter a pingback URL',
+    'pb_error_details'   => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array (
+    'title'            => 'Article Directory',
+    'title_year'       => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top'          => 'Back to Article Directory',
+    'no_articles'      => 'No articles.'
+);
+
+################################################################################
+# "What's New" Time Strings
+
+$LANG_WHATSNEW = array (
+    # This here determines the order of the sentence "No new stories in 2 hrs"
+    # order it so it makes sense in your language:
+    # %i    item, "Stories"
+    # %n    amount, "2", "20" etc
+    # %t    time, "2" (weeks)
+    # %s    scale, "hrs", "weeks"
+    'new_string'  => '%n new %i in the last %t %s',
+    'new_last'    => 'last %t %s',
+    # other strings
+    'minutes'     => 'minutes',
+    'hours'       => 'hours',
+    'days'        => 'days',
+    'weeks'       => 'weeks',
+    'months'      => 'months',
+    'minute'      => 'minute',
+    'hour'        => 'hour',
+    'day'         => 'day',
+    'week'        => 'week',
+    'month'       => 'month'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display adminiatration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit'        => 'Submit',
+    'edit'          => 'Edit',
+    'admin_home'    => 'Admin Home',
+    'create_new'    => 'Create New',
+    'enabled'       => 'Enabled',
+    'title'         => 'Title',
+    'type'          => 'Type',
+    'topic'         => 'Topic',
+    'help_url'      => 'Help File URL',
+    'save'          => 'Save',
+    'cancel'        => 'Cancel',
+    'delete'        => 'Delete',
+    'copy'          => 'Copy',
+    'no_results'    => '- No entries found -',
+    'data_error'    => 'There was an error processing the subscription data. Please check the data source.'
+
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Comments Enabled',
+    -1  => 'Comments Disabled'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Flat',
+    'nested'    => 'Nested',
+    'threaded'  => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(don\'t)',
+    3600    => '1 Hour',
+    7200    => '2 Hours',
+    10800   => '3 Hours',
+    28800   => '8 Hours',
+    86400   => '1 Day',
+    604800  => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0   => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html'      => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Trackback Enabled',
+    -1  => 'Trackback Disabled'
+);
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/english_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/english_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/english_utf-8.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/english_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -6,9 +6,9 @@
 # Special thanks to Mischa Polivanov for his work on this project
 #
 # Copyright (C) 2000 Jason Whittenburg
-# jwhitten@securitygeeks.com
+# jwhitten AT securitygeeks DOT com
 #
-# Converted to Unicode (UTF-8) by Samuel M Stone <sam@stonemicro.com>
+# Converted to Unicode (UTF-8) by Samuel M Stone <sam AT stonemicro DOT com>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -140,7 +140,7 @@
     95 => 'Powered By',
     96 => 'Groups',
     97 => 'Word List',
-    98 => 'Plug-ins',
+    98 => 'Plugins',
     99 => 'STORIES',
     100 => 'No new stories',
     101 => 'Your Events',
@@ -148,14 +148,24 @@
     103 => 'DB Backups',
     104 => 'by',
     105 => 'Mail Users',
-    106 => 'Views',
+    106 => 'Views:',
     107 => 'GL Version Test',
     108 => 'Clear Cache',
     109 => 'Report abuse',
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -213,13 +223,13 @@
 );
 
 ###############################################################################
-# users.php
+# usersettings.php
 
 $LANG04 = array(
     1 => 'User Profile for',
     2 => 'User Name',
     3 => 'Full Name',
-    4 => 'Password',
+    4 => 'New Password',
     5 => 'Email',
     6 => 'Homepage',
     7 => 'Bio',
@@ -281,7 +291,7 @@
     63 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
     64 => 'Comment Preferences for',
     65 => 'Try Logging in Again',
-    66 => "You may have mistyped your login credentials.  Please try logging in again below. Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?",
+    66 => 'You may have mistyped your login credentials.  Please try logging in again below.',
     67 => 'Member Since',
     68 => 'Remember Me For',
     69 => 'How long should we remember you after logging in?',
@@ -322,7 +332,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => "If you have forgotten your password, you may request a new one at this url:",
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -340,27 +366,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Web Resources',
-    2 => 'There are no resources to display.',
-    3 => 'Add A Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Vote Saved',
-    2 => 'Your vote was saved for the poll',
-    3 => 'Vote',
-    4 => 'Polls in System',
-    5 => 'Votes',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -435,7 +440,7 @@
     28 => 'No story or comment matches for your search',
     29 => 'Story and Comment Results',
     30 => 'No links matched your search',
-    31 => 'This plug-in returned no matches',
+    31 => 'This plugin returned no matches',
     32 => 'Event',
     33 => 'URL',
     34 => 'Location',
@@ -461,7 +466,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -469,11 +478,11 @@
 
 $LANG10 = array(
     1 => 'Site Statistics',
-    2 => 'Total Hits to the System',
-    3 => 'Stories(Comments) in the System',
-    4 => 'Polls(Answers) in the System',
-    5 => 'Links(Clicks) in the System',
-    6 => 'Events in the System',
+    2 => 'Total Hits to the system',
+    3 => 'Stories (Comments) in the system',
+    4 => '',
+    5 => '',
+    6 => 'Events in the system',
     7 => 'Top Ten Viewed Stories',
     8 => 'Story Title',
     9 => 'Views',
@@ -481,17 +490,24 @@
     11 => 'Top Ten Commented Stories',
     12 => 'Comments',
     13 => 'It appears that there are no stories on this site or no one has ever posted a comment on them.',
-    14 => 'Top Ten Polls',
-    15 => 'Poll Question',
-    16 => 'Votes',
-    17 => 'It appears that there are no polls on this site or no one has ever voted.',
-    18 => 'Top Ten Links',
-    19 => 'Links',
-    20 => 'Hits',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
     21 => 'It appears that there are no links on this site or no one has ever clicked on one.',
     22 => 'Top Ten Emailed Stories',
     23 => 'Emails',
-    24 => 'It appears that no one has emailed a story on this site'
+    24 => 'It appears that no one has emailed a story on this site',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -513,7 +529,7 @@
     2 => 'Login',
     3 => 'New User',
     4 => 'Submit an Event',
-    5 => 'Submit a Link',
+    5 => '',
     6 => 'Submit a Story',
     7 => 'Login is Required',
     8 => 'Submit',
@@ -524,12 +540,12 @@
     13 => 'End Date',
     14 => 'Location',
     15 => 'Description',
-    16 => 'If other, please specify',
-    17 => 'Category',
-    18 => 'Other',
+    16 => '',
+    17 => '',
+    18 => '',
     19 => 'Read First',
-    20 => 'Error: Missing Category',
-    21 => 'When selecting "Other" please also provide a category name',
+    20 => '',
+    21 => '',
     22 => 'Error: Missing Fields',
     23 => 'Please fill in all the fields on the form.  All fields are required.',
     24 => 'Submission Saved',
@@ -589,12 +605,12 @@
     2 => 'You do not have the necessary rights to edit this block.',
     3 => 'Block Editor',
     4 => 'There was a problem reading this feed (see error.log for details).',
-    5 => 'Block Title',
-    6 => 'Topic',
+    5 => '',
+    6 => '',
     7 => 'All',
     8 => 'Block Security Level',
     9 => 'Block Order',
-    10 => 'Block Type',
+    10 => '',
     11 => 'Portal Block',
     12 => 'Normal Block',
     13 => 'Portal Block Options',
@@ -604,12 +620,12 @@
     17 => 'Block Content',
     18 => 'Please fill in the Block Title and Content fields',
     19 => 'Block Manager',
-    20 => 'Block Title',
+    20 => '',
     21 => 'Block SecLev',
-    22 => 'Block Type',
+    22 => '',
     23 => 'Block Order',
-    24 => 'Block Topic',
-    25 => 'To modify or delete a block, click on that block below.  To create a new block click on new block above.',
+    24 => '',
+    25 => 'To modify or delete a block, click on that block\'s edit icon below.  To create a new block, click on "Create New" above. To move a block, click on the arrows or [R] and [L] boxes.',
     26 => 'Layout Block',
     27 => 'PHP Block',
     28 => 'PHP Block Options',
@@ -628,13 +644,13 @@
     41 => 'Right',
     42 => 'You must enter the block title and block order for Geeklog default blocks.',
     43 => 'Homepage Only',
-    44 => 'Access Denied',
+    44 => '',
     45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
-    46 => 'New Block',
-    47 => 'Admin Home',
+    46 => 'Move',
+    47 => '',
     48 => 'Block Name',
     49 => ' (no spaces and must be unique)',
-    50 => 'Help File URL',
+    50 => '',
     51 => 'include http://',
     52 => 'If you leave this blank the help icon for this block will not be displayed',
     53 => 'Enabled',
@@ -644,7 +660,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -653,7 +674,7 @@
 $LANG22 = array(
     1 => 'Event Editor',
     2 => 'Error',
-    3 => 'Event Title',
+    3 => 'Post Mode',
     4 => 'Event URL',
     5 => 'Event Start Date',
     6 => 'Event End Date',
@@ -662,14 +683,14 @@
     9 => '(include http://)',
     10 => 'You must provide the dates/times, event title, and description',
     11 => 'Event Manager',
-    12 => 'To modify or delete an event, click on that event below.  To create a new event click on new event above. Click on [C] to create a copy of an existing event.',
-    13 => 'Event Title',
+    12 => 'To modify or delete an event, click on that event\'s edit icon below.  To create a new event, click on "Create New" above. Click on the copy icon to create a copy of an existing event.',
+    13 => 'Author',
     14 => 'Start Date',
     15 => 'End Date',
-    16 => 'Access Denied',
+    16 => '',
     17 => "You are trying to access an event that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/event.php\">go back to the event administration screen</a>.",
-    18 => 'New Event',
-    19 => 'Admin Home',
+    18 => '',
+    19 => '',
     20 => 'save',
     21 => 'cancel',
     22 => 'delete',
@@ -679,35 +700,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Link Title',
-    4 => 'Link URL',
-    5 => 'Category',
-    6 => '(include http://)',
-    7 => 'Other',
-    8 => 'Link Hits',
-    9 => 'Link Description',
-    10 => 'You need to provide a link Title, URL and Description.',
-    11 => 'Link Manager',
-    12 => 'To modify or delete a link, click on that link below.  To create a new link click new link above.',
-    13 => 'Link Title',
-    14 => 'Link Category',
-    15 => 'Link URL',
-    16 => 'Access Denied',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'New Link',
-    19 => 'Admin Home',
-    20 => 'If other, specify',
-    21 => 'save',
-    22 => 'cancel',
-    23 => 'delete'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -723,23 +715,23 @@
     10 => 'cancel',
     11 => 'delete',
     12 => 'ID',
-    13 => 'Title',
-    14 => 'Topic',
+    13 => '',
+    14 => '',
     15 => 'Date',
     16 => 'Intro Text',
     17 => 'Body Text',
     18 => 'Hits',
     19 => 'Comments',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Story List',
-    23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
+    23 => 'To modify or delete a story, click on that story\'s edit icon below. To view a story, click on the title of the story you wish to view. To create a new story, click on "Create New" above.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Story Preview',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Please fill in the Title and Intro Text fields',
     32 => 'Featured',
@@ -750,62 +742,54 @@
     37 => 'More by',
     38 => 'More from',
     39 => 'Emails',
-    40 => 'Access Denied',
+    40 => '',
     41 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  You may view the article in read-only below. Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a> when you are done.",
     42 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a>.",
-    43 => 'New Story',
-    44 => 'Admin Home',
-    45 => 'Access',
+    43 => '',
+    44 => '',
+    45 => '',
     46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the story will not be included in your RSS headline feed and it will be ignored by the search and statistics pages.',
     47 => 'Images',
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<br><p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
-    52 => 'Delete',
+    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<br>',
+    52 => '',
     53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
     54 => 'Attached Images Not Used',
-    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
+    55 => 'The following errors occurred while trying to save your story.  Please correct these errors before saving',
     56 => 'Show Topic Icon',
     57 => 'View unscaled image',
-    58 => 'Story Management',
+    58 => 'Archive Options',
     59 => 'Option',
-    60 => 'Enabled',
+    60 => '',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Poll Created',
-    4 => 'Poll %s saved',
-    5 => 'Edit Poll',
-    6 => 'Poll ID',
-    7 => '(do not use spaces)',
-    8 => 'Appears on Homepage',
-    9 => 'Question',
-    10 => 'Answers / Votes',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'Create Poll',
-    14 => 'save',
-    15 => 'cancel',
-    16 => 'delete',
-    17 => 'Please enter a Poll ID',
-    18 => 'Poll List',
-    19 => 'To modify or delete a poll, click on that poll.  To create a new poll click on new poll above.',
-    20 => 'Voters',
-    21 => 'Access Denied',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'New Poll',
-    24 => 'Admin Home',
-    25 => 'Yes',
-    26 => 'No'
-);
 
 ###############################################################################
 # admin/topic.php
@@ -819,7 +803,7 @@
     6 => 'Deleting a topic deletes all stories and blocks associated with it',
     7 => 'Please fill in the Topic ID and Topic Name fields',
     8 => 'Topic Manager',
-    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find your access level for each topic in parenthesis. The asterisk(*) denotes the default topic.',
+    9 => 'To modify or delete a topic, click on that topic.  To create a new topic, click on "Create New" above. You will find your access level for each topic in parenthesis. The asterisk(*) denotes the default topic.',
     10 => 'Sort Order',
     11 => 'Stories/Page',
     12 => 'Access Denied',
@@ -836,7 +820,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -854,22 +841,22 @@
     9 => '(do not use spaces)',
     10 => 'Please fill in the Username and Email Address fields',
     11 => 'User Manager',
-    12 => 'To modify or delete a user, click on that user below.  To create a new user click the new user button to the left. You can do simple searches by entering parts of a username, email address or fullname (e.g. *son* or *.edu) in the form below.',
+    12 => 'To modify or delete a user, click on that user\'s edit icon below. To view a user, click on the username you wish to view. To create a new user, click on "Create New" above. You can do simple searches by entering parts of a username, email address or fullname (e.g. *son* or *.edu) in the form below.',
     13 => 'SecLev',
     14 => 'Reg. Date',
-    15 => 'New User',
-    16 => 'Admin Home',
-    17 => 'changepw',
-    18 => 'cancel',
-    19 => 'delete',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
     20 => 'save',
     21 => 'The username you tried saving already exists.',
     22 => 'Error',
     23 => 'Batch Add',
     24 => 'Batch Import of Users',
     25 => 'You can import a batch of users into Geeklog.  The import file must be a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
-    26 => 'Search',
-    27 => 'Limit Results',
+    26 => '',
+    27 => '',
     28 => 'Check here to delete this picture',
     29 => 'Path',
     30 => 'Import',
@@ -878,7 +865,18 @@
     33 => 'submit',
     34 => 'Error: You must specify a file to upload.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit',
 );
 
 ###############################################################################
@@ -892,7 +890,7 @@
     10 => 'Title',
     11 => 'Start Date',
     12 => 'URL',
-    13 => 'Category',
+    13 => 'Submissions',
     14 => 'Date',
     15 => 'Topic',
     16 => 'User name',
@@ -900,7 +898,7 @@
     18 => 'Email',
     34 => 'Command and Control',
     35 => 'Story Submissions',
-    36 => 'Link Submissions',
+    36 => '',
     37 => 'Event Submissions',
     38 => 'Submit',
     39 => 'There are no submissions to moderate at this time',
@@ -974,7 +972,7 @@
     14 => 'Ignore user settings',
     15 => 'Error when sending to: ',
     16 => 'Successfully sent messages to: ',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Send another message</a>",
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a>",
     18 => 'To',
     19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
     20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
@@ -991,22 +989,22 @@
 
 $LANG32 = array(
     1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
-    2 => 'Plug-in Installation Disclaimer',
-    3 => 'Plug-in Installation Form',
-    4 => 'Plug-in File',
-    5 => 'Plug-in List',
-    6 => 'Warning: Plug-in Already Installed!',
-    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    2 => 'Plugin Installation Disclaimer',
+    3 => 'Plugin Installation Form',
+    4 => 'Plugin File',
+    5 => 'Plugin List',
+    6 => 'Warning: Plugin Already Installed!',
+    7 => 'The plugin you are trying to install already exists.  Please delete the plugin before re-installing it',
     8 => 'Plugin Compatibility Check Failed',
-    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plugin.',
     10 => '<br><b>There are no plugins currently installed.</b><br><br>',
-    11 => 'To modify or delete a plug-in, click on that plug-in name below. This will show the plug-in details including the authors\'s website. Both the installed version and the version returned from the plug-in\'s code are shown. This will aid you to know if the plugin needs to be upgraded. To install or upgrade a plug-in please consult its documentation.',
+    11 => 'To modify or delete a plugin, click on that plugin\'s edit icon below. This will show the plugin details including the authors\'s website. Both the installed version and the version returned from the plugin\'s code are shown. This will aid you to know if the plugin needs to be upgraded. To install or upgrade a plugin please consult its documentation.',
     12 => 'no plugin name provided to plugineditor()',
     13 => 'Plugin Editor',
-    14 => 'New Plug-in',
+    14 => 'New Plugin',
     15 => 'Admin Home',
-    16 => 'Plug-in Name',
-    17 => 'Plug-in Version',
+    16 => 'Plugin Name',
+    17 => 'Plugin Version',
     18 => 'Geeklog Version',
     19 => 'Enabled',
     20 => 'Yes',
@@ -1015,15 +1013,19 @@
     23 => 'Save',
     24 => 'Cancel',
     25 => 'Delete',
-    26 => 'Plug-in Name',
-    27 => 'Plug-in Homepage',
+    26 => 'Plugin Name',
+    27 => 'Plugin Homepage',
     28 => 'Installed Version',
     29 => 'Geeklog Version',
-    30 => 'Delete Plug-in?',
-    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    30 => 'Delete Plugin?',
+    31 => 'Are you sure you want to delete this plugin?  By doing so you will remove all the data and data structures that this plugin uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1037,7 +1039,7 @@
     10 => 'Content Syndication',
     11 => 'New Feed',
     12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    13 => 'To modify or delete a feed, click on the feed\'s edit icon below. To create a new feed, click on "Create New" above.',
     14 => 'Title',
     15 => 'Type',
     16 => 'Filename',
@@ -1065,8 +1067,16 @@
     38 => 'Error: Missing Fields',
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
-    41 => 'Links',
-    42 => 'Events'
+    41 => 'Submit',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1075,8 +1085,8 @@
 $MESSAGE = array(
     1 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
     2 => "Thank-you for submitting your story to {$_CONF['site_name']}.  It has been submitted to our staff for approval. If approved, your story will be available for others to read on our site.",
-    3 => "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links.php>links</a> section.",
-    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href={$_CONF['site_url']}/calendar.php>calendar</a> section.",
+    3 => "",
+    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href=\"{$_CONF['site_url']}/calendar.php\">calendar</a> section.",
     5 => 'Your account information has been successfully saved.',
     6 => 'Your preferences have been successfully saved.',
     7 => 'Your comment preferences have been successfully saved.',
@@ -1087,8 +1097,8 @@
     12 => 'The block has been successfully deleted.',
     13 => 'Your topic has been successfully saved.',
     14 => 'The topic and all its stories and blocks have been successfully deleted.',
-    15 => 'Your link has been successfully saved.',
-    16 => 'The link has been successfully deleted.',
+    15 => '',
+    16 => '',
     17 => 'Your event has been successfully saved.',
     18 => 'The event has been successfully deleted.',
     19 => 'Your poll has been successfully saved.',
@@ -1100,7 +1110,7 @@
     25 => 'Cannot open your personal calendar until you login',
     26 => 'Event was successfully removed from your personal calendar',
     27 => 'Message successfully sent.',
-    28 => 'The plug-in has been successfully saved',
+    28 => 'The plugin has been successfully saved',
     29 => 'Sorry, personal calendars are not enabled on this site',
     30 => 'Access Denied',
     31 => 'Sorry, you do not have access to the story administration page.  Please note that all attempts to access unauthorized features are logged',
@@ -1116,8 +1126,8 @@
     41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
     42 => 'Your word has been successfully saved.',
     43 => 'The word has been successfully deleted.',
-    44 => 'The plug-in was successfully installed!',
-    45 => 'The plug-in was successfully deleted.',
+    44 => 'The plugin was successfully installed!',
+    45 => 'The plugin was successfully deleted.',
     46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
     47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
     48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
@@ -1133,7 +1143,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1157,7 +1181,7 @@
     'missingfields' => 'Missing Fields',
     'missingfieldsmsg' => 'You must supply the name and a description for a group',
     'groupmanager' => 'Group Manager',
-    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'newgroupmsg' => 'To modify or delete a group, click on that group\'s edit icon below. To create a new group, click on "Create New" above. Please note that core groups cannot be deleted because they are used by the system.',
     'groupname' => 'Group Name',
     'coregroup' => 'Core Group',
     'yes' => 'Yes',
@@ -1174,8 +1198,8 @@
     'edit' => 'Edit',
     'none' => 'None',
     'accessdenied' => 'Access Denied',
-    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
-    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\">become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\">become a member</a> of {$_CONF['site_name']} to receive full membership access!",
     'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
     'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
     'newgroup' => 'New Group',
@@ -1184,7 +1208,7 @@
     'cancel' => 'cancel',
     'delete' => 'delete',
     'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error.',
-    'listusers' => 'List Users',
+    'listusers' => 'Members',
     'listthem' => 'list',
     'usersingroup' => 'Users in group "%s"',
     'usergroupadmin' => 'User Group Administration',
@@ -1193,19 +1217,27 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
 # admin/database.php
 
 $LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'Last 10 Back-ups',
+    'last_ten_backups' => 'Last 10 Backups',
     'do_backup' => 'Do Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
-    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
-    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'db_explanation' => 'To create a new backup of your site\'s database, click on "Create New" above.',
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
     'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
     'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
@@ -1227,7 +1259,8 @@
     7 => 'Site Stats',
     8 => 'Personalize',
     9 => 'Search',
-    10 => 'advanced search'
+    10 => 'advanced search',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1240,7 +1273,6 @@
 );
 
 ###############################################################################
-# login form
 
 $LANG_LOGIN = array(
     1 => 'Login required',
@@ -1249,24 +1281,226 @@
     4 => 'New User'
 );
 
-###############################################################################
-# pdfgenerator.php
-
 $LANG_PDF = array(
     1 => 'The PDF feature has been disabled',
     2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all. The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
     3 => 'Unknown error during PDF generation',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    4 => 'No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF\'s in an ad-hoc fashion.',
     5 => 'Loading your document.',
     6 => 'Please wait while your document is loaded.',
     7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
-    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem persists.",
+    8 => 'The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem persists.',
     9 => 'PDF Generator',
-    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    10 => 'This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site',
     11 => 'URL',
     12 => 'Generate PDF!',
     13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback
+
+$LANG_TRB = array (
+    'trackback'          => 'Trackback',
+    'from'               => 'from',
+    'tracked_on'         => 'Tracked on',
+    'read_more'          => '[read more]',
+    'intro_text'         => "Here's what others have to say about '%s':",
+    'no_comments'        => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments'       => '%d trackback comments',
+    'send_trackback'     => 'Send Pings',
+    'preview'            => 'Preview',
+    'editor_title'       => 'Send trackback comment',
+    'trackback_url'      => 'Trackback URL',
+    'entry_url'          => 'Entry URL',
+    'entry_title'        => 'Entry Title',
+    'blog_name'          => 'Site Name',
+    'excerpt'            => 'Excerpt',
+    'truncate_warning'   => 'Note: The receiving site may truncate your excerpt',
+    'button_send'        => 'Send',
+    'button_preview'     => 'Preview',
+    'send_error'         => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing'        => 'No Entry URL',
+    'url_required'       => 'Please enter at least a URL for the entry.',
+    'target_missing'     => 'No Trackback URL',
+    'target_required'    => 'Please enter a trackback URL',
+    'error_socket'       => 'Could not open socket.',
+    'error_response'     => 'Response not understood.',
+    'error_unspecified'  => 'Unspecified error.',
+    'select_url'         => 'Select Trackback URL',
+    'not_found'          => 'Trackback URL not found',
+    'autodetect_failed'  => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain'  => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback'           => 'Pingback',
+    'pingback_results'   => 'Pingback results',
+    'send_pings'         => 'Send Pings',
+    'send_pings_for'     => 'Send Pings for "%s"',
+    'no_links_pingback'  => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success'   => 'Pingback sent.',
+    'no_pingback_url'    => 'No pingback URL found.',
+    'resend'             => 'Resend',
+    'ping_all_explain'   => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button'    => 'Send Pingback',
+    'pingback_short'     => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled'  => '(Pingback disabled)',
+    'ping_button'        => 'Send Ping',
+    'ping_short'         => 'Ping weblog directory services.',
+    'ping_disabled'      => '(Ping disabled)',
+    'trackback_button'   => 'Send Trackback',
+    'trackback_short'    => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while'   => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results'       => 'Ping results',
+    'unknown_method'     => 'Unknown ping method',
+    'ping_success'       => 'Ping sent.',
+    'error_site_name'    => 'Please enter the site\'s name.',
+    'error_site_url'     => 'Please enter the site\'s URL.',
+    'error_ping_url'     => 'Please enter a valid Ping URL.',
+    'no_services'        => 'No weblog directory services configured.',
+    'services_headline'  => 'Weblog Directory Services',
+    'service_explain'    => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service'            => 'Service',
+    'ping_method'        => 'Ping method',
+    'service_website'    => 'Website',
+    'service_ping_url'   => 'URL to ping',
+    'ping_standard'      => 'Standard Ping',
+    'ping_extended'      => 'Extended Ping',
+    'ping_unknown'       => '(unknown method)',
+    'edit_service'       => 'Edit Weblog Directory Service',
+    'trackbacks'         => 'Trackbacks',
+    'editor_intro'       => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none'  => 'Prepare your trackback comment.',
+    'trackback_note'     => 'To send a trackback comment for a story, go to the list of stories and click on "' . $LANG24[21] . '" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain'   => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url'       => 'Pingback URL',
+    'site_url'           => 'This site\'s URL',
+    'pingback_note'      => 'To send a pingback for a story, go to the list of stories and click on "' . $LANG24[21] . '" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing'   => 'No Pingback URL',
+    'pbtarget_required'  => 'Please enter a pingback URL',
+    'pb_error_details'   => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array (
+    'title'            => 'Article Directory',
+    'title_year'       => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top'          => 'Back to Article Directory',
+    'no_articles'      => 'No articles.'
+);
+
+################################################################################
+# "What's New" Time Strings
+
+$LANG_WHATSNEW = array (
+    # This here determines the order of the sentence "No new stories in 2 hrs"
+    # order it so it makes sense in your language:
+    # %i    item, "Stories"
+    # %n    amount, "2", "20" etc
+    # %t    time, "2" (weeks)
+    # %s    scale, "hrs", "weeks"
+    'new_string'  => '%n new %i in the last %t %s',
+    'new_last'    => 'last %t %s',
+    # other strings
+    'minutes'     => 'minutes',
+    'hours'       => 'hours',
+    'days'        => 'days',
+    'weeks'       => 'weeks',
+    'months'      => 'months',
+    'minute'      => 'minute',
+    'hour'        => 'hour',
+    'day'         => 'day',
+    'week'        => 'week',
+    'month'       => 'month'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display adminiatration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit'        => 'Submit',
+    'edit'          => 'Edit',
+    'admin_home'    => 'Admin Home',
+    'create_new'    => 'Create New',
+    'enabled'       => 'Enabled',
+    'title'         => 'Title',
+    'type'          => 'Type',
+    'topic'         => 'Topic',
+    'help_url'      => 'Help File URL',
+    'save'          => 'Save',
+    'cancel'        => 'Cancel',
+    'delete'        => 'Delete',
+    'copy'          => 'Copy',
+    'no_results'    => '- No entries found -',
+    'data_error'    => 'There was an error processing the subscription data. Please check the data source.'
+
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Comments Enabled',
+    -1  => 'Comments Disabled'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Flat',
+    'nested'    => 'Nested',
+    'threaded'  => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(don\'t)',
+    3600    => '1 Hour',
+    7200    => '2 Hours',
+    10800   => '3 Hours',
+    28800   => '8 Hours',
+    86400   => '1 Day',
+    604800  => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0   => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html'      => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Trackback Enabled',
+    -1  => 'Trackback Disabled'
+);
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/farsi_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/farsi_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/farsi_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/farsi_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1496 @@
+<?php
+
+###############################################################################
+# farsi.php
+# اين زبان فارسي است براي جيک لاگ؟
+# Copyright (C) 2004 www.4shir.com
+# hesam.h (ahwaz security team)
+# info1@4shir.com
+# hesam.4shir@gmail.com
+# Converted to Unicode (UTF-8) by Hesam.H   <info1@4shir.com>
+# ahwaz-Iran
+###############################################################################
+
+$LANG_CHARSET = 'utf-8';
+$LANG_DIRECTION = 'rtl';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'همكاري به وسيله:',
+    2 => 'اطلاعات بيشتر',
+    3 => 'نكات',
+    4 => 'ويرايش',
+    5 => 'راي دادن',
+    6 => 'نتايج',
+    7 => 'نتايج راي گيري',
+    8 => 'آرا',
+    9 => 'توابع مديريتي',
+    10 => 'فرمانبر',
+    11 => 'مقاله',
+    12 => 'قطع ارتباط',
+    13 => 'بحث',
+    14 => 'لينكها',
+    15 => 'وقايع',
+    16 => 'راي گيري',
+    17 => 'اعضا',
+    18 => 'SQL كوري هاي',
+    19 => ' خروج از سيستم',
+    20 => 'اطلاعات اعضا:',
+    21 => 'نام كاربري',
+    22 => 'هويت كاربر',
+    23 => 'سطح امنيت',
+    24 => 'بي نام',
+    25 => 'پاسخ',
+    26 => 'توضيحات زير مربوط به هر كسي است كه آنها را پست كرده.اين سايت پاسخگوي مطالبي نيست كه آنها پست كرده اند',
+    27 => 'بيشترين پست جديد',
+    28 => 'پاك كردن',
+    29 => 'توضيحي از كاربر موجود نيست.',
+    30 => 'مقاله قديمي',
+    31 => ' مجاز بودن تگهاي HTml ',
+    32 => 'خطا :نام كاربري موجود نيست',
+    33 => 'خطا, قادرنبودن به وارد كردن در فايل لاگ',
+    34 => 'خطا',
+    35 => 'خروج',
+    36 => 'حاظر',
+    37 => 'كاربر هيچ مقاله اي ندارد',
+    38 => 'ظرفيت سنديكا',
+    39 => 'بازيابي دوباره',
+    40 => 'شما داريد <tt>register_globals = Off</tt>در داخل <tt>php.ini</tt>. هنوز, Geeklog نياز دارد به <tt>register_globals</tt> اين را بايد <strong>on</strong>. پيش از ادامه آنرا تغيير دهيد به <strong>on</strong> و وب سرور خود را دوباره راه اندازي كنيد.',
+    41 => 'كاربران ناشناس',
+    42 => 'نوشته شده توسط:',
+    43 => 'پاسخ دادن به اين',
+    44 => 'والد',
+    45 => 'MySQL :خطاي شماره',
+    46 => ': MySQL پيغام اشتباه',
+    47 => 'توابع مربوط يه كاربر',
+    48 => 'اطلاعات حساب كاربري',
+    49 => 'انتخاب يک سري از موارد اختياري در سيستم',
+    50 => 'خطا بويسله دستور اس كيو ال',
+    51 => 'كمك',
+    52 => 'جديد',
+    53 => 'خانه ريس سايت',
+    54 => 'قادر به باز كردن فيل نيست',
+    55 => 'خطا در',
+    56 => 'اخذ راى',
+    57 => 'رمز',
+    58 => 'دخول به سيستم',
+    59 => "آيا تا به حال حساب كاربري نداشته ايد؟  ثبت نام كنيد <a href=\"{$_CONF['site_url']}/users.php?mode=new\">كارير جديد</a>",
+    60 => 'پست كردن يك توضيح',
+    61 => 'ساختن يك حساب كاربري جديد',
+    62 => 'كلمات',
+    63 => 'توضيح برتري',
+    64 => 'اي ميل كردن مقاله به دوستان',
+    65 => 'ديدن نسخه قابل چاپ',
+    66 => 'تقويم من',
+    67 => 'خوش آمديد به ',
+    68 => 'خانه',
+    69 => 'تماس',
+    70 => 'جستجو',
+    71 => 'همكاري‌ وكمك‌ كردن',
+    72 => 'Web منابع',
+    73 => 'پيشينه راي گيري',
+    74 => 'تقويم',
+    75 => 'جستجوي پيشرفته',
+    76 => 'آمار سايت',
+    77 => 'پلاگين ها',
+    78 => 'وقايع پيش رو',
+    79 => 'جديد ها!',
+    80 => 'آخرين  مقاله',
+    81 => 'آخر ازهمه ترين مقاله',
+    82 => 'ساعت',
+    83 => 'توضيحات',
+    84 => 'لينكها',
+    85 => '48ساعت  آخر',
+    86 => 'هيچ توضيح جديدي نيست',
+    87 => '2هفته پيش',
+    88 => 'هيچ لينك تازه اي وجود ندارد',
+    89 => 'هيچ اتفاقي در آينده وجود ندارد',
+    90 => 'خانه',
+    91 => 'اين صفحه ساخته شد در مدت:',
+    92 => 'ثانيه',
+    93 => 'حق چاپ محفوظ است',
+    94 => 'كليه حقوق و علايم به كار رفته و حق چاپ مربوط است به دارندگان سايت و نويسنده.',
+    95 => 'ساخته شده توسط',
+    96 => 'گروهها',
+    97 => 'ليست كلمات',
+    98 => 'پلاگين ها',
+    99 => 'رزومه ها',
+    100 => 'مقاله جديدي نيست',
+    101 => 'رويدادهاي شما',
+    102 => 'رويدادهاي سايت',
+    103 => 'پشتيبان گيري از ديتا بيس',
+    104 => 'بوسيله',
+    105 => 'اي -ميل كاربران',
+    106 => 'از نظر گذراندن‌',
+    107 => 'تست نسخه برنامه اي گرافيکي',
+    108 => 'پاك كردن كش',
+    109 => 'گزارش از تجاوز كردن به حقوق شما',
+    110 => 'گزارش دادن اين پست به ريس سايت',
+    111 => ' مشاهده نسخه Pdf ',
+    112 => 'كاربران ثبت شده',
+    113 => 'مستندات سطح بالا',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'تقويم رويدادها',
+    2 => 'متاسفم هيچ واقعه اي براي نمايش وجود ندارد',
+    3 => 'وقتيکه',
+    4 => 'كجا',
+    5 => 'توضيحات',
+    6 => 'اضافه كردن واقعه',
+    7 => 'واقعه نزديك‌',
+    8 => 'بوسيله اضافه كردن اين واقعه به تقوييتان شما ميتوانيد به سرعت وقايعي را كه علاقمند به ديدن آنها هستيد را بوسيله كليك رو "تقويم من"از قسمت توابع كاربران مشاهده نماييد ',
+    9 => 'اضافه كردن به تقويم من',
+    10 => 'حذف از تقويم من',
+    11 => "اضافه كردن رخدادي به تقويم  {$_USER['username']}'",
+    12 => 'رخداد',
+    13 => 'شروع‌ كردن‌',
+    14 => 'پايان',
+    15 => 'بازگشت به تقويم'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'فرستادن يك توضيح',
+    2 => 'طريقه پست',
+    3 => 'خروج',
+    4 => 'ساختن يك اكانت',
+    5 => 'نام كاربري',
+    6 => 'شما براي پست دادن در اين سايت احتياج به ورود داريد لطفا وارد شويد و در صورتي كه اكانتي نداريدميتوانيد از فرم زير براي ساختن اكانت استفاده كنيد',
+    7 => 'آخرين توضيح شما ',
+    8 => " اين سايت احتياج دارد به حداقل  {$_CONF['commentspeedlimit']} تانيه بين پستهايي كه شما ميفرستيد",
+    9 => 'توضيح',
+    10 => 'فرستادن گزارش',
+    11 => 'فرستادن توضيح',
+    12 => 'لطفا پركنيد قسمت موضوع و فيلدهاي توضيحات را چون فيلدهاي ضروري هستند براي فرستادن توضيحات شما',
+    13 => 'اطلاعات شما',
+    14 => 'پيش نمايش',
+    15 => 'گزارش دادن اين پست',
+    16 => 'عنوان',
+    17 => 'خطا',
+    18 => 'قسمت مهم',
+    19 => 'لطفا براي نگه داشتن پستها درتاپيكها سعي كنيد',
+    20 => 'سعي كنيد كه پاسخ دهيد به ديگر اعضا بجاي شروع يك بحث تازه',
+    21 => 'پيامهاي ساير اعضا را خوانده و اگر نظر شما در بين آنها نبود مبادرت به پست نظر خود كنيد',
+    22 => 'استفاده كنيد ازپاك كننده شرح موضوع براي اينكه شرح دهيد موضوعتان در چه موردي است',
+    23 => 'اي -ميل شما به صورت همگاني شما پخش نشود',
+    24 => 'كاربر بي نام',
+    25 => 'آيا از فرستادن اين پست براي رييس سايت اطمينان داريد?',
+    26 => '%s گزارش داده شده اين پست خلاف قانون:',
+    27 => 'پست خلاف قوانين'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'خصوصيات كاربر',
+    2 => 'نام كاربري',
+    3 => 'نام كامل',
+    4 => 'رمز عبور',
+    5 => 'اي - ميل',
+    6 => 'صفحه خانگي',
+    7 => 'بيوگرافي',
+    8 => 'PGP كليد',
+    9 => 'ذخيره اطلاعات',
+    10 => 'آخرين 10 توضيح(پاسخ) كاربر',
+    11 => 'كاربر توضيح (پاسخي ) ندارد',
+    12 => 'انتخاب يک سري از موارد اختياري در سيستم براي كاربر',
+    13 => 'اي ميل ',
+    14 => 'اين پسورد به وسيله يك توليد كننده ساخته شده. بر شما لازم است اين پسورد رابراي امنيت بيشتر تغيير دهيد .پس از ورود به سايت به قسمت توابع كاربري رفته و به قسمت اطلاعات اكانت مراجه كرده و آن راتغييير دهيد.',
+    15 => "شما {$_CONF['site_name']} .هستيد و اكانتتان با موفقيت تغيير پيدا كرد.براي استفاده از آن شما بايد به وسيله اطلاعات زير وارد شويد. لطفا اين اي ميل را براي مرجع ذخيره كنيد.",
+    16 => 'اطلاعات اكانت شما',
+    17 => 'اكانت شما وجود خارجي ندارد',
+    18 => 'اي -ميل آدرس شما وجود ندارد',
+    19 => 'نام كاربري يا اي-ميل شما وجود ندارد',
+    20 => 'اي -ميل آدرس شما وجود ندارد',
+    21 => 'خطا',
+    22 => "شما در سايت  {$_CONF['site_name']} ثبت نام شديد!",
+    23 => "با ساختن اكانتتان ميتوانيد از مزاياي سايت {$_CONF['site_name']} استفاده كرده و نظرات خود را پست كنيد . اگر اكانتي نداريد  ثبت نام كنيد  توجه كنيد كه اي -ميل شما <b><i>هيچوقت</i></b> در سايت پابليك نخواهد شد.",
+    24 => 'پسورد شما به آدرس اي ميلتان فرستاده خواهد شد.',
+    25 => 'آيا پسوردتان را فراموش كرده ايد؟',
+    26 => 'وارد كنيد <em>اين دو را</em> نام كاريريتان <em>يا </em> اي ميلي كه با آن رجيستر كرده ايد و رو اي ميل كن پسوردم را كليك كنيد ',
+    27 => 'الان ثبت نام كن !مرا',
+    28 => 'پسوردم را اي ميل كن',
+    29 => 'خروج ',
+    30 => 'ورود ',
+    31 => 'اين قسمت كه شما انتخاب نموده ايد احتياج به ورود شما به عنوان عضو دارد',
+    32 => 'امضا',
+    33 => 'هيچگاه به صورت همگاني نمايش نده',
+    34 => 'اين نام واقعي شماست',
+    35 => 'پسورد خود را براي تغيير وارد كنيد',
+    36 => 'با اين عبارت شروع كنيد http://',
+    37 => 'در توضيحات شما اعمال شد',
+    38 => 'اين همه چيز درباره شماست هر كسي ميتواند آن را بخواند',
+    39 => 'كليد pgp‌شما براي ديدن همگان',
+    40 => 'اين موضوع آيكن ندارد',
+    41 => 'خواهان مديريت! ',
+    42 => 'شكل نمايش روز',
+    43 => 'حداكثر تعداد پست براي رزومه',
+    44 => 'هيچ جعبه اي نيست',
+    45 => 'نشان دادن يک سري از موارد اختياري در سيستم براي',
+    46 => 'نمايش ندادن اين آيتم براي',
+    47 => 'تنظيمات باكس جديد براي',
+    48 => 'مباحث',
+    49 => 'هيچ آيكني ذخيره نشده',
+    50 => 'چك نكن - در صورتي كه شما مايل نيستيد',
+    51 => 'فقط مقاله هاي جديد',
+    52 => 'پيش فرض',
+    53 => 'دريافت مقالات روز شب هنگام',
+    54 => 'اگر نمي خواهيد ببينيد پستهاي جديد را اين را علامت بزنيد',
+    55 => 'اگر شما همه اينها را بدوون علامت بگذاريد پيش فرض هاي سيستم براي شما اجرا خواهد شد',
+    56 => 'نويسندگان',
+    57 => 'نشان دادن مد نمايشي',
+    58 => 'دسته دسته کردن',
+    59 => 'محدوديت نظرات',
+    60 => 'دوست داريد نظرات شما چگونه نمايش داده شوند؟',
+    61 => 'اول جديدترين بعد قديميترين؟',
+    62 => 'پيشفرض 100 ميباشد',
+    63 => "پسورد شما برايتان اي ميل شد شما ميتوانيد لحظه اي وارد سايت شويد. لطفا از دستورالعمل ها و پيامهاي ما پيروي كنيد . از شما براي وارد شدن به سايت بسيار متشكريم {$_CONF['site_name']}",
+    64 => 'نشان دادن يک سري از موارد اختياري در سيستم براي',
+    65 => 'لطفا براي ورود يكبار ديگر سعي كنيد',
+    66 => "شما اطلاعاتتان را اشتباه وارد نموديد.  لطفا بوسيله فرم زير دوباره سعي كنيد. آيا شما <a href=\"{$_CONF['site_url']}/users.php?mode=new\">عضو جديد هستيد</a>?",
+    67 => 'عضو بعد از',
+    68 => 'به ياد داشته باش مرا از',
+    69 => 'چه مدت ما شما را به ياد داشته باشيم (عمر كوكي )چقدر باشد',
+    70 => "سفارشي كن صفحه آرايي ولايه هاو محتويات سايت {$_CONF['site_name']}",
+    71 => "يكي از بزرگترين و بهترين ويژگي هاي سايت {$_CONF['site_name']}  اين است كه شما ميتوانيد صفحه ها و لا يه ها و.. و روي هم رفته طرح بندي سايت را تغيير دهيد  شما براي اين كار بايد در ابتدا در سايت <a href=\"{$_CONF['site_url']}/users.php?mode=new\">ثبت نام كنيد</a> with {$_CONF['site_name']} . آيا پيش از اين عضو ما نبوده ايد ؟  پس ثبت نام كنيد ؟",
+    72 => 'پوسته',
+    73 => 'زبان',
+    74 => ' ظاهر سايت را عوض كن ',
+    75 => ' موضوع را اي -ميل كن براي',
+    76 => 'اگر شما يك موضوع را از ليست زير انتخاب كنيد جديد ترين رزومههايي كه پايان هر روز پست شده را در دريافت خواهيد كرد. پس تنها موضوعاتي را انتخاب كنيد كه به آنها علاقمنديد',
+    77 => 'عكس',
+    78 => 'اضافه كردن تصوير شما !يا آواتارتان',
+    79 => 'براي پاك كردن عكس اينجا را علامت بزنيد',
+    80 => 'ورود',
+    81 => 'فرستادن اي- ميل',
+    82 => 'آخرين 10 مقاله از كاربر',
+    83 => 'فرستادن آماربراي كاربر',
+    84 => 'مجموع مقالات:',
+    85 => 'مجموع نظرات :',
+    86 => 'پيدا كردن تمام پستهاي ',
+    87 => 'نام كاربري شما',
+    88 => " اگرهر كس از جمله شمادر خواست يك پسورد جديد براي اكانت شما نمود در سايت  \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nاگر شما واقعا مايل به ااتفاق افتادن اين عمل هستيد لطفا روي لينك زير كليك كنيد:\n\n",
+    89 => "اگر شما نميخواهيد اين اتفاق رخ دهد به سادگي از اين پيام صرفنظر كنيد و تقاضا ناديده گرفته ميشود و پسورد بدون تغيير باقي ميماند.\n\n",
+    90 => 'شما ميتوانيد  پسورد جديدتان را در زير وارد كنيد اگر اين كار را انجام ندهيد پسورد قبليتان بدون تغيير باقي خواهد ماند',
+    91 => 'اماده کردن پسورد جديد',
+    92 => 'پسورد جديد را وارد كنيد',
+    93 => 'آخرين درخواست شما براي پسورد جديد %d ثانيه پيش بود. اين سيستم به حداقل %d ثانيه بين 2 درخواست نياز دارد.',
+    94 => 'پاك كردن حساب كاربري "%s"',
+    95 => 'روي پاك كردن حساب كاربري كليك كنيد تا حساب كاربري شما ازديتا بيس سايت پاك شود در اين صورت تمام مقالات شما و نام كاربريتان پاك خواهد شد و به صورت عضو ناشناس به نمايش در خواهد آمد',
+    96 => 'پاك كردن اكانت',
+    97 => 'تثبيت پاك كردن اكانت شما',
+    98 => 'آيا شما مطمين به پاك كردن اكانت خود در سايت هستيد ! شما بدين وسيله توانايي وروود مجدد به سايت را نخواهيد داشت و بايد يك حساب كاربري جديد بسازيد . اگر واقعا مطمين هستيد روي پاك كردن اكانت دوباره از طريق فرم زير اقدام كنيد',
+    99 => 'گزينه هاي پنهاني براي كاربر',
+    100 => 'فرستادن اي -ميل براي رييس سايت',
+    101 => 'اجازه اي ميل از طرف ادمين سايت',
+    102 => 'اي - ميل از طرف اعضا ',
+    103 => 'اجازه براي دادن اي ميل از سايرين',
+    104 => 'نشان دادن وضعيت حضور در سايت',
+    105 => 'نشان دادن كساني كه حضور در سايت را انتخاب نكرده اند',
+    106 => 'محل زندگي',
+    107 => 'نشان دادن در پروفايل عمومي',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'هيچ خبري براي نمايش وجود ندارد',
+    2 => ' هيچ مقاله جديدي براي نمايش وجود ندارد.',
+    3 => ' براي موضوعات %s',
+    4 => 'برجسته ترين مقاله امروز',
+    5 => 'بعدي',
+    6 => 'قبلي',
+    7 => 'اولين',
+    8 => 'آخرين'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'هنگام فرستادن پيام شما خطايي رخ داده . لطفا دقت كرده و دوباره سعي كنيد',
+    2 => 'پيام شما با موفقيت فرستاده شد',
+    3 => 'لطفا از موجود بودن ادرس اي -ميل اطمينان حاصل كنيد در فيلد پاسخ',
+    4 => ' لطفا قرار دهيد "نام خود"و "پاسخ به" و "موضوع"و پيام را در قسمتهاي تعيين شده',
+    5 => 'خطا: چنين كاربري وجود ندارد.',
+    6 => 'در اين موضوع يك پيغام خطا وجود دارد!.',
+    7 => 'مقاله كاربري براي',
+    8 => 'نام كاربري',
+    9 => 'نام سايت خانگي كاربر',
+    10 => 'فرستادن نامه براي',
+    11 => 'نام شما:',
+    12 => 'پاسخ به :',
+    13 => 'عنوان:',
+    14 => 'پيام:',
+    15 => 'ترجمه نخواهد شد HTML',
+    16 => 'فرستادن نامه',
+    17 => 'فرستادن مقاله به دوستان',
+    18 => 'نام دوست',
+    19 => 'اي ميل دوست شما:',
+    20 => 'از طرف:',
+    21 => 'اي ميل شما',
+    22 => 'تمام فيلدها ضروري هستند',
+    23 => "اين اي -ميل فرستاده شده براي شما از طرف %s در %s چون ايشان بر اين باورند شما از آن لذت ميبريد اين مقاله در سايت {$_CONF['site_url']} موجود ميباشد. اين نامه يك هرز نامه نيست و در آينده نيز موزد استفاده تبليغاتي نخواهد داشت با تشكر از شما.",
+    24 => 'نظر درباره اين مقاله در',
+    25 => 'براي استفاده از اين قسمت شما بايد به عنوان عضو وارد شويد. با وروود شمال ميتوانيد به ما مشكلات سيستم سايت را براي جلوگيري از سو استفاده به ما گوشزد ',
+    26 => 'اين فرم به شما اجازه ميدهد كه براي يك يوزر انتخاب شده نامه بفرستيد . تمام فيلدها بايد پر شوند',
+    27 => 'پيام كوتاه',
+    28 => '%s نوشته: ',
+    29 => "اين يك خلاصه روزانه است از {$_CONF['site_name']} براي ",
+    30 => 'خبرنامه روزانه يراي ',
+    31 => 'عنوان',
+    32 => 'روز',
+    33 => 'بخوانيد مقاله كامل را در',
+    34 => 'پايان پيام',
+    35 => 'متاسفيم تنظيمات اين كاربر براي دريافت اي ميل تنظيم نشده'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'جستجوي پيشرفته',
+    2 => 'كلمات كليدي',
+    3 => 'موضوع',
+    4 => 'همه',
+    5 => 'نوع',
+    6 => 'رزومه',
+    7 => 'نظرات',
+    8 => 'نويسندگان',
+    9 => 'همه',
+    10 => 'جستجو',
+    11 => 'نتايج جستجو',
+    12 => 'تطابق داشت',
+    13 => 'نتيجه جستجو: تطابقي يافت نشد',
+    14 => 'در جستجوي شما تطابقي يافت نشد',
+    15 => 'لطفا دوباره سعي کنيد',
+    16 => 'عنوان',
+    17 => 'روز',
+    18 => 'نويسنده',
+    19 => "بگرد همگي واژه هاي سايت {$_CONF['site_name']}از ديتا بيس ومقالات جديد و قديم",
+    20 => 'روز',
+    21 => 'به',
+    22 => '(فرمت روز سال-ماه-روز)',
+    23 => 'نما',
+    24 => 'پيدا شد %d مورد',
+    25 => 'گشتن به دنبال',
+    26 => 'آيتمها ',
+    27 => 'ثانيه',
+    28 => 'هيچ توضيح يا مقاله اي مطابق با خواسته شما پيدا نشد',
+    29 => 'توضيح يا نظر مطابق با خواسته شما',
+    30 => 'هيچ لينکي مطابق نظر شما پيدا نشد',
+    31 => 'اين پلاگين هيچ نتيجه اي باز نگرداند',
+    32 => 'واقعه',
+    33 => 'URL',
+    34 => 'محل',
+    35 => 'تمام روزها',
+    36 => 'هيچ واقع اي مطابق با خواسته شما پيدا نشد',
+    37 => 'نتايج وقايع',
+    38 => 'نتايج لينکها',
+    39 => 'لينکها',
+    40 => 'وقايع',
+    41 => 'کلمه اي که شما براي جستجو ميدهيد بايد بيشتر از سه کلمه باشد',
+    42 => 'لطفا به ترکيب بندي روز و ماه و سال دقت کنيد YYYY-MM-DD (year-month-day).',
+    43 => 'عين اصطلاح',
+    44 => 'تمام کلمات زير',
+    45 => 'هيچکدام از کلمات زير',
+    46 => 'بعدي',
+    47 => 'قبلي',
+    48 => 'نويسنده',
+    49 => 'روز',
+    50 => 'تعداد بازديد',
+    51 => 'لينک',
+    52 => 'مکان(موقعيت)',
+    53 => 'نتايج مقالات',
+    54 => 'نتايج توضيحات',
+    55 => 'اصطلاح',
+    56 => 'و',
+    57 => 'يا',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'آمارهاي سايت',
+    2 => 'تعداد بازديد کنندگان کل سيستم:',
+    3 => 'کل رزومه(توضيحات) موجود:',
+    4 => 'راي ها (جوابهاي) کل افراد در سيستم:',
+    5 => 'کل لينکها(کليک ها) در سيستم:',
+    6 => 'وقايع درون سيستم:',
+    7 => ' بهترين 10 مقاله درون سيستم:',
+    8 => 'شرح عناوين:',
+    9 => 'از نظر گذرانده شده:',
+    10 => 'هيچ مقاله اي در سايت نيست يا تا به حال مشاهده نشده',
+    11 => 'بهترين 10 مقاله',
+    12 => 'نکات',
+    13 => 'هيچ مقاله اي در سايت نيست يا تا به حال پستي در آنها صورت نگرفته',
+    14 => 'بالاترين 10 راي',
+    15 => 'سوال راي گيري',
+    16 => 'نظرات',
+    17 => 'هيچ راي گيري در سايت وجود ندارديا هيچ يک هنوز نظري در بر نداشته',
+    18 => 'برترين 10 لينک',
+    19 => 'لينکها',
+    20 => 'از نظر گذرانده شده:',
+    21 => 'هيچ لينکي وجود ندارد يا تا به حال بر روي آنها کليک نشده',
+    22 => 'برترين 10 اي -ميل مقالات',
+    23 => 'اي -ميل ها',
+    24 => 'هيچ اي -ميل در مقالات وجود ندارد',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => ' كداميك مربوط است',
+    2 => 'ميل کردن مقاله به دوستان',
+    3 => 'مقاله قابل چاپ',
+    4 => 'اختيارات مقاله',
+    5 => 'قالبPdfمقاله'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'براي ثبت کردن يک %s شما بايد به عنوان يک عضو وارد شويد.',
+    2 => 'ورود',
+    3 => 'کاربر جديد',
+    4 => 'ثبت يک واقع جديد',
+    5 => 'ثبت يک لينک',
+    6 => 'ثبت يک مقاله',
+    7 => 'ورود لازم است',
+    8 => 'ثبت کردن',
+    9 => 'وقتي که ارايه داديد اطلاعات خود را براي استفاده در اين سايت ما ميدهيم به شمااين پيشنهادات خود را<ul><li>تمام فيلدها را بطور کامل پر کنيد<li>اطلاعاتتان را به صورت کامل و دقيق بدهيد<li>لينکهايي که ميدهيد حتما دوباره چک کنيد</ul>',
+    10 => 'عنوان',
+    11 => 'لينک',
+    12 => 'روز شروع',
+    13 => 'روز پاياني',
+    14 => 'محل',
+    15 => 'شرح - وصف',
+    16 => 'اگر به جز اينها بود لطفا تعيين نماييددسته',
+    17 => 'طبقه ، فهرست',
+    18 => 'بقيه',
+    19 => 'در ابتدا بخوانيد',
+    20 => 'خطار:طبقه ، فهرست گم شده',
+    21 => 'اگر گزينه " بقيه" را انتخاب نموديد لطفا طبقه ، فهرست را مشخص نماييد',
+    22 => 'خطا:فيلدهاي گم شده',
+    23 => 'لطفا تمام فيلدهاي فرم را پر نماييد. تمام فيلدها لازم هستند',
+    24 => 'Submission ذخيره شد',
+    25 => ' s%   submission شمابا موفقيت ذخيره گرديد.',
+    26 => 'سرعت مجاز،',
+    27 => 'نام کاربري ',
+    28 => 'مطلب',
+    29 => 'مقاله',
+    30 => 'آخرين submission شما بوده ',
+    31 => " اين سايت به حداقل  {$_CONF['speedlimit']} ثانيه بين submissions نياز دارد",
+    32 => 'پيش نمايش',
+    33 => 'پيش نمايش مقاله',
+    34 => 'خروج',
+    35 => 'HTMLتگهاي اجازه ترجمه ندارند',
+    36 => 'روش پست',
+    37 => " ارايه دادن يک واقعه جديد در سايت {$_CONF['site_name']} قرار داده خواهد شددر وقايع شما در تقويم اصلي سايت اگر درخواست کرديديا اگر وقايعي بود که از قلم افتاده بود ميتوانيد آنها را بفرستيد تا در صورتي که ادمين سايت قبول کرد آن را تاييد کرده  و در تقويم اصلي سايت قرار دهد",
+    38 => 'اضافه کردن واقعه به',
+    39 => 'تقويم اصلي سايت',
+    40 => 'تقويم شخصي',
+    41 => 'زمان پايان',
+    42 => 'زمان شروع',
+    43 => 'تمام روزهاي واقعه',
+    44 => 'آدرس خط اول',
+    45 => 'آدرس خط دوم',
+    46 => 'شهر',
+    47 => 'استان',
+    48 => 'کد پستي',
+    49 => 'نوع واقعه',
+    50 => 'ويرايش نوع واقعه',
+    51 => 'محل',
+    52 => 'حذف کردن',
+    53 => 'ساختن حساب کاربري'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'سنديت و تصديق لازم است',
+    2 => 'غير قابل دسترسي! اطلاعات ورود به صورت اشتباه وارد شده اند',
+    3 => 'رمز عبور براي کاربر مربوطه اشتباه است',
+    4 => 'کلمه کاربري:',
+    5 => 'رمز عبور:',
+    6 => 'تمام قسنتها براي رييس سايت قابل دسترسي است.<<br>Tاين صفحه براي استفاده افراد تعيين صلاحيت شده مجاز است',
+    7 => 'ورود'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'حقوق رييس نارسا و ناکامل است',
+    2 => 'اديت کردن قسمت بلاکها براي شما لازم نيست.',
+    3 => 'ويرايش گر بلاک',
+    4 => 'براي خواندن کارگذار مشکلي بوجود امده (ببينيد فايل خطا را را براي جزييات بيشتر).',
+    5 => 'عنوان مسدود شده',
+    6 => 'مطلب',
+    7 => 'همه',
+    8 => 'بلاک کردن درجه امنيتي',
+    9 => 'مرتب کردن  بلاکها',
+    10 => 'بلاک کردن يک نوع و رشته',
+    11 => 'بلاک شده پورتال',
+    12 => 'بلاک  شده معمولي',
+    13 => 'گزينه هاي  بلاک شده پورتال',
+    14 => 'RSS URL',
+    15 => 'آخرين RSS به روز شده',
+    16 => 'گزينه هاي بلاک معمولي',
+    17 => 'بلاک  مضامين و محتوا',
+    18 => 'لطفا عنوان بلاک و محتوا و مضامين آن را قرار دهيد',
+    19 => 'مديريت بلاکها',
+    20 => 'عنوان بلاک ها',
+    21 => 'سطح امنيتي بلاکها',
+    22 => 'نوع  بلاک شده',
+    23 => 'مرتب کردن بلاکها',
+    24 => 'عناوين بلاک شده',
+    25 => 'براي تغيير نوع يا پاک کردن يک بلاک کليک کنيد رو آن در زير.براي ساختن يک بلاک جديد روي بلاک جديد در بالا کليک کنيد',
+    26 => 'آرايش بلاکها',
+    27 => 'PHPبلاک',
+    28 => ' گزينه هاي بلاکPHP ',
+    29 => 'توابع بلاک',
+    30 => 'اگر شما ميخواهيد يک بلاک کد پي اچ پي توسط خودتان را استفاده کنيد . وارد کنيد نام تابع را در بالا . نام تابع شما بايد با پيشوند(مثال) phpblock_? phpblock_getweather  باشد. اگر شما تابعي با اين پيشوند نداشته باشيد در نتيجه اين تابع صدا نزده خواهد شد ما اين کار را انجام ميدهيم که افرادي که ميخواهند هک کنند جيک لاگ شما را  از طريق قرار دادن توابع دلبخواهي که ميتواند وارد کنند و زيان آور باشد براي سيستم شما نتواننداین کار راانجام دهند. اطمينان حاصل کنيد که دو پرانتز "()" خالي بعد از تابعتان نيست .در اخر لازم است تمام توابع بلاک خود را در اين مسير قرار دهيد. اين به شما اجازه ميدهد موقع آپديت کردن به مشکلي بر نخوريد   /path/to/geeklog/system/lib-custom.php.',
+    31 => 'پیام خطادر پی اچ پی بلاک..  تابع , %s, وجود ندارد.',
+    32 => 'خطاي گم شدن فيلد يا فيلدها',
+    33 => 'شما بايد "يو آر ال" را براي فايل :"Rss" برا ي پورتال بلاک وارد کنيد ',
+    34 => 'شما بايد عنوان وتابعي براي "php " بلاک وارد کنيد',
+    35 => 'شما بايد عنوان و محتوايي براي بلاک معمولي وارد کنيد',
+    36 => 'شما بايد محتوايي برايمحتواي آرايش ترتيب بلاکها وارد کنيد',
+    37 => 'نام تابع "php" بلاک شما مناسب نيست',
+    38 => 'تابع شما براي "php " بلاک بايد يک پيشوند به صورت  \'phpblock_\' (e.g. phpblock_getweather).  يک عبارت پيشوندي مثل اين لازم است براي بالابردن امنيت شما در برابر جلوگيري از اجراي کدهاي اختياري يک هکر \'phpblock_\' ',
+    39 => 'جهت',
+    40 => 'چپ',
+    41 => 'راست',
+    42 => 'شما بايد وارد کنيد عنوان بلاک و ترتيب بلاک ها را براي الگوي از قبل تعيين شده ي جيک لاگ',
+    43 => 'فقط آدرس " home page" وارد شود',
+    44 => 'غير قابل دسترسي',
+    45 => "شما در حال ورود به منطقه بلاك شده هستيد كه قابليت دسترسي براي شما وجود ندارد.  اين تلاش شما ثبت شد. لطفا به  <a href=\"{$_CONF['site_admin_url']}/block.php\">بازگشت به صفحه مديريت بلاكها</a>.",
+    46 => 'بلاك جديد',
+    47 => 'خانه ريس سايت',
+    48 => 'نام بلاك',
+    49 => ' (بدون فاصله و بايد منحصر به فرد باشد  ) ',
+    50 => 'فايل كمكي  URL',
+    51 => 'بايد به همراه عبارت http://',
+    52 => 'اگر شما اين را خالي رها كنيد آيكن مربوط به اين بلاك  نمايش داده نخواهد شد',
+    53 => 'فعال شده',
+    54 => 'ذخيره',
+    55 => 'لغو ',
+    56 => 'پاک کردن',
+    57 => 'حركت  دادن بلاك به سمت پايين',
+    58 => 'حركت بلاك به سمت بالا',
+    59 => 'حركت بلاك به سمت راست',
+    60 => 'حركت بلاك به سمت چپ',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'واقعه نگار',
+    2 => 'خطا',
+    3 => 'عنوان واقعه',
+    4 => 'واقعه URL',
+    5 => 'روز شروع واقعه',
+    6 => 'روز پايان واقعه',
+    7 => 'محل واقعه',
+    8 => 'شرح واقعه',
+    9 => '(بايد شامل//:http)',
+    10 => 'شما بايد روزها/ساعتها و عنوان واقعه و شرح آن را وارد و تهيه كنيد',
+    11 => 'واقعه نگار',
+    12 => 'براي تغيير يا پاك كردن يك واقعه روي آن واقعه  در زير كليك كنيد. براي ساختن يك واقعه جديد روي واقعه جديد در بالا كليك كنيد  و براي كپي كردن يك واقعه موجود روي "‍C" كليك كنيد',
+    13 => 'عنوان واقعه',
+    14 => 'روز شروع',
+    15 => 'روز پايان',
+    16 => 'غير قابل دسترسي',
+    17 => "شما در حال تلاش براي ورود به قسمتي از وقايع هستيد كه اجازه دسترسي به آنها را نداريد. اين تلاش شما گزارش شد <a href=\"{$_CONF['site_admin_url']}/event.php\">بازگشت به صفحه مديريت وقايع</a>.",
+    18 => 'واقعه جديد',
+    19 => 'خانه رييس',
+    20 => 'ذخيره',
+    21 => 'لغو',
+    22 => 'پاك كردن',
+    23 => 'روز شروع شما اشكال دارد',
+    24 => 'روز پايان شما اشكال دارد',
+    25 => 'روز شروع  بعد از روز پايان است'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'مقاله قبل',
+    2 => 'مقاله بعد',
+    3 => 'روش',
+    4 => 'روش پست',
+    5 => 'ويراستار مقالات',
+    6 => 'هيچ مقاله اي در اين سيستم موجود نيست',
+    7 => 'نويسنده',
+    8 => 'ذخيره',
+    9 => 'پيش نمايش',
+    10 => 'لغو',
+    11 => 'پاك كردن',
+    12 => 'مشخصه " ID "مورد نظر',
+    13 => 'عنوان',
+    14 => 'موضوع',
+    15 => 'روز',
+    16 => 'نوشته دروني',
+    17 => 'نوشته بدنه و اصلي',
+    18 => 'نمايش',
+    19 => 'توضيحات',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'ليست مقالات',
+    23 => 'براي تغيير يا پاك كردن يك مفاله روي شماره مقاله در زير كليك كنيد . براي ديدن يك مقاله بر روي عنوان آن كليك كنيد. و براي ساختن يك مقاله جديدروي "مقاله جديد" در بالا كليك كنيد',
+    24 => 'مشخصه "ID" مورد نظر شما براي اين مقاله قبلا استفاده شده لطفا يك مشخصه ديگر وارد كنيد',
+    25 => 'Error when saving story',
+    26 => 'پيش نمايش مقاله',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'خطا در فرستادن مقاله',
+    31 => ' لطفا عنوان و نوشته دروني را كامل كنيد',
+    32 => 'تركيب وسيما',
+    33 => 'فقط يك تركيب قابل استفاده است براي مقالات',
+    34 => 'پيش نويس کردن',
+    35 => 'بله',
+    36 => 'خير',
+    37 => 'بيشتر توسط',
+    38 => 'بيشتر از',
+    39 => 'اي -ميل ها',
+    40 => 'غير قابل دسترسي.',
+    41 => "شما در حال تالاش براي دستيابي به مقاله اي هستيد كه اجازه دسترسي به آن را نداريد. اين تلاش شما گزارش شدمقالات فقط خواندني در زير موجود هستند.  <a href=\"{$_CONF['site_admin_url']}/story.php\">بازگشت به صفحه مديريت مقالات",
+    42 => "شما در حال تلاش براي دستيابي به مقاله اي هستيد كه اجازه دسترسي به آن را نداريد. اين تلاش شما گزارش شد.لطفا <a href=\"{$_CONF['site_admin_url']}/story.php\">بازگرديد به صفحه مديريت مقالات</a>.",
+    43 => 'مقاله جديد',
+    44 => 'خانه رييس',
+    45 => 'دستيابي',
+    46 => '<b>نكته:</b> اگر اگر شما اين روز را به  به آينده تغيير دهيد مقاله تا آن موقع نمايش داده نخواهد شد. اين به آن معني است كه مقاله شما در " RSS" شما وارد نخواهد شد و در امار و ارقام نيز تا آن روز مشخص درج نخواهد شدi',
+    47 => 'تصاوير',
+    48 => 'تصوير',
+    49 => 'راست',
+    50 => 'چپ',
+    51 => 'براي افزودن يك تصوير براي مقاله تان شما بايد از فرمت بندي نوشته استفاده كنيد.فرمت بندي بندي ويژه  "image -X" و "image-X-Right" يا " image-X-Left" هنگامي كه X يك عدد است براي تصويري است كه ميخواهيد اضافه كنيد  نكته:شما حتما بايد تصويري اضافه كنيد به جز عكس چيزي نميتوانيد اضافه كنيد. اگر چيز ديگري باشد  مقاله ذخيره نخواهد شد<br><p><b>پيش نمايش</b>: پيش نمايش يك مقاله با تصاويري كه به آن الحاق شده با فشار دكمه پيش نمايش قابل رويت خواهد بود',
+    52 => 'پاك كردن',
+    53 => 'مورد استفاده نبوده . شما بايد اين تصوير را درون قسمت "بادي--بدنه" قرار دهيد قبل از اينكه شما تغييرات را ذخيره كنيد.',
+    54 => 'اضافه كردن تصوير مورد استفاده نبوده',
+    55 => 'اين پيغام خطا هنگام ذخيره مقاله شما رخ داد. لطفا خطا را تصحيح كرده و دوباره براي ذخيره تلاش كنيد',
+    56 => 'نشان دادن آيكن عنوان',
+    57 => 'ديدن تصوير به صورت واقعي و بدون قالب',
+    58 => 'مديريت مقاله',
+    59 => 'گزينه ها ',
+    60 => 'فعال شده',
+    61 => 'بايگاني خودكار',
+    62 => 'حذف خودكار',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'ويرايشگر موضوع-تاپيك',
+    2 => 'موضوع -تاپيك ID',
+    3 => 'نام تاپيك',
+    4 => 'عكس تاپيك',
+    5 => '(از فضاي خالي استفاده نكنيد)',
+    6 => 'با پاك كردن يك تاپيك تمام مقالات و همه محتويات آن پاك خواهند شد',
+    7 => 'لطفا "آي دي" و نام تاپيك را بنويسيد',
+    8 => 'مدير تاپيك',
+    9 => 'براي تغيير يا پاك كردن يك تاپيك روي آن تاپيك كليك كنيد . براي ساختن يك تاپيك يك  روي كليد :تاپيك جديد" كليك كنيد". شما ميتوانيد درجه دسترسي به تاپيك را در پرانتز ها مشخص كنيد اگر در آن *ستاره قرار دهيد مشخص ميشود كه آن موضوع  پيش فرض ميباشد. ',
+    10 => 'نظم ترتيب',
+    11 => 'مقالات/صفحه',
+    12 => 'غير قابل دسترسي',
+    13 => "شما در حال تلاش براي دسترس ي به موضوعي هستيد كه اجازه دسترسي به آن را نداريد . اين تلاش شما گزارش شد.لطفا برويد به <a href=\"{$_CONF['site_admin_url']}/topic.php\">صفحه مديريت تاپيك ها</a>.",
+    14 => 'طريقه مرتب سازي',
+    15 => 'الفبايي',
+    16 => 'پيش فرض:',
+    17 => 'تاپيك جديد',
+    18 => 'خانه رييس',
+    19 => 'ذخيره',
+    20 => 'لغو',
+    21 => 'پاك كردن',
+    22 => 'پيش فرض',
+    23 => 'اين را قرار بده اين را به عنوان  تاپيك پيش فرض مقالات',
+    24 => '(*)',
+    25 => 'آرشيو تاپيك ها',
+    26 => 'اين را به عنوان تاپيك پيش فرض براي آرشيو مقالات استفاده كن. تنها يك تاپيك قابل قبول است',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'ويرايشگر اعضا',
+    2 => 'شناسه كاربر',
+    3 => 'نام كاربري',
+    4 => 'نام كامل',
+    5 => 'رمز عبور',
+    6 => 'درجه امنيتي',
+    7 => 'آدرس " اي-ميل"',
+    8 => 'صفحه خانگي',
+    9 => '(از فضاي خالي استفاده كنيد)',
+    10 => 'لطفا "نام كاربري" و "اي- ميل" راوارد كنيد',
+    11 => 'مديريت كاربران',
+    12 => 'براي تغيير يا پاك كردن يك  كاربران كليك كنيد روي آن كاربر در زير. براي ساختن يك كاربر جديد روي "كاربر جديد" كليك كنيد . شما ميتوانيد به سادگي با وارد كردن  قسمتهايي همچون "نام كاربري " يا " اي - ميل " يا نام كامل در فرم زير شخص مورد نظر را پيدا كنيد (مثال *son* or *.edu) ',
+    13 => 'درجه امنيتي',
+    14 => 'روز ثبت نام',
+    15 => 'كاربر جديد',
+    16 => 'خانه رييس',
+    17 => 'تغيير كلمه عبور',
+    18 => 'لغو',
+    19 => 'حذف',
+    20 => 'ذخيره',
+    21 => 'نام كاربري كه كه در حال سعي براي ذخيره آن هستيد قبلا در سيستم وجود داشته',
+    22 => 'خطا',
+    23 => 'اضافه كردن يك دسته',
+    24 => 'اضافه كردن يك دسته از كاربران',
+    25 => 'شما ميتوانيد يك دسته از كاربران را وارد جيك لاگ كنيد. فايل ورودي بايد به وسيله "تب- فاصله يعني به اندازه يكtab " از هم جدا شده باشد و بايد شامل اطلاعات زير باشد:"نام كاربر"و" نام كاربري" و " آدرس اي-ميل" باشد .هر كاربري كه دعوت ميشود به وسيله يك پسورد متفاوت دعوت ميشودشما بايد هر كاربر را در يك خط وارد كنيد . در غير اين صورت به مشكل بر ميخوريد',
+    26 => 'جستجو',
+    27 => 'محدوده نتايج',
+    28 => 'اين قسمت را براي حذف تصوير علامت بزنيد',
+    29 => 'مسير',
+    30 => 'وارد کردن',
+    31 => 'كاربران جديد',
+    32 => 'پردازش به پايان رسيد.وارد شده =%d تعداد  وارد نشده=%d ',
+    33 => 'ثبت کردن',
+    34 => 'خطا: شما بايد فايلي را براي فرستادن انتخاب كنيد',
+    35 => 'آخرين ورود',
+    36 => '(هيچوقت)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'تصديق كردن',
+    2 => 'پاك كردن',
+    3 => 'ويرايش',
+    4 => 'پروفايل',
+    10 => 'عنوان ',
+    11 => 'روز شروع',
+    12 => 'URL',
+    13 => 'دسته',
+    14 => 'روز',
+    15 => 'دسته-موضوع',
+    16 => 'نام كاربري',
+    17 => 'نام كامل',
+    18 => 'اي-ميل',
+    34 => 'کنترل و فرماندهى',
+    35 => ' حدود دسترسي به مقالات ',
+    36 => ' حدود دسترسي به لينكها',
+    37 => 'حدودو دسترسي به وقايع ',
+    38 => 'ثبت کردن',
+    39 => 'هيچ "حق دسترسي" براي مديريت  هم اكنون نيست',
+    40 => 'حدود دسترسي كاربر'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'يكشنبه',
+    2 => 'دوشنبه',
+    3 => 'سه شنبه',
+    4 => 'چهار شنبه',
+    5 => 'پنج شنبه',
+    6 => 'جمعه',
+    7 => 'شنبه',
+    8 => 'افزودن واقعه',
+    9 => '%s واقعه',
+    10 => 'اتفاقات براي:',
+    11 => 'تقويم اصلي',
+    12 => 'تقويم من',
+    13 => 'دي',
+    14 => 'بهمن',
+    15 => 'اسفند',
+    16 => 'فروردين',
+    17 => 'ارديبهشت',
+    18 => 'خرداد',
+    19 => 'تير',
+    20 => 'مرداد',
+    21 => 'شهريور',
+    22 => 'مهر',
+    23 => 'آبان',
+    24 => 'آذر',
+    25 => 'بازگشت به',
+    26 => 'تمام روزها',
+    27 => 'هفته',
+    28 => 'تقويم خصوصي براي',
+    29 => 'تقويم عمومي',
+    30 => 'پاك كردن واقعه',
+    31 => 'افزودن',
+    32 => 'واقعه',
+    33 => 'روز',
+    34 => 'زمان',
+    35 => 'افزودن سريع',
+    36 => 'ثبت كردن',
+    37 => 'متاسفم/ قابليت تقويم شخصي در اين سايت محدود شده',
+    38 => 'ويرايشگر واقعه شخصي',
+    39 => 'روز',
+    40 => 'هفته',
+    41 => 'ماه'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} برنامه اي-ميل",
+    2 => 'از',
+    3 => 'پاسخ -به',
+    4 => 'موضوع',
+    5 => 'بادي - بدنه',
+    6 => 'فرستادن براي:',
+    7 => 'تمام كاربران:',
+    8 => 'رييس- ادمين',
+    9 => 'گزينه ها ',
+    10 => 'HTML',
+    11 => 'پيام فوري !',
+    12 => 'فرستادن',
+    13 => 'از نو',
+    14 => 'چشم پوشي از تنظيمات كاربر',
+    15 => 'خطا هنگام فرستادن براي: ',
+    16 => 'پيام با موفقيت فرستاده شد براي : ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>فرستادن پيا م ديگر</a>",
+    18 => 'به',
+    19 => 'نكته: اگر شما ميخواهيد پيامي را براي تمام اعضاي سايت بفرستيد گروهي را از منوي كشويي انتخاب كنيد',
+    20 => "با موفقيت ارسال شد  <successcount> وتعداد <failcount> با شكست روبرو شد.  همچنين شما ميتوانيد<a href=\"{$_CONF['site_admin_url']}/mail.php\">يك پيام ديگر بفرستيد</a> يا ميتوانيد<a href=\"{$_CONF['site_admin_url']}/moderation.php\">به صفحه مديريت باز گرديد</a>.",
+    21 => 'عدم‌ موفقيت‌',
+    22 => 'موفقيت',
+    23 => 'بدون مشكل',
+    24 => 'بدون موفقيت',
+    25 => '-- گروهي را انتخاب كنيد --',
+    26 => 'لطفا تمام فيلدها را پر كرده و گروهي از كاربران را براي  drop down.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'نصب كردن پلاگينها ميتواند به سيستم "جيك لاگ " شما آسيب برساند و فايلهاي نصب شما را از بين ببرد.بسيار مهم است كه شما پلاگينها را حتما از سايت    <a href="http://www.geeklog.net">جيك لاگ</a> دريافت كنيد تمام پلاگينهاي سايت تست شده براي انواع سيستم عاملها وجود دارندپلاگينها يك برنامه اجرايي را از طرق سايت اجرا ميكنند كه ميتواند براي امنيت مخاطره آميز باشد مخصوصا اگر آنها را از سايتهاي ديگر دريافت كنيد.اين كار شما را ما تضمين نميكنيم  چون ممكن است سايت شما با مشكل مواجه شود شما ميتوانيد انها را با مسيوليت خودتان نصب كنيد  پس در استفاده آنها بسيار هوشيار باشيد  ',
+    2 => 'نويسنده پلاگين در استفاده شما از آن مسيوليتي ندارد',
+    3 => 'نصب پلاگين از',
+    4 => 'فايل پلاگين',
+    5 => 'ليست پلاگين',
+    6 => 'اخطار: آين پلاگين قبلا نصب نشده',
+    7 => 'اين پلاگين كه شما در حال سعي در نصب آن هستيد قبلا نصب شده ؟ لطفا پلاگين را قبل از نصب دوباره آن پاك كنيد',
+    8 => 'چك كردن سازش پذيري پلاگين شكست خورد',
+    9 => 'اين پلاگين يك ورژن جديد از "جيك لاگ " را نياز دارد. ميتوانيد "جيك لاگ " خود را به روز كنيد از سايت<a href="http://www.geeklog.net">جيك لاگ</a> يا يك ورژن ديگر از پلاگين را نصب كنيد',
+    10 => '<br><b>هم اكنون هيچ پلاگيني نصب نشده است </b><br><br>',
+    11 => 'براي تغيير يا پاك كردن پلاگين روي آن پلاگين در زير كليك كنيد. اينكارنمايش خواهد دادجزييات پلاگين را از قبيل "وب سايت نويسنده" .همچنين ورژن نصب شده و ورژن قبلي كه از آن ارتقا داده شده. اين به شما ميگويد كه آيا پلاگين احتياج به جديد شدن دارد يا خير . براي نصب نسخه به روز شده به مستندات آن مراجه كنيد',
+    12 => 'هيچ پلاگيني براي ويرايشگر پلاگين آماده نيست',
+    13 => 'ويرايشگر پلاگين',
+    14 => 'پلاگين جديد',
+    15 => 'خانه رييس',
+    16 => 'نام پلاگين',
+    17 => 'ورژن پلاگين',
+    18 => 'ورژن جيك لاگ',
+    19 => 'فعال',
+    20 => 'بله',
+    21 => 'خير',
+    22 => 'نصب',
+    23 => 'ذخيره',
+    24 => 'لغو',
+    25 => 'حذف',
+    26 => 'نام پلاگين',
+    27 => 'خانه اصلي پلاگين',
+    28 => 'ورژن نصب شده',
+    29 => 'ورژن جيك لاگ',
+    30 => 'پاك كردن پلاگين ؟',
+    31 => 'آيابراي پاك كردن اين پلاگين مطمين هستيد؟ شما به اين وسيله بسياري از اطلاعات و ساختار اطلاعاتي خود را از دست خواهيد داد. اگر مطمين هستيد روي خذف دوباره كليك كنيد در فرم بالا',
+    32 => '<p><b>خطاي /AutoLink tag فرمت درستي ندارد</b></p>',
+    33 => 'كد ورژن',
+    34 => 'به روز آوري',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'ساختن  feed',
+    2 => 'ذخيره',
+    3 => 'حذف',
+    4 => 'لغو',
+    10 => 'محتواي سنديكا',
+    11 => ' Feed جديد ',
+    12 => 'خانه رييس',
+    13 => 'براي تغيير يا پاك كردن يك "فيد" در زير روي عنوان آن "فيد" كليك كنيد. براي ساختن يك "فيد" جديد روي "فيد جديد" در بالا كليك كنيد',
+    14 => 'عنوان',
+    15 => 'نوع',
+    16 => 'نام فايل',
+    17 => 'فرمت و نوع',
+    18 => 'آخرين به روز رساني',
+    19 => 'فعال',
+    20 => 'بله',
+    21 => 'خير',
+    22 => '<i>(هيچ "فيدي" وجود ندارد)</i>',
+    23 => 'تمام مقالات',
+    24 => 'ويريشگر "فيد" ها',
+    25 => 'عنوان فيد',
+    26 => 'محدوده',
+    27 => 'طول يك بازه',
+    28 => '("صفر" بيانگر اينكه هيچ متني نيست  و " يك " بيانگر انكه پر از نوشته است  و "اعداد ديگر" محدود شده به آن تعداد كاراكتر" )',
+    29 => 'شرح',
+    30 => 'آخرين به روز آوري',
+    31 => 'مجموعه کاراکترها',
+    32 => 'زبان',
+    33 => 'محتويات',
+    34 => 'ركوردها',
+    35 => 'ساعت ها',
+    36 => 'نوع "فيد" را مشخص كنيد',
+    37 => 'شما حداقل يك پلاگيت براي نصب لازم داريد كه محتويات سنديكاي شما پشتيباني نمايد. در زير شما  نياز داريد به انتخاب هر چه ميخواهيد شما ميتوانيد يك "فيد"براي جيك لاگ بسازيد يا يا يك فيد از پلاگينها',
+    38 => 'خطا:فيلدهاي گمشده',
+    39 => 'لطفا عنوان "فيد" را بنويسيدبهمراه شرح و نام فايل',
+    40 => 'لطفا يك عدد از محتويات يا يك عدد از ساعات بنويسيد',
+    41 => 'لينكها',
+    42 => 'وقايع',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "پسورد شما براي اي-ميل شما فرستاده شد . لطفا از راهنمايي هاي درون پيام براي استفاده بهتر استفاده نماييد. با تشكر از شما براي استفاده از سايت {$_CONF['site_name']}",
+    2 => "با تشكر از شما براي فرستادن مقاله براي{$_CONF['site_name']}. اين مقاله براي قسمت بررسي ارسال شد. اگر محتويات آن مورد تاييد مسيولين سايت بود مقاله شما به مانند ساير مقالات در دسترس خواهد بود ",
+    3 => "با تشكر از شما براي فرستادن لينك براي{$_CONF['site_name']}.اين لينك شما براي قسمت بررسي ارسال شد . در صورت مجاز بودن لينك شما در قسمت   <a href={$_CONF['site_url']}/links.php>لينكها</a> قابل رويت خواهد بود",
+    4 => "با تشكر از شما براي فرستادن واقعه جديدبراي {$_CONF['site_name']}. واقع شما پس از بررسي و در صورت تاييد در قسمت <a href={$_CONF['site_url']}/calendar.php>تقويم</a> قابل رويت خواهد بود",
+    5 => 'اطلاعات حساب كاربري شما با موفقيت ذخيره گرديد',
+    6 => ' preferencesشمابا موفقيت ذخيره گرديد',
+    7 => ' توضيحات preferences شما با موفقيت ذخيره گرديد',
+    8 => 'شما با موفقيت خارج شديد',
+    9 => 'مقاله شما با موفقيت ذخيره گرديد',
+    10 => 'مقاله مورد نظر با موفقيت حذف گرديد',
+    11 => 'بلاك شما با موفقيت ذخيره گرديد',
+    12 => 'بلاك شما با موفقيت حذف گرديد',
+    13 => 'تاپيك شما با موفقيت ذخيره گرديد',
+    14 => 'تمام تاپيك و مقالات درون آ ن و تمام بلاكهاي آن با موفقيت پاك شد ',
+    15 => 'لينك مورد نظر با موفقيت ذخيره گرديد',
+    16 => 'لينك مورد نظر با موفقيت حذف گرديد',
+    17 => 'واقعه مورد نظر با موفقيت ذخيره گرديد',
+    18 => 'واقعه مورد نظر با موفقيت حذف گرديد',
+    19 => 'نظر سنجي شما با موفقيت ذخيره گرديد',
+    20 => 'نظر سنجي شما با موفقيت حذف گرديد',
+    21 => 'كاربر مورد نظر با موفقيت ذخيره شد',
+    22 => 'كاربر مورد نظر با موفقيت حذف گرديد',
+    23 => 'خطا در هنگام افزودن واقعه جديد . اين واقعه هيچ شناسه اي ندارد',
+    24 => 'اين واقعه در تقويم شما ذخيره شد',
+    25 => 'تا وقتيكه وارد نشويد نمي توانم تقويم شخصي شما را باز كنم',
+    26 => 'واقعه مورد نظر با موفقيت از تقويم شخصي شما حذف گرديد',
+    27 => 'پيام با موفقيت فرستاده شد',
+    28 => 'پلاگين با موفقيت ذخيره گرديد',
+    29 => 'متاسفم - تقويم شخصي در اين سايت غير فعال است',
+    30 => 'غير قابل دسترسي',
+    31 => 'متاسفم - شما اجازه دسترسي به مديريت مقالات را نداريد. تمام تلاشهاي غير مجاز شما براي دسترسي غير مجاز ثبت ميشود',
+    32 => 'متاسفم - شما اجازه دسترسي به صفحه مديريت تاپيكها را نداريد. تمام تلاشهاي غير مجاز شما براي دسترسي غير مجاز ثبت خواهد شد',
+    33 => 'متاسفم- شما اجازه دسترسي به صفحه مديريت بلاكها را نداريد. تمام تلاشهاي غير مجاز براي دسترسي  ثبت خواهد شد',
+    34 => 'متاسفم - شما اجازه دسترسي به صفحه مديريت لينكها را نداريد . تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    35 => 'متاسفم - شما احازه دسترسي به صفحه مديريت وقايع را نداريد.  تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    36 => 'متاسفم - شما اجازه دسترسي به صفحه مديريت نظر سنجي ها را نداريد. تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    37 => 'متاسفم - شما اجازه دسترسي به صفحه مديريت كاربران را نداريد .  تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    38 => 'متاسفم - شما اجازه دسترسي به صفحه مديريت پلاگينها را نداريد.  تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    39 => 'متاسفم - شما اجازه دسترسي به صفحه مديريت ميلها را نداريد .  تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    40 => 'پيامهاي سيستم',
+    41 => 'متاسفم - شما اجازه دسترسي  به صفحه تغيير كلمات را نداريد.  تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    42 => 'كلمه شما با موفقيت ذخيره گرديد',
+    43 => 'كلمه مورد نظر با موفقيت پاك شد',
+    44 => 'پلاگين مورد نظر با موفقيت نصب گرديد',
+    45 => 'پلاگين مورد نظر با موفقيت حذف گرديد',
+    46 => 'متاسفم - شما به نرم افزار پشتيبان گيري سايت دسترسي نداريد.  تمام تلاشهاي غير مجاز شما براي دسترسي ثبت خواهد شد',
+    47 => 'اين تابع تنها در سيستم عاملهاي مبتي بر *NIX اجرا خواهد شد . اگر شما از ويندوز استفاده ميكنيد براي پاك كردن كش فايلي كه گفته ميشود را سرچ كرده و پاك كنيد. adodb_*.php ',
+    48 => "با تشكر از عضويت شما در سايت {$_CONF['site_name']}. تيم ما درخواست شما را بررسي كرده و در صورتي كه مورد قبول گرديد پسورد شما براي آدرس اي ميلي كه شما وارد كرده ايد فرستاده خواهد شد",
+    49 => 'گروه شما با موفقيت ذخيره شد',
+    50 => 'گروه  با موفقيت پاك شد',
+    51 => 'اين نام كاربري قبلا مورد استفاده قرار گرفته . لطفا نام كاربري ديگري انتخاب كنيد',
+    52 => 'اي -ميل آدرسي كه شما ثبت كرديد ظاهرا موجود نيست لطفا اي-ميل ديگري وارد كنيد',
+    53 => 'رمز عبور جديد شما مورد قبول واقع شد. لطفا از پسورد جديدتان براي ورود در زير استفاده كنيد',
+    54 => 'درخواست شما براي پسورد جديد سپري‌ شده . لطفا دوباره سعي كنيد در زير',
+    55 => 'هم اكنون يك اي -ميل براي شما فرستاده شد لطفا به دستورات درون آن براي پسورد جديد براي اكانتتان توجه كنيد',
+    56 => 'اين آدرس اي- ميل كه شما وارد نموده ايد مورد استفاده كاربري است كه قبلا در اين سايت ثبت نام نموده',
+    57 => 'حساب كاربري شما با موفقيت پاك شد',
+    58 => ' شما با موفقيت ذخيره شدfeed',
+    59 => ' مورد نظر شما با موفقيت حذف گرديدfeed ',
+    60 => 'پلاگين با موفقيت به روز شد',
+    61 => 'پلاگين %s: خطاي نا مشخص نامي',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'دسترسي',
+    'ownerroot' => 'مالك/صاحب',
+    'group' => 'گروه',
+    'readonly' => 'فقط خواندني',
+    'accessrights' => 'حق دسترسي داريد',
+    'owner' => 'مالك',
+    'grantgrouplabel' => 'اجازه ويرايش گروه بالايي را داريد',
+    'permmsg' => 'نكته:كاربران افرادي هستند كه شناسه كاربري داشته و ميتوانند وارد سايت شده و پست بدهند. و ناشناس افرادي هستند كه تنها ميتوانند صفحات سايت را ببينند ',
+    'securitygroups' => 'گروههاي امنيتي',
+    'editrootmsg' => "مگر اينكه شما ادمين يا رييس سايت باشيد . شما نميتوانيد ادمين را ويرايش كنيد مگر اينكه خودتان ادمين باشيد!شما تمام يوزرها به جز ادمين را ميتوانيد ويرايش كنيد . تمام تلاشهاي غير مجاز براي ويرايش ادمين ثبت ميشود  لطفا بازگرديد به<a href=\"{$_CONF['site_admin_url']}/user.php\">صفحه مديريت كاربران</a>.",
+    'securitygroupsmsg' => 'گروهي را كه تمايل به عضويت در آن را داريد با علامت زدن چك باكس آن مشخص كنيدS',
+    'groupeditor' => 'ويرايشگر گروه',
+    'description' => 'شرح',
+    'name' => 'نام',
+    'rights' => 'مجازها',
+    'missingfields' => 'فيلدهاي گم شده',
+    'missingfieldsmsg' => 'شما بايد نام و شرح را براي گروه ذخيره كنيد',
+    'groupmanager' => 'مديريت گروه',
+    'newgroupmsg' => 'براي تغيير يا پاك كردن يك گروه روي آن گروه در زير كليك كنيد . براي ساختن يك گروه جديد روي |گروه جديد| كليك كنيد . شما نميتوانيد گروههاي هسته اي و پايه اي را پاك كنيد چون در سيستم مورد استفاده قرار ميگردندT',
+    'groupname' => 'نام گروه',
+    'coregroup' => 'هسته گروه',
+    'yes' => 'بله',
+    'no' => 'خير',
+    'corerightsdescr' => "اين گروه هسته  {$_CONF['site_name']} ميباشد. بهمين دليل اين گروه قابل ويرايش نميباشد در زير گروههايي هستند كه شما اجازه خواندن آن ها را داريد ",
+    'groupmsg' => 'گروههاي امنيتي در اين سايت سلسله مراتبي هستند.بااضافه كردن اين گروه به بقيه گروههاي زير ميتوانيد اجازه آن گروههايي كه هستند را نيز بدهيد . اگر شما ميخواهيد دسترسي هاي ديگري بدهيد |دسترسيها| را انتخاب كرده  وبراي گروه مورد نظر اعمال نماييد.براي افزودن اين گروه به سايرين به سادگي چك باكس  گروه مورد نظر خود را فعال كنيد',
+    'coregroupmsg' => "اين گروه هسته  {$_CONF['site_name']} ميباشد.  بهمين دليل قابل ويرايش نميباشد. در زير يك ليست فقط خواندني  از گروهها هست كه اين گروه به انها تعلق دارد.=",
+    'rightsdescr' => 'يك نوع دسترسي مجازبه گروه است كه شما ميتوانيد به گروه يا گروههايي كه عضوي از آن است مستقيما دسترسي داشته باشيد.آنچه كه بدون چك باكس است دسترسي هاي مجازي است كه به آن گروه داده شده . دسترسي هايي كه در چك باكس هاي زير مشخص كرده ايد ميتواند به طور مستقيم در گروه استفاده شود ',
+    'lock' => 'لاك',
+    'members' => 'اعضا',
+    'anonymous' => 'ناشناس',
+    'permissions' => 'پرميشن ها/اجازه دسترسي',
+    'permissionskey' => 'R = read, E = edit, edit rights assume read rights',
+    'edit' => 'ويرايش',
+    'none' => 'خالي',
+    'accessdenied' => 'غير قابل دسترسي ',
+    'storydenialmsg' => "شما توانايي دسترسي به مقاله اين گروه را نداريذ. چون شما عضوي از گروه {$_CONF['site_name']}نيستيد.  لطفا <a href=users.php?mode=new> عضو شويد</a> of {$_CONF['site_name']} تا دسترسي كامل داشته باشيد",
+    'eventdenialmsg' => "شما توانايي دسترسي به اين واقعه را نداريد . چون شما عضوي از {$_CONF['site_name']} نيستيد.  لطفا <a href=users.php?mode=new> عضو شويد</a> of {$_CONF['site_name']}تا دسترسي كامل داشته باشيد",
+    'nogroupsforcoregroup' => 'اين گروه به بقيه گروهها وابسته نيست',
+    'grouphasnorights' => 'اين گروه هيچگونه از ويژگي هاي دسترسي ادمين را ندارد',
+    'newgroup' => 'گروه جديد',
+    'adminhome' => 'خانه رييس',
+    'save' => 'ذخيره',
+    'cancel' => 'لغو',
+    'delete' => 'پاك كردن',
+    'canteditroot' => 'شما در حال ويرايش گروه اصلي و پايه هستيد در حالي كه مجوز آن را نداريد . اگر احساس ميكنيد خطايي رخ داده با رييس سايت تماس بگيريد',
+    'listusers' => 'ليست كاربران',
+    'listthem' => 'ليست',
+    'usersingroup' => 'كاربر در گروه "%s"',
+    'usergroupadmin' => 'اداره كردن گروه كاربران',
+    'add' => 'افزودن',
+    'remove' => 'پاك كردن',
+    'availmembers' => 'كاربران حاضر',
+    'groupmembers' => 'اعضاي گروهها',
+    'canteditgroup' => 'براي ويرايش اين گروه شما بايد عضوي از اين گروه شويد . اگر احساس ميكنيد خطايي رخ داده با رييس سايت تماس بگيريد',
+    'cantlistgroup' => 'براي ديدن اعضاي اين گروه شما بايد خودتان را عضو آن نماييد. اگر احساس ميكنيد خطايي رخ داده با رييس سايت تماس بگيريد',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'آخرين 10 پشتيبان گرفته شده',
+    'do_backup' => 'پشتيبان بگير',
+    'backup_successful' => 'پشتيبان گيري از ديتا بيس با موفقيت انجام شد',
+    'db_explanation' => 'براي ساختن يك پشتيبان جدبد براي سيستم جيك لاگ خود كليد زير را كليك كنيد',
+    'not_found' => "مسير اشتباه- يا مسير |ماي اس كيو ال| شما قابل اجرا نيست<br>چك كردن<strong>\$_DB_mysqldump_path</strong> مشخص شده درconfig.php.<br>متغيرها كنوني شناخته شده با نام<var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'پشتيبان گيري ناقص ماند: سايز فايل 0 بايت بود',
+    'path_not_found' => "{$_CONF['backup_path']} وجود ندارد يا در دايركتوري موجود نيست",
+    'no_access' => "خطا: دايركتوري {$_CONF['backup_path']} مورددسترسي نيست.",
+    'backup_file' => 'فايل پشتيبان',
+    'size' => 'اندازه',
+    'bytes' => 'بايت',
+    'total_number' => 'تعداد كل پشتيبانها: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'خانه',
+    2 => 'ارتباط  با ما',
+    3 => 'انتشار دادن‌',
+    4 => 'لينكها',
+    5 => 'راي‌ گيري',
+    6 => 'تقويم',
+    7 => 'آمار و ارقام سايت',
+    8 => 'شخصي/دلخواه',
+    9 => 'جستجو',
+    10 => 'جستجوي پيشرفته',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'خطاي 404',
+    2 => 'هي, من همه جا را گشتم اما اينو پيدا نكردم <b>%s</b>.',
+    3 => "<p>متاسفم فايلي كه شما به دنبال آن هستيد موجود نيست  لطفا به صفحه اصلي رفته  <a href=\"{$_CONF['site_url']}\">صفحه اصلي</a> يا<a href=\"{$_CONF['site_url']}/search.php\">صفحه جستجو</a> براي جستجوي بهتر."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'نياز به ورود ميباشد',
+    2 => 'متاسفم - براي ورود به اين قسمت شما نياز داريد به عنوان كاربر وارد شويد',
+    3 => 'ورود',
+    4 => 'كاربر جديد'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'قابليت ساختن |PDF |در اين سايت محدود شده است',
+    2 => 'اين پرونده در حال حاضر قابل نمايش نيست. پرونده دريافت شده اما قابل پردازش نميباشدو. لطفا از اينكه در آن تنها از عبارات |HTML| استفاده شده كه از استاندارد "xHTML" استفاده شده بهيچ وجه پرونده هاي بيش از اندازه پيچيده نمايش داده نخواهند شد. نتيجه پرونده شما 0 بايت ميباشد و پاك خواهد شد . اگر شما مطمين هستيد كه پرونده ارساليتان به طور صحيح به نمايش در خواهد آمد لطفا دوباره سعي كنيد',
+    3 => 'خطاي ناشناخته هنگام ساختن پي دي اف',
+    4 => 'هيچ صفحه اي انتخاب نشده يا شما خواستار استفاده از ابزار ad-hokدر زير هستيد.  اگر فكر ميكنيد خطايي رخ داده لطفا با ادمين سايت تماس بگيريديا براي ساختار از فرم زير براي ساخت |PDF| در |AD-HOK| بهره بگيريد',
+    5 => 'بارگذاري ‌داكيومنت شما',
+    6 => 'لطفا تا هنگام لود شدن پرونده خود صبر كنيد',
+    7 => 'شما بايد راست كليك كنيد روي دكمه زير و انتخاب كنيد\'save target...\'يا \'save link location...\' براي ذخيره كردن داكيومنت خود',
+    8 => 'مسير داده شده در فايل پيكره بندي براي داكيومنت  |HTML| شما موجود نيست يل اين سيستم قادر به اجراي آن نميباشد . اگر اين  خطا ول كن شما نيست ! لطفا با ادمين سايت تماس بگيريد',
+    9 => ' توليد کننده PDF ',
+    10 => 'اين يك  ابزار توليد كننده پي دي اف به نام  | |Ad-hocميباشد . اين نرم افزار خواهد توانست|URL| داده شده از طرف شما را به |PDF| تبديل نمايد.ممكن است بعضي از صفحات قابل نمايش نباشند. اين نرم افزار يكسري محدوديت ها دارد . لطفا همه خطا ها را به رييس سايت منتقل نكنيد . وعبارات ساده را مورد استفاده قرار دهيدتا به مشكلي بر نخوريد',
+    11 => 'URL',
+    12 => 'ساختن PDF!',
+    13 => 'تنظيمات |PHP| اين سرور اجازه استفاده از دستور fopen()را نميدهد.با ادمين سايت تماس بگيريد',
+    14 => 'مورد درخواست شما وجود ندارد يا اينكه شما اجازه دسترسي به آن را نداريد و دسترسي شما غير قانوني ميباشد '
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/finnish.php 1.4.0sr5-1/cpanel-glprivate/language/finnish.php
--- 1.3.11sr1/cpanel-glprivate/language/finnish.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/finnish.php	2006-08-08 02:39:06.000000000 -0500
@@ -154,7 +154,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -321,7 +331,23 @@
     104 => 'Nyt linjalla -tila',
     105 => 'Ny Ket on linjalla -lohkossa',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -339,27 +365,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Verkkoresurssit',
-    2 => 'Ei nytettvi resursseja.',
-    3 => 'Lis linkki'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'ni tallennettu',
-    2 => 'nesi on tallennettu kyselyyn',
-    3 => 'nest',
-    4 => 'nestyksi jrjestelmss',
-    5 => 'nt',
-    6 => 'Nyt muut nestykset'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -460,7 +465,11 @@
     54 => 'Tulokset kommenteista',
     55 => 'lause',
     56 => 'JA',
-    57 => 'TAI'
+    57 => 'TAI',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -490,7 +499,14 @@
     21 => 'Nytt silt ettei sivustolla ole linkkej tai kukaan ei ole niit ladannut.',
     22 => 'Kymmenen postitetuinta artikkelia',
     23 => 'Lhetyksi',
-    24 => 'Nytt silt ettei kukaan ole lhettnyt shkpostitse artikkeleita sivustolta.'
+    24 => 'Nytt silt ettei kukaan ole lhettnyt shkpostitse artikkeleita sivustolta.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -643,7 +659,12 @@
     57 => 'Siirr lohkoa alaspin',
     58 => 'Siirr lohkoa ylspin',
     59 => 'Siirr lohko oikealle puolelle',
-    60 => 'Siirr lohko vasemmalle puolelle'
+    60 => 'Siirr lohko vasemmalle puolelle',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -678,35 +699,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Linkkieditori',
-    2 => '',
-    3 => 'Linkin otsikko',
-    4 => 'Linkin URL',
-    5 => 'Aihepiiri',
-    6 => '(sisllyt http://)',
-    7 => 'Muu',
-    8 => 'Osumia linkkiin',
-    9 => 'Linkin kuvaus',
-    10 => 'Syt linkin otsikko, URL ja kuvaus.',
-    11 => 'Linkkien hallinta',
-    12 => 'Klikkaa linkki muokataksesi tai poistaaksesi sen. Luodaksesi uuden, klikkaa uusi linkki ylhlt.',
-    13 => 'Linkin otsikko',
-    14 => 'Linkin aihepiiri',
-    15 => 'Linkin URL',
-    16 => 'Psy kielletty',
-    17 => "Olet muokkaamassa linkki johon sinulla ei ole oikeuksia. Yritys on kirjattu logiin. <a href=\"{$_CONF['site_admin_url']}/link.php\">Siirry takaisin linnkien hallinnan ruutuun</a>.",
-    18 => 'Uusi linkki',
-    19 => 'Yllpidon sivu',
-    20 => 'Jos muu, tarkenna',
-    21 => 'tallenna',
-    22 => 'peruuta',
-    23 => 'poista'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -729,16 +721,16 @@
     17 => 'Leipteksti',
     18 => 'Osumia',
     19 => 'Kommentteja',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Lista artikkeleista',
     23 => 'Muokataksesi tai poistaaksesi artikkelin, klikkaa artikkelin numeroa. Nhdksesi artikkelin, klikkaa haluamaasi otsikkoa. Luodaksesi uuden artikkelin, valitse uusi artikkeli.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Artikkelin esikatselu',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Tiedoston lhetys-virhe',
     31 => 'Tyt otsikko ja alkuteksti kentt',
     32 => 'Erikoisartikkeli',
@@ -771,39 +763,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Tila',
-    2 => 'Syt kysymys ja ainakin yksi vastaus.',
-    3 => 'Kysely luotu',
-    4 => 'Kysely %s tallennettu',
-    5 => 'Muokkaa kysely',
-    6 => 'Kyselyn ID',
-    7 => '(l kyt vlilyntej)',
-    8 => 'Nytetn etusivulla',
-    9 => 'Kysymys',
-    10 => 'Kysymykset / net',
-    11 => 'Tapahtui virhe vastauksen saamiseksi kyselyyn %s',
-    12 => 'Tapahtui virhe kysymyksen saamisessa kyselyyn %s',
-    13 => 'Luo kysely',
-    14 => 'tallenna',
-    15 => 'peruuta',
-    16 => 'poista',
-    17 => 'Syt kyselyn ID',
-    18 => 'Lista kyselyist',
-    19 => 'Valitse kysely muokataksesi tai poistaaksesi sen. Luodaksesi uuden kyselyn, valitse uusi kysely.',
-    20 => 'nestji',
-    21 => 'Psy kielletty',
-    22 => "Olet pyrkimss nestykseen johon sinulla ei ole oikeuksia. Yritys on kirjattu lokitiedostoon. <a href=\"{$_CONF['site_admin_url']}/poll.php\">Siirry takaisin nestysten hallintaan</a>.",
-    23 => 'Uusi kysely',
-    24 => 'Yllpidon sivu',
-    25 => 'Kyll',
-    26 => 'Ei'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -835,7 +818,10 @@
     23 => 'tee tst oletus aihe uusille artikkeleille',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -877,7 +863,18 @@
     33 => 'lhet',
     34 => 'Virhe: valitse lhetettv tiedosto.',
     35 => 'Viimeksi kirjautunut',
-    36 => '(ei koskaan)'
+    36 => '(ei koskaan)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1022,7 +1019,11 @@
     31 => 'Oletko varma ett haluat poistaa laajennuksen? Poistamalla poistat mys kaiken tiedot ja tietorakenteen jotka liittyvt thn laajennukseen. Jos olet varma, valitse poista uudelleen alta lytyvst lomakkeesta.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1065,7 +1066,15 @@
     39 => 'Tyt sytteen otsikko, kuvaus ja tiedoston nimi.',
     40 => 'Syt kirjauksien mr tai tuntien lukumr.',
     41 => 'Linkit',
-    42 => 'Tapahtumat'
+    42 => 'Tapahtumat',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1132,7 +1141,21 @@
     58 => 'Sytteesi on tallennettu.',
     59 => 'Syte on poistettu.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1192,7 +1215,16 @@
     'availmembers' => 'Saatavilla olevat jsenet',
     'groupmembers' => 'Ryhmn jsenet',
     'canteditgroup' => 'Sinun tulee olla ryhmn jsen muokataksesi tt ryhm. Jos tm tuntuu virheelt, ota yhteytt jrjestelmn yllpitoon.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1202,7 +1234,6 @@
     'last_ten_backups' => 'Viimeiset 10 varmuuskopiota',
     'do_backup' => 'Tee varmuuskopio',
     'backup_successful' => 'Tietokannan varmistus onnistui.',
-    'no_backups' => 'Ei varmuuskopioita jrjestelmss',
     'db_explanation' => 'Luodaksesi uuden varmuuskopion Geeklogista, klikkaa alta lytyv nappia',
     'not_found' => "Viallinen polku tai mysqldump apuohjelma ei ole suoritettavissa.<br>Tarkista <strong>\$_DB_mysqldump_path</strong> mritys config.php -tiedostossa.<br>Muuttujan nykyinen mrittely: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Varmuuskopiointi eponnistui: tiedoston koko 0 tavua',
@@ -1226,7 +1257,8 @@
     7 => 'Sivuston tilastot',
     8 => 'Mukauta',
     9 => 'Etsi',
-    10 => 'laajennettu haku'
+    10 => 'laajennettu haku',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1268,4 +1300,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/finnish_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/finnish_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/finnish_utf-8.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/finnish_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -156,7 +156,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -323,7 +333,23 @@
     104 => 'Näytä linjalla -tila',
     105 => 'Näy Ketä on linjalla -lohkossa',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -341,27 +367,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Verkkoresurssit',
-    2 => 'Ei näytettäviä resursseja.',
-    3 => 'Lisää linkki'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Ääni tallennettu',
-    2 => 'Äänesi on tallennettu kyselyyn',
-    3 => 'Äänestä',
-    4 => 'Äänestyksiä järjestelmässä',
-    5 => 'Ääntä',
-    6 => 'Näytä muut äänestykset'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -462,7 +467,11 @@
     54 => 'Tulokset kommenteista',
     55 => 'lause',
     56 => 'JA',
-    57 => 'TAI'
+    57 => 'TAI',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -492,7 +501,14 @@
     21 => 'Näyttää siltä ettei sivustolla ole linkkejä tai kukaan ei ole niitä ladannut.',
     22 => 'Kymmenen postitetuinta artikkelia',
     23 => 'Lähetyksiä',
-    24 => 'Näyttää siltä ettei kukaan ole lähettänyt sähköpostitse artikkeleita sivustolta.'
+    24 => 'Näyttää siltä ettei kukaan ole lähettänyt sähköpostitse artikkeleita sivustolta.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -645,7 +661,12 @@
     57 => 'Siirrä lohkoa alaspäin',
     58 => 'Siirrä lohkoa ylöspäin',
     59 => 'Siirrä lohko oikealle puolelle',
-    60 => 'Siirrä lohko vasemmalle puolelle'
+    60 => 'Siirrä lohko vasemmalle puolelle',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -680,35 +701,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Linkkieditori',
-    2 => '',
-    3 => 'Linkin otsikko',
-    4 => 'Linkin URL',
-    5 => 'Aihepiiri',
-    6 => '(sisällytä http://)',
-    7 => 'Muu',
-    8 => 'Osumia linkkiin',
-    9 => 'Linkin kuvaus',
-    10 => 'Syötä linkin otsikko, URL ja kuvaus.',
-    11 => 'Linkkien hallinta',
-    12 => 'Klikkaa linkkiä muokataksesi tai poistaaksesi sen. Luodaksesi uuden, klikkaa uusi linkki ylhäältä.',
-    13 => 'Linkin otsikko',
-    14 => 'Linkin aihepiiri',
-    15 => 'Linkin URL',
-    16 => 'Pääsy kielletty',
-    17 => "Olet muokkaamassa linkkiä johon sinulla ei ole oikeuksia. Yritys on kirjattu logiin. <a href=\"{$_CONF['site_admin_url']}/link.php\">Siirry takaisin linnkien hallinnan ruutuun</a>.",
-    18 => 'Uusi linkki',
-    19 => 'Ylläpidon sivu',
-    20 => 'Jos muu, tarkenna',
-    21 => 'tallenna',
-    22 => 'peruuta',
-    23 => 'poista'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -731,16 +723,16 @@
     17 => 'Leipäteksti',
     18 => 'Osumia',
     19 => 'Kommentteja',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Lista artikkeleista',
     23 => 'Muokataksesi tai poistaaksesi artikkelin, klikkaa artikkelin numeroa. Nähdäksesi artikkelin, klikkaa haluamaasi otsikkoa. Luodaksesi uuden artikkelin, valitse uusi artikkeli.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Artikkelin esikatselu',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Tiedoston lähetys-virhe',
     31 => 'Täytä otsikko ja alkuteksti kentät',
     32 => 'Erikoisartikkeli',
@@ -773,39 +765,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Tila',
-    2 => 'Syötä kysymys ja ainakin yksi vastaus.',
-    3 => 'Kysely luotu',
-    4 => 'Kysely %s tallennettu',
-    5 => 'Muokkaa kyselyä',
-    6 => 'Kyselyn ID',
-    7 => '(älä käytä välilyöntejä)',
-    8 => 'Näytetään etusivulla',
-    9 => 'Kysymys',
-    10 => 'Kysymykset / Äänet',
-    11 => 'Tapahtui virhe vastauksen saamiseksi kyselyyn %s',
-    12 => 'Tapahtui virhe kysymyksen saamisessa kyselyyn %s',
-    13 => 'Luo kysely',
-    14 => 'tallenna',
-    15 => 'peruuta',
-    16 => 'poista',
-    17 => 'Syötä kyselyn ID',
-    18 => 'Lista kyselyistä',
-    19 => 'Valitse kysely muokataksesi tai poistaaksesi sen. Luodaksesi uuden kyselyn, valitse uusi kysely.',
-    20 => 'Äänestäjiä',
-    21 => 'Pääsy kielletty',
-    22 => "Olet pyrkimässä äänestykseen johon sinulla ei ole oikeuksia. Yritys on kirjattu lokitiedostoon. <a href=\"{$_CONF['site_admin_url']}/poll.php\">Siirry takaisin äänestysten hallintaan</a>.",
-    23 => 'Uusi kysely',
-    24 => 'Ylläpidon sivu',
-    25 => 'Kyllä',
-    26 => 'Ei'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -837,7 +820,10 @@
     23 => 'tee tästä oletus aihe uusille artikkeleille',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -879,7 +865,18 @@
     33 => 'lähetä',
     34 => 'Virhe: valitse lähetettävä tiedosto.',
     35 => 'Viimeksi kirjautunut',
-    36 => '(ei koskaan)'
+    36 => '(ei koskaan)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1024,7 +1021,11 @@
     31 => 'Oletko varma että haluat poistaa laajennuksen? Poistamalla poistat myös kaiken tiedot ja tietorakenteen jotka liittyvät tähän laajennukseen. Jos olet varma, valitse poista uudelleen alta löytyvästä lomakkeesta.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1067,7 +1068,15 @@
     39 => 'Täytä syötteen otsikko, kuvaus ja tiedoston nimi.',
     40 => 'Syötä kirjauksien määrä tai tuntien lukumäärä.',
     41 => 'Linkit',
-    42 => 'Tapahtumat'
+    42 => 'Tapahtumat',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1134,7 +1143,21 @@
     58 => 'Syötteesi on tallennettu.',
     59 => 'Syöte on poistettu.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1194,7 +1217,16 @@
     'availmembers' => 'Saatavilla olevat jäsenet',
     'groupmembers' => 'Ryhmän jäsenet',
     'canteditgroup' => 'Sinun tulee olla ryhmän jäsen muokataksesi tätä ryhmää. Jos tämä tuntuu virheeltä, ota yhteyttä järjestelmän ylläpitoon.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1204,9 +1236,8 @@
     'last_ten_backups' => 'Viimeiset 10 varmuuskopiota',
     'do_backup' => 'Tee varmuuskopio',
     'backup_successful' => 'Tietokannan varmistus onnistui.',
-    'no_backups' => 'Ei varmuuskopioita järjestelmässä',
     'db_explanation' => 'Luodaksesi uuden varmuuskopion Geeklogista, klikkaa alta löytyvää nappia',
-    'not_found' => "Viallinen polku tai mysqldump apuohjelma ei ole suoritettavissa.<br>Tarkista <strong>$_DB_mysqldump_path</strong> määritys config.php -tiedostossa.<br>Muuttujan nykyinen määrittely: <var>{$_DB_mysqldump_path}</var>",
+    'not_found' => "Viallinen polku tai mysqldump apuohjelma ei ole suoritettavissa.<br>Tarkista <strong>\$_DB_mysqldump_path</strong> määritys config.php -tiedostossa.<br>Muuttujan nykyinen määrittely: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Varmuuskopiointi epäonnistui: tiedoston koko 0 tavua',
     'path_not_found' => "{$_CONF['backup_path']} ei ole olemassa tai ei ole hakemisto",
     'no_access' => "VIRHE: Hakemisto {$_CONF['backup_path']} ei ole saatavilla.",
@@ -1228,7 +1259,8 @@
     7 => 'Sivuston tilastot',
     8 => 'Mukauta',
     9 => 'Etsi',
-    10 => 'laajennettu haku'
+    10 => 'laajennettu haku',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1270,4 +1302,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/french_canada.php 1.4.0sr5-1/cpanel-glprivate/language/french_canada.php
--- 1.3.11sr1/cpanel-glprivate/language/french_canada.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/french_canada.php	2006-08-08 02:39:06.000000000 -0500
@@ -156,7 +156,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -323,7 +333,23 @@
     104 => 'Affichez votre pr&eacute;sence en ligne',
     105 => 'Affichez ma pr&eacute;sence dans le bloc &laquo;En ligne&raquo;',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -341,27 +367,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Ressources Internet',
-    2 => 'Il n\'y a aucune ressource &agrave; afficher',
-    3 => 'Ajoutez un lien'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Vote enregistr&eacute;',
-    2 => 'Votre vote a &eacute;t&eacute; comptabilis&eacute;',
-    3 => 'Voter',
-    4 => 'Sondages existants',
-    5 => 'Votes',
-    6 => 'Voyez les autres questions sond&eacute;es'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -462,7 +467,11 @@
     54 => 'R&eacute;sultats de commentaires',
     55 => 'la phrase',
     56 => 'ET',
-    57 => 'OU'
+    57 => 'OU',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -492,7 +501,14 @@
     21 => 'Soit il n\'y a encore aucun lien, soit personne n\'a encore cliqu&eacute; dessus',
     22 => 'Top-10 des articles les plus envoy&eacute;s par courriel',
     23 => 'Courriels',
-    24 => 'Personne n\'a encore envoy&eacute; d\'article par courriel'
+    24 => 'Personne n\'a encore envoy&eacute; d\'article par courriel',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -645,7 +661,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -680,35 +701,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editeur de liens',
-    2 => 'CNT 2',
-    3 => 'Titre',
-    4 => 'URL',
-    5 => 'Cat&eacute;gorie',
-    6 => '(http:// inclus)',
-    7 => 'Autre',
-    8 => 'Nombre de s&eacute;lection',
-    9 => 'Description',
-    10 => 'Vous devez saisir un titre, une URL et une description.',
-    11 => 'Contr&ocirc;leur de lien',
-    12 => 'Cliquez sur le lien ci-dessous pour modifier ou supprimer un lien.  Cliquez sur Nouveau Lien pour cr&eacute;er un lien.',
-    13 => 'Titre',
-    14 => 'Cat&eacute;gorie',
-    15 => 'URL',
-    16 => 'Acc&egrave;s interdit',
-    17 => "Vous essayez d'acc&eacute;der &agrave; un lien auquel vous n'avez pas les droits.  Cette tentative est enregistr&eacute;e. Veuillez <a href=\'{$_CONF['site_admin_url']}/link.php\'>retourner &agrave; la page de controle des liens</a>.",
-    18 => 'Nouveau lien',
-    19 => 'Accueil Admin',
-    20 => 'Si autre, pr&eacute;cisez',
-    21 => 'enregistrer',
-    22 => 'annuler',
-    23 => 'supprimer'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -731,16 +723,16 @@
     17 => 'Texte int&eacute;gral',
     18 => 'Clics',
     19 => 'Commentaires',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Liste des articles',
     23 => 'Pour modifier ou supprimer un article, cliquez sur son num&eacute;ro. Pour visionner un article, cliquez sur le titre de l\'article. Pour cr&eacute;er un nouvel article, cliquez sur le bouton &eacute;crire un article.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Aper&ccedil;u de l\'article',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Veuillez inscrire le titre et le texte d\'introduction.',
     32 => 'Tte d\'affiche',
@@ -773,39 +765,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Pri&egrave;re d\'inscrire une question et au moins un choix de r&eacute;ponse',
-    3 => 'Sondage cr&eacute;&eacute;',
-    4 => 'Sondage %s enregistr&eacute;',
-    5 => 'Modifier sondage',
-    6 => 'N&deg; de sondage',
-    7 => '(ne pas utiliser d\'espaces)',
-    8 => 'Appara&icirc;t sur la page d\'accueil',
-    9 => 'Question',
-    10 => 'R&eacute;ponses / Votes',
-    11 => 'Une erreur s\'est produite lors de l\'obtention des r&eacute;ponses du sondage %s',
-    12 => 'Une erreur s\'est produite lors de l\'obtention des questions du sondage %s',
-    13 => 'Nouveau Sondage',
-    14 => 'Enregistrer',
-    15 => 'Annuler',
-    16 => 'Supprimer',
-    17 => 'Pri&egrave;re d\'inscrire un n&deg; de sondage',
-    18 => 'Liste des sondages',
-    19 => 'Cliquez sur un sondage pour le modifier ou le supprimer.  Cliquez sur Nouveau Sondage pour cr&eacute;er un sondage.',
-    20 => 'Votants',
-    21 => 'Acc&egrave;s interdit',
-    22 => "vous essayez d'acc&eacute;der &agrave; un sondage auquel vous n'avez pas droit.  Cette tentative est enregistr&eacute;e. Veuillez <a href=\'{$_CONF['site_admin_url']}/poll.php\'>retourner &agrave; la page de contr&ocirc;le des sondages</a>.",
-    23 => 'Nouveau Sondage',
-    24 => 'Accueil Admin',
-    25 => 'Oui',
-    26 => 'Non'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -837,7 +820,10 @@
     23 => 'Faites de ce sujet le choix par d&eacute;faut pour la cr&eacute;ation de nouveaux articles',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -879,7 +865,18 @@
     33 => 'envoyer',
     34 => 'Erreur: Vous devez pr&eacute;ciser un fichier &agrave; t&eacute;l&eacute;charger.',
     35 => 'Dernier acc&egrave;s',
-    36 => '(jamais)'
+    36 => '(jamais)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1024,7 +1021,11 @@
     31 => 'Etes-vous s&ucircr de vouloir supprimer ce plugin? Toutes les donn&eacute;es, fiches et structures utilis&eacute;s par ce plugin seront d&eacute;truites.  Si vous tes certain de vouloir supprimer le plugin, cliquez sur le bouton &laquo;Supprimer&raquo;.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1067,7 +1068,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1134,7 +1143,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1194,7 +1217,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1204,7 +1236,6 @@
     'last_ten_backups' => '10 dernieres sauvegardes',
     'do_backup' => 'Faire une sauvegarde',
     'backup_successful' => 'Sauvegarde de la base de donn&eacute;e effectu&eacute;e avec succ&egrave;s',
-    'no_backups' => 'Aucune sauvegarde dans le syst&egrave;me',
     'db_explanation' => 'Cliquez sur le bouton ci-dessous pour effectuer une sauvegarde de votre syst&egrave;me Geeklog',
     'not_found' => "Chemin incorecte ou le fichier mysqldump n'est pas ex&eacute;cutable.<br>V&eacute;rifiez le param&egrave;tre <strong>\$_DB_mysqldump_path</strong> dans le fichier config.php.<br>Ce param&egrave;tre est actuellement positionn&eacute; &agrave; : <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Sauvegarde &eacute;chou&eacute;e: la taille du fichier &eacute;tait de 0 octets.',
@@ -1228,7 +1259,8 @@
     7 => 'Statistiques du site',
     8 => 'Personnaliser',
     9 => 'Chercher',
-    10 => 'Recherche avanc&eacute;e'
+    10 => 'Recherche avanc&eacute;e',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1270,4 +1302,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/french_canada_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/french_canada_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/french_canada_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/french_canada_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1511 @@
+<?php
+
+###############################################################################
+# french_canada.php
+# This is a french language version for GeekLog!
+#
+#
+# Copyright (C) 2003 Jean-Francois Allard
+# jfallard@jfallard.com
+#
+# Original translation work by Florent Guiliani
+# flyer@perinfo.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Contribution de:',
+    2 => 'suppl&eacute;ment d\'info',
+    3 => 'commentaires',
+    4 => 'Modifier',
+    5 => 'Voter',
+    6 => 'R&eacute;sultats',
+    7 => 'R&eacute;sultats du sondage',
+    8 => 'votes',
+    9 => 'Fonctions Admin:',
+    10 => 'Propositions',
+    11 => 'Articles',
+    12 => 'Blocs',
+    13 => 'Sujets',
+    14 => 'Liens',
+    15 => 'Activit&eacute;s',
+    16 => 'Sondages',
+    17 => 'Membres',
+    18 => 'Requête SQL',
+    19 => 'Se d&eacute;connecter',
+    20 => 'Infos personnelles:',
+    21 => 'Nom d\'utilisateur',
+    22 => 'Num&eacute;ro d\'utilisateur:',
+    23 => 'Niveau de s&eacute;curit&eacute;',
+    24 => 'Anonyme',
+    25 => 'R&eacute;pondre',
+    26 => 'Ce site n\'est pas responsable du contenu des commentaires. Ceux-ci sont de la responsabilit&eacute; des auteurs',
+    27 => 'Commentaire le plus r&eacute;cent',
+    28 => 'Effacer',
+    29 => 'Aucuns commentaires.',
+    30 => 'Vieux articles',
+    31 => 'Balises HTML autoris&eacute;es:',
+    32 => 'Erreur: Nom d\'utilisateur erron&eacute;',
+    33 => 'Erreur: Impossibilit&eacute; d\'enregistrer la r&eacute;f&eacute;rence',
+    34 => 'Erreur',
+    35 => 'Se d&eacute;connecter',
+    36 => 'sur',
+    37 => 'Aucun article d\'utilisateur',
+    38 => '(CNT 38)',
+    39 => 'Rafra&icirc;chir',
+    40 => '(CNT 40)',
+    41 => 'Visiteur(s)',
+    42 => 'Cr&eacute;&eacute; par:',
+    43 => 'Pour y r&eacute;pondre',
+    44 => 'Parent',
+    45 => 'Num&eacute;ro d\'erreur MySQL',
+    46 => 'Message d\'erreur MySQL',
+    47 => 'Espace Membres',
+    48 => 'Informations personnelles',
+    49 => 'Pr&eacute;f&eacute;rences d\'affichage',
+    50 => 'Erreur dans la requête SQL',
+    51 => 'aide',
+    52 => 'Nouveau',
+    53 => 'Centre administratif',
+    54 => 'Fichier impossible &agrave; ouvrir.',
+    55 => 'Erreur &agrave;',
+    56 => 'Voter',
+    57 => 'Mot de passe',
+    58 => 'Connexion',
+    59 => "Pas encore de compte?  Enregistrez-vous comme <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nouveau membre</a>",
+    60 => 'Ajouter un commentaire',
+    61 => 'Cr&eacute;er un nouveau compte',
+    62 => 'mots',
+    63 => 'Commentaires pr&eacute;f&eacute;r&eacute;s',
+    64 => 'Envoyer cet article &agrave; un ami',
+    65 => 'Version imprimable',
+    66 => 'Mon calendrier',
+    67 => 'Bienvenue chez ',
+    68 => 'entr&eacute;e',
+    69 => 'contact',
+    70 => 'chercher',
+    71 => 'contribuer',
+    72 => 'ressources internet',
+    73 => 'sondages pr&eacute;c&eacute;dents',
+    74 => 'calendrier',
+    75 => 'recherche avanc&eacute;e',
+    76 => 'statistiques du site',
+    77 => 'Plugins',
+    78 => 'Pour bient&ocirc;t',
+    79 => 'Quoi de neuf ?',
+    80 => 'derniers articles',
+    81 => 'dernier article',
+    82 => 'heures',
+    83 => 'COMMENTAIRES',
+    84 => 'LIENS',
+    85 => 'derni&egrave;res 48 heures',
+    86 => 'Pas de nouveau commentaires',
+    87 => '2 derni&egrave;res semaines',
+    88 => 'Pas de liens r&eacute;cents',
+    89 => 'Il n\'y a pas d\'&eacute;v&egrave;nement &agrave; venir',
+    90 => 'Entr&eacute;e',
+    91 => 'Page g&eacute;n&eacute;r&eacute;e en',
+    92 => 'secondes',
+    93 => 'Tout droits r&eacute;serv&eacute;s',
+    94 => 'Toutes les marques cit&eacute;es apartiennent &agrave; leurs propri&eacute;taires respectifs.',
+    95 => 'G&eacute;n&eacute;r&eacute; par',
+    96 => 'Groupes',
+    97 => 'Liste de mots',
+    98 => 'Plug-ins',
+    99 => 'ARTICLES',
+    100 => 'Pas de nouveaux articles',
+    101 => 'Vos activit&eacute;s',
+    102 => 'Activit&eacute;s g&eacute;n&eacute;rales',
+    103 => 'Sauvegarde de la BDD',
+    104 => 'par',
+    105 => 'Courriel aux membres',
+    106 => 'Vu',
+    107 => 'MAJ de GL',
+    108 => 'Vider la cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendrier des activit&eacute;s',
+    2 => 'D&eacute;sol&eacute; il n\'y a pas d\'activit&eacute; &agrave; afficher.',
+    3 => 'Quand',
+    4 => 'O&ugrave;',
+    5 => 'Description',
+    6 => 'Ajouter une activit&eacute;',
+    7 => 'Prochaine activit&eacute;',
+    8 => 'En ajoutant cette activit&eacute; au calendrier vous pouvez visionnez rapidement les activit&eacute;s qui vous int&eacute;ressent en cliquant sur &laquo;Mon Calendrier&raquo; dans le cadre &laquo;Fonctions membres&raquo;.',
+    9 => 'Ajouter &agrave; mon calendrier',
+    10 => 'Retirer de mon calendrier',
+    11 => "Ajouter l'activit&eacute; au clendrier de {$_USER['username']}",
+    12 => 'Activit&eacute;',
+    13 => 'Commence',
+    14 => 'Fini',
+    15 => 'Retour au calendrier'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Ajouter un commentaire',
+    2 => 'Format',
+    3 => 'Se d&eacute;connecter',
+    4 => 'Cr&eacute;er un compte',
+    5 => 'Nom d\'utilisateur',
+    6 => 'L\'envoi d\'un commentaire requiers que vous soyez enregistr&eacute; et connect&eacute;. Si vous n\'avez pas encore de compte, vous pouvez vous inscrire &agrave; l\'aide du formulaire ci-dessous.',
+    7 => 'Votre dernier commentaire &eacute;tait il y a ',
+    8 => " secondes. Vous devez attendre au moins {$_CONF['commentspeedlimit']} secondes entre chaque commentaire.",
+    9 => 'Commenter',
+    10 => 'CNT 10',
+    11 => 'Envoyer le commentaire',
+    12 => 'Vous devez obligatoirement compl&eacute;ter les champs Titre et Commentaire avant d\'envoyer.',
+    13 => 'Vos infos',
+    14 => 'Aper&ccedil;u',
+    15 => 'CNT 15',
+    16 => 'Titre',
+    17 => 'Erreur',
+    18 => 'Remarque importante',
+    19 => 'Essayez de respecter le sujet de l\'article dans votre r&eacute;ponse.',
+    20 => 'Essayez de r&eacute;pondre aux commentaires des autres plut&ocirc;t qu\'&agrave; l\'article lui même.',
+    21 => 'Lisez tous les messages des autres avant d\'envoyer votre propre message afin faire de r&eacute;p&eacute;tition.',
+    22 => 'Veuillez utiliser un titre en lien avec votre message.',
+    23 => 'Votre adresse courriel NE SERA PAS rendue publique.',
+    24 => 'Utilisateur anonyme',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profil membre de',
+    2 => 'Nom d\'utilisateur',
+    3 => 'Nom complet',
+    4 => 'Mot de passe',
+    5 => 'Courriel',
+    6 => 'Site Internet',
+    7 => 'Biographie',
+    8 => 'Cl&eacute; PGP',
+    9 => 'Mettre &agrave; jour',
+    10 => 'Les 10 derniers commentaires de l\'utilisateur',
+    11 => 'Aucun commentaire',
+    12 => 'Pr&eacute;f&eacute;rences d\'utilisation de',
+    13 => 'Courriel temporis&eacute; la nuit',
+    14 => 'Ce mot de passe a &eacute;t&eacute; g&eacute;n&eacute;r&eacute; automatiquement. Il est recommend&eacute; que vous le changiez imm&eacute;diatement. Pour ce faire, connectez-vous et cliquez sur &laquo;informations personnelles&raquo; dans le menu &laquo;membre&raquo;.',
+    15 => "Votre compte, nomm&eacute; {$_CONF['site_name']}, a &eacute;t&eacute; cr&eacute;&eacute; avec succ&egrave;s. Vous devez utiliser les informations ci-dessous pour vous connecter. Veuillez sauvegarder ce message pour vous y r&eacute;f&eacute;rer.",
+    16 => 'Informations sur votre compte',
+    17 => 'Ce compte n\'existe pas',
+    18 => 'L\'adresse courriel semble ne pas être valide.',
+    19 => 'L\'adresse courriel fournie est d&eacute;ja utilis&eacute;e par un autre membre.',
+    20 => 'L\'adresse courriel fournie ne semble pas être valide.',
+    21 => 'Erreur',
+    22 => "Enregistrez-vous avec {$_CONF['site_name']}!",
+    23 => "Apres avoir cr&eacute;&eacute; votre compte {$_CONF['site_name']} vous pourrez envoyer des commentaires et d'autres &eacute;l&eacute;ments. Si vous n'avez pas de compte, vous ne pourrez seulement qu'envoyer des commentaires anonymes. Votre adresse courriel ne sera jamais publi&eacute;e sur ce site.",
+    24 => 'Le mot de passe vous sera envoy&eacute; par courriel &agrave; l\'adresse enregistr&eacute;e.',
+    25 => 'Avez-vous oubli&eacute; votre mot de passe?',
+    26 => 'Saisissez <em>soit</em> votre nom d\'utilisateur <em>soit</em> l\'adresse courriel enregistr&eacute;e &agrave; ce compte, et cliquez &laquo;Envoi du mot de passe&raquo;. Des instructions &agrave; suivre concernant l\'enregistrement d\'un nouveau mot de passe vous seront adress&eacute;es par courriel.',
+    27 => 'Enregistrez-vous maintenant!',
+    28 => 'Envoi du mot de passe',
+    29 => 'd&eacute;connect&eacute; de',
+    30 => 'connect&eacute; &agrave;',
+    31 => 'Vous devez être connect&eacute; pour ex&eacute;cuter cette fonction',
+    32 => 'Signature',
+    33 => 'Jamais affich&eacute;e publiquement',
+    34 => 'Votre nom v&eacute;ritable',
+    35 => 'Entrez votre mot de passe afin de le changer',
+    36 => 'Commence par http://',
+    37 => 'Appliquer &agrave; vos commentaires',
+    38 => 'Tout sur vous! Accessible par tous',
+    39 => 'Votre cl&eacute; puplique PGP &agrave; partager',
+    40 => 'Pas d\'ic&ocirc;ne de sujet',
+    41 => 'En attente d\'autorisation',
+    42 => 'Format de date',
+    43 => 'Nombre maximal d\'articles',
+    44 => 'Pas de bo&icirc;tes',
+    45 => 'Pr&eacute;f&eacute;rences d\'affichage pour',
+    46 => 'El&eacute;ments &agrave; exclure pour',
+    47 => 'Configuration de la bo&icirc;te des Nouvelles pour',
+    48 => 'Sujets',
+    49 => 'Pas d\'ic&ocirc;ne dans les articles',
+    50 => 'D&eacute;cocher les cases si vous n\'êtes pas inter&eacute;ss&eacute;',
+    51 => 'Seulement les articles de Nouvelles',
+    52 => 'Par d&eacute;faut',
+    53 => 'Recevoir les articles du jour chaque nuit',
+    54 => 'Cocher les cases pour les auteurs et les articles que vous ne voulez pas voir appara&icirc;tre',
+    55 => 'Si vous laissez toutes les cases d&eacute;coch&eacute;es, cela signifie que vous souhaitez la s&eacute;lection par d&eacute;faut. Si vous s&eacute;lectionnez au moins une case, n\'oubliez pas de s&eacute;lectionner toutes celles qui vous int&eacute;ressent car les autres seront ignor&eacute;es. Les cases s&eacute;lectionn&eacute;es par d&eacute;faut apparaissent en gras.',
+    56 => 'Auteur',
+    57 => 'Format',
+    58 => 'Ordre de tri',
+    59 => 'Nombre maximum de commentaires',
+    60 => 'Comment souhaitez vous que vos commentaires appara&icirc;ssent?',
+    61 => 'Les plus r&eacute;cents ou les plus anciens en premier?',
+    62 => '100 par d&eacute;faut',
+    63 => "Votre mot de passe vous a &eacute;t&eacute; envoy&eacute; par courriel et ne devrait pas tarder. Suivez les instructions du message et encore merci d'utiliser {$_CONF['site_name']}",
+    64 => 'Pr&eacute;f&eacute;rences des commentaires pour',
+    65 => 'Essayez de vous connecter &agrave; nouveau',
+    66 => "Vous avez peut-être mal saisi le nom de votre compte. Essayer encore de vous connecter &agrave; l'aide du formulaire ci-dessous. Pas encore membre? Inscrivez-vous comme <a href=\"{$_CONF['site_url']}/users.php?mode=new\">ici</a>?",
+    67 => 'Membre depuis',
+    68 => 'S\'en souvenir pour moi',
+    69 => 'Combien de temps devrions-nous garder votre connection  active?',
+    70 => "Personnaliser l'aspect et le contenu de {$_CONF['site_name']}",
+    71 => "Une fonctionnalit&eacute; int&eacute;ressante de {$_CONF['site_name']} est que vous pouvez en personnaliser l'aspect et le contenu. Afin de pouvoir utiliser ces fonctionnalit&eacute;s vous devez vous <a href=\"{$_CONF['site_url']}/users.php?mode=new\">enregistrer</a> au pr&egrave;s de {$_CONF['site_name']}.  Vous êtes d&eacute;j&agrave; membre?  Alors utilisez la passerelle de connection dans la barre de gauche pour vous connecter!",
+    72 => 'Aspect',
+    73 => 'Langue',
+    74 => 'Changez l\'aspect de ce site!',
+    75 => 'Envoyez des courriel &agrave; ces sujets',
+    76 => 'Si vous s&eacute;lectionnez un (des) sujet(s) parmi ceux ci-dessous, vous recevrez par courriel &agrave; la fin de chaque journ&eacute;e (vers 22H) les nouveaux articles concerant ces sujets. Choisissez uniquement les sujets qui vous int&eacute;ressent !',
+    77 => 'Photo',
+    78 => 'Ajouter votre propre photo!',
+    79 => 'Cochez ici pour effacer cette photo',
+    80 => 'Nom de connexion',
+    81 => 'Envoyer courriel',
+    82 => '10 derniers article du membre',
+    83 => 'Statistiques du membre',
+    84 => 'Nombre total d\'articles:',
+    85 => 'Nombre total de commentaires:',
+    86 => 'Chercher les articles par',
+    87 => 'Votre nom de membre',
+    88 => "Quelqu'un (possiblement vous-même) avez demand&eacute; un nouveau mot de passe pour le compte '%s' sur {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSi vous d&eacute;sirez r&eacute;ellement que cette action soit entreprise, nous vous prions de cliquer sur ce lien:\n\n",
+    89 => "Pour refuser d\'entreprendre cette action, vous n\'avez simplement qu\'&agrave; ignorer ce message, ainsi aucune nouvelle action ne sera alors entreprise (votre mot de passe demeurera inchang&eacute;).\n\n",
+    90 => 'Vous pouvez choisir un nouveau mot de passe pour le compte ci-dessous. Pri&egrave;re de noter que l\'ancien mot de passe demeurera actif jusqu\'&agrave; ce que vous soumettiez ce formulaire.',
+    91 => 'R&eacute;glez le nouveau mot de passe',
+    92 => 'Entrez le nouveau mot de passe',
+    93 => 'Votre derni&egrave;re requête pour l\'obtention d\'un nouveau mot de passe &eacute;tait il y a %d secondes de cela. Ce site requiers que s\'&eacute;coule au moins %d secondes entre les requêtes de nouveaux mots de passe.',
+    94 => 'Effacer le compte "%s"',
+    95 => 'Cliquez sur "Effacer le compte" ci-dessous pour effacer votre compte de notre banque de donn&eacute;es. Notez que toutes vos interventions sur ce site seront conserv&eacute;es, &eacute;tant attribu&eacute;es &agrave; un utilisateur &laquo;Anonyme&raquo; en remplacement de votre nom de membre.',
+    96 => 'effacer le compte',
+    97 => 'Confirmez l\'effacement de votre compte',
+    98 => 'Êtes-vous certain de vouloir effacer ce compte? Car ce faisant, vous ne pourrez alors plus acc&eacute;der aux fonctions de ce site (sauf en cr&eacute;ant un nouveau compte). Si vous en êtes certain, cliquez alors sur "effacer le compte" une derni&egrave;re fois ci-dessous.',
+    99 => 'Options de s&eacute;curit&eacute; pour',
+    100 => '&eacute;crivez &agrave; l\'administrateur du site',
+    101 => 'Autorisez les courriels provenant de l\'administrateur du site',
+    102 => 'Courriels des membres',
+    103 => 'Allouez la r&eacute;ception de courriels provenant d\'autre membres',
+    104 => 'Affichez votre pr&eacute;sence en ligne',
+    105 => 'Affichez ma pr&eacute;sence dans le bloc &laquo;En ligne&raquo;',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Aucun article &agrave; afficher',
+    2 => 'Il n\'y a pas de nouveaux articles &agrave; afficher. Il n\'y a peut-être pas de nouveaut&eacute;s pour ce sujet ou alors vos pr&eacute;f&eacute;rences sont trop restrictives.',
+    3 => ' pour le sujet %s',
+    4 => 'Article du jour',
+    5 => 'Suivant',
+    6 => 'Pr&eacute;c&eacute;dent',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Une erreur s\'est produite lors de l\'envoi de votre message. Veuillez r&eacute;essayer.',
+    2 => 'Message a &eacute;t&eacute; envoy&eacute; avec succ&egrave;s.',
+    3 => 'V&eacute;rifiez que l\'adresse du champ &laquo;r&eacute;pondre &agrave;&raquo; est valide.',
+    4 => 'Veuillez compl&eacute;ter les champs: &laquo;Votre nom&raquo;, &laquo;r&eacute;ponse &agrave;&raquo;, &laquo;sujet&raquo; et &laquo;message&raquo;',
+    5 => 'Erreur: membre inconnu.',
+    6 => 'Il y a eu une erreur.',
+    7 => 'Profil membre de ',
+    8 => 'Nom de connexion',
+    9 => 'URL membre',
+    10 => 'Envoyer un courriel &agrave;',
+    11 => 'Votre nom:',
+    12 => 'R&eacute;pondre &agrave;:',
+    13 => 'Subject:',
+    14 => 'Message:',
+    15 => 'Les balises HTML ne seront pas traduites.',
+    16 => 'Envoyer Message',
+    17 => 'Envoyer cette article &agrave; un ami',
+    18 => 'Pour',
+    19 => 'Adresse courriel',
+    20 => 'De',
+    21 => 'Adresse courriel',
+    22 => 'Tous les champs sont obligatoires',
+    23 => "Ce courriel vous a &eacute;t&eacute; envoy&eacute; de la part de %s at %s car il pensait que vous pourriez être int&eacute;ress&eacute; par {$_CONF['site_url']}. Ce n'est pas un SPAM et l'adresse courriel utilis&eacute;e n'est pas stok&eacute;e dans une liste d'envoi.",
+    24 => 'Commentaire sur cet article &agrave;',
+    25 => 'Vous devez être connect&eacute; pour utiliser cette fonction. Votre identification permettra de contr&ocirc;ler tout abus du syst&egrave;me',
+    26 => 'Ce formulaire vous permet d\'envoyer un courriel &agrave; tous les membres s&eacute;lectionn&eacute;s. Tous les champs sont obligatoires.',
+    27 => 'Message court',
+    28 => '%s a &eacute;crit: ',
+    29 => "Voici les articles du jour {$_CONF['site_name']} pour ",
+    30 => ' lettre d\'information de ',
+    31 => 'Titre',
+    32 => 'Date',
+    33 => 'Lire l\'article complet &agrave;',
+    34 => 'Fin du message',
+    35 => 'D&eacute;sol&eacute;, ce membre ne d&eacute;sire pas recevoir de messages.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Recherche avanc&eacute;e',
+    2 => 'Mots cl&eacute;s',
+    3 => 'Sujet',
+    4 => 'Tous',
+    5 => 'Type',
+    6 => 'Articles',
+    7 => 'Commentaires',
+    8 => 'Auteurs',
+    9 => 'Tous',
+    10 => 'Chercher',
+    11 => 'R&eacute;sultats de recherche',
+    12 => 's&eacute;lections',
+    13 => 'Aucun r&eacute;sultats n\'a &eacute;t&eacute; trouv&eacute;',
+    14 => 'Aucun r&eacute;sultat ne correspond &agrave; vos crit&egrave;res',
+    15 => 'Veuillez r&eacute;essayer.',
+    16 => 'Titre',
+    17 => 'Date',
+    18 => 'Auteur',
+    19 => "Chercher dans toute la base de donn&eacute;es de {$_CONF['site_name']} des articles anciens ou recents.",
+    20 => 'Date',
+    21 => '&agrave;',
+    22 => '(Format des dates AAAA-MM-JJ)',
+    23 => 'Actions',
+    24 => 'Trouv&eacute; %d items',
+    25 => 'R&eacute;sultats pour',
+    26 => 'Items',
+    27 => 'secondes',
+    28 => 'Il n\'y a pas d\'articles ou de commentaires correspondant &agrave; vos crit&egrave;res',
+    29 => 'Articles et commentaires trouv&eacute;s',
+    30 => 'Aucun lien trouv&eacute;',
+    31 => 'Aucun lien trouv&eacute; pour ce plugin',
+    32 => 'Activit&eacute;',
+    33 => 'URL',
+    34 => 'Localisation',
+    35 => 'Tous les jours',
+    36 => 'Aucune activit&eacute; trouv&eacute;e',
+    37 => 'Activit&eacute;s trouv&eacute;es',
+    38 => 'Liens trouv&eacute;s',
+    39 => 'Liens',
+    40 => 'Activit&eacute;s',
+    41 => 'Votre sujet de recherche devrait comporter au moins 3 caract&egrave;res.',
+    42 => 'Pri&egrave;re d\'utiliser une date exprim&eacute;e comme suit: AAAA-MM-JJ (ann&eacute;e-mois-jour).',
+    43 => 'phrase exacte',
+    44 => 'tous ces mots',
+    45 => 'n\'importe quel mot',
+    46 => 'Suivant',
+    47 => 'Pr&eacute;c&eacute;dant',
+    48 => 'Auteur',
+    49 => 'Date',
+    50 => 'Clics',
+    51 => 'Lien',
+    52 => 'Localisation',
+    53 => 'R&eacute;sultats d\'articles',
+    54 => 'R&eacute;sultats de commentaires',
+    55 => 'la phrase',
+    56 => 'ET',
+    57 => 'OU',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistiques du site',
+    2 => 'Nombre de clics sur le site',
+    3 => 'Nombre d\'articles',
+    4 => 'Nombre de sondages',
+    5 => 'Nombre de liens',
+    6 => 'Nombre d\'activit&eacute;s',
+    7 => 'Top-10 des articles les plus regard&eacute;s',
+    8 => 'Titre d\'article',
+    9 => 'Pages regard&eacute;es',
+    10 => 'Soit il n\'y a pas d\'article sur ce site, soit ils n\'ont pas &eacute;t&eacute; regard&eacute;s',
+    11 => 'Top-10 des articles les plus comment&eacute;s',
+    12 => 'Commentaires',
+    13 => 'Soit il n\'y a pas d\'article sur ce site, soit aucun commentaires n\'a encore &eacute;t&eacute; fait.',
+    14 => 'Top-10 des sondages les populaires',
+    15 => 'Questions des sondages',
+    16 => 'Votes',
+    17 => 'Soit il n\'y a aucun sondage sur ce site, soit personne n\'a encore vot&eacute;',
+    18 => 'Top-10 des liens les plus populaires',
+    19 => 'Liens',
+    20 => 'Clics',
+    21 => 'Soit il n\'y a encore aucun lien, soit personne n\'a encore cliqu&eacute; dessus',
+    22 => 'Top-10 des articles les plus envoy&eacute;s par courriel',
+    23 => 'Courriels',
+    24 => 'Personne n\'a encore envoy&eacute; d\'article par courriel',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Sujets voisins',
+    2 => 'Envoyer cet article &agrave; un ami',
+    3 => 'Version imprimable',
+    4 => 'Option des articles',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Pour envoyer un %s vous devez vous identifier comme membre.',
+    2 => 'Nom de membre',
+    3 => 'Nouveau membre',
+    4 => 'Soumettre une activit&eacute;',
+    5 => 'Soumettre un lien',
+    6 => 'Soumettre un article',
+    7 => 'Identification requise',
+    8 => 'Envoyer',
+    9 => 'Veuillez compl&eacute;ter tous les champs et v&eacute;rifier &agrave; deux fois TOUTES les informations.',
+    10 => 'Titre',
+    11 => 'Lien',
+    12 => 'D&eacute;but',
+    13 => 'Fin',
+    14 => 'Localisation',
+    15 => 'Description',
+    16 => 'Si autre, pr&eacute;cisez',
+    17 => 'Cat&eacute;gorie',
+    18 => 'Autre',
+    19 => 'Lisez en premier',
+    20 => 'Erreur: cat&eacute;gorie manquante',
+    21 => 'Si vous s&eacute;lectionnez &laquo;Autre&raquo; veuillez indiquer une cat&eacute;gorie',
+    22 => 'Erreur: champs manquants',
+    23 => 'Veuillez compl&eacute;ter tous les champs du formulaire. Ils sont tous obligatoires.',
+    24 => 'Proposition enregistr&eacute;e',
+    25 => 'Vos propositions %s ont &eacute;t&eacute; sauvegard&eacute;es avec succ&egrave;s.',
+    26 => 'Vitesse limite',
+    27 => 'Membre',
+    28 => 'Sujet',
+    29 => 'Article',
+    30 => 'Votre derni&egrave;re proposition &eacute;tait il y a',
+    31 => " secondes. Vous devez attendre au moins {$_CONF['speedlimit']} secondes entre chaque propositions",
+    32 => 'Aper&ccedil;u',
+    33 => 'Aper&ccedil;u de l\'article',
+    34 => 'Se d&eacute;connecter',
+    35 => 'Les balises HTML ne sont pas accept&eacute;es',
+    36 => 'Format',
+    37 => "Le fait de sugg&eacute;rer une activit&eacute;e &agrave; {$_CONF['site_name']} aura pour effet d'inclure cette activit&eacute; dans le calendrier g&eacute;n&eacute;ral. Les membres pourront alors ajouter cette activit&eacute; dans leur calendrier personnel. Cette fonctionnalit&eacute; <b>ne doit pas</b> servir aux anniversaires.<br><br>L'administrateur du site se r&eacute;serve le droit d'accepter ou de refuser toute proposition",
+    38 => 'Ajouter l\'activit&eacute; &agrave;',
+    39 => 'Calendrier g&eacute;n&eacute;ral',
+    40 => 'Calendrier personnel',
+    41 => 'Fin',
+    42 => 'D&eacute;but',
+    43 => 'Activit&eacute;s aujourd\'hui',
+    44 => 'Adresse (ligne 1)',
+    45 => 'Adresse (ligne 2)',
+    46 => 'Ville',
+    47 => 'R&eacute;gion',
+    48 => 'Code postal',
+    49 => 'Type d\'activit&eacute;',
+    50 => 'Modifier le type',
+    51 => 'Localisation',
+    52 => 'Supprimer',
+    53 => 'Cr&eacute;er un compte'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Identification requise',
+    2 => 'Utilisateur ou mot de passe incorrect',
+    3 => 'Mot de passe incorrect',
+    4 => 'Nom du membre:',
+    5 => 'Mot de passe:',
+    6 => 'Toutes tentatives d\'acc&egrave;s &agrave; cette portion du site est enregistr&eacute;e et analys&eacute;e.<br>Cette page est r&eacute;serv&eacute;e aux personnes autoris&eacute;es.',
+    7 => 'Connexion'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Droits insuffisants',
+    2 => 'Vous n\'avez pas les droits n&eacute;cessaires pour modifier ce cadre',
+    3 => 'Editeur de cadre',
+    4 => 'CNT 4',
+    5 => 'titre du cadre',
+    6 => 'sujet',
+    7 => 'tous',
+    8 => 'niveau de s&eacute;curit&eacute; du cadre',
+    9 => 'Ordre du cadre',
+    10 => 'type du cadre',
+    11 => 'Cadre Portail',
+    12 => 'Cadre Normal',
+    13 => 'Cadre portail d\'option',
+    14 => 'URL RDF',
+    15 => 'Derni&egrave;re MAJ RDF',
+    16 => 'Cadre normal d\'option',
+    17 => 'Contenu du cadre',
+    18 => 'Veuillez remplir les champs: titre, niveau de s&eacute;curit&eacute; et contenu du cadre',
+    19 => 'Contr&ocirc;leur de cadre',
+    20 => 'Cadre titre',
+    21 => 'Cadre niv. sec.',
+    22 => 'Cadre type',
+    23 => 'Cadre ordre',
+    24 => 'Cadre sujet',
+    25 => 'Cliquez sur le lien ci-dessous pour modifier ou supprimer un cadre.  Cliquez sur le lien nouveau cadre pour cr&eacute;er un nouveau cadre.',
+    26 => 'Cadre d\'affichage',
+    27 => 'Cadre PHP',
+    28 => 'Option du cadre PHP',
+    29 => 'Cadre fonction',
+    30 => 'Si vous voulez que l\'un de vos cadres utilise du PHP, saisissez le nom de la fonction &agrave; utiliser.  Le nom de la fonction doit commencer par \'phpblock_\' (ex: phpblock_getweather).  Si ce n\'est pas le cas, votre fonction NE SERA PAS appell&eacute;e, ceci pour des raisons de s&eacute;curit&eacute;.  Ne mettez pas de parenth&egrave;ses vides \'()\' apr&egrave;s le nom de votre fonction.  Enfin, nous vous recommandons de mettre tout le code des cadre PHP dans /path/to/geeklog/system/lib-custom.php.  Cela permettera de garder votre code même apr&egrave;s une mise &agrave; jour de geeklog.',
+    31 => 'Erreur dans le cadre PHP.  La fonction, %s, n\'existe pas.',
+    32 => 'Erreur: champs manquant',
+    33 => 'Vous devez mettre l\'URL dans le fichier .rdf pour le cadre portail.',
+    34 => 'Vous devez renseigner le titre et la fonction du cadre PHP.',
+    35 => 'Vous devez entrer le titre et le contenu du cadre normal.',
+    36 => 'Vous devez entrer le contenu pour le cadre d\'affichage.',
+    37 => 'Nom erron&eacute; dans la fonction du cadre PHP',
+    38 => 'Les fonctions des cadres PHP doivent commencer par "phpblock_" (ex: phpblock_getweather).  Le pr&eacute;fixe "phpblock_" est n&eacute;cessaire pour des raisons de s&eacute;curit&eacute; qui empêche l\'ex&eacute;cution de code arbitraire.',
+    39 => 'C&ocirc;t&eacute;',
+    40 => 'Gauche',
+    41 => 'Droit',
+    42 => 'Vous devez saisir l\'ordre et le niveau de s&eacute;curit&eacute; pour les cadres par d&eacute;faut de geeklog',
+    43 => 'Accueil seulement',
+    44 => 'Acc&egrave;s interdit',
+    45 => "Vous essayez d'acc&eacute;der &agrave; un cadre auquel vous n'avez pas droit.  Cette tentative est enregistr&eacute;e. Veuillez <a href=\'{$_CONF['site_admin_url']}/block.php\'>retourner &agrave; la page de controle des cadres</a>.",
+    46 => 'Nouveau Cadre',
+    47 => 'Accueil admin',
+    48 => 'Nom du cadre',
+    49 => ' (pas d\'espace et doit être unique)',
+    50 => 'URL d\'aide',
+    51 => 'inclure http:// ',
+    52 => 'Laisser vide pour ne pas afficher l\'icone d\'aide',
+    53 => 'Activ&eacute;',
+    54 => 'enregistrer',
+    55 => 'annuler',
+    56 => 'supprimer',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editeur d\'activit&eacute;',
+    2 => 'CNT 2',
+    3 => 'Titre',
+    4 => 'URL',
+    5 => 'D&eacute;but',
+    6 => 'Fin',
+    7 => 'Localisation',
+    8 => 'Description',
+    9 => '(inclure http://)',
+    10 => 'Vous devez s&eacute;lectionner une date, une heure, une description et une localisation!',
+    11 => 'Contr&ocirc;leur d\'activit&eacute;',
+    12 => 'Pour supprimer ou modifier une activit&eacute;, cliquez sur le bouton ci-dessous. Pour cr&eacute;er une nouvelle activit&eacute; cliquez sur &laquo;Nouvelle activit&eacute;&raquo;.',
+    13 => 'titre',
+    14 => 'd&eacute;but',
+    15 => 'fin',
+    16 => 'Acc&egrave;s interdit',
+    17 => "vous essayez d'acc&eacute;der &agrave; une activit&eacute; auquel vous n'avez pas les droits. Cette tentative a &eacute;t&eacute; enregistr&eacute;e. Retournez &agrave; <a href=\'{$_CONF['site_admin_url']}/event.php\'>la page d'aministration des activit&eacute;s</a>.",
+    18 => 'Nouvelle activit&eacute;',
+    19 => 'Page de l\'administrateur',
+    20 => 'enregistrer',
+    21 => 'annuler',
+    22 => 'supprimer',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Articles pr&eacute;c&eacute;dents',
+    2 => 'Articles suivants',
+    3 => 'Mode',
+    4 => 'Format',
+    5 => 'Editeur d\'articles',
+    6 => 'Il n\'y a pas d\'articles dans le syst&egrave;me',
+    7 => 'Auteur',
+    8 => 'Enregistrer',
+    9 => 'Aper&ccedil;u',
+    10 => 'Annuler',
+    11 => 'Supprimer',
+    12 => 'ID',
+    13 => 'Titre',
+    14 => 'Sujet',
+    15 => 'Date',
+    16 => 'Texte d\'intro',
+    17 => 'Texte int&eacute;gral',
+    18 => 'Clics',
+    19 => 'Commentaires',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Liste des articles',
+    23 => 'Pour modifier ou supprimer un article, cliquez sur son num&eacute;ro. Pour visionner un article, cliquez sur le titre de l\'article. Pour cr&eacute;er un nouvel article, cliquez sur le bouton &eacute;crire un article.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Aper&ccedil;u de l\'article',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Veuillez inscrire le titre et le texte d\'introduction.',
+    32 => 'Tête d\'affiche',
+    33 => 'Il ne peut y avoir qu\'un seul article en tête d\'affiche',
+    34 => 'Brouillon',
+    35 => 'Oui',
+    36 => 'Non',
+    37 => 'Plus sur',
+    38 => 'Plus de',
+    39 => 'Emails',
+    40 => 'Acc&egrave;s refus&eacute;',
+    41 => "Vous essayez d'acc&eacute;der &agrave; un article auqule vous n'avez pas droit.  Cette tentative est enregistr&eacute;e.  Vous pouvez voir cet article en lecture seule uniquement. Veuillez <a href=\'{$_CONF['site_admin_url']}/story.php\'>retourner sur la page de contr&ocirc;le des article</a> lorsque vous aurez fini.",
+    42 => "Vous essayez d'acc&eacute;der &agrave; un article auquel vous n'avez pas droit.  Cette tentative est enregistr&eacute;e.  Veuillez <a href=\'{$_CONF['site_admin_url']}/story.php\'>retourner &agrave; la page de contr&ocirc;le des articles</a>.",
+    43 => 'Nouvel article',
+    44 => 'Accueil Admin',
+    45 => 'Acc&egrave;s',
+    46 => '<b>REMARQUE:</b> si vous indiquez une date future, cet article n\'appara&icirc;tra qu\'&agrave; partir de cette date. Cela signifie aussi que l\'article sera ignor&eacute; des recherches et des statistiques.',
+    47 => 'Images',
+    48 => 'image',
+    49 => 'droite',
+    50 => 'gauche',
+    51 => 'Pour ajouter une des images que vous avez fournies vous devez ins&eacute;rer un texte sp&eacute;cial dans votre article. Vous devez ins&eacute;rer [imageX], [imageX_right] ou [imageX_left] o&ugrave; X est le num&eacute;ro de l\'image que vous avez fournie.  REMARQUE: vous devez utiliser toutes les images fournies.  Si vous ne le faites pas vous ne pourrez pas enregistrer votre article.<BR><P><B>APERCU</B>: lors de l\'utilisation d\'images il est pr&eacute;f&eacute;rables de faire un brouillon plut&ocirc;t que d\'utiliser la fonction d\'apercu.  Utilisez le bouton d\'apercu uniquement lorsqu\'il n\'y a pas d\'image.',
+    52 => 'Supprimer',
+    53 => 'n\'est pas utilis&eacute;e.  Vous devez ins&eacute;rer l\'image dans le texte de votre article avant de l\'enregistrer.',
+    54 => 'Image fournie non utilis&eacute;e',
+    55 => 'L\'erreur suivante est apparue lors de l\'enregistrement de votre article.  Veuillez corriger ces erreurs et r&eacute;essayer',
+    56 => 'Montrer l\'ic&ocirc;ne',
+    57 => 'Montrer l\'image originale',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editeur de sujet',
+    2 => 'Num&eacute;ro',
+    3 => 'Nom',
+    4 => 'Image',
+    5 => '(ne pas utiliser d\'espaces)',
+    6 => 'Supprimer un sujet supprimera tous les articles et cadres en relations avec celui-ci',
+    7 => 'Veuillez renseigner le num&eacute;ro et le nom du sujet.',
+    8 => 'Contr&ocirc;leur de sujet',
+    9 => 'Cliquez sur un sujet pour le modifier ou le supprimer.  Cliquez sur le bouton &laquo;Nouveau Sujet&raquo; &agrave; gauche pour cr&eacute;er un sujet. Vos droits d\'acc&egrave;s concernent tout sujet apparaissant entre parenth&egrave;ses.',
+    10 => 'Ordre de tri',
+    11 => 'Articles/Page',
+    12 => 'Acc&egrave;s interdit',
+    13 => "vous essayez d'acc&eacute;der &agrave; un sujet auquel vous n'avez pas droit.  Cette tentative est enregistr&eacute;e. Veuillez <a href=\'{$_CONF['site_admin_url']}/topic.php\'>retourner &agrave; la page de contr&ocirc;le des sujets</a>.",
+    14 => 'M&eacute;thode de tri',
+    15 => 'alphab&eacute;tique',
+    16 => 'par d&eacute;faut:',
+    17 => 'Nouveau Sujet',
+    18 => 'Accueil Admin',
+    19 => 'Enregistrer',
+    20 => 'Annuler',
+    21 => 'Supprimer',
+    22 => 'Par d&eacute;faut',
+    23 => 'Faites de ce sujet le choix par d&eacute;faut pour la cr&eacute;ation de nouveaux articles',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editeur du membre',
+    2 => 'Num&eacute;ro',
+    3 => 'Nom de connexion',
+    4 => 'Nom complet',
+    5 => 'Mot de passe',
+    6 => 'Niveau de s&eacute;curit&eacute;',
+    7 => 'Adresse courriel',
+    8 => 'Page d\'accueil',
+    9 => '(ne pas utiliser d\'espaces)',
+    10 => 'Veuillez renseigner le nom de connexion, le nom complet, le nom complet et l\'adresse courriel.',
+    11 => 'Contr&ocirc;leur des membres',
+    12 => 'Cliquez sur un membre pour le modifier ou le supprimer.  Cliquez sur le bouton Nouveau membre &agrave; gauche pour cr&eacute;er un compte. Vous pouvez faire des recherches simple en entrant une partie du nom de connexion, du nom complet ou de l\'adresse courriel (ex:*son* ou *.edu) dans le formulaire ci-dessous.',
+    13 => 'Niv. Sec.',
+    14 => 'Date d\'enregistrement',
+    15 => 'Nouveau membre',
+    16 => 'Accueil Admin',
+    17 => 'Changer le mot de passe',
+    18 => 'Annuler',
+    19 => 'Supprimer',
+    20 => 'Enregistrer',
+    21 => 'Le nom de connexion est d&eacute;j&agrave; utilis&eacute;.',
+    22 => 'Erreur',
+    23 => 'Ajout par lot',
+    24 => 'Importation par lot d\'utilisateurs',
+    25 => 'Vous pouvez importer un lot d\'utilisateur dans le syst&egrave;me.  Les champ du fichier d\'import doivent être s&eacute;par&eacute;s par une tabulation. Ils doivent appara&icirc;tre dans l\'ordre suivant: Nom complet, nom de connexion, adresse courriel.  Chaque utilisateur import&eacute; sera averti par courriel et aura un mot de passe auto-g&eacute;n&eacute;r&eacute;.  Il ne doit y avoir qu\'un seul utilisateur par ligne.  Ne pas respecter ces consignes peut entra&icirc;ner des d&eacute;gat qui ne seront r&eacute;parables que manuellement, alors redoublez de vigilance!',
+    26 => 'Chercher',
+    27 => 'Nb de r&eacute;sultats max',
+    28 => 'Coche la case pour supprimer la photo',
+    29 => 'Chemin',
+    30 => 'Importer',
+    31 => 'Nouveaux membres',
+    32 => 'Traitement termin&eacute;. %d membres ont &eacute;t&eacute; import&eacute;s et il y a %d erreurs',
+    33 => 'envoyer',
+    34 => 'Erreur: Vous devez pr&eacute;ciser un fichier &agrave; t&eacute;l&eacute;charger.',
+    35 => 'Dernier acc&egrave;s',
+    36 => '(jamais)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Valider',
+    2 => 'Supprimer',
+    3 => 'Modifier',
+    4 => 'Profil',
+    10 => 'Titre',
+    11 => 'D&eacute;but',
+    12 => 'URL',
+    13 => 'Cat&eacute;gorie',
+    14 => 'Date',
+    15 => 'Sujet',
+    16 => 'Membre',
+    17 => 'Nom Complet',
+    18 => 'Courriel',
+    34 => 'Commandes et Contr&ocirc;les',
+    35 => 'Soumissions d\'articles',
+    36 => 'Soumission de liens',
+    37 => 'Soumission d\'activit&eacute;s',
+    38 => 'Envoyer',
+    39 => 'Il n\'y a aucune soumission &agrave; administrer pour le moment',
+    40 => 'Soumissions des membres'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Dimanche',
+    2 => 'Lundi',
+    3 => 'Mardi',
+    4 => 'Mercredi',
+    5 => 'Jeudi',
+    6 => 'Vendredi',
+    7 => 'Samedi',
+    8 => 'Ajouter une activit&eacute;',
+    9 => 'activit&eacute; geeklog',
+    10 => 'Activit&eacute;s pour',
+    11 => 'Calendrier g&eacute;n&eacute;ral',
+    12 => 'Calendrier personnel',
+    13 => 'Janvier',
+    14 => 'F&eacute;vrier',
+    15 => 'Mars',
+    16 => 'Avril',
+    17 => 'Mai',
+    18 => 'Juin',
+    19 => 'Juillet',
+    20 => 'Ao&ucirct',
+    21 => 'Septembre',
+    22 => 'Octobre',
+    23 => 'Novembre',
+    24 => 'D&eacute;cembre',
+    25 => 'Retour &agrave; ',
+    26 => 'Tous les jours',
+    27 => 'Semaine',
+    28 => 'Calendrier personnel de',
+    29 => 'Calendrier public',
+    30 => 'Supprimer l\'activit&eacute;',
+    31 => 'Ajouter',
+    32 => 'Activit&eacute;',
+    33 => 'Date',
+    34 => 'Heure',
+    35 => 'Ajout rapide',
+    36 => 'Envoyer',
+    37 => 'D&eacute;sol&eacute;, le calendrier personnel n\'est pas activ&eacute;',
+    38 => 'Editeur d\'activit&eacute;s personnelles',
+    39 => 'Jour',
+    40 => 'Semaine',
+    41 => 'Mois'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "Envoyer un mail aux membres de {$_CONF['site_name']}",
+    2 => 'De',
+    3 => 'Adresse de r&eacute;ponse',
+    4 => 'Sujet',
+    5 => 'Message',
+    6 => '&agrave;:',
+    7 => 'Tous les membres',
+    8 => 'Admin',
+    9 => 'Options',
+    10 => 'HTML',
+    11 => 'message urgent!',
+    12 => 'Envoyer',
+    13 => 'Effacer',
+    14 => 'Ignorer les pr&eacute;f&eacute;rences membre',
+    15 => 'Erreur lors de l\'envoi d\'un message &agrave;: ',
+    16 => 'Message envoy&eacute; avec succ&egrave;s &agrave;: ',
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Envoyer un autre message</a>",
+    18 => '&agrave;',
+    19 => 'Remarque: si vous voulez envoyer un message &agrave; tous les membres, utilisez le groupe Logged-in dans le champ A.',
+    20 => "<successcount> messages ont &eacute;t&eacute; envoy&eacute;s avec succ&egrave;s et <failcount> n'ont pas pu être envoy&eacute;s.  Vous trouverez le d&eacute;tail de chaque tentative ci-dessous.  Vous pouvez &eacute;galement <a href=\"{$_CONF['site_admin_url']}/mail.php\">envoyer un autre message</a> ou <a href=\"{$_CONF['site_admin_url']}/moderation.php\">revenir &agrave; la page d'administration</a>.",
+    21 => '&eacute;checs',
+    22 => 'Succ&egrave;s',
+    23 => 'Pas d\'&eacute;checs',
+    24 => 'Pas de succ&egrave;s',
+    25 => '-- Choisir un groupe --',
+    26 => 'Remplissez tous les champs et choisissez un groupe parmi la liste.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'L\'installation de plugins peut endommager le syst&egrave;me.  Il est important de n\'installer que des plugins approuv&eacute;s par <a href=\'http://www.geeklog.net\' target=\'_blank\'>Geeklog</a> car nous les testons sur plusieurs syst&egrave;mes. Installer des plugins requiert l\'ex&eacute;cution de plusieurs commandes syst&egrave;mes qui peuvent poser des probl&egrave;mes de s&eacute;curit&eacute;, particuli&egrave;rement si vous utilisez des plugins de provenances inconnues. Vous êtes averti des domages que peut causer l\'installation d\'un plugin. En d\'autres termes, vous installez des plugins &agrave; vos propres risques. Les instructions d\'installation des plugins sont incluses dans chaque plugin.',
+    2 => 'Instructions d\'installation d\'un plugin',
+    3 => 'Formulaire d\'installation d\'un plugin',
+    4 => 'Fichier du plugin',
+    5 => 'Liste des plugins',
+    6 => 'Attention: plugin d&eacute;j&agrave; install&eacute;!',
+    7 => 'Le plugin que vous essayez d\'installer existe d&eacute;j&agrave;.  Veuillez supprimer le plugin avant de le r&eacute;installer.',
+    8 => 'Test de compatibilit&eacute; du plugin &eacute;chou&eacute;',
+    9 => 'Ce plugin requiert une version plus r&eacute;cente du syst&egrave;me. Vous pouvez mettre &agrave; jour votre <a href=\'http://www.geeklog.net\'>Geeklog</a> ou obtenir une autre version du plugin.',
+    10 => '<br><b>Aucun plugin n\'est actuellement install&eacute;.</b><br><br>',
+    11 => 'Cliquez sur le num&eacute;ro du plugin pour le modifier ou le supprimer. Pour en savoir d\'avantage sur les plugins, cliquez sur le nom du plugin et vous serez redirig&eacute; vers le site web du plugin. Pour installer ou mettre &agrave; jour un plugin veuillez vous r&eacute;f&eacute;rer &agrave; la documentation du plugin.',
+    12 => 'Aucun nom de plugin n\'a &eacute;t&eacute; pass&eacute; &agrave; plugineditor()',
+    13 => 'Editeur de plugin',
+    14 => 'Nouveau plugin',
+    15 => 'Accueil Admin',
+    16 => 'Nom du plugin',
+    17 => 'Version du plugin',
+    18 => 'Version de Geeklog',
+    19 => 'Activ&eacute;',
+    20 => 'Oui',
+    21 => 'Non',
+    22 => 'Installer',
+    23 => 'Enregistrer',
+    24 => 'Annuler',
+    25 => 'Supprimer',
+    26 => 'Nom du plugin',
+    27 => 'Site web du plugin',
+    28 => 'Version du plugin',
+    29 => 'Version de Geeklog',
+    30 => 'Supprimer le plugin ?',
+    31 => 'Etes-vous s&ucircr de vouloir supprimer ce plugin? Toutes les donn&eacute;es, fiches et structures utilis&eacute;s par ce plugin seront d&eacute;truites.  Si vous êtes certain de vouloir supprimer le plugin, cliquez sur le bouton &laquo;Supprimer&raquo;.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Votre mot de passe a &eacute;t&eacute; envoy&eacute; par courriel et devrait vous parvenir sous peu. Suivez les instructions incluses dans le message et encore merci d'utiliser {$_CONF['site_name']}",
+    2 => "Merci de proposer un article &agrave; {$_CONF['site_name']}.  Il a &eacute;t&eacute; envoy&eacute; &agrave; notre &eacute;quipe qui en disposera. Votre article sera publi&eacute; s'il est retenu.",
+    3 => "Merci de proposer un lien &agrave; {$_CONF['site_name']}.  Il a &eacute;t&eacute; envoy&eacute; &agrave; notre &eacute;quipe qui en disposera.  S'il est retenu, votre lien sera affich&eacute; <a href={$_CONF['site_url']}/links.php>ici</a>.",
+    4 => "Merci de proposer une activit&eacute; &agrave; {$_CONF['site_name']}.  Elle a &eacute;t&eacute; envoy&eacute;e &agrave; notre &eacute;quipe qui en disposera. Si elle est retenue, votre activit&eacute; sera affich&eacute;e <a href={$_CONF['site_url']}/calendar.php>ici</a>.",
+    5 => 'Vos informations ont &eacute;t&eacute; mises &agrave; jour avec succ&egrave;s.',
+    6 => 'Vos pr&eacute;f&eacute;rences d\'affichage ont &eacute;t&eacute; mises &agrave; jour avec succ&egrave;s.',
+    7 => 'Vos pr&eacute;f&eacute;rences de commentaire ont &eacute;t&eacute; mises &agrave; jour avec succ&egrave;s.',
+    8 => 'Vous avez &eacute;t&eacute; d&eacute;connect&eacute; avec succ&egrave;s.',
+    9 => 'Votre article a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    10 => 'L\'article a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    11 => 'Votre cadre a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    12 => 'Le cadre a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    13 => 'Votre sujet a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    14 => 'Le sujet et tous ses articles ainsi que ses cadres ont &eacute;t&eacute; supprim&eacute;s avec succ&egrave;s.',
+    15 => 'Votre lien a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    16 => 'Le lien a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    17 => 'Votre activit&eacute; a &eacute;t&eacute; enregistr&eacute;e avec succ&egrave;s.',
+    18 => 'L\'activit&eacute; a &eacute;t&eacute; supprim&eacute;e avec succ&egrave;s.',
+    19 => 'Votre sondage a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    20 => 'Le sondage a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    21 => 'Le nouveau membre a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    22 => 'L\'utilisateur a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    23 => 'Erreur durant l\'ajout d\'une activit&eacute; &agrave; votre calendrier. Aucun identifiant d\'activit&eacute; n\'a &eacute;t&eacute; transmis.',
+    24 => 'L\'activit&eacute; a &eacute;t&eacute; enregistr&eacute;e dans votre calendrier.',
+    25 => 'Vous devez vous connecter pour consulter votre calendrier',
+    26 => 'L\'activit&eacute; a &eacute;t&eacute; supprim&eacute;e de votre calendrier avec succ&egrave;s.',
+    27 => 'Message envoy&eacute; avec succ&egrave;s.',
+    28 => 'Le plugin a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    29 => 'Les calendriers personnels ne sont pas activ&eacute;s.',
+    30 => 'Acc&egrave;s interdit',
+    31 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des articles. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    32 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des sujets. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    33 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des cadres. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    34 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des liens. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    35 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des activit&eacute;s. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    36 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des sondages. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    37 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des membres. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    38 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des plugins. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    39 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des courriels. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    40 => 'Message syst&egrave;me',
+    41 => 'Vous n\'avez pas acc&egrave;s &agrave; la page d\'administration des substitutions de mots. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;ss.',
+    42 => 'Votre mot a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    43 => 'Le mot a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    44 => 'Le plugin a &eacute;t&eacute; install&eacute; avec succ&egrave;s!',
+    45 => 'Le plugin a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    46 => 'Vous n\'avez pas acc&egrave;s &agrave; l\'utilitaire de sauvegarde de la base de donn&eacute;es. Toutes les tentatives d\'acc&egrave;s &agrave; des parties non autoris&eacute;es sont enregistr&eacute;es.',
+    47 => 'Cet option ne fonctionne que sur *nix. Si vous utilisez *nix alors votre cache a &eacute;t&eacute; vid&eacute;e avec succ&egrave;s. Si vous utilisez Windows, vous devez chercher les fichiers adodb_*.php et les supprimer &agrave; la main.',
+    48 => "Merci d'avoir demand&eacute; un compte membre sur {$_CONF['site_name']}. La demande a &eacute;t&eacute; envoy&eacute;e &agrave; notre &eacute;quipe qui en disposera. Lorsque la demande sera accept&eacute;e, votre mot de passe vous sera envoy&eacute; par courriel &agrave; l'adresse que vous avez fournie.",
+    49 => 'Votre groupe a &eacute;t&eacute; enregistr&eacute; avec succ&egrave;s.',
+    50 => 'Le groupe a &eacute;t&eacute; supprim&eacute; avec succ&egrave;s.',
+    51 => 'Ce nom de membre existe d&eacute;j&agrave;. Pri&egrave;re d\'en choisir un nouveau.',
+    52 => 'Le courriel fourni ne para&icirc;t pas être valide.',
+    53 => 'Votre nouveau mot de passe &agrave; &eacute;t&eacute; accept&eacute;. Pri&egrave;re de l\'inscrire ci-dessous pour acc&eacute;der au site.',
+    54 => 'Votre requête pour l\'obtention d\'un nouveau mot de passe est expir&eacute;e. Pri&egrave;re d\'essayer de nouveau ci-dessous.',
+    55 => 'Un courriel qui vient de vous être envoy&eacute; devrait vous parvenir sous peu. Pri&egrave;re de suivre les instructions du message et de proc&eacute;der &agrave; l\'enregistrement de votre nouveau mot de passe.',
+    56 => 'L\'adresse courriel fournie est d&eacute;j&agrave; utilis&eacute;e par un autre compte.',
+    57 => 'Votre compte &agrave; &eacute;t&eacute; effac&eacute; avec succ&egrave;s.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Acc&egrave;s',
+    'ownerroot' => 'Propri&eacute;taire/Admin',
+    'group' => 'Groupe',
+    'readonly' => 'Lecture seule',
+    'accessrights' => 'Droits d\'acc&egrave;s',
+    'owner' => 'Propri&eacute;taire',
+    'grantgrouplabel' => 'Autorisation au del&agrave; du groupe d\'&eacute;dition',
+    'permmsg' => 'REMARQUE: les membres sont tous les utilisateurs identifi&eacute;s et les anonymes sont tous les autres.',
+    'securitygroups' => 'Groupe de s&eacute;curit&eacute;',
+    'editrootmsg' => "Except&eacute; si vous êtes administrateur, vous ne pouvez pas modifier un autre administrateur. Vous pouvez modifier tous les utilisateurs except&eacute;s les administrateurs. Toutes tentatives de modifications d\'un administrateur sont enregistr&eacute;es. Retournez sur la <a href=\'{$_CONF['site_admin_url']}/user.php\'>page d'administration</a>.",
+    'securitygroupsmsg' => 'S&eacute;lectionner les cases des groupes auxquels l\'utilisateur appartient',
+    'groupeditor' => 'Editeur de groupe',
+    'description' => 'Description',
+    'name' => 'Nom',
+    'rights' => 'Droits',
+    'missingfields' => 'Champs manquants',
+    'missingfieldsmsg' => 'Vous devez saisir un nom et une description',
+    'groupmanager' => 'Administrateur de groupe',
+    'newgroupmsg' => 'Pour modifier ou supprimer un groupe, cliquez sur le groupe ci-dessous. Pour cr&eacute;er un nouveu groupe, cliquez sur Nouveau Groupe. Les groupes natifs ne peuvent pas être supprim&eacute;s car ils sont utilis&eacute;s par le syst&egrave;me.',
+    'groupname' => 'Nom du groupe',
+    'coregroup' => 'Groupe syst&egrave;me',
+    'yes' => 'Oui',
+    'no' => 'Non',
+    'corerightsdescr' => "Ce groupe est un groupe syst&egrave;me de {$_CONF['site_name']}.  Les droits de ce groupe ne peuvent pas être modifi&eacute;s.  La liste ci-dessous des droits d'acc&egrave;s du groupe n'est pas modifiable.",
+    'groupmsg' => 'Les droits des groupes sont hi&eacute;rarchiques.  En ajoutant un groupe &agrave; un autre vous ajoutez tous les droits de ce groupe &agrave; l\'autre.  Lorsque c\'est possible, utilisez les groupes d&eacute;ja d&eacute;finis.  Si vous avez besoin de droits sp&eacute;cifiques, vous pouvez les choisir dans la liste ci-dessous.  Pour Ajouter un groupe &agrave; celui-ci cliquez sur la case du groupe &agrave; ajouter.',
+    'coregroupmsg' => "Ce groupe est un groupe syst&egrave;me de {$_CONF['site_name']}.  Les droits de ce groupe ne peuvent pas être modifi&eacute;s. La liste ci-dessous des groupes inclus de ce groupe n'est pas modifiable.",
+    'rightsdescr' => 'Les droits suivants peuvent être donn&eacute;s directement au groupe OU provenir d\'un groupe inclus. Les droits sans case &agrave; cocher proviennent de groupe inclus. Les droits qui ont des cases &agrave; cocher sont donn&eacute;s directement au groupe.',
+    'lock' => 'Bloquer',
+    'members' => 'Membres',
+    'anonymous' => 'Anonymes',
+    'permissions' => 'Permissions',
+    'permissionskey' => 'R = lecture, E = modification, le droit de modification implique le droit de lecture',
+    'edit' => 'Modifier',
+    'none' => 'Rien',
+    'accessdenied' => 'Acc&egrave;s interdit',
+    'storydenialmsg' => "vous n'avez pas le droit de lire cette article. Peut-être que vous n'êtes pas membre de {$_CONF['site_name']}.  Vous pouvez <a href=users.php?mode=new>vous enregistrer</a> sur {$_CONF['site_name']} pour obtenir un compte membre!",
+    'eventdenialmsg' => "vous n'avez pas acc&egrave;s &agrave; cet &eacute;v&egrave;nement. Peut-être que vous n'êtes pas membre de {$_CONF['site_name']}.  Vous pouvez <a href=users.php?mode=new>vous enregistrer</a> sur  pour obtenir un compte membre!",
+    'nogroupsforcoregroup' => 'Le groupe n\'inclue aucun autre groupe',
+    'grouphasnorights' => 'Le groupe n\'a pas acc&egrave;s aux fonctions administratives',
+    'newgroup' => 'Nouveau Groupe',
+    'adminhome' => 'Accueil Admin',
+    'save' => 'enregistrer',
+    'cancel' => 'annuler',
+    'delete' => 'supprimer',
+    'canteditroot' => 'Vous avez essay&eacute; de modifier le groupe administrateur mais vous n\'en faites pas partie. Vous n\'avez pas acc&egrave;s &agrave; ce groupe. Veuillez contacter l\'administrateur si vous pensez que c\'est une erreur.',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '10 dernieres sauvegardes',
+    'do_backup' => 'Faire une sauvegarde',
+    'backup_successful' => 'Sauvegarde de la base de donn&eacute;e effectu&eacute;e avec succ&egrave;s',
+    'db_explanation' => 'Cliquez sur le bouton ci-dessous pour effectuer une sauvegarde de votre syst&egrave;me Geeklog',
+    'not_found' => "Chemin incorecte ou le fichier mysqldump n'est pas ex&eacute;cutable.<br>V&eacute;rifiez le param&egrave;tre <strong>\$_DB_mysqldump_path</strong> dans le fichier config.php.<br>Ce param&egrave;tre est actuellement positionn&eacute; &agrave; : <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Sauvegarde &eacute;chou&eacute;e: la taille du fichier &eacute;tait de 0 octets.',
+    'path_not_found' => "{$_CONF['backup_path']} n'existe pas ou n'est pas un r&eacute;pertoire.",
+    'no_access' => "Erreur: le r&eacute;pertoire {$_CONF['backup_path']} n'est pas accessible.",
+    'backup_file' => 'Fichier de sauvegarde',
+    'size' => 'Taille',
+    'bytes' => 'Octets',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Entr&eacute;e',
+    2 => 'Contacts',
+    3 => 'Ecrire un article',
+    4 => 'Liens',
+    5 => 'Sondages',
+    6 => 'Calendrier',
+    7 => 'Statistiques du site',
+    8 => 'Personnaliser',
+    9 => 'Chercher',
+    10 => 'Recherche avanc&eacute;e',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Erreur 404',
+    2 => 'Le syst&egrave;me ne trouve pas <b>http://</b>.',
+    3 => "<p>Le fichier que vous demandez n'existe pas. Allez &agrave; la <a href=\'{$_CONF['site_url']}\'>page principale</a> ou la <a href=\'{$_CONF['site_url']}/search.php\'>page de recherche</a> afin de retrouver ce que vous avez perdu."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Vous devez vous connecter',
+    2 => 'Vous devez vous identifier &agrave; l\'aide de l\'espace membre pour acc&eacute;der &agrave; cette partie du site.',
+    3 => 'Accueil',
+    4 => 'Nouveau membre'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/french_france.php 1.4.0sr5-1/cpanel-glprivate/language/french_france.php
--- 1.3.11sr1/cpanel-glprivate/language/french_france.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/french_france.php	2006-08-08 02:39:06.000000000 -0500
@@ -152,7 +152,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -319,7 +329,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -337,27 +363,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Rfrences web',
-    2 => 'Il n\'y a aucune rfrence  afficher',
-    3 => 'Ajouter un lien'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Vote Enregistr',
-    2 => 'Votre vote a t comptabilis',
-    3 => 'Voter',
-    4 => 'Sondages existants',
-    5 => 'Votes',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -458,7 +463,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -488,7 +497,14 @@
     21 => 'Soit il n\'y a aucun lien soit personne n\'a encore cliqu dessus',
     22 => 'Articles les plus envoys par mail',
     23 => 'Emails',
-    24 => 'Personne n\'a encore envoy d\'article par mail'
+    24 => 'Personne n\'a encore envoy d\'article par mail',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -641,7 +657,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -676,35 +697,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editeur de liens',
-    2 => 'CNT 2',
-    3 => 'Titre',
-    4 => 'URL',
-    5 => 'Catgorie',
-    6 => '(http:// inclus)',
-    7 => 'Autre',
-    8 => 'Nombre de slection',
-    9 => 'Description',
-    10 => 'Vous devez saisir un titre, une URL et une description.',
-    11 => 'Contrleur de lien',
-    12 => 'Cliquez sur le lien ci-dessous pour modifier ou supprimer un lien.  Cliquez sur Nouveau Lien pour crer un lien.',
-    13 => 'Titre',
-    14 => 'Catgorie',
-    15 => 'URL',
-    16 => 'Accs interdit',
-    17 => "Vous essayez d'accder  un lien auquel vous n'avez pas les droits.  Cette tentative est enregistre. Veuillez <a href=\"{$_CONF['site_admin_url']}/link.php\"> la page de controle des liens</a>.",
-    18 => 'Nouveau lien',
-    19 => 'Accueil Admin',
-    20 => 'Si autre, prcisez',
-    21 => 'enregistrer',
-    22 => 'annuler',
-    23 => 'supprimer'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -727,16 +719,16 @@
     17 => 'Texte intgral',
     18 => 'Hits',
     19 => 'Commentaires',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Liste des articles',
     23 => 'Pour modifier ou supprimer un article, cliquez sur son numro. Pour visionner un article, cliquez sur le titre de l\'article. Pour crer un nouvel article, cliquez sur le bouton crire un article.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Aperu de l\'article',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Veuillez renseigner l\'auteur, le titre et le texte d\'introduction.',
     32 => 'Tte d\'affiche',
@@ -769,39 +761,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Sondage cr',
-    4 => 'Sondage %s enregistr',
-    5 => 'Modifier sondage',
-    6 => 'N Sondage',
-    7 => '(ne pas utiliser d\'espaces)',
-    8 => 'Apparat sur la page d\'accueil',
-    9 => 'Question',
-    10 => 'Rponses / Votes',
-    11 => 'Une erreur s\'est produite lors de l\'obtention des rponses du sondage %s',
-    12 => 'Une erreur s\'est produite lors de l\'obtention des questions du sondage %s',
-    13 => 'Nouveau Sondage',
-    14 => 'enregistrer',
-    15 => 'annuler',
-    16 => 'supprimer',
-    17 => 'Please enter a Poll ID',
-    18 => 'Liste des sondages',
-    19 => 'Cliquez sur un sondage pour le modifier ou le supprimer.  Cliquez sur Nouveau Sondage pour crer un sondage.',
-    20 => 'Votants',
-    21 => 'Accs interdit',
-    22 => "vous essayez d'accder  un sondage auquel vous n'avez pas droit.  Cette tentative est enregistre. Veuillez <a href=\"{$_CONF['site_admin_url']}/poll.php\">retourner  la page de contrle des sondages</a>.",
-    23 => 'Nouveau Sondage',
-    24 => 'Accueil Admin',
-    25 => 'Oui',
-    26 => 'Non'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -833,7 +816,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -875,7 +861,18 @@
     33 => 'envoyer',
     34 => 'Erreur: Vous devez prciser un fichier  charger.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1020,7 +1017,11 @@
     31 => 'Etes-vous sr de vouloir supprimer ce plugin ?  Toutes les donnes, fichiers et structures utiliss par ce plugin seront dtruits.  Si vous tes sr cliquez sur le bouton Supprimer.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1063,7 +1064,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1130,7 +1139,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1190,7 +1213,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1200,7 +1232,6 @@
     'last_ten_backups' => '10 dernieres sauvegardes',
     'do_backup' => 'Faire une sauvegarde',
     'backup_successful' => 'Sauvegarde de la base de donne effectue avec succs',
-    'no_backups' => 'Aucune sauvegarde dans le systme',
     'db_explanation' => 'Cliquez sur le bouton ci-dessous pour effectuer une sauvegarde de votre systme Geeklog',
     'not_found' => "Chemin incorecte ou le fichier mysqldump n'est pas excutable.<br>Vrifiez le paramtre <strong>\$_DB_mysqldump_path</strong> dans le fichier config.php.<br>Ce paramtre est actuellement positionn  : <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Sauvegarde choue: la taille du fichier tait de 0 octets.',
@@ -1224,7 +1255,8 @@
     7 => 'Statistiques du site',
     8 => 'Personnaliser',
     9 => 'Chercher',
-    10 => 'Recherche avance'
+    10 => 'Recherche avance',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1266,4 +1298,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/french_france_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/french_france_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/french_france_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/french_france_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1507 @@
+<?php
+
+###############################################################################
+# french.php
+# This is the french language page for GeekLog!
+#
+# Copyright (C) 2002 Florent Guiliani
+# flyer@perinfo.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Effectué par:',
+    2 => 'en savoir plus',
+    3 => 'commentaires',
+    4 => 'Modifier',
+    5 => 'Voter',
+    6 => 'Résultats',
+    7 => 'Résultats du sondage',
+    8 => 'votes',
+    9 => 'Fonctions Admin:',
+    10 => 'Propositions',
+    11 => 'Articles',
+    12 => 'Cadres',
+    13 => 'Sujets',
+    14 => 'Liens',
+    15 => 'Evénements',
+    16 => 'Sondages',
+    17 => 'Utilisateurs',
+    18 => 'Requête SQL',
+    19 => 'Se déconnecter',
+    20 => 'Informations personnelles:',
+    21 => 'Nom d\'utilisateur',
+    22 => 'Numéro d\'utilisateur:',
+    23 => 'Niveau de sécurité',
+    24 => 'Anonyme',
+    25 => 'Répondre',
+    26 => 'Ce site n\'est pas responsable du contenu des commentaires. Ceux-ci sont de la responsabilité des auteurs',
+    27 => 'Dernier commentaire',
+    28 => 'Effacer',
+    29 => 'Aucun commentaire.',
+    30 => 'Vieux articles',
+    31 => 'Balise HTML autorisées:',
+    32 => 'Erreur: Utilisateur invalide',
+    33 => 'Erreur: Impossible d\'ecrire dans le fichier de log.',
+    34 => 'Erreur',
+    35 => 'Se déconnecter',
+    36 => 'sur',
+    37 => 'Aucun article utilisateur',
+    38 => '(CNT 38)',
+    39 => 'Rafraîchir',
+    40 => '(CNT 40)',
+    41 => 'Visiteur',
+    42 => 'Appartient à:',
+    43 => 'Y répondre',
+    44 => 'Parent',
+    45 => 'Numéro d\'erreur MySQL',
+    46 => 'Message d\'erreur MySQL',
+    47 => 'Espace Membres',
+    48 => 'Informations personnelles',
+    49 => 'Préférences d\'affichage',
+    50 => 'Erreur dans la requête SQL',
+    51 => 'Aide',
+    52 => 'Nouveau',
+    53 => 'Point de départ de l\'Admin',
+    54 => 'Ne peut ouvrir ce fichier.',
+    55 => 'Erreur à',
+    56 => 'Voter',
+    57 => 'Mot de passe',
+    58 => 'Connexion',
+    59 => "Pas encore de compte?  Enregistrez vous <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ici</a>",
+    60 => 'Ajouter un commentaire',
+    61 => 'Créer un nouveau compte',
+    62 => 'mots',
+    63 => 'Préférences commentaires',
+    64 => 'Envoyer cet article à un ami',
+    65 => 'Version imprimable',
+    66 => 'Mon calendrier',
+    67 => 'Bienvenue à',
+    68 => 'Survol',
+    69 => 'contact',
+    70 => 'chercher',
+    71 => 'contribuer',
+    72 => 'ressources du web',
+    73 => 'sondages précédents',
+    74 => 'calendrier',
+    75 => 'recherche avancée',
+    76 => 'statistiques du site',
+    77 => 'Plugins',
+    78 => 'Evènement à venir',
+    79 => 'Quoi de neuf',
+    80 => 'derniers articles',
+    81 => 'dernier article',
+    82 => 'heures',
+    83 => 'COMMENTAIRES',
+    84 => 'LIENS',
+    85 => 'dernières 48 heures',
+    86 => 'Pas de nouveau commentaires',
+    87 => '2 dernieres semaines',
+    88 => 'pas de nouveau liens',
+    89 => 'Il n\'ya pas d\'évènement à venir',
+    90 => 'Survol',
+    91 => 'Page créée en',
+    92 => 'secondes',
+    93 => 'Tout droits réservés',
+    94 => 'Toutes les marques citées apartiennent à leurs propriétaires respectifs.',
+    95 => 'Généré par',
+    96 => 'Groupes',
+    97 => 'Liste de mots',
+    98 => 'Plug-ins',
+    99 => 'Articles',
+    100 => 'Pas de nouveaux articles',
+    101 => 'Vos événements',
+    102 => 'Evénements généraux',
+    103 => 'Sauvegarde de la BDD',
+    104 => 'par',
+    105 => 'Mail aux membres',
+    106 => 'Vu',
+    107 => 'MAJ de GL',
+    108 => 'Vider le cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendrier des événements',
+    2 => 'Désolé il n\'ya pas d\'événement à afficher.',
+    3 => 'Quand',
+    4 => 'Où',
+    5 => 'Description',
+    6 => 'Ajouter un événement',
+    7 => 'Prochain événements',
+    8 => 'En ajoutant cet événement au calendrier vous pouvez visionnez rapidement les événements qui vous intéressent en cliquant sur "Mon Calendrier" dans le cadre Fonctions utilisateurs.',
+    9 => 'Ajouter à mon calendrier',
+    10 => 'Retirer de mon calendrier',
+    11 => "Ajouter l'événement au clendrier de {$_USER['username']}",
+    12 => 'Evénement',
+    13 => 'Commence',
+    14 => 'Fini',
+    15 => 'Retour au calendrier'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Ajouter un commentaire',
+    2 => 'Format',
+    3 => 'Se déconnecter',
+    4 => 'Créer un compte',
+    5 => 'Utilisateur',
+    6 => 'Vous devez vous identifier pour pouvoir écrire un commentaire. Si vous n\'avez pas de compte vous pouvez utiliser le formulaire ci dessous afin de vous en procurer un.',
+    7 => 'Votre dernier commentaire était il y a ',
+    8 => " secondes. Vous devez attendre au moins {$_CONF['commentspeedlimit']} secondes entre chaque commentaire.",
+    9 => 'Commenter',
+    10 => 'CNT 10',
+    11 => 'Envoyer le commentaire',
+    12 => 'Veuillez obligatoirement remplir le titre et le commentaire.',
+    13 => 'Informations personnelles',
+    14 => 'Aperçu',
+    15 => 'CNT 15',
+    16 => 'Titre',
+    17 => 'Erreur',
+    18 => 'Remarque importante',
+    19 => 'Essayez de rester autour du sujet de l\'article.',
+    20 => 'Essayez de répondre aux commentaires des autres plutôt qu\'à l\'article lui même.',
+    21 => 'Lisez tous les messages des autres avant d\'envoyer votre propre message afin de ne pas se répéter.',
+    22 => 'Veillez à utiliser un titre le plus significatif possible.',
+    23 => 'Votre adresse email ne sera pas rendue publique.',
+    24 => 'Utilisateur anonyme',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profil utilisateur de',
+    2 => 'Nom de connexion',
+    3 => 'Nom complet',
+    4 => 'Mot de passe',
+    5 => 'Email',
+    6 => 'Page d\'accueil',
+    7 => 'Bio',
+    8 => 'clé PGP',
+    9 => 'Enregistrer',
+    10 => 'les 10 derniers commentaires de l\'utilisateur',
+    11 => 'Aucun commentaires',
+    12 => 'Préférences utilisateurs de',
+    13 => 'Email temporisé la nuit',
+    14 => 'Ce mot de passe a été généré automatiquement. Il est recommendé que vous le changiez immédiatement. Pour ce faire, connectez-vous et cliquez sur informations personnelles dans le menu utilisateur.',
+    15 => "Votre compte nommé {$_CONF['site_name']} a été créé avec succès. Vous devez utiliser les informations ci-dessous pour vous conncter. Veillez à sauvegarder ses informations afin de les retrouver.",
+    16 => 'Informations sur votre compte',
+    17 => 'Ce compte n\'existe pas',
+    18 => 'L\'adresse email semble ne pas être valide.',
+    19 => 'L\'adresse email fournie est déja utilisé par un autre compte.',
+    20 => 'L\'adresse email fournie ne semble pas être valide.',
+    21 => 'Erreur',
+    22 => "Enregistrez-vous avec {$_CONF['site_name']}!",
+    23 => "Apres avoir créé votre compte {$_CONF['site_name']} vous pourrez envoyer des commentaires et d'autres éléments. Si vous n'avez pas de compte, Vous pourrez seulement envoyer des commentaires anonymes. Votre adresse email ne sera jamais publié sur ce site.",
+    24 => 'Votre mot de passe va vous être envoyé par email à l\'adresse que vous avez fournie.',
+    25 => 'Avez-vous oublié votre mot de passe?',
+    26 => 'Saisissez votre nom d\'utilisateur et cliquez sur Envoyer Mot de passe, votre mot de passe vous sera envoyé par email.',
+    27 => 'S\'enregistrer maintenant!',
+    28 => 'Envoyer mot de passe',
+    29 => 'déconnecté de',
+    30 => 'connecté dans',
+    31 => 'vous devez être connecté pour exécuter cette fonction',
+    32 => 'Signature',
+    33 => 'Ne jamais faire apparaître publiquement',
+    34 => 'C\'est votre vrai nom',
+    35 => 'Entrez votre mot de passe afin de la changer',
+    36 => 'Commence par http://',
+    37 => 'Appliquer à vos commentaires',
+    38 => 'Tout sur vous! Tous le monde pourra le voir',
+    39 => 'Votre clé puplique PGP à partager',
+    40 => 'Pas d\'icône de sujet',
+    41 => 'En attente d\'autorisation',
+    42 => 'Format de date',
+    43 => 'Nombre maximum d\'articles',
+    44 => 'Pas de boîtes',
+    45 => 'Préférences d\'affichage pour',
+    46 => 'Eléments à exclure pour',
+    47 => 'Nouvelle configuration de boîte pour',
+    48 => 'Sujets',
+    49 => 'Pas d\'icône dans les articles',
+    50 => 'Décocher les cases si vous n\'êtes pas interéssé',
+    51 => 'Seulement les nouveaux articles',
+    52 => 'Par défaut',
+    53 => 'Recevoir les articles du jour chaque nuit',
+    54 => 'Cocher les cases pour les sujets et articles que vous ne voulez pas voire apparaître',
+    55 => 'Si vous laissez toutes les cases décochées, cela signifie que vous souhaitez le comportement par défaut. Si vous sélectionnez au moins une case, n\'oubliez pas de sélectionner toutes celles qui vous intéressent car les autres vont être ignorées. Les cases sélectionnées par défaut apparaissent en gras.',
+    56 => 'Auteur',
+    57 => 'Format',
+    58 => 'Ordre de tri',
+    59 => 'Nombre maximum de commentaires',
+    60 => 'Comment souhaitez vous que vos commentaires apparaîssent?',
+    61 => 'Les plus récent ou les plus vieux en premier?',
+    62 => '100 par défaut',
+    63 => "Votre mot de passe vous a été envoyé par email et ne devrais pas tarder. Suivez les instructions du message et encore merci d'utiliser {$_CONF['site_name']}",
+    64 => 'Préférences des commentaires pour',
+    65 => 'Essayez encore de vous connecter',
+    66 => "Vous avez peut-être fait une faute dans le nom de votre compte. Essayer encore de vous connectez à l'aide du formulaire ci-dessous. Vous ête peut-être un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nouvel utilisateur</a>?",
+    67 => 'Utilisateur depuis',
+    68 => 'S\'en souvenir pour moi',
+    69 => 'Combien de temps se souvenir de vous après vous être connecté?',
+    70 => "Personnaliser l'aspect et le contenu de {$_CONF['site_name']}",
+    71 => "Une fonctionnalité intéressante de {$_CONF['site_name']} est que vous pouvez en personnaliser l'aspect et le contenu. Afin de pouvoir utiliser ces fonctionnalités vous devez vous <a href=\"{$_CONF['site_url']}/users.php?mode=new\">enregistrer</a> au près de {$_CONF['site_name']}.  Vous êtes déjà membre?  Alors utilisez le formulaire de connection dans la barre de gauche pour vous connecter!",
+    72 => 'Aspect',
+    73 => 'Langue',
+    74 => 'Changez l\'aspect de ce site!',
+    75 => 'Envoyez des email pour les sujet',
+    76 => 'Si vous sélectionner des sujets parmi ceux ci-dessous vous recevrez par email à la fin de chaque journée (vers 22H) les nouveaux articles concerant ces sujets. Choisissez uniquement les sujets qui vous intéressent !',
+    77 => 'Photo',
+    78 => 'Ajouter votre propre photo!',
+    79 => 'Cochez ici pour effacer cette photo',
+    80 => 'Nom de connexion',
+    81 => 'Envoyer email',
+    82 => '10 dernièrs article de l\'utilisateur',
+    83 => 'Statistiques de l\'utilisateur',
+    84 => 'Nombre total d\'articles:',
+    85 => 'Nombre total de commentaires:',
+    86 => 'Chercher les articles par',
+    87 => 'Your login name',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Set New Password',
+    92 => 'Enter New Password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Delete Account "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'delete account',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Privacy Options for',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email from Users',
+    103 => 'Allow email from other users',
+    104 => 'Show Online Status',
+    105 => 'Show up in Who\'s Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Aucun article à afficher',
+    2 => 'Il n\'y a pas de nouveau articles à afficher. Il n\'y a peut-être pas de nouveautés pour ce sujet ou alors vos préférences sont trop restrictives.',
+    3 => ' pour le sujet %s',
+    4 => 'Article Important du jour',
+    5 => 'Suivant',
+    6 => 'Précédent',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Une erreur s\'est produite lors de l\'envoi de votre message. Veuillez réessayer.',
+    2 => 'Message envoyé avec succès.',
+    3 => 'Vérifiez que l\'adresse du champ répondre à est valide.',
+    4 => 'Veuillez remplir les champ: Votre nom, réponse à, sujet et message',
+    5 => 'Erreur: utilisateur inconnu.',
+    6 => 'Il y a eu une erreur.',
+    7 => 'Profil utilisateur de ',
+    8 => 'Nom de connexion',
+    9 => 'URL utilisateur',
+    10 => 'Envoyer un email à',
+    11 => 'Votre nom:',
+    12 => 'Répondre à:',
+    13 => 'Subject:',
+    14 => 'Message:',
+    15 => 'les code HTML ne seront pas traduit.',
+    16 => 'Envoyer Message',
+    17 => 'Envoyer cette article à un ami',
+    18 => 'Pour',
+    19 => 'Adresse email',
+    20 => 'De',
+    21 => 'Adresse email',
+    22 => 'Tous les champs sont obligatoires',
+    23 => "Cette email vous a été envoyé de la part de %s at %s car il pensait que vous pourriez être intéressé par {$_CONF['site_url']}. Ce n'est pas un spam et l'adresse email utilisé n'est pas stokée dans une liste d'envoi.",
+    24 => 'Commentaire sur cet article à',
+    25 => 'vous devez être connecté pour utiliser cette fonction.',
+    26 => 'Ce formulaire vous permet d\'envoyer un email à tous les utilisateurs sélectionnés. Tous les champs sont obligatoires.',
+    27 => 'Message court',
+    28 => '%s a écrit: ',
+    29 => "Voici les article du jour {$_CONF['site_name']} pour ",
+    30 => ' lettre d\'information de ',
+    31 => 'Titre',
+    32 => 'Date',
+    33 => 'Lire l\'article complet à ',
+    34 => 'Fin du message',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Recherche avancée',
+    2 => 'Mot clés',
+    3 => 'Sujet',
+    4 => 'tous',
+    5 => 'type',
+    6 => 'Articles',
+    7 => 'Commentaires',
+    8 => 'Auteurs',
+    9 => 'tous',
+    10 => 'Chercher',
+    11 => 'Résultats',
+    12 => 'Résultats',
+    13 => 'Aucun résultats n\'a été trouvé',
+    14 => 'Aucun résultat ne correspond à vos critères',
+    15 => 'Veuillez réessayer.',
+    16 => 'Titre',
+    17 => 'Date',
+    18 => 'Auteur',
+    19 => "Chercher dans toute la base de données de {$_CONF['site_name']} des articles ancients ou recents.",
+    20 => 'Date',
+    21 => 'à',
+    22 => '(Format des dates YYYY-MM-DD)',
+    23 => 'Actions',
+    24 => 'Trouvé',
+    25 => 'Résultats pour',
+    26 => 'Elements pour',
+    27 => 'secondes',
+    28 => 'Il n\'y a pas d\'articles ou de commentaires correspondant à vos critères',
+    29 => 'Articles et commentaires trouvés',
+    30 => 'Aucun lien trouvé',
+    31 => 'Aucun plugin trouvé',
+    32 => 'Evénement',
+    33 => 'URL',
+    34 => 'Localisation',
+    35 => 'Tous les jours',
+    36 => 'Aucun événement trouvé',
+    37 => 'Evénements trouvés',
+    38 => 'Liens trouvés',
+    39 => 'Liens',
+    40 => 'Evénements',
+    41 => 'Your query string should have at least 3 characters.',
+    42 => 'Please use a date formatted as YYYY-MM-DD (year-month-day).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistiques du site',
+    2 => 'Nombre d\'actions',
+    3 => 'Nombre d\'articles',
+    4 => 'Nombre de sondages',
+    5 => 'Nombre de liens',
+    6 => 'Nombre d\'événements',
+    7 => 'Classement des articles les plus regardés',
+    8 => 'Titre d\'article',
+    9 => 'Visionnages',
+    10 => 'Soit il n\'y a pas d\'article sur ce site soit personne ne les as encore vus',
+    11 => 'Articles les plus commentés',
+    12 => 'Commentaires',
+    13 => 'Soit il n\'y a pas d\'article sur ce site soit aucun commentaires n\'a encore été fait.',
+    14 => 'Sondages les plus renseignés',
+    15 => 'Questions de sondages',
+    16 => 'Votes',
+    17 => 'Il n\'y a aucun sondages ou alors aucun votes enregistré',
+    18 => 'Liens les plus utilisés',
+    19 => 'Liens',
+    20 => 'Actions',
+    21 => 'Soit il n\'y a aucun lien soit personne n\'a encore cliqué dessus',
+    22 => 'Articles les plus envoyés par mail',
+    23 => 'Emails',
+    24 => 'Personne n\'a encore envoyé d\'article par mail',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Sujet en relation',
+    2 => 'Envoyer cet article à un ami',
+    3 => 'Version imprimable',
+    4 => 'Option des articles',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Pour envoyer un %s vous devez vous identifier.',
+    2 => 'Nom de connexion',
+    3 => 'Nouvel utilisateur',
+    4 => 'Envoyer un événement',
+    5 => 'Envoyer un lien',
+    6 => 'Envoyer un article',
+    7 => 'Identification requise',
+    8 => 'Envoyer',
+    9 => 'Veuillez remplir tous les champs et vérifier à deux fois les informations.',
+    10 => 'Titre',
+    11 => 'Lien',
+    12 => 'Début',
+    13 => 'Fin',
+    14 => 'Localisation',
+    15 => 'Description',
+    16 => 'Si autre, précisez',
+    17 => 'Catégorie',
+    18 => 'Autre',
+    19 => 'Lisez en premier',
+    20 => 'Erreur: catégorie manquante',
+    21 => 'Si vous sélectionnez "Autre" veuillez fournir une catégorie',
+    22 => 'Erreur: champs manquants',
+    23 => 'Veuillez remplir tous les champs du formulaire. Ils sont tous obligatoires.',
+    24 => 'Proposition enregistrée',
+    25 => 'Vos propositions %s ont été sauvées avec succès.',
+    26 => 'Vitesse limite',
+    27 => 'utilisateur',
+    28 => 'Sujet',
+    29 => 'Article',
+    30 => 'Votre dernière proposition était il y a',
+    31 => " secondes. Vous devez attendre au moins {$_CONF['speedlimit']} secondes entre chaque propositions",
+    32 => 'Aperçu',
+    33 => 'Aperçu de l\'article',
+    34 => 'Se déconnecter',
+    35 => 'les balises HTML ne sont pas autorisées',
+    36 => 'Format',
+    37 => "Proposer un événement à {$_CONF['site_name']} va mettre votre événement dans le calendrier général. Les utilisateurs pourront alors ajouter votre événement dans leur calendrier personnel. Cette fonctionnalité ne doit pas servir aux anniversaires. Après avoir envoyé votre événement il sera ou non approuvé par l'administrateur et apparaîtra ou non dans le calendrier général.",
+    38 => 'Ajouter l\'événement à',
+    39 => 'Calendrier général',
+    40 => 'Calendrier personnel',
+    41 => 'fin',
+    42 => 'début',
+    43 => 'Tous les jours à événement',
+    44 => 'Adresse 1',
+    45 => 'Adresse 2',
+    46 => 'Ville',
+    47 => 'Région',
+    48 => 'Code postal',
+    49 => 'Type d\'événement',
+    50 => 'Modifier le type',
+    51 => 'Localisation',
+    52 => 'Supprimer',
+    53 => 'Créer un compte'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Identification requise',
+    2 => 'Utilisateur ou mot de passe incorrect',
+    3 => 'Mot de passe incorrect',
+    4 => 'Utilisateur:',
+    5 => 'Mot de passe:',
+    6 => 'Toutes tentatives d\'accès à cette portion du site est enregistrée et analysée.<br>Cette page est réservée aux personnes autorisées.',
+    7 => 'Connexion'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Droits insuffisants',
+    2 => 'Vous n\'avez pas les droits nécessaires pour modifier ce cadre',
+    3 => 'Editeur de cadre',
+    4 => 'CNT 4',
+    5 => 'titre du cadre',
+    6 => 'sujet',
+    7 => 'tous',
+    8 => 'niveau de sécurité du cadre',
+    9 => 'Ordre du cadre',
+    10 => 'type du cadre',
+    11 => 'Cadre Portail',
+    12 => 'Cadre Normal',
+    13 => 'Cadre portail d\'option',
+    14 => 'URL RDF',
+    15 => 'Dernière MAJ RDF',
+    16 => 'Cadre normal d\'option',
+    17 => 'Contenu du cadre',
+    18 => 'Veuillez remplir les champs: titre, niveau de sécurité et contenu du cadre',
+    19 => 'Contrôleur de cadre',
+    20 => 'Cadre titre',
+    21 => 'Cadre niv. sec.',
+    22 => 'Cadre type',
+    23 => 'Cadre ordre',
+    24 => 'Cadre sujet',
+    25 => 'Cliquez sur le lien ci-dessous pour modifier ou supprimer un cadre.  Cliquez sur le lien nouveau cadre pour créer un nouveau cadre.',
+    26 => 'Cadre d\'affichage',
+    27 => 'Cadre PHP',
+    28 => 'Option du cadre PHP',
+    29 => 'Cadre fonction',
+    30 => 'Si vous voulez que l\'un de vos cadres utilise du PHP, saisissez le nom de la fonction à utiliser.  Le nom de la fonction doit commencer par "phpblock_" (ex: phpblock_getweather).  Si ce n\'est pas le cas, votre fonction NE SERA PAS appellée.  Nous faisons ça pour des raisons de sécurité.  Ne mettez pas de parenthèses vides "()" après le nom de votre fonction.  Enfin, nous vous recommandons de mettre tout le code des cadre PHP dans /path/to/geeklog/system/lib-custom.php.  Cela permettera de garder votre code même après une mise à jour de geeklog.',
+    31 => 'Erreur dans le cadre PHP.  La fonction, %s, n\'existe pas.',
+    32 => 'Erreur: champs manquant',
+    33 => 'Vous devez mettre l\'URL dans le fichier .rdf pour le cadre portail.',
+    34 => 'Vous devez renseigner le titre et la fonction du cadre PHP.',
+    35 => 'Vous devez entrer le titre et le contenu du cadre normal.',
+    36 => 'Vous devez entrer le contenu pour le cadre d\'affichage.',
+    37 => 'Nom erroné dans la fonction du cadre PHP',
+    38 => 'Les fonctions des cadres PHP doivent commencer par \'phpblock_\' (ex: phpblock_getweather).  Le préfixe \'phpblock_\' est nécessaire pour des raisons de sécurité qui empêche l\'exécution de code arbitraire.',
+    39 => 'Côté',
+    40 => 'Gauche',
+    41 => 'Droit',
+    42 => 'Vous devez saisir l\'ordre et le niveau de sécurité pour les cadres par défaut de geeklog',
+    43 => 'Accueil seulement',
+    44 => 'Accès interdit',
+    45 => "Vous essayez d'accéder à un cadre auquel vous n'avez pas le droit.  Cette tentative est enregistrée. Veuillez <a href=\"{$_CONF['site_admin_url']}/block.php\">retourner à la page de controle des cadres</a>.",
+    46 => 'Nouveau Cadre',
+    47 => 'Accueil admin',
+    48 => 'Nom du cadre',
+    49 => ' (pas d\'espace et doit être unique)',
+    50 => 'URL d\'aide',
+    51 => 'http:// inclus',
+    52 => 'laisser à vide pour ne pas afficher l\'icone d\'aide',
+    53 => 'Activé',
+    54 => 'enregistrer',
+    55 => 'annuler',
+    56 => 'supprimer',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editeur d\'événement',
+    2 => 'CNT 2',
+    3 => 'titre',
+    4 => 'URL',
+    5 => 'début',
+    6 => 'fin',
+    7 => 'localisation',
+    8 => 'description',
+    9 => '(http:// comprid)',
+    10 => 'vous devez sélectionner une date, une heure, une description et une localisation!',
+    11 => 'Contrôleur d\'événement',
+    12 => 'Pour supprimer ou modifier un événement, cliquez sur le bouton ci-dessous. Pour créer un nouvel événement cliquez sur nouvel événement.',
+    13 => 'titre',
+    14 => 'début',
+    15 => 'fin',
+    16 => 'Accès interdit',
+    17 => "vous essayez d'accéder à un événement auquel vous n'avez pas les droits. Cette tentative a été enregistrée. Retournez à <a href=\"{$_CONF['site_admin_url']}/event.php\">la page d'aministration des événements</a>.",
+    18 => 'Nouvel Evénement',
+    19 => 'Page de l\'administrateur',
+    20 => 'enregistrer',
+    21 => 'annuler',
+    22 => 'supprimer',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Articles précédents',
+    2 => 'Articles suivants',
+    3 => 'Mode',
+    4 => 'Format',
+    5 => 'Editeur d\'articles',
+    6 => 'Il n\'y a pas d\'articles dans le système',
+    7 => 'Auteur',
+    8 => 'Enregistrer',
+    9 => 'Aperçu',
+    10 => 'Annuler',
+    11 => 'Supprimer',
+    12 => 'ID',
+    13 => 'Titre',
+    14 => 'Sujet',
+    15 => 'Date',
+    16 => 'Texte d\'intro',
+    17 => 'Texte intégral',
+    18 => 'Hits',
+    19 => 'Commentaires',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Liste des articles',
+    23 => 'Pour modifier ou supprimer un article, cliquez sur son numéro. Pour visionner un article, cliquez sur le titre de l\'article. Pour créer un nouvel article, cliquez sur le bouton écrire un article.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Aperçu de l\'article',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Veuillez renseigner l\'auteur, le titre et le texte d\'introduction.',
+    32 => 'Tête d\'affiche',
+    33 => 'Il ne peut y avoir qu\'un seul article en tête d\'affiche',
+    34 => 'Brouillon',
+    35 => 'Oui',
+    36 => 'Non',
+    37 => 'Plus sur',
+    38 => 'Plus de',
+    39 => 'Emails',
+    40 => 'Accès refusé',
+    41 => "Vous essayez d'accéder à un article auqule vous n'avez pas droit.  Cette tentative est enregistrée.  Vous pouvez voir cet article en lecture seule uniquement. Veuillez <a href=\"{$_CONF['site_admin_url']}/story.php\">retourner sur la page de contrôle des article</a> lorsque vous aurez fini.",
+    42 => "Vous essayez d'accéder à un article auquel vous n'avez pas droit.  Cette tentative est enregistrée.  Veuillez <a href=\"{$_CONF['site_admin_url']}/story.php\">retourner à la page de contrôle des articles</a>.",
+    43 => 'Nouvel article',
+    44 => 'Accueil Admin',
+    45 => 'Accès',
+    46 => '<b>REMARQUE:</b> si vous indiquez une date future, cet article n\'apparaîtra qu\'à partir de cette date. Cela signifie aussi que l\'article sera ignoré des recherches et des statistiques.',
+    47 => 'Images',
+    48 => 'image',
+    49 => 'droite',
+    50 => 'gauche',
+    51 => 'Pour ajouter une des images que vous avez fournies vous devez insérer un texte spécial dans votre article. Vous devez insérer [imageX], [imageX_right] ou [imageX_left] où X est le numéro de l\'image que vous avez fournie.  REMARQUE: vous devez utiliser toutes les images fournies.  Si vous ne le faites pas vous ne pourrez pas enregistrer votre article.<BR><P><B>APERCU</B>: lors de l\'utilisation d\'images il est préférables de faire un brouillon plutôt que d\'utiliser la fonction d\'apercu.  Utilisez le bouton d\'apercu uniquement lorsqu\'il n\'y a pas d\'image.',
+    52 => 'Supprimer',
+    53 => 'n\'est pas utilisée.  Vous devez insérer l\'image dans le texte de votre article avant de l\'enregistrer.',
+    54 => 'Image fournie non utilisée',
+    55 => 'L\'erreur suivante est apparue lors de l\'enregistrement de votre article.  Veuillez corriger ces erreurs et réessayer',
+    56 => 'Montrer l\'icône',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editeur de sujet',
+    2 => 'Numéro',
+    3 => 'Nom',
+    4 => 'Image',
+    5 => '(ne pas utiliser d\'espaces)',
+    6 => 'Supprimer un sujet supprimera tous les articles et cadres en relations avec celui-ci',
+    7 => 'Veuillez renseigner le numéro et le nom du sujet.',
+    8 => 'Contrôleur de sujet',
+    9 => 'Cliquez sur un sujet pour le modifier ou le supprimer.  Cliquez sur le bouton Nouveau Sujet à gauche pour créer un sujet. Vos droits d\'accès envers chaque sujet apparaissent entre parenthèses.',
+    10 => 'Ordre de tri',
+    11 => 'Articles/Page',
+    12 => 'Accès interdit',
+    13 => "vous essayez d'accéder à un sujet auquel vous n'avez pas droit.  Cette tentative est enregistrée. Veuillez <a href=\"{$_CONF['site_admin_url']}/topic.php\">retourner à la page de contrôle des sujets</a>.",
+    14 => 'Méthode de tri',
+    15 => 'alphabétique',
+    16 => 'défaut:',
+    17 => 'Nouveau Sujet',
+    18 => 'Accueil Admin',
+    19 => 'Enregistrer',
+    20 => 'Annuler',
+    21 => 'Supprimer',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editeur d\'utilisateur',
+    2 => 'Numéro',
+    3 => 'Nom de connexion',
+    4 => 'Nom complet',
+    5 => 'Mot de passe',
+    6 => 'Niveau de sécurité',
+    7 => 'Adresse email',
+    8 => 'Page d\'accueil',
+    9 => '(ne pas utiliser d\'espaces)',
+    10 => 'Veuillez renseigner le nom de connexion, le nom complet, le nom complet et l\'adresse email.',
+    11 => 'Contrôleur d\'utilisateurs',
+    12 => 'Cliquez sur un utilisateur pour le modifier ou le supprimer.  Cliquez sur le bouton Nouvel utilisateur à gauche pour créer un utilisateur. Vous pouvez faire des recherches simple en entrant une partie du nom de connexion, du nom complet ou de l\'adresse email (ex:*son* ou *.edu) dans le formulaire ci-dessous.',
+    13 => 'Niv. Sec.',
+    14 => 'Date d\'enregistrement',
+    15 => 'Nouvel Utilisateur',
+    16 => 'Accueil Admin',
+    17 => 'Changer le mot de passe',
+    18 => 'Annuler',
+    19 => 'Supprimer',
+    20 => 'Enregistrer',
+    21 => 'Le nom de connexion est déjà utilisé.',
+    22 => 'Erreur',
+    23 => 'Ajout par lot',
+    24 => 'Importation par lot d\'utilisateurs',
+    25 => 'vous pouvez importer un lot d\'utilisateur dans geeklog.  Les champ du fichier d\'import doivent être séparés par une tabulation. Ils doivent apparaître dans l\'ordre suivant: Nom complet, nom de connexion, adresse email.  Chaque utilisateur importé sera averti par email et aura un mot de passe auto-généré.  Il ne doit y avoir qu\'un seul utilisateur par ligne.  Ne pas respecter ces consignes peut entraîner des dégat qui ne seront réparables que manuellement alors redoublez de vigilance!',
+    26 => 'Chercher',
+    27 => 'Nb résultats max',
+    28 => 'Coche la case pour supprimer la photo',
+    29 => 'Chemin',
+    30 => 'Importer',
+    31 => 'Nouveaux Utilisateurs',
+    32 => 'Traitement terminé. %d utilisateurs ont été importés et %d sont tombés en erreur',
+    33 => 'envoyer',
+    34 => 'Erreur: Vous devez préciser un fichier à charger.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Valider',
+    2 => 'Supprimer',
+    3 => 'Modifier',
+    4 => 'Profil',
+    10 => 'Titre',
+    11 => 'Début',
+    12 => 'URL',
+    13 => 'Catégorie',
+    14 => 'Date',
+    15 => 'Sujet',
+    16 => 'Utilisateur',
+    17 => 'Nom Complet',
+    18 => 'Email',
+    34 => 'Commandes et Contrôles',
+    35 => 'Soumissions d\'articles',
+    36 => 'Soumission de liens',
+    37 => 'Soumission d\'événements',
+    38 => 'Envoyer',
+    39 => 'Il n\'y a aucune soumission à administrer pour le moment',
+    40 => 'Soumissions utilisateur'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Dimanche',
+    2 => 'Lundi',
+    3 => 'Mardi',
+    4 => 'Mercredi',
+    5 => 'Jeudi',
+    6 => 'Vendredi',
+    7 => 'Samedi',
+    8 => 'Ajouter un événement',
+    9 => 'événement geeklog',
+    10 => 'Evénements pour',
+    11 => 'Calendrier général',
+    12 => 'Calendrier personnel',
+    13 => 'Janvier',
+    14 => 'Février',
+    15 => 'Mars',
+    16 => 'Avril',
+    17 => 'Mai',
+    18 => 'Juin',
+    19 => 'Juillet',
+    20 => 'Août',
+    21 => 'Septembre',
+    22 => 'Octobre',
+    23 => 'Novembre',
+    24 => 'Décembre',
+    25 => 'Retour à ',
+    26 => 'tous les jours',
+    27 => 'semaine',
+    28 => 'Calendrier personnel de ',
+    29 => 'Calendrier public',
+    30 => 'Supprimer l\'événement',
+    31 => 'Ajouter',
+    32 => 'Evénement',
+    33 => 'Date',
+    34 => 'Heure',
+    35 => 'Ajout rapide',
+    36 => 'Envoyer',
+    37 => 'Désolé, le calendrier personnel n\'est pas activé',
+    38 => 'Editeur d\'événements personnels',
+    39 => 'Jour',
+    40 => 'Semaine',
+    41 => 'Mois'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "Envoyer un mail aux utilisateurs de {$_CONF['site_name']}",
+    2 => 'De',
+    3 => 'Adresse de réponse',
+    4 => 'Sujet',
+    5 => 'Message',
+    6 => 'A:',
+    7 => 'Tous les utilisateurs',
+    8 => 'Admin',
+    9 => 'Options',
+    10 => 'HTML',
+    11 => 'message urgent!',
+    12 => 'Envoyer',
+    13 => 'Effacer',
+    14 => 'Ignorer les préférences utilisateurs',
+    15 => 'Erreur lors de l\'envoi d\'un message à: ',
+    16 => 'Message envoyé avec succès à: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Envoyer un autre message</a>",
+    18 => 'A',
+    19 => 'Remarque: si vous voulez envoyer un message à tous les utilisateurs, utilisez le group Logged-in dans le champ A.',
+    20 => "<successcount> messages ont été envoyés avec succès et <failcount> n'ont pas pu être envoyés.  Vous trouverez le détail de chaque tentative ci-dessous.  Vous pouvez également <a href=\"{$_CONF['site_admin_url']}/mail.php\">envoyer un autre message</a> ou <a href=\"{$_CONF['site_admin_url']}/moderation.php\">revenir à la page d'administration</a>.",
+    21 => 'Ratés',
+    22 => 'Réussis',
+    23 => 'pas d\'échec',
+    24 => 'pas de succès',
+    25 => '-- Choisir un groupe --',
+    26 => 'Remplissez tous les champs et choississez un groupe parmis la liste.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installer des plugin peut causer des domages à geeklog.  Il est important de n\'installer que des plugins provenant de <a href="http://www.geeklog.net" target="_blank">Geeklog</a> car nous les testons et les approuvons pour plusieurs systèmes.  Installer des plugins requiert l\'exécution de plusieurs commandes systèmes qui peuvent poser des problèmes de sécurité particulièrement si vous utilisez des plugin provenant de tierse partie.  Vous êtes averti des domages que peut causer l\'installation d\'un plugin.  En d\'autres termes, vous installez des plugin à vos propres risques.  Les instructions d\'installation des plugins sont incluses dans chaque plugin.',
+    2 => 'Instructions d\'installation d\'un plugin',
+    3 => 'Formulaire d\'installation d\'un plugin',
+    4 => 'Fichier de plugin',
+    5 => 'Liste de plugins',
+    6 => 'Attention: plugin déjà installé!',
+    7 => 'Le plugin que vous essayer d\'installer existe déjà.  Veuillez supprimer le plugin avant de le réinstaller.',
+    8 => 'Test de compatibilité du plugin échoué',
+    9 => 'Ce plugin requiert une version plus récente de geeklog. Vous pouvez mettre à jour votre <a href="http://www.geeklog.net">Geeklog</a> ou obtenir une autre version du plugin.',
+    10 => '<br><b>Aucun plugin n\'est actuellement installé.</b><br><br>',
+    11 => 'Cliquez sur le numéro du plugin pour le modifier ou le supprimer. Pour en savoir d\'avantage sur les plugins, cliquez sur le nom du plugin et vous serez dirigé vers le site web du plugin. Pour installer ou mettre à jour un plugin veuillez vous référer à la documentation du plugin.',
+    12 => 'Aucun nom de plugin n\'a été passé à plugineditor()',
+    13 => 'Editeur de plugin',
+    14 => 'Nouveau plugin',
+    15 => 'Accueil Admin',
+    16 => 'Nom du plugin',
+    17 => 'Version du plugin',
+    18 => 'Version de Geeklog',
+    19 => 'Activé',
+    20 => 'Oui',
+    21 => 'Non',
+    22 => 'Installer',
+    23 => 'Enregistrer',
+    24 => 'Annuler',
+    25 => 'Supprimer',
+    26 => 'Nom du plugin',
+    27 => 'Site web du plugin',
+    28 => 'Version du plugin',
+    29 => 'Version de Geeklog',
+    30 => 'Supprimer le plugin ?',
+    31 => 'Etes-vous sûr de vouloir supprimer ce plugin ?  Toutes les données, fichiers et structures utilisés par ce plugin seront détruits.  Si vous êtes sûr cliquez sur le bouton Supprimer.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Votre mot de passe vous a été envoyé par mail et devrait arriver d'un moment à l'autre. Suivez les instructions incluses dans le message et encore merci d'utiliser {$_CONF['site_name']}",
+    2 => "Merci de proposer un article à {$_CONF['site_name']}.  Il a été envoyé à notre équipe qui l'aprouvera ou non. Dans la cas positif votre article sera publié.",
+    3 => "Merci de proposer un lien à {$_CONF['site_name']}.  Il a été envoyé à notre équipe qui l'aprouvera ou non.  Dans le cas positif votre lien sera publié <a href={$_CONF['site_url']}/links.php>ici</a>.",
+    4 => "Merci de proposer un événement à {$_CONF['site_name']}.  Il a été envoyé à notre équipe qui l'aprouvera ou non.  Dans le cas positif votre événement sera publié <a href={$_CONF['site_url']}/calendar.php>ici</a>.",
+    5 => 'Vos informations ont été mises à jour avec succès.',
+    6 => 'Vos préférences d\'affichages ont été mises à jour avec succès.',
+    7 => 'Vos préférences de commentaires ont été mises à jour avec succès.',
+    8 => 'Vous avez été déconnecté avec succès.',
+    9 => 'Votre article a été enregistré avec succès.',
+    10 => 'L\'article a été supprimé avec succès.',
+    11 => 'Votre cadre a été enregistré avec succès.',
+    12 => 'Le cadre a été supprimé avec succès.',
+    13 => 'Votre sujet a été enregistré avec succès.',
+    14 => 'Le sujet et tous ses articles ainsi que ses cadres ont été supprimés avec succès.',
+    15 => 'Votre lien a été enregistré avec succès.',
+    16 => 'Le lien a été supprimé avec succès.',
+    17 => 'Votre événement a été enregistré avec succès.',
+    18 => 'L\'événement a été supprimé avec succès.',
+    19 => 'Votre sondage a été enregistré avec succès.',
+    20 => 'Le sondage a été supprimé avec succès.',
+    21 => 'Le nouvel utilisateur a été enregistré avec succès.',
+    22 => 'L\'utilisateur a été supprimé avec succès.',
+    23 => 'Erreur durant l\'ajout d\'un événement à votre calendrier. Aucun identifiant d\'événement n\'a été transmis.',
+    24 => 'L\'événement a été enregistré dans votre calendrier.',
+    25 => 'Vous devez vous connecter pour consulter votre calendrier',
+    26 => 'L\'événement a été supprimé de votre calendrier avec succès.',
+    27 => 'Message envoyé avec succès.',
+    28 => 'Le plugin a été supprimé avec succès.',
+    29 => 'Les calendriers personnels ne sont pas activés.',
+    30 => 'Accès Interdit',
+    31 => 'Vous n\'avez pas accès à la page d\'adminisrtation des articles.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    32 => 'Vous n\'avez pas accès à la page d\'administration des sujets.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    33 => 'Vous n\'avez pas accès à la page d\'administration des cadres.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    34 => 'Vous n\'avez pas accès à la page d\'administration des liens.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    35 => 'Vous n\'avez pas accès à la page d\'administration des événements.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    36 => 'Vous n\'avez pas accès à la page d\'administration des sondages.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    37 => 'Vous n\'avez pas accès à la page d\'administration des utilisateurs.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    38 => 'Vous n\'avez pas accès à la page d\'administration des plugins.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    39 => 'Vous n\'avez pas accès à la page d\'administration des mails.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    40 => 'Message du système',
+    41 => 'Vous n\'avez pas accès à la page d\'administration des substitutions de mots.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistréss.',
+    42 => 'Votre mot a été enregistré avec succès.',
+    43 => 'Le mot a été supprimé avec succès.',
+    44 => 'Le plugin a été installé avec succès!',
+    45 => 'Le plugin a été supprimé avec succès.',
+    46 => 'Vous n\'avez pas accès à l\'utilitaire de sauvegarde de la base de données.  Toutes les tentatives d\'accès à des parties non autorisées sont enregistrées.',
+    47 => 'Cette fonctionnalité ne fonctionne que sur *nix.  Si vous utilisez *nix alors votre cache a été vidé avec succès. Si vous utilisez Windows, vous devez chercher les fichiers adodb_*.php et les supprimer à la main.',
+    48 => "Merci d'avoir demandé votre compte utilisateur pour {$_CONF['site_name']}. Il a été envoyé à notre équipe qui l'aprouvera ou non. Dans le cas positif, votre mot de passe vous sera envoyé par email à l'adresse que vous avez fournie.",
+    49 => 'Votre groupe a été enregistré avec succès.',
+    50 => 'Le groupe a été supprimé avec succès.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Accès',
+    'ownerroot' => 'Propriétaire/Admin',
+    'group' => 'Groupe',
+    'readonly' => 'Lecture seule',
+    'accessrights' => 'Droits d\'accès',
+    'owner' => 'Propriétaire',
+    'grantgrouplabel' => 'Autorisation au dela du groupe d\'édition',
+    'permmsg' => 'REMARQUE: les membres sont tous les utilisateurs identifiés et les anonymes sont tous les autres.',
+    'securitygroups' => 'Groupe de sécurité',
+    'editrootmsg' => "Excepté si vous êtes administrateur, vous ne pouvez pas modifier un autre administrateur.  Vous pouvez modifier tous les utilisateurs exceptés les administrateur. Toutes tentatives de modifications d'un administrateur sont enregistrées.  Retournez sur la <a href=\"{$_CONF['site_admin_url']}/user.php\">page d'administration</a>.",
+    'securitygroupsmsg' => 'Sélectionner les cases des groupes auxquels l\'utilisateur appartient',
+    'groupeditor' => 'Editeur de groupe',
+    'description' => 'Description',
+    'name' => 'Nom',
+    'rights' => 'Droits',
+    'missingfields' => 'Champs manquants',
+    'missingfieldsmsg' => 'Vous devez saisir un nom et une description',
+    'groupmanager' => 'Administrateur de groupe',
+    'newgroupmsg' => 'Pour modifier ou supprimer un groupe, cliquez sur le groupe ci-dessous. Pour créer un nouveu groupe, cliquez sur Nouveau Groupe. Les groupes natifs ne peuvent pas être supprimés car ils sont utilisés par le système.',
+    'groupname' => 'Nom du groupe',
+    'coregroup' => 'Groupe système',
+    'yes' => 'Oui',
+    'no' => 'Non',
+    'corerightsdescr' => "Ce groupe est un groupe système de {$_CONF['site_name']}.  Les droits de ce groupe ne peuvent pas être modifiés.  La liste ci-dessous des droits d'accès du groupe n'est pas modifiable.",
+    'groupmsg' => 'Les droits des groupes sont hiérarchiques.  En ajoutant un groupe à un autre vous ajoutez tous les droits de ce groupe à l\'autre.  Lorsque c\'est possible, utilisez les groupes déja définis.  Si vous avez besoin de droits spécifiques, vous pouvez les choisir dans la liste ci-dessous.  Pour Ajouter un groupe à celui-ci cliquez sur la case du groupe à ajouter.',
+    'coregroupmsg' => "Ce groupe est un groupe système de {$_CONF['site_name']}.  Les droits de ce groupe ne peuvent pas être modifiés. La liste ci-dessous des groupes inclus de ce groupe n'est pas modifiable.",
+    'rightsdescr' => 'Les droits suivants peuvent être donnés directement au groupe OU provenir d\'un groupe inclus. Les droits sans case à cocher proviennent de groupe inclus. Les droits qui ont des cases à cocher sont donnés directement au groupe.',
+    'lock' => 'Bloquer',
+    'members' => 'Membres',
+    'anonymous' => 'Anonymes',
+    'permissions' => 'Permissions',
+    'permissionskey' => 'R = lecture, E = modification, le droit de modification implique le droit de lecture',
+    'edit' => 'Modifier',
+    'none' => 'Rien',
+    'accessdenied' => 'Accès interdit',
+    'storydenialmsg' => 'vous n\'avez pas le droit de lire cette article. Peut-être que vous n\'êtes pas membre de .  Vous pouvez <a href=users.php?mode=new>vous enregistrer</a> sur  pour obtenir un compte utilisateur!',
+    'eventdenialmsg' => 'vous n\'avez pas accès à cet évènement. Peut-être que vous n\'êtes pas membre de .  Vous pouvez <a href=users.php?mode=new>vous enregistrer</a> sur  pour obtenir un compte utilisateur!',
+    'nogroupsforcoregroup' => 'Le groupe n\'inclue aucun autre groupe',
+    'grouphasnorights' => 'Le groupe n\'a pas accès aux fonctiones administratives',
+    'newgroup' => 'Nouveau Groupe',
+    'adminhome' => 'Accueil Admin',
+    'save' => 'enregistrer',
+    'cancel' => 'annuler',
+    'delete' => 'supprimer',
+    'canteditroot' => 'Vous avez essayé de modifier le groupe administrateur mais vous n\'en faites pas partie. Vous n\'avez pas accès à ce groupe. Veuillez contacter l\'administrateur si vous pensez que c\'est une erreur.',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '10 dernieres sauvegardes',
+    'do_backup' => 'Faire une sauvegarde',
+    'backup_successful' => 'Sauvegarde de la base de donnée effectuée avec succès',
+    'db_explanation' => 'Cliquez sur le bouton ci-dessous pour effectuer une sauvegarde de votre système Geeklog',
+    'not_found' => "Chemin incorecte ou le fichier mysqldump n'est pas exécutable.<br>Vérifiez le paramètre <strong>\$_DB_mysqldump_path</strong> dans le fichier config.php.<br>Ce paramètre est actuellement positionné à : <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Sauvegarde échouée: la taille du fichier était de 0 octets.',
+    'path_not_found' => "{$_CONF['backup_path']} n'existe pas ou n'est pas un répertoire.",
+    'no_access' => "Erreur: le répertoire {$_CONF['backup_path']} n'est pas accessible.",
+    'backup_file' => 'Fichier de sauvegarde',
+    'size' => 'Taille',
+    'bytes' => 'Octets',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Survol',
+    2 => 'Contacts',
+    3 => 'Ecrire un article',
+    4 => 'Liens',
+    5 => 'Sondages',
+    6 => 'Calendrier',
+    7 => 'Statistiques du site',
+    8 => 'Personnaliser',
+    9 => 'Chercher',
+    10 => 'Recherche avancée',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Erreur 404',
+    2 => 'Le système ne trouve pas <b>%s</b>.',
+    3 => "<p>Le fichier que vous demandez n'existe pas. Allez à la <a href=\"{$_CONF['site_url']}\">page principale</a> ou la <a href=\"{$_CONF['site_url']}/search.php\">page de recherche</a> afin de retrouver ce que vous avez perdu."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Vous devez vous connecter',
+    2 => 'Vous devez vous identifier à l\'aide de l\'espace membre pour accéder à cette partie du site.',
+    3 => 'Accueil',
+    4 => 'Nouvel utilisateur'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/german_formal.php 1.4.0sr5-1/cpanel-glprivate/language/german_formal.php
--- 1.3.11sr1/cpanel-glprivate/language/german_formal.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/german_formal.php	2006-08-08 02:39:06.000000000 -0500
@@ -7,8 +7,8 @@
 # (formal German). See german.php for a language file addressing the user with
 # the more informal "Du".
 #
-# Authors: P. Sack   <psack@pr-ide.de>
-#          Dirk Haun <dirk@haun-online.de>
+# Authors: P. Sack   <psack AT pr-ide DOT de>
+#          Dirk Haun <dirk AT haun-online DOT de>
 #
 # Based on the original english.php, started by Jason Whittenburg.
 #
@@ -102,8 +102,8 @@
     55 => 'Fehler in',
     56 => 'Abstimmen',
     57 => 'Passwort',
-    58 => 'Log-In',
-    59 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">Neuer User!</a>",
+    58 => 'Anmelden',
+    59 => "Melden Sie sich jetzt als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> an.",
     60 => 'Kommentar schreiben',
     61 => 'Neuen Account anlegen',
     62 => 'Wrter',
@@ -146,18 +146,28 @@
     99 => 'ARTIKEL',
     100 => 'Keine neuen Artikel',
     101 => 'Meine Termine',
-    102 => 'Veranstaltungen',
+    102 => 'Allgemeine Termine',
     103 => 'DB Backups',
     104 => 'von',
     105 => 'Mail an User',
     106 => 'Angezeigt',
-    107 => 'GL Version Test',
+    107 => 'Update verfgbar?',
     108 => 'Cache lschen',
     109 => 'Beitrag melden',
     110 => 'Site-Admin auf diesen Beitrag hinweisen',
     111 => 'Als PDF anzeigen',
     112 => 'Registrierte User',
-    113 => 'Dokumentation'
+    113 => 'Dokumentation',
+    114 => 'TRACKBACKS',
+    115 => 'Keine neuen Trackback-Kommentare',
+    116 => 'Trackback',
+    117 => 'Verzeichnis',
+    118 => 'Fortsetzung auf der nchsten Seite:',
+    119 => "<a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">Passwort vergessen?</a>",
+    120 => 'Permalink',
+    121 => 'Kommentare (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Alle HTML-Tags sind erlaubt'
 );
 
 ###############################################################################
@@ -165,7 +175,7 @@
 
 $LANG02 = array(
     1 => 'Terminkalender',
-    2 => 'Sorry, es gibt keine Termine anzuzeigen.',
+    2 => 'Es gibt keine Termine anzuzeigen.',
     3 => 'Wann',
     4 => 'Wo',
     5 => 'Beschreibung',
@@ -186,13 +196,13 @@
 
 $LANG03 = array(
     1 => 'Kommentar schreiben',
-    2 => 'Modus',
+    2 => 'Format',
     3 => 'Abmelden',
     4 => 'Account anlegen',
     5 => 'Username',
-    6 => 'Um einen Kommentar abgeben zu knnen, mssen Sie angemeldet sein. Wenn Sie noch keinen Account haben, benutze Sie bitte das Formular um einen anzulegen.',
+    6 => 'Um einen Kommentar abgeben zu knnen, mssen Sie angemeldet sein. Wenn Sie noch keinen Account haben, benutzen Sie bitte das Formular um einen anzulegen.',
     7 => 'Ihr letzter Kommentar war vor ',
-    8 => " Sekunden. Zwischen zwei Kommentaren mssen aber mindestens {$_CONF['commentspeedlimit']} Sekunden vergangen sein",
+    8 => " Sekunden. Zwischen zwei Kommentaren mssen aber mindestens {$_CONF['commentspeedlimit']} Sekunden vergangen sein.",
     9 => 'Kommentar',
     10 => 'Beitrag melden',
     11 => 'Kommentar abschicken',
@@ -231,7 +241,7 @@
     11 => 'Keine Kommentare',
     12 => 'User-Einstellungen fr',
     13 => 'E-Mail Nightly Digest',
-    14 => 'Dieses Passwort wurde mit einem Zufallsgenerator erzeugt. Es wird empfohlen, das Passwort nach dem Anmelden sofort zu ndern. Um Ihr Passwort zu ndern, melden Sie sich bitte an und whlen dann den Punkt Userprofil ndern im User Block.',
+    14 => 'Dieses Passwort wurde mit einem Zufallsgenerator erzeugt. Es wird empfohlen, das Passwort nach dem Anmelden sofort zu ndern. Um Ihr Passwort zu ndern, melden Sie sich bitte an und whlen dann den Punkt Userprofil ndern im Block Einstellungen.',
     15 => "Ihr Account fr {$_CONF['site_name']} wurde erfolgreich angelegt. Um ihn benutzen zu knnen, melden Sie sich bitte mit den folgenden Informationen an. Diese E-Mail bitte aufheben.",
     16 => 'Ihre Zugangsdaten',
     17 => 'Account existiert nicht',
@@ -260,7 +270,7 @@
     40 => 'Kategorien ohne Icons',
     41 => 'Bereit zu Moderieren',
     42 => 'Datumsformat',
-    43 => 'Max. Anzahl Artikel',
+    43 => 'Artikel pro Seite',
     44 => 'Keine Blcke',
     45 => 'Anzeige-Einstellungen fr',
     46 => 'Nicht anzeigen fr',
@@ -282,13 +292,13 @@
     62 => 'Defaultwert: 100',
     63 => "Ihr Passwort sollte in Krze per E-Mail eintreffen. Bitte beachten Sie die Hinweise in der E-Mail und Danke fr Ihr Interesse an {$_CONF['site_name']}",
     64 => 'Kommentar-Einstellungen fr',
-    65 => 'Bitte noch einmal versuchen, sich anzumelden',
-    66 => "Haben Sie sich vertippt? Bitte versuchen Sie noch einmal, sich hier anzumelden. Oder mchten Sie sich <a href=\"{$_CONF['site_url']}/users.php?mode=new\">als neuer User registrieren</a>?",
+    65 => 'Bitte versuchen Sie noch einmal, sich anzumelden',
+    66 => "Haben Sie sich vertippt? Bitte versuchen Sie noch einmal, sich hier anzumelden.",
     67 => 'Mitglied seit',
     68 => 'Angemeldet fr',
     69 => 'Wie lange soll das System Sie nach dem Anmelden erkennen?',
     70 => "Aussehen und Inhalt von {$_CONF['site_name']} konfigurieren",
-    71 => "Zu den Features von {$_CONF['site_name']} gehrt, dass Sie selber festlegen Knnen, welche Artikel Sie angezeigt bekommen. Darber hinaus knnen Sie auch das Aussehen der Website verndern. Um in den Genuss dieser Features zu kommen, mssen Sie sich jedoch zuerst bei {$_CONF['site_name']} <a href=\"{$_CONF['site_url']}/users.php?mode=new\">anmelden</a>. Oder sind Sie schon angemeldet? Dann benutzen Sie bitte das Anmeldeformular auf der linken Seite.",
+    71 => "Zu den Features von {$_CONF['site_name']} gehrt, dass Sie selbst festlegen knnen, welche Artikel Sie angezeigt bekommen. Darber hinaus knnen Sie auch das Aussehen der Website verndern. Um in den Genuss dieser Features zu kommen, mssen Sie sich jedoch zuerst bei {$_CONF['site_name']} <a href=\"{$_CONF['site_url']}/users.php?mode=new\">anmelden</a>. Oder sind Sie schon angemeldet? Dann benutzen Sie bitte das Anmeldeformular auf der linken Seite.",
     72 => 'Erscheinungsbild',
     73 => 'Sprache',
     74 => 'ndern Sie das Aussehen dieser Site',
@@ -315,7 +325,7 @@
     95 => 'Sie knnen Ihren Account lschen, indem Sie auf den "Account Lschen"-Button klicken. Artikel und Kommentare, die Sie unter diesem Account geschrieben haben, werden <strong>nicht</strong> gelscht, werden aber fortan als vom User "Gast" geschrieben erscheinen.',
     96 => 'Account Lschen',
     97 => 'Account Lschen besttigen',
-    98 => 'Sind Sie sicher, dass Sie Ihren  Account lschen wollen? Sie werden sich danach nicht mehr einloggen knnen (es sei denn, Sie legen einen neuen Account an). Wenn Sie sich sicher sind, klicken Sie bitte noch einmal auf "Account Lschen".',
+    98 => 'Sind Sie sicher, dass Sie Ihren Account lschen wollen? Sie werden sich danach nicht mehr einloggen knnen (es sei denn, Sie legen einen neuen Account an). Wenn Sie sich sicher sind, klicken Sie bitte noch einmal auf "Account Lschen".',
     99 => 'Privatsphre-Einstellungen fr',
     100 => 'E-Mail von Admin',
     101 => 'E-Mails von Site-Admins erlauben',
@@ -324,7 +334,23 @@
     104 => 'Online-Status zeigen',
     105 => 'Unter "Wer ist online?"',
     106 => 'Wohnort',
-    107 => 'Erscheint im ffentlichen Profil'
+    107 => 'Erscheint im ffentlichen Profil',
+    108 => 'Neues Passwort besttigen',
+    109 => 'Geben Sie hier das neue Passwort noch einmal ein',
+    110 => 'Aktuelles Passwort',
+    111 => 'Geben Sie Ihr aktuelles Passwort ein',
+    112 => 'Sie haben die erlaubte Anzahl von Anmeldeversuchen berschritten. Bitte versuchen Sie es spter noch einmal.',
+    113 => 'Anmeldeversuch fehlgeschlagen',
+    114 => 'Account gesperrt',
+    115 => 'Ihr Account wurde gesperrt. Sie knnen sich nicht einloggen. Wenden Sie sich bitte an einen Administrator.',
+    116 => 'Account noch nicht freigegeben',
+    117 => 'Ihr Account muss erst noch von einem Administrator freigegeben werden. Sie knnen sich erst einloggen, wenn der Account freigegeben wurde.',
+    118 => "Ihr Account fr {$_CONF['site_name']} wurde jetzt freigeschaltet. Sie knnen sich jetzt auf der Website unter der unten angegebenen URL anmelden. Benutzen Sie dazu Ihren Usernamen (<username>) und das Passwort, das Sie bereits per E-Mail erhalten haben.",
+    119 => 'Wenn Sie Ihr Passwort vergessen haben, knnen Sie unter der folgenden URL ein neues anfordern:',
+    120 => 'Account aktiviert',
+    121 => 'Dienst',
+    122 => 'Derzeit knnen sich keine neuen User anmelden.',
+    123 => "Sind Sie ein <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a>?"
 );
 
 ###############################################################################
@@ -332,7 +358,7 @@
 
 $LANG05 = array(
     1 => 'Keine Artikel',
-    2 => 'Es gibt keine Artikel, die angezeigt werden knnten. Entweder gibt es fr diese Kategorie keine Artikel oder Ihre Einstellungen sind zu restriktiv',
+    2 => 'Es gibt keine Artikel, die angezeigt werden knnten. Entweder gibt es fr diese Kategorie keine Artikel oder Ihre Einstellungen sind zu restriktiv.',
     3 => ' fr die Kategorie %s.',
     4 => 'Hauptartikel',
     5 => 'weiter',
@@ -342,27 +368,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'Es gibt keine Links anzuzeigen.',
-    3 => 'Link hinzufgen'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Stimme gespeichert',
-    2 => 'Ihre Stimme wurde fr die Umfrage gespeichert: ',
-    3 => 'Stimme',
-    4 => 'Umfragen im System',
-    5 => 'Stimme(n)',
-    6 => 'ltere Umfragen'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -388,7 +393,7 @@
     20 => 'Von (Name)',
     21 => 'Von (E-Mail)',
     22 => 'Alle Felder mssen ausgefllt werden.',
-    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie wrden sich vielleicht fr diesen Artikel auf {$_CONF['site_url']} interessieren. Dies ist kein SPAM und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) werden nicht gespeichert oder wiederverwendet.",
+    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie wrden sich vielleicht fr diesen Artikel auf {$_CONF['site_url']} interessieren. Dies ist kein Spam und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) werden nicht gespeichert oder wiederverwendet.",
     24 => "Schreiben Sie einen Kommentar zu diesem Artikel:\n",
     25 => 'Sie mssen sich anmelden, um diese Funktion benutzen zu knnen. Dies ist leider ntig, um den Missbrauch des Systems zu verhindern',
     26 => 'Mit diesem Formular knnen Sie eine E-Mail an diesen User schicken. Alle Felder mssen ausgefllt werden.',
@@ -443,8 +448,8 @@
     34 => 'Ort',
     35 => 'Ganztgig',
     36 => 'Keine Termine fr Ihre Suche gefunden',
-    37 => 'Ergebnisse: Termine',
-    38 => 'Ergebnisse: Links',
+    37 => 'Gefundene Termine',
+    38 => 'Gefundene Links',
     39 => 'Links',
     40 => 'Termine',
     41 => 'Ihr Suchbegriff sollte mindestens 3 Zeichen lang sein.',
@@ -452,18 +457,22 @@
     43 => 'genaue Wortgruppe',
     44 => 'alle Wrter',
     45 => 'irgendeines der Wrter',
-    46 => 'Next',
-    47 => 'Previous',
-    48 => 'Author',
-    49 => 'Date',
-    50 => 'Hits',
+    46 => 'weiter',
+    47 => 'zurck',
+    48 => 'Autor',
+    49 => 'Datum',
+    50 => 'Treffer',
     51 => 'Link',
     52 => 'Wohnort',
     53 => 'Gefundene Artikel',
     54 => 'Gefundene Kommentare',
-    55 => 'nach der Wortgruppe',
+    55 => 'der Wortgruppe',
     56 => '<em>und</em>',
-    57 => '<em>oder</em>'
+    57 => '<em>oder</em>',
+    58 => 'Weitere Ergebnisse &gt;&gt;',
+    59 => 'Ergebnisse',
+    60 => 'pro Seite',
+    61 => 'Suche korrigieren'
 );
 
 ###############################################################################
@@ -472,13 +481,13 @@
 $LANG10 = array(
     1 => 'Site-Statistik',
     2 => 'Gesamtzahl der Seitenabrufe',
-    3 => 'Artikel (Kommentare) im System',
-    4 => 'Umfragen (Stimmen) im System',
-    5 => 'Links (Klicks) im System',
-    6 => 'Termine im System',
+    3 => 'Anzahl Artikel (Kommentare)',
+    4 => 'Anzahl Umfragen (Stimmen)',
+    5 => 'Anzahl Links (Klicks)',
+    6 => 'Anzahl Termine',
     7 => 'Top Ten der Artikel',
-    8 => 'Artikel-berschrift',
-    9 => 'angezeigt',
+    8 => 'Artikelberschrift',
+    9 => 'Angezeigt',
     10 => 'Es gibt keine Artikel oder sie wurden von niemandem gelesen.',
     11 => 'Top Ten der meistkommentierten Artikel',
     12 => 'Kommentare',
@@ -493,7 +502,14 @@
     21 => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.',
     22 => 'Top Ten der verschickten Artikel',
     23 => 'E-Mails',
-    24 => 'Es wurden keine Artikel per E-Mail verschickt.'
+    24 => 'Es wurden keine Artikel per E-Mail verschickt.',
+    25 => 'Top Ten der Artikel mit Trackback-Kommentaren',
+    26 => 'Keine Trackback-Kommentare gefunden.',
+    27 => 'Anzahl aktiver User',
+    28 => 'Top Ten der Termine',
+    29 => 'Event',
+    30 => 'Angezeigt',
+    31 => 'Es gibt keine Termine oder sie wurden von niemandem gelesen.'
 );
 
 ###############################################################################
@@ -501,9 +517,9 @@
 
 $LANG11 = array(
     1 => 'Weiterfhrende Links',
-    2 => 'Artikel an einen Freund schicken',
+    2 => 'An einen Freund schicken',
     3 => 'Druckfhige Version',
-    4 => 'Artikel-Optionen',
+    4 => 'Optionen',
     5 => 'Als PDF'
 );
 
@@ -519,7 +535,7 @@
     6 => 'Einen Artikel einreichen',
     7 => 'Anmeldung erforderlich',
     8 => 'Abschicken',
-    9 => 'Wenn Sie Informationen einreichen mchten, die auf dieser Site verffentlicht werden sollen, dann bitten wir Sie, folgende Punkte zu beachten:<ul><li>Bitte alle Felder ausfllen, sie werden bentigt<li>Bitte nur vollstndige und exakte Information einreichen<li>URLs vor dem Abschicken unbedingt noch einmal kontrollieren ...</ul>',
+    9 => 'Wenn Sie Informationen einreichen mchten, die auf dieser Site verffentlicht werden sollen, dann bitten wir Sie, folgende Punkte zu beachten:<ul><li>Bitte alle Felder ausfllen, sie werden bentigt<li>Bitte nur vollstndige und exakte Information einreichen<li>URLs vor dem Abschicken unbedingt noch einmal kontrollieren</ul>',
     10 => 'Titel',
     11 => 'Link',
     12 => 'Startdatum',
@@ -531,7 +547,7 @@
     18 => 'Andere',
     19 => 'Bitte lesen',
     20 => 'Fehler: Kategorie fehlt',
-    21 => 'When selecting "Other" please also provide a category name',
+    21 => 'Wenn Sie "Andere" auswhlen, geben Sie bitte auch eine neue Kategorie ein',
     22 => 'Fehler: Nicht alle Felder ausgefllt',
     23 => 'Bitte alle Felder des Formulars ausfllen. Alle Felder werden bentigt.',
     24 => 'Beitrag gespeichert',
@@ -546,7 +562,7 @@
     33 => 'Artikelvorschau',
     34 => 'Abmelden',
     35 => 'HTML-Tags sind nicht erlaubt',
-    36 => 'Modus',
+    36 => 'Format',
     37 => "Wenn Sie einen Termin bei {$_CONF['site_name']} einreichen, wird er in den Kalender aufgenommen, von wo aus ihn andere User in ihren persnlichen Kalender bernehmen knnen. Dies ist <b>NICHT</b> dazu gedacht, private Termine und Ereignisse wie etwa Geburtstage zu verwalten.<br><br>Wenn Sie einen Termin einreichen, wird er an die Administratoren weitergeleitet und sobald er von diesen akzeptiert wird, wird er im Kalender erscheinen.",
     38 => 'Termin hinzufgen zu',
     39 => 'Kalender',
@@ -611,14 +627,14 @@
     22 => 'Typ',
     23 => 'Reihenfolge',
     24 => 'Kategorie',
-    25 => 'Um einen Block zu ndern oder lschen, auf den Block (s.u.) klicken. Um einen neuen Block anzulegen, auf Neuer Block (s.o.) klicken.',
+    25 => 'Um einen Block zu ndern oder zu lschen, auf das ndern-Icon (s.u.) klicken. Um einen neuen Block anzulegen, auf Neu anlegen (s.o.) klicken.',
     26 => 'Layout-Block',
     27 => 'PHP-Block',
     28 => 'PHP-Block: Optionen',
     29 => 'Block-Funktion',
     30 => 'Wenn einer Ihrer Blcke PHP-Code verwenden soll, geben Sie hier bitte den Namen der Funktion ein. Der Funktionsname muss mit "phpblock_" (z.B. phpblock_getweather) beginnen. Wenn diese Namenskonvention nicht eingehalten wird, wird die Funktion NICHT aufgerufen. Das soll verhindern, dass Hacker evtl. gefhrlichen Code einschleusen knnen. Den Funktionsnamen NICHT mit einem Klammerpaar "()" abschliessen. Ferner wird empfohlen, all Ihren Code fr PHP-Blcke in der Datei /pfad/zu/geeklog/system/lib-custom.php abzulegen. Dort kann der Code auch dann unverndert bleiben, wenn Sie auf eine neuere Geeklog-Version umsteigen.',
     31 => 'Fehler in PHP-Block: Funktion %s existiert nicht.',
-    32 => 'Fehler: Feld(er) fehlt/fehlen',
+    32 => 'Fehler: Nicht alle Felder ausgefllt',
     33 => 'Fr Portal-Blcke muss ein Titel und eine URL zur RSS-Datei angegeben werden.',
     34 => 'Fr PHP-Blcke muss ein Titel und der Funktionsname eingegeben werden.',
     35 => 'Fr normale Blcke muss ein Titel und der Inhalt eingegeben werden.',
@@ -632,7 +648,7 @@
     43 => 'Nur auf der Startseite',
     44 => 'Zugriff verweigert',
     45 => "Sie haben keine Zugriffsrechte fr diesen Block. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/block.php\">Zurck zum Administrator-Men</a>.",
-    46 => 'Neuer Block',
+    46 => 'Bewegen',
     47 => 'Admin Home',
     48 => 'Block-Name',
     49 => ' (keine Leerzeichen, muss eindeutig sein)',
@@ -646,7 +662,12 @@
     57 => 'Block nach unten',
     58 => 'Block nach oben',
     59 => 'Block auf die rechte Seite',
-    60 => 'Block auf die linke Seite'
+    60 => 'Block auf die linke Seite',
+    61 => 'Ohne Titel',
+    62 => 'Artikellimit',
+    63 => 'Block-Titel nicht erlaubt',
+    64 => 'Der Titel kann nicht leer sein und darf kein HTML enthalten!',
+    65 => 'Reihenfolge'
 );
 
 ###############################################################################
@@ -664,7 +685,7 @@
     9 => '(mit http://)',
     10 => 'Es mssen mindestens Datum und Uhrzeit, Titel und Beschreibung angegeben werden!',
     11 => 'Termin-Manager',
-    12 => 'Auf einen Termin klicken, um ihn zu ndern oder lschen. Mit Neuer Termin (s.o.) wird ein neuer Termin angelegt.',
+    12 => 'Auf das ndern-Icon klicken, um einen Termin zu ndern oder zu lschen. Mit Neu anlegen (s.o.) wird ein neuer Termin angelegt. Das Kopie-Icon erzeugt eine Kopie eines vorhandenen Termins.',
     13 => 'Titel',
     14 => 'Startdatum',
     15 => 'Enddatum',
@@ -681,42 +702,13 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link-Editor',
-    2 => '',
-    3 => 'Titel',
-    4 => 'URL',
-    5 => 'Kategorie',
-    6 => '(mit http://)',
-    7 => 'Andere',
-    8 => 'Klicks',
-    9 => 'Beschreibung',
-    10 => 'Sie mssen einen Titel, eine URL und eine Beschreibung fr den Link angeben.',
-    11 => 'Link-Manager',
-    12 => 'Auf den Link-Titel klicken, um einen Link zu ndern oder zu lschen. Mit Neuer Link (s.o.) kann ein neuer Link angelegt werden.',
-    13 => 'Titel',
-    14 => 'Kategorie',
-    15 => 'URL',
-    16 => 'Zugriff verweigert',
-    17 => "Sie haben keine Zugriffsrechte fr diesen Link. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/link.php\">Zurck zum Administrator-Men</a>.",
-    18 => 'Neuer Link',
-    19 => 'Admin Home',
-    20 => 'Andere bitte eingeben',
-    21 => 'Speichern',
-    22 => 'Abbruch',
-    23 => 'Lschen'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
     1 => 'Vorherige Artikel',
     2 => 'Nchste Artikel',
     3 => 'Modus',
-    4 => 'Modus',
+    4 => 'Format',
     5 => 'Artikel-Editor',
     6 => 'Es sind keine Artikel vorhanden.',
     7 => 'Autor',
@@ -732,18 +724,18 @@
     17 => 'Haupttext',
     18 => 'Gelesen',
     19 => 'Kommentare',
-    20 => '',
-    21 => '',
-    22 => 'Artikel-Liste',
-    23 => 'Auf die Nummer klicken, um einen Artikel zu ndern oder zu lschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neuer Artikel (s.o.) klicken, um einen neuen Artikel zu schreiben.',
+    20 => 'Ping',
+    21 => 'Senden',
+    22 => 'Artikelliste',
+    23 => 'Auf das ndern-Icon klicken, um einen Artikel zu ndern oder zu lschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neuen Artikel zu schreiben.',
     24 => 'Diese ID wird bereits fr einen anderen Artikel benutzt. Bitte whlen Sie eine andere ID.',
-    25 => '',
-    26 => 'Artikel-Vorschau',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'File Upload Errors',
-    31 => 'Bitte mindestens die Felder Autor, Titel und Einleitung ausfllen',
+    25 => 'Fehler beim Speichern des Artikels',
+    26 => 'Artikelvorschau',
+    27 => 'Wenn Sie [unscaledX] statt [imageX] verwenden, wird das Bild in Originalgre eingebunden.',
+    28 => '<p><strong>VORSCHAU:</strong> Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthlt. Bei Artikeln mit Bildern empfiehlt es sich, den Artikel als Entwurf zu markieren, zu speichern und dann von der Liste der Artikel aus zu betrachten.</p>',
+    29 => 'Trackbacks',
+    30 => 'Fehler beim Datei-Upload',
+    31 => 'Bitte mindestens die Felder Titel und Einleitung ausfllen',
     32 => 'Hauptartikel',
     33 => 'Es kann nur einen Hauptartikel geben',
     34 => 'Entwurf',
@@ -763,50 +755,41 @@
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => 'Die oben ausgewhlten Bilder knnen in den Artikel eingefgt werden, indem Sie spezielle Platzhalter dafr in den Text einfgen. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss. HINWEIS: Sie mssen alle ausgewhlten Bilder verwenden. Andernfalls knnen Sie den Artikel nicht speichern.<br><p><b>VORSCHAU:</b> Um eine Vorschau eines Artikels mit Bildern zu bekommen, sollten Sie den Artikel am besten als Entwurf markieren und speichern. Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthlt.',
+    51 => 'Die oben ausgewhlten Bilder knnen in den Artikel eingefgt werden, indem Sie spezielle Platzhalter dafr in den Text einfgen. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss.<br>HINWEIS: Es mssen alle ausgewhlten Bilder verwendet werden. Andernfalls kann der Artikel nicht gespeichert werden.<br>',
     52 => 'Lschen',
     53 => 'wurde nicht verwendet. Sie mssen dieses Bild im Text des Artikels verwenden oder es lschen bevor Sie Ihre nderungen sichern knnen.',
     54 => 'Nicht verwendete Bilder',
     55 => 'Folgende Fehler traten beim Versuch, den Artikel zu speichern, auf. Bitte diese Fehler beheben und den Artikel noch einmal speichern.',
     56 => 'mit Icon',
     57 => 'Bild in Originalgre',
-    58 => 'Artikel-Verwaltung',
+    58 => 'Artikelverwaltung',
     59 => 'Option',
     60 => 'Aktiviert',
     61 => 'automatisch archivieren',
-    62 => 'automatisch lschen'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modus',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'angelegt',
-    4 => 'Umfrage %s wurde gespeichert',
-    5 => 'Umfrage editieren',
-    6 => 'Umfrage-ID',
-    7 => '(keine Leerzeichen!)',
-    8 => 'Erscheint auf der Startseite',
-    9 => 'Frage',
-    10 => 'Antworten / Stimmen',
-    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
-    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
-    13 => 'Umfrage anlegen',
-    14 => 'Speichern',
-    15 => 'Abbruch',
-    16 => 'Lschen',
-    17 => 'Please enter a Poll ID',
-    18 => 'Liste der Umfragen',
-    19 => 'Um eine Umfrage zu ndern oder lschen, auf die Umfrage klicken. Mit Neue Umfrage (s.o.) wird eine neue Umfrage angelegt.',
-    20 => 'Stimmen',
-    21 => 'Zugriff verweigert',
-    22 => "Sie haben keine Zugriffsrechte fr diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/poll.php\">Zurck zum Administrator-Men</a>.",
-    23 => 'Neue Umfrage',
-    24 => 'Admin Home',
-    25 => 'Ja',
-    26 => 'Nein'
+    62 => 'automatisch lschen',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -821,7 +804,7 @@
     6 => 'Lschen einer Kategorie lscht auch alle dazu gehrenden Artikel und Blcke',
     7 => 'Bitte die Felder Kategorie-ID und Kategorie-Name ausfllen',
     8 => 'Kategorie-Manager',
-    9 => 'Auf eine Kategorie klicken, um sie zu ndern oder lschen. Auf Neue Kategorie (s.o.) klicken, um eine neue Kategorie anzulegen. Die ntige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben.',
+    9 => 'Auf eine Kategorie klicken, um sie zu ndern oder zu lschen. Auf Neu anlegen (s.o.) klicken, um eine neue Kategorie anzulegen. Die ntige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben. Das Sternchen(*) markiert die Default-Kategorie.',
     10 => 'Sortierreihenfolge',
     11 => 'Artikel/Seite',
     12 => 'Zugriff verweigert',
@@ -838,7 +821,10 @@
     23 => 'Zur Default-Kategorie fr neue Artikel machen',
     24 => '(*)',
     25 => 'Archiv-Kategorie',
-    26 => 'Zur Archiv-Kategorie machen (nur fr eine Kategorie mglich)'
+    26 => 'Zur Archiv-Kategorie machen (nur fr eine Kategorie mglich)',
+    27 => 'oder ein Icon hochladen',
+    28 => 'maximal',
+    29 => 'Fehler beim Datei-Upload'
 );
 
 ###############################################################################
@@ -854,14 +840,14 @@
     7 => 'E-Mail-Adresse',
     8 => 'Homepage',
     9 => '(keine Leerzeichen!)',
-    10 => 'Bitte die Felder Username, Name, Security Level und E-Mail-Adresse ausfllen',
+    10 => 'Bitte die Felder Username und E-Mail-Adresse ausfllen.',
     11 => 'User-Manager',
-    12 => 'Auf den Usernamen klicken, um einen User zu ndern oder zu lschen. Ein neuer User kann mit dem Button Neuer User angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
+    12 => 'Auf das ndern-Icon klicken, um einen User zu ndern oder zu lschen. Ein neuer User kann mit Neu anlegen (s.o.) angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
     13 => 'SecLev',
     14 => 'Reg. Datum',
     15 => 'Neuer User',
     16 => 'Admin Home',
-    17 => 'pw ndern',
+    17 => '',
     18 => 'Abbruch',
     19 => 'Lschen',
     20 => 'Speichern',
@@ -880,7 +866,18 @@
     33 => 'Abschicken',
     34 => 'Fehler: Keine Datei zum Upload angegeben.',
     35 => 'Letzter Login',
-    36 => '(noch nie)'
+    36 => '(noch nie)',
+    37 => 'UID',
+    38 => 'Gruppenliste',
+    39 => 'Passwort (nochmal)',
+    40 => 'Registriert',
+    41 => 'Letzter Login',
+    42 => 'Gesperrt',
+    43 => 'Erwartet Aktivierung',
+    44 => 'Erwartet Autorisierung',
+    45 => 'Aktiv',
+    46 => 'User-Status',
+    47 => 'ndern'
 );
 
 ###############################################################################
@@ -976,7 +973,7 @@
     14 => 'User Einstellungen ignorieren',
     15 => 'Fehler beim Senden an: ',
     16 => 'E-Mail erfolgreich gesendet an: ',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Noch eine Nachricht schreiben</a>",
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Noch eine Nachricht schreiben</a>",
     18 => 'An',
     19 => 'HINWEIS: Wenn Sie eine Nachricht an alle eingetragenen Benutzer schicken wollen, mssen Sie die Gruppe Logged-in Users auswhlen.',
     20 => "<successcount> Nachricht(en) erfolgreich verschickt, bei <failcount> Nachricht(en) traten Fehler auf. Details knnen der folgenden Liste entnommen werden. Sie k&ouml:nnen jetzt <a href=\"{$_CONF['site_admin_url']}/mail.php\">noch eine Nachricht schicken</a> oder <a href=\"{$_CONF['site_admin_url']}/moderation.php\">zurck zum Admin-Men gehen</a>.",
@@ -1000,9 +997,9 @@
     6 => 'Warnung: Plugin schon installiert!',
     7 => 'Das Plugin, das Sie installieren wollen, ist schon vorhanden. Bitte lschen Sie es, bevor Sie noch einmal versuchen, es zu installieren',
     8 => 'Plugin-Kompatibilittstest fehlgeschlagen',
-    9 => 'Dieses Plugin bentigt eine neuere Version von Geeklog. Abhilfe schafft ein Update von <a href="http://www.geeklog.net">Geeklog</a> oder evtl. eine andere Version dieses Plugins.',
+    9 => 'Dieses Plugin bentigt eine neuere Version von Geeklog. Abhilfe schafft ein Update von <a href="http://www.geeklog.net/">Geeklog</a> oder evtl. eine andere Version dieses Plugins.',
     10 => '<br><b>Es sind derzeit keine Plugins installiert.</b><br><br>',
-    11 => 'Um ein Plugin zu ndern oder lschen, auf die Nummer des Plugins klicken. Wenn Sie auf den Namen des Plugins klicken, wird die Homepage des Plugins aufgerufen. Um ein Plugin zu installieren oder aktualisieren bitte dessen Dokumentation lesen.',
+    11 => 'Um ein Plugin zu ndern oder zu lschen, auf das ndern-Icon klicken. Es werden dann auch weitere Details, inkl. der Homepage des Plugins, angezeigt. Wenn in der Liste (s.u.) zwei Versionsnummern fr ein Plugin angezeigt werden, bedeutet das, dass fr das Plugin noch ein Update durchgefhrt werden muss. Um ein Plugin zu installieren oder aktualisieren bitte auch immer dessen Dokumentation lesen.',
     12 => '(kein Name angegeben)',
     13 => 'Plugin-Editor',
     14 => 'Neues Plugin',
@@ -1022,10 +1019,14 @@
     28 => 'Plugin-Version',
     29 => 'Geeklog-Version',
     30 => 'Plugin lschen?',
-    31 => 'Sind Sie sicher, dass Sie dieses Plugin lschen wollen? Dies wird alle Dateien, Daten und Datenstrukturen lschen, die dieses Plugin benutzt. Wenn Sie sicher sind, dann klicken Sie jetzt bitte noch einmal auf Lschen.',
+    31 => 'Sind Sie sicher, dass Sie dieses Plugin lschen wollen? Dies wird alle Daten und Datenstrukturen lschen, die dieses Plugin benutzt. Wenn Sie sicher sind, dann klicken Sie jetzt bitte noch einmal auf Lschen.',
     32 => '<p><b>Fehler: Ungltiges Format fr Autolink.</b></p>',
     33 => 'Code-Version',
-    34 => 'Aktualisieren'
+    34 => 'Aktualisieren',
+    35 => 'ndern',
+    36 => 'Code',
+    37 => 'Aktuell',
+    38 => 'Bitte aktualisieren!'
 );
 
 ###############################################################################
@@ -1039,7 +1040,7 @@
     10 => 'Content Syndication',
     11 => 'Neuer Feed',
     12 => 'Admin Home',
-    13 => 'Um einen Feed zu ndern oder zu lschen, auf den Titel des Feeds (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neuer Feed (s.o.) klicken.',
+    13 => 'Um einen Feed zu ndern oder zu lschen, auf das ndern-Icon (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neu anlegen (s.o.) klicken.',
     14 => 'Titel',
     15 => 'Art',
     16 => 'Dateiname',
@@ -1068,7 +1069,15 @@
     39 => 'Bitte die Felder Feed-Titel, Beschreibung und Dateiname ausfllen.',
     40 => 'Bitte ein Limit (Anzahl Eintrge oder Anzahl Stunden) eingeben.',
     41 => 'Links',
-    42 => 'Termine'
+    42 => 'Termine',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Feed-Link fr Kategorie',
+    46 => 'Limit Results',
+    47 => 'Suchen',
+    48 => 'ndern',
+    49 => 'Feed-Logo',
+    50 => "Relativ zur URL dieser Site ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1105,22 +1114,22 @@
     28 => 'Das Plugin wurde gespeichert.',
     29 => 'Sorry, persnliche Kalender sind auf dieser Site nicht verfgbar.',
     30 => 'Zugriff verweigert',
-    31 => 'Sie haben keinen Zugriff auf diese Artikel-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    32 => 'Sie haben keinen Zugriff auf diese Kategorie-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werdenprotokolliert.',
-    33 => 'Sie haben keinen Zugriff auf diese Block-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    34 => 'Sie haben keinen Zugriff auf diese Links-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    35 => 'Sie haben keinen Zugriff auf diese Termin-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    36 => 'Sie haben keinen Zugriff auf diese Umfrage-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    37 => 'Sie haben keinen Zugriff auf diese User-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    38 => 'Sie haben keinen Zugriff auf diese Plugin-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    39 => 'Sie haben keinen Zugriff auf diese E-Mail-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    31 => 'Sie haben keinen Zugriff auf die Artikel-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    32 => 'Sie haben keinen Zugriff auf die Kategorie-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werdenprotokolliert.',
+    33 => 'Sie haben keinen Zugriff auf die Block-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    34 => 'Sie haben keinen Zugriff auf die Links-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    35 => 'Sie haben keinen Zugriff auf die Termin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    36 => 'Sie haben keinen Zugriff auf die Umfrage-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    37 => 'Sie haben keinen Zugriff auf die User-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    38 => 'Sie haben keinen Zugriff auf die Plugin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    39 => 'Sie haben keinen Zugriff auf die E-Mail-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
     40 => 'System-Nachricht',
     41 => 'Sorry, you do not have access to the word replacement page.  Please not that all attempts to access unauthorized features are logged',
     42 => 'Your word has been successfully saved.',
     43 => 'The word has been successfully deleted.',
     44 => 'Das Plugin wurde erfolgreich installiert.',
     45 => 'Das Plugin wurde gelscht.',
-    46 => 'Sie haben keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    46 => 'Sie haben keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
     47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
     48 => "Danke, dass Sie sich bei {$_CONF['site_name']} angemeldet haben. Ihr Aufnahmeantrag wird von unserem Team geprft. Sobald er akzeptiert wird, werden Sie ein Passwort per E-Mail erhalten.",
     49 => 'Ihre Gruppe wurde gespeichert.',
@@ -1135,7 +1144,21 @@
     58 => 'Der Feed wurde gespeichert.',
     59 => 'Der Feed wurde gelscht.',
     60 => 'Das Plugin wurde erfolgreich aktualisiert.',
-    61 => 'Plugin %s: Unbekannter Text-Platzhalter'
+    61 => 'Plugin %s: Unbekannter Text-Platzhalter',
+    62 => 'Der Trackback-Kommentar wurde gelscht.',
+    63 => 'Beim Lschen des Trackback-Kommentars trat ein Fehler auf.',
+    64 => 'Ihr Trackback-Kommentar wurde erfolgreich verschickt.',
+    65 => 'Das Weblog-Verzeichnis wurde gespeichert.',
+    66 => 'Das Weblog-Verzeichnis wurde gelscht.',
+    67 => 'Das neue Passwort stimmt nicht mit dem Besttigungs-Passwort berein!',
+    68 => 'Geben Sie bitte Ihr korrektes aktuelles Passwort ein.',
+    69 => 'Ihr Account wurde gesperrt!',
+    70 => 'Ihr Account wurde noch nicht freigeschaltet.',
+    71 => 'Ihr Account wurde besttigt, muss aber noch freigeschaltet werden.',
+    72 => 'Bei der Installation des Plugins trat ein Fehler auf. Siehe error.log fr weitere Informationen.',
+    73 => 'Bei der Deinstallation des Plugins trat ein Fehler aus. Siehe error.log fr weitere Informationen.',
+    74 => 'Der Pingback wurde erfolgreich verschickt.',
+    75 => 'Trackbacks mssen als POST-Request verschickt werden.'
 );
 
 ###############################################################################
@@ -1159,7 +1182,7 @@
     'missingfields' => 'Fehlende Angaben',
     'missingfieldsmsg' => ' Sie mssen den Namen und eine Beschreibung fr die Gruppe angeben.',
     'groupmanager' => 'Gruppen-Manager',
-    'newgroupmsg' => 'Um eine Gruppe zu ndern oder lschen, einfach auf den Namen der Gruppe klicken. Neue Gruppe (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen knnen nicht gelscht werden, da sie vom System bentigt werden.',
+    'newgroupmsg' => 'Um eine Gruppe zu ndern oder zu lschen, auf das ndern-Icon klicken. Neu anlegen (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen knnen nicht gelscht werden, da sie vom System bentigt werden.',
     'groupname' => 'Gruppen-Name',
     'coregroup' => 'Core-Gruppe',
     'yes' => 'Ja',
@@ -1176,8 +1199,8 @@
     'edit' => 'Edit',
     'none' => 'None',
     'accessdenied' => 'Zugriff verweigert',
-    'storydenialmsg' => "Sie haben nicht die ntigen Rechte, um diesen Artikel zu lesen. Mglicherweise sind Sie kein registrierter User von {$_CONF['site_name']}. Bitte melden Sie sich als <a href=\"users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
-    'eventdenialmsg' => "Sie haben nicht die ntigen Rechte, um diesen Termin abzurufen. Mglicherweise sind Sie kein registrierter User von {$_CONF['site_name']}. Bitte melden Sie sich als <a href=\"users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'storydenialmsg' => "Sie haben nicht die ntigen Rechte, um diesen Artikel zu lesen. Mglicherweise sind Sie kein registrierter User von {$_CONF['site_name']}. Bitte melden Sie sich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'eventdenialmsg' => "Sie haben nicht die ntigen Rechte, um diesen Termin abzurufen. Mglicherweise sind Sie kein registrierter User von {$_CONF['site_name']}. Bitte melden Sie sich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
     'nogroupsforcoregroup' => 'Diese Gruppe gehrt zu keiner anderen Gruppe.',
     'grouphasnorights' => 'Diese Gruppe hat keine Rechte fr die Administration der Website',
     'newgroup' => 'Neue Gruppe',
@@ -1189,13 +1212,22 @@
     'listusers' => 'User',
     'listthem' => 'anzeigen',
     'usersingroup' => 'User in Gruppe "%s"',
-    'usergroupadmin' => 'User Group Administration',
-    'add' => 'Add',
-    'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
+    'usergroupadmin' => 'Usergruppen-Verwaltung',
+    'add' => 'Hinzufgen',
+    'remove' => 'Lschen',
+    'availmembers' => 'Verfgbare Mitglieder',
+    'groupmembers' => 'Mitglieder der Gruppe',
     'canteditgroup' => 'Um diese Gruppe bearbeiten zu knnen, mssen Sie selbst ein Mitglied der Gruppe sein. Wenden Sie sich bitte an den Systemadministrator wenn Sie der Meinung sind, dass das ein Fehler wre.',
-    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu knnen, mssen Sie selbst ein Mitglied der Gruppe sein. Wenden Sie sich bitte an den Systemadministrator wenn Sie der Meinung sind, dass das ein Fehler wre.'
+    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu knnen, mssen Sie selbst ein Mitglied der Gruppe sein. Wenden Sie sich bitte an den Systemadministrator wenn Sie der Meinung sind, dass das ein Fehler wre.',
+    'editgroupmsg' => 'To modify the group membership,  click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the "Right" side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Liste aller Mitglieder der Gruppe "<b>%s</b>"',
+    'search' => 'Suchen',
+    'submit' => 'Abschicken',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Gruppen-ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Gruppenname existiert schon',
+    'groupexistsmsg' => 'Es existiert bereits eine Gruppe mit diesem Namen. Gruppennamen mssen eindeutig sein.'
 );
 
 ###############################################################################
@@ -1205,8 +1237,7 @@
     'last_ten_backups' => 'Die 10 letzten Backups',
     'do_backup' => 'Backup anlegen',
     'backup_successful' => 'Backup der Datenbank war erfolgreich.',
-    'no_backups' => 'Keine Backups im System',
-    'db_explanation' => 'Um ein neues Backup Ihres Geeklog-Systems anzulegen, einfach auf den folgenden Button klicken',
+    'db_explanation' => 'Um ein neues Backup Ihres Geeklog-Systems anzulegen, bitte auf Neu anlegen (s.o.) klicken.',
     'not_found' => "Falscher Pfad oder mysqldump ist nicht ausfhrbar.<br>Bitte berprfe die Variable <strong>\$_DB_mysqldump_path</strong> in der config.php.<br>Aktueller Wert der Variablen: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup fehlgeschlagen: Datei ist 0 Bytes gro.',
     'path_not_found' => "{$_CONF['backup_path']} existiert nicht oder ist kein Verzeichnis.",
@@ -1229,7 +1260,8 @@
     7 => 'Statistik',
     8 => 'Einstellungen',
     9 => 'Suchen',
-    10 => 'Erweiterte Suche'
+    10 => 'Erweiterte Suche',
+    11 => 'Verzeichnis'
 );
 
 ###############################################################################
@@ -1271,4 +1303,209 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'von',
+    'tracked_on' => 'Empfangen am',
+    'read_more' => '[mehr]',
+    'intro_text' => 'Auf anderen Sites wurde folgendes ber \'%s\' geschrieben:',
+    'no_comments' => 'Keine Trackback-Kommentare fr diesen Eintrag.',
+    'this_trackback_url' => 'Trackback-URL fr diesen Eintrag:',
+    'num_comments' => '%d Trackback-Kommentare',
+    'send_trackback' => 'Pings senden',
+    'preview' => 'Vorschau',
+    'editor_title' => 'Trackback-Kommentar senden',
+    'trackback_url' => 'Trackback-URL',
+    'entry_url' => 'URL des Eintrags',
+    'entry_title' => 'Titel des Eintrags',
+    'blog_name' => 'Site-Name',
+    'excerpt' => 'Auszug',
+    'truncate_warning' => 'Hinweis: Die empfangende Site knnte den Auszug krzen.',
+    'button_send' => 'Abschicken',
+    'button_preview' => 'Vorschau',
+    'send_error' => 'Fehler',
+    'send_error_details' => 'Fehler beim Senden des Trackback-Kommentars:',
+    'url_missing' => 'Keine URL fr den Eintrag',
+    'url_required' => 'Es muss mindestens die URL fr den Eintrag angegeben werden.',
+    'target_missing' => 'Keine Trackback-URL',
+    'target_required' => 'Bitte geben Sie die Trackback-URL ein.',
+    'error_socket' => 'Socket konnte nicht geffnet werden.',
+    'error_response' => 'Antwort nicht verstanden.',
+    'error_unspecified' => 'Fehler nicht nher spezifiziert.',
+    'select_url' => 'Trackback-URL auswhlen',
+    'not_found' => 'Trackback-URL nicht gefunden',
+    'autodetect_failed' => 'Geeklog konnte keine Trackback-URL fr den Beitrag finden, zu dem der Kommentar gesendet werden sollte. Bitte geben Sie die Trackback-URL von Hand ein.',
+    'trackback_explain' => 'Aus den unten aufgefhrten Links knnen Sie jetzt den Beitrag auswhlen, zu dem Ihr Kommentar gesendet werden soll. Geeklog wird versuchen, die Trackback-URL selbst zu ermitteln. Andernfalls knnen Sie die Trackback-URL aber auch <a href="%s">von Hand eingeben</a>.',
+    'no_links_trackback' => 'Keine Links gefunden. Fr diesen Beitrag knnen keine Trackback-Kommentare gesendet werden.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback-Ergebnisse',
+    'send_pings' => 'Pings senden',
+    'send_pings_for' => 'Pings fr "%s" senden',
+    'no_links_pingback' => 'Keine Links gefunden. Es wurden keine Pingbacks fr diesen Beitrag gesendet.',
+    'pingback_success' => 'Pingback gesendet.',
+    'no_pingback_url' => 'Keine Pingback-URL gefunden.',
+    'resend' => 'Nochmal senden',
+    'ping_all_explain' => 'Sie knnen jetzt einen <a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a> zu den verlinkten Sites senden, einen Ping an Weblog-Verzeichnissesenden, oder einen <a href="http://de.wikipedia.org/wiki/Trackback">Trackback</a>-Kommentar verschicken, wenn Sie ber einen Beitrag in einem anderen Weblog geschrieben haben.',
+    'pingback_button' => 'Pingback senden',
+    'pingback_short' => 'Einen Pingback an alle in diesem Beitrag verlinkten Sites senden.',
+    'pingback_disabled' => '(Pingback deaktiviert)',
+    'ping_button' => 'Ping senden',
+    'ping_short' => 'Weblog-Verzeichnisse "anpingen".',
+    'ping_disabled' => '(Ping deaktiviert)',
+    'trackback_button' => 'Trackback senden',
+    'trackback_short' => 'Einen Trackback-Kommentar senden.',
+    'trackback_disabled' => '(Trackback deaktiviert)',
+    'may_take_a_while' => 'Hinweis: Das Senden von Pingbacks und Pings kann eine Weile dauern.',
+    'ping_results' => 'Ping-Ergebnisse',
+    'unknown_method' => 'Unbekannte Ping-Methode',
+    'ping_success' => 'Ping gesendet.',
+    'error_site_name' => 'Bitte geben Sie den Namen der Site ein.',
+    'error_site_url' => 'Bitte geben Sie die URL der Site ein.',
+    'error_ping_url' => 'Bitte geben Sie die Ping-URL der Site ein.',
+    'no_services' => 'Es sind keine Weblog-Verzeichnisse konfiguriert.',
+    'services_headline' => 'Weblog-Verzeichnisse',
+    'service_explain' => 'Um ein Weblog-Verzeichnis zu ndern oder zu lschen, auf das ndern-Icon klicken. Um ein neues Weblog-Verzeichnis einzutragen, auf Neu anlegen (s.o.) klicken.',
+    'service' => 'Verzeichnis',
+    'ping_method' => 'Ping-Methode',
+    'service_website' => 'Website',
+    'service_ping_url' => 'Ping-URL',
+    'ping_standard' => 'Normaler Ping',
+    'ping_extended' => 'Erweiterter Ping',
+    'ping_unknown' => '(unbekannte Methode)',
+    'edit_service' => 'Weblog-Verzeichnis bearbeiten',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Hier knnen Sie Ihren Trackback-Kommentar fr <a href="%s">%s</a> eingeben.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'Um einen Trackback-Kommentar fr einen Artikel zu verschicken, benutzen Sie bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Trackback unabhngig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pingback_explain' => 'Geben Sie eine URL ein, an die der Pingback geschickt werden soll. Der Pingback wird auf die Startseite Ihrer Website verweisen.',
+    'pingback_url' => 'Pingback-URL',
+    'site_url' => 'Die URL dieser Website',
+    'pingback_note' => 'Um einen Pingback fr einen Artikel zu verschicken, benutzen Sie bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Pingback unabhngig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pbtarget_missing' => 'Keine Pingback-URL',
+    'pbtarget_required' => 'Geben Sie bitte die Pingback-URL ein',
+    'pb_error_details' => 'Fehler beim Senden des Pingbacks:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Artikelverzeichnis',
+    'title_year' => 'Artikelverzeichnis fr %d',
+    'title_month_year' => 'Artikelverzeichnis fr %s %d',
+    'nav_top' => 'Zurck zum Artikelverzeichnis',
+    'no_articles' => 'Keine Artikel.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n neue %i in den letzten %t %s',
+    'new_last' => 'letzte %t %s',
+    'minutes' => 'Minuten',
+    'hours' => 'Stunden',
+    'days' => 'Tage',
+    'weeks' => 'Wochen',
+    'months' => 'Monate',
+    'minute' => 'Minute',
+    'hour' => 'Stunde',
+    'day' => 'Tag',
+    'week' => 'Woche',
+    'month' => 'Monat'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Suchen',
+    'limit_results' => 'Anzahl Ergebnisse',
+    'submit'        => 'Abschicken',
+    'edit'          => 'ndern',
+    'admin_home'    => 'Admin Home',
+    'create_new'    => 'Neu anlegen',
+    'enabled'       => 'Aktiv',
+    'title'         => 'Titel',
+    'type'          => 'Typ',
+    'topic'         => 'Kategorie',
+    'help_url'      => 'URL f. Hilfe-Datei',
+    'save'          => 'Speichern',
+    'cancel'        => 'Abbruch',
+    'delete'        => 'Lschen',
+    'copy'          => 'Kopieren',
+    'no_results'    => '- Keine Eintrge gefunden -',
+    'data_error'    => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Kommentare erlaubt',
+    -1  => 'Keine Kommentare'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Flach',
+    'nested'    => 'Verschachtelt',
+    'threaded'  => 'Nach Thema',
+    'nocomment' => 'Keine Kommentare'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(gar nicht)',
+    3600    => '1 Stunde',
+    7200    => '2 Stunden',
+    10800   => '3 Stunden',
+    28800   => '8 Stunden',
+    86400   => '1 Tag',
+    604800  => '1 Woche',
+    2678400 => '1 Monat'
+);
+
+$LANG_dateformats = array(
+    0   => 'Defaulteinstellung'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Normaler Artikel',
+    1 => 'Hauptartikel'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Nur unter der Kategorie',
+    1 => 'Auf der Startseite'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'als Text',
+    'html'      => 'in HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'lteste zuerst',
+    'DESC' => 'Neueste zuerst'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Trackbacks erlaubt',
+    -1  => 'Keine Trackbacks'
+);
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/german_formal_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/german_formal_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/german_formal_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/german_formal_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1511 @@
+<?php
+
+###############################################################################
+# german_formal_utf-8.php
+#
+# This is the German language file for Geeklog, addressing the user as "Sie"
+# (formal German). See german.php for a language file addressing the user with
+# the more informal "Du".
+#
+# Authors: P. Sack   <psack AT pr-ide DOT de>
+#          Dirk Haun <dirk AT haun-online DOT de>
+#
+# Based on the original english.php, started by Jason Whittenburg.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'utf-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Beitrag von:',
+    2 => '(mehr)',
+    3 => 'Kommentar(e)',
+    4 => 'Ändern',
+    5 => 'Umfrage',
+    6 => 'Ergebnisse',
+    7 => 'Umfrage-Ergebnisse',
+    8 => 'Stimmen',
+    9 => 'Admin-Funktionen:',
+    10 => 'Beiträge',
+    11 => 'Artikel',
+    12 => 'Blöcke',
+    13 => 'Kategorien',
+    14 => 'Links',
+    15 => 'Termine',
+    16 => 'Umfragen',
+    17 => 'User',
+    18 => 'SQL-Query',
+    19 => 'Abmelden',
+    20 => 'User-Information:',
+    21 => 'Username',
+    22 => 'User-ID',
+    23 => 'Security Level',
+    24 => 'Gast',
+    25 => 'Antwort',
+    26 => 'Die folgenden Kommentare geben Meinungen von Lesern wieder und entsprechen nicht notwendigerweise der Meinung der Betreiber dieser Site. Die Betreiber behalten sich die Löschung von Kommentaren vor.',
+    27 => 'Letzter Beitrag',
+    28 => 'Löschen',
+    29 => 'Keine Kommentare.',
+    30 => 'Ältere Artikel',
+    31 => 'Erlaubte HTML-Tags: ',
+    32 => 'Fehler: Ungültiger Username',
+    33 => 'Fehler: Konnte nicht ins Logfile schreiben',
+    34 => 'Fehler',
+    35 => 'Abmelden',
+    36 => 'am',
+    37 => 'Keine Artikel.',
+    38 => 'Content Syndication',
+    39 => 'Neuladen',
+    40 => 'Sie haben <tt>register_globals = Off</tt> in Ihrer <tt>php.ini</tt>. Für Geeklog muss <tt>register_globals</tt> jedoch auf <strong>on</strong> stehen. Bitte ändern Sie dies auf <strong>on</strong> und starten Sie Ihren Webserver neu.',
+    41 => 'Gäste',
+    42 => 'Autor:',
+    43 => 'Antwort schreiben',
+    44 => 'vorherige',
+    45 => 'MySQL Fehlernummer',
+    46 => 'MySQL Fehlermeldung',
+    47 => 'Anmelden',
+    48 => 'Userprofil ändern',
+    49 => 'Einstellungen',
+    50 => 'Fehler im SQL-Befehl',
+    51 => 'Hilfe',
+    52 => 'Neu',
+    53 => 'Admin-Home',
+    54 => 'Konnte die Datei nicht öffnen.',
+    55 => 'Fehler in',
+    56 => 'Abstimmen',
+    57 => 'Passwort',
+    58 => 'Anmelden',
+    59 => "Melden Sie sich jetzt als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> an.",
+    60 => 'Kommentar schreiben',
+    61 => 'Neuen Account anlegen',
+    62 => 'Wörter',
+    63 => 'Kommentar-Einstellungen',
+    64 => 'Artikel an einen Freund schicken',
+    65 => 'Druckfähige Version anzeigen',
+    66 => 'Mein Kalender',
+    67 => 'Willkommen bei ',
+    68 => 'Home',
+    69 => 'Kontakt',
+    70 => 'Suchen',
+    71 => 'Beitrag',
+    72 => 'Links',
+    73 => 'Umfragen',
+    74 => 'Kalender',
+    75 => 'Erweiterte Suche',
+    76 => 'Statistik',
+    77 => 'Plugins',
+    78 => 'Anstehende Termine',
+    79 => 'Was ist neu',
+    80 => 'Artikel in den letzten',
+    81 => 'Artikel in den letzten',
+    82 => 'Stunden',
+    83 => 'KOMMENTARE',
+    84 => 'LINKS',
+    85 => 'der letzten 48 Stunden',
+    86 => 'Keine neuen Kommentare',
+    87 => 'der letzten 2 Wochen',
+    88 => 'Keine neuen Links',
+    89 => 'Es stehen keine Termine an',
+    90 => 'Home',
+    91 => 'Seite erzeugt in',
+    92 => 'Sekunden',
+    93 => 'Copyright',
+    94 => 'All trademarks and copyrights on this page are owned by their respective owners.',
+    95 => 'Powered By',
+    96 => 'Gruppen',
+    97 => 'Wortliste',
+    98 => 'Plugins',
+    99 => 'ARTIKEL',
+    100 => 'Keine neuen Artikel',
+    101 => 'Meine Termine',
+    102 => 'Allgemeine Termine',
+    103 => 'DB Backups',
+    104 => 'von',
+    105 => 'Mail an User',
+    106 => 'Angezeigt',
+    107 => 'Update verfügbar?',
+    108 => 'Cache löschen',
+    109 => 'Beitrag melden',
+    110 => 'Site-Admin auf diesen Beitrag hinweisen',
+    111 => 'Als PDF anzeigen',
+    112 => 'Registrierte User',
+    113 => 'Dokumentation',
+    114 => 'TRACKBACKS',
+    115 => 'Keine neuen Trackback-Kommentare',
+    116 => 'Trackback',
+    117 => 'Verzeichnis',
+    118 => 'Fortsetzung auf der nächsten Seite:',
+    119 => "<a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">Passwort vergessen?</a>",
+    120 => 'Permalink',
+    121 => 'Kommentare (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Alle HTML-Tags sind erlaubt'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Terminkalender',
+    2 => 'Es gibt keine Termine anzuzeigen.',
+    3 => 'Wann',
+    4 => 'Wo',
+    5 => 'Beschreibung',
+    6 => 'Termin hinzufügen',
+    7 => 'Anstehende Termine',
+    8 => 'Wenn Sie diesen Termin zu Ihrem Kalender hinzufügen, können Sie  schneller einen Überblick über die Termine verschaffen, die Sie interessieren, indem Sie einfach auf "Mein Kalender" klicken.',
+    9 => 'Zu Meinem Kalender hinzufügen',
+    10 => 'Aus Meinem Kalender entfernen',
+    11 => "Termin wird zum Kalender von {$_USER['username']} hinzugefügt",
+    12 => 'Termin',
+    13 => 'Beginnt',
+    14 => 'Endet',
+    15 => 'Zurück zum Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Kommentar schreiben',
+    2 => 'Format',
+    3 => 'Abmelden',
+    4 => 'Account anlegen',
+    5 => 'Username',
+    6 => 'Um einen Kommentar abgeben zu können, müssen Sie angemeldet sein. Wenn Sie noch keinen Account haben, benutzen Sie bitte das Formular um einen anzulegen.',
+    7 => 'Ihr letzter Kommentar war vor ',
+    8 => " Sekunden. Zwischen zwei Kommentaren müssen aber mindestens {$_CONF['commentspeedlimit']} Sekunden vergangen sein.",
+    9 => 'Kommentar',
+    10 => 'Beitrag melden',
+    11 => 'Kommentar abschicken',
+    12 => 'Bitte die Felder Betreff <em>und</em> Kommentar ausfüllen, um einen Kommentar zu diesem Artikel abzugeben.',
+    13 => 'Ihre Information',
+    14 => 'Vorschau',
+    15 => 'Diesen Beitrag melden',
+    16 => 'Betreff',
+    17 => 'Fehler',
+    18 => 'Wichtige Hinweise:',
+    19 => 'Bitte geben Sie nur Kommentare ab, die zum Thema gehören.',
+    20 => 'Beziehen Sie sich möglichst auf Kommentare anderer Personen statt einen neuen Thread zu eröffnen.',
+    21 => 'Lesen Sie bitte die vorhandenen Kommentare bevor Sie Ihren eigenen abgeben, um nicht noch einmal zu schreiben, was schon gesagt wurde.',
+    22 => 'Benutzen Sie eine eindeutige Betreffzeile, die den Inhalt Ihres Kommentars zusammenfasst.',
+    23 => 'Ihre E-Mail-Adresse wird NICHT veröffentlicht.',
+    24 => 'Gast',
+    25 => 'Sind Sie sicher, dass Sie diesen Beitrag als möglichen Missbrauch melden wollen?',
+    26 => '%s meldete den folgenden Beitrag als möglichen Missbrauch:',
+    27 => 'Hinweis auf Missbrauch'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Userprofil für',
+    2 => 'Username',
+    3 => 'Name',
+    4 => 'Passwort',
+    5 => 'E-Mail',
+    6 => 'Homepage',
+    7 => 'Biographie',
+    8 => 'PGP-Key',
+    9 => 'Speichern',
+    10 => 'Die letzten 10 Kommentare von',
+    11 => 'Keine Kommentare',
+    12 => 'User-Einstellungen für',
+    13 => 'E-Mail Nightly Digest',
+    14 => 'Dieses Passwort wurde mit einem Zufallsgenerator erzeugt. Es wird empfohlen, das Passwort nach dem Anmelden sofort zu ändern. Um Ihr Passwort zu ändern, melden Sie sich bitte an und wählen dann den Punkt Userprofil ändern im Block Einstellungen.',
+    15 => "Ihr Account für {$_CONF['site_name']} wurde erfolgreich angelegt. Um ihn benutzen zu können, melden Sie sich bitte mit den folgenden Informationen an. Diese E-Mail bitte aufheben.",
+    16 => 'Ihre Zugangsdaten',
+    17 => 'Account existiert nicht',
+    18 => 'Die angegebene E-Mail-Adresse scheint keine gültige E-Mail-Adresse zu sein',
+    19 => 'Dieser Username oder diese E-Mail-Adresse existieren bereits.',
+    20 => 'Die angegebene E-Mail-Adresse scheint keine gültige E-Mail-Adresse zu sein',
+    21 => 'Fehler',
+    22 => "Anmelden bei {$_CONF['site_name']}!",
+    23 => "Indem Sie sich bei {$_CONF['site_name']} anmelden, können Sie Artikel und Kommentare unter Ihrem eigenen Namen veröffentlichen (andernfalls geht das nur anonym). Übrigens wird Ihre E-Mail-Adresse <strong><em>niemals</em></strong> auf dieser Website angezeigt werden.",
+    24 => 'Ihr Passwort wird Ihnen an die angegebene E-Mail-Adresse geschickt.',
+    25 => 'Passwort vergessen?',
+    26 => 'Geben Sie <em>entweder</em> Ihren Usernamen <em>oder</em> die E-Mail-Adresse ein, mit der Sie sich angemeldet haben, und klicken Sie dann auf "Passwort schicken". Eine E-Mail mit einer Anleitung, wie Sie ein neues Passwort eingeben können, wird dann an die gespeicherte E-Mail-Adresse geschickt.',
+    27 => 'Jetzt anmelden!',
+    28 => 'Passwort schicken',
+    29 => 'logged out from',
+    30 => 'logged in from',
+    31 => 'Um diese Funktion nutzen zu können, muüssen Sie angemeldet sein',
+    32 => 'Signatur',
+    33 => 'Auf der Site nicht sichtbar!',
+    34 => 'Ihr richtiger Name',
+    35 => 'Passwort eingeben, um es zu ändern',
+    36 => '(mit http://)',
+    37 => 'Wird an Ihre Kommentare angefügt',
+    38 => 'Alles über Sie - für alle sichtbar',
+    39 => 'Ihr PGP-Key, wenn vorhanden',
+    40 => 'Kategorien ohne Icons',
+    41 => 'Bereit zu Moderieren',
+    42 => 'Datumsformat',
+    43 => 'Artikel pro Seite',
+    44 => 'Keine Blöcke',
+    45 => 'Anzeige-Einstellungen für',
+    46 => 'Nicht anzeigen für',
+    47 => 'Block-Einstellungen für',
+    48 => 'Kategorien',
+    49 => 'Keine Icons in Artikeln',
+    50 => 'Häkchen entfernen, wenn es Sie nicht interessiert',
+    51 => 'Nur die Artikel',
+    52 => 'Defaultwert:',
+    53 => 'Receive the days stories every night',
+    54 => 'Themen und Autoren ankreuzen, die Sie NICHT sehen wollen.',
+    55 => 'Wenn Sie hier nichts ankreuzen, wird die Default-Auswahl an Blöcken angezeigt. Sobald Sie anfangen, Blöcke anzukreuzen, werden auch nur noch diejenigen angezeigt, die angekreuzt sind! Die Default-Blöcke sind <b>fett</b> markiert.',
+    56 => 'Autoren',
+    57 => 'Anzeigemodus',
+    58 => 'Sortierreihenfolge',
+    59 => 'Kommentarlimit',
+    60 => 'Wie sollen Kommentare angezeigt werden?',
+    61 => 'Neueste oder älteste zuerst?',
+    62 => 'Defaultwert: 100',
+    63 => "Ihr Passwort sollte in Kürze per E-Mail eintreffen. Bitte beachten Sie die Hinweise in der E-Mail und Danke für Ihr Interesse an {$_CONF['site_name']}",
+    64 => 'Kommentar-Einstellungen für',
+    65 => 'Bitte versuchen Sie noch einmal, sich anzumelden',
+    66 => "Haben Sie sich vertippt? Bitte versuchen Sie noch einmal, sich hier anzumelden.",
+    67 => 'Mitglied seit',
+    68 => 'Angemeldet für',
+    69 => 'Wie lange soll das System Sie nach dem Anmelden erkennen?',
+    70 => "Aussehen und Inhalt von {$_CONF['site_name']} konfigurieren",
+    71 => "Zu den Features von {$_CONF['site_name']} gehört, dass Sie selbst festlegen können, welche Artikel Sie angezeigt bekommen. Darüber hinaus können Sie auch das Aussehen der Website verändern. Um in den Genuss dieser Features zu kommen, müssen Sie sich jedoch zuerst bei {$_CONF['site_name']} <a href=\"{$_CONF['site_url']}/users.php?mode=new\">anmelden</a>. Oder sind Sie schon angemeldet? Dann benutzen Sie bitte das Anmeldeformular auf der linken Seite.",
+    72 => 'Erscheinungsbild',
+    73 => 'Sprache',
+    74 => 'Ändern Sie das Aussehen dieser Site',
+    75 => 'Artikel per E-Mail für',
+    76 => 'Wählen Sie Kategorien aus der folgenden Liste und Sie bekommen einmal pro Tag eine E-Mail mit einer Übersicht aller neuen Artikel in den ausgewählten Kategorien. Sie brauchen nur die Kategorien anzukreuzen, die Sie interessieren.',
+    77 => 'Foto',
+    78 => 'Ein Bild von Ihnen',
+    79 => 'Ankreuzen, um dieses Bild zu löschen:',
+    80 => 'Anmelden',
+    81 => 'E-Mail schreiben',
+    82 => 'Die letzten 10 Artikel von',
+    83 => 'Statistik für',
+    84 => 'Gesamtanzahl Artikel:',
+    85 => 'Gesamtanzahl Kommentare',
+    86 => 'Alle Artikel und Kommentare von',
+    87 => 'Ihr Username',
+    88 => "Jemand (möglicherweise Sie selbst) hat ein neues Passwort für Ihren Account \"%s\" auf {$_CONF['site_name']} <{$_CONF['site_url']}> angefordert.\n\nWenn Sie tatsächlich ein neues Passwort benötigen, klicken Sie bitte auf den folgenden Link:\n\n",
+    89 => "Möchten Sie Ihr Passwort nicht ändern, so können Sie diese E-Mail einfach ignorieren (Ihr bisheriges Passwort bleibt dann unverändert gültig).\n\n",
+    90 => 'Hier können Sie jetzt ein neues Passwort für Ihren Account eingeben. Ihr altes Passwort bleibt noch solange gültig, bis Sie dieses Formular abschicken.',
+    91 => 'Neues Passwort',
+    92 => 'Neues Passwort eingeben',
+    93 => 'Sie haben zuletzt vor %d Sekunden ein neues Passwort angefordert. Zwischen zwei Passwort-Anforderungen müssen aber mindestens %d Sekunden vergangen sein.',
+    94 => 'Account "%s" löschen',
+    95 => 'Sie können Ihren Account löschen, indem Sie auf den "Account Löschen"-Button klicken. Artikel und Kommentare, die Sie unter diesem Account geschrieben haben, werden <strong>nicht</strong> gelöscht, werden aber fortan als vom User "Gast" geschrieben erscheinen.',
+    96 => 'Account Löschen',
+    97 => 'Account Löschen bestätigen',
+    98 => 'Sind Sie sicher, dass Sie Ihren Account löschen wollen? Sie werden sich danach nicht mehr einloggen können (es sei denn, Sie legen einen neuen Account an). Wenn Sie sich sicher sind, klicken Sie bitte noch einmal auf "Account Löschen".',
+    99 => 'Privatsphäre-Einstellungen für',
+    100 => 'E-Mail von Admin',
+    101 => 'E-Mails von Site-Admins erlauben',
+    102 => 'E-Mail von Usern',
+    103 => 'E-Mails von anderen Usern erlauben',
+    104 => 'Online-Status zeigen',
+    105 => 'Unter "Wer ist online?"',
+    106 => 'Wohnort',
+    107 => 'Erscheint im öffentlichen Profil',
+    108 => 'Neues Passwort bestätigen',
+    109 => 'Geben Sie hier das neue Passwort noch einmal ein',
+    110 => 'Aktuelles Passwort',
+    111 => 'Geben Sie Ihr aktuelles Passwort ein',
+    112 => 'Sie haben die erlaubte Anzahl von Anmeldeversuchen überschritten. Bitte versuchen Sie es später noch einmal.',
+    113 => 'Anmeldeversuch fehlgeschlagen',
+    114 => 'Account gesperrt',
+    115 => 'Ihr Account wurde gesperrt. Sie können sich nicht einloggen. Wenden Sie sich bitte an einen Administrator.',
+    116 => 'Account noch nicht freigegeben',
+    117 => 'Ihr Account muss erst noch von einem Administrator freigegeben werden. Sie können sich erst einloggen, wenn der Account freigegeben wurde.',
+    118 => "Ihr Account für {$_CONF['site_name']} wurde jetzt freigeschaltet. Sie können sich jetzt auf der Website unter der unten angegebenen URL anmelden. Benutzen Sie dazu Ihren Usernamen (<username>) und das Passwort, das Sie bereits per E-Mail erhalten haben.",
+    119 => 'Wenn Sie Ihr Passwort vergessen haben, können Sie unter der folgenden URL ein neues anfordern:',
+    120 => 'Account aktiviert',
+    121 => 'Dienst',
+    122 => 'Derzeit können sich keine neuen User anmelden.',
+    123 => "Sind Sie ein <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Keine Artikel',
+    2 => 'Es gibt keine Artikel, die angezeigt werden könnten. Entweder gibt es für diese Kategorie keine Artikel oder Ihre Einstellungen sind zu restriktiv.',
+    3 => ' für die Kategorie %s.',
+    4 => 'Hauptartikel',
+    5 => 'weiter',
+    6 => 'zurück',
+    7 => 'Anfang',
+    8 => 'Ende'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Es gab einen Fehler beim Versenden der Nachricht. Bitte noch einmal versuchen.',
+    2 => 'Nachricht wurde verschickt.',
+    3 => 'Bitte sicherstellen, dass Sie eine gültige E-Mail-Adresse eingetragen haben.',
+    4 => 'Bitte alle Felder ausfüllen: Ihr Name, Ihre E-Mail, Betreff und Nachricht',
+    5 => 'Fehler: Username nicht bekannt.',
+    6 => 'Es ist ein Fehler aufgetreten.',
+    7 => 'Userprofil für',
+    8 => 'Username',
+    9 => 'User URL',
+    10 => 'Eine Mail schicken an',
+    11 => 'Ihr Name:',
+    12 => 'Ihre E-Mail:',
+    13 => 'Betreff:',
+    14 => 'Nachricht:',
+    15 => 'HTML wird nicht interpretiert.',
+    16 => 'Nachricht abschicken',
+    17 => 'Artikel an einen Freund schicken',
+    18 => 'An (Name)',
+    19 => 'An (E-Mail)',
+    20 => 'Von (Name)',
+    21 => 'Von (E-Mail)',
+    22 => 'Alle Felder müssen ausgefüllt werden.',
+    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie würden sich vielleicht für diesen Artikel auf {$_CONF['site_url']} interessieren. Dies ist kein Spam und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) werden nicht gespeichert oder wiederverwendet.",
+    24 => "Schreiben Sie einen Kommentar zu diesem Artikel:\n",
+    25 => 'Sie müssen sich anmelden, um diese Funktion benutzen zu können. Dies ist leider nötig, um den Missbrauch des Systems zu verhindern',
+    26 => 'Mit diesem Formular können Sie eine E-Mail an diesen User schicken. Alle Felder müssen ausgefüllt werden.',
+    27 => 'Kurze Nachricht',
+    28 => '%s schrieb: ',
+    29 => "Dies sind die neuen Artikel auf {$_CONF['site_name']} vom ",
+    30 => ' - Neue Artikel vom ',
+    31 => 'Titel',
+    32 => 'Datum',
+    33 => 'Kompletter Artikel unter',
+    34 => 'Ende dieser Nachricht',
+    35 => 'Sorry, dieser User möchte keine E-Mails bekommen.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Erweiterte Suche',
+    2 => 'Suchbegriffe',
+    3 => 'Kategorie',
+    4 => 'Alle',
+    5 => 'Art',
+    6 => 'Artikel',
+    7 => 'Kommentare',
+    8 => 'Autoren',
+    9 => 'Alle',
+    10 => 'Suchen',
+    11 => 'Suchergebnisse',
+    12 => 'Treffer',
+    13 => 'Erweiterte Suche: Keine Treffer',
+    14 => 'Es gab keine Treffer für Ihre Suche nach',
+    15 => 'Bitte noch einmal versuchen.',
+    16 => 'Titel',
+    17 => 'Datum',
+    18 => 'Autor',
+    19 => "Durchsuchen Sie die komplette Datenbank von {$_CONF['site_name']} ...",
+    20 => 'Datum',
+    21 => 'bis',
+    22 => '(Datumsformat: JJJJ-MM-TT)',
+    23 => 'Treffer',
+    24 => '%d Einträge gefunden',
+    25 => 'Gesucht wurde nach',
+    26 => 'Beiträgen in',
+    27 => 'Sekunden.',
+    28 => 'Keine Treffer unter den Artikeln und Kommentaren.',
+    29 => 'Gefundene Artikel und Kommentare',
+    30 => 'Keine Links für Ihre Suche gefunden',
+    31 => 'Dieses Plugin lieferte keine Treffer',
+    32 => 'Termin',
+    33 => 'URL',
+    34 => 'Ort',
+    35 => 'Ganztägig',
+    36 => 'Keine Termine für Ihre Suche gefunden',
+    37 => 'Gefundene Termine',
+    38 => 'Gefundene Links',
+    39 => 'Links',
+    40 => 'Termine',
+    41 => 'Ihr Suchbegriff sollte mindestens 3 Zeichen lang sein.',
+    42 => 'Das Datum muss im Format JJJJ-MM-TT (Jahr-Monat-Tag) eingegeben werden.',
+    43 => 'genaue Wortgruppe',
+    44 => 'alle Wörter',
+    45 => 'irgendeines der Wörter',
+    46 => 'weiter',
+    47 => 'zurück',
+    48 => 'Autor',
+    49 => 'Datum',
+    50 => 'Treffer',
+    51 => 'Link',
+    52 => 'Wohnort',
+    53 => 'Gefundene Artikel',
+    54 => 'Gefundene Kommentare',
+    55 => 'der Wortgruppe',
+    56 => '<em>und</em>',
+    57 => '<em>oder</em>',
+    58 => 'Weitere Ergebnisse &gt;&gt;',
+    59 => 'Ergebnisse',
+    60 => 'pro Seite',
+    61 => 'Suche korrigieren'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Site-Statistik',
+    2 => 'Gesamtzahl der Seitenabrufe',
+    3 => 'Anzahl Artikel (Kommentare)',
+    4 => 'Anzahl Umfragen (Stimmen)',
+    5 => 'Anzahl Links (Klicks)',
+    6 => 'Anzahl Termine',
+    7 => 'Top Ten der Artikel',
+    8 => 'Artikelüberschrift',
+    9 => 'Angezeigt',
+    10 => 'Es gibt keine Artikel oder sie wurden von niemandem gelesen.',
+    11 => 'Top Ten der meistkommentierten Artikel',
+    12 => 'Kommentare',
+    13 => 'Es gibt keine Artikel oder es wurden keine Kommentare dazu abgegeben.',
+    14 => 'Top Ten der Umfragen',
+    15 => 'Thema der Umfrage',
+    16 => 'Stimmen',
+    17 => 'Es gibt keine Umfragen oder es wurden keine Stimmen abgegeben.',
+    18 => 'Top Ten der Links',
+    19 => 'Links',
+    20 => 'Angeklickt',
+    21 => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.',
+    22 => 'Top Ten der verschickten Artikel',
+    23 => 'E-Mails',
+    24 => 'Es wurden keine Artikel per E-Mail verschickt.',
+    25 => 'Top Ten der Artikel mit Trackback-Kommentaren',
+    26 => 'Keine Trackback-Kommentare gefunden.',
+    27 => 'Anzahl aktiver User',
+    28 => 'Top Ten der Termine',
+    29 => 'Event',
+    30 => 'Angezeigt',
+    31 => 'Es gibt keine Termine oder sie wurden von niemandem gelesen.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Weiterführende Links',
+    2 => 'An einen Freund schicken',
+    3 => 'Druckfähige Version',
+    4 => 'Optionen',
+    5 => 'Als PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'To submit a %s you are required to be logged in as a user.',
+    2 => 'Anmelden',
+    3 => 'Neuer User',
+    4 => 'Einen Termin einreichen',
+    5 => 'Einen Link einreichen',
+    6 => 'Einen Artikel einreichen',
+    7 => 'Anmeldung erforderlich',
+    8 => 'Abschicken',
+    9 => 'Wenn Sie Informationen einreichen möchten, die auf dieser Site veröffentlicht werden sollen, dann bitten wir Sie, folgende Punkte zu beachten:<ul><li>Bitte alle Felder ausfüllen, sie werden benötigt<li>Bitte nur vollständige und exakte Information einreichen<li>URLs vor dem Abschicken unbedingt noch einmal kontrollieren</ul>',
+    10 => 'Titel',
+    11 => 'Link',
+    12 => 'Startdatum',
+    13 => 'Enddatum',
+    14 => 'Ort',
+    15 => 'Beschreibung',
+    16 => 'oder andere Kategorie',
+    17 => 'Kategorie',
+    18 => 'Andere',
+    19 => 'Bitte lesen',
+    20 => 'Fehler: Kategorie fehlt',
+    21 => 'Wenn Sie "Andere" auswählen, geben Sie bitte auch eine neue Kategorie ein',
+    22 => 'Fehler: Nicht alle Felder ausgefüllt',
+    23 => 'Bitte alle Felder des Formulars ausfüllen. Alle Felder werden benötigt.',
+    24 => 'Beitrag gespeichert',
+    25 => 'Ihr %s-Beitrag wurde gespeichert.',
+    26 => 'Speed Limit',
+    27 => 'Username',
+    28 => 'Kategorie',
+    29 => 'Artikel',
+    30 => 'Ihr letzter Beitrag war vor ',
+    31 => " Sekunden. Zwischen zwei Beiträgen müssen aber mindestens {$_CONF['speedlimit']} Sekunden vergangen sein.",
+    32 => 'Vorschau',
+    33 => 'Artikelvorschau',
+    34 => 'Abmelden',
+    35 => 'HTML-Tags sind nicht erlaubt',
+    36 => 'Format',
+    37 => "Wenn Sie einen Termin bei {$_CONF['site_name']} einreichen, wird er in den Kalender aufgenommen, von wo aus ihn andere User in ihren persönlichen Kalender übernehmen können. Dies ist <b>NICHT</b> dazu gedacht, private Termine und Ereignisse wie etwa Geburtstage zu verwalten.<br><br>Wenn Sie einen Termin einreichen, wird er an die Administratoren weitergeleitet und sobald er von diesen akzeptiert wird, wird er im Kalender erscheinen.",
+    38 => 'Termin hinzufügen zu',
+    39 => 'Kalender',
+    40 => 'Persönlicher Kalender',
+    41 => 'Endzeit',
+    42 => 'Startzeit',
+    43 => 'Ganztägiger Termin',
+    44 => 'Addresse, Zeile 1',
+    45 => 'Addresse, Zeile 2',
+    46 => 'Stadt',
+    47 => 'Bundesland',
+    48 => 'Postleitzahl',
+    49 => 'Art des Termins',
+    50 => 'Edit Termin Types',
+    51 => 'Ort',
+    52 => 'Löschen',
+    53 => 'Account anlegen'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Bitte authentifizieren!',
+    2 => 'Zugriff verweigert! Login-Information ungültig',
+    3 => 'Ungültiges Passwort für User',
+    4 => 'Username:',
+    5 => 'Passwort:',
+    6 => 'Zugriffe auf die Administrationsseiten dieser Website werden aufgezeichnet und kontrolliert.<br>Diese Seiten sind nur für befugte Personen zugänglich.',
+    7 => 'einloggen'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Ungenügende Rechte',
+    2 => 'Sie haben nicht die nötigen Rechte, um diesen Block ändern zu können.',
+    3 => 'Block-Editor',
+    4 => 'Beim Lesen dieses Feeds trat ein Fehler auf (die Datei error.log enthält nähere Informationen).',
+    5 => 'Block-Titel',
+    6 => 'Kategorie',
+    7 => 'Alle',
+    8 => 'Block-Sicherheitsstufe',
+    9 => 'Reihenfolge',
+    10 => 'Block-Typ',
+    11 => 'Portal-Block',
+    12 => 'Normaler Block',
+    13 => 'Portal-Block: Optionen',
+    14 => 'RSS-URL',
+    15 => 'Letztes Update',
+    16 => 'Normaler Block: Optionen',
+    17 => 'Inhalt',
+    18 => 'Bitte ausfüllen: Block-Titel, Sicherheitsstufe und Inhalt',
+    19 => 'Block-Manager',
+    20 => 'Titel',
+    21 => 'Block-Sichh.',
+    22 => 'Typ',
+    23 => 'Reihenfolge',
+    24 => 'Kategorie',
+    25 => 'Um einen Block zu ändern oder zu löschen, auf das Ändern-Icon (s.u.) klicken. Um einen neuen Block anzulegen, auf Neu anlegen (s.o.) klicken.',
+    26 => 'Layout-Block',
+    27 => 'PHP-Block',
+    28 => 'PHP-Block: Optionen',
+    29 => 'Block-Funktion',
+    30 => 'Wenn einer Ihrer Blöcke PHP-Code verwenden soll, geben Sie hier bitte den Namen der Funktion ein. Der Funktionsname muss mit "phpblock_" (z.B. phpblock_getweather) beginnen. Wenn diese Namenskonvention nicht eingehalten wird, wird die Funktion NICHT aufgerufen. Das soll verhindern, dass Hacker evtl. gefährlichen Code einschleusen können. Den Funktionsnamen NICHT mit einem Klammerpaar "()" abschliessen. Ferner wird empfohlen, all Ihren Code für PHP-Blöcke in der Datei /pfad/zu/geeklog/system/lib-custom.php abzulegen. Dort kann der Code auch dann unverändert bleiben, wenn Sie auf eine neuere Geeklog-Version umsteigen.',
+    31 => 'Fehler in PHP-Block: Funktion %s existiert nicht.',
+    32 => 'Fehler: Nicht alle Felder ausgefüllt',
+    33 => 'Für Portal-Blöcke muss ein Titel und eine URL zur RSS-Datei angegeben werden.',
+    34 => 'Für PHP-Blöcke muss ein Titel und der Funktionsname eingegeben werden.',
+    35 => 'Für normale Blöcke muss ein Titel und der Inhalt eingegeben werden.',
+    36 => 'Für Layout-Blöcke muss der Inhalt eingegeben werden.',
+    37 => 'Ungültiger Funktionsname für einen PHP-Block',
+    38 => 'Funktionen für PHP-Blöcke müssen mit \'phpblock_\' beginnen (z.B. phpblock_getweather). Der \'phpblock_\'-Teil wird aus Sicherheitsgründen vorausgesetzt, um das Ausführen von beliebigem Code zu verhindern.',
+    39 => 'Seite',
+    40 => 'links',
+    41 => 'rechts',
+    42 => 'Für Geeklog-Default-Blöcke muss ein Block-Titel und die Block-Reihenfolge angegeben werden.',
+    43 => 'Nur auf der Startseite',
+    44 => 'Zugriff verweigert',
+    45 => "Sie haben keine Zugriffsrechte für diesen Block. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/block.php\">Zurück zum Administrator-Menü</a>.",
+    46 => 'Bewegen',
+    47 => 'Admin Home',
+    48 => 'Block-Name',
+    49 => ' (keine Leerzeichen, muss eindeutig sein)',
+    50 => 'URL zur Hilfe',
+    51 => '(mit http://)',
+    52 => 'Wenn das Feld leer ist, wird kein Hilfe-Icon zu diesem Block angezeigt.',
+    53 => 'Aktiv',
+    54 => 'Speichern',
+    55 => 'Abbruch',
+    56 => 'Löschen',
+    57 => 'Block nach unten',
+    58 => 'Block nach oben',
+    59 => 'Block auf die rechte Seite',
+    60 => 'Block auf die linke Seite',
+    61 => 'Ohne Titel',
+    62 => 'Artikellimit',
+    63 => 'Block-Titel nicht erlaubt',
+    64 => 'Der Titel kann nicht leer sein und darf kein HTML enthalten!',
+    65 => 'Reihenfolge'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Termin-Editor',
+    2 => 'Error',
+    3 => 'Titel',
+    4 => 'URL',
+    5 => 'Startdatum',
+    6 => 'Enddatum',
+    7 => 'Ort',
+    8 => 'Beschreibung',
+    9 => '(mit http://)',
+    10 => 'Es müssen mindestens Datum und Uhrzeit, Titel und Beschreibung angegeben werden!',
+    11 => 'Termin-Manager',
+    12 => 'Auf das Ändern-Icon klicken, um einen Termin zu ändern oder zu löschen. Mit Neu anlegen (s.o.) wird ein neuer Termin angelegt. Das Kopie-Icon erzeugt eine Kopie eines vorhandenen Termins.',
+    13 => 'Titel',
+    14 => 'Startdatum',
+    15 => 'Enddatum',
+    16 => 'Zugriff verweigert',
+    17 => "Sie haben keine Zugriffsrechte für diesen Termin. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/event.php\">Zurück zum Administrator-Menü</a>.",
+    18 => 'Neuer Termin',
+    19 => 'Admin Home',
+    20 => 'Speichern',
+    21 => 'Abbruch',
+    22 => 'Löschen',
+    23 => 'Ungültiges Startdatum.',
+    24 => 'Ungültiges Enddatum.',
+    25 => 'Enddatum ist vor dem Startdatum.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Vorherige Artikel',
+    2 => 'Nächste Artikel',
+    3 => 'Modus',
+    4 => 'Format',
+    5 => 'Artikel-Editor',
+    6 => 'Es sind keine Artikel vorhanden.',
+    7 => 'Autor',
+    8 => 'Speichern',
+    9 => 'Vorschau',
+    10 => 'Abbruch',
+    11 => 'Löschen',
+    12 => 'ID',
+    13 => 'Titel',
+    14 => 'Kategorie',
+    15 => 'Datum',
+    16 => 'Einleitung',
+    17 => 'Haupttext',
+    18 => 'Gelesen',
+    19 => 'Kommentare',
+    20 => 'Ping',
+    21 => 'Senden',
+    22 => 'Artikelliste',
+    23 => 'Auf das Ändern-Icon klicken, um einen Artikel zu ändern oder zu löschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neuen Artikel zu schreiben.',
+    24 => 'Diese ID wird bereits für einen anderen Artikel benutzt. Bitte wählen Sie eine andere ID.',
+    25 => 'Fehler beim Speichern des Artikels',
+    26 => 'Artikelvorschau',
+    27 => 'Wenn Sie [unscaledX] statt [imageX] verwenden, wird das Bild in Originalgröße eingebunden.',
+    28 => '<p><strong>VORSCHAU:</strong> Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthält. Bei Artikeln mit Bildern empfiehlt es sich, den Artikel als Entwurf zu markieren, zu speichern und dann von der Liste der Artikel aus zu betrachten.</p>',
+    29 => 'Trackbacks',
+    30 => 'Fehler beim Datei-Upload',
+    31 => 'Bitte mindestens die Felder Titel und Einleitung ausfüllen',
+    32 => 'Hauptartikel',
+    33 => 'Es kann nur einen Hauptartikel geben',
+    34 => 'Entwurf',
+    35 => 'Ja',
+    36 => 'Nein',
+    37 => 'Mehr von',
+    38 => 'Mehr aus',
+    39 => 'E-Mails',
+    40 => 'Zugriff verweigert',
+    41 => "Sie haben keine Zugriffsrechte für diesen Artikel. Dieser Zugriffsversuch wurde protokolliert. Sie können sich den Artikel aber ansehen (s.u., Ändern nicht möglich). <a href=\"{$_CONF['site_admin_url']}/story.php\">Zurück zum Administrator-Menü</a>.",
+    42 => "Sie haben keine Zugriffsrechte für diesen Artikel. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/story.php\">Zurück zum Administrator-Menü</a>.",
+    43 => 'Neuer Artikel',
+    44 => 'Admin Home',
+    45 => 'Zugriff',
+    46 => '<b>HINWEIS:</b> Wenn Sie hier ein Datum in der Zukunft einstellen, wird der Artikel erst veröffentlicht, wenn dieser Zeitpunkt erreicht ist. Bis dahin wird der Artikel auch nicht in der RSS-Datei, der Suche und der Statistik erscheinen.',
+    47 => 'Bilder',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => 'Die oben ausgewählten Bilder können in den Artikel eingefügt werden, indem Sie spezielle Platzhalter dafür in den Text einfügen. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss.<br>HINWEIS: Es müssen alle ausgewählten Bilder verwendet werden. Andernfalls kann der Artikel nicht gespeichert werden.<br>',
+    52 => 'Löschen',
+    53 => 'wurde nicht verwendet. Sie müssen dieses Bild im Text des Artikels verwenden oder es löschen bevor Sie Ihre Änderungen sichern können.',
+    54 => 'Nicht verwendete Bilder',
+    55 => 'Folgende Fehler traten beim Versuch, den Artikel zu speichern, auf. Bitte diese Fehler beheben und den Artikel noch einmal speichern.',
+    56 => 'mit Icon',
+    57 => 'Bild in Originalgröße',
+    58 => 'Artikelverwaltung',
+    59 => 'Option',
+    60 => 'Aktiviert',
+    61 => 'automatisch archivieren',
+    62 => 'automatisch löschen',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Kategorie-Editor',
+    2 => 'Kategorie-ID',
+    3 => 'Kategorie-Name',
+    4 => 'Kategorie-Bild',
+    5 => '(keine Leerzeichen!)',
+    6 => 'Löschen einer Kategorie löscht auch alle dazu gehörenden Artikel und Blöcke',
+    7 => 'Bitte die Felder Kategorie-ID und Kategorie-Name ausfüllen',
+    8 => 'Kategorie-Manager',
+    9 => 'Auf eine Kategorie klicken, um sie zu ändern oder zu löschen. Auf Neu anlegen (s.o.) klicken, um eine neue Kategorie anzulegen. Die nötige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben. Das Sternchen(*) markiert die Default-Kategorie.',
+    10 => 'Sortierreihenfolge',
+    11 => 'Artikel/Seite',
+    12 => 'Zugriff verweigert',
+    13 => "Sie haben keine Zugriffsrechte für diese Kategorie. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/topic.php\">Zurück zum Administrator-Menü</a>.",
+    14 => 'Sortiermethode',
+    15 => 'alphabetisch',
+    16 => 'Default:',
+    17 => 'Neue Kategorie',
+    18 => 'Admin Home',
+    19 => 'Speichern',
+    20 => 'Abbruch',
+    21 => 'Löschen',
+    22 => 'Default',
+    23 => 'Zur Default-Kategorie für neue Artikel machen',
+    24 => '(*)',
+    25 => 'Archiv-Kategorie',
+    26 => 'Zur Archiv-Kategorie machen (nur für eine Kategorie möglich)',
+    27 => 'oder ein Icon hochladen',
+    28 => 'maximal',
+    29 => 'Fehler beim Datei-Upload'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'User-Editor',
+    2 => 'User-ID',
+    3 => 'Username',
+    4 => 'Name',
+    5 => 'Passwort',
+    6 => 'Security Level',
+    7 => 'E-Mail-Adresse',
+    8 => 'Homepage',
+    9 => '(keine Leerzeichen!)',
+    10 => 'Bitte die Felder Username und E-Mail-Adresse ausfüllen.',
+    11 => 'User-Manager',
+    12 => 'Auf das Ändern-Icon klicken, um einen User zu ändern oder zu löschen. Ein neuer User kann mit Neu anlegen (s.o.) angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
+    13 => 'SecLev',
+    14 => 'Reg. Datum',
+    15 => 'Neuer User',
+    16 => 'Admin Home',
+    17 => '',
+    18 => 'Abbruch',
+    19 => 'Löschen',
+    20 => 'Speichern',
+    21 => 'Dieser Username existiert bereits.',
+    22 => 'Fehler',
+    23 => 'Import',
+    24 => 'Mehrfach-Import von Usern',
+    25 => 'Hier können Userdaten aus einer Datei in Geeklog importiert werden. Die Import-Datei muss ein Textfile sein, bei dem die Datensätze durch Tabs getrennt sind. Zudem müssen die Felder in der Reihenfolge Richtiger Name - Username - E-Mail-Adresse vorliegen. Jeder so importierte User bekommt eine E-Mail mit einem Zufallspasswort zugeschickt. Pro Zeile darf nur ein User stehen. Wenn sich die Importdatei nicht an dieses Format hält, kann es zu Problemen kommen, die nur in mühseliger Handarbeit behoben werden können. Also die Einträge lieber zweimal überprüfen ...',
+    26 => 'Suche',
+    27 => 'Anzahl Treffer',
+    28 => 'Ankreuzen, um dieses Bild zu löschen:',
+    29 => 'Pfad',
+    30 => 'Importieren',
+    31 => 'Neue User',
+    32 => 'Datei bearbeitet. %d User wurden importiert, dabei traten %d Fehler auf.',
+    33 => 'Abschicken',
+    34 => 'Fehler: Keine Datei zum Upload angegeben.',
+    35 => 'Letzter Login',
+    36 => '(noch nie)',
+    37 => 'UID',
+    38 => 'Gruppenliste',
+    39 => 'Passwort (nochmal)',
+    40 => 'Registriert',
+    41 => 'Letzter Login',
+    42 => 'Gesperrt',
+    43 => 'Erwartet Aktivierung',
+    44 => 'Erwartet Autorisierung',
+    45 => 'Aktiv',
+    46 => 'User-Status',
+    47 => 'Ändern'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Akzeptieren',
+    2 => 'Löschen',
+    3 => 'Editieren',
+    4 => 'Profil',
+    10 => 'Titel',
+    11 => 'Startdatum',
+    12 => 'URL',
+    13 => 'Kategorie',
+    14 => 'Datum',
+    15 => 'Kategorie',
+    16 => 'Username',
+    17 => 'Name',
+    18 => 'E-Mail',
+    34 => 'Kommandozentrale',
+    35 => 'Beiträge: Artikel',
+    36 => 'Beiträge: Links',
+    37 => 'Beiträge: Termine',
+    38 => 'Abschicken',
+    39 => 'Derzeit gibt es keine Beiträge zu moderieren.',
+    40 => 'Neue User'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sonntag',
+    2 => 'Montag',
+    3 => 'Dienstag',
+    4 => 'Mittwoch',
+    5 => 'Donnerstag',
+    6 => 'Freitag',
+    7 => 'Samstag',
+    8 => 'Neuer Termin',
+    9 => 'Termin',
+    10 => 'Termine am',
+    11 => 'Kalender',
+    12 => 'Mein Kalender',
+    13 => 'Januar',
+    14 => 'Februar',
+    15 => 'März',
+    16 => 'April',
+    17 => 'Mai',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'August',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'Dezember',
+    25 => 'Zurück zum ',
+    26 => 'ganztägig',
+    27 => 'Woche',
+    28 => 'Persönlicher Kalender für',
+    29 => 'Öffentlicher Kalender',
+    30 => 'Termin löschen',
+    31 => 'Hinzufügen',
+    32 => 'Termin',
+    33 => 'Datum',
+    34 => 'Uhrzeit',
+    35 => 'Neuer Termin',
+    36 => 'Submit',
+    37 => 'Sorry, der persönliche Kalender ist auf dieser Site nicht verfügbar',
+    38 => 'Persönlicher Termin-Editor',
+    39 => 'Tag',
+    40 => 'Woche',
+    41 => 'Monat'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'Von',
+    3 => 'Reply-to',
+    4 => 'Betreff',
+    5 => 'Text',
+    6 => 'Senden',
+    7 => 'Alle User',
+    8 => 'Admin',
+    9 => 'Optionen',
+    10 => 'HTML',
+    11 => 'Wichtige Nachricht!',
+    12 => 'Abschicken',
+    13 => 'Reset',
+    14 => 'User Einstellungen ignorieren',
+    15 => 'Fehler beim Senden an: ',
+    16 => 'E-Mail erfolgreich gesendet an: ',
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Noch eine Nachricht schreiben</a>",
+    18 => 'An',
+    19 => 'HINWEIS: Wenn Sie eine Nachricht an alle eingetragenen Benutzer schicken wollen, müssen Sie die Gruppe Logged-in Users auswählen.',
+    20 => "<successcount> Nachricht(en) erfolgreich verschickt, bei <failcount> Nachricht(en) traten Fehler auf. Details können der folgenden Liste entnommen werden. Sie k&ouml:nnen jetzt <a href=\"{$_CONF['site_admin_url']}/mail.php\">noch eine Nachricht schicken</a> oder <a href=\"{$_CONF['site_admin_url']}/moderation.php\">zurück zum Admin-Menü gehen</a>.",
+    21 => 'Fehler',
+    22 => 'Erfolgreich',
+    23 => 'Keine Fehler',
+    24 => 'Keine erfolgreich',
+    25 => '-- Gruppe wählen --',
+    26 => 'Um eine E-Mail verschicken zu können, müssen alle Felder ausgefüllt und eine Gruppe von Benutzern aus dem Drop-Down-Menü ausgewählt werden.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plugin-Installation -- Disclaimer',
+    3 => 'Plugin-Installationsformular',
+    4 => 'Plugin-Datei',
+    5 => 'Plugin-Liste',
+    6 => 'Warnung: Plugin schon installiert!',
+    7 => 'Das Plugin, das Sie installieren wollen, ist schon vorhanden. Bitte löschen Sie es, bevor Sie noch einmal versuchen, es zu installieren',
+    8 => 'Plugin-Kompatibilitätstest fehlgeschlagen',
+    9 => 'Dieses Plugin benötigt eine neuere Version von Geeklog. Abhilfe schafft ein Update von <a href="http://www.geeklog.net/">Geeklog</a> oder evtl. eine andere Version dieses Plugins.',
+    10 => '<br><b>Es sind derzeit keine Plugins installiert.</b><br><br>',
+    11 => 'Um ein Plugin zu ändern oder zu löschen, auf das Ändern-Icon klicken. Es werden dann auch weitere Details, inkl. der Homepage des Plugins, angezeigt. Wenn in der Liste (s.u.) zwei Versionsnummern für ein Plugin angezeigt werden, bedeutet das, dass für das Plugin noch ein Update durchgeführt werden muss. Um ein Plugin zu installieren oder aktualisieren bitte auch immer dessen Dokumentation lesen.',
+    12 => '(kein Name angegeben)',
+    13 => 'Plugin-Editor',
+    14 => 'Neues Plugin',
+    15 => 'Admin Home',
+    16 => 'Name des Plugins',
+    17 => 'Plugin-Version',
+    18 => 'Geeklog-Version',
+    19 => 'Aktiv',
+    20 => 'Ja',
+    21 => 'Nein',
+    22 => 'Installieren',
+    23 => 'Speichern',
+    24 => 'Abbruch',
+    25 => 'Löschen',
+    26 => 'Name des Plugins',
+    27 => 'Plugin-Homepage',
+    28 => 'Plugin-Version',
+    29 => 'Geeklog-Version',
+    30 => 'Plugin löschen?',
+    31 => 'Sind Sie sicher, dass Sie dieses Plugin löschen wollen? Dies wird alle Daten und Datenstrukturen löschen, die dieses Plugin benutzt. Wenn Sie sicher sind, dann klicken Sie jetzt bitte noch einmal auf Löschen.',
+    32 => '<p><b>Fehler: Ungültiges Format für Autolink.</b></p>',
+    33 => 'Code-Version',
+    34 => 'Aktualisieren',
+    35 => 'Ändern',
+    36 => 'Code',
+    37 => 'Aktuell',
+    38 => 'Bitte aktualisieren!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Feed anlegen',
+    2 => 'Speichern',
+    3 => 'Löschen',
+    4 => 'Abbruch',
+    10 => 'Content Syndication',
+    11 => 'Neuer Feed',
+    12 => 'Admin Home',
+    13 => 'Um einen Feed zu ändern oder zu löschen, auf das Ändern-Icon (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neu anlegen (s.o.) klicken.',
+    14 => 'Titel',
+    15 => 'Art',
+    16 => 'Dateiname',
+    17 => 'Format',
+    18 => 'letztes Update',
+    19 => 'Aktiv',
+    20 => 'Ja',
+    21 => 'Nein',
+    22 => '<i>(keine Feeds)</i>',
+    23 => 'alle Artikel',
+    24 => 'Feed-Editor',
+    25 => 'Feed-Titel',
+    26 => 'Limit',
+    27 => 'Länge d. Einträge',
+    28 => '(0 = ohne Text, 1 = kompletter Text, anderer Wert = nur so viele Zeichen)',
+    29 => 'Beschreibung',
+    30 => 'Letztes Update',
+    31 => 'Zeichensatz',
+    32 => 'Sprache',
+    33 => 'Inhalt',
+    34 => 'Einträge',
+    35 => 'Stunden',
+    36 => 'Art des Feeds festlegen',
+    37 => 'Sie haben (mindestens) ein Plugin installiert, das Content Syndication unterstützt. Bitte wählen Sie zunächst aus, ob Sie einen Feed für Geeklog oder für ein Plugin anlegen wollen.',
+    38 => 'Fehler: Nicht alle Felder ausgefüllt',
+    39 => 'Bitte die Felder Feed-Titel, Beschreibung und Dateiname ausfüllen.',
+    40 => 'Bitte ein Limit (Anzahl Einträge oder Anzahl Stunden) eingeben.',
+    41 => 'Links',
+    42 => 'Termine',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Feed-Link für Kategorie',
+    46 => 'Limit Results',
+    47 => 'Suchen',
+    48 => 'Ändern',
+    49 => 'Feed-Logo',
+    50 => "Relativ zur URL dieser Site ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Ihr Passwort sollte in Kürze per E-Mail bei Ihnen eintreffen. Bitte beachten Sie die Hinweise in der E-Mail. Danke, dass Sie sich bei {$_CONF['site_name']} angemeldet haben.",
+    2 => "Danke für Ihren Beitrag zu {$_CONF['site_name']}. Ihr Artikel wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald auf dieser Website für alle Besucher zu lesen sein.",
+    3 => "Danke für Ihren Beitrag zu {$_CONF['site_name']}. Ihr Link wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald unter den <a href=\"{$_CONF['site_url']}/links.php\">Links</a> aufgelistet werden.",
+    4 => "Danke für Ihren Beitrag zu {$_CONF['site_name']}. Ihr Termin wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald in unserem <a href=\"{$_CONF['site_url']}/calendar.php\">Kalender</a> erscheinen.",
+    5 => 'Ihr User-Profil wurde gespeichert.',
+    6 => 'Ihre Einstellungen wurden gespeichert.',
+    7 => 'Ihre Kommentar-Einstellungen wurden gespeichert.',
+    8 => 'Abmeldung erfolgt. Sie sind jetzt nicht mehr angemeldet.',
+    9 => 'Ihr Artikel wurde gespeichert.',
+    10 => 'Der Artikel wurde gelöscht.',
+    11 => 'Ihr Block wurde gespeichert.',
+    12 => 'Der Block wurde gelöscht.',
+    13 => 'Ihre Kategorie wurde gespeichert.',
+    14 => 'Die Kategorie und alle zugehörigen Artikel wurden gelöscht.',
+    15 => 'Ihr Link wurde gespeichert.',
+    16 => 'Der Link wurde gelöscht.',
+    17 => 'Ihr Termin wurde gespeichert.',
+    18 => 'Der Termin wurde gelöscht.',
+    19 => 'Ihre Umfrage wurde gespeichert.',
+    20 => 'Die Umfrage wurde gelöscht.',
+    21 => 'Der User wurde gespeichert.',
+    22 => 'Der User wurde gelöscht.',
+    23 => 'Der Termin konnte nicht in Ihren persönlichen Kalender übernommen werden. Es wurde keine ID übergeben oder der Termin wurde nicht gefunden.',
+    24 => 'Der Termin wurde in Ihren Kalender eingetragen.',
+    25 => 'Sie müssen angemeldet sein, um auf Ihren persönlichen Kalender zugreifen zu können.',
+    26 => 'Der Termin wurde aus Ihrem persönlichen Kalender entfernt',
+    27 => 'Nachricht wurde verschickt.',
+    28 => 'Das Plugin wurde gespeichert.',
+    29 => 'Sorry, persönliche Kalender sind auf dieser Site nicht verfügbar.',
+    30 => 'Zugriff verweigert',
+    31 => 'Sie haben keinen Zugriff auf die Artikel-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    32 => 'Sie haben keinen Zugriff auf die Kategorie-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werdenprotokolliert.',
+    33 => 'Sie haben keinen Zugriff auf die Block-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    34 => 'Sie haben keinen Zugriff auf die Links-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    35 => 'Sie haben keinen Zugriff auf die Termin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    36 => 'Sie haben keinen Zugriff auf die Umfrage-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    37 => 'Sie haben keinen Zugriff auf die User-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    38 => 'Sie haben keinen Zugriff auf die Plugin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    39 => 'Sie haben keinen Zugriff auf die E-Mail-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    40 => 'System-Nachricht',
+    41 => 'Sorry, you do not have access to the word replacement page.  Please not that all attempts to access unauthorized features are logged',
+    42 => 'Your word has been successfully saved.',
+    43 => 'The word has been successfully deleted.',
+    44 => 'Das Plugin wurde erfolgreich installiert.',
+    45 => 'Das Plugin wurde gelöscht.',
+    46 => 'Sie haben keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Danke, dass Sie sich bei {$_CONF['site_name']} angemeldet haben. Ihr Aufnahmeantrag wird von unserem Team geprüft. Sobald er akzeptiert wird, werden Sie ein Passwort per E-Mail erhalten.",
+    49 => 'Ihre Gruppe wurde gespeichert.',
+    50 => 'Die Gruppe wurde gelöscht.',
+    51 => 'Dieser Username ist schon vergeben. Bitte wählen Sie einen anderen.',
+    52 => 'Die angegebene E-Mail-Adresse scheint nicht gültig zu sein.',
+    53 => 'Ihr neues Passwort wurde gespeichert. Bitte melden Sie sich nun mit dem neuen Passwort an.',
+    54 => 'Diese Anfrage für ein neues Passwort ist nicht mehr gültig. Bitte fordern Sie erneut ein neues Passwort an.',
+    55 => 'Sie sollten in Kürze eine E-Mail erhalten, in der beschrieben wird, wie Sie ein neues Passwort für Ihren Account eingeben können.',
+    56 => 'Die angegebene E-Mail-Adresse wird schon für einen anderen Account verwendet.',
+    57 => 'Ihr Account wurde gelöscht.',
+    58 => 'Der Feed wurde gespeichert.',
+    59 => 'Der Feed wurde gelöscht.',
+    60 => 'Das Plugin wurde erfolgreich aktualisiert.',
+    61 => 'Plugin %s: Unbekannter Text-Platzhalter',
+    62 => 'Der Trackback-Kommentar wurde gelöscht.',
+    63 => 'Beim Löschen des Trackback-Kommentars trat ein Fehler auf.',
+    64 => 'Ihr Trackback-Kommentar wurde erfolgreich verschickt.',
+    65 => 'Das Weblog-Verzeichnis wurde gespeichert.',
+    66 => 'Das Weblog-Verzeichnis wurde gelöscht.',
+    67 => 'Das neue Passwort stimmt nicht mit dem Bestätigungs-Passwort überein!',
+    68 => 'Geben Sie bitte Ihr korrektes aktuelles Passwort ein.',
+    69 => 'Ihr Account wurde gesperrt!',
+    70 => 'Ihr Account wurde noch nicht freigeschaltet.',
+    71 => 'Ihr Account wurde bestätigt, muss aber noch freigeschaltet werden.',
+    72 => 'Bei der Installation des Plugins trat ein Fehler auf. Siehe error.log für weitere Informationen.',
+    73 => 'Bei der Deinstallation des Plugins trat ein Fehler aus. Siehe error.log für weitere Informationen.',
+    74 => 'Der Pingback wurde erfolgreich verschickt.',
+    75 => 'Trackbacks müssen als POST-Request verschickt werden.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Zugriff',
+    'ownerroot' => 'Eigent./Root',
+    'group' => 'Gruppe',
+    'readonly' => 'Nur Lesen',
+    'accessrights' => 'Zugriffsrechte',
+    'owner' => 'Eigent.',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'Hinweis: Mitglieder meint alle eingeloggten Mitglieder und Gast steht für alle nicht eingeloggten Besucher.',
+    'securitygroups' => 'Security-Gruppen',
+    'editrootmsg' => "Obwohl Sie User-Administrator sind, können Sie die Informationen von Usern in der Root-Gruppe nicht ändern, ohne selbst Mitglied der Root-Gruppe zu sein. Sie können die Informationen aller anderen User bearbeiten, nur nicht die der Mitglieder der Root-Gruppe. Beachten Sie bitte, dass alle derartigen Versuche protokolliert werden. <a href=\"{$_CONF['site_admin_url']}/user.php\">Zurück zur User-Admin-Seite</a>.",
+    'securitygroupsmsg' => 'Mit den Checkboxen können Sie festlegen, zu welchen Gruppen dieser User gehört.',
+    'groupeditor' => 'Gruppen-Editor',
+    'description' => 'Beschreibung',
+    'name' => 'Name',
+    'rights' => 'Rechte',
+    'missingfields' => 'Fehlende Angaben',
+    'missingfieldsmsg' => ' Sie müssen den Namen und eine Beschreibung für die Gruppe angeben.',
+    'groupmanager' => 'Gruppen-Manager',
+    'newgroupmsg' => 'Um eine Gruppe zu ändern oder zu löschen, auf das Ändern-Icon klicken. Neu anlegen (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen können nicht gelöscht werden, da sie vom System benötigt werden.',
+    'groupname' => 'Gruppen-Name',
+    'coregroup' => 'Core-Gruppe',
+    'yes' => 'Ja',
+    'no' => 'Nein',
+    'corerightsdescr' => "Diese Gruppe ist eine Core-Gruppe auf {$_CONF['site_name']}. Die Rechte dieser Gruppe können daher nicht geändert werden. Das Folgende ist eine (nicht veränderbare) Liste der Rechte dieser Gruppe.",
+    'groupmsg' => 'Security-Gruppen auf dieser Site sind hierarchisch organisiert. Wenn Sie diese Gruppe zu einer der folgenden Gruppen hinzufügen, bekommt diese Gruppe die gleichen Rechte wie die unten ausgewählte(n). Wenn möglich, sollten Gruppenrechte durch Auswahl von Gruppen aus dieser Liste vergeben werden. Werden nur einzelne Rechte benötigt, können diese auch aus der Liste der Rechte weiter unten ausgewählt werden. Um diese Gruppe zu einer der folgenden hinzuzufügen, können Sie die gewünschte(n) Gruppe(n) einfach anklicken.',
+    'coregroupmsg' => "Diese Gruppe ist eine Core-Gruppe auf {$_CONF['site_name']}. Die Rechte dieser Gruppe können daher nicht geändert werden. Das Folgende ist eine (nicht veränderbare) Liste der Gruppen, zu der diese Gruppe gehört.",
+    'rightsdescr' => 'Die folgenden Rechte können an eine Gruppe entweder direkt (durch Auswählen) oder indirekt vergeben werden (wenn die Gruppe zu einer anderen Gruppe gehört, die diese Rechte hat). Die im Folgenden aufgeführten Rechte ohne Checkbox sind indirekte Rechte, die von einer anderen Gruppe geerbt wurden, zu der die aktuelle Gruppe gehört. Alle anderen Rechte können hier direkt vergeben werden.',
+    'lock' => 'Lock',
+    'members' => 'Mitglieder',
+    'anonymous' => 'Gast',
+    'permissions' => 'Rechte',
+    'permissionskey' => 'R = lesen, E = editieren, Editier-Rechte setzen Lese-Rechte voraus',
+    'edit' => 'Edit',
+    'none' => 'None',
+    'accessdenied' => 'Zugriff verweigert',
+    'storydenialmsg' => "Sie haben nicht die nötigen Rechte, um diesen Artikel zu lesen. Möglicherweise sind Sie kein registrierter User von {$_CONF['site_name']}. Bitte melden Sie sich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'eventdenialmsg' => "Sie haben nicht die nötigen Rechte, um diesen Termin abzurufen. Möglicherweise sind Sie kein registrierter User von {$_CONF['site_name']}. Bitte melden Sie sich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'nogroupsforcoregroup' => 'Diese Gruppe gehört zu keiner anderen Gruppe.',
+    'grouphasnorights' => 'Diese Gruppe hat keine Rechte für die Administration der Website',
+    'newgroup' => 'Neue Gruppe',
+    'adminhome' => 'Admin Home',
+    'save' => 'Speichern',
+    'cancel' => 'Abbruch',
+    'delete' => 'Löschen',
+    'canteditroot' => 'Sie haben versucht die Gruppe Root zu ändern, obwohl Sie selbst nicht Mitglied dieser Gruppe sind. Der Zugriff wurde daher verweigert. Wenden Sie sich bitte an den Systemadministrator wenn Sie der Meinung sind, dass das ein Fehler wäre.',
+    'listusers' => 'User',
+    'listthem' => 'anzeigen',
+    'usersingroup' => 'User in Gruppe "%s"',
+    'usergroupadmin' => 'Usergruppen-Verwaltung',
+    'add' => 'Hinzufügen',
+    'remove' => 'Löschen',
+    'availmembers' => 'Verfügbare Mitglieder',
+    'groupmembers' => 'Mitglieder der Gruppe',
+    'canteditgroup' => 'Um diese Gruppe bearbeiten zu können, müssen Sie selbst ein Mitglied der Gruppe sein. Wenden Sie sich bitte an den Systemadministrator wenn Sie der Meinung sind, dass das ein Fehler wäre.',
+    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu können, müssen Sie selbst ein Mitglied der Gruppe sein. Wenden Sie sich bitte an den Systemadministrator wenn Sie der Meinung sind, dass das ein Fehler wäre.',
+    'editgroupmsg' => 'To modify the group membership,  click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the "Right" side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Liste aller Mitglieder der Gruppe "<b>%s</b>"',
+    'search' => 'Suchen',
+    'submit' => 'Abschicken',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Gruppen-ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Gruppenname existiert schon',
+    'groupexistsmsg' => 'Es existiert bereits eine Gruppe mit diesem Namen. Gruppennamen müssen eindeutig sein.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Die 10 letzten Backups',
+    'do_backup' => 'Backup anlegen',
+    'backup_successful' => 'Backup der Datenbank war erfolgreich.',
+    'db_explanation' => 'Um ein neues Backup Ihres Geeklog-Systems anzulegen, bitte auf Neu anlegen (s.o.) klicken.',
+    'not_found' => "Falscher Pfad oder mysqldump ist nicht ausführbar.<br>Bitte überprüfe die Variable <strong>\$_DB_mysqldump_path</strong> in der config.php.<br>Aktueller Wert der Variablen: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup fehlgeschlagen: Datei ist 0 Bytes groß.',
+    'path_not_found' => "{$_CONF['backup_path']} existiert nicht oder ist kein Verzeichnis.",
+    'no_access' => "Fehler: Konnte nicht auf das Verzeichnis {$_CONF['backup_path']} zugreifen.",
+    'backup_file' => 'Backup-Datei',
+    'size' => 'Größe',
+    'bytes' => 'Bytes',
+    'total_number' => 'Gesamtanzahl Backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Kontakt',
+    3 => 'Beitrag',
+    4 => 'Links',
+    5 => 'Umfragen',
+    6 => 'Kalender',
+    7 => 'Statistik',
+    8 => 'Einstellungen',
+    9 => 'Suchen',
+    10 => 'Erweiterte Suche',
+    11 => 'Verzeichnis'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Fehler 404',
+    2 => 'Hmm, ich habe alles versucht, aber <b>%s</b> war nicht aufzufinden.',
+    3 => "<p>Sorry, diese Seite oder Datei existiert nicht. Sie können es auf der <a href=\"{$_CONF['site_url']}\">Startseite</a> oder mit der <a href=\"{$_CONF['site_url']}/search.php\">Suchfunktion</a> probieren, vielleicht werden Sie ja fündig ..."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Anmeldung erforderlich',
+    2 => 'Sorry, aber um auf diesen Bereich zugreifen zu können, müssen Sie als Benutzer registriert ein.',
+    3 => 'Anmelden',
+    4 => 'Neuer User'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'von',
+    'tracked_on' => 'Empfangen am',
+    'read_more' => '[mehr]',
+    'intro_text' => 'Auf anderen Sites wurde folgendes über \'%s\' geschrieben:',
+    'no_comments' => 'Keine Trackback-Kommentare für diesen Eintrag.',
+    'this_trackback_url' => 'Trackback-URL für diesen Eintrag:',
+    'num_comments' => '%d Trackback-Kommentare',
+    'send_trackback' => 'Pings senden',
+    'preview' => 'Vorschau',
+    'editor_title' => 'Trackback-Kommentar senden',
+    'trackback_url' => 'Trackback-URL',
+    'entry_url' => 'URL des Eintrags',
+    'entry_title' => 'Titel des Eintrags',
+    'blog_name' => 'Site-Name',
+    'excerpt' => 'Auszug',
+    'truncate_warning' => 'Hinweis: Die empfangende Site könnte den Auszug kürzen.',
+    'button_send' => 'Abschicken',
+    'button_preview' => 'Vorschau',
+    'send_error' => 'Fehler',
+    'send_error_details' => 'Fehler beim Senden des Trackback-Kommentars:',
+    'url_missing' => 'Keine URL für den Eintrag',
+    'url_required' => 'Es muss mindestens die URL für den Eintrag angegeben werden.',
+    'target_missing' => 'Keine Trackback-URL',
+    'target_required' => 'Bitte geben Sie die Trackback-URL ein.',
+    'error_socket' => 'Socket konnte nicht geöffnet werden.',
+    'error_response' => 'Antwort nicht verstanden.',
+    'error_unspecified' => 'Fehler nicht näher spezifiziert.',
+    'select_url' => 'Trackback-URL auswählen',
+    'not_found' => 'Trackback-URL nicht gefunden',
+    'autodetect_failed' => 'Geeklog konnte keine Trackback-URL für den Beitrag finden, zu dem der Kommentar gesendet werden sollte. Bitte geben Sie die Trackback-URL von Hand ein.',
+    'trackback_explain' => 'Aus den unten aufgeführten Links können Sie jetzt den Beitrag auswählen, zu dem Ihr Kommentar gesendet werden soll. Geeklog wird versuchen, die Trackback-URL selbst zu ermitteln. Andernfalls können Sie die Trackback-URL aber auch <a href="%s">von Hand eingeben</a>.',
+    'no_links_trackback' => 'Keine Links gefunden. Für diesen Beitrag können keine Trackback-Kommentare gesendet werden.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback-Ergebnisse',
+    'send_pings' => 'Pings senden',
+    'send_pings_for' => 'Pings für "%s" senden',
+    'no_links_pingback' => 'Keine Links gefunden. Es wurden keine Pingbacks für diesen Beitrag gesendet.',
+    'pingback_success' => 'Pingback gesendet.',
+    'no_pingback_url' => 'Keine Pingback-URL gefunden.',
+    'resend' => 'Nochmal senden',
+    'ping_all_explain' => 'Sie können jetzt einen <a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a> zu den verlinkten Sites senden, einen Ping an Weblog-Verzeichnissesenden, oder einen <a href="http://de.wikipedia.org/wiki/Trackback">Trackback</a>-Kommentar verschicken, wenn Sie über einen Beitrag in einem anderen Weblog geschrieben haben.',
+    'pingback_button' => 'Pingback senden',
+    'pingback_short' => 'Einen Pingback an alle in diesem Beitrag verlinkten Sites senden.',
+    'pingback_disabled' => '(Pingback deaktiviert)',
+    'ping_button' => 'Ping senden',
+    'ping_short' => 'Weblog-Verzeichnisse "anpingen".',
+    'ping_disabled' => '(Ping deaktiviert)',
+    'trackback_button' => 'Trackback senden',
+    'trackback_short' => 'Einen Trackback-Kommentar senden.',
+    'trackback_disabled' => '(Trackback deaktiviert)',
+    'may_take_a_while' => 'Hinweis: Das Senden von Pingbacks und Pings kann eine Weile dauern.',
+    'ping_results' => 'Ping-Ergebnisse',
+    'unknown_method' => 'Unbekannte Ping-Methode',
+    'ping_success' => 'Ping gesendet.',
+    'error_site_name' => 'Bitte geben Sie den Namen der Site ein.',
+    'error_site_url' => 'Bitte geben Sie die URL der Site ein.',
+    'error_ping_url' => 'Bitte geben Sie die Ping-URL der Site ein.',
+    'no_services' => 'Es sind keine Weblog-Verzeichnisse konfiguriert.',
+    'services_headline' => 'Weblog-Verzeichnisse',
+    'service_explain' => 'Um ein Weblog-Verzeichnis zu ändern oder zu löschen, auf das Ändern-Icon klicken. Um ein neues Weblog-Verzeichnis einzutragen, auf Neu anlegen (s.o.) klicken.',
+    'service' => 'Verzeichnis',
+    'ping_method' => 'Ping-Methode',
+    'service_website' => 'Website',
+    'service_ping_url' => 'Ping-URL',
+    'ping_standard' => 'Normaler Ping',
+    'ping_extended' => 'Erweiterter Ping',
+    'ping_unknown' => '(unbekannte Methode)',
+    'edit_service' => 'Weblog-Verzeichnis bearbeiten',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Hier können Sie Ihren Trackback-Kommentar für <a href="%s">%s</a> eingeben.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'Um einen Trackback-Kommentar für einen Artikel zu verschicken, benutzen Sie bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Trackback unabhängig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pingback_explain' => 'Geben Sie eine URL ein, an die der Pingback geschickt werden soll. Der Pingback wird auf die Startseite Ihrer Website verweisen.',
+    'pingback_url' => 'Pingback-URL',
+    'site_url' => 'Die URL dieser Website',
+    'pingback_note' => 'Um einen Pingback für einen Artikel zu verschicken, benutzen Sie bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Pingback unabhängig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pbtarget_missing' => 'Keine Pingback-URL',
+    'pbtarget_required' => 'Geben Sie bitte die Pingback-URL ein',
+    'pb_error_details' => 'Fehler beim Senden des Pingbacks:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Artikelverzeichnis',
+    'title_year' => 'Artikelverzeichnis für %d',
+    'title_month_year' => 'Artikelverzeichnis für %s %d',
+    'nav_top' => 'Zurück zum Artikelverzeichnis',
+    'no_articles' => 'Keine Artikel.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n neue %i in den letzten %t %s',
+    'new_last' => 'letzte %t %s',
+    'minutes' => 'Minuten',
+    'hours' => 'Stunden',
+    'days' => 'Tage',
+    'weeks' => 'Wochen',
+    'months' => 'Monate',
+    'minute' => 'Minute',
+    'hour' => 'Stunde',
+    'day' => 'Tag',
+    'week' => 'Woche',
+    'month' => 'Monat'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Suchen',
+    'limit_results' => 'Anzahl Ergebnisse',
+    'submit'        => 'Abschicken',
+    'edit'          => 'Ändern',
+    'admin_home'    => 'Admin Home',
+    'create_new'    => 'Neu anlegen',
+    'enabled'       => 'Aktiv',
+    'title'         => 'Titel',
+    'type'          => 'Typ',
+    'topic'         => 'Kategorie',
+    'help_url'      => 'URL f. Hilfe-Datei',
+    'save'          => 'Speichern',
+    'cancel'        => 'Abbruch',
+    'delete'        => 'Löschen',
+    'copy'          => 'Kopieren',
+    'no_results'    => '- Keine Einträge gefunden -',
+    'data_error'    => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Kommentare erlaubt',
+    -1  => 'Keine Kommentare'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Flach',
+    'nested'    => 'Verschachtelt',
+    'threaded'  => 'Nach Thema',
+    'nocomment' => 'Keine Kommentare'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(gar nicht)',
+    3600    => '1 Stunde',
+    7200    => '2 Stunden',
+    10800   => '3 Stunden',
+    28800   => '8 Stunden',
+    86400   => '1 Tag',
+    604800  => '1 Woche',
+    2678400 => '1 Monat'
+);
+
+$LANG_dateformats = array(
+    0   => 'Defaulteinstellung'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Normaler Artikel',
+    1 => 'Hauptartikel'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Nur unter der Kategorie',
+    1 => 'Auf der Startseite'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'als Text',
+    'html'      => 'in HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Älteste zuerst',
+    'DESC' => 'Neueste zuerst'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Trackbacks erlaubt',
+    -1  => 'Keine Trackbacks'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/german.php 1.4.0sr5-1/cpanel-glprivate/language/german.php
--- 1.3.11sr1/cpanel-glprivate/language/german.php	2004-12-31 10:03:34.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/german.php	2006-08-08 02:39:06.000000000 -0500
@@ -7,7 +7,7 @@
 # (informal German). See german_formal.php for a language file addressing the
 # user with the formal "Sie".
 #
-# Author: Dirk Haun <dirk@haun-online.de>
+# Author: Dirk Haun <dirk AT haun-online DOT de>
 #
 # Based on the original english.php, started by Jason Whittenburg.
 #
@@ -156,7 +156,17 @@
     110 => 'Site-Admin auf diesen Beitrag hinweisen',
     111 => 'Als PDF anzeigen',
     112 => 'Registrierte User',
-    113 => 'Dokumentation'
+    113 => 'Dokumentation',
+    114 => 'TRACKBACKS',
+    115 => 'Keine neuen Trackback-Kommentare',
+    116 => 'Trackback',
+    117 => 'Verzeichnis',
+    118 => 'Fortsetzung auf der nchsten Seite:',
+    119 => "<a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">Passwort vergessen?</a>",
+    120 => 'Permalink',
+    121 => 'Kommentare (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Alle HTML-Tags sind erlaubt'
 );
 
 ###############################################################################
@@ -164,7 +174,7 @@
 
 $LANG02 = array(
     1 => 'Terminkalender',
-    2 => 'Sorry, es gibt keine Termine anzuzeigen.',
+    2 => 'Es gibt keine Termine anzuzeigen.',
     3 => 'Wann',
     4 => 'Wo',
     5 => 'Beschreibung',
@@ -220,7 +230,7 @@
     1 => 'Userprofil fr',
     2 => 'Username',
     3 => 'Name',
-    4 => 'Passwort',
+    4 => 'Neues Passwort',
     5 => 'E-Mail',
     6 => 'Homepage',
     7 => 'Biographie',
@@ -282,7 +292,7 @@
     63 => "Dein Passwort sollte in Krze per E-Mail eintreffen. Bitte beachte die Hinweise in der E-Mail und Danke fr Dein Interesse an {$_CONF['site_name']}",
     64 => 'Kommentar-Einstellungen fr',
     65 => 'Bitte noch einmal versuchen, Dich anzumelden',
-    66 => "Hast Du Dich vertippt? Bitte versuch noch einmal, Dich hier anzumelden. Oder mchtest Du Dich <a href=\"{$_CONF['site_url']}/users.php?mode=new\">als neuer User registrieren</a>?",
+    66 => "Hast Du Dich vertippt? Bitte versuch noch einmal, Dich hier anzumelden.",
     67 => 'Mitglied seit',
     68 => 'Angemeldet fr',
     69 => 'Wie lange soll das System Dich nach dem Anmelden erkennen?',
@@ -323,7 +333,23 @@
     104 => 'Online-Status zeigen',
     105 => 'Unter "Wer ist online?"',
     106 => 'Wohnort',
-    107 => 'Erscheint im ffentlichen Profil'
+    107 => 'Erscheint im ffentlichen Profil',
+    108 => 'Neues Passwort besttigen',
+    109 => 'Gib hier das neue Passwort noch einmal ein',
+    110 => 'Aktuelles Passwort',
+    111 => 'Gib Dein aktuelles Passwort ein',
+    112 => 'Du hast die erlaubte Anzahl von Anmeldeversuchen berschritten. Bitte versuche es spter noch einmal.',
+    113 => 'Anmeldeversuch fehlgeschlagen',
+    114 => 'Account gesperrt',
+    115 => 'Dein Account wurde gesperrt. Du kannst Dich nicht einloggen. Bitte wende Dich an einen Administrator.',
+    116 => 'Account noch nicht freigegeben',
+    117 => 'Dein Account muss erst noch von einem Administrator freigegeben werden. Du kannst Dich erst einloggen, wenn Dein Account freigegeben wurde.',
+    118 => "Dein Account fr {$_CONF['site_name']} wurde jetzt freigeschaltet. Du kannst Dich jetzt auf der Website unter der unten angegebenen URL anmelden. Benutze dazu Deinen Usernamen (<username>) und das Passwort, das Du bereits per E-Mail erhalten hast.",
+    119 => 'Wenn Du Dein Passwort vergessen hast, kannst Du unter der folgenden URL ein neues anfordern:',
+    120 => 'Account aktiviert',
+    121 => 'Dienst',
+    122 => 'Sorry, derzeit knnen sich keine neuen User anmelden.',
+    123 => "Bist Du ein <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a>?"
 );
 
 ###############################################################################
@@ -331,7 +357,7 @@
 
 $LANG05 = array(
     1 => 'Keine Artikel',
-    2 => 'Es gibt keine Artikel, die angezeigt werden knnten. Entweder gibt es fr diese Kategorie keine Artikel oder Deine Einstellungen sind zu restriktiv',
+    2 => 'Es gibt keine Artikel, die angezeigt werden knnten. Entweder gibt es fr diese Kategorie keine Artikel oder Deine Einstellungen sind zu restriktiv.',
     3 => ' fr die Kategorie %s.',
     4 => 'Hauptartikel',
     5 => 'weiter',
@@ -341,27 +367,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'Es gibt keine Links anzuzeigen.',
-    3 => 'Link hinzufgen'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Stimme gespeichert',
-    2 => 'Deine Stimme wurde fr die Umfrage gespeichert: ',
-    3 => 'Stimme',
-    4 => 'Umfragen im System',
-    5 => 'Stimme(n)',
-    6 => 'ltere Umfragen'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -387,7 +392,7 @@
     20 => 'Von (Name)',
     21 => 'Von (E-Mail)',
     22 => 'Alle Felder mssen ausgefllt werden.',
-    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie wrden sich vielleicht fr diesen Artikel auf <{$_CONF['site_url']}> interessieren. Dies ist kein SPAM und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) wurden nicht gespeichert.",
+    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie wrden sich vielleicht fr diesen Artikel auf <{$_CONF['site_url']}> interessieren. Dies ist kein Spam und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) wurden nicht gespeichert.",
     24 => 'Schreiben Sie einen Kommentar zu diesem Artikel:',
     25 => 'Du musst Dich anmelden, um diese Funktion benutzen zu knnen. Dies ist leider ntig, um den Missbrauch des Systems zu verhindern',
     26 => 'Mit diesem Formular kannst Du eine E-Mail an diesen User schicken. Alle Felder mssen ausgefllt werden.',
@@ -442,8 +447,8 @@
     34 => 'Ort',
     35 => 'Ganztgig',
     36 => 'Keine Termine fr Deine Suche gefunden',
-    37 => 'Ergebnisse: Termine',
-    38 => 'Ergebnisse: Links',
+    37 => 'Gefundene Termine',
+    38 => 'Gefundene Links',
     39 => 'Links',
     40 => 'Termine',
     41 => 'Dein Suchbegriff sollte mindestens 3 Zeichen lang sein.',
@@ -451,18 +456,22 @@
     43 => 'genaue Wortgruppe',
     44 => 'alle Wrter',
     45 => 'irgendeines der Wrter',
-    46 => 'Next',
-    47 => 'Previous',
-    48 => 'Author',
-    49 => 'Date',
-    50 => 'Hits',
+    46 => 'weiter',
+    47 => 'zurck',
+    48 => 'Autor',
+    49 => 'Datum',
+    50 => 'Treffer',
     51 => 'Link',
     52 => 'Wohnort',
     53 => 'Gefundene Artikel',
     54 => 'Gefundene Kommentare',
-    55 => 'nach der Wortgruppe',
+    55 => 'der Wortgruppe',
     56 => '<em>und</em>',
-    57 => '<em>oder</em>'
+    57 => '<em>oder</em>',
+    58 => 'Weitere Ergebnisse &gt;&gt;',
+    59 => 'Ergebnisse',
+    60 => 'pro Seite',
+    61 => 'Suche korrigieren'
 );
 
 ###############################################################################
@@ -476,7 +485,7 @@
     5 => 'Anzahl Links (Klicks)',
     6 => 'Anzahl Termine',
     7 => 'Top Ten der Artikel',
-    8 => 'Artikel-berschrift',
+    8 => 'Artikelberschrift',
     9 => 'Angezeigt',
     10 => 'Es gibt keine Artikel oder sie wurden von niemandem gelesen.',
     11 => 'Top Ten der meistkommentierten Artikel',
@@ -492,14 +501,21 @@
     21 => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.',
     22 => 'Top Ten der verschickten Artikel',
     23 => 'E-Mails',
-    24 => 'Es wurden keine Artikel per E-Mail verschickt.'
+    24 => 'Es wurden keine Artikel per E-Mail verschickt.',
+    25 => 'Top Ten der Artikel mit Trackback-Kommentaren',
+    26 => 'Keine Trackback-Kommentare gefunden.',
+    27 => 'Anzahl aktiver User',
+    28 => 'Top Ten der Termine',
+    29 => 'Termin',
+    30 => 'Angezeigt',
+    31 => 'Es gibt keine Termine oder sie wurden von niemandem gelesen.'
 );
 
 ###############################################################################
 # article.php
 
 $LANG11 = array(
-    1 => 'Zum Thema',
+    1 => 'Weiterfhrende Links',
     2 => 'An einen Freund schicken',
     3 => 'Druckfhige Version',
     4 => 'Optionen',
@@ -610,7 +626,7 @@
     22 => 'Typ',
     23 => 'Reihenfolge',
     24 => 'Kategorie',
-    25 => 'Um einen Block zu ndern oder lschen, auf den Block (s.u.) klicken. Um einen neuen Block anzulegen, auf Neuer Block (s.o.) klicken.',
+    25 => 'Um einen Block zu ndern oder zu lschen, auf das ndern-Icon (s.u.) klicken. Um einen neuen Block anzulegen, auf Neu anlegen (s.o.) klicken.',
     26 => 'Layout-Block',
     27 => 'PHP-Block',
     28 => 'PHP-Block: Optionen',
@@ -627,11 +643,11 @@
     39 => 'Seite',
     40 => 'links',
     41 => 'rechts',
-    42 => 'Fr Geeklog-Default-Blcke muss ein Block-Title und die Block-Reihenfolge angegeben werden.',
+    42 => 'Fr Geeklog-Default-Blcke muss ein Block-Titel und die Block-Reihenfolge angegeben werden.',
     43 => 'Nur auf der Startseite',
     44 => 'Zugriff verweigert',
     45 => "Du hast keine Zugriffsrechte fr diesen Block. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/block.php\">Zurck zum Administrator-Men</a>.",
-    46 => 'Neuer Block',
+    46 => 'Bewegen',
     47 => 'Admin Home',
     48 => 'Block-Name',
     49 => ' (keine Leerzeichen, muss eindeutig sein)',
@@ -645,7 +661,12 @@
     57 => 'Block nach unten',
     58 => 'Block nach oben',
     59 => 'Block auf die rechte Seite',
-    60 => 'Block auf die linke Seite'
+    60 => 'Block auf die linke Seite',
+    61 => 'Ohne Titel',
+    62 => 'Artikellimit',
+    63 => 'Block-Titel nicht erlaubt',
+    64 => 'Der Titel kann nicht leer sein und darf kein HTML enthalten!',
+    65 => 'Reihenfolge'
 );
 
 ###############################################################################
@@ -663,7 +684,7 @@
     9 => '(mit http://)',
     10 => 'Es mssen mindestens Datum und Uhrzeit, Titel und Beschreibung angegeben werden!',
     11 => 'Termin-Manager',
-    12 => 'Auf einen Termin klicken, um ihn zu ndern oder lschen. Mit Neuer Termin (s.o.) wird ein neuer Termin angelegt. [C] erzeugt eine Kopie eines vorhandenen Termins.',
+    12 => 'Auf das ndern-Icon klicken, um einen Termin zu ndern oder zu lschen. Mit Neu anlegen (s.o.) wird ein neuer Termin angelegt. Das Kopie-Icon erzeugt eine Kopie eines vorhandenen Termins.',
     13 => 'Titel',
     14 => 'Startdatum',
     15 => 'Enddatum',
@@ -680,35 +701,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link-Editor',
-    2 => '',
-    3 => 'Titel',
-    4 => 'URL',
-    5 => 'Kategorie',
-    6 => '(mit http://)',
-    7 => 'Andere',
-    8 => 'Klicks',
-    9 => 'Beschreibung',
-    10 => 'Du musst einen Titel, eine URL und eine Beschreibung fr den Link angeben.',
-    11 => 'Link-Manager',
-    12 => 'Auf den Link-Titel klicken, um einen Link zu ndern oder zu lschen. Mit Neuer Link (s.o.) kann ein neuer Link angelegt werden.',
-    13 => 'Titel',
-    14 => 'Kategorie',
-    15 => 'URL',
-    16 => 'Zugriff verweigert',
-    17 => "Du hast keine Zugriffsrechte fr diesen Link. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/link.php\">Zurck zum Administrator-Men</a>.",
-    18 => 'Neuer Link',
-    19 => 'Admin Home',
-    20 => 'Andere bitte eingeben',
-    21 => 'Speichern',
-    22 => 'Abbruch',
-    23 => 'Lschen'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -731,16 +723,16 @@
     17 => 'Haupttext',
     18 => 'Gelesen',
     19 => 'Kommentare',
-    20 => '',
-    21 => '',
-    22 => 'Artikel-Liste',
-    23 => 'Auf die Nummer klicken, um einen Artikel zu ndern oder zu lschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neuer Artikel (s.o.) klicken, um einen neuen Artikel zu schreiben.',
+    20 => 'Ping',
+    21 => 'Senden',
+    22 => 'Artikelliste',
+    23 => 'Auf das ndern-Icon klicken, um einen Artikel zu ndern oder zu lschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neuen Artikel zu schreiben.',
     24 => 'Diese ID wird bereits fr einen anderen Artikel benutzt. Bitte whle eine andere ID.',
-    25 => '',
-    26 => 'Artikel-Vorschau',
-    27 => '',
-    28 => '',
-    29 => '',
+    25 => 'Fehler beim Speichern des Artikels',
+    26 => 'Artikelvorschau',
+    27 => 'Wenn Du [unscaledX] statt [imageX] verwendest, wird das Bild in Originalgre eingebunden.',
+    28 => '<p><strong>VORSCHAU:</strong> Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthlt. Bei Artikeln mit Bildern empfiehlt es sich, den Artikel als Entwurf zu markieren, zu speichern und dann von der Liste der Artikel aus zu betrachten.</p>',
+    29 => 'Trackbacks',
     30 => 'Fehler beim Datei-Upload',
     31 => 'Bitte mindestens die Felder Titel und Einleitung ausfllen',
     32 => 'Hauptartikel',
@@ -762,50 +754,41 @@
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => '<p>Die oben ausgewhlten Bilder knnen im Artikel verwendet werden, indem dafr spezielle Platzhalter in den Text eingefgt werden. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss.<br>HINWEIS: Es mssen alle ausgewhlten Bilder verwendet werden. Andernfalls kann der Artikel nicht gespeichert werden.</p><p><strong>VORSCHAU:</strong> Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthlt. Bei Artikeln mit Bildern empfiehlt es sich, den Artikel als Entwurf zu markieren, zu speichern und dann von der Liste der Artikel aus zu betrachten.</p>',
+    51 => 'Die oben ausgewhlten Bilder knnen im Artikel verwendet werden, indem dafr spezielle Platzhalter in den Text eingefgt werden. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss.<br>HINWEIS: Es mssen alle ausgewhlten Bilder verwendet werden. Andernfalls kann der Artikel nicht gespeichert werden.<br>',
     52 => 'Lschen',
     53 => 'wurde nicht verwendet. Du musst dieses Bild im Text des Artikels verwenden oder es lschen bevor Du Deine nderungen sichern kannst.',
     54 => 'Nicht verwendete Bilder',
     55 => 'Folgende Fehler traten beim Versuch, den Artikel zu speichern, auf. Bitte diese Fehler beheben und den Artikel noch einmal speichern.',
     56 => 'mit Icon',
     57 => 'Bild in Originalgre',
-    58 => 'Artikel-Verwaltung',
+    58 => 'Artikelverwaltung',
     59 => 'Option',
-    60 => 'Aktiviert',
+    60 => 'Aktiv',
     61 => 'automatisch archivieren',
-    62 => 'automatisch lschen'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modus',
-    2 => 'Bitte eine Frage und mindestens eine Antwort eingeben.',
-    3 => 'angelegt',
-    4 => 'Umfrage %s wurde gespeichert',
-    5 => 'Umfrage editieren',
-    6 => 'Umfrage-ID',
-    7 => '(keine Leerzeichen!)',
-    8 => 'Erscheint auf der Startseite',
-    9 => 'Frage',
-    10 => 'Antworten / Stimmen',
-    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
-    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
-    13 => 'Umfrage anlegen',
-    14 => 'Speichern',
-    15 => 'Abbruch',
-    16 => 'Lschen',
-    17 => 'Bitte eine Umfrage-ID eingeben.',
-    18 => 'Liste der Umfragen',
-    19 => 'Um eine Umfrage zu ndern oder lschen, auf die Umfrage klicken. Mit Neue Umfrage (s.o.) wird eine neue Umfrage angelegt.',
-    20 => 'Stimmen',
-    21 => 'Zugriff verweigert',
-    22 => "Du hast keine Zugriffsrechte fr diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/poll.php\">Zurck zum Administrator-Men</a>.",
-    23 => 'Neue Umfrage',
-    24 => 'Admin Home',
-    25 => 'Ja',
-    26 => 'Nein'
+    62 => 'automatisch lschen',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -820,7 +803,7 @@
     6 => 'Lschen einer Kategorie lscht auch alle dazu gehrenden Artikel und Blcke',
     7 => 'Bitte die Felder Kategorie-ID und Kategorie-Name ausfllen',
     8 => 'Kategorie-Manager',
-    9 => 'Auf eine Kategorie klicken, um sie zu ndern oder lschen. Auf Neue Kategorie (s.o.) klicken, um eine neue Kategorie anzulegen. Die ntige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben. Das Sternchen(*) markiert die Default-Kategorie.',
+    9 => 'Auf eine Kategorie klicken, um sie zu ndern oder zu lschen. Auf Neu anlegen (s.o.) klicken, um eine neue Kategorie anzulegen. Die ntige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben. Das Sternchen(*) markiert die Default-Kategorie.',
     10 => 'Sortierreihenfolge',
     11 => 'Artikel/Seite',
     12 => 'Zugriff verweigert',
@@ -837,7 +820,10 @@
     23 => 'Zur Default-Kategorie fr neue Artikel machen',
     24 => '(*)',
     25 => 'Archiv-Kategorie',
-    26 => 'Zur Archiv-Kategorie machen (nur fr eine Kategorie mglich)'
+    26 => 'Zur Archiv-Kategorie machen (nur fr eine Kategorie mglich)',
+    27 => 'oder ein Icon hochladen',
+    28 => 'maximal',
+    29 => 'Fehler beim Datei-Upload'
 );
 
 ###############################################################################
@@ -855,12 +841,12 @@
     9 => '(keine Leerzeichen!)',
     10 => 'Bitte die Felder Username und E-Mail-Adresse ausfllen.',
     11 => 'User-Manager',
-    12 => 'Auf den Usernamen klicken, um einen User zu ndern oder zu lschen. Ein neuer User kann mit dem Button Neuer User angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
+    12 => 'Auf das ndern-Icon klicken, um einen User zu ndern oder zu lschen. Ein neuer User kann mit Neu anlegen (s.o.) angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
     13 => 'SecLev',
     14 => 'Reg. Datum',
     15 => 'Neuer User',
     16 => 'Admin Home',
-    17 => 'pw ndern',
+    17 => '',
     18 => 'Abbruch',
     19 => 'Lschen',
     20 => 'Speichern',
@@ -879,7 +865,18 @@
     33 => 'Abschicken',
     34 => 'Fehler: Keine Datei zum Upload angegeben.',
     35 => 'Letzter Login',
-    36 => '(noch nie)'
+    36 => '(noch nie)',
+    37 => 'UID',
+    38 => 'Gruppenliste',
+    39 => 'Passwort (nochmal)',
+    40 => 'Registriert',
+    41 => 'Letzter Login',
+    42 => 'Gesperrt',
+    43 => 'Erwartet Aktivierung',
+    44 => 'Erwartet Freigabe',
+    45 => 'Aktiv',
+    46 => 'User-Status',
+    47 => 'ndern'
 );
 
 ###############################################################################
@@ -975,7 +972,7 @@
     14 => 'User-Einstellungen ignorieren',
     15 => 'Fehler beim Senden an: ',
     16 => 'E-Mail erfolgreich gesendet an: ',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Noch eine Nachricht schreiben</a>",
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Noch eine Nachricht schreiben</a>",
     18 => 'An',
     19 => 'HINWEIS: Wenn Du eine Nachricht an alle eingetragenen Benutzer schicken willst, musst Du die Gruppe Logged-in Users auswhlen.',
     20 => "<successcount> Nachricht(en) erfolgreich verschickt, bei <failcount> Nachricht(en) traten Fehler auf. Details knnen der folgenden Liste entnommen werden. Du kannst jetzt <a href=\"{$_CONF['site_admin_url']}/mail.php\">noch eine Nachricht schicken</a> oder <a href=\"{$_CONF['site_admin_url']}/moderation.php\">zurck zum Admin-Men gehen</a>.",
@@ -1001,7 +998,7 @@
     8 => 'Plugin-Kompatibilittstest fehlgeschlagen',
     9 => 'Dieses Plugin bentigt eine neuere Version von Geeklog. Abhilfe schafft ein Update von <a href="http://www.geeklog.net/">Geeklog</a> oder evtl. eine andere Version dieses Plugins.',
     10 => '<br><b>Es sind derzeit keine Plugins installiert.</b><br><br>',
-    11 => 'Um ein Plugin zu ndern oder lschen, auf die Nummer des Plugins klicken. Wenn Du auf den Namen des Plugins klickst, wird die Homepage des Plugins aufgerufen. Um ein Plugin zu installieren oder aktualisieren bitte dessen Dokumentation lesen.',
+    11 => 'Um ein Plugin zu ndern oder zu lschen, auf das ndern-Icon klicken. Es werden dann auch weitere Details, inkl. der Homepage des Plugins, angezeigt. Wenn in der Liste (s.u.) zwei Versionsnummern fr ein Plugin angezeigt werden,  bedeutet das, dass fr das Plugin noch ein Update durchgefhrt werden muss.  Um ein Plugin zu installieren oder aktualisieren bitte auch immer dessen Dokumentation lesen.',
     12 => '(kein Name angegeben)',
     13 => 'Plugin-Editor',
     14 => 'Neues Plugin',
@@ -1024,7 +1021,11 @@
     31 => 'Bist Du sicher, dass Du dieses Plugin lschen willst? Dies wird alle Daten und Datenstrukturen lschen, die dieses Plugin benutzt. Wenn Du sicher bist, dann klicke jetzt bitte noch einmal auf Lschen.',
     32 => '<p><b>Fehler: Ungltiges Format fr Autolink.</b></p>',
     33 => 'Code-Version',
-    34 => 'Aktualisieren'
+    34 => 'Aktualisieren',
+    35 => 'ndern',
+    36 => 'Code',
+    37 => 'Aktuell',
+    38 => 'Bitte aktualisieren!'
 );
 
 ###############################################################################
@@ -1038,7 +1039,7 @@
     10 => 'Content Syndication',
     11 => 'Neuer Feed',
     12 => 'Admin Home',
-    13 => 'Um einen Feed zu ndern oder zu lschen, auf den Titel des Feeds (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neuer Feed (s.o.) klicken.',
+    13 => 'Um einen Feed zu ndern oder zu lschen, auf das ndern-Icon (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neu anlegen (s.o.) klicken.',
     14 => 'Titel',
     15 => 'Art',
     16 => 'Dateiname',
@@ -1067,7 +1068,15 @@
     39 => 'Bitte die Felder Feed-Titel, Beschreibung und Dateiname ausfllen.',
     40 => 'Bitte ein Limit (Anzahl Eintrge oder Anzahl Stunden) eingeben.',
     41 => 'Links',
-    42 => 'Termine'
+    42 => 'Termine',
+    43 => 'Alle',
+    44 => 'Keine',
+    45 => 'Feed-Link fr Kategorie',
+    46 => 'Limit Results',
+    47 => 'Suchen',
+    48 => 'ndern',
+    49 => 'Feed-Logo',
+    50 => "Relativ zur URL dieser Site ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1104,22 +1113,22 @@
     28 => 'Das Plugin wurde gespeichert.',
     29 => 'Sorry, persnliche Kalender sind auf dieser Site nicht verfgbar.',
     30 => 'Zugriff verweigert',
-    31 => 'Du hast keinen Zugriff auf diese Artikel-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    32 => 'Du hast keinen Zugriff auf diese Kategorie-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    33 => 'Du hast keinen Zugriff auf diese Block-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    34 => 'Du hast keinen Zugriff auf diese Links-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    35 => 'Du hast keinen Zugriff auf diese Termin-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    36 => 'Du hast keinen Zugriff auf diese Umfrage-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    37 => 'Du hast keinen Zugriff auf diese User-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    38 => 'Du hast keinen Zugriff auf diese Plugin-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    39 => 'Du hast keinen Zugriff auf diese E-Mail-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    31 => 'Du hast keinen Zugriff auf die Artikel-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    32 => 'Du hast keinen Zugriff auf die Kategorie-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    33 => 'Du hast keinen Zugriff auf die Block-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    34 => 'Du hast keinen Zugriff auf die Links-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    35 => 'Du hast keinen Zugriff auf die Termin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    36 => 'Du hast keinen Zugriff auf die Umfrage-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    37 => 'Du hast keinen Zugriff auf die User-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    38 => 'Du hast keinen Zugriff auf die Plugin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    39 => 'Du hast keinen Zugriff auf die E-Mail-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
     40 => 'System-Nachricht',
     41 => 'Sorry, you do not have access to the word replacement page.  Please not that all attempts to access unauthorized features are logged',
     42 => 'Your word has been successfully saved.',
     43 => 'The word has been successfully deleted.',
     44 => 'Das Plugin wurde erfolgreich installiert.',
     45 => 'Das Plugin wurde gelscht.',
-    46 => 'Du hast keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    46 => 'Du hast keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
     47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
     48 => "Danke, dass Du dich bei {$_CONF['site_name']} angemeldet hast. Dein Aufnahmeantrag wird von unserem Team geprft. Sobald er akzeptiert wird, wirst Du Dein Passwort per E-Mail erhalten.",
     49 => 'Deine Gruppe wurde gespeichert.',
@@ -1134,7 +1143,21 @@
     58 => 'Der Feed wurde gespeichert.',
     59 => 'Der Feed wurde gelscht.',
     60 => 'Das Plugin wurde erfolgreich aktualisiert.',
-    61 => 'Plugin %s: Unbekannter Text-Platzhalter'
+    61 => 'Plugin %s: Unbekannter Text-Platzhalter',
+    62 => 'Der Trackback-Kommentar wurde gelscht.',
+    63 => 'Beim Lschen des Trackback-Kommentars trat ein Fehler auf.',
+    64 => 'Dein Trackback-Kommentar wurde erfolgreich verschickt.',
+    65 => 'Das Weblog-Verzeichnis wurde gespeichert.',
+    66 => 'Das Weblog-Verzeichnis wurde gelscht.',
+    67 => 'Das neue Passwort stimmt nicht mit dem Besttigungs-Passwort berein!',
+    68 => 'Gib bitte Dein korrektes aktuelles Passwort ein.',
+    69 => 'Dein Account wurde gesperrt!',
+    70 => 'Dein Account wurde noch nicht freigeschaltet.',
+    71 => 'Dein Account wurde besttigt, muss aber noch freigeschaltet werden.',
+    72 => 'Bei der Installation des Plugins trat ein Fehler auf. Siehe error.log fr weitere Informationen.',
+    73 => 'Bei der Deinstallation des Plugins trat ein Fehler aus. Siehe error.log fr weitere Informationen.',
+    74 => 'Der Pingback wurde erfolgreich verschickt.',
+    75 => 'Trackbacks mssen als POST-Request verschickt werden.'
 );
 
 ###############################################################################
@@ -1158,7 +1181,7 @@
     'missingfields' => 'Fehlende Angaben',
     'missingfieldsmsg' => 'Du musst den Namen und eine Beschreibung fr die Gruppe angeben.',
     'groupmanager' => 'Gruppen-Manager',
-    'newgroupmsg' => 'Um eine Gruppe zu ndern oder lschen, einfach auf den Namen der Gruppe klicken. Neue Gruppe (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen knnen nicht gelscht werden, da sie vom System bentigt werden.',
+    'newgroupmsg' => 'Um eine Gruppe zu ndern oder zu lschen, auf das ndern-Icon klicken. Neu anlegen (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen knnen nicht gelscht werden, da sie vom System bentigt werden.',
     'groupname' => 'Gruppen-Name',
     'coregroup' => 'Core-Gruppe',
     'yes' => 'Ja',
@@ -1175,8 +1198,8 @@
     'edit' => 'Edit',
     'none' => 'None',
     'accessdenied' => 'Zugriff verweigert',
-    'storydenialmsg' => "Du hast nicht die ntigen Rechte, um diesen Artikel zu lesen. Mglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
-    'eventdenialmsg' => "Du hast nicht die ntigen Rechte, um diesen Termin abzurufen. Mglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'storydenialmsg' => "Du hast nicht die ntigen Rechte, um diesen Artikel zu lesen. Mglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'eventdenialmsg' => "Du hast nicht die ntigen Rechte, um diesen Termin abzurufen. Mglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
     'nogroupsforcoregroup' => 'Diese Gruppe gehrt zu keiner anderen Gruppe.',
     'grouphasnorights' => 'Diese Gruppe hat keine Rechte fr die Administration der Website',
     'newgroup' => 'Neue Gruppe',
@@ -1194,7 +1217,16 @@
     'availmembers' => 'Verfgbare Mitglieder',
     'groupmembers' => 'Mitglieder der Gruppe',
     'canteditgroup' => 'Um diese Gruppe bearbeiten zu knnen, musst Du selbst ein Mitglied der Gruppe sein. Wende Dich bitte an den Systemadministrator wenn Du der Meinung bist, dass das ein Fehler wre.',
-    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu knnen, musst Du selbst ein Mitglied der Gruppe sein. Wende Dich bitte an den Systemadministrator wenn Du der Meinung bist, dass das ein Fehler wre.'
+    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu knnen, musst Du selbst ein Mitglied der Gruppe sein. Wende Dich bitte an den Systemadministrator wenn Du der Meinung bist, dass das ein Fehler wre.',
+    'editgroupmsg' => 'To modify the group membership,  click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the "Right" side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Liste aller Mitglieder der Gruppe "<b>%s</b>"',
+    'search' => 'Suchen',
+    'submit' => 'Abschicken',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Gruppen-ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Gruppenname existiert schon',
+    'groupexistsmsg' => 'Es existiert bereits eine Gruppe mit diesem Namen. Gruppennamen mssen eindeutig sein.'
 );
 
 ###############################################################################
@@ -1205,7 +1237,7 @@
     'do_backup' => 'Backup anlegen',
     'backup_successful' => 'Backup der Datenbank war erfolgreich.',
     'no_backups' => 'Keine Backups im System',
-    'db_explanation' => 'Um ein neues Backup Deines Geeklog-Systems anzulegen, einfach auf den folgenden Button klicken',
+    'db_explanation' => 'Um ein neues Backup Deines Geeklog-Systems anzulegen, bitte auf Neu anlegen (s.o.) klicken.',
     'not_found' => "Falscher Pfad oder mysqldump ist nicht ausfhrbar.<br>Bitte berprfe die Variable <strong>\$_DB_mysqldump_path</strong> in der config.php.<br>Aktueller Wert der Variablen: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup fehlgeschlagen: Datei ist 0 Bytes gro.',
     'path_not_found' => "{$_CONF['backup_path']} existiert nicht oder ist kein Verzeichnis.",
@@ -1228,7 +1260,8 @@
     7 => 'Statistik',
     8 => 'Einstellungen',
     9 => 'Suchen',
-    10 => 'Erweiterte Suche'
+    10 => 'Erweiterte Suche',
+    11 => 'Verzeichnis'
 );
 
 ###############################################################################
@@ -1270,4 +1303,206 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'von',
+    'tracked_on' => 'Empfangen am',
+    'read_more' => '[mehr]',
+    'intro_text' => 'Andere haben folgendes ber \'%s\' geschrieben:',
+    'no_comments' => 'Keine Trackback-Kommentare fr diesen Eintrag.',
+    'this_trackback_url' => 'Trackback-URL fr diesen Eintrag:',
+    'num_comments' => '%d Trackback-Kommentare',
+    'send_trackback' => 'Pings senden',
+    'preview' => 'Vorschau',
+    'editor_title' => 'Trackback-Kommentar senden',
+    'trackback_url' => 'Trackback-URL',
+    'entry_url' => 'URL des Eintrags',
+    'entry_title' => 'Titel des Eintrags',
+    'blog_name' => 'Site-Name',
+    'excerpt' => 'Auszug',
+    'truncate_warning' => 'Hinweis: Die empfangende Site knnte den Auszug krzen.',
+    'button_send' => 'Abschicken',
+    'button_preview' => 'Vorschau',
+    'send_error' => 'Fehler',
+    'send_error_details' => 'Fehler beim Senden des Trackback-Kommentars:',
+    'url_missing' => 'Keine URL fr den Eintrag',
+    'url_required' => 'Es muss mindestens die URL fr den Eintrag angegeben werden.',
+    'target_missing' => 'Keine Trackback-URL',
+    'target_required' => 'Bitte gib die Trackback-URL ein.',
+    'error_socket' => 'Socket konnte nicht geffnet werden.',
+    'error_response' => 'Antwort nicht verstanden.',
+    'error_unspecified' => 'Fehler nicht nher spezifiziert.',
+    'select_url' => 'Trackback-URL auswhlen',
+    'not_found' => 'Trackback-URL nicht gefunden',
+    'autodetect_failed' => 'Geeklog konnte keine Trackback-URL fr den Beitrag finden, zu dem der Kommentar gesendet werden sollte. Bitte gib die Trackback-URL von Hand ein.',
+    'trackback_explain' => 'Aus den unten aufgefhrten Links kannst Du jetzt den Beitrag auswhlen, zu dem Dein Kommentar gesendet werden soll. Geeklog wird versuchen, die Trackback-URL selbst zu ermitteln. Andernfalls kannst Du die Trackback-URL aber auch <a href="%s">von Hand eingeben</a>.',
+    'no_links_trackback' => 'Keine Links gefunden. Fr diesen Beitrag knnen keine Trackback-Kommentare gesendet werden.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback-Ergebnisse',
+    'send_pings' => 'Pings senden',
+    'send_pings_for' => 'Pings fr "%s" senden',
+    'no_links_pingback' => 'Keine Links gefunden. Es wurden keine Pingbacks fr diesen Beitrag gesendet.',
+    'pingback_success' => 'Pingback gesendet.',
+    'no_pingback_url' => 'Keine Pingback-URL gefunden.',
+    'resend' => 'Nochmal senden',
+    'ping_all_explain' => 'Du kannst jetzt einen <a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a> zu den verlinkten Sites senden, einen Ping an Weblog-Verzeichnisse senden, oder einen <a href="http://de.wikipedia.org/wiki/Trackback">Trackback</a>-Kommentar verschicken, wenn Du ber einen Beitrag in einem anderen Weblog geschrieben hast.',
+    'pingback_button' => 'Pingback senden',
+    'pingback_short' => 'Einen Pingback an alle in diesem Beitrag verlinkten Sites senden.',
+    'pingback_disabled' => '(Pingback deaktiviert)',
+    'ping_button' => 'Ping senden',
+    'ping_short' => 'Weblog-Verzeichnisse "anpingen".',
+    'ping_disabled' => '(Ping deaktiviert)',
+    'trackback_button' => 'Trackback senden',
+    'trackback_short' => 'Einen Trackback-Kommentar senden.',
+    'trackback_disabled' => '(Trackback deaktiviert)',
+    'may_take_a_while' => 'Hinweis: Das Senden von Pingbacks und Pings kann eine Weile dauern.',
+    'ping_results' => 'Ping-Ergebnisse',
+    'unknown_method' => 'Unbekannte Ping-Methode',
+    'ping_success' => 'Ping gesendet.',
+    'error_site_name' => 'Bitte gib den Namen der Site ein.',
+    'error_site_url' => 'Bitte gib die URL der Site ein.',
+    'error_ping_url' => 'Bitte gib die Ping-URL der Site ein.',
+    'no_services' => 'Es sind keine Weblog-Verzeichnisse konfiguriert.',
+    'services_headline' => 'Weblog-Verzeichnisse',
+    'service_explain' => 'Um ein Weblog-Verzeichnis zu ndern oder zu lschen, auf das ndern-Icon klicken. Um ein neues Weblog-Verzeichnis einzutragen, auf Neu anlegen (s.o.) klicken.',
+    'service' => 'Verzeichnis',
+    'ping_method' => 'Ping-Methode',
+    'service_website' => 'Website',
+    'service_ping_url' => 'Ping-URL',
+    'ping_standard' => 'Normaler Ping',
+    'ping_extended' => 'Erweiterter Ping',
+    'ping_unknown' => '(unbekannte Methode)',
+    'edit_service' => 'Weblog-Verzeichnis bearbeiten',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Hier kannst Du Deinen Trackback-Kommentar fr <a href="%s">%s</a> eingeben.',
+    'editor_intro_none' => 'Trackback-Kommentar eingeben.',
+    'trackback_note' => 'Um einen Trackback-Kommentar fr einen Artikel zu verschicken, benutze bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Trackback unabhngig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pingback_explain'   => 'Gib eine URL ein, an die der Pingback geschickt werden soll. Der Pingback wird auf die Startseite Deiner Website verweisen.',
+    'pingback_url'       => 'Pingback-URL',
+    'site_url'           => 'Die URL dieser Website',
+    'pingback_note' => 'Um einen Pingback fr einen Artikel zu verschicken, benutze bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Pingback unabhngig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pbtarget_missing'   => 'Keine Pingback-URL',
+    'pbtarget_required'  => 'Gib bitte die Pingback-URL ein',
+    'pb_error_details'   => 'Fehler beim Senden des Pingbacks:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Artikelverzeichnis',
+    'title_year' => 'Artikelverzeichnis fr %d',
+    'title_month_year' => 'Artikelverzeichnis fr %s %d',
+    'nav_top' => 'Zurck zum Artikelverzeichnis',
+    'no_articles' => 'Keine Artikel.'
+);
+
+################################################################################
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks) 
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array (
+    'new_string'  => '%n neue %i in den letzten %t %s',
+    'new_last'    => 'letzte %t %s',
+    'minutes'     => 'Minuten',
+    'hours'       => 'Stunden',
+    'days'        => 'Tage',
+    'weeks'       => 'Wochen',
+    'months'      => 'Monate',
+    'minute'      => 'Minute',
+    'hour'        => 'Stunde',
+    'day'         => 'Tag',
+    'week'        => 'Woche',
+    'month'       => 'Monat'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Suchen',
+    'limit_results' => 'Anzahl Ergebnisse',
+    'submit'        => 'Abschicken',
+    'edit'          => 'ndern',
+    'admin_home'    => 'Admin Home',
+    'create_new'    => 'Neu anlegen',
+    'enabled'       => 'Aktiv',
+    'title'         => 'Titel',
+    'type'          => 'Typ',
+    'topic'         => 'Kategorie',
+    'help_url'      => 'URL f. Hilfe-Datei',
+    'save'          => 'Speichern',
+    'cancel'        => 'Abbruch',
+    'delete'        => 'Lschen',
+    'copy'          => 'Kopieren',
+    'no_results'    => '- Keine Eintrge gefunden -',
+    'data_error'    => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Kommentare erlaubt',
+    -1  => 'Keine Kommentare'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Flach',
+    'nested'    => 'Verschachtelt',
+    'threaded'  => 'Nach Thema',
+    'nocomment' => 'Keine Kommentare'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(gar nicht)',
+    3600    => '1 Stunde',
+    7200    => '2 Stunden',
+    10800   => '3 Stunden',
+    28800   => '8 Stunden',
+    86400   => '1 Tag',
+    604800  => '1 Woche',
+    2678400 => '1 Monat'
+);
+
+$LANG_dateformats = array(
+    0   => 'Defaulteinstellung'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Normaler Artikel',
+    1 => 'Hauptartikel'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Nur unter der Kategorie',
+    1 => 'Auf der Startseite'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'als Text',
+    'html'      => 'in HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'lteste zuerst',
+    'DESC' => 'Neueste zuerst'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Trackbacks erlaubt',
+    -1  => 'Keine Trackbacks'
+);
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/german_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/german_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/german_utf-8.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/german_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,18 +1,16 @@
 <?php
 
 ###############################################################################
-# German_Unicode.php
+# german_utf-8.php
 #
 # This is the German language file for Geeklog, addressing the user as "Du"
 # (informal German). See german_formal.php for a language file addressing the
 # user with the formal "Sie".
 #
-# Author: Dirk Haun <dirk@haun-online.de>
+# Author: Dirk Haun <dirk AT haun-online DOT de>
 #
 # Based on the original english.php, started by Jason Whittenburg.
 #
-# Converted to Unicode (UTF-8) by Samuel Stone <sam@stonemicro.com>
-#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
@@ -158,7 +156,17 @@
     110 => 'Site-Admin auf diesen Beitrag hinweisen',
     111 => 'Als PDF anzeigen',
     112 => 'Registrierte User',
-    113 => 'Dokumentation'
+    113 => 'Dokumentation',
+    114 => 'TRACKBACKS',
+    115 => 'Keine neuen Trackback-Kommentare',
+    116 => 'Trackback',
+    117 => 'Verzeichnis',
+    118 => 'Fortsetzung auf der nächsten Seite:',
+    119 => "<a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">Passwort vergessen?</a>",
+    120 => 'Permalink',
+    121 => 'Kommentare (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Alle HTML-Tags sind erlaubt'
 );
 
 ###############################################################################
@@ -166,7 +174,7 @@
 
 $LANG02 = array(
     1 => 'Terminkalender',
-    2 => 'Sorry, es gibt keine Termine anzuzeigen.',
+    2 => 'Es gibt keine Termine anzuzeigen.',
     3 => 'Wann',
     4 => 'Wo',
     5 => 'Beschreibung',
@@ -195,12 +203,12 @@
     7 => 'Dein letzter Kommentar war vor ',
     8 => " Sekunden. Zwischen zwei Kommentaren müssen aber mindestens {$_CONF['commentspeedlimit']} Sekunden vergangen sein.",
     9 => 'Kommentar',
-    10 => 'Send Report',
+    10 => 'Beitrag melden',
     11 => 'Kommentar abschicken',
     12 => 'Bitte die Felder Betreff <em>und</em> Kommentar ausfüllen, um einen Kommentar zu diesem Artikel abzugeben.',
     13 => 'Deine Information',
     14 => 'Vorschau',
-    15 => 'Report this post',
+    15 => 'Diesen Beitrag melden',
     16 => 'Betreff',
     17 => 'Fehler',
     18 => 'Wichtige Hinweise:',
@@ -222,7 +230,7 @@
     1 => 'Userprofil für',
     2 => 'Username',
     3 => 'Name',
-    4 => 'Passwort',
+    4 => 'Neues Passwort',
     5 => 'E-Mail',
     6 => 'Homepage',
     7 => 'Biographie',
@@ -284,7 +292,7 @@
     63 => "Dein Passwort sollte in Kürze per E-Mail eintreffen. Bitte beachte die Hinweise in der E-Mail und Danke für Dein Interesse an {$_CONF['site_name']}",
     64 => 'Kommentar-Einstellungen für',
     65 => 'Bitte noch einmal versuchen, Dich anzumelden',
-    66 => "Hast Du Dich vertippt? Bitte versuch noch einmal, Dich hier anzumelden. Oder möchtest Du Dich <a href=\"{$_CONF['site_url']}/users.php?mode=new\">als neuer User registrieren</a>?",
+    66 => "Hast Du Dich vertippt? Bitte versuch noch einmal, Dich hier anzumelden.",
     67 => 'Mitglied seit',
     68 => 'Angemeldet für',
     69 => 'Wie lange soll das System Dich nach dem Anmelden erkennen?',
@@ -325,7 +333,23 @@
     104 => 'Online-Status zeigen',
     105 => 'Unter "Wer ist online?"',
     106 => 'Wohnort',
-    107 => 'Erscheint im öffentlichen Profil'
+    107 => 'Erscheint im öffentlichen Profil',
+    108 => 'Neues Passwort bestätigen',
+    109 => 'Gib hier das neue Passwort noch einmal ein',
+    110 => 'Aktuelles Passwort',
+    111 => 'Gib Dein aktuelles Passwort ein',
+    112 => 'Du hast die erlaubte Anzahl von Anmeldeversuchen überschritten. Bitte versuche es später noch einmal.',
+    113 => 'Anmeldeversuch fehlgeschlagen',
+    114 => 'Account gesperrt',
+    115 => 'Dein Account wurde gesperrt. Du kannst Dich nicht einloggen. Bitte wende Dich an einen Administrator.',
+    116 => 'Account noch nicht freigegeben',
+    117 => 'Dein Account muss erst noch von einem Administrator freigegeben werden. Du kannst Dich erst einloggen, wenn Dein Account freigegeben wurde.',
+    118 => "Dein Account für {$_CONF['site_name']} wurde jetzt freigeschaltet. Du kannst Dich jetzt auf der Website unter der unten angegebenen URL anmelden. Benutze dazu Deinen Usernamen (<username>) und das Passwort, das Du bereits per E-Mail erhalten hast.",
+    119 => 'Wenn Du Dein Passwort vergessen hast, kannst Du unter der folgenden URL ein neues anfordern:',
+    120 => 'Account aktiviert',
+    121 => 'Dienst',
+    122 => 'Sorry, derzeit können sich keine neuen User anmelden.',
+    123 => "Bist Du ein <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a>?"
 );
 
 ###############################################################################
@@ -333,7 +357,7 @@
 
 $LANG05 = array(
     1 => 'Keine Artikel',
-    2 => 'Es gibt keine Artikel, die angezeigt werden könnten. Entweder gibt es für diese Kategorie keine Artikel oder Deine Einstellungen sind zu restriktiv',
+    2 => 'Es gibt keine Artikel, die angezeigt werden könnten. Entweder gibt es für diese Kategorie keine Artikel oder Deine Einstellungen sind zu restriktiv.',
     3 => ' für die Kategorie %s.',
     4 => 'Hauptartikel',
     5 => 'weiter',
@@ -343,27 +367,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'Es gibt keine Links anzuzeigen.',
-    3 => 'Link hinzufügen'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Stimme gespeichert',
-    2 => 'Deine Stimme wurde für die Umfrage gespeichert: ',
-    3 => 'Stimme',
-    4 => 'Umfragen im System',
-    5 => 'Stimme(n)',
-    6 => 'Ältere Umfragen'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -389,7 +392,7 @@
     20 => 'Von (Name)',
     21 => 'Von (E-Mail)',
     22 => 'Alle Felder müssen ausgefüllt werden.',
-    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie würden sich vielleicht für diesen Artikel auf <{$_CONF['site_url']}> interessieren. Dies ist kein SPAM und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) wurden nicht gespeichert.",
+    23 => "Diese Nachricht wurde Ihnen von %s <%s> geschickt, da er/sie der Meinung war, Sie würden sich vielleicht für diesen Artikel auf <{$_CONF['site_url']}> interessieren. Dies ist kein Spam und die beteiligten E-Mail-Adressen (Ihre und die des Absenders) wurden nicht gespeichert.",
     24 => 'Schreiben Sie einen Kommentar zu diesem Artikel:',
     25 => 'Du musst Dich anmelden, um diese Funktion benutzen zu können. Dies ist leider nötig, um den Missbrauch des Systems zu verhindern',
     26 => 'Mit diesem Formular kannst Du eine E-Mail an diesen User schicken. Alle Felder müssen ausgefüllt werden.',
@@ -444,8 +447,8 @@
     34 => 'Ort',
     35 => 'Ganztägig',
     36 => 'Keine Termine für Deine Suche gefunden',
-    37 => 'Ergebnisse: Termine',
-    38 => 'Ergebnisse: Links',
+    37 => 'Gefundene Termine',
+    38 => 'Gefundene Links',
     39 => 'Links',
     40 => 'Termine',
     41 => 'Dein Suchbegriff sollte mindestens 3 Zeichen lang sein.',
@@ -453,18 +456,22 @@
     43 => 'genaue Wortgruppe',
     44 => 'alle Wörter',
     45 => 'irgendeines der Wörter',
-    46 => 'Next',
-    47 => 'Previous',
-    48 => 'Author',
-    49 => 'Date',
-    50 => 'Hits',
+    46 => 'weiter',
+    47 => 'zurück',
+    48 => 'Autor',
+    49 => 'Datum',
+    50 => 'Treffer',
     51 => 'Link',
     52 => 'Wohnort',
     53 => 'Gefundene Artikel',
     54 => 'Gefundene Kommentare',
-    55 => 'nach der Wortgruppe',
+    55 => 'der Wortgruppe',
     56 => '<em>und</em>',
-    57 => '<em>oder</em>'
+    57 => '<em>oder</em>',
+    58 => 'Weitere Ergebnisse &gt;&gt;',
+    59 => 'Ergebnisse',
+    60 => 'pro Seite',
+    61 => 'Suche korrigieren'
 );
 
 ###############################################################################
@@ -478,7 +485,7 @@
     5 => 'Anzahl Links (Klicks)',
     6 => 'Anzahl Termine',
     7 => 'Top Ten der Artikel',
-    8 => 'Artikel-Überschrift',
+    8 => 'Artikelüberschrift',
     9 => 'Angezeigt',
     10 => 'Es gibt keine Artikel oder sie wurden von niemandem gelesen.',
     11 => 'Top Ten der meistkommentierten Artikel',
@@ -494,14 +501,21 @@
     21 => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.',
     22 => 'Top Ten der verschickten Artikel',
     23 => 'E-Mails',
-    24 => 'Es wurden keine Artikel per E-Mail verschickt.'
+    24 => 'Es wurden keine Artikel per E-Mail verschickt.',
+    25 => 'Top Ten der Artikel mit Trackback-Kommentaren',
+    26 => 'Keine Trackback-Kommentare gefunden.',
+    27 => 'Anzahl aktiver User',
+    28 => 'Top Ten der Termine',
+    29 => 'Termin',
+    30 => 'Angezeigt',
+    31 => 'Es gibt keine Termine oder sie wurden von niemandem gelesen.'
 );
 
 ###############################################################################
 # article.php
 
 $LANG11 = array(
-    1 => 'Zum Thema',
+    1 => 'Weiterführende Links',
     2 => 'An einen Freund schicken',
     3 => 'Druckfähige Version',
     4 => 'Optionen',
@@ -548,9 +562,9 @@
     34 => 'Abmelden',
     35 => 'HTML-Tags sind nicht erlaubt',
     36 => 'Format',
-    37 => "Wenn Du einen Termin bei {$_CONF['site_name']} einreichst, wird er in den Master-Kalender aufgenommen, von wo aus ihn andere User in ihren persönlichen Kalender übernehmen können. Dies ist <b>NICHT</b> dazu gedacht, private Termine und Ereignisse wie etwa Geburtstage zu verwalten.<br><br>Wenn Du einen Termin einreichst, wird er an die Administratoren weitergeleitet und sobald er von diesen akzeptiert wird, wird er im Master-Kalender erscheinen.",
+    37 => "Wenn Du einen Termin bei {$_CONF['site_name']} einreichst, wird er in den Kalender aufgenommen, von wo aus ihn andere User in ihren persönlichen Kalender übernehmen können. Dies ist <b>NICHT</b> dazu gedacht, private Termine und Ereignisse wie etwa Geburtstage zu verwalten.<br><br>Wenn Du einen Termin einreichst, wird er an die Administratoren weitergeleitet und sobald er von diesen akzeptiert wird, wird er im Kalender erscheinen.",
     38 => 'Termin hinzufügen zu',
-    39 => 'Master-Kalender',
+    39 => 'Kalender',
     40 => 'Persönlicher Kalender',
     41 => 'Endzeit',
     42 => 'Startzeit',
@@ -612,7 +626,7 @@
     22 => 'Typ',
     23 => 'Reihenfolge',
     24 => 'Kategorie',
-    25 => 'Um einen Block zu ändern oder löschen, auf den Block (s.u.) klicken. Um einen neuen Block anzulegen, auf Neuer Block (s.o.) klicken.',
+    25 => 'Um einen Block zu ändern oder zu löschen, auf das Ändern-Icon (s.u.) klicken. Um einen neuen Block anzulegen, auf Neu anlegen (s.o.) klicken.',
     26 => 'Layout-Block',
     27 => 'PHP-Block',
     28 => 'PHP-Block: Optionen',
@@ -633,7 +647,7 @@
     43 => 'Nur auf der Startseite',
     44 => 'Zugriff verweigert',
     45 => "Du hast keine Zugriffsrechte für diesen Block. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/block.php\">Zurück zum Administrator-Menü</a>.",
-    46 => 'Neuer Block',
+    46 => 'Bewegen',
     47 => 'Admin Home',
     48 => 'Block-Name',
     49 => ' (keine Leerzeichen, muss eindeutig sein)',
@@ -647,7 +661,12 @@
     57 => 'Block nach unten',
     58 => 'Block nach oben',
     59 => 'Block auf die rechte Seite',
-    60 => 'Block auf die linke Seite'
+    60 => 'Block auf die linke Seite',
+    61 => 'Ohne Titel',
+    62 => 'Artikellimit',
+    63 => 'Block-Titel nicht erlaubt',
+    64 => 'Der Titel kann nicht leer sein und darf kein HTML enthalten!',
+    65 => 'Reihenfolge'
 );
 
 ###############################################################################
@@ -665,7 +684,7 @@
     9 => '(mit http://)',
     10 => 'Es müssen mindestens Datum und Uhrzeit, Titel und Beschreibung angegeben werden!',
     11 => 'Termin-Manager',
-    12 => 'Auf einen Termin klicken, um ihn zu ändern oder löschen. Mit Neuer Termin (s.o.) wird ein neuer Termin angelegt. [C] erzeugt eine Kopie eines vorhandenen Termins.',
+    12 => 'Auf das Ändern-Icon klicken, um einen Termin zu ändern oder zu löschen. Mit Neu anlegen (s.o.) wird ein neuer Termin angelegt. Das Kopie-Icon erzeugt eine Kopie eines vorhandenen Termins.',
     13 => 'Titel',
     14 => 'Startdatum',
     15 => 'Enddatum',
@@ -682,35 +701,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link-Editor',
-    2 => '',
-    3 => 'Titel',
-    4 => 'URL',
-    5 => 'Kategorie',
-    6 => '(mit http://)',
-    7 => 'Andere',
-    8 => 'Treffer',
-    9 => 'Beschreibung',
-    10 => 'Du musst einen Titel, eine URL und eine Beschreibung für den Link angeben.',
-    11 => 'Link-Manager',
-    12 => 'Auf den Link-Titel klicken, um einen Link zu ändern oder zu löschen. Mit Neuer Link (s.o.) kann ein neuer Link angelegt werden.',
-    13 => 'Titel',
-    14 => 'Kategorie',
-    15 => 'URL',
-    16 => 'Zugriff verweigert',
-    17 => "Du hast keine Zugriffsrechte für diesen Link. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/link.php\">Zurück zum Administrator-Menü</a>.",
-    18 => 'Neuer Link',
-    19 => 'Admin Home',
-    20 => 'Andere bitte eingeben',
-    21 => 'Speichern',
-    22 => 'Abbruch',
-    23 => 'Löschen'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -731,18 +721,18 @@
     15 => 'Datum',
     16 => 'Einleitung',
     17 => 'Haupttext',
-    18 => 'Treffer',
+    18 => 'Gelesen',
     19 => 'Kommentare',
-    20 => '',
-    21 => '',
-    22 => 'Artikel-Liste',
-    23 => 'Auf die Nummer klicken, um einen Artikel zu ändern oder zu löschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neuer Artikel (s.o.) klicken, um einen neuen Artikel zu schreiben.',
-    24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
-    26 => 'Artikel-Vorschau',
-    27 => '',
-    28 => '',
-    29 => '',
+    20 => 'Ping',
+    21 => 'Senden',
+    22 => 'Artikelliste',
+    23 => 'Auf das Ändern-Icon klicken, um einen Artikel zu ändern oder zu löschen. Um einen Artikel anzusehen, auf dessen Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neuen Artikel zu schreiben.',
+    24 => 'Diese ID wird bereits für einen anderen Artikel benutzt. Bitte wähle eine andere ID.',
+    25 => 'Fehler beim Speichern des Artikels',
+    26 => 'Artikelvorschau',
+    27 => 'Wenn Du [unscaledX] statt [imageX] verwendest, wird das Bild in Originalgröße eingebunden.',
+    28 => '<p><strong>VORSCHAU:</strong> Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthält. Bei Artikeln mit Bildern empfiehlt es sich, den Artikel als Entwurf zu markieren, zu speichern und dann von der Liste der Artikel aus zu betrachten.</p>',
+    29 => 'Trackbacks',
     30 => 'Fehler beim Datei-Upload',
     31 => 'Bitte mindestens die Felder Titel und Einleitung ausfüllen',
     32 => 'Hauptartikel',
@@ -764,50 +754,41 @@
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => '<p>Die oben ausgewählten Bilder können im Artikel verwendet werden, indem dafür spezielle Platzhalter in den Text eingefügt werden. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss.<br>HINWEIS: Es müssen alle ausgewählten Bilder verwendet werden. Andernfalls kann der Artikel nicht gespeichert werden.</p><p><strong>VORSCHAU:</strong> Der Vorschau-Button sollte nur verwendet werden, wenn der Artikel keine Bilder enthält. Bei Artikeln mit Bildern empfiehlt es sich, den Artikel als Entwurf zu markieren, zu speichern und dann von der Liste der Artikel aus zu betrachten.</p>',
+    51 => 'Die oben ausgewählten Bilder können im Artikel verwendet werden, indem dafür spezielle Platzhalter in den Text eingefügt werden. Diese Platzhalter sind [imageX], [imageX_right] und [imageX_left], wobei statt des X jeweils die Nummer des Bildes eingetragen werden muss.<br>HINWEIS: Es müssen alle ausgewählten Bilder verwendet werden. Andernfalls kann der Artikel nicht gespeichert werden.<br>',
     52 => 'Löschen',
     53 => 'wurde nicht verwendet. Du musst dieses Bild im Text des Artikels verwenden oder es löschen bevor Du Deine Änderungen sichern kannst.',
     54 => 'Nicht verwendete Bilder',
     55 => 'Folgende Fehler traten beim Versuch, den Artikel zu speichern, auf. Bitte diese Fehler beheben und den Artikel noch einmal speichern.',
     56 => 'mit Icon',
     57 => 'Bild in Originalgröße',
-    58 => 'Artikel-Verwaltung',
+    58 => 'Artikelverwaltung',
     59 => 'Option',
-    60 => 'Aktiviert',
+    60 => 'Aktiv',
     61 => 'automatisch archivieren',
-    62 => 'automatisch löschen'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modus',
-    2 => 'Bitte eine Frage und mindestens eine Antwort eingeben.',
-    3 => 'angelegt',
-    4 => 'Umfrage %s wurde gespeichert',
-    5 => 'Umfrage editieren',
-    6 => 'Umfrage-ID',
-    7 => '(keine Leerzeichen!)',
-    8 => 'Erscheint auf der Startseite',
-    9 => 'Frage',
-    10 => 'Antworten / Stimmen',
-    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
-    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
-    13 => 'Umfrage anlegen',
-    14 => 'Speichern',
-    15 => 'Abbruch',
-    16 => 'Löschen',
-    17 => 'Bitte eine Umfrage-ID eingeben.',
-    18 => 'Liste der Umfragen',
-    19 => 'Um eine Umfrage zu ändern oder löschen, auf die Umfrage klicken. Mit Neue Umfrage (s.o.) wird eine neue Umfrage angelegt.',
-    20 => 'Stimmen',
-    21 => 'Zugriff verweigert',
-    22 => "Du hast keine Zugriffsrechte für diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/poll.php\">Zurück zum Administrator-Menü</a>.",
-    23 => 'Neue Umfrage',
-    24 => 'Admin Home',
-    25 => 'Ja',
-    26 => 'Nein'
+    62 => 'automatisch löschen',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -822,7 +803,7 @@
     6 => 'Löschen einer Kategorie löscht auch alle dazu gehörenden Artikel und Blöcke',
     7 => 'Bitte die Felder Kategorie-ID und Kategorie-Name ausfüllen',
     8 => 'Kategorie-Manager',
-    9 => 'Auf eine Kategorie klicken, um sie zu ändern oder löschen. Auf Neue Kategorie (s.o.) klicken, um eine neue Kategorie anzulegen. Die nötige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben. Das Sternchen(*) markiert die Default-Kategorie.',
+    9 => 'Auf eine Kategorie klicken, um sie zu ändern oder zu löschen. Auf Neu anlegen (s.o.) klicken, um eine neue Kategorie anzulegen. Die nötige Zugriffsberechtigung wird in Klammern hinter der Kategorie angegeben. Das Sternchen(*) markiert die Default-Kategorie.',
     10 => 'Sortierreihenfolge',
     11 => 'Artikel/Seite',
     12 => 'Zugriff verweigert',
@@ -839,7 +820,10 @@
     23 => 'Zur Default-Kategorie für neue Artikel machen',
     24 => '(*)',
     25 => 'Archiv-Kategorie',
-    26 => 'Zur Archiv-Kategorie machen (nur für eine Kategorie möglich).'
+    26 => 'Zur Archiv-Kategorie machen (nur für eine Kategorie möglich)',
+    27 => 'oder ein Icon hochladen',
+    28 => 'maximal',
+    29 => 'Fehler beim Datei-Upload'
 );
 
 ###############################################################################
@@ -857,12 +841,12 @@
     9 => '(keine Leerzeichen!)',
     10 => 'Bitte die Felder Username und E-Mail-Adresse ausfüllen.',
     11 => 'User-Manager',
-    12 => 'Auf den Usernamen klicken, um einen User zu ändern oder zu löschen. Ein neuer User kann mit dem Button Neuer User angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
+    12 => 'Auf das Ändern-Icon klicken, um einen User zu ändern oder zu löschen. Ein neuer User kann mit Neu anlegen (s.o.) angelegt werden. Es gibt auch eine einfache Suchfunktion, mit der nach Teilen von Usernamen, E-Mail-Adressen oder richtigen Namen gesucht werden kann (z.B. *son* oder *.de).',
     13 => 'SecLev',
     14 => 'Reg. Datum',
     15 => 'Neuer User',
     16 => 'Admin Home',
-    17 => 'pw ändern',
+    17 => '',
     18 => 'Abbruch',
     19 => 'Löschen',
     20 => 'Speichern',
@@ -881,7 +865,18 @@
     33 => 'Abschicken',
     34 => 'Fehler: Keine Datei zum Upload angegeben.',
     35 => 'Letzter Login',
-    36 => '(noch nie)'
+    36 => '(noch nie)',
+    37 => 'UID',
+    38 => 'Gruppenliste',
+    39 => 'Passwort (nochmal)',
+    40 => 'Registriert',
+    41 => 'Letzter Login',
+    42 => 'Gesperrt',
+    43 => 'Erwartet Aktivierung',
+    44 => 'Erwartet Freigabe',
+    45 => 'Aktiv',
+    46 => 'User-Status',
+    47 => 'Ändern'
 );
 
 ###############################################################################
@@ -924,7 +919,7 @@
     8 => 'Neuer Termin',
     9 => 'Termin',
     10 => 'Termine am',
-    11 => 'Master-Kalender',
+    11 => 'Kalender',
     12 => 'Mein Kalender',
     13 => 'Januar',
     14 => 'Februar',
@@ -977,7 +972,7 @@
     14 => 'User-Einstellungen ignorieren',
     15 => 'Fehler beim Senden an: ',
     16 => 'E-Mail erfolgreich gesendet an: ',
-    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Noch eine Nachricht schreiben</a>",
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">Noch eine Nachricht schreiben</a>",
     18 => 'An',
     19 => 'HINWEIS: Wenn Du eine Nachricht an alle eingetragenen Benutzer schicken willst, musst Du die Gruppe Logged-in Users auswählen.',
     20 => "<successcount> Nachricht(en) erfolgreich verschickt, bei <failcount> Nachricht(en) traten Fehler auf. Details können der folgenden Liste entnommen werden. Du kannst jetzt <a href=\"{$_CONF['site_admin_url']}/mail.php\">noch eine Nachricht schicken</a> oder <a href=\"{$_CONF['site_admin_url']}/moderation.php\">zurück zum Admin-Menü gehen</a>.",
@@ -1003,7 +998,7 @@
     8 => 'Plugin-Kompatibilitätstest fehlgeschlagen',
     9 => 'Dieses Plugin benötigt eine neuere Version von Geeklog. Abhilfe schafft ein Update von <a href="http://www.geeklog.net/">Geeklog</a> oder evtl. eine andere Version dieses Plugins.',
     10 => '<br><b>Es sind derzeit keine Plugins installiert.</b><br><br>',
-    11 => 'Um ein Plugin zu ändern oder löschen, auf die Nummer des Plugins klicken. Wenn Du auf den Namen des Plugins klickst, wird die Homepage des Plugins aufgerufen. Um ein Plugin zu installieren oder aktualisieren bitte dessen Dokumentation lesen.',
+    11 => 'Um ein Plugin zu ändern oder zu löschen, auf das Ändern-Icon klicken. Es werden dann auch weitere Details, inkl. der Homepage des Plugins, angezeigt. Wenn in der Liste (s.u.) zwei Versionsnummern für ein Plugin angezeigt werden,  bedeutet das, dass für das Plugin noch ein Update durchgeführt werden muss.  Um ein Plugin zu installieren oder aktualisieren bitte auch immer dessen Dokumentation lesen.',
     12 => '(kein Name angegeben)',
     13 => 'Plugin-Editor',
     14 => 'Neues Plugin',
@@ -1026,7 +1021,11 @@
     31 => 'Bist Du sicher, dass Du dieses Plugin löschen willst? Dies wird alle Daten und Datenstrukturen löschen, die dieses Plugin benutzt. Wenn Du sicher bist, dann klicke jetzt bitte noch einmal auf Löschen.',
     32 => '<p><b>Fehler: Ungültiges Format für Autolink.</b></p>',
     33 => 'Code-Version',
-    34 => 'Aktualisieren'
+    34 => 'Aktualisieren',
+    35 => 'Ändern',
+    36 => 'Code',
+    37 => 'Aktuell',
+    38 => 'Bitte aktualisieren!'
 );
 
 ###############################################################################
@@ -1040,7 +1039,7 @@
     10 => 'Content Syndication',
     11 => 'Neuer Feed',
     12 => 'Admin Home',
-    13 => 'Um einen Feed zu ändern oder zu löschen, auf den Titel des Feeds (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neuer Feed (s.o.) klicken.',
+    13 => 'Um einen Feed zu ändern oder zu löschen, auf das Ändern-Icon (s.u.) klicken. Um einen neuen Feed anzulegen, auf Neu anlegen (s.o.) klicken.',
     14 => 'Titel',
     15 => 'Art',
     16 => 'Dateiname',
@@ -1069,7 +1068,15 @@
     39 => 'Bitte die Felder Feed-Titel, Beschreibung und Dateiname ausfüllen.',
     40 => 'Bitte ein Limit (Anzahl Einträge oder Anzahl Stunden) eingeben.',
     41 => 'Links',
-    42 => 'Termine'
+    42 => 'Termine',
+    43 => 'Alle',
+    44 => 'Keine',
+    45 => 'Feed-Link für Kategorie',
+    46 => 'Limit Results',
+    47 => 'Suchen',
+    48 => 'Ändern',
+    49 => 'Feed-Logo',
+    50 => "Relativ zur URL dieser Site ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1106,22 +1113,22 @@
     28 => 'Das Plugin wurde gespeichert.',
     29 => 'Sorry, persönliche Kalender sind auf dieser Site nicht verfügbar.',
     30 => 'Zugriff verweigert',
-    31 => 'Du hast keinen Zugriff auf diese Artikel-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    32 => 'Du hast keinen Zugriff auf diese Kategorie-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    33 => 'Du hast keinen Zugriff auf diese Block-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    34 => 'Du hast keinen Zugriff auf diese Links-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    35 => 'Du hast keinen Zugriff auf diese Termin-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    36 => 'Du hast keinen Zugriff auf diese Umfrage-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    37 => 'Du hast keinen Zugriff auf diese User-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    38 => 'Du hast keinen Zugriff auf diese Plugin-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
-    39 => 'Du hast keinen Zugriff auf diese E-Mail-Administrationsseite. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    31 => 'Du hast keinen Zugriff auf die Artikel-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    32 => 'Du hast keinen Zugriff auf die Kategorie-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    33 => 'Du hast keinen Zugriff auf die Block-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    34 => 'Du hast keinen Zugriff auf die Links-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    35 => 'Du hast keinen Zugriff auf die Termin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    36 => 'Du hast keinen Zugriff auf die Umfrage-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    37 => 'Du hast keinen Zugriff auf die User-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    38 => 'Du hast keinen Zugriff auf die Plugin-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    39 => 'Du hast keinen Zugriff auf die E-Mail-Administrationsseite. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
     40 => 'System-Nachricht',
     41 => 'Sorry, you do not have access to the word replacement page.  Please not that all attempts to access unauthorized features are logged',
     42 => 'Your word has been successfully saved.',
     43 => 'The word has been successfully deleted.',
     44 => 'Das Plugin wurde erfolgreich installiert.',
     45 => 'Das Plugin wurde gelöscht.',
-    46 => 'Du hast keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Features ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
+    46 => 'Du hast keinen Zugriff auf die Backup-Funktion. Alle Versuche, auf Bereiche ohne entsprechende Berechtigung zuzugreifen, werden protokolliert.',
     47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
     48 => "Danke, dass Du dich bei {$_CONF['site_name']} angemeldet hast. Dein Aufnahmeantrag wird von unserem Team geprüft. Sobald er akzeptiert wird, wirst Du Dein Passwort per E-Mail erhalten.",
     49 => 'Deine Gruppe wurde gespeichert.',
@@ -1136,7 +1143,21 @@
     58 => 'Der Feed wurde gespeichert.',
     59 => 'Der Feed wurde gelöscht.',
     60 => 'Das Plugin wurde erfolgreich aktualisiert.',
-    61 => 'Plugin %s: Unbekannter Text-Platzhalter'
+    61 => 'Plugin %s: Unbekannter Text-Platzhalter',
+    62 => 'Der Trackback-Kommentar wurde gelöscht.',
+    63 => 'Beim Löschen des Trackback-Kommentars trat ein Fehler auf.',
+    64 => 'Dein Trackback-Kommentar wurde erfolgreich verschickt.',
+    65 => 'Das Weblog-Verzeichnis wurde gespeichert.',
+    66 => 'Das Weblog-Verzeichnis wurde gelöscht.',
+    67 => 'Das neue Passwort stimmt nicht mit dem Bestätigungs-Passwort überein!',
+    68 => 'Gib bitte Dein korrektes aktuelles Passwort ein.',
+    69 => 'Dein Account wurde gesperrt!',
+    70 => 'Dein Account wurde noch nicht freigeschaltet.',
+    71 => 'Dein Account wurde bestätigt, muss aber noch freigeschaltet werden.',
+    72 => 'Bei der Installation des Plugins trat ein Fehler auf. Siehe error.log für weitere Informationen.',
+    73 => 'Bei der Deinstallation des Plugins trat ein Fehler aus. Siehe error.log für weitere Informationen.',
+    74 => 'Der Pingback wurde erfolgreich verschickt.',
+    75 => 'Trackbacks müssen als POST-Request verschickt werden.'
 );
 
 ###############################################################################
@@ -1160,7 +1181,7 @@
     'missingfields' => 'Fehlende Angaben',
     'missingfieldsmsg' => 'Du musst den Namen und eine Beschreibung für die Gruppe angeben.',
     'groupmanager' => 'Gruppen-Manager',
-    'newgroupmsg' => 'Um eine Gruppe zu ändern oder löschen, einfach auf den Namen der Gruppe klicken. Neue Gruppe (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen können nicht gelöscht werden, da sie vom System benötigt werden.',
+    'newgroupmsg' => 'Um eine Gruppe zu ändern oder zu löschen, auf das Ändern-Icon klicken. Neu anlegen (s.o.) legt eine neue Gruppe an. Hinweis: Core-Gruppen können nicht gelöscht werden, da sie vom System benötigt werden.',
     'groupname' => 'Gruppen-Name',
     'coregroup' => 'Core-Gruppe',
     'yes' => 'Ja',
@@ -1177,8 +1198,8 @@
     'edit' => 'Edit',
     'none' => 'None',
     'accessdenied' => 'Zugriff verweigert',
-    'storydenialmsg' => "Du hast nicht die nötigen Rechte, um diesen Artikel zu lesen. Möglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
-    'eventdenialmsg' => "Du hast nicht die nötigen Rechte, um diesen Termin abzurufen. Möglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'storydenialmsg' => "Du hast nicht die nötigen Rechte, um diesen Artikel zu lesen. Möglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
+    'eventdenialmsg' => "Du hast nicht die nötigen Rechte, um diesen Termin abzurufen. Möglicherweise bist Du kein registrierter User von {$_CONF['site_name']}. Bitte melde Dich als <a href=\"{$_CONF['site_url']}/users.php?mode=new\">neuer User</a> von {$_CONF['site_name']} an um vollen Zugriff auf alle Bereiche zu bekommen.",
     'nogroupsforcoregroup' => 'Diese Gruppe gehört zu keiner anderen Gruppe.',
     'grouphasnorights' => 'Diese Gruppe hat keine Rechte für die Administration der Website',
     'newgroup' => 'Neue Gruppe',
@@ -1196,7 +1217,16 @@
     'availmembers' => 'Verfügbare Mitglieder',
     'groupmembers' => 'Mitglieder der Gruppe',
     'canteditgroup' => 'Um diese Gruppe bearbeiten zu können, musst Du selbst ein Mitglied der Gruppe sein. Wende Dich bitte an den Systemadministrator wenn Du der Meinung bist, dass das ein Fehler wäre.',
-    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu können, musst Du selbst ein Mitglied der Gruppe sein. Wende Dich bitte an den Systemadministrator wenn Du der Meinung bist, dass das ein Fehler wäre.'
+    'cantlistgroup' => 'Um die Mitglieder dieser Gruppe sehen zu können, musst Du selbst ein Mitglied der Gruppe sein. Wende Dich bitte an den Systemadministrator wenn Du der Meinung bist, dass das ein Fehler wäre.',
+    'editgroupmsg' => 'To modify the group membership,  click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the "Right" side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Liste aller Mitglieder der Gruppe "<b>%s</b>"',
+    'search' => 'Suchen',
+    'submit' => 'Abschicken',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Gruppen-ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Gruppenname existiert schon',
+    'groupexistsmsg' => 'Es existiert bereits eine Gruppe mit diesem Namen. Gruppennamen müssen eindeutig sein.'
 );
 
 ###############################################################################
@@ -1207,8 +1237,8 @@
     'do_backup' => 'Backup anlegen',
     'backup_successful' => 'Backup der Datenbank war erfolgreich.',
     'no_backups' => 'Keine Backups im System',
-    'db_explanation' => 'Um ein neues Backup Deines Geeklog-Systems anzulegen, einfach auf den folgenden Button klicken',
-    'not_found' => "Falscher Pfad oder mysqldump ist nicht ausführbar.<br>Bitte überprüfe die Variable <strong>{$_DB_mysqldump_path}</strong> in der config.php.<br>Aktueller Wert der Variablen: <var>{$_DB_mysqldump_path}</var>",
+    'db_explanation' => 'Um ein neues Backup Deines Geeklog-Systems anzulegen, bitte auf Neu anlegen (s.o.) klicken.',
+    'not_found' => "Falscher Pfad oder mysqldump ist nicht ausführbar.<br>Bitte überprüfe die Variable <strong>\$_DB_mysqldump_path</strong> in der config.php.<br>Aktueller Wert der Variablen: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup fehlgeschlagen: Datei ist 0 Bytes groß.',
     'path_not_found' => "{$_CONF['backup_path']} existiert nicht oder ist kein Verzeichnis.",
     'no_access' => "Fehler: Konnte nicht auf das Verzeichnis {$_CONF['backup_path']} zugreifen.",
@@ -1230,7 +1260,8 @@
     7 => 'Statistik',
     8 => 'Einstellungen',
     9 => 'Suchen',
-    10 => 'Erweiterte Suche'
+    10 => 'Erweiterte Suche',
+    11 => 'Verzeichnis'
 );
 
 ###############################################################################
@@ -1272,4 +1303,206 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'von',
+    'tracked_on' => 'Empfangen am',
+    'read_more' => '[mehr]',
+    'intro_text' => 'Andere haben folgendes über \'%s\' geschrieben:',
+    'no_comments' => 'Keine Trackback-Kommentare für diesen Eintrag.',
+    'this_trackback_url' => 'Trackback-URL für diesen Eintrag:',
+    'num_comments' => '%d Trackback-Kommentare',
+    'send_trackback' => 'Pings senden',
+    'preview' => 'Vorschau',
+    'editor_title' => 'Trackback-Kommentar senden',
+    'trackback_url' => 'Trackback-URL',
+    'entry_url' => 'URL des Eintrags',
+    'entry_title' => 'Titel des Eintrags',
+    'blog_name' => 'Site-Name',
+    'excerpt' => 'Auszug',
+    'truncate_warning' => 'Hinweis: Die empfangende Site könnte den Auszug kürzen.',
+    'button_send' => 'Abschicken',
+    'button_preview' => 'Vorschau',
+    'send_error' => 'Fehler',
+    'send_error_details' => 'Fehler beim Senden des Trackback-Kommentars:',
+    'url_missing' => 'Keine URL für den Eintrag',
+    'url_required' => 'Es muss mindestens die URL für den Eintrag angegeben werden.',
+    'target_missing' => 'Keine Trackback-URL',
+    'target_required' => 'Bitte gib die Trackback-URL ein.',
+    'error_socket' => 'Socket konnte nicht geöffnet werden.',
+    'error_response' => 'Antwort nicht verstanden.',
+    'error_unspecified' => 'Fehler nicht näher spezifiziert.',
+    'select_url' => 'Trackback-URL auswählen',
+    'not_found' => 'Trackback-URL nicht gefunden',
+    'autodetect_failed' => 'Geeklog konnte keine Trackback-URL für den Beitrag finden, zu dem der Kommentar gesendet werden sollte. Bitte gib die Trackback-URL von Hand ein.',
+    'trackback_explain' => 'Aus den unten aufgeführten Links kannst Du jetzt den Beitrag auswählen, zu dem Dein Kommentar gesendet werden soll. Geeklog wird versuchen, die Trackback-URL selbst zu ermitteln. Andernfalls kannst Du die Trackback-URL aber auch <a href="%s">von Hand eingeben</a>.',
+    'no_links_trackback' => 'Keine Links gefunden. Für diesen Beitrag können keine Trackback-Kommentare gesendet werden.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback-Ergebnisse',
+    'send_pings' => 'Pings senden',
+    'send_pings_for' => 'Pings für "%s" senden',
+    'no_links_pingback' => 'Keine Links gefunden. Es wurden keine Pingbacks für diesen Beitrag gesendet.',
+    'pingback_success' => 'Pingback gesendet.',
+    'no_pingback_url' => 'Keine Pingback-URL gefunden.',
+    'resend' => 'Nochmal senden',
+    'ping_all_explain' => 'Du kannst jetzt einen <a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a> zu den verlinkten Sites senden, einen Ping an Weblog-Verzeichnisse senden, oder einen <a href="http://de.wikipedia.org/wiki/Trackback">Trackback</a>-Kommentar verschicken, wenn Du über einen Beitrag in einem anderen Weblog geschrieben hast.',
+    'pingback_button' => 'Pingback senden',
+    'pingback_short' => 'Einen Pingback an alle in diesem Beitrag verlinkten Sites senden.',
+    'pingback_disabled' => '(Pingback deaktiviert)',
+    'ping_button' => 'Ping senden',
+    'ping_short' => 'Weblog-Verzeichnisse "anpingen".',
+    'ping_disabled' => '(Ping deaktiviert)',
+    'trackback_button' => 'Trackback senden',
+    'trackback_short' => 'Einen Trackback-Kommentar senden.',
+    'trackback_disabled' => '(Trackback deaktiviert)',
+    'may_take_a_while' => 'Hinweis: Das Senden von Pingbacks und Pings kann eine Weile dauern.',
+    'ping_results' => 'Ping-Ergebnisse',
+    'unknown_method' => 'Unbekannte Ping-Methode',
+    'ping_success' => 'Ping gesendet.',
+    'error_site_name' => 'Bitte gib den Namen der Site ein.',
+    'error_site_url' => 'Bitte gib die URL der Site ein.',
+    'error_ping_url' => 'Bitte gib die Ping-URL der Site ein.',
+    'no_services' => 'Es sind keine Weblog-Verzeichnisse konfiguriert.',
+    'services_headline' => 'Weblog-Verzeichnisse',
+    'service_explain' => 'Um ein Weblog-Verzeichnis zu ändern oder zu löschen, auf das Ändern-Icon klicken. Um ein neues Weblog-Verzeichnis einzutragen, auf Neu anlegen (s.o.) klicken.',
+    'service' => 'Verzeichnis',
+    'ping_method' => 'Ping-Methode',
+    'service_website' => 'Website',
+    'service_ping_url' => 'Ping-URL',
+    'ping_standard' => 'Normaler Ping',
+    'ping_extended' => 'Erweiterter Ping',
+    'ping_unknown' => '(unbekannte Methode)',
+    'edit_service' => 'Weblog-Verzeichnis bearbeiten',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Hier kannst Du Deinen Trackback-Kommentar für <a href="%s">%s</a> eingeben.',
+    'editor_intro_none' => 'Trackback-Kommentar eingeben.',
+    'trackback_note' => 'Um einen Trackback-Kommentar für einen Artikel zu verschicken, benutze bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Trackback unabhängig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pingback_explain'   => 'Gib eine URL ein, an die der Pingback geschickt werden soll. Der Pingback wird auf die Startseite Deiner Website verweisen.',
+    'pingback_url'       => 'Pingback-URL',
+    'site_url'           => 'Die URL dieser Website',
+    'pingback_note' => 'Um einen Pingback für einen Artikel zu verschicken, benutze bitte den "' . $LANG24[20] . '"-Eintrag in der Liste der Artikel. Um einen Pingback unabhängig von einem Artikel zu verschicken, bitte <a href="%s">hier klicken</a>.',
+    'pbtarget_missing'   => 'Keine Pingback-URL',
+    'pbtarget_required'  => 'Gib bitte die Pingback-URL ein',
+    'pb_error_details'   => 'Fehler beim Senden des Pingbacks:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Artikelverzeichnis',
+    'title_year' => 'Artikelverzeichnis für %d',
+    'title_month_year' => 'Artikelverzeichnis für %s %d',
+    'nav_top' => 'Zurück zum Artikelverzeichnis',
+    'no_articles' => 'Keine Artikel.'
+);
+
+################################################################################
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks) 
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array (
+    'new_string'  => '%n neue %i in den letzten %t %s',
+    'new_last'    => 'letzte %t %s',
+    'minutes'     => 'Minuten',
+    'hours'       => 'Stunden',
+    'days'        => 'Tage',
+    'weeks'       => 'Wochen',
+    'months'      => 'Monate',
+    'minute'      => 'Minute',
+    'hour'        => 'Stunde',
+    'day'         => 'Tag',
+    'week'        => 'Woche',
+    'month'       => 'Monat'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => 'Suchen',
+    'limit_results' => 'Anzahl Ergebnisse',
+    'submit'        => 'Abschicken',
+    'edit'          => 'Ändern',
+    'admin_home'    => 'Admin Home',
+    'create_new'    => 'Neu anlegen',
+    'enabled'       => 'Aktiv',
+    'title'         => 'Titel',
+    'type'          => 'Typ',
+    'topic'         => 'Kategorie',
+    'help_url'      => 'URL f. Hilfe-Datei',
+    'save'          => 'Speichern',
+    'cancel'        => 'Abbruch',
+    'delete'        => 'Löschen',
+    'copy'          => 'Kopieren',
+    'no_results'    => '- Keine Einträge gefunden -',
+    'data_error'    => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'Kommentare erlaubt',
+    -1  => 'Keine Kommentare'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => 'Flach',
+    'nested'    => 'Verschachtelt',
+    'threaded'  => 'Nach Thema',
+    'nocomment' => 'Keine Kommentare'
+);
+
+$LANG_cookiecodes = array(
+    0       => '(gar nicht)',
+    3600    => '1 Stunde',
+    7200    => '2 Stunden',
+    10800   => '3 Stunden',
+    28800   => '8 Stunden',
+    86400   => '1 Tag',
+    604800  => '1 Woche',
+    2678400 => '1 Monat'
+);
+
+$LANG_dateformats = array(
+    0   => 'Defaulteinstellung'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Normaler Artikel',
+    1 => 'Hauptartikel'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Nur unter der Kategorie',
+    1 => 'Auf der Startseite'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'als Text',
+    'html'      => 'in HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Älteste zuerst',
+    'DESC' => 'Neueste zuerst'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'Trackbacks erlaubt',
+    -1  => 'Keine Trackbacks'
+);
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/hebrew.php 1.4.0sr5-1/cpanel-glprivate/language/hebrew.php
--- 1.3.11sr1/cpanel-glprivate/language/hebrew.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/hebrew.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,6 +1,11 @@
 <?php
 
 ###############################################################################
+# hebrew.php # last Update  17/7/2006
+# Version 1.4 #1.6
+# Copyright (C) http://lior.weissbrod.com
+#
+# Originally:
 # hebrew.php # last Update  07/03/2004 23:35
 # this is "hebrew.php" Written by Tal Vizel tal-hebrew-lang-gl@1212.co.il
 # This is the Hebrew language page for GeekLog!
@@ -26,6 +31,7 @@
 ###############################################################################
 
 $LANG_CHARSET = 'utf-8';
+$LANG_DIRECTION = 'rtl';
 
 ###############################################################################
 # Array Format:
@@ -43,7 +49,7 @@
 
 $LANG01 = array(
     1 => 'נכתב על-ידי',
-    2 => 'פרטים נוספים',
+    2 => 'המאמר המלא',
     3 => 'תגובות',
     4 => 'עריכה',
     5 => 'סקר השבוע',
@@ -60,101 +66,111 @@
     16 => 'סקרים',
     17 => 'משתמשים',
     18 => 'שאילתת SQL',
-    19 => 'התנתק',
+    19 => 'התנתקות',
     20 => 'פרטי משתמש',
     21 => 'שם משתמש',
     22 => 'קוד משתמש',
     23 => 'רמת אבטחה',
-    24 => 'אורח/ת באתר',
+    24 => 'משתמש אנונימי',
     25 => 'תגובה',
-    26 => 'אין אתר זה אחרי לחומר הנכתב בו. האחריות על על כותבי ההודעות בלבד!',
-    27 => 'ההודעה החדשה ביותר',
-    28 => 'מחק',
+    26 => 'אין אתר זה אחראי לחומר הנכתב בו. האחריות על על כותבי התגובות בלבד!',
+    27 => 'המאמר החדש ביותר',
+    28 => 'מחיקה',
     29 => 'לא נרשמו תגובות',
     30 => 'מאמרים ישנים',
-    31 => 'אפשר כתיבת HTML',
+    31 => 'פקודות HTML מורשות:<br>',
     32 => 'הודעת שגיאה, חסר שם משתמש!',
     33 => 'הודעת שגיאה, לא מצליח לכתוב לקובץ log',
-    34 => 'ישנה שגיאה! Error',
-    35 => 'התנתק Logout',
+    34 => 'שגיאה',
+    35 => 'התנתק',
     36 => 'בשעה:',
-    37 => 'טרם נכתבו הודעות  ',
-    38 => '38',
+    37 => 'טרם נכתבו מאמרים',
+    38 => 'סינדקיציית תוכן',
     39 => 'רענן',
-    40 => '40',
-    41 => 'אורח',
-    42 => 'נכתב על-ידי:',
-    43 => 'הוסף תגובה',
+    40 => 'מוגדר לכם <tt>register_globals = Off</tt> ב-<tt>php.ini</tt> שלכם. עם זאת, דרוש ש- <tt>register_globals</tt> יהיה <strong>on</strong>. לפני שהנכם ממשיכים, אנא הגדירו אותו על <strong>on</strong> ואתחלו מחדש את שרת הרשת שלכם.',
+    41 => 'אורחים',
+    42 => 'נכתב על ידי:',
+    43 => 'הגיבו לזה',
     44 => 'ראשי',
     45 => 'מספר הודעת שגיאה של MySQL:',
     46 => 'הודעת שגיאה של MySQL:',
     47 => 'אפשרויות משתמש',
     48 => 'פרטי חשבון',
-    49 => 'מאפיני תצוגה',
-    50 => 'Error with SQL statement',
+    49 => 'מאפייני תצוגה',
+    50 => 'שגיאה עם SQL statement',
     51 => 'עזרה',
     52 => 'חדש',
-    53 => 'Admin Home',
-    54 => 'לא מצליח לפתוח את הקובץ!',
-    55 => 'שגיאה ב-',
-    56 => 'הצבע',
+    53 => 'מרכז הניהול',
+    54 => 'אי אפשר היה לפתוח את הקובץ.',
+    55 => 'שגיאה ב:',
+    56 => 'הצביעו',
     57 => 'סיסמה',
     58 => 'כניסה',
-    59 => "אם אין לך עדיין חשבון, זה הזמן <a href=\"{$_CONF['site_url']}/users.php?mode=new\">להרשם</a> לאתר",
-    60 => 'הוסף תגובה',
-    61 => 'צור חשבון חדש',
+    59 => "אם אין לכם עדיין חשבון, זה הזמן <a href=\"{$_CONF['site_url']}/users.php?mode=new\">להירשם</a> לאתר",
+    60 => 'הוספת תגובה',
+    61 => 'צרו חשבון חדש',
     62 => 'מילים',
-    63 => 'מאפיני תגובה',
-    64 => 'שלח את המאמר לחבר',
-    65 => 'גרסא להדפסה',
+    63 => 'מאפייני תגובה',
+    64 => 'שילחו את המאמר לחבר',
+    65 => 'צפו בגירסה להדפסה',
     66 => 'היומן שלי',
-    67 => 'ברוך הבא ל',
+    67 => 'ברוכים הבאים ל: ',
     68 => 'בית',
-    69 => 'קשר',
+    69 => 'צרו קשר',
     70 => 'חיפוש',
-    71 => 'הוסף הודעה',
-    72 => 'לינקים',
-    73 => 'מאגר הסקרים',
+    71 => 'הוסיפו מאמר',
+    72 => 'קישורי רשת',
+    73 => 'סקרים בעבר',
     74 => 'יומן',
     75 => 'חיפוש מתקדם',
-    76 => 'סטטיסטיקה',
-    77 => 'הרחבות לGeeklog',
-    78 => 'אירועים צפויים',
-    79 => 'חדש באתר',
-    80 => 'stories in last',
-    81 => 'הודעות ב',
-    82 => 'שעות',
+    76 => 'סטטיסטיקת אתר',
+    77 => 'הרחבות תוכנה',
+    78 => 'אירועים קרובים',
+    79 => 'מה חדש',
+    80 => 'מאמרים ב:',
+    80 => 'מאמר ב:',
+    82 => 'השעות האחרונות',
     83 => 'תגובות',
     84 => 'קישורים',
-    85 => 'ב 48 השעות האחרונות',
+    85 => 'ב-48 השעות האחרונות',
     86 => 'אין תגובות חדשות',
     87 => 'בשבועיים האחרונים',
     88 => 'אין קישורים חדשים',
     89 => 'אין אירועים צפויים',
     90 => 'דף הבית',
-    91 => 'דף זה נוצר ב',
+    91 => 'דף זה נוצר תוך',
     92 => 'שניות',
     93 => 'זכויות יוצרים',
-    94 => 'כל זכויות היוצרים בדף זה שייכים לכותבים',
-    95 => 'מופעל על-ידי',
+    94 => 'כל הזכויות והסימנים המסחריים בדף זה שמורים לבעליהם',
+    95 => 'מונע על גבי',
     96 => 'קבוצות',
-    97 => 'רשימה בינלאומית',
-    98 => 'תוספים והרחבות',
+    97 => 'רשימות מילים',
+    98 => 'הרחבות Plugins',
     99 => 'מאמרים',
     100 => 'אין מאמרים חדשים',
-    101 => 'האירועים שלך',
+    101 => 'האירועים שלכם',
     102 => 'אירועים כלליים',
     103 => 'יצירת גיבוי',
-    104 => 'על-ידי',
-    105 => 'משתמשי דואר',
+    104 => 'על ידי',
+    105 => 'שליחת דואר למשתמשים',
     106 => 'נצפה',
-    107 => 'GL Version Test',
-    108 => 'Clear Cache',
-    109 => 'Report abuse',
-    110 => 'Report this post to the site admin',
-    111 => 'View PDF Version',
-    112 => 'Registered Users',
-    113 => 'Documentation'
+    107 => 'בדיקת גירסת תוכנה',
+    108 => 'נקו את זיכרון המטמון',
+    109 => 'דווחו על שימוש לרעה',
+    110 => 'דווחו על תגובה זו למנהל האתר',
+    111 => 'צפו בגירסת PDF',
+    112 => 'משתמשים רשומים',
+    113 => 'דוקומנטציה',
+    114 => 'הפניות',
+    115 => 'אין הפניות עם תגובות חדשות',
+    116 => 'הפנייה',
+    117 => 'ספרייה',
+    118 => 'אנא המשיכו לקרוא בדף הבא:',
+    119 => "איבדתם את <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">סיסמתכם</a>?",
+    120 => 'קישור קבוע לתגובה זו',
+    121 => 'תגובות (%d)',
+    122 => 'הפניות (%d)',
+    123 => 'HTML מותר לגמרי לשימוש'
 );
 
 ###############################################################################
@@ -166,15 +182,15 @@
     3 => 'מתי',
     4 => 'איפה',
     5 => 'תיאור',
-    6 => 'הוסף אירוע',
+    6 => 'הוספת אירוע',
     7 => 'אירועים צפויים',
     8 => 'על-ידי הוספת אירוע זה ליומנך יתאפשר לך לצפות בקלות רק באירועים המענינים אותך על-ידי לחיצה על "היומן שלי" מאזור "אפשרויות המשתמש" .',
-    9 => 'הוסף ליומן שלי',
-    10 => 'הסר מהיומן שלי',
+    9 => 'הוספה ליומן שלי',
+    10 => 'הסרה מהיומן שלי',
     11 => "הוספת אירוע ליומן של {$_USER['username']}",
     12 => 'אירוע',
-    13 => 'מתחיל ב',
-    14 => 'מסתיים ב',
+    13 => 'מתחיל ב-',
+    14 => 'מסתיים ב-',
     15 => 'חזרה ליומן'
 );
 
@@ -182,181 +198,176 @@
 # comment.php
 
 $LANG03 = array(
-    1 => 'הוסף הערה',
-    2 => 'מאפיין הוספה',
-    3 => 'התנתק',
-    4 => 'צור חשבון',
+    1 => 'הוספת תגובה',
+    2 => 'מצב תגובה',
+    3 => 'התנתקות',
+    4 => 'יצירת חשבון',
     5 => 'שם משתמש',
-    6 => 'כדי לכתוב הודעות באתר זה עליך להתחבר תחילה. אם אין לך עדיין חשבון, ניתן ליצור חשבון חדש על-ידי השדות הנמצאים מטה, תודה. ',
-    7 => 'הודעתך האחרונה הייתה: ',
-    8 => "שניות מההודעה האחרונה שלך. באתר זה יש מגבלה והזמן המינימלי הנדרש בין שני ההודעות הוא: {$_CONF['commentspeedlimit']}",
-    9 => 'הערה',
-    10 => '10 LANG03',
-    11 => 'הוסף תגובה',
-    12 => 'חובה למלא את שדות הכותרת והתגובה על-מנת להעלות הודעה.',
+    6 => 'אתר זה דורש הזדהות במערכת כדי לכתוב תגובה, נא הזדהו. אם אין ברשותכם חשבון הינכם יכולים להשתמש בטופס שלהלן כדי ליצור אחד.',
+    7 => 'תגובתכם האחרונה הייתה לפני ',
+    8 => " שניות. אתר זה דורש לפחות {$_CONF['commentspeedlimit']} שניות בין תגובות",
+    9 => 'תגובה',
+    10 => 'שליחת דיווח',
+    11 => 'הוספת תגובה',
+    12 => 'נא למלא את שדות הכותרת והתגובה, מפני שהם נחוצים כדי להגיב.',
     13 => 'המידע שלך',
-    14 => 'צפייה לפני ההוספה',
-    15 => '15 LANG03 ריק ',
+    14 => 'תצוגה מקדימה',
+    15 => 'דווחו על תגובה זו',
     16 => 'כותרת',
     17 => 'שגיאה',
     18 => 'דברים חשובים',
-    19 => 'נא להשתדל להגיב על נושא ההודעה ולא להעלות נושאים חדשים, תודה.',
-    20 => 'נא להגיב על הודעות קודמות ולא לפתוח נושאים חדשים, תודה.',
-    21 => 'נא לקרוא את התגובות שנכתבו לפניך, בכדי לא לחזור על דברים שכבר נאמרו, תודה.',
-    22 => 'השתמש בכותרת שתתאר בבירור את נושא ההודעה/מאמר שלך.',
-    23 => 'האימיל שלך לא יוצג לגולשים באתר',
-    24 => 'משתמש חסוי',
-    25 => 'Are you sure you want to report this post to the site admin?',
-    26 => '%s reported the following abusive comment post:',
-    27 => 'Abuse report'
+    19 => 'נא להשתדל להגיב על נושא המאמר.',
+    20 => 'נא להשתדל להגיב על תגובות קודמות ולא לפתוח נושאים חדשים.',
+    21 => 'נא לקרוא את התגובות שנכתבו לפניכם בכדי לא לחזור על דברים שכבר נאמרו.',
+    22 => 'השתמש בכותרת שתתאר בבירור את נושא התגובה שלך.',
+    23 => 'האימייל שלך *לא* יוצג לגולשים באתר',
+    24 => 'משתמש אנונימי',
+    25 => 'האם הנכם בטוחים שברצונכם לדווח על תגובה זו למנהלי האתר?',
+    26 => '%s דיווח/ה על התגובה הפוגענית הבאה:',
+    27 => 'דיווח על שימוש לרעה'
 );
 
 ###############################################################################
-# users.php
+# usersettings.php
 
 $LANG04 = array(
-    1 => 'פרופיל משתמש של',
-    2 => 'שם משתמש',
-    3 => 'שם ושם משפחה',
-    4 => 'סיסמה',
-    5 => 'דואל',
+    1 => 'פרופיל המשתמש של',
+    2 => 'User Name',
+    3 => 'שמכם המלא',
+    4 => 'Password',
+    5 => 'Email',
     6 => 'אתר בית',
-    7 => 'פרטים אישיים:',
+    7 => 'פרטים אישיים',
     8 => 'מפתח PGP',
-    9 => 'שמור נתונים',
+    9 => 'שמירת הנתונים',
     10 => 'עשרת התגובות האחרונות של',
     11 => 'אין תגובות',
     12 => 'מאפיני המשתמש של',
-    13 => 'Email Nightly Digest',
-    14 => 'סיסמה זו נוצרה בצורה רנדומלית, אולם מומלץ לשנות אותה מוקדם ככל האפשר. על מנת לעשות זאת, כנס/י לחשבונך הקליד/י על מאפייני החשבון, מתפריט שנמצא בחשבונך.',
-    15 => "יצירת חשבונך ב{$_CONF['site_name']} הושלם בהצלחה!. כעת, על-מנת להשתמש בו עליך להכניס בכניסה את שם המשתמש שלך ואת הסיסמא שקיבלת כאן. מומלץ לשמור את האימייל הזה במקום נגיש כדי להקל עליך כניסות עתידיות לחשבונך.",
-    16 => 'פרטי חשבונך: ',
+    13 => 'שילחו באימייל את המאגר הלילי',
+    14 => 'סיסמה זו נוצרה בצורה רנדומלית, אולם מומלץ לשנות אותה מוקדם ככל האפשר. על מנת לעשות זאת, היכנסו לחשבונכם והקלידו על מאפייני החשבון בתפריט אפשרויות המשתמש.',
+    15 => "יצירת חשבונך ב-\n{$_CONF['site_name']}\n הושלמה בהצלחה! כעת, על-מנת להשתמש בו עליך להכניס בכניסה את שם המשתמש שלך ואת הסיסמה שקיבלת כאן. מומלץ לשמור את האימייל הזה במקום נגיש כדי להקל עליך בכניסות עתידיות לחשבונך.",
+    16 => 'פרטי חשבונך',
     17 => 'החשבון לא קיים',
-    18 => 'כתובת האימייל שהוקלד לא תקני!',
-    19 => 'שם המשתמש או הסיסמא שהוקלדו תפוסים!',
-    20 => 'כתובת האימייל שהוקלד לא תקני!',
-    21 => 'שגיאה!',
-    22 => "רישום ב{$_CONF['site_name']}!",
-    23 => "יצירת חשבון באתר {$_CONF['site_name']}, תאפשר לך ליהנות ממגוון אפשרויות ושירותים מתקדמים. למי שלא יהיה חשבון יוכל לפרסם הודעות  כמשתמש אנונימי בלבד וללא יכולת קבלת תגובות למייל או שימוש שפונקציות מתקדמות. לידיעתך, כתובת הדואל שתימסר באתר <b>לא</b> תתפרסם או תהיה גלויה באתר.",
-    24 => 'סיסמתך תשלח לכתובת האימייל שהכנסת.',
-    25 => 'האם שחכת את הסיסמה?',
-    26 => 'הכנס את שם המשתמש שלך ולחץ על <b> שלח סיסמה חדשה לאימייל </b> וסיסמה חדשה תישלח לאימייל שרשום במערכת.',
-    27 => 'הרשם/מי עכשיו!',
-    28 => 'שלח סיסמה חדשה לאימייל',
-    29 => 'התנתק/י מ',
-    30 => 'התחבר מה',
-    31 => 'הפונקציה שבחרת לעשות דורשת התחברות לאתר על-ידי הכנסת שם משתמש וסיסמה',
-    32 => 'תוספת טקסט להודעות',
-    33 => 'לא להציג בפומבי',
-    34 => 'זה שמך האמתי',
-    35 => 'הכנס/י סיסמה חדשה (הסיסמה הישנה תשתנה לסיסמה זו)',
-    36 => 'לא לשכוח להכניס http://',
-    37 => 'אשר/י את תגובתך',
-    38 => 'הכל באחריותך, כולם יכולים לקרא זאת!',
-    39 => 'מפתח ה PGP הפומבי שלך',
-    40 => 'בטל הצגת איקון המדור',
-    41 => 'Willing to Moderate',
-    42 => 'תצורת הצגת התאריך',
-    43 => 'מקסימום הודעות לדף',
-    44 => 'בטל הצגת קוביות מידע',
+    18 => 'כתובת האימייל שהוקלדה לא נראית תקינה',
+    19 => 'שם המשתמש או הסיסמה שהוקלדו כבר תפוסים',
+    18 => 'כתובת האימייל שהוקלדה לא נראית תקינה',
+    21 => 'שגיאה',
+    22 => "רישום ב-{$_CONF['site_name']}!",
+    23 => "יצירת חשבון תיתן לך את כל התועלות שטמונות בחברות ב-{$_CONF['site_name']} ותאפשר לך לפרסם תגובות ופריטים נוספים כעצמך. ללא חשבון, תוכלו רק לפרסם הודעות אנונימיות. לידיעתך, כתובת הדואל שלך <b>לעולם לא</b> תתפרסם באופן גלוי באתר זה.",
+    24 => 'סיסמתכם תישלח לכתובת האימייל שתכניסו.',
+    25 => 'האם שכחת את סיסמתך?',
+    26 => 'הכניסו את שם המשתמש שלכם <em>או</em> את כתובת האימייל שאיתם נרשמתם וליחצו על שליחת סיסמה לאימייל. הוראות כיצד להגדיר סיסמה חדשה ישלחו לכתובת האימייל שרשומה במערכת.',
+    27 => 'הירשמו עכשיו!',
+    28 => 'שלח סיסמה חדשה באימייל',
+    29 => 'התנתק/ה מ:',
+    30 => 'התחבר/ה מ:',
+    31 => 'הפונקציה שבה בחרתם דורשת התחברות לאתר על ידי הכנסת שם משתמש וסיסמה',
+    32 => 'חתימה',
+    33 => 'לעולם לא מוצג בפומבי',
+    34 => 'זהו שמכם האמיתי',
+    35 => 'הכניסו סיסמה רצויה חדשה',
+    36 => 'מתחיל ב-<span dir=ltr>http://</span>',
+    37 => 'מצורפת לתגובות שלכם',
+    38 => 'הכל על עצמך! כולם יכולים לקרוא זאת',
+    39 => 'מפתח ה-PGP הפומבי שלך',
+    40 => 'ללא הצגת אייקוני נושאים',
+    41 => 'מוכן להיות moderator',
+    42 => 'פורמט תאריך',
+    43 => 'מקסימום מאמרים',
+    44 => 'ללא קוביות מידע',
     45 => 'מאפייני תצוגה של',
-    46 => 'Excluded Items for',
-    47 => 'News box Configuration for',
-    48 => 'הודאות/מאמרים',
-    49 => 'לא יוצג האייקון המופיע לצד ההודעה',
-    50 => 'בטל/י סימון אם אנך מעוניין בפונקציה זו',
-    51 => 'יופיעו רק הודעות ללא הקוביות בצדדים',
-    52 => 'ברירת המחדל היא 10',
-    53 => 'Receive the days stories every night',
-    54 => 'Check the boxes for the topics and authors you don\'t want to see.',
-    55 => 'If you leave these all unchecked, it means you want the default selection of boxes. If you start selecting boxes, remember to set all of them that you want because the default selection will be ignored. Default entries are displayed in bold.',
+    46 => 'ללא פריטים של',
+    47 => 'הגדרת קוביית מידע של חדשות עבור',
+    48 => 'נושאים',
+    49 => 'ללא האייקון המופיע לצד המאמר',
+    50 => 'בטלו את הסימון אם אינכם מעוניינים בפונקציה זו',
+    51 => 'יופיעו מאמרים בלבד ללא הקוביות בצדדים',
+    52 => 'ברירת המחדל היא',
+    53 => 'קבלו את מאמרי היום כל לילה',
+    54 => 'סמנו את הנושאים והכותבים שאינכם מעוניין לראות.',
+    55 => 'אם תשאירו את כולם לא מסומנים, הכוונה היא שהנכם מעוניינים בבחירת ברירת המחדל של קוביות המידע. אם תחלו לבחור קוביות, זיכרו לבחור כל מה שתרצו לראות מפני שבחירת ברירת המחדל כבר לא תהיה רלבנטית. פריטים שנבחרים כברירת מחדל מסומנים בהדגשה.',
     56 => 'כותבים',
-    57 => 'תצורת התצוגה',
-    58 => 'סדר ההודעות/מאמרים',
+    57 => 'אופן תצוגה',
+    58 => 'סדר מיון',
     59 => 'הגבלת תגובות',
-    60 => 'איך את/ה רוצה שהתגובות יוצגו?',
-    61 => 'קודם הודעות חדשות או ישנות?',
+    60 => 'איך הנכם מעוניינים שהתגובות יוצגו?',
+    61 => 'קודם חדש או ישן?',
     62 => 'ברירת המחדל היא 100',
-    63 => "הסיסמה נשלחה אליך באמצעות המייל ואתה אמור לקבל אותה בכל רגע. אנא עקוב אחר ההוראות שבמייל. ברכות על הצתרפותך ל\n{$_CONF['site_name']}",
-    64 => 'מאפייני תגובה של',
-    65 => 'נסה/י להכנס שוב',
-    66 => "You may have mistyped your login credentials.  Please try logging in again below. Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?",
-    67 => 'חברים חדשים מאז',
-    68 => 'שהמערכת תזכור אותי ל',
-    69 => 'לכמה זמן את/ה רוצה שהמערכת תזכור אותך לאחר שתכנס/י לאתר?',
-    70 => "בחר/י את מראה האתר ואופן תצורת התוכן ל{$_CONF['site_name']}",
-    71 => "אחת מהאפשרויות של אתר {$_CONF['site_name']} היא להתאים את תוכן האתר לטעמך האישי, הן התוכן והן במראה.על מנת להינות מיתרונות אלו, עליך <a href=\"{$_CONF['site_url']}/users.php?mode=new\">להירשם</a> with {$_CONF['site_name']}. אם אתה כבר רשום באתר אז תכניס/י שם משתמש וסיסמה והתחל להנות מהיותך רשום/ה",
+    63 => "הסיסמה נשלחה אליכם באמצעות האימייל והנכם אמור לקבל אותה בכל רגע. אנא עיקבו אחר ההוראות שבאימייל ואנו מודים לכם על שימושכם ב-\n{$_CONF['site_name']}",
+    64 => 'מאפייני תגובות של',
+    65 => 'נסו להיכנס שוב',
+    66 => "יכול להיות שטעיתם באיות נתוני הכניסה לחשבון שלכם.  אנא נסו להתחבר שנית בתיבה שמתחת. האם הינכם <a href=\"{$_CONF['site_url']}/users.php?mode=new\">משתמשים חדשים</a>?",
+    67 => 'חבר/ה חדש/ה מאז',
+    68 => 'המערכת תזכור אותי עד',
+    69 => 'לכמה זמן הנכם מעוניינים שהמערכת תזכור אתכם לאחר שתיכנסו אליה?',
+    70 => "התאימו אישית את מראה האתר ואת התוכן של {$_CONF['site_name']}",
+    71 => "אחת מהאפשרויות של אתר {$_CONF['site_name']} היא שהנכם יכולים להתאים אישית את התוכן שאתם מקבלים ולשנות את המראה הכללי של האתר. על מנת ליהנות מיתרונות אלו, עליכם <a href=\"{$_CONF['site_url']}/users.php?mode=new\">להירשם</a> ב-{$_CONF['site_name']}. האם אתם כבר רשומים? אם כן, השתמשו בטופס הכניסה והתחברו!",
     72 => 'מראה האתר',
     73 => 'שפה',
-    74 => 'שנה את מראה האתר!',
-    75 => 'קבלת הודעות/מאמרים באימייל',
-    76 => 'בחירה באחת מהאפשרויות הרשומות מטה תאפשר לך לקבל, בסוף כל יום, את כל ההודעות החדשות שייתווספו להודעה או מאמר זה. מומלץ לבחור רק בנושאים המעניינים אותך ביכדי להמנע מקבלת הודעות רבות מדי באימייל',
+    74 => 'שנו את מראה האתר!',
+    75 => 'נושאים שישלחו באימייל עבור',
+    76 => 'בחירה באחת מהאפשרויות הרשומות שלהלן תאפשר לך לקבל, בסוף כל יום, את כל המאמרים החדשים שייתווספו לנושא זה. מומלץ לבחור רק בנושאים המעניינים אותך!',
     77 => 'תמונה',
-    78 => 'הוסף תמונה של עצמך',
-    79 => 'לחץ/י כאן בכדי למחוק את התמונה',
-    80 => 'התחבר',
-    81 => 'שלח דואל',
-    82 => 'עשרת ההודעות האחרונות של ',
-    83 => 'הצג סטטיסטיקה למשתמש ',
-    84 => 'סהכ הודעות:',
-    85 => 'סהכ  תגובות:',
-    86 => 'מצא הודעות שנכתבו על-ידי ',
-    87 => 'שם המשתמש שלך הוא ',
-    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
-    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
-    90 => 'הכנס את סיסמתך החדשה בדף זה. לידיעתך סיסמתך הישנה תישאר בתוקף עד שתלחץ על אישור בדף זה.',
-    91 => 'שנה סיסמה',
-    92 => 'הכנס סיסמה חדשה ',
-    93 => 'הבקשה האחרונה שלך לקבלת סיסמה חדשה הייתה לפני%d  שניות. מסיבות אבטחה דרוש להמתין לפחות%d  שניות.',
-    94 => 'מחק את חשבון של  מהמערכת',
-    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
-    96 => 'מחק חשבון זה',
-    97 => 'Confirm Account Deletion',
-    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    78 => 'הוספת תמונה של עצמך!',
+    79 => 'ליחצו כאן בכדי למחוק את התמונה',
+    80 => 'התחברו',
+    81 => 'שילחו אימייל',
+    82 => 'עשרת המאמרים האחרונים של',
+    83 => 'הצג סטטיסטיקה עבור המשתמש',
+    84 => 'סך הכל מאמרים:',
+    85 => 'סך הכל תגובות:',
+    86 => 'מיצאו כל מה שנכתב על ידי',
+    87 => 'שם המשתמש שלך הוא',
+    88 => "מישהו (יתכן שאתם) ביקש סיסמה חדשה לחשבונכם \n\"%s\"\n ב-\n{$_CONF['site_name']}.\n\n אם הנכם אכן מעוניינים לעשות פעולה זו, אנא ליחצו על הלינק הבא:\n\n",
+    89 => "אם אינכם מעוניין שפעולה זו תתרחש, פשוט התעלמו מהודעה זו והבקשה תבוטל (סיסמתכם תישאר ללא שינוי).\n\n",
+    90 => 'הכניסו את סיסמתכם החדשה בדף זה. אנא שימו לב שסיסמתכם הישנה תישאר בתוקף עד שתשלחו טופס זה.',
+    91 => 'קיבעו סיסמה חדשה',
+    92 => 'הכניסו סיסמה חדשה',
+    93 => 'הבקשה האחרונה שלכם לקבלת סיסמה חדשה הייתה לפני %d שניות. אתר זה דורש לפחות %d שניות בין בקשות סיסמה.',
+    94 => 'מיחקו את החשבון "%s"',
+    95 => 'ליחצו על הכפתור "מחיקת חשבון" שמתחת כדי למחוק את חשבונכם ממאגר הנתונים שלנו. אנא שימו לב שכל המאמרים והתגובות שכתבתם תחת חשבון זה <strong>לא</strong> ימחקו, אלא ייראו כאילו נכתבו על ידי "משתמש אנונימי".',
+    96 => 'מחיקת חשבון',
+    97 => 'אשרו את מחיקת החשבון',
+    98 => 'האם הנכם בטוחים שאתה רוצים למחוק את חשבונכם? משמעות הדבר היא שלא תוכלו להתחבר לאתר יותר (אלא אם כן תיצרו משתמש חדש). אם הנכם בטוחים, ליחצו שוב על "מחיקת חשבון" שבטופס מתחת.',
     99 => 'דרישות הפרטיות של',
-    100 => 'קבלת הודעות מהאדמיניסטראטור',
-    101 => 'אשר קבלת הודעות במייל ממנהל האתר ',
-    102 => 'קבלת הודעות ממשתמשים',
-    103 => 'אישר קבלת הודעות ממשתמשים באתר',
-    104 => 'הצג מי נמצא באתר',
-    105 => 'מציג את כל מי שנמצא באתר',
-    106 => 'Location',
-    107 => 'Shown in your public profile'
+    100 => 'קבלת הודעות באימייל ממנהלי האתר',
+    101 => 'אשרו קבלת הודעות באימייל ממנהלי האתר',
+    102 => 'הודעות אימייל ממשתמשים',
+    103 => 'אשרו קבלת הודעות באימייל ממשתמשים באתר',
+    104 => 'הצגת סטטוס החיבור שלכם',
+    105 => 'הופיעו בקוביית המידע מי באתר',
+    106 => 'מיקום',
+    107 => 'מוצג בפרופיל הפומבי שלך',
+    108 => 'אשרו סיסמה חדשה',
+    109 => 'הכניסו את הסיסמה החדשה שוב פה',
+    110 => 'סיסמה נוכחית',
+    111 => 'אנא הכניסו את הסיסמה הנוכחית שלכם',
+    112 => 'עברתם את מספר הנסיונות המותרים להיכנס למערכת. אנא נסו שוב מאוחר יותר.',
+    113 => 'נסיון כניסה נכשל',
+    114 => 'החשבון נוטרל',
+    115 => 'חשבונכם נוטרל, אינכם יכולים להיכנס למערכת. אנא צרו קשר עם אחד המנהלים.',
+    116 => 'החשבון מחכה להפעלה',
+    117 => 'חשבונכם כרגע מחכה להפעלה על ידי מנהל. לא תוכלו להיכנס למערכת עד שחשבונכם יאושר.',
+    118 => "חשבונכם ב-{$_CONF['site_name']} הופעל עכשיו על ידי מנהל. תוכלו עכשיו להיכנס לאתר בכתובת שלהלן על ידי שימוש בשם המשתמש (<username>) ובסיסמה שנשלחו אליכם מוקדם יותר באימייל.",
+    119 => 'אם שכחתם את הסיסמה שלכם, תוכלו לבקש אחת חדשה בכתובת הבאה:',
+    120 => 'החשבון הופעל',
+    121 => 'שירות',
+    122 => 'מצטערים, אפשרות הרשמת משתמשים חדשים מנוטרלת',
+    123 => "האם אתם <a href=\"{$_CONF['site_url']}/users.php?mode=new\">משתמשים חדשים</a>?"
 );
 
 ###############################################################################
 # index.php
 
 $LANG05 = array(
-    1 => 'אין הודעות/כתבות חדשות להצגה',
-    2 => 'There are no news stories to display.  There may be no news for this topic or your user preferences may be too restrictive.',
-    3 => 'עבודר נושא %s ',
-    4 => 'הודעות/כתבות שנכתבו היום',
+    1 => 'אין חדשות להצגה',
+    2 => 'אין שום חדשות להצגה. ייתכן שאין שום חדשות בתוך הנושא הזה או שהגדרות המשתמש שלך מגבילות מדי',
+    3 => ' עבור נושא %s',
+    4 => 'המאמר המוצג של היום',
     5 => 'הבא',
     6 => 'הקודם',
-    7 => 'First',
-    8 => 'Last'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'פרטים',
-    2 => 'אין פרטים להצגה',
-    3 => 'הוסף קישור'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'הצבעתך נרשמה',
-    2 => 'הצבעתך התווספה לסקר',
-    3 => 'הצבע',
-    4 => 'סקרים במערכת',
-    5 => 'הצביעו',
-    6 => 'צפה בסקרים נוספים'
+    7 => 'הראשון',
+    8 => 'האחרון'
 );
 
 ###############################################################################
@@ -365,39 +376,39 @@
 $LANG08 = array(
     1 => 'הרעה שגיאה במשלוח ההודעה, אנא נסה/י שוב',
     2 => 'ההודעה נשלחה בהצלחה',
-    3 => 'וודא שהמייל לקבלת תגובה יהיה נכון',
-    4 => 'אנא מלא את השדות הבאים',
+    3 => 'וודאו שכתובת האימייל לקבלת תגובה תהיה נכונה',
+    4 => 'אנא מלאו את שמכם, את כתובת האימייל שלכם, את הנושא ואת ההודעה',
     5 => 'שגיאה, אין משתמש בשם שבחרת',
     6 => 'ההודעה לא נשלחה בהצלחה עקב שגיאה.',
-    7 => 'פרופיל המשתמש ל',
-    8 => 'שם השולח',
-    9 => 'אתר הביית',
-    10 => 'שלח הודעה ל:',
-    11 => 'שמך',
-    12 => 'מייל לקבלת תגובה',
+    7 => 'פרופיל המשתמש של',
+    8 => 'שם המשתמש',
+    9 => 'אתר בית',
+    10 => 'שלח הודעת אימייל ל:',
+    11 => 'שמכם',
+    12 => 'כתובת אימייל לקבלת תגובה',
     13 => 'נושא',
     14 => 'הודעה:',
     15 => 'HTML לא יתורגם',
-    16 => 'שלח',
-    17 => 'שלח את ההודעה/מאמר לחבר',
+    16 => 'שליחת ההודעה',
+    17 => 'שילחו את המאמר לחבר',
     18 => 'שם הנמען',
-    19 => 'כתובת המייל של הנמען',
+    19 => 'כתובת האימייל של הנמען',
     20 => 'שם השולח',
-    21 => 'כתובת המייל של השולח',
+    21 => 'כתובת האימייל של השולח',
     22 => 'חובה למלא את כל השדות',
-    23 => "This email was sent to you by %s at %s because they thought you might be interested in this article from {$_CONF['site_url']}.  This is not SPAM and the email addresses involved in this transaction were not saved to a list or stored for later use.",
-    24 => 'Comment on this story at',
-    25 => 'You must be logged in to user this feature.  By having you log in, it helps us prevent misuse of the system',
-    26 => 'חובה למלא את <b>כל</b>  השדות אחרת ההודעה <b>לא</b> תישלח.',
-    27 => 'כתוב הודעה קצרה',
-    28 => '%s wrote: ',
-    29 => "This is the daily digest from {$_CONF['site_name']} for ",
-    30 => ' Daily Newsletter for ',
+    23 => "אימייל זה נשלח אליכם על ידי %s מפני שחשבו שהנכם עשויים להתעניין במאמר הזה מתוך {$_CONF['site_url']}. זה לא ספאם וכתובות האימייל שהיו מעורבות בתקשורת זו לא נשמרו לרשימה או לשימוש מאוחר יותר.",
+    24 => 'הגיבו על מאמר זה ב:',
+    25 => 'הינכם חייבים להתחבר כדי להשתמש בתכונה זו. השימוש בהתחברות עוזר לנו למנוע שימוש לא נכון במערכת.',
+    26 => 'טופס זה יאפשר לכם לשלוח הודעת אימייל למשתמש הנבחר. כל השדות נחוצים.',
+    27 => 'הודעה קצרה',
+    28 => '%s כתב: ',
+    29 => "זהו המאגר היומי של {$_CONF['site_name']} עבור ",
+    30 => ' עלון החדשות היומי עבור ',
     31 => 'כותרת',
     32 => 'תאריך',
-    33 => 'ההודעה/מאמר המלא נמצא בכתובת:',
+    33 => 'קיראו את המאמר המלא ב:',
     34 => 'סוף ההודעה',
-    35 => 'Sorry, this user prefers not to receive any emails.'
+    35 => 'מצטערים, משתמש זה מעדיף לא לקבל כלל הודעות אימייל.'
 );
 
 ###############################################################################
@@ -409,46 +420,46 @@
     3 => 'כותרת',
     4 => 'הכל',
     5 => 'סוג',
-    6 => 'מאמר/הודעה',
+    6 => 'מאמרים',
     7 => 'תגובות',
     8 => 'כותבים',
     9 => 'הכל',
     10 => 'חיפוש',
     11 => 'תוצאות החיפוש',
-    12 => 'תואמים',
+    12 => 'התאמות',
     13 => 'תוצאות החיפוש: לא נמצאו מחרוזות תואמות',
-    14 => 'לא נמצאו התאמות לחיפושך',
-    15 => 'אנא נסה/י שוב',
+    14 => 'לא נמצאו התאמות לחיפושכם',
+    15 => 'אנא נסו שוב',
     16 => 'כותרת',
     17 => 'תאריך',
-    18 => 'נכתב על-ידי',
-    19 => "חפש בכל מאגר המידע של {$_CONF['site_name']} כולל בהודעות חדשות",
+    18 => 'נכתב על ידי',
+    19 => "חפשו בכל מאגר המידע של {$_CONF['site_name']} הכולל מאמרים חדשים וישנים",
     20 => 'תאריך',
-    21 => 'דואל',
-    22 => '(Date Format MM-DD-YYYY)',
-    23 => 'תוצאות',
-    24 => 'נמצאו',
-    25 => 'מתאימים ל',
-    26 => 'פריטים',
+    21 => 'עד ל-',
+    22 => '(פורמט תאריך YYYY-MM-DD)',
+    23 => 'צפיות',
+    24 => 'נמצאו %d פריטים',
+    25 => 'הצגת תוצאות עבור',
+    26 => 'פריטים ',
     27 => 'שניות',
-    28 => ' לא נמצאו מאמרים/הודעות או תגובות המתאימים לחיפוש שלך',
+    28 => ' לא נמצאו מאמרים או תגובות המתאימים לחיפוש שלך',
     29 => 'תוצאות החיפוש',
     30 => 'לא נמצאו קישורים תואמים',
-    31 => 'This plug-in returned no matches',
+    31 => 'Plugin זה לא החזיר שום תוצאות',
     32 => 'אירוע',
-    33 => 'URL',
+    33 => 'כתובת אתר',
     34 => 'מיקום',
     35 => 'יום שלם',
-    36 => 'לא נמצאו אירועים המתאימים לחיפושך',
+    36 => 'לא נמצאו אירועים המתאימים לחיפושכם',
     37 => 'האירועים שנמצאו הם',
     38 => 'הקישורים שנמצאו הם',
     39 => 'קישורים',
     40 => 'אירועים',
     41 => 'חובה להכניס לפחות 3 תווים.',
-    42 => 'Please use a date formatted as YYYY-MM-DD (year-month-day).',
-    43 => 'בדיוק כפי שהוקלד (חייבת להיות התאמה מדויקת של המחרוזת כדי שתהיה תוצאה)',
-    44 => 'כל המילים יחד (כל המילים חייבות להופיע אבל לא בהכרח בסדר כתיבתם)',
-    45 => 'כל אחת מהמילים (יהיו תוצאות גם אם רק מילה אחת תופיע)',
+    42 => 'אנא השתמשו בתאריך מפורמט בסגנון YYYY-MM-DD (יום-חודש-שנה).',
+    43 => 'ביטוי מדויק',
+    44 => 'כל המילים שהוכנסו',
+    45 => 'לפחות אחת מהמילים שהוכנסו',
     46 => 'הבא',
     47 => 'הקודם',
     48 => 'הכותב',
@@ -456,111 +467,122 @@
     50 => 'כניסות',
     51 => 'קישור',
     52 => 'מיקום',
-    53 => 'Story Results',
-    54 => 'Comment Results',
-    55 => 'the phrase',
-    56 => 'סיום',
-    57 => 'או'
+    53 => 'תוצאות מאמרים',
+    54 => 'תוצאות תגובות',
+    55 => 'מחרוזת החיפוש',
+    56 => 'וגם',
+    57 => 'או',
+    58 => 'תוצאות נוספות &gt;&gt;',
+    59 => 'תוצאות',
+    60 => 'בכל עמוד',
+    61 => 'הגדירו מחדש את החיפוש'
 );
 
 ###############################################################################
 # stats.php
 
 $LANG10 = array(
-    1 => 'סיכום סטטיסטי לאתר',
-    2 => 'כניסות למערכת',
-    3 => 'Stories(Comments) in the System',
-    4 => 'Polls(Answers) in the System',
-    5 => 'Links(Clicks) in the System',
-    6 => 'Events in the System',
-    7 => 'עשרת ההודעות הנצפות ביותר',
-    8 => 'כותרת ההודעה:',
-    9 => 'Views',
-    10 => 'It appears that there are no stories on this site or no one has ever viewed them.',
-    11 => 'Top Ten Commented Stories',
-    12 => 'Comments',
-    13 => 'It appears that there are no stories on this site or no one has ever posted a comment on them.',
-    14 => 'עשרת הסקרים הנצפים ביותר:',
-    15 => 'Poll Question',
-    16 => 'הצבעות',
-    17 => 'It appears that there are no polls on this site or no one has ever voted.',
-    18 => 'עשרת הלינקים הנצפים ביותר:',
-    19 => 'לינקים',
-    20 => 'כניסות',
-    21 => 'It appears that there are no links on this site or no one has ever clicked on one.',
-    22 => 'Top Ten Emailed Stories',
+    1 => 'סטטיסטיקת האתר',
+    2 => 'סך הכל כניסות למערכת',
+    3 => 'מאמרים (תגובות) במערכת',
+    4 => '',
+    5 => '',
+    6 => 'אירועים במערכת',
+    7 => 'עשרת המאמרים הנצפים ביותר',
+    8 => 'כותרת המאמר',
+    9 => 'צפיות',
+    10 => 'נראה שאין מאמרים באתר זה או שאף אחד עוד לא ראה אותם.',
+    11 => 'עשרת המאמרים עם הכי הרבה תגובות',
+    12 => 'תגובות',
+    13 => 'נראה שאין מאמרים באתר זה או שאף אחד עוד לא הגיב אליהם.',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => 'נראה שאין קישורים באתר זה או שאף אחד עוד לא לחץ עליהם.',
+    22 => 'עשרת המאמרים שהכי נשלחו באימייל',
     23 => 'אימיילים',
-    24 => 'It appears that no one has emaild a story on this site'
+    24 => 'נראה שאף אחד עוד לא שלח מאמר באימייל באתר זה',
+    25 => 'עשרת המאמרים שקיבלו הכי הרבה הפניות עם תגובות',
+    26 => 'לא נמצאו הפניות עם תגובות למאמרים.',
+    27 => 'מספר המשתמשים הפעילים',
+    28 => 'עשרת האירועים הפופולרייים ביותר',
+    29 => 'אירוע',
+    30 => 'צפיות',
+    31 => 'נראה שאין שום אירועים באתר זה או שאף אחד עוד לא הקיש עליהם.'
 );
 
 ###############################################################################
 # article.php
 
 $LANG11 = array(
-    1 => 'לינקים בהודעה זו',
-    2 => 'שלח את ההודעה/מאמר לחבר',
-    3 => 'גרסה להדפסה',
-    4 => 'אפשרויות להודעה זו:',
-    5 => 'PDF Story Format'
+    1 => 'קישורים רלבנטיים',
+    2 => 'שליחת המאמר לחבר',
+    3 => 'גירסה להדפסה',
+    4 => 'אפשרויות למאמר זה',
+    5 => 'המאמר בפורמט PDF'
 );
 
 ###############################################################################
 # submit.php
 
 $LANG12 = array(
-    1 => 'על-מנת לבצע %s עליך להיות משתמש רשום במערכת',
+    1 => 'על מנת לבצע %s עליכם להיות משתמשים רשומים במערכת',
     2 => 'כניסה',
     3 => 'משתמש חדש',
-    4 => 'אשר אירוע',
-    5 => 'אשר קישור',
-    6 => 'אשר מאמר',
-    7 => 'פעולה זו זמינה למשתמשים רשומים בלבד!',
-    8 => 'אישור',
-    9 => 'When submitting information for use on this site we ask that you follow the following suggestions...<ul><li>Fill in all the fields, they\'re required<li>Provide complete and accurate information<li>Double check those URLs</ul>',
+    4 => 'שילחו אירוע',
+    5 => '',
+    6 => 'שילחו מאמר',
+    7 => 'דרושה כניסה למערכת',
+    8 => 'שליחה',
+    9 => 'בעת שליחת מידע לשימוש באתר אנו מבקשים שתעקבו אחר ההמלצות הבאות...<ul><li>מלאו את כל השדות, הם נדרשים<li>הכניסו מידע מלא ומדויק<li>בידקו טוב כתובות של אתרים</ul>',
     10 => 'כותרת',
-    11 => 'קשור',
+    11 => 'קישור',
     12 => 'תאריך התחלה',
     13 => 'תאריך סיום',
     14 => 'מיקום',
-    15 => 'פרטים',
-    16 => 'אם יש פרטים נוספים, אנא הכנס/י אותם',
-    17 => 'קטגוריה',
-    18 => 'אחר',
-    19 => 'קרא לפני הוספה',
-    20 => 'חסרה קטגוריה!!',
-    21 => 'כאשר בוחרים <b>אחר</b> חיבים להכניס שם של קטגוריה',
-    22 => 'יש שדות ריקים שלא מולאו, עליך להשלים אותם ולאשר מחדש',
-    23 => 'יש למלא את <b>כל</b> השדות בטופס זה!',
-    24 => 'Submission Saved',
-    25 => 'Your %s submission has been saved successfully.',
-    26 => 'Speed Limit',
+    15 => 'תיאור',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => 'קיראו קודם',
+    20 => '',
+    21 => '',
+    22 => 'שגיאה: חסרים שדות',
+    23 => 'יש למלא את כל השדות בטופס זה. כל השדות נדרשים.',
+    24 => 'השליחה בוצעה',
+    25 => 'שליחת ה-%s שלך בוצעה בהצלחה.',
+    26 => 'הגבלת מהירות',
     27 => 'שם משתמש',
     28 => 'נושא',
     29 => 'מאמר',
-    30 => 'הודעתך האחרונה הייתה לפני',
-    31 => "נדרשים לפחות {$_CONF['speedlimit']}שניות בין הודעה אחת לשניה.",
+    30 => 'שליחתך האחרונה הייתה לפני ',
+    31 => " שניות. אתר זה דורש לפחות {$_CONF['speedlimit']} שניות בין שליחה אחת לשניה.",
     32 => 'תצוגה מקדימה',
     33 => 'תצוגה מקדימה של המאמר',
     34 => 'התנתקות',
     35 => 'לא ניתן להשתמש ב HTML',
-    36 => 'Post Mode',
-    37 => "Submitting an event to {$_CONF['site_name']} will put your event on the master calendar where users can optionally add your event to their personal calendar. This feature is <b>NOT</b> meant to store your personal events such as birthdays and anniversaries.<br><br>Once you submit your event it will be sent to our administrators and if approved, your event will appear on the master calendar.",
-    38 => 'הוסף אירוע ל',
-    39 => 'יומן ציבורי',
-    40 => 'יומן פרטי',
+    36 => 'מצב כתיבה',
+    37 => "הוספת אירוע ל-{$_CONF['site_name']} תשים אותו ביומן הראשי היכן שמשתמשים רשאים להוסיף אותו ליומנים האישיים שלהם. יכולת זו <b>אינה</b> מיועדת לאחסן את האירועים הפרטיים שלכם כמו ימי הולדת ותזכורות שנתיות.<br><br>ברגע שתפרסמו את האירוע שלכם הוא ישלח למנהלי האתר ואם יאושר, יופיע ביומן הראשי.",
+    38 => 'הוספת אירוע ל:',
+    39 => 'יומן ראשי',
+    40 => 'יומן אישי',
     41 => 'שעת סיום',
     42 => 'שעת התחלה',
     43 => 'אירוע שנמשך יום שלם',
     44 => 'שורת כתובת 1',
     45 => 'שורת כתובת 2',
-    46 => 'ישוב/עיר',
+    46 => 'עיר/ישוב',
     47 => 'מדינה',
     48 => 'מיקוד',
     49 => 'סוג אירוע',
-    50 => 'ערוך סוג אירוע',
+    50 => 'ערוך את סוגי האירועים',
     51 => 'מיקום',
-    52 => 'מחק',
-    53 => 'Create Account'
+    52 => 'מחיקה',
+    53 => 'יצירת חשבון'
 );
 
 ###############################################################################
@@ -572,312 +594,293 @@
 
 $LANG20 = array(
     1 => 'נדרשים פרטי זיהוי משתמש',
-    2 => 'פרטי משתמש אינם נכונים!',
-    3 => 'חסרה סיסמא',
+    2 => 'לא אושר! פרטי המשתמש שגויים',
+    3 => 'הסיסמה לא נכונה למשתמש',
     4 => 'שם משתמש',
-    5 => 'סיסמא',
-    6 => 'All access to administrative portions of this web site are logged and reviewed.<br>This page is for the use of authorized personnel only.',
-    7 => 'כניסה'
+    5 => 'סיסמה',
+    6 => 'כל נסיונות הגישה לאיזורים הניהוליים של אתר זה נרשמים ביומן ונבדקים.<br>עמוד זה נועד לשימושם של אנשים מאושרים בלבד.',
+    7 => 'כניסה למערכת'
 );
 
 ###############################################################################
 # admin/block.php
 
 $LANG21 = array(
-    1 => 'Insufficient Admin Rights',
-    2 => 'You do not have the necessary rights to edit this block.',
-    3 => 'Block Editor',
-    4 => 'There was a problem reading this feed (see error.log for details).',
-    5 => 'Block Title',
-    6 => 'Topic',
-    7 => 'All',
-    8 => 'Block Security Level',
-    9 => 'Block Order',
-    10 => 'סוג קוביה',
-    11 => 'Portal Block',
-    12 => 'Normal Block',
+    1 => 'אין מספיק הרשאות ניהוליות',
+    2 => 'אין לכם את ההרשאות הנדרשות לערוך קוביית מידע זו.',
+    3 => 'עורך קוביות מידע',
+    4 => 'הייתה בעיה בקריאת הזנה זו (ראו את error.log בשביל פירוט).',
+    5 => '',
+    6 => '',
+    7 => 'כולם',
+    8 => 'רמת האבטחה של קוביות המידע',
+    9 => 'סדר קוביות המידע',
+    10 => '',
+    11 => 'קוביית מידע פורטל',
+    12 => 'קוביית מידע רגילה',
     13 => 'אפשרויות לקוביות המידע',
-    14 => 'RDF URL',
-    15 => 'Last RDF Update',
-    16 => 'Normal Block Options',
-    17 => 'תוכן הקוביה',
-    18 => 'Please fill in the Block Title, Security Level and Content fields',
-    19 => 'Block Manager',
-    20 => 'כותרת',
-    21 => 'Block SecLev',
-    22 => 'סוג קוביה',
-    23 => 'סדר הצגת בקוביות',
-    24 => 'נושא',
-    25 => 'To modify or delete a block, click on that block below.  To create a new block click on new block above.',
-    26 => 'Layout Block',
-    27 => 'PHP Block',
-    28 => 'PHP Block Options',
-    29 => 'Block Function',
-    30 => 'If you would like to have one of your blocks use PHP code, enter the name of the function above.  Your function name must start with the prefix "phpblock_" (e.g. phpblock_getweather).  If it does not have this prefix, your function will NOT be called.  We do this to keep people who may have hacked your Geeklog installation from putting arbitrary function calls that may be harmful to your system.  Be sure not to put empty parenthisis "()" after your function name.  Finally, it is recommended that you put all your PHP Block code in /path/to/geeklog/system/lib-custom.php.  That will allow the code to stay with you even when you upgrade to a newer version of Geeklog.',
-    31 => 'Error in PHP Block.  Function, %s, does not exist.',
-    32 => 'Error Missing Field(s)',
-    33 => 'You must enter the URL to the .rdf file for portal blocks',
-    34 => 'You must enter the title and the function for PHP blocks',
-    35 => 'You must enter the title and the content for normal blocks',
-    36 => 'You must enter the content for layout blocks',
-    37 => 'Bad PHP block function name',
-    38 => 'Functions for PHP Blocks must have the prefix \'phpblock_\' (e.g. phpblock_getweather).  The \'phpblock_\' prefix is required for security reasons to prevent the execution of arbitrary code.',
+    14 => 'כתובת RSS',
+    15 => 'עידכון RSS אחרון',
+    16 => 'אפשרויות של קוביית מידע רגילה',
+    17 => 'תוכן קוביית מידע',
+    18 => 'אנא מלאו את כותרת קוביית המידע ואת שדות התוכן',
+    19 => 'מנהל קוביות המידע',
+    20 => '',
+    21 => 'הרשאות קוביה',
+    22 => '',
+    23 => 'סדר הצגת קוביות המידע',
+    24 => '',
+    25 => 'כדי לשנות או למחוק קוביית מידע, ליחצו על אייקון העריכה שמתחת. כדי ליצור קוביית מידע חדשה, ליחצו על "צרו חדש" לעיל. כדי להזיז קוביית מידע, ליחצו על החיצים או על קוביות ה-[R] או ה-[L].',
+    26 => 'עיצוב קוביית מידע',
+    27 => 'קוביית מידע PHP',
+    28 => 'אפשרויות קוביית מידע PHP',
+    29 => 'פונקציית קוביית מידע',
+    30 => 'אם ברצונכם שאחת מקוביות המידע שלכם תשתמש בקוד PHP, הכניסו לעיל את שם הפונקציה. שם הפונקציה שלכם חייב להתחיל עם התחילית "_phpblock" (לדוגמא, phpblock_getweather). ללא תחילית זו, הפוקנציה שלכם *לא* תפעל. אנו עושים זאת כדי למנוע מאנשים שאולי פרצו להתקנת התוכנה מלהשתמש בקריאות פונקציה שרירותיות שעלולות לפגוע במערכת שלכם. שימו לב לא לשים סוגריים ריקים "()" אחרי שם הפונקציה שלכם. לסיכום, מומלץ שתשימו את כל קוד קוביית המידע PHP שלך בתוך /path/to/geeklog/system/lib-custom.php. דבר זה יאפשר לקוד להישאר איתכם אפילו כאשר הנכם מעדכנים לגירסת תוכנה חדשה יותר.',
+    31 => 'טעות בקוביית מידע PHP. הפונקציה, %s, לא קיימת.',
+    32 => 'טעות של שדה/ות לא מלא/ים',
+    33 => 'הנכם חייבים להכניס קישור לקובץ ה-RSS בשביל קוביות מידע של פורטלים',
+    34 => 'הנכם חייבים להכניס את הכותרת ואת הפונקציה במקרה של קוביות מידע PHP',
+    35 => 'הנכם חייבים להכניס את הכותרת ואת התוכן במקרה של קוביות מידע רגילות',
+    36 => 'הנכם חייבים להכניס את התוכן לקוביות מידע עיצוביות',
+    37 => 'שם לא מתאים של פונקציית קוביית מידע PHP',
+    38 => 'פונקציות של קוביות מידע PHP חייבות לכלול את התחילית \'phpblock_\' (לדוגמא, phpblock_getweather).  התחילית \'phpblock_\' נחוצה מסיבות בטחוניות כדי למנוע את הרצתו של קוד שרירותי.',
     39 => 'צד',
-    40 => 'ימין',
-    41 => 'שמאל',
-    42 => 'You must enter the blockorder and security level for Geeklog default blocks',
+    40 => 'שמאל [ימין במצב שפה RTL]',
+    41 => 'ימין [שמאל במצב שפה RTL]',
+    42 => 'הנכם חייבים להכניס את כותרות קוביות המידע ואת הסדר שלהן בשביל קוביות ברירת המחדל',
     43 => 'דף בית בלבד',
-    44 => 'אישור כניסה נדחה!',
-    45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_url']}/admin/block.php\">go back to the block administration screen</a>.",
-    46 => 'קוביה חדשה',
-    47 => 'Admin Home',
+    44 => '',
+    45 => "הינכם מנסים לגשת לקוביית מידע שאין לכם אישור לגביה. ניסיון זה נרשם ביומן. אנא <a href=\"{$_CONF['site_url']}/admin/block.php\">חיזרו לחלון ניהול קוביות המידע</a>.",
+    46 => 'הזיזו',
+    47 => '',
     48 => 'שם קוביה',
-    49 => 'השם חייב להיות ייחודי ובלי רווחים',
-    50 => 'כתובת URL של קבצי עזרה',
-    51 => '(חובה לכלול גם<b>  http://</b>(',
-    52 => 'אם משאירים ריק צלמית עזרה לא תופיע!',
-    53 => 'אפשר',
-    54 => 'שמור',
+    49 => ' (ללא רווחים וחייב להיות ייחודי)',
+    50 => '',
+    51 => 'כולל <span dir=ltr><b>http://</b></span>',
+    52 => 'אם תשאירו זאת ריק אייקון העזרה של קוביית מידע זו לא יופיע',
+    53 => 'אפשרו',
+    54 => 'שמירה',
     55 => 'ביטול',
     56 => 'מחיקה',
-    57 => 'Move Block Down',
-    58 => 'Move Block Up',
-    59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    57 => 'הזיזו קוביית מידע למטה',
+    58 => 'הזיזו קוביית מידע למעלה',
+    59 => 'הזיזו קוביית מידע לצד הימני (השמאלי במצב שפה RTL)',
+    60 => 'הזיזו קוביית מידע לצד השמאלי (הימני במצב שפה RTL)',
+    61 => 'אין כותרת',
+    62 => 'גבול יכולת המאמרים',
+    63 => 'כותרת קוביות המידע לא טובה',
+    64 => 'הכותרת שלכם אינה יכולה להיות ריקה ולא יכולה להכיל HTML!',
+    65 => 'סדר'
 );
 
 ###############################################################################
 # admin/event.php
 
 $LANG22 = array(
-    1 => 'עריכת אירוע',
-    2 => 'Error',
-    3 => 'כותרת אירוע',
-    4 => 'כתובת אינטרנטית של האירוע',
+    1 => 'עורך אירועים',
+    2 => 'שגיאה',
+    3 => 'מצב כתיבה',
+    4 => 'כתובת אתר האירוע',
     5 => 'תאריך התחלת האירוע',
     6 => 'תאריך סיום האירוע',
     7 => 'מיקום האירוע',
     8 => 'תיאור האירוע',
-    9 => '(חובה לכלול גם<b>  http://</b>(',
-    10 => 'חיבים למלא את השדות של תאריך האירוע/שעות האירוע תיאור האירוע ומיקומו ',
-    11 => 'מרכז האירוע',
-    12 => 'To modify or delete a event, click on that event below.  To create a new event click on new event above.',
-    13 => 'כותרת האירוע',
-    14 => 'מתחיל בתאריך',
-    15 => 'מסתיים בתאריך',
-    16 => 'אין הרשאות גישה למידע זה',
-    17 => "You are trying to access an event that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_url']}/admin/event.php\">go back to the event administration screen</a>.",
-    18 => 'אירוע חדש',
-    19 => 'אתר אדמיניסטרטור',
+    9 => '(כולל <span dir=ltr><b>http://</b></span>)',
+    10 => 'הנכם חייבים לציין את התאריכים/שעות, כותרת האירוע ותיאור',
+    11 => 'מנהל האירוע',
+    12 => ' כדי לשנות או למחוק אירוע, ליחצו על אייקון העריכה שלו מתחת. כדי ליצור אירוע חדש, ליחצו על "צרו חדש" לעיל. ליחצו על אייקון ההעתקה כדי ליצור עותק של אירוע קיים.',
+    13 => 'יוצר',
+    14 => 'תאריך התחלה',
+    15 => 'תאריך סיום',
+    16 => '',
+    17 => "הנכם מנסים לגשת לאירוע שאין לכם זכויות לגביו. ניסיון זה נרשם ביומן. בבקשה <a href=\"{$_CONF['site_url']}/admin/event.php\">חיזרו לחלון ניהול האירועים</a>.",
+    18 => '',
+    19 => '',
     20 => 'שמירה',
     21 => 'ביטול',
     22 => 'מחיקה',
-    23 => 'Bad start date.',
-    24 => 'Bad end date.',
-    25 => 'End date is before start date.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'עריכת לינק:',
-    2 => '',
-    3 => 'כותרת',
-    4 => 'כתובת הURL של הלינק',
-    5 => 'קטגוריה',
-    6 => 'חובה לכלול גם<b>  http://</b>',
-    7 => 'בחר קטגוריה',
-    8 => 'כניסות ללינק',
-    9 => 'הכנס כמה מילים על הלינק',
-    10 => 'שכחת למלא שדה אחד או יותר!  הינך חייב למלא את<b> כל השדות</b> בכדי שהמערכת תקלוט את הלינק החדש. השדות האפשריים הם: <b>כותרת</b>,  <b>כתובת URL</b>,  <b>וכמה מילים על הלינק</b>, כמו-כן, בדוק אם קיימת קטגוריה שתחתיה אפשר לשים את הלינק החדש ורק אם אין, צור/י לינק חדש, תודה.',
-    11 => 'מנהל הלינק',
-    12 => 'To modify or delete a link, click on that link below.  To create a new link click new link above.',
-    13 => 'שם הלינק',
-    14 => 'קטגוריה',
-    15 => 'קישור URL',
-    16 => 'אין לך הרשאות כניסה',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'הוסף קישור',
-    19 => 'Admin Home',
-    20 => 'לקטגוריה חדשה, הכנס כאן',
-    21 => 'שמור',
-    22 => 'ביטול',
-    23 => 'מחק'
+    23 => 'תאריך התחלה שגוי.',
+    24 => 'תאריך סיום שגוי.',
+    25 => 'תאריך הסיום הוא לפני תאריך ההתחלה.'
 );
 
 ###############################################################################
 # admin/story.php
 
 $LANG24 = array(
-    1 => 'מאמר קודם',
-    2 => 'למאמר הבא',
+    1 => 'המאמרים הקודמים',
+    2 => 'המאמרים הבאים',
     3 => 'מצב',
     4 => 'מצב כתיבה',
-    5 => 'דף עריכת הודעה/מאמר',
-    6 => 'There are no stories in the system',
-    7 => 'נכתב על-ידי',
-    8 => 'שמור',
-    9 => 'צפייה מוקדמת',
+    5 => 'עורך מאמרים',
+    6 => 'אין מאמרים במערכת',
+    7 => 'יוצר',
+    8 => 'שמירה',
+    9 => 'תצוגה מקדימה',
     10 => 'ביטול',
-    11 => 'מחק',
-    12 => '12',
-    13 => 'כותרת',
-    14 => 'נושא',
+    11 => 'מחיקה',
+    12 => 'קוד זיהוי',
+    13 => '',
+    14 => '',
     15 => 'תאריך',
-    16 => 'תמצית המאמר',
-    17 => 'גוף המאמר',
+    16 => 'טקסט פתיחה',
+    17 => 'טקסט המשך',
     18 => 'כניסות',
     19 => 'תגובות',
-    20 => '20',
-    21 => '21',
+    20 => 'פינג',
+    21 => 'שילחו פינג',
     22 => 'רשימת מאמרים',
-    23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
-    24 => '24',
-    25 => '25',
+    23 => ' כדי לשנות או למחוק מאמר, ליחצו על אייקון העריכה שלו להלן. כדי לצפות במאמר, ליחצו על הכותרת של המאמר שאתם מבקשים לצפות בו. כדי ליצור מאמר חדש, ליחצו על "צרו חדש" לעיל.',
+    24 => 'קוד הזיהוי שבחרתם למאמר זה כבר נמצא בשימוש. אנא השתמשו בקוד זיהוי אחר.',
+    25 => 'שגיאה בעת שמירת המאמר',
     26 => 'תצוגה מקדימה של המאמר',
-    27 => '27',
-    28 => '28',
-    29 => '29',
-    30 => '30',
-    31 => 'Please fill in the Author, Title and Intro Text fields',
-    32 => 'Featured',
-    33 => 'There can only be one featured story',
+    27 => 'אם הנכם משתמשים ב-[unscaledX] במקום ב-[imageX], התמונה תוכנס במימדיה המקוריים.',
+    28 => '<p><b>תצוגה מקדימה</b>: תצוגה מקדימה של מאמר עם תמונות מצורפות הכי טוב שתיעשה על ידי שמירת המאמר כטיוטא *במקום* ללחוץ על כפתור התצוגה המקדימה. השתמשו בכפתור התצוגה המקדימה רק כאשר אין תמונות מצורפות.',
+    29 => 'הפניות',
+    30 => 'בעיות בהעלאת הקובץ',
+    31 => 'אנא מלאו את שדות שם הכותב, הכותרת וטקסט הפתיחה.',
+    32 => 'מוצג',
+    33 => 'יכול להיות רק מאמר אחד מוצג',
     34 => 'טיוטה',
     35 => 'כן',
     36 => 'לא',
-    37 => 'תגובה נוספת על-ידי',
-    38 => 'עוד מ',
-    39 => 'כתובות דואל',
-    40 => 'Access Denied',
-    41 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  You may view the article in read-only below. Please <a href=\"{$_CONF['site_url']}/admin/story.php\">go back to the story administration screen</a> when you are done.",
-    42 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  Please <a href=\"{$_CONF['site_url']}/admin/story.php\">go back to the story administration screen</a>.",
-    43 => 'מאמר חדש',
-    44 => 'Admin Home',
-    45 => 'הרשאות',
-    46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the story will not be included in your RDF headline feed and it will be ignored by the search and statistics pages.',
+    37 => 'דברים נוספים של',
+    38 => 'עוד מ:',
+    39 => 'שליחות אימייל',
+    40 => '',
+    41 => "הנכם מנסים לגשת למאמר שאין לכם זכויות לגביו. ניסיון זה נרשם ביומן. הינכם רשאים לצפות במאמר שלהלן במצב קריאה בלבד. אנא <a href=\"{$_CONF['site_url']}/admin/story.php\">חיזרו לחלון ניהול המאמרים</a> לאחר שתסיימו.",
+    42 => "הינכם מנסים לגשת למאמר שאין לכם זכויות לגביו. ניסיון זה נרשם ביומן. אנא <a href=\"{$_CONF['site_url']}/admin/story.php\">חיזרו לחלון ניהול המאמרים</a>.",
+    43 => '',
+    44 => '',
+    45 => '',
+    46 => '<b>שימו לב:</b> אם תשנו תאריך זה להיות בעתיד, מאמר זה לא יפורסם עד אותו תאריך. משמעות הדבר היא גם שהוא לא ייכלל בהזנת כותרות ה-RSS והוא יזכה להתעלמות מעמודי החיפוש והסטטיסטיקה.',
     47 => 'תמונות',
     48 => 'תמונה',
-    49 => 'שמאל',
-    50 => 'ימין',
-    51 => 'To add one of the images you are attaching to this article you need to insert specially formated text.  The specially formated text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<BR><P><B>PREVIEWING</B>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
-    52 => 'מחיקה',
-    53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
-    54 => 'Attached Images Not Used',
-    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
-    56 => 'הראה צלמית כותרת',
-    57 => 'View unscaled image',
-    58 => 'Story Management',
-    59 => 'Option',
-    60 => 'Enabled',
-    61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'מצב',
-    2 => '2  LANG25',
-    3 => 'תאריך יצירת הסקר',
-    4 => 'הסקר %s נשמר',
-    5 => 'דף יצירת סקר',
-    6 => 'שם/מקט סקר',
-    7 => 'לא לעשות רווחים בין המילים!',
-    8 => 'הצג סקר באתר',
-    9 => 'שאלת הסקר',
-    10 => 'תשובות אפשריות לסקר',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'יצירת סקר חדש',
-    14 => 'save',
-    15 => 'cancel',
-    16 => 'delete',
-    17 => 'Please enter a Poll ID',
-    18 => 'רשימת סקרים',
-    19 => 'כדי לשנות או למחוק סקר פשוט סמן אותו. כדי ליצור סקר חדש לחץ על<b> צור סקר</b>',
-    20 => 'משתתפים',
-    21 => 'אין גישה!',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_url']}/admin/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'יצירת סקר חדש',
-    24 => 'Admin Home',
-    25 => 'כן',
-    26 => 'לא'
+    49 => 'ימין (שמאל במצב שפה RTL)',
+    50 => 'שמאל (ימין במצב שפה RTL)',
+    51 => 'כדי להוסיף את אחת מהתמונות שהינכם מצרפים למאמר זה עליכם להכניס טקסט מפורמט באופן מיוחד. הטקסט המפורמט באופן מיוחד הוא [imageX], [imageX_right] או [imageX_left] כאשר X הוא מספר התמונה שצירפתם. *שימו לב:* הינכם חייבים להשתמש בתמונות שצירפתם. אם לא תעשו זאת לא תוכלו לשמור את מאמרכם.<br>',
+    52 => '',
+    53 => 'לא הייתה בשימוש. הנכם חייבים להוסיף את התמונה לטקסט הפתיחה או לטקסט ההמשך לפני שתוכלו לשמור את השינויים שביצעתם.',
+    54 => 'לא היה שימוש בתמונות המצורפות',
+    55 => 'השגיאות הבאות אירעו בעת הנסיון לשמור את המאמר. אנא תקנו את השגיאות האלו לפני השמירה.',
+    56 => 'הראה אייקון נושא',
+    57 => 'צפו בתמונה המלאה',
+    58 => 'אפשרויות ארכיון',
+    59 => 'אפשרות',
+    60 => '',
+    61 => 'איחסון אוטומטי בארכיון',
+    62 => 'מחיקה אוטומטית',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'הרחיבו את גודל איזור עריכת התוכן',
+    68 => 'צמצמו את גודל איזור עריכת התוכן',
+    69 => 'תאריך פירסום המאמר',
+    70 => 'בחירת סרגל כלים',
+    71 => 'סרגל כלים בסיסי',
+    72 => 'סרגל כלים מצוי',
+    73 => 'סרגל כלים מתקדם',
+    74 => 'סרגל כלים מתקדם II',
+    75 => 'מוצג במלואו',
+    76 => 'אפשרויות פירסום',
+    77 => 'Javascript חייב להיות מופעל בעורך המתקדם. האפשרות יכולה להיכבות ב-config.php הראשי של האתר',
+    78 => 'ליחצו <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">כאן</a> כדי להשתמש בעורך ברירת המחדל',
+    79 => 'תצוגה מקדימה',
+    80 => 'עורך',
+    81 => 'אפשרויות פירסום',
+    82 => 'תמונות',
+    83 => 'אפשרויות ארכיון',
+    84 => 'הרשאות',
+    85 => 'הראה הכל'
 );
 
 ###############################################################################
 # admin/topic.php
 
 $LANG27 = array(
-    1 => 'עורך ההודעה/מאמר',
-    2 => 'מקט ההודעה/מאמר',
-    3 => 'כותרת ההודעה/מאמר',
-    4 => 'תמונות ההודעה/מאמר',
-    5 => 'לא לעשות רווחים בין המילים!',
-    6 => 'Deleting a topic deletes all stories and blocks associated with it',
-    7 => 'Please fill in the Topic ID and Topic Name fields',
-    8 => 'Topic Manager',
-    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find your access level for each topic in parenthesis',
+    1 => 'עורך הנושאים',
+    2 => 'קוד הזיהוי של הנושא',
+    3 => 'כותרת הנושא',
+    4 => 'תמונת הנושא',
+    5 => '(אין להשתמש ברווחים)',
+    6 => 'מחיקת נושא מוחקת גם כל את המאמרים וקוביות המידע שמקושרים אליו',
+    7 => 'אנא מלאו את השדות של קוד הזיהוי ושם הנושא',
+    8 => 'מנהל הנושאים',
+    9 => 'כדי לערוך או למחוק נושא, ליחצו עליו. כדי ליצור נושא חדש, ליחצו על "צרו חדש" לעיל. תוכלו למצוא את רמת הגישה שלכם עבור כל נושא בתוך סוגריים. הכוכבית(*) מסמלת את נושא ברירת המחדל.',
     10 => 'סדר מיון',
-    11 => 'Stories/Page',
-    12 => 'Access Denied',
-    13 => "You are trying to access a topic that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_url']}/admin/topic.php\">go back to the topic administration screen</a>.",
+    11 => 'מאמרים/עמוד',
+    12 => 'הגישה לא אושרה',
+    13 => "הינכם מנסים לגשת לנושא שאין לכם זכויות לגביו. ניסיון זה נרשם ביומן. אנא <a href=\"{$_CONF['site_url']}/admin/topic.php\">חיזרו לחלון ניהול הנושאים</a>.",
     14 => 'שיטת מיון',
     15 => 'לפי הא-ב',
     16 => 'ברירת המחדל היא',
-    17 => 'New Topic',
-    18 => 'Admin Home',
-    19 => 'save',
-    20 => 'cancel',
-    21 => 'delete',
-    22 => 'Default',
-    23 => 'make this the default topic for new story submissions',
+    17 => 'נושא חדש',
+    18 => 'מרכז הניהול',
+    19 => 'שמירה',
+    20 => 'ביטול',
+    21 => 'מחיקה',
+    22 => 'ברירת מחדל',
+    23 => 'היפכו נושא זה לנושא ברירת המחדל עבור העלאת מאמרים חדשים',
     24 => '(*)',
-    25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    25 => 'נושא הארכיון',
+    26 => 'היפכו נושא זה לנושא ברירת המחדל עבור מאמרים בארכיון. ניתן לבחור רק נושא אחד.',
+    27 => 'או העלו אייקון לנושא',
+    28 => 'מקסימום',
+    29 => 'שגיאות בהעלאת הקובץ'
 );
 
 ###############################################################################
 # admin/user.php
 
 $LANG28 = array(
-    1 => 'עריכת מאפיני משתמש',
-    2 => 'מספר זיהוי משתמש',
+    1 => 'עורך משתמשים',
+    2 => 'קוד זיהוי משתמש',
     3 => 'שם משתמש',
     4 => 'שם מלא',
-    5 => 'סיסמא',
+    5 => 'סיסמה',
     6 => 'רמת אבטחה',
-    7 => 'כתובת דואל',
+    7 => 'כתובת אימייל',
     8 => 'אתר בית',
-    9 => 'אסור לעשות רווחים בשדה זה!',
-    10 => 'אנא מלא את השדות הבאים: שם משתמש, שם מלא, רמת אבטחה וכתובת דואל',
-    11 => 'מרכז בקרה למשתמש',
-    12 => 'To modify or delete a user, click on that user below.  To create a new user click the new user button to the left. You can do simple searches by entering parts of a username,email address or fullname (e.g.*son* or *.edu) in the form below.',
-    13 => 'SecLev',
-    14 => 'Reg. Date',
-    15 => 'משתמש חדש',
-    16 => 'Admin Home',
-    17 => 'שנֶה סיסמה',
-    18 => 'ביטול',
-    19 => 'מחק',
-    20 => 'שמור',
-    21 => 'שם המשתמש שהכנסת כבר קיים במערכת',
-    22 => 'שגיאה!',
-    23 => 'Batch Add',
-    24 => 'Batch Import of Users',
-    25 => 'You can import a batch of users into Geeklog.  The import file must a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
-    26 => 'חיפוש',
-    27 => 'סנן תוצאות',
-    28 => 'סמן כאן למחיקת התמונה',
-    29 => 'Path',
-    30 => 'Import',
-    31 => 'New Users',
-    32 => 'Done processing. Imported %d and encountered %d failures',
-    33 => 'submit',
-    34 => 'Error: You must specify a file to upload.',
-    35 => 'Last Login',
-    36 => '(never)'
+    9 => '(אין להשתמש ברווחים)',
+    10 => 'אנא מלאו את השדות של שם המשתמש וכתובת האימייל',
+    11 => 'מרכז ניהול המשתמשים',
+    12 => 'כדי לערוך או למחוק משתמש, ליחצו על אייקון המשתמש שמתחת. כדי לצפות במשתמש, ליחצו עליו. כדי ליצור משתמש חדש, ליחצו על "צרו חדש" לעיל. הנכם יכולים לבצע חיפושים פשוטים על ידי הכנסת חלק משם המשתמש, כתובת האימייל או השם המלא (לדוגמא *son* או edu.*) בטופס שלהלן.',
+    13 => 'רמת אבטחה',
+    14 => 'תאריך הרשמה',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => 'שמירה',
+    21 => 'שם המשתמש שניסיתם לשמור כבר קיים.',
+    22 => 'שגיאה',
+    23 => 'הוספה המונית',
+    24 => 'יבוא המוני של משתמשים',
+    25 => 'הינכם יכולים לייבא רשימה של משתמשים למערכת. קובץ היבוא חייב להיות קובץ עם הפרדות בצורה של טאבים וחייב שיהיו בו את השדות בסדר הבא: שם מלא, שם משתמש, כתובת אימייל. לכל משתמש שתייבאו תישלח הודעת אימייל עם סיסמה אקראית. הנכם חייבים לשים משתמש אחד בכל שורה. כישלון במעקב אחר ההוראות האלו יגרום לבעיות שעלולות להצריך עבודה ידנית ולכן בידקו טוב את נתוניכם!',
+    26 => '',
+    27 => '',
+    28 => 'סמנו זאת כדי למחוק את התמונה',
+    29 => 'מיקום',
+    30 => 'יבוא',
+    31 => 'משתמשים חדשים',
+    32 => 'תהליך העיבוד הסתיים. יובאו %d והתרחשו %d שגיאות.',
+    33 => 'שמירה',
+    34 => 'שגיאה: הינכם חייבים לבחור קובץ להעלאה.',
+    35 => 'כניסה אחרונה למערכת',
+    36 => '(אף פעם)',
+    37 => 'קוד זיהוי משתמש',
+    38 => 'רשימת קבוצות',
+    39 => 'סיסמה (שוב)',
+    40 => 'תאריך הרשמה',
+    41 => 'תאריך כניסה אחרונה למערכת',
+    42 => 'מושעה',
+    43 => 'מחכה להפעלה',
+    44 => 'מחכה לאישור',
+    45 => 'פעיל',
+    46 => 'סטאטוס משתמש',
+    47 => 'עריכה'
 );
 
 ###############################################################################
@@ -885,43 +888,43 @@
 
 $LANG29 = array(
     1 => 'אישור',
-    2 => 'מחק',
+    2 => 'מחיקה',
     3 => 'עריכה',
     4 => 'פרופיל',
     10 => 'כותרת',
     11 => 'תאריך התחלה',
-    12 => 'URL',
+    12 => 'כתובת אינטרנט',
     13 => 'קטגוריה',
     14 => 'תאריך',
     15 => 'נושא',
-    16 => 'User name',
-    17 => 'Full name',
-    18 => 'Email',
-    34 => 'Command and Control',
-    35 => 'הוספת מאמר',
-    36 => 'אשר קישור',
-    37 => 'אשר אירוע',
+    16 => 'שם משתמש',
+    17 => 'שם מלא',
+    18 => 'כתובת אימייל',
+    34 => 'שליטה ובקרה',
+    35 => 'הגשות מאמרים',
+    36 => '',
+    37 => 'הגשות אירועים',
     38 => 'אישור',
-    39 => 'There are no submissions to moderate at this time',
-    40 => 'User Submissions'
+    39 => 'אין הגשות שדורשות פיקוח בזמן זה',
+    40 => 'הגשות של משתמשים'
 );
 
 ###############################################################################
 # calendar.php
 
 $LANG30 = array(
-    1 => 'א',
-    2 => 'ב',
-    3 => 'ג',
-    4 => 'ד',
-    5 => 'ה',
-    6 => 'ו',
+    1 => 'ראשון',
+    2 => 'שני',
+    3 => 'שלישי',
+    4 => 'רביעי',
+    5 => 'חמישי',
+    6 => 'שישי',
     7 => 'שבת',
-    8 => 'הוסף אירוע',
-    9 => 'אירוע לינוקס',
-    10 => 'יתקיים',
+    8 => 'הוספת אירוע',
+    9 => 'אירוע %s',
+    10 => 'אירועים עבור',
     11 => 'יומן ראשי',
-    12 => 'יומן אישי',
+    12 => 'היומן שלי',
     13 => 'ינואר',
     14 => 'פברואר',
     15 => 'מרץ',
@@ -934,299 +937,335 @@
     22 => 'אוקטובר',
     23 => 'נובמבר',
     24 => 'דצמבר',
-    25 => 'חזרה ל',
+    25 => 'חזרה ל: ',
     26 => 'יום שלם',
-    27 => 'חודש',
-    28 => 'יומן אישי של',
-    29 => 'יומן',
-    30 => 'מחק אירוע',
-    31 => 'הוסף',
+    27 => 'שבוע',
+    28 => 'היומן האישי של',
+    29 => 'יומן ציבורי',
+    30 => 'מחיקת אירוע',
+    31 => 'הוספה',
     32 => 'אירוע',
-    33 => 'מחק',
+    33 => 'תאריך',
     34 => 'שעה',
     35 => 'הוספה מהירה',
     36 => 'אישור',
-    37 => 'מצטערים, האפשרות ליומן אישי לא קיימת באתר זה.',
-    38 => 'עריכת יומן אישי',
+    37 => 'לצערינו האפשרות ליומן אישי לא קיימת באתר זה',
+    38 => 'עורך אירועים אישיים',
     39 => 'יום',
     40 => 'שבוע',
-    41 => 'Month'
+    41 => 'חודש'
 );
 
 ###############################################################################
 # admin/mail.php
 
 $LANG31 = array(
-    1 => "{$_CONF['site_name']} Mail Utility",
+    1 => "כלי שליחת הודעות האימייל של {$_CONF['site_name']}",
     2 => 'מ',
     3 => 'השב ל',
     4 => 'נושא',
     5 => 'גוף ההודעה',
-    6 => 'שלך ל',
+    6 => 'שליחה ל:',
     7 => 'כל המשתמשים',
-    8 => 'אדמיניסטרטור',
+    8 => 'מנהל האתר',
     9 => 'אפשרויות',
     10 => 'HTML',
-    11 => 'הודעה דחופה',
-    12 => 'שלח',
-    13 => 'מחק והתחל מחדש',
+    11 => 'הודעה דחופה!',
+    12 => 'שליחה',
+    13 => 'איפוס',
     14 => 'התעלם מהגדרות משתמש',
-    15 => 'ארעה שגיעה במשלוח ההודעה ל',
-    16 => 'הודעה נשלחה בהצלחה ל',
-    17 => "<a href={$_CONF['site_url']}/admin/mail.php>Send another message</a>",
-    18 => 'כתובת דואל',
-    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
-    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_url']}/admin/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_url']}/admin/moderation.php\">go back to the administration page</a>.",
-    21 => 'כישלון',
-    22 => 'בהצלחה',
-    23 => 'אין כישלונות',
+    15 => 'אירעה שגיעה במשלוח ההודעה ל: ',
+    16 => 'ההודעה נשלחה בהצלחה ל: ',
+    17 => "<a href={$_CONF['site_url']}/admin/mail.php>שילחו הודעה נוספת</a>",
+    18 => 'עבור',
+    19 => '*שימו לב:* אם ברצונכם לשלוח הודעה לכל משתמשי האתר, ביחרו את קבוצת ה-Logged-in Users מתיבת הבחירה.',
+    20 => "<successcount> הודעות נשלחו בהצלחה ונכשלו <failcount>. אם הינכם זקוקים לכך, להלן הפרטים של כל הנסיונות. אם לא, הינכם יכולים <a href=\"{$_CONF['site_url']}/admin/mail.php\">לשלוח הודעה נוספת</a> או <a href=\"{$_CONF['site_url']}/admin/moderation.php\">לחזור למסך הניהול</a>.",
+    21 => 'כשלונות',
+    22 => 'הצלחות',
+    23 => 'אין כשלונות',
     24 => 'אין הצלחות',
-    25 => '-- בחר קבוצה--',
-    26 => 'Please fill in all the fields on the form and select a group of users from the drop down.'
+    25 => '-- ביחרו קבוצה --',
+    26 => 'אנא מלאו את כל השדות בטופס וביחרו קבוצת משתמשים מתיבת הבחירה.'
 );
 
 ###############################################################################
 # admin/plugins.php
 
 $LANG32 = array(
-    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
-    2 => 'Plug-in Installation Disclaimer',
-    3 => 'Plug-in Installation Form',
-    4 => 'Plug-in File',
-    5 => 'Plug-in List',
-    6 => 'Warning: Plug-in Already Installed!',
-    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
-    8 => 'Plugin Compatibility Check Failed',
-    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
-    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
-    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
-    12 => 'no plugin name provided to plugineditor()',
-    13 => 'Plugin Editor',
-    14 => 'New Plug-in',
-    15 => 'Admin Home',
-    16 => 'Plug-in Name',
-    17 => 'Plug-in Version',
-    18 => 'גרסה',
-    19 => 'אפשר',
+    1 => 'התקנת plugins עלולה לגרום לבעיות בהתקנה התוכנה ואולי אף למערכת שלכם. חשוב שתתקינו רק plugins שהורדו מ-<a href="http://www.geeklog.net" target="_blank">אתר הבית של Geeklog</a> מפני שאנו בוחנים באדיקות את כל ה-plugins שהוגשו לאתר שלנו במגוון של מערכות הפעלה. חשוב שתבין שתהליך התקנה ה-plugin ידרוש את הרצתן של כמה פקודות מערכת, דבר שעלול לבעיות אבטחה - ביחוד אם הנכם משתמשים ב-plugins מאתרי צד שלישי. אפילו עם אזהרה זו, איננו מבטיחים את ההצלחה של כל התקנה באשר היא או מקבלים אחריות לנזק שיגרם בעקבות התקנת plugin של Geeklog. במילים אחרות, ההתקנה היא על אחריותכם בלבד. בשביל הזהירים שבכם, הוראות איך להתקין plugin באופן ידני כלולות בכל חבילת plugin.',
+    2 => 'הצהרת התקנת Plugin',
+    3 => 'טופס התקנת Plugin',
+    4 => 'קובץ Plugin',
+    5 => 'רשימת Plugins',
+    6 => 'אזהרה: ה-Plug-in כבר מותקן!',
+    7 => 'ה-plug-in שהנכם מנסה להתקין כבר קיים. אנא מיחקו את ה-plugin לפני התקנתו מחדש.',
+    8 => 'בדיקת התאמת Plugin נכשלה',
+    9 => 'ה-plugin דורש גירסה חדשה יותר של Geeklog. שדרגו את העותק שלכם של <a href="http://www.geeklog.net">Geeklog</a> או השיגו גירסה חדשה יותר של ה-plugin.',
+    10 => '<br><b>אין plugins מותקנים כרגע.</b><br><br>',
+    11 => 'כדי לערוך או למחוק plug-in, ליחצו על אייקון העריכה מתחת. זה יראה את פרטי ה-plugin כולל האתר של יוצריו. גם הגירסה המותקנת וגם הגירסה שמוחזרת מקוד ה-plugin מוצגות. זה יעזור לכם לדעת ה-plugin צריך לעבור שידרוג. כדי להתקין או לשדרג plugin אנא עיברו על הדוקומנטציה שלו.',
+    12 => 'שום שם של plugin לא ניתן ל-plugineditor()',
+    13 => 'עורך Plugins',
+    14 => 'Plugin חדש',
+    15 => 'מרכז הניהול',
+    16 => 'שם ה-Plugin',
+    17 => 'גירסת ה-Plugin',
+    18 => 'גירסת התוכנה',
+    19 => 'אפשרו',
     20 => 'כן',
     21 => 'לא',
-    22 => 'התקן',
-    23 => 'שמור',
+    22 => 'התקנה',
+    23 => 'שמירה',
     24 => 'ביטול',
-    25 => 'מחק',
-    26 => 'Plug-in Name',
-    27 => 'Plug-in Homepage',
-    28 => 'Plug-in Version',
-    29 => 'גרסה',
-    30 => 'Delete Plug-in?',
-    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'Code Version',
-    34 => 'Update'
+    25 => 'מחיקה',
+    26 => 'שם ה-Plugin',
+    27 => 'האתר של ה-Plugin',
+    28 => 'גירסת ה-Plugin',
+    29 => 'גירסת התוכנה',
+    30 => 'האם למחוק את ה-Plugin?',
+    31 => 'האם הינכם בטוחים שאתם מעוניינים למחוק את ה-plugin הזה? על ידי כך אתם תסירו את כל המידע ומבני המידע שה-plugin הזה משתמש בהם. אם הינכם בטוחים, ליחצו שוב על מחיקה בטופס שלהלן.',
+    32 => '<p><b>שגיאה: תווית לינק אוטומטי לא מפורמטת נכון</b></p>',
+    33 => 'גירסת הקוד',
+    34 => 'עידכון',
+    35 => 'עריכה',
+    36 => 'קוד',
+    37 => 'מידע',
+    38 => 'עדכנו!'
 );
 
 ###############################################################################
 # admin/syndication.php
 
 $LANG33 = array(
-    1 => 'create feed',
-    2 => 'save',
-    3 => 'delete',
-    4 => 'cancel',
-    10 => 'Content Syndication',
-    11 => 'New Feed',
-    12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
-    14 => 'Title',
-    15 => 'Type',
-    16 => 'Filename',
-    17 => 'Format',
-    18 => 'last updated',
-    19 => 'Enabled',
-    20 => 'Yes',
-    21 => 'No',
-    22 => '<i>(no feeds)</i>',
-    23 => 'all Stories',
-    24 => 'Feed Editor',
-    25 => 'Feed Title',
-    26 => 'Limit',
-    27 => 'Length of entries',
-    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
-    29 => 'Description',
-    30 => 'Last Update',
-    31 => 'Character Set',
-    32 => 'Language',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
-    36 => 'Select type of feed',
-    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
-    38 => 'Error: Missing Fields',
-    39 => 'Please fill in the Feed Title, Description, and Filename.',
-    40 => 'Please enter a  number of entries or number of hours.',
-    41 => 'Links',
-    42 => 'Events'
+    1 => 'צרו הזנה',
+    2 => 'שמירה',
+    3 => 'מחיקה',
+    4 => 'ביטול',
+    10 => 'סינדקיציית תוכן',
+    11 => 'הזנה חדשה',
+    12 => 'מרכז הניהול',
+    13 => 'כדי לערוך או למחוק הזנה, ליחצו על אייקון העריכה שלה מתחת. כדי ליצור הזנה חדשה, ליחצו על "צרו חדש" לעיל.',
+    14 => 'כותרת',
+    15 => 'סוג',
+    16 => 'שם קובץ',
+    17 => 'פורמט',
+    18 => 'עודכן לאחרונה',
+    19 => 'מאופשר',
+    20 => 'כן',
+    21 => 'לא',
+    22 => '<i>(אין הזנות)</i>',
+    23 => 'כל המאמרים',
+    24 => 'עורך הזנות',
+    25 => 'כותרת ההזנה',
+    26 => 'גבול',
+    27 => 'אורך הפריטים',
+    28 => '(0 = שום טקסט, 1 = טקסט מלא, כל מספר אחר = הגבלה למספר זה של תווים.)',
+    29 => 'תיאור',
+    30 => 'עודכן לאחרונה',
+    31 => 'קידוד אותיות',
+    32 => 'שפה',
+    33 => 'תכנים',
+    34 => 'פריטים',
+    35 => 'שעות',
+    36 => 'ביחרו את סוג ההזנה',
+    37 => 'יש לכם לפחות plugin אחד מותקן שתומך בסינדקיציית תוכן. תצטרכו לבחור מתחת אם הינכם מעוניינים ליצור הזנת מערכת או הזנה מאחד ה-plugins.',
+    38 => 'שגיאה: שדות חסרים',
+    39 => 'אנא מלאו את כותרת ההזנה, תיאור ושם קובץ.',
+    40 => 'אנא הכניסו את מספר הפריטים או את מספר השעות.',
+    41 => 'שמירה',
+    42 => 'אירועים',
+    43 => 'כולם',
+    44 => 'ללא',
+    45 => 'Header-link in topic',
+    45 => 'קישור ב-header בנושא',
+    46 => 'הגבלת תוצאות',
+    47 => 'חיפוש',
+    48 => 'עריכה',
+    49 => 'הלוגו של ההזנה',
+    50 => "יחסי לכתובת האתר ({$_CONF['site_url']})"
 );
 
 ###############################################################################
 # confirmation and error messages
 
 $MESSAGE = array(
-    1 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
-    2 => "Thank-you for submitting your story to {$_CONF['site_name']}.  It has been submitted to our staff for approval. If approved, your story will be available for others to read on our site.",
-    3 => "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links.php>links</a> section.",
-    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href={$_CONF['site_url']}/calendar.php>calendar</a> section.",
-    5 => 'Your account information has been successfully saved.',
-    6 => 'Your display preferences have been successfully saved.',
-    7 => 'Your comment preferences have been successfully saved.',
+    1 => "סיסמתך נשלחה אליכם באימייל ואמורה להגיע בכל רגע. אנא עיקבו אחר ההוראות שבהודעה ואנו מודים לכם על שימושכם ב-{$_CONF['site_name']}",
+    2 => "תודה לך על הגשת המאמר שלך ל-{$_CONF['site_name']}. הוא הוגש לצוות שלנו בשביל אישור. אם יאושר, מאמרך יהיה זמין לאחרים לקריאה באתר.",
+    3 => "",
+    4 => "תודה לך על הגשת אירוע ל-{$_CONF['site_name']}. הוא הוגש לצוות שלנו בשביל אישור. אם יאושר, הקישור יוצג בפינת <a href={$_CONF['site_url']}/calendar.php>היומן</a> שלנו.",
+    5 => 'המידע של חשבונך נשמר בהצלחה.',
+    6 => 'העדפות התצוגה שלך נשמרו בהצלחה.',
+    7 => 'הגדרות התגובות שלך נשמרו בהצלחה.',
     8 => 'יצאת מהמערכת בהצלחה.',
-    9 => 'ההודעה שלך נשמרה בהצלחה',
-    10 => 'The story has been successfully deleted.',
-    11 => 'Your block has been successfully saved.',
-    12 => 'The block has been successfully deleted.',
-    13 => 'Your topic has been successfully saved.',
-    14 => 'The topic and all it\'s stories and blocks have been successfully deleted.',
-    15 => 'Your link has been successfully saved.',
-    16 => 'The link has been successfully deleted.',
-    17 => 'Your event has been successfully saved.',
-    18 => 'The event has been successfully deleted.',
-    19 => 'Your poll has been successfully saved.',
-    20 => 'The poll has been successfully deleted.',
-    21 => 'The new user has been successfully saved.',
-    22 => 'The user has been successfully deleted',
-    23 => 'Error trying to add an event to your calendar. There was no event id passed.',
-    24 => 'The event has been saved to your calendar',
-    25 => 'Cannot open your personal calendar until you login',
-    26 => 'Event was successfully removed from your personal calendar',
-    27 => 'ההודעה נשלחה בהצלחה!',
-    28 => 'The plug-in has been successfully saved',
-    29 => 'Sorry, personal calendars are not enabled on this site',
-    30 => 'Access Denied',
-    31 => 'Sorry, you do not have access to the story administration page.  Please note that all attempts to access unauthorized features are logged',
-    32 => 'Sorry, you do not have access to the topic administration page.  Please note that all attempts to access unauthorized features are logged',
-    33 => 'Sorry, you do not have access to the block administration page.  Please note that all attempts to access unauthorized features are logged',
-    34 => 'Sorry, you do not have access to the link administration page.  Please note that all attempts to access unauthorized features are logged',
-    35 => 'Sorry, you do not have access to the event administration page.  Please note that all attempts to access unauthorized features are logged',
-    36 => 'Sorry, you do not have access to the poll administration page.  Please note that all attempts to access unauthorized features are logged',
-    37 => 'Sorry, you do not have access to the user administration page.  Please note that all attempts to access unauthorized features are logged',
-    38 => 'Sorry, you do not have access to the plugin administration page.  Please note that all attempts to access unauthorized features are logged',
-    39 => 'Sorry, you do not have access to the mail administration page.  Please note that all attempts to access unauthorized features are logged',
+    9 => 'מאמרך נשמר בהצלחה',
+    10 => 'מאמרך נמחק בהצלחה.',
+    11 => 'קוביית המידע שלך נשמרה בהצלחה.',
+    12 => 'קוביית המידע שלך נמחקה בהצלחה.',
+    13 => 'הנושא שלך נשמר בהצלחה.',
+    14 => 'הנושא וכל המאמרים וקוביות המידע שבתוכו נמחקו בהצלחה.',
+    15 => '',
+    16 => '',
+    17 => 'האירוע שלך נשמר בהצלחה.',
+    18 => 'האירוע שלך נמחק בהצלחה.',
+    19 => 'הסקר נשמר בהצלחה.',
+    20 => 'הסקר שלך נמחק בהצלחה.',
+    21 => 'המשתמש נשמר בהצלחה.',
+    22 => 'המשתמש נמחק בהצלחה.',
+    23 => 'חלק שגיאה בנסיון להוסיף אירוע ליומן. לא הועבר קוד זיהוי ארוע.',
+    24 => 'האירוע שלך נשמר בהצלחה ביומן שלך.',
+    25 => 'אי אפשר לפתוח את היומן האישי שלכם עד שתיכנסו למערכת',
+    26 => 'האירוע נמחק בהצלחה מהיומן האישי שלך.',
+    27 => 'ההודעה נשלחה בהצלחה.',
+    28 => 'ה-plugin נשמר בהצלחה',
+    29 => 'מצטערים, יומנים אישיים לא מופעלים באתר הזה',
+    30 => 'הגישה לא אושרה',
+    31 => 'מצטערים, אין לכם גישה לעמוד ניהול המאמרים. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    32 => 'מצטערים, אין לכם גישה לעמוד ניהול הנושאים. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    33 => 'מצטערים, אין לכם גישה לעמוד ניהול קוביות המידע. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    34 => 'מצטערים, אין לכם גישה לעמוד ניהול הקישורים. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    35 => 'מצטערים, אין לכם גישה לעמוד ניהול האירועים. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    36 => 'מצטערים, אין לכם גישה לעמוד ניהול הסקרים. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    37 => 'מצטערים, אין לכם גישה לעמוד ניהול המשתמשימו. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    38 => 'מצטערים, אין לכם גישה לעמוד ניהול ה-plugins. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    39 => 'מצטערים, אין לכם גישה לעמוד ניהול הודעות האימייל. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
     40 => 'הודעת מערכת',
-    41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
-    42 => 'Your word has been successfully saved.',
-    43 => 'The word has been successfully deleted.',
-    44 => 'The plug-in was successfully installed!',
-    45 => 'The plug-in was successfully deleted.',
-    46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
-    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
-    48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
-    49 => 'Your group has been successfully saved.',
-    50 => 'The group has been successfully deleted.',
-    51 => 'This username is already in use. Please choose another one.',
-    52 => 'The email address provided does not appear to be a valid email address.',
-    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
-    54 => 'Your request for a new password has expired. Please try again below.',
-    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
-    56 => 'The email address provided is already in use for another account.',
-    57 => 'Your account has been successfully deleted.',
-    58 => 'Your feed has been successfully saved.',
-    59 => 'The feed has been successfully deleted.',
-    60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    41 => 'מצטערים, אין לכם גישה לעמוד החלפות המילים. אנא שימו לב שכל נסיונות הגישה ליכולות לא מאושרות נרשמים ביומן',
+    42 => 'המילה שלך נשמרה בהצלחה.',
+    43 => 'המילה שלך נמחקה בהצלחה.',
+    44 => 'ה-plugin נשמר בהצלחה!',
+    45 => 'ה-plugin נמחק בהצלחה.',
+    46 => 'מצטערים, אין בידיכם יכולת גישה לתוכנת גיבוי מאמר המידע. אנא שימו לב שכל נסיונות הגישה ליכולות לא מורשות נרשמות ביומן',
+    47 => 'יכולת זו עובדת רק תחת nix*. אם הינכם מריצים nix* כמערכת ההפעלה שלכם אז זיכרון המטמון שלכם נוקה בהצלחה. אם הנכם משתמשים בחלונות, תיאלצו לחפש אחר קבצים בשם adodb_*.php ולהסירם באופן ידני.',
+    48 => "תודה לך על הגשת הבקשה שלך להצטרף ל-{$_CONF['site_name']}. אנו נבדוק את בקשתך. אם תאושר, סיסמתך תישלח אליך באימייל לכתובת האימייל שהרגע ציינת.",
+    49 => 'קבוצתך נשמרה בהצלחה.',
+    50 => 'הקבוצה נמחקה בהצלחה.',
+    51 => 'שם משתמש זה כבר נמצא בשימוש. אנא ביחרו אחד אחר.',
+    52 => 'כתובת האימייל שצוינה לא נראית ככתובת אימייל תקינה.',
+    53 => 'סיסמתכם החדשה התקבלה. אנא השתמשו בסיסמתכם החדשה שמתחת כדי להיכנס למערכת עכשיו.',
+    54 => 'בקשתכם לסיסמה חדשה פג תוקפה. אנא נסו שוב מתחת.',
+    55 => 'הודעת אימייל נשלחה אליכם ואמורה להגיע בכל רגע. אנא עיקבו אחר ההוראות בהודעה כדי להגדיר סיסמה חדשה לחשבונכם.',
+    56 => 'כתובת האימייל שצוינה כבר נמצאת בשימוש אצל חשבון אחר.',
+    57 => 'חשבונך נמחק בהצלחה.',
+    58 => 'ההזנה שלך נשמרה בהצלחה.',
+    59 => 'ההזנה שלך נמחקה בהצלחה.',
+    60 => 'ה-plugin עודכן בהצלחה',
+    61 => 'Plugin %s - מחזיק מיקום הודעה לא ידוע',
+    62 => 'ההפנייה עם תגובה נמחקה.',
+    63 => 'אירעה שגיאה בעת מחיקת ההפנייה עם תגובה.',
+    64 => 'ההפנייה עם תגובה שלכם נשלחה בהצלחה.',
+    65 => 'שירות ספריית בלוגים נשמר בהצלחה.',
+    66 => 'שירות ספריית בלוגים נמחק.',
+    67 => 'הסיסמה החדשה אינה זהה לסיסמת הבדיקה!',
+    68 => 'הנכם חייבים להכניס את הסיסמה הנוכחית הנכונה.',
+    69 => 'חשבונכם נחסם!',
+    70 => 'חשבונכם מחכה לאישור מנהל.',
+    71 => 'חשבונכם אומת ועכשיו מחכה לאישור מנהל.',
+    72 => 'התרחשה שגיאה בעת נסיון התקנת ה-plugin. קיראו את error.log בשביל פרטים.',
+    73 => 'התרחשה שגיאה בעת נסיון הסרת ה-plugin. קיראו את error.log בשביל פרטים.',
+    74 => 'הפינג החוזר נשלח בהצלחה.',
+    75 => 'הפניות חיבות להישלח בעזרת בקשת POST.'
 );
 
 ###############################################################################
 
 $LANG_ACCESS = array(
-    'access' => 'Access',
-    'ownerroot' => 'Owner/Root',
-    'group' => 'Group',
-    'readonly' => 'Read-Only',
-    'accessrights' => 'Access Rights',
-    'owner' => 'Owner',
-    'grantgrouplabel' => 'Grant Above Group Edit Rights',
-    'permmsg' => 'NOTE: members is all logged in members of the site and anonymous is all users browsing the site that aren\'t logged in.',
-    'securitygroups' => 'Security Groups',
-    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
-    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
-    'groupeditor' => 'Group Editor',
-    'description' => 'Description',
-    'name' => 'Name',
-    'rights' => 'Rights',
-    'missingfields' => 'Missing Fields',
-    'missingfieldsmsg' => 'You must supply the name and a description for a group',
-    'groupmanager' => 'Group Manager',
-    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
-    'groupname' => 'Group Name',
-    'coregroup' => 'Core Group',
-    'yes' => 'Yes',
-    'no' => 'No',
-    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
-    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
-    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
-    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'access' => 'גישה',
+    'ownerroot' => 'בעלים ראשי',
+    'group' => 'קבוצה',
+    'readonly' => 'קריאה בלבד',
+    'accessrights' => 'הרשאות גישה',
+    'owner' => 'בעלים',
+    'grantgrouplabel' => 'אשרו את הרשאות עריכת הקבוצות שלעיל',
+    'permmsg' => 'שימו לב: "חברים רשומים" הם כל המשתמשים שנכנסו בשמם לאתר ו"אורחים באתר" הם כל המשתמשים שנמצאים באתר, אך לא הזדהו.',
+    'securitygroups' => 'קבוצות ביטחון',
+    'editrootmsg' => "אפילו שהינכם מנהלי משתמשים, אינכם יכולים לערוך משתמש ראשי מבלי להיות משתמש ראשי בעצמכם. הנכם יכולים לערוך את כל המשתמשים האחרים מלבד משתמשים ראשיים. אנא שימו לב שכל הנסיונות לערוך משתמשים ראשיים באופן לא מורשה נרשמים ביומן. אנא חיזרו <a href=\"{$_CONF['site_admin_url']}/user.php\">לעמוד ניהול המשתמשים</a>.",
+    'securitygroupsmsg' => 'סמנו את התיבות של הקבוצות שהינכם מעוניינים שהמשתמש ישתייך אליהן.',
+    'groupeditor' => 'עורך קבוצות',
+    'description' => 'תיאור',
+    'name' => 'שם',
+    'rights' => 'הרשאות',
+    'missingfields' => 'שדות חסרים',
+    'missingfieldsmsg' => 'הינכם חייבים לציין את השם והתיאור של הקבוצה',
+    'groupmanager' => 'מנהל קבוצות',
+    'newgroupmsg' => 'כדי לערוך או למחוק קבוצה, ליחצו על אייקון העריכה שמתחת. כדי ליצור קבוצה חדשה, ליחצו על "צרו חדש" לעיל. אנא שימו לב שקבוצות גרעין לא יכולות להימחק מפני שהן בשימוש המערכת.',
+    'groupname' => 'שם קבוצה',
+    'coregroup' => 'קבוצת גרעין',
+    'yes' => 'כן',
+    'no' => 'לא',
+    'corerightsdescr' => "קבוצה זו היא קבוצת גרעין של {$_CONF['site_name']}. לפיכך ההרשאות של קבוצה זו לא יכולות להשתנות. להלן רשימה לקריאה בלבד של ההרשאות שלקבוצה זו יש גישה אליהן.",
+    'groupmsg' => 'קבוצות ביטחון באתר זה הן היררכיות. הוספת קבוצה זו לכל אחת מן הקבוצות שלהלן תיתן  תיתן לאותה קבוצה זכויות זהות לאלו שיש לקבוצות אלו. היכן שמתאפשר מומלץ שתשתמשו בקבוצות שלהלן כדי לתת הרשאות לקבוצה. אם הנכם צריכים שקבוצה זו תקבל הרשאות יחודיות אז תוכלו לבחור הרשאות למגוון יכולות באתר במקום הקרוי \'הרשאות\'. כדי להוסיף קבוצה זו לכל אחת מאלו שלהלן פשוט סמנו את התיבה שליד הקבוצה/ות שהינכם מעוניינים בה/ן.',
+    'coregroupmsg' => "קבוצה זו היא קבוצת גרעין של {$_CONF['site_name']}. לפיכך הקבוצות שקבוצה זו שייכת אליהן לא יכולות להשתנות. להלן רשימה לקריאה בלבד של הקבוצות שקבוצה זו שייכת אליהן.",
+    'rightsdescr' => 'גישה של קבוצה להרשאה מסוימת להלן יכולה להינתן ישירות לקבוצה *או* לקבוצה אחרת שקבוצה זו שייכת אליה. אלו שהנכם רואים להלן שאין להן תיבות סימון הן ההרשאות שניתנו לקבוצה זו מפני שהן שייכות לקבוצה אחרת עם אותן הרשאות. ההרשאות שיש להן תיבות סימון להלן הן הרשאות שיכולות להינתן  ישירות לקבוצה זו.',
     'lock' => 'נעולה',
-    'members' => 'חברים רשומים באתר',
-    'anonymous' => 'אורח/ת באתר',
-    'permissions' => 'הרשאה',
-    'permissionskey' => 'R = read, E = edit, edit rights assume read rights',
+    'members' => 'חברים רשומים',
+    'anonymous' => 'אורחים באתר',
+    'permissions' => 'הרשאות',
+    'permissionskey' => 'R = read, E = edit, הרשאות edit מניחות הרשאות read',
     'edit' => 'עריכה',
     'none' => 'אין',
-    'accessdenied' => 'אין לך הרשאות כניסה!',
-    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
-    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
-    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
-    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
-    'newgroup' => 'New Group',
-    'adminhome' => 'Admin Home',
-    'save' => 'save',
-    'cancel' => 'cancel',
-    'delete' => 'delete',
-    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error',
-    'listusers' => 'List Users',
-    'listthem' => 'list',
-    'usersingroup' => 'Users in group %s',
-    'usergroupadmin' => 'User Group Administration',
-    'add' => 'Add',
-    'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
-    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'accessdenied' => 'הגישה לא אושרה',
+    'storydenialmsg' => "אין לכם גישה לצפות במאמר זה. סיבה אפשרית לכך היא שאינכם חברים ב-{$_CONF['site_name']}. אנא <a href=users.php?mode=new> היפכו לחברים</a> ב-{$_CONF['site_name']} כדי לקבל גישה מלאה של חברים!",
+    'eventdenialmsg' => "אין לכם גישה לצפות באירוע זה. סיבה אפשרית לכך היא שאינכם חברים ב-{$_CONF['site_name']}. אנא <a href=users.php?mode=new> היפכו לחברים</a> ב-{$_CONF['site_name']} כדי לקבל גישה מלאה של חברים!",
+    'nogroupsforcoregroup' => 'קבוצה זו לא שייכת לשום קבוצה מהקבוצות האחרות',
+    'grouphasnorights' => 'לקבוצה זו אין גישה לאף אחת מיכולות ההנהלה של האתר הזה',
+    'newgroup' => 'קבוצה חדשה',
+    'adminhome' => 'מרכז הניהול',
+    'save' => 'שמירה',
+    'cancel' => 'ביטול',
+    'delete' => 'מחיקה',
+    'canteditroot' => 'ניסיתם לערוך את קבוצת הגרעין אבל אינכם שייכים אליה בעצמכם ולכן גישתכם אליה לא מאושרת. אנא צרו קשר עם מנהלי המערכת אם הנכם מרגישים שמדובר בטעות',
+    'listusers' => 'חברים',
+    'listthem' => 'רשימה',
+    'usersingroup' => 'חברים בקבוצה "%s"',
+    'usergroupadmin' => 'ניהול קבוצות משתמשים',
+    'add' => 'הוספה',
+    'remove' => 'הסרה',
+    'availmembers' => 'חברים אפשריים',
+    'groupmembers' => 'חברי הקבוצה',
+    'canteditgroup' => 'כדי לערוך קבוצה זו, הינכם חייב להיות חברים בה. אנא צור קשר עם מנהלי המערכת אם הנכם מרגישים שמדובר בטעות.',
+    'cantlistgroup' => 'כדי לצפות ברשימת חברי קבוצה זו, הינכם חייב להיות חברים בה בעצמך. אנא צרו קשר עם מנהלי המערכת אם הנכם מרגישים שמדובר בטעות.',
+    'editgroupmsg' => 'על מנת לשנות את הרישום לקבוצות, ליחצו על שם החבר/ים והשתמשו בכפתורי ההוספה והסרה. אם החבר הוא חבר באותה קבוצה, שמם יופיע בצד הימני (השמאלי במצב שפה RTL) בלבד. ברגע שסיימתם - ליחצו על <b>Save</b> כדי לעדכן את הקבוצה ולחזור לעמוד ניהול הקבוצות הראשי.',
+    'listgroupmsg' => 'רשימת כל החברים בקבוצה: <b>%s</b>',
+    'search' => 'חיפוש',
+    'submit' => 'שליחה',
+    'limitresults' => 'הגבלת תוצאות',
+    'group_id' => 'קוד זיהוי הקבוצה',
+    'plugin_access_denied_msg' => 'הנכם מנסים באופן לא חוקי לגשת לעמוד ניהול ה-plugins. אנא שימו לב שכל הנסיונות לגשת לעמוד זה באופן לא חוקי נרשמות ביומן.',
+    'groupexists' => 'שם הקבוצה כבר קיים',
+    'groupexistsmsg' => 'כבר יש קבוצה בשם זה. שמות קבוצות חייבים להיות ייחודיים.'
 );
 
 ###############################################################################
 # admin/database.php
 
 $LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'Last 10 Back-ups',
-    'do_backup' => 'Do Backup',
-    'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
-    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
-    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
-    'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
-    'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
-    'backup_file' => 'Backup file',
-    'size' => 'Size',
+    'last_ten_backups' => '10 הגיבויים האחרונים',
+    'do_backup' => 'צרו גיבוי',
+    'backup_successful' => 'גיבוי מאגר הנתונים עבר בהצלחה.',
+    'db_explanation' => 'כדי ליצור גיבוי חדש של המערכת, ליחצו על הכפתור שלעיל',
+    'not_found' => "מיקום שגוי או שה-mysqldump utility היא לא executable.<br>בידקו את הגדרת ה- <strong>\$_DB_mysqldump_path</strong> ב-config.php.<br>המשתנה כרגע מוגדר כ: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'הגיבוי נכשל. גודל הקובץ היה 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} לא קיים או שזו לא ספרייה",
+    'no_access' => "שגיאה: הספרייה {$_CONF['backup_path']} חסומה.",
+    'backup_file' => 'קובץ גיבוי',
+    'size' => 'גודל',
     'bytes' => 'Bytes',
-    'total_number' => 'Total number of backups: %d'
+    'total_number' => 'סך הכל גיבויים: %d'
 );
 
 ###############################################################################
 
 $LANG_BUTTONS = array(
     1 => 'דף הבית',
-    2 => 'צור קשר',
-    3 => 'כתיבת הודעה/מאמר',
+    2 => 'צרו קשר',
+    3 => 'פרסמו מאמר',
     4 => 'קישורים',
     5 => 'סקרים',
     6 => 'יומן',
-    7 => 'סטטיסטיקה',
+    7 => 'סטטיסטיקת האתר',
     8 => 'התאמה אישית',
     9 => 'חיפוש',
-    10 => 'חיפוש מתקדם'
+    10 => 'חיפוש מתקדם',
+    11 => 'ספריית האתר'
 );
 
 ###############################################################################
@@ -1234,17 +1273,17 @@
 
 $LANG_404 = array(
     1 => '404 Error',
-    2 => 'Gee, I\'ve looked everywhere but I can not find <b>%s</b>.',
-    3 => "<p>We're sorry, but the file you have requested does not exist. Please feel free to check the <a href=\"{$_CONF['site_url']}\">main page</a> or the <a href=\"{$_CONF['site_url']}/search.php\">search page</a> to see if you can find what you lost."
+    2 => 'לא נמצא העמוד <b>%s</b>.',
+    3 => "<p>מצטערים, אבל הקובץ שביקשתם לקבל לא קיים. אנא הרגישו חופשי לבדוק את <a href=\"{$_CONF['site_url']}\">העמוד הראשי</a> או את <a href=\"{$_CONF['site_url']}/search.php\">עמוד החיפוש</a> כדי לראות אם תוכלו למצוא את מה שאיבדתם."
 );
 
 ###############################################################################
 # login form
 
 $LANG_LOGIN = array(
-    1 => 'כדי לבצע פעולה זו הנך נדרש להתחבר',
-    2 => 'כדי להיכנס לאזור זה, הנך נדרש/ת להתחבר כמשתמש',
-    3 => 'כניסה',
+    1 => 'נדרשת התחברות למערכת',
+    2 => 'מצטערים, כדי להיכנס לאזור זה הינכם נדרשים להתחבר כמשתמשים',
+    3 => 'התחברות למערכת',
     4 => 'משתמש חדש'
 );
 
@@ -1252,20 +1291,226 @@
 # pdfgenerator.php
 
 $LANG_PDF = array(
-    1 => 'The PDF feature has been disabled',
-    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
-    3 => 'Unknown error during PDF generation',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Loading your document.',
-    6 => 'Please wait while your document is loaded.',
-    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
-    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
-    9 => 'PDF Generator',
-    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
-    11 => 'URL',
-    12 => 'Generate PDF!',
-    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
-    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+    1 => 'יכולת ה-PDF מנוטרלת',
+    2 => 'המסמך שבוקש לא הוגש. המסמך נמצא אבל לא הצליח להתקבל. אנא ודאו שהנכם מגישים רק מסמכים בפורמט HTML שנכתבו בסטנדרט xHTML. אנא שימו לב שמסמכי HTML יותר מדי מורכבים עלולים לא להיות מוגשים כמו שצריך או בכלל. המסמך שנוצר כתוצאה מנסיונכם תפס בגודלו 0 bytes, ונמחק. אם הנכם בטוחים שהמסמך שלכם צריך לעבור הגשה ללא בעיה, אנא הגישו אותו מחדש.',
+    3 => 'בעיה לא ידועה בעת יצירת ה-PDF',
+    4 => "שום מידע על העמוד לא ניתן או שהנכם מעוניינים להשתמש בכלי יצירת PDF יש מאין שלהלן. אם הנכם מרגישים שאתם מקבלים עמוד זה בטעות אז אנא צרו קשר עם מנהלי המערכת. אם לא, תוכלו להשתמש בטופס שלהלן כדי ליצור PDF בצורת אד הוק.",
+    5 => 'טוען את המסמך שלך.',
+    6 => 'אנא חכו עד שהמסמך שלך ייטען.',
+    7 => 'הנכם יכולים לעשות right click על הכפתור שלהלן ולבחור \'save target...\' או \'save link location...\' כדי לשמור עותק של המסמך שלכם.',
+    8 => "המיקום שניתן בקובץ ההגדרות ל-HTMLDoc binary הוא לא אפשרי או שהמערכת אינה יכולה להריץ אותו. אנא צור קשר עם מנהלי האתר אם בעיה זו ממשיכה.",
+    9 => 'יוצר PDF',
+    10 => "זהו כלי יצירת PDF אד הוק. הוא ינסה להמיר כל עמוד אינטרנט שתציינו ל-PDF. אנא שימו לב שיש עמודי אינטרנט שלא מוגשים כמו שצריך לצורך יכולת זו. זוהי מגבלה של ה-HTMLDoc PDF generation tool וטעויות כאלו לא צריכות להיות מדווחות למנהלי אתר זה",
+    11 => 'כתובת',
+    12 => 'צרו PDF!',
+    13 => 'הגדרות ה-PHP שבשרת הזה לא מאפשרות לעמודי אינטרנט להיות בשימוש של הפקודה fopen(). מנהל המערכת חייב לערוך את קובץ ה-php.ini ולקבוע את allow_url_fopen על On',
+    14 => 'ה-PDF שביקשתם לא קיים או שניסיתם לגשת לקובץ בצורה לא מורשית.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'הפנייה',
+    'from' => 'מ:',
+    'tracked_on' => 'נקלטה ב:',
+    'read_more' => '[קיראו עוד]',
+    'intro_text' => 'הנה מה שהיה לאחרים להגיד בנוגע לנושא \'%s\':',
+    'no_comments' => 'אין הפניות עם תגובות לערך זה.',
+    'this_trackback_url' => 'כתובת מפנה לערך זה:',
+    'num_comments' => '%d הפניות עם תגובות',
+    'send_trackback' => 'שילחו פינגים',
+    'preview' => 'תצוגה מקדימה',
+    'editor_title' => 'שילחו הפנייה עם תגובה',
+    'trackback_url' => 'כתובת מפנה',
+    'entry_url' => 'כתובת להפנייה',
+    'entry_title' => 'כותרת להפנייה',
+    'blog_name' => 'שם אתר',
+    'excerpt' => 'קטע להפנייה',
+    'truncate_warning' => 'שימו לב: האתר שאליו תפנו עשוי לקטוע את הקטע שלכם',
+    'button_send' => 'שליחה',
+    'button_preview' => 'תצוגה מקדימה',
+    'send_error' => 'שגיאה',
+    'send_error_details' => 'שגיאה בעת שליחת הפנייה עם תגובה:',
+    'url_missing' => 'אין כתובת מפנה',
+    'url_required' => 'נא כיתבו לפחות כתובת בשביל הפנייה.',
+    'target_missing' => 'אין כתובת להפנייה',
+    'target_required' => 'אנא כיתבו כתובת להפנייה',
+    'error_socket' => 'לא יכול לפתוח socket.',
+    'error_response' => 'התשובה לא מובנת.',
+    'error_unspecified' => 'שגיאה בלתי מוגדרת.',
+    'select_url' => 'ביחרו כתובת מפנה',
+    'not_found' => 'לא נמצאה הכתובת המפנה',
+    'autodetect_failed' => 'לא ניתן למצוא את הכתובת להפנייה של הפירסום שברצונכם לשלוח לו תגובה. אנא הכניסו אותה באופן ידני להלן.',
+    'trackback_explain' => 'מתוך הקישורים שלהלן, אנא ביחרו את הכתובת שהנכם רוצים לשלוח אליה את ההפנייה עם תגובה שלכם. לאחר מכן יהיה נסיון לזהות את כתובת ההפנייה לפירסום זה. או שתוכלו <a href="%s">להכניס זאת ידנית</a> אם אתם כבר יודעים אותה.',
+    'no_links_trackback' => 'לא נמצאו קישורים. אינכם יכולים לשלוח הפנייה עם תגובה לטקסט זה.',
+    'pingback' => 'פינג חוזר',
+    'pingback_results' => 'תוצאות פינגים חוזרים',
+    'send_pings' => 'שילחו פינגים',
+    'send_pings_for' => 'שילחו פינגים עבור "%s"',
+    'no_links_pingback' => 'לא נמצאו קישורים. שום פינגים חוזרים לא נשלחו לטקסט זה.',
+    'pingback_success' => 'נשלח פינג חוזר.',
+    'no_pingback_url' => 'לא נמצאה כתובת לפינג חוזר.',
+    'resend' => 'שילחו מחדש',
+    'ping_all_explain' => 'הנכם יכולים עכשיו להתקשר אל האתרים שקישרתם אליהם (<a href="http://en.wikipedia.org/wiki/Pingback">פינג חוזר</a>), לפרסם את העובדה שהאתר שלכם עודכן על ידי שליחת פינג לשירותי ספריות בלוגים, או לשלוח <a href="http://en.wikipedia.org/wiki/Trackback">הפנייה</a> במקרה שמה שכתבתם הוא תגובה לגבי מאמר באתר של מישהו אחר.',
+    'pingback_button' => 'שליחת פינג חוזר',
+    'pingback_short' => 'שליחת פינגים חוזרים לכל האתרים שמקושרים מהפנייה זו.',
+    'pingback_disabled' => '(הפינגים החוזרים מנוטרלים)',
+    'ping_button' => 'שליחת פינג',
+    'ping_short' => 'שליחת פינגים לשירותי ספריות בלוגים.',
+    'ping_disabled' => '(הפינגים מנוטרלים)',
+    'trackback_button' => 'שליחת הפנייה',
+    'trackback_short' => 'שליחת הפנייה עם תגובה.',
+    'trackback_disabled' => '(הפניות מנוטרלות)',
+    'may_take_a_while' => 'אנא שימו לב ששליחות פינגים חוזרים ופינגים יכולות לקחת זמן.',
+    'ping_results' => 'תוצאות פינגים',
+    'unknown_method' => 'שיטת שליחת הפינג לא ידועה',
+    'ping_success' => 'הפינג נשלח.',
+    'error_site_name' => 'אנא כיתבו את שם האתר.',
+    'error_site_url' => 'אנא כיתבו את כתובת האתר.',
+    'error_ping_url' => 'אנא כיתבו כתובת נכונה לשליחת פינגים.',
+    'no_services' => 'לא הוגדרו שירותי ספריות בלוגים.',
+    'services_headline' => 'שירותי ספריות בלוגים',
+    'service_explain' => 'כדי לשנות או למחוק שירות ספריית בלוגים, ליחצו על אייקון העריכה של אותו שירות להלן. כדי להוסיף שירות ספריית בלוגים חדש, ליחצו על "צרו חדש" לעיל.',
+    'service' => 'שירות',
+    'ping_method' => 'שיטת שליחת פינג',
+    'service_website' => 'אתר',
+    'service_ping_url' => 'כתובת לשליחת פינג',
+    'ping_standard' => 'פינג סטנדרטי',
+    'ping_extended' => 'פינג מורחב',
+    'ping_unknown' => '(שיטה לא ידועה)',
+    'edit_service' => 'עירכו שירות ספריית בלוגים',
+    'trackbacks' => 'הפניות',
+    'editor_intro' => 'הכינו את ההפנייה עם תגובה שלכם עבור <a href="%s">%s</a>.',
+    'editor_intro_none' => 'הכינו את ההפנייה עם תגובה שלכם.',
+    'trackback_note' => 'כדי לשלוח הפנייה עם תגובה למאמר, לכו לרשימת המאמרים וליחצו על "' . $LANG24[21] . '" במאמר הרצוי. כדי לשלוח הפנייה שאינה קשורה למאמר, <a href="%s">ליחצו כאן</a>.',
+    'pingback_explain' => 'כיתבו כתובת לשליחת הפינג החוזר. הפינג החוזר יכוון לאתר הבית שלכם.',
+    'pingback_url' => 'כתובת לפינג חוזר',
+    'site_url' => 'כתובת אתר זה',
+    'pingback_note' => 'כדי לשלוח פינג חוזר למאמר, לכו לרשימת המאמרים וליחצו על "' . $LANG24[21] . '" במאמר הרצוי. כדי לשלוח פינג חוזר שלא קשור למאמר, <a href="%s">ליחצו כאן</a>.',
+    'pbtarget_missing' => 'אין כתובת לשליחת פינג חוזר',
+    'pbtarget_required' => 'אנא הכניסו כתובת לשליחת פינג חוזר',
+    'pb_error_details' => 'שגיאה בעת שליחת הפינג:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'ספריית מאמרים',
+    'title_year' => 'ספריית מאמרים עבור %d',
+    'title_month_year' => 'ספריית מאמרים עבור %s %d',
+    'nav_top' => 'בחזרה לספריית המאמרים',
+    'no_articles' => 'אין מאמרים.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => 'יש %n %i חדשים ב-%t ה%s האחרונים/ות',
+    'new_last' => 'ב-%t ה%s האחרונים/ות',
+    'minutes' => 'דקות',
+    'hours' => 'שעות',
+    'days' => 'ימים',
+    'weeks' => 'שבועות',
+    'months' => 'חודשים',
+    'minute' => 'דקה',
+    'hour' => 'שעה',
+    'day' => 'יום',
+    'week' => 'שבוע',
+    'month' => 'חודש'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'חיפוש',
+    'limit_results' => 'הגבלת תוצאות',
+    'submit' => 'שליחה',
+    'edit' => 'עריכה',
+    'admin_home' => 'מרכז ניהול',
+    'create_new' => 'צרו חדש',
+    'enabled' => 'מאופשר',
+    'title' => 'כותרת',
+    'type' => 'סוג',
+    'topic' => 'נושא',
+    'help_url' => 'כתובת קובץ עזרה',
+    'save' => 'שמירה',
+    'cancel' => 'ביטול',
+    'delete' => 'מחיקה',
+    'copy' => 'העתקה',
+    'no_results' => '- לא נמצאו נתונים -',
+    'data_error' => 'הייתה בעיה בעיבוד נתוני המנוי שלכם. אנא בידקו את מקור הנתונים.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'איפשור תגובות',
+    -1 => 'ניטרול תגובות'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'שטוחות',
+    'nested' => 'בצורת עץ',
+    'threaded' => 'מושחלות',
+    'nocomment' => 'ללא תגובות'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(ללא)',
+    3600 => 'שעה',
+    7200 => 'שעתיים',
+    10800 => '3 שעות',
+    28800 => '8 שעות',
+    86400 => 'יום',
+    604800 => 'שבוע',
+    2678400 => 'חודש'
+);
+
+$LANG_dateformats = array(
+    0 => 'ברירת המחדל של המערכת'
+);
+
+$LANG_featurecodes = array(
+    0 => 'לא מוצג',
+    1 => 'מוצג'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'הראה רק בנושא',
+    1 => 'הראה בעמוד הראשי'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'טקסט פשוט',
+    'html' => 'פורמט HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'הישן קודם',
+    'DESC' => 'החדש קודם'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'איפשור הפניות',
+    -1 => 'ניטרול הפניות'
 );
 
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/hellenic.php 1.4.0sr5-1/cpanel-glprivate/language/hellenic.php
--- 1.3.11sr1/cpanel-glprivate/language/hellenic.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/hellenic.php	2006-08-08 02:39:06.000000000 -0500
@@ -3,15 +3,17 @@
 ###############################################################################
 # hellenic.php
 # This is the Hellenic language page for GeekLog!
-# Revision No: 4 
-# Date 17/01/2003
+# Revision No: 5 
+# Date 21/04/2005
 #
+# + Compatible with Geeklog 1.3.11 + other corrections
 # + Geeklog?s new URL added
 # + Formalization of the language completed
 # + Language is now more ?Modern Greek Friendly?
 # + Removal of the most pre-modern Greek (before 1981) words.
+#  
 #
-# Copyright (C) 2002 Master of Death
+# Copyright (C) 2002-2005 Master of Death
 # mzozd@ad2u.gr & mzozd@hotmail.com
 #
 # This program is free software; you can redistribute it and/or
@@ -84,9 +86,9 @@
     35 => '',
     36 => '',
     37 => '       ',
-    38 => 'Content Syndication',
+    38 => ' ',
     39 => '',
-    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    40 => '  <tt>register_globals</tt>  <tt></tt>   <tt>php.ini</tt>.  Geeklog,     ,    <tt>register_globals</tt>   <strong></strong>.     ,        <strong>on</strong>      WWW.',
     41 => '',
     42 => ':',
     43 => '  ',
@@ -123,7 +125,7 @@
     74 => '',
     75 => ' ',
     76 => ' ',
-    77 => 'plugins',
+    77 => ' ',
     78 => ' ',
     79 => ' ',
     80 => '  ',
@@ -144,7 +146,7 @@
     95 => '   ',
     96 => '',
     97 => ' ',
-    98 => 'Plug-ins',
+    98 => ' ',
     99 => '',
     100 => '   ',
     101 => '  ',
@@ -155,11 +157,21 @@
     106 => '',
     107 => '     GL',
     108 => ' Cache',
-    109 => 'Report abuse',
-    110 => 'Report this post to the site admin',
-    111 => 'View PDF Version',
-    112 => 'Registered Users',
-    113 => 'Documentation'
+    109 => '     ',
+    110 => '       ',
+    111 => '   PDF',
+    112 => ' ',
+    113 => '',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -196,7 +208,7 @@
     7 => '     ',
     8 => "  .        {$_CONF['commentspeedlimit']}    ",
     9 => '',
-    10 => 'Send Report',
+    10 => ' ',
     11 => '   ',
     12 => '   :   .        .',
     13 => '  ',
@@ -211,9 +223,9 @@
     22 => '         ',
     23 => '      ',
     24 => ' ',
-    25 => 'Are you sure you want to report this post to the site admin?',
-    26 => '%s reported the following abusive comment post:',
-    27 => 'Abuse report'
+    25 => ' ()           ;',
+    26 => '%s     :',
+    27 => '  '
 );
 
 ###############################################################################
@@ -306,27 +318,43 @@
     84 => ' :',
     85 => ' :',
     86 => '     ',
-    87 => 'Your login name',
-    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
-    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
-    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
-    91 => 'Set New Password',
-    92 => 'Enter New Password',
-    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
-    94 => 'Delete Account "%s"',
-    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
-    96 => 'delete account',
-    97 => 'Confirm Account Deletion',
-    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
-    99 => 'Privacy Options for',
-    100 => 'Email from Admin',
-    101 => 'Allow email from Site Admins',
-    102 => 'Email from Users',
-    103 => 'Allow email from other users',
-    104 => 'Show Online Status',
-    105 => 'Show up in Who\'s Online block',
-    106 => 'Location',
-    107 => 'Shown in your public profile'
+    87 => '    ',
+    88 => ", ( ),           \"%s\"   {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n            :\n\n",
+    89 => "                    (          ).\n\n",
+    90 => '          .               .',
+    91 => '  ',
+    92 => '   ',
+    93 => '         %d .        %d       .',
+    94 => '  "%s"',
+    95 => '  " "           .        <strong></strong>            "Anonymous".',
+    96 => ' ',
+    97 => '  ',
+    98 => ' ()       ;              .   ()   " "    .',
+    99 => '  ',
+    100 => '    ',
+    101 => '     ',
+    102 => '    ',
+    103 => '    ',
+    104 => '    ',
+    105 => '    "    ',
+    106 => '',
+    107 => '    ',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -339,29 +367,8 @@
     4 => ' ',
     5 => '',
     6 => '',
-    7 => 'First',
-    8 => 'Last'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => ' ',
-    2 => '    ',
-    3 => ' '
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => '   ',
-    2 => '      ',
-    3 => '',
-    4 => '  ',
-    5 => '',
-    6 => 'View other poll questions'
+    7 => '',
+    8 => ''
 );
 
 ###############################################################################
@@ -397,12 +404,12 @@
     27 => ' ',
     28 => ' %s : ',
     29 => "      {$_CONF['site_name']}  ",
-    30 => '    ',
+    30 => '   ',
     31 => '',
     32 => '',
     33 => '   ',
     34 => ' ',
-    35 => 'Sorry, this user prefers not to receive any emails.'
+    35 => ',        .'
 );
 
 ###############################################################################
@@ -435,37 +442,41 @@
     24 => '',
     25 => ' ',
     26 => ' ',
-    27 => ' ',
+    27 => '',
     28 => '            .',
     29 => '   ',
     30 => '          . ',
-    31 => '           plug-in. ',
+    31 => '           . ',
     32 => '',
     33 => 'URL',
     34 => '',
     35 => '',
-    36 => '           .',
+    36 => '          .',
     37 => ' ',
     38 => ' ',
     39 => '',
     40 => '',
-    41 => 'Your query string should have at least 3 characters.',
-    42 => 'Please use a date formatted as YYYY-MM-DD (year-month-day).',
-    43 => 'exact phrase',
-    44 => 'all of these words',
-    45 => 'any of these words',
-    46 => 'Next',
-    47 => 'Previous',
-    48 => 'Author',
-    49 => 'Date',
-    50 => 'Hits',
-    51 => 'Link',
-    52 => 'Location',
-    53 => 'Story Results',
-    54 => 'Comment Results',
-    55 => 'the phrase',
-    56 => 'AND',
-    57 => 'OR'
+    41 => '       (3) .',
+    42 => ',     YYYY-MM-DD (--).',
+    43 => ' ',
+    44 => '  ',
+    45 => '   ',
+    46 => '',
+    47 => '',
+    48 => '',
+    49 => '',
+    50 => '',
+    51 => '',
+    52 => '',
+    53 => ' ',
+    54 => ' ',
+    55 => ' ',
+    56 => '',
+    57 => '',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -495,7 +506,14 @@
     21 => '            .',
     22 => ' 10        ',
     23 => ' ',
-    24 => '          .'
+    24 => '          .',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -506,7 +524,7 @@
     2 => '     /   ',
     3 => '   ',
     4 => '  ',
-    5 => 'PDF Story Format'
+    5 => '   PDF'
 );
 
 ###############################################################################
@@ -547,7 +565,7 @@
     32 => '',
     33 => ' ',
     34 => '',
-    35 => '  HTML  ',
+    35 => '  HTML  ',
     36 => ' ',
     37 => "     {$_CONF['site_name']}                        .              . <br>           <br>",
     38 => '   ',
@@ -592,7 +610,7 @@
     1 => '   ',
     2 => '           ',
     3 => '  ',
-    4 => 'There was a problem reading this feed (see error.log for details).',
+    4 => '        (   error.log  ).',
     5 => '  ',
     6 => '',
     7 => '',
@@ -645,10 +663,15 @@
     54 => '',
     55 => '',
     56 => '',
-    57 => 'Move Block Down',
-    58 => 'Move Block Up',
-    59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    57 => '    ',
+    58 => '    ',
+    59 => '    ',
+    60 => '    ',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -656,7 +679,7 @@
 
 $LANG22 = array(
     1 => ' ',
-    2 => 'Error',
+    2 => '',
     3 => ' ',
     4 => 'URL ',
     5 => '  ',
@@ -677,38 +700,9 @@
     20 => '',
     21 => ' ',
     22 => '',
-    23 => 'Bad start date.',
-    24 => 'Bad end date.',
-    25 => 'End date is before start date.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => ' ',
-    2 => '',
-    3 => ' ',
-    4 => 'URL ',
-    5 => '',
-    6 => '( http://)',
-    7 => '',
-    8 => ' ',
-    9 => ' ',
-    10 => '    , URL  .',
-    11 => ' ',
-    12 => '             .           ',
-    13 => ' ',
-    14 => ' ',
-    15 => 'URL ',
-    16 => '  ',
-    17 => "          .    . , <a ref=\"{$_CONF['site_admin_url']}/link.php\">     </a>.",
-    18 => ' ',
-    19 => ' ',
-    20 => ' ,  ',
-    21 => '',
-    22 => '',
-    23 => ''
+    23 => '   .',
+    24 => '   .',
+    25 => '       .'
 );
 
 ###############################################################################
@@ -726,7 +720,7 @@
     9 => '',
     10 => '',
     11 => '',
-    12 => 'ID',
+    12 => '/',
     13 => '',
     14 => '',
     15 => '',
@@ -734,17 +728,17 @@
     17 => ' ',
     18 => '',
     19 => '',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => ' ',
     23 => '             .           ',
-    24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    24 => ' /       . ,    /.',
+    25 => 'Error when saving story',
     26 => ' ',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'File Upload Errors',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => '     ',
     31 => '  ,      . ',
     32 => '',
     33 => '       .',
@@ -762,53 +756,44 @@
     45 => '',
     46 => '<b>:</b>      ,          .       RDF          ',
     47 => '',
-    48 => 'image',
-    49 => 'right',
-    50 => 'left',
+    48 => '',
+    49 => '',
+    50 => '',
     51 => '                  .      [imageX], [imageX_right] or [imageX_left]        . :       .    ,        . <BR><P><B></B>:                         .          ',
     52 => '',
     53 => ' .                 .',
     54 => '    ',
     55 => '          .    .',
     56 => '  ',
-    57 => 'View unscaled image',
-    58 => 'Story Management',
-    59 => 'Option',
-    60 => 'Enabled',
-    61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => '',
-    2 => 'Please enter a question and at least one answer.',
-    3 => ' ',
-    4 => '  %s ',
-    5 => ' ',
-    6 => ' ',
-    7 => '(  )',
-    8 => '   ',
-    9 => '',
-    10 => ' / ',
-    11 => '         		%s',
-    12 => '          		%s ',
-    13 => ' ',
-    14 => '',
-    15 => '',
-    16 => '',
-    17 => 'Please enter a Poll ID',
-    18 => ' ',
-    19 => '             .           ',
-    20 => '',
-    21 => '  ',
-    22 => "          .    . , <a ref=\"{$_CONF['site_admin_url']}/poll.php\">     </a>.",
-    23 => ' ',
-    24 => ' ',
-    25 => '',
-    26 => ''
+    57 => '   ',
+    58 => ' ',
+    59 => '',
+    60 => '',
+    61 => ' ',
+    62 => ' ',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -816,12 +801,12 @@
 
 $LANG27 = array(
     1 => ' ',
-    2 => 'ID ',
+    2 => '/ ',
     3 => ' ',
     4 => ' ',
     5 => '(  )',
     6 => '              . ',
-    7 => '  ID  and     ',
+    7 => '  / and     ',
     8 => ' ',
     9 => '             .           ',
     10 => ' ',
@@ -836,11 +821,14 @@
     19 => '',
     20 => '',
     21 => '',
-    22 => 'Default',
-    23 => 'make this the default topic for new story submissions',
+    22 => '',
+    23 => '       ',
     24 => '(*)',
-    25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    25 => ' ',
+    26 => '      .',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -881,8 +869,19 @@
     32 => '  .  %d  %d ',
     33 => '',
     34 => ':       .',
-    35 => 'Last Login',
-    36 => '(never)'
+    35 => '   ',
+    36 => '()',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -994,23 +993,23 @@
 # admin/plugins.php
 
 $LANG32 = array(
-    1 => '   plugins         Geeklog     .       plugins     <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a>      plugins  .          plugin                    plugin   .             plugins            .      .     plugins       plugin. ',
-    2 => '   Plug-in',
-    3 => '  Plug-in',
-    4 => ' Plug-in',
-    5 => ' Plug-in',
-    6 => ':  Plug-in   ',
-    7 => ' plug-in       . ,    .',
-    8 => '  Plugin ',
-    9 => '  plugin     Geeklog.       <a href="http://www.geeklog.net">Geeklog</a>       plug-in.',
-    10 => '<br><b>   plugins.</b><br><br>',
-    11 => '       plug-in,        .        plug-in,     plug-in      .     plug-in please    . ',
-    12 => '     plugin  plugineditor()',
-    13 => ' Plug-In',
-    14 => ' Plug-In',
+    1 => '             Geeklog     .             <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a>         .                                   .                           .      .             . ',
+    2 => '    ',
+    3 => '   ',
+    4 => '  ',
+    5 => '  ',
+    6 => ':      ',
+    7 => '         . ,    .',
+    8 => 'H      ',
+    9 => '        Geeklog.       <a href="http://www.geeklog.net">Geeklog</a>      .',
+    10 => '<br><b>    .</b><br><br>',
+    11 => '        ,        .         ,          .   to      . ',
+    12 => '      a  plugineditor()',
+    13 => '  ',
+    14 => '  ',
     15 => ' ',
-    16 => ' Plug-in',
-    17 => ' Plug-in',
+    16 => '  ',
+    17 => '  ',
     18 => ' Geeklog',
     19 => '',
     20 => '',
@@ -1019,58 +1018,70 @@
     23 => '',
     24 => '',
     25 => '',
-    26 => ' Plug-in',
-    27 => ' Plug-in',
-    28 => ' Plug-in',
+    26 => '  ',
+    27 => '  ',
+    28 => '  ',
     29 => ' Geeklog',
-    30 => ' Plug-in;',
-    31 => ' /       plug-in;      ,          plug-in   .   /        .',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'Code Version',
-    34 => 'Update'
+    30 => '  ;',
+    31 => ' /        ;      ,           .   /        .',
+    32 => '<p><b>,    "AutoLink tag"   </b></p>',
+    33 => ' ',
+    34 => '',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
 # admin/syndication.php
 
 $LANG33 = array(
-    1 => 'create feed',
-    2 => 'save',
-    3 => 'delete',
-    4 => 'cancel',
-    10 => 'Content Syndication',
-    11 => 'New Feed',
-    12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
-    14 => 'Title',
-    15 => 'Type',
-    16 => 'Filename',
-    17 => 'Format',
-    18 => 'last updated',
-    19 => 'Enabled',
-    20 => 'Yes',
-    21 => 'No',
-    22 => '<i>(no feeds)</i>',
-    23 => 'all Stories',
-    24 => 'Feed Editor',
-    25 => 'Feed Title',
-    26 => 'Limit',
-    27 => 'Length of entries',
-    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
-    29 => 'Description',
-    30 => 'Last Update',
-    31 => 'Character Set',
-    32 => 'Language',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
-    36 => 'Select type of feed',
-    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
-    38 => 'Error: Missing Fields',
-    39 => 'Please fill in the Feed Title, Description, and Filename.',
-    40 => 'Please enter a  number of entries or number of hours.',
-    41 => 'Links',
-    42 => 'Events'
+    1 => '  ',
+    2 => '',
+    3 => '',
+    4 => '',
+    10 => ' ',
+    11 => '  ',
+    12 => ' ',
+    13 => '           .           .',
+    14 => '',
+    15 => '',
+    16 => ' ',
+    17 => '',
+    18 => ' ',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '<i>(   )</i>',
+    23 => '  ',
+    24 => '  ',
+    25 => '  ',
+    26 => '',
+    27 => ' ',
+    28 => '(0 =  , 1 =  ,  =     .)',
+    29 => '',
+    30 => ' ',
+    31 => ' ',
+    32 => '',
+    33 => '',
+    34 => '',
+    35 => '',
+    36 => '  ',
+    37 => '        . ,              Geeklog     .',
+    38 => ':     ',
+    39 => ',     ,    .',
+    40 => ',          .',
+    41 => '',
+    42 => '',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1099,12 +1110,12 @@
     20 => '   .',
     21 => '    .',
     22 => '   .',
-    23 => '     .  id    .',
+    23 => '     .  /    .',
     24 => '      .',
     25 => '           .',
     26 => '        ',
     27 => '   .',
-    28 => ' plug-in  ',
+    28 => '    ',
     29 => '           ,',
     30 => '  ',
     31 => '            .    -    .',
@@ -1120,24 +1131,38 @@
     41 => '              .    -    .',
     42 => '    .',
     43 => '   .',
-    44 => ' plug-in   !',
-    45 => ' plug-in   !',
+    44 => '     !',
+    45 => '     !',
     46 => '               .    -    .',
     47 => '       *nix.       *nix   cache    .      Windows,          adodb_*.php.',
     48 => "          {$_CONF['site_name']}.        .               .",
     49 => '    .',
     50 => '   .',
-    51 => 'This username is already in use. Please choose another one.',
-    52 => 'The email address provided does not appear to be a valid email address.',
-    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
-    54 => 'Your request for a new password has expired. Please try again below.',
-    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
-    56 => 'The email address provided is already in use for another account.',
-    57 => 'Your account has been successfully deleted.',
-    58 => 'Your feed has been successfully saved.',
-    59 => 'The feed has been successfully deleted.',
-    60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    51 => '            . ,    .',
+    52 => '       .',
+    53 => '      . ,         .',
+    54 => '          . ,  .',
+    55 => '          . ,                .',
+    56 => '               .',
+    57 => '    ',
+    58 => '    ',
+    59 => '    ',
+    60 => '    ',
+    61 => '  %s: o  ',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1188,16 +1213,25 @@
     'cancel' => '',
     'delete' => '',
     'canteditroot' => '                 .               .',
-    'listusers' => 'List Users',
-    'listthem' => 'list',
-    'usersingroup' => 'Users in group "%s"',
-    'usergroupadmin' => 'User Group Administration',
-    'add' => 'Add',
-    'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
-    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'listusers' => ' ',
+    'listthem' => '',
+    'usersingroup' => '    "%s"',
+    'usergroupadmin' => '  ',
+    'add' => '',
+    'remove' => '',
+    'availmembers' => ' ',
+    'groupmembers' => ' ',
+    'canteditgroup' => '          .             .',
+    'cantlistgroup' => '              .             .',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1207,16 +1241,15 @@
     'last_ten_backups' => ' 10  ',
     'do_backup' => '  ',
     'backup_successful' => '       ',
-    'no_backups' => '     ',
     'db_explanation' => '         Geeklog,    ',
     'not_found' => "     mysqldump   . <br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>   : <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => '   :      0 bytes',
     'path_not_found' => "{$_CONF['backup_path']}      ",
     'no_access' => ":   {$_CONF['backup_path']}   .",
     'backup_file' => '  ',
-    'size' => 'Size',
-    'bytes' => 'Bytes',
-    'total_number' => 'Total number of backups: %d'
+    'size' => '',
+    'bytes' => 'ytes',
+    'total_number' => '   : %d'
 );
 
 ###############################################################################
@@ -1231,7 +1264,8 @@
     7 => ' ',
     8 => '',
     9 => '',
-    10 => ' '
+    10 => ' ',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1257,20 +1291,226 @@
 # pdfgenerator.php
 
 $LANG_PDF = array(
-    1 => 'The PDF feature has been disabled',
-    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
-    3 => 'Unknown error during PDF generation',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Loading your document.',
-    6 => 'Please wait while your document is loaded.',
-    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
-    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
-    9 => 'PDF Generator',
-    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    1 => '   PDF  ',
+    2 => '     . ,     HTML        xHTML. ,               HTML.       0 bytes   .   ()      ,     .',
+    3 => '      PDF',
+    4 => "            PDF    .       \n               . ,             PDF \n.",
+    5 => '  ',
+    6 => ',         .',
+    7 => '                  " ...".',
+    8 => "        (config.php)    HTMLDoc          . ,         \n	.",
+    9 => '  PDF',
+    10 => "       PDF.         URL   PDF. ,           .       HTMLDoc PDF.     \n            HTMLDoc PDF.",
     11 => 'URL',
-    12 => 'Generate PDF!',
-    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
-    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+    12 => ' PDF!',
+    13 => '    PHP        URL    fopen().          "allow_url_fopen"   "on"     PHP',
+    14 => '  PDF           .'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
 );
 
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/hellenic_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/hellenic_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/hellenic_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/hellenic_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1516 @@
+<?php
+
+###############################################################################
+# hellenic.php
+# This is the Hellenic language page for GeekLog!
+# Revision No: 5 
+# Date 21/04/2005
+#
+# + Compatible with Geeklog 1.3.11 + other corrections
+# + Geeklog?s new URL added
+# + Formalization of the language completed
+# + Language is now more ?Modern Greek Friendly?
+# + Removal of the most pre-modern Greek (before 1981) words.
+#  
+#
+# Copyright (C) 2002-2005 Master of Death
+# mzozd@ad2u.gr & mzozd@hotmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Από τον/την:',
+    2 => 'Διαβάστε περισσότερα',
+    3 => 'σχόλια',
+    4 => 'Επεξεργασία',
+    5 => 'Ψηφίστε',
+    6 => 'Αποτελέσματα',
+    7 => 'Αποτελέσματα ψηφοφορίας',
+    8 => 'Ψήφοι',
+    9 => 'Μενού Διαχειριστή:',
+    10 => 'Κατατεθέντα άρθρα',
+    11 => 'Άρθρα',
+    12 => 'Συγκροτήματα',
+    13 => 'Θέματα',
+    14 => 'Σύνδεσμοι',
+    15 => 'Γεγονότα',
+    16 => 'Ψηφοφορίες',
+    17 => 'Χρήστες',
+    18 => 'Εντολή SQL',
+    19 => 'Αποσύνδεση',
+    20 => 'Πληροφορίες Χρήστη:',
+    21 => 'Όνομα χρήστη',
+    22 => 'Ταυτότητα Χρήστη',
+    23 => 'Επίπεδο ασφαλείας',
+    24 => 'Ανώνυμος',
+    25 => 'Απάντηση',
+    26 => 'Τα ακόλουθα σχόλια ανήκουν στους συγγραφείς τους. Η παρούσα ιστοσελίδα δεν ευθύνεται για το περιεχόμενο τους',
+    27 => 'Πιο Πρόσφατη Καταχώρηση',
+    28 => 'Διαγραφή',
+    29 => 'Κανένα σχόλιο.',
+    30 => 'Παλαιότερα άρθρα',
+    31 => 'Επιτρεπόμενες εντολές HTML:',
+    32 => 'Σφάλμα, άγνωστο όνομα χρήστη',
+    33 => 'Σφάλμα, το αρχείο καταγραφής δεν μπορεί να προσπελαστεί.',
+    34 => 'Σφάλμα',
+    35 => 'Αποσύνδεση',
+    36 => 'Ενεργοποιημένο',
+    37 => 'Δεν έχει γίνει εισαγωγή άρθρων από τους χρήστες',
+    38 => 'Κοινοπραξίες Περιεχομένου',
+    39 => 'ανανέωση',
+    40 => 'Η μεταβλητή <tt>register_globals</tt> είναι <tt>ανενεργή</tt> στο αρχείο <tt>php.ini</tt>. Το Geeklog, για την ομαλή λειτουργεία του, απαιτεί η μεταβλητή <tt>register_globals</tt> να είναι <strong>ενεργοποιημένη</strong>. Πρίν να μπορέσετε να συνεχίσετε, παρακαλώ να θέσετε την μεταβλητή στην τιμή <strong>on</strong> και να επανεκινήσετε τον Εξυπηρετητή WWW.',
+    41 => 'Επισκέπτες',
+    42 => 'Συγγραφέας:',
+    43 => 'Απαντήστε σε αυτό',
+    44 => 'Συνέταιρος',
+    45 => 'Σφάλμα MySQL με αριθμό',
+    46 => 'Σφάλμα MySQL με μήνυμα',
+    47 => 'Μενού Χρηστών',
+    48 => 'Πληροφορίες για τον Λογαριασμό σας',
+    49 => 'Προβολή προσωπικών σας προτιμήσεων',
+    50 => 'Σφάλμα SQL με δήλωση',
+    51 => 'Βοήθεια',
+    52 => 'Νέο',
+    53 => 'Αρχική Σελίδα Διαχειριστή',
+    54 => 'Το αρχείο δεν μπορεί να ανοιχτεί',
+    55 => 'Σφάλμα σε',
+    56 => 'Ψηφίστε',
+    57 => 'Κωδικός Πρόσβασης',
+    58 => 'Σύνδεση',
+    59 => "Αν δεν είστε κάτοχος λογαριασμού, μπορείτε να αποκτήσετε εδώ <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Νέος Χρήστης</a>",
+    60 => 'Καταθέστε σχόλιο',
+    61 => 'Δημιουργία νέου λογαριασμού',
+    62 => 'λέξεις',
+    63 => 'Προτιμήσεις σχολίων',
+    64 => 'Στείλτε αυτό το άρ8ρο με ηλεκτρονικό ταχυδρομείο',
+    65 => 'Δείτε το κείμενο προς εκτύπωση',
+    66 => 'Το ημερολόγιό μου',
+    67 => 'Καλωσήρθατε στην σελίδα ',
+    68 => 'Κεντρική σελίδα',
+    69 => 'επικοινωνία',
+    70 => 'αναζήτηση',
+    71 => 'υποβολή άρθρων',
+    72 => 'σύνδεσμοι',
+    73 => 'προηγούμενες ψηφοφορίες',
+    74 => 'ημερολόγιο',
+    75 => 'σύνθετη έρευνα',
+    76 => 'στατιστικά ιστοσελίδας',
+    77 => 'εξωτερικά προγράμματα',
+    78 => 'προσεχή γεγονότα',
+    79 => 'τελευταίες καταχωρήσεις',
+    80 => 'άρθρα τις τελευταίες',
+    81 => 'άρθρο τις τελευταίες',
+    82 => 'ώρες',
+    83 => 'ΣΧΟΛΙΑ',
+    84 => 'ΣΥΝΔΕΣΜΟΙ',
+    85 => 'τελευταίες 48 ώρες',
+    86 => 'Κανένα νέο σχόλιο',
+    87 => 'τελευταίες 2 εβδομάδες',
+    88 => 'Κανένας πρόσφατος σύνδεσμος',
+    89 => 'Δεν υπάρχουν προσεχή γεγονότα',
+    90 => 'Κεντρική Σελίδα',
+    91 => 'Η σελίδα αυτή δημιουργήθηκε',
+    92 => 'δευτερόλεπτα',
+    93 => 'Κατοχύρωση πνευματικής ιδιοκτησίας',
+    94 => 'Όλα τα εμπορικά σήματα και οι κατοχυρωμένες πνευματικές ιδιοκτησίες ανήκουν στους αντίστοιχους δικαιούχους',
+    95 => 'υποστηρίζετε από την τεχνολογία',
+    96 => 'Ομάδες',
+    97 => 'Λίστα λέξεων',
+    98 => 'Εξωτερικά προγράμματα',
+    99 => 'ΑΡθΡΑ',
+    100 => 'Δεν υπάρχουν νέα Άρθρα',
+    101 => 'Τα γεγονότα σας',
+    102 => 'Τα γεγονότα του δικτυακού τόπου',
+    103 => 'Αντίγραφα της Βάσης δεδομένων',
+    104 => 'από',
+    105 => 'Χρήστες ηλεκτρονικού ταχυδρομείου',
+    106 => 'Προβολές',
+    107 => 'Υποβολή σε δοκιμή των Εκδόσεων GL',
+    108 => 'Καθαρισμός Cache',
+    109 => 'Αναφορά του παρόντος κειμένου ώς καταχρηστικό',
+    110 => 'Αναφορά του παρόντος άρθρου στον Διαχειριστή του συστήματος',
+    111 => 'Δείτε την έκδοση PDF',
+    112 => 'Καταχωρημένοι Χρήστες',
+    113 => 'Τεκμηρίωση',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Ημερολόγιο γεγονότων',
+    2 => 'Λυπάμαι, δεν υπάρχουν καταχωρημένα γεγονότα',
+    3 => 'Πότε',
+    4 => 'Πού',
+    5 => 'Περιγραφή',
+    6 => 'Προσθέστε ένα γεγονός',
+    7 => 'Προσεχή γεγονότα',
+    8 => 'Με την πρόσθεση αυτού του γεγονότος στο ημερολόγιο, θα έχετε γρήγορη πρόσβαση στα γεγονότα που σας ενδιαφέρουν επιλέγοντας "Το Ημερολόγίο μου" από το Μενού χρηστών',
+    9 => 'Πρόσθεση στο ημερολόγιο μου',
+    10 => 'Διαγραφή από το ημερολόγιο μου',
+    11 => "Πρόσθεση γεγονότος στο {$_USER['username']} προσωπικό ημερολόγιο",
+    12 => 'Γεγονότα',
+    13 => 'Αρχή',
+    14 => 'Τέλος',
+    15 => 'Πίσω στο ημερολόγιο μου'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Στείλτε το σχόλιο σας',
+    2 => 'Κατάσταση Αποστολής',
+    3 => 'Αποσύνδεση',
+    4 => 'Δημιουργία λογαριασμού',
+    5 => 'Όνομα Χρήστη',
+    6 => 'Η ιστοσελίδα απαιτεί να έχετε συνδεθεί για να αποστείλετε το σχόλιο σας. Αν δεν διαθέτετε λογαριασμό μπορείτε να δημιουργήσετε χρησιμοποιώντας την παρακάτω φόρμα.',
+    7 => 'Το τελευταίο σας σχόλιο ήταν ',
+    8 => " δευτερόλεπτα πριν. Η ιστοσελίδα απαιτεί τουλάχιστον να περάσουν τουλάχιστον {$_CONF['commentspeedlimit']} δευτερόλεπτα μεταξύ δύο σχολίων",
+    9 => 'Σχόλιο',
+    10 => 'Αποστολή αναφοράς',
+    11 => 'Καταθέστε το σχόλιο σας',
+    12 => 'Παρακαλώ συμπληρώστε τα πεδία: Τίτλος και Σχόλια. Είναι αναγκαία για την αποστολή του σχόλιου σας.',
+    13 => 'Η πληροφορίες σας',
+    14 => 'Προεπισκόπηση',
+    15 => 'Report this post',
+    16 => 'Τίτλος',
+    17 => 'Σφάλμα',
+    18 => 'Σημαντικό',
+    19 => 'Παρακαλώ προσπαθήστε το σχόλιο σας να μην ξεφεύγει από το θέμα',
+    20 => 'Είναι καλύτερο να απαντάται στα ήδη υπάρχοντα θέματα παρά να δημιουργείτε καινούργια',
+    21 => 'Προς αποφυγήν επαναλήψεων, διαβάζετε τα σχόλια των άλλων χρηστών προτού καταθέσετε το δικό σας.',
+    22 => 'Χρησιμοποιείστε ένα θέμα που διευκρινίζει το περιεχόμενο του μηνύματος σας',
+    23 => 'Η ηλεκτρονική σας διεύθυνση θα παραμείνει απόρρητη',
+    24 => 'Ανώνυμος χρήστης',
+    25 => 'Είστε σίγουρος(η) ότι επιθυμείτε την αναφορά του παρόντος άρθρου στον Διαχειριστή του συστήματος;',
+    26 => '%s ανέφερε το ακόλουθο καταχρηστικό σχόλιο:',
+    27 => 'Αναφορά Καταχρηστικών Κειμένων'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Προφίλ χρήστη',
+    2 => 'Όνομα Χρήστη',
+    3 => 'Πλήρες Όνομα',
+    4 => 'Κωδικός',
+    5 => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου',
+    6 => 'Ιστοσελίδα',
+    7 => 'Βιογραφικό',
+    8 => 'Κλειδί PGP',
+    9 => 'Αποθήκευση πληροφοριών',
+    10 => 'Τελευταία 10 σχόλια από τον/την',
+    11 => 'Δεν υπάρχουν σχόλια από τον/την ',
+    12 => 'Προτιμήσεις χρήστη για',
+    13 => 'Αποστολή ηλεκτρονικού ταχυδρομείου νυχτερινής ανασκόπησης',
+    14 => 'Ο κωδικός αυτός είναι τυχαίος και προσωρινός. Συνιστούμε την άμεση αντικατάσταση του. Συνδεθείτε και επιλέξτε από το μενού την επιλογή Πληροφορίες λογαριασμού.',
+    15 => "Ο λογαριασμός σας στην ιστοσελίδα {$_CONF['site_name']} δημιουργήθηκε με επιτυχία. Συνδεθείτε χρησιμοποιώντας τα στοιχεία παρακάτω. Παρακαλούμε κρατήστε αυτό το μήνυμα.",
+    16 => 'Πληροφορίες για τον λογαριασμό σας',
+    17 => 'Ο Λογαριασμός δεν υπάρχει',
+    18 => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου που υποβάλατε δεν είναι σωστή',
+    19 => 'Το όνομα χρήστη ή ο κωδικός πρόσβασης είναι ήδη σε χρήση',
+    20 => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου που υποβάλατε δεν είναι σωστή',
+    21 => 'Σφάλμα',
+    22 => "Εγγραφή στο {$_CONF['site_name']}!",
+    23 => "Με την δημιουργία ενός λογαριασμού χρήστη θα απολαμβάνετε τα προνόμια του εγγεγραμμένου χρήστη στο {$_CONF['site_name']} και θα μπορείτε να καταθέσετε σχόλια. Αν δεν θέλετε να εγγραφτείτε, θα έχετε μόνο την δυνατότητα να καταθέσετε ανώνυμα σχόλια. Η ηλεκτρονική σας διεύθυνση <b><i>δεν πρόκειται</i></b> να δημοσιευτεί ποτέ σε αυτήν την ιστοσελίδα.",
+    24 => 'Ο κωδικός σας θα αποσταλεί στην ηλεκτρονική διεύθυνση που μας υποβάλατε.',
+    25 => 'Ξεχάσατε τον κωδικό σας;',
+    26 => 'Συμπληρώστε το όνομα χρήστη και πατήστε την Αποστολή κωδικού μέσω Ηλεκτρονικού ταχυδρομείου. Ο νέος σας κωδικός θα αποσταλεί άμεσα στην ηλεκτρονική διεύθυνση του λογαριασμού σας.',
+    27 => 'Άμεση εγγραφή',
+    28 => 'Αποστολή κωδικού με ηλεκτρονικό ταχυδρομείο',
+    29 => 'Αποσυνδεθήκατε από',
+    30 => 'Συνδεθήκατε από',
+    31 => 'Η επιλογή αυτή, απαιτεί την σύνδεση σας',
+    32 => 'Υπογραφή',
+    33 => 'Χωρίς δημόσια προβολή',
+    34 => 'Αυτό είναι το πραγματικό σας όνομα',
+    35 => 'Πληκτρολογήστε νέο κωδικό',
+    36 => 'Αρχίζει με http://',
+    37 => 'Επισυνάπτεται στα σχόλια σας',
+    38 => 'Έχει σχέση με εσάς, είναι προσπελάσιμο από όλους τους χρήστες',
+    39 => 'Το δημόσιο PGP κλειδί σας',
+    40 => 'Δεν υπάρχουν εικονίδια για το θέμα',
+    41 => 'Πρόθυμος/η να επιβλέπω',
+    42 => 'Διαμόρφωση ημερομηνίας',
+    43 => 'Μέγιστος αριθμός άρθρων',
+    44 => 'Δεν υπάρχουν κουτιά',
+    45 => 'Προβολή προτιμήσεων για τον/την',
+    46 => 'Μη συμπεριλαμβανόμενα στοιχεία για τον/την',
+    47 => 'Ρύθμιση ομάδας ειδήσεων για τον/την',
+    48 => 'Θέματα',
+    49 => 'Δεν υπάρχουν εικονίδια για τα Άρθρα',
+    50 => 'Αν δεν σας ενδιαφέρει ακυρώστε την επιλογή του',
+    51 => 'Μόνο τα Άρθρα ειδήσεων',
+    52 => 'Το προεπιλεγμένο είναι',
+    53 => 'Λήψη των ημερήσιων άρθρων κάθε βράδυ',
+    54 => 'Επιλέξτε τα κουτιά με τα θέματα και τους συγγραφείς που δεν επιθυμείτε να παρακολουθείτε.',
+    55 => 'Εφόσον αφήνετε όλα τα κουτιά χωρίς επιλογή, η προεπιλεγμένη επιλογή θα ισχύσει. Στην επιλογή των κουτιών, μην παραλείψετε κάποιο που θέλετε επειδή η προεπιλεγμένες επιλογές θα αγνοηθούν. Οι προεπιλεγμένες επιλογές παρουσιάζονται με έντονο τόνο.',
+    56 => 'Συγγραφείς',
+    57 => 'Κατάσταση προβολής',
+    58 => 'Σειρά ταξινόμησης',
+    59 => 'Όριο σχολίων',
+    60 => 'Πώς θέλετε να προβάλλονται τα σχόλια;',
+    61 => 'Το νεότερο η το παλαιότερο κατά σειρά;',
+    62 => 'Η προεπιλογή είναι 100',
+    63 => "Ο Κωδικός πρόσβασης για τον λογαριασμό σας έχει ήδη αποσταλεί. Παρακαλώ ακολουθήστε τις οδηγίες που συμπεριλαμβάνονται στο μήνυμα και σας ευχαριστούμε που χρησιμοποιείτε {$_CONF['site_name']}",
+    64 => 'Προτιμήσεις σχολίων για',
+    65 => 'Παρακαλώ προσπαθήστε να συνδεθείτε ξανά',
+    66 => "Πιθανόν να πληκτρολογήσατε λανθασμένα τα στοιχεία του λογαριασμού σας. Παρακαλώ προσπαθήστε ξανά παρακάτω. Είστε <a href=\"{$_CONF['site_url']}/users.php;mode=new\">νέος χρήστης</a>;",
+    67 => 'Μέλος από',
+    68 => 'Παραμονή στο σύστημα για',
+    69 => 'Η χρονική διάρκεια που το σύστημα θα θεωρεί ενεργή την παραμονή σας μετά από την σύνδεση σας',
+    70 => "Επιλέξτε τη δική σας διάταξη κειμένου και περιεχομένου για την ιστοσελίδα {$_CONF['site_name']}",
+    71 => "Ένα από τα χαρακτηριστικά του {$_CONF['site_name']} είναι η δυνατότητα των χρηστών να διαμορφώνουν κατά βούληση το περιεχόμενο και το παρουσιαστικό της ιστοσελίδας. Για να επωφεληθείτε από αυτές τις δυνατότητες πρέπει πρώτα να <a href=\"{$_CONF['site_url']}/users.php;mode=new\">εγγραφείτε</a> στο {$_CONF['site_name']}.  Αν είστε ήδη μέλος, μπορείτε να πληκτρολογήσετε τα στοιχεία σας στην φόρμα αριστερά",
+    72 => 'Θέμα',
+    73 => 'Γλώσσα',
+    74 => 'Αλλάξτε την εμφάνιση της ιστοσελίδας',
+    75 => 'Τα αποστελλόμενα με ηλεκτρονικό ταχυδρομείο θέματα για τον/την',
+    76 => 'Αν επιλέξετε ένα θέμα από τα παρακάτω, θα λαμβάνετε και τα νέα Άρθρα που δημοσιεύτηκαν στο θέμα αυτό με το τέλος της κάθε ημέρας. Διαλέξτε μόνο τα θέματα που σας ενδιαφέρουν!',
+    77 => 'Φωτογραφία',
+    78 => 'Προσθέστε την φωτογραφία σας',
+    79 => 'Πατήστε εδώ για την διαγραφή της φωτογραφίας σας',
+    80 => 'Σύνδεση',
+    81 => 'Αποστολή ηλεκτρονικού ταχυδρομείου',
+    82 => 'Τελευταία 10 Άρθρα από τον/την χρήστη',
+    83 => 'Στατιστικά συγγραφής από τον χρήστη',
+    84 => 'Αριθμός άρθρων:',
+    85 => 'Αριθμός σχολίων:',
+    86 => 'Αναζητήστε όλα τα σχετικά θέματα με',
+    87 => 'Το όνομα του λογαριασμού σας',
+    88 => "Κάποιος, (πιθανόν εσείς), ζήτησε την δημιουργία ενός νέου κωδικού για τον λογαριασμό χρήστη \"%s\" στην ιστοσελίδα {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n Αν πραγματικά επιθυμείτε την αλλαγή του κωδικού πρόσβασης επιλέξτε τον ακόλουθο σύνδεσμο:\n\n",
+    89 => "Εάν δεν επιθυμείτε την αλλαγή του κωδικού αγνοήστε το παρόν ηλεκτρονικό μήνυμα και η αίτηση αλλαγής του κωδικού θα απορριφθεί (ο κωδικός πρόσβασης για τον λογαριασμό σας θα παραμείνει ο ίδιος).\n\n",
+    90 => 'Μπορείτε να εισάγετε τον νέο κωδικό για τον λογαριασμό σας παρακάτω. Σας επισημαίνεται ότι ο παλαιός κωδικός σας θα είναι ενεργός μέχρι την αποστολή της φόρμας.',
+    91 => 'Αντικατάσταση Κωδικού Πρόσβασης',
+    92 => 'Εισάγετε τον νεό κωδικό',
+    93 => 'Η τελευταία αίτηση σας για αλλαγή κωδικού πραγματοποιήθηκε πρίν %d δευτερόλεπτα. Στην παρούσα ιστοσελίδα πρέπει να περιμένετε τουλάχιστον %d δευτερόλεπτα μεταξύ δύο αιτήσεων για αλλαγή κωδικού.',
+    94 => 'Διαγραφή λογαριασμού "%s"',
+    95 => 'Επιλέξτε την "Διαφραφή λογαριασμού" παρακάτω για να αφαιρέσετε τον λογαριασμό σας απο την βάση δεδομένων. Τυχόν ιστορίες και σχόλια του λογαριασμού σας <strong>ΔΕΝ</strong> θα αφαιρεθούν αλλά ο αποστολέας τους θα αντικαταστάθει απο τον χρήστη "Anonymous".',
+    96 => 'Διαφραφή Λογαριασμού',
+    97 => 'Επιβεβαίωση διαγραφής λογαριασμού',
+    98 => 'Είστε σίγουρος(η) οτι επιθυμείτε την διαγραφή του λογαριασμού σας; Αν συνεχίσετε θα χάσετε την δυνατότητα εισόδου στην παρούσα ιστοσελίδα με την ταυτότητας σας. Αν είστε σίγουρος(η) επιλέξτε την "Διαγραφή Λογαριασμού" ξανά στην παρακάτω φόρμα.',
+    99 => 'Επιλογές Ιδιωτικών Ρυθμίσεων',
+    100 => 'Ηλεκτρονικά μήνυματα απο τον Διαχειριστή',
+    101 => 'Αποδοχή Ηλεκτρονικών μηνυμάτων απο τους Διαχειριστές',
+    102 => 'Αποδοχή Ηλεκτρονικών μηνυμάτων απο χρήστες',
+    103 => 'Αποδοχή Ηλεκτρονικών μηνυμάτων απο λοιπούς',
+    104 => 'Εμφάνιση Ενεργής Κατάστασης του Χρήστη',
+    105 => 'Εμφάνιση στο τμήμα του "Ποιοί είναι Ενεργοί στην Ιστοσελίδα',
+    106 => 'Τοποθεσία',
+    107 => 'Εμφάνιση στο δημόσιο προφίλ σας',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Δεν υπάρχουν νέα',
+    2 => 'Δεν υπάρχουν νέα άρθρα. Δεν υπάρχουν νέα για αυτό το θέμα ή οι ρυθμίσεις σας είναι πολύ αυστηρές.',
+    3 => ' για το θέμα %s',
+    4 => 'Ενδιαφέρον άρθρο',
+    5 => 'Επόμενο',
+    6 => 'Προηγούμενο',
+    7 => 'Πρώτο',
+    8 => 'Τελευταίο'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Σφάλμα στην αποστολή του μηνύματος, παρακαλώ προσπαθήστε ξανά.',
+    2 => 'Το μήνυμα στάλθηκε με επιτυχία.',
+    3 => 'Παρακαλώ, βεβαιωθείτε ότι έχετε πληκτρολογήσει μία ενεργή διεύθυνση ταχυδρομείου στο πεδίο Απάντηση.',
+    4 => 'Παρακαλώ, πληκτρολογήστε τα πεδία Όνομα, Απάντηση στην διεύθυνση, θέμα και μήνυμα.',
+    5 => 'Σφάλμα: Δεν υπάρχει ο χρήστης.',
+    6 => 'Υπήρξε σφάλμα.',
+    7 => 'Προφίλ χρήστη για',
+    8 => 'Όνομα χρήστη',
+    9 => 'URL χρήστη',
+    10 => 'Αποστολή ηλεκτρονικής αλληλογραφίας στον/στην',
+    11 => 'Όνομα:',
+    12 => 'Απάντηση στην διεύθυνση:',
+    13 => 'Θέμα:',
+    14 => 'Μήνυμα:',
+    15 => 'Η γλώσσα HTML θα μεταφραστεί.',
+    16 => 'Αποστολή μηνύματος',
+    17 => 'Αποστείλετε το άρθρο με ηλεκτρονικό ταχυδρομείο σε έναν φίλο/φίλη',
+    18 => 'Όνομα παραλήπτη',
+    19 => 'Ηλεκτρονική διεύθυνση παραλήπτη',
+    20 => 'Όνομα αποστολέα',
+    21 => 'Ηλεκτρονική διεύθυνση αποστολέα',
+    22 => 'Απαιτούνται όλοι οι φίλοι',
+    23 => "Το παρόν μήνυμα στάλθηκε σε εσάς από τον/την %s με ηλεκτρονική διεύθυνση %s επειδή θεώρησε ότι θα σας ενδιέφερε το άρθρο που βρίσκετε στην ιστοσελίδα {$_CONF['site_url']}. Το παρόν μήνυμα δεν είναι διαφημιστικό, και η διεύθυνση του ηλεκτρονικού ταχυδρομείου σας δεν αποθηκεύτηκε από το σύστημά μας.",
+    24 => 'Σχόλιο του άρθρου αυτού στο',
+    25 => 'Πρέπει να συνδεθείτε για να χρησιμοποιήσετε αυτήν την υπηρεσία. Έτσι μας βοηθάτε να αποφύγουμε την κακή χρήση του συστήματος',
+    26 => 'Η παρούσα φόρμα θα σας επιτρέψει να στείλετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στον επιλεγμένο χρήστη. Όλα τα πεδία είναι αναγκαία.',
+    27 => 'Σύντομο μήνυμα',
+    28 => 'Ο %s έγραψε: ',
+    29 => "Η παρούσα καθημερινή ανασκόπηση από το {$_CONF['site_name']} για ",
+    30 => 'Καθημερινή ειδησιογραφία από ',
+    31 => 'Τίτλος',
+    32 => 'Ημερομηνία',
+    33 => 'Διαβάστε το πλήρες άρθρο',
+    34 => 'Τέλος μηνύματος',
+    35 => 'Λυπούμαστε, ο χρήστης έχει απενεργοποιήσει την λήψη ηλεκτρονικών μηνυμάτων.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Σύνθετη έρευνα',
+    2 => 'Λέξεις κλειδιά',
+    3 => 'Θέμα',
+    4 => 'Όλα',
+    5 => 'Τύπος',
+    6 => 'Άρθρα',
+    7 => 'Σχόλια',
+    8 => 'Συγγραφείς',
+    9 => 'Όλα',
+    10 => 'Έρευνα',
+    11 => 'Αποτελέσματα έρευνας',
+    12 => 'Αποτελέσματα',
+    13 => 'Αποτελέσματα έρευνας: Δεν βρέθηκαν αποτελέσματα',
+    14 => 'Δεν υπάρχουν αποτελέσματα που να ταιριάζουν σε ',
+    15 => 'Παρακαλώ, προσπαθήστε ξανά.',
+    16 => 'Τίτλος',
+    17 => 'Ημερομηνία',
+    18 => 'Συγγραφέας',
+    19 => "Αναζήτηση στην βάση πρόσφατων και παλαιών ιστοριών του {$_CONF['site_name']}",
+    20 => 'Ημερομηνία',
+    21 => 'Προς',
+    22 => '(Διαμόρφωση ημερομηνίας ΧΧΧΧ-ΜΜ-ΜΜ)',
+    23 => 'Επισκέψεις',
+    24 => 'Βρέθηκε',
+    25 => 'Αποτελέσματα για',
+    26 => 'στοιχείο σε',
+    27 => 'δευτερόλεπτα',
+    28 => 'Τα κριτήρια της έρευνας που θέσατε δεν ικανοποιούνται από κανένα άρθρο ή σχόλιο.',
+    29 => 'Αποτελέσματα άρθρων και σχολίων',
+    30 => 'Τα κριτήρια της έρευνας που θέσατε δεν ικανοποιούνται από κανένα σύνδεσμο. ',
+    31 => 'Τα κριτήρια της έρευνας που θέσατε δεν ικανοποιούνται από κανένα εξωτερικά προγράμματα. ',
+    32 => 'Γεγονός',
+    33 => 'URL',
+    34 => 'Περιοχή',
+    35 => 'Συνεχώς',
+    36 => 'Τα κριτήρια της έρευνας που θέσατε δεν ικανοποιούνται από κανένα γεγονός.',
+    37 => 'Αποτελέσματα γεγονότων',
+    38 => 'Αποτελέσματα συνδέσμων',
+    39 => 'Σύνδεσμοι',
+    40 => 'Γεγονότα',
+    41 => 'Η αναζήτηση σας πρέπει να περιέχει τουλάχιστον τρείς(3) χαρακτήρες.',
+    42 => 'Παρακαλούμαι, εισάγετε την ημερομηνία σαν YYYY-MM-DD (Έτος-Μήνας-Μέρα).',
+    43 => 'ακριβής φράση',
+    44 => 'όλες τις λέξεις',
+    45 => 'οποιαδήποτε απο τις λέξεις',
+    46 => 'Επόμενο',
+    47 => 'Προηγούμενο',
+    48 => 'Συγγραφέας',
+    49 => 'Ημερομηνία',
+    50 => 'Επισκέψεις',
+    51 => 'Σύνδεσμος',
+    52 => 'Τοποθεσία',
+    53 => 'Αποτελέσματα άρθρων',
+    54 => 'Αποτελέσματα σχολίων',
+    55 => 'η φράση',
+    56 => 'ΚΑΙ',
+    57 => 'Ή',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Στατιστικά ιστοσελίδας',
+    2 => 'Συνολικές επισκέψεις στο σύστημα',
+    3 => 'Άρθρα(Σχόλια) στο σύστημα',
+    4 => 'Ψηφοφορίες(Ψήφοι) στο σύστημα',
+    5 => 'Σύνδεσμοι(Επισκέψεις) στο σύστημα ',
+    6 => 'Γεγονότα στο σύστημα',
+    7 => 'Τα 10 περισσότερο δημοφιλή Άρθρα.',
+    8 => 'Τίτλος Άρθρου',
+    9 => 'Επισκέψεις',
+    10 => 'Δεν υπάρχουν Άρθρα σε αυτή την ιστοσελίδα ή κανείς δεν τα έχει επισκεφτεί.',
+    11 => 'Τα 10 περισσότερο σχολιασμένα Άρθρα',
+    12 => 'Σχόλια',
+    13 => 'Δεν υπάρχουν Άρθρα σε αυτή την ιστοσελίδα ή κανείς δεν έχει καταθέσει σχόλια.',
+    14 => 'Οι 10 περισσότερο δημοφιλής ψηφοφορίες',
+    15 => 'Ερώτηση Ψηφοφορίας',
+    16 => 'Ψήφοι',
+    17 => 'Δεν υπάρχουν ψηφοφορίες ή κανείς δεν έχει ψηφίσει',
+    18 => 'Οι 10 περισσότερο δημοφιλής σύνδεσμοι',
+    19 => 'Σύνδεσμοι',
+    20 => 'Επισκέψεις',
+    21 => 'Δεν υπάρχουν σύνδεσμοι σε αυτήν την ιστοσελίδα ή κανείς δεν τους έχει επισκεφτεί.',
+    22 => 'Τα 10 Άρθρα που προωθήθηκαν περισσότερο με το ηλεκτρονικό ταχυδρομείο',
+    23 => 'Ηλεκτρονική αλληλογραφία',
+    24 => 'Δεν έχουν σταλεί άρθρα μέσω ηλεκτρονικού ταχυδρομείου από αυτήν την ιστοσελίδα.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Τι είναι σχετικό;',
+    2 => 'Στείλτε το άρθρο σε έναν φίλο/φίλη μέσω ηλεκτρονικού ταχυδρομίου',
+    3 => 'Διαμόρφωση άρθρου για εκτύπωση',
+    4 => 'Μενού επιλογών άρθρου',
+    5 => 'Άρθρο σε μορφή PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Για να αποστείλετε %s πρέπει πρώτα να έχετε συνδεθεί.',
+    2 => 'Σύνδεση',
+    3 => 'Νέος χρήστης',
+    4 => 'Στείλτε ένα γεγονός',
+    5 => 'Στείλτε έναν σύνδεσμο',
+    6 => 'Στείλτε ένα άρθρο',
+    7 => 'Η σύνδεση είναι απαραίτητη',
+    8 => 'Αποστολή',
+    9 => 'Όταν αποστέλλετε πληροφορίες για χρήση στην ιστοσελίδα, προτείνουμε να ακολουθήσετε αυτούς τους κανόνες... <ul><li>Συμπληρώστε όλα τα πεδία, τίποτα δεν είναι προαιρετικό<li>Δώστε πλήρη και ακριβή στοιχεία<li>Επιβεβαιώστε τους συνδέσμους URL</ul>',
+    10 => 'Τίτλος',
+    11 => 'Σύνδεσμος',
+    12 => 'Ημερομηνία έναρξης',
+    13 => 'Ημερομηνία λήξης',
+    14 => 'Περιοχή',
+    15 => 'Περιγραφή',
+    16 => 'Αν επιλέξατε άλλο, παρακαλώ διευκρινίστε',
+    17 => 'Κατηγορία',
+    18 => 'Άλλο',
+    19 => 'Διαβάστε πρώτα',
+    20 => 'Σφάλμα: Κατηγορία μη διαθέσιμη',
+    21 => 'Όταν επιλέγεται "Άλλο" παρακαλώ επιλέξτε και ένα όνομα κατηγορίας',
+    22 => 'Σφάλμα: Πεδία μη διαθέσιμα',
+    23 => 'Παρακαλώ συμπληρώστε όλα τα πεδία της φόρμας. Κανένα δεν είναι προαιρετικό.',
+    24 => 'Η αποστολή αποθηκεύτηκε ',
+    25 => 'Η αποστολή σας (%s) αποθηκεύτηκε επιτυχώς',
+    26 => 'Όριο ταχύτητας',
+    27 => 'Όνομα χρήστη',
+    28 => 'Θέμα',
+    29 => 'Άρθρο',
+    30 => 'Η τελευταία σας αποστολή έγινε ',
+    31 => " δευτερόλεπτα πριν.  Περιμένετε τουλάχιστον {$_CONF['speedlimit']} δευτερόλεπτα για άλλη αποστολή",
+    32 => 'Προεπισκόπηση',
+    33 => 'Προεπισκόπηση Άρθρου',
+    34 => 'Αποσύνδεση',
+    35 => 'Η γλώσσα HTML ΔΕΝ επιτρέπεται',
+    36 => 'Κατάσταση αποστολής',
+    37 => "Η κατάθεση ενός γεγονότος στο {$_CONF['site_name']} θα εγκαταστήσει το γεγονός αυτό στο κεντρικό ημερολόγιο όπου όλοι οι χρήστες προαιρετικά θα μπορούν να προσθέσουν το γεγονός στο δικό τους προσωπικό ημερολόγιο. Γεγονότα όπως ονομαστικές εορτές και επέτειοι ΔΕΝ μπορούν να διαχειριστούν με αυτή την υπηρεσία. <br> Οι διαχειριστές του συστήματος θα αποφασίσουν αν το γεγονός θα προστεθεί<br>",
+    38 => 'Προσθέστε ένα γεγονός στο',
+    39 => 'Κεντρικό Ημερολόγιο',
+    40 => 'Προσωπικό Ημερολόγιο',
+    41 => 'Ώρα λήξης',
+    42 => 'Ώρα έναρξης',
+    43 => 'Ημερήσιο Γεγονός',
+    44 => 'Διεύθυνση γραμμή 1',
+    45 => 'Διεύθυνση γραμμή 2',
+    46 => 'Πόλη / Κοινότητα',
+    47 => 'Πολιτεία (Για Ηνωμένες Πολιτείες μόνο)',
+    48 => 'Ταχυδρομικός κωδικός',
+    49 => 'Τύπος γεγονότος',
+    50 => 'Επεξεργασία τύπων γεγονότων',
+    51 => 'Περιοχή',
+    52 => 'Διαγραφή',
+    53 => 'Δημιουργία λογαριασμού'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Η πιστοποίηση είναι αναγκαία',
+    2 => 'Το αίτημα πρόσβασης απορρίφθηκε, τα στοιχεία πρόσβασης δέν ειναι σωστά',
+    3 => 'Λάθος κωδικός πρόσβασης χρήστη',
+    4 => 'Όνομα χρήστη:',
+    5 => 'Κωδικός πρόσβασης:',
+    6 => 'Η πρόσβαση σε επίπεδο διαχειριστή για αυτήν την ιστοσελίδα είναι ελεγχόμενη και καταγραφόμενη. <br> Η παρούσα ιστοσελίδα είναι για χρήση πιστοποιημένου προσωπικού',
+    7 => 'σύνδεση'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Ανεπαρκή δικαιώματα διαχειριστή ',
+    2 => 'Δεν διαθέτετε τα απαραίτητα δικαιώματα διαχειριστή για να επεξεργαστείτε αυτήν την ομάδα',
+    3 => 'Επεξεργαστής διαζωμάτων ',
+    4 => 'Υπήρξε κάποιο πρόβλημα κατα την ανάγνωση των δεδομένων (δείτε το αρχείο error.log για λεπτομέριες).',
+    5 => 'Τίτλος ομάδας ',
+    6 => 'Θέμα',
+    7 => 'Όλα',
+    8 => 'Επίπεδο ασφαλείας ομάδας ',
+    9 => 'Σειρά ομάδας ',
+    10 => 'Τύπος ομάδας',
+    11 => 'Ομάδα πύλης',
+    12 => 'Κανονική ομάδα',
+    13 => 'Επιλογές ομάδας πύλης ',
+    14 => 'RDF URL',
+    15 => 'Τελευταία αναβάθμιση RDF',
+    16 => 'Επιλογές κανονικής ομάδας',
+    17 => 'Περιεχόμενο ομάδας',
+    18 => 'Παρακαλώ, συμπληρώστε τα πεδία Τίτλος, επίπεδο ασφαλείας και περιεχόμενο',
+    19 => 'Διαχειριστής ομάδας ',
+    20 => 'Τίτλος ομάδας ',
+    21 => 'Επίπεδο ασφαλείας ομάδας',
+    22 => 'Τύπος ομάδας',
+    23 => 'Σειρά ομάδας',
+    24 => 'Θέμα ομάδας',
+    25 => 'Για να μετατρέψετε η να διαγράψετε μία ομάδα, επιλέξτε την ομάδα οπό τις παρακάτω. Για να δημιουργήσετε μία ομάδα επιλέξτε την επιλογή Νέα ομάδα ',
+    26 => 'Διάταξη ομάδας',
+    27 => 'Ομάδα PHP',
+    28 => 'Επιλογές Ομάδας PHP',
+    29 => 'Λειτουργίες ομάδας ',
+    30 => 'Αν επιθυμείτε κάποια από τις ομάδες να συμπεριλαμβάνει κώδικα στην γλώσσα PHP, εισάγετε το όνομα της ρουτίνας στο παραπάνω κουτί. Η ρουτίνα σας πρέπει να αρχίζει με το πρόθεμα "phpblock " ( για παράδειγμα phpblock_getweather). Εάν το πρόθεμα αυτό παραλειφθεί, η ρουτίνα σας δεν θα εκτελεστεί. Προτείνετε να τοποθετήσετε τον κωδικά σας στον ακόλουθο κατάλογο /διαδρομή/για/το/geeklog/system/lib-custom.php.',
+    31 => 'Σφάλμα στην ομάδα PHP.  Η ρουτίνα %s, είναι ανύπαρκτη.',
+    32 => 'Σφάλμα, λείπουν πεδίο(α)',
+    33 => 'Πρέπει να πληκτρολογήσετε το URL για το .rdf αρχείο των ομάδων πύλης ',
+    34 => ' Πρέπει να πληκτρολογήσετε τον τίτλο και την ρουτίνα για την ομάδα PHP.',
+    35 => ' Πρέπει να πληκτρολογήσετε τον τίτλο και το περιεχόμενο για τα την κανονική ομάδα ',
+    36 => ' Πρέπει να πληκτρολογήσετε το περιεχόμενο για την διάταξη της ομάδας',
+    37 => 'Το όνομα της ομάδας PHP είναι λάθος',
+    38 => 'Οι ρουτίνες για τις ομάδες PHP πρέπει να έχουν το πρόθεμα \'phpblock_\' (για παράδειγμα phpblock_getweather). Λόγοι ασφαλείας απαιτούν να το τηρήσετε.',
+    39 => 'Διάταξη',
+    40 => 'Αριστερά',
+    41 => 'Δεξιά',
+    42 => 'Πρέπει να ορίσετε την σειρά και το επίπεδο ασφαλείας για τις κοινές ομάδες του GeekLog',
+    43 => 'Αρχική σελίδα μόνο',
+    44 => 'Άρνηση πρόσβασης',
+    45 => "Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε αυτήν την ομάδα\nΗ απόπειρα έχει καταχωρηθεί. Παρακαλώ, <a ref=\"{$_CONF['site_admin_url']}/block.php\"> πηγαίνετε πίσω στην σελίδα διαχείρησης</a>.",
+    46 => 'Νέα ομάδα',
+    47 => 'Σελίδα διαχείρισης',
+    48 => 'Όνομα ομάδας',
+    49 => ' (χωρίς κενά and το όνομα πρέπει να είναι μοναδικό)',
+    50 => 'αρχείο βοηθείας URL',
+    51 => 'συμπεριλαμβανόμενο http://',
+    52 => 'Αν αφήσετε αυτό εδώ κενό, δεν θα εμφανιστεί εικονίδιο βοηθείας για αυτήν την ομάδα. ',
+    53 => 'Ενεργό',
+    54 => 'αποθήκευση',
+    55 => 'ακύρωση',
+    56 => 'διαγραφή',
+    57 => 'Μετάθεση ομάδας προς τα κάτω',
+    58 => 'Μετάθεση ομάδας προς τα πάνω',
+    59 => 'Μετάθεση ομάδας προς τα δεξιά',
+    60 => 'Μετάθεση ομάδας προς τα αριστερά',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Συντάκτης γεγονότων',
+    2 => 'Σφάλμα',
+    3 => 'Τίτλος γεγονότος',
+    4 => 'URL γεγονότος',
+    5 => 'Ημερομηνία έναρξης γεγονότος',
+    6 => 'Ημερομηνία λήξης γεγονότος',
+    7 => 'Περιοχή γεγονότος',
+    8 => 'Περιγραφή γεγονότος',
+    9 => '(συμπεριλαμβανόμενο http://)',
+    10 => 'Πρέπει να ορίσετε ημερομηνίες, ώρες, περιγραφή και περιοχή του γεγονότος',
+    11 => 'Διαχειριστής γεγονότων',
+    12 => 'Για να μετατρέψετε η να διαγράψετε ένα γεγονός διαλέξτε το απο την παρακάτω λίστα. Για να δημιουργήσετε ένα γεγονός διαλέξτε την επιλογή Νέο γεγονός παραπάνω',
+    13 => 'Τίτλος γεγονότος',
+    14 => 'Ημερομηνία έναρξης',
+    15 => 'Ημερομηνία λήξης',
+    16 => 'Η πρόσβαση απορρίφθηκε',
+    17 => "Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε αυτό το γεγονός\nΗ απόπειρα έχει καταχωρηθεί. Παρακαλώ, <a ref=\"{$_CONF['site_admin_url']}/ event.php\"> πηγαίνετε πίσω στην σελίδα διαχείρισης</a>.",
+    18 => 'Νέο γεγονός',
+    19 => 'Σελίδα διαχείρισης',
+    20 => 'αποθήκευση',
+    21 => 'ακύρωση ',
+    22 => 'διαγραφή',
+    23 => 'Μη αποδεκτή ημερομηνία έναρξης.',
+    24 => 'Μη αποδεκτή ημερομηνία λήξης.',
+    25 => 'Η Ημερομηνία λήξης είναι ΠΡΙΝ την ημερομηνία έναρξης.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Παλαιότερα Άρθρα',
+    2 => 'Επόμενα Άρθρα',
+    3 => 'Κατάσταση',
+    4 => 'Κατάσταση Αποστολής ',
+    5 => 'Επεξεργαστής Άρθρων',
+    6 => 'Δεν υπάρχουν Άρθρα στο σύστημα',
+    7 => 'Συγγραφέας',
+    8 => 'αποθήκευση',
+    9 => 'προεπισκόπηση',
+    10 => 'ακύρωση',
+    11 => 'διαγραφή',
+    12 => 'Α/Α',
+    13 => 'Τίτλος',
+    14 => 'Θέμα',
+    15 => 'Ημερομηνία',
+    16 => 'Κείμενο εισαγωγής',
+    17 => 'Κυρίως κείμενο',
+    18 => 'Επισκέψεις',
+    19 => 'Σχόλια',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Λίστα άρθρων',
+    23 => 'Για να μετατρέψετε η να διαγράψετε ένα άρθρο διαλέξτε το απο την παρακάτω λίστα. Για να δημιουργήσετε ένα άρθρο διαλέξτε την επιλογή Νέο άρθρο παραπάνω',
+    24 => 'Ο α/α που επελέξατε για το άρθρο χρησιμοποιείται ήδη. Παρακαλώ, διαλέξτε ένα άλλο α/α.',
+    25 => 'Error when saving story',
+    26 => 'Προεπισκόπηση άρθρου',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Η σύνηψη αρχείων έγινε με σφάλματα',
+    31 => 'Τα πεδία Συγγραφέας, Τίτλος και Κείμενο εισαγωγής είναι αναγκαία. ',
+    32 => 'Ενδιαφέρον',
+    33 => 'Ένα κείμενο μπορεί να είναι ενδιαφέρον κάθε φορά.',
+    34 => 'Πρόχειρο',
+    35 => 'Ναι',
+    36 => 'Όχι',
+    37 => 'Περισσότερα άρθρα από τον/την',
+    38 => 'Περισσότερα άρθρα του',
+    39 => 'Ηλεκτρονικές διευθύνσεις',
+    40 => 'Η πρόσβαση απορρίφθηκε',
+    41 => "Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε αυτό το άρθρο. Η απόπειρα έχει καταχωρηθεί. Παρακαλώ, <a ref=\"{$_CONF['site_admin_url']}/story.php\"> πηγαίνετε πίσω στην σελίδα διαχείρισης</a>.",
+    42 => "Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε αυτό το άρθρο. Η απόπειρα έχει καταχωρηθεί. Παρακαλώ, <a ref=\"{$_CONF['site_admin_url']}/story.php\"> πηγαίνετε πίσω στην σελίδα διαχείρισης</a>.",
+    43 => 'Νέο άρθρο',
+    44 => 'Σελίδα διαχείρισης',
+    45 => 'Πρόσβαση',
+    46 => '<b>ΣΗΜΕΙΩΣΗ:</b> Εάν θέσετε μία ημερομηνία στο μέλλον, το παρόν άρθρο θα δημοσιευτεί την ημερομηνία που έχετε ορίσει. Το άρθρο δεν συμπεριλαμβάνετε στις επικεφαλίδες RDF καθώς και θα αγνοείτε στην αναζήτηση και στην έκδοση στατιστικών',
+    47 => 'Εικόνες',
+    48 => 'Εικόνα',
+    49 => 'Δεξιά',
+    50 => 'Αριστερά',
+    51 => 'Για να προσθέσετε σε αυτό το άρθρο μία οπό τις εικόνες που επισυνάπτετε χρειάζεται να προσθέσετε ειδικά διαμορφωμένο κείμενο. Το ειδικά διαμορφωμένο κείμενο είναι [imageX], [imageX_right] or [imageX_left] όπου Χ είναι ο αριθμός της επισυναπτόμενης εικόνας. ΣΗΜΕΙΩΣΗ: Πρέπει να χρησιμοποιήσετε τις εικόνες που επισυνάψατε. Αν δεν το κάνετε, δεν θα μπορέσετε να αποθηκεύσετε το άρθρο σας. <BR><P><B>Προεπισκόπηση</B>: Η προεπισκόπηση ενός άρθρου με επισυνημμένες εικόνες γίνετε καλύτερα όταν έχετε προσωρινά αποθηκεύσει το άρθρο σας σαν πρόχειρο και όχι όταν επιλέξετε την επιλογή προεπισκόπηση. Η επιλογή προεπισκόπηση χρησιμοποιείτε μόνο όταν ΔΕΝ υπάρχουν επισυνημμένες εικόνες',
+    52 => 'Διαγραφή',
+    53 => 'Δεν χρησιμοποιείτε.  Πρέπει να συμπεριλάβετε την εικόνα στην εισαγωγή η το κυρίως κείμενο πριν αποθηκεύσετε τις αλλαγές σας.',
+    54 => 'Οι επισυνημμένες εικόνες δεν χρησιμοποιούνται',
+    55 => 'Τα ακόλουθα σφάλματα έγιναν στην προσπάθεια να αποθηκευτεί το άρθρο σας. Διορθώστε τα και ξαναπροσπαθήσετε.',
+    56 => 'Προβολή εικονιδίου θέματος',
+    57 => 'Προβολή εικόνας άνευ κλίμακας',
+    58 => 'Διαχείριση Άρθρων',
+    59 => 'Επιλογή',
+    60 => 'Ενεργοποίηση',
+    61 => 'Αυτόματη αρχειοθέτηση',
+    62 => 'Αυτόματη διαγραφή',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Επεξεργαστής θέματος',
+    2 => 'α/α θέματος',
+    3 => 'Όνομα θέματος',
+    4 => 'Εικόνα θέματος',
+    5 => '(μην πληκτρολογείτε κενά)',
+    6 => 'Η διαγραφή ενός θέματος διαγράφει και όλες τις Άρθρα και ομάδες που σχετίζονται με αυτό. ',
+    7 => 'Τα πεδία α/α and Όνομα θέματος πρέπει να συμπληρωθούν',
+    8 => 'Διαχειριστής θέματος',
+    9 => 'Για να μετατρέψετε η να διαγράψετε ένα θέμα διαλέξτε το από την παρακάτω λίστα. Για να δημιουργήσετε ένα θέμα διαλέξτε την επιλογή Νέο θέμα παραπάνω',
+    10 => 'Σειρά ταξινόμησης',
+    11 => 'Άρθρα/Σελίδα',
+    12 => 'Η πρόσβαση απορρίφθηκε',
+    13 => "Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε αυτό το θέμα. Η απόπειρα έχει καταχωρηθεί. Παρακαλώ, <a ref=\"{$_CONF['site_admin_url']}/topic.php\"> πηγαίνετε πίσω στην σελίδα διαχείρισης</a>.",
+    14 => 'Τύπος ταξινόμησης',
+    15 => 'Αλφαβητικός',
+    16 => 'η προεπιλογή είναι',
+    17 => 'Νέο θέμα',
+    18 => 'Σελίδα διαχείρισης',
+    19 => 'αποθήκευση',
+    20 => 'ακύρωση',
+    21 => 'διαγραφή',
+    22 => 'Προεπιλογή',
+    23 => 'επιλογή προεπιλεγμένης κατηγορίας για την δημιουργία νέων άρθρων',
+    24 => '(*)',
+    25 => 'Αρχειοθέτηση Κατηγορίας',
+    26 => 'επιλογή προεπιλεγμένης κατηγορίας για τα αρχειοθετημένα άρθρα.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Επεξεργαστής χρηστών',
+    2 => 'Ταυτότητα χρήστη',
+    3 => 'Όνομα χρήστη',
+    4 => 'Πλήρες όνομα',
+    5 => 'Κωδικός πρόσβασης',
+    6 => 'Επίπεδο ασφαλείας',
+    7 => 'Ηλεκτρονική διεύθυνση',
+    8 => 'Ιστοσελίδα',
+    9 => '(μη πληκτρολογείτε κενά)',
+    10 => 'Τα πεδία Όνομα χρήστη, Πλήρες όνομα, επίπεδο ασφαλείας και Ηλεκτρονική διεύθυνση είναι υποχρεωτικά',
+    11 => 'Διαχειριστής χρηστών',
+    12 => ' Για να μετατρέψετε η να διαγράψετε έναν χρήστη διαλέξτε τον από την παρακάτω λίστα. Για να δημιουργήσετε έναν χρήστη επιλέξτε Νέος χρήστης από το μενού αριστερά.  Μπορείτε να αναζητήσετε ένα μέρος από ονόματα χρηστών, ηλεκτρονικών διευθύνσεων ή τα πλήρη τους ονόματα ( για παράδειγμα *υιός* ή *.gr) στην φόρμα παρακάτω ',
+    13 => 'Επίπεδο ασφαλείας',
+    14 => 'Ημερομηνία εγγραφής.',
+    15 => 'Νέος χρήστης',
+    16 => 'Σελίδα διαχείρισης',
+    17 => 'αλλαγή κωδικού',
+    18 => 'ακύρωση',
+    19 => 'διαγραφή',
+    20 => 'αποθήκευση',
+    21 => 'Το όνομα χρήστη υπάρχει ήδη',
+    22 => 'Σφάλμα',
+    23 => 'Πρόσθεση συνόλου',
+    24 => 'Εισαγωγή συνόλου χρηστών',
+    25 => "Υπάρχει η δυνατότητα να προσθέσετε χρήστες στο Geeklog. Το αρχείο εισαγωγής χρηστών πρέπει να είναι διαμορφωμένο ακολούθως: πλήρες όνομα, όνομα χρήστη, ηλεκτρονική διεύθυνση. Κάθε χρήστης που θα εισάγεται θα λαμβάνει ένα μήνυμα με τον τυχαίο κωδικού του. Πρέπει να έχετε έναν χρήστης σε κάθε γραμμή. \nΟποιαδήποτε παρατυπία, ίσως οδηγήσει σε προβλήματα, όπότε ελέγξτε δύο φορές τις γραμμές εισαγωγής σας.",
+    26 => 'Αναζήτηση',
+    27 => 'Περιορισμός αποτελεσμάτων',
+    28 => 'Πατήστε εδώ να διαγράψετε την φωτογραφία',
+    29 => 'Διαδρομή',
+    30 => 'Εισαγωγή',
+    31 => 'Νέοι χρήστες',
+    32 => 'Η επεξεργασία τελείωσε. Εισαγωγές %d και %d αποτυχίες',
+    33 => 'Υποβολή',
+    34 => 'Σφάλμα: Πρέπει να ορίσετε το αρχείο για επαναφόρτωση.',
+    35 => 'Τευλευταία εισαγωγή στο σύστημα',
+    36 => '(ποτέ)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Έγκριση',
+    2 => 'Διαγραφή',
+    3 => 'Επεξεργασία',
+    4 => 'Προφίλ',
+    10 => 'Τίτλος',
+    11 => 'Ημερομηνία έναρξης',
+    12 => 'URL',
+    13 => 'Κατηγορία',
+    14 => 'Ημερομηνία',
+    15 => 'Θέμα',
+    16 => 'Όνομα χρήστη',
+    17 => 'Πλήρες Όνομα',
+    18 => 'Ηλεκτρονική διεύθυνση',
+    34 => 'Εντολές και Έλεγχος',
+    35 => 'Υποβολή άρθρων',
+    36 => 'Υποβολή συνδέσμων',
+    37 => 'Υποβολή γεγονότων',
+    38 => 'Υποβολή',
+    39 => 'Δέν υπάρχουν υποβολές προς επιθεώρηση την παρούσα στιγμή',
+    40 => 'Υποβολές χρηστών'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Κυριακή',
+    2 => 'Δευτέρα',
+    3 => 'Τρίτη',
+    4 => 'Τετάρτη',
+    5 => 'Πέμπτη',
+    6 => 'Παρασκευή',
+    7 => 'Σάββατο',
+    8 => 'Προσθήκη γεγονότος',
+    9 => 'Γεγονός',
+    10 => 'Γεγονότα για',
+    11 => 'Κυρίως ημερολόγιο',
+    12 => 'Προσωπικό ημερολόγιο',
+    13 => 'Ιανουάριος',
+    14 => 'Φεβρουάριος',
+    15 => 'Μάρτιος',
+    16 => 'Απρίλιος',
+    17 => 'Μάιος',
+    18 => 'Ιούνιος',
+    19 => 'Ιούλιος',
+    20 => 'Αύγουστος',
+    21 => 'Σεπτέμβριος',
+    22 => 'Οκτώβριος',
+    23 => 'Νοέμβριος',
+    24 => 'Δεκέμβριος',
+    25 => 'Πίσω στο ',
+    26 => 'Όλη μέρα',
+    27 => 'Εβδομάδα',
+    28 => 'Προσωπικό ημερολόγιο για',
+    29 => 'Δημόσιο ημερολόγιο',
+    30 => 'Διαγραφή γεγονότος',
+    31 => 'Προσθήκη',
+    32 => 'Γεγονός',
+    33 => 'Ημερομηνία',
+    34 => 'Ώρα',
+    35 => 'Γρήγορη καταχώρηση',
+    36 => 'Υποβολή',
+    37 => 'Συγνώμη, η υπηρεσία προσωπικού ημερολογίου δεν συμπεριλαμβάνεται στις ενεργοποιημένες υπηρεσίες',
+    38 => 'Προσωπικός Επεξεργαστής γεγονότων',
+    39 => 'Ημέρα',
+    40 => 'Εβδομάδα',
+    41 => 'Μήνα'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Υπηρεσία ηλεκτρονικού ταχυδρομείου",
+    2 => 'Από',
+    3 => 'Απάντηση-σε',
+    4 => 'Θέμα',
+    5 => 'Κείμενο',
+    6 => 'Παραλήπτης:',
+    7 => 'Όλοι οι χρήστες',
+    8 => 'Διαχειριστής',
+    9 => 'Επιλογές',
+    10 => 'HTML',
+    11 => 'Επείγον μήνυμα!',
+    12 => 'Αποστολή',
+    13 => 'Ρύθμιση εκ νέου',
+    14 => 'Αγνόησε επιλογές χρήστη',
+    15 => 'Σφάλμα κατά την αποστολή στον: ',
+    16 => 'Μήνυμα εστάλη επιτυχώς: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Στείλτε άλλο μήνυμα</a>",
+    18 => 'Στον',
+    19 => 'ΣΗΜΕΙΩΣΗ: Εάν επιθυμείτε να αποστείλετε ένα μήνυμα σε όλους τους εγγεγραμμένους χρήστες επιλέξτε το σύνολο των χρηστών εν ενεργεία από το κυλιόμενο μενού επιλογής',
+    20 => "Επιτυχής αποστολή <successcount> μηνυμάτων και ανεπιτυχής αποστολή  <failcount> μηνυμάτων. Αν τα χρειάζεστε, αναλυτικές πληροφορίες για κάθε μία απόπειρα βρίσκονται παρακάτω. Αλλιώς, μπορείτε να <a href=\"{$_CONF['site_admin_url']}/mail.php\">Στείλετε νέο μήνυμα</a> ή να  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">επιστρέψετε στην σελίδα διαχείρισης</a>.",
+    21 => 'Αποτυχίες',
+    22 => 'Επιτυχίες',
+    23 => 'Καμιά αποτυχία',
+    24 => 'Καμιά επιτυχία',
+    25 => '-- Επιλέξτε σύνολο --',
+    26 => 'Παρακαλώ, συμπληρώστε όλα τα πεδία. Κανένα δεν είναι προαιρετικό.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Η εγκατάσταση των εξωτερικών προγραμμάτων θα μπορούσε να προκαλέσει ζημιά στην εγκατάσταση του Geeklog και πιθανόν στο σύστημα σας. Είναι σημαντικό να σιγουρευτείτε ότι τα εξωτερικά προγράμματα προέρχονται από την ιστοσελίδα <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> επειδή στην σελίδα μας τα εξωτερικά προγράμματα είναι ελεγχόμενα. Είναι επίσης σημαντικό να καταλάβετε ότι η εγκατάσταση ενός εξωτερικού προγράμματος απαιτεί την εκτέλεση μερικών εντολών του συστήματος αρχείων που θα μπορούσε να επιφέρει προβλήματα ασφαλείας ειδικά αν προέρχεται το εξωτερικό πρόγραμμα από τρίτο κατασκευαστή. Ακόμα και με την παρούσα προειδοποίηση δεν εγγυόμαστε ότι η εγκατάσταση των  εξωτερικών προγραμμάτων θα είναι επιτυχής ούτε αποδεχόμαστε ευθύνη για τυχόν ζημιές από την εγκατάσταση. Η εγκατάσταση είναι δικό σας ρίσκο. Οδηγίες για την εγκατάσταση εξωτερικών προγραμμάτων μπορούν να βρεθούν σε κάθενα απο αυτά. ',
+    2 => 'Αποποίηση ευθυνών εγκατάστασης εξωτερικών προγραμμάτων',
+    3 => 'Φόρμα εγκατάστασης εξωτερικών προγραμμάτων',
+    4 => 'Αρχείο εξωτερικών προγραμμάτων',
+    5 => 'Λίστα εξωτερικών προγραμμάτων',
+    6 => 'ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Το εξωτερικό πρόγραμμα είναι ήδη εγκατεστημένο',
+    7 => 'Το εξωτερικό πρόγραμμα που προσπαθείτε να εγκαταστήσετε είναι ήδη εγκατεστημένο. Παρακαλώ, σβήστε το και ξαναπροσπαθήστε.',
+    8 => 'H εξέταση συμβατότητας για εξωτερικό πρόγραμμα απέτυχε',
+    9 => 'Αυτό το εξωτερικό πρόγραμμα απαιτεί νεότερη έκδοση του Geeklog. Η αναβαθμίστε την έκδοση σας του <a href="http://www.geeklog.net">Geeklog</a> η βρείτε μία νεότερη έκδοση του.',
+    10 => '<br><b>Δεν υπάρχουν εγκατεστημένα εξωτερικά προγράμματα.</b><br><br>',
+    11 => 'Για να επεξεργαστείτε η να διαγράψετε ένα εξωτερικό πρόγραμμα, επιλέξτε το παρακάτω με βάση την αριθμό του. Για να μάθετε περισσότερα για ένα συγκεκριμένο εξωτερικό πρόγραμμα, επιλέξτε το όνομα του και θα οδηγηθείτε στην ιστοσελίδα του. Για να to αναβαθμίσετε  συμβουλευτείτε το εγχειρίδιο χρήσης. ',
+    12 => 'Δεν δόθηκε το όνομα του εξωτερικού προγράμμaτος στον plugineditor()',
+    13 => 'Επεξεργαστής εξωτερικών προγραμμάτων',
+    14 => 'Νέο εξωτερικό πρόγραμμα',
+    15 => 'Σελίδα διαχείρισης',
+    16 => 'Όνομα εξωτερικού προγράμματος',
+    17 => 'Έκδοση εξωτερικού προγράμματος',
+    18 => 'Έκδοση Geeklog',
+    19 => 'Ενεργό',
+    20 => 'Ναι',
+    21 => 'Όχι',
+    22 => 'Εγκατάσταση',
+    23 => 'Αποθήκευση',
+    24 => 'Ακύρωση',
+    25 => 'Διαγραφή',
+    26 => 'Όνομα εξωτερικού προγράμματος',
+    27 => 'Ιστοσελίδα εξωτερικού προγράμματος',
+    28 => 'Έκδοση εξωτερικού προγράμματος',
+    29 => 'Έκδοση Geeklog',
+    30 => 'Διαγραφή εξωτερικού προγράμματος;',
+    31 => 'Είστε σίγουρος/η ότι επιθυμείτε να διαγράψετε αυτό το εξωτερικό πρόγραμμα; Αν το διαγράψετε όλα τα αρχεία, τα δεδομένα και οι δομές δεδομένων που χρησιμοποιεί θα διαγραφούν επίσης. Εάν είστε σίγουρος/η επιλέξτε την επιλογή διαγραφή οπό την παρακάτω φόρμα.',
+    32 => '<p><b>Σφάλμα, η διαμόρφωση του "AutoLink tag" δεν είναι σωστή</b></p>',
+    33 => 'Έκδοση κώδικα',
+    34 => 'Αναβάθμιση',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Δημιουργία ροής δεδομένων',
+    2 => 'Αποθήκευση',
+    3 => 'Διαγραφή',
+    4 => 'Ακύρωση',
+    10 => 'Κοινοπραξία Περιεχομένων',
+    11 => 'Νέα ροή δεδομένων',
+    12 => 'Σελίδα Διαχειριστή',
+    13 => 'Για να τροποποιήσετε την ροή δεδομένων επιλέξτε τον τίτλο της ροής παρακάτω. Για να δημιουργήσετε μια νέα ροή δεδομένων επιλέξτε Νέα Ροή παραπάνω.',
+    14 => 'Τίτλος',
+    15 => 'Τύπος',
+    16 => 'Όνομα Αρχείου',
+    17 => 'Διαμόρφωση',
+    18 => 'Τελευταία Ανανέωση',
+    19 => 'Ενεργοποιήμένο',
+    20 => 'Ναί',
+    21 => 'Όχι',
+    22 => '<i>(Δεν υπάρχει ροή δεδομένων)</i>',
+    23 => 'όλες οι ιστορίες',
+    24 => 'Συντάκτης ροής δεδομένων',
+    25 => 'Τίτλος Ροής δεδομένων',
+    26 => 'Όριο',
+    27 => 'Εύρος στοιχείων',
+    28 => '(0 = κενό κείμενο, 1 = πλήρες κείμενο, άλλο = περιορισμός στο μήκος των χαρακτήρων.)',
+    29 => 'Περιγραφή',
+    30 => 'Τελευταία ανανέωση',
+    31 => 'Σύνολο χαρακτήρων',
+    32 => 'Γλώσσα',
+    33 => 'Περιέχομενα',
+    34 => 'Εισαγωγές',
+    35 => 'Ώρες',
+    36 => 'Επιλέξτε τύπο ροής',
+    37 => 'Έχετε τουλάχιστον ένα εξωτερικό πρόγραμμα εγκατεστημένο που υποστηρίζει κοινοπραξία. Παρακάτω, θα μπορείτε να επιλέξετε αν θέλετε να δημιουργηθεί μία ροή δεδομένων για το Geeklog ή για τα εξωτερικά προγράμματα.',
+    38 => 'Σφάλμα: Κάποια πεδία δεν έχουν συμπληρωθεί',
+    39 => 'Παρακαλώ, συμπληρώστε τα πεδία Τίτλος Ροής, Περιγραφή και Όνομα αρχείου.',
+    40 => 'Παρακαλώ, εισάγετε τον αριθμό των εγγραφών η τον αριθμό των ωρών.',
+    41 => 'Σύνδεσμοι',
+    42 => 'Γεγονότα',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Ο κωδικός πρόσβασης σας έχει αποσταλεί με μήνυμα ηλεκτρονικού ταχυδρομείου. Παρακαλούμε, ακολουθήστε τις οδηγίες και σας ευχαριστούμε που χρησιμοποιείται{$_CONF['site_name']}",
+    2 => "Ευχαριστούμε για την υποβολή του άρθρου σας στο {$_CONF['site_name']}.  Η υποβολή σας θα πρέπει να περάσει από την έγκριση των διαχειριστών. Αν εγκριθεί θα είναι διαθέσιμη για όλους τους χρήστες στην ιστοσελίδα",
+    3 => "Ευχαριστούμε για την υποβολή του συνδέσμου σας στο {$_CONF['site_name']}.  Η υποβολή σας θα πρέπει να περάσει από την έγκριση των διαχειριστών. Αν εγκριθεί θα είναι διαθέσιμος για όλους τους χρήστες στην ιστοσελίδα <a href={$_CONF['site_url']}/links.php>links</a>",
+    4 => " Ευχαριστούμε για την υποβολή του γεγονότος σας στο {$_CONF['site_name']}.  Η υποβολή σας θα πρέπει να περάσει από την έγκριση των διαχειριστών. Αν εγκριθεί θα είναι διαθέσιμο για όλους τους χρήστες στην ιστοσελίδα <a href={$_CONF['site_url']}/calendar.php>calendar</a>",
+    5 => 'Η πληροφορίες του λογαριασμού σας αποθηκεύτηκαν επιτυχώς.',
+    6 => 'Οι προτιμήσεις προβολής σας αποθηκεύτηκαν επιτυχώς.',
+    7 => 'Οι προτιμήσεις σχολίων σας αποθηκεύτηκαν επιτυχώς.',
+    8 => 'Έχετε επιτυχώς αποσυνδεθεί.',
+    9 => 'Το άρθρο σας αποθηκεύτηκε επιτυχώς.',
+    10 => 'Το άρθρο διαγράφηκε επιτυχώς.',
+    11 => 'Η ομάδα σας αποθηκεύτηκε επιτυχώς.',
+    12 => 'Η ομάδα διαγράφτηκε επιτυχώς.',
+    13 => 'Το θέμα σας αποθηκεύτηκε επιτυχώς.',
+    14 => 'Το θέμα και όλες οι Άρθρα και ομάδες του διαγράφηκαν επιτυχώς.',
+    15 => 'Ο σύνδεσμός σας αποθηκεύτηκε επιτυχώς.',
+    16 => 'Ο σύνδεσμός διαγράφτηκε επιτυχώς.',
+    17 => 'Το γεγονός σας αποθηκεύτηκε επιτυχώς.',
+    18 => 'Το γεγονός διαγράφτηκε επιτυχώς.',
+    19 => 'Η ψηφοφορία σας αποθηκεύτηκε επιτυχώς.',
+    20 => 'Η ψηφοφορία διαγράφτηκε επιτυχώς.',
+    21 => 'Ο νέος χρήστης αποθηκεύτηκε επιτυχώς.',
+    22 => 'Ο χρήστης διαγράφτηκε επιτυχώς.',
+    23 => 'Σφάλμα στην εισαγωγή γεγονότος στο ημερολόγιο. Ο α/α του γεγονότος δεν αποθηκεύτηκε.',
+    24 => 'Το γεγονός αποθηκεύτηκε επιτυχώς στο ημερολόγιό σας.',
+    25 => 'Το προσωπικό σας ημερολόγιο δεν μπορεί να ανοιχθεί αν δεν συνδεθείτε πρώτα.',
+    26 => 'Το γεγονός διαγράφτηκε επιτυχώς από το προσωπικό σας ημερολόγιο',
+    27 => 'Το μήνυμα στάλθηκε επιτυχώς.',
+    28 => 'Το εξωτερικό πρόγραμμα αποθηκεύτηκε επιτυχώς',
+    29 => 'Η υπηρεσία των προσωπικών ημερολόγιων δεν είναι ενεργή σε αυτήν την ιστοσελίδα,',
+    30 => 'Η πρόσβαση απορρίφτηκε',
+    31 => 'Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των ιστοριών. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    32 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των θεμάτων. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    33 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των ομάδων. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    34 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των συνδέσμων. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    35 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των γεγονότων. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    36 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των ψηφοφοριών. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    37 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των χρηστών. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    38 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης των PLUGIN. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    39 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης του ηλεκτρονικού ταχυδρομείου. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    40 => 'Μήνυμα συστήματος',
+    41 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης της αντικατάστασης λέξεων. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    42 => 'Η λέξη σας αποθηκεύτηκε επιτυχώς.',
+    43 => 'Η λέξη διαγράφηκε επιτυχώς.',
+    44 => 'Το εξωτερικό πρόγραμμα εγκαταστάθηκε με επιτυχία!',
+    45 => 'Το εξωτερικό πρόγραμμα διαγράφτηκε με επιτυχία!',
+    46 => ' Τα δικαιώματα σας δεν αρκούν για να προσπελάσετε την σελίδα διαχείρισης αντιγράφων της βάσης δεδομένων. Όλες οι προσπάθειες μη-εξουσιοδοτημένης πρόσβασης καταχωρούνται στο σύστημα.',
+    47 => 'Αυτό το χαρακτηριστικό λειτουργεί μόνο υπό συστήματα *nix. Εάν το λειτουργικό σας σύστημα είναι *nix τότε η cache σας έχει επιτυχώς καθαριστεί. Εάν είστε σε λειτουργικό σύστημα Windows, θα πρέπει να ψάξετε και να αφαιρέσετε τα αρχεία adodb_*.php.',
+    48 => "Σας ευχαριστούμε για το ενδιαφέρον σας να γίνετε μέλος του {$_CONF['site_name']}. Η ομάδα μας θα αξιολογήσει την αίτηση σας. Αν εγκριθεί ο κωδικός σας θα αποσταλεί με μήνυμα ηλεκτρονικού ταχυδρομείου στην διεύθυνση που υποδηλώσατε.",
+    49 => 'Το σύνολο σας αποθηκεύτηκε επιτυχώς.',
+    50 => 'Το σύνολο διαγράφηκε επιτυχώς.',
+    51 => 'Το όνομα χρήστη που επιλέξατε είναι ήδη σε χρήση απο κάποιο άλλο μέλος. Παρακαλώ, επιλέξτε κάποιο άλλο όνομα.',
+    52 => 'Η ηλεκτρονική διεύθυνση που δηλώσατε δεν είναι σωστή.',
+    53 => 'Ο Νέος σας κωδικός έχει γίνει δεκτός. Παρακαλώ, χρησιμοποιήστε τον νέο σας κωδικό απο εδώ και πέρα.',
+    54 => 'Η αίτηση σας για την έκδοση νέου κωδικού πρόσβασης έχει εκπνεύσει. Παρακαλώ, προσπαθήστε ξανά.',
+    55 => 'Σας έχει αποσταλεί ένα ηλεκτρονικό μήνυμα και σύντομα θα το λάβετε. Παρακαλώ, ακολουθήστε τις οδηγίες στο ηλεκτρονικό μήνυμα για να αντικαταστήσετε τον κωδικό πρόσβασης για τον λογαριασμό σας.',
+    56 => 'Η Ηλεκτρονική διεύθυνση που δηλώσατε είναι σε ήδη σε χρήση απο ένα άλλο λογαριασμό στο σύστημα.',
+    57 => 'Ο λογαριασμός σας διαγράφτηκε επιτυχώς',
+    58 => 'Η ροή δεδομένων αποθηκεύτικε επιτυχώς',
+    59 => 'Η ροή δεδομένων διαγράφτηκε επιτυχώς',
+    60 => 'Το εξωτερικό πρόγραμμα αναβαθμίστηκε επιτυχώς',
+    61 => 'Εξωτερικό Πρόγραμμα %s: Άγνωστoς παραλήπτης μηνύματος',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Πρόσβαση',
+    'ownerroot' => 'Δικαιούχος/Root',
+    'group' => 'Σύνολο',
+    'readonly' => 'Μόνο ανάγνωση',
+    'accessrights' => 'Δικαιώματα πρόσβασης',
+    'owner' => 'Δικαιούχος',
+    'grantgrouplabel' => 'Παραχώρησε Παραπάνω Σύνολο Επεξεργασία Δικαιώματα',
+    'permmsg' => 'ΣΗΜΕΙΩΣΗ: τα μέλη είναι συνδεμένα σαν μέλη και σαν ανώνυμοι χρήστες όσοι απλά βλέπουν την σελίδα.',
+    'securitygroups' => 'Σύνολα ασφαλείας',
+    'editrootmsg' => "Ακόμα και αν είστε διαχειριστής χρηστών, δεν μπορείτε να επεξεργαστείτε τον λογαριασμό του υπέρ χρήστη χωρίς να είστε εσείς ένας υπέρ χρήστης. Μπορείτε να επεξεργαστείτε όλους τους λογαριασμούς εκτός από αυτούς που είναι συνδεμένοι. Όλες οι προσπάθειες για παράνομη επεξεργασία του λογαριασμού του υπέρ χρήστη καταγράφονται. Παρακαλώ γυρίστε πίσω στην <a href=\"{$_CONF['site_admin_url']}/users.php\">σελίδα διαχείρισης</a>.",
+    'securitygroupsmsg' => 'Διαλέξτε τα κουτιά με τα σύνολα που θέλετε ο χρήστης να ανήκει. ',
+    'groupeditor' => 'Επεξεργαστής σύνολων',
+    'description' => 'Περιγραφή',
+    'name' => 'Όνομα',
+    'rights' => 'Δικαιώματα',
+    'missingfields' => 'Ελλιπή πεδία',
+    'missingfieldsmsg' => 'Πρέπει να δώσετε μια περιγραφή για το σύνολο',
+    'groupmanager' => 'Διαχειριστής σύνολων',
+    'newgroupmsg' => 'Για να μετατρέψετε η να διαγράψετε ένα σύνολο επιλέξτε το σύνολο παρακάτω. Για να δημιουργήσετε ένα νέο σύνολο επιλέξτε Νέο σύνολο παραπάνω. Τα καίρια σύνολα δεν μπορούν να διαγραφτούν.',
+    'groupname' => 'Όνομα σύνολου',
+    'coregroup' => 'Καίριο σύνολο',
+    'yes' => 'Ναι',
+    'no' => 'Όχι',
+    'corerightsdescr' => "Αυτό το σύνολο είναι καίριο για το {$_CONF['site_name']}.  Τα δικαιώματα για αυτό το σύνολο δεν μπορούν να επεξεργαστούν. Παρακάτω βρίσκετε η λίστα με τα μόνο-ανάγνωσης δικαιώματα που έχει πρόσβαση αυτό το σύνολο.",
+    'groupmsg' => 'Τα σύνολα ασφάλειας σε αυτήν την ιστοσελίδα είναι ιεραρχικά. Η πρόσθεση ενός συνόλου σε άλλα σύνολα παρακάτω δίνει την δυνατότητα σε αυτό το σύνολο να μοιράζεται τα δικαιώματα με τα άλλα σύνολα. Όπου είναι εφικτό, είναι καλό να παραχωρείτε τέτοιου είδους δικαιώματα. Εάν χρειάζεστε ένα σύνολο να έχει διαφορετικά δικαιώματα μπορείτε να τα επιλέξετε στο τμήμα Δικαιώματα. Για να προσθέσετε το σύνολο σε οποιοδήποτε άλλο παρακάτω απλά επιλέξτε το κουτί δίπλα από το σύνολο που επιθυμείτε.',
+    'coregroupmsg' => "Το σύνολο {$_CONF['site_name']} είναι καίριο.  Τα σύνολα που συμπεριλαμβάνουν το σύνολο αυτό δεν μπορούν να υποστούν επεξεργασία. Παρακάτω είναι μία λίστα με τα μόνο-ανάγνωσης σύνολα που συμπεριλαμβάνουν το παρόν σύνολο.",
+    'rightsdescr' => 'Η πρόσβαση ενός συνόλου σε συγκεκριμένα δικαιώματα μπορεί να πραγματοποιηθεί απευθείας στο σύνολο Ή σε ένα διαφορετικό σύνολο που το παρόν σύνολο είναι μέλος. Τα σύνολα παρακάτω χωρίς κουτιά επιλογής είναι τα δικαιώματα που δόθηκαν σε αυτό το σύνολο επειδή ανήκει σε άλλο σύνολο που έχει αυτά τα δικαιώματα. Τα δικαιώματα με κουτιά επιλογής είναι δικαιώματα που μπορούν να δοθούν απευθείας στο σύνολο',
+    'lock' => 'Κλείδωμα',
+    'members' => 'Μέλη',
+    'anonymous' => 'Ανώνυμο',
+    'permissions' => 'Άδειες',
+    'permissionskey' => 'R = ανάγνωση, E = επεξεργασία, η δυνατότητα επεξεργασίας και ανάγνωσης προϋποθέτει',
+    'edit' => 'Επεξεργασία',
+    'none' => 'Κανένα',
+    'accessdenied' => 'Η πρόσβαση απορρίπτεται',
+    'storydenialmsg' => "Δεν έχετε πρόσβαση να δείτε αυτό το άρθρο.  Αυτό ίσως έγινε επειδή δεν είστε μέλος {$_CONF['site_name']}.  Σας παρακαλούμε <a href=users.php;mode=new> να γίνετε μέλος</a> of {$_CONF['site_name']} για να έχετε ολοκληρωμένη πρόσβαση ως μέλος!",
+    'eventdenialmsg' => "Δεν έχετε πρόσβαση να δείτε αυτό το γεγονός.  Αυτό ίσως έγινε γιατί δεν είστε μέλος of {$_CONF['site_name']}.  Σας παρακαλούμε <a href=users.php;mode=new> να γ</a> of να γίνετε μέλος {$_CONF['site_name']} για να έχετε ολοκληρωμένη πρόσβαση ως μέλος!",
+    'nogroupsforcoregroup' => 'Αυτό το σύνολο δεν ανήκει σε κανένα από τα άλλα σύνολα',
+    'grouphasnorights' => 'Αυτό το σύνολο δεν έχει πρόσβαση σε καμία από τις ρουτίνες διαχείρησης αυτής της ιστοσελίδας',
+    'newgroup' => 'νέο σύνολο',
+    'adminhome' => 'σελίδα διαχείρισης',
+    'save' => 'αποθήκευση',
+    'cancel' => 'ακύρωση',
+    'delete' => 'διαγραφή',
+    'canteditroot' => 'Προσπαθήσατε να επεξεργαστείτε το κεντρικό σύνολο αλλά δεν είστε στο σύνολο των διαχειριστών οπότε η πρόσβασή σας απορρίπτεται.  Σας παρακαλούμε επικοινωνήστε με τον διαχειριστή του συστήματος αν νομίζετε ότι πρόκειται περί λάθους.',
+    'listusers' => 'Λίστα Χρηστών',
+    'listthem' => 'Λίστα',
+    'usersingroup' => 'Χρήστε στην ομάδα  "%s"',
+    'usergroupadmin' => 'Ομάδα διαχείρισης χρηστών',
+    'add' => 'Πρόσθεση',
+    'remove' => 'Αφαίρεση',
+    'availmembers' => 'Διαθέσιμα μέλη',
+    'groupmembers' => 'Μέλη Ομάδας',
+    'canteditgroup' => 'Για να επεξεργαστήτε την παρούσα ομάδα πρέπει να είστε μέλος της. Παρακαλούμαι επικοινωνήστε με τους διαχειριστές του συστήματος αν νομίζετε οτι πρόκειται περι σφάλματος.',
+    'cantlistgroup' => 'Για να δείτε τα μέλη της ομάδας πρέπει να είστε μέλος της ομάδας και εσείς. Παρακαλούμαι επικοινωνήστε με τους διαχειριστές του συστήματος αν νομίζετε οτι πρόκειται περι σφάλματος.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Τελευταία 10 αντίγραφα ασφαλείας',
+    'do_backup' => 'Δημιουργία αντιγράφων ασφαλείας',
+    'backup_successful' => 'Τα αντίγραφα ασφαλείας της βάσης δεδομένων ήταν επιτυχημένα',
+    'db_explanation' => 'Για να δημιουργήσετε ένα νέο αντίγραφο ασφάλειας του συστήματος Geeklog, πατήστε το παρακάτω κουμπί',
+    'not_found' => "Λάθος διαδρομή ή το πρόγραμμα mysqldump δεν είναι εκτελέσημο. <br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Η μεταβλητή ορίζεται ως: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Η αποθήκευση αντιγράφων απέτυχε: Το μέγεθος του αρχείου ήταν 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} δεν υπάρχει ή δεν είναι κατάλογος",
+    'no_access' => "Σφάλμα: Ο κατάλογος {$_CONF['backup_path']} δεν είναι προσβάσημος.",
+    'backup_file' => 'Αρχείο αντιγράφου ασφαλείας',
+    'size' => 'Μέγεθος',
+    'bytes' => 'Βytes',
+    'total_number' => 'Συγκεντρωτικός αριθμός αντιγράφων ασφαλείας: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Κεντρική σελίδα',
+    2 => 'Επικοινωνία',
+    3 => 'Υποβολή άρθρων',
+    4 => 'Σύνδεσμοι',
+    5 => 'Ψηφοφορία',
+    6 => 'Ημερολόγιο',
+    7 => 'Στατιστικά ιστοσελίδας',
+    8 => 'Εξατομίκευση',
+    9 => 'Αναζήτηση',
+    10 => 'Σύνθετη αναζήτηση',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Η έρευνα πραγματοποιήθηκε σε όλα τα πιθανά σημεία χωρίς αποτέλεσμα  <b>%s</b>.',
+    3 => "<p>Λυπάμαι, αλλά το αρχείο που έχετε ζητήσει δεν υπάρχει. Μπορείτε να ελέγξετε την <a href=\"{$_CONF['site_url']}\">κεντρική σελίδα</a> or the <a href=\"{$_CONF['site_url']}/search.php\">σελίδα αναζήτησης</a> για να δείτε αν μπορείτε να βρείτε ό,τι χάσατε."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Η σύνδεσή σας είναι απαραίτητη',
+    2 => 'Για να προσπελάσετε αυτήν την περιοχή πρέπει να συνδεθείτε σαν χρήστης.',
+    3 => 'Σύνδεση',
+    4 => 'Νέος χρήστης '
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'Η χρηση εγγράφων PDF έχει απενεργοποιηθεί',
+    2 => 'Το παρόν έγγραφο δεν έχει μετραταπεί. Παρακαλώ, εξακριβώστε οτι αποστείλατε την HTML έκδοση ενός εγγράφου που τηρεί το πρότυπο xHTML. Επίσης, πρέπει να ξέρεται ότι υπάρχει η πιθανότητα να μην μετατραπουν σωστά πολύπλοκα έγγραφα σε HTML. Το μέγεθος του αρχείου μετατροπής είναι 0 bytes και έχει διαγραφεί. Αν είστε σίγουρος(η) ότι το έγγραφο θα μετατραπεί σωστά, παρακαλώ να το αποστείλετε ξανά.',
+    3 => 'Άγνωστο σφάλμα κατα την δημιουργία εγγράφου PDF',
+    4 => "Δεν καταχωρήθηκαν δεδομένα απο τον χρήστη ή θέλετε να δημιουργήσετε εξειδικευμένο έγγραφο PDF απο το εργαλείο παρακάτω. Αν νομίζετε οτι βλέπετε αυτήν την σελίδα\n       απο λάθος τότε επικοινωνήστε με τους διαχηριστές του συστήματος. Διαφορετικά, μπορείτε να χρησιμοποιήσετε την φόρμα παρακάτω για να δημιουργήσετε το έγγραφο σε PDF διαμόρφωση\n.",
+    5 => 'Φόρτωση του Εγγράφου',
+    6 => 'Παρακαλώ, περιμένετε μέχρι να τελειώσει η φόρτωση του εγγράφου σας.',
+    7 => 'Μπορείτε να αποθηκεύσετε το έγγραφο σας επιλέγοντας το κουμπί παρακάτω με το δεξί πλήκτρο του ποντικιού και επιλέγοντας "Αποθήκευση ως...".',
+    8 => "Η διαδρομη που δώσατε στο αρχείο της παραμετροποίησης (config.php) για το εκτελέσιμο HTMLDoc είναι λανθασμένος και το σύστημα δεν μπορεί να το εκτελέσει. Παρακαλώ, επικοινωνηστε με τους διαχηριστές του συστήματος αν το πρόβλημα\n	επιμείνει.",
+    9 => 'Δημιουργία αρχείου PDF',
+    10 => "Αυτός είναι ο εξειδικευμένος τρόπος δημιουργίας αρχείων PDF. Το παρόν εργαλείο θα επιχειρήσει την μετατροπή ενος URL σε αρχείο PDF. Παρακαλώ, σημειώστε ότι κάποιες σελίδες δεν θα εμφανίζονται σωστά στο τελικό αρχείο. Αυτό οφείλεται σε αδυναμλία του προγράμματος HTMLDoc PDF. Τα τυχόν λάθη στην μετρατροπή\n     θα πρέπει να αναφέρονται στην ιστοσελίδα του HTMLDoc PDF.",
+    11 => 'URL',
+    12 => 'Δημιουργία PDF!',
+    13 => 'Η παραμετρόποιηση της γλώσσας PHP στην παρούσα ιστοσελίδα δεν επιτρέπει την χρήση URL με την εντολή fopen(). Ο διαχηριστής του συστήματος πρέπει να θέσει την μεταβλητη "allow_url_fopen" στην θέση "on" στο αρχείο παραμετροποίησης της PHP',
+    14 => 'Το αρχείο PDF που διαλέξατε δεν υπάρχει η δεν επιτρέπεται η πρόσβαση σε αυτό.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/indonesian.php 1.4.0sr5-1/cpanel-glprivate/language/indonesian.php
--- 1.3.11sr1/cpanel-glprivate/language/indonesian.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/indonesian.php	2006-08-08 02:39:06.000000000 -0500
@@ -153,7 +153,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -320,7 +330,23 @@
     104 => 'Tampilkan status Online',
     105 => 'Tampilkan siapa yang online pada Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -338,27 +364,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Web Resources',
-    2 => 'Kosong.',
-    3 => 'Tambahkan link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Simpan Polling',
-    2 => 'Suara anda disimpan pada polling',
-    3 => 'Vote',
-    4 => 'Polling dalam System',
-    5 => 'Votes',
-    6 => 'Lihat pertanyaan polling yang lain'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -459,7 +464,11 @@
     54 => 'Hasil pencarian tanggapan',
     55 => 'hasil pencarian tepat',
     56 => 'DAN',
-    57 => 'ATAU'
+    57 => 'ATAU',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -489,7 +498,14 @@
     21 => 'Tidak ada link yang mendapatkan predikat 10 terbaik.',
     22 => '10 bahan bacaan terbaik yang paling sering dikirim ke teman',
     23 => 'Email',
-    24 => 'Tidak ada yang mendapatkan predikat 10 terbaik yang paling sering dikirim'
+    24 => 'Tidak ada yang mendapatkan predikat 10 terbaik yang paling sering dikirim',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -642,7 +658,12 @@
     57 => 'Pindah blok turun',
     58 => 'Pindah blok naik',
     59 => 'Pindah blok ke sisi kanan',
-    60 => 'Pindah blok ke sisi kiri'
+    60 => 'Pindah blok ke sisi kiri',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -677,35 +698,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor Link',
-    2 => '',
-    3 => 'Judul Link',
-    4 => 'Link URL',
-    5 => 'Kategori',
-    6 => '(pakai http://)',
-    7 => 'Lainnya',
-    8 => 'Hits Link',
-    9 => 'Deskripsi Link',
-    10 => 'Anda harus mengisi Judul link, URL dan Deskripsinya.',
-    11 => 'Manajer Link',
-    12 => 'Untuk menghapus dan memodifikasi link, klik link di bawah ini.  Untuk membuat yang baru klik link yang diatas.',
-    13 => 'Judul Link',
-    14 => 'Kategori Link',
-    15 => 'Link URL',
-    16 => 'Access Disangkal',
-    17 => "Anda mencoba mengakses link yang bukan hak anda.  Percobaan anda sudah terekam. Silahkan <a href=\"{$_CONF['site_admin_url']}/link.php\">kembali ke layar link administration</a>.",
-    18 => 'Link Baru',
-    19 => 'Admin Home',
-    20 => 'Jika yg lain, sebutkan',
-    21 => 'simpan',
-    22 => 'batal',
-    23 => 'hapus'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -728,16 +720,16 @@
     17 => 'Teks isi',
     18 => 'Hits',
     19 => 'TAnggapan',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Daftar bacaan',
     23 => 'Untuk memodifikasi atau menghapus, klik yang bersangkutan dibawah ini. Untuk melihat, Klik judulnya. untuk membuat klik bacaan baru diatas.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Tampilkan bacaan',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Isi judul dan teks intro',
     32 => 'Utama',
@@ -770,39 +762,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Silahkan masukkan pertanyaan dan minimal satu pertanyaan.',
-    3 => 'Polling dibuat',
-    4 => 'Poll %s disimpan',
-    5 => 'Edit Polling',
-    6 => 'Poll ID',
-    7 => '(jangan gunakan spasi)',
-    8 => 'Muncul pada Homepage',
-    9 => 'Pertanyaan',
-    10 => 'Jawaban / Votes',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'Buat Polling',
-    14 => 'simpan',
-    15 => 'batal',
-    16 => 'hapus',
-    17 => 'Masukkan Polling ID',
-    18 => 'Daftar Polling',
-    19 => 'Untuk memodifikasi atau menghapus polling, klik polling yang bersangkutan.  Untuk membuat klik Polling Baru diatas.',
-    20 => 'Suara',
-    21 => 'Access disangkal',
-    22 => "Anda mencoba mengakses halaman yan bukan hak anda.  percobaan anda telah terekam. Silahkan <a href=\"{$_CONF['site_admin_url']}/poll.php\">kembali ke layar poll administration</a>.",
-    23 => 'Polling baru',
-    24 => 'Admin Home',
-    25 => 'Ya',
-    26 => 'Tidak'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -834,7 +817,10 @@
     23 => 'buat topik ini sebagai standar topik pada pengiriman bahan baru',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -876,7 +862,18 @@
     33 => 'Cari',
     34 => 'Error: anda harus mengisi file yang akan di upload.',
     35 => 'Login terakhir',
-    36 => '(Tidak pernah)'
+    36 => '(Tidak pernah)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1021,7 +1018,11 @@
     31 => 'Apakah anda yakin ?  Dengan melakukan ini itu anda menghapus semua struktur dan file yang berhubungan dengan plug in yang bersangkutan.  Jika anda yakin, klik sekali lagi Hapus dibawah ini.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1064,7 +1065,15 @@
     39 => 'Silahkan isi Judul Feed, Deskripsi, dan nama File.',
     40 => 'Silahkan amsukkan jumlah masukan atau julah jam.',
     41 => 'Link',
-    42 => 'Even'
+    42 => 'Even',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1131,7 +1140,21 @@
     58 => 'Feed anda telah tersimpan dengan sukses.',
     59 => 'Feed tersebut telah terhapus dengan sukses.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1191,7 +1214,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'Untuk mengubah group, anda harus menjadi anggota group. Silahkan hubungi Administrator.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1201,7 +1233,6 @@
     'last_ten_backups' => '10 Back-ups terakhir',
     'do_backup' => 'Lakukan Backup',
     'backup_successful' => 'Back up Database sukses.',
-    'no_backups' => 'Tidak ada back up dalam system',
     'db_explanation' => 'Untuk membuat back up baru, klik tombol di bawah ini',
     'not_found' => "Path salah atau mysqldump utility tidak executable.<br>Periksa <strong>\$_DB_mysqldump_path</strong> defenisi pada config.php.<br>variable masih terdefenisi seperti: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup gagal: ukuran file 0 bytes',
@@ -1225,7 +1256,8 @@
     7 => 'Statistik situs',
     8 => 'Personalisasi',
     9 => 'Pencarian',
-    10 => 'Pencarian lebih teliti'
+    10 => 'Pencarian lebih teliti',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1267,4 +1299,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/indonesian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/indonesian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/indonesian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/indonesian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1508 @@
+<?php
+
+###############################################################################
+# indonesian.php
+# This is the indonesian language page for GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Kontributor:',
+    2 => 'Selanjutnya',
+    3 => 'Tanggapan',
+    4 => 'Ubah',
+    5 => 'Voting',
+    6 => 'Hasil',
+    7 => 'Hasil Polling',
+    8 => 'Suara',
+    9 => 'Fungsi Admin:',
+    10 => 'Pengiriman',
+    11 => 'Bahan Bacaan',
+    12 => 'Blok',
+    13 => 'Topik',
+    14 => 'Link',
+    15 => 'Even',
+    16 => 'Polling',
+    17 => 'User[s]',
+    18 => 'SQL Query',
+    19 => 'Keluar/Log Out',
+    20 => 'Informasi User:',
+    21 => 'Nama User',
+    22 => 'ID User',
+    23 => 'Tingkat Kemaman',
+    24 => 'Tak dikenal',
+    25 => 'Balas',
+    26 => 'Komentar di bawah ini adalah milik pengirim secara penuh. Situs ini tidak bertanggung jawab atas isi yg terkandung di dalamnya.',
+    27 => 'Kiriman terbaru',
+    28 => 'Hapus',
+    29 => 'Tudak ada tanggapan user.',
+    30 => 'Artikel Lama',
+    31 => 'Izinkan HTML Tags:',
+    32 => 'Error, nama user salah',
+    33 => 'Error, tidak dapat ditulis ke dalam log file',
+    34 => 'Error',
+    35 => 'Keluar',
+    36 => 'on',
+    37 => 'Tidak ada artikel dari user',
+    38 => 'Sindikasi Isi',
+    39 => 'Ulangi/Refresh',
+    40 => 'Anda memiliki<tt>register_globals = Off</tt> pada <tt>php.ini</tt>. Sedangkan, Geeklog membutuhkan <tt>register_globals</tt> menjadi <strong>on</strong>. Sebelum lanjut, silahkan diset <strong>on</strong> dulu dan restart web server anda.',
+    41 => 'User Tamu',
+    42 => 'Penanggung jawab:',
+    43 => 'Balas ke yang ini',
+    44 => 'Parent',
+    45 => 'MySQL Error Number',
+    46 => 'MySQL Error Message',
+    47 => 'Wilayah user',
+    48 => 'Informasi Account',
+    49 => 'Preferences',
+    50 => 'Error with SQL statement',
+    51 => 'Bantuan',
+    52 => 'Baru',
+    53 => 'Home Admin',
+    54 => 'Tidak dapat membuka file.',
+    55 => 'Error pada',
+    56 => 'Voting',
+    57 => 'Password',
+    58 => 'Login',
+    59 => "Belum ada account?  Daftar sbg <a href=\"{$_CONF['site_url']}/users.php?mode=new\">User baru</a>",
+    60 => 'Kirim tanggapan',
+    61 => 'Buat account baru',
+    62 => 'kata',
+    63 => 'Komentar Preferences',
+    64 => 'Email artikel ke teman',
+    65 => 'Lihat versi cetak',
+    66 => 'Kalendarku',
+    67 => 'Selamat datang di ',
+    68 => 'home',
+    69 => 'kontak',
+    70 => 'cari',
+    71 => 'kontribusi',
+    72 => 'web resources',
+    73 => 'poling terdahulu',
+    74 => 'kalender',
+    75 => 'cari lebih seksama',
+    76 => 'statistik situs',
+    77 => 'Plugins',
+    78 => 'Even akan datang',
+    79 => 'Apa\'  yang baru',
+    80 => 'Kumpulan bacaan yg lalu',
+    81 => 'bahan bacaan yang lalu',
+    82 => 'jam',
+    83 => 'TANGGAPAN',
+    84 => 'LINK',
+    85 => '48 jam terakhir',
+    86 => 'Tidak ada tanggapan baru',
+    87 => '2 minggu terakhir',
+    88 => 'Tidak ada Link baru',
+    89 => 'Blum ada event',
+    90 => 'Home',
+    91 => 'Load halaman ini',
+    92 => 'detik',
+    93 => 'Hak cipta',
+    94 => 'Semua merek dan hak cipta pada halaman ini dilindungi oleh Undang-undang.',
+    95 => 'Didukung oleh',
+    96 => 'Group',
+    97 => 'Daftar kata',
+    98 => 'Plug-ins',
+    99 => 'ARTIKEL',
+    100 => 'Tidak ada artikel baru',
+    101 => 'Even anda',
+    102 => 'Even situs ini',
+    103 => 'Backup database',
+    104 => 'oleh',
+    105 => 'User mail',
+    106 => 'Ditampilkan',
+    107 => 'GL Versi Tes',
+    108 => 'Bersihkan Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalender Even',
+    2 => 'Maaf\'   belum ada even.',
+    3 => 'Kapan',
+    4 => 'Dimana',
+    5 => 'Deskripsi',
+    6 => 'Tambah Even',
+    7 => 'Even, segera...',
+    8 => 'Dengan menambahkan even ke dalam kalender anda dapat melihat dengan cepat even-even yang menarik dengan meng-klik "Kalenderku" di area Fungsi User.',
+    9 => 'Tambahkan ke Kalendrku',
+    10 => 'Hapus dari Kalenderku',
+    11 => "Tambahkan even ke {$_USER['username']}'s Kalender",
+    12 => 'Even',
+    13 => 'Mulai',
+    14 => 'Berakhir',
+    15 => 'Kembali ke Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Kirim tanggapan',
+    2 => 'Mode Kiriman',
+    3 => 'Keluar',
+    4 => 'Buat Account',
+    5 => 'Nama User',
+    6 => 'Anda harus logged untuk dapat mengirim tanggapan, Silahkan Log in.  Jika anda belum punya account gunakan forulir dibawah ini untuk membuat.',
+    7 => 'Tanggapan terakhir anda: ',
+    8 => " beberapa detik yg lalu.  Situs ini membutuhkan minimal {$_CONF['commentspeedlimit']} detik tiap tanggapan",
+    9 => 'Tanggapan',
+    10 => 'Send Report',
+    11 => 'Kirim tanggapan',
+    12 => 'Silahkan dilengkapi Judul dan Tanggapan anda, seperti yang seharusnya.',
+    13 => 'Informasi anda',
+    14 => 'Tampilkan',
+    15 => 'Report this post',
+    16 => 'Judul',
+    17 => 'Error',
+    18 => 'Hal Penting',
+    19 => 'Silahkan mencoba untuk tetap mengirim sesuai topik.',
+    20 => 'Cobalah untuk membalas tanggapan orang lain dari pada mengirim tanggaan baru.',
+    21 => 'Cobalah untuk membaca kiriman orang lain dulu sebelum anda mengirim! hal ini untuk menghindari duplikasi kiriman yang sama.',
+    22 => 'Gunakan subjek kosong untuk menggambarkan pesan anda.',
+    23 => 'Email anda TIDAK akan dipublikasikan.',
+    24 => 'User tak dikenal',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profil user untuk',
+    2 => 'Nama User',
+    3 => 'Nama Lengkap',
+    4 => 'Password',
+    5 => 'Email',
+    6 => 'Homepage',
+    7 => 'Bio',
+    8 => 'Kunci PGP',
+    9 => 'Simpan Informasi',
+    10 => '10 tanggapan terakhir untuk user',
+    11 => 'Tidak ada tanggapan user',
+    12 => 'Preferences user untuk',
+    13 => 'Email Nightly Digest',
+    14 => 'pasword ini telah diacak oleh mesin pengacak. Sangat disarankan untuk merubah password ini secepatnya. Untuk merubah password anda, log in kemudian klik Informasi Account dari menu Fungsi User.',
+    15 => "Account {$_CONF['site_name']} telah terbuat dengan sukses. Untuk dapat menggunakannya, anda harus login menggunakan informasi di bawah ini. Simpan email ini untuk referensi berikutnya.",
+    16 => 'Informasi Account anda',
+    17 => 'Account belum ada',
+    18 => 'Email yang anda masukkan sepertinya bukan email yang valid',
+    19 => 'nama user dan email yang anda gunakan sudah ada',
+    20 => 'Email yang anda masukkan sepertinya bukan email yang valid',
+    21 => 'Error',
+    22 => "Mendaftar dengan {$_CONF['site_name']}!",
+    23 => "Membuat account akan memberikan anda banyak keuntungan seperti keanggotaan {$_CONF['site_name']}  dan mengizikan anda mengirim tanggapan dan apa saja. Jika anda tidak memiliki account, anda hanya dapat mengirim sebagai orang tak dikenal. INGAT email anda  <b><i>TIDAK </i></b> akan dipublikasikan.",
+    24 => 'Password anda akan dikirim ke email yang anda masukkan.',
+    25 => 'Apakah anda lupa Password?',
+    26 => 'Masukkan <em>salah satu</em> nama user  <em>atau</em> email yang anda gunakan saat mendaftar. Instruksi bagaimana menset email baru akan dikirim ke email.',
+    27 => 'Daftar sekarang!',
+    28 => 'Kirim Password',
+    29 => 'Keluar dari',
+    30 => 'logged in dari',
+    31 => 'Fugsi yang anda pilih dibutuhkan untuk logged in',
+    32 => 'Tanda tangan',
+    33 => 'Tidak dipublikasikan',
+    34 => 'Ini adalah nama anda',
+    35 => 'Masukkan password untuk mengganti',
+    36 => 'Awali dengan http://',
+    37 => 'Aplikasikan untuk tanggapan anda',
+    38 => 'Semua tentang anda! Siapapun dapat membacanya',
+    39 => 'Kunci PGP publik untuk berbagi',
+    40 => 'Tidak ada ikon topik',
+    41 => 'Willing to Moderate',
+    42 => 'Format tanggal',
+    43 => 'Maksimal bacaan',
+    44 => 'Tidak ada kotak',
+    45 => 'Tampilkan Preferences untuk',
+    46 => 'Termasuk Item untuk',
+    47 => 'Konfigurasi kotak berita untuk',
+    48 => 'Topik',
+    49 => 'Tidak ada ikon dalam bacaan',
+    50 => 'Hilangkan tanda centangnya jika anda tidak tertarik',
+    51 => 'hanya bacaan berita',
+    52 => 'Standarnya adalah',
+    53 => 'Terima berita harian tiap malam',
+    54 => 'Centanglah jika anda tidak ingin melihatnya.',
+    55 => 'Jika anda biarkan tidak tercentang semuanya, itu berarti anda memilih pihan standar. Jika anda centang, maka setting standar tidak digunakan lagi. masukan strandar akan ditampilkan dalam bentuk tulisan tebal.',
+    56 => 'Penanggung jawab',
+    57 => 'Mode Tampilan',
+    58 => 'Sususan pengurutan',
+    59 => 'Batasan tanggapan',
+    60 => 'Bagaimana yang anda inginkan tehadap tampilan tanggapan anda?',
+    61 => 'Terbaru atau terlama duluan?',
+    62 => 'Satandarnya adalah 100',
+    63 => "Email anda sudah terkirim. Silahkan ikutin petunjuk dalam pesan, kamu ucapkan terima kasih anda telah menggunakan {$_CONF['site_name']}",
+    64 => 'Preferences tanggapan untuk',
+    65 => 'Coba ulangi',
+    66 => "Mungkin anda salah ketik.  Silahkan coba lagi. Apakah anda <a href=\"{$_CONF['site_url']}/users.php?mode=new\">user baru</a>?",
+    67 => 'Anggota sejak',
+    68 => 'Ingatkan saya setelah',
+    69 => 'Berapa lama kami senaiknya memngingat anda setelah logging in?',
+    70 => "Kustomisasi isi dan tata letak dari {$_CONF['site_name']}",
+    71 => "Salah satu fitur yang luar biasa dari {$_CONF['site_name']} adalah anda dapat mengkustomisasi dan tata letak. Pada sisi lain untuk mendapatkan keuntungan lebih anda terlebih dahulu harus <a href=\"{$_CONF['site_url']}/users.php?mode=new\">mendaftar</a> dengan {$_CONF['site_name']}.  Apakah anda sudah menjadi anggota?  Kalau sudah silahkan lansung log in!",
+    72 => 'Theme',
+    73 => 'Bahasa',
+    74 => 'Ubah tampilan situs ini!',
+    75 => 'Email Topik untuk',
+    76 => 'Jika anda memilih topic dari daftar dibawah ini anda akan menierima kiriman topik baru setiap hari sesuai topik yang anda pilih.  Silahkan pilih topik yang menarik saja!',
+    77 => 'Poto',
+    78 => 'Tambahkan poto diri anda!',
+    79 => 'Centang untuk menghapus poto',
+    80 => 'Login',
+    81 => 'Kirim Email',
+    82 => '10 bacaan terakhir untuk user',
+    83 => 'Pengiriman statisktik untuk user',
+    84 => 'Jumlah keseluruhan artikel:',
+    85 => 'Jumlah keseluruhan tanggapan:',
+    86 => 'Cari semua kiriman berdasarkan',
+    87 => 'Nama login anda',
+    88 => "Seseorang (mungkin anda) telah meminta password baru untuk account ini \"%s\" pada {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nJika anda belum yakin, silahkan klik link di bawah ini:\n\n",
+    89 => "Jika anda yakin, acuhkan saja pesan ini (itu artinya tidak terjadi apa2 pada password anda).\n\n",
+    90 => 'Masukkan password baru anda dibawah ini. Ingat, password lama anda tetap valid sampai anda kirim form ini.',
+    91 => 'Set Password baru',
+    92 => 'Masukkan Password baru',
+    93 => 'Pesanan terakhir anda untuk password baru adalah %d detik yang lalu. Dibutuhkan minimal %d detik tiap pesanan password baru.',
+    94 => 'Hapus Account "%s"',
+    95 => 'Klik tombol "hapus account" untuk menghapus account anda dari database. Semua bacaaan dan tanggapan yang ada kirim memlalui account ini <strong>tidak</strong> dihapus melainkan akan tampil dikirim oleh "Tak dikenal".',
+    96 => 'hapus account',
+    97 => 'Konfirmasi penghapusan Account',
+    98 => 'Apakah anda yakin? Jika Ya, Klik "hapus account" lagi pada form di bawah ini.',
+    99 => 'Pilihan Privasi untuk',
+    100 => 'Email dari Admin',
+    101 => 'Izinkan email dari Site Admins',
+    102 => 'Email dari Users',
+    103 => 'Izinkan email user lain',
+    104 => 'Tampilkan status Online',
+    105 => 'Tampilkan siapa yang online pada Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Tidak ada berita yang harus ditampilkan',
+    2 => 'Belum ada bacaan atau berita yang perlu ditampilkan.',
+    3 => 'untuk topic %s',
+    4 => 'Artikel atau Bahan Bacaan Hari Ini',
+    5 => 'Berikutnya',
+    6 => 'Sebelumnya',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Terjadi error saat pengiriman pesan. Coba ulangi lagi.',
+    2 => 'Terkirim dengan sukses.',
+    3 => 'Gunakanlah alamat email yang valid pada kolom Balas ke.',
+    4 => 'Silahkan Isi pada Nama anda, Balas ke, Subjek and Pesan',
+    5 => 'Error: User itu tidak ada.',
+    6 => 'Telah terjadi error.',
+    7 => 'Profile user untuk',
+    8 => 'Name user',
+    9 => 'URL user',
+    10 => 'Kirim email ke',
+    11 => 'Name anda:',
+    12 => 'Balas ke:',
+    13 => 'Subjek:',
+    14 => 'Pesan:',
+    15 => 'HTML tidak akan diterjemahkan.',
+    16 => 'Kirim Pesan',
+    17 => 'Kirim bacaan ke teman',
+    18 => 'Ke nama',
+    19 => 'Ke alamat email',
+    20 => 'dari Nama',
+    21 => 'dari alamat email',
+    22 => 'Semua harus diisi',
+    23 => "Email ini telah dikirim ke anda oleh %s pada %s karena mereka mengira bahwa anda tertarik pada artikle ini {$_CONF['site_url']}.  ini bukan SPAM.",
+    24 => 'Tanggapan pada bacaan ini pada',
+    25 => 'Anda harus Login.',
+    26 => 'Form ini akan mengizinkan dan mengirim email kepada user yang anda pilih.  Semua harus diisi.',
+    27 => 'Pesan singkat',
+    28 => '%s tulis: ',
+    29 => "Ini adalah digest harian dari{$_CONF['site_name']} untuk ",
+    30 => ' Berita harian untuk ',
+    31 => 'Judul',
+    32 => 'Tanggal',
+    33 => 'baca selengkapnya pada',
+    34 => 'Akhir pesan',
+    35 => 'Maaf, user ini tidak menerima email.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Cari lebih teliti',
+    2 => 'kata kunci',
+    3 => 'Topik',
+    4 => 'Semua',
+    5 => 'Jenis',
+    6 => 'Bacaan atau artikel',
+    7 => 'Tanggapan',
+    8 => 'Penanggung jawab',
+    9 => 'Semua',
+    10 => 'Cari',
+    11 => 'Hasil pencarian',
+    12 => 'ketepatan',
+    13 => 'hasil pencarian: tidak ada yang tepat',
+    14 => 'Tidak ada hasil',
+    15 => 'Ulangi lagi.',
+    16 => 'Judul',
+    17 => 'Tanggal',
+    18 => 'Penaggung jawab',
+    19 => "Cari seluruhnya dalam situs {$_CONF['site_name']} dan database baik yang lama maupun baru",
+    20 => 'Tanggal',
+    21 => 'sampai',
+    22 => '(Format tanggal YYYY-MM-DD)',
+    23 => 'Tampilkan',
+    24 => 'Ada %d item',
+    25 => 'Pencarian untuk',
+    26 => 'item ',
+    27 => 'detik',
+    28 => 'Tidak ada bacaan atau tanggapan yang cocok berdasarkan pencarian anda',
+    29 => 'Hasil pencarian',
+    30 => 'Tidak ada link yang cocok dengan pencarian anda',
+    31 => 'Plug-in kembali tidak cocok',
+    32 => 'Even',
+    33 => 'URL',
+    34 => 'Lokasi',
+    35 => 'Semua tanggal',
+    36 => 'Tidak ada event yang cocok berdasarkan pencarian',
+    37 => 'Hasil pencarian Even',
+    38 => 'Hasil pencarian Link',
+    39 => 'Links',
+    40 => 'Even',
+    41 => 'Minimal 3 characters.',
+    42 => 'Gunakan format tanggal YYYY-MM-DD (tahun-bulan-tabggal).',
+    43 => 'tepat',
+    44 => 'semua kata ini',
+    45 => 'mengandung kata ini',
+    46 => 'Berikutnya',
+    47 => 'Sebelumnya',
+    48 => 'Penanggung jawab',
+    49 => 'Tanggal',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Lokasi',
+    53 => 'Hasil pencarian bacaan',
+    54 => 'Hasil pencarian tanggapan',
+    55 => 'hasil pencarian tepat',
+    56 => 'DAN',
+    57 => 'ATAU',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Site Statistik',
+    2 => 'Total Hits ke system',
+    3 => 'Bahan bacaan (tanggapan) pada System',
+    4 => 'Polling (jawaban) pada System',
+    5 => 'Link (klik) pada System',
+    6 => 'Even pada System',
+    7 => '10 bahan bacaan terbaik',
+    8 => 'Judul bahan bacaan',
+    9 => 'Ditampilkan',
+    10 => 'Tidak ada bahan bacaan atau artikel pada situs ini yang mendapatkan predikat 10 terbaik.',
+    11 => '10 tanggapan terbaik',
+    12 => 'Tanggapan',
+    13 => 'Tidak ada bahan bacaan atau artikel pada situs ini yang mendapatkan predikat 10 tanggapan terbaik.',
+    14 => '10 polling terbaik',
+    15 => 'Pertanyaan polling',
+    16 => 'Suara',
+    17 => 'Belum ada polling yang di vote.',
+    18 => '10 link terbaik',
+    19 => 'Link',
+    20 => 'Hit',
+    21 => 'Tidak ada link yang mendapatkan predikat 10 terbaik.',
+    22 => '10 bahan bacaan terbaik yang paling sering dikirim ke teman',
+    23 => 'Email',
+    24 => 'Tidak ada yang mendapatkan predikat 10 terbaik yang paling sering dikirim',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Lainnya?',
+    2 => 'Kirim ke teman',
+    3 => 'Format cetak',
+    4 => 'Opsi bacaan',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Untuk mengirim %s anda harus login dulu.',
+    2 => 'Login',
+    3 => 'User Baru',
+    4 => 'Kirim Even',
+    5 => 'Kirim Link',
+    6 => 'Kirim bacaan',
+    7 => 'Login dibutuhkan',
+    8 => 'Kirim',
+    9 => 'Jika anda akan mengirim sebaiknya ikuti saran kami dibawah ini...<ul><li>Isi semua kolom,<li>Isi Informasi yang lengkap dan akurat<li>Double klik untuk mengecek URL tsb</ul>',
+    10 => 'Judul',
+    11 => 'Link',
+    12 => 'Tanggal Mulai',
+    13 => 'Tanggal berakhir',
+    14 => 'Lokasi',
+    15 => 'Deskripsi',
+    16 => 'Jika ada yang lain, sebutkan',
+    17 => 'kategori',
+    18 => 'Lainnya',
+    19 => 'Baca dulu',
+    20 => 'Error: Tidak ada kategori',
+    21 => 'Jika memilih "lainnya" pilih salah satu kategori',
+    22 => 'Error: Ada yang masih kosong',
+    23 => 'Harus diisi semua.',
+    24 => 'Pengiriman tersimpan',
+    25 => ' %s pengiriman anda tersimpan dengan sukses.',
+    26 => 'Limit kecepatan',
+    27 => 'nama user',
+    28 => 'Topik',
+    29 => 'Bacaan',
+    30 => 'Kiriman terakhir anda adalah ',
+    31 => " detik yang lalu.  Dibutuhkan {$_CONF['speedlimit']} detik tiap pengiriman",
+    32 => 'Tampilkan',
+    33 => 'Tampilkan bacaan',
+    34 => 'Keluar',
+    35 => 'HTML tidak diizinkan',
+    36 => 'Mode pengiriman',
+    37 => "Pengiriman even ke {$_CONF['site_name']} akan memasukkan even anda ke master kalender. Fitur ini <b>TIDAK</b> menyimpan personal event anda seperti ulang tahun atau hari jadi.<br><br>Even anda akan diterima oleh administrators dan jika lulus sensor, even itu akan ditampilkan.",
+    38 => 'Tambah even ke',
+    39 => 'Master Kalender',
+    40 => 'Personal Kalender',
+    41 => 'Waktu berakhir',
+    42 => 'Waktu mulai',
+    43 => 'Semua Even',
+    44 => 'Alamat baris 1',
+    45 => 'Alamat baris 2',
+    46 => 'Kota',
+    47 => 'Negara bagian',
+    48 => 'Kode Pos',
+    49 => 'Jenis Even',
+    50 => 'Ubah jenis Even',
+    51 => 'Lokasi',
+    52 => 'Hapus',
+    53 => 'Buat Account'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autentifikasi Dibutuhkan',
+    2 => 'Denied! Login Informasi salah',
+    3 => 'Password salah',
+    4 => 'Nama user:',
+    5 => 'Password:',
+    6 => 'Semua akses ke halaman administrator telah terekam dan akan diperiksa.<br>Halaman ini hanya khusus untuk yang memiliki otorisasi.',
+    7 => 'login'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Insufficient Admin Rights',
+    2 => 'Anda tidak memiliki hak untuk mengubah blok ini.',
+    3 => 'Editor Blok',
+    4 => 'Ada masalah saat pembacaan (lihat error.log untuk lebih detail).',
+    5 => 'Judul Blok',
+    6 => 'Topik',
+    7 => 'Semua',
+    8 => 'Level keamanan blok',
+    9 => 'Susunan Blok',
+    10 => 'Jenis Blok',
+    11 => 'Portal Blok',
+    12 => 'Normal Blck',
+    13 => 'Opsi Portal Block',
+    14 => 'RSS URL',
+    15 => 'RSS Update terakhir',
+    16 => 'Opsi Normal Blok',
+    17 => 'Isi Blok',
+    18 => 'Silahkan isi Judul da ISi Blok',
+    19 => 'Manajer Blok',
+    20 => 'Judul Blok',
+    21 => 'SecLev Blok',
+    22 => 'Jenis Blok',
+    23 => 'Susunan Blok',
+    24 => 'Topik Blok',
+    25 => 'Untuk memodifikasi atau menghapus, klik blok yang bersangkutan di bawah ini.  Untuk membuat yang baru klik blok baru diatas.',
+    26 => 'tata letak Blok',
+    27 => 'Blok PHP',
+    28 => 'Opsi Blok PHP',
+    29 => 'Fungsi Block',
+    30 => 'Jika anda ingin memiliki blok dengan PHP kode, masukkan nama fungsi diatas.  Fungsi anda harus diawali (prefix) "phpblock_" (mis. phpblock_getweather).  Jika tidak ada prefix, fungsi anda tidak akan terbuat.  Kami lakukan ini untuk menjaga orang-orang yang akan meng-hack instalasi Geeklog dengan memasukkan fungsi pemanggilan arbitrary yang dapat membahayakan system anda.  Yakinkan bahwa anda tidak memasukkan kurung kosong "()" setelah nama fungsi tersebut.  Terakhir, Disarankan anda memasukkan kode blok PHP anda ke /path/to/geeklog/system/lib-custom.php.  Ini akan mempermudah anda disaat anda meng upgrade dengan versi yang baru.',
+    31 => 'Error pada PHP Blok.  Fungsi, %s, tidak ada.',
+    32 => 'Error ada yang kosong',
+    33 => 'Anda harus memasukkan URL ke RSS file untuk portal blck',
+    34 => 'Anda harus memasukkan judul dan fungsi untuk PHP blok',
+    35 => 'Anda harus memasukkan judul dan isi untuk normal blok',
+    36 => 'Anda harus memasukkan isi untuk tata letak blok',
+    37 => 'Nama fungsi PHP blok salah',
+    38 => 'Fungsi untuk PHP Blok harus mempunyai prefix \'phpblock_\' (mis. phpblock_getweather).  prefix \'phpblock_\' sangat dibutuhkan untuk alasan keamanan.',
+    39 => 'Sisi',
+    40 => 'Kiri',
+    41 => 'Kanan',
+    42 => 'Anda harus memasukkan judul dan tata letak sebagai standar blok.',
+    43 => 'Hanya Homepage',
+    44 => 'Access disangkal',
+    45 => "Anda mengakses blok yang dimana anda tidak memiliki hak untuk mengaksesnya.  Percobaan anda telah terekam. Silahkan <a href=\"{$_CONF['site_admin_url']}/block.php\">kembali ke layar blok administration</a>.",
+    46 => 'Block baru',
+    47 => 'Admin Home',
+    48 => 'Nama Blok',
+    49 => ' (tidak boleh pakai spasi dan harus unik)',
+    50 => 'Bantuan File URL',
+    51 => 'pakai http://',
+    52 => 'Jika anda biarkan kosong ikon bantuan untuk blok ini tidak akan ditampilkan',
+    53 => 'Izinkan',
+    54 => 'simpan',
+    55 => 'batal',
+    56 => 'hapus',
+    57 => 'Pindah blok turun',
+    58 => 'Pindah blok naik',
+    59 => 'Pindah blok ke sisi kanan',
+    60 => 'Pindah blok ke sisi kiri',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor Even',
+    2 => 'Error',
+    3 => 'Judul Even',
+    4 => 'URL Even',
+    5 => 'Tanggal Mulai Even',
+    6 => 'Tanggal berakhir Even',
+    7 => 'Lokasi Even',
+    8 => 'Deskripsi Even',
+    9 => '(pakai http://)',
+    10 => 'Anda harus mengisi tanggal/waktu, deskripsi dan lokasi!',
+    11 => 'Manajer Even',
+    12 => 'Untuk memodifikasi atau menghapus even, klik pada even di bawah ini.  Untuk membuat klik pada even baru diatas. Klik pda [C] untuk mengkopi even yang sudah ada.',
+    13 => 'Judul Even',
+    14 => 'Tanggal mulai',
+    15 => 'Tanggal berakhir',
+    16 => 'Access disangkal',
+    17 => "Anda mencoba mengakses even yg bukan hak anda.  Percobaan anda telah terekam. Silahkan <a href=\"{$_CONF['site_admin_url']}/event.php\">kembali ke layar even administrator</a>.",
+    18 => 'Even Baru',
+    19 => 'Admin Home',
+    20 => 'simpan',
+    21 => 'batal',
+    22 => 'hapus',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Sebelumnya',
+    2 => 'Berikutnya',
+    3 => 'Mode',
+    4 => 'Mode Kiriman',
+    5 => 'Editor bacaan',
+    6 => 'Belum ada bacaan dalam system',
+    7 => 'Penangung jawab',
+    8 => 'simpan',
+    9 => 'tampilkan',
+    10 => 'batal',
+    11 => 'hapus',
+    12 => 'ID',
+    13 => 'Judul',
+    14 => 'Topik',
+    15 => 'Tanggal',
+    16 => 'Teks Intro',
+    17 => 'Teks isi',
+    18 => 'Hits',
+    19 => 'TAnggapan',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Daftar bacaan',
+    23 => 'Untuk memodifikasi atau menghapus, klik yang bersangkutan dibawah ini. Untuk melihat, Klik judulnya. untuk membuat klik bacaan baru diatas.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Tampilkan bacaan',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Isi judul dan teks intro',
+    32 => 'Utama',
+    33 => 'hanya bisa satu ciri yang menarik',
+    34 => 'Draft',
+    35 => 'Ya',
+    36 => 'Tidak',
+    37 => 'Selebihnya oleh',
+    38 => 'Selebihnya oleh',
+    39 => 'Email',
+    40 => 'Access Disangkal',
+    41 => "Anda mencoba mengkases bacaan yang bukan hak anda.  Percobaan telah terekam.  Anda dapat melihatnya dalam read-only. Silahkan <a href=\"{$_CONF['site_admin_url']}/story.php\">kembali ke layar bacaan administration </a> jika anda mnginginkannya.",
+    42 => "Anda mencoba mengkases bacaan yang bukan hak anda.  Percobaan telah terekam.  Silahkan <a href=\"{$_CONF['site_admin_url']}/story.php\">kembali ke layar bacaan administration </a>.",
+    43 => 'Bacaan baru',
+    44 => 'Admin Home',
+    45 => 'Access',
+    46 => '<b>CATATAN:</b> Jika anda memodifikasi tanggal, bacaan tersebut akan ditampilkan pada tanggal yang bersangkutan.  Dan itu berarti kiriman anda tidak masuk dalam RSS dan tidak akan diikutsertakan dalam pencarian dan statistik.',
+    47 => 'Images',
+    48 => 'image',
+    49 => 'kanan',
+    50 => 'kiri',
+    51 => 'Untuk menambah images dalam bacaan anda anda harus menyisipkan format teks kuhsus.  Format khusus tersebut adalah  [imageX], [imageX_right] atau [imageX_left] dimana X adalah jumlah image yang anda sertakan.  CATATAN: Anda harus menggnakan image yang anda lampirkam.  Jika tidak bacaan kiriman anda tidak di terima.<BR><P><B>PREVIEWING</B>: Previewing sebaiknya digunakan untuk bacaan yang mengandung image.  Gunakan tombol Tampilkan jika tida ada imagenya.',
+    52 => 'Hapus',
+    53 => 'sudah tisak terpakai.  Anda harus menyertakan image ke dalam intro teks atai isi teks sebelum anda menyimpannya',
+    54 => 'Image penyerta tidak terpakai',
+    55 => 'Terjadi errors dibawah ini saat disimpan.  Silahkan benahi dulu',
+    56 => 'Tampilkan ikon topik',
+    57 => 'Lihat unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor Topik',
+    2 => 'ID Topik',
+    3 => 'Nama Topik',
+    4 => 'Image Image',
+    5 => '(jangan gunakan spasi)',
+    6 => 'Menghapus topik itu berarti menghapus semua bacan dan blok yang temasuk didalamnya',
+    7 => 'Silahkan isi ID Topik dan Nama Topik',
+    8 => 'Manajer Topik',
+    9 => 'Untuk memodifikasi atau menghapus tinggal klik saja.  Untuk membuat yang baru klik topik baru. Anda akan menemui level akses topik yang ada di dalam kurung. Tanda asterisk(*) digunakan topik standar.',
+    10 => 'Susunan pengurutan',
+    11 => 'Bacaan/Halaman',
+    12 => 'Access disangkal',
+    13 => "Anda mencoba mengakses topic yang bukan hak anda.  Percobaan anda telah terekam. Silahkan <a href=\"{$_CONF['site_admin_url']}/topic.php\">silahkan kembali ke layar topic administration</a>.",
+    14 => 'Metode pengurutan',
+    15 => 'alphabetical',
+    16 => 'standarnya adalah',
+    17 => 'Topik baru',
+    18 => 'Admin Home',
+    19 => 'simpan',
+    20 => 'batal',
+    21 => 'hapus',
+    22 => 'Standar',
+    23 => 'buat topik ini sebagai standar topik pada pengiriman bahan baru',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor User',
+    2 => 'ID user',
+    3 => 'Nama user',
+    4 => 'Nama Lengkap',
+    5 => 'Password',
+    6 => 'Tingkat keamanan',
+    7 => 'Alamat level',
+    8 => 'Homepage',
+    9 => '(jangan gunakan spasi)',
+    10 => 'Silahkan isi nama User dan alamat email',
+    11 => 'Manajer user',
+    12 => 'Untuk memodifikasi atau menghapus, klik user yang bersangkutan dibawah ini.  Untuk membuat klik User baru. Mudah saja, masukkan email atau nama lengkap anda(mis. *son* or *.edu) di bawah ini.',
+    13 => 'SecLev',
+    14 => 'Tanggal Reg.',
+    15 => 'User Baru',
+    16 => 'Admin Home',
+    17 => 'ubah passw',
+    18 => 'batal',
+    19 => 'hapus',
+    20 => 'simpan',
+    21 => 'nama user yang ada simpan sudah terpakai.',
+    22 => 'Error',
+    23 => 'Batch Add',
+    24 => 'Batch Import of Users',
+    25 => 'Anda dapat mengimport batch users ke Geeklog.  File yang diimpor harus tab-delimited text file dan harus emiliki susunan field: nama lengkap, nama user, alamat email.  Setiap user yang anda impor akan diemail dengan password acak.  Anda ahrus memmasukkan satu user per baris.  Kegagalan mengikuti instruksi ini akan menyebabkan masalah yang mungkin di butuhkan pada pekerjaan manual jadi double klik untuk mengecek!',
+    26 => 'Pencarian',
+    27 => 'Batas hasil',
+    28 => 'Klik disini untuk menghapus',
+    29 => 'Path',
+    30 => 'Import',
+    31 => 'User baru',
+    32 => 'Proses telah selesai. Impor %d and encountered %d failures',
+    33 => 'Cari',
+    34 => 'Error: anda harus mengisi file yang akan di upload.',
+    35 => 'Login terakhir',
+    36 => '(Tidak pernah)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Diakui',
+    2 => 'Hapus',
+    3 => 'Ubah',
+    4 => 'Profil',
+    10 => 'Judul',
+    11 => 'Tanggal mulai',
+    12 => 'URL',
+    13 => 'Kategori',
+    14 => 'Tanggal',
+    15 => 'Topik',
+    16 => 'Nama User',
+    17 => 'Nama Lengkap',
+    18 => 'Email',
+    34 => 'Perintah dan Kontrol',
+    35 => 'Pengiriman bahan bacaan',
+    36 => 'Pengiriman link',
+    37 => 'Pengiriman even',
+    38 => 'Kirim',
+    39 => 'Belum ada pengiriman link yang akan di olah untuk saat ini',
+    40 => 'Pengiriman User'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Minggu',
+    2 => 'Senin',
+    3 => 'Selasa',
+    4 => 'Rabu',
+    5 => 'Kamis',
+    6 => 'Jumat',
+    7 => 'Sabtu',
+    8 => 'Tambah even',
+    9 => '%s Even',
+    10 => 'Even untuk',
+    11 => 'Master Kalender',
+    12 => 'Kelenderku',
+    13 => 'Januari',
+    14 => 'Februari',
+    15 => 'Maret',
+    16 => 'April',
+    17 => 'Mei',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'Augustus',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'Desember',
+    25 => 'Kembali ke ',
+    26 => 'Semua tanggal',
+    27 => 'Minggu',
+    28 => 'Personal Kalender untuk',
+    29 => 'Publik Kalender',
+    30 => 'hapus even',
+    31 => 'Tambah',
+    32 => 'Even',
+    33 => 'Date',
+    34 => 'waktu',
+    35 => 'Tambah cepat',
+    36 => 'Kirim',
+    37 => 'Maaf, fitur personal kalender tidak diizikan',
+    38 => 'Editor Personal Even',
+    39 => 'Tanggal',
+    40 => 'Minggu',
+    41 => 'Bulan'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Utilitas Mail",
+    2 => 'Dari',
+    3 => 'Balas ke',
+    4 => 'Subjek',
+    5 => 'Isi',
+    6 => 'Pengiriman',
+    7 => 'Semua user',
+    8 => 'Admin',
+    9 => 'Opsi',
+    10 => 'HTML',
+    11 => 'Pesan penting!',
+    12 => 'Kirim',
+    13 => 'Hapus',
+    14 => 'User settings tak dihiraukan',
+    15 => 'Error saat pengiriman ke: ',
+    16 => 'Sukses pengiriman ke: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Kirim pesan lain</a>",
+    18 => 'Ke',
+    19 => 'CATATAN: Jika anda ingin mengirim email ke seluruh anggota situs, pilih Users group dari dropdown.',
+    20 => "Kiriman sukses <successcount> pesan dan yg tidak sukses <failcount> pesan.  Jika anda menginginkannya, detail setiap pesan terlihat di bawah ini.  Sebaliknya anda dapat <a href=\"{$_CONF['site_admin_url']}/mail.php\">mengirim pesan lain</a> atau anda dapat <a href=\"{$_CONF['site_admin_url']}/moderation.php\">kembali ke halaman administration</a>.",
+    21 => 'Gagal',
+    22 => 'Sukses',
+    23 => 'Tidak ada kegagalan',
+    24 => 'Tidaka da kesuksesan',
+    25 => '-- Pilih Group --',
+    26 => 'Isi semuanya kemudian pilih group users dari drop down.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Menginstall plugins dapat menyebabkan kegagalan dalam penginstalan Geeklog dan mungki juga system ada.  Penting bagi anda untuk menginstall plugin yang hanya didownload dari <a href="http://www.geeklog.net">Geeklog Homepage</a> yang dimana plug ini tersebut telah kami uji dengan menggunakan berbagai macam system.  Singkatnya kami tidak bertanggung jawab atas kerusakan yang terjadi pada saat anda menginstall plugin maka sebaiknya ikuti instruksi penginstallan yang disertakan dalam plugin yang anda download.',
+    2 => 'Disclaimer Penginstallan Plug-in',
+    3 => 'Formulir Penginstallan Plug-in',
+    4 => 'File Plug-in',
+    5 => 'Daftar Plug-in',
+    6 => 'Perhatian: Plug-in telah diinstall!',
+    7 => 'The plug-in yang ada install sudah ada.  Silahkan hapus dulu sebelum anda menginstall lagi',
+    8 => 'Pengecekan kompatibelitas Plugin gagal',
+    9 => 'Plugin ini membutuhkan Geeklog versi terbaru. maka upgradelah <a href="http://www.geeklog.net">Geeklog</a> anda dan plugin yg ingin anda install.',
+    10 => '<br><b>Belum ada plugin yang terinstall.</b><br><br>',
+    11 => 'Untuk memodifikasi dan menghapus plugin selahkan klik nomer yang bersangkutan di bawah ini. Untuk mengetahui lebih jauh, klik nama plugin tersebut. Untuk menginstall atau upgrade silahkan baca dokumentasi.',
+    12 => 'tidak ada plugin yang disediakan oleh plugineditor()',
+    13 => 'Editor Plugin ',
+    14 => 'Plug-in Baru',
+    15 => 'Admin Home',
+    16 => 'Nama Plug-in',
+    17 => 'Versi Plug-in',
+    18 => 'Versi Geeklog',
+    19 => 'Diizinkan',
+    20 => 'Ya',
+    21 => 'Tidak',
+    22 => 'Install',
+    23 => 'Simpan',
+    24 => 'Batal',
+    25 => 'Hapus',
+    26 => 'Nama Plug-in',
+    27 => 'Homepage Plug-in',
+    28 => 'Versi Plug-in',
+    29 => 'Versi Geeklog',
+    30 => 'Hapus Plug-in?',
+    31 => 'Apakah anda yakin ?  Dengan melakukan ini itu anda menghapus semua struktur dan file yang berhubungan dengan plug in yang bersangkutan.  Jika anda yakin, klik sekali lagi Hapus dibawah ini.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Feed Baru',
+    2 => 'simpan',
+    3 => 'hapus',
+    4 => 'batal',
+    10 => 'Sindikat Isi',
+    11 => 'Feed baru',
+    12 => 'Admin Home',
+    13 => 'Untuk memodifikasi atau menghapus feed, silahkan kli yang dibawah. Untuk membuat yang baru, klik Feed Baru  di atas.',
+    14 => 'Judul',
+    15 => 'Jenis',
+    16 => 'Namafile',
+    17 => 'Format',
+    18 => 'update terakhir',
+    19 => 'Diizinkan',
+    20 => 'Ya',
+    21 => 'Tidak',
+    22 => '<i>(tidak ada feeds)</i>',
+    23 => 'Semua bacaan',
+    24 => 'Editor Feed',
+    25 => 'Judul Feed',
+    26 => 'Batasan',
+    27 => 'Panjang masukan',
+    28 => '(0 = Tidak ada, 1 = Penuh, other = Limit jumlah karakter.)',
+    29 => 'Deskripsi',
+    30 => 'update terakhir',
+    31 => 'Kharacter Set',
+    32 => 'Bahasa',
+    33 => 'Isi',
+    34 => 'Masukan',
+    35 => 'Jam',
+    36 => 'Pilih jenis feed',
+    37 => 'Minimal anda memiliki satu plugin yang terinstal untuk mendukung sindikasi isi. Dibawah ini adalah pilihannya.',
+    38 => 'Error: Ada yang kosong',
+    39 => 'Silahkan isi Judul Feed, Deskripsi, dan nama File.',
+    40 => 'Silahkan amsukkan jumlah masukan atau julah jam.',
+    41 => 'Link',
+    42 => 'Even',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Password anda telah dikirim melalui email dan akan sampai dalam beberapa detik. dan silahkan ikuti pwtunjuk dalam pesan tersebut dan terima kasih anda telah menggunakan {$_CONF['site_name']}",
+    2 => "Terimakasih atas kontribusi bacaan anda ke {$_CONF['site_name']}.  Kiriman tersebut telah sampai pada staff kami. Jika memang layak maka akan kami tampilkan begitupun sebaliknya.",
+    3 => "Terima kasih atas kontribusi link anda {$_CONF['site_name']}.  Link tesebut telah sampai pada staff kami.  Jika memang layak link anda akan tampil pada bagian <a href={$_CONF['site_url']}/links.php>links</a>.",
+    4 => "Terima kasih atas kiriman even anda {$_CONF['site_name']}.  Even tersebut telah diterima oleh staff kami. Jika memang layak link anda akan tampil pada bagian <a href={$_CONF['site_url']}/calendar.php>kalender</a>.",
+    5 => 'Informasi account anda telah tersimpan dengan sukses.',
+    6 => 'Preferences anda telah tersimpan dengan sukses.',
+    7 => 'Tanggapan preferences anda telah tersimpan dengan sukses.',
+    8 => 'Anda telah keluar dengan sukses.',
+    9 => 'Bacaan anda telah tersimpan dengan sukses.',
+    10 => 'Bacaan tersebut telah terhapus dengan sukses.',
+    11 => 'Blok anda telah tersipan dengan sukses.',
+    12 => 'Blok anda telah terhapus dengan sukses.',
+    13 => 'Topik anda telah tersimpan dengan sukses.',
+    14 => 'Topik dan semua yang berkaitan dengannya telah terhapus dengan sukses.',
+    15 => 'Link anda telah tersimpan dengan sukses.',
+    16 => 'Link anda telah terhapus dengan sukses.',
+    17 => 'Even anda telah tersimpan dengan sukses.',
+    18 => 'Even tersebut telah terhapus dengan sukses.',
+    19 => 'Polling anda telah tersimpan dengan sukses.',
+    20 => 'Polling tersebut telah terhapus dengan sukses.',
+    21 => 'User telah tersimpan dengan sukses.',
+    22 => 'User telah terhapus dengan sukses.',
+    23 => 'Error saat menambahan even pada kalender anda. Tidak ada ID even.',
+    24 => 'Even telah tersimpan denagn sukses dalam kalender anda',
+    25 => 'Tidak bisa membuka personal kalender anda sebelum login',
+    26 => 'Even telah berhasil dihapus dari personal kalender anda',
+    27 => 'Pesan terkirin denga sukses.',
+    28 => 'Plug-in telah tersimpan dengan sukses',
+    29 => 'Maaf, personal kalender tidak diizinkan',
+    30 => 'Access disangkal',
+    31 => 'Maaf, Anda tidak dapat mengakses halaman adminitras bacaan.  Catatan semua percobaan untuk mengaksesnya terekam',
+    32 => 'Maaf, Anda tidak dapat mengakses halaman adminitras topik.  Catatan semua percobaan untuk mengaksesnya terekam',
+    33 => 'Maaf, Anda tidak dapat mengakses halaman adminitras blok.  Catatan semua percobaan untuk mengaksesnya terekam',
+    34 => 'Maaf, Anda tidak dapat mengakses halaman adminitras link.  Catatan semua percobaan untuk mengaksesnya terekam',
+    35 => 'Maaf, Anda tidak dapat mengakses halaman adminitras even.  Catatan semua percobaan untuk mengaksesnya terekam',
+    36 => 'Maaf, Anda tidak dapat mengakses halaman adminitras polling.  Catatan semua percobaan untuk mengaksesnya terekam',
+    37 => 'Maaf, Anda tidak dapat mengakses halaman adminitras user.  Catatan semua percobaan untuk mengaksesnya terekam',
+    38 => 'Maaf, Anda tidak dapat mengakses halaman adminitras plugin.  Catatan semua percobaan untuk mengaksesnya terekam',
+    39 => 'Maaf, Anda tidak dapat mengakses halaman adminitras mail.  Catatan semua percobaan untuk mengaksesnya terekam',
+    40 => 'Pesan System',
+    41 => 'Maaf, anda tidak dapat mengakses halam pengantian kata.  Catatan semua percobaan untuk mengaksesnya terekam',
+    42 => 'Kata anda telah tersimpan dengan sukses.',
+    43 => 'Kata tersebut tela berhasil di hapus.',
+    44 => 'Plug-in telah terinstall dengas sukses!',
+    45 => 'Plugin tersebut telah terhapus denagn sukses.',
+    46 => 'Maaf, anda tidak dapat mengakses halaman database backup utility.  Catatan semua percobaan untuk mengaksesnya terekam',
+    47 => 'Fungsi ini hanya bekerja dibawah *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Terima kasih telah menjadia nggota kami dengan {$_CONF['site_name']}. Team kami akan mereview anda. Jika memang layak password anda akan dikirim ke email jadi silahkan isi.",
+    49 => 'Group anda telah tersimpan dengan sukses.',
+    50 => 'Group tersebut telah terhapus dengan sukses.',
+    51 => 'nama user telah tepakai. silahkan pilih yang lain.',
+    52 => 'Email ada nampaknya salah.',
+    53 => 'Password anda telah diterima. Silahkan gunakan password baru untuk login.',
+    54 => 'Pesanan untuk password baru anda telah kadaluarsa. Silahkan ulangi lagi.',
+    55 => 'Sebuat email telah terkirim ke anda silahkan di cek. Silahkan ikuti petunjung tersebut untuk menset password baru anda.',
+    56 => 'Email anda telah terpakai oleh user lain.',
+    57 => 'Account anda telah terhapus dengan sukses.',
+    58 => 'Feed anda telah tersimpan dengan sukses.',
+    59 => 'Feed tersebut telah terhapus dengan sukses.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Akses',
+    'ownerroot' => 'Pemilik/Root',
+    'group' => 'Group',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Hak Akses',
+    'owner' => 'Pemilik',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'Catatan: members adalah semua yang sudah terdaftar dan sebaliknya.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Walaupun anda User Administrator, anda tidak dapat mengedit root.  Anda tidak dapat mengedit semau user kecuali root users. Ingat semua percobaan mengedit root adalah ilegal dan telah terekam.  Silahkan kembali <a href=\"{$_CONF['site_admin_url']}/user.php\">ke halaman User Administration</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Deskripsi',
+    'name' => 'Nama',
+    'rights' => 'Hak',
+    'missingfields' => 'Ada yang kosong',
+    'missingfieldsmsg' => 'Anda harus memberikan nama dan deskripsi group',
+    'groupmanager' => 'Group Manajer',
+    'newgroupmsg' => 'Untuk memodifikasi atau menghapus silahkan klik dibawah ini. Untuk membuat group baru silahkan klik link diatas. Ingat core groups tidak dapat dihapus karena digunakan oleh system.',
+    'groupname' => 'Nama Group',
+    'coregroup' => 'Core Group',
+    'yes' => 'Ya',
+    'no' => 'Tidak',
+    'corerightsdescr' => "Group ini adalah core {$_CONF['site_name']} Group.  Jagi group ini tidak dapat di otak atik.  Dibawah ini adalah hanya read-only.",
+    'groupmsg' => 'Security Groups pada situs ini dalam bentuk hirarki.  Dengan menambahkan geoup ini ke group yang lain dibawahnya anda akan memberi hak yang sama pada group-group tersebut.  jadi memungkikan bagi anda untuk memberi hak pada group dibawah anda.  Jika anda menginginkannya anda dapat memilih berbagai macah hak yang disediakan situs ini pada bagian bawah yang disebut \'Hak\'.  Kemuadian silahkan diatur sesuai dengan kehendak anda dengan cara mencentangnya.',
+    'coregroupmsg' => "Ini adalah core {$_CONF['site_name']} Group.  Jagi group ini tidak dapat di otak atik.  Dibawah ini adalah hanya read-only.",
+    'rightsdescr' => 'Akses group dengan hak dibawah ini akan memberikan secara langsung kepada group atau group yang berbeda dalam groupnya.  yang terlihat tanpa centang dibawah ini adalah hak yang telah diberiakn kepadanya karena hak yang lain menjadi milik group yang lain pula.  Maka hak yang diberikan adalah sesuai dengan yang dicentang tersebut.',
+    'lock' => 'Terkunci',
+    'members' => 'Anggota',
+    'anonymous' => 'tak dikenal',
+    'permissions' => 'Perizinan',
+    'permissionskey' => 'R = read, E = edit, hak edit, dengan asumsi hak untuk membaca',
+    'edit' => 'Ubah',
+    'none' => 'Tidak ada',
+    'accessdenied' => 'Access disangkal',
+    'storydenialmsg' => "Anda tidak dapat akses untuk melihat bacaan ini.  Mungkin akrena anda bukan anggota {$_CONF['site_name']}.  Silahkan <a href=users.php?mode=new> jadi anggota</a> of {$_CONF['site_name']} untuk mendapatkan akses penuh keanggotaan!",
+    'eventdenialmsg' => "Anda tidak dapat akses untuk melihat even ini.  Mungkin akrena anda bukan anggota {$_CONF['site_name']}.  Silahkan <a href=users.php?mode=new> jadi anggota</a> of {$_CONF['site_name']} untuk mendapatkan akses penuh keanggotaan!",
+    'nogroupsforcoregroup' => 'Group ini bukan milik group manapun',
+    'grouphasnorights' => 'Group ini tidak dapat diakses dengan fitur apapun yang anda telah miliki',
+    'newgroup' => 'Group Baru',
+    'adminhome' => 'Admin Home',
+    'save' => 'simpan',
+    'cancel' => 'batal',
+    'delete' => 'hapus',
+    'canteditroot' => 'Anda mencoba negedit Root group semantara anda buka Root group itu sendiri, jadi akses anda disangkal.  Silahkan hubungi Administrator.',
+    'listusers' => 'Daftar Users',
+    'listthem' => 'daftar',
+    'usersingroup' => 'Users di group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Tambah',
+    'remove' => 'Hapus',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'Untuk mengubah group, anda harus menjadi anggota group. Silahkan hubungi Administrator.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '10 Back-ups terakhir',
+    'do_backup' => 'Lakukan Backup',
+    'backup_successful' => 'Back up Database sukses.',
+    'db_explanation' => 'Untuk membuat back up baru, klik tombol di bawah ini',
+    'not_found' => "Path salah atau mysqldump utility tidak executable.<br>Periksa <strong>\$_DB_mysqldump_path</strong> defenisi pada config.php.<br>variable masih terdefenisi seperti: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup gagal: ukuran file 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} tidak ada direktori",
+    'no_access' => "ERROR: Direktori {$_CONF['backup_path']} tidah terakses.",
+    'backup_file' => 'Backup file',
+    'size' => 'Ukuran',
+    'bytes' => 'Bytes',
+    'total_number' => 'Jumlah total back up: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Kontak',
+    3 => 'Pengiriman',
+    4 => 'Link',
+    5 => 'Polling',
+    6 => 'Kalender',
+    7 => 'Statistik situs',
+    8 => 'Personalisasi',
+    9 => 'Pencarian',
+    10 => 'Pencarian lebih teliti',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Saya sudah mencari semuanya tapi saya tidak menemukan <b>%s</b>.',
+    3 => "<p>Maaf, file yang anda pesan tidak ada. Silahkan periksa <a href=\"{$_CONF['site_url']}\">laman utama</a> atau <a href=\"{$_CONF['site_url']}/search.php\">halaman pencarian</a> jikan anda tidak dapat melihat yang hilang."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login dibutuhkan',
+    2 => 'Maaf, uktuk mengakses halaman ini anda harus login sebagai user.',
+    3 => 'Login',
+    4 => 'User baru'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/italian.php 1.4.0sr5-1/cpanel-glprivate/language/italian.php
--- 1.3.11sr1/cpanel-glprivate/language/italian.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/italian.php	2006-08-08 02:39:06.000000000 -0500
@@ -5,16 +5,16 @@
 # Traduzione italiana per GeekLog!
 # Special thanks to Mischa Polivanov for his work on this project
 #
-# Copyright (C) 2002 quess65
-# webmaster@dynamikteam.net
+# Copyright (C) 2002 quess65 webmaster@dynamikteam.net
+# Copyright (C) 2005 magomarcelo magomarcelo@gmail.com magomarcelo.blogspot.com
 #
-# Questo programma è free software; puoi ridistribuire e/o
+# Questo programma  free software; puoi ridistribuire e/o
 # modificarlo sotto i termini della GNU General Public License
 # come pubblicato da Free Software Foundation; dalla versione 2
 # della Licenza, o (come preferisci) a qualsiasi delle versioni
 # successive.
 #
-# Questo programma è distribuito con la speranza sia utile,
+# Questo programma  distribuito con la speranza sia utile,
 # ma SENZA NESSUNA GARANZIA; senza qualsiasi garanzia implicita di
 # COMMERCIABILITA o USO PER SCOPI PARTICOLARI. Vedi la
 # GNU General Public License per ulteriori dettagli.
@@ -42,15 +42,15 @@
 # lib-common.php
 
 $LANG01 = array(
-    1 => 'Contributo di:',
-    2 => 'altro ->',
+    1 => 'Inviato da:',
+    2 => 'continua ->',
     3 => 'commenti',
     4 => 'Modifica',
     5 => 'Vota',
     6 => 'Risultati',
     7 => 'Risultati vot.',
     8 => 'voti',
-    9 => 'Area Amministratore:',
+    9 => 'Funzioni Ammin:',
     10 => 'Inserimenti',
     11 => 'Articoli',
     12 => 'Blocchi',
@@ -67,40 +67,40 @@
     23 => 'Livello di sicurezza',
     24 => 'Anonimo',
     25 => 'Invia Commento',
-    26 => 'I seguenti commenti sono propriet&igrave; di chi li ha inviati. Questo sito non &egrave; responsabile dei contenuti degli stessi.',
+    26 => 'I seguenti commenti sono propriet&agrave; di chi li ha inviati. Questo sito non &egrave; responsabile dei contenuti degli stessi.',
     27 => 'Inserimenti pi&ugrave; recenti',
-    28 => 'Cancella',
+    28 => 'Elimina',
     29 => 'Nessun commento.',
-    30 => 'Vecchie Storie',
+    30 => 'Articoli Meno Recenti',
     31 => 'Permetti tag HTML:',
     32 => 'Errore, nome utente non valido',
     33 => 'Errore, non puoi scrivere nel file di log',
     34 => 'Errore',
     35 => 'Esci',
-    36 => 'on',
+    36 => 'su',
     37 => 'Nessun articolo dagli utenti',
     38 => 'Content Syndication',
     39 => 'Aggiorna',
-    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    40 => 'Hai <tt>register_globals = Off</tt> nel tuo <tt>php.ini</tt>. Tuttavia, Geeklog richiede che <tt>register_globals</tt> sia <strong>On</strong>. Prima di continuare, prego impostalo ad <strong>on</strong> e riavvia il tuo web server.',
     41 => 'Ospiti',
-    42 => 'Contributo di:',
+    42 => 'Inviato da:',
     43 => 'Rispondi a questo',
     44 => 'Relativo',
-    45 => 'MySQL Error Number',
-    46 => 'MySQL Error Message',
-    47 => 'Area Utenti',
+    45 => 'Numero Errore MySQL',
+    46 => 'Messaggio Errore MySQL',
+    47 => 'Funzioni Utente',
     48 => 'Info Account',
     49 => 'Preferenze',
-    50 => 'Errore nello stato SQL',
+    50 => 'Errore nello statement SQL',
     51 => 'Aiuto',
     52 => 'Nuovo',
-    53 => 'Home Amministratore',
+    53 => 'Home Ammin.',
     54 => 'Impossibile aprire il file.',
     55 => 'Errore su',
     56 => 'Vota',
     57 => 'Password',
     58 => 'Entra',
-    59 => "Non hai ancora un account?  Iscriviti come <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nuovo Utente</a>",
+    59 => "Non hai ancora un account? Iscriviti come <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nuovo Utente</a>",
     60 => 'Inserisci un commento',
     61 => 'Crea un nuovo Account',
     62 => 'parole',
@@ -112,20 +112,20 @@
     68 => 'Home',
     69 => 'Contatto',
     70 => 'Cerca',
-    71 => 'Contributo',
-    72 => 'Risorse Web',
+    71 => 'Scrivi',
+    72 => 'Link',
     73 => 'Sondaggi',
     74 => 'Calendario',
     75 => 'Ricerca Avanzata',
-    76 => 'Statistiche del sito',
-    77 => 'Plugins',
+    76 => 'Statistiche Sito',
+    77 => 'Plug-in',
     78 => 'Eventi in arrivo',
     79 => 'Novit&agrave;',
     80 => 'Articoli nelle ultime',
     81 => 'Articolo nelle ultime',
     82 => 'ore',
     83 => 'COMMENTI',
-    84 => 'LINKS',
+    84 => 'LINK',
     85 => '<br>nelle ultime 48 ore',
     86 => 'Nessun nuovo commento',
     87 => '<br>nelle ultime 2 settimane',
@@ -139,38 +139,48 @@
     95 => 'Powered By',
     96 => 'Gruppi',
     97 => 'Lista parole',
-    98 => 'Plug-ins',
+    98 => 'Plug-in',
     99 => 'ARTICOLI',
     100 => 'Nessun nuovo articolo',
-    101 => 'Tuoi Eventi',
+    101 => 'I Tuoi Eventi',
     102 => 'Eventi nel sito',
-    103 => 'DB Backups',
+    103 => 'Backup DB',
     104 => 'da',
-    105 => 'Mail Utility',
+    105 => 'Invio E-mail',
     106 => 'Visualizzazioni',
-    107 => 'GL Version Test',
-    108 => 'Cancella Cache',
-    109 => 'Report abuse',
-    110 => 'Report this post to the site admin',
-    111 => 'View PDF Version',
-    112 => 'Registered Users',
-    113 => 'Documentation'
+    107 => 'Test Versione GeekLog',
+    108 => 'Svuota Cache',
+    109 => 'Segnala abuso',
+    110 => 'Segnala questo inserimento all\'ammin. del sito',
+    111 => 'Visualizza Versione PDF',
+    112 => 'Utenti Registrati',
+    113 => 'Documentazione',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
 # calendar.php
 
 $LANG02 = array(
-    1 => 'Calendario degli eventi',
+    1 => 'Calendario eventi',
     2 => 'Nessun evento da visualizzare.',
     3 => 'Quando',
     4 => 'Dove',
     5 => 'Descrizione',
     6 => 'Aggiungi un evento',
-    7 => 'Eventi in arrivo',
-    8 => 'Aggiungendo questo evento al tuo calendario potrai accedere in modo veloce a tutti gli eventi a cui sei interessato cliccando su "Mio calendario" dalla sezione "Men&ugrave; Utente".',
+    7 => 'Prossimi eventi',
+    8 => 'Aggiungendo questo evento al tuo calendario potrai accedere in modo veloce a tutti gli eventi cui sei interessato facendo clic su "Il mio calendario" nel blocco "Funzioni Utente".',
     9 => 'Aggiungi al mio calendario',
-    10 => 'Rimuovi dal mio calendario',
+    10 => 'Elimina dal mio calendario',
     11 => "Aggiungi un evento al calendario di {$_USER['username']}",
     12 => 'Evento',
     13 => 'Inizio',
@@ -187,28 +197,28 @@
     3 => 'Esci',
     4 => 'Crea un Account',
     5 => 'Nome Utente',
-    6 => 'Per poter inserire un commento su questo sito &egrave; necessario loggarsi.  Se ancora non hai un account puoi usare il modulo sottostante per crearne uno.',
+    6 => 'Per poter inserire un commento su questo sito &egrave; necessario loggarsi. Se non hai ancora un account puoi usare il form sottostante per crearne uno.',
     7 => 'Il tuo ultimo commento risale a ',
     8 => " secondi f&agrave;  Devi attendere {$_CONF['commentspeedlimit']} secondi per inserire un nuovo commento",
     9 => 'Commento',
-    10 => 'Send Report',
+    10 => 'Invia Segnalazione',
     11 => 'Inserisci Commento',
     12 => 'Per poter inserire un commento &egrave; necessario riempire tutti i campi.',
     13 => 'Le tue info',
     14 => 'Anteprima',
-    15 => 'Report this post',
+    15 => 'Segnala questo inserimento',
     16 => 'Titolo',
     17 => 'Errore',
     18 => 'Materiale Importante',
-    19 => 'Per favore prova a mantenere questo inserimeno in cima agli argomenti.',
+    19 => 'Per favore prova a mantenere questo inserimento in cima agli argomenti.',
     20 => 'Prova a rispondere ad un commento di un altro utente anzich&egrave; aprire un nuovo inserimento.',
     21 => 'Leggi i messaggi degli altri utenti prima di inviare il tuo in maniera da evitare messaggi doppi.',
     22 => 'Usa un soggetto che descriva il contenuto del messaggio.',
-    23 => 'Il tuo indirizzo email non sar&agrave; reso pubblico.',
+    23 => 'Il tuo indirizzo e-mail non sar&agrave; reso pubblico.',
     24 => 'Utente Anonimo',
-    25 => 'Are you sure you want to report this post to the site admin?',
-    26 => '%s reported the following abusive comment post:',
-    27 => 'Abuse report'
+    25 => 'Sei sicuro di voler segnalare questo inserimento all\'amminstratore del sito?',
+    26 => '%s ha segnalato come abuso il seguente inserimento di commento:',
+    27 => 'Segnalazione abuso'
 );
 
 ###############################################################################
@@ -219,30 +229,30 @@
     2 => 'Nome Utente',
     3 => 'Nome Completo',
     4 => 'Password',
-    5 => 'Email',
+    5 => 'E-mail',
     6 => 'Homepage',
     7 => 'Bio',
     8 => 'Chiave PGP',
-    9 => 'Salva Informazioni',
+    9 => 'Registra Informazioni',
     10 => 'Ultimi 10 commenti dell\'utente',
     11 => 'Nessun commento dell\'utente',
     12 => 'Preferenze dell\'utente',
-    13 => 'Email Nightly Digest',
-    14 => 'Questa password &egrave; generata in maniera casuale. Si raccomanda di cambiare la password al pi presto. Per cambiare la password, loggarsi e cliccare su Informazioni Account dal men utente.',
-    15 => "Il tuo account su {$_CONF['site_name']} &egrave; stato creato con successo. Per entrare nel sito usa le informazioni sottostanti. Si consiglia di salvare la mail per non perdere i dati dell'account.",
+    13 => 'E-mail Digest Notturno',
+    14 => 'Questa password &egrave; generata in maniera casuale. Si raccomanda di cambiare la password al pi presto. Per cambiare la password, entra nel sito, poi fai clic su Informazioni Account dal men&ugrave; utente.',
+    15 => "Il tuo account su {$_CONF['site_name']} &egrave; stato creato correttamente. Per entrare nel sito usa le informazioni sottostanti. Si consiglia di registrare la mail per non perdere i dati dell'account.",
     16 => 'Informazioni del tuo account',
     17 => 'L\'Account non esiste',
-    18 => 'L\'indirizzo email fornito non &egrave; un indirizzo valido',
-    19 => 'Il nome utente o l\'indirizzo email fornito &egrave; gi&agrave; esistente',
-    20 => 'L\'indirizzo email fornito non &egrave; un indirizzo valido',
+    18 => 'L\'indirizzo e-mail fornito non &egrave; un indirizzo valido',
+    19 => 'Il nome utente o l\'indirizzo e-mail fornito &egrave; gi&agrave; esistente',
+    20 => 'L\'indirizzo e-mail fornito non &egrave; un indirizzo valido',
     21 => 'Errore',
-    22 => "Registrati in {$_CONF['site_name']}!",
-    23 => "<div align=justify>La creazione di un Account Utente da la possibilit&agrave; di partecipare alla costruzione di {$_CONF['site_name']} e ti permette di inviare commenti e articoli da te realizzati. Senza un Account sarai in grado di inserire solo come Anonimo. Prego nota che il tuo indirizzo email non sar&agrave; <b><i>mai</i></b> disponibile pubblicamente o visualizzata nel sito.<div>",
+    22 => "Registrati su {$_CONF['site_name']}!",
+    23 => "<div align=justify>La creazione di un Account Utente d&agrave; la possibilit&agrave; di partecipare alla costruzione di {$_CONF['site_name']} e ti permette di inviare commenti e articoli da te realizzati. Senza un Account sarai in grado di inserire solo come Anonimo. Prego nota che il tuo indirizzo e-mail non sar&agrave; <b><i>mai</i></b> disponibile pubblicamente o visualizzata nel sito.<div>",
     24 => 'La tua password sar&agrave; inviata all\'indirizzo da te inserito.',
     25 => 'Ti sei dimenticato la tua password?',
-    26 => 'Inserisci <em>almeno</em> il tuo nome utente <em>o</em> l\'indirizzo email usato per registrarti e clicca su Email Password. Le Istruzioni su come impostare la nuova new password ti saranno inviate all\'indirizzo registrato.',
+    26 => 'Inserisci <em>almeno</em> il tuo nome utente <em>o</em> l\'indirizzo e-mail usato per registrarti e fai clic su E-mail Password. Le Istruzioni su come impostare la nuova new password ti saranno inviate all\'indirizzo registrato.',
     27 => 'Registrati Ora!',
-    28 => 'Email Password',
+    28 => 'Invia Password via E-mail',
     29 => 'uscito da',
     30 => 'entrato in',
     31 => 'La funzione da te selezionata richiede la tua autenticazione',
@@ -254,109 +264,104 @@
     37 => 'Applicato ai tuoi commenti',
     38 => 'Informazioni Aggiuntive! Tutti possono leggere questo',
     39 => 'La tua chiave pubblica PGP key da condividere',
-    40 => 'No Icone Argomenti',
-    41 => 'Modera',
+    40 => 'Nascondi Icone Argomenti',
+    41 => 'Disponibile a Moderare',
     42 => 'Formato Data',
-    43 => 'Articoli massimi',
-    44 => 'No boxes',
+    43 => 'Numero Massimo di Articoli',
+    44 => 'Nascondi box',
     45 => 'Mostra preferenze per',
     46 => 'Escludi Oggetti per',
     47 => 'Nuovo box di Configurazione per',
     48 => 'Articoli',
-    49 => 'No icone in articoli',
+    49 => 'Nascondi icone in articoli',
     50 => 'Deseleziona se non interessato',
     51 => 'Solo i nuovi articoli',
     52 => 'Per definizione &egrave;',
     53 => 'Ricevi gli articoli giornalieri ogni notte',
     54 => 'Seleziona l\'opzione per gli articoli e gli autori che non vuoi vedere.',
-    55 => 'Se lasci questo non selezionato, significa che vuoi lasciare la selezione di definizione. Se inizi a selezionare le opzioni ricordati di settare tutti quelli desiderati in quanto la configurazione di definizione verr&agrave; ignorata. Le selezioni di definizione sono visualizzate in grassetto.',
+    55 => 'Se lasci tutto non selezionato, significa che vuoi lasciare la selezione di default dei box. Se inizi a selezionare i box, ricordati di impostare tutti quelli desiderati in quanto la configurazione di default verr&agrave; ignorata. Quelli di default sono visualizzati in grassetto.',
     56 => 'Autori',
-    57 => 'Modo Visualizzazione',
+    57 => 'Modalit&agrave; Visualizzazione',
     58 => 'Ordinamento',
     59 => 'Limiti per i commenti',
     60 => 'Come preferisci siano visualizzati i tuoi commenti?',
-    61 => 'Nuovi o vecchi prima?',
+    61 => 'Prima i pi&ugrave; recenti o i meno recenti?',
     62 => 'Per definizione &egrave; 100',
     63 => "La tua password &egrave; stata inviata e dovrebbe arrivarti a momenti. Prego segui le istruzioni del messaggio e grazie per la tua partecipazione a {$_CONF['site_name']}",
     64 => 'Preferenze Commenti per',
     65 => 'Prova a entrare di nuovo',
-    66 => "Devi aver digitato male le tue credenziali di accesso.  Prego riprova di nuovo sotto. Sei un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nuovo utente</a>?",
+    66 => "Devi aver digitato male le tue credenziali di accesso. Prego riprova di nuovo sotto. Sei un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nuovo utente</a>?",
     67 => 'Membro dal',
     68 => 'Ricordami per',
-    69 => 'Per quanto tempo vuoi essere ricordato dopo l\'entrata al sito?',
+    69 => 'Per quanto tempo vuoi essere ricordato dopo l\'ingresso nel sito?',
     70 => "Personalizza lo stile e il contenuto per {$_CONF['site_name']}",
-    71 => "Una delle funzionalit&agrave; di {$_CONF['site_name']} &egrave; che puoi personalizzare il contenuto che vuoi visualizzare e lo stile con cui visualizzarlo.  Per utilizzare questa funzione devi prima <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrarti</a> in {$_CONF['site_name']}.  Sei gi&agrave; un membro?  Allora usa il modulo di accesso che trovi alla tua sinistra per entrare!",
+    71 => "Una delle funzionalit&agrave; di {$_CONF['site_name']} &egrave; che puoi personalizzare il contenuto che vuoi visualizzare e lo stile con cui visualizzarlo.  Per utilizzare questa funzione devi prima <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrarti</a> in {$_CONF['site_name']}. Sei gi&agrave; un membro? Allora usa il form di accesso che trovi alla tua sinistra per entrare!",
     72 => 'Tema',
     73 => 'Lingua',
     74 => 'Cambia lo stile di visualizzazione come preferisci!',
-    75 => 'Argomento da inviare via mail per',
-    76 => 'Se selezioni un argomento dalla lista sottostante riceverai via mail ogni nuovo articolo associato all\'argomento alla fine della giornata.  Seleziona solo gli argomenti che ti interessano!',
+    75 => 'Argomenti da inviare via e-mail per',
+    76 => 'Se selezioni almeno un argomento dalla lista sottostante riceverai via e-mail ogni nuovo articolo associato all\'argomento alla fine della giornata. Seleziona solo gli argomenti che ti interessano!',
     77 => 'Foto',
     78 => 'Aggiungi una tua foto!',
-    79 => 'Seleziona qu&igrave; per cancellare questa immagine',
+    79 => 'Seleziona qu&igrave; per eliminare questa immagine',
     80 => 'Entra',
-    81 => 'Invia E-Mail',
+    81 => 'Invia E-mail',
     82 => 'Ultimi 10 articoli dagli utenti',
     83 => 'Statistiche di inserimento per utente',
     84 => 'Numero totale di articoli:',
     85 => 'Numero totale di commenti:',
     86 => 'Trova tutti gli inserimenti di',
-    87 => 'Tuo Nome di login',
-    88 => "Qualcuno (probabilmente tu) ha richiesto una nuova password per il tuo account \"%s\" su {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSe vuoi veramente eseguire questa azione, prego clicca sul link seguente:\n\n",
+    87 => 'Il tuo nome utente',
+    88 => "Qualcuno (probabilmente tu) ha richiesto una nuova password per il tuo account \"%s\" su {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSe vuoi veramente eseguire questa azione, prego fai clic sul link seguente:\n\n",
     89 => "Se non vuoi eseguire questa operazione, semplicemente ignora questo messaggio e la richiesta sar&agrave; scartata (la tua password non sar&agrave; modificata).\n\n",
-    90 => 'Puoi inserire una nuova password per il tuo account sotto. Prego nota che la tua vecchia password &egrave; ancora valida fino a che non invii questo modulo.',
+    90 => 'Puoi inserire una nuova password per il tuo account sotto. Prego nota che la tua vecchia password &egrave; ancora valida fino a che non invii questo form.',
     91 => 'Imposta Nuova Password',
     92 => 'Inserisci Nuova Password',
     93 => 'La tua ultima richiesta di una nuova password &egrave; stata eseguita %d secondi f&agrave;. Questo sito richiede almeno %d secondi tra una richiesta e l\'altra.',
     94 => 'Elimina Account "%s"',
-    95 => 'Clicca sul bottone "elimina account" qu&igrave;sotto per rimuovere il tuo account dal nostro database. Prego nota che qualsiasi articolo e commento da te inserito con questo account <strong>non</strong> sar&agrave; cancellato ma visualizzato come inviato da un "Anonimo".',
+    95 => 'Fai clic sul bottone "elimina account" qu&igrave;sotto per eliminare il tuo account dal nostro database. Prego nota che qualsiasi articolo e commento da te inserito con questo account <strong>non</strong> sar&agrave; eliminato ma visualizzato come inviato da un "Anonimo".',
     96 => 'Elimina account',
     97 => 'Conferma Eliminazione Account',
-    98 => 'Sei proprio sicuro di voler cancellare il tuo account? Facendo questo, non sarai pi&ugrave; in grado di entrare ancora in questo sito (fintantoch&egrave; non crei un nuovo account). Se sei sicuro, clicca "Elimina account" di nuovo nel modulo qu&igrave; sotto.',
+    98 => 'Sei proprio sicuro di voler eliminare il tuo account? Cos&igrave; facendo, non sarai pi&ugrave; in grado di entrare ancora in questo sito (fintantoch&egrave; non crei un nuovo account). Se sei sicuro, fai clic su "Elimina account" di nuovo nel form qu&igrave; sotto.',
     99 => 'Opzioni della Privacy per',
-    100 => 'Email dall\'Amministratore',
-    101 => 'Permetti email dagli Amministratori del Sito',
-    102 => 'Email dagli Utenti',
-    103 => 'Permetti email da altri Utenti',
+    100 => 'E-mail dall\'Amministratore',
+    101 => 'Permetti invio e-mail dagli Amministratori del Sito',
+    102 => 'E-mail dagli Utenti',
+    103 => 'Permetti invio e-mail da altri Utenti',
     104 => 'Visualizza in Online Status',
     105 => 'Mostrami nel blocco Who\'s Online',
-    106 => 'Location',
-    107 => 'Shown in your public profile'
+    106 => 'Localit&agrave;',
+    107 => 'Mostra nel tuo profilo pubblico',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
 # index.php
 
 $LANG05 = array(
-    1 => 'Nessuna News da visualizzare',
-    2 => '<br>Non ci sono nuovi articoli da visualizzare.  Questo perch&egrave; o non ci sono nuovi articoli per questo argomento o le tue preferenze utente sono troppo restrittive ',
+    1 => 'Non ci sono News da visualizzare',
+    2 => '<br>Non ci sono nuovi articoli da visualizzare. Questo perch&egrave; o non ci sono nuovi articoli relativi a questo argomento o le tue preferenze utente sono troppo restrittive ',
     3 => 'per l\'argomento <b>%s</b>',
     4 => 'Articolo del giorno',
-    5 => 'Prossimo',
+    5 => 'Successivo',
     6 => 'Precedente',
-    7 => 'First',
-    8 => 'Last'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Risorse Web',
-    2 => 'Non ci sono risorse da visualizzare.',
-    3 => 'Aggiungi un Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Voto Salvato',
-    2 => 'Il tuo voto &egrave; stato salvato nel sondaggio',
-    3 => 'Voto',
-    4 => 'Sondaggi nel sistema',
-    5 => 'Voti',
-    6 => 'Visualizza gli altri sondaggi'
+    7 => 'Primo',
+    8 => 'Ultimo'
 );
 
 ###############################################################################
@@ -365,7 +370,7 @@
 $LANG08 = array(
     1 => 'C\'&egrave; stato un errore nell\'invio del tuo messaggio. Prego riprova un\'altra volta.',
     2 => 'Messaggio inviato correttamente.',
-    3 => 'Prego assicurati di usare un indirizzo email valido nel campo Rispondi a:.',
+    3 => 'Prego assicurati di usare un indirizzo e-mail valido nel campo Rispondi a:.',
     4 => 'Prego compila i campi Tuo Nome, Rispondi a:,Soggetto e Messaggio',
     5 => 'Errore: Nessun Utente.',
     6 => 'C\'&egrave; stato un errore.',
@@ -381,23 +386,23 @@
     16 => 'Invia Messaggio',
     17 => 'Spedisci l\'Articolo a un amico',
     18 => 'A Nome',
-    19 => 'A Indirizzo Email',
+    19 => 'A Indirizzo E-mail',
     20 => 'Da Nome',
-    21 => 'Da Indirizzo Email',
+    21 => 'Da Indirizzo E-mail',
     22 => 'Tutti i campi sono richiesti',
-    23 => "Questa e-mail ti &egrave; stata inviata da %s a %s perch&egrave; pensa possa interessarti questo articolo proveniente da {$_CONF['site_url']}.  Questa non &egrave; SPAM e il tuo indirizzo e-mail utilizzato in questa operazione non verr&agrave; salvato nella lista per un successivo uso.",
+    23 => "Questa e-mail ti &egrave; stata inviata da %s a %s perch&egrave; pensa possa interessarti questo articolo proveniente da {$_CONF['site_url']}.  Questa non &egrave; SPAM e il tuo indirizzo e-mail utilizzato in questa operazione non verr&agrave; registrato nella lista per un successivo uso.",
     24 => 'Commento su questo articolo a',
-    25 => 'Devi entrare come utente per questa funzione.  Accreditandoti come utente ci aiuti a prevenire eventuali hackeraggi del sistema',
-    26 => 'Questo modulo ti permette di inviare una e-mail all\'utente selezionato.  Tutti i campi sono richiesti.',
+    25 => 'Devi essere un utente registrato per accedere a questa funzione. Identificandoti come utente ci aiuti a prevenire eventuali abusi sul sistema',
+    26 => 'Questo form ti permette di inviare una e-mail all\'utente selezionato.  Tutti i campi sono richiesti.',
     27 => 'Messaggio breve',
     28 => '%s scrive: ',
-    29 => "Questo &egrave; il daily digest da {$_CONF['site_name']} per ",
-    30 => ' Daily Newsletter per ',
+    29 => "Questo  la newsletter quotidiana per {$_CONF['site_name']} del ",
+    30 => ' - Newsletter quotidiana del ',
     31 => 'Titolo',
     32 => 'Data',
     33 => 'Leggi l\'articolo completo su',
     34 => 'Fine del messaggio',
-    35 => 'Spiacenti, l\'Utente preferisce non ricevere nessuna email.'
+    35 => 'Spiacenti, l\'Utente preferisce non ricevere e-mail.'
 );
 
 ###############################################################################
@@ -422,7 +427,7 @@
     16 => 'Titolo',
     17 => 'Data',
     18 => 'Autore',
-    19 => "Ricerca l'intero {$_CONF['site_name']} database degli articoli correnti e passati e nuove storie",
+    19 => "Ricerca nell'intero database di articoli correnti e passati di {$_CONF['site_name']}",
     20 => 'Data',
     21 => 'a',
     22 => '(Formato Data YYYY-MM-DD)',
@@ -441,8 +446,8 @@
     35 => 'Tutti i giorni',
     36 => 'Nessun Evento trovato per la tua ricerca',
     37 => 'Risultato Eventi',
-    38 => 'Risultato Links',
-    39 => 'Links',
+    38 => 'Risultato Link',
+    39 => 'Link',
     40 => 'Eventi',
     41 => 'La tua stringa di ricerca deve avere almeno 3 caratteri.',
     42 => 'Prego usa una data formattata come YYYY-MM-DD (anno-mese-giorno).',
@@ -460,7 +465,11 @@
     54 => 'Risultato Commenti',
     55 => 'la stringa',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -484,13 +493,20 @@
     15 => 'Domanda Sondaggio',
     16 => 'Voti',
     17 => 'Sembra che nessuno abbia ancora inviato un sondaggio in questo sito nessuno abbia ancora votato.',
-    18 => 'Top 10 Links',
-    19 => 'Links',
+    18 => 'Top 10 Link',
+    19 => 'Link',
     20 => 'Visite',
-    21 => 'Sembra che nessuno abbia ancora inviato un link in questo sito o nessuno ha cliccato sui link disponibili.',
+    21 => 'Sembra che nessuno abbia ancora inviato un link su questo sito o nessuno ha fatto clic sui link disponibili.',
     22 => 'Top 10 Articoli Inseriti',
-    23 => 'Emails',
-    24 => 'Sembra che nessuno abbia ancora inviato un articolo in questo sito'
+    23 => 'E-mail',
+    24 => 'Sembra che nessuno abbia ancora inviato un articolo su questo sito',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -499,9 +515,9 @@
 $LANG11 = array(
     1 => 'Relativo a..',
     2 => 'Invia l\'Articolo a un amico',
-    3 => 'Articolo in Formato Stampa',
+    3 => 'Articolo in Formato Stampabile',
     4 => 'Opzioni',
-    5 => 'PDF Story Format'
+    5 => 'Articolo in Formato PDF'
 );
 
 ###############################################################################
@@ -520,7 +536,7 @@
     10 => 'Titolo',
     11 => 'Link',
     12 => 'Data Inizio',
-    13 => 'Data Termine',
+    13 => 'Data Fine',
     14 => 'Localit&agrave;',
     15 => 'Descrizione',
     16 => 'Se altro, prego specifica',
@@ -530,9 +546,9 @@
     20 => 'Errore: Categoria Mancante',
     21 => 'Quando selezionato "Altro" fornisci anche il nome della categoria',
     22 => 'Errore: Campi Mancanti',
-    23 => 'Prego compila tutti i campi del modulo.  Tutti i campi sono richiesti.',
-    24 => 'Inserimento Salvato',
-    25 => 'Il tuo %s inserimento &egrave; stato salvato correttamente.',
+    23 => 'Prego compila tutti i campi del form. Tutti i campi sono richiesti.',
+    24 => 'Inserimento Registrato',
+    25 => 'Il tuo %s inserimento &egrave; stato registrato correttamente.',
     26 => 'Limite Velocit&agrave;',
     27 => 'Nome Utente',
     28 => 'Argomento',
@@ -542,9 +558,9 @@
     32 => 'Anteprima',
     33 => 'Anteprima Articolo',
     34 => 'Esci',
-    35 => 'I tags HTML non sono consentiti',
-    36 => 'Modo Inserimento',
-    37 => "L'Inserimento di un evento in  {$_CONF['site_name']} metter&agrave; il tuo evento nel calendario principale e permetter&agrave; agli utenti di aggiungerlo al loro calendario personale. Questa funzione <b>NON</b> &egrave; stata realizzata per inserire compleanni o anniversari.<br><br>Una volta inserito sar&agrave; inviato al nostro amministratore e se approvato il tuo evento apparir&agrave; sul calendario principale.",
+    35 => 'I tag HTML non sono consentiti',
+    36 => 'Modalit&agrave; Inserimento',
+    37 => "L'Inserimento di un evento in {$_CONF['site_name']} metter&agrave; il tuo evento nel calendario principale e permetter&agrave; agli utenti di aggiungerlo al loro calendario personale. Questa funzione <b>NON</b> &egrave; stata realizzata per inserire compleanni o anniversari.<br><br>Una volta inserito sar&agrave; inviato al nostro amministratore e se approvato il tuo evento apparir&agrave; sul calendario principale.",
     38 => 'Aggiungi Evento a',
     39 => 'Calendario Principale',
     40 => 'Calendario Personale',
@@ -559,7 +575,7 @@
     49 => 'Tipo Evento',
     50 => 'Modifica Tipi di Eventi',
     51 => 'Localit&agrave;',
-    52 => 'Cancella',
+    52 => 'Elimina',
     53 => 'Crea un Account'
 );
 
@@ -587,7 +603,7 @@
     1 => 'Permessi di amministrazione insufficienti',
     2 => 'Non hai i permessi necessari per modificare questo blocco.',
     3 => 'Editor Blocchi',
-    4 => 'There was a problem reading this feed (see error.log for details).',
+    4 => 'Si &egrave; verificato un problema nella lettura di questo feed (vedi error.log per dettagli).',
     5 => 'Titolo Blocco',
     6 => 'Argomento',
     7 => 'Tutti',
@@ -601,22 +617,22 @@
     15 => 'Ultimo Agg. RDF',
     16 => 'Opzioni Blocco Normale',
     17 => 'Contenuto Blocco',
-    18 => 'Please fill in the Block Title, Security Level and Content fields',
+    18 => 'Prego completa i campi Titolo Blocco, Livello Sicurezza e Contenuto',
     19 => 'Manager Blocchi',
     20 => 'Titolo Blocco',
     21 => 'SecLev Blocco',
     22 => 'Tipo Blocco',
     23 => 'Ordine Blocco',
     24 => 'Argomento Blocco',
-    25 => 'Per modificare o cancellare un blocco, clicca sul blocco selezionato.  <br>Per creare un nuovo blocco clicca su [ Nuovo Blocco ] sopra.',
-    26 => 'Layout Blocco',
+    25 => 'Per modificare o eliminare un blocco, fai clic sul blocco selezionato. <br>Per creare un nuovo blocco fai clic su [ Nuovo Blocco ] sopra.',
+    26 => 'Impaginazione Blocco',
     27 => 'Blocco PHP',
     28 => 'Opzioni Blocco PHP',
     29 => 'Funzione Blocco',
-    30 => 'Se desideri avere un blocco che usi il codice PHP, inserisci il nome della funzione sotto.  Il nome della tua funzione deve iniziare con il prefisso "phpblock_" (es. phpblock_getweather).  Se non ha questo prefisso, la tua funzione NON verr&agrave; richiamata.  Questo per evitare che altre persone possano hackerare la vostra installazione di Geeklog inserendo funzioni di chiamate a codice arbitrario che possa danneggiare il vostro sistema.  Assicuratevi di inserire le parentesi vuote "()" dopo il vostro nome della funzione.  <br><br>Per ultimo, &egrave; raccomandabile mettere tutto il codice del Blocco in /path/to/geeklog/system/lib-custom.php.  <br><b>Questo permette di salvare il tuo codice nel caso di aggiornamenti di Geeklog.</b>',
+    30 => 'Se desideri avere un blocco che usi il codice PHP, inserisci il nome della funzione sotto.  Il nome della tua funzione deve iniziare con il prefisso "phpblock_" (es. phpblock_getweather).  Se non ha questo prefisso, la tua funzione NON verr&agrave; richiamata.  Questo per evitare che altre persone possano hackerare la vostra installazione di Geeklog inserendo funzioni di chiamate a codice arbitrario che possa danneggiare il vostro sistema.  Assicuratevi di inserire le parentesi vuote "()" dopo il vostro nome della funzione.  <br><br>Per ultimo, &egrave; raccomandabile mettere tutto il codice del Blocco in /path/to/geeklog/system/lib-custom.php.  <br><b>Questo permette di registrare il tuo codice nel caso di aggiornamenti di Geeklog.</b>',
     31 => 'Errore nel Blocco PHP.  La Funzione, %s, non esiste.',
     32 => 'Errore Campo(i) Mancante(i)',
-    33 => 'Devi inserire il URL per il file .rdf per il blocco portale',
+    33 => 'Devi inserire la URL del file .rdf per il blocco portale',
     34 => 'Devi inserire il titolo e la funzione per il blocco PHP',
     35 => 'Devi inserire il titolo e il contenuto del blocco Normale',
     36 => 'Devi inserire il contenuto per il layout blocco',
@@ -637,13 +653,18 @@
     51 => 'includi http://',
     52 => 'Se lasci in bianco questo spazio non verr&agrave; visualizzata la icona di Help per questo blocco',
     53 => 'Abilitato',
-    54 => 'Salva',
-    55 => 'cancella',
+    54 => 'Registra',
+    55 => 'Annulla',
     56 => 'Elimina',
-    57 => 'Move Block Down',
-    58 => 'Move Block Up',
-    59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    57 => 'Sposta Blocco In Basso',
+    58 => 'Sposta Blocco in Alto',
+    59 => 'Sposta blocco sul lato destro',
+    60 => 'Sposta blocco sul lato sinistro',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -661,7 +682,7 @@
     9 => '(includi http://)',
     10 => 'Devi fornire la data/orario, descrizione e localit&agrave; evento!',
     11 => 'Lista Eventi',
-    12 => 'Per modificare o cancellare un evento, clicca sull\'evento selezionato sotto.  <br>Per creare un nuovo evento clicca su [ Nuovo Evento ] sopra. Clicca su [C] per creare una copia di un evento esistente.',
+    12 => 'Per modificare o eliminare un evento, fai clic sull\'evento selezionato sotto.  <br>Per creare un nuovo evento fai clic su [ Nuovo Evento ] sopra. Fai clic su [C] per creare una copia di un evento esistente.',
     13 => 'Titolo Evento',
     14 => 'Data Inizio',
     15 => 'Data Fine',
@@ -669,41 +690,12 @@
     17 => "Stai tentando di accedere a un evento del quale non hai i permessi di modifica.  Questo tentativo sar&agrave; registrato. Prego <a href=\"{$_CONF['site_admin_url']}/event.php\">ritorna alla schermata di amministrazione</a>.",
     18 => 'Nuovo Evento',
     19 => 'Home Amministrazione',
-    20 => 'Salva',
-    21 => 'cancella',
+    20 => 'Registra',
+    21 => 'Annulla',
     22 => 'Elimina',
-    23 => 'Bad start date.',
-    24 => 'Bad end date.',
-    25 => 'End date is before start date.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor Link',
-    2 => '',
-    3 => 'Titolo Link',
-    4 => 'URL Link',
-    5 => 'Categoria',
-    6 => '(includi http://)',
-    7 => 'Altro',
-    8 => 'Link Hits',
-    9 => 'Descrizione Link',
-    10 => 'Devi fornire un Titolo Link, URL e Descrizione.',
-    11 => 'Amministrazione Link',
-    12 => 'Per modificare o cancellare un link, clicca sul link sottostante.  <br>Per creare un nuovo link clicca su [ Nuovo Link ] sopra.',
-    13 => 'Titolo Link',
-    14 => 'Categoria Link',
-    15 => 'Link URL',
-    16 => 'Accesso Negato',
-    17 => "Stai tentando di accedere a un link del quale non hai i permessi di modifica.  Questo tentativo sar&agrave; registrato. Prego <a href=\"{$_CONF['site_admin_url']}/link.php\">ritorna alla schermata di amministrazione</a>.",
-    18 => 'Nuovo Link',
-    19 => 'Home Amministrazione',
-    20 => 'Se altro, specifica',
-    21 => 'Salva',
-    22 => 'Cancella',
-    23 => 'Elimina'
+    23 => 'Data inizio errata.',
+    24 => 'Data fine errata.',
+    25 => 'Data fine prima di data inizio.'
 );
 
 ###############################################################################
@@ -712,14 +704,14 @@
 $LANG24 = array(
     1 => 'Articolo Precedente',
     2 => 'Prossimo Articolo',
-    3 => 'Modo',
+    3 => 'Modalit&agrave;',
     4 => 'Modo Ins.',
     5 => 'Editor Articoli',
     6 => 'Non ci sono articoli nel sistema',
     7 => 'Autore',
-    8 => 'Salva',
+    8 => 'Registra',
     9 => 'Anteprima',
-    10 => 'Cancella',
+    10 => 'Annulla',
     11 => 'Elimina',
     12 => 'ID',
     13 => 'Titolo',
@@ -729,16 +721,16 @@
     17 => 'Corpo',
     18 => 'Visite',
     19 => 'Commenti',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Lista Articoli',
-    23 => 'Per modificare o cancellare un articolo, clicca sul numero dell\'articolo. <br>Per visualizzare un articolo, clicca sul titolo dell\'articolo desiderato. <br>Per creare un nuovo articolo clicca su [ Nuovo Articolo ] sopra.',
-    24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    23 => 'Per modificare o eliminare un articolo, fai clic sul numero dell\'articolo. <br>Per visualizzare un articolo, fai clic sul titolo dell\'articolo desiderato. <br>Per creare un nuovo articolo fai clic su [ Nuovo Articolo ] sopra.',
+    24 => 'L\'ID da te scelto per questo articolo &egrave; gi&agrave; in uso. Prego scegli un altro ID.',
+    25 => 'Error when saving story',
     26 => 'Anteprima Articolo',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Errore nel caricamento File',
     31 => 'Prego compila i campi di testo Titolo e Intro',
     32 => 'Evidenz.',
@@ -748,62 +740,53 @@
     36 => 'No',
     37 => 'Altro da',
     38 => 'Altro su',
-    39 => 'Emails',
+    39 => 'E-mail',
     40 => 'Accesso negato',
-    41 => "Stai tentando di accedere a un articolo dove non hai i permessi di accesso.  Questo tentativo sar&agrave; tracciato.  You may view the article in read-only below. Prego <a href=\"{$_CONF['site_admin_url']}/story.php\">ritorna alla schermata amministrazione articoli</a> una volta terminato.",
-    42 => "Stai tentando di accedere a un articolo dove non hai i permessi di accesso.  Questo tentativo sar&agrave; tracciato.  Prego <a href=\"{$_CONF['site_admin_url']}/story.php\">ritorna alla schermata amministrazione articoli</a>.",
+    41 => "Stai tentando di accedere a un articolo dove non hai i permessi di accesso. Questo tentativo sar&agrave; tracciato. Puoi visualizzare l\articolo in sola lettura sotto. Prego <a href=\"{$_CONF['site_admin_url']}/story.php\">ritorna alla schermata amministrazione articoli</a> una volta terminato.",
+    42 => "Stai tentando di accedere a un articolo dove non hai i permessi di accesso. Questo tentativo sar&agrave; tracciato. Prego <a href=\"{$_CONF['site_admin_url']}/story.php\">ritorna alla schermata amministrazione articoli</a>.",
     43 => 'Nuovo Articolo',
     44 => 'Home Amministrazione',
     45 => 'Accesso',
     46 => '<b>NOTA:</b> se modifichi questa data postadatandola, questo articolo non sar&agrave; pubblicato fino a suddetta data.  Questo significa inoltre che l\'articolo non sar&agrave; incluso nel tuo <em>RDF headline</em> e verr&agrave; ignorato dalla ricerca e dalle statistiche.',
     47 => 'Immagini',
-    48 => 'immagine',
-    49 => 'destra',
-    50 => 'sinistra',
-    51 => 'Per aggiungere una delle immagini in allegato a questo articolo devi inserire del codice di testo speciale.  Questo codice speciale &egrave; [immagineX], [immagineX_destra] o [immagineX_sinistra] dove X &egrave; il numero della immagine allegata.  <br>NOTA: Devi utilizzare le immagini allegate.  Altrimenti non sarai in grado di salvare il tuo articolo.<BR><P><B>ANTEPRIMA</B>: L\'Anteprima di un articolo con immagini allegate risulta pi&ugrave; agevole da realizzare salvandolo come un draft AL POSTO di cliccare sul bottone anteprima.  Usare il bottone anteprima solo con immagini che non sono allegate.',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => 'Per aggiungere una delle immagini in allegato a questo articolo devi inserire del codice di testo speciale. Questo codice speciale &egrave; [imageX], [imageX_right] o [imageX_left] dove X &egrave; il numero della immagine allegata.  <br>NOTA: Devi utilizzare le immagini allegate. Altrimenti non sarai in grado di registrare il tuo articolo.<br><p><b>ANTEPRIMA</b>: L\'Anteprima di un articolo con immagini allegate risulta pi&ugrave; agevole da realizzare registrandolo come bozza AL POSTO di fare clic sul bottone anteprima. Usare il bottone anteprima solo con immagini che non sono allegate.',
     52 => 'Elimina',
-    53 => 'non &egrave; utilizzata.  Devi includere questa immagine nell\'intro o nel corpo per poter salvare le tue modifiche',
+    53 => 'non &egrave; utilizzata.  Devi includere questa immagine nell\'intro o nel corpo per poter registrare le tue modifiche',
     54 => 'Immagini in Allegato Non Usate',
-    55 => 'Si sono verificati i seguenti errori durante il salvataggio del tuo articolo.  Prego correggi gli errori prima di salvarlo',
+    55 => 'Si sono verificati i seguenti errori durante la registrazione del tuo articolo. Prego correggi gli errori prima di registrarlo',
     56 => 'Mostra Icona Argomento',
     57 => 'Mostra Immagine non ridimensionata',
-    58 => 'Story Management',
-    59 => 'Option',
-    60 => 'Enabled',
-    61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modo',
-    2 => 'Prego inserisci una <em>domanda</em> e almeno una <em>risposta</em>.',
-    3 => 'Sondaggio Creato il:',
-    4 => 'Sondaggio %s salvato',
-    5 => 'Modifica Sondaggio',
-    6 => 'ID Sondaggio',
-    7 => '(non utilizzare spazi)',
-    8 => 'Mostra in Homepage',
-    9 => 'Domanda',
-    10 => 'Risposte / Voti',
-    11 => 'Si sono verificati dei problemi durante l\'acquisizione dei dati per la risposta a riguardo del sondaggio %s',
-    12 => 'Si sono verificati dei problemi durante l\'acquisizione dei dati per la domanda a riguardo del sondaggio %s',
-    13 => 'Crea Sondaggio',
-    14 => 'Salva',
-    15 => 'Cancella',
-    16 => 'Elimina',
-    17 => 'Prego inserisci un ID per il sondaggio',
-    18 => 'Lista Sondaggi',
-    19 => 'Per modificare o cancellare un sondaggio, clicca sul sondaggio desiderato.  <br>Per creare un nuovo sondaggio clicca su [ Nuovo Sondaggio ] sopra.',
-    20 => 'Voti',
-    21 => 'Accesso Negato',
-    22 => "Stai tentando di accedere a un sondaggio del quale non hai i permessi di modifica.  Questo tentativo sar&agrave; registrato. Prego <a href=\"{$_CONF['site_admin_url']}/poll.php\">ritorna alla schermata amministrazione sondaggi</a>.",
-    23 => 'Nuovo Sondaggio',
-    24 => 'Home Amministrazione',
-    25 => 'Si',
-    26 => 'No'
+    58 => 'Gestione Articoli',
+    59 => 'Opzione',
+    60 => 'Attivata',
+    61 => 'Archivazione Automatica',
+    62 => 'Eliminazione Automatica',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -815,10 +798,10 @@
     3 => 'Nome Argomento',
     4 => 'Immagine Argomento',
     5 => '(non utilizzare spazi)',
-    6 => 'Cancellando un argomento cancellerai anche gli articoli e i blocchi associati allo stesso',
+    6 => 'Eliminando un argomento eliminerai anche gli articoli e i blocchi ad esso associati',
     7 => 'Prego compila i campi ID Argomento e Nome Argomento',
     8 => 'Manager Argomenti',
-    9 => 'Per modificare o cancellare un argomento, clicca sull\'argomento selezionato.  <br>Per creare un nuovo argomento clicca sul [ Nuovo Argomento ] in alto. <br>Dovresti trovare il tuoi permessi di accesso per ogni argomento elencati fra parentesi. L\'Asterisco (*) indica l\'argomento di default.',
+    9 => 'Per modificare o eliminare un argomento, fai clic sull\'argomento selezionato. <br>Per creare un nuovo argomento fai clic sul [ Nuovo Argomento ] in alto. <br>Dovresti trovare il tuoi permessi di accesso per ogni argomento elencati fra parentesi. L\'Asterisco (*) indica l\'argomento di default.',
     10 => 'Ordinamento',
     11 => 'Articoli/Pagina',
     12 => 'Accesso negato',
@@ -828,14 +811,17 @@
     16 => 'per definizione &egrave;',
     17 => 'Nuovo Argomento',
     18 => 'Home Amministrazione',
-    19 => 'Salva',
-    20 => 'Cancella',
+    19 => 'Registra',
+    20 => 'Annulla',
     21 => 'Elimina',
     22 => 'Default',
     23 => 'fai di questo l\'argomento di default per gli inserimenti dei nuovi articoli',
     24 => '(*)',
-    25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    25 => 'Argomento di Archivio',
+    26 => 'rendi questo l\'argomento di default per gli articoli archiviati. Un solo argomento permesso.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -848,36 +834,47 @@
     4 => 'Nome Completo',
     5 => 'Password',
     6 => 'Livello di Sicurezza',
-    7 => 'Indirizzo E-Mail',
+    7 => 'Indirizzo E-mail',
     8 => 'Homepage',
     9 => '(non utilizzare spazi)',
-    10 => 'Prego compila i campi NomeUtente e Indirizzo E-Mail',
+    10 => 'Prego compila i campi Nome Utente e Indirizzo E-mail',
     11 => 'Manager Utenti',
-    12 => 'Per modificare o cancellare un utente, clicca su un utente qu&igrave; sotto.  <br>Per creare un nuovo utente clicca sul bottone [ Nuovo Utente ] in alto. <br>Per eseguire una ricerca semplice inserisci parti di nome utente,indirizzo e-mail o nome completo (es.*son* or *.edu) nel modulo sottostante.',
-    13 => 'SecLev',
+    12 => 'Per modificare o eliminare un utente, fai clic su un utente qu&igrave; sotto. <br>Per creare un nuovo utente fai clic sul bottone [ Nuovo Utente ] in alto. <br>Per eseguire una ricerca semplice inserisci parti di nome utente,indirizzo e-mail o nome completo (es.*son* or *.edu) nel form sottostante.',
+    13 => 'Liv. Sic.',
     14 => 'Data Reg.',
     15 => 'Nuovo Utente',
-    16 => 'Home Amministrazione',
-    17 => 'modificapw',
-    18 => 'Cancella',
+    16 => 'Home Ammin.',
+    17 => 'Modifica Pass',
+    18 => 'Annulla',
     19 => 'Elimina',
-    20 => 'Salva',
-    21 => 'Il Nome Utente che stai tentando di salvare &egrave; gi&agrave; presente nel database.',
+    20 => 'Registra',
+    21 => 'Il Nome Utente che stai tentando di registrare &egrave; gi&agrave; presente nel database.',
     22 => 'Errore',
-    23 => 'Aggiungi Batch ',
+    23 => 'Aggiungi (Batch)',
     24 => 'Importazione Batch di Utenti',
-    25 => 'Puoi importare un batch di utenti in Geeklog.  Il file da importare deve essere delimitato da tab di spaziatura e deve avere i campi nel seguente ordine: nome completo, nome utente, indirizzo e-mail.  a ogni utente che importi sar&agrave; inviata una mail con una password casuale.  Devi avere un utente per ogni riga del file.  La non corretta esecuzione delle seguenti istruzioni potrebbe causare problemi risolvibili solo con del lavoro manuale sul database, quindi fai molta attenzione alle tue operazioni!',
+    25 => 'Puoi importare un batch di utenti in Geeklog. Il file da importare deve essere delimitato da tab di spaziatura e deve avere i campi nel seguente ordine: nome completo, nome utente, indirizzo e-mail.  a ogni utente che importi sar&agrave; inviata una mail con una password casuale.  Devi avere un utente per ogni riga del file.  La non corretta esecuzione delle seguenti istruzioni potrebbe causare problemi risolvibili solo con del lavoro manuale sul database, quindi fai molta attenzione alle tue operazioni!',
     26 => 'Ricerca',
     27 => 'Risultati limite',
-    28 => 'Clicca qu&igrave; per cancellare questa immagine',
+    28 => 'Fai clic qu&igrave; per eliminare questa immagine',
     29 => 'Percorso',
     30 => 'Importa',
     31 => 'Nuovo Utente',
     32 => 'Processo Eseguito. Importato %d e incontrati %d problemi',
     33 => 'invia',
     34 => 'Errore: Devi specificare un file da caricare.',
-    35 => 'Ultimo Login',
-    36 => '(mai)'
+    35 => 'Ultimo Accesso',
+    36 => '(mai)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -885,7 +882,7 @@
 
 $LANG29 = array(
     1 => 'Approva',
-    2 => 'Cancella',
+    2 => 'Elimina',
     3 => 'Modifica',
     4 => 'Profilo',
     10 => 'Titolo',
@@ -896,8 +893,8 @@
     15 => 'Argomento',
     16 => 'Nome Utente',
     17 => 'Nome Completo',
-    18 => 'Email',
-    34 => 'Comandi a Controlli',
+    18 => 'E-mail',
+    34 => 'Console di Amministrazione',
     35 => 'Inserimento Articolo',
     36 => 'Inserimento Link',
     37 => 'Inserimento Evento',
@@ -917,7 +914,7 @@
     5 => 'Gioved&igrave;',
     6 => 'Venerd&igrave;',
     7 => 'Sabato',
-    8 => 'Tutti gli eventi',
+    8 => 'Aggiungi evento',
     9 => 'Eventi %s',
     10 => 'Eventi per',
     11 => 'Calendario Principale',
@@ -939,7 +936,7 @@
     27 => 'Settimana',
     28 => 'Calendario personale per',
     29 => 'Calendario pubblico',
-    30 => 'Cancella evento',
+    30 => 'Elimina evento',
     31 => 'Inserisci',
     32 => 'Evento',
     33 => 'Data',
@@ -976,32 +973,32 @@
     17 => "<a href={$_CONF['site_admin_url']}/mail.php>Invia un'altro messaggio</a>",
     18 => 'A',
     19 => 'NOTA: se vuoi inviare un messaggio a tutti i membri del sito, seleziona il gruppo Logged-in Users dalla lista.',
-    20 => "Messaggi inviati con successo <successcount> e messaggi non inviati <failcount>.  Se lo necessiti, i dettagli di ogni messaggio sono elencati sotto.  Altrimenti puoi <a href=\"{$_CONF['site_admin_url']}/mail.php\">Inviare un'altro messaggio</a> o puoi <a href=\"{$_CONF['site_admin_url']}/moderation.php\">ritornare alla pagina amministrazione</a>.",
+    20 => "Messaggi inviati correttamente <successcount> e messaggi non inviati <failcount>. Se lo necessiti, i dettagli di ogni messaggio sono elencati sotto.  Altrimenti puoi <a href=\"{$_CONF['site_admin_url']}/mail.php\">Inviare un'altro messaggio</a> o puoi <a href=\"{$_CONF['site_admin_url']}/moderation.php\">ritornare alla pagina amministrazione</a>.",
     21 => 'Fallito',
-    22 => 'Eseguito con successo',
+    22 => 'Eseguito correttamente',
     23 => 'Nessun errore',
     24 => 'Nessuna esecuzione',
     25 => '-- Seleziona Gruppo --',
-    26 => 'Prego compila tutti i campi del modulo e seleziona un gruppo dal men&ugrave;  a tendina.'
+    26 => 'Prego compila tutti i campi del form e seleziona un gruppo dal men&ugrave;  a tendina.'
 );
 
 ###############################################################################
 # admin/plugins.php
 
 $LANG32 = array(
-    1 => 'L\'Installazione dei plug-in potrebbe rovinare la tua installazione di Geeklog e presumibilmente anche il tuo sistema.  E\' importante che tu installi solo i plugin scaricati da <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> in quanto questi plugin vengono regolarmente testati da noi su numerosi sistemi operativi.  E\' altres&igrave; importante che tu capisca che il processo di installazione richiede alcune esecuzioni di comandi di sistema che potrebbero intaccare la sicurezza del sistema stesso (in particolare se utilizzi plugin di terze parti).  Preso per compreso l\'avvertimento, noi non garantiamo il successo della installazione e non siamo responsabili di eventuali danni causati dall\'installazione del plugin.  In poche parole, installa a tuo rischio!.  Per il modo, indirizzamento e come installare manualmente il plugin consulta gli how-to forniti con il pacchetto del plugin.',
+    1 => 'L\'Installazione di plug-in potrebbe provocare danni alla tua installazione di Geeklog ed eventualmente anche il tuo sistema. &Egrave; importante che tu installi solo i plug-in scaricati dalla <a href="http://www.geeklog.net" target="_blank">Homepage di Geeklog</a> in quanto questi plug-in vengono regolarmente testati da noi su numerosi sistemi operativi. E\' altres&igrave; importante che tu capisca che il processo di installazione richiede l\'esecuzione di alcuni comandi di sistema che potrebbero intaccare la sicurezza del sistema stesso (in particolare se utilizzi plug-in di terze parti). Anche con questo avvertenza che ti diamo, noi non garantiamo il successo della installazione e non siamo responsabili di eventuali danni causati dall\'installazione di plug-in. In altre parole, installa a tuo rischio!. Per gli amanti del rischio,  indicazioni su come installare manualmente un plug-in sono incluse in ogni pacchetto plug-in.',
     2 => 'Note di Installazione Plug-in',
-    3 => 'Modulo Installazione Plug-in',
+    3 => 'Form Installazione Plug-in',
     4 => 'Plug-in File',
     5 => 'Lista Plug-in',
     6 => 'Attenzione: Plug-in gi&agrave; installato!',
-    7 => 'Il plug-in che vuoi installare &egrave; gia installato nel sistema.  Cancella il plugin esistente prima di reinstallare la nuova versione',
-    8 => 'Controllo Compatibilit&agrave; Plugin Fallita',
+    7 => 'Il plug-in che vuoi installare &egrave; gia installato nel sistema. Elimina il plug-in esistente prima di reinstallare la nuova versione',
+    8 => 'Controllo Compatibilit&agrave; Plug-in Fallita',
     9 => 'Questo plug-in richiede una nuova versione di Geeklog. Puoi aggiornare la tua copia di <a href=http://www.geeklog.net>Geeklog</a> o prendere una nuova versione del plug-in.',
     10 => '<br><b>Al momento nessun plug-in risulta installato.</b><br><br>',
-    11 => 'Per modificare o cancellare un plug-in, clicca sul numero del plug-in dalla lista sottostante. <br>Per apprendere su come usare il plug-in, clicca sul nome del plug-in e sarai redirezionato direttamente al sito del plug-in. <br>Per installare o aggiornare un plug-in clicca su nuovo-plug-in sopra.',
-    12 => 'nessun nome di plugin fornito da plugineditor()',
-    13 => 'Editor Plugin',
+    11 => 'Per modificare o eliminare un plug-in, fai clic sul numero del plug-in dalla lista sottostante. <br>Per apprendere su come usare il plug-in, fai clic sul nome del plug-in e sarai redirezionato direttamente al sito del plug-in. <br>Per installare o aggiornare un plug-in fai clic su nuovo-plug-in sopra.',
+    12 => 'nessun nome di plug-in fornito da plugineditor()',
+    13 => 'Editor Plug-in',
     14 => 'Nuovo Plug-in',
     15 => 'Home Amministrazione',
     16 => 'Nome Plug-in',
@@ -1011,95 +1008,107 @@
     20 => 'Si',
     21 => 'No',
     22 => 'Installa',
-    23 => 'Salva',
-    24 => 'Cancella',
+    23 => 'Registra',
+    24 => 'Annulla',
     25 => 'Elimina',
     26 => 'Nome Plug-in',
     27 => 'Homepage Plug-in',
     28 => 'Versione Plug-in',
     29 => 'Versione Geeklog',
-    30 => 'Cancella Plug-in?',
-    31 => 'Sei sicuro di voler cancellare questo plug-in?  Facendo questo cancellerai anche tutti i file associati, dati e struttura che questo plug-in usa.  Se sei sicuro, clicca cancella nel modulo sottostante.',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'Code Version',
-    34 => 'Update'
+    30 => 'Elimina Plug-in?',
+    31 => 'Sei sicuro di voler eliminare questo plug-in? Cos&igrave; facendo eliminerai anche tutti i file associati, dati e struttura utilizzati da questo plug-in. Se sei sicuro, fai clic su elimina nel form sottostante.',
+    32 => '<p><b>Errore, formato tag AutoLink errato</b></p>',
+    33 => 'Versione Codice',
+    34 => 'Aggiorna',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
 # admin/syndication.php
 
 $LANG33 = array(
-    1 => 'create feed',
-    2 => 'save',
-    3 => 'delete',
-    4 => 'cancel',
+    1 => 'crea feed',
+    2 => 'registra',
+    3 => 'elimina',
+    4 => 'annulla',
     10 => 'Content Syndication',
-    11 => 'New Feed',
-    12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
-    14 => 'Title',
-    15 => 'Type',
-    16 => 'Filename',
-    17 => 'Format',
-    18 => 'last updated',
-    19 => 'Enabled',
-    20 => 'Yes',
+    11 => 'Nuovo Feed',
+    12 => 'Home Admin',
+    13 => 'Per modificare o eliminare un feed, fai clic sul titolo del feed sotto. Per creare un nuovo feed, fai clic su Nuovo Feed sopra.',
+    14 => 'Titolo',
+    15 => 'Tipo',
+    16 => 'Nome File',
+    17 => 'Formato',
+    18 => 'ultimo aggiornamento',
+    19 => 'Abilitato',
+    20 => 'Si',
     21 => 'No',
-    22 => '<i>(no feeds)</i>',
-    23 => 'all Stories',
-    24 => 'Feed Editor',
-    25 => 'Feed Title',
-    26 => 'Limit',
-    27 => 'Length of entries',
-    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
-    29 => 'Description',
-    30 => 'Last Update',
-    31 => 'Character Set',
-    32 => 'Language',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
-    36 => 'Select type of feed',
-    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
-    38 => 'Error: Missing Fields',
-    39 => 'Please fill in the Feed Title, Description, and Filename.',
-    40 => 'Please enter a  number of entries or number of hours.',
-    41 => 'Links',
-    42 => 'Events'
+    22 => '<i>(nessun feed)</i>',
+    23 => 'tutte gli Articoli',
+    24 => 'Editor Feed',
+    25 => 'Titolo Feed',
+    26 => 'Limita',
+    27 => 'Lunghezza elementi',
+    28 => '(0 = senza testo, 1 = testo completo, altro = limita a questo numero di caratteri.)',
+    29 => 'Descriztione',
+    30 => 'Ultimo Aggiornamento',
+    31 => 'Set Caratteri',
+    32 => 'Lingua',
+    33 => 'Contenuti',
+    34 => 'Elementi',
+    35 => 'Ore',
+    36 => 'Seleziona il tipo del feed',
+    37 => 'Hai almeno un plug-in installato che supporta la content syndication. Sotto devi selezionare se vuoi creare un feed Geeklog o un feed da uno dei plug-in.',
+    38 => 'Errore: Campi Mancanti',
+    39 => 'Prego inserire Titolo Feed, Descrizione e Nome File.',
+    40 => 'Prego inserire un numero di elementi o un numero di ore.',
+    41 => 'Link',
+    42 => 'Eventi',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
 # confirmation and error messages
 
 $MESSAGE = array(
-    1 => "La password &egrave; stata inviata all'indirizzo email da te fornito, dovrebbe arrivare a momenti. Prego segui le istruzioni del messaggio per accedere al sito e grazie per il tuo supporto a {$_CONF['site_name']}",
+    1 => "La password &egrave; stata inviata all'indirizzo e-mail da te fornito, dovrebbe arrivare a momenti. Prego segui le istruzioni del messaggio per accedere al sito e grazie per il tuo supporto a {$_CONF['site_name']}",
     2 => "Grazie per aver inserito un articolo in {$_CONF['site_name']}.  L'evento &egrave; stato inviato al nostro staff per l'approvazione. Se approvato, il tuo articolo sar&agrave; disponibile per la visualizzazione nel nostro sito.",
     3 => "Grazie per aver inserito un link in {$_CONF['site_name']}.  L'evento &egrave; stato inviato al nostro staff per l'approvazione.  Se approvato il tuo link sar&agrave; visibile nella sezione <a href={$_CONF['site_url']}/links.php>links</a>.",
     4 => "Grazie per aver inserito un evento in {$_CONF['site_name']}.  L'evento &egrave; stato inviato al nostro staff per l'approvazione.  Se approvato, il tuo evento sar&agrave; visibile nel nostro <a href={$_CONF['site_url']}/calendar.php>calendario</a>.",
-    5 => 'Le tue informazioni utente sono state salvate correttamente.',
-    6 => 'Le tue preferenze di visualizzazione sono state salvate correttamente.',
-    7 => 'Le tue preferenze commenti sono state salvate correttamente.',
+    5 => 'Le tue informazioni utente sono state registrate correttamente.',
+    6 => 'Le tue preferenze di visualizzazione sono state registrate correttamente.',
+    7 => 'Le tue preferenze commenti sono state registrate correttamente.',
     8 => 'Sei uscito dall\'area utenti correttamente.',
-    9 => 'Il tuo articolo &egrave; stato salvato correttamente.',
-    10 => 'L\'articolo &egrave; stato cancellato correttamente.',
-    11 => 'Il tuo blocco &egrave; stato salvato correttamente.',
-    12 => 'Il blocco &egrave; stato cancellato correttamente.',
-    13 => 'Il tuo argomento &egrave; stato salvato correttamente.',
-    14 => 'L\'argomento e tutte le storie e blocchi associati sono stati cancellati correttamente.',
-    15 => 'Il tuo link &egrave; stato salvato correttamente.',
-    16 => 'Il link &egrave; stato cancellato correttamente.',
-    17 => 'Il tuo evento &egrave; stato salvato correttamente.',
-    18 => 'L\'evento &egrave; stato cancellato correttamente.',
-    19 => 'Il tuo sondaggio &egrave; stato salvato correttamente.',
-    20 => 'La votazione &egrave; stata cancellata correttamente.',
-    21 => 'Il nuovo utente &egrave; stato salvato correttamente.',
-    22 => 'L\'utente &egrave; stato cancellato correttamente',
+    9 => 'Il tuo articolo &egrave; stato registrato correttamente.',
+    10 => 'L\'articolo &egrave; stato eliminato correttamente.',
+    11 => 'Il tuo blocco &egrave; stato registrato correttamente.',
+    12 => 'Il blocco &egrave; stato eliminato correttamente.',
+    13 => 'Il tuo argomento &egrave; stato registrato correttamente.',
+    14 => 'L\'argomento e tutte gli articoli e blocchi associati sono stati eliminati correttamente.',
+    15 => 'Il tuo link &egrave; stato registrato correttamente.',
+    16 => 'Il link &egrave; stato eliminato correttamente.',
+    17 => 'Il tuo evento &egrave; stato registrato correttamente.',
+    18 => 'L\'evento &egrave; stato eliminato correttamente.',
+    19 => 'Il tuo sondaggio &egrave; stato registrato correttamente.',
+    20 => 'La votazione &egrave; stata eliminata correttamente.',
+    21 => 'Il nuovo utente &egrave; stato registrato correttamente.',
+    22 => 'L\'utente &egrave; stato eliminato correttamente',
     23 => 'Errore durante il tentativo di aggiungere l\'evento al tuo calendario. ID Evento mancante.',
-    24 => 'L\'Evento &egrave; stato salvato correttamente  nel tuo calendario',
+    24 => 'L\'Evento &egrave; stato registrato correttamente  nel tuo calendario',
     25 => 'Impossibile aprire il calendario personale, entra prima nel sito',
     26 => 'L\'Evento &egrave; stato rimosso correttamente dal tuo calendario personale',
     27 => 'Il Messaggio &egrave; stato inviato correttamente.',
-    28 => 'Il plug-in &egrave; stato salvato correttamente',
+    28 => 'Il plug-in &egrave; stato registrato correttamente',
     29 => 'Spiacenti, il calendario personale non &egrave; abilitato su questo sito',
     30 => 'Accesso negato',
     31 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione articoli.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
@@ -1109,30 +1118,44 @@
     35 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione eventi.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
     36 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione sondaggi.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
     37 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione utenti.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
-    38 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione plugin.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    38 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione plug-in.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
     39 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione mail.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
     40 => 'Messaggio di Sistema',
     41 => 'Spiacenti, non hai i permessi per accedere alla pagina sostituzione parole.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
-    42 => 'La tua parola &egrave; stata salvata correttamente.',
-    43 => 'La parola &egrave; stata cancellata correttamente.',
+    42 => 'La tua parola &egrave; stata registrata correttamente.',
+    43 => 'La parola &egrave; stata eliminata correttamente.',
     44 => 'Il plug-in &egrave; stato installato correttamente!',
-    45 => 'Il plug-in &egrave; stato cancellato correttamente.',
+    45 => 'Il plug-in &egrave; stato eliminato correttamente.',
     46 => 'Spiacenti, non hai i permessi per accedere all\'utility database backup.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
-    47 => 'Questa funzionalit&agrave; lavora solo sotto *nix.  Se Geeklog sta girando sotto un sistema operativo *nix la tua cache verr&agrave; regolarmente azzerata. Se sei su Windows, dovrai necessariamente cercare i files con nome adodb_*.php e rimuoverli manualmente.',
-    48 => "Grazie per la tua richiesta di registrazione a {$_CONF['site_name']}. Il nostro Team valuter&agrave; la tua richiesta. Se approvata ti verr&agrave; inviata via posta elettronica la password alla casella email da te specificata.",
-    49 => 'Il tuo gruppo &egrave; stato salvato correttamente.',
-    50 => 'Il gruppo &egrave; stato cancellato correttamente.',
+    47 => 'Questa funzionalit&agrave; funziona solo sotto *nix. Se Geeklog sta girando sotto un sistema operativo *nix la tua cache verr&agrave; regolarmente azzerata. Se sei su Windows, dovrai necessariamente cercare i files con nome adodb_*.php ed eliminarli manualmente.',
+    48 => "Grazie per la tua richiesta di registrazione a {$_CONF['site_name']}. Il nostro Team valuter&agrave; la tua richiesta. Se approvata ti verr&agrave; inviata via posta elettronica la password alla casella e-mail da te specificata.",
+    49 => 'Il tuo gruppo &egrave; stato registrato correttamente.',
+    50 => 'Il gruppo &egrave; stato eliminato correttamente.',
     51 => 'Questo Nome Utente &egrave; gi&agrave; in uso. Prego selezionane un\'altro.',
-    52 => 'L\'indirizzo email da t&egrave; inserito non sembra essere un indirizzo email valido.',
+    52 => 'L\'indirizzo e-mail da t&egrave; inserito non sembra essere un indirizzo e-mail valido.',
     53 => 'La tua nuova password &egrave; stata accettata. Prego usa la tua nuova password per riaccedere al sito.',
     54 => 'La tua richiesta per una nuova password &egrave; spirata. Prego riprova di nuovo.',
-    55 => 'Una email ti &egrave; stata inviata e dovrebbe arrivare a breve. Prego segui le istruzioni contentute nel messaggio per impostare una nuova password per il tup account.',
-    56 => 'L\'indirizzo email da te fornito &egrave; gi&agrave; in uso per un altro account.',
+    55 => 'Una e-mail ti &egrave; stata inviata e dovrebbe arrivare a breve. Prego segui le istruzioni contentute nel messaggio per impostare una nuova password per il tup account.',
+    56 => 'L\'indirizzo e-mail da te fornito &egrave; gi&agrave; in uso per un altro account.',
     57 => 'Il tuo account &grave; stato eliminato.',
-    58 => 'Your feed has been successfully saved.',
-    59 => 'The feed has been successfully deleted.',
-    60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    58 => 'Il tuo feed &egrave stato registrato correttamente.',
+    59 => 'Il feed &egrave stato eliminato correttamente.',
+    60 => 'Il plug-in &egrave stato aggiornato correttamente',
+    61 => 'Plug-in %s: Segnaposto messaggio sconosciuto',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1145,9 +1168,9 @@
     'accessrights' => 'Permessi di Accesso',
     'owner' => 'Proprietario',
     'grantgrouplabel' => 'Grant Above Group Edit Rights',
-    'permmsg' => 'NOTA: membri sono tutti gli utenti registrati nel sito e anonimi tutti i rimanenti visitatori non registrati.',
+    'permmsg' => 'NOTA: i membri sono tutti gli utenti registrati nel sito e anonimi tutti i rimanenti visitatori non registrati.',
     'securitygroups' => 'Sicurezza Gruppi',
-    'editrootmsg' => "Ricorda! Anche se sei un Utente Amministratore, non puoi modificare l'utente root senza prima essere entrato con l'account di root.  Puoi modificare tutti gli gli altri utenti ad eccezzione dell'utente root. Prego nota che tutti i tentativi di modificare illegalmente l'utente root vengono registrati.  Ritorna a <a href=\"{$_CONF['site_admin_url']}/user.php\">Pagina Amministrazione Utenti</a>.",
+    'editrootmsg' => "Ricorda! Anche se sei un Utente Amministratore, non puoi modificare l'utente root senza essere prima entrato con l'account di root. Puoi modificare tutti gli gli altri utenti ad eccezzione dell'utente root. Prego nota che tutti i tentativi di modificare illegalmente l'utente root vengono registrati. Ritorna a <a href=\"{$_CONF['site_admin_url']}/user.php\">Pagina Ammin. Utenti</a>.",
     'securitygroupsmsg' => 'Seleziona la casella per i gruppi nei quali vuoi inserire l\'utente.',
     'groupeditor' => 'Editor Gruppi',
     'description' => 'Descrizione',
@@ -1156,12 +1179,12 @@
     'missingfields' => 'Campi Mancanti',
     'missingfieldsmsg' => 'Devi fornire un nome e una descrizione per il gruppo',
     'groupmanager' => 'Manager Gruppi',
-    'newgroupmsg' => 'Per modificare o cancellare un gruppo, selezionalo dalla lista sottostante. <br>Per creare un nuovo gruppo clicca su [ Nuovo Gruppo ] sopra. <br>Considera che il gruppo principale non pu&ograve;  essere cancellato in quanto usato dal sistema.',
+    'newgroupmsg' => 'Per modificare o eliminare un gruppo, selezionalo dalla lista sottostante. <br>Per creare un nuovo gruppo fai clic su [ Nuovo Gruppo ] sopra. <br>Considera che il gruppo principale non pu&ograve; essere eliminato in quanto usato dal sistema.',
     'groupname' => 'Nome Gruppo',
     'coregroup' => 'Gruppo Principale',
     'yes' => 'Si',
     'no' => 'No',
-    'corerightsdescr' => "Questo Gruppo di {$_CONF['site_name']} &egrave; il gruppo principale.  Per definizione i permessi di questo gruppo non possono essere modificati.  Sotto c'&egrave; la lista in sola lettura dei permessi a cui questo gruppo ha accesso.",
+    'corerightsdescr' => "Questo Gruppo di {$_CONF['site_name']} &egrave; il gruppo principale. Per definizione i permessi di questo gruppo non possono essere modificati.  Sotto c'&egrave; la lista in sola lettura dei permessi a cui questo gruppo ha accesso.",
     'groupmsg' => 'Il modello di sicurezza per i Gruppi in questo sito &egrave; di tipo gerarchico.  Aggiungendo questo gruppo a uno qualsiasi dei gruppi elencati sotto fa s&igrave; che il gruppo prenda gli stessi permessi del gruppo superiore.  Dove possibile siete incoraggiati a usare i gruppi sottostanti per dare i permessi al gruppo.  Se avete necessit&agrave; di dare dei permessi personalizzati al gruppo potete selezionare i permessi fra le varie funzioni del sito nella sezione chiamata \'Permessi\'.  Per aggiungere questo gruppo a uno dei gruppi sottostanti seleziona la spunta nella caselle del gruppo(i) che desideri modificare.',
     'coregroupmsg' => "Questo gruppo &egrave; il gruppo principale di {$_CONF['site_name']} .  Normalmente i gruppi che sono sottostanti a questo gruppo non posono essere modificati.  Sotto puoi trovare una lista in sola lettura dei gruppi associati a questo gruppo.",
     'rightsdescr' => 'Alcuni permessi di accesso ai gruppi possono essere settati direttamente al gruppo o a un gruppo differente facente parte del gruppo.  Quelli che vedi sotto non selezionati sono i permessi che sono stati impostati a questo gruppo in quanto facente parte di altri gruppi e quindi ereditati.  I permessi selezionabili sono i permessi che posono essere dati direttamente a questo gruppo.',
@@ -1173,45 +1196,53 @@
     'edit' => 'Modifica',
     'none' => 'Nessuno',
     'accessdenied' => 'Accesso negato',
-    'storydenialmsg' => "Non disponi dei permessi per visualizzare questa storia.  Questo perch&egrave; non sei un membro registrato di {$_CONF['site_name']}.  Prego <a href=users.php?mode=new> diventa un membro</a> of {$_CONF['site_name']} per avere pieno accesso al sito!",
-    'eventdenialmsg' => "Non disponi dei permessi per visualizzare questo evento.  Questo perch&egrave; non sei un membro registrato di {$_CONF['site_name']}.  Prego <a href=users.php?mode=new> diventa un membro</a> of {$_CONF['site_name']} per avere pieno accesso al sito!",
+    'storydenialmsg' => "Non disponi dei permessi per visualizzare questo articolo. Questo perch&egrave; non sei un membro registrato di {$_CONF['site_name']}.  Prego <a href=users.php?mode=new> diventa un membro</a> of {$_CONF['site_name']} per avere pieno accesso al sito!",
+    'eventdenialmsg' => "Non disponi dei permessi per visualizzare questo evento. Questo perch&egrave; non sei un membro registrato di {$_CONF['site_name']}.  Prego <a href=users.php?mode=new> diventa un membro</a> of {$_CONF['site_name']} per avere pieno accesso al sito!",
     'nogroupsforcoregroup' => 'Questo Gruppo non ha alcun collegamento con gli altri gruppi',
     'grouphasnorights' => 'Questo Gruppo non ha accesso a nessuna funzione amministrativa del sito',
     'newgroup' => 'Nuovo Gruppo',
     'adminhome' => 'Home Amministratore',
-    'save' => 'Salva',
-    'cancel' => 'Cancella',
+    'save' => 'Registra',
+    'cancel' => 'Annulla',
     'delete' => 'Elimina',
-    'canteditroot' => 'Hai provato a editare il Gruppo Root ma non fai parte del gruppo stesso e quindi la tua modifica non &egrave; consentita. Prego contatta gli Amministratori se ritieni questo messaggio un errore',
+    'canteditroot' => 'Hai provato a modificare il Gruppo Root ma non fai parte del gruppo stesso e quindi la tua modifica non &egrave; consentita. Prego contatta gli Amministratori se ritieni questo messaggio un errore',
     'listusers' => 'Lista Utenti',
     'listthem' => 'lista',
     'usersingroup' => 'Utenti nel gruppo %s',
-    'usergroupadmin' => 'User Group Administration',
+    'usergroupadmin' => 'Amministrazione Gruppi Utenti',
     'add' => 'Add',
     'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
-    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'availmembers' => 'Membri Disponibili',
+    'groupmembers' => 'Membri del Gruppo',
+    'canteditgroup' => 'Per modificare questo gruppo, devi esserne membro. Prego contatta l\'amministratore del sistema se pensi si tratti di un errore.',
+    'cantlistgroup' => 'Per vedere i membri di questo gruppo, deve esserne membro tu stesso. Prego contatta l\'amministratore del sistema se pensi si tratti di un errore.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
 # admin/database.php
 
 $LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'Ultimi 10 Back-ups',
+    'last_ten_backups' => 'Ultimi 10 Backup',
     'do_backup' => 'Esegui il Backup',
-    'backup_successful' => 'Il Back up &egrave; stato eseguito con successo.',
-    'no_backups' => 'Nessun backups del sistema',
-    'db_explanation' => 'Per creare un nuovo Backup del tuo sistema Geeklog, clicca sul bottone sottostante',
+    'backup_successful' => 'Il Backup &egrave; stato eseguito correttamente.',
+    'db_explanation' => 'Per creare un nuovo Backup del tuo sistema Geeklog, fai clic sul bottone sottostante',
     'not_found' => "Percorso non corretto o utility mysqldump non eseguibile.<br>Controlla il percorso <strong>\$_DB_mysqldump_path</strong> in config.php.<br>La variabile attualmente &egrave; definit&agrave; come: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Fallito: La dimensione del File era di 0 bytes',
     'path_not_found' => "{$_CONF['backup_path']} non esiste o non &egrave; una directory",
     'no_access' => "ERRORE: La Directory {$_CONF['backup_path']} non &egrave; accessibile.",
-    'backup_file' => 'Backup file',
+    'backup_file' => 'File di backup',
     'size' => 'Dim.',
-    'bytes' => 'Bytes',
-    'total_number' => 'Numero Totale di backups: %d'
+    'bytes' => 'Byte',
+    'total_number' => 'Numero Totale di backup: %d'
 );
 
 ###############################################################################
@@ -1220,13 +1251,14 @@
     1 => 'Home',
     2 => 'Contatti',
     3 => 'Pubblica',
-    4 => 'Links',
+    4 => 'Link',
     5 => 'Sondaggi',
     6 => 'Calendario',
     7 => 'Statistiche Sito',
-    8 => 'Personalizza',
+    8 => 'Preferenze',
     9 => 'Ricerca',
-    10 => 'Ricerca Avanzata'
+    10 => 'Ricerca Avanzata',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1235,14 +1267,14 @@
 $LANG_404 = array(
     1 => 'Errore 404',
     2 => 'Attenzione, Abbiamo cercato in tutto il sito ma l\'argomento <b>%s</b> non &egrave; stato trovato.',
-    3 => 'Siamo spiacenti, ma il file da te richiesto non esiste.  Prego controlla nella pagina principale o nella pagina di ricerca per vedere se puoi trovare quanto da te richiesto.'
+    3 => 'Siamo spiacenti, ma il file da te richiesto non esiste. Prego controlla nella pagina principale o nella pagina di ricerca per vedere se puoi trovare quanto da te richiesto.'
 );
 
 ###############################################################################
 # login form
 
 $LANG_LOGIN = array(
-    1 => 'Login richiesto',
+    1 => 'Autenticazione richiesta',
     2 => 'Spiacenti, per accedere a questa area devi essere registrato come utente.',
     3 => 'Entra',
     4 => 'Nuovo Utente'
@@ -1252,20 +1284,226 @@
 # pdfgenerator.php
 
 $LANG_PDF = array(
-    1 => 'The PDF feature has been disabled',
-    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
-    3 => 'Unknown error during PDF generation',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Loading your document.',
-    6 => 'Please wait while your document is loaded.',
-    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
-    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
-    9 => 'PDF Generator',
-    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    1 => 'La funzionalit&agrave; PDF &egrave; stata disabilitata',
+    2 => 'Il documento fornito non &grave; stato renderizzato. Il documento &egrave; stato ricevuto ma non &grave stato possibile processarlo. Prego controlla di aver inviato solo documenti in formato HTML che siano stati scritti secondo lo standard xHTML. Prego nota che documenti estremamente complessi potrebbero non esserre renderizzati correttamente o non esserlo affatto. Il documento risultante dal tuo tentativo era di 0 byte di lunghezza, ed &grave; stato eliminato. Se sei sicuro che il tuo documento dovesse essere renderizzato per bene, prego reinvialo.',
+    3 => 'Errore sconosciuto nella generazione del PDF',
+    4 => "Dati pagina non forniti, o vuoi utilizare lo strumento di generazione PDF ad-hoc sotto. Se pensi di aver ricevuto questa pagina\n per errore, contatta prego l\'amminstratore di sistema. Altrimenti, puoi utilizzare il form sottostante per generare PDF in modalit&agrave; ad-hoc.",
+    5 => 'Carico il tuo documento.',
+    6 => 'Attendi prego mentre il tuo documento viene caricato.',
+    7 => 'Puoi fare clic con il pulsante destro sotto e scegliere \'registra  collegamento...\' o \'scarica documento collegato...\' per registrare una copia del documento.',
+    8 => "Il percorso fornito nel file di configurazione per l\'eseguibile di  HTMLDoc &egrave; invalido o questo sistema non pu&ograve; eseguirlo. Prego contatta l\'amministratore del sito se questo problema\npersiste.",
+    9 => 'Generatore PDF',
+    10 => "Questo &egrave; lo strumento di Generazione PDF Ad-hoc. Prover&agrave; a convertire qualsiasi URL gli si fornisca in un PDF. Prego nota che alcune pagine web non saranno visualizzate correttamente con questa funzionalit&agrave;. Questa\n&grave; una limitazione dello strumento di generazione PDF HTMLDoc e tali errori non dovrebbero essere segnalati all\'amministratore di questo sito",
     11 => 'URL',
-    12 => 'Generate PDF!',
-    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
-    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+    12 => 'Genera PDF!',
+    13 => 'La configurazione PHP su questo server non permette di utilizzare URL con il comando fopen(). L\'amministratore di sistema deve modificare il file  php.ini ed impostare allow_url_fopen ad On',
+    14 => 'Il PDF da te richiesto o non esiste o hai provato ad accedervi illegalmente.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
 );
 
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/italian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/italian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/italian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/italian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1509 @@
+<?php
+
+###############################################################################
+# italian.php
+# Traduzione italiana per GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2002 quess65 webmaster@dynamikteam.net
+# Copyright (C) 2005 magomarcelo magomarcelo@gmail.com magomarcelo.blogspot.com
+#
+# Questo programma è free software; puoi ridistribuire e/o
+# modificarlo sotto i termini della GNU General Public License
+# come pubblicato da Free Software Foundation; dalla versione 2
+# della Licenza, o (come preferisci) a qualsiasi delle versioni
+# successive.
+#
+# Questo programma è distribuito con la speranza sia utile,
+# ma SENZA NESSUNA GARANZIA; senza qualsiasi garanzia implicita di
+# COMMERCIABILITA o USO PER SCOPI PARTICOLARI. Vedi la
+# GNU General Public License per ulteriori dettagli.
+#
+# Dovresti aver ricevuto una copia della GNU General Public License
+# insieme a questo programma; altrimenti scrivi a Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Inviato da:',
+    2 => 'continua ->',
+    3 => 'commenti',
+    4 => 'Modifica',
+    5 => 'Vota',
+    6 => 'Risultati',
+    7 => 'Risultati vot.',
+    8 => 'voti',
+    9 => 'Funzioni Ammin:',
+    10 => 'Inserimenti',
+    11 => 'Articoli',
+    12 => 'Blocchi',
+    13 => 'Argomenti',
+    14 => 'Links',
+    15 => 'Eventi',
+    16 => 'Sondaggi',
+    17 => 'Utenti',
+    18 => 'SQL Query',
+    19 => 'Esci',
+    20 => 'Informazioni utente:',
+    21 => 'Nome Utente',
+    22 => 'ID Utente',
+    23 => 'Livello di sicurezza',
+    24 => 'Anonimo',
+    25 => 'Invia Commento',
+    26 => 'I seguenti commenti sono propriet&agrave; di chi li ha inviati. Questo sito non &egrave; responsabile dei contenuti degli stessi.',
+    27 => 'Inserimenti pi&ugrave; recenti',
+    28 => 'Elimina',
+    29 => 'Nessun commento.',
+    30 => 'Articoli Meno Recenti',
+    31 => 'Permetti tag HTML:',
+    32 => 'Errore, nome utente non valido',
+    33 => 'Errore, non puoi scrivere nel file di log',
+    34 => 'Errore',
+    35 => 'Esci',
+    36 => 'su',
+    37 => 'Nessun articolo dagli utenti',
+    38 => 'Content Syndication',
+    39 => 'Aggiorna',
+    40 => 'Hai <tt>register_globals = Off</tt> nel tuo <tt>php.ini</tt>. Tuttavia, Geeklog richiede che <tt>register_globals</tt> sia <strong>On</strong>. Prima di continuare, prego impostalo ad <strong>on</strong> e riavvia il tuo web server.',
+    41 => 'Ospiti',
+    42 => 'Inviato da:',
+    43 => 'Rispondi a questo',
+    44 => 'Relativo',
+    45 => 'Numero Errore MySQL',
+    46 => 'Messaggio Errore MySQL',
+    47 => 'Funzioni Utente',
+    48 => 'Info Account',
+    49 => 'Preferenze',
+    50 => 'Errore nello statement SQL',
+    51 => 'Aiuto',
+    52 => 'Nuovo',
+    53 => 'Home Ammin.',
+    54 => 'Impossibile aprire il file.',
+    55 => 'Errore su',
+    56 => 'Vota',
+    57 => 'Password',
+    58 => 'Entra',
+    59 => "Non hai ancora un account? Iscriviti come <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nuovo Utente</a>",
+    60 => 'Inserisci un commento',
+    61 => 'Crea un nuovo Account',
+    62 => 'parole',
+    63 => 'Preferenze Commenti',
+    64 => 'Invia l\'articolo ad un amico',
+    65 => 'Visualizza la versione stampabile',
+    66 => 'Il mio Calendario',
+    67 => 'Benvenuto su ',
+    68 => 'Home',
+    69 => 'Contatto',
+    70 => 'Cerca',
+    71 => 'Scrivi',
+    72 => 'Link',
+    73 => 'Sondaggi',
+    74 => 'Calendario',
+    75 => 'Ricerca Avanzata',
+    76 => 'Statistiche Sito',
+    77 => 'Plug-in',
+    78 => 'Eventi in arrivo',
+    79 => 'Novit&agrave;',
+    80 => 'Articoli nelle ultime',
+    81 => 'Articolo nelle ultime',
+    82 => 'ore',
+    83 => 'COMMENTI',
+    84 => 'LINK',
+    85 => '<br>nelle ultime 48 ore',
+    86 => 'Nessun nuovo commento',
+    87 => '<br>nelle ultime 2 settimane',
+    88 => 'Nessun nuovo link',
+    89 => 'Nessun evento in arrivo',
+    90 => 'Home',
+    91 => 'Pagina creata in',
+    92 => 'secondi',
+    93 => 'Copyright',
+    94 => 'Tutti i marchi e copyrights su questa pagina appartengono ai rispettivi proprietari.',
+    95 => 'Powered By',
+    96 => 'Gruppi',
+    97 => 'Lista parole',
+    98 => 'Plug-in',
+    99 => 'ARTICOLI',
+    100 => 'Nessun nuovo articolo',
+    101 => 'I Tuoi Eventi',
+    102 => 'Eventi nel sito',
+    103 => 'Backup DB',
+    104 => 'da',
+    105 => 'Invio E-mail',
+    106 => 'Visualizzazioni',
+    107 => 'Test Versione GeekLog',
+    108 => 'Svuota Cache',
+    109 => 'Segnala abuso',
+    110 => 'Segnala questo inserimento all\'ammin. del sito',
+    111 => 'Visualizza Versione PDF',
+    112 => 'Utenti Registrati',
+    113 => 'Documentazione',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendario eventi',
+    2 => 'Nessun evento da visualizzare.',
+    3 => 'Quando',
+    4 => 'Dove',
+    5 => 'Descrizione',
+    6 => 'Aggiungi un evento',
+    7 => 'Prossimi eventi',
+    8 => 'Aggiungendo questo evento al tuo calendario potrai accedere in modo veloce a tutti gli eventi cui sei interessato facendo clic su "Il mio calendario" nel blocco "Funzioni Utente".',
+    9 => 'Aggiungi al mio calendario',
+    10 => 'Elimina dal mio calendario',
+    11 => "Aggiungi un evento al calendario di {$_USER['username']}",
+    12 => 'Evento',
+    13 => 'Inizio',
+    14 => 'Fine',
+    15 => 'Torna al calendario'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Inserisci un commento',
+    2 => 'Modo Inserimento',
+    3 => 'Esci',
+    4 => 'Crea un Account',
+    5 => 'Nome Utente',
+    6 => 'Per poter inserire un commento su questo sito &egrave; necessario loggarsi. Se non hai ancora un account puoi usare il form sottostante per crearne uno.',
+    7 => 'Il tuo ultimo commento risale a ',
+    8 => " secondi f&agrave;  Devi attendere {$_CONF['commentspeedlimit']} secondi per inserire un nuovo commento",
+    9 => 'Commento',
+    10 => 'Invia Segnalazione',
+    11 => 'Inserisci Commento',
+    12 => 'Per poter inserire un commento &egrave; necessario riempire tutti i campi.',
+    13 => 'Le tue info',
+    14 => 'Anteprima',
+    15 => 'Segnala questo inserimento',
+    16 => 'Titolo',
+    17 => 'Errore',
+    18 => 'Materiale Importante',
+    19 => 'Per favore prova a mantenere questo inserimento in cima agli argomenti.',
+    20 => 'Prova a rispondere ad un commento di un altro utente anzich&egrave; aprire un nuovo inserimento.',
+    21 => 'Leggi i messaggi degli altri utenti prima di inviare il tuo in maniera da evitare messaggi doppi.',
+    22 => 'Usa un soggetto che descriva il contenuto del messaggio.',
+    23 => 'Il tuo indirizzo e-mail non sar&agrave; reso pubblico.',
+    24 => 'Utente Anonimo',
+    25 => 'Sei sicuro di voler segnalare questo inserimento all\'amminstratore del sito?',
+    26 => '%s ha segnalato come abuso il seguente inserimento di commento:',
+    27 => 'Segnalazione abuso'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profilo Utente di',
+    2 => 'Nome Utente',
+    3 => 'Nome Completo',
+    4 => 'Password',
+    5 => 'E-mail',
+    6 => 'Homepage',
+    7 => 'Bio',
+    8 => 'Chiave PGP',
+    9 => 'Registra Informazioni',
+    10 => 'Ultimi 10 commenti dell\'utente',
+    11 => 'Nessun commento dell\'utente',
+    12 => 'Preferenze dell\'utente',
+    13 => 'E-mail Digest Notturno',
+    14 => 'Questa password &egrave; generata in maniera casuale. Si raccomanda di cambiare la password al pi presto. Per cambiare la password, entra nel sito, poi fai clic su Informazioni Account dal men&ugrave; utente.',
+    15 => "Il tuo account su {$_CONF['site_name']} &egrave; stato creato correttamente. Per entrare nel sito usa le informazioni sottostanti. Si consiglia di registrare la mail per non perdere i dati dell'account.",
+    16 => 'Informazioni del tuo account',
+    17 => 'L\'Account non esiste',
+    18 => 'L\'indirizzo e-mail fornito non &egrave; un indirizzo valido',
+    19 => 'Il nome utente o l\'indirizzo e-mail fornito &egrave; gi&agrave; esistente',
+    20 => 'L\'indirizzo e-mail fornito non &egrave; un indirizzo valido',
+    21 => 'Errore',
+    22 => "Registrati su {$_CONF['site_name']}!",
+    23 => "<div align=justify>La creazione di un Account Utente d&agrave; la possibilit&agrave; di partecipare alla costruzione di {$_CONF['site_name']} e ti permette di inviare commenti e articoli da te realizzati. Senza un Account sarai in grado di inserire solo come Anonimo. Prego nota che il tuo indirizzo e-mail non sar&agrave; <b><i>mai</i></b> disponibile pubblicamente o visualizzata nel sito.<div>",
+    24 => 'La tua password sar&agrave; inviata all\'indirizzo da te inserito.',
+    25 => 'Ti sei dimenticato la tua password?',
+    26 => 'Inserisci <em>almeno</em> il tuo nome utente <em>o</em> l\'indirizzo e-mail usato per registrarti e fai clic su E-mail Password. Le Istruzioni su come impostare la nuova new password ti saranno inviate all\'indirizzo registrato.',
+    27 => 'Registrati Ora!',
+    28 => 'Invia Password via E-mail',
+    29 => 'uscito da',
+    30 => 'entrato in',
+    31 => 'La funzione da te selezionata richiede la tua autenticazione',
+    32 => 'Firma',
+    33 => 'Mai disponibile pubblicamente',
+    34 => 'Questo &egrave; il tuo vero nome',
+    35 => 'Inserisci una password per cambiarla',
+    36 => 'Iniziando con http://',
+    37 => 'Applicato ai tuoi commenti',
+    38 => 'Informazioni Aggiuntive! Tutti possono leggere questo',
+    39 => 'La tua chiave pubblica PGP key da condividere',
+    40 => 'Nascondi Icone Argomenti',
+    41 => 'Disponibile a Moderare',
+    42 => 'Formato Data',
+    43 => 'Numero Massimo di Articoli',
+    44 => 'Nascondi box',
+    45 => 'Mostra preferenze per',
+    46 => 'Escludi Oggetti per',
+    47 => 'Nuovo box di Configurazione per',
+    48 => 'Articoli',
+    49 => 'Nascondi icone in articoli',
+    50 => 'Deseleziona se non interessato',
+    51 => 'Solo i nuovi articoli',
+    52 => 'Per definizione &egrave;',
+    53 => 'Ricevi gli articoli giornalieri ogni notte',
+    54 => 'Seleziona l\'opzione per gli articoli e gli autori che non vuoi vedere.',
+    55 => 'Se lasci tutto non selezionato, significa che vuoi lasciare la selezione di default dei box. Se inizi a selezionare i box, ricordati di impostare tutti quelli desiderati in quanto la configurazione di default verr&agrave; ignorata. Quelli di default sono visualizzati in grassetto.',
+    56 => 'Autori',
+    57 => 'Modalit&agrave; Visualizzazione',
+    58 => 'Ordinamento',
+    59 => 'Limiti per i commenti',
+    60 => 'Come preferisci siano visualizzati i tuoi commenti?',
+    61 => 'Prima i pi&ugrave; recenti o i meno recenti?',
+    62 => 'Per definizione &egrave; 100',
+    63 => "La tua password &egrave; stata inviata e dovrebbe arrivarti a momenti. Prego segui le istruzioni del messaggio e grazie per la tua partecipazione a {$_CONF['site_name']}",
+    64 => 'Preferenze Commenti per',
+    65 => 'Prova a entrare di nuovo',
+    66 => "Devi aver digitato male le tue credenziali di accesso. Prego riprova di nuovo sotto. Sei un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nuovo utente</a>?",
+    67 => 'Membro dal',
+    68 => 'Ricordami per',
+    69 => 'Per quanto tempo vuoi essere ricordato dopo l\'ingresso nel sito?',
+    70 => "Personalizza lo stile e il contenuto per {$_CONF['site_name']}",
+    71 => "Una delle funzionalit&agrave; di {$_CONF['site_name']} &egrave; che puoi personalizzare il contenuto che vuoi visualizzare e lo stile con cui visualizzarlo.  Per utilizzare questa funzione devi prima <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrarti</a> in {$_CONF['site_name']}. Sei gi&agrave; un membro? Allora usa il form di accesso che trovi alla tua sinistra per entrare!",
+    72 => 'Tema',
+    73 => 'Lingua',
+    74 => 'Cambia lo stile di visualizzazione come preferisci!',
+    75 => 'Argomenti da inviare via e-mail per',
+    76 => 'Se selezioni almeno un argomento dalla lista sottostante riceverai via e-mail ogni nuovo articolo associato all\'argomento alla fine della giornata. Seleziona solo gli argomenti che ti interessano!',
+    77 => 'Foto',
+    78 => 'Aggiungi una tua foto!',
+    79 => 'Seleziona qu&igrave; per eliminare questa immagine',
+    80 => 'Entra',
+    81 => 'Invia E-mail',
+    82 => 'Ultimi 10 articoli dagli utenti',
+    83 => 'Statistiche di inserimento per utente',
+    84 => 'Numero totale di articoli:',
+    85 => 'Numero totale di commenti:',
+    86 => 'Trova tutti gli inserimenti di',
+    87 => 'Il tuo nome utente',
+    88 => "Qualcuno (probabilmente tu) ha richiesto una nuova password per il tuo account \"%s\" su {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSe vuoi veramente eseguire questa azione, prego fai clic sul link seguente:\n\n",
+    89 => "Se non vuoi eseguire questa operazione, semplicemente ignora questo messaggio e la richiesta sar&agrave; scartata (la tua password non sar&agrave; modificata).\n\n",
+    90 => 'Puoi inserire una nuova password per il tuo account sotto. Prego nota che la tua vecchia password &egrave; ancora valida fino a che non invii questo form.',
+    91 => 'Imposta Nuova Password',
+    92 => 'Inserisci Nuova Password',
+    93 => 'La tua ultima richiesta di una nuova password &egrave; stata eseguita %d secondi f&agrave;. Questo sito richiede almeno %d secondi tra una richiesta e l\'altra.',
+    94 => 'Elimina Account "%s"',
+    95 => 'Fai clic sul bottone "elimina account" qu&igrave;sotto per eliminare il tuo account dal nostro database. Prego nota che qualsiasi articolo e commento da te inserito con questo account <strong>non</strong> sar&agrave; eliminato ma visualizzato come inviato da un "Anonimo".',
+    96 => 'Elimina account',
+    97 => 'Conferma Eliminazione Account',
+    98 => 'Sei proprio sicuro di voler eliminare il tuo account? Cos&igrave; facendo, non sarai pi&ugrave; in grado di entrare ancora in questo sito (fintantoch&egrave; non crei un nuovo account). Se sei sicuro, fai clic su "Elimina account" di nuovo nel form qu&igrave; sotto.',
+    99 => 'Opzioni della Privacy per',
+    100 => 'E-mail dall\'Amministratore',
+    101 => 'Permetti invio e-mail dagli Amministratori del Sito',
+    102 => 'E-mail dagli Utenti',
+    103 => 'Permetti invio e-mail da altri Utenti',
+    104 => 'Visualizza in Online Status',
+    105 => 'Mostrami nel blocco Who\'s Online',
+    106 => 'Localit&agrave;',
+    107 => 'Mostra nel tuo profilo pubblico',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Non ci sono News da visualizzare',
+    2 => '<br>Non ci sono nuovi articoli da visualizzare. Questo perch&egrave; o non ci sono nuovi articoli relativi a questo argomento o le tue preferenze utente sono troppo restrittive ',
+    3 => 'per l\'argomento <b>%s</b>',
+    4 => 'Articolo del giorno',
+    5 => 'Successivo',
+    6 => 'Precedente',
+    7 => 'Primo',
+    8 => 'Ultimo'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'C\'&egrave; stato un errore nell\'invio del tuo messaggio. Prego riprova un\'altra volta.',
+    2 => 'Messaggio inviato correttamente.',
+    3 => 'Prego assicurati di usare un indirizzo e-mail valido nel campo Rispondi a:.',
+    4 => 'Prego compila i campi Tuo Nome, Rispondi a:,Soggetto e Messaggio',
+    5 => 'Errore: Nessun Utente.',
+    6 => 'C\'&egrave; stato un errore.',
+    7 => 'Profilo Utente per',
+    8 => 'Nome Utente',
+    9 => 'URL Utente',
+    10 => 'Invia mail a',
+    11 => 'Tuo Nome:',
+    12 => 'Rispondi a:',
+    13 => 'Soggetto:',
+    14 => 'Messaggio:',
+    15 => 'L\'HTML non sar&agrave; tradotto.',
+    16 => 'Invia Messaggio',
+    17 => 'Spedisci l\'Articolo a un amico',
+    18 => 'A Nome',
+    19 => 'A Indirizzo E-mail',
+    20 => 'Da Nome',
+    21 => 'Da Indirizzo E-mail',
+    22 => 'Tutti i campi sono richiesti',
+    23 => "Questa e-mail ti &egrave; stata inviata da %s a %s perch&egrave; pensa possa interessarti questo articolo proveniente da {$_CONF['site_url']}.  Questa non &egrave; SPAM e il tuo indirizzo e-mail utilizzato in questa operazione non verr&agrave; registrato nella lista per un successivo uso.",
+    24 => 'Commento su questo articolo a',
+    25 => 'Devi essere un utente registrato per accedere a questa funzione. Identificandoti come utente ci aiuti a prevenire eventuali abusi sul sistema',
+    26 => 'Questo form ti permette di inviare una e-mail all\'utente selezionato.  Tutti i campi sono richiesti.',
+    27 => 'Messaggio breve',
+    28 => '%s scrive: ',
+    29 => "Questo è la newsletter quotidiana per {$_CONF['site_name']} del ",
+    30 => ' - Newsletter quotidiana del ',
+    31 => 'Titolo',
+    32 => 'Data',
+    33 => 'Leggi l\'articolo completo su',
+    34 => 'Fine del messaggio',
+    35 => 'Spiacenti, l\'Utente preferisce non ricevere e-mail.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Ricerca Avanzata',
+    2 => 'Parole chiave',
+    3 => 'Argomenti',
+    4 => 'Tutti',
+    5 => 'Tipo',
+    6 => 'Articoli',
+    7 => 'Commenti',
+    8 => 'Autori',
+    9 => 'Tutti',
+    10 => 'Ricerca',
+    11 => 'Risultati Ricerca',
+    12 => 'risultati',
+    13 => 'Risultati Ricerca: Nessun risultato',
+    14 => 'Non ci sono risultati per la tua ricerca su',
+    15 => 'Prego riprova.',
+    16 => 'Titolo',
+    17 => 'Data',
+    18 => 'Autore',
+    19 => "Ricerca nell'intero database di articoli correnti e passati di {$_CONF['site_name']}",
+    20 => 'Data',
+    21 => 'a',
+    22 => '(Formato Data YYYY-MM-DD)',
+    23 => 'Visite',
+    24 => 'Trovato %d risultati',
+    25 => 'Ricerca effettuata per',
+    26 => 'oggetti in',
+    27 => 'secondi',
+    28 => 'Nessun articolo o commento trovato per la tua ricerca',
+    29 => 'Risultato Articoli e Commenti',
+    30 => 'Nessun Link trovato per la tua ricerca',
+    31 => 'Questo plug-in non restituisce nessun risultato',
+    32 => 'Evento',
+    33 => 'URL',
+    34 => 'Localit&agrave;',
+    35 => 'Tutti i giorni',
+    36 => 'Nessun Evento trovato per la tua ricerca',
+    37 => 'Risultato Eventi',
+    38 => 'Risultato Link',
+    39 => 'Link',
+    40 => 'Eventi',
+    41 => 'La tua stringa di ricerca deve avere almeno 3 caratteri.',
+    42 => 'Prego usa una data formattata come YYYY-MM-DD (anno-mese-giorno).',
+    43 => 'frase esatta',
+    44 => 'tutte queste parole',
+    45 => 'qualsiasi di queste parole',
+    46 => 'Prossimo',
+    47 => 'Precedente',
+    48 => 'Autore',
+    49 => 'Data',
+    50 => 'Visite',
+    51 => 'Link',
+    52 => 'Localit&agrave;',
+    53 => 'Risultato Articoli',
+    54 => 'Risultato Commenti',
+    55 => 'la stringa',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistiche Sito',
+    2 => 'Visite Totali nel sistema',
+    3 => 'Articoli(Commenti) nel sistema',
+    4 => 'Votazioni(Voti) nel sistema',
+    5 => 'Links(Clicks) nel sistema',
+    6 => 'Eventi nel sistema',
+    7 => 'Top 10 Articoli Visitati',
+    8 => 'Titolo Articolo',
+    9 => 'Visite',
+    10 => 'Sembra non ci siano articoli in questo sito.',
+    11 => 'Top 10 Articoli Commentati',
+    12 => 'Commenti',
+    13 => 'Sembra non ci siano articoli disponibili in questo sito o nessuno ha ancora inserito un commento sullo stesso.',
+    14 => 'Top 10 Sondaggi',
+    15 => 'Domanda Sondaggio',
+    16 => 'Voti',
+    17 => 'Sembra che nessuno abbia ancora inviato un sondaggio in questo sito nessuno abbia ancora votato.',
+    18 => 'Top 10 Link',
+    19 => 'Link',
+    20 => 'Visite',
+    21 => 'Sembra che nessuno abbia ancora inviato un link su questo sito o nessuno ha fatto clic sui link disponibili.',
+    22 => 'Top 10 Articoli Inseriti',
+    23 => 'E-mail',
+    24 => 'Sembra che nessuno abbia ancora inviato un articolo su questo sito',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relativo a..',
+    2 => 'Invia l\'Articolo a un amico',
+    3 => 'Articolo in Formato Stampabile',
+    4 => 'Opzioni',
+    5 => 'Articolo in Formato PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Per inserire un %s &egrave; richiesto che tu ti autentifichi come utente.',
+    2 => 'Entra',
+    3 => 'Nuovo Utente',
+    4 => 'Invia un Evento',
+    5 => 'Invia un Link',
+    6 => 'Invia un Articolo',
+    7 => 'Autenticazione Richiesta',
+    8 => 'Invia',
+    9 => 'Per l\'inserimento di informazioni da utilizzare in questo sito ti chiediamo di seguire i seguenti consigli...<ul><li>Inserisci tutti i campi, sono tutti richiesti<li>Fornisci informazioni complete e accurate<li>Controlla bene tutti gli URLs</ul>',
+    10 => 'Titolo',
+    11 => 'Link',
+    12 => 'Data Inizio',
+    13 => 'Data Fine',
+    14 => 'Localit&agrave;',
+    15 => 'Descrizione',
+    16 => 'Se altro, prego specifica',
+    17 => 'Categoria',
+    18 => 'Altro',
+    19 => 'Leggi prima',
+    20 => 'Errore: Categoria Mancante',
+    21 => 'Quando selezionato "Altro" fornisci anche il nome della categoria',
+    22 => 'Errore: Campi Mancanti',
+    23 => 'Prego compila tutti i campi del form. Tutti i campi sono richiesti.',
+    24 => 'Inserimento Registrato',
+    25 => 'Il tuo %s inserimento &egrave; stato registrato correttamente.',
+    26 => 'Limite Velocit&agrave;',
+    27 => 'Nome Utente',
+    28 => 'Argomento',
+    29 => 'Articolo',
+    30 => 'Il tuo ultimo inserimento risale a ',
+    31 => " secondi f&agrave;.  Questo sito richiede almeno {$_CONF['speedlimit']} secondi fra un inserimento e l'altro",
+    32 => 'Anteprima',
+    33 => 'Anteprima Articolo',
+    34 => 'Esci',
+    35 => 'I tag HTML non sono consentiti',
+    36 => 'Modalit&agrave; Inserimento',
+    37 => "L'Inserimento di un evento in {$_CONF['site_name']} metter&agrave; il tuo evento nel calendario principale e permetter&agrave; agli utenti di aggiungerlo al loro calendario personale. Questa funzione <b>NON</b> &egrave; stata realizzata per inserire compleanni o anniversari.<br><br>Una volta inserito sar&agrave; inviato al nostro amministratore e se approvato il tuo evento apparir&agrave; sul calendario principale.",
+    38 => 'Aggiungi Evento a',
+    39 => 'Calendario Principale',
+    40 => 'Calendario Personale',
+    41 => 'Ora Fine',
+    42 => 'Ora Inizio',
+    43 => 'Evento Giornaliero',
+    44 => 'Indirizzo 1',
+    45 => 'Indirizzo 2',
+    46 => 'Citt&agrave; Paese',
+    47 => 'Stato',
+    48 => 'C.A.P.',
+    49 => 'Tipo Evento',
+    50 => 'Modifica Tipi di Eventi',
+    51 => 'Localit&agrave;',
+    52 => 'Elimina',
+    53 => 'Crea un Account'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autenticazione Richiesta',
+    2 => 'Negato! Informazioni d\'accesso non corrette',
+    3 => 'Password non valida per l\'utente',
+    4 => 'Nome Utente:',
+    5 => 'Password:',
+    6 => 'Tutti gli accessi alle parti amministrative di questo sito sono registrate e controllate.<br>Questa pagina e per il solo personale autorizzato.',
+    7 => 'Entra'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Permessi di amministrazione insufficienti',
+    2 => 'Non hai i permessi necessari per modificare questo blocco.',
+    3 => 'Editor Blocchi',
+    4 => 'Si &egrave; verificato un problema nella lettura di questo feed (vedi error.log per dettagli).',
+    5 => 'Titolo Blocco',
+    6 => 'Argomento',
+    7 => 'Tutti',
+    8 => 'Livello Sicurezza Blocco',
+    9 => 'Ordine Blocco',
+    10 => 'Tipo Blocco',
+    11 => 'Blocco Portale',
+    12 => 'Blocco Normale',
+    13 => 'Opzioni Blocco Portale',
+    14 => 'RDF URL',
+    15 => 'Ultimo Agg. RDF',
+    16 => 'Opzioni Blocco Normale',
+    17 => 'Contenuto Blocco',
+    18 => 'Prego completa i campi Titolo Blocco, Livello Sicurezza e Contenuto',
+    19 => 'Manager Blocchi',
+    20 => 'Titolo Blocco',
+    21 => 'SecLev Blocco',
+    22 => 'Tipo Blocco',
+    23 => 'Ordine Blocco',
+    24 => 'Argomento Blocco',
+    25 => 'Per modificare o eliminare un blocco, fai clic sul blocco selezionato. <br>Per creare un nuovo blocco fai clic su [ Nuovo Blocco ] sopra.',
+    26 => 'Impaginazione Blocco',
+    27 => 'Blocco PHP',
+    28 => 'Opzioni Blocco PHP',
+    29 => 'Funzione Blocco',
+    30 => 'Se desideri avere un blocco che usi il codice PHP, inserisci il nome della funzione sotto.  Il nome della tua funzione deve iniziare con il prefisso "phpblock_" (es. phpblock_getweather).  Se non ha questo prefisso, la tua funzione NON verr&agrave; richiamata.  Questo per evitare che altre persone possano hackerare la vostra installazione di Geeklog inserendo funzioni di chiamate a codice arbitrario che possa danneggiare il vostro sistema.  Assicuratevi di inserire le parentesi vuote "()" dopo il vostro nome della funzione.  <br><br>Per ultimo, &egrave; raccomandabile mettere tutto il codice del Blocco in /path/to/geeklog/system/lib-custom.php.  <br><b>Questo permette di registrare il tuo codice nel caso di aggiornamenti di Geeklog.</b>',
+    31 => 'Errore nel Blocco PHP.  La Funzione, %s, non esiste.',
+    32 => 'Errore Campo(i) Mancante(i)',
+    33 => 'Devi inserire la URL del file .rdf per il blocco portale',
+    34 => 'Devi inserire il titolo e la funzione per il blocco PHP',
+    35 => 'Devi inserire il titolo e il contenuto del blocco Normale',
+    36 => 'Devi inserire il contenuto per il layout blocco',
+    37 => 'Errato nome della funzione Blocco PHP',
+    38 => 'La funzione per il Blocco PHP deve avere il prefisso \'phpblock_\' (es. phpblock_getweather).  Il prefisso \'phpblock_\' &egrave; richiesto per ragioni di sicurezza in particolare per prevenire le esecuzioni di codice arbitrario.',
+    39 => 'Lato',
+    40 => 'Sinistro',
+    41 => 'Destro',
+    42 => 'Devi inserire l\'ordine del blocco e il livello di sicurezza per i blocchi di default di Geeklog',
+    43 => 'Solo in Homepage',
+    44 => 'Accesso Negato',
+    45 => "Stai tentando di accedere a un blocco del quale non hai i permessi di modifica.  Questo tentativo sar&agrave; registrato. Prego <a href=\"{$_CONF['site_admin_url']}/block.php\">ritorna alla schermata di amministrazione</a>.",
+    46 => 'Nuovo Blocco',
+    47 => 'Home Amministrazione',
+    48 => 'Nome Blocco',
+    49 => ' (nessun spazio e deve essere univoco)',
+    50 => 'URL File di Help',
+    51 => 'includi http://',
+    52 => 'Se lasci in bianco questo spazio non verr&agrave; visualizzata la icona di Help per questo blocco',
+    53 => 'Abilitato',
+    54 => 'Registra',
+    55 => 'Annulla',
+    56 => 'Elimina',
+    57 => 'Sposta Blocco In Basso',
+    58 => 'Sposta Blocco in Alto',
+    59 => 'Sposta blocco sul lato destro',
+    60 => 'Sposta blocco sul lato sinistro',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor Eventi',
+    2 => 'Error',
+    3 => 'Titolo Evento',
+    4 => 'URL Evento',
+    5 => 'Data Inizio Evento',
+    6 => 'Data Fine Evento',
+    7 => 'Localit&agrave; Evento',
+    8 => 'Descrizione Evento',
+    9 => '(includi http://)',
+    10 => 'Devi fornire la data/orario, descrizione e localit&agrave; evento!',
+    11 => 'Lista Eventi',
+    12 => 'Per modificare o eliminare un evento, fai clic sull\'evento selezionato sotto.  <br>Per creare un nuovo evento fai clic su [ Nuovo Evento ] sopra. Fai clic su [C] per creare una copia di un evento esistente.',
+    13 => 'Titolo Evento',
+    14 => 'Data Inizio',
+    15 => 'Data Fine',
+    16 => 'Accesso Negato',
+    17 => "Stai tentando di accedere a un evento del quale non hai i permessi di modifica.  Questo tentativo sar&agrave; registrato. Prego <a href=\"{$_CONF['site_admin_url']}/event.php\">ritorna alla schermata di amministrazione</a>.",
+    18 => 'Nuovo Evento',
+    19 => 'Home Amministrazione',
+    20 => 'Registra',
+    21 => 'Annulla',
+    22 => 'Elimina',
+    23 => 'Data inizio errata.',
+    24 => 'Data fine errata.',
+    25 => 'Data fine prima di data inizio.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Articolo Precedente',
+    2 => 'Prossimo Articolo',
+    3 => 'Modalit&agrave;',
+    4 => 'Modo Ins.',
+    5 => 'Editor Articoli',
+    6 => 'Non ci sono articoli nel sistema',
+    7 => 'Autore',
+    8 => 'Registra',
+    9 => 'Anteprima',
+    10 => 'Annulla',
+    11 => 'Elimina',
+    12 => 'ID',
+    13 => 'Titolo',
+    14 => 'Argomento',
+    15 => 'Data',
+    16 => 'Testo Intro',
+    17 => 'Corpo',
+    18 => 'Visite',
+    19 => 'Commenti',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Lista Articoli',
+    23 => 'Per modificare o eliminare un articolo, fai clic sul numero dell\'articolo. <br>Per visualizzare un articolo, fai clic sul titolo dell\'articolo desiderato. <br>Per creare un nuovo articolo fai clic su [ Nuovo Articolo ] sopra.',
+    24 => 'L\'ID da te scelto per questo articolo &egrave; gi&agrave; in uso. Prego scegli un altro ID.',
+    25 => 'Error when saving story',
+    26 => 'Anteprima Articolo',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Errore nel caricamento File',
+    31 => 'Prego compila i campi di testo Titolo e Intro',
+    32 => 'Evidenz.',
+    33 => 'Ci pu&ograve; essere solo un articolo Evidenziato',
+    34 => 'Draft',
+    35 => 'Si',
+    36 => 'No',
+    37 => 'Altro da',
+    38 => 'Altro su',
+    39 => 'E-mail',
+    40 => 'Accesso negato',
+    41 => "Stai tentando di accedere a un articolo dove non hai i permessi di accesso. Questo tentativo sar&agrave; tracciato. Puoi visualizzare l\articolo in sola lettura sotto. Prego <a href=\"{$_CONF['site_admin_url']}/story.php\">ritorna alla schermata amministrazione articoli</a> una volta terminato.",
+    42 => "Stai tentando di accedere a un articolo dove non hai i permessi di accesso. Questo tentativo sar&agrave; tracciato. Prego <a href=\"{$_CONF['site_admin_url']}/story.php\">ritorna alla schermata amministrazione articoli</a>.",
+    43 => 'Nuovo Articolo',
+    44 => 'Home Amministrazione',
+    45 => 'Accesso',
+    46 => '<b>NOTA:</b> se modifichi questa data postadatandola, questo articolo non sar&agrave; pubblicato fino a suddetta data.  Questo significa inoltre che l\'articolo non sar&agrave; incluso nel tuo <em>RDF headline</em> e verr&agrave; ignorato dalla ricerca e dalle statistiche.',
+    47 => 'Immagini',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => 'Per aggiungere una delle immagini in allegato a questo articolo devi inserire del codice di testo speciale. Questo codice speciale &egrave; [imageX], [imageX_right] o [imageX_left] dove X &egrave; il numero della immagine allegata.  <br>NOTA: Devi utilizzare le immagini allegate. Altrimenti non sarai in grado di registrare il tuo articolo.<br><p><b>ANTEPRIMA</b>: L\'Anteprima di un articolo con immagini allegate risulta pi&ugrave; agevole da realizzare registrandolo come bozza AL POSTO di fare clic sul bottone anteprima. Usare il bottone anteprima solo con immagini che non sono allegate.',
+    52 => 'Elimina',
+    53 => 'non &egrave; utilizzata.  Devi includere questa immagine nell\'intro o nel corpo per poter registrare le tue modifiche',
+    54 => 'Immagini in Allegato Non Usate',
+    55 => 'Si sono verificati i seguenti errori durante la registrazione del tuo articolo. Prego correggi gli errori prima di registrarlo',
+    56 => 'Mostra Icona Argomento',
+    57 => 'Mostra Immagine non ridimensionata',
+    58 => 'Gestione Articoli',
+    59 => 'Opzione',
+    60 => 'Attivata',
+    61 => 'Archivazione Automatica',
+    62 => 'Eliminazione Automatica',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor Argomento',
+    2 => 'ID Argomento',
+    3 => 'Nome Argomento',
+    4 => 'Immagine Argomento',
+    5 => '(non utilizzare spazi)',
+    6 => 'Eliminando un argomento eliminerai anche gli articoli e i blocchi ad esso associati',
+    7 => 'Prego compila i campi ID Argomento e Nome Argomento',
+    8 => 'Manager Argomenti',
+    9 => 'Per modificare o eliminare un argomento, fai clic sull\'argomento selezionato. <br>Per creare un nuovo argomento fai clic sul [ Nuovo Argomento ] in alto. <br>Dovresti trovare il tuoi permessi di accesso per ogni argomento elencati fra parentesi. L\'Asterisco (*) indica l\'argomento di default.',
+    10 => 'Ordinamento',
+    11 => 'Articoli/Pagina',
+    12 => 'Accesso negato',
+    13 => "Stai cercando di accedere a un argomento del quale non hai i permessi di visualizzazione.  Questo tentativo &egrave; stato registrato. Prego <a href=\"{$_CONF['site_admin_url']}/topic.php\">ritorna alla pagina amministrazione argomenti</a>.",
+    14 => 'Metodo Ordinamento',
+    15 => 'alfabetico',
+    16 => 'per definizione &egrave;',
+    17 => 'Nuovo Argomento',
+    18 => 'Home Amministrazione',
+    19 => 'Registra',
+    20 => 'Annulla',
+    21 => 'Elimina',
+    22 => 'Default',
+    23 => 'fai di questo l\'argomento di default per gli inserimenti dei nuovi articoli',
+    24 => '(*)',
+    25 => 'Argomento di Archivio',
+    26 => 'rendi questo l\'argomento di default per gli articoli archiviati. Un solo argomento permesso.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor Utenti',
+    2 => 'ID Utente',
+    3 => 'Nome Utente',
+    4 => 'Nome Completo',
+    5 => 'Password',
+    6 => 'Livello di Sicurezza',
+    7 => 'Indirizzo E-mail',
+    8 => 'Homepage',
+    9 => '(non utilizzare spazi)',
+    10 => 'Prego compila i campi Nome Utente e Indirizzo E-mail',
+    11 => 'Manager Utenti',
+    12 => 'Per modificare o eliminare un utente, fai clic su un utente qu&igrave; sotto. <br>Per creare un nuovo utente fai clic sul bottone [ Nuovo Utente ] in alto. <br>Per eseguire una ricerca semplice inserisci parti di nome utente,indirizzo e-mail o nome completo (es.*son* or *.edu) nel form sottostante.',
+    13 => 'Liv. Sic.',
+    14 => 'Data Reg.',
+    15 => 'Nuovo Utente',
+    16 => 'Home Ammin.',
+    17 => 'Modifica Pass',
+    18 => 'Annulla',
+    19 => 'Elimina',
+    20 => 'Registra',
+    21 => 'Il Nome Utente che stai tentando di registrare &egrave; gi&agrave; presente nel database.',
+    22 => 'Errore',
+    23 => 'Aggiungi (Batch)',
+    24 => 'Importazione Batch di Utenti',
+    25 => 'Puoi importare un batch di utenti in Geeklog. Il file da importare deve essere delimitato da tab di spaziatura e deve avere i campi nel seguente ordine: nome completo, nome utente, indirizzo e-mail.  a ogni utente che importi sar&agrave; inviata una mail con una password casuale.  Devi avere un utente per ogni riga del file.  La non corretta esecuzione delle seguenti istruzioni potrebbe causare problemi risolvibili solo con del lavoro manuale sul database, quindi fai molta attenzione alle tue operazioni!',
+    26 => 'Ricerca',
+    27 => 'Risultati limite',
+    28 => 'Fai clic qu&igrave; per eliminare questa immagine',
+    29 => 'Percorso',
+    30 => 'Importa',
+    31 => 'Nuovo Utente',
+    32 => 'Processo Eseguito. Importato %d e incontrati %d problemi',
+    33 => 'invia',
+    34 => 'Errore: Devi specificare un file da caricare.',
+    35 => 'Ultimo Accesso',
+    36 => '(mai)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Approva',
+    2 => 'Elimina',
+    3 => 'Modifica',
+    4 => 'Profilo',
+    10 => 'Titolo',
+    11 => 'Data inizio',
+    12 => 'URL',
+    13 => 'Categoria',
+    14 => 'Data',
+    15 => 'Argomento',
+    16 => 'Nome Utente',
+    17 => 'Nome Completo',
+    18 => 'E-mail',
+    34 => 'Console di Amministrazione',
+    35 => 'Inserimento Articolo',
+    36 => 'Inserimento Link',
+    37 => 'Inserimento Evento',
+    38 => 'Invia',
+    39 => 'Non ci sono inserimenti da moderare al momento',
+    40 => 'Inserimenti Utente'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Domenica',
+    2 => 'Luned&igrave;',
+    3 => 'Marted&igrave;',
+    4 => 'Mercoled&igrave;',
+    5 => 'Gioved&igrave;',
+    6 => 'Venerd&igrave;',
+    7 => 'Sabato',
+    8 => 'Aggiungi evento',
+    9 => 'Eventi %s',
+    10 => 'Eventi per',
+    11 => 'Calendario Principale',
+    12 => 'Il mio calendario',
+    13 => 'Gennaio',
+    14 => 'Febbraio',
+    15 => 'Marzo',
+    16 => 'Aprile',
+    17 => 'Maggio',
+    18 => 'Giugno',
+    19 => 'Luglio',
+    20 => 'Agosto',
+    21 => 'Settembre',
+    22 => 'Ottobre',
+    23 => 'Novembre',
+    24 => 'Dicembre',
+    25 => 'Ritorna a ',
+    26 => 'Tutti i giorni',
+    27 => 'Settimana',
+    28 => 'Calendario personale per',
+    29 => 'Calendario pubblico',
+    30 => 'Elimina evento',
+    31 => 'Inserisci',
+    32 => 'Evento',
+    33 => 'Data',
+    34 => 'Tempo',
+    35 => 'Inserimento veloce',
+    36 => 'Invia',
+    37 => 'Spiacenti, la funzione calendario personale non &egrave; abilitato su questo sito',
+    38 => 'Editor Eventi Personali',
+    39 => 'Giorno',
+    40 => 'Settimana',
+    41 => 'Mese'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'Da',
+    3 => 'Rispondi a',
+    4 => 'Soggetto',
+    5 => 'Commento',
+    6 => 'Invia a:',
+    7 => 'Tutti gli utenti',
+    8 => 'Amministrazione',
+    9 => 'Opzioni',
+    10 => 'HTML',
+    11 => 'Messaggio urgente!',
+    12 => 'Invia',
+    13 => 'Azzera',
+    14 => 'Ignora preferenze utente',
+    15 => 'Errore nell\'invio a: ',
+    16 => 'Messaggio inviato correttamente a: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Invia un'altro messaggio</a>",
+    18 => 'A',
+    19 => 'NOTA: se vuoi inviare un messaggio a tutti i membri del sito, seleziona il gruppo Logged-in Users dalla lista.',
+    20 => "Messaggi inviati correttamente <successcount> e messaggi non inviati <failcount>. Se lo necessiti, i dettagli di ogni messaggio sono elencati sotto.  Altrimenti puoi <a href=\"{$_CONF['site_admin_url']}/mail.php\">Inviare un'altro messaggio</a> o puoi <a href=\"{$_CONF['site_admin_url']}/moderation.php\">ritornare alla pagina amministrazione</a>.",
+    21 => 'Fallito',
+    22 => 'Eseguito correttamente',
+    23 => 'Nessun errore',
+    24 => 'Nessuna esecuzione',
+    25 => '-- Seleziona Gruppo --',
+    26 => 'Prego compila tutti i campi del form e seleziona un gruppo dal men&ugrave;  a tendina.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'L\'Installazione di plug-in potrebbe provocare danni alla tua installazione di Geeklog ed eventualmente anche il tuo sistema. &Egrave; importante che tu installi solo i plug-in scaricati dalla <a href="http://www.geeklog.net" target="_blank">Homepage di Geeklog</a> in quanto questi plug-in vengono regolarmente testati da noi su numerosi sistemi operativi. E\' altres&igrave; importante che tu capisca che il processo di installazione richiede l\'esecuzione di alcuni comandi di sistema che potrebbero intaccare la sicurezza del sistema stesso (in particolare se utilizzi plug-in di terze parti). Anche con questo avvertenza che ti diamo, noi non garantiamo il successo della installazione e non siamo responsabili di eventuali danni causati dall\'installazione di plug-in. In altre parole, installa a tuo rischio!. Per gli amanti del rischio,  indicazioni su come installare manualmente un plug-in sono incluse in ogni pacchetto plug-in.',
+    2 => 'Note di Installazione Plug-in',
+    3 => 'Form Installazione Plug-in',
+    4 => 'Plug-in File',
+    5 => 'Lista Plug-in',
+    6 => 'Attenzione: Plug-in gi&agrave; installato!',
+    7 => 'Il plug-in che vuoi installare &egrave; gia installato nel sistema. Elimina il plug-in esistente prima di reinstallare la nuova versione',
+    8 => 'Controllo Compatibilit&agrave; Plug-in Fallita',
+    9 => 'Questo plug-in richiede una nuova versione di Geeklog. Puoi aggiornare la tua copia di <a href=http://www.geeklog.net>Geeklog</a> o prendere una nuova versione del plug-in.',
+    10 => '<br><b>Al momento nessun plug-in risulta installato.</b><br><br>',
+    11 => 'Per modificare o eliminare un plug-in, fai clic sul numero del plug-in dalla lista sottostante. <br>Per apprendere su come usare il plug-in, fai clic sul nome del plug-in e sarai redirezionato direttamente al sito del plug-in. <br>Per installare o aggiornare un plug-in fai clic su nuovo-plug-in sopra.',
+    12 => 'nessun nome di plug-in fornito da plugineditor()',
+    13 => 'Editor Plug-in',
+    14 => 'Nuovo Plug-in',
+    15 => 'Home Amministrazione',
+    16 => 'Nome Plug-in',
+    17 => 'Versione Plug-in',
+    18 => 'Versione Geeklog',
+    19 => 'Abilitato',
+    20 => 'Si',
+    21 => 'No',
+    22 => 'Installa',
+    23 => 'Registra',
+    24 => 'Annulla',
+    25 => 'Elimina',
+    26 => 'Nome Plug-in',
+    27 => 'Homepage Plug-in',
+    28 => 'Versione Plug-in',
+    29 => 'Versione Geeklog',
+    30 => 'Elimina Plug-in?',
+    31 => 'Sei sicuro di voler eliminare questo plug-in? Cos&igrave; facendo eliminerai anche tutti i file associati, dati e struttura utilizzati da questo plug-in. Se sei sicuro, fai clic su elimina nel form sottostante.',
+    32 => '<p><b>Errore, formato tag AutoLink errato</b></p>',
+    33 => 'Versione Codice',
+    34 => 'Aggiorna',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'crea feed',
+    2 => 'registra',
+    3 => 'elimina',
+    4 => 'annulla',
+    10 => 'Content Syndication',
+    11 => 'Nuovo Feed',
+    12 => 'Home Admin',
+    13 => 'Per modificare o eliminare un feed, fai clic sul titolo del feed sotto. Per creare un nuovo feed, fai clic su Nuovo Feed sopra.',
+    14 => 'Titolo',
+    15 => 'Tipo',
+    16 => 'Nome File',
+    17 => 'Formato',
+    18 => 'ultimo aggiornamento',
+    19 => 'Abilitato',
+    20 => 'Si',
+    21 => 'No',
+    22 => '<i>(nessun feed)</i>',
+    23 => 'tutte gli Articoli',
+    24 => 'Editor Feed',
+    25 => 'Titolo Feed',
+    26 => 'Limita',
+    27 => 'Lunghezza elementi',
+    28 => '(0 = senza testo, 1 = testo completo, altro = limita a questo numero di caratteri.)',
+    29 => 'Descriztione',
+    30 => 'Ultimo Aggiornamento',
+    31 => 'Set Caratteri',
+    32 => 'Lingua',
+    33 => 'Contenuti',
+    34 => 'Elementi',
+    35 => 'Ore',
+    36 => 'Seleziona il tipo del feed',
+    37 => 'Hai almeno un plug-in installato che supporta la content syndication. Sotto devi selezionare se vuoi creare un feed Geeklog o un feed da uno dei plug-in.',
+    38 => 'Errore: Campi Mancanti',
+    39 => 'Prego inserire Titolo Feed, Descrizione e Nome File.',
+    40 => 'Prego inserire un numero di elementi o un numero di ore.',
+    41 => 'Link',
+    42 => 'Eventi',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "La password &egrave; stata inviata all'indirizzo e-mail da te fornito, dovrebbe arrivare a momenti. Prego segui le istruzioni del messaggio per accedere al sito e grazie per il tuo supporto a {$_CONF['site_name']}",
+    2 => "Grazie per aver inserito un articolo in {$_CONF['site_name']}.  L'evento &egrave; stato inviato al nostro staff per l'approvazione. Se approvato, il tuo articolo sar&agrave; disponibile per la visualizzazione nel nostro sito.",
+    3 => "Grazie per aver inserito un link in {$_CONF['site_name']}.  L'evento &egrave; stato inviato al nostro staff per l'approvazione.  Se approvato il tuo link sar&agrave; visibile nella sezione <a href={$_CONF['site_url']}/links.php>links</a>.",
+    4 => "Grazie per aver inserito un evento in {$_CONF['site_name']}.  L'evento &egrave; stato inviato al nostro staff per l'approvazione.  Se approvato, il tuo evento sar&agrave; visibile nel nostro <a href={$_CONF['site_url']}/calendar.php>calendario</a>.",
+    5 => 'Le tue informazioni utente sono state registrate correttamente.',
+    6 => 'Le tue preferenze di visualizzazione sono state registrate correttamente.',
+    7 => 'Le tue preferenze commenti sono state registrate correttamente.',
+    8 => 'Sei uscito dall\'area utenti correttamente.',
+    9 => 'Il tuo articolo &egrave; stato registrato correttamente.',
+    10 => 'L\'articolo &egrave; stato eliminato correttamente.',
+    11 => 'Il tuo blocco &egrave; stato registrato correttamente.',
+    12 => 'Il blocco &egrave; stato eliminato correttamente.',
+    13 => 'Il tuo argomento &egrave; stato registrato correttamente.',
+    14 => 'L\'argomento e tutte gli articoli e blocchi associati sono stati eliminati correttamente.',
+    15 => 'Il tuo link &egrave; stato registrato correttamente.',
+    16 => 'Il link &egrave; stato eliminato correttamente.',
+    17 => 'Il tuo evento &egrave; stato registrato correttamente.',
+    18 => 'L\'evento &egrave; stato eliminato correttamente.',
+    19 => 'Il tuo sondaggio &egrave; stato registrato correttamente.',
+    20 => 'La votazione &egrave; stata eliminata correttamente.',
+    21 => 'Il nuovo utente &egrave; stato registrato correttamente.',
+    22 => 'L\'utente &egrave; stato eliminato correttamente',
+    23 => 'Errore durante il tentativo di aggiungere l\'evento al tuo calendario. ID Evento mancante.',
+    24 => 'L\'Evento &egrave; stato registrato correttamente  nel tuo calendario',
+    25 => 'Impossibile aprire il calendario personale, entra prima nel sito',
+    26 => 'L\'Evento &egrave; stato rimosso correttamente dal tuo calendario personale',
+    27 => 'Il Messaggio &egrave; stato inviato correttamente.',
+    28 => 'Il plug-in &egrave; stato registrato correttamente',
+    29 => 'Spiacenti, il calendario personale non &egrave; abilitato su questo sito',
+    30 => 'Accesso negato',
+    31 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione articoli.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    32 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione argomenti.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    33 => 'Spiacenti, non hai i permessi per accedere alla pagina amminitrazione blocchi.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    34 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione link.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    35 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione eventi.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    36 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione sondaggi.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    37 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione utenti.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    38 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione plug-in.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    39 => 'Spiacenti, non hai i permessi per accedere alla pagina amministrazione mail.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    40 => 'Messaggio di Sistema',
+    41 => 'Spiacenti, non hai i permessi per accedere alla pagina sostituzione parole.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    42 => 'La tua parola &egrave; stata registrata correttamente.',
+    43 => 'La parola &egrave; stata eliminata correttamente.',
+    44 => 'Il plug-in &egrave; stato installato correttamente!',
+    45 => 'Il plug-in &egrave; stato eliminato correttamente.',
+    46 => 'Spiacenti, non hai i permessi per accedere all\'utility database backup.  Prego nota che tutti i tentativi di accesso non autorizzati vengono registrati.',
+    47 => 'Questa funzionalit&agrave; funziona solo sotto *nix. Se Geeklog sta girando sotto un sistema operativo *nix la tua cache verr&agrave; regolarmente azzerata. Se sei su Windows, dovrai necessariamente cercare i files con nome adodb_*.php ed eliminarli manualmente.',
+    48 => "Grazie per la tua richiesta di registrazione a {$_CONF['site_name']}. Il nostro Team valuter&agrave; la tua richiesta. Se approvata ti verr&agrave; inviata via posta elettronica la password alla casella e-mail da te specificata.",
+    49 => 'Il tuo gruppo &egrave; stato registrato correttamente.',
+    50 => 'Il gruppo &egrave; stato eliminato correttamente.',
+    51 => 'Questo Nome Utente &egrave; gi&agrave; in uso. Prego selezionane un\'altro.',
+    52 => 'L\'indirizzo e-mail da t&egrave; inserito non sembra essere un indirizzo e-mail valido.',
+    53 => 'La tua nuova password &egrave; stata accettata. Prego usa la tua nuova password per riaccedere al sito.',
+    54 => 'La tua richiesta per una nuova password &egrave; spirata. Prego riprova di nuovo.',
+    55 => 'Una e-mail ti &egrave; stata inviata e dovrebbe arrivare a breve. Prego segui le istruzioni contentute nel messaggio per impostare una nuova password per il tup account.',
+    56 => 'L\'indirizzo e-mail da te fornito &egrave; gi&agrave; in uso per un altro account.',
+    57 => 'Il tuo account &grave; stato eliminato.',
+    58 => 'Il tuo feed &egrave stato registrato correttamente.',
+    59 => 'Il feed &egrave stato eliminato correttamente.',
+    60 => 'Il plug-in &egrave stato aggiornato correttamente',
+    61 => 'Plug-in %s: Segnaposto messaggio sconosciuto',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Accessi',
+    'ownerroot' => 'Proprietario/Root',
+    'group' => 'Gruppo',
+    'readonly' => 'Sola-Lettura',
+    'accessrights' => 'Permessi di Accesso',
+    'owner' => 'Proprietario',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTA: i membri sono tutti gli utenti registrati nel sito e anonimi tutti i rimanenti visitatori non registrati.',
+    'securitygroups' => 'Sicurezza Gruppi',
+    'editrootmsg' => "Ricorda! Anche se sei un Utente Amministratore, non puoi modificare l'utente root senza essere prima entrato con l'account di root. Puoi modificare tutti gli gli altri utenti ad eccezzione dell'utente root. Prego nota che tutti i tentativi di modificare illegalmente l'utente root vengono registrati. Ritorna a <a href=\"{$_CONF['site_admin_url']}/user.php\">Pagina Ammin. Utenti</a>.",
+    'securitygroupsmsg' => 'Seleziona la casella per i gruppi nei quali vuoi inserire l\'utente.',
+    'groupeditor' => 'Editor Gruppi',
+    'description' => 'Descrizione',
+    'name' => 'Nome',
+    'rights' => 'Permessi',
+    'missingfields' => 'Campi Mancanti',
+    'missingfieldsmsg' => 'Devi fornire un nome e una descrizione per il gruppo',
+    'groupmanager' => 'Manager Gruppi',
+    'newgroupmsg' => 'Per modificare o eliminare un gruppo, selezionalo dalla lista sottostante. <br>Per creare un nuovo gruppo fai clic su [ Nuovo Gruppo ] sopra. <br>Considera che il gruppo principale non pu&ograve; essere eliminato in quanto usato dal sistema.',
+    'groupname' => 'Nome Gruppo',
+    'coregroup' => 'Gruppo Principale',
+    'yes' => 'Si',
+    'no' => 'No',
+    'corerightsdescr' => "Questo Gruppo di {$_CONF['site_name']} &egrave; il gruppo principale. Per definizione i permessi di questo gruppo non possono essere modificati.  Sotto c'&egrave; la lista in sola lettura dei permessi a cui questo gruppo ha accesso.",
+    'groupmsg' => 'Il modello di sicurezza per i Gruppi in questo sito &egrave; di tipo gerarchico.  Aggiungendo questo gruppo a uno qualsiasi dei gruppi elencati sotto fa s&igrave; che il gruppo prenda gli stessi permessi del gruppo superiore.  Dove possibile siete incoraggiati a usare i gruppi sottostanti per dare i permessi al gruppo.  Se avete necessit&agrave; di dare dei permessi personalizzati al gruppo potete selezionare i permessi fra le varie funzioni del sito nella sezione chiamata \'Permessi\'.  Per aggiungere questo gruppo a uno dei gruppi sottostanti seleziona la spunta nella caselle del gruppo(i) che desideri modificare.',
+    'coregroupmsg' => "Questo gruppo &egrave; il gruppo principale di {$_CONF['site_name']} .  Normalmente i gruppi che sono sottostanti a questo gruppo non posono essere modificati.  Sotto puoi trovare una lista in sola lettura dei gruppi associati a questo gruppo.",
+    'rightsdescr' => 'Alcuni permessi di accesso ai gruppi possono essere settati direttamente al gruppo o a un gruppo differente facente parte del gruppo.  Quelli che vedi sotto non selezionati sono i permessi che sono stati impostati a questo gruppo in quanto facente parte di altri gruppi e quindi ereditati.  I permessi selezionabili sono i permessi che posono essere dati direttamente a questo gruppo.',
+    'lock' => 'Bloccato',
+    'members' => 'Membro',
+    'anonymous' => 'Anonimo',
+    'permissions' => 'Permessi',
+    'permissionskey' => 'R = lettura, E = modifica, permesso di modifica implica permessi di lettura',
+    'edit' => 'Modifica',
+    'none' => 'Nessuno',
+    'accessdenied' => 'Accesso negato',
+    'storydenialmsg' => "Non disponi dei permessi per visualizzare questo articolo. Questo perch&egrave; non sei un membro registrato di {$_CONF['site_name']}.  Prego <a href=users.php?mode=new> diventa un membro</a> of {$_CONF['site_name']} per avere pieno accesso al sito!",
+    'eventdenialmsg' => "Non disponi dei permessi per visualizzare questo evento. Questo perch&egrave; non sei un membro registrato di {$_CONF['site_name']}.  Prego <a href=users.php?mode=new> diventa un membro</a> of {$_CONF['site_name']} per avere pieno accesso al sito!",
+    'nogroupsforcoregroup' => 'Questo Gruppo non ha alcun collegamento con gli altri gruppi',
+    'grouphasnorights' => 'Questo Gruppo non ha accesso a nessuna funzione amministrativa del sito',
+    'newgroup' => 'Nuovo Gruppo',
+    'adminhome' => 'Home Amministratore',
+    'save' => 'Registra',
+    'cancel' => 'Annulla',
+    'delete' => 'Elimina',
+    'canteditroot' => 'Hai provato a modificare il Gruppo Root ma non fai parte del gruppo stesso e quindi la tua modifica non &egrave; consentita. Prego contatta gli Amministratori se ritieni questo messaggio un errore',
+    'listusers' => 'Lista Utenti',
+    'listthem' => 'lista',
+    'usersingroup' => 'Utenti nel gruppo %s',
+    'usergroupadmin' => 'Amministrazione Gruppi Utenti',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Membri Disponibili',
+    'groupmembers' => 'Membri del Gruppo',
+    'canteditgroup' => 'Per modificare questo gruppo, devi esserne membro. Prego contatta l\'amministratore del sistema se pensi si tratti di un errore.',
+    'cantlistgroup' => 'Per vedere i membri di questo gruppo, deve esserne membro tu stesso. Prego contatta l\'amministratore del sistema se pensi si tratti di un errore.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Ultimi 10 Backup',
+    'do_backup' => 'Esegui il Backup',
+    'backup_successful' => 'Il Backup &egrave; stato eseguito correttamente.',
+    'db_explanation' => 'Per creare un nuovo Backup del tuo sistema Geeklog, fai clic sul bottone sottostante',
+    'not_found' => "Percorso non corretto o utility mysqldump non eseguibile.<br>Controlla il percorso <strong>\$_DB_mysqldump_path</strong> in config.php.<br>La variabile attualmente &egrave; definit&agrave; come: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Fallito: La dimensione del File era di 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} non esiste o non &egrave; una directory",
+    'no_access' => "ERRORE: La Directory {$_CONF['backup_path']} non &egrave; accessibile.",
+    'backup_file' => 'File di backup',
+    'size' => 'Dim.',
+    'bytes' => 'Byte',
+    'total_number' => 'Numero Totale di backup: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Contatti',
+    3 => 'Pubblica',
+    4 => 'Link',
+    5 => 'Sondaggi',
+    6 => 'Calendario',
+    7 => 'Statistiche Sito',
+    8 => 'Preferenze',
+    9 => 'Ricerca',
+    10 => 'Ricerca Avanzata',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Errore 404',
+    2 => 'Attenzione, Abbiamo cercato in tutto il sito ma l\'argomento <b>%s</b> non &egrave; stato trovato.',
+    3 => 'Siamo spiacenti, ma il file da te richiesto non esiste. Prego controlla nella pagina principale o nella pagina di ricerca per vedere se puoi trovare quanto da te richiesto.'
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Autenticazione richiesta',
+    2 => 'Spiacenti, per accedere a questa area devi essere registrato come utente.',
+    3 => 'Entra',
+    4 => 'Nuovo Utente'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'La funzionalit&agrave; PDF &egrave; stata disabilitata',
+    2 => 'Il documento fornito non &grave; stato renderizzato. Il documento &egrave; stato ricevuto ma non &grave stato possibile processarlo. Prego controlla di aver inviato solo documenti in formato HTML che siano stati scritti secondo lo standard xHTML. Prego nota che documenti estremamente complessi potrebbero non esserre renderizzati correttamente o non esserlo affatto. Il documento risultante dal tuo tentativo era di 0 byte di lunghezza, ed &grave; stato eliminato. Se sei sicuro che il tuo documento dovesse essere renderizzato per bene, prego reinvialo.',
+    3 => 'Errore sconosciuto nella generazione del PDF',
+    4 => "Dati pagina non forniti, o vuoi utilizare lo strumento di generazione PDF ad-hoc sotto. Se pensi di aver ricevuto questa pagina\n per errore, contatta prego l\'amminstratore di sistema. Altrimenti, puoi utilizzare il form sottostante per generare PDF in modalit&agrave; ad-hoc.",
+    5 => 'Carico il tuo documento.',
+    6 => 'Attendi prego mentre il tuo documento viene caricato.',
+    7 => 'Puoi fare clic con il pulsante destro sotto e scegliere \'registra  collegamento...\' o \'scarica documento collegato...\' per registrare una copia del documento.',
+    8 => "Il percorso fornito nel file di configurazione per l\'eseguibile di  HTMLDoc &egrave; invalido o questo sistema non pu&ograve; eseguirlo. Prego contatta l\'amministratore del sito se questo problema\npersiste.",
+    9 => 'Generatore PDF',
+    10 => "Questo &egrave; lo strumento di Generazione PDF Ad-hoc. Prover&agrave; a convertire qualsiasi URL gli si fornisca in un PDF. Prego nota che alcune pagine web non saranno visualizzate correttamente con questa funzionalit&agrave;. Questa\n&grave; una limitazione dello strumento di generazione PDF HTMLDoc e tali errori non dovrebbero essere segnalati all\'amministratore di questo sito",
+    11 => 'URL',
+    12 => 'Genera PDF!',
+    13 => 'La configurazione PHP su questo server non permette di utilizzare URL con il comando fopen(). L\'amministratore di sistema deve modificare il file  php.ini ed impostare allow_url_fopen ad On',
+    14 => 'Il PDF da te richiesto o non esiste o hai provato ad accedervi illegalmente.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/japanese.php 1.4.0sr5-1/cpanel-glprivate/language/japanese.php
--- 1.3.11sr1/cpanel-glprivate/language/japanese.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/japanese.php	2006-08-08 02:39:06.000000000 -0500
@@ -6,7 +6,8 @@
 # This is the Japanese language page for GeekLog!
 # Special thanks to Mischa Polivanov for his work on this project
 #
-# Copyright (C) 2002,2003 SAKATA Yusuke
+# Copyright (C) 2002,2003,2004,2005 SAKATA Yusuke
+#               2006 Geeklog IvySOHO Project, SAKATA Yusuke
 # sakata@ecofirm.com
 #
 # This program is free software; you can redistribute it and/or
@@ -54,41 +55,41 @@
     10 => 'ǧԤꥹ',
     11 => '',
     12 => '֥å',
-    13 => '',
+    13 => '',
     14 => '',
     15 => '٥Ⱦ',
-    16 => 'ɼڡ',
-    17 => '桼',
+    16 => '󥱡',
+    17 => '桼',
     18 => 'SQL Query',
     19 => '',
-    20 => '桼:',
-    21 => '̾',
+    20 => '桼:',
+    21 => '桼̾',
     22 => 'ID',
     23 => '٥',
-    24 => 'ƿ̾',
-    25 => 'ֻ',
-    26 => 'ȤƼԤǤˤƤʤΤǤꡢȴԤϤʤǤ򤪤ΤǤϤޤ',
+    24 => 'ȥ桼',
+    25 => 'Ȥɲ',
+    26 => 'ȤƼԤǤˤƤʤΤǤꡢȴԤǤ餤ޤ',
     27 => 'ǿ',
     28 => '',
     29 => 'ȤϤޤ',
     30 => 'ε',
     31 => 'ѤǤHTML:',
-    32 => '顼ϿƤʤ桼̾Ǥ',
-    33 => '顼ե˽񤭹ʤ',
+    32 => '顼ϿƤʤ桼̾Ǥ',
+    33 => '顼ե˽񤭹ޤ',
     34 => '顼',
     35 => '',
     36 => 'on',
     37 => 'ƵϤޤ',
-    38 => 'Content Syndication',
+    38 => 'RSSۿ',
     39 => '',
     40 => ' ʤ <tt>php.ini</tt> ǡ<tt>register_globals = Off</tt> ˤʤäƤ褦ǤGeeklogϡ <tt>register_globals</tt>  <strong>on</strong> ˤʤäƤʤФʤޤ GeeklogȤˡ <strong>on</strong> ˤơWebСƵưƤ',
-    41 => 'ȥ桼',
+    41 => 'ȥ桼',
     42 => 'ƼԤ:',
-    43 => 'ֻ',
+    43 => 'Ȥɲ',
     44 => 'ε',
     45 => 'MySQLΥ顼ֹϡ',
     46 => 'MySQLΥ顼åϡ',
-    47 => '桼',
+    47 => '桼',
     48 => 'Ⱦ',
     49 => '',
     50 => 'SQLʸ˥顼ޤ',
@@ -96,65 +97,75 @@
     52 => '',
     53 => '',
     54 => 'ե뤬ޤ',
-    55 => 'ǥ顼',
+    55 => 'ξǥ顼ޤ->',
     56 => 'ɼ',
     57 => 'ѥ',
-    58 => 'login',
-    59 => "ȤʤС<a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ͽ</a>Ǥޤ",
+    58 => '',
+    59 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ͽ</a>",
     60 => 'Ȥ',
     61 => 'Ȥκ',
-    62 => '١',
+    62 => '',
     63 => 'Ȥ',
     64 => 'ͧͤ˥᡼뤹',
     65 => 'Ѳ',
     66 => 'Ŀͥ',
-    67 => 'ޡ ',
+    67 => '褦 ',
     68 => 'ۡ',
     69 => 'Ϣ',
     70 => '',
-    71 => '',
-    72 => 'Ȥ륵',
-    73 => 'ޤǤɼ',
+    71 => '',
+    72 => '',
+    73 => '󥱡Ȱ',
     74 => '',
-    75 => 'ʣʸ',
+    75 => 'ץ',
     76 => '',
-    77 => 'ץ饰ʳĥǽ',
+    77 => 'ץ饰',
     78 => '줫ͽ',
     79 => '',
     80 => 'ε',
     81 => 'ε',
     82 => 'ְ',
-    83 => 'Ȥο',
+    83 => '',
     84 => '󥯽',
     85 => '48 ְ',
-    86 => 'ȤϤʤ',
+    86 => '  -',
     87 => 'ʺǶᣲ֡',
-    88 => '󥯤ɲäƤʤ',
-    89 => 'äͽϤʤ',
+    88 => '  -',
+    89 => '  -',
     90 => 'ۡ',
     91 => 'ڡ֡',
     92 => '',
     93 => 'Copyright',
     94 => 'ܥڡΤ٤ƤξɸϤ줾νͭԤ˵°ޤ',
     95 => 'Powered By',
-    96 => 'Groups',
-    97 => 'Word List',
-    98 => 'Plug-ins',
-    99 => 'η',
+    96 => '롼',
+    97 => 'ɥꥹ',
+    98 => 'ץ饰',
+    99 => '',
     100 => 'Ϥޤ',
-    101 => 'ĿŪͽ',
+    101 => 'Ŀͤͽ',
     102 => 'Τͽ',
-    103 => 'ǡ١ΥХåå',
+    103 => 'DBΥХåå',
     104 => '',
-    105 => '桼˥᡼',
+    105 => '롼פ˥᡼',
     106 => '',
-    107 => 'GL Version Test',
+    107 => 'С',
     108 => 'å򥯥ꥢ',
-    109 => 'Report abuse',
+    109 => 'ǤȤ',
     110 => 'Ƥ򥵥ȤδԤΤ餻',
-    111 => 'View PDF Version',
-    112 => 'Ͽ桼',
-    113 => 'ʸ'
+    111 => 'PDFǱ',
+    112 => 'Ͽ桼',
+    113 => 'Geeklogɥ',
+    114 => 'ȥåХå',
+    115 => 'ȥåХåϤޤ',
+    116 => 'ȥåХå',
+    117 => 'ΰ',
+    118 => '³Υڡؤɤ',
+    119 => "<a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">ѥɤκȯ</a>",
+    120 => 'ΥȤؤα³󥯡Permanent link',
+    121 => ' (%d)',
+    122 => 'ȥåХå (%d)',
+    123 => '٤ƤHTML'
 );
 
 ###############################################################################
@@ -162,13 +173,13 @@
 
 $LANG02 = array(
     1 => '٥Ⱦ󥫥',
-    2 => 'ǰʤ顢ϥ٥Ȥޤ',
-    3 => ':',
-    4 => ':',
-    5 => 'ܺ:',
+    2 => 'ϥ٥Ȥޤ',
+    3 => '',
+    4 => '',
+    5 => 'ܺ',
     6 => '٥Ȥɲ',
     7 => '줫ͽ',
-    8 => 'ĿͥˤΥ٥ȤɲäȡָĿͥפ桼˥塼򤹤뤳ȤǸ뤳Ȥޤ',
+    8 => 'ĿͥˤΥ٥ȤɲäȡָĿͥפ桼˥塼򤹤뤳ȤǸ뤳ȤǤޤ',
     9 => 'Ŀͥɲ',
     10 => 'Ŀͥ',
     11 => "Υ٥Ȥ{$_USER['username']}θĿͥɲ",
@@ -186,37 +197,37 @@
     2 => 'ˡ',
     3 => '',
     4 => 'Ȥ',
-    5 => '桼̾',
+    5 => '桼̾',
     6 => 'ȤƤ뤿ˤϥ󤷤ƤȤʤвΥեȤäƿȤǤޤ',
     7 => 'ʤ',
     8 => " ˥ȤƤޤƤƤδ֤ {$_CONF['commentspeedlimit']} ðʾ峫Ƥ",
     9 => '',
-    10 => 'Send Report',
+    10 => 'ݡȤ',
     11 => 'Ȥ',
     12 => 'Ƥ뤿ˤϡȥȥƤɬפǤ',
     13 => 'ʤθĿ;',
     14 => 'ɽƥ',
-    15 => 'Report this post',
+    15 => 'ƤΥݡ',
     16 => 'ȥ',
     17 => '顼Ǥ',
     18 => 'ջ',
     19 => 'ƤˤäƤƤ',
-    20 => '餺¾ε˥Ȥ褦ˤƤ',
+    20 => 'Ǥ餺¾ε˥Ȥ褦ˤƤ',
     21 => 'ƱƤʤ褦ˤ뤿¾οͤƤ褯ɤǤ',
-    22 => 'Ƥʬ褦ʥȥդƤ',
+    22 => 'Ƥ狼褦ʥȥĤƤ',
     23 => '᡼륢ɥ쥹ϡɽޤ',
-    24 => 'ƿ̾桼',
+    24 => 'ȥ桼',
     25 => 'Ƥ򥵥ȴԤΤ餻ޤǤ',
-    26 => '%s 󤬰ʲƤŬڤȻŦƤޤ',
-    27 => 'ŬڤǤΤ餻'
+    26 => '%s 󤬰ʲƤŬڤȻŦƤޤ',
+    27 => 'Ŭ'
 );
 
 ###############################################################################
 # users.php
 
 $LANG04 = array(
-    1 => '桼',
-    2 => '桼̾',
+    1 => '桼',
+    2 => '桼̾',
     3 => '̾',
     4 => 'ѥ',
     5 => 'Email',
@@ -226,21 +237,21 @@
     9 => 'ѹ¸',
     10 => 'Ƕ10Υ',
     11 => 'ȤϤޤ',
-    12 => '桼ꡧ',
+    12 => '桼ꡧ',
     13 => 'E-mailƤɤ',
-    14 => 'Υѥɤϼư줿ΤǤ顢ѥɤѹ򤪤ᤷޤѥɤϡȤ˥󤷤ơ֥桼פ򥯥åѹǤޤ',
-    15 => "{$_CONF['site_name']} ǻѤ뤢ʤΥȤޤΥȤȤˤϡΥ桼̾ȥѥɤǥ󤷤ƤǰΤᡢΥ᡼¸ƤƤ",
+    14 => 'Υѥɤϼư줿ΤǤ顢ѥɤѹ򤪤ᤷޤѥɤϡȤ˥󤷤ơ֥桼פ򥯥åѹǤޤ',
+    15 => "{$_CONF['site_name']} ǻѤ뤢ʤΥȤޤΥȤȤˤϡΥ桼̾ȥѥɤǥ󤷤ƤǰΤᡢΥ᡼¸ƤƤ",
     16 => 'Ⱦ',
     17 => 'Ȥޤ',
     18 => 'Υ᡼륢ɥ쥹ϡͭʥɥ쥹ǤϤʤ褦Ǥ',
-    19 => '桼̾᡼륢ɥ쥹Ǥ˻ȤƤޤ',
+    19 => '桼̾᡼륢ɥ쥹Ǥ˻ȤƤޤ',
     20 => 'Υ᡼륢ɥ쥹ϡͭʥɥ쥹ǤϤʤ褦Ǥ',
     21 => '顼',
     22 => "{$_CONF['site_name']}ΥȤ",
-    23 => "{$_CONF['site_name']}˥ȤȡȤ䵭ƤʤܥȤεǽե˻Ѥ뤳ȤޤȤʤСƿ̾ץ桼ȤƤƤǤޤ󡣤ޤϿ줿᡼륢ɥ쥹ФɽޤΤǤ¿",
+    23 => "{$_CONF['site_name']}˥ȤȡȤ䵭ƤʤܥȤεǽե˻Ѥ뤳ȤǤޤȤʤХȥ桼ȤƤƤǤޤ󡣤ޤϿ줿᡼륢ɥ쥹ФɽޤΤǤ¿",
     24 => 'ѥɤϡϤ줿᡼륢ɥ쥹ޤ',
     25 => 'ѥɤʬʤͤϤ顣',
-    26 => 'Ͽ˻Ѥ桼̾<em>ޤ</em>᡼륢ɥ쥹Ϥơ֥ѥפ򥯥åƤѥɤꤹˡϿƤ᡼륢ɥ쥹Ƥޤ',
+    26 => 'Ͽ˻Ѥ桼̾<em>ޤ</em>᡼륢ɥ쥹Ϥơ֥ѥפ򥯥åƤѥɤꤹˡϿƤ᡼륢ɥ쥹Ƥޤ',
     27 => 'Ȥκ',
     28 => 'ѥ',
     29 => 'Ȥޤ',
@@ -275,53 +286,69 @@
     58 => '¤ؤ',
     59 => 'Ȥκ',
     60 => 'Ȥɽˡ',
-    61 => 'ΤŤΤΤɤ餬褬',
+    61 => '',
     62 => 'ͤ100Ǥ',
-    63 => "ѥɤ᡼ޤΤǡޤʤϤϤǤåˡ񤫤ƤޤΤǡͤˤƤ{$_CONF['site_name']}ѤƤäƤ꤬Ȥޤ",
+    63 => "ѥɤ᡼ޤΤǡޤʤϤϤǤåˡ񤫤ƤޤΤǡͤˤƤ{$_CONF['site_name']}ѤƤ꤬Ȥޤ",
     64 => 'Ȥꡧ',
     65 => 'ľƸƤ',
-    66 => 'ץߥä褦Ǥ⤦٥󤷤ƤߤƤѥɤʬʤСѥɤȯԤޤΤǡΥե˵ƤߤƤ',
+    66 => 'ץߥä褦Ǥ⤦٥󤷤ƤߤƤѥɤʬʤСѥɤȯԤޤΤǡΥե˵Ƥ',
     67 => '',
     68 => 'ǧڤ¸',
     69 => 'ä󤷤塢ɤΤ餤ĤƤФǤ',
     70 => "{$_CONF['site_name']}ɽƤ",
-    71 => "{$_CONF['site_name']}ħȤơɽ뵭ΥơޤɽͳѤ뤳Ȥ뤳ȤޤΤˤϡޤ{$_CONF['site_name']}<a href=\"{$_CONF['site_url']}/users.php?mode=new\">桼Ͽ</a>ɬפޤ⤷ǤϿѤߤʤкΥեѤƥ󤷤Ƥ",
+    71 => "{$_CONF['site_name']}ħȤơɽ뵭ΥơޤɽͳѤ뤳ȤǤޤΤˤϡޤ{$_CONF['site_name']}<a href=\"{$_CONF['site_url']}/users.php?mode=new\">桼Ͽ</a>ɬפޤ⤷ǤϿѤߤʤкΥեѤƥ󤷤Ƥ",
     72 => 'ơ',
     73 => '',
     74 => 'ΥȤγѹƤߤ褦',
     75 => '᡼ޤ衧',
-    76 => 'ΥꥹȤ򤹤СνƤ᡼Ǽ뤳Ȥޤ̣Τ򤹤褦ˤƤ',
+    76 => 'ΥꥹȤ򤹤СνƤ᡼Ǽ뤳ȤǤޤ̣Τ򤹤褦ˤƤ',
     77 => '̿',
     78 => 'ʬȤμ̿ɲä褦',
     79 => '̿硢åƤ',
     80 => '',
     81 => '᡼',
-    82 => '桼ˤǶ10桼',
-    83 => '桼ƾ桼',
+    82 => '桼ˤǶ10桼',
+    83 => '桼ƾ桼',
     84 => 'Ƶ:',
     85 => 'Ȥ:',
-    86 => '桼Τ٤ƤƤ򸡺롣桼:',
+    86 => '桼Τ٤ƤƤ򸡺롣桼:',
     87 => 'ʤΥ̾',
-    88 => "ïʤ֤󤢤ʤȻפޤˤ{$_CONF['site_name']}{$_CONF['site_url']}˾ΤʤΥȡ\"%s\"ˤΥѥѹޤ\n\n˥ȤѹΤʤʲΥ󥯤򥯥åƤ\n\n",
+    88 => "{$_CONF['site_name']}{$_CONF['site_url']}˾ΤʤΥȡ\"%s\"ˤΥѥѹƤޤ\n\n˥ȤѹΤʤʲΥ󥯤򥯥åƤ\n\n",
     89 => "⤷ѥɤѹʤˤϡΥå̵뤷ƤСϵѲޤʥѥɤѹޤˡ\n\n",
     90 => '˿ѥɤƤΥեФޤǤϸߤΥѥɤͭǤ뤳ȤդƤ',
     91 => 'ѥɤ',
     92 => 'ѥɤ',
     93 => 'ľΥѥѹ׵ϡ%dǤΥȤǤϡѹδ֤%dԤɬפޤ',
     94 => 'ȡ"%s"ˤ',
-    95 => 'ǡ١饢Ȥˤϡ"Ȥκ" ܥ򲡤ƤʤΥ̾Ƥ줿䥳Ȥ<strong>ޤ</strong>Τǡդε䥳Ȥ"anonymous"ˤäƤ줿ΤȤɽޤ',
+    95 => 'ǡ١饢Ȥˤϡ"Ȥκ" ܥ򲡤ƤʤΥ̾Ƥ줿䥳Ȥ<strong>ޤ</strong>Τǡդε䥳Ȥ"ȥ桼"ˤäƤ줿ΤȤɽޤ',
     96 => 'Ȥ',
     97 => 'Ⱥγǧ',
     98 => '˥ȤޤƤޤСΥȤ˿Ȥʤ¤ꡢǤʤʤޤС⤦"Ȥκ"ܥ򲡤Ƥ',
     99 => 'ץ饤Хץ',
     100 => 'ԤΥ᡼',
     101 => 'ȴԤΥ᡼',
-    102 => '¾Υ桼Υ᡼',
-    103 => '¾Υ桼Υ᡼',
+    102 => '¾Υ桼Υ᡼',
+    103 => '¾Υ桼Υ᡼',
     104 => '饤󤫤ɤɽ',
     105 => 'ָߤΥפ̾ɽ',
     106 => 'ｻ',
-    107 => 'ץեɽ'
+    107 => 'ץեɽ',
+    108 => 'ѥɤγǧ',
+    109 => 'ѥɤ',
+    110 => 'ߤΥѥ',
+    111 => 'ߤΥѥɤϤƤ',
+    112 => 'ԲĶƤޤޤΤǡۤɤޤ󤷤ƤߤƤ',
+    113 => 'ǤޤǤ',
+    114 => 'Ȥ̵ˤʤäƤޤ',
+    115 => 'Ȥ̵ˤʤޤΤǥǤޤ󡣴ԤϢƤ',
+    116 => 'ȤͭˤʤΤԵƤޤ',
+    117 => 'ʤΥȤϴԤͭˤΤԤäƤޤԤǧޤǥǤޤ',
+    118 => "{$_CONF['site_name']} ΤʤΥȤͭˤʤޤʲΥ󥯤顢ʤΥ桼̾(<username>)ȥ᡼ƤѥɤǥǤޤ",
+    119 => "ѥɤ˺ƤޤäƤСʲΥ󥯤鿷ѥɤǤޤ",
+    120 => 'Ȥͭˤʤޤ',
+    121 => 'ӥ',
+    122 => '桼οϿǤʤ',
+    123 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ͽ</a>"
 );
 
 ###############################################################################
@@ -329,7 +356,7 @@
 
 $LANG05 = array(
     1 => 'ɽ뵭Ϥޤ',
-    2 => 'ɽ뵭Ϥޤ󡣤Υơޤ˴ؤƤʤΤɽʤ᤮ʤΤΤɤ餫Ǥ礦͡',
+    2 => 'ɽ뵭Ϥޤ󡣤Υơޤ˴ؤƤʤΤɽʤ᤮ʤΤΤɤ餫Ǥ',
     3 => ' %s ˴ؤ',
     4 => 'ܵ',
     5 => '',
@@ -339,42 +366,21 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'ȤWebڡ',
-    2 => 'ɽ󥯤Ϥޤ',
-    3 => '󥯤ɲ'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'ɼϿޤ',
-    2 => 'ɼϿޤ',
-    3 => 'ɼ',
-    4 => 'ɼ罸',
-    5 => 'ɼ',
-    6 => '¾ɼ򸫤'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
     1 => 'åݤ˥顼ȯޤ⤦ٻƤ',
     2 => 'åޤ',
-    3 => 'Reply Toe-mailɥ쥹Ƥޤ',
-    4 => '̾Reply To, ȥ롢ƤƤ',
-    5 => 'ʥ桼Ϥޤ',
+    3 => 'ֿe-mailɥ쥹Ƥޤ',
+    4 => 'ֿ̾衢ȥ롢ƤƤ',
+    5 => '桼Ϥޤ',
     6 => '顼ȯޤ',
-    7 => '桼',
+    7 => '桼',
     8 => '̾',
     9 => 'URL',
     10 => '᡼ΰ',
     11 => 'ʤ̾:',
-    12 => 'Reply To:',
+    12 => 'ֿ:',
     13 => 'ȥ:',
     14 => ':',
     15 => 'HTMLѴޤ',
@@ -386,32 +392,32 @@
     21 => 'ʤE-mailɥ쥹',
     22 => '٤ƤιܤƤ',
     23 => "Υ᡼ϡ%s {$_CONF['site_url']}εǡʤΤ餻Ȼפäᡢ%s Υɥ쥹ޤϤǡSPAM˥᡼ǤϤޤ󤷡˻Ѥ줿ɥ쥹¾Ū˻Ѥ뤳Ȥ⤢ޤ",
-    24 => 'ε˴ؤ륳Ȥϼξǽޤ',
+    24 => 'ε˴ؤ륳ȤϼξǤǤޤ',
     25 => 'εǽѤ뤿ˤϥ󤷤Ƥ',
-    26 => 'ΥեоݤΥ桼˥᡼뤿ΤΤʤΤǡ٤ƤιܤϤƤ',
+    26 => 'ΥեоݤΥ桼˥᡼뤿ΤΤʤΤǡ٤ƤιܤϤƤ',
     27 => 'å',
     28 => '%s 󤫤Υå: ',
     29 => "{$_CONF['site_name']} ˴ؤȤǤ衧",
     30 => ' Υ˥塼쥿Ǥ衧 ',
     31 => 'ȥ',
     32 => '',
-    33 => 'ʲξǵΤɤळȤޤ',
+    33 => 'ʲξǵΤɤळȤǤޤ',
     34 => 'åϰʾǤ',
-    35 => 'ǰʤ餳Υ桼ϥ᡼դƤޤ'
+    35 => 'ǰʤ餳Υ桼ϥ᡼դƤޤ'
 );
 
 ###############################################################################
 # search.php
 
 $LANG09 = array(
-    1 => 'ʣʸ',
+    1 => 'ץ',
     2 => '',
     3 => '',
     4 => '٤',
     5 => '',
     6 => 'ο',
     7 => 'ȿ',
-    8 => '񤤤',
+    8 => '桼',
     9 => '٤',
     10 => '',
     11 => '',
@@ -421,7 +427,7 @@
     15 => 'ɤѤƺƸƤߤƤ',
     16 => 'ȥ',
     17 => '',
-    18 => '񤤤',
+    18 => '桼',
     19 => " {$_CONF['site_name']} ΤΤ٤Ƥε򸡺",
     20 => '',
     21 => '',
@@ -460,7 +466,12 @@
     54 => 'Ȥθ',
     55 => 'ʸ',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'θ̤ &gt;&gt;',
+    59 => 'ڡη',
+    60 => '',
+    61 => 'ν'
+
 );
 
 ###############################################################################
@@ -488,9 +499,16 @@
     19 => 'ȥ',
     20 => '',
     21 => 'ΥȤˤϥ󥯤Ĥʤ󥯤򥯥åͤͤ⤤ʤΤΤɤ餫Ȼפޤ',
-    22 => 'ͧã˾Ҳ𤵤줿ʾ10',
+    22 => 'Ҳ¿ʾ10',
     23 => '',
-    24 => 'ͧã˾Ҳ𤵤줿Ϥʤ褦Ǥ'
+    24 => 'ͧã˾Ҳ𤵤줿Ϥʤ褦Ǥ',
+    25 => 'ȥåХå¿ʾ10',
+    26 => 'ȥåХåϤޤ',
+    27 => 'Ͽ桼ο',
+    28 => '٥ȡʾ̣',
+    29 => '٥',
+    30 => 'ҥå',
+    31 => '٥ȤϿƤʤޤåƤޤ'
 );
 
 ###############################################################################
@@ -516,7 +534,7 @@
     6 => '',
     7 => 'ɬפǤ',
     8 => '',
-    9 => 'ΥȤ˾ƤݤˤϡΥ롼äƤ<ul><li>ɬפȤ뤹٤ƤιܤƤ<li>Ρɬ׽ʬʾ󶡤Ƥ<li>URLsˤĤƤäդƳǧƤ</ul>',
+    9 => 'ΥȤ˾ƤݤˤϡΥ롼äƤ<ul><li>ɬפȤ뤹٤ƤιܤƤ<li>Τɬ׽ʬʾ󶡤Ƥ<li>URLˤĤƤäդƳǧƤ</ul>',
     10 => 'ȥ',
     11 => '',
     12 => '',
@@ -534,7 +552,7 @@
     24 => 'Ƥϼդޤ',
     25 => '%s ˴ؤƤϼդޤ',
     26 => 'ƴֳ֤',
-    27 => '桼̾',
+    27 => '桼̾',
     28 => '',
     29 => '',
     30 => '󡢤ʤϡ',
@@ -544,7 +562,7 @@
     34 => '',
     35 => 'HTMLϻѤǤޤ',
     36 => 'ƥ⡼',
-    37 => "{$_CONF['site_name']}˥٥ȤƤȡΤΥϿޤϿ줿٥Ȥϳƥ桼ɬפ˱ƸĿŪʥϿޤĤޤꡢǽϡ䵭ǰʤɤʤθĿŪʥ塼ĢȤƻȤ뤳ȤꤷƤΤǤ<b>ޤ</b><br><br>٥ȤƤԤǧ硢٥ȤϥΤΥɽƤޤޤ",
+    37 => "{$_CONF['site_name']}˥٥ȤƤȡΤΥϿޤϿ줿٥Ȥϳƥ桼ɬפ˱ƸĿŪʥϿޤĤޤꡢǽϡ䵭ǰʤɤʤθĿŪʥ塼ĢȤƻȤ뤳ȤꤷƤΤǤ<b>ޤ</b><br><br>٥ȤƤԤǧ硢٥ȤϥΤΥɽƤޤޤ",
     38 => 'ͽɲáɲ衧',
     39 => 'Υ',
     40 => 'Ŀͥ',
@@ -573,8 +591,8 @@
 $LANG20 = array(
     1 => 'Ը¤ɬפǤ',
     2 => 'ǤޤϤƤ',
-    3 => 'ѥɤ㤤ޤ桼̾',
-    4 => '桼̾',
+    3 => 'ѥɤ㤤ޤ桼̾',
+    4 => '桼̾',
     5 => 'ѥɡ',
     6 => 'ġλѤˤĤƤϡ٤ƤϿơåޤ<br>Υڡϡǧ줿ԤΤߤѤǤޤ',
     7 => ''
@@ -613,7 +631,7 @@
     27 => 'PHP֥å',
     28 => 'PHP֥åΥץ',
     29 => 'ؿ',
-    30 => 'PHPɤѤ֥åȤ硢phpblock_e.g. phpblock_getweatherˤǤϤޤPHPδؿ̾˵ƤphpblockǤϤޤäƤʤ硢ؿϸƤӽФޤ󡣤ϡդä桼Ȥͭʴؿ뤳Ȥ򤱤뤿ǤؿθΡʡˤפǤPHP֥åΥɤϡ/path/to/geeklog/system/lib-custom.php˵ƤȡGeeklog򥢥åץ졼ɤƤѤ³뤳Ȥޤ',
+    30 => 'PHPɤѤ֥åȤ硢phpblock_e.g. phpblock_getweatherˤǤϤޤPHPδؿ̾˵ƤphpblockǤϤޤäƤʤ硢ؿϸƤӽФޤ󡣤ϡդä桼Ȥͭʴؿ뤳Ȥ򤱤뤿ǤؿθΡʡˤפǤPHP֥åΥɤϡ/path/to/geeklog/system/lib-custom.php˵ƤȡGeeklog򥢥åץ졼ɤƤѤ³뤳ȤǤޤ',
     31 => 'PHP֥å˥顼ޤ%s¸ߤޤ',
     32 => '顼̤ιܤޤ',
     33 => 'ݡ֥å.rdfեˤURLƤɬפޤ',
@@ -626,9 +644,9 @@
     40 => '',
     41 => '',
     42 => '֥åɽȥƥ٥ϤƤ',
-    43 => 'ۡڡΤ',
+    43 => 'ȥåץڡΤ',
     44 => 'ݤޤ',
-    45 => "¤Τʤ֥åԽ褦Ȥޤι԰٤ϵϿȤƻĤޤ<a href=\"{$_CONF['site_admin_url']}/block.php\">֥åԽ</a>̤äƤ.",
+    45 => "¤Τʤ֥åԽ褦Ȥޤι԰٤ϵϿޤ<a href=\"{$_CONF['site_admin_url']}/block.php\">֥åԽ</a>̤äƤ.",
     46 => '֥å',
     47 => '',
     48 => '֥å̾',
@@ -643,7 +661,12 @@
     57 => '֥å򲼤',
     58 => '֥å',
     59 => '֥å¦',
-    60 => '֥å¦'
+    60 => '֥å¦',
+    61 => 'ȥʤ',
+    62 => 'ɽArticle Limits',
+    63 => '֥åΥȥ뤬ŬڤǤ',
+    64 => 'ȥ϶ǤϤޤ󤷡HTMLޤǤ⤤ޤ',
+    65 => ''
 );
 
 ###############################################################################
@@ -652,7 +675,7 @@
 $LANG22 = array(
     1 => 'ͽԽ',
     2 => '顼',
-    3 => 'ͽ̾',
+    3 => 'ƥ⡼',
     4 => 'ϢURL',
     5 => '',
     6 => 'λ',
@@ -674,36 +697,12 @@
     22 => '',
     23 => 'Ǥ',
     24 => 'λǤ',
-    25 => 'λǤ'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => '󥯤Խ',
-    2 => '',
-    3 => '̾',
-    4 => 'URL',
-    5 => 'ʬ',
-    6 => '(http://ϤƤ)',
-    7 => '¾',
-    8 => '󥯤Υҥåȿ',
-    9 => '󥯤ξܺ',
-    10 => '󥯤̾URLܺ٤ˤĤƵƤ',
-    11 => '󥯤δ',
-    12 => '󥯤Խϡ󥯼Τ򥯥åƤϡΡֿ󥯡פ򥯥åƤ',
-    13 => '̾',
-    14 => '󥯤ʬ',
-    15 => 'URL',
-    16 => 'ݤޤ',
-    17 => "¤Τʤ󥯤Խ褦Ȥޤι԰٤ϵϿȤƻĤޤ<a href=\"{$_CONF['site_admin_url']}/link.php\">Խ</a>äƤ",
-    18 => '',
-    19 => '',
-    20 => 'ʬ',
-    21 => '¸',
-    22 => '',
-    23 => ''
+    25 => 'λǤ',
+    26 => 'Ͽ',
+    27 => '1ڡɽ',
+    28 => '',
+    29 => 'Խ',
+    30 => 'ԡ'
 );
 
 ###############################################################################
@@ -716,52 +715,52 @@
     4 => 'ƥ⡼',
     5 => 'Խ',
     6 => 'Υڡ˵ϰ⤢ޤǤ',
-    7 => '񤤤͡',
+    7 => '桼',
     8 => '¸',
     9 => 'ץӥ塼',
     10 => '',
     11 => '',
     12 => 'ID',
-    13 => 'ȥ',
-    14 => '',
+    13 => '',
+    14 => '',
     15 => '',
     16 => '',
     17 => 'ơʾܺ١',
     18 => '',
     19 => 'ȿ',
-    20 => '',
-    21 => '',
+    20 => 'Pingο',
+    21 => 'Ping',
     22 => 'ΰ',
     23 => 'Խˤϡֹ򥯥å뤳ȡ򸫤ˤϡΥȥ򥯥å롣ϡֿפ򥯥å뤳ȡ',
     24 => 'ꤷIDϤǤ˻ȤƤޤ̤IDƤߤƤ',
-    25 => '',
+    25 => 'Ͽ˥顼ޤ',
     26 => 'Υץӥ塼',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => '[unscaledX][imageX]˻ȤȡϥꥸʥΥɽޤ',
+    28 => '<p><b>ץӥ塼</b>: դεץӥ塼硢ץӥ塼ܥ򲡤⡢öɥեȤȤ¸뤳Ȥ򤪴ᤷޤץӥ塼ܥϲʤˤȤäƤ',
+    29 => 'ȥååХå',
     30 => 'եΥåץɻ˥顼ȯޤ',
     31 => 'ȥȺǽʬƤ',
     32 => 'ܵ',
     33 => 'ܵϰĤǤޤ',
-    34 => 'ɥե',
+    34 => 'ɥեȡʲ񤭡',
     35 => 'Ϥ',
     36 => '',
     37 => 'ƱƼԤơ',
     38 => 'Ʊƥꡧ',
     39 => 'Ҳ𤵤줿',
-    40 => 'ݤޤ',
+    40 => '',
     41 => "¤ΤʤԽ褦Ȥޤι԰٤ϵϿޤεɤߤȤѤǤɤ߽ä顢<a href=\"{$_CONF['site_admin_url']}/story.php\">Խ</a>äƤ",
     42 => "¤ΤʤԽ褦Ȥޤι԰٤ϵϿޤ<a href=\"{$_CONF['site_admin_url']}/story.php\">Խ</a>äƤ",
-    43 => '',
-    44 => '',
-    45 => 'Υ',
+    43 => '',
+    44 => '',
+    45 => '',
     46 => '<b>:</b> դդѹȡޤɽޤ󡣤ޤRDFإåɥ饤ˤȿǤޤ󤷡䥵ȾˤȿǤʤȤդƤ',
     47 => 'image',
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => 'źդ򵭻ɽ뤿ˤϡ̤ʽ񼰤ɬפǤ񼰤ϡ[imageX][imageX_right]뤤ϡ[imageX_left]Τ줫ǤXźդֹǤաźդϵǻѤʤе¸Ǥޤ<BR><P><B>ץӥ塼</B>: դεϥɥեȤȤ¸ƱƤץӥ塼ܥϲ̵˻ѤƤ',
-    52 => '',
+    51 => 'źդ򵭻ɽ뤿ˤϡ̤ʽ񼰤ɬפǤ񼰤ϡ[imageX][imageX_right]뤤ϡ[imageX_left]Τ줫ǤXźդֹǤաźդϵǻѤʤе¸Ǥޤ<BR><P><B>ץӥ塼</B>: դεϥɥեȡʲ񤭡ˤȤ¸ƱƤץӥ塼ܥϲ̵˻ѤƤ',
+    52 => '',
     53 => 'ϻѤƤޤ¸ʸܺ˲ѤʤФʤޤ',
     54 => 'źդ줿ϻѤƤޤ',
     55 => '¸ݤ˲Υ顼ȯޤ¸˽Ƥ',
@@ -769,41 +768,32 @@
     57 => 'Υβɽ',
     58 => 'δ',
     59 => 'ץ',
-    60 => 'ͭ',
+    60 => '',
     61 => 'ưǰ',
-    62 => 'ưǺ'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => '⡼',
-    2 => 'ȺĤϤƤ',
-    3 => 'ɼʡ줿',
-    4 => 'ɼʡ %s ˤ¸줿',
-    5 => 'ɼʡԽ',
-    6 => 'ɼʡ ID',
-    7 => '(ڡޤޤʤ)',
-    8 => 'ۡڡɽ',
-    9 => '䤹뤳',
-    10 => '  ɼ',
-    11 => 'ɼʡ( %s )ˤ˥顼ޤ',
-    12 => 'ɼʡ( %s )ˤܤ˥顼ޤ',
-    13 => 'ɼʡκ',
-    14 => '¸',
-    15 => '',
-    16 => '',
-    17 => 'ɼIDϤƤ',
-    18 => 'ɼʡ',
-    19 => 'ɼʡԽ뤿ˤϡɼʡ򥯥åƤ˺ϡֿʡפ򥯥åƤ',
-    20 => 'ɼ',
-    21 => 'ݤޤ',
-    22 => "¤ΤʤԽ褦Ȥޤι԰٤ϵϿޤ<a href=\"{$_CONF['site_admin_url']}/poll.php\">ɼδ</a>äƤ",
-    23 => 'ɼʡ',
-    24 => '',
-    25 => 'Ϥ',
-    26 => ''
+    62 => 'ưǺ',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Խꥢγ',
+    68 => 'Խꥢν̾',
+    69 => 'ȸ⡼ɤ',
+    70 => 'ġС',
+    71 => 'ŪʥġС',
+    72 => 'ŪʥġС',
+    73 => 'ĥġС',
+    74 => 'ĥġСΣ',
+    75 => 'ǽ',
+    76 => 'ѥץ',
+    77 => 'Advanced EditorȤˤϡJavascriptȤ褦ˤʤäƤɬפޤΥץconfig.php̵ˤǤޤ ',
+    78 => '̾ΥǥȤˤϡ<a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default"></a> 򥯥åƤ',
+    79 => 'ץӥ塼',
+    80 => 'ǥ',
+    81 => 'ѥץ',
+    82 => '',
+    83 => '¸ѥץ',
+    84 => 'Ѹ',
+    85 => '٤ɽ'
 );
 
 ###############################################################################
@@ -818,7 +808,7 @@
     6 => 'ȡϢ֥å⤹٤ƺޤ',
     7 => 'ID̾Ƥ',
     8 => '',
-    9 => 'Խ̾򥯥åƤϡΡֿץܥ򥯥åƤåϤʤΥ٥Ǥ*ϡǥեȤǤ',
+    9 => 'Խ̾򥯥åƤϡΡֿץܥ򥯥åƤåϤʤΥ٥Ǥ*ϡǥեȤǤ',
     10 => '¤٤',
     11 => 'ڡε',
     12 => 'ݤޤ',
@@ -832,52 +822,66 @@
     20 => '',
     21 => '',
     22 => 'ǥե',
-    23 => 'Υȥԥå򿷵ƤκݤΥǥեȤˤޤ',
+    23 => '򿷵ƤκݤΥǥեȤˤޤ',
     24 => '(*)',
-    25 => 'Υȥԥå򰵽',
-    26 => 'Υȥԥå򵭻ΥǥեȤˤ롣ǥեȥȥԥåϰĤƤǤޤ'
+    25 => '򰵽',
+    26 => '򵭻ΥǥեȤˤ롣ǥեȤϰĤǤޤ',
+    27 => 'ޤϡѥ򥢥åץ',
+    28 => '',
+    29 => 'ե륢åץɻ˥顼'
 );
 
 ###############################################################################
 # admin/user.php
 
 $LANG28 = array(
-    1 => '桼Խ',
-    2 => '桼ID',
-    3 => '桼̾',
+    1 => '桼Խ',
+    2 => '桼ID',
+    3 => '桼̾',
     4 => '̾',
     5 => 'ѥ',
     6 => 'ƥ٥',
     7 => '᡼륢ɥ쥹',
     8 => 'ۡڡ',
     9 => '(ڡޤޤʤ)',
-    10 => '桼̾᡼륢ɥ쥹Ƥ',
-    11 => '桼',
-    12 => '桼ѹϥ桼̾򥯥åƤ桼ϡΡֿ桼ץܥ򥯥åƤΥեȤС桼̾᡼륢ɥ쥹̾ˤĤñʬǽǤ㡧*ġ**',
+    10 => '桼̾᡼륢ɥ쥹Ƥ',
+    11 => '桼',
+    12 => '桼ѹϥ桼̾Υ򥯥åƤ桼ϡΡֿץܥ򥯥åƤΥեȤС桼̾᡼륢ɥ쥹̾ˤĤñʬǽǤ㡧*ġ**',
     13 => 'ƥ',
     14 => 'Ͽ',
-    15 => '桼',
+    15 => '桼',
     16 => '',
     17 => 'ѥѹ',
     18 => '',
     19 => '',
     20 => '¸',
-    21 => 'Ͽ褦Ȥ桼̾ϤǤ¸ߤޤ',
+    21 => 'Ͽ褦Ȥ桼̾ϤǤ¸ߤޤ',
     22 => '顼',
     23 => 'Ͽ',
-    24 => '桼ΰ祤ݡ',
-    25 => '桼Geeklog˰祤ݡȤǤޤݡȤեϥֶڤǡեɤϼν¤Ǥɬפޤ̾桼̾e-mailݡȤ桼Υѥɤ̵٤˷ꤵޤ桼ϰդͤĵޤʾɤ˥եʤä硢餫꤬ǽꡢξ硢ưǽ뤳ȤˤʤޤΤǡդƤ',
+    24 => '桼ΰ祤ݡ',
+    25 => '桼Geeklog˰祤ݡȤǤޤݡȤեϥֶڤǡեɤϼν¤Ǥɬפޤ̾桼̾e-mailݡȤ桼Υѥɤ̵٤˷ꤵޤ桼ϰԤͤĵޤʾɤ˥եʤä硢餫꤬ǽꡢξ硢ưǽ뤳ȤˤʤޤΤǡդƤ',
     26 => '',
     27 => 'ʹ߸',
     28 => 'å',
     29 => 'ѥ',
     30 => 'ݡ',
-    31 => '桼',
+    31 => '桼',
     32 => 'λޤ%d Ͽޤ%d Υ顼ȯޤ',
     33 => '',
     34 => '顼ϿեꤷƤ',
     35 => 'ǸΥ',
-    36 => '(٤󤷤Ƥʤ)'
+    36 => '(̤)',
+    37 => '桼ID',
+    38 => '롼װ',
+    39 => 'ѥ ()',
+    40 => 'Ͽ',
+    41 => 'ǽ',
+    42 => '̵',
+    43 => '桼ΥԤ',
+    44 => 'ԤξǧԤ',
+    45 => 'ͭ',
+    46 => '桼ξ',
+    47 => 'Խ'
 );
 
 ###############################################################################
@@ -894,7 +898,7 @@
     13 => 'ƥ꡼',
     14 => '',
     15 => '',
-    16 => '桼̾',
+    16 => '桼̾',
     17 => '̾',
     18 => 'Email',
     34 => 'Ƥδ',
@@ -903,7 +907,7 @@
     37 => 'ͽ',
     38 => 'Ͽ',
     39 => 'ǧ٤ƤϤʤǤ',
-    40 => '桼Ͽο'
+    40 => '桼Ͽο'
 );
 
 ###############################################################################
@@ -946,7 +950,7 @@
     34 => '',
     35 => 'ɲáʴʰǡ',
     36 => 'Ͽ',
-    37 => 'ǰʤ顢ܥȤǤϸĿѥѤǤޤ',
+    37 => 'ܥȤǤϸĿѥѤǤޤ',
     38 => 'ĿͽԽ',
     39 => '',
     40 => '',
@@ -957,28 +961,28 @@
 # admin/mail.php
 
 $LANG31 = array(
-    1 => 'Mail',
-    2 => 'From',
-    3 => 'Reply-to',
+    1 => '롼פ˥᡼',
+    2 => '',
+    3 => 'ֿ',
     4 => 'ȥ',
     5 => '',
     6 => '衧',
-    7 => '٤ƤΥ桼',
+    7 => '٤ƤΥ桼',
     8 => '',
     9 => 'ץ',
     10 => 'HTML',
     11 => '۵ޡ',
     12 => '',
     13 => 'Ϥľ',
-    14 => '桼̵뤷',
+    14 => '桼̵뤷',
     15 => '˥顼ȯ衧 ',
-    16 => 'å̵ޤ衧',
+    16 => 'åλޤ衧',
     17 => "<a href={$_CONF['site_admin_url']}/mail.php>¾Υå</a>",
     18 => 'To',
     19 => 'NOTE: ȤϿ˥᡼ˤϡɥåץꥹȤLogged-in Usersפ򤷤Ƥ',
-    20 => "<successcount> Υå<failcount> ΥåˤϼԤޤ̤Υå֤ϼΤȤǤ<a href=\"{$_CONF['site_admin_url']}/mail.php\">̤Υå</a>뤫<a href=\"{$_CONF['site_admin_url']}/moderation.php\">̤</a>Ȥޤ",
-    21 => 'μ',
-    22 => '',
+    20 => "<successcount> Υå<failcount> ΥåˤϼԤޤ̤Υå֤ϼΤȤǤ<a href=\"{$_CONF['site_admin_url']}/mail.php\">̤Υå</a>뤫<a href=\"{$_CONF['site_admin_url']}/moderation.php\">̤</a>ȤǤޤ",
+    21 => '',
+    22 => '',
     23 => 'ԤΤϤޤ',
     24 => 'ΤϤޤ',
     25 => '-- 롼פ --',
@@ -999,7 +1003,7 @@
     8 => 'ץ饰θߴå˼Ԥޤ',
     9 => 'Υץ饰ϿСGeekLogɬפǤ<a href=http://www.geeklog.net>Geeklog</a>򥢥åץ졼ɤ뤫СΥץ饰ꤷƤ',
     10 => '<br><b>ץ饰ϥ󥹥ȡ뤵Ƥޤ</b><br><br>',
-    11 => 'ץ饰ˤϥץ饰̾򥯥åƤץ饰κԤΥڡؤΥ󥯤ʻɽޤץ饰ΥСϡ󥹥ȡΤΤȥե뤫줿Τɽޤˤäƥץ饰ιɬȽǤ뤳ȤǤޤ',
+    11 => 'ץ饰ˤϥץ饰¦Υ򥯥åƤץ饰κԤΥڡؤΥ󥯤ʻɽޤץ饰ΥСϡ󥹥ȡΤΤȥե뤫줿Τɽޤˤäƥץ饰ιɬȽǤ뤳ȤǤޤ',
     12 => 'plugineditor()˥ץ饰̾ϤޤǤ',
     13 => 'ץ饰Խ',
     14 => '',
@@ -1020,9 +1024,13 @@
     29 => 'եΥС',
     30 => 'ץ饰ޤ',
     31 => 'Υץ饰ޤǤϴϢեǡ٤ƺޤϡֺץܥ⤦ٲƤ',
-    32 => '<p><b>AutoLingΥեޥåȤޤ</b></p>',
+    32 => '<p><b>ȥ󥯥ΥեޥåȤޤ</b></p>',
     33 => 'ǿΥС',
-    34 => 'Update'
+    34 => '',
+    35 => 'Խ',
+    36 => '',
+    37 => 'ǡ',
+    38 => 'Ƥޤ'
 );
 
 ###############################################################################
@@ -1033,10 +1041,10 @@
     2 => '¸',
     3 => '',
     4 => '󥻥',
-    10 => 'Content Syndication',
+    10 => 'RSSۿ',
     11 => 'ե',
     12 => '',
-    13 => 'եɤϡȥ򥯥åƤեɤϡֿեɡפ򥯥åƤ',
+    13 => 'եɤϡȥ뺸Υ򥯥åƤեɤϡֿեɡפ򥯥åƤ',
     14 => 'ȥ',
     15 => '',
     16 => 'ե̾',
@@ -1049,23 +1057,31 @@
     23 => '٤Ƥε',
     24 => 'եɤԽ',
     25 => 'եɤΥȥ',
-    26 => 'Limit',
+    26 => 'ۿ',
     27 => 'ȥĹ',
-    28 => '(0 = no text, 1 = full text, other = ꤷʸ¡)',
+    28 => '(0 = ʸʤ, 1 = ʸ٤, other = ꤷʸ¡)',
     29 => 'ܺ',
     30 => '',
     31 => 'ʸ',
     32 => '',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
+    33 => 'ƥ',
+    34 => '',
+    35 => 'ְ',
     36 => 'եɤμ̤򤷤Ƥ',
-    37 => 'content syndicationͭˤ뤿ˤϡطץ饰򾯤ʤȤĥ󥹥ȡ뤷ƤƲʲǤϡGeeklogΥեɤΤץ饰ǼեɤΤ򤷤Ƥ',
-    38 => 'Error: ϤƤʤܤޤ',
+    37 => 'RSSۿͭˤ뤿ˤϡطץ饰򾯤ʤȤĥ󥹥ȡ뤷ƤƲʲǤϡGeeklogΥեɤΤץ饰ǼեɤΤ򤷤Ƥ',
+    38 => '顼: ϤƤʤܤޤ',
     39 => 'եɤΥȥ롢ܺ١ե̾ϤƤ',
     40 => 'ȥޤϡ֤ϤƤ',
-    41 => 'Links',
-    42 => 'Events'
+    41 => '',
+    42 => '٥',
+    43 => '٤',
+    44 => 'ʤ',
+    45 => 'Υȥ󥯤',
+    46 => 'ɽ',
+    47 => '',
+    48 => 'Խ',
+    49 => '',
+    50 => "ܥȤURL ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1092,37 +1108,37 @@
     18 => 'ͽޤ',
     19 => 'ɼѹȿǤޤ',
     20 => 'ɼޤ',
-    21 => '桼ޤ',
-    22 => '桼ޤ',
+    21 => '桼ޤ',
+    22 => '桼ޤ',
     23 => 'ͽɣĤʤäᡢͽɲäǤޤǤ',
     24 => 'ͽѹ򥫥ȿǤޤ',
     25 => '󤷤ʤȸĿѥɽǤޤ',
     26 => 'ͽĿͥޤ',
     27 => 'åޤ',
     28 => 'ץ饰¸ޤ',
-    29 => 'ǰʤ顢ܥȤǤϸĿѥϻѤǤޤ',
+    29 => 'ܥȤǤϸĿѥϻѤǤޤ',
     30 => 'ݤޤ',
-    31 => 'ǰʤ顢Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    32 => 'ǰʤ顢Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    33 => 'ǰʤ顢֥åԽѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    34 => 'ǰʤ顢󥯴Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    35 => 'ǰʤ顢ͽѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    36 => 'ǰʤ顢ɼѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    37 => 'ǰʤ顢桼Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    38 => 'ǰʤ顢ץ饰Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
-    39 => 'ǰʤ顢᡼Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    31 => 'Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    32 => 'Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    33 => '֥åԽѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    34 => '󥯴Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    35 => 'ͽѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    36 => 'ɼѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    37 => '桼Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    38 => 'ץ饰Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    39 => '᡼Ѳ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
     40 => 'ƥफΥå',
-    41 => 'ǰʤ顢ʸִѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    41 => 'ʸִѲ̤ؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
     42 => 'ñ줬Ͽޤ',
     43 => 'ñޤ',
     44 => 'ץ饰򥤥󥹥ȡ뤷ޤ',
     45 => 'ץ饰ޤ',
-    46 => 'ǰʤ顢ǡ١Хååץ桼ƥƥؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
+    46 => 'ǡ١Хååץ桼ƥƥؤΥޤ󡣴¤ΤʤؤΥϤ٤ƵϿޤ',
     47 => 'εǽϡ*nixǤưޤ󡣤⤷*nixưƤʤСå̵ꥢޤWindowsưƤϡadodb_*.phpȤե򸡺ơưǺƤ',
     48 => "{$_CONF['site_name']}ϿƤƤ꤬ȤԤδ֤ǿޤϿǧ줿顢ʤϿ᡼륢ɥ쥹˥ѥɤޤ",
     49 => '롼פ̵Ͽޤ',
     50 => '롼פޤ',
-    51 => '桼̾˻ȤƤޤ̤̾ꤷƤ',
+    51 => '桼̾˻ȤƤޤ̤̾ꤷƤ',
     52 => 'Ϥ줿᡼륢ɥ쥹̵ʥɥ쥹Ȼפޤ',
     53 => 'ѥɤϿޤΥѥɤȤäƥ󤷤Ƥ',
     54 => 'ʤοѥȯԿϴ¤ڤƤޤΥեफƿƤ',
@@ -1132,7 +1148,22 @@
     58 => 'եɤ̵¸ޤ',
     59 => 'եɤޤ',
     60 => 'ץ饰󤬹ޤ',
-    61 => 'Plugin %s: Unknown message placeholder'
+## NotYet
+    61 => '%sץ饰 : åΥץ쥤ۥǤ',
+    62 => 'ȥåХåΥȤޤ',
+    63 => 'ȥåХåΥȤݤ꤬ȯޤ',
+    64 => 'ȥåХå̵ޤ',
+    65 => 'Weblog ǥ쥯ȥꥵӥ֤ޤ',
+    66 => 'Weblog ǥ쥯ȥꥵӥޤ',
+    67 => 'ѥɤȳǧѥѥɤפޤ',
+    68 => 'ѥɤϤƤ',
+    69 => 'ȤߤƤޤ',
+    70 => 'ȤϴԤξǧԤäƤޤ',
+    71 => 'ȤϿơԤξǧԤäƤޤ',
+    72 => 'ץ饰Υ󥹥ȡ˥顼ޤerror.logǧƤ',
+    73 => 'ץ饰κ˥顼ޤSee error.logǧƤ',
+    74 => 'pingback̵ޤ',
+    75 => 'ȥåХåPOST requestɬפޤ'
 );
 
 ###############################################################################
@@ -1140,15 +1171,15 @@
 $LANG_ACCESS = array(
     'access' => '',
     'ownerroot' => 'ͭ/Root',
-    'group' => 'Group',
+    'group' => '롼',
     'readonly' => 'ɤߤȤ',
-    'accessrights' => '',
+    'accessrights' => '',
     'owner' => 'ͭ',
     'grantgrouplabel' => '嵭Υ롼פԽ¤Ϳ',
-    'permmsg' => ': Сϥ󤷤ƤС٤ơƿ̾ϡ󤻤˥Ȥ򤷤Ƥ뤹٤Ƥο̣ͤޤ',
+    'permmsg' => ': Сϥ󤷤ƤС٤ơȡ桼ϡ󤻤˥Ȥ򤷤Ƥ뤹٤Ƥο̣ͤޤ',
     'securitygroups' => 'Security Groupsʥƥ롼ס',
-    'editrootmsg' => "¤äƤƤ⡢root桼ˤʤ餺root桼Խ뤳ȤϽޤ󡣤ʳΥ桼ԽϲǽǤ¤ʤroot桼Խ褦Ȥ硢Ͽ˻Ĥ뤳ȤդƤ<a href=\"{$_CONF['site_admin_url']}/user.php\">桼ڡ</a>",
-    'securitygroupsmsg' => 'Υ桼°륰롼פ˥åƤ',
+    'editrootmsg' => "¤äƤƤ⡢root桼ˤʤ餺root桼Խ뤳ȤϽޤ󡣤ʳΥ桼ԽϲǽǤ¤ʤroot桼Խ褦Ȥ硢Ͽ˻Ĥ뤳ȤդƤ<a href=\"{$_CONF['site_admin_url']}/user.php\">桼ڡ</a>",
+    'securitygroupsmsg' => 'Υ桼°륰롼פ˥åƤ',
     'groupeditor' => '롼פԽ',
     'description' => 'ܺ',
     'name' => '̾',
@@ -1156,20 +1187,20 @@
     'missingfields' => '̤ι',
     'missingfieldsmsg' => '̾Ⱦܺ٤Ƥ',
     'groupmanager' => '롼ץޥ͡㡼',
-    'newgroupmsg' => '롼פԽ硢롼̾򥯥åƤ롼פϾΡֿפ򥯥åƤcoreˡ˥롼סˡפϥƥǻѤ뤿Ǥޤ',
+    'newgroupmsg' => '롼פԽ硢롼̾Υ򥯥åƤ롼פϾΡֿפ򥯥åƤ֥ˡ˥롼ספϥƥǻѤ뤿Ǥޤ',
     'groupname' => '롼̾',
-    'coregroup' => 'Core Group',
+    'coregroup' => '롼',
     'yes' => 'Yes',
     'no' => 'No',
-    'corerightsdescr' => "Υ롼פϡ{$_CONF['site_name']}˥롼פǤΤᡢܥ롼פθ¤Խ뤳ȤϽʤᡢθ¥ꥹȤɤߤȤѤȤʤäƤޤ",
-    'groupmsg' => 'ܥȤSecurity Groupsʥƥ롼סˤϳŪˤʤäƤޤܥ롼פ򲼵Υ롼פɲä硢Υ롼פλĸ¤Ʊ¤ܥ롼פˤͿ뤳ȤˤʤޤǽǤСܥ롼פ˸¤Ϳ硢Υ롼פθ¤Ѿ뤳Ȥ˾ޤˡǤܥ롼פ˸̤˸¤ͿϡΡָ¡ʬ͡ʵǽ˴ؤ븢¤򤹤뤳Ȥޤܥ롼פɲäϡΥ롼פβˤܥååǤ',
+    'corerightsdescr' => "Υ롼פϡ{$_CONF['site_name']}˥롼פǤΤᡢܥ롼פθ¤Խ뤳ȤϤǤʤᡢθ¥ꥹȤɤߤȤѤȤʤäƤޤ",
+    'groupmsg' => 'ܥȤSecurity Groupsʥƥ롼סˤϳŪˤʤäƤޤܥ롼פ򲼵Υ롼פɲä硢Υ롼פλĸ¤Ʊ¤ܥ롼פˤͿ뤳ȤˤʤޤǽǤСܥ롼פ˸¤Ϳ硢Υ롼פθ¤Ѿ뤳Ȥ˾ޤˡǤܥ롼פ˸̤˸¤ͿϡΡָ¡ʬ͡ʵǽ˴ؤ븢¤򤹤뤳ȤǤޤܥ롼פɲäϡΥ롼פβˤܥååǤ',
     'coregroupmsg' => "ܥ롼פ{$_CONF['site_name']}coreˡ˥롼פǤΤᡢܥ롼פν°륰롼פԽǤޤ󡣲ΥꥹȤɤߤȤѤȤʤäƤޤ",
     'rightsdescr' => '롼פΥϲθ¤ͿƤ뤫롼פ°륰롼Τθ¤ѾƤޤΤåΤʤ¤ϡܥ롼פν°륰롼פѾ¤ǤåΤ븢¤ܥ롼׼ΤľͿƤ븢¤Ǥ',
-    'lock' => 'Lock',
+    'lock' => 'å',
     'members' => 'С',
-    'anonymous' => 'ƿ̾',
-    'permissions' => '¤μ',
-    'permissionskey' => 'R = , E = Խ, Խϱޤ',
+    'anonymous' => 'ȥ桼',
+    'permissions' => '',
+    'permissionskey' => 'R = , E = Խ, Խϱޤߤޤ',
     'edit' => 'Խ',
     'none' => 'ʤ',
     'accessdenied' => 'ݤޤ',
@@ -1183,16 +1214,25 @@
     'cancel' => '',
     'delete' => '',
     'canteditroot' => 'Root롼פ˽°ƤʤΤRoot롼פԽ褦ȤᡢϵݤޤΥ顼ȻפäϥƥδԤϢƤ',
-    'listusers' => '桼ɽ',
-    'listthem' => 'list',
-    'usersingroup' => 'Users in group "%s"',
+    'listusers' => '桼ɽԽ',
+    'listthem' => 'ꥹ',
+    'usersingroup' => '"%s"˴ޤޤ桼ΰ',
     'usergroupadmin' => '롼״',
     'add' => 'ɲ',
     'remove' => '',
-    'availmembers' => 'Available Members',
+    'availmembers' => '桼',
     'groupmembers' => '롼ץС',
     'canteditgroup' => '롼פԽ뤿ˤϡ롼פΥСǤʤФʤޤ󡣤Υå顼ǤϡƥԤϢƤ',
-    'cantlistgroup' => 'СꥹȤ뤿ˤϡ롼פΥСǤʤФʤޤ󡣤Υå顼ǤϡƥԤϢƤ'
+    'cantlistgroup' => 'СꥹȤ뤿ˤϡ롼פΥСǤʤФʤޤ󡣤Υå顼ǤϡƥԤϢƤ',
+    'editgroupmsg' => '롼ץСԽˤϡС̾򥯥åơɲáפޤϡֺץܥ򲡤Ƥ桼롼ץСΤȤϱ¦ɽޤԽä顢¸ץܥ򲡤Ƥ̤ޤ',
+    'listgroupmsg' => '롼<b>%s</b>˴ޤޤ桼',
+    'search' => '',
+    'submit' => 'Ͽ',
+    'limitresults' => '̤ιʤ',
+    'group_id' => '롼ID',
+    'plugin_access_denied_msg' => 'Υץ饰δ¤ʤΤ˴̤˥褦Ȥޤι԰٤ϵϿޤ',
+    'groupexists' => 'Υ롼̾ϤǤ¸ߤƤޤ',
+    'groupexistsmsg' => 'Ʊ롼̾ޤ롼̾Ϥ줾ۤʤäƤɬפޤ.'
 );
 
 ###############################################################################
@@ -1226,7 +1266,8 @@
     7 => 'Ⱦ',
     8 => 'Ŀ',
     9 => '',
-    10 => '٤ʸ'
+    10 => 'ץ',
+    11 => 'ΰ'
 );
 
 ###############################################################################
@@ -1234,8 +1275,8 @@
 
 $LANG_404 = array(
     1 => '404 Error',
-    2 => '󡢤õɡ<b>%s</b>Ϥɤˤ⸫ĤޤǤ',
-    3 => 'ǰɡꤵ줿ե¸ߤʤ褦ᥤڡåƤߤ뤫ڡõƤߤƤϤɤ'
+    2 => '<b>%s</b>Ϥɤˤ⸫ĤޤǤ',
+    3 => 'ꤵ줿ե¸ߤޤ󡣥ᥤڡåƤߤ뤫ڡõƤߤƤ'
 );
 
 ###############################################################################
@@ -1243,7 +1284,7 @@
 
 $LANG_LOGIN = array(
     1 => '󤷤Ƥ',
-    2 => 'ޤ󤬡˥ˤϥ󤷤Ƥɬפޤ',
+    2 => '˥ˤϥ󤷤Ƥɬפޤ',
     3 => '',
     4 => ''
 );
@@ -1268,4 +1309,218 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
-?>
\ No newline at end of file
+###############################################################################
+# trackback
+
+$LANG_TRB = array (
+    'trackback'          => 'ȥåХå',
+    'from'               => 'from',
+    'tracked_on'         => 'ȥåХå',
+    'read_more'          => '[³ɤ]',
+    'intro_text'         => "'%s'ˤĤ¾ΥȤǤϼΤ褦˸ڤƤޤ:",
+    'no_comments'        => 'ΥȥˤϥȥåХåޤ',
+    'this_trackback_url' => 'ΥȥΥȥåХåURL:',
+    'num_comments'       => '%dΥȥåХå',
+    'send_trackback'     => 'Ping',
+    'preview'            => 'ץӥ塼',
+    'editor_title'       => 'ȥåХå',
+    'trackback_url'      => 'ȥåХåURL',
+    'entry_url'          => 'ȥURL',
+    'entry_title'        => 'ȥΥȥ',
+    'blog_name'          => '̾',
+    'excerpt'            => '',
+    'truncate_warning'   => ': ¦ǳפڤͤ뤳Ȥޤ',
+    'button_send'        => '',
+    'button_preview'     => 'ץӥ塼',
+    'send_error'         => '顼',
+    'send_error_details' => 'ȥåХå˥顼ȯޤ:',
+    'url_missing'        => 'ȥURL',
+    'url_required'       => 'ȥURLɬϤƤ',
+    'target_missing'     => 'ȥåХåURLޤ',
+    'target_required'    => 'ȥåХåURLϤƤ',
+    'error_socket'       => 'åȤ򥪡ץǤޤǤ',
+    'error_response'     => 'ʱ֤ޤ',
+    'error_unspecified'  => 'ʥ顼Ǥ',
+    'select_url'         => 'ȥåХåURL򤷤Ƥ',
+    'not_found'          => 'ȥåХåURLĤޤ',
+    'autodetect_failed'  => 'ȤȤΥȥåХåURL򸫤ĤޤǤURL򲼤ϤƤ',
+    'trackback_explain'  => 'ʲΥ󥯤ȥåХåꤿURL򤷤ƤεȥåХåURLꤷޤURL狼äƤʤ<a href="%s">ʬ</a>뤳ȤǤޤ',
+    'no_links_trackback' => '󥯤Ĥޤ󡣤Υȥ˥ȥåХåǤޤ',
+    'pingback'           => 'Pingback',
+    'pingback_results'   => 'Pingbackη',
+    'send_pings'         => 'Ping',
+    'send_pings_for'     => '"%s"ping',
+    'no_links_pingback'  => '󥯤Ĥޤ󡣤ΥȥؤpingbackޤǤ',
+    'pingback_success'   => 'Pingbackޤ',
+    'no_pingback_url'    => 'Pingback URLĤޤ',
+    'resend'             => '',
+    'ping_all_explain'   => 'ʤ󥯤ȤΥȤΤ餻(<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>)Weblogǥ쥯ȥꥵӥpingäƥȤ줿ȤΤ餻ꡢïΥȤεˤĤƽ񤤤Ȥ<a href="http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%90%E3%83%83%E3%82%AF">ȥåХå</a>äꤹ뤳ȤǤޤ',
+    'pingback_button'    => 'Pingback',
+    'pingback_short'     => 'Υȥ꤫󥯤줿٤ƤΥȤPingback',
+    'pingback_disabled'  => '(Pingback̵Ǥ)',
+    'ping_button'        => 'Ping',
+    'ping_short'         => 'Weblogǥ쥯ȥꥵӥPing',
+    'ping_disabled'      => '(Ping̵Ǥ)',
+    'trackback_button'   => 'ȥåХå',
+    'trackback_short'    => 'ȥåХå',
+    'trackback_disabled' => '(ȥåХå̵Ǥ)',
+    'may_take_a_while'   => 'PingbackPingϻ֤ޤդ',
+    'ping_results'       => 'Pingη',
+    'unknown_method'     => 'Ping᥽åɤǤ',
+    'ping_success'       => 'Pingޤ',
+    'error_site_name'    => '̾ϤƤ',
+    'error_site_url'     => 'ȤURLϤƤ',
+    'error_ping_url'     => 'Ping URLϤƤ',
+    'no_services'        => 'Weblogǥ쥯ȥꥵӥꤵƤޤ',
+    'services_headline'  => 'Weblogǥ쥯ȥꥵӥ',
+    'admin_home'         => '',
+    'new_service'        => 'ӥ',
+    'service_explain'    => 'Weblogǥ쥯ȥꥵӥϡԽ򥯥åƤWeblogǥ쥯ȥꥵӥϡֿӥפ򥯥åƤ',
+    'service'            => 'ӥ',
+    'ping_method'        => 'Ping᥽å',
+    'service_enabled'    => 'ͭˤ',
+    'service_website'    => 'Web',
+    'service_ping_url'   => 'Ping URL',
+    'ping_standard'      => 'Standard Ping',
+    'ping_extended'      => 'Extended Ping',
+    'ping_unknown'       => '(ʥ᥽å)',
+    'edit_service'       => 'Weblogǥ쥯ȥꥵӥԽ',
+    'button_save'        => '¸',
+    'button_cancel'      => '󥻥',
+    'button_delete'      => '',
+    'trackbacks'         => 'ȥåХå',
+    'editor_intro'       => '<a href="%s">%s</a>ؤΥȥåХåƤ',
+    'editor_intro_none'  => 'ȥåХåƤ',
+    'trackback_note'     => '˥ȥåХåˤϡǤε"' . $LANG24[21] . '"򥯥åƤ ˴طΤʤȥåХåˤ <a href="%s">򥯥å</a>',
+    'edit'               => 'Խ',
+    'search'             => '',
+    'limit_results'      => '̤¤',
+    'submit'             => '',
+    'pingback_explain'   => 'PngbackURLƤThe pingback will point to your site\'s homepage.',
+    'pingback_url'       => 'Pingback URL',
+    'site_url'           => 'ΥȤURL',
+    'pingback_note'      => 'To send a pingback for a story, go to the list of stories and click on "' . $LANG24[21] . '" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing'   => 'No Pingback URL',
+    'pbtarget_required'  => 'pingback URLϤƤ',
+    'pb_error_details'   => 'pingback˥顼ޤ:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array (
+    'title'            => 'ΰ',
+    'title_year'       => '%dε',
+    'title_month_year' => '%dǯ%sε',
+    'nav_top'          => 'Υȥåפ',
+    'no_articles'      => 'Ϥޤ'
+);
+
+################################################################################
+# "What's New" Time Strings
+
+$LANG_WHATSNEW = array (
+    # This here determines the order of the sentence "No new stories in 2 hrs"
+    # order it so it makes sense in your language:
+    # %i    item, "Stories"
+    # %n    amount, "2", "20" etc
+    # %t    time, "2" (weeks)
+    # %s    scale, "hrs", "weeks"
+    'new_string'  => '%t%sǿ%i%n',
+    'new_last'    => 'Ƕ %t %s',
+    # other strings
+    'minutes'     => 'ʬ',
+    'hours'       => '',
+    'days'        => '',
+    'weeks'       => '',
+    'months'      => '',
+    'minute'      => 'ʬ',
+    'hour'        => '',
+    'day'         => '',
+    'week'        => '',
+    'month'       => ''
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display adminiatration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => '',
+    'limit_results' => '̤ιʤ',
+    'submit'        => 'Ͽ',
+    'edit'          => 'Խ',
+    'admin_home'    => '',
+    'create_new'    => '',
+    'enabled'       => 'ͭˤ',
+    'title'         => 'ȥ',
+    'type'          => '',
+    'topic'         => '',
+    'help_url'      => 'إץեURL',
+    'save'          => '¸',
+    'cancel'        => '󥻥',
+    'delete'        => '',
+    'copy'          => 'ԡ',
+    'no_results'    => '- ĤޤǤ -',
+    'data_error'    => '줿ǡ꤬ޤǡåƤ'
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'ͭ',
+    -1  => ''
+);
+
+$LANG_commentmodes = array(
+    'flat'      => '',
+    'nested'    => '',
+    'threaded'  => 'ĥ꡼',
+    'nocomment' => 'ɽʤ'
+);
+
+$LANG_cookiecodes = array(
+    0       => 'դʤ',
+    3600    => '',
+    7200    => '',
+    10800   => '',
+    28800   => '',
+    86400   => '',
+    604800  => '',
+    2678400 => ''
+);
+
+$LANG_dateformats = array(
+    0   => 'ǥե'
+);
+
+$LANG_featurecodes = array(
+    0 => '̾ε',
+    1 => 'ܵ'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'ˤɽ',
+    1 => 'ȥåץڡɽ'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'ƥ',
+    'html'      => 'HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => 'Ť',
+    'DESC' => ''
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'ȥåХåͭ',
+    -1  => 'ȥåХå'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/japanese_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/japanese_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/japanese_utf-8.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/japanese_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -6,7 +6,8 @@
 # This is the Japanese language page for GeekLog!
 # Special thanks to Mischa Polivanov for his work on this project
 #
-# Copyright (C) 2002,2003 SAKATA Yusuke
+# Copyright (C) 2002,2003,2004,2005 SAKATA Yusuke
+#               2006 Geeklog IvySOHO Project, SAKATA Yusuke
 # sakata@ecofirm.com
 #
 # This program is free software; you can redistribute it and/or
@@ -54,41 +55,41 @@
     10 => '承認待ちリスト',
     11 => '記事',
     12 => 'ブロック',
-    13 => '話題別',
+    13 => '話題',
     14 => 'リンク',
     15 => 'イベント情報',
-    16 => '投票スペース',
-    17 => 'ユーザー',
+    16 => 'アンケート',
+    17 => 'ユーザ',
     18 => 'SQL Query',
     19 => 'ログアウト',
-    20 => 'ユーザー情報:',
-    21 => '名前',
+    20 => 'ユーザ情報:',
+    21 => 'ユーザ名',
     22 => 'ID',
     23 => '管理レベル',
-    24 => '匿名',
-    25 => 'お返事',
-    26 => 'コメントは投稿者の責任においてなされるものであり、サイト管理者はなんら責任をおうものではありません。',
+    24 => 'ゲストユーザ',
+    25 => 'コメントを追加',
+    26 => 'コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。',
     27 => '最新の投稿',
     28 => '削除',
     29 => 'コメントはありません',
     30 => '以前の記事',
     31 => '使用できるHTMLタグ:',
-    32 => 'エラー。登録されていないユーザー名です',
-    33 => 'エラー。ログファイルに書き込めない',
+    32 => 'エラー。登録されていないユーザ名です',
+    33 => 'エラー。ログファイルに書き込めません',
     34 => 'エラー',
     35 => 'ログアウト',
     36 => 'on',
     37 => '投稿記事はありません',
-    38 => 'Content Syndication',
+    38 => 'RSS配信',
     39 => '更新',
     40 => ' あなたの <tt>php.ini</tt> で、<tt>register_globals = Off</tt> になっているようです。Geeklogは、 <tt>register_globals</tt> が <strong>on</strong> になっていなければなりません。 Geeklogを使うために、 <strong>on</strong> にして、Webサーバーを再起動してください。',
-    41 => 'ゲストユーザー',
+    41 => 'ゲストユーザ',
     42 => '投稿者は:',
-    43 => '返事を書く',
+    43 => 'コメントを追加',
     44 => '元の記事',
     45 => 'MySQLのエラー番号は、',
     46 => 'MySQLのエラーメッセージは、',
-    47 => 'ユーザー管理',
+    47 => 'ユーザ管理',
     48 => 'アカウント情報',
     49 => '設定',
     50 => 'SQL文にエラーがあります。',
@@ -96,65 +97,75 @@
     52 => '新規',
     53 => '管理画面',
     54 => 'ファイルが開けません',
-    55 => '次でエラー：',
+    55 => '次の場所でエラーがありました。->',
     56 => '投票',
     57 => 'パスワード',
-    58 => 'login',
-    59 => "アカウントがなければ、<a href=\"{$_CONF['site_url']}/users.php?mode=new\">登録</a>できます。",
+    58 => 'ログイン',
+    59 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">新規登録</a>",
     60 => 'コメントを投稿',
     61 => 'アカウントの作成',
-    62 => '段落（程度）',
+    62 => 'カウント',
     63 => 'コメントの設定',
     64 => '記事を友人にメールする',
     65 => '印刷用画面',
     66 => '個人カレンダー',
-    67 => '歓迎！ ',
+    67 => 'ようこそ！ ',
     68 => 'ホーム',
     69 => '連絡先',
     70 => '検索',
-    71 => '記事を書く',
-    72 => '使えるサイト',
-    73 => 'これまでの投票',
+    71 => '記事投稿',
+    72 => 'リンク',
+    73 => 'アンケート一覧',
     74 => 'カレンダー',
-    75 => '複雑な検索',
+    75 => '検索オプション',
     76 => 'アクセス情報',
-    77 => 'プラグイン（拡張機能）',
+    77 => 'プラグイン',
     78 => 'これからの予定',
     79 => '新規',
     80 => '件の記事（',
     81 => '件の記事（',
     82 => '時間以内）',
-    83 => 'コメントの数',
+    83 => 'コメント',
     84 => 'リンク集',
     85 => '（48 時間以内）',
-    86 => '新しいコメントはない。',
+    86 => '  -',
     87 => '（最近２週間）',
-    88 => 'リンクは追加されていない',
-    89 => '特に予定はない',
+    88 => '  -',
+    89 => '  -',
     90 => 'ホーム',
     91 => 'ページ作成時間：',
     92 => '秒',
     93 => 'Copyright',
     94 => '本ページのすべての商標と著作権はそれぞれの所有者に帰属します。',
     95 => 'Powered By',
-    96 => 'Groups',
-    97 => 'Word List',
-    98 => 'Plug-ins',
-    99 => '記事の件数',
+    96 => 'グループ',
+    97 => 'ワードリスト',
+    98 => 'プラグイン',
+    99 => '記事',
     100 => '新しい記事はありません',
-    101 => '個人的な予定',
+    101 => '個人の予定',
     102 => '全体の予定',
-    103 => 'データベースのバックアップ',
+    103 => 'DBのバックアップ',
     104 => '：',
-    105 => 'ユーザー全員にメール送信',
+    105 => 'グループにメール',
     106 => '閲覧件数',
-    107 => 'GL Version Test',
+    107 => 'バージョン情報',
     108 => 'キャッシュをクリア',
-    109 => 'Report abuse',
+    109 => '迷惑として報告',
     110 => '投稿をサイトの管理者に知らせる',
-    111 => 'View PDF Version',
-    112 => '登録ユーザー数：',
-    113 => '文書'
+    111 => 'PDFで閲覧',
+    112 => '登録ユーザ数：',
+    113 => 'Geeklogドキュメント',
+    114 => 'トラックバック',
+    115 => '新しいトラックバックはありません。',
+    116 => 'トラックバック',
+    117 => '記事の一覧',
+    118 => '続きのページへどうぞ：',
+    119 => "<a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">パスワードの再発行</a>",
+    120 => 'このコメントへの永続リンク（Permanent link）',
+    121 => 'コメント (%d件)',
+    122 => 'トラックバック (%d件)',
+    123 => 'すべてのHTMLを許可'
 );
 
 ###############################################################################
@@ -162,13 +173,13 @@
 
 $LANG02 = array(
     1 => 'イベント情報カレンダー',
-    2 => '残念ながら、今日はイベントがありません',
-    3 => '日時:',
-    4 => '場所:',
-    5 => '詳細:',
+    2 => '今日はイベントがありません',
+    3 => '日時',
+    4 => '場所',
+    5 => '詳細',
     6 => 'イベントの追加',
     7 => 'これからの予定',
-    8 => '個人カレンダーにこのイベントを追加すると、「個人カレンダー」をユーザー管理メニューから選択することで見ることが出来ます。',
+    8 => '個人カレンダーにこのイベントを追加すると、「個人カレンダー」をユーザ管理メニューから選択することで見ることができます。',
     9 => '個人カレンダーに追加',
     10 => '個人カレンダーから削除',
     11 => "このイベントを{$_USER['username']}の個人カレンダーに追加",
@@ -186,37 +197,37 @@
     2 => '投稿方法',
     3 => 'ログアウト',
     4 => 'アカウントを作る',
-    5 => 'ユーザー名',
+    5 => 'ユーザ名',
     6 => 'コメントを投稿するためにはログインしてください。アカウントがなければ下のフォームを使って新しいアカウントを作成できます',
     7 => 'あなたは',
     8 => " 秒前にコメントしています。投稿と投稿の間は {$_CONF['commentspeedlimit']} 秒以上開けてください",
     9 => 'コメント',
-    10 => 'Send Report',
+    10 => 'レポートを送る',
     11 => 'コメントの投稿',
     12 => '投稿するためには、タイトルとコメント内容が必要です。',
     13 => 'あなたの個人情報',
     14 => '表示テスト',
-    15 => 'Report this post',
+    15 => 'この投稿のレポート',
     16 => 'タイトル',
     17 => 'エラーです',
     18 => '注意事項',
     19 => '内容にそった話題で投稿してください',
-    20 => '出来るだけ新しい記事を作らずに他の記事にコメントするようにしてください',
+    20 => 'できるだけ新しい記事を作らずに他の記事にコメントするようにしてください',
     21 => '同じ事を投稿しないようにするために他の人の投稿をよく読んでください',
-    22 => '内容が分かるようなタイトルを付けてください',
+    22 => '内容がわかるようなタイトルをつけてください',
     23 => 'メールアドレスは「表示されません」',
-    24 => '匿名ユーザー',
+    24 => 'ゲストユーザ',
     25 => '投稿をサイト管理者に知らせますが、よろしいですか？',
-    26 => '%s さんが以下の投稿を不適切だと指摘してくださいました。',
-    27 => '不適切であると知らせる'
+    26 => '%s さんが以下の投稿を不適切だと指摘しています。',
+    27 => '不適切通知'
 );
 
 ###############################################################################
 # users.php
 
 $LANG04 = array(
-    1 => 'ユーザー情報：',
-    2 => 'ユーザー名',
+    1 => 'ユーザ情報：',
+    2 => 'ユーザ名',
     3 => '氏名',
     4 => 'パスワード',
     5 => 'Email',
@@ -226,21 +237,21 @@
     9 => '変更を保存する',
     10 => '最近10件のコメント',
     11 => 'コメントはありません',
-    12 => 'ユーザー設定：',
+    12 => 'ユーザ設定：',
     13 => '毎晩E-mailで投稿を読む',
-    14 => 'このパスワードは自動作成されたものですから、パスワードの変更をおすすめします。パスワードは、サイトにログインして、「ユーザー情報」をクリックすると変更できます。',
-    15 => "{$_CONF['site_name']} で使用するあなたのアカウントが作成されました。このアカウントを使うためには、下記のユーザー名とパスワードでログインしてください。念のため、このメールは保存しておいてください。",
+    14 => 'このパスワードは自動作成されたものですから、パスワードの変更をおすすめします。パスワードは、サイトにログインして、「ユーザ情報」をクリックすると変更できます。',
+    15 => "{$_CONF['site_name']} で使用するあなたのアカウントが作成されました。このアカウントを使うためには、下記のユーザ名とパスワードでログインしてください。念のため、このメールは保存しておいてください。",
     16 => 'アカウント情報',
     17 => 'アカウントがありません',
     18 => 'このメールアドレスは、有効なアドレスではないようです',
-    19 => 'ユーザー名かメールアドレスがすでに使われています。',
+    19 => 'ユーザ名かメールアドレスがすでに使われています。',
     20 => 'このメールアドレスは、有効なアドレスではないようです',
     21 => 'エラー',
     22 => "{$_CONF['site_name']}のアカウントを作成する",
-    23 => "{$_CONF['site_name']}にアカウントを作成すると、コメントや記事の投稿など本サイトの機能をフルに使用することが出来ます。アカウントがなければ「匿名」ユーザーとしてしか投稿できません。また、登録されたメールアドレスは絶対に表示されませんのでご安心ください",
+    23 => "{$_CONF['site_name']}にアカウントを作成すると、コメントや記事の投稿など本サイトの機能をフルに使用することができます。アカウントがなければゲストユーザとしてしか投稿できません。また、登録されたメールアドレスは絶対に表示されませんのでご安心ください",
     24 => 'パスワードは、ここに入力されたメールアドレスに送信されます',
     25 => 'パスワードが分からない人はこちら。',
-    26 => '登録時に使用したユーザー名<em>または</em>メールアドレスを入力して、「パスワード送信」をクリックしてください。新しいパスワードを設定する方法が登録されているメールアドレス宛てに送信されます。',
+    26 => '登録時に使用したユーザ名<em>または</em>メールアドレスを入力して、「パスワード送信」をクリックしてください。新しいパスワードを設定する方法が登録されているメールアドレス宛てに送信されます。',
     27 => 'アカウントの作成',
     28 => 'パスワード送信',
     29 => 'ログアウトしました：',
@@ -275,53 +286,69 @@
     58 => '並べ替え順序',
     59 => 'コメントの最大数',
     60 => 'コメントの表示方法',
-    61 => '新しいものか古いもののどちらが先がいい？',
+    61 => 'ソート',
     62 => '初期値は100です',
-    63 => "パスワードをメールで送信しましたので、まもなく届くはずです。メッセージに利用方法が書かれていますので、参考にしてください。{$_CONF['site_name']}を利用してくださってありがとうございます。",
+    63 => "パスワードをメールで送信しましたので、まもなく届くはずです。メッセージに利用方法が書かれていますので、参考にしてください。{$_CONF['site_name']}を利用していただきありがとうございます。",
     64 => 'コメントの設定：',
     65 => 'ログインし直して見てください',
-    66 => 'タイプミスがあったようです。もう一度ログインしてみてください。パスワードが分からなければ、新しいパスワードを発行しますので、下記のフォームに記入してみてください。',
+    66 => 'タイプミスがあったようです。もう一度ログインしてみてください。パスワードが分からなければ、新しいパスワードを発行しますので、下記のフォームに記入してください。',
     67 => '加入期間',
     68 => '認証の保存期間',
     69 => 'いったんログインした後、どのぐらい情報を残しておけばいいですか？',
     70 => "{$_CONF['site_name']}の表示と内容を設定",
-    71 => "{$_CONF['site_name']}の特徴として、表示される記事のテーマや表示を自由に変えることが出来ることがあります。そのためには、まず、{$_CONF['site_name']}に<a href=\"{$_CONF['site_url']}/users.php?mode=new\">ユーザー登録</a>する必要があります。もし、すでに登録済みならば左のフォームを利用してログインしてください。",
+    71 => "{$_CONF['site_name']}の特徴として、表示される記事のテーマや表示を自由に変えることができます。そのためには、まず、{$_CONF['site_name']}に<a href=\"{$_CONF['site_url']}/users.php?mode=new\">ユーザ登録</a>する必要があります。もし、すでに登録済みならば左のフォームを利用してログインしてください。",
     72 => 'テーマ',
     73 => '言語',
     74 => 'このサイトの外見を変更してみよう',
     75 => '記事がメールで送信されました。あて先：',
-    76 => '下記のリストから話題を選択すれば、一日の終わりに投稿内容をメールで受け取ることが出来ます。興味のある話題だけ選択するようにしてください。',
+    76 => '下記のリストから話題を選択すれば、一日の終わりに投稿内容をメールで受け取ることができます。興味のある話題だけ選択するようにしてください。',
     77 => '写真',
     78 => '自分自身の写真を追加しよう',
     79 => '写真を削除する場合、ここをチェックしてください',
     80 => 'ログイン',
     81 => 'メール送信',
-    82 => 'ユーザーによる最近の投稿10件。ユーザー：',
-    83 => 'ユーザーの投稿状況。ユーザー：',
+    82 => 'ユーザによる最近の投稿10件。ユーザ：',
+    83 => 'ユーザの投稿状況。ユーザ：',
     84 => '投稿記事の総数:',
     85 => 'コメントの総数:',
-    86 => 'ユーザーのすべての投稿を検索する。ユーザー:',
+    86 => 'ユーザのすべての投稿を検索する。ユーザ:',
     87 => 'あなたのログイン名',
-    88 => "誰か（たぶんあなただと思いますが）が、{$_CONF['site_name']}（{$_CONF['site_url']}）上のあなたのアカウント（\"%s\"）のパスワード変更を申請しました。\n\n本当にアカウントを変更するのなら以下のリンクをクリックしてください。\n\n",
+    88 => "{$_CONF['site_name']}（{$_CONF['site_url']}）上のあなたのアカウント（\"%s\"）のパスワード変更が申請されています。\n\n本当にアカウントを変更するのなら以下のリンクをクリックしてください。\n\n",
     89 => "もし、パスワードを変更したくない場合には、このメッセージを無視してください。そうすれば、申請は却下されます（パスワードは変更されません）。\n\n",
     90 => '下に新しいパスワードを入れてください。このフォームを提出するまでは現在のパスワードが有効であることに注意してください。',
     91 => '新パスワードの設定',
     92 => '新しいパスワードを入力',
     93 => '直前のパスワード変更要求は、%d秒前でした。このサイトでは、変更の間に%d秒待つ必要があります。',
     94 => 'アカウント（"%s"）を削除',
-    95 => 'データベースからアカウントを削除するには、下の"アカウントの削除" ボタンを押してください。ただし、あなたのアカウント名で投稿された記事やコメントは<strong>削除されません</strong>ので、ご注意ください。これらの記事やコメントは"anonymous"によって投稿されたものとして表示されます。',
+    95 => 'データベースからアカウントを削除するには、下の"アカウントの削除" ボタンを押してください。ただし、あなたのアカウント名で投稿された記事やコメントは<strong>削除されません</strong>ので、ご注意ください。これらの記事やコメントは"ゲストユーザ"によって投稿されたものとして表示されます。',
     96 => 'アカウントを削除',
     97 => 'アカウント削除の確認',
     98 => '本当にアカウントを削除しますか。削除してしまえば、このサイトに新しいアカウントを作らない限り、ログインできなくなります。よろしければ、もう一度"アカウントの削除"ボタンを押してください',
     99 => 'プライバシーオプション：',
     100 => '管理者からのメール',
     101 => 'サイト管理者からのメールを受け取る',
-    102 => '他のユーザーからのメール',
-    103 => '他のユーザーからのメールを受け取る',
+    102 => '他のユーザからのメール',
+    103 => '他のユーザからのメールを受け取る',
     104 => 'オンラインかどうかを表示する',
     105 => '「現在のログイン状況」に名前を表示する',
     106 => '居住地',
-    107 => '公開プロフィールで表示'
+    107 => '公開プロフィールで表示',
+    108 => '新しいパスワードの確認',
+    109 => '新しいパスワードを再入力',
+    110 => '現在のパスワード',
+    111 => '現在のパスワードを入力してください',
+    112 => 'ログイン試行回数を超えてしまいましたので、後ほどまたログインしてみてください。',
+    113 => 'ログインできませんでした',
+    114 => 'アカウントが無効になっています',
+    115 => 'アカウントが無効になりましたのでログインできません。管理者に連絡してください。',
+    116 => 'アカウントが有効になるのを待機しています',
+    117 => 'あなたのアカウントは管理者が有効にするのを待っています。管理者が承認するまでログインできません。',
+    118 => "{$_CONF['site_name']} のあなたのアカウントが有効になりました。以下のリンクから、あなたのユーザ名(<username>)とメールで送られてきたパスワードでログインできます。",
+    119 => "パスワードを忘れてしまっていれば、以下のリンクから新しいパスワードを申請できます。",
+    120 => 'アカウントが有効になりました。',
+    121 => 'サービス',
+    122 => 'ユーザの新規登録は停止中です。ごめんなさい。',
+    123 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">新規登録</a>"
 );
 
 ###############################################################################
@@ -329,7 +356,7 @@
 
 $LANG05 = array(
     1 => '表示する記事はありません',
-    2 => '表示する記事はありません。このテーマに関する投稿がないのか表示設定を絞り過ぎなのかのどちらかでしょうね。',
+    2 => '表示する記事はありません。このテーマに関する投稿がないのか表示設定を絞り過ぎなのかのどちらかです。',
     3 => ' %s に関するもの',
     4 => '今日の注目記事',
     5 => '次',
@@ -339,42 +366,21 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => '使えるWebページ',
-    2 => '表示するリンクはありません',
-    3 => 'リンクの追加'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => '投票が登録されました',
-    2 => '今の投票が登録されました',
-    3 => '投票する',
-    4 => '件の投票を募集中',
-    5 => '件の投票',
-    6 => '他の投票を見る'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
     1 => 'メッセージを送信する際にエラーが発生しました。もう一度試してください。',
     2 => 'メッセージは送信されました',
-    3 => 'Reply Toに正しいe-mailアドレスを記入していますか？',
-    4 => '名前、Reply To, タイトル、内容を記入してください',
-    5 => 'そんなユーザーはいません',
+    3 => '返信先に正しいe-mailアドレスを記入していますか？',
+    4 => '名前、返信先、タイトル、内容を記入してください',
+    5 => '該当ユーザはいません',
     6 => 'エラーが発生しました',
-    7 => 'ユーザー情報：',
+    7 => 'ユーザ情報：',
     8 => '氏名',
     9 => 'URL',
     10 => 'メールの宛先',
     11 => 'あなたの名前:',
-    12 => 'Reply To:',
+    12 => '返信先:',
     13 => 'タイトル:',
     14 => '内容:',
     15 => 'HTMLは変換されません',
@@ -386,32 +392,32 @@
     21 => 'あなたのE-mailアドレス',
     22 => 'すべての項目を記入してください',
     23 => "このメールは、%s さんが{$_CONF['site_url']}の記事で、あなたに知らせたいと思ったため、%s のアドレスから送信されました。これはいわゆる迷惑（SPAM）メールではありませんし、送信に使用されたアドレスを他の目的に使用することもありません。",
-    24 => 'この記事に関するコメントは次の場所で出来ます。',
+    24 => 'この記事に関するコメントは次の場所でできます。',
     25 => 'この機能を使用するためにはログインしてください。',
-    26 => 'このフォームは対象のユーザーにメールを送るためのものなので、すべての項目を入力してください。',
+    26 => 'このフォームは対象のユーザにメールを送るためのものなので、すべての項目を入力してください。',
     27 => 'メッセージ',
     28 => '%s さんからのメッセージ: ',
     29 => "今日の{$_CONF['site_name']} に関するダイジェストです。宛先：",
     30 => ' 今日のニュースレターです。宛先： ',
     31 => 'タイトル',
     32 => '日付',
-    33 => '以下の場所で記事全体を読むことが出来ます。',
+    33 => '以下の場所で記事全体を読むことができます。',
     34 => 'メッセージは以上です',
-    35 => '残念ながらこのユーザーはメールを受け付けておりません。'
+    35 => '残念ながらこのユーザはメールを受け付けておりません。'
 );
 
 ###############################################################################
 # search.php
 
 $LANG09 = array(
-    1 => '複雑な検索',
+    1 => '検索オプション',
     2 => 'キーワード',
     3 => '話題',
     4 => 'すべて',
     5 => '種別',
     6 => '記事の数',
     7 => 'コメント数',
-    8 => '書いた人',
+    8 => 'ユーザ',
     9 => 'すべて',
     10 => '検索',
     11 => '検索結果',
@@ -421,7 +427,7 @@
     15 => 'キーワードを変えて再検索してみてください',
     16 => 'タイトル',
     17 => '日付',
-    18 => '書いた人',
+    18 => 'ユーザ',
     19 => " {$_CONF['site_name']} 全体のすべての記事を検索する",
     20 => '日付',
     21 => '〜',
@@ -460,7 +466,12 @@
     54 => 'コメントの検索結果',
     55 => '検索文字列',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => '次の検索結果へ &gt;&gt;',
+    59 => '１ページあたりの件数',
+    60 => '件',
+    61 => '検索条件の修正'
+
 );
 
 ###############################################################################
@@ -488,9 +499,16 @@
     19 => 'タイトル',
     20 => '件',
     21 => 'このサイトにはリンクが一つもないか、リンクをクリックした人が一人もいないのかのどちらかだと思います',
-    22 => '友達に紹介された記事（上位10件）',
+    22 => '紹介件数の多い記事（上位10件）',
     23 => '件',
-    24 => '友達に紹介された記事はないようです'
+    24 => '友達に紹介された記事はないようです',
+    25 => 'トラックバックが多い記事（上位10件）',
+    26 => 'トラックバックはありません',
+    27 => '登録ユーザの数',
+    28 => 'イベント（上位１０件）',
+    29 => 'イベント',
+    30 => 'ヒット',
+    31 => 'イベントが登録されていないか、まだクリックされていません。'
 );
 
 ###############################################################################
@@ -516,7 +534,7 @@
     6 => '記事の投稿',
     7 => 'ログインが必要です',
     8 => '送る',
-    9 => 'このサイトに情報を投稿する際には、次のルールを守ってください。<ul><li>必要とされるすべての項目を記入してください。<li>正確・かつ必要十分な情報を提供してください<li>URLsについては特に注意して確認してください</ul>',
+    9 => 'このサイトに情報を投稿する際には、次のルールを守ってください。<ul><li>必要とされるすべての項目を記入してください。<li>正確かつ必要十分な情報を提供してください<li>URLについては特に注意して確認してください</ul>',
     10 => 'タイトル',
     11 => 'リンク',
     12 => '開始日',
@@ -534,7 +552,7 @@
     24 => '投稿は受け付けられました',
     25 => '%s に関する投稿は受け付けられました',
     26 => '投稿間隔の制限',
-    27 => 'ユーザー名',
+    27 => 'ユーザ名',
     28 => '話題',
     29 => '記事',
     30 => '前回、あなたは、',
@@ -544,7 +562,7 @@
     34 => 'ログアウト',
     35 => 'HTMLタグは使用できません',
     36 => '投稿モード',
-    37 => "{$_CONF['site_name']}にイベントを投稿すると、サイト全体のカレンダーに登録されます。登録されたイベントは各ユーザーが必要に応じて個人的なカレンダーに登録します。つまり、カレンダー機能は、誕生日や記念日などあなたの個人的なスケジュール帳として使われることを想定しているものでは<b>ありません</b>。<br><br>イベントを投稿し、管理者が承認した場合、イベントはサイト全体のカレンダーに表示されてしまいます。",
+    37 => "{$_CONF['site_name']}にイベントを投稿すると、サイト全体のカレンダーに登録されます。登録されたイベントは各ユーザが必要に応じて個人的なカレンダーに登録します。つまり、カレンダー機能は、誕生日や記念日などあなたの個人的なスケジュール帳として使われることを想定しているものでは<b>ありません</b>。<br><br>イベントを投稿し、管理者が承認した場合、イベントはサイト全体のカレンダーに表示されてしまいます。",
     38 => '予定の追加。追加先：',
     39 => '全体カレンダー',
     40 => '個人カレンダー',
@@ -573,8 +591,8 @@
 $LANG20 = array(
     1 => '管理者権限が必要です',
     2 => 'ログインできません。正しく入力してください',
-    3 => 'パスワードが違います。ユーザー名：',
-    4 => 'ユーザー名：',
+    3 => 'パスワードが違います。ユーザ名：',
+    4 => 'ユーザ名：',
     5 => 'パスワード：',
     6 => '管理ツールの使用については、すべてが記録されて、チェックされます。<br>このページは、承認された管理者のみが使用できます。',
     7 => 'ログイン'
@@ -613,7 +631,7 @@
     27 => 'PHPブロック',
     28 => 'PHPブロックのオプション',
     29 => '関数',
-    30 => 'PHPコードを使用したブロックを使う場合、phpblock_（e.g. phpblock_getweather）ではじまるPHPの関数名を上に記入してください。phpblockではじまっていない場合、関数は呼び出されません。これは、悪意を持ったユーザーがサイトに有害な関数を定義することを避けるためです。関数の後の（）は不要です。PHPブロックのコードは、/path/to/geeklog/system/lib-custom.phpに記入しておくと、Geeklogをアップグレードしても使用し続けることが出来ます。',
+    30 => 'PHPコードを使用したブロックを使う場合、phpblock_（e.g. phpblock_getweather）ではじまるPHPの関数名を上に記入してください。phpblockではじまっていない場合、関数は呼び出されません。これは、悪意を持ったユーザがサイトに有害な関数を定義することを避けるためです。関数の後の（）は不要です。PHPブロックのコードは、/path/to/geeklog/system/lib-custom.phpに記入しておくと、Geeklogをアップグレードしても使用し続けることができます。',
     31 => 'PHPブロックにエラーがあります。%sが存在しません',
     32 => 'エラー。未記入の項目があります',
     33 => 'ポータルブロックの.rdfファイルにはURLが記入されている必要があります',
@@ -626,9 +644,9 @@
     40 => '左',
     41 => '右',
     42 => 'ブロックの表示順序とセキュリティレベルを入力してください',
-    43 => 'ホームページのみ',
+    43 => 'トップページのみ',
     44 => 'アクセスが拒否されました',
-    45 => "管理権限のないブロックを編集しようとしました。この行為は記録として残ります。<a href=\"{$_CONF['site_admin_url']}/block.php\">ブロックの編集</a>画面に戻ってください.",
+    45 => "管理権限のないブロックを編集しようとしました。この行為は記録されます。<a href=\"{$_CONF['site_admin_url']}/block.php\">ブロックの編集</a>画面に戻ってください.",
     46 => '新規ブロック',
     47 => '管理画面',
     48 => 'ブロック名',
@@ -643,7 +661,12 @@
     57 => 'ブロックを下に',
     58 => 'ブロックを上に',
     59 => 'ブロックを右側に',
-    60 => 'ブロックを左側に'
+    60 => 'ブロックを左側に',
+    61 => 'タイトルなし',
+    62 => '記事の表示件数（Article Limits）',
+    63 => 'ブロックのタイトルが不適切です',
+    64 => 'タイトルは空欄ではいけませんし、HTMLを含んでもいけません。',
+    65 => '整列順'
 );
 
 ###############################################################################
@@ -652,7 +675,7 @@
 $LANG22 = array(
     1 => '予定の編集',
     2 => 'エラー',
-    3 => '予定名',
+    3 => '投稿モード',
     4 => '関連URL',
     5 => '開始日',
     6 => '終了日',
@@ -674,36 +697,12 @@
     22 => '削除',
     23 => '開始日がおかしいです',
     24 => '終了日がおかしいです',
-    25 => '終了日が開始日よりも前です'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'リンクの編集',
-    2 => '',
-    3 => 'リンク先の名前',
-    4 => 'リンク先のURL',
-    5 => '分類',
-    6 => '(http://からはじめてください)',
-    7 => 'その他',
-    8 => 'リンクのヒット数',
-    9 => 'リンクの詳細',
-    10 => 'リンクの名前、URL、詳細について記入してください',
-    11 => 'リンクの管理',
-    12 => 'リンクの編集・削除は、リンク自体をクリックしてください。新しく作成する場合は、上の「新規リンク」をクリックしてください',
-    13 => 'リンク先の名前',
-    14 => 'リンクの分類',
-    15 => 'リンク先のURL',
-    16 => 'アクセスが拒否されました',
-    17 => "管理権限のないリンクを編集しようとしました。この行為は記録として残ります。<a href=\"{$_CONF['site_admin_url']}/link.php\">リンク編集画面</a>に戻ってください",
-    18 => '新規リンク',
-    19 => '管理画面',
-    20 => '新規分類',
-    21 => '保存',
-    22 => '中止',
-    23 => '削除'
+    25 => '終了日が開始日よりも前です',
+    26 => '登録',
+    27 => '1ページの表示件数',
+    28 => '検索',
+    29 => '編集',
+    30 => 'コピー'
 );
 
 ###############################################################################
@@ -716,52 +715,52 @@
     4 => '投稿モード',
     5 => '記事の編集',
     6 => 'このページに記事は一件もありませんでした',
-    7 => '書いた人：',
+    7 => 'ユーザ',
     8 => '保存',
     9 => 'プレビュー',
     10 => '中止',
     11 => '削除',
     12 => 'ID',
-    13 => 'タイトル',
-    14 => '話題',
+    13 => '',
+    14 => '',
     15 => '日時',
     16 => '投稿内容',
     17 => '投稿内容（詳細）',
     18 => '閲覧件数',
     19 => 'コメント数',
-    20 => '',
-    21 => '',
+    20 => 'Pingの数',
+    21 => 'Pingを送る',
     22 => '記事の一覧',
     23 => '記事を削除・編集するには、記事の番号をクリックすること。記事を見るには、記事のタイトルをクリックする。新しい記事を作成する場合は、「新規」をクリックすること。',
     24 => '指定したIDはすでに使われています。別のIDを試してみてください。',
-    25 => '',
+    25 => '記事の登録中にエラーがありました。',
     26 => '記事のプレビュー',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => '[unscaledX]を[imageX]の代わりに使うと、画像はオリジナルのサイズで表示されます。',
+    28 => '<p><b>プレビュー</b>: 画像付きの記事をプレビューする場合、プレビューボタンを押すよりも、一旦ドラフトとして保存することをお勧めします。プレビューボタンは画像がない場合にだけ使ってください。',
+    29 => 'トラッックバック数',
     30 => 'ファイルのアップロード時にエラーが発生しました',
     31 => 'タイトルと最初の部分を記入してください',
     32 => '注目記事',
     33 => '注目記事は一つだけ指定できます',
-    34 => 'ドラフト',
+    34 => 'ドラフト（下書き）',
     35 => 'はい',
     36 => 'いいえ',
     37 => '同じ投稿者からの投稿：',
     38 => '同じカテゴリ：',
     39 => '紹介された件数',
-    40 => 'アクセスが拒否されました。',
+    40 => '',
     41 => "管理権限のない記事を編集しようとしました。この行為は記録されます。下記の記事は読みとり専用です。読み終わったら、<a href=\"{$_CONF['site_admin_url']}/story.php\">記事の編集画面</a>に戻ってください。",
     42 => "管理権限のない記事を編集しようとしました。この行為は記録されます。<a href=\"{$_CONF['site_admin_url']}/story.php\">記事の編集画面</a>に戻ってください",
-    43 => '新しい記事',
-    44 => '管理画面',
-    45 => '件のアクセス',
+    43 => '',
+    44 => '',
+    45 => '',
     46 => '<b>注意:</b> 記事の日付を将来の日付に変更すると、その日まで表示されません。また、RDFヘッドラインにも反映されませんし、検索やサイト情報にも反映されないことに注意してください。',
     47 => 'image',
     48 => 'image',
     49 => 'right',
     50 => 'left',
-    51 => '添付した画像を記事に表示するためには、特別な書式が必要です。書式は、[imageX]　、[imageX_right]あるいは、[imageX_left]のいずれかです。ただし、Xは添付した画像の番号です。注意：添付した画像は記事内で使用しなければ記事を保存できません。<BR><P><B>プレビュー</B>: 画像付きの記事はドラフトとして保存して閲覧してください。プレビューボタンは画像が無い場合だけに使用してください。',
-    52 => '削除',
+    51 => '添付した画像を記事に表示するためには、特別な書式が必要です。書式は、[imageX]　、[imageX_right]あるいは、[imageX_left]のいずれかです。ただし、Xは添付した画像の番号です。注意：添付した画像は記事内で使用しなければ記事を保存できません。<BR><P><B>プレビュー</B>: 画像付きの記事はドラフト（下書き）として保存して閲覧してください。プレビューボタンは画像が無い場合だけに使用してください。',
+    52 => '',
     53 => 'は使用されていません。保存する前に本文か詳細説明に画像を使用しなければなりません。',
     54 => '添付された画像は使用されていません。',
     55 => '記事を保存する際に下記のエラーが発生しました。保存する前に修正してください。',
@@ -769,41 +768,32 @@
     57 => '元のサイズの画像を表示',
     58 => '記事の管理',
     59 => 'オプション',
-    60 => '有効',
+    60 => '',
     61 => '自動で圧縮',
-    62 => '自動で削除'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'モード',
-    2 => '質問と最低一つの選択肢を入力してください',
-    3 => '投票コーナーが作成された',
-    4 => '投票コーナー（ %s ）が保存された',
-    5 => '投票コーナーの編集',
-    6 => '投票コーナーの ID',
-    7 => '(スペースを含まないこと)',
-    8 => 'ホームページに表示する',
-    9 => '質問すること',
-    10 => '回答 ／ 投票数',
-    11 => '投票コーナー( %s )における選択肢にエラーがありました',
-    12 => '投票コーナー( %s )における質問項目にエラーがありました',
-    13 => '投票コーナーの作成',
-    14 => '保存',
-    15 => '中止',
-    16 => '削除',
-    17 => '投票IDを入力してください。',
-    18 => '投票コーナー一覧',
-    19 => '投票コーナーを削除・編集するためには、投票コーナーをクリックしてください。新規に作成する場合は、「新規コーナー」をクリックしてください。',
-    20 => '投票者',
-    21 => 'アクセスが拒否されました。',
-    22 => "管理権限のない記事を編集しようとしました。この行為は記録されます。<a href=\"{$_CONF['site_admin_url']}/poll.php\">投票の管理画面</a>に戻ってください",
-    23 => '新規投票コーナー',
-    24 => '管理画面',
-    25 => 'はい',
-    26 => 'いいえ'
+    62 => '自動で削除',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => '編集エリアの拡大',
+    68 => '編集エリアの縮小',
+    69 => '投稿日時と公開モードの設定',
+    70 => 'ツールバーの選択',
+    71 => '基本的なツールバー',
+    72 => '一般的なツールバー',
+    73 => '拡張ツールバー',
+    74 => '拡張ツールバーその２',
+    75 => '全機能',
+    76 => '公開用オプション',
+    77 => 'Advanced Editorを使うためには、Javascriptが使えるようになっている必要があります。このオプションはconfig.phpで無効にできます。 ',
+    78 => '通常のエディタを使うには、<a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">ここ</a> をクリックしてください。',
+    79 => 'プレビュー',
+    80 => 'エディタ',
+    81 => '公開用オプション',
+    82 => '画像',
+    83 => '保存用オプション',
+    84 => '利用権限',
+    85 => 'すべて表示'
 );
 
 ###############################################################################
@@ -818,7 +808,7 @@
     6 => '話題を削除すると、関連した記事・ブロックもすべて削除されます',
     7 => '話題用IDと話題名を記入してください',
     8 => '話題の設定',
-    9 => '話題を編集したり削除する場合は話題名をクリックしてください。新しい話題を作成する場合は、左の「新しい話題」ボタンをクリックしてください。カッコ内はあなたのアクセスレベルです。*は、デフォルトの話題です。',
+    9 => '話題を編集したり削除する場合は話題名をクリックしてください。新しい話題を作成する場合は、左の「新規作成」ボタンをクリックしてください。カッコ内はあなたのアクセスレベルです。*は、デフォルトの話題です。',
     10 => '並べる順序',
     11 => '１ページあたりの記事数',
     12 => 'アクセスが拒否されました',
@@ -832,52 +822,66 @@
     20 => '中止',
     21 => '削除',
     22 => 'デフォルト',
-    23 => 'このトピックを新規記事投稿の際のデフォルトにします。',
+    23 => 'この話題を新規記事投稿の際のデフォルトにします。',
     24 => '(*)',
-    25 => 'このトピックを圧縮',
-    26 => 'このトピックを記事のデフォルトにする。デフォルトトピックは一つだけしていできます。'
+    25 => 'この話題を圧縮',
+    26 => 'この話題を記事のデフォルトにする。デフォルトの話題は一つだけ指定できます。',
+    27 => 'または、話題用アイコンをアップロード',
+    28 => '最大',
+    29 => 'ファイルアップロード時にエラー'
 );
 
 ###############################################################################
 # admin/user.php
 
 $LANG28 = array(
-    1 => 'ユーザーの編集',
-    2 => 'ユーザーID',
-    3 => 'ユーザー名',
+    1 => 'ユーザの編集',
+    2 => 'ユーザID',
+    3 => 'ユーザ名',
     4 => '氏名',
     5 => 'パスワード',
     6 => 'セキュリティレベル',
     7 => 'メールアドレス',
     8 => 'ホームページ',
     9 => '(スペースを含まない)',
-    10 => 'ユーザー名・メールアドレスを記入してください。',
-    11 => 'ユーザー管理',
-    12 => 'ユーザー情報の変更、削除はユーザー名をクリックしてください。新規ユーザーを作成する場合は、左の「新規ユーザー」ボタンをクリックしてください。下のフォームを使えば、ユーザー名、メールアドレス、氏名について単純な部分検索が可能です。（例：*田、*原*）',
+    10 => 'ユーザ名・メールアドレスを記入してください。',
+    11 => 'ユーザ管理',
+    12 => 'ユーザ情報の変更、削除はユーザ名左のアイコンをクリックしてください。新規ユーザを作成する場合は、左の「新規作成」ボタンをクリックしてください。下のフォームを使えば、ユーザ名、メールアドレス、氏名について単純な部分検索が可能です。（例：*田、*原*）',
     13 => 'セキュリティ',
     14 => '登録日',
-    15 => '新規ユーザー',
+    15 => '新規ユーザ',
     16 => '管理画面',
     17 => 'パスワード変更',
     18 => '中止',
     19 => '削除',
     20 => '保存',
-    21 => '登録しようとしたユーザー名はすでに存在します',
+    21 => '登録しようとしたユーザ名はすでに存在します',
     22 => 'エラー',
     23 => '一括登録',
-    24 => 'ユーザーの一括インポート',
-    25 => 'ユーザーをGeeklogに一括インポートできます。インポートするファイルはタブ区切りで、フィールドは次の順に並んでいる必要があります。氏名、ユーザー名、e-mail。インポートするユーザーのパスワードは無作為に決定されます。ユーザーは一行辺り一人ずつ記入します。以上の説明どおりにファイルを作成しなかった場合、何らかの問題が起こる可能性があり、その場合、手動で修正することになりますので、注意してください。',
+    24 => 'ユーザの一括インポート',
+    25 => 'ユーザをGeeklogに一括インポートできます。インポートするファイルはタブ区切りで、フィールドは次の順に並んでいる必要があります。氏名、ユーザ名、e-mail。インポートするユーザのパスワードは無作為に決定されます。ユーザは一行あたり一人ずつ記入します。以上の説明どおりにファイルを作成しなかった場合、何らかの問題が起こる可能性があり、その場合、手動で修正することになりますので、注意してください。',
     26 => '検索',
     27 => '絞込み検索',
     28 => '画像を削除する場合チェックする',
     29 => 'パス',
     30 => 'インポート',
-    31 => '新規ユーザー',
+    31 => '新規ユーザ',
     32 => '処理が完了しました。%d 件登録が成功しました。%d 件のエラーが発生しました',
     33 => '検索',
     34 => 'エラー：登録するファイルを指定してください',
     35 => '最後のログイン日時',
-    36 => '(一度もログインしていない)'
+    36 => '(未)',
+    37 => 'ユーザID',
+    38 => 'グループ一覧',
+    39 => 'パスワード (再入力)',
+    40 => '登録日',
+    41 => '最終ログインの日付',
+    42 => '無効',
+    43 => 'ユーザのログイン待ち',
+    44 => '管理者の承認待ち',
+    45 => '有効',
+    46 => 'ユーザの状態',
+    47 => '編集'
 );
 
 ###############################################################################
@@ -894,7 +898,7 @@
     13 => 'カテゴリー',
     14 => '日付',
     15 => '話題',
-    16 => 'ユーザー名',
+    16 => 'ユーザ名',
     17 => '氏名',
     18 => 'Email',
     34 => '投稿の管理',
@@ -903,7 +907,7 @@
     37 => '予定の投稿',
     38 => '登録',
     39 => '承認するべき投稿はないです',
-    40 => 'ユーザー登録の申請'
+    40 => 'ユーザ登録の申請'
 );
 
 ###############################################################################
@@ -946,7 +950,7 @@
     34 => '時間',
     35 => '追加（簡易版）',
     36 => '登録',
-    37 => '残念ながら、本サイトでは個人用カレンダーは利用できません',
+    37 => '本サイトでは個人用カレンダーは利用できません',
     38 => '個人用予定の編集',
     39 => '日',
     40 => '週',
@@ -957,28 +961,28 @@
 # admin/mail.php
 
 $LANG31 = array(
-    1 => 'Mail',
-    2 => 'From',
-    3 => 'Reply-to',
+    1 => 'グループにメールを送信',
+    2 => '送信元',
+    3 => '返信先',
     4 => 'タイトル',
     5 => '内容',
     6 => '送信先：',
-    7 => 'すべてのユーザー',
+    7 => 'すべてのユーザ',
     8 => '管理者',
     9 => 'オプション',
     10 => 'HTML',
     11 => '緊急！',
     12 => '送る',
     13 => '入力し直す',
-    14 => 'ユーザー設定を無視して送る',
+    14 => 'ユーザ設定を無視して送る',
     15 => '送信中にエラーが発生。宛先： ',
-    16 => 'メッセージは無事送信されました。宛先：',
+    16 => 'メッセージの送信が完了しました。宛先：',
     17 => "<a href={$_CONF['site_admin_url']}/mail.php>他のメッセージを送る</a>",
     18 => 'To',
     19 => 'NOTE: サイトの登録者全員にメールを送るには、ドロップダウンリストから「Logged-in Users」を選択してください。',
-    20 => "<successcount> 件のメッセージの送信に成功し、<failcount> 件のメッセージの送信には失敗しました。個別のメッセージの送信状態は次のとおりです。<a href=\"{$_CONF['site_admin_url']}/mail.php\">別のメッセージを送信</a>するか、<a href=\"{$_CONF['site_admin_url']}/moderation.php\">管理画面に戻る</a>ことが出来ます",
-    21 => '件の失敗',
-    22 => '件の成功',
+    20 => "<successcount> 件のメッセージの送信に成功し、<failcount> 件のメッセージの送信には失敗しました。個別のメッセージの送信状態は次のとおりです。<a href=\"{$_CONF['site_admin_url']}/mail.php\">別のメッセージを送信</a>するか、<a href=\"{$_CONF['site_admin_url']}/moderation.php\">管理画面に戻る</a>ことができます",
+    21 => '送信失敗',
+    22 => '送信成功',
     23 => '失敗したものはありません',
     24 => '成功したものはありません',
     25 => '-- グループを選択 --',
@@ -999,7 +1003,7 @@
     8 => 'プラグインの互換性チェックに失敗しました。',
     9 => 'このプラグインは新しいバージョンのGeekLogが必要です。<a href=http://www.geeklog.net>Geeklog</a>をアップグレードするか、新しいバージョンのプラグインを入手してください。',
     10 => '<br><b>プラグインはインストールされていません</b><br><br>',
-    11 => 'プラグインを修正・削除するにはプラグインの名前をクリックしてください。プラグインの作者のページへのリンクも併せて表示されます。プラグインのバージョンは、インストール中のものとファイルから得られたものが表示されます。これによってプラグインの更新の必要性を判断することができます。',
+    11 => 'プラグインを修正・削除するにはプラグイン左側のアイコンをクリックしてください。プラグインの作者のページへのリンクも併せて表示されます。プラグインのバージョンは、インストール中のものとファイルから得られたものが表示されます。これによってプラグインの更新の必要性を判断することができます。',
     12 => 'plugineditor()にプラグイン名が渡されませんでした',
     13 => 'プラグインの編集',
     14 => '新規',
@@ -1020,9 +1024,13 @@
     29 => 'ファイルのバージョン',
     30 => 'プラグインを削除しますか？',
     31 => 'このプラグインを削除しますが、よろしいですか？削除する場合は関連するファイルやデータがすべて削除されます。削除する場合は「削除」ボタンをもう一度押してください。',
-    32 => '<p><b>AutoLingタグのフォーマットが正しくありません。</b></p>',
+    32 => '<p><b>オートリンクタグのフォーマットが正しくありません。</b></p>',
     33 => '最新のバージョン',
-    34 => 'Update'
+    34 => '更新',
+    35 => '編集',
+    36 => 'コード',
+    37 => 'データ',
+    38 => '更新されています'
 );
 
 ###############################################################################
@@ -1033,10 +1041,10 @@
     2 => '保存',
     3 => '削除',
     4 => 'キャンセル',
-    10 => 'Content Syndication',
+    10 => 'RSS配信',
     11 => '新しいフィード',
     12 => '管理画面',
-    13 => 'フィードを修正・削除する場合は、タイトルをクリックしてください。新しいフィードを作成する場合は、「新規フィード」をクリックしてください。',
+    13 => 'フィードを修正・削除する場合は、タイトル左のアイコンをクリックしてください。新しいフィードを作成する場合は、「新規フィード」をクリックしてください。',
     14 => 'タイトル',
     15 => '種別',
     16 => 'ファイル名',
@@ -1049,23 +1057,31 @@
     23 => 'すべての記事',
     24 => 'フィードの編集',
     25 => 'フィードのタイトル',
-    26 => 'Limit',
+    26 => '配信条件',
     27 => 'エントリの長さ',
-    28 => '(0 = no text, 1 = full text, other = 指定した文字数に制限。)',
+    28 => '(0 = 本文なし, 1 = 本文すべて, other = 指定した文字数に制限。)',
     29 => '詳細',
     30 => '更新',
     31 => '文字コード',
     32 => '言語',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
+    33 => 'カテゴリ',
+    34 => '件',
+    35 => '時間以内',
     36 => 'フィードの種別を選択してください。',
-    37 => 'content syndicationを有効にするためには、関係するプラグインを少なくとも一つインストールしておいて下さい。以下では、Geeklogのフィードを作成するのか、プラグインで取得するフィードを作成するのか選択してください。',
-    38 => 'Error: 入力していない項目があります。',
+    37 => 'RSS配信を有効にするためには、関係するプラグインを少なくとも一つインストールしておいて下さい。以下では、Geeklogのフィードを作成するのか、プラグインで取得するフィードを作成するのか選択してください。',
+    38 => 'エラー: 入力していない項目があります。',
     39 => 'フィードのタイトル、詳細、ファイル名を入力してください。',
     40 => 'エントリ数または、取得する時間を入力してください。',
-    41 => 'Links',
-    42 => 'Events'
+    41 => 'リンク',
+    42 => 'イベント',
+    43 => 'すべて',
+    44 => 'なし',
+    45 => 'この話題のタイトルをリンクする',
+    46 => '表示件数',
+    47 => '検索',
+    48 => '編集',
+    49 => 'ロゴ',
+    50 => "本サイトからの相対URL ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1092,37 +1108,37 @@
     18 => '予定を削除しました。',
     19 => '投票の変更を反映しました。',
     20 => '投票を削除しました。',
-    21 => '新規ユーザーを作成しました。',
-    22 => 'ユーザーを削除しました。',
+    21 => '新規ユーザを作成しました。',
+    22 => 'ユーザを削除しました。',
     23 => '予定ＩＤがなかったため、予定を追加できませんでした。',
     24 => '予定の変更をカレンダーに反映させました。',
     25 => 'ログインしないと個人用カレンダーを表示できません。',
     26 => '予定情報を個人カレンダーから削除しました。',
     27 => 'メッセージを送信しました。',
     28 => 'プラグインを保存しました',
-    29 => '残念ながら、本サイトでは個人用カレンダーは使用できません',
+    29 => '本サイトでは個人用カレンダーは使用できません',
     30 => 'アクセスが拒否されました',
-    31 => '残念ながら、話題管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    32 => '残念ながら、記事管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    33 => '残念ながら、ブロック編集用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    34 => '残念ながら、リンク管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    35 => '残念ながら、予定管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    36 => '残念ながら、投票管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    37 => '残念ながら、ユーザー管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    38 => '残念ながら、プラグイン管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
-    39 => '残念ながら、メール管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    31 => '話題管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    32 => '記事管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    33 => 'ブロック編集用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    34 => 'リンク管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    35 => '予定管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    36 => '投票管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    37 => 'ユーザ管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    38 => 'プラグイン管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    39 => 'メール管理用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
     40 => 'システムからのメッセージ',
-    41 => '残念ながら、文字置換用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    41 => '文字置換用画面へのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
     42 => '単語が登録されました。',
     43 => '単語を削除しました',
     44 => 'プラグインをインストールしました',
     45 => 'プラグインを削除しました',
-    46 => '残念ながら、データベースバックアップユーティリティへのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
+    46 => 'データベースバックアップユーティリティへのアクセス権がありません。管理権限のない場所へのアクセスはすべて記録されます。',
     47 => 'この機能は、*nix上でしか動きません。もし、*nix上で動かしているならば、キャッシュは無事クリアされました。Windows上で動かしている場合は、adodb_*.phpというファイルを検索して、手動で削除してください。',
     48 => "{$_CONF['site_name']}に登録してくれてありがとう。管理者の間で審査します。登録が認められたら、あなたの登録したメールアドレスにパスワードを送信します。",
     49 => 'グループが無事登録されました。',
     50 => 'グループを削除しました。',
-    51 => 'ユーザー名が既に使われています。別の名前を指定してください。',
+    51 => 'ユーザ名が既に使われています。別の名前を指定してください。',
     52 => '入力されたメールアドレスは無効なアドレスだと思われます。',
     53 => '新しいパスワードが登録されました。このパスワードを使ってログインしてください。',
     54 => 'あなたの新規パスワード発行申請は期限が切れています。下のフォームから再申請してください。',
@@ -1132,7 +1148,22 @@
     58 => 'フィードが無事保存されました。',
     59 => 'フィードが削除されました。',
     60 => 'プラグインが更新されました。',
-    61 => 'Plugin %s: Unknown message placeholder'
+## NotYet
+    61 => '%sプラグイン : メッセージのプレイスホルダーが不明です。',
+    62 => 'トラックバックのコメントが削除されました。',
+    63 => 'トラックバックのコメントを削除する際に問題が発生しました。',
+    64 => 'トラックバックが無事送られました。',
+    65 => 'Weblog ディレクトリサービスがセーブされました。',
+    66 => 'Weblog ディレクトリサービスが削除されました。',
+    67 => '新しいパスワードと確認用パスワードが一致しません。',
+    68 => '正しいパスワードを入力してください。',
+    69 => 'アカウントが停止されています。',
+    70 => 'アカウントは管理者の承認を待っています。',
+    71 => 'アカウントが登録されて、管理者の承認を待っています。',
+    72 => 'プラグインのインストール時にエラーがありました。error.logを確認してください。',
+    73 => 'プラグインの削除時にエラーがありました。See error.logを確認してください。',
+    74 => 'pingbackが無事送られました。',
+    75 => 'トラックバックはPOST requestで送る必要があります。'
 );
 
 ###############################################################################
@@ -1140,15 +1171,15 @@
 $LANG_ACCESS = array(
     'access' => 'アクセス',
     'ownerroot' => '所有者/Root',
-    'group' => 'Group',
+    'group' => 'グループ',
     'readonly' => '読みとり専用',
-    'accessrights' => 'アクセス権',
+    'accessrights' => '権限設定',
     'owner' => '所有者',
     'grantgrouplabel' => '上記のグループに編集権限を与える',
-    'permmsg' => '参考: メンバーはログインしているメンバーすべて、匿名は、ログインせずにサイトをしているすべての人を意味します。',
+    'permmsg' => '参考: メンバーはログインしているメンバーすべて、ゲストーユーザは、ログインせずにサイトをしているすべての人を意味します。',
     'securitygroups' => 'Security Groups（セキュリティグループ）',
-    'editrootmsg' => "管理権限を持っていても、rootユーザーにならずにrootユーザーを編集することは出来ません。それ以外のユーザーの編集は可能です。権限なしにrootユーザーを編集しようとした場合、記録に残ることに注意してください。<a href=\"{$_CONF['site_admin_url']}/user.php\">ユーザー管理ページ</a>に戻る",
-    'securitygroupsmsg' => 'このユーザーが所属するグループにチェックしてください。',
+    'editrootmsg' => "管理権限を持っていても、rootユーザにならずにrootユーザを編集することは出来ません。それ以外のユーザの編集は可能です。権限なしにrootユーザを編集しようとした場合、記録に残ることに注意してください。<a href=\"{$_CONF['site_admin_url']}/user.php\">ユーザ管理ページ</a>に戻る",
+    'securitygroupsmsg' => 'このユーザが所属するグループにチェックしてください。',
     'groupeditor' => 'グループの編集',
     'description' => '詳細',
     'name' => '名前',
@@ -1156,20 +1187,20 @@
     'missingfields' => '未記入の項目',
     'missingfieldsmsg' => '名前と詳細を記入してください。',
     'groupmanager' => 'グループマネージャー',
-    'newgroupmsg' => 'グループを編集・削除する場合、グループ名をクリックしてください。グループを作成する場合は上の「新規」をクリックしてください。ただし、「core（中核）グループ）」はシステムで使用するため削除できません。',
+    'newgroupmsg' => 'グループを編集・削除する場合、グループ名左のアイコンをクリックしてください。グループを作成する場合は上の「新規作成」をクリックしてください。ただし、「コア（中核）グループ」はシステムで使用するため削除できません。',
     'groupname' => 'グループ名',
-    'coregroup' => 'Core Group',
+    'coregroup' => 'コアグループ',
     'yes' => 'Yes',
     'no' => 'No',
-    'corerightsdescr' => "このグループは、{$_CONF['site_name']}の中核グループです。そのため、本グループの権限を編集することは出来ないため、下記の権限リストは読みとり専用となっています。",
-    'groupmsg' => '本サイトのSecurity Groups（セキュリティグループ）は階層的になっています。本グループを下記のグループに追加する場合、そのグループの持つ権限と同じ権限を本グループにも与えることになります。可能であれば、本グループに権限を与える場合、下記のグループの権限を継承させることが望ましい方法です。本グループに個別に権限を与える場合は、下記の「権限」部分から様々な機能に関する権限を選択することが出来ます。本グループを追加する場合は、下記のグループの横にあるボックスをチェックするだけです。',
+    'corerightsdescr' => "このグループは、{$_CONF['site_name']}の中核グループです。そのため、本グループの権限を編集することはできないため、下記の権限リストは読みとり専用となっています。",
+    'groupmsg' => '本サイトのSecurity Groups（セキュリティグループ）は階層的になっています。本グループを下記のグループに追加する場合、そのグループの持つ権限と同じ権限を本グループにも与えることになります。可能であれば、本グループに権限を与える場合、下記のグループの権限を継承させることが望ましい方法です。本グループに個別に権限を与える場合は、下記の「権限」部分から様々な機能に関する権限を選択することができます。本グループを追加する場合は、下記のグループの横にあるボックスをチェックするだけです。',
     'coregroupmsg' => "本グループは{$_CONF['site_name']}のcore（中核）グループです。そのため、本グループの所属するグループは編集できません。下記のリストは読みとり専用となっています。",
     'rightsdescr' => 'グループのアクセス権は下記の権限で与えられているか、グループが所属するグループ全体の権限を継承しています。下記のうち、チェックのない権限は、本グループの所属するグループから継承した権限です。チェックのある権限は本グループ自体が直接与えられている権限です。',
-    'lock' => 'Lock',
+    'lock' => 'ロック',
     'members' => 'メンバー',
-    'anonymous' => '匿名',
-    'permissions' => '権限の種類',
-    'permissionskey' => 'R = 閲覧, E = 編集, （編集権は閲覧権を含む）',
+    'anonymous' => 'ゲストユーザ',
+    'permissions' => 'アクセス権限',
+    'permissionskey' => 'R = 閲覧, E = 編集, （編集権は閲覧権を含みます）',
     'edit' => '編集',
     'none' => 'なし',
     'accessdenied' => 'アクセスが拒否されました',
@@ -1183,16 +1214,25 @@
     'cancel' => '中止',
     'delete' => '削除',
     'canteditroot' => 'Rootグループに所属していないのにRootグループを編集しようとしたため、アクセスは拒否されました。このエラーがおかしいと思った場合はシステムの管理者に連絡してください。',
-    'listusers' => 'ユーザー一覧の表示',
-    'listthem' => 'list',
-    'usersingroup' => 'Users in group "%s"',
+    'listusers' => 'ユーザの表示と編集',
+    'listthem' => 'リスト',
+    'usersingroup' => '"%s"に含まれるユーザの一覧',
     'usergroupadmin' => 'グループ管理',
     'add' => '追加',
     'remove' => '削除',
-    'availmembers' => 'Available Members',
+    'availmembers' => 'ユーザ一覧',
     'groupmembers' => 'グループメンバー',
     'canteditgroup' => 'グループを編集するためには、グループのメンバーでなければなりません。このメッセージがエラーである場合は、システム管理者に連絡してください。',
-    'cantlistgroup' => 'メンバーリストを閲覧するためには、グループのメンバーでなければなりません。このメッセージがエラーである場合は、システム管理者に連絡してください。'
+    'cantlistgroup' => 'メンバーリストを閲覧するためには、グループのメンバーでなければなりません。このメッセージがエラーである場合は、システム管理者に連絡してください。',
+    'editgroupmsg' => 'グループメンバーを編集するには、メンバー名をクリックして「追加」または「削除」ボタンを押してください。ユーザがグループメンバーのときは右側だけに表示されます。編集が終わったら、「保存」ボタンを押してください。管理画面に戻ります。',
+    'listgroupmsg' => 'グループ<b>%s</b>に含まれるユーザ：',
+    'search' => '検索',
+    'submit' => '登録',
+    'limitresults' => '結果の絞り込み',
+    'group_id' => 'グループID',
+    'plugin_access_denied_msg' => 'このプラグインの管理権限がないのに管理画面にアクセスしようとしました。この行為は記録されます。',
+    'groupexists' => 'このグループ名はすでに存在しています。',
+    'groupexistsmsg' => '同じグループ名があります。グループ名はそれぞれ異なっている必要があります.'
 );
 
 ###############################################################################
@@ -1226,7 +1266,8 @@
     7 => 'サイト情報',
     8 => '個人設定',
     9 => '検索',
-    10 => '高度な検索'
+    10 => '検索オプション',
+    11 => '記事の一覧'
 );
 
 ###############################################################################
@@ -1234,8 +1275,8 @@
 
 $LANG_404 = array(
     1 => '404 Error',
-    2 => 'うーん、いろいろ探したけど、<b>%s</b>はどこにも見つかりませんでした。',
-    3 => '残念だけど、指定されたファイルは存在しないようだ。メインページをチェックしてみるか、検索ページで探してみてはどうだろうか。'
+    2 => '<b>%s</b>はどこにも見つかりませんでした。',
+    3 => '指定されたファイルは存在しません。メインページをチェックしてみるか、検索ページで探してみてください。'
 );
 
 ###############################################################################
@@ -1243,7 +1284,7 @@
 
 $LANG_LOGIN = array(
     1 => 'ログインしてください',
-    2 => '申し訳ありませんが、ここにアクセするにはログインしている必要があります。',
+    2 => 'ここにアクセするにはログインしている必要があります。',
     3 => 'ログイン',
     4 => '新規作成'
 );
@@ -1268,4 +1309,218 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
-?>
\ No newline at end of file
+###############################################################################
+# trackback
+
+$LANG_TRB = array (
+    'trackback'          => 'トラックバック',
+    'from'               => 'from',
+    'tracked_on'         => 'トラックバック　オン',
+    'read_more'          => '[続きを読む]',
+    'intro_text'         => "'%s'について他のサイトでは次のように言及されています:",
+    'no_comments'        => 'このエントリにはトラックバックがありません。',
+    'this_trackback_url' => 'このエントリのトラックバックURL:',
+    'num_comments'       => '%d件のトラックバック',
+    'send_trackback'     => 'Pingを送る',
+    'preview'            => 'プレビュー',
+    'editor_title'       => 'トラックバックを送る',
+    'trackback_url'      => 'トラックバックURL',
+    'entry_url'          => 'エントリのURL',
+    'entry_title'        => 'エントリのタイトル',
+    'blog_name'          => 'サイト名',
+    'excerpt'            => '概要',
+    'truncate_warning'   => '注: 受信したサイト側で概要を切り詰めることがあります',
+    'button_send'        => '送信',
+    'button_preview'     => 'プレビュー',
+    'send_error'         => 'エラー',
+    'send_error_details' => 'トラックバックの送信中にエラーが発生しました:',
+    'url_missing'        => 'エントリのURL',
+    'url_required'       => 'エントリのURLは必ず入力してください。',
+    'target_missing'     => 'トラックバックURLがありません',
+    'target_required'    => 'トラックバックURLを入力してください',
+    'error_socket'       => 'ソケットをオープンできませんでした。',
+    'error_response'     => '不明な応答が返されました。',
+    'error_unspecified'  => '不明なエラーです。',
+    'select_url'         => 'トラックバックURLを選択してください',
+    'not_found'          => 'トラックバックURLが見つかりません',
+    'autodetect_failed'  => 'コメントを送ろうとした記事のトラックバックURLを見つけられませんでした。URLを下に入力してください。',
+    'trackback_explain'  => '以下のリンクからトラックバックを送りたいURLを選択してください。その記事の正しいトラックバックURLを決定します。URLがわかっているなら<a href="%s">自分で入力</a>することもできます。',
+    'no_links_trackback' => 'リンクが見つかりません。このエントリにトラックバックを送信できません。',
+    'pingback'           => 'Pingback',
+    'pingback_results'   => 'Pingbackの結果',
+    'send_pings'         => 'Pingを送信',
+    'send_pings_for'     => '"%s"にpingを送信',
+    'no_links_pingback'  => 'リンクが見つかりません。このエントリへのpingbackは送信されませんでした。',
+    'pingback_success'   => 'Pingbackを送信しました。',
+    'no_pingback_url'    => 'Pingback URLが見つかりません。',
+    'resend'             => '再送',
+    'ping_all_explain'   => 'あなたがリンクしたことを相手のサイトに知らせたり(<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>)、Weblogディレクトリサービスにpingを送ってサイトが更新されたことを知らせたり、誰かのサイトの記事について書いたときに<a href="http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%90%E3%83%83%E3%82%AF">トラックバック</a>を送ったりすることができます。',
+    'pingback_button'    => 'Pingbackを送信',
+    'pingback_short'     => 'このエントリからリンクされたすべてのサイトにPingbackを送信',
+    'pingback_disabled'  => '(Pingbackは無効です)',
+    'ping_button'        => 'Pingを送信',
+    'ping_short'         => 'WeblogディレクトリサービスにPing。',
+    'ping_disabled'      => '(Pingは無効です)',
+    'trackback_button'   => 'トラックバックを送信',
+    'trackback_short'    => 'トラックバックを送信。',
+    'trackback_disabled' => '(トラックバックは無効です)',
+    'may_take_a_while'   => 'PingbackやPingの送信は時間がかかります。ご注意ください。',
+    'ping_results'       => 'Pingの結果',
+    'unknown_method'     => '不明なPingメソッドです。',
+    'ping_success'       => 'Pingを送信しました。',
+    'error_site_name'    => 'サイト名を入力してください。',
+    'error_site_url'     => 'サイトのURLを入力してください。',
+    'error_ping_url'     => '正しいPing URLを入力してください。',
+    'no_services'        => 'Weblogディレクトリサービスが設定されていません。',
+    'services_headline'  => 'Weblogディレクトリサービス',
+    'admin_home'         => '管理画面',
+    'new_service'        => '新規サービス',
+    'service_explain'    => 'Weblogディレクトリサービス修正・削除する場合は、編集アイコンをクリックしてください。新しいWeblogディレクトリサービスを作成する場合は、「新規サービス」をクリックしてください。',
+    'service'            => 'サービス',
+    'ping_method'        => 'Pingメソッド',
+    'service_enabled'    => '有効にする',
+    'service_website'    => 'Webサイト',
+    'service_ping_url'   => 'Ping URL',
+    'ping_standard'      => 'Standard Ping',
+    'ping_extended'      => 'Extended Ping',
+    'ping_unknown'       => '(不明なメソッド)',
+    'edit_service'       => 'Weblogディレクトリサービスの編集',
+    'button_save'        => '保存',
+    'button_cancel'      => 'キャンセル',
+    'button_delete'      => '削除',
+    'trackbacks'         => 'トラックバック',
+    'editor_intro'       => '<a href="%s">%s</a>へのトラックバックを準備してください。',
+    'editor_intro_none'  => 'トラックバックを準備してください。',
+    'trackback_note'     => '記事にトラックバックを送るには、記事一覧でその記事の"' . $LANG24[21] . '"をクリックしてください。 記事に関係のないトラックバックを送るには <a href="%s">ここをクリック</a>。',
+    'edit'               => '編集',
+    'search'             => '検索',
+    'limit_results'      => '結果を制限する',
+    'submit'             => '送信',
+    'pingback_explain'   => 'PngbackするURLを記入してください。The pingback will point to your site\'s homepage.',
+    'pingback_url'       => 'Pingback URL',
+    'site_url'           => 'このサイトのURL',
+    'pingback_note'      => 'To send a pingback for a story, go to the list of stories and click on "' . $LANG24[21] . '" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing'   => 'No Pingback URL',
+    'pbtarget_required'  => 'pingback URLを入力してください',
+    'pb_error_details'   => '次のpingbackの送信中にエラーがありました:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array (
+    'title'            => '記事の一覧',
+    'title_year'       => '%dの記事一覧',
+    'title_month_year' => '%d年%s月の記事一覧',
+    'nav_top'          => '記事一覧のトップに戻る',
+    'no_articles'      => '記事はありません'
+);
+
+################################################################################
+# "What's New" Time Strings
+
+$LANG_WHATSNEW = array (
+    # This here determines the order of the sentence "No new stories in 2 hrs"
+    # order it so it makes sense in your language:
+    # %i    item, "Stories"
+    # %n    amount, "2", "20" etc
+    # %t    time, "2" (weeks)
+    # %s    scale, "hrs", "weeks"
+    'new_string'  => 'ここ%t%sで新着%i%n件',
+    'new_last'    => '最近 %t %s',
+    # other strings
+    'minutes'     => '分',
+    'hours'       => '時間',
+    'days'        => '日',
+    'weeks'       => '週',
+    'months'      => 'ヶ月',
+    'minute'      => '分',
+    'hour'        => '時間',
+    'day'         => '日',
+    'week'        => '週',
+    'month'       => 'ヶ月'
+);
+
+################################################################################
+# Admin - Strings
+#
+# These are some standard strings used by core functions as well as plugins to
+# display adminiatration lists and edit pages
+
+$LANG_ADMIN = array (
+    'search'        => '検索',
+    'limit_results' => '結果の絞り込み',
+    'submit'        => '登録',
+    'edit'          => '編集',
+    'admin_home'    => '管理画面',
+    'create_new'    => '新規作成',
+    'enabled'       => '有効にする',
+    'title'         => 'タイトル',
+    'type'          => 'タイプ',
+    'topic'         => '話題',
+    'help_url'      => 'ヘルプファイルのURL',
+    'save'          => '保存',
+    'cancel'        => 'キャンセル',
+    'delete'        => '削除',
+    'copy'          => 'コピー',
+    'no_results'    => '- 記事が見つかりませんでした -',
+    'data_error'    => '送られたデータに問題があります。データをチェックしてください'
+);
+
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0   => 'コメント有効',
+    -1  => 'コメント停止'
+);
+
+$LANG_commentmodes = array(
+    'flat'      => '一覧',
+    'nested'    => '入れ子',
+    'threaded'  => 'ツリー',
+    'nocomment' => '表示しない'
+);
+
+$LANG_cookiecodes = array(
+    0       => '受け付けない',
+    3600    => '１時間',
+    7200    => '２時間',
+    10800   => '３時間',
+    28800   => '８時間',
+    86400   => '１日',
+    604800  => '１週間',
+    2678400 => '１ヶ月'
+);
+
+$LANG_dateformats = array(
+    0   => 'デフォルト'
+);
+
+$LANG_featurecodes = array(
+    0 => '通常の記事',
+    1 => '注目記事'
+);
+
+$LANG_frontpagecodes = array(
+    0 => '該当する話題にだけ表示',
+    1 => 'トップページに表示'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'テキスト',
+    'html'      => 'HTML形式'
+);
+
+$LANG_sortcodes = array(
+    'ASC'  => '古い順に',
+    'DESC' => '新しい順に'
+);
+
+$LANG_trackbackcodes = array(
+    0   => 'トラックバック有効',
+    -1  => 'トラックバック停止'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/language/norwegian.php 1.4.0sr5-1/cpanel-glprivate/language/norwegian.php
--- 1.3.11sr1/cpanel-glprivate/language/norwegian.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/norwegian.php	2006-08-08 02:39:06.000000000 -0500
@@ -166,7 +166,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -333,7 +343,23 @@
     104 => 'Vis Online Status',
     105 => 'Vises i Online n blokk',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -351,27 +377,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Lenker',
-    2 => 'Det er ingen lenker  vise.',
-    3 => 'Legg Til En Lenke'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Stemme Lagret',
-    2 => 'Din stemme er avgitt',
-    3 => 'Stem',
-    4 => 'Avstemninger i systemet',
-    5 => 'Stemmer',
-    6 => 'Vis andre sprsml'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -472,7 +477,11 @@
     54 => 'Resultater fra Kommentarer',
     55 => 'frase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -502,7 +511,14 @@
     21 => 'Det virker som om det ikke er noen lenker p dette nettstedet, eller at ingen har klikket p dem.',
     22 => 'Topp Ti Artikler sendt via Email',
     23 => 'Emails',
-    24 => 'Det virker som om ingen har emailet en artikkel p dette nettstedet'
+    24 => 'Det virker som om ingen har emailet en artikkel p dette nettstedet',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -655,7 +671,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -690,35 +711,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Lenke Editor',
-    2 => '',
-    3 => 'Lenke Overskrift',
-    4 => 'Lenke URL',
-    5 => 'Kategori',
-    6 => '(ta med http://)',
-    7 => 'Annen',
-    8 => 'Lenke Treff',
-    9 => 'Lenke Beskrivelse',
-    10 => 'Du m ta med Overskrift, URL og Beskrivelse.',
-    11 => 'Lenke Administrasjon',
-    12 => 'for  endre eller slette en lenke, klikk p lenken under. For   lage en ny lenke klikk p Ny Lenke ovenfor.',
-    13 => 'Lenke Overskrift',
-    14 => 'Lenke Kategori',
-    15 => 'Lenke URL',
-    16 => 'Adgang Nektet',
-    17 => "Du forsker  f tilgang til en lenke som du ikke har rettigheter til. Forsket er logget. Vennligst <a href=\"{$_CONF['site_admin_url']}/link.php\">g tilbake til administrasjonsiden for lenker</a>.",
-    18 => 'Ny Lenke',
-    19 => 'Admin Hovedside',
-    20 => 'hvis Annen, angi',
-    21 => 'lagre',
-    22 => 'avbryt',
-    23 => 'slett'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -741,16 +733,16 @@
     17 => 'Hovedtekst',
     18 => 'Treff',
     19 => 'Kommentarer',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Artikkel Liste',
     23 => 'For  redigere eller slette en artikkel, klikk p artikkelnummeret under. For  se en artikkel, klikk p tittelen til artikkelen du nsker  se. For  lage en ny artikkel klikk p Ny Artikkel over.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Artikkel forhndsvisning',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Feil ved opplasting av fil',
     31 => 'Vennligst fyll ut feltene Forfatter, Tittel og introduksjonstekst',
     32 => 'Hovedoppslag',
@@ -783,39 +775,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modus',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Avstemning opprettet',
-    4 => 'Avstemning %s lagret',
-    5 => 'Rediger Avstemning',
-    6 => 'Avstemning ID',
-    7 => '(ikke bruk mellomrom)',
-    8 => 'Vises p hovedside',
-    9 => 'Sprsml',
-    10 => 'Svar / Stemmer',
-    11 => 'En feil oppsto under henting av svardata for avstemningen %s',
-    12 => 'En feil oppsto under henting av sprsmlsdata for avstemningen %s',
-    13 => 'Lag Avstemning',
-    14 => 'lagre',
-    15 => 'avbryt',
-    16 => 'slett',
-    17 => 'Vennligst skriv inn en Avstemnins ID',
-    18 => 'Avstemning Liste',
-    19 => 'For  redigere eller slette en avstemning, klikk p den. For  lage en ny avstemning klikk p ny avstemning over.',
-    20 => 'Velgere',
-    21 => 'Adgang Nektet',
-    22 => "Du forsker  n en avstemning som du ikke har rettigheter til. forsket er logget. Vennligst <a href=\"{$_CONF['site_admin_url']}/poll.php\">g tilbake til avstemningsadministrasjon</a>.",
-    23 => 'Ny Avstemning',
-    24 => 'Admin Hovedside',
-    25 => 'Ja',
-    26 => 'Nei'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -847,7 +830,10 @@
     23 => 'Gjr dette til standard emne for nye artikler',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -889,7 +875,18 @@
     33 => 'start',
     34 => 'Feil: Du m angi en importfil.',
     35 => 'Sist innlogget',
-    36 => '(aldri)'
+    36 => '(aldri)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1034,7 +1031,11 @@
     31 => 'Er du sikker p at du vil slette denne plug-in? Alle data og datastrukturer som brukes av denne plug-in vil ogs bli slettet. hvis du er sikker, klikk slett igjen nedenfor.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1077,7 +1078,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1144,7 +1153,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1204,7 +1227,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1214,7 +1246,6 @@
     'last_ten_backups' => 'Siste 10 Backups',
     'do_backup' => 'Ta Backup',
     'backup_successful' => 'Backup av databasen var vellykket.',
-    'no_backups' => 'Ingen backups i systemet',
     'db_explanation' => 'For  ta en backup av ditt Geeklog system, klikk knappen nedenfor',
     'not_found' => "Feil sti eller mysqldump er ikke kjrbar.<br>Sjekk <strong>\$_DB_mysqldump_path</strong> definisjonen i config.php.<br>Variabelen er n satt til: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup feilet: strrelsen p backupfilen var 0 bytes',
@@ -1238,7 +1269,8 @@
     7 => 'Nettsted statistikk',
     8 => 'Personaliser',
     9 => 'Sk',
-    10 => 'avansert sk'
+    10 => 'avansert sk',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1280,4 +1312,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/norwegian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/norwegian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/norwegian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/norwegian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1521 @@
+<?php
+
+###############################################################################
+# norwegian.php, based on
+# english.php
+# This is the norwegian language page for GeekLog!
+#
+# Translator   : Torfinn Ingolfsen <tingo@start.no>
+# Date started : 2003-03-10
+# Last updated : 2004-08-04
+# Date finished: 2004-08-04
+# History:
+# 2004-08-04	Update for Geeklog 1.3.8-1sr5 started and completed.
+# 2003-06-08	Corrected LANG22[15], capitalize first word
+# 2003-04-02	Corrected capitalization of MESSAGE[48].
+# 2003-03-30	Translated the last (and final) part
+# 2003-03-23	Translated down to and including LANG23 (link.php)
+# 2003-03-18	First half of the file translated
+# 2003-03-10	Translation started
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Gitt av:',
+    2 => 'les mer',
+    3 => 'kommentarer',
+    4 => 'Rediger',
+    5 => 'stem',
+    6 => 'Resultater',
+    7 => 'stemmeresultater',
+    8 => 'stemmer',
+    9 => 'Admin Funksjoner:',
+    10 => 'Innlegg',
+    11 => 'Artikler',
+    12 => 'Blokker',
+    13 => 'Emner',
+    14 => 'Lenker',
+    15 => 'Begivenheter',
+    16 => 'Avstemning',
+    17 => 'Brukere',
+    18 => 'SQL Spørring',
+    19 => 'Logg Ut',
+    20 => 'Brukerinformasjon:',
+    21 => 'Brukernavn',
+    22 => 'Bruker ID',
+    23 => 'Sikkerhetsnivå',
+    24 => 'Anonym',
+    25 => 'Svar',
+    26 => 'De følgende kommentarer eies av den som skrev dem. Dette nettstedet er ikke ansvarlig for innholdet.',
+    27 => 'Nyeste Innlegg',
+    28 => 'Slett',
+    29 => 'ingen kommentarer.',
+    30 => 'Eldre Artikler',
+    31 => 'Lovlige HTML tagger:',
+    32 => 'Feil, ugyldig brukernavn',
+    33 => 'Feil, kunne ikke skrive til loggfilen',
+    34 => 'Feil',
+    35 => 'Logg ut',
+    36 => 'på',
+    37 => 'Ingen artikler fra brukere',
+    38 => 'Content Syndication',
+    39 => 'Gjenoppfrisk',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Gjestebrukere',
+    42 => 'Skrevet av:',
+    43 => 'Svar på denne',
+    44 => 'Opphav',
+    45 => 'MySQL Feil Nummer',
+    46 => 'MySQL Feilmelding',
+    47 => 'Brukerfunksjoner',
+    48 => 'Kontoinformasjon',
+    49 => 'Visningsvalg',
+    50 => 'Feil i SQL setning',
+    51 => 'hjelp',
+    52 => 'Ny',
+    53 => 'Admin Hovedside',
+    54 => 'Kunne ikke åpne filen.',
+    55 => 'Feil på',
+    56 => 'stem',
+    57 => 'Passord',
+    58 => 'Logg inn',
+    59 => "Er du ikke bruker ennå? Registrer deg som en <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Ny bruker</a>",
+    60 => 'Skriv en kommentar',
+    61 => 'Opprett Ny Konto',
+    62 => 'ord',
+    63 => 'Kommentarvalg',
+    64 => 'Email Artikkelen Til en Venn',
+    65 => 'Utskriftsvennlig Versjon',
+    66 => 'Min Kalender',
+    67 => 'Velkommen til ',
+    68 => 'hjem',
+    69 => 'kontakt',
+    70 => 'søk',
+    71 => 'bidra',
+    72 => 'lenker',
+    73 => 'tidligere avstemninger',
+    74 => 'kalender',
+    75 => 'avansert søk',
+    76 => 'nettsted statistikk',
+    77 => 'Plugins',
+    78 => 'Kommende Begivenheter',
+    79 => 'Nytt',
+    80 => 'artikler de siste',
+    81 => 'artikkel de siste',
+    82 => 'timer',
+    83 => 'KOMMENTARER',
+    84 => 'LENKER',
+    85 => 'siste 48 timer',
+    86 => 'ingen nye kommentarer',
+    87 => 'siste 2 uker',
+    88 => 'ingen nye lenker',
+    89 => 'Det er ingen kommende begivenheter',
+    90 => 'Hjem',
+    91 => 'Side generert på',
+    92 => 'sekunder',
+    93 => 'Opphavsrett',
+    94 => 'Alle varemerker og opphavsrett på denne siden tilhører de respektive eiere.',
+    95 => 'Drevet Av',
+    96 => 'Grupper',
+    97 => 'Ordliste',
+    98 => 'Plug-ins',
+    99 => 'ARTIKLER',
+    100 => 'ingen nye artikler',
+    101 => 'Dine Begivenheter',
+    102 => 'Nettstedets Begivenheter',
+    103 => 'DB Backups',
+    104 => 'av',
+    105 => 'Email brukere',
+    106 => 'Visninger',
+    107 => 'GL Version Test',
+    108 => 'Tøm Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalender',
+    2 => 'Beklager, det er ingen begivenheter å vise.',
+    3 => 'Når',
+    4 => 'Hvor',
+    5 => 'Beskrivelse',
+    6 => 'Legg Til En Begivenhet',
+    7 => 'Kommende Begivenheter',
+    8 => "Ved å legge denne begivenheten til din kalender, kan du raskt få et overblikk over kun\nde begivenheter du er interessert i, ved å trykke på \"Min Kalender\" i Brukermenyen",
+    9 => 'Legg Til Min Kalender',
+    10 => 'Fjern fra Min Kalender',
+    11 => "Legger til Begivenhet til {$_USER['username']}'s Kalender",
+    12 => 'Begivenhet',
+    13 => 'Starter',
+    14 => 'Slutter',
+    15 => 'tilbake til Kalender'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Skriv en Kommentar',
+    2 => 'Skrivemodus',
+    3 => 'Logg ut',
+    4 => 'Lag ny Konto',
+    5 => 'Brukernavn',
+    6 => 'Dette nettstedet krever at du er logget inn for å kunne skrive kommentarer, vennligst logg inn. Hvis du ikke er registrert fra før, bruk skjemaet under for å registrere deg som ny bruker.',
+    7 => 'Din siste kommentar var ',
+    8 => " sekunder siden. Dette nettstedet krever minst {$_CONF['commentspeedlimit']} sekunder mellom kommentarer",
+    9 => 'kommentar',
+    10 => 'Send Report',
+    11 => 'Post kommentar',
+    12 => 'vennligst fyll ut Tittel- og Kommentarfeltene, de er obligatoriske for å poste en kommentar.',
+    13 => 'Din Informasjon',
+    14 => 'Forhåndsvisning',
+    15 => 'Report this post',
+    16 => 'Overskrift',
+    17 => 'Feil',
+    18 => 'Viktig',
+    19 => 'Forsøk å holde deg til emnet når du skriver kommentarer.',
+    20 => 'Svar på andres kommentarer istedet for å opprette nye diskusjonstråder.',
+    21 => 'Les øvrige kommentarer før du poster din egen, for å unngå gjentakelse av det som allerede er blitt sagt.',
+    22 => 'Bruk en tydelig overskrift som forteller hva kommentaren din handler om.',
+    23 => 'Emailadressen din blir IKKE offentliggjort.',
+    24 => 'Anonym Bruker',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Brukerprofil for',
+    2 => 'Brukernavn',
+    3 => 'Fullt Navn',
+    4 => 'Passord',
+    5 => 'Email',
+    6 => 'Hjemmeside',
+    7 => 'Biografi',
+    8 => 'PGP nøkkel',
+    9 => 'Lagre Informasjon',
+    10 => 'Siste 10 kommentarer av bruker',
+    11 => 'Brukeren har ikke skrevet noen kommentarer',
+    12 => 'Brukervalg for',
+    13 => 'Email Nattlig Sammendrag',
+    14 => 'Dette er et tilfeldig generert passord. Du anbefales å endre passordet omgående. For å endre passordet, logg inn og velg Kontoinformasjon fra Brukermenyen.',
+    15 => "Din {$_CONF['site_name']} er opprettet. For å bruke den må du logge inn med nedenstående opplysninger. Vennligst ta vare på denne mailen for fremtidig referanse.",
+    16 => 'din Kontoinformasjon',
+    17 => 'Kontoen eksisterer ikke',
+    18 => 'Oppgitt emailadresse synes å være ugyldig',
+    19 => 'Oppgitt brukernavn eller emailadresse finnes fra før',
+    20 => 'Oppgitt emailadresse synes å være ugyldig',
+    21 => 'Feil',
+    22 => "Opprett konto på {$_CONF['site_name']}!",
+    23 => "Ved å opprette en konto på {$_CONF['site_name']} vil du få mulighet til å skrive artikler og kommentarer i ditt eget navn. Hvis du ikke har en konto, vil du kun delta som anonym. Emailadressen du oppgir vil <b><i>aldri</i></b> bli offentlig vist på dette nettstedet.",
+    24 => 'Passordet ditt blir sendt til den emailadressen du oppgir.',
+    25 => 'Har du glemt passordet ditt?',
+    26 => 'Skriv inn <em>enten</em> brukernavnet ditt eller emailadressen du brukte når du registrerte deg og trykk på Email Passord. Opllysing om hvordan du lager et nytt passord blir sendt til mailadressen som er registrert i databasen.',
+    27 => 'Opprett Konto Nå!',
+    28 => 'Email Passord',
+    29 => 'logget ut fra',
+    30 => 'logged inn fra',
+    31 => 'Denne funksjonen krever at du er logget inn',
+    32 => 'Signatur',
+    33 => 'Blir aldri vist offentlig',
+    34 => 'Ditt egentlige navn',
+    35 => 'Skriv inn passord for å endre det',
+    36 => 'Begynner med http://',
+    37 => 'Legges til dine kommentarer',
+    38 => 'Alt om deg! Alle kan lese dette',
+    39 => 'Din offentlige PGP nøkkel',
+    40 => 'Ingen Emneikoner',
+    41 => 'Villig til å være Moderator',
+    42 => 'Datoformat',
+    43 => 'Maksimum Antall Artikler',
+    44 => 'Ingen Rammer',
+    45 => 'Visningsvalg for',
+    46 => 'Ekskluderte Emner og Forfattere for',
+    47 => 'Konfigurasjon av nyhetsbokser for',
+    48 => 'Emner',
+    49 => 'ingen ikoner i artikler',
+    50 => 'fjern avkryssing hvis du ikke er interessert',
+    51 => 'Kun nyheter og artikler',
+    52 => 'Standardverdien er',
+    53 => 'Motta dagens artikler hver natt',
+    54 => 'Kryss av for de emner og forfattere du ikke ønsker å se.',
+    55 => 'Dersom ingen er avkrysset, så får du standardvalget. Hvis du begynner å krysse av bokser, husk å krysse av for alle du ønsker å se, fordi standardvalget blir ignorert. Standardvalg vises med <b>uthevet</b> skrift.',
+    56 => 'Forfattere',
+    57 => 'Visningsmodus',
+    58 => 'Rekkefølge for sortering',
+    59 => 'Kommentarbegrensning',
+    60 => 'Hvordan vil du ha kommentarene vist?',
+    61 => 'Nyeste eller eldste først?',
+    62 => 'Standardverdi er 100',
+    63 => "Passordet ditt er sendt, og vil snart dukke opp i mailboksen din. Vennligst følg instruksjonen i meldingen du mottar. Vi takker for at du bruker {$_CONF['site_name']}",
+    64 => 'Kommentarvalg for',
+    65 => 'Forsøk å logge inn på nytt',
+    66 => "Du har kanskje skrevet brukernavn eller passord feil. Forsøk å logge inn igjewn under. er du en <a href=\"{$_CONF['site_url']}/users.php?mode=new\">ny bruker</a>?",
+    67 => 'Medlem Siden',
+    68 => 'Husk meg i',
+    69 => 'Hvor lenge skal vi huske deg etter at du er logget inn?',
+    70 => "Tilpass utseendet og innholdet på {$_CONF['site_name']}",
+    71 => "En av mulighetene på {$_CONF['site_name']} er at du kan tilpasse innhold, utseeende og layout slik at det passer deg. for å kunne bruke disse funksjonene må du først registrere deg som  <a href=\"{$_CONF['site_url']}/users.php?mode=new\">bruker</a> på {$_CONF['site_name']}. Er du allerede registrert? Da bruker du loginskjemaet til venstre for å logge inn!",
+    72 => 'Tema',
+    73 => 'Språk',
+    74 => 'Endre utseendet på dette nettstedet!',
+    75 => 'Emailede Emner for',
+    76 => 'Hvis du velger et eller flere emner fra listen under, så vil du motta alle nye artikler for det enkelte emne ved dagens slutt. Velg kun emner som interesserer deg!',
+    77 => 'Foto',
+    78 => 'Legg inn et bilde av deg selv!',
+    79 => 'Kryss av her for å slette dette bildet',
+    80 => 'Loginn',
+    81 => 'Send Email',
+    82 => 'Siste 10 artikler av bruker',
+    83 => 'Skrivestatistikk for bruker',
+    84 => 'Totalt antall artikler:',
+    85 => 'Totalt antall kommentarer:',
+    86 => 'Finn alt skrevet av',
+    87 => 'Ditt login-navn',
+    88 => "Noen (kanskje du) har bedt om et nytt passord for din konto \"%s\" på {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nHvis du virkelig ønsker å utføre dette, vennligst trykk på lenken under:\n\n",
+    89 => "Hvis du ikke ønsker å utføre dette, bare ignorer denne meldingen (passordet ditt vil ikke bli endret).\n\n",
+    90 => 'du kan skrive inn et nytt passord for kontoen din under. Vennligst merk at ditt gmle passord vil være gyldig helt til du bekrefter dette skjemaet.',
+    91 => 'Sett Nytt Passord',
+    92 => 'Skriv inn Nytt Passord',
+    93 => 'din siste forespørsel om nytt passord var %d for sekunder siden. Dette nettstedet krever minst %d sekunder mellom passord endringer.',
+    94 => 'Slett Konto "%s"',
+    95 => 'Trykk på  "slett konto" knappen under for å fjerne kontoen din fra vår database. Vennligst legg merke til at artikler og kommentarer du har skrevet med denne kontoen <strong>ikke</strong> vil bli slettet, men vil vises som skrevet av "Anonym".',
+    96 => 'slett konto',
+    97 => 'Bekreft Sletting av Konto',
+    98 => 'er du sikker på at du ønsker å slettekontoen din? Hvis du sletter kontoen din vil du ikke kunne logge inn på dette nettstedet igjen (dersom du ikke lager en ny konto). Hvis du er sikker, trykk "slett konto" igjen på skjemaet under.',
+    99 => 'Privacy Options for',
+    100 => 'Email fra Admin',
+    101 => 'Tillat email fra Administratorer',
+    102 => 'Email fra Brukere',
+    103 => 'Tillat email fra andre brukere',
+    104 => 'Vis Online Status',
+    105 => 'Vises i Online nå blokk',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Det er ingen nyheter å vise',
+    2 => 'Det er ingen artikler å vise. Enten er det ingen nyheter for dette emne, eller så er dine brukervalg for restriktive',
+    3 => ' for emne %s',
+    4 => 'Dagens Hovedoppslag',
+    5 => 'Neste',
+    6 => 'Forrige',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'det oppsto en feil under utsendelse av din melding. Vennligst forsøk på nytt.',
+    2 => 'Meldingen ble sendt.',
+    3 => 'Vennligst sjekk at du bruker en gyldig emailadressei Svar Til feltet.',
+    4 => 'Vennligst fyll ut feltene Ditt Navn, Svar Til, Emne og  Melding',
+    5 => 'Feil: Bruker finnes ikke.',
+    6 => 'En feil oppsto.',
+    7 => 'Brukerprofil for',
+    8 => 'Brukernavn',
+    9 => 'Bruker URL',
+    10 => 'Send email til',
+    11 => 'Ditt navn:',
+    12 => 'Svar Til:',
+    13 => 'Emne:',
+    14 => 'Melding:',
+    15 => 'HTML blir ikke oversatt.',
+    16 => 'Send Melding',
+    17 => 'Email denne artikkelen til en venn',
+    18 => 'Til Navn',
+    19 => 'Til Emailadresse',
+    20 => 'Fra Navn',
+    21 => 'Fra Emailadresse',
+    22 => 'Alle felter må fylles ut',
+    23 => "Denne emailen er sendt til deg av %s (%s) fordi vedkommende mener at du kunne være interessert i denne artikkelen fra {$_CONF['site_url']}. Dette er ikke SPAM (søppelpost) og mailadressene som ble brukt i denne transaksjonen er ikke lagret for senere bruk.",
+    24 => 'Kommenter denne artikkelen på',
+    25 => 'Du må være logget inn for å bruke denne funksjonen. Kravet om innlogging hjelper til med å hindre misbruk av systemet',
+    26 => 'Dette skjemaet lar deg sende en email til valgt bruker. Alle felter må fylles ut.',
+    27 => 'Kort melding',
+    28 => '%s skrev: ',
+    29 => "Dette er det daglige sammendraget fra {$_CONF['site_name']} for ",
+    30 => ' Daglig Nyhetsbrev for ',
+    31 => 'Overskrift',
+    32 => 'Dato',
+    33 => 'les hele artikkelen på',
+    34 => 'Slutt på Melding',
+    35 => 'Beklager, denne brukeren ønsker ikke å motta noen emailer.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Avansert Søk',
+    2 => 'Nøkkelord',
+    3 => 'Emne',
+    4 => 'Alle',
+    5 => 'Type',
+    6 => 'Artikler',
+    7 => 'Kommentarer',
+    8 => 'Forfattere',
+    9 => 'Alle',
+    10 => 'Søk',
+    11 => 'Søkeresultater',
+    12 => 'resultater',
+    13 => 'Søkeresultat: Ingen samsvar',
+    14 => 'Det var ingen resultater som svarte til ditt søk etter',
+    15 => 'Prøv igjen.',
+    16 => 'emne',
+    17 => 'Dato',
+    18 => 'Forfatter',
+    19 => "Søk i hele {$_CONF['site_name']} databasen av nåværende og gamle artikler",
+    20 => 'Dato',
+    21 => 'til',
+    22 => '(Datoformat YYYY-MM-DD)',
+    23 => 'Treff',
+    24 => 'Fant %d treff',
+    25 => 'søkte etter',
+    26 => 'treff ',
+    27 => 'sekunder',
+    28 => 'Ingen treff i artikler eller kommentarer for ditt søk',
+    29 => 'Resultater fra Artikler og Kommentarer',
+    30 => 'Ingen lenker svarte til ditt søk',
+    31 => 'Denne plug-in returnerte ingen treff',
+    32 => 'Begivenhet',
+    33 => 'URL',
+    34 => 'Sted',
+    35 => 'Hele dagen',
+    36 => 'Ingen begivenheter svarte til ditt søk',
+    37 => 'Resultater fra Begivenheter',
+    38 => 'Resultater fra Lenker',
+    39 => 'Lenker',
+    40 => 'Begivenheter',
+    41 => 'Søkestrengen din må inneholde minst 3 tegn.',
+    42 => 'Datoer må angis på formatet YYYY-MM-DD (år-måned-dag).',
+    43 => 'eksakt frase',
+    44 => 'alle ordene',
+    45 => 'et eller flere ord',
+    46 => 'Neste',
+    47 => 'Forrige',
+    48 => 'Forfatter',
+    49 => 'Dato',
+    50 => 'Treff',
+    51 => 'Lenke',
+    52 => 'Sted',
+    53 => 'Resultater fra Artikler',
+    54 => 'Resultater fra Kommentarer',
+    55 => 'frase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistikk for nettstedet',
+    2 => 'Totalt antall treff i systemet',
+    3 => 'Artikler(kommentarer) i systemet',
+    4 => 'Avstemninger(Svar) i systemet',
+    5 => 'Lenker(klikk) i systemet',
+    6 => 'Begivenheter i systemet',
+    7 => 'Topp Ti Viste Artikler',
+    8 => 'Overskrift',
+    9 => 'Vist',
+    10 => 'Det virker som om det ikke er noen artikler på dette nettstedet, eller at ingen har lest dem.',
+    11 => 'Topp Ti kommenterte Artikler',
+    12 => 'Kommentarer',
+    13 => 'Det virker som om det ikke er noen artikler på dette nettstedet, eller at ingen har kommentert dem.',
+    14 => 'Topp Ti Avstemninger',
+    15 => 'Spørsmål',
+    16 => 'stemmer',
+    17 => 'Det virker som om det ikke er noen avstemninger på dette nettstedet, eller at ingen har stemt.',
+    18 => 'Topp Ti Lenker',
+    19 => 'Lenke',
+    20 => 'Treff',
+    21 => 'Det virker som om det ikke er noen lenker på dette nettstedet, eller at ingen har klikket på dem.',
+    22 => 'Topp Ti Artikler sendt via Email',
+    23 => 'Emails',
+    24 => 'Det virker som om ingen har emailet en artikkel på dette nettstedet',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relatert',
+    2 => 'Send  artikkelen til en venn',
+    3 => 'utskriftsvennlig format',
+    4 => 'Valg',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Du må være logget inn for å poste en %s.',
+    2 => 'Logg inn',
+    3 => 'Ny bruker',
+    4 => 'Post en begivenhet',
+    5 => 'Post en lenke',
+    6 => 'Post en artikkel',
+    7 => 'Innlogging kreves',
+    8 => 'Post',
+    9 => 'Når du poster informasjon på dette nettstedet ber vi om at du følger disse retningslinjene...<ul><li>Alle feltene må fylles ut<li>Gi nøyaktige og komplette opplysninger<li>Dobbeltsjekk URLer</ul>',
+    10 => 'Overskrift',
+    11 => 'Lenke',
+    12 => 'Start Dato',
+    13 => 'Slutt Dato',
+    14 => 'Sted',
+    15 => 'Beskrivelse',
+    16 => 'Hvis Annen, vennligst angi',
+    17 => 'Kategori',
+    18 => 'Annen',
+    19 => 'Les først',
+    20 => 'Feil: kategori mangler',
+    21 => 'Hvis du velger "Annen" vennligst angi et navn på kategorien',
+    22 => 'Feil: felt mangler',
+    23 => 'Vennligst fyll inn alle feltene.  Alle felt er påkrevd.',
+    24 => 'Posting lagret',
+    25 => 'Din posting av en %s er lagret.',
+    26 => 'Fartsgrense',
+    27 => 'Brukernavn',
+    28 => 'Emne',
+    29 => 'Artikkel',
+    30 => 'din siste posting var ',
+    31 => " sekunder siden.  Dette nettstedet krever minst {$_CONF['speedlimit']} sekunder mellom postinger",
+    32 => 'Forhåndsvisning',
+    33 => 'Forhåndsvis Artikkel',
+    34 => 'Logg ut',
+    35 => 'HTML tagger er ulovlig',
+    36 => 'Posting Modus',
+    37 => "Når en begivenhet postes til {$_CONF['site_name']} så havner den på hovedkalenderen, og andre brukere kan velge å legge den til sin personlige  kalender. Kalenderen er <b>IKKE</b> beregnet for å lagre personlige begivenheter som fødselsdager, jubileum osv.<br><br>Når en begivenhet er postet blir den sendt til våre redaktører, og hvis den blir godkjent havner den på hovedkalenderen.",
+    38 => 'Legg Begivenhet Til',
+    39 => 'Hoved Kalender',
+    40 => 'Personlig Kalender',
+    41 => 'Slutt Tid',
+    42 => 'Start Tid',
+    43 => 'Heldags Begivenhet',
+    44 => 'Adresselinje 1',
+    45 => 'Adresselinje 2',
+    46 => 'By/Sted',
+    47 => 'Stat',
+    48 => 'Postnummer',
+    49 => 'Begivenhet Type',
+    50 => 'Rediger Begivenhetstyper',
+    51 => 'Sted',
+    52 => 'Slett',
+    53 => 'Lag Konto'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autentisering kreves',
+    2 => 'Avvist! Ugyldig brukernavn eller passord',
+    3 => 'Ugyldig passord for bruker',
+    4 => 'Brukernavn:',
+    5 => 'Passord:',
+    6 => 'All tilgang til administrative deler av nettstedet blir logget og gransket.<br>Denne siden er kun autorisert personell.',
+    7 => 'logg inn'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Utilstrekkelige Admin Rettigheter',
+    2 => 'Du har ikke nødvendige rettigheter for å redigere denne blokken.',
+    3 => 'Blokk Editor',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Blokk Overskrift',
+    6 => 'Emne',
+    7 => 'Alle',
+    8 => 'Blokk Sikkerhetsnivå',
+    9 => 'Blokk Rekkefølge',
+    10 => 'Blokk Type',
+    11 => 'Portal Blokk',
+    12 => 'Normal Blokk',
+    13 => 'Portal Blokk Opsjoner',
+    14 => 'RDF URL',
+    15 => 'Siste RDF Oppdatering',
+    16 => 'Normal Blokk Opsjoner',
+    17 => 'Blokk Innhold',
+    18 => 'Vennligst fyll ut feltene Overskrift, Sikkerhetsnivå og innhold ',
+    19 => 'Blokk Bestyrer',
+    20 => 'Blokk Overskrift',
+    21 => 'Blokk Sikkerhetsnivå',
+    22 => 'Blokk Type',
+    23 => 'Blokk Rekkefølge',
+    24 => 'Blokk Emne',
+    25 => 'For å endre eller slette en blokk, klikk på blokkoverskriften under.  For å lage en ny blokk klikk på "Ny Blokk" ovenfor.',
+    26 => 'Layout Blokk',
+    27 => 'PHP Blokk',
+    28 => 'PHP Blokk Opsjoner',
+    29 => 'Blokk Funksjon',
+    30 => 'Hvis du vil bruke PHP kode i en blokk, skriv inn navnet på funksjonen over.  Navnet på funksjonen må starte med prefikset "phpblock_" (feks. phpblock_getweather).  Dersom navnet ikke har dette prefikset, så vil funksjonen IKKE bli kalt.  Vi gjør dette for å forhindre hackere fra å bruke vilkårlige funksjoner (som kan skade systemet), dersom de skulle klare å gjøre innbrudd i Geeklog installasjonen din. forsikre deg om at det ikke er tomme paranteser "()" etter navnet på funksjonen. Til slutt anbefaler vi at du legger all kode til PHP Blokker i /path/to/geeklog/system/lib-custom.php.  Da unngår du at koden blir overskrevet ved oppgraderinger av Geeklog.',
+    31 => 'Feil i PHP Blokk. Funksjonen %s eksisterer ikke.',
+    32 => 'Feil Felt(er) mangler',
+    33 => 'Du må skrive inn URLen til .rdf filen for portal blokker',
+    34 => 'Du må skrive inn overskrift og funksjon for PHP blokker',
+    35 => 'Du må skrive inn overskrift og innhold for normale blokker',
+    36 => 'Du må skrive inn the content for layout blocks',
+    37 => 'Ulovlig funksjonsnavn på PHP blokk',
+    38 => 'Funksjoner for PHP Blokker må ha prefikset \'phpblock_\' (feks. phpblock_getweather). Prefikset \'phpblock_\' kreves av sikkerhetsmesige årsaker for å forhindre kjøring av vilkårlig kode..',
+    39 => 'Side',
+    40 => 'Venstre',
+    41 => 'Høyre',
+    42 => 'du må skrive inn rekkefølge og sikkerhetsnivå for Geeklog standard blokker',
+    43 => 'Kun hjemmeside',
+    44 => 'Adgang Nektet',
+    45 => "Du forsøker å få tilgang til en blokk som du ikke har rettigheter til. Forsøket er logget. Vennligst <a href=\"{$_CONF['site_admin_url']}/block.php\">gå tilbake til administrasjonsiden for blokker</a>.",
+    46 => 'Ny Blokk',
+    47 => 'Admin Hovedside',
+    48 => 'Blokk Navn',
+    49 => ' (uten mellomrom og må være unikt)',
+    50 => 'URL til hjelpefil',
+    51 => 'ta med http://',
+    52 => 'hvis du lar denne være tom, så vises ikke hjelpeikonet for denne blokken',
+    53 => 'Aktivisert',
+    54 => 'lagre',
+    55 => 'avbryt',
+    56 => 'slett',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Begivenhet Editor',
+    2 => 'Error',
+    3 => 'Begivenhet Overskrift',
+    4 => 'Begivenhet URL',
+    5 => 'Begivenhet Start Dato',
+    6 => 'Begivenhet slutt Dato',
+    7 => 'Begivenhet sted',
+    8 => 'Begivenhet Beskrivelse',
+    9 => '(ta med http://)',
+    10 => 'Du må ta med dato og tid, beskrivelse og sted!',
+    11 => 'Begivenhet Bestyrer',
+    12 => 'For å endre eller slette en begivenhet, klikk på begivenheten under. For å lage en ny begivenhet klikk på Ny Begivenhet ovenfor.',
+    13 => 'Begivenhet Overskrift',
+    14 => 'Start Dato',
+    15 => 'Slutt Dato',
+    16 => 'Adgang Nektet',
+    17 => "Du forsøker å få tilgang til en begivenhet som du ikke har rettigheter til. Forsøket er logget. Vennligst <a href=\"{$_CONF['site_admin_url']}/event.php\">gå tilbake til administrasjonsiden for begivenheter</a>.",
+    18 => 'Ny Begivenhet',
+    19 => 'Admin Hovedside',
+    20 => 'lagre',
+    21 => 'avbryt',
+    22 => 'slett',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Forrige artikler',
+    2 => 'Neste artikler',
+    3 => 'Modus',
+    4 => 'Posting Modus',
+    5 => 'Artikkel Editor',
+    6 => 'Det er ingen artikler i systemet',
+    7 => 'Forfatter',
+    8 => 'lagre',
+    9 => 'forhåndsvis',
+    10 => 'avbryt',
+    11 => 'slett',
+    12 => 'ID',
+    13 => 'Tittel',
+    14 => 'Emne',
+    15 => 'Dato',
+    16 => 'Introduksjonstekst',
+    17 => 'Hovedtekst',
+    18 => 'Treff',
+    19 => 'Kommentarer',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Artikkel Liste',
+    23 => 'For å redigere eller slette en artikkel, klikk på artikkelnummeret under. For å se en artikkel, klikk på tittelen til artikkelen du ønsker å se. For å lage en ny artikkel klikk på Ny Artikkel over.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Artikkel forhåndsvisning',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Feil ved opplasting av fil',
+    31 => 'Vennligst fyll ut feltene Forfatter, Tittel og introduksjonstekst',
+    32 => 'Hovedoppslag',
+    33 => 'Det kan kun være ett hovedoppslag',
+    34 => 'Kladd',
+    35 => 'Ja',
+    36 => 'Nei',
+    37 => 'Mer av',
+    38 => 'Mer fra',
+    39 => 'Emails',
+    40 => 'Adgang Nektet',
+    41 => "Du forsøker å redigere en artikkel du ikke har adgang til. Forsøket er logget. Du kan lese artikkelen under. Vennligst <a href=\"{$_CONF['site_admin_url']}/story.php\">gå tilbake til artikkeladministrasjon</a> når du er ferdig.",
+    42 => "Du forsøker å se en artikkel du ikke har adgang til. Forsøket er logget. Vennligst <a href=\"{$_CONF['site_admin_url']}/story.php\">gå tilbake til artikkeladministrasjon</a>.",
+    43 => 'Ny Artikkel',
+    44 => 'Admin Hovedside',
+    45 => 'Adgang',
+    46 => '<b>MERK:</b> hvis du endrer datoen til å være i fremtiden, så vil artikkelen ikke bli publisert før datoen intreffer. Det betyr også at artikkelen ikke blir inkludert i RDF oversikten din, og at den blir ignorert av søke- og statistikksidene.',
+    47 => 'Bilder',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => 'For å bruke et av bildene du har lagt ved denne artikkelen må du sette inn en bestemt kode i artikkelen.  Koden er  [imageX], [imageX_right] (høyre) eller [imageX_left] (venstre) og X nummeret på bildet du har lagt ved. MERK: Du <b>må</b> bruke alle bildene du legger ved. Hvis ikke får du ikke lagret artikkelen.<BR><P><B>Forhåndsvisning</B>: Forhåndsvisning av e artikkel med bilder gjøres best ved å lagre artikkelen som en kladd, IKKE ved bruk av knappen for forhåndsvisning. Bruk knappen for forhåndsvisning kun på artikler uten bilder.',
+    52 => 'Slett',
+    53 => 'ble ikke brukt. Du må bruke dette bildet i introduksjonen eller i hovedteksten før du kan lagre endringer.',
+    54 => 'Vedlagte bilder ikke brukt',
+    55 => 'følgende feil oppsto under forsøk på å lagre artikkelen din. Vennligst rett opp disse feilene før du lagrer',
+    56 => 'Vis Emneikon',
+    57 => 'Vis bilde i original størrelse',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Emne Editor',
+    2 => 'Emne ID',
+    3 => 'Emne Navn',
+    4 => 'Emne Bilde',
+    5 => '(ikke bruk mellomrom)',
+    6 => 'Sletting av et emne vil også slette alle artikler og blokker som hører til emnet',
+    7 => 'Vennligst fyll ut feltene Emne ID og Emne Navn',
+    8 => 'Emne Administrasjon',
+    9 => 'For å redigere eller slette et emne, klikk på emnet. For å lage et nytt emne klikk på knappen Nytt Emne til venstre. Adgangsnivået ditt for hvert emne står i parantes',
+    10 => 'Sorteringsrekkefølge',
+    11 => 'Artikler/Side',
+    12 => 'Adgang Nektet',
+    13 => "Du forsøker å nå et emne du ikke har rettigheter til. Forsøket er logget. Vennligst <a href=\"{$_CONF['site_admin_url']}/topic.php\">gå tilbake til emneadministrasjon</a>.",
+    14 => 'Sorteringsmåte',
+    15 => 'alfabetisk',
+    16 => 'standard er',
+    17 => 'Nytt Emne',
+    18 => 'Admin Hovedside',
+    19 => 'lagre',
+    20 => 'avbryt',
+    21 => 'slett',
+    22 => 'Standard',
+    23 => 'Gjør dette til standard emne for nye artikler',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Bruker Editor',
+    2 => 'Bruker ID',
+    3 => 'Brukernavn',
+    4 => 'Fullt Navn',
+    5 => 'Passord',
+    6 => 'Sikkerhetsnivå',
+    7 => 'Email Adresse',
+    8 => 'Hjemmeside',
+    9 => '(ikke bruk mellomrom)',
+    10 => 'Vennligst fyll ut feltene Brukernavn, Fullt Navn, Sikkerhetsnivå og Email Adresse',
+    11 => 'Bruker Administrasjon',
+    12 => 'For å endre eller slette en bruker, klikk på brukeren under. For å lage en ny  bruker klikk på Ny Bruker til venstre. Du kan foreta enkle søk ved å skrive inn deler av brukernavn, email adresse eller fullt navn (feks.*sen* or *.no) i søkefeltet under.',
+    13 => 'SecLev',
+    14 => 'Reg. Dato',
+    15 => 'Ny Bruker',
+    16 => 'Admin Hovedside',
+    17 => 'EndrePassord',
+    18 => 'avbryt',
+    19 => 'slett',
+    20 => 'lagre',
+    21 => 'Brukernavnet du forsøke å lagre finnes allerede.',
+    22 => 'Feil',
+    23 => 'Masseimport',
+    24 => 'Masseimportering av brukere',
+    25 => 'Du kan importere en liste med brukere inn i Geeklog. Importfilen må være en tekstfil med felter adskilt med tab-tegn. Feltene må være i følgende rekkefølge: fullt navn, brukernavn, email adresse. Det må være kun en bruker per linje. Hver bruker du importerer vil få tilsendt en email med et tilfeldig passord. Dersom du ikke følger disse reglene vil det oppstå problemer som kan kreve manuelt arbeid, så det lønner seg å dobbeltsjekke importfilen!',
+    26 => 'Søk',
+    27 => 'Max Resultater',
+    28 => 'Kryss av her for å slette dette bildet',
+    29 => 'Sti',
+    30 => 'Importer',
+    31 => 'Nye Brukere',
+    32 => 'Prosessering ferdig. Importerte %d og %d feil oppsto',
+    33 => 'start',
+    34 => 'Feil: Du må angi en importfil.',
+    35 => 'Sist innlogget',
+    36 => '(aldri)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Godkjenn',
+    2 => 'Slett',
+    3 => 'Rediger',
+    4 => 'Profil',
+    10 => 'Tittel',
+    11 => 'Start Dato',
+    12 => 'URL',
+    13 => 'Kategori',
+    14 => 'Dato',
+    15 => 'Emne',
+    16 => 'Brukernavn',
+    17 => 'Fullt navn',
+    18 => 'Email',
+    34 => 'Kommando og Kontroll',
+    35 => 'Artikkel innlegg',
+    36 => 'Lenke innlegg',
+    37 => 'Begivenhet innlegg',
+    38 => 'Send inn',
+    39 => 'Det er ingen innlegg å vurdere nå',
+    40 => 'Bruker innlegg'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Søndag',
+    2 => 'Mandag',
+    3 => 'Tirsdag',
+    4 => 'Onsdag',
+    5 => 'Torsdag',
+    6 => 'Fredag',
+    7 => 'Lørdag',
+    8 => 'Legg til Begivenhet',
+    9 => '%s Begivenhet',
+    10 => 'Begivenheter for',
+    11 => 'Master Kalender',
+    12 => 'Min Kalender',
+    13 => 'Januar',
+    14 => 'Februar',
+    15 => 'Mars',
+    16 => 'April',
+    17 => 'Mai',
+    18 => 'Juni',
+    19 => 'Juli',
+    20 => 'August',
+    21 => 'September',
+    22 => 'Oktober',
+    23 => 'November',
+    24 => 'Desember',
+    25 => 'Tilbake til ',
+    26 => 'Hele Dagen',
+    27 => 'uke',
+    28 => 'Personlig Kalender for',
+    29 => 'Offentlig Kalender',
+    30 => 'slett begivenhet',
+    31 => 'Legg til',
+    32 => 'Begivenhet',
+    33 => 'Dato',
+    34 => 'Tid',
+    35 => 'Hurtig Legg til',
+    36 => 'Send inn',
+    37 => 'Beklager, personlige kalendere kan ikke benyttes på dette nettstedet',
+    38 => 'Personlig Begivenhet Editor',
+    39 => 'Dag',
+    40 => 'Uke',
+    41 => 'Måned'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail verktøy",
+    2 => 'Fra',
+    3 => 'Svar-til',
+    4 => 'Emne',
+    5 => 'Innhold',
+    6 => 'Send til:',
+    7 => 'Alle brukere',
+    8 => 'Admin',
+    9 => 'Opsjoner',
+    10 => 'HTML',
+    11 => 'Viktig melding!',
+    12 => 'Send',
+    13 => 'Reset',
+    14 => 'Ignorer brukerinstillinger',
+    15 => 'Feil ved sending til: ',
+    16 => 'Meldinger ble sendt til: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Send en melding til</a>",
+    18 => 'Til',
+    19 => 'MERK: hvis du vil sende en melding til alle medlemmene, velg gruppen innloggede brukere (LOGGEDIN) fra nedtrekksmenyen.',
+    20 => "<successcount> meldinger ble sendt og <failcount> meldinger feilet.  Detaljene for meldingene som feilet er nedenfor hvis du trenger dem. i motsatt fall kan du  <a href=\"{$_CONF['site_admin_url']}/mail.php\">sende en melding til</a> eller <a href=\"{$_CONF['site_admin_url']}/moderation.php\">gå tilbake til administrasjonssiden</a>.",
+    21 => 'Feil',
+    22 => 'Vellykkede',
+    23 => 'Ingen feil',
+    24 => 'Ingen vellykkede',
+    25 => '-- Velg Gruppe --',
+    26 => 'Vennligst fyll ut alle feltene i skjemaet og  velg en gruppe brukere fra nedtrekksmenyen.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installasjon av plugins medfører en mulighet for skade påGeeklog installasjonen din og, muligens også systemet ditt. Det er viktig at du kun installerer plugins hentet fra <a href="http://www.geeklog.net" target="_blank">Geeklogs nettsted</a>. Vi tester alle plugins vi mottar grundig på mange forskjellige operativsystemer. Viktig: installasjon av en plugin krever utførelse av noen få systemkommandoer som kan medføre sikkerhetsproblemer særlig hvis du bruker plugins fra andre nettsteder. NB! Denne advarselen medfører ingen garanti for at installasjonen av en plugin vil gå smertefritt, ei heller tar vi ansvar for eventuell skade som følge av en installasjon. Med andre ord, installer på egen risiko. For den forsiktige så følger det instruksjoner for manuell installasjon med hver plugin.',
+    2 => 'Advarsel for Plug-in Installasjon',
+    3 => 'Plug-in Installasjonsskjema',
+    4 => 'Plug-in Fil',
+    5 => 'Plug-in Liste',
+    6 => 'Advarsel: Plug-in er allerede installert!',
+    7 => 'Den plug-in du forsøker å installere finnes allerede. Vennligst slett plug-in før du reinstallerer den',
+    8 => 'Plugin kompatibilitetssjekk feilet',
+    9 => 'Denne plug-in krever en nyere versjon av Geeklog. Du må enten oppgradere <a href="http://www.geeklog.net">Geeklog</a> eller bruke en nyere versjon av denne plug-in.',
+    10 => '<br><b>Ingen plug-in er installert.</b><br><br>',
+    11 => 'For å redigere eller slette en plug-in, klikk på tallet til plug-in under. For å lære mer om en plug-in, klikk på plug-in navnet og du går til websiden til den plug-in. For å installere eller oppgradere en plug-in vennligst les dokumentasjonen for den aktuelle plug-in.',
+    12 => 'plugineditor() kalt uten et plugin navn',
+    13 => 'Plugin Editor',
+    14 => 'Ny Plug-in',
+    15 => 'Admin Hovedside',
+    16 => 'Plug-in Navn',
+    17 => 'Plug-in Versjon',
+    18 => 'Geeklog Versjon',
+    19 => 'Aktivisert',
+    20 => 'Ja',
+    21 => 'Nei',
+    22 => 'Installer',
+    23 => 'Lagre',
+    24 => 'Avbryt',
+    25 => 'Slett',
+    26 => 'Plug-in Navn',
+    27 => 'Plug-in Hjemmeside',
+    28 => 'Plug-in Versjon',
+    29 => 'Geeklog Versjon',
+    30 => 'Slett Plug-in?',
+    31 => 'Er du sikker på at du vil slette denne plug-in? Alle data og datastrukturer som brukes av denne plug-in vil også bli slettet. hvis du er sikker, klikk slett igjen nedenfor.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Passordet ditt er sendt på mail og du vil motta det hvert øyeblikk. Vennligst følg instruksjonene i meldingen. Takk for at du bruker {$_CONF['site_name']}",
+    2 => "Takk for at du sendte inn artikkelen din til {$_CONF['site_name']}. Den er oversendt til vår stab for godkjenning. Hvis artikkelen din blir godkjent såp vil den bli publisert på nettstedet vårt slik at andre kan lese den.",
+    3 => "Takk for at du sendte inn en lenke til {$_CONF['site_name']}. Den er oversendt til vår stab for godkjenning. Hvis lenken din blir godkjent vil den vises blant våre <a href={$_CONF['site_url']}/links.php>lenker</a>.",
+    4 => "Takk for at du sendte inn en begivenhet til {$_CONF['site_name']}.  Den er oversendt til vår stab for godkjenning. Hvis den blir godkjent vil begivenheten din vises i <a href={$_CONF['site_url']}/calendar.php>kalenderen</a>.",
+    5 => 'Kontoinformasjonen din ble lagret.',
+    6 => 'Dine visningsvalg ble lagret.',
+    7 => 'Dine kommentarvalg ble lagret.',
+    8 => 'Du er logget ut.',
+    9 => 'Din artikkel ble lagret.',
+    10 => 'Artikkelen ble slettet.',
+    11 => 'Blokken din ble lagret.',
+    12 => 'Blokken ble slettet.',
+    13 => 'Ditt emne ble lagret.',
+    14 => 'Emnet og alle tilhørende artikler og blokker ble slettet.',
+    15 => 'Din lenke ble lagret.',
+    16 => 'Lenken ble slettet.',
+    17 => 'Din begivenhet ble lagret.',
+    18 => 'Begivenheten ble slettet.',
+    19 => 'Avstemningen din ble lagret.',
+    20 => 'Avstemningen ble slettet.',
+    21 => 'Den nye brukeren ble lagret.',
+    22 => 'Brukeren ble slettet',
+    23 => 'Feil under forsøk på å legge en begivenhet til kalenderen din. Begivenheten hadde ingen ID.',
+    24 => 'Begivenheten ble lagret til kalenderen din',
+    25 => 'din personlige kalender kan ikke åpnes før du logger inn',
+    26 => 'Begivenheten ble fjernet fra din personlige kalender',
+    27 => 'Meldingen ble sendt.',
+    28 => 'Plug-in ble lagret',
+    29 => 'Beklager, personlige kalendere kan ikke benyttes på dette nettstedet',
+    30 => 'Adgang Nektet',
+    31 => 'Beklager, du har ikke adgang til artikkel administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    32 => 'Beklager, du har ikke adgang til emne administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    33 => 'Beklager, du har ikke adgang til blokk administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    34 => 'Beklager, du har ikke adgang til lenke administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    35 => 'Beklager, du har ikke adgang til begivenhet administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    36 => 'Beklager, du har ikke adgang til avstemning administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    37 => 'Beklager, du har ikke adgang til bruker administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    38 => 'Beklager, du har ikke adgang til plugin administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    39 => 'Beklager, du har ikke adgang til mail administrasjon. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    40 => 'Systemmelding',
+    41 => 'Beklager, du har ikke tilgang til siden for å administrere ordskifte. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    42 => 'Ordet ditt ble lagret.',
+    43 => 'ordet ble slettet.',
+    44 => 'Plug-in installert!',
+    45 => 'Plug-in slettet.',
+    46 => 'Beklager, du har ikke tilgang til sikkerhetskopiering av databasen. Vennligst legg merke til at alle forsøk på uautorisert tilgang blir logget',
+    47 => 'Denne funksjonen virker kun under *nix. Hvis operativsystemet du kjører på er *nix så er din cache tømt. Hvis du kjører på windows må du søke etter filer som heter adodb_*.php og slette dem manuelt.',
+    48 => "Takk for din søknad om medlemsskap hos {$_CONF['site_name']}. Teamet vårt vil vurdere søknaden din. Hvis søknaden din blir godkjent, blir passordet ditt sendt til mailadressen du nettopp oppga.",
+    49 => 'Gruppen ble lagret.',
+    50 => 'Gruppen ble slettet.',
+    51 => 'Dette brukernavnet er allerede i bruk. Vennligst velg et annet brukernavn.',
+    52 => 'emailadressen du har gitt ser ut til å være en ugyldig email adresse.',
+    53 => 'Ditt nye passord er akseptert. Vennligst logg inn med det nye passordet under nå.',
+    54 => 'Din forespørsel om et nytt passord er for gammel. Vennligst prøv på nytt under.',
+    55 => 'En enail er sendt til deg og burde dukke opp i innboksen din hvert øyeblikk. vennligst følg instruksjonene i meldingen for å endre passordet på kontoen din.',
+    56 => 'Den angitte emailadressen er allerede i bruk for en annen konto.',
+    57 => 'kontoen din er slettet.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Adgang',
+    'ownerroot' => 'Eier/Root',
+    'group' => 'Gruppe',
+    'readonly' => 'Kun-lese',
+    'accessrights' => 'Adgangsrettigheter',
+    'owner' => 'eier',
+    'grantgrouplabel' => 'Gi ovenstående gruppe redigeringsrettigheter',
+    'permmsg' => 'MERK: medlemmer er alle innloggede medlemmer av nettstedet og anonyme er alle brukere på nettstedet som ikke er logget inn.',
+    'securitygroups' => 'Sikkerhetsgrupper',
+    'editrootmsg' => "Selv om du er en Brukeradministrator, så kan du ikke redigere en root bruker uten at du selv er en root bruker. Du kan redigere alle andre brukere unntatt root brukere. Vennligst legg merke til at alle forsøk på ulovlig redigering av root brukere blir logget. Vennligst gå tilbake til <a href=\"{$_CONF['site_admin_url']}/user.php\">Bruker administrasjon</a>.",
+    'securitygroupsmsg' => 'Kryss av for gruppene du vil at brukeren skal tilhøre.',
+    'groupeditor' => 'Gruppe Editor',
+    'description' => 'Beskrivelse',
+    'name' => 'Navn',
+    'rights' => 'Rettigheter',
+    'missingfields' => 'Manglende felter',
+    'missingfieldsmsg' => 'Du må angi et navn og en beskrivelse for en gruppe',
+    'groupmanager' => 'Gruppe Administrasjon',
+    'newgroupmsg' => 'For å endre eller slette en gruppe, klikk på gruppen under. For å lage en ny gruppe klikk på ny gruppe ovenfor. Legg merke til at core grupper ikke kan slettes fordi de brukes av systemet.',
+    'groupname' => 'Gruppenavn',
+    'coregroup' => 'Core gruppe',
+    'yes' => 'Ja',
+    'no' => 'Nei',
+    'corerightsdescr' => "Dette er en core (innebygd) {$_CONF['site_name']} gruppe. Rettighetene for denne gruppen kan ikke redigeres. Nedenfor er en liste over de rettigheter denne gruppen har.",
+    'groupmsg' => 'Sikkerhetsgrupper på dette nettstedet er hierarkiske.  Hvis du legger denne gruppen til en av gruppene under gir du denne gruppen samme rettigheter som de gruppene har. Det anbefales at du bruker gruppene under for å gi rettigheter til en gruppe så langt det er mulig. dersom denne gruppen trenger mer spesifikke rettigheter så kan du velge disse fra \'Rettigheter\' nedenfor. For å legge denne gruppen til en av de andre gruppene under, kryss av for de gruppene du ønsker.',
+    'coregroupmsg' => "Dette er en core {$_CONF['site_name']} gruppe. Gruppene som denne gruppen hører til kan ikke redigeres. Under er en liste over grupper som denne gruppen hører til.",
+    'rightsdescr' => 'En rettighet kan gis direkte til gruppen, ELLER til en annen gruppe som denne gruppen er medlem av. Rettighetene under som ikke er avkrysset er de som denne gruppen har fått som medlem av en annen gruppe. Rettighetene som er avkryyset er rettigheter som er gitt direkte til denne gruppen.',
+    'lock' => 'Lås',
+    'members' => 'Medlemmer',
+    'anonymous' => 'Anonym',
+    'permissions' => 'Rettigheter',
+    'permissionskey' => 'R = lese, E = rediger, redigeringsrettighet medfører leserettighet',
+    'edit' => 'Rediger',
+    'none' => 'Ingen',
+    'accessdenied' => 'Adgang Nektet',
+    'storydenialmsg' => "Du har ikke adgang til å se denne artikkelen. Dette kan skyldes at du ikke er medlem av {$_CONF['site_name']}. Vennligst <a href=users.php?mode=new> bli medlem</a> av {$_CONF['site_name']} for å oppnå full tilgang!",
+    'eventdenialmsg' => "Du har ikke adgang til å se denne begivenheten. Dette kan skyldes at du ikke er medlem av {$_CONF['site_name']}.  Vennligst <a href=users.php?mode=new> bli medlem</a> av {$_CONF['site_name']} for å oppnå full tilgang!",
+    'nogroupsforcoregroup' => 'Denne gruppen hører ikke til noen av de andre gruppene',
+    'grouphasnorights' => 'Denne gruppen har ikke tilgang til administrative funksjoner på dette nettstedet',
+    'newgroup' => 'Ny Gruppe',
+    'adminhome' => 'Admin Hovedside',
+    'save' => 'lagre',
+    'cancel' => 'avbryt',
+    'delete' => 'slett',
+    'canteditroot' => 'Du har forsøkt å redigere Root gruppen uten selv å være medlem av Root gruppen, tilgangen er derfor nektet. Vennligst kontakt administratoren til nettstedet hvis du mener dette er en feil',
+    'listusers' => 'Liste Brukere',
+    'listthem' => 'list',
+    'usersingroup' => 'Brukere i gruppe %s',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Siste 10 Backups',
+    'do_backup' => 'Ta Backup',
+    'backup_successful' => 'Backup av databasen var vellykket.',
+    'db_explanation' => 'For å ta en backup av ditt Geeklog system, klikk knappen nedenfor',
+    'not_found' => "Feil sti eller mysqldump er ikke kjørbar.<br>Sjekk <strong>\$_DB_mysqldump_path</strong> definisjonen i config.php.<br>Variabelen er nå satt til: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup feilet: størrelsen på backupfilen var 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} finnes ikke eller er ikke en katalog",
+    'no_access' => "FEIL: Katalogen {$_CONF['backup_path']} er ikke tilgjengelig.",
+    'backup_file' => 'Backup fil',
+    'size' => 'Størrelse',
+    'bytes' => 'Bytes',
+    'total_number' => 'Totalt antall backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Hjem',
+    2 => 'Kontakt',
+    3 => 'Bli Publisert',
+    4 => 'Lenker',
+    5 => 'Avstemninger',
+    6 => 'Kalender',
+    7 => 'Nettsted statistikk',
+    8 => 'Personaliser',
+    9 => 'Søk',
+    10 => 'avansert søk',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Jøss, jeg har sett overalt men kan ikke finne <b>%s</b>.',
+    3 => "<p>vi beklager, men filen du har bedt om finnes ikke. Sjekk gjerne <a href=\"{$_CONF['site_url']}\">hovedsiden</a> eller <a href=\"{$_CONF['site_url']}/search.php\">søkesiden</a> for å se om du finner det du har mistet."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Innlogging påkrevd',
+    2 => 'Beklager, du må være innlogget for å få adgang til dette området.',
+    3 => 'Logg inn',
+    4 => 'Ny Bruker'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/polish.php 1.4.0sr5-1/cpanel-glprivate/language/polish.php
--- 1.3.11sr1/cpanel-glprivate/language/polish.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/polish.php	2006-08-08 02:39:06.000000000 -0500
@@ -153,7 +153,17 @@
     110 => 'Powiadom administratora o tym wpisie',
     111 => 'Wersja PDF',
     112 => 'Zarejestrowani Uytkownicy',
-    113 => 'Dokumentacja'
+    113 => 'Dokumentacja',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -320,7 +330,23 @@
     104 => 'Poka Status Online',
     105 => 'Poka w bloku Who\'s Online',
     106 => 'Lokalizacja',
-    107 => 'Poka w swoim publicznym profilu'
+    107 => 'Poka w swoim publicznym profilu',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -338,27 +364,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Linki',
-    2 => 'Brak linkw.',
-    3 => 'Dodaj Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Gos Zapisany',
-    2 => 'Zapisano Twj gos oddany w sondzie ',
-    3 => 'Gosuj',
-    4 => 'Sondy w Systemie',
-    5 => 'Gosw',
-    6 => 'Zobacz inne sondy'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -459,7 +464,11 @@
     54 => 'Komentarze - Wyniki',
     55 => 'fraza',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -489,7 +498,14 @@
     21 => 'Wyglda na to, e w tym serwisie nie ma adnych linkw albo nikt nigdy nie klikn na aden z nich.',
     22 => '10 Najczciej Emaliowanych Artykuw',
     23 => 'Emaile',
-    24 => 'Wyglda na to, e nikt nie przesa swoim znajomym adnego artykuu'
+    24 => 'Wyglda na to, e nikt nie przesa swoim znajomym adnego artykuu',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -642,7 +658,12 @@
     57 => 'Przesu Blok w D',
     58 => 'Przesu Blok w Gr',
     59 => 'Przesu blok na prawo',
-    60 => 'Przesu blok w lewo'
+    60 => 'Przesu blok w lewo',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -677,35 +698,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Edytor Linkw',
-    2 => '',
-    3 => 'Tytu',
-    4 => 'URL',
-    5 => 'Kategoria',
-    6 => '(uwzgldnij http://)',
-    7 => 'Inne',
-    8 => 'Odson',
-    9 => 'Opis',
-    10 => 'Wpisz Tytua, URL i Opis linka.',
-    11 => 'Menader Linkw',
-    12 => 'Aby zmodyfikowa lub wykasowa link, kliknij na dany link poniej.  Aby wpisa nowy link kliknij Nowy Link powyej.',
-    13 => 'Tytu',
-    14 => 'Kategoria',
-    15 => 'URL',
-    16 => 'Odmowa Dostpu',
-    17 => "Prbujesz wyedytowa link, do ktrego nie masz uprawnie.  Ta prba zostaa zapisana w logu. Prosz <a href=\"{$_CONF['site_admin_url']}/link.php\">wrci do ekranu administrowania linkami</a>.",
-    18 => 'Nowy Link',
-    19 => 'Panel Sterowania',
-    20 => 'Jeli inny, podaj jaki',
-    21 => 'zapisz',
-    22 => 'anuluj',
-    23 => 'kasuj'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -728,16 +720,16 @@
     17 => 'Cz Gwna',
     18 => 'Wej',
     19 => 'Komentarze',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Lista Artykuw',
     23 => 'Aby zmodyfikowa lub wykasowa artyku, kliknij na numer danego artykuu poniej. Aby przegldn artyku kliknij na tytu danego artykuu. Aby wpisa nowy artyku kliknij na Nowy Artyku powyej.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Podgld Artykuu',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Bd Uploadu Pliku',
     31 => 'Prosz wpisa Tytu i Wstp',
     32 => 'Artyku Dnia',
@@ -759,7 +751,7 @@
     48 => 'zdjcie',
     49 => 'prawo',
     50 => 'lewo',
-    51 => 'Aby doda jedno ze zdj, ktre chcesz podpi do tego artykuu musisz wstawi specjalnie sformatowany tekst.  Tekst jest nastpujcy [zdjcieX], [zdjcieX_prawo] lub [zdjcieX_lewo] gdzie X to numer obrazka, ktry zaczye.  UWAGA: Musisz uywa obrazkw, ktre zaczasz.  Inaczej nie bdziesz w stanie zapisa swojego artykuu.<BR><P><B>PODGLD</B>: Podgld artykuu z zaczonymi obrazkami dziaa najlepiej po uprzednim zapisaniu artykuu jako kopia ZAMIAST uycia bezporednio klawisza podgld.  Uywaj klawisza podgld tylko gdy nie podpinasz obrazkw.',
+    51 => 'Aby doda jedno ze zdj, ktre chcesz podpi do tego artykuu musisz wstawi specjalnie sformatowany tekst.  Tekst jest nastpujcy [imageX], [imageX_right] lub [imageX_left] gdzie X to numer obrazka, ktry zaczye.  UWAGA: Musisz uywa obrazkw, ktre zaczasz.  Inaczej nie bdziesz w stanie zapisa swojego artykuu.<BR><P><B>PODGLD</B>: Podgld artykuu z zaczonymi obrazkami dziaa najlepiej po uprzednim zapisaniu artykuu jako kopia ZAMIAST uycia bezporednio klawisza podgld.  Uywaj klawisza podgld tylko gdy nie podpinasz obrazkw.',
     52 => 'Kasuj',
     53 => 'nie zosta uyty.  Musisz umieci ten obrazek we wstpie lub w gwnej czci zanim zapiszsz zmiany',
     54 => 'Zaczonych Obrazw Nie Uyto',
@@ -770,39 +762,30 @@
     59 => 'Opcja',
     60 => 'Aktywna',
     61 => 'Auto Archiwizacja',
-    62 => 'Auto Kasacja'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Tryb',
-    2 => 'Prosz wpisa pytanie i co najmniej jedn odpowied.',
-    3 => 'Sonda Stworzona',
-    4 => 'Sonda %s zapisana',
-    5 => 'Edycja Sondy',
-    6 => 'ID Sondy',
-    7 => '(bez spacji)',
-    8 => 'Pojawia si na Stronie Gwnej',
-    9 => 'Pytanie',
-    10 => 'Odpowiedzi / Gosy',
-    11 => 'Wystpi bd przy pobieraniu odpowiedzi sondy %s',
-    12 => 'Wystpi bd przy pobieraniu pyta sondy %s',
-    13 => 'Stwrz Sond',
-    14 => 'zapisz',
-    15 => 'anuluj',
-    16 => 'kasuj',
-    17 => 'Prosz wpisa ID Sondy',
-    18 => 'Lista Sond',
-    19 => 'Aby zmodyfikowa lub wykasowa sond, kliknij na dan sond.  Aby stworzy now sond kliknij Nowa Sonda powyej.',
-    20 => 'Gosujcych',
-    21 => 'Odmowa Dostpu',
-    22 => "Prbujesz wyedytowa sond do ktrej nie masz uprawnie.  Ta prba zostaa zapisana w logu. Prosz <a href=\"{$_CONF['site_admin_url']}/poll.php\">wrci do strony administrujcej sondami</a>.",
-    23 => 'Nowa Sonda',
-    24 => 'Panel Sterowania',
-    25 => 'Tak',
-    26 => 'Nie'
+    62 => 'Auto Kasacja',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -834,7 +817,10 @@
     23 => 'zrb z tego domyln sekcj dla przesyanych artykuw',
     24 => '(*)',
     25 => 'Sekcja Archiwalna',
-    26 => 'domylna sekcja dla archiwizowanych artykuw. Dozwolona jest tylko jedna sekcja.'
+    26 => 'domylna sekcja dla archiwizowanych artykuw. Dozwolona jest tylko jedna sekcja.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -876,7 +862,18 @@
     33 => 'przelij',
     34 => 'Bd: Musisz poda plik do zaadowania.',
     35 => 'Ostatni Login',
-    36 => '(nigdy)'
+    36 => '(nigdy)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1021,7 +1018,11 @@
     31 => 'Czy aby na pewno skasowa ten plugin?  Ta operacja usunie wszelkie pliki, dane i struktur uywane przez ten plugin.  Jeli chcesz kontynuwa kliknij kasuj poniej.',
     32 => '<p><b>Bdny format tagu AutoLink</b></p>',
     33 => 'Wersja Kodu',
-    34 => 'Aktualizacja'
+    34 => 'Aktualizacja',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1064,7 +1065,15 @@
     39 => 'Wpisz Tytu Pliku, Opis i Nazw Pliku.',
     40 => 'Prosz poda liczb tytuw lub czas w godzinach.',
     41 => 'Linki',
-    42 => 'Wydarzenia'
+    42 => 'Wydarzenia',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1131,7 +1140,21 @@
     58 => 'Plik zosta zapisany.',
     59 => 'Plik zosta skasowany.',
     60 => 'Plugin zosta pomylnie zaktualizowany',
-    61 => 'Plugin %s: Nieznany komunikat placeholder'
+    61 => 'Plugin %s: Nieznany komunikat placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1191,7 +1214,16 @@
     'availmembers' => 'Dostpni Czonkowie',
     'groupmembers' => 'Czonkowie Grupy',
     'canteditgroup' => 'Aby wyedytowa t grup musisz do niej nalee. Prosz skontaktowa si z administratorem jeli uwaasz, e nastpia pomyka.',
-    'cantlistgroup' => 'Aby zobaczy czonkw tej grupy, musisz by jej czonkiem. Skontaktuj si z administratorem jeli uwaasz, e to jest bd.'
+    'cantlistgroup' => 'Aby zobaczy czonkw tej grupy, musisz by jej czonkiem. Skontaktuj si z administratorem jeli uwaasz, e to jest bd.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1201,7 +1233,6 @@
     'last_ten_backups' => '10 Kopii Zapasowych',
     'do_backup' => 'Wykonaj Kopi Zapasow',
     'backup_successful' => 'Kopia bazy wykonana pomylnie.',
-    'no_backups' => 'Brak kopii zapasowych w systemie',
     'db_explanation' => 'Aby wykona now kopi zapasow twojego systemu, kliknij poniszy przycisk',
     'not_found' => "Niewaciwa cieka lub program archiwizujcy nie jest wykonywalny.<br>Sprawd <strong>\$_DB_mysqldump_path</strong> ustawienia w config.php.<br>Zmienna jest obecnie ustawiona na: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Wykonanie Kopii Nie Powiodo Si: Rozmiar pliku 0 bajtw',
@@ -1225,7 +1256,8 @@
     7 => 'Statystyka',
     8 => 'Osobiste',
     9 => 'Szukaj',
-    10 => 'zaawansowane szukanie'
+    10 => 'zaawansowane szukanie',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1267,4 +1299,210 @@
     14 => 'dany PDF albo nie istnieje albo nie masz do niego uprawnie.'
 );
 
-?>
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/polish_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/polish_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/polish_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/polish_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1508 @@
+<?php
+
+###############################################################################
+# polish.php
+# This is the Polish language page for GeekLog!
+# Special thanks to Robert Stadnik geeklog@geeklog.now.pl for his work on this project
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Autor:',
+    2 => 'czytaj dalej',
+    3 => 'komentarzy',
+    4 => 'Edycja',
+    5 => 'Głosuj',
+    6 => 'Wyniki',
+    7 => 'Wyniki Sondy',
+    8 => 'głosów',
+    9 => 'Menu Admina:',
+    10 => 'Panel Sterowania',
+    11 => 'Artykuły',
+    12 => 'Bloki',
+    13 => 'Sekcje',
+    14 => 'Linki',
+    15 => 'Wydarzenia',
+    16 => 'Sondy',
+    17 => 'Użytkownicy',
+    18 => 'Zapytanie SQL',
+    19 => 'Wyloguj',
+    20 => 'Informacje Użytkownika:',
+    21 => 'Login',
+    22 => 'ID Użytkownika',
+    23 => 'Poziom Zabezpieczeń',
+    24 => 'Gall Anonim',
+    25 => 'Komentuj',
+    26 => 'Komentarze należą do osób, które je zamieściły. Nie bierzemy odpowiedzialności za ich treść.',
+    27 => 'Najnowsze Komentarze',
+    28 => 'Kasuj',
+    29 => 'Komentarzy Brak.',
+    30 => 'Starsze Artykuły',
+    31 => 'Dozwolone Znaczniki HTML:',
+    32 => 'Błąd, niewłaściwy login',
+    33 => 'Błąd, nie można zapisać w logu',
+    34 => 'Błąd',
+    35 => 'Wyloguj',
+    36 => 'dnia',
+    37 => 'Brak artykułów użytkownika',
+    38 => 'Syndykacja Treści',
+    39 => 'Odśwież',
+    40 => 'Masz <tt>register_globals = Off</tt> w pliku <tt>php.ini</tt>. Niestety, Geeklog wymaga <tt>register_globals</tt> aby były ustawione na <strong>on</strong>. Proszę zminieć ustawienia na <strong>on</strong> i restartować serwer www.',
+    41 => 'Gość',
+    42 => 'Autor:',
+    43 => 'Odpowiedz',
+    44 => 'Główny',
+    45 => 'Numer Błędu MySQL',
+    46 => 'Numer Komunikatu Błędu MySQL',
+    47 => 'Menu Użytkownika',
+    48 => 'Konto - Info',
+    49 => 'Osobiste',
+    50 => 'Błędna składnia SQL',
+    51 => 'pomoc',
+    52 => 'Nowy',
+    53 => 'Panel Sterowania',
+    54 => 'Nie można otworzyć pliku.',
+    55 => 'Błąd przy',
+    56 => 'Głosuj',
+    57 => 'Hasło',
+    58 => 'Login',
+    59 => "Nie masz jeszcze konta? Załóż sobie <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nowy Użytkownik</a>",
+    60 => 'Komentarze',
+    61 => 'Załóż Konto',
+    62 => 'słów',
+    63 => 'Komentarze - Preferencje',
+    64 => 'Wyślij Znajomemu',
+    65 => 'Wersja do Wydruku',
+    66 => 'Mój Kalendarz',
+    67 => 'Witaj w Serwisie ',
+    68 => 'strona główna',
+    69 => 'kontakt',
+    70 => 'szukaj',
+    71 => 'napisz',
+    72 => 'linki',
+    73 => 'sonda',
+    74 => 'kalendarz',
+    75 => 'zaawansowane szukanie',
+    76 => 'statystyka',
+    77 => 'Pluginy',
+    78 => 'Wydarzenia',
+    79 => 'Co Nowego',
+    80 => 'artykułów w ost.',
+    81 => 'artykuł w ost.',
+    82 => 'godz',
+    83 => 'KOMENTARZE',
+    84 => 'LINKI',
+    85 => 'wygasają po 48 h',
+    86 => 'Brak nowych komentarzy',
+    87 => 'wygasają po 2 tyg',
+    88 => 'Brak nowych linków',
+    89 => 'Żadnych wydarzeń w najbliższym czasie',
+    90 => 'Strona Główna',
+    91 => 'Strona wygenerowana w ',
+    92 => 'sekund',
+    93 => 'Prawa Autorskie',
+    94 => 'Wszelkie znaki handlowe i prawa autorskie należą do ich właścicieli.',
+    95 => 'Wersja',
+    96 => 'Grupy',
+    97 => 'Lista Słów',
+    98 => 'Pluginy',
+    99 => 'ARTYKUŁY',
+    100 => 'Brak nowych artykułów',
+    101 => 'Twoje Wydarzenia',
+    102 => 'Wydarzenia na Serwisie',
+    103 => 'Kopie zapasowe bazy',
+    104 => 'przez',
+    105 => 'Wyślij Maila',
+    106 => 'Odsłon',
+    107 => 'Wersja GL - Test',
+    108 => 'Opróżnij Cache',
+    109 => 'Zgłoś nadużycie',
+    110 => 'Powiadom administratora o tym wpisie',
+    111 => 'Wersja PDF',
+    112 => 'Zarejestrowani Użytkownicy',
+    113 => 'Dokumentacja',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Kalendarz Wydarzeń',
+    2 => 'Sorry, brak wydarzeń.',
+    3 => 'Kiedy',
+    4 => 'Gdzie',
+    5 => 'Opis',
+    6 => 'Dodaj Wydarzenie',
+    7 => 'Zbliżające się Wydarzenia',
+    8 => 'Przez dodanie tego wydarzenie do swojego kalendarza możesz szybko przeglądać interesujące cię wydarzenia klikając "Mój Kalendarz" z poziomu Menu Użytkownika.',
+    9 => 'Dodaj do Mojego Kalendarza',
+    10 => 'Usuń z Mojego Kalendarza',
+    11 => "Dodawanie Wydarzenia do Kalendarza {$_USER['username']}",
+    12 => 'Wydarzenie',
+    13 => 'Rozpoczęcie',
+    14 => 'Zakończenie',
+    15 => 'Powrót do Kalendarza'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Napisz Komentarz',
+    2 => 'Format',
+    3 => 'Wyloguj',
+    4 => 'Załóż Konto',
+    5 => 'Login',
+    6 => 'Aby zamieścić komentarz należy się zalogować.  Jeśli nie masz jeszcze konta, załóż sobie używając poniższego formularza.',
+    7 => 'Ostatni komentarz zamieściłeś ',
+    8 => " sekund temu.  Wymagana jest przerwa równa {$_CONF['commentspeedlimit']} sekund pomiędzy komentarzami",
+    9 => 'Komentarz',
+    10 => 'Wyślij Raport',
+    11 => 'Wyślij Komentarz',
+    12 => 'Proszę uzupełnić pola Tytuł i Komentarz. Pola te są wymagane do zamieszczenia komentarza.',
+    13 => 'Twoje Informacje',
+    14 => 'Podgląd',
+    15 => 'Zgłoś tą wiadomość',
+    16 => 'Tytuł',
+    17 => 'Błąd',
+    18 => 'Ważne Informacje',
+    19 => 'Proszę starać się nie odbiegać od tematu.',
+    20 => 'Proszę raczej odpowiadać na zamieszczane komentarze innych użytkowników zamiast rozpoczynania nowych wątków.',
+    21 => 'Aby uniknąć powtarzania, zanim zamieścisz swój komentarz przeczytaj co napisali inni.',
+    22 => 'Wpisz temat adekwatny do treści wiadomości.',
+    23 => 'Twój adres email nie będzie ujawniony.',
+    24 => 'Gall Anonim',
+    25 => 'Czy chcesz zgłosić administratorowi ten komentarz?',
+    26 => '%s zgłosił następujący komentarz:',
+    27 => 'Raport nadużyć'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profil Użytkownika',
+    2 => 'Login',
+    3 => 'Nazwa',
+    4 => 'Hasło',
+    5 => 'Email',
+    6 => 'Strona Domowa',
+    7 => 'O Sobie',
+    8 => 'Klucz PGP',
+    9 => 'Zapisz Informacje',
+    10 => 'Ostatnie 10 komentarzy użytkownika',
+    11 => 'Brak Komentarzy Użytkownika',
+    12 => 'Preferencje Użytkownika',
+    13 => 'Email Nightly Digest',
+    14 => 'Hasło jest generowane automatycznie. Zalecana jest szybka zmiana hasła. Aby zmienić hasło, należy się zalogować a następnie kliknąć na Konto Info w Menu Użytkownika.',
+    15 => "Twoje {$_CONF['site_name']} konto zostało założone. Zaloguj się wykorzystując informacje poniżej. Proszę zachować tego maila w bezpiecznym miejscu.",
+    16 => 'Informacje Dotyczące Twojego Konta',
+    17 => 'Konto nie istnieje',
+    18 => 'Podany adres email nie jest prawidłowy',
+    19 => 'Podany login lub adres email już istnieje',
+    20 => 'Podany adres email nie jest prawidłowy',
+    21 => 'Błąd',
+    22 => "Zarejestruj się w serwisie {$_CONF['site_name']}!",
+    23 => "Konto w serwisie {$_CONF['site_name']} pozwoli ci zamieszczać komentarze i inne pozycje w twoim imieniu. Brak konta umożliwia tylko zamieszczanie jako anonim. Twój adres email <b><i>nigdy</i></b> nie będzie widoczny publicznie.",
+    24 => 'Twoje hasło zostanie wysłane pod podany adres email.',
+    25 => 'Zapomniałeś/aś hasło?',
+    26 => 'Wpisz <em>albo</em> swój login <em>albo</em> adres email podany podczas rejestracji i kliknij Prześlij Hasło. Instrukcje jak ustawić nowe hasło zostaną wysłane do Ciebie mailem.',
+    27 => 'Zarejestruj Się!',
+    28 => 'Prześlij Hasło',
+    29 => 'wylogowany z adresu',
+    30 => 'zalogowany z adresu',
+    31 => 'Wybrana funkcja wymaga wcześniejszego zalogowania',
+    32 => 'Podpis',
+    33 => 'Niewidoczne dla publiki',
+    34 => 'Twoje prawdziwe imię',
+    35 => 'Wpisz nowe hasło',
+    36 => 'Początek od http://',
+    37 => 'Zastosowane do twoich komentarzy',
+    38 => 'Wszystko o tobie! Każdy może to przeczytać',
+    39 => 'Twój publiczny klucz PGP dla wszystkich',
+    40 => 'Bez Ikon Sekcji',
+    41 => 'Chętny/a do Zatwierdzania Materiałów',
+    42 => 'Format Daty',
+    43 => 'Artykuły Max Ilość',
+    44 => 'Bez bloków',
+    45 => 'Wygląd - Ustawienia Użytkownika',
+    46 => 'Wyłączone Pozycje Użytkownika',
+    47 => 'Konfiguracja Bloków z Nowościami Użytkownika',
+    48 => 'Sekcje',
+    49 => 'Bez ikon w artykułach',
+    50 => 'Odznacz jeśli nie jesteś zainteresowany',
+    51 => 'Tylko nowe artykuły',
+    52 => 'Domyślnie jest',
+    53 => 'Otrzymujesz nowe artykuły co wieczór',
+    54 => 'Zaznacz sekcje i autorów, których nie chcesz oglądać.',
+    55 => 'Jeśli nic nie zaznaczysz oznacza to, że akceptujesz domyślną konfigurację. Przy zaznaczaniu wybranych bloków domyślne ustawienie jest anulowane. Nazwy bloków objętych domyślnym ustawieniem są pogrubione.',
+    56 => 'Autorzy',
+    57 => 'Wyświetlanie',
+    58 => 'Sortowanie wg',
+    59 => 'Limit Komentarzy',
+    60 => 'Jak chcesz wyświetlać swoje komentarze?',
+    61 => 'Od najnowszych czy od najstarszych?',
+    62 => 'Domyślnie jest 100',
+    63 => "Hasło zostało wysłane i powinno wkrótce do ciebie dotrzeć. Postępuj zgodnie ze wskazówkami w wiadomości. Dziękujemy za korzystanie z serwisu {$_CONF['site_name']}",
+    64 => 'Komentarze - Ustawienia Użytkownika',
+    65 => 'Spróbuj Zalogować się Ponownie',
+    66 => "Być może login został błędnie wpisany.  Spróbuj zalogować się ponownie. Czy jesteś <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nowym użytkownikiem</a>?",
+    67 => 'Członkowstwo Od',
+    68 => 'Pamiętaj Mnie Przez',
+    69 => 'Jak długo pamiętać cię po zalogowaniu?',
+    70 => "Dostosuj wygląd i zawartość serwisu {$_CONF['site_name']}",
+    71 => "Jedną z extra możliwości serwisu {$_CONF['site_name']} jest możliwość dopasowania zawartości i wyglądu strony.  Aby skorzystać z tych udogodnień należy się najpierw <a href=\"{$_CONF['site_url']}/users.php?mode=new\">zarejestrować</a> w serwisie {$_CONF['site_name']}.  Jesteś już członkiem?  Zaloguj się!",
+    72 => 'Pulpit',
+    73 => 'Język',
+    74 => 'Zmień wygląd strony!',
+    75 => 'Artykuły Wysyłane Mailem do',
+    76 => 'Jeżeli zaznaczysz jakąś sekcję z poniższej listy będziesz, pod koniec każdego dnia, otrzymywał nowe artykuły zamieszczone w tej sekcji. Zaznacz sekcje, które cię interesują!',
+    77 => 'Zdjęcie',
+    78 => 'Dodaj swoje zdjęcie!',
+    79 => 'Zaznacz tutaj aby wykasować to zdjęcie',
+    80 => 'Logowanie',
+    81 => 'Wyślij Maila',
+    82 => '10 najnowszych artykułów użytkownika',
+    83 => 'Materiały zamieszczone przez użytkownika',
+    84 => 'Wszystkich artykułów:',
+    85 => 'Wszystkich komentarzy:',
+    86 => 'Znajdź wszystkie materiały zamieszczone przez',
+    87 => 'Twój login',
+    88 => "Ktoś (prawdopodobnie Ty) chce uzyskać nowe hasło do tego konta \"%s\" w {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nJeśli chcesz kontynuować proszę kliknij ten link:\n\n",
+    89 => "Jeśli nie chcesz kontynuować, zignoruj tą wiadomość (Twoje hasło pozostanie niezmienione).\n\n",
+    90 => 'Poniżej możesz wprowadzić nowe hasło. Pamiętaj, że stare hasło jest aktywne do czasu przesłania tego zgłoszenia.',
+    91 => 'Ustaw Nowe Hasło',
+    92 => 'Wpisz Nowe Hasło',
+    93 => 'Twoja ostatnia prośba o zmianę hasła była wysłana %d sekund temu. Wymagana jest przerwa co najmniej %d sekundowa pomiędzy takimi zgłoszeniami.',
+    94 => 'Kasuj Konto "%s"',
+    95 => 'Kliknij poniższy przycisk "kasuj konto" aby usunąć swoje konto z bazy danych. Proszę mieć na uwadze, że wszelkie artykuły i komentarze, zamieszczone przez Ciebie <strong>nie</strong> zostaną usunięte ale autor zmieni się na "Gall Anonim".',
+    96 => 'kasuj konto',
+    97 => 'Potwierdź Usunięcie Konta',
+    98 => 'Czy aby napewno chcesz usunąć swoje konto? Po skasowaniu konta nie będzie można się ponownie zalogować na tej stronie (chyba, że założysz nowe konto). Jeśli tego chcesz kliknij ponownie "kasuj konto" w poniższym formularzu.',
+    99 => 'Ochrona Prywatności dla',
+    100 => 'Email od Admina',
+    101 => 'TAK na emaile od Admina',
+    102 => 'Email od Użytkowników',
+    103 => 'TAK na emaile od innych użytkowników',
+    104 => 'Pokaż Status Online',
+    105 => 'Pokaż w bloku Who\'s Online',
+    106 => 'Lokalizacja',
+    107 => 'Pokaż w swoim publicznym profilu',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Brak Nowości',
+    2 => 'Brak nowych artykułów.  Być może nie ma nowych artykułów w danej sekcji lub twoje ustawienia są zbyt limitujące.',
+    3 => 'dla sekcji %s',
+    4 => 'Dzisiejszy Artykuł Dnia',
+    5 => 'Następny',
+    6 => 'Poprzedni',
+    7 => 'Pierwszy',
+    8 => 'Ostatni'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Wystąpił błąd podczas wysyłania wiadomości. Spróbuj ponownie.',
+    2 => 'Wiadomość wysłano.',
+    3 => 'Proszę się upewnić, że adres email wpisany w pole Odpowiedz Do jest prawidłowy.',
+    4 => 'Proszę się Przedstawić, wpisać Odpowiedz Do, Temat i Wiadomość',
+    5 => 'Błąd: Nie ma takiego użytkownika.',
+    6 => 'Wystąpił błąd.',
+    7 => 'Profil Użytkownika',
+    8 => 'Użytkownik',
+    9 => 'URL Użytkownika',
+    10 => 'Wyślij maila do',
+    11 => 'Przedstaw Się:',
+    12 => 'Twój email:',
+    13 => 'Temat:',
+    14 => 'Wiadomość:',
+    15 => 'Bez znaczników HTML.',
+    16 => 'Wyślij',
+    17 => 'Wyślij Znajomemu',
+    18 => 'Do (twój znajomy)',
+    19 => 'Jego/Jej Adres Email',
+    20 => 'Od (Przedstaw się;-)',
+    21 => 'Twój Adres Email',
+    22 => 'Należy wypełnić wszystkie pola',
+    23 => "Tego maila wysłał %s (%s) z myślą, że może cię zainteresować poniższy artykuł z serwisu {$_CONF['site_url']}.  To nie jest SPAM a użyte adresy email nie zostały nigdzie zapisane celem ich późniejszego wykorzystania.",
+    24 => 'Skomentuj ten artykuł tutaj',
+    25 => 'Przed użyciem tej opcji musisz się zalogować.  Pozwoli nam to zabezpieczyć system przed niewłaściwym wykorzystaniem',
+    26 => 'Ten formularz umożliwia wysłanie maila do wybranego użytkownika.  Wymagane jest wypełnienie wszystkich pól.',
+    27 => 'Krótka Wiadomość',
+    28 => '%s napisał: ',
+    29 => "Dzienne zestawienie artykułów w Serwisie {$_CONF['site_name']} z dnia ",
+    30 => 'Newsletter z dnia ',
+    31 => 'Tytuł',
+    32 => 'Data',
+    33 => 'Cały artykuł dostępny tutaj ',
+    34 => 'Koniec Wiadomości',
+    35 => 'Sorry, ale ten użytkownik nie życzy sobie otrzymywania żadnych emaili.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Wyszukiwanie Zaawansowane',
+    2 => 'Słowa Kluczowe',
+    3 => 'Sekcja',
+    4 => 'Wszystko',
+    5 => 'Gdzie',
+    6 => 'Artykuły',
+    7 => 'Komentarze',
+    8 => 'Autorzy',
+    9 => 'Wszystko',
+    10 => 'Szukaj',
+    11 => 'Wyniki',
+    12 => 'trafienia',
+    13 => 'Wyniki: Brak danych',
+    14 => 'Nie znaleziono żadnych danych spełniających twoje kryteria',
+    15 => 'Proszę spróbować ponownie.',
+    16 => 'Tytuł',
+    17 => 'Data',
+    18 => 'Autor',
+    19 => "Przeszukuje całą bazę artykułów i komentarzy {$_CONF['site_name']} ",
+    20 => 'Data',
+    21 => 'do',
+    22 => '(Format Daty RRRR-MM-DD)',
+    23 => 'Odsłon',
+    24 => 'Znaleziono %d pozycji',
+    25 => 'Szukano',
+    26 => 'pozycji ',
+    27 => 'sekund',
+    28 => 'Brak artykułów lub komentarzy których szukasz',
+    29 => 'Artykuły i Komentarze - Wyniki',
+    30 => 'Brak linków spełniających twoje kryteria wyszukiwania',
+    31 => 'Nie znaleziono żadnych pluginów',
+    32 => 'Wydarzenie',
+    33 => 'URL',
+    34 => 'Lokalizacja',
+    35 => 'Cały Dzień',
+    36 => 'Brak wydarzeń spełniających twoje kryteria wyszukiwania',
+    37 => 'Wydarzenia - Wyniki',
+    38 => 'Linki - Wyniki',
+    39 => 'Linki',
+    40 => 'Wydarzenia',
+    41 => 'Twoje zapytanie powinno zawierać co najmniej 3 znaki.',
+    42 => 'Proszę używać następującego formatu daty: RRRR-MM-DD (rok-miesiąc-dzień).',
+    43 => 'z wyrażeniem',
+    44 => 'ze wszystkimi słowami',
+    45 => 'z którymkolwiek ze słów',
+    46 => 'Dalej',
+    47 => 'Wstecz',
+    48 => 'Autor',
+    49 => 'Data',
+    50 => 'Odsłon',
+    51 => 'Link',
+    52 => 'Lokalizacja',
+    53 => 'Artykuły - Wyniki',
+    54 => 'Komentarze - Wyniki',
+    55 => 'fraza',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statystyka Serwisu',
+    2 => 'Wszystkich Wizyt w Serwisie',
+    3 => 'Artykułów(Komentarzy) w Serwisie',
+    4 => 'Sondy(Głosy) w Serwisie',
+    5 => 'Linki(Kliknięcia) w Serwisie',
+    6 => 'Wydarzenia w Serwisie',
+    7 => '10 Najpopularniejszych Artykułów',
+    8 => 'Tytuł Artykułu',
+    9 => 'Odsłon',
+    10 => 'Wygląda na to, że w tym serwisie nie ma żadnych artykułów albo nikt nigdy żadnego nie przeczytał.',
+    11 => '10 Najczęściej Komentowanych Artykułów',
+    12 => 'Komentarzy',
+    13 => 'Wygląda na to, że w tym serwisie nie ma żadnych artykułów albo nikt nigdy nie skomentował żadnego.',
+    14 => '10 Najpopularniejszych Sond',
+    15 => 'Pytanie Sondy',
+    16 => 'Głosów',
+    17 => 'Wygląda na to, że w tym serwisie nie ma żadnych sond albo nikt nigdy nie oddał żadnego głosu.',
+    18 => '10 Najpopularniejszych Linków',
+    19 => 'Linki',
+    20 => 'Wejść',
+    21 => 'Wygląda na to, że w tym serwisie nie ma żadnych linków albo nikt nigdy nie kliknął na żaden z nich.',
+    22 => '10 Najczęściej Emaliowanych Artykułów',
+    23 => 'Emaile',
+    24 => 'Wygląda na to, że nikt nie przesłał swoim znajomym żadnego artykułu',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Odnośniki',
+    2 => 'Wyślij Znajomemu',
+    3 => 'Wersja Do Wydruku',
+    4 => 'Opcje Artykułu',
+    5 => 'Format PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Aby przesłać %s musisz się wcześniej zalogować.',
+    2 => 'Login',
+    3 => 'Nowy Użytkownik',
+    4 => 'Prześlij Wydarzenie',
+    5 => 'Prześlij Linka',
+    6 => 'Prześlij Artykuł',
+    7 => 'Wymagany jest Login',
+    8 => 'Prześlij',
+    9 => 'Przy przesyłaniu informacji do tego serwisu, prosimy postępować wg poniższych wskazówek...<ul><li>Należy wypełnić wszystkie pola<li>Zamieścić pełną i poprawną informację<li>Sprawdzić dokładnie podawane adresy</ul>',
+    10 => 'Tytuł',
+    11 => 'Link',
+    12 => 'Data Początkowa',
+    13 => 'Data Końcowa',
+    14 => 'Lokalizacja',
+    15 => 'Opis',
+    16 => 'Jeśli Inne, podaj jaka',
+    17 => 'Kategoria',
+    18 => 'Inne',
+    19 => 'Przeczytaj Uważnie',
+    20 => 'Błąd: Brak Kategorii',
+    21 => 'Wybierając "Inne" wpisz nazwę kategorii',
+    22 => 'Błąd: Puste Pola',
+    23 => 'Wymagane jest wypełnienie wszystkich pól formularza.',
+    24 => 'Zapisano',
+    25 => 'Twój materiał %s został zapisany.',
+    26 => 'Limit Czasowy',
+    27 => 'Login',
+    28 => 'Sekcja',
+    29 => 'Artykuł',
+    30 => 'Ostatni raz przesyłałeś ',
+    31 => " sekund temu.  Wymagane jest co najmniej {$_CONF['speedlimit']} sekund przerwy pomiędzy zamieszczeniami",
+    32 => 'Podgląd',
+    33 => 'Podgląd Artykułu',
+    34 => 'Wyloguj',
+    35 => 'Znaczniki HTML nie są dozwolone',
+    36 => 'Format',
+    37 => "Przesłane wydarzenie do serwisu {$_CONF['site_name']} zostanie umieszczone w Kalendarzu Głównym, z którego użytkownicy będą mieli możliwość dodawanie wydarzeń do kalendarzy osobistych. Ta opcja <b>NIE SŁUŻY</b> do przechowywania informacji osobistych takich jak urodziny itp.<br><br>Po przesłaniu wydarzenia, zostanie ono przesłane do naszych administratorów i po zatwierdzeniu pojawi się w Kalendarzu Głównym.",
+    38 => 'Dodaj Wydarzenie do',
+    39 => 'Kalendarz Główny',
+    40 => 'Kalendarz Osobisty',
+    41 => 'Koniec',
+    42 => 'Początek',
+    43 => 'Cały Dzień',
+    44 => 'Adres 1',
+    45 => 'Adres 2',
+    46 => 'Miasto/Miejscowość',
+    47 => 'Województwo',
+    48 => 'Kod Pocztowy',
+    49 => 'Kategoria Wydarzenia',
+    50 => 'Edytuj Kategorie Wydarzeń',
+    51 => 'Lokalizacja',
+    52 => 'Kasuj',
+    53 => 'Załóż Konto'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Wymagana jest Autoryzacja',
+    2 => 'Odmowa! Niewłaściwy Login',
+    3 => 'Niewłaściwe hasło użytkownika',
+    4 => 'Login:',
+    5 => 'Hasło:',
+    6 => 'Wszelkie próby wejścia do segmentów administracyjnych są logowane i weryfikowane.<br>Dostęp tylko dla osób upoważnionych.',
+    7 => 'login'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Niewystarczające Uprawnienia Administracyjne',
+    2 => 'Nie masz wystarczających uprawnień do edycji tego bloku.',
+    3 => 'Edytor Bloków',
+    4 => 'Wystąpił błąd odczytu (szczegóły w pliku error.log).',
+    5 => 'Tytuł Bloku',
+    6 => 'Sekcja',
+    7 => 'Wszystkie',
+    8 => 'Poziom Zabezpieczenia Bloku',
+    9 => 'Numer Bloku',
+    10 => 'Rodzaj Bloku',
+    11 => 'Blok Portalowy',
+    12 => 'Blok Normalny',
+    13 => 'Opcje Bloku Portalowego',
+    14 => 'URL pliku RDF',
+    15 => 'Ostatnie Uaktualnienie Pliku RDF',
+    16 => 'Opcje Bloku Normalnego',
+    17 => 'Zawartość Bloku',
+    18 => 'Proszę wpisać Tytuł Bloku, Poziom Zabezpieczenia i pola Zawartości',
+    19 => 'Menadżer Bloków',
+    20 => 'Tytuł Bloku',
+    21 => 'PozZab Bloku',
+    22 => 'Rodzaj Bloku',
+    23 => 'Numer Bloku',
+    24 => 'Sekcja Bloku',
+    25 => 'Aby zmodyfikować lub wykasować blok kliknij na blok poniżej.  Aby stworzyć nowy blok kliknij Nowy Blok powyżej.',
+    26 => 'Blok Schematowy',
+    27 => 'Blok PHP',
+    28 => 'Opcje Bloku PHP',
+    29 => 'Funkcje Bloku',
+    30 => 'Jeśli chcesz aby twój blok obsługiwał kod PHP, wpisz nazwę funkcji powyżej.  Nazwa funkcji musi rozpoczynać się prefiksem "phpblock_" (np. phpblock_getweather).  Jeżeli nie będzie prefiksu, twoja funkcja NIE zostanie wywołana.  Związane jest to z uniemożliwieniem \'wrzucania\' skryptów przez hakerów, które mogą uszkodzić twój system.  Upewnij się, że nie ma pustych nawiasów "()" po nazwie funkcji.  Na koniec, zalecamy umieszczenie całego kodu PHP Block w /ścieżka/do/geeklog/system/lib-custom.php.  Pozwoli to na zachowanie wersji kodu bez zmian nawet przy aktualizacji Geekloga.',
+    31 => 'Błąd w Bloku PHP.  Funkcja, %s, nie istnieje.',
+    32 => 'Błąd. Puste pole(a)',
+    33 => 'Musisz wpisać URL do pliku .rdf dla bloków portalowych',
+    34 => 'Musisz wpisać tytuł i funkcję bloków PHP',
+    35 => 'Musisz wpisać tytuł i zawartość dla bloków normalnych',
+    36 => 'Musisz wpisać zawartość bloków schematowych',
+    37 => 'Nieprawidłowa nazwa funkcji bloku PHP',
+    38 => 'Funkcje dla Bloków PHP muszą mieć prefiks \'phpblock_\' (np. phpblock_getweather).  Prefiks \'phpblock_\' ze względów bezpieczeństwa aby uniknąć wykonywanie kodu.',
+    39 => 'Strona',
+    40 => 'Lewa',
+    41 => 'Prawa',
+    42 => 'Musisz wpisać porządek bloku i poziom zabezpieczeń dla domyślnych bloków Geekloga',
+    43 => 'Tylko Strona Główna',
+    44 => 'Odmowa Dostępu',
+    45 => "Próbujesz wyedytować blok, do którego nie masz uprawnień.  Ta próba została zapisana w logu. Proszę <a href=\"{$_CONF['site_admin_url']}/block.php\">wrócić do ekranu administrowania blokami</a>.",
+    46 => 'Nowy Blok',
+    47 => 'Panel Sterowania',
+    48 => 'Nazwa Bloku',
+    49 => ' (nazwa unikalna i bez spacji)',
+    50 => 'URL Pliku Pomocy',
+    51 => 'uwzględnij http://',
+    52 => 'Jeśli zostawisz puste, ikona pomocy dla tego bloku się nie pojawi',
+    53 => 'Aktywne',
+    54 => 'zapisz',
+    55 => 'anuluj',
+    56 => 'kasuj',
+    57 => 'Przesuń Blok w Dół',
+    58 => 'Przesuń Blok w Górę',
+    59 => 'Przesuń blok na prawo',
+    60 => 'Przesuń blok w lewo',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Edytor Wydarzeń',
+    2 => 'Error',
+    3 => 'Tytuł Wydarzenia',
+    4 => 'URL Wydarzenia',
+    5 => 'Data Początkowa Wydarzenia',
+    6 => 'Data Końcowa Wydarzenia',
+    7 => 'Miejsce Wydarzenia',
+    8 => 'Opis Wydarzenia',
+    9 => '(uwzględnij http://)',
+    10 => 'Należy wpisać datę, godzinę, tytuł i opis wydarzenia!',
+    11 => 'Menadżer Wydarzeń',
+    12 => 'Aby zmodyfikować lub wykasować wydarzenie kliknij na dane wydarzenie poniżej.  Aby wpisać nowe wydarzenie kliknij na Nowe Wydarzenie powyżej. Kliknij [C] aby wykonać kopię istniejącego wydarzenia.',
+    13 => 'Tytuł Wydarzenia',
+    14 => 'Data Poczkowa',
+    15 => 'Data Końcowa',
+    16 => 'Odmowa Dostępu',
+    17 => "Próbujesz wyedytować wydarzenie, do którego nie masz dostępu.  Ta próba została zapisana w logu. Proszę <a href=\"{$_CONF['site_admin_url']}/event.php\">wrócić do ekranu administrowania wydarzeniami</a>.",
+    18 => 'Nowe Wydarzenie',
+    19 => 'Panel Sterowania',
+    20 => 'zapisz',
+    21 => 'anuluj',
+    22 => 'kasuj',
+    23 => 'Zła data poczatkowa.',
+    24 => 'Złą data końcowa.',
+    25 => 'Data końcowa jest wcześniejsza od początkowej.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Poprzednie Artykuły',
+    2 => 'Następne Artykuły',
+    3 => 'Tryb',
+    4 => 'Format',
+    5 => 'Edytor Artykułów',
+    6 => 'Brak artykułów w systemie',
+    7 => 'Autor',
+    8 => 'zapisz',
+    9 => 'podgląd',
+    10 => 'anuluj',
+    11 => 'kasuj',
+    12 => 'ID',
+    13 => 'Tytuł',
+    14 => 'Sekcja',
+    15 => 'Data',
+    16 => 'Wstęp',
+    17 => 'Część Główna',
+    18 => 'Wejść',
+    19 => 'Komentarze',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Lista Artykułów',
+    23 => 'Aby zmodyfikować lub wykasować artykuł, kliknij na numer danego artykułu poniżej. Aby przeglądnąć artykuł kliknij na tytuł danego artykułu. Aby wpisać nowy artykuł kliknij na Nowy Artykuł powyżej.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Podgląd Artykułu',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Błąd Uploadu Pliku',
+    31 => 'Proszę wpisać Tytuł i Wstęp',
+    32 => 'Artykuł Dnia',
+    33 => 'Artykuł Dnia może być tylko jeden',
+    34 => 'Wersja Robocza',
+    35 => 'Tak',
+    36 => 'Nie',
+    37 => 'Więcej autorstwa',
+    38 => 'Więcej z sekcji',
+    39 => 'Emaile',
+    40 => 'Odmowa Dostępu',
+    41 => "Próbujesz wyedytować artykuł do którego nie masz uprawnień.  Ta próba została zapisana w logu.  Możesz podglądnąć artykuł poniżej. Proszę <a href=\"{$_CONF['site_admin_url']}/story.php\">wrócić do strony administrującej artykułami.",
+    42 => "Próbujesz wyedytować artykuł do którego nie masz uprawnień.  Ta próba została zapisana w logu.  Proszę <a href=\"{$_CONF['site_admin_url']}/story.php\">wrócić do strony administrującej artykułami</a>.",
+    43 => 'Nowy Artykuł',
+    44 => 'Panel Sterowania',
+    45 => 'Dostęp',
+    46 => '<b>UWAGA:</b> jeśli przesuniesz datę do przodu, artykuł nie zostanie opublikowany wcześniej. Oznacza to również, że artykuł nie będzie uwzględniony w pliku RDF i zostanie pominięty przy wyszukiwaniu.',
+    47 => 'Zdjęcia',
+    48 => 'zdjęcie',
+    49 => 'prawo',
+    50 => 'lewo',
+    51 => 'Aby dodać jedno ze zdjęć, które chcesz podpiąć do tego artykułu musisz wstawić specjalnie sformatowany tekst.  Tekst jest następujący [imageX], [imageX_right] lub [imageX_left] gdzie X to numer obrazka, który załączyłeś.  UWAGA: Musisz używać obrazków, które załączasz.  Inaczej nie będziesz w stanie zapisać swojego artykułu.<BR><P><B>PODGLĄD</B>: Podgląd artykułu z załączonymi obrazkami działa najlepiej po uprzednim zapisaniu artykułu jako kopia ZAMIAST użycia bezpośrednio klawisza podgląd.  Używaj klawisza podgląd tylko gdy nie podpinasz obrazków.',
+    52 => 'Kasuj',
+    53 => 'nie został użyty.  Musisz umieścić ten obrazek we wstępie lub w głównej części zanim zapiszsz zmiany',
+    54 => 'Załączonych Obrazów Nie Użyto',
+    55 => 'Pojawiły się następujące błędy podczas próby zapisu tego artykułu.  Proszę je poprawić przed ponownym zapisem',
+    56 => 'Pokaż Ikonę Artykułu',
+    57 => 'Pokaż nieskalowalne zdjęcie',
+    58 => 'Zarządzanie Artykułami',
+    59 => 'Opcja',
+    60 => 'Aktywna',
+    61 => 'Auto Archiwizacja',
+    62 => 'Auto Kasacja',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Edytor Sekcji',
+    2 => 'ID Sekcji',
+    3 => 'Nazwa Sekcji',
+    4 => 'Ikona Sekcji',
+    5 => '(bez spacji)',
+    6 => 'Wykasowanie sekcji wykasuje wszystkie artykuły i bloki z nią powiązane',
+    7 => 'Proszę wpisać ID Sekcji i Nazwę Sekcji',
+    8 => 'Menadżer Sekcji',
+    9 => 'Aby zmodyfikować lub wykasować sekcję, kliknij na daną sekcję.  Aby stworzyć nową sekcję kliknij na Nowa Sekcja powyżej. W nawiasie znajduje się twój poziom dostępu do każdej sekcji. Gwiazdka (*) oznacza domyślną sekcję.',
+    10 => 'Sortowanie',
+    11 => 'Artykułów/Stronę',
+    12 => 'Odmowa Dostępu',
+    13 => "Próbujesz wyedytować sekcję do której nie masz uprawnień.  Ta próba została zapisana w logu. Proszę <a href=\"{$_CONF['site_admin_url']}/topic.php\">wrócić do ekranu administrującego sekcjami</a>.",
+    14 => 'Sortuj Wg',
+    15 => 'alfabetycznie',
+    16 => 'domyślnie jest',
+    17 => 'Nowa Sekcja',
+    18 => 'Panel Sterowania',
+    19 => 'zapisz',
+    20 => 'anuluj',
+    21 => 'kasuj',
+    22 => 'Domyślnie',
+    23 => 'zrób z tego domyślną sekcję dla przesyłanych artykułów',
+    24 => '(*)',
+    25 => 'Sekcja Archiwalna',
+    26 => 'domyślna sekcja dla archiwizowanych artykułów. Dozwolona jest tylko jedna sekcja.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Edytor Użytkowników',
+    2 => 'ID Użytkownika',
+    3 => 'Login',
+    4 => 'Pełna Nazwa',
+    5 => 'Hasło',
+    6 => 'Poziom Zabezpieczenia',
+    7 => 'Adres Email',
+    8 => 'Strona Domowa',
+    9 => '(bez spacji)',
+    10 => 'Proszę wpisać Login i Adres Email',
+    11 => 'Menadżer Użytkowników',
+    12 => 'Aby zmodyfikować lub usunąć użytkownika, kliknij na odpowiedni login poniżej.  Aby założyć nowego użytkownika kliknij nowy użytkownik po lewej. Możesz przeszukać bazę wpisując część loginu, adresu email lub pełnej nazwy (np. *son* lub *.edu) w poniższym formularzu.',
+    13 => 'PozZab',
+    14 => 'Data Rej.',
+    15 => 'Nowy Użytkownik',
+    16 => 'Panel Sterowania',
+    17 => 'zmień hasło',
+    18 => 'anuluj',
+    19 => 'kasuj',
+    20 => 'zapisz',
+    21 => 'Login już istnieje.',
+    22 => 'Błąd',
+    23 => 'Dodanie Grupowe',
+    24 => 'Grupowy Import Użytkowników',
+    25 => 'Można zaimportować grupowo użytkowników do Geekloga.  Plik tekstowy musi być rozdzielany znakami tabulacji oraz musi mieć następującą strukturę: imię i nazwisko, login, adres email.  Każdy zaimportowany użytkownik dostanie mailem hasło.  W jednej linii może występować tylko jeden użytkownik.  Nie zastosowanie do tych instrukcji spowoduje problemy, które mogą wymagać ręcznej obróbki dlatego sprawdź dwa razy zawarte informacje!',
+    26 => 'Szukaj',
+    27 => 'Zawęż Wyniki',
+    28 => 'Zaznacz tutaj aby usunąć obrazek',
+    29 => 'Ścieżka',
+    30 => 'Import',
+    31 => 'Nowi Użytkownicy',
+    32 => 'Przetwarzanie zakończone. Zaimportowano %d i napotkano %d błędów',
+    33 => 'prześlij',
+    34 => 'Błąd: Musisz podać plik do załadowania.',
+    35 => 'Ostatni Login',
+    36 => '(nigdy)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Zatwierdź',
+    2 => 'Kasuj',
+    3 => 'Edytuj',
+    4 => 'Profil',
+    10 => 'Tytuł',
+    11 => 'Data Początkowa',
+    12 => 'URL',
+    13 => 'Kategoria',
+    14 => 'Data',
+    15 => 'Sekcja',
+    16 => 'Nazwa użytkownika',
+    17 => 'Pełna nazwa użytkownika',
+    18 => 'Email',
+    34 => 'Panel Sterowania',
+    35 => 'Przesłane Artykuły',
+    36 => 'Przesłane Linki',
+    37 => 'Przesłane Wydarzenia',
+    38 => 'Prześlij',
+    39 => 'Żadnych materiałów do zatwierdzenia',
+    40 => 'Materiały przesłane przez użytkownika'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Niedziela',
+    2 => 'Poniedziałek',
+    3 => 'Wtorek',
+    4 => 'Środa',
+    5 => 'Czwartek',
+    6 => 'Piątek',
+    7 => 'Sobota',
+    8 => 'Dodaj Wydarzenie',
+    9 => '%s Wydarzenie',
+    10 => 'Wydarzenia',
+    11 => 'Główny Kalendarz',
+    12 => 'Mój Kalendarz',
+    13 => 'Styczeń',
+    14 => 'Luty',
+    15 => 'Marzec',
+    16 => 'Kwiecień',
+    17 => 'Maj',
+    18 => 'Czerwiec',
+    19 => 'Lipiec',
+    20 => 'Sierpień',
+    21 => 'Wrzesień',
+    22 => 'Październik',
+    23 => 'Listopad',
+    24 => 'Grudzień',
+    25 => 'Powrót do ',
+    26 => 'Cały Dzień',
+    27 => 'Tydzień',
+    28 => 'Kalendarz Osobisty',
+    29 => 'Kalendarz Ogólny',
+    30 => 'kasuj wydarzenia',
+    31 => 'Dodaj',
+    32 => 'Wydarzenie',
+    33 => 'Data',
+    34 => 'Czas',
+    35 => 'Szybkie Dodanie',
+    36 => 'Wyślij',
+    37 => 'Sorry, funkcja kalendarz osobisty nie jest dostępna',
+    38 => 'Edytor Osobisty',
+    39 => 'Dzień',
+    40 => 'Tydzień',
+    41 => 'Miesiąc'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => 'Mail',
+    2 => 'Od',
+    3 => 'Odpowiedz',
+    4 => 'Temat',
+    5 => 'Wiadomość',
+    6 => 'Wyślij do:',
+    7 => 'Wszyscy',
+    8 => 'Admin',
+    9 => 'Opcje',
+    10 => 'HTML',
+    11 => 'Pilne!',
+    12 => 'Wyślij',
+    13 => 'Zresetuj',
+    14 => 'Ignoruj ustawienia użytkownika',
+    15 => 'Błąd podczas wysyłania do: ',
+    16 => 'Wiadomość wysłana do: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Wyślij następną wiadomość</a>",
+    18 => 'Do',
+    19 => 'UWAGA: jeśli chcesz wysłać wiadomość do wszystkich użytkowników, wybierz Logged-in Users z listy rozwijanej.',
+    20 => "Wysłanych <successcount> wiadomości oraz <failcount> niewysłanych wiadomości.  Poniżej szczegóły dotyczące próby wysłania każdej wiadomości.  Możesz również <a href=\"{$_CONF['site_admin_url']}/mail.php\">Wysłać wiadomość</a> lub możesz <a href=\"{$_CONF['site_admin_url']}/moderation.php\">wrócić do strony administracyjnej</a>.",
+    21 => 'Błąd',
+    22 => 'Sukces',
+    23 => 'Brak błędów',
+    24 => 'Bez powodzenia',
+    25 => '-- Wybierz Grupę --',
+    26 => 'Proszę uzupełnić wszystkie pola i wybrać grupę z listy.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Instalowanie pluginów może spowodować uszkodzenie twojej instalacji Geekloga jak również systemu.  Ważne jest aby instalować pluginy ściągnięte z <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> ponieważ są one szczegółowo przez nas testowane na różnych systemach operacyjnych.  Ważne abyś miał świadomość, że instalacja pluginu wymaga wykonania kilku komend filesystemu, co wiąże się z bezpieczeństwem systemu, zwłaszcza gdy pluginy pochodzą od osób trzecich.  Pomimo tego ostrzeżenia, nie gwarantujemy sukcesu instalacyjnego ani nie możemy być pociągnięci do odpowiedzialności za jakiekolwiek szkody wynikłe z instalacji jakiegokolwiek pluginu.  Instalacja na własne ryzyko.  Instrukcje dotyczące ręcznej instalacji pluginu znajdują się w każdym pakiecie z pluginem.',
+    2 => 'Umowa Instalacyjna Pluginów',
+    3 => 'Plugin Formularz Instalacyjny',
+    4 => 'Plugin Plik',
+    5 => 'Zainstalowane Pluginy',
+    6 => 'Ostrzeżenie: Plugin Już Zainstalowany!',
+    7 => 'Plugin, który próbujesz zainstalować już istnieje.  Proszę wykasować istniejący plugin i zainstalować go ponownie',
+    8 => 'Sprawdzanie Kompatybilności Pluginu Zakończone Niepowodzeniem',
+    9 => 'Ten plugin wymaga nowszej wersji Geekloga. Albo uaktualnij swoją kopię <a href=http://www.geeklog.net>Geekloga</a> albo ściągnij nowszą wersję tego pluginu.',
+    10 => '<br><b>Brak zainstalowanych pluginów.</b><br><br>',
+    11 => 'Aby zmodyfikować lub wykasować plugin, kliknij na nazwę pluginu. Zobaczysz więcej informacji włącznie z adresem strony autora. Widoczne są wersje zainstalowana i wersja kodu. To pomoże stwierdzić czy dany plugin wymaga aktualizacji. Aby zainstalować lub uaktualnić dany plugin proszę zapoznać się z dołączoną do niego instrukcją.',
+    12 => 'brak nazwy pluginu dla plugineditor()',
+    13 => 'Edytor Pluginów',
+    14 => 'Nowy Plugin',
+    15 => 'Panel Sterowania',
+    16 => 'Nazwa',
+    17 => 'Wersja',
+    18 => 'Wersja GL',
+    19 => 'Aktywny',
+    20 => 'Tak',
+    21 => 'Nie',
+    22 => 'Instaluj',
+    23 => 'Zapisz',
+    24 => 'Anuluj',
+    25 => 'Kasuj',
+    26 => 'Nazwa Pluginu',
+    27 => 'Strona Domowa Pluginu',
+    28 => 'Wersja Zainstalowana',
+    29 => 'Wersja GL',
+    30 => 'Skasować Plugin?',
+    31 => 'Czy aby na pewno skasować ten plugin?  Ta operacja usunie wszelkie pliki, dane i strukturę używane przez ten plugin.  Jeśli chcesz kontynuwać kliknij kasuj poniżej.',
+    32 => '<p><b>Błędny format tagu AutoLink</b></p>',
+    33 => 'Wersja Kodu',
+    34 => 'Aktualizacja',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'stwórz plik',
+    2 => 'zapisz',
+    3 => 'kasuj',
+    4 => 'anuluj',
+    10 => 'Syndykacja Treści',
+    11 => 'Nowy Plik',
+    12 => 'Panel Sterowania',
+    13 => 'Aby zmodyfikować lub usunąć plik, kliknij na tytuł pliku poniżej. Aby stworzyć nowy plik, kliknij Nowy Plik powyżej.',
+    14 => 'Tytuł',
+    15 => 'Rodzaj',
+    16 => 'Plik',
+    17 => 'Format',
+    18 => 'ost. aktualizacja',
+    19 => 'Aktywny',
+    20 => 'Tak',
+    21 => 'Nie',
+    22 => '<i>(plików brak)</i>',
+    23 => 'Wszystkie Artykuły',
+    24 => 'Edytor Plików',
+    25 => 'Tytuł Pliku',
+    26 => 'Limit',
+    27 => 'Długość tekstu',
+    28 => '(0 = bez tekstu, 1 = pełny tekst, inne = ograniczona liczba znaków.)',
+    29 => 'Opis',
+    30 => 'Ost. Aktualizacja',
+    31 => 'Kodowanie',
+    32 => 'Język',
+    33 => 'Zawartość',
+    34 => 'Tytułów',
+    35 => 'Godzin',
+    36 => 'Wybierz rodzaj pliku',
+    37 => 'Masz zainstalowany co najmniej jeden plugin zarządzający syndykacją treści. Poniżej należy wybrać opcję czy chcesz stworzyć plik Geeklogowy czy też plik dla jednego z pluginów.',
+    38 => 'Błąd: Brakujące Pola',
+    39 => 'Wpisz Tytuł Pliku, Opis i Nazwę Pliku.',
+    40 => 'Proszę podać liczbę tytułów lub czas w godzinach.',
+    41 => 'Linki',
+    42 => 'Wydarzenia',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Hasło zostało wysłane i powinieneś go wkrótce otrzymać. Postępuj zgodnie ze wskazówkami w wiadomości. Dziękujemy za korzystanie z serwisu {$_CONF['site_name']}",
+    2 => "Dziękujemy za przesłanie artykułu do {$_CONF['site_name']}.  Otrzymali go nasi pracownicy do zatwierdzenia. Po zatwierdzeniu twój artykuł będzie dostępny dla innych użytkowników naszego serwisu.",
+    3 => "Dziękujemy za przesłanie linka do {$_CONF['site_name']}.  Otrzymali go nasi pracownicy do zatwierdzenia.  Po zatwierdzeniu twój link będzie widoczny w sekcji <a href={$_CONF['site_url']}/links.php>linki</a>.",
+    4 => "Dziękujemy za przesłanie wydarzenia do {$_CONF['site_name']}.  Otrzymali go nasi pracownicy do zatwierdzenia.  Po zatwierdzeniu twoje wydarzenie będzie widoczne w sekcji <a href={$_CONF['site_url']}/calendar.php>kalendarz</a>.",
+    5 => 'Informacje dotyczące twojego konta zostały zapisane.',
+    6 => 'Twoje preferencje dotyczące wyglądu zostały zapisane.',
+    7 => 'Twoje preferencje dotyczące komentarzy zostały zapisane.',
+    8 => 'Zostałeś/aś pomyślnie wylogowany/a.',
+    9 => 'Artykuł został zapisany.',
+    10 => 'Artykuł został wykasowany.',
+    11 => 'Blok został zapisany.',
+    12 => 'Blok został wykasowany.',
+    13 => 'Sekcja została zapisana.',
+    14 => 'Sekcja oraz wszystkie artykuły i bloki z nią związane zostały wykasowane.',
+    15 => 'Link został zapisany.',
+    16 => 'Link został wykasowany.',
+    17 => 'Wydarzenie zostało zapisane.',
+    18 => 'Wydarzenie zostało wykasowane.',
+    19 => 'Głosowanie zostało zapisane.',
+    20 => 'Głosowanie zostało wykasowane.',
+    21 => 'Nowy użytkownik został zapisany.',
+    22 => 'Nowy użytkownik został wykasowany.',
+    23 => 'Wystąpił błąd podczas próby dodania wydarzenia do twojego kalendarza. Nie przekazano ID wydarzenia.',
+    24 => 'Wydarzenie zostało zapisane w twoim kalendarzu',
+    25 => 'Kalendarz osobisty dostępny jest dopiero po zalogowaniu',
+    26 => 'Wydarzenie zostało usunięte z twojego kalendarza osobistego',
+    27 => 'Wiadomość wysłano.',
+    28 => 'Plugin został zapisany',
+    29 => 'Sorry, kalendarze osobiste są niedostępne w tym serwisie',
+    30 => 'Odmowa Dostępu',
+    31 => 'Sorry, nie masz dostępu do strony administrującej artykułami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    32 => 'Sorry, nie masz dostępu do strony administrującej sekcjami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    33 => 'Sorry, nie masz dostępu do strony administrującej blokami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    34 => 'Sorry, nie masz dostępu do strony administrującej linkami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    35 => 'Sorry, nie masz dostępu do strony administrującej wydarzeniami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    36 => 'Sorry, nie masz dostępu do strony administrującej sondami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    37 => 'Sorry, nie masz dostępu do strony administrującej użytkownikami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    38 => 'Sorry, nie masz dostępu do strony administrującej pluginami.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    39 => 'Sorry, nie masz dostępu do strony administrującej mailem.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    40 => 'Komunikat Systemowy',
+    41 => 'Sorry, nie masz dostępu do strony edycyjnej zamienników słów.  Wszelkie nieautoryzowane próby wejścia są logowane',
+    42 => 'Słowo zostało zapisane.',
+    43 => 'Słowo zostało wykasowane.',
+    44 => 'Plugin został zainstalowany!',
+    45 => 'Plugin został wykasowany.',
+    46 => 'Sorry, nie masz dostępu do opcji archiwizowania bazy danych.  Pamiętaj, że Wszelkie nieautoryzowane próby wejścia są logowane',
+    47 => 'Ta opcja działa tylko pod systemem *nixowym. Jeśli masz właśnie taki system operacyjny to cache został wyczyszczony. Pod Windozą, musisz poszukać plików adodb_*.php i usunąć je ręcznie.',
+    48 => "Dziekujemy za zainteresowanie członkowstwem w {$_CONF['site_name']}. Zweryfikujemy twoje zgłoszenie i po zatwierdzeniu zostanie wysłane hasło pod podany adres e-mail.",
+    49 => 'Twoja grupa została zapisana.',
+    50 => 'Grupa została wykasowana.',
+    51 => 'Ten login juz istnieje. Prosze wybrac inny.',
+    52 => 'Podany adres email nie wyglada na prawidlowy.',
+    53 => 'Twoje nowe hasło zostało przyjęte. Proszę zalogowac sie ponizej wpisując nowe hasło.',
+    54 => 'Twoja prośba o nowe hasło wygasła. Proszę spróbowac ponownie poniżej.',
+    55 => 'Wkrótce powinien dotrzeć do Ciebie email. Postępuj zgodnie ze wskazówkami aby ustawić nowe hasło dla Twojego konta.',
+    56 => 'Podany adres email jest już używany.',
+    57 => 'Twoje konto zostało pomyślnie usunięte.',
+    58 => 'Plik został zapisany.',
+    59 => 'Plik został skasowany.',
+    60 => 'Plugin został pomyślnie zaktualizowany',
+    61 => 'Plugin %s: Nieznany komunikat placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Dostęp',
+    'ownerroot' => 'Właściciel/Root',
+    'group' => 'Grupa',
+    'readonly' => 'Tylko-do-Odczytu',
+    'accessrights' => 'Prawa Dostępu',
+    'owner' => 'Właściciel',
+    'grantgrouplabel' => 'Udziel Praw do Edycji Powyższej Grupie',
+    'permmsg' => 'UWAGA: członkowie to wszyscy zalogowani użytkownicy na stronie a anonimowi to wszyscy użytkownicy przeglądający zawartość strony bez zalogowania.',
+    'securitygroups' => 'Grupy Zabezpieczeń',
+    'editrootmsg' => "Pomimo tego, że jesteś User Administrator, nie możesz edytować głównego użytkownka. Najpierw sam musisz zostać użytkownikiem głównym.  Możesz edytować pozostałych użytkowników. Wszelkie nie autoryzowane próby edycji użytkowników głównych są logowane.  Powrót do strony Administracja Użytkownikami serwisu <a href=\"{$_CONF['site_admin_url']}/user.php\"></a>.",
+    'securitygroupsmsg' => 'Zaznacz grupy do których chcesz przypisać użytkownika.',
+    'groupeditor' => 'Edytor Grup',
+    'description' => 'Opis',
+    'name' => 'Nazwa',
+    'rights' => 'Uprawnienia',
+    'missingfields' => 'Brakujące Pola',
+    'missingfieldsmsg' => 'Musisz podać nazwę i opis grupy',
+    'groupmanager' => 'Menadżer Grup',
+    'newgroupmsg' => 'Aby zmodyfikować lub wykasować grupę kliknij na daną grupę poniżej. Aby stworzyć nową grupę kliknij nowa grupa powyżej. Grupy główne nie mogą być wykasowane są używane przez system.',
+    'groupname' => 'Nazwa Grupy',
+    'coregroup' => 'Grupa Główna',
+    'yes' => 'Tak',
+    'no' => 'Nie',
+    'corerightsdescr' => "Ta grupa jest Główną Grupą strony {$_CONF['site_name']} .  Z tego względu prawa dla  tej grupy nie mogą być edytowane.  Poniżej znajduje się lista do-odczytu praw tej grupy.",
+    'groupmsg' => 'Grupy Zabezpieczeń Groups w tym serwisie są hierarchiczne.  Poprzez dodanie tej grupy do jakiejkolwiek grupy poniżej, tym samym nadasz tej grupie takie same prawa.  Jeżeli to możliwe to zalecamy wykorzystanie poniższych grup przy nadawaniu praw jakiejkolwiek grupie.  Jeśli chcesz nadać tej grupie specjalne prawa, możesz wybrać uprawnienia do różnych funkcji serwisu w poniższej sekcji \'Uprawnienia\'.  Aby dodać tą grupę do którejkolwiek z poniższej listy, zaznacz po prostu wybraną grupę(y).',
+    'coregroupmsg' => "To jest Grupa główna serisu {$_CONF['site_name']}.  Z tego względu grupy należące do tej kategorii nie mogą być edytowane.  Poniżej znajduje się lista, tylko do odczytu, grup z tej kategorii.",
+    'rightsdescr' => 'Dostęp grupowy to wybranych uprawnień poniżej może być nadany bezpośrednio danej grupie LUB innej grupie, do której dana grupa należy.  Te z listy poniżej bez pola wyboru oznaczają uprawnienia tej grupy wynikające z faktu przynależności do grupy z danym uprawnieniem.  Uprawnienia z polami wyboru mogą zostać bezpośrednio nadane danej grupie.',
+    'lock' => 'Blokada',
+    'members' => 'Członkowie',
+    'anonymous' => 'Anonim',
+    'permissions' => 'Uprawnienia',
+    'permissionskey' => 'R = odczyt, E = edycja, prawa do edycji zakładają prawa do odczytu',
+    'edit' => 'Edycja',
+    'none' => 'Brak',
+    'accessdenied' => 'Odmowa Dostępu',
+    'storydenialmsg' => "Brak dostępu do tego artykułu.  Prawdopodobnie nie jesteś członkiem serwisu {$_CONF['site_name']}.  Zapraszamy do <a href=users.php?mode=new> członkostwa</a> w serwisie {$_CONF['site_name']} aby otrzymać pełny dostęp!",
+    'eventdenialmsg' => "Brak dostępu do tego wydarzenia.  Prawdopodobnie nie jesteś członkiem serwisu {$_CONF['site_name']}.  Zapraszamy do <a href=users.php?mode=new> członkostwa</a> w serwisie {$_CONF['site_name']} aby otrzymać pełny dostęp!",
+    'nogroupsforcoregroup' => 'Grupa nie należy do pozostałych grup',
+    'grouphasnorights' => 'Grupa nie ma dostępu do żadnych funkcji administracyjnych tego serwisu',
+    'newgroup' => 'Nowa Grupa',
+    'adminhome' => 'Panel Sterowania',
+    'save' => 'zapisz',
+    'cancel' => 'anuluj',
+    'delete' => 'kasuj',
+    'canteditroot' => 'Wystąpiła próba edycji grupy Głównej. Niestety nie należysz do żadnej z grup Głównych dlatego nie masz dostępu do tej grupy.  Skontaktuj się z administratorem systemu jeśli uważasz, że to pomyłka',
+    'listusers' => 'Listuj Użytkowników',
+    'listthem' => 'listuj',
+    'usersingroup' => 'Użytkownicy w grupie %s',
+    'usergroupadmin' => 'Administracja Grupami Użytkowników',
+    'add' => 'Dodaj',
+    'remove' => 'Usuń',
+    'availmembers' => 'Dostępni Członkowie',
+    'groupmembers' => 'Członkowie Grupy',
+    'canteditgroup' => 'Aby wyedytować tą grupę musisz do niej należeć. Proszę skontaktować się z administratorem jeśli uważasz, że nastąpiła pomyłka.',
+    'cantlistgroup' => 'Aby zobaczyć członków tej grupy, musisz być jej członkiem. Skontaktuj się z administratorem jeśli uważasz, że to jest błąd.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => '10 Kopii Zapasowych',
+    'do_backup' => 'Wykonaj Kopię Zapasową',
+    'backup_successful' => 'Kopia bazy wykonana pomyślnie.',
+    'db_explanation' => 'Aby wykonać nową kopię zapasową twojego systemu, kliknij poniższy przycisk',
+    'not_found' => "Niewłaściwa ścieżka lub program archiwizujący nie jest wykonywalny.<br>Sprawdź <strong>\$_DB_mysqldump_path</strong> ustawienia w config.php.<br>Zmienna jest obecnie ustawiona na: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Wykonanie Kopii Nie Powiodło Się: Rozmiar pliku 0 bajtów',
+    'path_not_found' => "{$_CONF['backup_path']} nie istnieje lub nie jest katalogiem",
+    'no_access' => "BŁĄD: Katalog {$_CONF['backup_path']} jest niedostępny.",
+    'backup_file' => 'Plik kopii',
+    'size' => 'Rozmiar',
+    'bytes' => 'Bajtów',
+    'total_number' => 'Wszystkich kopii bezpieczeństwa: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Główna',
+    2 => 'Kontakt',
+    3 => 'Napisz Artykuł',
+    4 => 'Linki',
+    5 => 'Sonda',
+    6 => 'Kalendarz',
+    7 => 'Statystyka',
+    8 => 'Osobiste',
+    9 => 'Szukaj',
+    10 => 'zaawansowane szukanie',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Błąd 404',
+    2 => 'Kurcze, wszędzie szukałem ale nie mogę znaleźć <b>%s</b>.',
+    3 => "<p>Przykro nam ale dany plik nie istnieje. Sprawdź <a href=\"{$_CONF['site_url']}/search.php\">stronę z wyszukiwarką</a> aby sprawdzić czy można znaleźć co zgubiłeś."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Wymagany jest login',
+    2 => 'Sorry, aby wejść na te strony musisz być zalogowany.',
+    3 => 'Login',
+    4 => 'Nowy Użytkownik'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'Opcja PDF została wyłączona',
+    2 => 'Dany dokument nie został wygenerowany. Dokument został otrzymany ale nie mógł być przetworzony.  Upewnij się, że przesłane dokumenty html zostały zapisane w standardowym xHTML. Proszę mieć na uwadze, że skomplikowane dokumenty html-owe mogą zostać przetworzone z błędem lub w ogóle. Dokument, który próbowałaś/eś wygenrować miał rozmiar 0 bajtów i został usunięty. Jeśli uważasz, że Twój dokument powinien zostać wygenerowany prawidłowo, prześlij go raz jeszcze.',
+    3 => 'Nieznany błąd podczas generowania pliku PDF',
+    4 => "Nie określono żadnej strony albo chcesz użyć poniższego narzędzia do generowania PDF-a ad-hoc.  Jeśli uważasz, że strona to błąd\n          skontaktuj się z administratorem systemu.  W przeciwnym razie, użyj poniższego formularza aby wygenerować PDF-a metodą ad-hoc.",
+    5 => 'Ładowanie dokumentu.',
+    6 => 'Proszę poczekać na załadowanie dokumentu.',
+    7 => 'Kliknij prawym przyciskiem myszy i wybierz \'zapisz element docelowy jako...\' lub \'zapisz link...\' aby zachować kopię dokumentu na Twoim komputerze.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'Generator PDF',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generuj PDF!',
+    13 => 'Konfiguracja PHP na tym serwerze nie pozwala na użycie URL z komendą fopen().  Administrator systemu musi edytować plik php.ini i ustawić allow_url_fopen na On',
+    14 => 'Żądany PDF albo nie istnieje albo nie masz do niego uprawnień.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/portuguese_brazil.php 1.4.0sr5-1/cpanel-glprivate/language/portuguese_brazil.php
--- 1.3.11sr1/cpanel-glprivate/language/portuguese_brazil.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/portuguese_brazil.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,12 +2,16 @@
 
 ###############################################################################
 # portuguese_brazil.php
-# This is the brazilian-portuguese language page for GeekLog!
-# Special thanks to Mischa Polivanov for his work on this project
+# Esta  a pgina em Portugus do Brasil para o GeekLog!
+# Agradecimentos especiais para Mischa Polivanov pelo seu trabalho neste projeto
 #
 # Copyright (C) 2002 Dener C. Brito - LAST UPDATE: March 26,2002
 # dener@crube.net
 #
+# Revisado e Atualizado em 28/Fevereiro/2005 por Alcides Soares Filho
+# asoaresfil@uol.com.br - arquivo verso 1.3.11
+#
+#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
@@ -50,8 +54,8 @@
     7 => 'Resultados da Enquete',
     8 => 'votos',
     9 => 'Funes Administrativas:',
-    10 => 'Submissions',
-    11 => 'Histrias',
+    10 => 'Submisses',
+    11 => 'Publicaes',
     12 => 'Blocos',
     13 => 'Tpicos',
     14 => 'Links',
@@ -70,18 +74,18 @@
     27 => 'Mensagem mais recente',
     28 => 'Excluir',
     29 => 'Sem comentrios.',
-    30 => 'Histrias Anteriores',
+    30 => 'Publicaes Anteriores',
     31 => 'Tags HTML Permitidas:',
     32 => 'Erro, nome de usurio invlido',
     33 => 'Erro, no foi possvel gravar no arquivo log',
     34 => 'Erro',
     35 => 'Sair',
     36 => 'em',
-    37 => 'No user stories',
-    38 => 'Content Syndication',
+    37 => 'No h publicaes de usurios',
+    38 => 'Assinatura de Contedos',
     39 => 'Atualizar',
-    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
-    41 => 'Guest Users',
+    40 => 'Voc tem <tt>register_globals = Off</tt> no seu arquivo <tt>php.ini</tt>. O Geeklog requer <tt>register_globals</tt> colocado como <strong>on</strong>. Antes de continuar, faa esse ajuste para <strong>on</strong> e reinicialize seu servidor WEB.',
+    41 => 'Usurios Convidados',
     42 => 'Autoria de:',
     43 => 'Responder',
     44 => 'Comentrio Anterior',
@@ -89,7 +93,7 @@
     46 => 'Erro MySQL: Mensagem',
     47 => 'Login',
     48 => 'Minha Conta',
-    49 => 'Prefs. Exibio',
+    49 => 'Preferncias de Exibio',
     50 => 'Erro: SQL statement',
     51 => 'ajuda',
     52 => 'Novo',
@@ -103,11 +107,11 @@
     60 => 'Comentar',
     61 => 'Registrar-se',
     62 => 'palavras',
-    63 => 'Prefs. Comentrios',
+    63 => 'Preferncias de Comentrios',
     64 => 'Enviar para um Amigo',
     65 => 'Verso para Impresso',
     66 => 'Meu Calendrio',
-    67 => 'Bem-vindo ao ',
+    67 => 'Bem-vindo  ',
     68 => 'incio',
     69 => 'contato',
     70 => 'busca',
@@ -120,8 +124,8 @@
     77 => 'Plugins',
     78 => 'Prximos Eventos',
     79 => 'O que h de novo',
-    80 => 'histrias nas ltimas',
-    81 => 'histria nas ltimas',
+    80 => 'publicaes nas ltimas',
+    81 => 'publicao nas ltimas',
     82 => 'horas',
     83 => 'COMENTRIOS',
     84 => 'LINKS',
@@ -130,30 +134,40 @@
     87 => '14 dias',
     88 => 'Sem novos links',
     89 => 'No h eventos programados',
-    90 => 'Incio',
+    90 => 'Homepage Principal',
     91 => 'Criou esta pgina em',
     92 => 'segundos',
     93 => 'Copyright',
     94 => 'Todas as marcas e copyrights nesta pgina pertencem aos seus respectivos proprietrios.',
-    95 => 'Powered By',
+    95 => 'Patrocinado por',
     96 => 'Grupos',
     97 => 'Lista de Palavras',
-    98 => 'Plug-ins',
+    98 => 'Plugins',
     99 => 'HISTRIAS',
-    100 => 'Sem novas histrias',
+    100 => 'Sem novas publicaes',
     101 => 'Seus Eventos',
     102 => 'Eventos do Site',
-    103 => 'DB Backups',
+    103 => 'Backups do DB',
     104 => 'por',
-    105 => 'Mail Users',
-    106 => 'Views',
-    107 => 'GL Version Test',
-    108 => 'Clear Cache',
-    109 => 'Report abuse',
-    110 => 'Report this post to the site admin',
-    111 => 'View PDF Version',
-    112 => 'Registered Users',
-    113 => 'Documentation'
+    105 => 'E-Mail para usurios',
+    106 => 'Leituras',
+    107 => 'Teste da Verso Geeklog',
+    108 => 'Limpa Cach',
+    109 => 'Reporta abuso',
+    110 => 'Reporta este envio para a administrao do site',
+    111 => 'V Verso PDF',
+    112 => 'Usurios Registrados',
+    113 => 'Documentao',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -174,7 +188,7 @@
     12 => 'Evento',
     13 => 'Incio',
     14 => 'Trmino',
-    15 => 'Back to Calendar'
+    15 => 'Volta para Calendrio'
 );
 
 ###############################################################################
@@ -187,27 +201,27 @@
     4 => 'Criar Conta',
     5 => 'Usurio',
     6 => 'Este site requer que voc efetue o login para enviar um comentrio.  Se voc ainda no tem uma conta, utilize o formulrio abaixo para criar uma.',
-    7 => 'Seu ltimo comentrio foi h',
+    7 => 'Seu ltimo comentrio foi h ',
     8 => " segundos atrs.  Este site requer pelo menos {$_CONF['commentspeedlimit']} segundos entre comentrios",
     9 => 'Comentrio',
-    10 => 'Send Report',
+    10 => 'Enviar Relatrio',
     11 => 'Enviar Comentrio',
-    12 => 'Por favor, preencha os campos Nome, Email, Ttulo e Comentrio, pois eles so necessrio para a aceitao de seu comentrio.',
+    12 => 'Por favor, preencha os campos Nome, E-mail, Ttulo e Comentrio, pois eles so necessrios para a aceitao de seu comentrio.',
     13 => 'Suas Informaes',
-    14 => 'Preview',
-    15 => 'Report this post',
+    14 => 'Prev',
+    15 => 'Reporta este envio',
     16 => 'Ttulo',
     17 => 'Erro',
     18 => 'Recomendaes',
     19 => 'Por favor, envie mensagens relacionadas ao assunto tratado no tpico.',
-    20 => 'Tente responder aos comentrios j publicados ao invs de iniciar novos threads.',
+    20 => 'Tente responder aos comentrios j publicados ao invs de iniciar novos threads (um novo ramo).',
     21 => 'Leia as mensagens de outros usurios antes de enviar a sua para prevenir duplicidade de contedo.',
     22 => 'Seja descritivo ao preencher o campo Assunto.',
-    23 => 'Seu email NO ser publicado.',
+    23 => 'Seu e-mail NO ser publicado.',
     24 => 'Usurio Annimo',
-    25 => 'Are you sure you want to report this post to the site admin?',
-    26 => '%s reported the following abusive comment post:',
-    27 => 'Abuse report'
+    25 => 'Tem certeza que quer reportar este envio para a administrao do site?',
+    26 => '%s reportou o seguinte envio considerado abusivo:',
+    27 => 'Reporta Comentrio Abusivo'
 );
 
 ###############################################################################
@@ -218,28 +232,28 @@
     2 => 'Nome',
     3 => 'Nome Completo',
     4 => 'Senha',
-    5 => 'Email',
+    5 => 'E-mail',
     6 => 'Homepage',
     7 => 'Biografia',
-    8 => 'PGP Key',
+    8 => 'Chave PGP',
     9 => 'Salvar',
     10 => 'ltimos 10 comentrios',
     11 => 'Sem Comentrios',
     12 => 'Preferncias de Usurio para',
-    13 => 'Enviar resumo dirio via Email',
+    13 => 'Enviar resumo dirio via E-mail',
     14 => 'Esta senha  gerada aleatoriamente.  recomendado que voc altere a mesma imediatamente. Para alterar sua senha, efetue o login e clique em Informaes da conta no menu Funes do Usurio.',
-    15 => "Sua conta no {$_CONF['site_name']} foi criada. Para ter acesso  mesma, voc deve efetuar o login utilizando as informaes abaixo. Poor favor, guarde este email para futuras consultas.",
+    15 => "Sua conta no {$_CONF['site_name']} foi criada. Para ter acesso  mesma, voc deve efetuar o login utilizando as informaes abaixo. Por favor, guarde este e-mail para futuras consultas.",
     16 => 'Informaes sobre sua Conta',
     17 => 'Conta inexistente',
-    18 => 'O endereo fornecido no parece ser um email vlido',
-    19 => 'O nome de usurio ou o email fornecido j constam em nossa base de dados',
-    20 => 'O endereo fornecido no parece ser um email vlido',
+    18 => 'O endereo fornecido no parece ser um e-mail vlido',
+    19 => 'O nome de usurio ou o e-mail fornecido j constam em nossa base de dados',
+    20 => 'O endereo fornecido no parece ser um e-mail vlido',
     21 => 'Erro',
     22 => "Registro no {$_CONF['site_name']}!",
-    23 => "Criando uma conta de usurio proporcionar a voc todos os benefcios da associao ao {$_CONF['site_name']} e permitir a voc enviar comentrios e mensagens em seu nome. Se no tiver uma conta, voc s poder enviar mensagens anonimamente. Por favor, note que seu endereo de email <b><i>nunca</i></b> ser exibido publicamente neste site.",
-    24 => 'Sua senha ser enviada ao endereo de email que voc forneceu.',
+    23 => "Criando uma conta de usurio proporcionar a voc todos os benefcios da associao ao site {$_CONF['site_name']} - o que permitir a voc enviar comentrios e mensagens em seu nome. Se no tiver uma conta, voc s poder enviar mensagens anonimamente. Por favor, note que seu endereo de e-mail <b><i>nunca</i></b> ser exibido publicamente neste site.",
+    24 => 'Sua senha ser enviada ao endereo de e-mail que voc forneceu.',
     25 => 'Esqueceu sua Senha?',
-    26 => 'Entre seu nome de usurio e clique em Enviar Senha. Uma nova senha ser enviada para o endereo constante em nossos registros.',
+    26 => 'Entre com seu nome de usurio e clique em Enviar Senha. Uma nova senha ser enviada para o endereo constante em nossos registros.',
     27 => 'Registre-se!',
     28 => 'Enviar Senha',
     29 => 'saiu do',
@@ -254,20 +268,20 @@
     38 => 'Sobre voc. (Qualquer pessoa poder ler isto) ',
     39 => 'Sua chave pblica PGP para ser compartilhada',
     40 => 'Sem cones nos Tpicos',
-    41 => 'Willing to Moderate',
+    41 => 'Aguardando Moderao',
     42 => 'Formato de Datas',
-    43 => 'Mximo de Histrias',
+    43 => 'Mximo de Publicaes',
     44 => 'Sem caixas',
     45 => 'Preferncias de Exibio para',
-    46 => 'tens Excludos para',
-    47 => 'Configurao do Box de Notcias para',
+    46 => 'Itens Excludos para',
+    47 => 'Configurao da Caixa de Notcias para',
     48 => 'Tpicos',
-    49 => 'Sem cones nas histrias',
+    49 => 'Sem cones nas publicaes',
     50 => 'Desmarque se no estiver interessado',
     51 => 'Somente as Notcias',
     52 => 'O padro ',
     53 => 'Receber as notcias via resumo dirio',
-    54 => 'Selecione os tpicos e autores que voc no quer ver.',
+    54 => 'Selecione os tpicos e autores que voc <b>no</b> quer ver.',
     55 => 'Se voc deixar todos desmarcados, subentende-se que voc deseja a seleo padro. Se voc iniciar a seleo, lembre-se de selecionar todos os que voc deseja, pois a seleo padro ser ignorada. Entradas padro so exibidas em <b>negrito</b>.',
     56 => 'Autores',
     57 => 'Modo de Exibio',
@@ -276,7 +290,7 @@
     60 => 'Como voc prefere que os comentrios sejam exibidos?',
     61 => 'Novos ou antigos primeiro?',
     62 => 'O padro  100',
-    63 => "Sua senha foi enviada. Por favor, siga as instrues constantes no email. Obrigado por participar do {$_CONF['site_name']}",
+    63 => "Sua senha foi enviada. Por favor, siga as instrues constantes no e-mail. Obrigado por participar do {$_CONF['site_name']}",
     64 => 'Preferncias Atuais para',
     65 => 'Tente Entrar novamente',
     66 => "Voc cometeu um erro ao preencher os campos. Por favor, tente efetuar o login novamente. Voc  um <a href=\"{$_CONF['site_url']}/users.php?mode=new\">novo usurio</a>?",
@@ -287,40 +301,56 @@
     71 => "Uma das caractersticas do {$_CONF['site_name']}  a possibilidade poder personalizar todo o seu contedo e alterar o layout do site. Para poder usufruir destas vantagens voc precisa<a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrar-se</a> no {$_CONF['site_name']}.  Voc j  um membro? Efetue o login!",
     72 => 'Tema',
     73 => 'Idioma',
-    74 => 'Change what this site looks like!',
-    75 => 'Emailed Topics for',
-    76 => 'If you select a topic from the list below you will receive any new stories posted to that topic at the end of each day.  Choose only the topics that interest you!',
-    77 => 'Photo',
-    78 => 'Add a picture of yourself!',
-    79 => 'Check here to delete this picture',
+    74 => 'Muda a aparncia de todo o site!',
+    75 => 'Tpicos enviados por e-mail para',
+    76 => 'Se voc selecionar um tpico da lista abaixo, voc receber toda e qualquer nova publicao que for enviada para cada tpico escolhido, em geral no final de cada dia. Escolha SOMENTE os tpicos que realmente interessam para voc!',
+    77 => 'Foto',
+    78 => 'Adicione a sua Foto!',
+    79 => 'Marque aqui para apagar esta foto',
     80 => 'Login',
-    81 => 'Send Email',
-    82 => 'Last 10 stories for user',
-    83 => 'Posting statistics for user',
-    84 => 'Total number of articles:',
-    85 => 'Total number of comments:',
-    86 => 'Find all postings by',
-    87 => 'Your login name',
-    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
-    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
-    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
-    91 => 'Set New Password',
-    92 => 'Enter New Password',
-    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
-    94 => 'Delete Account "%s"',
-    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
-    96 => 'delete account',
-    97 => 'Confirm Account Deletion',
-    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
-    99 => 'Privacy Options for',
-    100 => 'Email from Admin',
-    101 => 'Allow email from Site Admins',
-    102 => 'Email from Users',
-    103 => 'Allow email from other users',
-    104 => 'Show Online Status',
-    105 => 'Show up in Who\'s Online block',
-    106 => 'Location',
-    107 => 'Shown in your public profile'
+    81 => 'Envia E-mail',
+    82 => 'ltimas 10 publicaes para o usurio',
+    83 => 'Estatsticas de Envios para o usurio',
+    84 => 'Nmero total de publicaes:',
+    85 => 'Nmero total de comentrios:',
+    86 => 'Encontra todos os Envios postados por',
+    87 => 'Seu nome de Login',
+    88 => "Algum (provavelmente voc) requisitou uma nova senha para a sua conta \"%s\" no site {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSe voc realmente quer obter uma nova senha, por favor clique no seguinte link:\n\n",
+    89 => "Se voc NO quer uma nova senha, simplesmente ignore esta mensagem. O pedido NO ser processado (e sua senha permanecer inalterada).\n\n",
+    90 => 'Voc pode entrar com uma nova senha para a sua conta, logo abaixo. Por favor observe que sua antiga senha ser vlida at que voc submeta este formulrio com sucesso.',
+    91 => 'Define Nova Senha',
+    92 => 'Entra com Nova Senha',
+    93 => 'Seu ltimo pedido para uma nova senha foi feito %d segundos atrs. Este site requer pelo menos %d segundos de intervalo entre pedidos de novas senhas.',
+    94 => 'Apaga a Conta "%s"',
+    95 => 'Clique no boto abaixo "Apaga a Conta" para remover sua conta de nosso banco de dados. Por favor observe que quaisquer publicaes e comentrios enviados atravs desta conta  <strong>NO</strong> sero apagados e sero mostrados como se tivessem sido postados por  "Annimos".',
+    96 => 'apaga conta',
+    97 => 'Confirmao de Apagar a Conta',
+    98 => 'Tem certeza que quer apagar sua conta? Depois disso, voc no conseguir entrar neste site novamente (a menos que crie uma nova conta). Se voc tem certeza, clique em  "apaga conta" novamente no formulrio abaixo.',
+    99 => 'Opes de Privacidade para',
+    100 => 'E-mail da Administrao',
+    101 => 'Permite e-mail da Administrao do Site',
+    102 => 'E-mail de Usurios',
+    103 => 'Permite e-mail vindos de outros usurios',
+    104 => 'Mostra seu Status on-line',
+    105 => 'aparece no bloco Quem est on-line',
+    106 => 'Localidade',
+    107 => 'Mostra no seu perfil pblico',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -328,34 +358,13 @@
 
 $LANG05 = array(
     1 => 'Sem notcias para exibir',
-    2 => 'No h novas histrias para exibir. Talvez no haja novidades para este tpico ou suas preferncias de exibio so muito restritivas.',
-    3 => 'para o tpico %s',
+    2 => 'No h novas publicaes para exibir. Talvez no haja novidades para este tpico ou suas preferncias de exibio so muito restritivas.',
+    3 => 'para o Tpico %s',
     4 => 'Artigo de Hoje',
     5 => 'Prximo',
     6 => 'Anterior',
-    7 => 'First',
-    8 => 'Last'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'No h links a exibir.',
-    3 => 'Adicionar Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Voto Registrado',
-    2 => 'Seu voto foi registrado.',
-    3 => 'Enquete',
-    4 => 'Enquetes no Sistema',
-    5 => 'Votos',
-    6 => 'View other poll questions'
+    7 => 'Primeiro',
+    8 => 'ltimo'
 );
 
 ###############################################################################
@@ -364,39 +373,39 @@
 $LANG08 = array(
     1 => 'Houve um erro ao enviar sua mensagem. Por favor, tente novamente.',
     2 => 'Mensagem enviada.',
-    3 => 'Please make sure you use a valid email address in the Reply To field.',
+    3 => 'Por favor utilize um endereo de e-mail vlido no campo de Reply.',
     4 => 'Por favor, preencha os campos Seu Nome, Responder para, Assunto e Mensagem',
     5 => 'Erro: Usurio desconhecido.',
     6 => 'H um erro.',
     7 => 'Perfil de Usurio para',
     8 => 'ID',
     9 => 'URL',
-    10 => 'Enviar email para',
+    10 => 'Enviar e-mail para',
     11 => 'Seu Nome:',
     12 => 'Responder:',
     13 => 'Assunto:',
     14 => 'Mensagem:',
     15 => 'HTML no ser traduzido.',
     16 => 'Enviar Mensagem',
-    17 => 'Enviar Histria para um Amigo',
+    17 => 'Enviar Publicao para um Amigo',
     18 => 'Nome',
-    19 => 'Email',
+    19 => 'E-mail',
     20 => 'Seu Nome',
-    21 => 'Seu Email',
+    21 => 'Seu E-mail',
     22 => 'Todos os campos so requeridos',
-    23 => "Este email foi enviado a voc por %s em %s pois ele acha que voc pode se interessar por um artigo no {$_CONF['site_url']}.  Isto no  um SPAM e os endereo de email envolvidos no so exibidos ou guardados para uso posterior.",
-    24 => 'Comentrio sobre esta histria em',
+    23 => "Este e-mail foi enviado a voc por %s em %s pois ele acha que voc pode se interessar por um artigo no {$_CONF['site_url']}.  Isto no  um SPAM e os endereos de e-mail envolvidos no so exibidos ou guardados para uso posterior.",
+    24 => 'Comentrios sobre esta publicao em',
     25 => 'Voc precisa efetuar o login para utilizar este recurso. Ao efetuar o login, voc nos ajuda a prevenir o mal-uso do sistema',
-    26 => 'Este formulrio permite a voc enviar um email para o usurio selecionado. Todos os campos so obrigatrios.',
+    26 => 'Este formulrio permite a voc enviar um e-mail para o usurio selecionado. Todos os campos so obrigatrios.',
     27 => 'Apresentao',
     28 => '%s escreveu: ',
     29 => "Este  o resumo dirio do {$_CONF['site_name']} para ",
     30 => ' Resumo Dirio ',
-    31 => 'Title',
-    32 => 'Date',
-    33 => 'Read the full article at',
-    34 => 'End of Message',
-    35 => 'Sorry, this user prefers not to receive any emails.'
+    31 => 'Ttulo',
+    32 => 'Data',
+    33 => 'Leia o artigo na ntegra em ',
+    34 => 'Fim da Mensagem',
+    35 => 'Desculpe-nos, mas este usurio definiu em suas preferncias que no quer receber e-mails.'
 );
 
 ###############################################################################
@@ -408,7 +417,7 @@
     3 => 'Tpico',
     4 => 'Todos',
     5 => 'Tipo',
-    6 => 'Histrias',
+    6 => 'Publicaes',
     7 => 'Comentrios',
     8 => 'Autores',
     9 => 'Todos',
@@ -425,41 +434,45 @@
     20 => 'Data',
     21 => 'para',
     22 => '(Formato de Data MM-DD-AAAA)',
-    23 => 'Hits',
+    23 => 'Leituras',
     24 => 'Encontrou',
     25 => 'correspondncias para',
     26 => 'itens em',
     27 => 'segundos',
-    28 => 'Nenhuma histria ou comentrio correspondente encontrados',
-    29 => 'Resultados: Histrias e Comentrio',
-    30 => 'No links matched your search',
-    31 => 'This plug-in returned no matches',
-    32 => 'Event',
+    28 => 'Nenhuma publicao ou comentrio correspondente foi encontrado',
+    29 => 'Resultados: Publicaes e Comentrios',
+    30 => 'Nenhum link combinou com a sua pesquisa',
+    31 => 'Nenhum plugin combinou com sua pesquisa',
+    32 => 'Evento',
     33 => 'URL',
-    34 => 'Location',
-    35 => 'All Day',
-    36 => 'No events matched your search',
-    37 => 'Event Results',
-    38 => 'Link Results',
+    34 => 'Localidade',
+    35 => 'Dia inteiro',
+    36 => 'Nenhum evento combinou com sua pesquisa',
+    37 => 'Resultado da Pesquisa de Eventos',
+    38 => 'Resultado da Pesquisa de Links',
     39 => 'Links',
-    40 => 'Events',
-    41 => 'Your query string should have at least 3 characters.',
-    42 => 'Please use a date formatted as YYYY-MM-DD (year-month-day).',
-    43 => 'exact phrase',
-    44 => 'all of these words',
-    45 => 'any of these words',
-    46 => 'Next',
-    47 => 'Previous',
-    48 => 'Author',
-    49 => 'Date',
-    50 => 'Hits',
+    40 => 'Eventos',
+    41 => 'Sua palavra de pesquisa deve ter no mnimo 3 caracteres.',
+    42 => 'Por favor utilize a data formatada como YYYY-MM-DD (ano-ms-dia).',
+    43 => 'frase exata',
+    44 => 'todas estas palavras',
+    45 => 'qualquer uma destas palavras',
+    46 => 'Prximo',
+    47 => 'Prvio',
+    48 => 'Autor',
+    49 => 'Data',
+    50 => 'Leituras',
     51 => 'Link',
-    52 => 'Location',
-    53 => 'Story Results',
-    54 => 'Comment Results',
-    55 => 'the phrase',
+    52 => 'Localidade',
+    53 => 'Resultado da Pesquisa de Publicaes',
+    54 => 'Resultado da Pesquisa de Comentrios',
+    55 => 'e a frase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -468,17 +481,17 @@
 $LANG10 = array(
     1 => 'Estatsticas do Site',
     2 => 'Total de Hits no Sistema',
-    3 => 'Histrias(Comentrios) no Sistema',
+    3 => 'Publicaes(Comentrios) no Sistema',
     4 => 'Enquetes(Respostas) no Sistema',
     5 => 'Links(Cliques) no Sistema',
     6 => 'Eventos no Sistema',
-    7 => '10 Histrias Mais Lidas',
+    7 => '10 Publicaes Mais Lidas',
     8 => 'Ttulo',
     9 => 'Visualizaes',
-    10 => 'Aparentemente no h histrias neste site ou ningum leu as que foram publicadas.',
-    11 => '10 Histrias Mais Comentadas',
+    10 => 'Aparentemente no h publicaes neste site ou ningum leu as que foram publicadas.',
+    11 => '10 Publicaes Mais Comentadas',
     12 => 'Comentrios',
-    13 => 'Aparentemente no h histrias neste site ou ningum comentou as que foram publicadas.',
+    13 => 'Aparentemente no h publicaes neste site ou ningum comentou as que foram publicadas.',
     14 => '10 Enquetes Mais Votadas',
     15 => 'Pergunta',
     16 => 'Votos',
@@ -487,9 +500,16 @@
     19 => 'Links',
     20 => 'Hits',
     21 => 'Aparentemente no h links neste site ou ningum clicou nos existentes.',
-    22 => 'Top 10 - Histrias Recomendadas via email',
-    23 => 'Emails',
-    24 => 'Aparentemente ningum enviou uma histria via email neste site'
+    22 => 'Top 10 - Publicaes Recomendadas via e-mail',
+    23 => 'E-mails',
+    24 => 'Aparentemente ningum enviou uma publicao via e-mail neste site',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -499,8 +519,8 @@
     1 => 'Relacionado',
     2 => 'Enviar para um Amigo',
     3 => 'Verso para Impresso',
-    4 => 'Opes da Histria',
-    5 => 'PDF Story Format'
+    4 => 'Opes da Publicao',
+    5 => 'Formato de Publicao PDF'
 );
 
 ###############################################################################
@@ -512,7 +532,7 @@
     3 => 'Novo Usurio',
     4 => 'Enviar um Evento',
     5 => 'Enviar um Link',
-    6 => 'Enviar uma Histria',
+    6 => 'Enviar uma Publicao',
     7 => 'Login  Requerido',
     8 => 'OK',
     9 => 'Ao enviar informaes para utilizao neste site ns solicitamos a voc que siga as seguintes recomendaes...<ul><li>Preencha todos os campos, eles so obrigatrios<li>Fornea informaes completas e apuradas<li>Verifique as URLs</ul>',
@@ -535,11 +555,11 @@
     26 => 'Limite de Velocidade',
     27 => 'Usurio',
     28 => 'Tpico',
-    29 => 'Histria',
+    29 => 'Publicao',
     30 => 'Sua ltima sugesto foi enviada h ',
     31 => " segundos. Este site requer pelo menos {$_CONF['speedlimit']} segundos entre o envio de uma mensagem e outra",
-    32 => 'Preview',
-    33 => 'Preview da Histria',
+    32 => 'Pr-v',
+    33 => 'Pr-v a Publicao',
     34 => 'Sair',
     35 => 'Tags HTML no so permitidas',
     36 => 'Modo',
@@ -559,7 +579,7 @@
     50 => 'Editar Tipos de Eventos',
     51 => 'Local',
     52 => 'Excluir',
-    53 => 'Create Account'
+    53 => 'Criar Conta'
 );
 
 ###############################################################################
@@ -586,7 +606,7 @@
     1 => 'Direitos Insuficientes',
     2 => 'Voc no tem permisso para editar este bloco.',
     3 => 'Editor de Blocos',
-    4 => 'There was a problem reading this feed (see error.log for details).',
+    4 => 'Houve um problema de leitura com este RSS/feed (veja arquivo error.log para saber detalhes).',
     5 => 'Ttulo',
     6 => 'Tpico',
     7 => 'Todos',
@@ -597,10 +617,10 @@
     12 => 'Normal',
     13 => 'Opes - Portal',
     14 => 'RDF URL',
-    15 => 'ltima Atualizaao RDF',
+    15 => 'ltima Atualizao RDF',
     16 => 'Opes - Normal',
     17 => 'Contedo',
-    18 => 'Por favor, preencha os campos Ttulo, Nvel de Securana e Contedo',
+    18 => 'Por favor, preencha os campos Ttulo, Nvel de Segurana e Contedo',
     19 => 'Gerenciador de Blocos',
     20 => 'Ttulo',
     21 => 'Nvel de Segurana',
@@ -612,22 +632,22 @@
     27 => 'Bloco PHP',
     28 => 'Opes Bloco PHP',
     29 => 'Funo do Bloco',
-    30 => 'If you would like to have one of your blocks use PHP code, enter the name of the function above.  Your function name must start with the prefix "phpblock_" (e.g. phpblock_getweather).  If it does not have this prefix, your function will NOT be called.  We do this to keep people who may have hacked your Geeklog installation from putting arbitrary function calls that may be harmful to your system.  Be sure not to put empty parenthisis "()" after your function name.  Finally, it is recommended that you put all your PHP Block code in custom_code.php.  That will allow the code to stay with you even when you upgrade to a newer version of Geeklog.',
+    30 => 'Se voc quiser ter um dos seus blocos usando cdigo PHP, entre com o nome da funo acima.  O nome da sua funo DEVE comear com o prefixo "phpblock_" (p.e. phpblock_getweather).  Se sua funo NO tiver este prefixo, ela NO ser chamada pelo programa.  Fizemos isto para evitar que sejam utilizadas funes que podem ser perigosas para o sistema.  Esteja certo de colocar um parnteses "()" logo depois do nome da sua funo.  Finalmente, recomendamos que voc SEMPRE  coloque todo o seu cdigo de BLOCOS PHP dentro do arquivo  custom_code.php.  Isto permitir que SEU cdigo seja preservado quando voc fizer o UPGRADE para uma nova verso do Geeklog.',
     31 => 'Erro no Bloco PHP. A funo , %s, no existe.',
-    32 => 'Error Missing Field(s)',
-    33 => 'You must enter the URL to the .rdf file for portal blocks',
-    34 => 'You must enter the title and the function for PHP blocks',
-    35 => 'You must enter the title and the content for normal blocks',
-    36 => 'You must enter the content for layout blocks',
-    37 => 'Bad PHP block function name',
-    38 => 'Functions for PHP Blocks must have the prefix \'phpblock_\' (e.g. phpblock_getweather).  The \'phpblock_\' prefix is required for security reasons to prevent the execution of arbitrary code.',
+    32 => 'Erro, Faltando Campo(s)',
+    33 => 'Voc DEVE entrar com a URL para o arquivo .rdf para os blocos do portal',
+    34 => 'Voc DEVE entrar com o ttulo E a funo para os blocos PHP',
+    35 => 'Voc DEVE entrar com o ttulo E o contedo para os blocos normais',
+    36 => 'Voc DEVE entrar com o contedo para os blocos de layout',
+    37 => 'Nome de funo Errado para o bloco de PHP',
+    38 => 'Funes para Blocos PHP Blocks DEVEM ter o prefixo \'phpblock_\' (p.e. phpblock_getweather).  O prefixo \'phpblock_\' prefix  requerido por razes de segurana, evitando a execuo de cdigos arbitrrios.',
     39 => 'Lado',
     40 => 'Esquerdo',
     41 => 'Direito',
-    42 => 'You must enter the blockorder and security level for Geeklog default blocks',
+    42 => 'Voc DEVE entrar com a ordem do bloco e com o nvel de segurana para os blocos padro do Geeklog',
     43 => 'Somente na Pgina Inicial',
     44 => 'Acesso Negado',
-    45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
+    45 => "Voc est tentando acessar um bloco para o qual no tem autorizao.  Esta tentativa foi registrada. Favor <a href=\"{$_CONF['site_admin_url']}/block.php\">retorna para a tela de Administrao de Blocos</a>.",
     46 => 'Novo Bloco',
     47 => 'Administrao',
     48 => 'Nome',
@@ -635,14 +655,19 @@
     50 => 'URL do Arquivo de Ajuda',
     51 => 'inclua http://',
     52 => 'Se voc deixar em branco, o cone de ajuda para este bloco no ser exibido',
-    53 => 'Enabled',
-    54 => 'save',
-    55 => 'cancel',
-    56 => 'delete',
-    57 => 'Move Block Down',
-    58 => 'Move Block Up',
-    59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    53 => 'Habilitado',
+    54 => 'salva',
+    55 => 'cancela',
+    56 => 'apaga',
+    57 => 'Move Bloco para Baixo',
+    58 => 'Move Bloco para Cima',
+    59 => 'Move bloco para Lado Direito',
+    60 => 'Move bloco para Lado Esquerdo',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -660,149 +685,111 @@
     9 => '(incluir http://)',
     10 => 'Voc deve preencher todos os campos deste formulrio!',
     11 => 'Gerenciador de Eventos',
-    12 => 'To modify or delete a event, click on that event below.  To create a new event click on new event above.',
+    12 => 'Para modificar ou apagar um evento, clique no respectivo evento abaixo.  Para criar um novo evento, clique em Novo Evento, acima.',
     13 => 'Ttulo',
     14 => 'Incio',
     15 => 'Trmino',
     16 => 'Acesso Negado',
-    17 => "You are trying to access an event that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/event.php\">go back to the event administration screen</a>.",
+    17 => "Voc est acessando um evento para o qual no tem autorizao.  Esta tentativa foi registrada. Por favor <a href=\"{$_CONF['site_admin_url']}/event.php\">retorne para a tela de Administrao de Eventos</a>.",
     18 => 'Novo Evento',
     19 => 'Administrao',
-    20 => 'save',
-    21 => 'cancel',
-    22 => 'delete',
-    23 => 'Bad start date.',
-    24 => 'Bad end date.',
-    25 => 'End date is before start date.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor de Links',
-    2 => '',
-    3 => 'Ttulo',
-    4 => 'URL',
-    5 => 'Categoria',
-    6 => '(incluir http://)',
-    7 => 'Outra',
-    8 => 'Hits',
-    9 => 'Descrio',
-    10 => 'Voc deve digitar um Ttulo, um URL e a Descrio.',
-    11 => 'Gerenciador de Links',
-    12 => 'To modify or delete a link, click on that link below.  To create a new link click new link above.',
-    13 => 'Ttulo',
-    14 => 'Categoria',
-    15 => 'URL',
-    16 => 'Acesso Negado',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'Novo Link',
-    19 => 'Administrao',
-    20 => 'Se outra, especifique',
-    21 => 'save',
-    22 => 'cancel',
-    23 => 'delete'
+    20 => 'salva',
+    21 => 'cancela',
+    22 => 'apaga',
+    23 => 'Data de incio incorreta.',
+    24 => 'Data final incorreta.',
+    25 => 'Data Final  menor que Data Inicial.'
 );
 
 ###############################################################################
 # admin/story.php
 
 $LANG24 = array(
-    1 => 'Histrias Anteriores',
-    2 => 'Prximas Histrias',
+    1 => 'Publicaes Anteriores',
+    2 => 'Prximas Publicaes',
     3 => 'Modo',
     4 => 'Formatao',
-    5 => 'Editor de Histrias',
-    6 => 'There are no stories in the system',
+    5 => 'Editor de Publicaes',
+    6 => 'No h publicaes no sistema',
     7 => 'Autor',
-    8 => 'save',
-    9 => 'preview',
-    10 => 'cancel',
-    11 => 'delete',
+    8 => 'salva',
+    9 => 'pr-ver',
+    10 => 'cancela',
+    11 => 'apaga',
     12 => 'ID',
     13 => 'Ttulo',
     14 => 'Tpico',
     15 => 'Data',
     16 => 'Introduo',
     17 => 'Texto/Contedo',
-    18 => 'Hits',
+    18 => 'Leituras',
     19 => 'Comentrios',
-    20 => '',
-    21 => '',
-    22 => 'Lista de Histrias',
-    23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
-    24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
-    26 => 'Preview',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'File Upload Errors',
-    31 => 'Please fill in the Author, Title and Intro Text fields',
-    32 => 'Histria do Dia',
-    33 => 'S pode haver uma nica Histria do Dia',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Lista de Publicaes',
+    23 => 'Para modificar ou apagar uma publicao, clique no nmero da publicao abaixo. Para ler uma publicao, clique no ttulo da mesma. Para criar uma publicao nova, clique em Nova Publicao, acima.',
+    24 => 'O nmero de identificao - ID - que voc escolheu para esta publicao j est em uso. Por favor escolha um outro nmero de identificao - ID.',
+    25 => 'Error when saving story',
+    26 => 'Prev',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Erros no Upload de arquivos',
+    31 => 'Por favor preencha os campos Autor, Ttulo and e Texto de Introduo',
+    32 => 'Publicao do Dia',
+    33 => 'S pode haver uma nica Publicao do Dia',
     34 => 'Rascunho',
     35 => 'Sim',
     36 => 'No',
     37 => 'Mais por',
     38 => 'Mais de',
-    39 => 'Emails',
+    39 => 'E-mails',
     40 => 'Acesso Negado ',
-    41 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  You may view the article in read-only below. Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a> when you are done.",
-    42 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a>.",
-    43 => 'Nova Histria',
+    41 => "Voc est tentando acessar uma publicao para a qual voc no tem autorizao.  Sua tentativa foi registrada.  Voc pode ler esta publicao, mas no pode editar, clicando abaixo. Por favor <a href=\"{$_CONF['site_admin_url']}/story.php\">retorne para a tela de Administrao de Publicaes</a> quando estiver pronto.",
+    42 => "Voc est tentando acessar uma publicao para a qual no tem autorizao. Esta tentativa foi registrada.  Por favor <a href=\"{$_CONF['site_admin_url']}/story.php\">retorne para a tela de Administrao de Publicaes.</a>.",
+    43 => 'Nova Publicao',
     44 => 'Administrao',
     45 => 'Acesso',
-    46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the story will not be included in your RDF headline feed and it will be ignored by the search and statistics pages.',
-    47 => 'Images',
-    48 => 'image',
-    49 => 'right',
-    50 => 'left',
-    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<BR><P><B>PREVIEWING</B>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
-    52 => 'Delete',
-    53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
-    54 => 'Attached Images Not Used',
-    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
-    56 => 'Show Topic Icon',
-    57 => 'View unscaled image',
-    58 => 'Story Management',
-    59 => 'Option',
-    60 => 'Enabled',
-    61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modo',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Enquete Criada',
-    4 => 'Enquete %s salva',
-    5 => 'Editar Enquete',
-    6 => 'ID da Enquete',
-    7 => '(no use espaos)',
-    8 => 'Exibir na Pgina Inicial',
-    9 => 'Pergunta',
-    10 => 'Respostas / Votos',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'Criar Enquete',
-    14 => 'save',
-    15 => 'cancel',
-    16 => 'delete',
-    17 => 'Please enter a Poll ID',
-    18 => 'Lista de Enquetes',
-    19 => 'To modify or delete a poll, click on that poll.  To create a new poll click on new poll above.',
-    20 => 'Votantes',
-    21 => 'Acesso Negado',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'Nova Enquete',
-    24 => 'Administrao',
-    25 => 'Sim',
-    26 => 'No'
+    46 => '<b>NOTE:</b> se voc modificar esta data de forma que ela fique no futuro, esta publicao no aparecer at o incio dessa data futura.  Isto tambm significa que esta publicao no ser includa nos arquivos de assinatura RDF e que ser ignorado nas pginas de pesquisa e de estatsticas.',
+    47 => 'Imagens',
+    48 => 'imagem',
+    49 => 'LEFT',
+    50 => 'RIGHT',
+    51 => 'Para adicionar uma das imagens que voc est anexando a este artigo (publicao) , voc tem de inserir (no texto) um pequeno texto especialmente formatado. Este texto formatado deve ser [imageX], [imageX_right] ou [imageX_left] (com os colchetes) onde X  o nmero da imagem que voc est anexando.  NOTA: Voc DEVE usar as imagens que voc anexa. Se voc NO fizer isso, NO conseguir salvar a sua publicao.<BR><P><B>PREVENDO A PUBLICAO</B>: Se voc quiser pr-ver uma publicao com imagens anexadas, a melhor prtica  salvar a publicao como RASCUNHO ao invs de usar o boto Pr-ver. Somente use o boto de pr-ver quando NO tiver imagens anexadas.',
+    52 => 'Apaga',
+    53 => 'no foi utilizada.  Voc DEVE incluir esta imagem na introduo ou no corpo da publicao ANTES de salvar suas alteraes',
+    54 => 'Imagens Anexadas no Utilizadas',
+    55 => 'Os seguintes erros ocorreram enquanto sua publicao estava sendo salva. Por favor corrija esse erros antes de salvar novamente.',
+    56 => 'Mostra cone do Tpico',
+    57 => 'V imagem sem escala',
+    58 => 'Gerenciamento de Publicaes',
+    59 => 'Opo',
+    60 => 'Permitido',
+    61 => 'Auto Arquiva',
+    62 => 'Auto Apaga',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -814,27 +801,30 @@
     3 => 'Nome',
     4 => 'Imagem',
     5 => '(no use espaos)',
-    6 => 'Deleting a topic deletes all stories and blocks associated with it',
+    6 => 'Ao apagar um tpico, so apagados todas as publicaes e blocos associados a esse tpico',
     7 => 'Por favor, preencha os campos ID e Nome do Tpico',
     8 => 'Gerenciador de Tpicos',
-    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find you access level for each topic in parenthesis',
+    9 => 'Para modificar ou apagar um tpico, clique sobre o nome do tpico.  Para criar um novo tpico, clique no botar Criar Novo Tpico  esquerda. Voc ir ver o seu nvel de acesso para cada tpico dentro de parnteses',
     10 => 'Ordem de Exibio',
-    11 => 'Hstrias/Pgina',
+    11 => 'Publicaes/Pgina',
     12 => 'Acesso Negado',
-    13 => "You are trying to access a topic that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/topic.php\">go back to the topic administration screen</a>.",
+    13 => "Voc est tentando acessar um tpico para o qual no tem autorizao. Sua tentativa foi registrada. Por favor <a href=\"{$_CONF['site_admin_url']}/topic.php\">retorne para a tela de Administrao de Tpicos</a>.",
     14 => 'Ordem',
     15 => 'alfabtica',
     16 => 'o padro ',
     17 => 'Novo Tpico',
     18 => 'Administrao',
-    19 => 'save',
-    20 => 'cancel',
-    21 => 'delete',
-    22 => 'Default',
-    23 => 'make this the default topic for new story submissions',
+    19 => 'salva',
+    20 => 'cancela',
+    21 => 'apaga',
+    22 => 'Padro',
+    23 => 'faa deste o tpico padro para novas submisses de publicaes',
     24 => '(*)',
-    25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    25 => 'Arquiva Tpico',
+    26 => 'faa deste o tpico padro para publicaes arquivadas. Somente um tpico  permitido.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -843,16 +833,16 @@
 $LANG28 = array(
     1 => 'Editor de Usurios',
     2 => 'ID',
-    3 => 'User Name',
+    3 => 'Nome de Usurio',
     4 => 'Nome Completo',
     5 => 'Senha',
-    6 => 'Nvel de Acesso',
-    7 => 'Email',
+    6 => 'Nvel de Segurana',
+    7 => 'E-mail',
     8 => 'Homepage',
     9 => '(no use espaos)',
-    10 => 'Please fill in the Username, Full name, Security Level and Email Address fields',
+    10 => 'Por favor preencha os campos Nome de Usurio, Nome Completo, Nvel de Segurana e E-mail',
     11 => 'Gerenciador de Usurios',
-    12 => 'To modify or delete a user, click on that user below.  To create a new user click the new user button to the left.',
+    12 => 'Para modificar ou apagar um usurio, clique sobre o usurio abaixo. Para criar um novo usurio, clique no boto Novo Usurio  esquerda.',
     13 => 'Nvel de Acesso',
     14 => 'Data Registro.',
     15 => 'Novo Usurio',
@@ -861,22 +851,33 @@
     18 => 'cancelar',
     19 => 'excluir',
     20 => 'salvar',
-    21 => 'The username you tried saving already exists.',
+    21 => 'O nome de usurio que voc est tentando usar j existe.',
     22 => 'Erro',
-    23 => 'Batch Add',
-    24 => 'Batch Import of Users',
-    25 => 'You can import a batch of users into Geeklog.  The import file must be a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
-    26 => 'Search',
-    27 => 'Limit Results',
-    28 => 'Check here to delete this picture',
+    23 => 'Adiciona Lote (Batch)',
+    24 => 'Importao de Usurios em Lote (Batch)',
+    25 => 'Voc pode importar um lote (batch) de usurios no Geeklog.  O arquivo de importao DEVE ser um arquivo TEXTO, delimitado por tab (tabulador) e conter os seguintes campos na seguinte ordem: : nome completo, nome de usurio, endereo de e-mail.  Cada usurio que voc importar receber uma senha, criada de forma aleatria.  Voc deve ter apenas um usurio por linha de entrada. Falhas ao seguir estas instrues iro causar problemas srios, que iro requerer trabalho manual. Por isso, faa uma dupla verificao de tudo antes de fazer a importao!',
+    26 => 'Pesquisa',
+    27 => 'Limita Resultados',
+    28 => 'Clique aqui para apagar esta imagem',
     29 => 'Path',
-    30 => 'Import',
-    31 => 'New Users',
-    32 => 'Done processing. Imported %d and encountered %d failures',
-    33 => 'submit',
-    34 => 'Error: You must specify a file to upload.',
-    35 => 'Last Login',
-    36 => '(never)'
+    30 => 'Importa',
+    31 => 'Novos Usurios',
+    32 => 'Processamento realizado. Foram feitas %d importaes e encontradas %d falhas',
+    33 => 'envia',
+    34 => 'Erro: Voc deve especificar um arquivo para upload.',
+    35 => 'ltimo Login',
+    36 => '(nunca)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -886,23 +887,23 @@
     1 => 'Aprovar',
     2 => 'Excluir',
     3 => 'Editar',
-    4 => 'Profile',
-    10 => 'Title',
-    11 => 'Start Date',
+    4 => 'Perfil',
+    10 => 'Ttulo',
+    11 => 'Data de Incio',
     12 => 'URL',
-    13 => 'Category',
-    14 => 'Date',
-    15 => 'Topic',
-    16 => 'User name',
-    17 => 'Full name',
-    18 => 'Email',
+    13 => 'Categoria',
+    14 => 'Data',
+    15 => 'Tpico',
+    16 => 'Nome de usurio',
+    17 => 'Nome Completo',
+    18 => 'E-mail',
     34 => 'Comando e Controle',
-    35 => 'Story Submissions',
-    36 => 'Link Submissions',
-    37 => 'Event Submissions',
+    35 => 'Submisses de Publicaes',
+    36 => 'Submisses de Links',
+    37 => 'Submisses de Eventos',
     38 => 'Enviar',
-    39 => 'There are no submissions to moderate at this time',
-    40 => 'User Submissions'
+    39 => 'No h submisses a serem moderadas agora',
+    40 => 'Submisses de Usurios'
 );
 
 ###############################################################################
@@ -933,7 +934,7 @@
     22 => 'Outubro',
     23 => 'Novembro',
     24 => 'Dezembro',
-    25 => 'Back to ',
+    25 => 'Volta para ',
     26 => 'Todos os Dias',
     27 => 'Semanal',
     28 => 'Calendrio Pessoal de',
@@ -943,13 +944,13 @@
     32 => 'Evento',
     33 => 'Data',
     34 => 'Hora',
-    35 => 'Quick Add',
+    35 => 'Adio Rpida',
     36 => 'Enviar',
     37 => 'Lamentamos, mas o Calendrio Pessoal no est habilitado neste site',
     38 => 'Editor de Eventos Pessoais',
-    39 => 'Day',
-    40 => 'Week',
-    41 => 'Month'
+    39 => 'Dia',
+    40 => 'Semana',
+    41 => 'Ms'
 );
 
 ###############################################################################
@@ -968,41 +969,41 @@
     10 => 'HTML',
     11 => 'Mensagem Urgente!',
     12 => 'Enviado',
-    13 => 'Reset',
+    13 => 'Limpa',
     14 => 'Ignorar preferncias do usurio ',
     15 => 'Erro ao enviar para: ',
     16 => 'Mensagens enviadas para: ',
     17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar outra mensagem</a>",
-    18 => 'To',
-    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
-    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
-    21 => 'Failures',
-    22 => 'Successes',
-    23 => 'No failures',
-    24 => 'No successes',
-    25 => '-- Select Group --',
-    26 => 'Please fill in all the fields on the form and select a group of users from the drop down.'
+    18 => 'Para',
+    19 => 'NOTA: se voc pretende mandar uma mensagem para todos os membros do site, selecione o grupo de usurios Logged-in no menu de seleo.',
+    20 => "Foram enviadas com sucesso <successcount> mensagens and <failcount> mensagens apresentaram falha.  Se voc precisar, os detalhes de cada mensagem  mostrado abaixo.  Caso necessrio voc pode <a href=\"{$_CONF['site_admin_url']}/mail.php\">Enviar outra mensagem</a> ou ento voc pode <a href=\"{$_CONF['site_admin_url']}/moderation.php\">retornar  pgina de administrao</a>.",
+    21 => 'Falhas',
+    22 => 'Sucessos',
+    23 => 'Sem falhas',
+    24 => 'Sem sucessos',
+    25 => '-- Selecione Grupo --',
+    26 => 'Por favor preencha os campos no formulrio e selecione um grupo de usurios no menu.'
 );
 
 ###############################################################################
 # admin/plugins.php
 
 $LANG32 = array(
-    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
-    2 => 'Plug-in Installation Disclaimer',
-    3 => 'Plug-in Installation Form',
+    1 => 'A instalao de plugins pode causar danos  sua instalao padro do Geeklog e, possivelmente, at para seu sistema.  Por isso  importante que voc s instale plugins que foram baixados de <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a>, uma vez que ns testamos todos os plugins enviados para o site em uma variedade de sistemas operacionais.   importante que voc compreenda que o processo de instalao de um plugin ir requerer a execuo de alguns comandos de arquivos de sistema - que podem causar problemas de segurana especialmente se voc utilizar plugins de outros sites. Mesmo que voc tome todos os cuidados que estamos propondo, ns no podemos garantir o sucesso de qualquer instalao e nem podemos nos responsabilizar por quaisquer danos causados na instalao de um Plugin Geeklog.  Em outras palavras, todo o risco de qualquer instalao  seu. Sempre siga as indicaes de como instalar manualmente um plugin. Estas instrues sempre vem no pacote de cada instalao.',
+    2 => 'Plug-in Disclaimer de Instalao',
+    3 => 'Plug-in Formulrio de Instalao',
     4 => 'Arquivo Plug-in',
-    5 => 'Lista de Plug-ins',
+    5 => 'Lista de Plugins',
     6 => 'Ateno: Plug-in j instalado!',
     7 => 'O plug-in que voc est tentando instalar j existe. Remova-o antes de reinstal-lo',
     8 => 'Houve uma falha durante a verificao de compatibilidade do Plugin',
-    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href=http://www.geeklog.net>Geeklog</a> or get a newer version of the plug-in.',
+    9 => 'Este plugin requer uma nova verso do Geeklog. Procure fazer uma atualizao da sua cpia do<a href=http://www.geeklog.net>Geeklog</a>  e ou busque uma nova verso do plugin.',
     10 => '<br><b>No h plugins instalados atualmente.</b><br><br>',
-    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in click on new plug-in above.',
-    12 => 'no plugin name provided to plugineditor()',
+    11 => 'Para modificar ou apagar um plug-in, clique no nmero do plug-in abaixo. Para aprender mais sobre o plug-in, clique no nome do plug-in e voc ser direcionado para o site do plug-in. Para instalar ou atualizar um plug-in , clique em Novo Plug-in acima.',
+    12 => 'nenhum nome de plugin foi fornecido para o plugineditor()',
     13 => 'Editor de Plugins',
     14 => 'Novo Plug-in',
-    15 => 'Admininistrao',
+    15 => 'Administrao',
     16 => 'Nome',
     17 => 'Verso',
     18 => 'Verso Geeklog',
@@ -1018,152 +1019,178 @@
     28 => 'Verso',
     29 => 'Verso Geeklog',
     30 => 'Excluir Plug-in?',
-    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the files, data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'Code Version',
-    34 => 'Update'
+    31 => 'Tem certeza que quer apagar este plug-in?  Ao fazer isso voc vai remover todos os arquivos, dados e estruturas de dados que este plug-in utiliza.  Se voc tem certeza, clique em Apaga novamente no formulrio a seguir.',
+    32 => '<p><b>Erro: tag AutoLink no est no formato correto</b></p>',
+    33 => 'Verso do Cdigo',
+    34 => 'Atualiza',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
 # admin/syndication.php
 
 $LANG33 = array(
-    1 => 'create feed',
-    2 => 'save',
-    3 => 'delete',
-    4 => 'cancel',
-    10 => 'Content Syndication',
-    11 => 'New Feed',
-    12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
-    14 => 'Title',
-    15 => 'Type',
-    16 => 'Filename',
-    17 => 'Format',
-    18 => 'last updated',
-    19 => 'Enabled',
-    20 => 'Yes',
-    21 => 'No',
-    22 => '<i>(no feeds)</i>',
-    23 => 'all Stories',
-    24 => 'Feed Editor',
-    25 => 'Feed Title',
-    26 => 'Limit',
-    27 => 'Length of entries',
-    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
-    29 => 'Description',
-    30 => 'Last Update',
-    31 => 'Character Set',
-    32 => 'Language',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
-    36 => 'Select type of feed',
-    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
-    38 => 'Error: Missing Fields',
-    39 => 'Please fill in the Feed Title, Description, and Filename.',
-    40 => 'Please enter a  number of entries or number of hours.',
+    1 => 'cria novo feed',
+    2 => 'salva',
+    3 => 'apaga',
+    4 => 'cancela',
+    10 => 'Assinatura de Contedos',
+    11 => 'Novo Feed',
+    12 => 'Home Administrativa',
+    13 => 'Para modificar ou apagar um feed, clique no ttulo do feed, abaixo. Para criar um novo feed, clique em Novo Feed, acima.',
+    14 => 'Ttulo',
+    15 => 'Tipo',
+    16 => 'Nome do Arquivo',
+    17 => 'Formato',
+    18 => 'ltima atualizao',
+    19 => 'Permitido',
+    20 => 'Sim',
+    21 => 'No',
+    22 => '<i>(sem feeds)</i>',
+    23 => 'todas Publicaes',
+    24 => 'Editor de Feed',
+    25 => 'Ttulo do Feed',
+    26 => 'Limite',
+    27 => 'Comprimento das entradas',
+    28 => '(0 = sem texto, 1 = texto inteiro, outro nmero = limita a este nmero de caracteres.)',
+    29 => 'Descrio',
+    30 => 'ltima Atualizao',
+    31 => 'Set de Caracteres',
+    32 => 'Linguagem',
+    33 => 'Contedos',
+    34 => 'Entradas',
+    35 => 'Horas',
+    36 => 'Seleciona tipo de feed',
+    37 => 'Voc tem ao menos um plugin instalado que suporta assinatura de contedos. Abaixo voc precisar selecionar se voc quer criar um feed Geeklog feed ou criar um feed atravs de um dos plugins.',
+    38 => 'Erro: Faltando preencher campos',
+    39 => 'Por favor preencha Ttulo do Feed, Descrio e Nome do Arquivo.',
+    40 => 'Por favor defina um nmero de entradas ou um nmero de horas.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Eventos',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
 # confirmation and error messages
 
 $MESSAGE = array(
-    1 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
-    2 => "Thank-you for submitting your story to {$_CONF['site_name']}.  It has been submitted to our staff for approval. If approved, your story will be available for others to read on our site.",
-    3 => "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links.php>links</a> section.",
-    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href={$_CONF['site_url']}/calendar.php>calendar</a> section.",
-    5 => 'Your account information has been successfully saved.',
-    6 => 'Your display preferences have been successfully saved.',
-    7 => 'Your comment preferences have been successfully saved.',
-    8 => 'You have been successfully logged out.',
-    9 => 'Your story has been successfully saved.',
-    10 => 'A histria foi excluda com sucesso.',
-    11 => 'Your block has been successfully saved.',
+    1 => "Sua senha foi mandada por e-mail para voc e deve chegar em breve. Por favor siga as instrues na mensagem e muito obrigado por usar o site {$_CONF['site_name']}",
+    2 => "Muito obrigado por registrar sua publicao no site {$_CONF['site_name']}.  Ela ser submetida ao nosso pessoal de staff para aprovao. Se aprovada, sua publicao ficar disponvel para todos os outros usurios que acessarem o nosso site.",
+    3 => "Muito obrigado por registrar um link no site {$_CONF['site_name']}.  Ele ser submetido ao nosso pessoal de staff para aprovao.  Se aprovado, seu link ser visto na seo de links em <a href={$_CONF['site_url']}/links.php>links</a>.",
+    4 => "Muito obrigado por inscrever um Evento no site {$_CONF['site_name']}.  Ele ser submetido ao nosso pessoal de staff para aprovao.  Se aprovado, seu Evento estar em nossa seo <a href={$_CONF['site_url']}/calendar.php>Calendrio</a>.",
+    5 => 'A informao de sua conta foi salva com sucesso.',
+    6 => 'Suas preferncias de tela (display) foram salvas com sucesso.',
+    7 => 'Suas preferncias de Comentrios foram salvas com sucesso.',
+    8 => 'Seu micro foi desconectado do site com sucesso (logout).',
+    9 => 'Sua publicao foi salva com sucesso.',
+    10 => 'A publicao foi excluda com sucesso.',
+    11 => 'Seu bloco foi salvo com sucesso.',
     12 => 'O bloco foi excludo com sucesso.',
-    13 => 'Your topic has been successfully saved.',
-    14 => 'The topic and all it\'s stories an blocks have been successfully deleted.',
-    15 => 'Your link has been successfully saved.',
+    13 => 'Seu tpico foi salvo com sucesso.',
+    14 => 'O tpico e todas suas publicaes e blocos foram apagados com sucesso.',
+    15 => 'Seu link foi salvo com sucesso.',
     16 => 'O link foi excludo com sucesso.',
-    17 => 'Your event has been successfully saved.',
+    17 => 'Seu evento foi includo com sucesso.',
     18 => 'O evento foi excludo com sucesso.',
-    19 => 'Your poll has been successfully saved.',
+    19 => 'Sua enquete foi salva com sucesso.',
     20 => 'A enquete foi excluda com sucesso.',
-    21 => 'The new user has been successfully saved.',
+    21 => 'O novo usurio foi salvo com sucesso.',
     22 => 'O usurio foi excludo com sucesso',
-    23 => 'Error trying to add an event to your calendar. There was no event id passed.',
-    24 => 'The event has been saved to your calendar',
-    25 => 'Cannot open your personal calendar until you login',
-    26 => 'Event was successfully removed from your personal calendar',
+    23 => 'Erro ao tentar adicionar um Evento ao seu Calendrio. No foi informada nenhuma identidade (ID) para o evento.',
+    24 => 'O evento foi salvo com sucesso no seu calendrio',
+    25 => 'No  possvel abrir seu calendrio pessoal de voc no efetuar seu login.',
+    26 => 'O evento foi removido com sucesso de seu calendrio pessoal',
     27 => 'Mensagem enviada com sucesso.',
-    28 => 'The plug-in has been successfully saved',
+    28 => 'O plug-in foi salvo com sucesso',
     29 => 'Lamentamos, mas calendrios pessoais no esto habilitados neste site',
     30 => 'Acesso Negado',
-    31 => 'Sorry, you do not have access to the story administration page.  Please note that all attempts to access unauthorized features are logged',
-    32 => 'Sorry, you do not have access to the topic administration page.  Please note that all attempts to access unauthorized features are logged',
-    33 => 'Sorry, you do not have access to the block administration page.  Please note that all attempts to access unauthorized features are logged',
-    34 => 'Sorry, you do not have access to the link administration page.  Please note that all attempts to access unauthorized features are logged',
-    35 => 'Sorry, you do not have access to the event administration page.  Please note that all attempts to access unauthorized features are logged',
-    36 => 'Sorry, you do not have access to the poll administration page.  Please note that all attempts to access unauthorized features are logged',
-    37 => 'Sorry, you do not have access to the user administration page.  Please note that all attempts to access unauthorized features are logged',
-    38 => 'Sorry, you do not have access to the plugin administration page.  Please note that all attempts to access unauthorized features are logged',
-    39 => 'Sorry, you do not have access to the mail administration page.  Please note that all attempts to access unauthorized features are logged',
+    31 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Publicaes.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    32 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Tpicos.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    33 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Blocos.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    34 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Links.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    35 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Eventos.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    36 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Enquetes.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    37 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Usurios.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    38 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Plugins.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    39 => 'Lamentamos, mas voc no tem acesso a pagina de Administrao de Mail.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
     40 => 'Mensagem do Sistema',
-    41 => 'Sorry, you do not have access to the word replacement page.  Please not that all attempts to access unauthorized features are logged',
-    42 => 'Your word has been successfully saved.',
+    41 => 'Lamentamos, mas voc no tem acesso  pgina de substituio de palavras.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    42 => 'Sua palavra foi registrada com sucesso.',
     43 => 'A palavra foi excluda com sucesso.',
-    44 => 'The plug-in was successfully installed!',
+    44 => 'O plug-in foi instalado com sucesso!',
     45 => 'O plug-in foi excludo com sucesso.',
-    46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
-    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
-    48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
-    49 => 'Your group has been successfully saved.',
-    50 => 'The group has been successfully deleted.',
-    51 => 'This username is already in use. Please choose another one.',
-    52 => 'The email address provided does not appear to be a valid email address.',
-    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
-    54 => 'Your request for a new password has expired. Please try again below.',
-    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
-    56 => 'The email address provided is already in use for another account.',
-    57 => 'Your account has been successfully deleted.',
-    58 => 'Your feed has been successfully saved.',
-    59 => 'The feed has been successfully deleted.',
-    60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    46 => 'Lamentamos, mas voc no tem acesso ao utilitrio de backup do banco de dados.  Por favor note que todas as tentativas de acesso no autorizado ficam registradas.',
+    47 => 'Esta funcionalidade s opera em sistemas do padro *nix.  Se voc estiver rodando  *nix como seu sistema operacional, ento o seu cach foi limpo com sucesso. Se voc roda em Windows, voc precisar pesquisar os arquivos com nome adodb_*.php and remov-los manualmente.',
+    48 => "Muito obrigado por se inscrever como membro do site {$_CONF['site_name']}. Nossa equipe ir revisar a sua inscrio. Se aprovada, sua senha ser enviada por e-mail para o endereo com o qual voc se registrou.",
+    49 => 'Seu grupo foi salvo com sucesso.',
+    50 => 'Seu grupo foi apagado com sucesso.',
+    51 => 'Este nome de usurio j est sendo usado por outra pessoa. Por favor escolha um outro.',
+    52 => 'O endereo de e-mail fornecido no parece ser um endereo de e-mail vlido.',
+    53 => 'Sua nova senha foi aceita. Por favor utilize a nova senha abaixo para fazer o login agora.',
+    54 => 'Seu pedido de uma nova senha expirou. Por favor tente novamente abaixo.',
+    55 => 'Um e-mail foi enviado para voc e deve chegar em breve. Por favor siga as instrues nele contidas para definir uma nova senha para a sua conta.',
+    56 => 'O endereo de e-mail fornecido j est em uso por outra pessoa.',
+    57 => 'Sua conta foi apagada com sucesso.',
+    58 => 'Seu feed foi salvo com sucesso.',
+    59 => 'Seu feed foi apagado com sucesso.',
+    60 => 'O plugin foi atualizado com sucesso',
+    61 => 'Plugin %s: mensagem de local desconhecido',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
 
 $LANG_ACCESS = array(
     'access' => 'Acesso',
-    'ownerroot' => 'Proprietrio/Root',
+    'ownerroot' => 'Proprietrio/Raiz',
     'group' => 'Grupo ',
     'readonly' => 'Somente Leitura',
     'accessrights' => 'Direito de Acesso',
     'owner' => 'Proprietrio ',
-    'grantgrouplabel' => 'Grant Above Group Edit Rights',
-    'permmsg' => 'NOTE: members is all logged in members of the site and anonymous is all users browsing the site that aren\'t logged in.',
-    'securitygroups' => 'Security Groups',
-    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
-    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'grantgrouplabel' => 'Concede Direitos de Edio para o Grupo Acima',
+    'permmsg' => 'NOTA: Membros equivale a todos usurios que esto plugados com login no momento e Annimos equivale a todos usurios que esto navegando no site no momento mas NO fizeram seu login.',
+    'securitygroups' => 'Grupos de Segurana',
+    'editrootmsg' => "Mesmo que voc seja um Usurio Administrador, voc no pode editar um usurio raiz se voc mesmo tambm no for um usurio raiz. Voc pode editar todos os outros usurios, exceto usurios da raiz. Por favor note que todas tentativas ilegais de tentar editar usurio raiz ficam registradas. Por favor retorne para a <a href=\"{$_CONF['site_admin_url']}/user.php\">pgina de Administrao de Usurios</a>.",
+    'securitygroupsmsg' => 'Selecione os checkboxes para os grupos que voc quer que o usurio venha a pertencer.',
     'groupeditor' => 'Editor de Grupos',
     'description' => 'Descrio',
     'name' => 'Nome',
     'rights' => 'Direitos',
-    'missingfields' => 'Missing Fields',
-    'missingfieldsmsg' => 'You must supply the name and a description for a group',
+    'missingfields' => 'Campos Faltantes',
+    'missingfieldsmsg' => 'Voc DEVE fornecer o Nome e a Descrio para um grupo',
     'groupmanager' => 'Gerenciador de Grupos',
-    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'newgroupmsg' => 'Para modificar ou apagar um grupo, clique no grupo abaixo. Para criar um novo grupo, clique em Novo Grupo, acima. Por favor note que os grupos que so core groups - e no podem ser apagados - pois eles so usados pelo sistema.',
     'groupname' => 'Nome',
     'coregroup' => 'Core Group',
     'yes' => 'Sim',
     'no' => 'No',
-    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
-    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
-    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
-    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'corerightsdescr' => "Este grupo  um Grupo Core do site {$_CONF['site_name']}.  Desta forma, os direitos para este grupo NO podem ser editados.  Abaixo segue uma lista somente para leitura dos direitos que este grupo tem acesso.",
+    'groupmsg' => 'Grupos de Segurana, neste site, so hierrquicos. Ao adicionar este grupo a qualquer um dos grupos abaixo, voc estar dando a este grupo os mesmos direitos que aqueles grupos tm. Encorajamos voc a, sempre que for possvel, usar os grupos abaixo para dar direitos a um novo grupo.  Se voc depois precisar que este grupo tenha direitos especficos voc pode selecionar os direitos dos diversos recursos do site na seo abaixo chamada  \'Direitos\'.  Para adicionar este grupo a qualquer um dos grupos abaixo, simplesmente marque o box prximo ao(s) grupo(s) que voc quiser.',
+    'coregroupmsg' => "Este grupo  um Grupo Core do site {$_CONF['site_name']}.  Desta forma, os grupos a que este grupo pertence no podem ser editados.  Abaixo segue uma lista apenas para leitura dos grupos s que este grupo pertence.",
+    'rightsdescr' => 'O acesso de um grupo a um determinado direito, abaixo, pode ser dado diretamente para o grupo OU para um grupo diferente - a que este grupo pertena. Os que voc v abaixo sem o checkbox marcado so direitos dados a este grupo por que ele pertence a um outro grupo que j tem esses direitos. Os direitos com checkboxes, abaixo, so direitos que podem ser dados diretamente a este grupo.',
     'lock' => 'Bloquear',
     'members' => 'Membros',
     'anonymous' => ' Annimos ',
@@ -1172,99 +1199,314 @@
     'edit' => 'Editar',
     'none' => 'Nenhum',
     'accessdenied' => 'Acesso Negado',
-    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
-    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
-    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
-    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'storydenialmsg' => "Voc no tem acesso para ver esta publicao.  Isto pode ocorrer porque voc ainda no  membro do site {$_CONF['site_name']}.  Por favor <a href=users.php?mode=new> torne-se um membro</a> do {$_CONF['site_name']} para receber direitos plenos de acesso!",
+    'eventdenialmsg' => "Voc no tem acesso para ver este evento.  Isto pode ocorrer porque voc ainda no  membro do site {$_CONF['site_name']}.  Por favor <a href=users.php?mode=new> torne-se um membro</a> do {$_CONF['site_name']} para receber direitos plenos de acesso!",
+    'nogroupsforcoregroup' => 'Este grupo no pertence a qualquer um dos outros grupos',
+    'grouphasnorights' => 'Este grupo no tem acesso a quaisquer recursos de administrao deste site',
     'newgroup' => 'Novo Grupo',
     'adminhome' => 'Administrao',
     'save' => 'salvar',
     'cancel' => 'cancelar',
-    'delete' => 'delete',
-    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error',
-    'listusers' => 'List Users',
-    'listthem' => 'list',
-    'usersingroup' => 'Users in group "%s"',
-    'usergroupadmin' => 'User Group Administration',
-    'add' => 'Add',
+    'delete' => 'apagar',
+    'canteditroot' => 'Voc tentou editar o Grupo raiz. Mas voc mesmo no pertence ao grupo raiz e, por este motivo, seu acesso no  permitido.  Por favor, contate o administrador do sistema se voc acha que isto  um erro.',
+    'listusers' => 'Lista de Usurios',
+    'listthem' => 'lista',
+    'usersingroup' => 'Usurios no Grupo "%s"',
+    'usergroupadmin' => 'Administrao de Usurios no Grupo',
+    'add' => 'Adiciona',
     'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
-    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'availmembers' => 'Membros Disponveis',
+    'groupmembers' => 'Membros do Grupo',
+    'canteditgroup' => 'Para editar este grupo, voc tem de ser membro do grupo. Por favor, contate o administrador do sistema se voc acha que isto  um erro.',
+    'cantlistgroup' => 'Para ver os membros deste grupo, voc tambm tem que ser um membro deste grupo. Por favor, contate o administrador do sistema se voc acha que isto  um erro.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
 # admin/database.php
 
 $LANG_DB_BACKUP = array(
-    'last_ten_backups' => 'Last 10 Back-ups',
-    'do_backup' => 'Do Backup',
-    'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
-    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
-    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
-    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
-    'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
-    'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
-    'backup_file' => 'Backup file',
-    'size' => 'Size',
+    'last_ten_backups' => 'ltimos 10 Backups',
+    'do_backup' => 'Fazer Backup',
+    'backup_successful' => 'Backup do banco de dados feito com sucesso.',
+    'db_explanation' => 'Para criar um novo backup do seu sistema Geeklog, clique o boto abaixo',
+    'not_found' => "Path (caminho) incorreto ou utilitrio chamado mysqldump no est executando.<br>Verifique <strong>\$_DB_mysqldump_path</strong> - definio que est no arquivo config.php.<br>Essa varivel est no momento definida como: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Falhou: tamanho do arquivo com 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} no existe ou no  um diretrio",
+    'no_access' => "ERRO: Diretrio {$_CONF['backup_path']} no est acessvel.",
+    'backup_file' => 'Arquivo de Backup',
+    'size' => 'Tamanho',
     'bytes' => 'Bytes',
-    'total_number' => 'Total number of backups: %d'
+    'total_number' => 'Nmero total de backups: %d'
 );
 
 ###############################################################################
 
 $LANG_BUTTONS = array(
-    1 => 'Home',
-    2 => 'Contact',
-    3 => 'Get Published',
+    1 => 'Homepage',
+    2 => 'Contato',
+    3 => 'Publique um Artigo',
     4 => 'Links',
-    5 => 'Polls',
-    6 => 'Calendar',
-    7 => 'Site Stats',
-    8 => 'Personalize',
-    9 => 'Search',
-    10 => 'advanced search'
+    5 => 'Enquetes',
+    6 => 'Calendrio',
+    7 => 'Estatsticas do Site',
+    8 => 'Personalizao do Site',
+    9 => 'Pesquisa site',
+    10 => 'pesquisa avanada',
+    11 => 'Directory'
 );
 
 ###############################################################################
 # 404.php
 
 $LANG_404 = array(
-    1 => '404 Error',
-    2 => 'Gee, I\'ve looked everywhere but I can not find <b>%s</b>.',
-    3 => "<p>We're sorry, but the file you have requested does not exist. Please feel free to check the <a href=\"{$_CONF['site_url']}\">main page</a> or the <a href=\"{$_CONF['site_url']}/search.php\">search page</a> to see if you can find what you lost."
+    1 => 'Erro 404',
+    2 => 'Gee, travei em algum lugar mas no posso encontrar o local <b>%s</b>.',
+    3 => "<p>Lamentamos, mas o arquivo que voc pediu no existe mais. Por favor fique a vontade para verificar a <a href=\"{$_CONF['site_url']}\">pgina principal</a> ou a <a href=\"{$_CONF['site_url']}/search.php\">pgina de pesquisa</a> para ver se voc acha o que no encontrou."
 );
 
 ###############################################################################
 # login form
 
 $LANG_LOGIN = array(
-    1 => 'Login required',
-    2 => 'Sorry, to access this area you need to be logged in as a user.',
+    1 => 'Login  requerido',
+    2 => 'Lamentamos mas, para acessar esta rea voc deve fazer o login como um usurio.',
     3 => 'Login',
-    4 => 'New User'
+    4 => 'Novo Usurio'
 );
 
 ###############################################################################
 # pdfgenerator.php
 
 $LANG_PDF = array(
-    1 => 'The PDF feature has been disabled',
-    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
-    3 => 'Unknown error during PDF generation',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Loading your document.',
-    6 => 'Please wait while your document is loaded.',
-    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
-    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
-    9 => 'PDF Generator',
-    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    1 => 'O recurso de PDF est desabilitado',
+    2 => 'O documento fornecido no foi processado no formato PDF. O documento foi recebido, mas no pode ser processado. Por favor verifique se foram submetidos documentos formatados contendo somente comandos html que foram escritos para o padro xHTML. Por favor note que documentos html muito complexos podem no processar corretamente ou simplesmente nem processarem (processo chamado de renderizao). O documento resultante de sua tentativa ficou com 0 bytes de tamanho - e foi apagado. Se voc tem certeza que o documento pode ser processado - renderizado - resubmeta o mesmo.',
+    3 => 'Erro desconhecido na gerao do PDF',
+    4 => "No foi fornecida uma pgina com dados ou voc que usar a ferramenta de gerao de PDF ad-hoc, abaixo.  Se voc pensa que est tendo erro nesta pgina\n          por favor contate o administrador do sistema.  Ou ento voc pode usar o formulrio abaixo para gerar o PDF com um aspecto ad-hoc.",
+    5 => 'Carregando seu documento.',
+    6 => 'Por favor aguarde enquanto seu documento  carregado.',
+    7 => 'Voc pode dar um clique com o boto direito do mouse no boto abaixo e escolher\'Salva em...\' ou \'Salva num link...\' para salvar a copia do seu documento.',
+    8 => 'O path (caminho) fornecido no arquivo de configurao (para o arquivo binrio HTMLDoc)  invlido ou o sistema no pode execut-lo. Por favor contate o administrador do site se este problema persistir.',
+    9 => 'Gerador de PDF',
+    10 => "Esta  ferramenta de Gerao de PDF Ad-hoc. Ela tentar converter qualquer URL fornecida num documento PDF. Por favor fique ciente que algumas pginas no iro renderizar perfeitamente com este recurso.  Esta\n            uma limitao da ferramenta e os erros desta natureza no devem ser reportados para o administrador do site",
     11 => 'URL',
-    12 => 'Generate PDF!',
-    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
-    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+    12 => 'Gerar PDF!',
+    13 => 'A configurao PHP deste servidor no permite que URLs sejam usadas com o comando  fopen().  O administrador do sistema deve editar o arquivo php.ini file e definir o parmetro allow_url_fopen como On',
+    14 => 'O PDF que voc requisitou ou no existe ou voc tentou acessar este arquivo de forma ilegal.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
 );
 
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/portuguese_brazil_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/portuguese_brazil_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/portuguese_brazil_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/portuguese_brazil_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1512 @@
+<?php
+
+###############################################################################
+# portuguese_brazil.php
+# Esta é a página em Português do Brasil para o GeekLog!
+# Agradecimentos especiais para Mischa Polivanov pelo seu trabalho neste projeto
+#
+# Copyright (C) 2002 Dener C. Brito - LAST UPDATE: March 26,2002
+# dener@crube.net
+#
+# Revisado e Atualizado em 28/Fevereiro/2005 por Alcides Soares Filho
+# asoaresfil@uol.com.br - arquivo versão 1.3.11
+#
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Enviado por:',
+    2 => 'ler mais',
+    3 => 'comentários',
+    4 => 'Editar',
+    5 => 'Enquete',
+    6 => 'Resultados',
+    7 => 'Resultados da Enquete',
+    8 => 'votos',
+    9 => 'Funções Administrativas:',
+    10 => 'Submissões',
+    11 => 'Publicações',
+    12 => 'Blocos',
+    13 => 'Tópicos',
+    14 => 'Links',
+    15 => 'Eventos',
+    16 => 'Enquetes',
+    17 => 'Usuários',
+    18 => 'SQL Query',
+    19 => 'Sair do Sistema',
+    20 => 'Informações do Usuário:',
+    21 => 'Usuário',
+    22 => 'ID',
+    23 => 'Nível de Acesso',
+    24 => 'Anônimo',
+    25 => 'Responder',
+    26 => 'Os comentários a seguir são propriedade de quem os enviou. Este site não é responsável pelas opiniões expressas por seus usuários ou visitantes.',
+    27 => 'Mensagem mais recente',
+    28 => 'Excluir',
+    29 => 'Sem comentários.',
+    30 => 'Publicações Anteriores',
+    31 => 'Tags HTML Permitidas:',
+    32 => 'Erro, nome de usuário inválido',
+    33 => 'Erro, não foi possível gravar no arquivo log',
+    34 => 'Erro',
+    35 => 'Sair',
+    36 => 'em',
+    37 => 'Não há publicações de usuários',
+    38 => 'Assinatura de Conteúdos',
+    39 => 'Atualizar',
+    40 => 'Você tem <tt>register_globals = Off</tt> no seu arquivo <tt>php.ini</tt>. O Geeklog requer <tt>register_globals</tt> colocado como <strong>on</strong>. Antes de continuar, faça esse ajuste para <strong>on</strong> e reinicialize seu servidor WEB.',
+    41 => 'Usuários Convidados',
+    42 => 'Autoria de:',
+    43 => 'Responder',
+    44 => 'Comentário Anterior',
+    45 => 'Erro MySQL: Número',
+    46 => 'Erro MySQL: Mensagem',
+    47 => 'Login',
+    48 => 'Minha Conta',
+    49 => 'Preferências de Exibição',
+    50 => 'Erro: SQL statement',
+    51 => 'ajuda',
+    52 => 'Novo',
+    53 => 'Administração',
+    54 => 'Não foi possível abrir o arquivo.',
+    55 => 'Erro em',
+    56 => 'Votar',
+    57 => 'Senha',
+    58 => 'Entrar',
+    59 => "Deseja registrar-se? Clique <a href=\"{$_CONF['site_url']}/users.php?mode=new\">aqui</a>",
+    60 => 'Comentar',
+    61 => 'Registrar-se',
+    62 => 'palavras',
+    63 => 'Preferências de Comentários',
+    64 => 'Enviar para um Amigo',
+    65 => 'Versão para Impressão',
+    66 => 'Meu Calendário',
+    67 => 'Bem-vindo à ',
+    68 => 'início',
+    69 => 'contato',
+    70 => 'busca',
+    71 => 'contribuir',
+    72 => 'links',
+    73 => 'enquetes',
+    74 => 'calendário',
+    75 => 'busca avançada',
+    76 => 'estatísticas do site',
+    77 => 'Plugins',
+    78 => 'Próximos Eventos',
+    79 => 'O que há de novo',
+    80 => 'publicações nas últimas',
+    81 => 'publicação nas últimas',
+    82 => 'horas',
+    83 => 'COMENTÁRIOS',
+    84 => 'LINKS',
+    85 => '48 horas',
+    86 => 'Sem novos comentários',
+    87 => '14 dias',
+    88 => 'Sem novos links',
+    89 => 'Não há eventos programados',
+    90 => 'Homepage Principal',
+    91 => 'Criou esta página em',
+    92 => 'segundos',
+    93 => 'Copyright',
+    94 => 'Todas as marcas e copyrights nesta página pertencem aos seus respectivos proprietários.',
+    95 => 'Patrocinado por',
+    96 => 'Grupos',
+    97 => 'Lista de Palavras',
+    98 => 'Plugins',
+    99 => 'HISTÓRIAS',
+    100 => 'Sem novas publicações',
+    101 => 'Seus Eventos',
+    102 => 'Eventos do Site',
+    103 => 'Backups do DB',
+    104 => 'por',
+    105 => 'E-Mail para usuários',
+    106 => 'Leituras',
+    107 => 'Teste da Versão Geeklog',
+    108 => 'Limpa Cachê',
+    109 => 'Reporta abuso',
+    110 => 'Reporta este envio para a administração do site',
+    111 => 'Vê Versão PDF',
+    112 => 'Usuários Registrados',
+    113 => 'Documentação',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendário de Eventos',
+    2 => 'Lamentamos, mas há não eventos a exibir.',
+    3 => 'Quando',
+    4 => 'Onde',
+    5 => 'Descrição',
+    6 => 'Adicionar um Evento',
+    7 => 'Próximos Eventos',
+    8 => 'Ao adicionar este evento ao seu calendário você poderá ver somente os eventos em que estiver interessado clicando em "Meu Calendário" na área Funções do Usuário.',
+    9 => 'Adicionar ao Meu Calendário',
+    10 => 'Remover do Meu Calendário',
+    11 => "Adicionando Evento ao Calendário de {$_USER['username']}",
+    12 => 'Evento',
+    13 => 'Início',
+    14 => 'Término',
+    15 => 'Volta para Calendário'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Comentar',
+    2 => 'Modo',
+    3 => 'Sair',
+    4 => 'Criar Conta',
+    5 => 'Usuário',
+    6 => 'Este site requer que você efetue o login para enviar um comentário.  Se você ainda não tem uma conta, utilize o formulário abaixo para criar uma.',
+    7 => 'Seu último comentário foi há ',
+    8 => " segundos atrás.  Este site requer pelo menos {$_CONF['commentspeedlimit']} segundos entre comentários",
+    9 => 'Comentário',
+    10 => 'Enviar Relatório',
+    11 => 'Enviar Comentário',
+    12 => 'Por favor, preencha os campos Nome, E-mail, Título e Comentário, pois eles são necessários para a aceitação de seu comentário.',
+    13 => 'Suas Informações',
+    14 => 'Prevê',
+    15 => 'Reporta este envio',
+    16 => 'Título',
+    17 => 'Erro',
+    18 => 'Recomendações',
+    19 => 'Por favor, envie mensagens relacionadas ao assunto tratado no tópico.',
+    20 => 'Tente responder aos comentários já publicados ao invés de iniciar novos threads (um novo ramo).',
+    21 => 'Leia as mensagens de outros usuários antes de enviar a sua para prevenir duplicidade de conteúdo.',
+    22 => 'Seja descritivo ao preencher o campo Assunto.',
+    23 => 'Seu e-mail NÃO será publicado.',
+    24 => 'Usuário Anônimo',
+    25 => 'Tem certeza que quer reportar este envio para a administração do site?',
+    26 => '%s reportou o seguinte envio considerado abusivo:',
+    27 => 'Reporta Comentário Abusivo'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Perfil de',
+    2 => 'Nome',
+    3 => 'Nome Completo',
+    4 => 'Senha',
+    5 => 'E-mail',
+    6 => 'Homepage',
+    7 => 'Biografia',
+    8 => 'Chave PGP',
+    9 => 'Salvar',
+    10 => 'Últimos 10 comentários',
+    11 => 'Sem Comentários',
+    12 => 'Preferências de Usuário para',
+    13 => 'Enviar resumo diário via E-mail',
+    14 => 'Esta senha é gerada aleatoriamente. É recomendado que você altere a mesma imediatamente. Para alterar sua senha, efetue o login e clique em Informações da conta no menu Funções do Usuário.',
+    15 => "Sua conta no {$_CONF['site_name']} foi criada. Para ter acesso à mesma, você deve efetuar o login utilizando as informações abaixo. Por favor, guarde este e-mail para futuras consultas.",
+    16 => 'Informações sobre sua Conta',
+    17 => 'Conta inexistente',
+    18 => 'O endereço fornecido não parece ser um e-mail válido',
+    19 => 'O nome de usuário ou o e-mail fornecido já constam em nossa base de dados',
+    20 => 'O endereço fornecido não parece ser um e-mail válido',
+    21 => 'Erro',
+    22 => "Registro no {$_CONF['site_name']}!",
+    23 => "Criando uma conta de usuário proporcionará a você todos os benefícios da associação ao site {$_CONF['site_name']} - o que permitirá a você enviar comentários e mensagens em seu nome. Se não tiver uma conta, você só poderá enviar mensagens anonimamente. Por favor, note que seu endereço de e-mail <b><i>nunca</i></b> será exibido publicamente neste site.",
+    24 => 'Sua senha será enviada ao endereço de e-mail que você forneceu.',
+    25 => 'Esqueceu sua Senha?',
+    26 => 'Entre com seu nome de usuário e clique em Enviar Senha. Uma nova senha será enviada para o endereço constante em nossos registros.',
+    27 => 'Registre-se!',
+    28 => 'Enviar Senha',
+    29 => 'saiu do',
+    30 => 'entrou no',
+    31 => 'A função selecionada exige a entrada no sistema',
+    32 => 'Assinatura',
+    33 => 'Não será exibida publicamente',
+    34 => 'Este é o seu nome real',
+    35 => 'Entre a senha para alterá-la',
+    36 => 'Iniciar com http://',
+    37 => 'Aplicada aos seus comentários',
+    38 => 'Sobre você. (Qualquer pessoa poderá ler isto) ',
+    39 => 'Sua chave pública PGP para ser compartilhada',
+    40 => 'Sem ícones nos Tópicos',
+    41 => 'Aguardando Moderação',
+    42 => 'Formato de Datas',
+    43 => 'Máximo de Publicações',
+    44 => 'Sem caixas',
+    45 => 'Preferências de Exibição para',
+    46 => 'Itens Excluídos para',
+    47 => 'Configuração da Caixa de Notícias para',
+    48 => 'Tópicos',
+    49 => 'Sem ícones nas publicações',
+    50 => 'Desmarque se não estiver interessado',
+    51 => 'Somente as Notícias',
+    52 => 'O padrão é',
+    53 => 'Receber as notícias via resumo diário',
+    54 => 'Selecione os tópicos e autores que você <b>não</b> quer ver.',
+    55 => 'Se você deixar todos desmarcados, subentende-se que você deseja a seleção padrão. Se você iniciar a seleção, lembre-se de selecionar todos os que você deseja, pois a seleção padrão será ignorada. Entradas padrão são exibidas em <b>negrito</b>.',
+    56 => 'Autores',
+    57 => 'Modo de Exibição',
+    58 => 'Ordenar por',
+    59 => 'Limite de Comentários',
+    60 => 'Como você prefere que os comentários sejam exibidos?',
+    61 => 'Novos ou antigos primeiro?',
+    62 => 'O padrão é 100',
+    63 => "Sua senha foi enviada. Por favor, siga as instruções constantes no e-mail. Obrigado por participar do {$_CONF['site_name']}",
+    64 => 'Preferências Atuais para',
+    65 => 'Tente Entrar novamente',
+    66 => "Você cometeu um erro ao preencher os campos. Por favor, tente efetuar o login novamente. Você é um <a href=\"{$_CONF['site_url']}/users.php?mode=new\">novo usuário</a>?",
+    67 => 'Membro Desde',
+    68 => 'Lembrar de mim por',
+    69 => 'Por quanto tempo você deseja ser lembrado após efetuar o login?',
+    70 => "Personalize o layout e o conteúdo do {$_CONF['site_name']}",
+    71 => "Uma das características do {$_CONF['site_name']} é a possibilidade poder personalizar todo o seu conteúdo e alterar o layout do site. Para poder usufruir destas vantagens você precisa<a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrar-se</a> no {$_CONF['site_name']}.  Você já é um membro? Efetue o login!",
+    72 => 'Tema',
+    73 => 'Idioma',
+    74 => 'Muda a aparência de todo o site!',
+    75 => 'Tópicos enviados por e-mail para',
+    76 => 'Se você selecionar um tópico da lista abaixo, você receberá toda e qualquer nova publicação que for enviada para cada tópico escolhido, em geral no final de cada dia. Escolha SOMENTE os tópicos que realmente interessam para você!',
+    77 => 'Foto',
+    78 => 'Adicione a sua Foto!',
+    79 => 'Marque aqui para apagar esta foto',
+    80 => 'Login',
+    81 => 'Envia E-mail',
+    82 => 'Últimas 10 publicações para o usuário',
+    83 => 'Estatísticas de Envios para o usuário',
+    84 => 'Número total de publicações:',
+    85 => 'Número total de comentários:',
+    86 => 'Encontra todos os Envios postados por',
+    87 => 'Seu nome de Login',
+    88 => "Alguém (provavelmente você) requisitou uma nova senha para a sua conta \"%s\" no site {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSe você realmente quer obter uma nova senha, por favor clique no seguinte link:\n\n",
+    89 => "Se você NÃO quer uma nova senha, simplesmente ignore esta mensagem. O pedido NÃO será processado (e sua senha permanecerá inalterada).\n\n",
+    90 => 'Você pode entrar com uma nova senha para a sua conta, logo abaixo. Por favor observe que sua antiga senha será válida até que você submeta este formulário com sucesso.',
+    91 => 'Define Nova Senha',
+    92 => 'Entra com Nova Senha',
+    93 => 'Seu último pedido para uma nova senha foi feito %d segundos atrás. Este site requer pelo menos %d segundos de intervalo entre pedidos de novas senhas.',
+    94 => 'Apaga a Conta "%s"',
+    95 => 'Clique no botão abaixo "Apaga a Conta" para remover sua conta de nosso banco de dados. Por favor observe que quaisquer publicações e comentários enviados através desta conta  <strong>NÃO</strong> serão apagados e serão mostrados como se tivessem sido postados por  "Anônimos".',
+    96 => 'apaga conta',
+    97 => 'Confirmação de Apagar a Conta',
+    98 => 'Tem certeza que quer apagar sua conta? Depois disso, você não conseguirá entrar neste site novamente (a menos que crie uma nova conta). Se você tem certeza, clique em  "apaga conta" novamente no formulário abaixo.',
+    99 => 'Opções de Privacidade para',
+    100 => 'E-mail da Administração',
+    101 => 'Permite e-mail da Administração do Site',
+    102 => 'E-mail de Usuários',
+    103 => 'Permite e-mail vindos de outros usuários',
+    104 => 'Mostra seu Status on-line',
+    105 => 'aparece no bloco Quem está on-line',
+    106 => 'Localidade',
+    107 => 'Mostra no seu perfil público',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Sem notícias para exibir',
+    2 => 'Não há novas publicações para exibir. Talvez não haja novidades para este tópico ou suas preferências de exibição são muito restritivas.',
+    3 => 'para o Tópico %s',
+    4 => 'Artigo de Hoje',
+    5 => 'Próximo',
+    6 => 'Anterior',
+    7 => 'Primeiro',
+    8 => 'Último'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Houve um erro ao enviar sua mensagem. Por favor, tente novamente.',
+    2 => 'Mensagem enviada.',
+    3 => 'Por favor utilize um endereço de e-mail válido no campo de Reply.',
+    4 => 'Por favor, preencha os campos Seu Nome, Responder para, Assunto e Mensagem',
+    5 => 'Erro: Usuário desconhecido.',
+    6 => 'Há um erro.',
+    7 => 'Perfil de Usuário para',
+    8 => 'ID',
+    9 => 'URL',
+    10 => 'Enviar e-mail para',
+    11 => 'Seu Nome:',
+    12 => 'Responder:',
+    13 => 'Assunto:',
+    14 => 'Mensagem:',
+    15 => 'HTML não será traduzido.',
+    16 => 'Enviar Mensagem',
+    17 => 'Enviar Publicação para um Amigo',
+    18 => 'Nome',
+    19 => 'E-mail',
+    20 => 'Seu Nome',
+    21 => 'Seu E-mail',
+    22 => 'Todos os campos são requeridos',
+    23 => "Este e-mail foi enviado a você por %s em %s pois ele acha que você pode se interessar por um artigo no {$_CONF['site_url']}.  Isto não é um SPAM e os endereços de e-mail envolvidos não são exibidos ou guardados para uso posterior.",
+    24 => 'Comentários sobre esta publicação em',
+    25 => 'Você precisa efetuar o login para utilizar este recurso. Ao efetuar o login, você nos ajuda a prevenir o mal-uso do sistema',
+    26 => 'Este formulário permite a você enviar um e-mail para o usuário selecionado. Todos os campos são obrigatórios.',
+    27 => 'Apresentação',
+    28 => '%s escreveu: ',
+    29 => "Este é o resumo diário do {$_CONF['site_name']} para ",
+    30 => ' Resumo Diário ',
+    31 => 'Título',
+    32 => 'Data',
+    33 => 'Leia o artigo na íntegra em ',
+    34 => 'Fim da Mensagem',
+    35 => 'Desculpe-nos, mas este usuário definiu em suas preferências que não quer receber e-mails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Busca Avançada',
+    2 => 'Palavras-chave',
+    3 => 'Tópico',
+    4 => 'Todos',
+    5 => 'Tipo',
+    6 => 'Publicações',
+    7 => 'Comentários',
+    8 => 'Autores',
+    9 => 'Todos',
+    10 => 'Buscar',
+    11 => 'Resultados da Busca',
+    12 => 'correspondências',
+    13 => 'Resultado da Busca: nenhuma correspondência',
+    14 => 'Não há correspondência para sua busca em',
+    15 => 'Por favor, tente novamente.',
+    16 => 'Título',
+    17 => 'Data',
+    18 => 'Autor',
+    19 => "Pesquisar em toda a Base de Dados do {$_CONF['site_name']} ",
+    20 => 'Data',
+    21 => 'para',
+    22 => '(Formato de Data MM-DD-AAAA)',
+    23 => 'Leituras',
+    24 => 'Encontrou',
+    25 => 'correspondências para',
+    26 => 'itens em',
+    27 => 'segundos',
+    28 => 'Nenhuma publicação ou comentário correspondente foi encontrado',
+    29 => 'Resultados: Publicações e Comentários',
+    30 => 'Nenhum link combinou com a sua pesquisa',
+    31 => 'Nenhum plugin combinou com sua pesquisa',
+    32 => 'Evento',
+    33 => 'URL',
+    34 => 'Localidade',
+    35 => 'Dia inteiro',
+    36 => 'Nenhum evento combinou com sua pesquisa',
+    37 => 'Resultado da Pesquisa de Eventos',
+    38 => 'Resultado da Pesquisa de Links',
+    39 => 'Links',
+    40 => 'Eventos',
+    41 => 'Sua palavra de pesquisa deve ter no mínimo 3 caracteres.',
+    42 => 'Por favor utilize a data formatada como YYYY-MM-DD (ano-mês-dia).',
+    43 => 'frase exata',
+    44 => 'todas estas palavras',
+    45 => 'qualquer uma destas palavras',
+    46 => 'Próximo',
+    47 => 'Prévio',
+    48 => 'Autor',
+    49 => 'Data',
+    50 => 'Leituras',
+    51 => 'Link',
+    52 => 'Localidade',
+    53 => 'Resultado da Pesquisa de Publicações',
+    54 => 'Resultado da Pesquisa de Comentários',
+    55 => 'e a frase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Estatísticas do Site',
+    2 => 'Total de Hits no Sistema',
+    3 => 'Publicações(Comentários) no Sistema',
+    4 => 'Enquetes(Respostas) no Sistema',
+    5 => 'Links(Cliques) no Sistema',
+    6 => 'Eventos no Sistema',
+    7 => '10 Publicações Mais Lidas',
+    8 => 'Título',
+    9 => 'Visualizações',
+    10 => 'Aparentemente não há publicações neste site ou ninguém leu as que foram publicadas.',
+    11 => '10 Publicações Mais Comentadas',
+    12 => 'Comentários',
+    13 => 'Aparentemente não há publicações neste site ou ninguém comentou as que foram publicadas.',
+    14 => '10 Enquetes Mais Votadas',
+    15 => 'Pergunta',
+    16 => 'Votos',
+    17 => 'Aparentemente não há enquetes neste site ou ninguém votou nas existentes.',
+    18 => 'Top 10 - Links',
+    19 => 'Links',
+    20 => 'Hits',
+    21 => 'Aparentemente não há links neste site ou ninguém clicou nos existentes.',
+    22 => 'Top 10 - Publicações Recomendadas via e-mail',
+    23 => 'E-mails',
+    24 => 'Aparentemente ninguém enviou uma publicação via e-mail neste site',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relacionado',
+    2 => 'Enviar para um Amigo',
+    3 => 'Versão para Impressão',
+    4 => 'Opções da Publicação',
+    5 => 'Formato de Publicação PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Para enviar uma %s você precisa efetuar o login.',
+    2 => 'Login',
+    3 => 'Novo Usuário',
+    4 => 'Enviar um Evento',
+    5 => 'Enviar um Link',
+    6 => 'Enviar uma Publicação',
+    7 => 'Login é Requerido',
+    8 => 'OK',
+    9 => 'Ao enviar informações para utilização neste site nós solicitamos a você que siga as seguintes recomendações...<ul><li>Preencha todos os campos, eles são obrigatórios<li>Forneça informações completas e apuradas<li>Verifique as URLs</ul>',
+    10 => 'Título',
+    11 => 'Link',
+    12 => 'Data de Início',
+    13 => 'Data de Término',
+    14 => 'Local',
+    15 => 'Descrição',
+    16 => 'Se outra, especifique',
+    17 => 'Categoria',
+    18 => 'Outra',
+    19 => 'Leia Primeiro',
+    20 => 'Erro: Faltando Categoria',
+    21 => 'Ao selecionar "Outra" favor indicar um nome',
+    22 => 'Erro: Campos em branco',
+    23 => 'Por favor, preencha todos os campos do formulário. Todos os campos são obrigatórios.',
+    24 => 'Sugestão recebida',
+    25 => 'Sua sugestão de %s foi arquivada com sucesso.',
+    26 => 'Limite de Velocidade',
+    27 => 'Usuário',
+    28 => 'Tópico',
+    29 => 'Publicação',
+    30 => 'Sua última sugestão foi enviada há ',
+    31 => " segundos. Este site requer pelo menos {$_CONF['speedlimit']} segundos entre o envio de uma mensagem e outra",
+    32 => 'Pré-vê',
+    33 => 'Pré-vê a Publicação',
+    34 => 'Sair',
+    35 => 'Tags HTML não são permitidas',
+    36 => 'Modo',
+    37 => "Sugerindo um evento ao {$_CONF['site_name']} irá incluí-lo no Calendário Principal, onde os usuários poderão adicioná-lo aos seus Calendários Pessoais. Este recurso <b>NÃO</b> permite a você arquivar seus eventos pessoais como aniversários e celebrações.<br><br>Uma vez enviado, seu evento será remetido ao nosso administrador para verificação, e caso o mesmo seja aprovado, será incluído no Calendário Principal.",
+    38 => 'Adicionar Evento ao',
+    39 => 'Calendário Principal',
+    40 => 'Calendário Pessoal',
+    41 => 'Início',
+    42 => 'Término',
+    43 => 'Evento Diário',
+    44 => 'Endereço',
+    45 => 'continuação',
+    46 => 'Cidade/Distrito',
+    47 => 'Estado',
+    48 => 'CEP',
+    49 => 'Tipo de Evento',
+    50 => 'Editar Tipos de Eventos',
+    51 => 'Local',
+    52 => 'Excluir',
+    53 => 'Criar Conta'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autenticação Requerida',
+    2 => 'Negado! Informações de Login Incorretas',
+    3 => 'Senha inválida para o usuário',
+    4 => 'Usuário:',
+    5 => 'Senha:',
+    6 => 'Todos os acessos à área administrativa deste site são monitorados e revisados.<br>Esta página é para uso exclusivo das pessoas autorizadas.',
+    7 => 'entrar'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Direitos Insuficientes',
+    2 => 'Você não tem permissão para editar este bloco.',
+    3 => 'Editor de Blocos',
+    4 => 'Houve um problema de leitura com este RSS/feed (veja arquivo error.log para saber detalhes).',
+    5 => 'Título',
+    6 => 'Tópico',
+    7 => 'Todos',
+    8 => 'Nível de Acesso',
+    9 => 'Ordem',
+    10 => 'Tipo',
+    11 => 'Portal',
+    12 => 'Normal',
+    13 => 'Opções - Portal',
+    14 => 'RDF URL',
+    15 => 'Última Atualização RDF',
+    16 => 'Opções - Normal',
+    17 => 'Conteúdo',
+    18 => 'Por favor, preencha os campos Título, Nível de Segurança e Conteúdo',
+    19 => 'Gerenciador de Blocos',
+    20 => 'Título',
+    21 => 'Nível de Segurança',
+    22 => 'Tipo',
+    23 => 'Ordem',
+    24 => 'Tópico',
+    25 => 'Para modificar ou excluir um bloco, clique no bloco abaixo. Para criar um bloco, clique em Novo Bloco.',
+    26 => 'Layout',
+    27 => 'Bloco PHP',
+    28 => 'Opções Bloco PHP',
+    29 => 'Função do Bloco',
+    30 => 'Se você quiser ter um dos seus blocos usando código PHP, entre com o nome da função acima.  O nome da sua função DEVE começar com o prefixo "phpblock_" (p.e. phpblock_getweather).  Se sua função NÃO tiver este prefixo, ela NÃO será chamada pelo programa.  Fizemos isto para evitar que sejam utilizadas funções que podem ser perigosas para o sistema.  Esteja certo de colocar um parênteses "()" logo depois do nome da sua função.  Finalmente, recomendamos que você SEMPRE  coloque todo o seu código de BLOCOS PHP dentro do arquivo  custom_code.php.  Isto permitirá que SEU código seja preservado quando você fizer o UPGRADE para uma nova versão do Geeklog.',
+    31 => 'Erro no Bloco PHP. A função , %s, não existe.',
+    32 => 'Erro, Faltando Campo(s)',
+    33 => 'Você DEVE entrar com a URL para o arquivo .rdf para os blocos do portal',
+    34 => 'Você DEVE entrar com o título E a função para os blocos PHP',
+    35 => 'Você DEVE entrar com o título E o conteúdo para os blocos normais',
+    36 => 'Você DEVE entrar com o conteúdo para os blocos de layout',
+    37 => 'Nome de função Errado para o bloco de PHP',
+    38 => 'Funções para Blocos PHP Blocks DEVEM ter o prefixo \'phpblock_\' (p.e. phpblock_getweather).  O prefixo \'phpblock_\' prefix é requerido por razões de segurança, evitando a execução de códigos arbitrários.',
+    39 => 'Lado',
+    40 => 'Esquerdo',
+    41 => 'Direito',
+    42 => 'Você DEVE entrar com a ordem do bloco e com o nível de segurança para os blocos padrão do Geeklog',
+    43 => 'Somente na Página Inicial',
+    44 => 'Acesso Negado',
+    45 => "Você está tentando acessar um bloco para o qual não tem autorização.  Esta tentativa foi registrada. Favor <a href=\"{$_CONF['site_admin_url']}/block.php\">retorna para a tela de Administração de Blocos</a>.",
+    46 => 'Novo Bloco',
+    47 => 'Administração',
+    48 => 'Nome',
+    49 => ' (sem espaços e único)',
+    50 => 'URL do Arquivo de Ajuda',
+    51 => 'inclua http://',
+    52 => 'Se você deixar em branco, o ícone de ajuda para este bloco não será exibido',
+    53 => 'Habilitado',
+    54 => 'salva',
+    55 => 'cancela',
+    56 => 'apaga',
+    57 => 'Move Bloco para Baixo',
+    58 => 'Move Bloco para Cima',
+    59 => 'Move bloco para Lado Direito',
+    60 => 'Move bloco para Lado Esquerdo',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor de Eventos',
+    2 => 'Error',
+    3 => 'Título',
+    4 => 'URL',
+    5 => 'Início',
+    6 => 'Término',
+    7 => 'Local',
+    8 => 'Descrição',
+    9 => '(incluir http://)',
+    10 => 'Você deve preencher todos os campos deste formulário!',
+    11 => 'Gerenciador de Eventos',
+    12 => 'Para modificar ou apagar um evento, clique no respectivo evento abaixo.  Para criar um novo evento, clique em Novo Evento, acima.',
+    13 => 'Título',
+    14 => 'Início',
+    15 => 'Término',
+    16 => 'Acesso Negado',
+    17 => "Você está acessando um evento para o qual não tem autorização.  Esta tentativa foi registrada. Por favor <a href=\"{$_CONF['site_admin_url']}/event.php\">retorne para a tela de Administração de Eventos</a>.",
+    18 => 'Novo Evento',
+    19 => 'Administração',
+    20 => 'salva',
+    21 => 'cancela',
+    22 => 'apaga',
+    23 => 'Data de início incorreta.',
+    24 => 'Data final incorreta.',
+    25 => 'Data Final é menor que Data Inicial.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Publicações Anteriores',
+    2 => 'Próximas Publicações',
+    3 => 'Modo',
+    4 => 'Formatação',
+    5 => 'Editor de Publicações',
+    6 => 'Não há publicações no sistema',
+    7 => 'Autor',
+    8 => 'salva',
+    9 => 'pré-ver',
+    10 => 'cancela',
+    11 => 'apaga',
+    12 => 'ID',
+    13 => 'Título',
+    14 => 'Tópico',
+    15 => 'Data',
+    16 => 'Introdução',
+    17 => 'Texto/Conteúdo',
+    18 => 'Leituras',
+    19 => 'Comentários',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Lista de Publicações',
+    23 => 'Para modificar ou apagar uma publicação, clique no número da publicação abaixo. Para ler uma publicação, clique no título da mesma. Para criar uma publicação nova, clique em Nova Publicação, acima.',
+    24 => 'O número de identificação - ID - que você escolheu para esta publicação já está em uso. Por favor escolha um outro número de identificação - ID.',
+    25 => 'Error when saving story',
+    26 => 'Prevê',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Erros no Upload de arquivos',
+    31 => 'Por favor preencha os campos Autor, Título and e Texto de Introdução',
+    32 => 'Publicação do Dia',
+    33 => 'Só pode haver uma única Publicação do Dia',
+    34 => 'Rascunho',
+    35 => 'Sim',
+    36 => 'Não',
+    37 => 'Mais por',
+    38 => 'Mais de',
+    39 => 'E-mails',
+    40 => 'Acesso Negado ',
+    41 => "Você está tentando acessar uma publicação para a qual você não tem autorização.  Sua tentativa foi registrada.  Você pode ler esta publicação, mas não pode editar, clicando abaixo. Por favor <a href=\"{$_CONF['site_admin_url']}/story.php\">retorne para a tela de Administração de Publicações</a> quando estiver pronto.",
+    42 => "Você está tentando acessar uma publicação para a qual não tem autorização. Esta tentativa foi registrada.  Por favor <a href=\"{$_CONF['site_admin_url']}/story.php\">retorne para a tela de Administração de Publicações.</a>.",
+    43 => 'Nova Publicação',
+    44 => 'Administração',
+    45 => 'Acesso',
+    46 => '<b>NOTE:</b> se você modificar esta data de forma que ela fique no futuro, esta publicação não aparecerá até o início dessa data futura.  Isto também significa que esta publicação não será incluída nos arquivos de assinatura RDF e que será ignorado nas páginas de pesquisa e de estatísticas.',
+    47 => 'Imagens',
+    48 => 'imagem',
+    49 => 'LEFT',
+    50 => 'RIGHT',
+    51 => 'Para adicionar uma das imagens que você está anexando a este artigo (publicação) , você tem de inserir (no texto) um pequeno texto especialmente formatado. Este texto formatado deve ser [imageX], [imageX_right] ou [imageX_left] (com os colchetes) onde X é o número da imagem que você está anexando.  NOTA: Você DEVE usar as imagens que você anexa. Se você NÃO fizer isso, NÃO conseguirá salvar a sua publicação.<BR><P><B>PREVENDO A PUBLICAÇÃO</B>: Se você quiser pré-ver uma publicação com imagens anexadas, a melhor prática é salvar a publicação como RASCUNHO ao invés de usar o botão Pré-ver. Somente use o botão de pré-ver quando NÃO tiver imagens anexadas.',
+    52 => 'Apaga',
+    53 => 'não foi utilizada.  Você DEVE incluir esta imagem na introdução ou no corpo da publicação ANTES de salvar suas alterações',
+    54 => 'Imagens Anexadas não Utilizadas',
+    55 => 'Os seguintes erros ocorreram enquanto sua publicação estava sendo salva. Por favor corrija esse erros antes de salvar novamente.',
+    56 => 'Mostra Ícone do Tópico',
+    57 => 'Vê imagem sem escala',
+    58 => 'Gerenciamento de Publicações',
+    59 => 'Opção',
+    60 => 'Permitido',
+    61 => 'Auto Arquiva',
+    62 => 'Auto Apaga',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor de Tópicos',
+    2 => 'ID',
+    3 => 'Nome',
+    4 => 'Imagem',
+    5 => '(não use espaços)',
+    6 => 'Ao apagar um tópico, são apagados todas as publicações e blocos associados a esse tópico',
+    7 => 'Por favor, preencha os campos ID e Nome do Tópico',
+    8 => 'Gerenciador de Tópicos',
+    9 => 'Para modificar ou apagar um tópico, clique sobre o nome do tópico.  Para criar um novo tópico, clique no botar Criar Novo Tópico à esquerda. Você irá ver o seu nível de acesso para cada tópico dentro de parênteses',
+    10 => 'Ordem de Exibição',
+    11 => 'Publicações/Página',
+    12 => 'Acesso Negado',
+    13 => "Você está tentando acessar um tópico para o qual não tem autorização. Sua tentativa foi registrada. Por favor <a href=\"{$_CONF['site_admin_url']}/topic.php\">retorne para a tela de Administração de Tópicos</a>.",
+    14 => 'Ordem',
+    15 => 'alfabética',
+    16 => 'o padrão é',
+    17 => 'Novo Tópico',
+    18 => 'Administração',
+    19 => 'salva',
+    20 => 'cancela',
+    21 => 'apaga',
+    22 => 'Padrão',
+    23 => 'faça deste o tópico padrão para novas submissões de publicações',
+    24 => '(*)',
+    25 => 'Arquiva Tópico',
+    26 => 'faça deste o tópico padrão para publicações arquivadas. Somente um tópico é permitido.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor de Usuários',
+    2 => 'ID',
+    3 => 'Nome de Usuário',
+    4 => 'Nome Completo',
+    5 => 'Senha',
+    6 => 'Nível de Segurança',
+    7 => 'E-mail',
+    8 => 'Homepage',
+    9 => '(não use espaços)',
+    10 => 'Por favor preencha os campos Nome de Usuário, Nome Completo, Nível de Segurança e E-mail',
+    11 => 'Gerenciador de Usuários',
+    12 => 'Para modificar ou apagar um usuário, clique sobre o usuário abaixo. Para criar um novo usuário, clique no botão Novo Usuário à esquerda.',
+    13 => 'Nível de Acesso',
+    14 => 'Data Registro.',
+    15 => 'Novo Usuário',
+    16 => 'Administração',
+    17 => 'alterar senha',
+    18 => 'cancelar',
+    19 => 'excluir',
+    20 => 'salvar',
+    21 => 'O nome de usuário que você está tentando usar já existe.',
+    22 => 'Erro',
+    23 => 'Adiciona Lote (Batch)',
+    24 => 'Importação de Usuários em Lote (Batch)',
+    25 => 'Você pode importar um lote (batch) de usuários no Geeklog.  O arquivo de importação DEVE ser um arquivo TEXTO, delimitado por tab (tabulador) e conter os seguintes campos na seguinte ordem: : nome completo, nome de usuário, endereço de e-mail.  Cada usuário que você importar receberá uma senha, criada de forma aleatória.  Você deve ter apenas um usuário por linha de entrada. Falhas ao seguir estas instruções irão causar problemas sérios, que irão requerer trabalho manual. Por isso, faça uma dupla verificação de tudo antes de fazer a importação!',
+    26 => 'Pesquisa',
+    27 => 'Limita Resultados',
+    28 => 'Clique aqui para apagar esta imagem',
+    29 => 'Path',
+    30 => 'Importa',
+    31 => 'Novos Usuários',
+    32 => 'Processamento realizado. Foram feitas %d importações e encontradas %d falhas',
+    33 => 'envia',
+    34 => 'Erro: Você deve especificar um arquivo para upload.',
+    35 => 'Último Login',
+    36 => '(nunca)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Aprovar',
+    2 => 'Excluir',
+    3 => 'Editar',
+    4 => 'Perfil',
+    10 => 'Título',
+    11 => 'Data de Início',
+    12 => 'URL',
+    13 => 'Categoria',
+    14 => 'Data',
+    15 => 'Tópico',
+    16 => 'Nome de usuário',
+    17 => 'Nome Completo',
+    18 => 'E-mail',
+    34 => 'Comando e Controle',
+    35 => 'Submissões de Publicações',
+    36 => 'Submissões de Links',
+    37 => 'Submissões de Eventos',
+    38 => 'Enviar',
+    39 => 'Não há submissões a serem moderadas agora',
+    40 => 'Submissões de Usuários'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Domingo',
+    2 => 'Segunda',
+    3 => 'Terça',
+    4 => 'Quarta',
+    5 => 'Quinta',
+    6 => 'Sexta',
+    7 => 'Sábado',
+    8 => 'Adicionar Evento',
+    9 => 'Evento do Site',
+    10 => 'Eventos para',
+    11 => 'Calendário Principal',
+    12 => 'Meu Calendário',
+    13 => 'Janeiro',
+    14 => 'Fevereiro',
+    15 => 'Março',
+    16 => 'Abril',
+    17 => 'Maio',
+    18 => 'Junho',
+    19 => 'Julho',
+    20 => 'Agosto',
+    21 => 'Setembro',
+    22 => 'Outubro',
+    23 => 'Novembro',
+    24 => 'Dezembro',
+    25 => 'Volta para ',
+    26 => 'Todos os Dias',
+    27 => 'Semanal',
+    28 => 'Calendário Pessoal de',
+    29 => 'Calendário Público',
+    30 => 'excluir evento',
+    31 => 'Adicionar',
+    32 => 'Evento',
+    33 => 'Data',
+    34 => 'Hora',
+    35 => 'Adição Rápida',
+    36 => 'Enviar',
+    37 => 'Lamentamos, mas o Calendário Pessoal não está habilitado neste site',
+    38 => 'Editor de Eventos Pessoais',
+    39 => 'Dia',
+    40 => 'Semana',
+    41 => 'Mês'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => 'Mail',
+    2 => 'De',
+    3 => 'Responder para',
+    4 => 'Assunto',
+    5 => 'Conteúdo',
+    6 => 'Enviar para:',
+    7 => 'Todos os Usuários',
+    8 => 'Administrador',
+    9 => 'Opções',
+    10 => 'HTML',
+    11 => 'Mensagem Urgente!',
+    12 => 'Enviado',
+    13 => 'Limpa',
+    14 => 'Ignorar preferências do usuário ',
+    15 => 'Erro ao enviar para: ',
+    16 => 'Mensagens enviadas para: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar outra mensagem</a>",
+    18 => 'Para',
+    19 => 'NOTA: se você pretende mandar uma mensagem para todos os membros do site, selecione o grupo de usuários Logged-in no menu de seleção.',
+    20 => "Foram enviadas com sucesso <successcount> mensagens and <failcount> mensagens apresentaram falha.  Se você precisar, os detalhes de cada mensagem é mostrado abaixo.  Caso necessário você pode <a href=\"{$_CONF['site_admin_url']}/mail.php\">Enviar outra mensagem</a> ou então você pode <a href=\"{$_CONF['site_admin_url']}/moderation.php\">retornar à página de administração</a>.",
+    21 => 'Falhas',
+    22 => 'Sucessos',
+    23 => 'Sem falhas',
+    24 => 'Sem sucessos',
+    25 => '-- Selecione Grupo --',
+    26 => 'Por favor preencha os campos no formulário e selecione um grupo de usuários no menu.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'A instalação de plugins pode causar danos à sua instalação padrão do Geeklog e, possivelmente, até para seu sistema.  Por isso é importante que você só instale plugins que foram baixados de <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a>, uma vez que nós testamos todos os plugins enviados para o site em uma variedade de sistemas operacionais.  É importante que você compreenda que o processo de instalação de um plugin irá requerer a execução de alguns comandos de arquivos de sistema - que podem causar problemas de segurança especialmente se você utilizar plugins de outros sites. Mesmo que você tome todos os cuidados que estamos propondo, nós não podemos garantir o sucesso de qualquer instalação e nem podemos nos responsabilizar por quaisquer danos causados na instalação de um Plugin Geeklog.  Em outras palavras, todo o risco de qualquer instalação é seu. Sempre siga as indicações de como instalar manualmente um plugin. Estas instruções sempre vem no pacote de cada instalação.',
+    2 => 'Plug-in Disclaimer de Instalação',
+    3 => 'Plug-in Formulário de Instalação',
+    4 => 'Arquivo Plug-in',
+    5 => 'Lista de Plugins',
+    6 => 'Atenção: Plug-in já instalado!',
+    7 => 'O plug-in que você está tentando instalar já existe. Remova-o antes de reinstalá-lo',
+    8 => 'Houve uma falha durante a verificação de compatibilidade do Plugin',
+    9 => 'Este plugin requer uma nova versão do Geeklog. Procure fazer uma atualização da sua cópia do<a href=http://www.geeklog.net>Geeklog</a>  e ou busque uma nova versão do plugin.',
+    10 => '<br><b>Não há plugins instalados atualmente.</b><br><br>',
+    11 => 'Para modificar ou apagar um plug-in, clique no número do plug-in abaixo. Para aprender mais sobre o plug-in, clique no nome do plug-in e você será direcionado para o site do plug-in. Para instalar ou atualizar um plug-in , clique em Novo Plug-in acima.',
+    12 => 'nenhum nome de plugin foi fornecido para o plugineditor()',
+    13 => 'Editor de Plugins',
+    14 => 'Novo Plug-in',
+    15 => 'Administração',
+    16 => 'Nome',
+    17 => 'Versão',
+    18 => 'Versão Geeklog',
+    19 => 'Habilitado',
+    20 => 'Sim',
+    21 => 'Não',
+    22 => 'Instalar',
+    23 => 'Salvar',
+    24 => 'Cancelar',
+    25 => 'Excluir',
+    26 => 'Nome',
+    27 => 'Homepage',
+    28 => 'Versão',
+    29 => 'Versão Geeklog',
+    30 => 'Excluir Plug-in?',
+    31 => 'Tem certeza que quer apagar este plug-in?  Ao fazer isso você vai remover todos os arquivos, dados e estruturas de dados que este plug-in utiliza.  Se você tem certeza, clique em Apaga novamente no formulário a seguir.',
+    32 => '<p><b>Erro: tag AutoLink não está no formato correto</b></p>',
+    33 => 'Versão do Código',
+    34 => 'Atualiza',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'cria novo feed',
+    2 => 'salva',
+    3 => 'apaga',
+    4 => 'cancela',
+    10 => 'Assinatura de Conteúdos',
+    11 => 'Novo Feed',
+    12 => 'Home Administrativa',
+    13 => 'Para modificar ou apagar um feed, clique no título do feed, abaixo. Para criar um novo feed, clique em Novo Feed, acima.',
+    14 => 'Título',
+    15 => 'Tipo',
+    16 => 'Nome do Arquivo',
+    17 => 'Formato',
+    18 => 'última atualização',
+    19 => 'Permitido',
+    20 => 'Sim',
+    21 => 'Não',
+    22 => '<i>(sem feeds)</i>',
+    23 => 'todas Publicações',
+    24 => 'Editor de Feed',
+    25 => 'Título do Feed',
+    26 => 'Limite',
+    27 => 'Comprimento das entradas',
+    28 => '(0 = sem texto, 1 = texto inteiro, outro número = limita a este número de caracteres.)',
+    29 => 'Descrição',
+    30 => 'Última Atualização',
+    31 => 'Set de Caracteres',
+    32 => 'Linguagem',
+    33 => 'Conteúdos',
+    34 => 'Entradas',
+    35 => 'Horas',
+    36 => 'Seleciona tipo de feed',
+    37 => 'Você tem ao menos um plugin instalado que suporta assinatura de conteúdos. Abaixo você precisará selecionar se você quer criar um feed Geeklog feed ou criar um feed através de um dos plugins.',
+    38 => 'Erro: Faltando preencher campos',
+    39 => 'Por favor preencha Título do Feed, Descrição e Nome do Arquivo.',
+    40 => 'Por favor defina um número de entradas ou um número de horas.',
+    41 => 'Links',
+    42 => 'Eventos',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Sua senha foi mandada por e-mail para você e deve chegar em breve. Por favor siga as instruções na mensagem e muito obrigado por usar o site {$_CONF['site_name']}",
+    2 => "Muito obrigado por registrar sua publicação no site {$_CONF['site_name']}.  Ela será submetida ao nosso pessoal de staff para aprovação. Se aprovada, sua publicação ficará disponível para todos os outros usuários que acessarem o nosso site.",
+    3 => "Muito obrigado por registrar um link no site {$_CONF['site_name']}.  Ele será submetido ao nosso pessoal de staff para aprovação.  Se aprovado, seu link será visto na seção de links em <a href={$_CONF['site_url']}/links.php>links</a>.",
+    4 => "Muito obrigado por inscrever um Evento no site {$_CONF['site_name']}.  Ele será submetido ao nosso pessoal de staff para aprovação.  Se aprovado, seu Evento estará em nossa seção <a href={$_CONF['site_url']}/calendar.php>Calendário</a>.",
+    5 => 'A informação de sua conta foi salva com sucesso.',
+    6 => 'Suas preferências de tela (display) foram salvas com sucesso.',
+    7 => 'Suas preferências de Comentários foram salvas com sucesso.',
+    8 => 'Seu micro foi desconectado do site com sucesso (logout).',
+    9 => 'Sua publicação foi salva com sucesso.',
+    10 => 'A publicação foi excluída com sucesso.',
+    11 => 'Seu bloco foi salvo com sucesso.',
+    12 => 'O bloco foi excluído com sucesso.',
+    13 => 'Seu tópico foi salvo com sucesso.',
+    14 => 'O tópico e todas suas publicações e blocos foram apagados com sucesso.',
+    15 => 'Seu link foi salvo com sucesso.',
+    16 => 'O link foi excluído com sucesso.',
+    17 => 'Seu evento foi incluído com sucesso.',
+    18 => 'O evento foi excluído com sucesso.',
+    19 => 'Sua enquete foi salva com sucesso.',
+    20 => 'A enquete foi excluída com sucesso.',
+    21 => 'O novo usuário foi salvo com sucesso.',
+    22 => 'O usuário foi excluído com sucesso',
+    23 => 'Erro ao tentar adicionar um Evento ao seu Calendário. Não foi informada nenhuma identidade (ID) para o evento.',
+    24 => 'O evento foi salvo com sucesso no seu calendário',
+    25 => 'Não é possível abrir seu calendário pessoal de você não efetuar seu login.',
+    26 => 'O evento foi removido com sucesso de seu calendário pessoal',
+    27 => 'Mensagem enviada com sucesso.',
+    28 => 'O plug-in foi salvo com sucesso',
+    29 => 'Lamentamos, mas calendários pessoais não estão habilitados neste site',
+    30 => 'Acesso Negado',
+    31 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Publicações.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    32 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Tópicos.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    33 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Blocos.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    34 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Links.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    35 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Eventos.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    36 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Enquetes.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    37 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Usuários.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    38 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Plugins.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    39 => 'Lamentamos, mas você não tem acesso a pagina de Administração de Mail.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    40 => 'Mensagem do Sistema',
+    41 => 'Lamentamos, mas você não tem acesso à página de substituição de palavras.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    42 => 'Sua palavra foi registrada com sucesso.',
+    43 => 'A palavra foi excluída com sucesso.',
+    44 => 'O plug-in foi instalado com sucesso!',
+    45 => 'O plug-in foi excluído com sucesso.',
+    46 => 'Lamentamos, mas você não tem acesso ao utilitário de backup do banco de dados.  Por favor note que todas as tentativas de acesso não autorizado ficam registradas.',
+    47 => 'Esta funcionalidade só opera em sistemas do padrão *nix.  Se você estiver rodando  *nix como seu sistema operacional, então o seu cachê foi limpo com sucesso. Se você roda em Windows, você precisará pesquisar os arquivos com nome adodb_*.php and removê-los manualmente.',
+    48 => "Muito obrigado por se inscrever como membro do site {$_CONF['site_name']}. Nossa equipe irá revisar a sua inscrição. Se aprovada, sua senha será enviada por e-mail para o endereço com o qual você se registrou.",
+    49 => 'Seu grupo foi salvo com sucesso.',
+    50 => 'Seu grupo foi apagado com sucesso.',
+    51 => 'Este nome de usuário já está sendo usado por outra pessoa. Por favor escolha um outro.',
+    52 => 'O endereço de e-mail fornecido não parece ser um endereço de e-mail válido.',
+    53 => 'Sua nova senha foi aceita. Por favor utilize a nova senha abaixo para fazer o login agora.',
+    54 => 'Seu pedido de uma nova senha expirou. Por favor tente novamente abaixo.',
+    55 => 'Um e-mail foi enviado para você e deve chegar em breve. Por favor siga as instruções nele contidas para definir uma nova senha para a sua conta.',
+    56 => 'O endereço de e-mail fornecido já está em uso por outra pessoa.',
+    57 => 'Sua conta foi apagada com sucesso.',
+    58 => 'Seu feed foi salvo com sucesso.',
+    59 => 'Seu feed foi apagado com sucesso.',
+    60 => 'O plugin foi atualizado com sucesso',
+    61 => 'Plugin %s: mensagem de local desconhecido',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Acesso',
+    'ownerroot' => 'Proprietário/Raiz',
+    'group' => 'Grupo ',
+    'readonly' => 'Somente Leitura',
+    'accessrights' => 'Direito de Acesso',
+    'owner' => 'Proprietário ',
+    'grantgrouplabel' => 'Concede Direitos de Edição para o Grupo Acima',
+    'permmsg' => 'NOTA: Membros equivale a todos usuários que estão plugados com login no momento e Anônimos equivale a todos usuários que estão navegando no site no momento mas NÃO fizeram seu login.',
+    'securitygroups' => 'Grupos de Segurança',
+    'editrootmsg' => "Mesmo que você seja um Usuário Administrador, você não pode editar um usuário raiz se você mesmo também não for um usuário raiz. Você pode editar todos os outros usuários, exceto usuários da raiz. Por favor note que todas tentativas ilegais de tentar editar usuário raiz ficam registradas. Por favor retorne para a <a href=\"{$_CONF['site_admin_url']}/user.php\">página de Administração de Usuários</a>.",
+    'securitygroupsmsg' => 'Selecione os checkboxes para os grupos que você quer que o usuário venha a pertencer.',
+    'groupeditor' => 'Editor de Grupos',
+    'description' => 'Descrição',
+    'name' => 'Nome',
+    'rights' => 'Direitos',
+    'missingfields' => 'Campos Faltantes',
+    'missingfieldsmsg' => 'Você DEVE fornecer o Nome e a Descrição para um grupo',
+    'groupmanager' => 'Gerenciador de Grupos',
+    'newgroupmsg' => 'Para modificar ou apagar um grupo, clique no grupo abaixo. Para criar um novo grupo, clique em Novo Grupo, acima. Por favor note que os grupos que são core groups - e não podem ser apagados - pois eles são usados pelo sistema.',
+    'groupname' => 'Nome',
+    'coregroup' => 'Core Group',
+    'yes' => 'Sim',
+    'no' => 'Não',
+    'corerightsdescr' => "Este grupo é um Grupo Core do site {$_CONF['site_name']}.  Desta forma, os direitos para este grupo NÃO podem ser editados.  Abaixo segue uma lista somente para leitura dos direitos que este grupo tem acesso.",
+    'groupmsg' => 'Grupos de Segurança, neste site, são hierárquicos. Ao adicionar este grupo a qualquer um dos grupos abaixo, você estará dando a este grupo os mesmos direitos que aqueles grupos têm. Encorajamos você a, sempre que for possível, usar os grupos abaixo para dar direitos a um novo grupo.  Se você depois precisar que este grupo tenha direitos específicos você pode selecionar os direitos dos diversos recursos do site na seção abaixo chamada  \'Direitos\'.  Para adicionar este grupo a qualquer um dos grupos abaixo, simplesmente marque o box próximo ao(s) grupo(s) que você quiser.',
+    'coregroupmsg' => "Este grupo é um Grupo Core do site {$_CONF['site_name']}.  Desta forma, os grupos a que este grupo pertence não podem ser editados.  Abaixo segue uma lista apenas para leitura dos grupos s que este grupo pertence.",
+    'rightsdescr' => 'O acesso de um grupo a um determinado direito, abaixo, pode ser dado diretamente para o grupo OU para um grupo diferente - a que este grupo pertença. Os que você vê abaixo sem o checkbox marcado são direitos dados a este grupo por que ele pertence a um outro grupo que já tem esses direitos. Os direitos com checkboxes, abaixo, são direitos que podem ser dados diretamente a este grupo.',
+    'lock' => 'Bloquear',
+    'members' => 'Membros',
+    'anonymous' => ' Anônimos ',
+    'permissions' => 'Permissões',
+    'permissionskey' => 'R = ler, E = editar (direito de editar pressupõe direito de ler)',
+    'edit' => 'Editar',
+    'none' => 'Nenhum',
+    'accessdenied' => 'Acesso Negado',
+    'storydenialmsg' => "Você não tem acesso para ver esta publicação.  Isto pode ocorrer porque você ainda não é membro do site {$_CONF['site_name']}.  Por favor <a href=users.php?mode=new> torne-se um membro</a> do {$_CONF['site_name']} para receber direitos plenos de acesso!",
+    'eventdenialmsg' => "Você não tem acesso para ver este evento.  Isto pode ocorrer porque você ainda não é membro do site {$_CONF['site_name']}.  Por favor <a href=users.php?mode=new> torne-se um membro</a> do {$_CONF['site_name']} para receber direitos plenos de acesso!",
+    'nogroupsforcoregroup' => 'Este grupo não pertence a qualquer um dos outros grupos',
+    'grouphasnorights' => 'Este grupo não tem acesso a quaisquer recursos de administração deste site',
+    'newgroup' => 'Novo Grupo',
+    'adminhome' => 'Administração',
+    'save' => 'salvar',
+    'cancel' => 'cancelar',
+    'delete' => 'apagar',
+    'canteditroot' => 'Você tentou editar o Grupo raiz. Mas você mesmo não pertence ao grupo raiz e, por este motivo, seu acesso não é permitido.  Por favor, contate o administrador do sistema se você acha que isto é um erro.',
+    'listusers' => 'Lista de Usuários',
+    'listthem' => 'lista',
+    'usersingroup' => 'Usuários no Grupo "%s"',
+    'usergroupadmin' => 'Administração de Usuários no Grupo',
+    'add' => 'Adiciona',
+    'remove' => 'Remove',
+    'availmembers' => 'Membros Disponíveis',
+    'groupmembers' => 'Membros do Grupo',
+    'canteditgroup' => 'Para editar este grupo, você tem de ser membro do grupo. Por favor, contate o administrador do sistema se você acha que isto é um erro.',
+    'cantlistgroup' => 'Para ver os membros deste grupo, você também tem que ser um membro deste grupo. Por favor, contate o administrador do sistema se você acha que isto é um erro.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Últimos 10 Backups',
+    'do_backup' => 'Fazer Backup',
+    'backup_successful' => 'Backup do banco de dados feito com sucesso.',
+    'db_explanation' => 'Para criar um novo backup do seu sistema Geeklog, clique o botão abaixo',
+    'not_found' => "Path (caminho) incorreto ou utilitário chamado mysqldump não está executando.<br>Verifique <strong>\$_DB_mysqldump_path</strong> - definição que está no arquivo config.php.<br>Essa variável está no momento definida como: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Falhou: tamanho do arquivo com 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} não existe ou não é um diretório",
+    'no_access' => "ERRO: Diretório {$_CONF['backup_path']} não está acessível.",
+    'backup_file' => 'Arquivo de Backup',
+    'size' => 'Tamanho',
+    'bytes' => 'Bytes',
+    'total_number' => 'Número total de backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Homepage',
+    2 => 'Contato',
+    3 => 'Publique um Artigo',
+    4 => 'Links',
+    5 => 'Enquetes',
+    6 => 'Calendário',
+    7 => 'Estatísticas do Site',
+    8 => 'Personalização do Site',
+    9 => 'Pesquisa site',
+    10 => 'pesquisa avançada',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Erro 404',
+    2 => 'Gee, travei em algum lugar mas não posso encontrar o local <b>%s</b>.',
+    3 => "<p>Lamentamos, mas o arquivo que você pediu não existe mais. Por favor fique a vontade para verificar a <a href=\"{$_CONF['site_url']}\">página principal</a> ou a <a href=\"{$_CONF['site_url']}/search.php\">página de pesquisa</a> para ver se você acha o que não encontrou."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login é requerido',
+    2 => 'Lamentamos mas, para acessar esta área você deve fazer o login como um usuário.',
+    3 => 'Login',
+    4 => 'Novo Usuário'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'O recurso de PDF está desabilitado',
+    2 => 'O documento fornecido não foi processado no formato PDF. O documento foi recebido, mas não pode ser processado. Por favor verifique se foram submetidos documentos formatados contendo somente comandos html que foram escritos para o padrão xHTML. Por favor note que documentos html muito complexos podem não processar corretamente ou simplesmente nem processarem (processo chamado de renderização). O documento resultante de sua tentativa ficou com 0 bytes de tamanho - e foi apagado. Se você tem certeza que o documento pode ser processado - renderizado - resubmeta o mesmo.',
+    3 => 'Erro desconhecido na geração do PDF',
+    4 => "Não foi fornecida uma página com dados ou você que usar a ferramenta de geração de PDF ad-hoc, abaixo.  Se você pensa que está tendo erro nesta página\n          por favor contate o administrador do sistema.  Ou então você pode usar o formulário abaixo para gerar o PDF com um aspecto ad-hoc.",
+    5 => 'Carregando seu documento.',
+    6 => 'Por favor aguarde enquanto seu documento é carregado.',
+    7 => 'Você pode dar um clique com o botão direito do mouse no botão abaixo e escolher\'Salva em...\' ou \'Salva num link...\' para salvar a copia do seu documento.',
+    8 => 'O path (caminho) fornecido no arquivo de configuração (para o arquivo binário HTMLDoc) é inválido ou o sistema não pode executá-lo. Por favor contate o administrador do site se este problema persistir.',
+    9 => 'Gerador de PDF',
+    10 => "Esta é ferramenta de Geração de PDF Ad-hoc. Ela tentará converter qualquer URL fornecida num documento PDF. Por favor fique ciente que algumas páginas não irão renderizar perfeitamente com este recurso.  Esta\n           é uma limitação da ferramenta e os erros desta natureza não devem ser reportados para o administrador do site",
+    11 => 'URL',
+    12 => 'Gerar PDF!',
+    13 => 'A configuração PHP deste servidor não permite que URLs sejam usadas com o comando  fopen().  O administrador do sistema deve editar o arquivo php.ini file e definir o parâmetro allow_url_fopen como On',
+    14 => 'O PDF que você requisitou ou não existe ou você tentou acessar este arquivo de forma ilegal.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/portuguese.php 1.4.0sr5-1/cpanel-glprivate/language/portuguese.php
--- 1.3.11sr1/cpanel-glprivate/language/portuguese.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/portuguese.php	2006-08-08 02:39:06.000000000 -0500
@@ -152,7 +152,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -319,7 +329,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -337,27 +363,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Pginas disponveis',
-    2 => 'No h pginas para mostrar.',
-    3 => 'Adicionar uma ligao'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Voto Registado',
-    2 => 'O seu voto foi registado',
-    3 => 'Voto',
-    4 => 'Votaes no sistema',
-    5 => 'Votos',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -458,7 +463,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -488,7 +497,14 @@
     21 => 'Parece que no existem links no site ou ainda nenhum deles foi visitado.',
     22 => 'Top Ten Notcias enviadas',
     23 => 'Emails',
-    24 => 'Parece que ainda no foi enviada nenhuma notcia deste site'
+    24 => 'Parece que ainda no foi enviada nenhuma notcia deste site',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -641,7 +657,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -676,35 +697,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor de ligaes',
-    2 => '',
-    3 => 'Ttulo',
-    4 => 'URL',
-    5 => 'Categoria',
-    6 => '(inclua http://)',
-    7 => 'Outra',
-    8 => 'Visitas',
-    9 => 'Descrio',
-    10 => 'Deve introduzir um ttulo, o URL e a descrio.',
-    11 => 'Manuteno de ligaes',
-    12 => 'Para modificar ou apagar uma ligao, clique na ligao a seguir.  Para inserir uma nova ligao clique em Nova Ligao.',
-    13 => 'Ttulo',
-    14 => 'Categoria',
-    15 => 'URL',
-    16 => 'Acesso no permitido',
-    17 => "Esta a tentar aceder a uma ligao para a qual no tem permisses.  Esta aco ficou registada. Por favor <a href=\"{$_CONF['site_admin_url']}/link.php\">volte ao cran de administrao de ligaes</a>.",
-    18 => 'Nova Ligao',
-    19 => 'Administrao',
-    20 => 'Se outra, especifique',
-    21 => 'guardar',
-    22 => 'cancelar',
-    23 => 'apagar'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -727,16 +719,16 @@
     17 => 'Corpo',
     18 => 'Visitas',
     19 => 'Comentrios',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Lista de notcias',
     23 => 'Para modificar ou apagar uma notcia, clique no nmero da notcia a seguir. Para ver uma notcia, clique no ttulo da notcia que pretende ver. Para introduzir uma notcia clique em Inserir notcia a seguir.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Previsualizao de notcias',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Por favor preencha os campos Autor, Ttulo e Introduo',
     32 => 'Featured',
@@ -758,7 +750,7 @@
     48 => 'imagem',
     49 => 'direita',
     50 => 'esquerda',
-    51 => 'Para adicionar uma das imagens que est a anexar a esta notcia precisa de introduzir texto com formato especial.  O formato especial do texto  [imagemX], [imagemX_direita] ou [imagemX_esquerda] onde X  o nmero da imagem que anexou.  NOTA: Deve utilizar as imagens que anexou.  Caso contrrio no poder guardar a sua notcia.<BR><P><B>PREVISUALIZAR</B>: Previsualizar uma notcia que contenha imagens deve ser efectuado guardando a notcia como rascunho EM VEZ DE seleccionar o boto de previsualizao.  Utilize o boto de previsualizao apenas quando no tiver imagens anexadas.',
+    51 => 'Para adicionar uma das imagens que est a anexar a esta notcia precisa de introduzir texto com formato especial.  O formato especial do texto  [imageX], [imageX_right] ou [imageX_left] onde X  o nmero da imagem que anexou.  NOTA: Deve utilizar as imagens que anexou.  Caso contrrio no poder guardar a sua notcia.<BR><P><B>PREVISUALIZAR</B>: Previsualizar uma notcia que contenha imagens deve ser efectuado guardando a notcia como rascunho EM VEZ DE seleccionar o boto de previsualizao.  Utilize o boto de previsualizao apenas quando no tiver imagens anexadas.',
     52 => 'Apagar',
     53 => 'no foi utilizada.  Deve incluir esta imagem na introduo ou no corpo da notcia antes de guardar as alteraes',
     54 => 'Imagens associadas e no utilizadas',
@@ -769,39 +761,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modo',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Data de criao',
-    4 => 'Votao %s guardada',
-    5 => 'Editar votao',
-    6 => 'ID da votao',
-    7 => '(no utilize espaos)',
-    8 => 'Aparece na pgina inicial',
-    9 => 'Pergunta',
-    10 => 'Respostas / Votos',
-    11 => 'Foi encontrado um erro ao carregar uma resposta da votao %s',
-    12 => 'Foi encontrado um erro ao carregar a questo da votao %s',
-    13 => 'Criar Votao',
-    14 => 'guardar',
-    15 => 'cancelar',
-    16 => 'apagar',
-    17 => 'Please enter a Poll ID',
-    18 => 'Lista de votaes',
-    19 => 'Para modificar ou apagar uma votao, clique na mesma.  Para criar uma votao nova clique em Criar votao.',
-    20 => 'Votantes',
-    21 => 'Acesso interdito',
-    22 => "Est atentar aceder a uma votao  qual no tem acesso.  Este evento foi registado. Por favor <a href=\"{$_CONF['site_admin_url']}/poll.php\">volte ao cran de administrao de votaes</a>.",
-    23 => 'Nova votao',
-    24 => 'Administrao',
-    25 => 'Sim',
-    26 => 'No'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -833,7 +816,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -875,7 +861,18 @@
     33 => 'enviar',
     34 => 'Erro: Deve especificar um ficheiro para carregar.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1020,7 +1017,11 @@
     31 => 'Tem a certeza que pretende apagar este plug-in?  Ao efectuar isto remove todos os dados e estructuras que este plug-in utiliza. Se tem a certeza, clique em apagar novamente.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1063,7 +1064,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1130,7 +1139,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1190,7 +1213,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1200,7 +1232,6 @@
     'last_ten_backups' => 'ltimas 10 cpias de segurana',
     'do_backup' => 'Fazer cpia',
     'backup_successful' => 'Cpia efectuada com sucesso.',
-    'no_backups' => 'Nenhuma cpia de segurana efectuada at ao momento',
     'db_explanation' => 'Para criar uma cpia de segurana prima o boto a seguir',
     'not_found' => "Caminho incorrecto ou o utilitrio mysqldump no  executvel.<br>Verifique a definio de <strong>\$_DB_mysqldump_path</strong> em config.php.<br>Variavel actualmente definida como: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Erro na cpia: O tamanho do ficheiro  0 bytes',
@@ -1224,7 +1255,8 @@
     7 => 'Estatsticas',
     8 => 'Personalizar',
     9 => 'Pesquisar',
-    10 => 'pesquisa avanada'
+    10 => 'pesquisa avanada',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1266,4 +1298,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/portuguese_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/portuguese_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/portuguese_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/portuguese_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1507 @@
+<?php
+
+###############################################################################
+# portuguese.php
+# Esta é a tradução em Português do GeekLog!
+#
+# Copyright (C) 2003 Mário Seabra
+# mseabra@bairrinfor.com
+#
+# Este programa é software livre; é permitida a sua distribuição e /ou
+# modificação dentro dos termos GNU General Public License
+# como publicado pela Free Software Foundation; incluindo a versão 2
+# da Licença, ou (por opção sua) qualquer versão anterior.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Contribuição de:',
+    2 => 'mais',
+    3 => 'comentário',
+    4 => 'Editar',
+    5 => 'Votação',
+    6 => 'Resultados',
+    7 => 'Votações',
+    8 => 'votos',
+    9 => 'Funções administrativas:',
+    10 => 'Submissões',
+    11 => 'Notícias',
+    12 => 'Blocos',
+    13 => 'Tópicos',
+    14 => 'Ligações',
+    15 => 'Eventos',
+    16 => 'Votações',
+    17 => 'Utilizadores',
+    18 => 'SQL Query',
+    19 => 'Sair',
+    20 => 'Informação do utilizador:',
+    21 => 'Utilizador',
+    22 => 'ID do utilizador',
+    23 => 'Nível de segurança',
+    24 => 'Anónimo',
+    25 => 'Responder',
+    26 => 'Os seguintes comentários são da responsabilidade de quem os fez. A página não é responsavél pelo contéudo dos mesmos.',
+    27 => 'Comentário mais recente',
+    28 => 'Apagar',
+    29 => 'Sem comentários.',
+    30 => 'Notícias anteriores',
+    31 => 'Tags HTML permitidas:',
+    32 => 'Erro, nome de utilizador inválido',
+    33 => 'Erro, não consegue escrever para o ficheiro de log',
+    34 => 'Erro',
+    35 => 'Sair',
+    36 => 'ligado',
+    37 => 'Nenhuma notícia',
+    38 => 'Content Syndication',
+    39 => 'Actualizar',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Utilizadores convidados',
+    42 => 'Enviada por:',
+    43 => 'Responder',
+    44 => 'Parent',
+    45 => 'Número de erro MySQL',
+    46 => 'Mensagem de erro MySQL',
+    47 => 'Utilizador',
+    48 => 'Informação da conta',
+    49 => 'Mostrar preferências',
+    50 => 'Erro de SQL',
+    51 => 'ajuda',
+    52 => 'Novo',
+    53 => 'Administração',
+    54 => 'Impossível abrir o ficheiro.',
+    55 => 'Erro em',
+    56 => 'Votar',
+    57 => 'Password',
+    58 => 'Entrar',
+    59 => "Ainda não tem uma conta?  Inscreva-se como <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Novo Utilizador</a>",
+    60 => 'Faça um comentário',
+    61 => 'Criar uma conta',
+    62 => 'palavras',
+    63 => 'Preferências para os comentários',
+    64 => 'Enviar artigo por Email',
+    65 => 'Ver versão para impressão',
+    66 => 'Calendário pessoal',
+    67 => 'Bem-vindo a ',
+    68 => 'início',
+    69 => 'contacto',
+    70 => 'procurar',
+    71 => 'contribute',
+    72 => 'recursos',
+    73 => 'últimas votações',
+    74 => 'calendário',
+    75 => 'pesquisa avançada',
+    76 => 'estatísticas',
+    77 => 'Plugins',
+    78 => 'Próximos Eventos',
+    79 => 'Novidades',
+    80 => 'notícias nas últimas',
+    81 => 'notícia nas últimas',
+    82 => 'horas',
+    83 => 'COMENTÁRIOS',
+    84 => 'LIGAÇÕES',
+    85 => 'últimas 48 horas',
+    86 => 'Nenhum comentário novo',
+    87 => 'últimas 2 semanas',
+    88 => 'Nenhuma ligação recente',
+    89 => 'Não há eventos brevemente',
+    90 => 'Início',
+    91 => 'Página criada em',
+    92 => 'segundos',
+    93 => 'Copyright',
+    94 => 'Todos os direitos de copyright desta página pertencem aos respectivos proprietários.',
+    95 => 'Suportado por',
+    96 => 'Grupos',
+    97 => 'Lista de palavras',
+    98 => 'Plug-ins',
+    99 => 'NOTÍCIAS',
+    100 => 'Nenhuma notícia nova',
+    101 => 'Eventos pessoais',
+    102 => 'Eventos globais',
+    103 => 'DB Backups',
+    104 => 'por',
+    105 => 'Enviar email',
+    106 => 'Visitas',
+    107 => 'Teste à versão do GL',
+    108 => 'Limpar Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendário de Eventos',
+    2 => 'Não há eventos para mostrar.',
+    3 => 'Quando',
+    4 => 'Onde',
+    5 => 'Descrição',
+    6 => 'Adicionar um Evento',
+    7 => 'Próximos Eventos',
+    8 => 'Adicionando este evento ao seu calendário pode ver rapidamente os eventos do seu interesse clicando em "O meu calendário" na área de funções do utilizador.',
+    9 => 'Adicionar ao meu calendário',
+    10 => 'Remover do meu calendário',
+    11 => "A adicionar evento ao calendário de {$_USER['username']}",
+    12 => 'Evento',
+    13 => 'Início',
+    14 => 'Fim',
+    15 => 'Voltar ao calendário'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Fazer comentário',
+    2 => 'Modo de envio',
+    3 => 'Sair',
+    4 => 'Registar utilizador',
+    5 => 'Nome de utilizador',
+    6 => 'Este site obriga a que tenha efectuado o login para fazer um comentário, Por favor efectue o login.  Se não tiver uma conta criada pode utilizar o formulário seguinte para se registar.',
+    7 => 'O seu último comentário foi ',
+    8 => " segundos atrás.  Este site a pelo menos {$_CONF['commentspeedlimit']} segundos entre comentários",
+    9 => 'Comentário',
+    10 => 'Send Report',
+    11 => 'Enviar comentário',
+    12 => 'Preencha os campos título e comentário. Estes campos são necessários para o envio de um comentário.',
+    13 => 'A sua informação',
+    14 => 'Previsualizar',
+    15 => 'Report this post',
+    16 => 'Título',
+    17 => 'Erro',
+    18 => 'A ter em conta',
+    19 => 'Tente manter os seus comentários relacionados com os tópicos.',
+    20 => 'Tente responder aos outros comentários em vez de iniciar um assunto novo.',
+    21 => 'Leia as mensagens das outras pessoas antes de fazer o seu comentário para evitar comentários em duplicado.',
+    22 => 'Utilize um assunto objectivo que descreva a que se refere o seu comentário.',
+    23 => 'O seu endereço de email não é tornado público.',
+    24 => 'Utilizador anónimo',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Perfil de utilizador de',
+    2 => 'Nome de utilizador',
+    3 => 'Nome completo',
+    4 => 'Password',
+    5 => 'Email',
+    6 => 'Página principal',
+    7 => 'Bio',
+    8 => 'PGP Key',
+    9 => 'Guardar informação',
+    10 => 'Últimos 10 comentários do utilizador',
+    11 => 'Nenhum comentário efectuado',
+    12 => 'Preferências do utilizador para',
+    13 => 'Email Nightly Digest',
+    14 => 'Esta password foi gerada aleatoriamente. Recomendamos que a altere o mais rápido possível. Para alterar a password, efectue o login e clique em Informação da conta no bloco Utilizador.',
+    15 => "A sua conta em {$_CONF['site_name']} foi criada com sucesso. Para poder utilizar todas as potêncialidades deve efectuar o login com a informação que lhe foi enviada. Guarde esta email para referência futura.",
+    16 => 'Informação da sua conta',
+    17 => 'A conta não existe',
+    18 => 'O endereço de email introduzido não é válido',
+    19 => 'O nome de utilizador ou email introduzido já existe',
+    20 => 'O endereço de email introduzido não é válido',
+    21 => 'Erro',
+    22 => "Registe-se em {$_CONF['site_name']}!",
+    23 => "Registar-se dá-lhe todos os benefícios de ser um membro da comunidade {$_CONF['site_name']} e permite-lhe fazer comentários e enviar informação com a identificação da sua autoria. Se não tiver uma conta, apenas poderá enviar informação anónima. Note que o seu endereço de email <b><i>nunca</i></b> será publicado neste site.",
+    24 => 'A sua password será enviada para o endereço que indicar.',
+    25 => 'Esqueceu-se da sua password?',
+    26 => 'Introduza o seu nome de utilizador e clique em Email Password. Será enviada uma nova password para o email com que se registou.',
+    27 => 'Registe-se agora!',
+    28 => 'Email Password',
+    29 => 'saiu a partir de',
+    30 => 'entrou a partir de',
+    31 => 'A função pretendida obriga a efectuar o login',
+    32 => 'Assinatura',
+    33 => 'Não é mostrado publicamente',
+    34 => 'Este é o seu nome real',
+    35 => 'Introduza a password para alterar',
+    36 => 'Inicie com http://',
+    37 => 'Aplicado aos seus comentários',
+    38 => 'Isto é tudo acerca de si! Todos podem ler isto',
+    39 => 'A sua chave PGP pública para partilhar',
+    40 => 'Sem icones de tópico',
+    41 => 'Pretende ser moderador',
+    42 => 'Formato da data',
+    43 => 'Máximo de notícias',
+    44 => 'Sem caixas',
+    45 => 'Mostrar preferências para',
+    46 => 'Itens excluidos para',
+    47 => 'Configuração da caixa de novidades para',
+    48 => 'Tópicos',
+    49 => 'Sem icones nas notícias',
+    50 => 'Desmarque se não está interessado',
+    51 => 'Apenas notícias novas',
+    52 => 'Por defeito é',
+    53 => 'Receber as notícias do dia',
+    54 => 'Marque as caixas para os tópicos e autores que não pretende ver.',
+    55 => 'Se deixar tudo desmarcado, significa que pretende a selecção feita por defeito. Se seleccionar alguma das caixas, não se esqueça de seleccionar todas as que pretende pois a selecção feita por defeito é anulada. A selecção feita por defeito está a Negrito.',
+    56 => 'Autores',
+    57 => 'Modo de visualização',
+    58 => 'Ordenação',
+    59 => 'Limite de comentários',
+    60 => 'Como quer que os seus comentários sejam mostrados?',
+    61 => 'Novas ou antigas primeiro?',
+    62 => 'Por defeito é 100',
+    63 => "A sua password foi enviada por email e deve chegar em breve. Siga as indicações presentes no email e obrigado por utilizar o site {$_CONF['site_name']}",
+    64 => 'Preferências de comentários de',
+    65 => 'Tente efectuar o login novamente',
+    66 => "É provavel que se tenha enganado nos seus dados de login.  Tente fazer o login novamente. É um <a href=\"{$_CONF['site_url']}/users.php?mode=new\">novo utilizador</a>?",
+    67 => 'Membro desde',
+    68 => 'Lembrar durante',
+    69 => 'Durante quanto tempo quer ser lembrado depois de efectuar o login?',
+    70 => "Personalize a aparência e contéudo do site {$_CONF['site_name']}",
+    71 => "Uma das opções do site {$_CONF['site_name']} é que pode personalizar o contéudo que quer ver e a aparência do site.  Para poder usar esta opção deve-se <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registar</a> em {$_CONF['site_name']}.  Já é um membro registado?  Então utilize o formulário de login do lado esquerdo!",
+    72 => 'Tema',
+    73 => 'Idioma',
+    74 => 'Mude a aparência deste site!',
+    75 => 'Tópicos enviadoas para',
+    76 => 'Se seleccionar um tópico da lista receberá todas as notícias colocadas nesse tópico durante o dia.  Seleccione apenas os tópicos do seu interesse!',
+    77 => 'Foto',
+    78 => 'Adicione a sua fotografia!',
+    79 => 'Marque aqui para apagar esta imagem',
+    80 => 'Login',
+    81 => 'Enviar Email',
+    82 => 'Últimas 10 notícias do utilizador',
+    83 => 'Estatística de artigos do utilizador',
+    84 => 'Número total de artigos:',
+    85 => 'Número total de comentários:',
+    86 => 'Encontrar todos os artigos de',
+    87 => 'Your login name',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Set New Password',
+    92 => 'Enter New Password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Delete Account "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'delete account',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Privacy Options for',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email from Users',
+    103 => 'Allow email from other users',
+    104 => 'Show Online Status',
+    105 => 'Show up in Who\'s Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Nenhuma notícia para mostrar',
+    2 => 'Não há notícias novas para mostrar.  Pode não haver notícias para este tópico ou as suas definições são demasiado restrictivas',
+    3 => ' para o tópico %s',
+    4 => 'Artigos do dia',
+    5 => 'Próxima',
+    6 => 'Anterior',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Houve um erro ao enviar a sua mensagem. Tente novamente.',
+    2 => 'Mensagem enviada com sucesso.',
+    3 => 'Certifique-se que utiliza um endereço de email válido no campo Responder para.',
+    4 => 'Preencha os campos Nome, Responder Para, Assunto e Mensagem',
+    5 => 'Erro: Nenhum utilizador.',
+    6 => 'Existe um erro.',
+    7 => 'Perfil de utilizador para',
+    8 => 'Nome',
+    9 => 'URL do utilizador',
+    10 => 'Enviar email para',
+    11 => 'Nome:',
+    12 => 'Responder para:',
+    13 => 'Assunto:',
+    14 => 'Mensagem:',
+    15 => 'HTML não será traduzido.',
+    16 => 'Enviar mensagem',
+    17 => 'Enviar Notícia a um amigo',
+    18 => 'Para',
+    19 => 'Email',
+    20 => 'De',
+    21 => 'Email',
+    22 => 'São necessários todos os campos',
+    23 => "Este email foi-lhe enviado por %s em %s porque ele(a) acredita que possa estar interessado(a) neste artigo do site {$_CONF['site_url']}.  Isto não é SPAM e os endereços de email envolvidos nesta operação não ficam registados para uso posterior.",
+    24 => 'Comentários a esta notícia em',
+    25 => 'Deve efectuar o login para poder utilizar esta opção.  Efectuando o login, ajuda-nos a prevenir a utilização fraudulenta do sistema',
+    26 => 'Este formulário permite-lhe enviar um email para o utilizador seleccionado.  É necessário o preenchimento de todos os campos.',
+    27 => 'Mensagem curta',
+    28 => '%s escreveu: ',
+    29 => "Este é o envio diário automático de {$_CONF['site_name']} para ",
+    30 => ' Novidades diárias para ',
+    31 => 'Titulo',
+    32 => 'Data',
+    33 => 'Leia o artigo completo em',
+    34 => 'Fim da mensagem',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Pesquisa avançada',
+    2 => 'Palavras a pesquisar',
+    3 => 'Tópico',
+    4 => 'Tudo',
+    5 => 'Tipo',
+    6 => 'Notícias',
+    7 => 'Comentários',
+    8 => 'Autores',
+    9 => 'Tudo',
+    10 => 'Pesquisar',
+    11 => 'Resultados da pesquisa',
+    12 => 'resultados',
+    13 => 'Nenhuma correspondência com o critério',
+    14 => 'Não foram encontrados registos na sua pesquisa de',
+    15 => 'Tente de novo.',
+    16 => 'Título',
+    17 => 'Data',
+    18 => 'Autor',
+    19 => "Pesquise na base de dados {$_CONF['site_name']} em todas as notícias",
+    20 => 'Data',
+    21 => 'até',
+    22 => '(Formato AAAA-MM-DD)',
+    23 => 'Visitas',
+    24 => 'Encontrados',
+    25 => 'resultados para',
+    26 => 'itens em',
+    27 => 'segundos',
+    28 => 'Nenhuma notícia ou comentário corresponde ao seu critério',
+    29 => 'Resultado de Notícias e Comentários',
+    30 => 'Nenhuma ligação corresponde a sua pesquisa',
+    31 => 'Este plug-in não devolveu resultados',
+    32 => 'Evento',
+    33 => 'URL',
+    34 => 'Localização',
+    35 => 'Todo o dia',
+    36 => 'Nenhum evento corresponde ao critério',
+    37 => 'Resultado de eventos',
+    38 => 'Resultado de ligações',
+    39 => 'Ligações',
+    40 => 'Eventos',
+    41 => 'A frase a pesquisar deve ter no mínimo 3 caracteres.',
+    42 => 'Utilize uma data com o seguinte formato AAAA-MM-DD (ano-mês-dia).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Estatísticas do site',
+    2 => 'Número total de Ligações ao sitema',
+    3 => 'Notícias(Comentários) no sistema',
+    4 => 'Votações(Respostas) no sistema',
+    5 => 'Links(Clicks) no sistema',
+    6 => 'Evento no sistema',
+    7 => 'Top Ten de notícias visitadas',
+    8 => 'Título da notícia',
+    9 => 'Visitas',
+    10 => 'Parece que não há nenhuma notícia no site ou nenhuma delas foi ainda visitada.',
+    11 => 'Top Ten de notícias comentadas',
+    12 => 'Comentários',
+    13 => 'Parece que não há nenhuma notícia no site ou ainda não foi feito nenhum comentário.',
+    14 => 'Top Ten de votações',
+    15 => 'Pergunta da votação',
+    16 => 'Votos',
+    17 => 'Parece que não há nenhuma votação no site ou ainda ninguém votou em nenhuma.',
+    18 => 'Top Ten Links',
+    19 => 'Links',
+    20 => 'Visitas',
+    21 => 'Parece que não existem links no site ou ainda nenhum deles foi visitado.',
+    22 => 'Top Ten Notícias enviadas',
+    23 => 'Emails',
+    24 => 'Parece que ainda não foi enviada nenhuma notícia deste site',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Artigos relaccionados',
+    2 => 'Enviar notícia a um amigo',
+    3 => 'Versão para impressão',
+    4 => 'Opções da notícia',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Para enviar um %s deve efectuar o login como utilizador.',
+    2 => 'Login',
+    3 => 'Novo utilizador',
+    4 => 'Enviar um evento',
+    5 => 'Enviar um link',
+    6 => 'Enviar uma notícia',
+    7 => 'É necessário Login',
+    8 => 'Enviar',
+    9 => 'Ao enviar informações para utilização neste site pedimos-lhe que cumpra as seguintes recomendações...<ul><li>Preencha todos os campos, eles são necessários<li>Forneça informação correta e completa<li>Verifique os URLs</ul>',
+    10 => 'Titulo',
+    11 => 'Ligação',
+    12 => 'Data de início',
+    13 => 'Data de fim',
+    14 => 'Localização',
+    15 => 'Descrição',
+    16 => 'Se outra, especifique',
+    17 => 'Categoria',
+    18 => 'Outra',
+    19 => 'Ler primeiro',
+    20 => 'Erro: Falta a categoria',
+    21 => 'Ao seleccionar "Outra" indique o nome da categoria',
+    22 => 'Erro: Faltam campos',
+    23 => 'Preencha todos os campos do formulário.  Todos eles são necessários.',
+    24 => 'Envio registado',
+    25 => 'O seu envio %s foi registado com sucesso.',
+    26 => 'Limite de velocidade',
+    27 => 'Utilizador',
+    28 => 'Tópico',
+    29 => 'Notícia',
+    30 => 'O seu último envio foi à ',
+    31 => " segundos.  Este site obriga a pelo menos {$_CONF['speedlimit']} segundos entre envios",
+    32 => 'Previsualizar',
+    33 => 'Previsualização da notícia',
+    34 => 'Sair',
+    35 => 'Tags HTML não são permitidas',
+    36 => 'Modo de colocação',
+    37 => "Enviar um evento para {$_CONF['site_name']} colocará este este evento no calendário geral onde os utilizadores poderam adicioná-lo ao seu calendário pessoal. Esta opção <b>NÃO</b> foi pensada para armazenar os seus eventos pessoais tipo aniversários e datas comemorativas.<br><br>Quando publica o seu evento este é enviado aos administradores e se aprovado, o seu evento aparecerá no calendário geral.",
+    38 => 'Adicionar evento para',
+    39 => 'Calendário geral',
+    40 => 'Calendário pessoal',
+    41 => 'Fim',
+    42 => 'Início',
+    43 => 'Todo o dia',
+    44 => 'Morada',
+    45 => 'Address Line 2',
+    46 => 'Localidade',
+    47 => 'Cidade',
+    48 => 'C. Postal',
+    49 => 'Tipo',
+    50 => 'Editar Tipos de Evento',
+    51 => 'Localização',
+    52 => 'Apagar',
+    53 => 'Criar conta'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autenticação necessária',
+    2 => 'Não autorizado! Informação de Login incorrecta',
+    3 => 'Password inválida para o utilizador',
+    4 => 'Utilizador:',
+    5 => 'Password:',
+    6 => 'Todos os acessos administrativos deste site são registados e auditados.<br>Está página é apenas para utilização de pessoal autorizado.',
+    7 => 'login'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Direitos de administração insuficientes',
+    2 => 'Não tem permissões suficientes para editar este bloco.',
+    3 => 'Editor de blocos',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Título',
+    6 => 'Tópico',
+    7 => 'Todos',
+    8 => 'Nível de segurança',
+    9 => 'Ordem',
+    10 => 'Tipo',
+    11 => 'Bloco de portal',
+    12 => 'Bloco normal',
+    13 => 'Opções de bloco de portal',
+    14 => 'RDF URL',
+    15 => 'Última actualização RDF',
+    16 => 'Opções para Blocos Normais',
+    17 => 'Contéudo dos blocos',
+    18 => 'Preencha os campos Título, Nível de segurança e Contéudo',
+    19 => 'Manutenção de blocos',
+    20 => 'Título',
+    21 => 'Nível de segurança',
+    22 => 'Tipo',
+    23 => 'Ordem',
+    24 => 'Tópico',
+    25 => 'Para modificar ou apagar um bloco, clique nesse bloco.  Para criar um bloco novo clique em Novo Bloco.',
+    26 => 'Aparência do bloco',
+    27 => 'Bloco de PHP',
+    28 => 'Opções de bloco PHP',
+    29 => 'Função',
+    30 => 'Se pretende que um dos seus blocos utilize código PHP, introduza o nome da função a utilizar. O nome da função deve ter o prefixo "phpblock_" (ex. phpblock_getweather). Se não tiver este prefixo, a sua função não será executada. Isto serve para que alguém que tenha conseguido acesso não autorizado ao seu site possa colocar código malicioso no seu sistema. Certifique-se que não coloca parentesis vazios "()" depois do nome da sua função.  Finalmente, é recomendado que coloque todo o seu código PHP em /camino/para/geeklog/system/lib-custom.php.  Isto permite-lhe que o seu código permaneça mesmo ao efectuar um upgrade à sua versão do Geeklog.',
+    31 => 'Erro no bloco PHP.  A função %s não existe.',
+    32 => 'Erro: Faltam campos',
+    33 => 'Deve introduzir o URL para o ficheiro .rdf para os blocos de portal',
+    34 => 'Deve introduzir o título e a função para os blocos PHP',
+    35 => 'Deve introduzir o título e o contéudo para os blocos normais',
+    36 => 'Deve introduzir o contéudo para os blocos de layout',
+    37 => 'Nome de função PHP incorrecta',
+    38 => 'Funções para os blocos PHP devem conter o prefixo \'phpblock_\' (ex. phpblock_getweather).  O prefixo \'phpblock_\' é necessário por razões de segurança.',
+    39 => 'Lado',
+    40 => 'Esquerdo',
+    41 => 'Direito',
+    42 => 'Deve introduzir a ordem do bloco e o nível de segurança para os blocos por defeito do Geeklog',
+    43 => 'Apenas página principal',
+    44 => 'Acesso não permitido',
+    45 => "Está a tentar aceder a um bloco para o qual não tem permissões. Este procedimento foi registado. Volte à <a href=\"{$_CONF['site_admin_url']}/block.php\">janela de administração</a>.",
+    46 => 'Novo Bloco',
+    47 => 'Administração',
+    48 => 'Nome',
+    49 => ' (sem espaços e deve ser único)',
+    50 => 'URL de ficheiro de ajuda',
+    51 => 'inclua http://',
+    52 => 'Se deixar em branco não aparecerá icon de ajuda para este bloco',
+    53 => 'Autorizado',
+    54 => 'guardar',
+    55 => 'cancelar',
+    56 => 'apagar',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor de eventos',
+    2 => 'Error',
+    3 => 'Título',
+    4 => 'URL',
+    5 => 'Data de início',
+    6 => 'Data de fim',
+    7 => 'Localização',
+    8 => 'Descrição',
+    9 => '(inclua http://)',
+    10 => 'Deve inserir datas, horas, descrição e localização para o evento!',
+    11 => 'Manutenção de eventos',
+    12 => 'Para modificar ou apagar um evento, clique nesse evento a seguir.  Para criar um novo evento clique em Novo evento.',
+    13 => 'Título',
+    14 => 'Data de início',
+    15 => 'Data de fim',
+    16 => 'Acesso não permitido',
+    17 => "Está a tentar aceder a um evento para o qual não tem permissões.  Esta acção ficou registada. Por favor <a href=\"{$_CONF['site_admin_url']}/event.php\">volte ao écran de administração de eventos</a>.",
+    18 => 'Novo evento',
+    19 => 'Administração',
+    20 => 'guardar',
+    21 => 'cancelar',
+    22 => 'apagar',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Notícia anterior',
+    2 => 'Notícia seguinte',
+    3 => 'Modo',
+    4 => 'Modo de envio',
+    5 => 'Editor de notícias',
+    6 => 'Não há notícias no sistema',
+    7 => 'Autor',
+    8 => 'guardar',
+    9 => 'previsualizar',
+    10 => 'cancelar',
+    11 => 'apagar',
+    12 => 'ID',
+    13 => 'Título',
+    14 => 'Tópico',
+    15 => 'Data',
+    16 => 'Introdução',
+    17 => 'Corpo',
+    18 => 'Visitas',
+    19 => 'Comentários',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Lista de notícias',
+    23 => 'Para modificar ou apagar uma notícia, clique no número da notícia a seguir. Para ver uma notícia, clique no título da notícia que pretende ver. Para introduzir uma notícia clique em Inserir notícia a seguir.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Previsualização de notícias',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Por favor preencha os campos Autor, Título e Introdução',
+    32 => 'Featured',
+    33 => 'Só pode haver uma notícia featured',
+    34 => 'Rascunho',
+    35 => 'Sim',
+    36 => 'Não',
+    37 => 'Mais de',
+    38 => 'Mais a partir de',
+    39 => 'Emails',
+    40 => 'Acesso não autorizado',
+    41 => "Está a tentar aceder a uma notícia para a qual não tem permissões.  Esta acção ficou registada.  Pode ver esta notícia com permissões de leitura a seguir. Por favor <a href=\"{$_CONF['site_admin_url']}/story.php\">volte ao écran de administração de notícias</a> quando terminar.",
+    42 => "Está a tentar aceder a uma notícia para a qual não tem permissões.  Esta acção ficou registada.  Por favor <a href=\"{$_CONF['site_admin_url']}/story.php\">volte ao écran de administração de notícias</a>.",
+    43 => 'Inserir notícia',
+    44 => 'Administração',
+    45 => 'Acesso',
+    46 => '<b>NOTA:</b> se modificar esta data para uma data futura, esta notícia não será publicada antes dessa data.  Isto significa também que a sua notícia não aparecerá nos cabeçalhos e será ignorada pelas pesquisas e páginas de estatísticas.',
+    47 => 'Imagens',
+    48 => 'imagem',
+    49 => 'direita',
+    50 => 'esquerda',
+    51 => 'Para adicionar uma das imagens que está a anexar a esta notícia precisa de introduzir texto com formato especial.  O formato especial do texto é [imageX], [imageX_right] ou [imageX_left] onde X é o número da imagem que anexou.  NOTA: Deve utilizar as imagens que anexou.  Caso contrário não poderá guardar a sua notícia.<BR><P><B>PREVISUALIZAR</B>: Previsualizar uma notícia que contenha imagens deve ser efectuado guardando a notícia como rascunho EM VEZ DE seleccionar o botão de previsualização.  Utilize o botão de previsualização apenas quando não tiver imagens anexadas.',
+    52 => 'Apagar',
+    53 => 'não foi utilizada.  Deve incluir esta imagem na introdução ou no corpo da notícia antes de guardar as alterações',
+    54 => 'Imagens associadas e não utilizadas',
+    55 => 'Ocorreram os seguintes erros ao tentar guardar a sua notícia.  Por favor, corrija estes erros antes de guardar',
+    56 => 'Mostrar imagem de tópico',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor de tópicos',
+    2 => 'ID do tópico',
+    3 => 'Nome',
+    4 => 'Imagem',
+    5 => '(não utilize espaços)',
+    6 => 'Apagar um tópico remove também todas as notícias e blocos associados a ele.',
+    7 => 'Preencha os campos ID de tópico e Nome',
+    8 => 'Manutenção de tópicos',
+    9 => 'Para modificar ou apagar um tópico, clique nesse tópico.  Para criar um novo tópico clique no botão Novo tópico à esquerda. Encontra o seu nível de acesso para cada tópico dentro de parêntesis',
+    10 => 'Ordem',
+    11 => 'Notícias/Página',
+    12 => 'Acesso interdito',
+    13 => "Está a tentar aceder a um tópico para o qual não tem permissão.  Esta tentativa foi registado. Por favor <a href=\"{$_CONF['site_admin_url']}/topic.php\">volte ao écran de administração de tópicos</a>.",
+    14 => 'Método de ordenação',
+    15 => 'alfabética',
+    16 => 'normal é',
+    17 => 'Novo Tópico',
+    18 => 'Administração',
+    19 => 'guardar',
+    20 => 'cancelar',
+    21 => 'apagar',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Detalhes do utilizador',
+    2 => 'ID do utilizador',
+    3 => 'Nome do utilizador',
+    4 => 'Nome completo',
+    5 => 'password',
+    6 => 'Nível de segurança',
+    7 => 'Email',
+    8 => 'Página WEB',
+    9 => '(não utilize espaços)',
+    10 => 'Por favor preencha o Nome do utilizador, Nome completo, Nível de segurança e endereço de Email',
+    11 => 'Manutenção de utilizadores',
+    12 => 'Para modificar ou apagar um utilizador, clique nesse utilizador abaixo. Para criar um novo utilizador clique no botão Novo utilizador à esquerda. Pode efectuar pesquisas simples introduzindo partes do nome de utilizador, endereço de email ou do nome completo (ex.*Manuel* ou *.pt) no formulário abaixo.',
+    13 => 'Nível de segurança',
+    14 => 'Data de registo',
+    15 => 'Novo utilizador',
+    16 => 'Administração',
+    17 => 'mudar password',
+    18 => 'cancelar',
+    19 => 'apagar',
+    20 => 'guardar',
+    21 => 'O nome de utilizador que tentou guardar já existe.',
+    22 => 'Erro',
+    23 => 'Adicionar automático',
+    24 => 'Importação automática de utilizadores',
+    25 => 'Pode importar um ficheiro de utilizadores para o site. O ficheiro de importação deve ser delimitado por tabulações e deve conter os campos na seguinte ordem: nome completo, nome de utilizador, endereço de email. Cada utilizador importado receberá uma password por email. Deve ter um utilizador em cada linha. Uma falha num destes pontos causará problemas que terão de ser resolvidos manualmente para resolver duplicação de registos!',
+    26 => 'Procurar',
+    27 => 'Limite de Resultados',
+    28 => 'Seleccione aqui para apagar esta imagem',
+    29 => 'Caminho',
+    30 => 'Importar',
+    31 => 'Novos Utilizadores',
+    32 => 'Processo concluído. Foram importados %d e encontrados %d erros',
+    33 => 'enviar',
+    34 => 'Erro: Deve especificar um ficheiro para carregar.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Aprovar',
+    2 => 'Apagar',
+    3 => 'Editar',
+    4 => 'Perfil',
+    10 => 'Título',
+    11 => 'Data de início',
+    12 => 'URL',
+    13 => 'Categoria',
+    14 => 'Data',
+    15 => 'Tópico',
+    16 => 'Nome de utilizador',
+    17 => 'Nome completo',
+    18 => 'Email',
+    34 => 'Comando e Control',
+    35 => 'Noticia para aprovação',
+    36 => 'Ligações para aprovação',
+    37 => 'Eventos para aprovação',
+    38 => 'Submeter',
+    39 => 'Não à envios para moderação neste momento',
+    40 => 'Envios do utilizador'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Domingo',
+    2 => 'Segunda',
+    3 => 'Terça',
+    4 => 'Quarta',
+    5 => 'Quinta',
+    6 => 'Sexta',
+    7 => 'Sábado',
+    8 => 'Adicionar Evento',
+    9 => 'Evento Geral',
+    10 => 'Eventos para',
+    11 => 'Calendário Geral',
+    12 => 'O Meu Calendário',
+    13 => 'Janeiro',
+    14 => 'Fevereiro',
+    15 => 'Março',
+    16 => 'Abril',
+    17 => 'Maio',
+    18 => 'Junho',
+    19 => 'Julho',
+    20 => 'Agosto',
+    21 => 'Setembro',
+    22 => 'Outubro',
+    23 => 'Novembro',
+    24 => 'Dezembro',
+    25 => 'Voltar a ',
+    26 => 'Todo o dia',
+    27 => 'Semana',
+    28 => 'Calendário pessoal de',
+    29 => 'Calendário público',
+    30 => 'apagar evento',
+    31 => 'Adicionar',
+    32 => 'Evento',
+    33 => 'Data',
+    34 => 'Hora',
+    35 => 'Adicionar rápido',
+    36 => 'Enviar',
+    37 => 'Pedimos desculpa, o calendário pessoal está inactivo neste site',
+    38 => 'Editor de eventos pessoais',
+    39 => 'Dia',
+    40 => 'Semana',
+    41 => 'Mês'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Utilitáriod de email",
+    2 => 'De',
+    3 => 'Responder a',
+    4 => 'Assunto',
+    5 => 'Mensagem',
+    6 => 'Enviar para:',
+    7 => 'Todos os utilizadores',
+    8 => 'Admin',
+    9 => 'Opções',
+    10 => 'HTML',
+    11 => 'Urgent message!',
+    12 => 'Enviar',
+    13 => 'Limpar',
+    14 => 'Ignorar preferêncios do utilizador',
+    15 => 'Erro ao enviar para: ',
+    16 => 'Mensagens enviadas com sucesso para: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar outra mensagem</a>",
+    18 => 'Para',
+    19 => 'NOTA: se pretende enviar uma mensagem para todos os utilizadores do site, seleccione o grupo Logged-in Users na lista.',
+    20 => "Enviadas <successcount> mensagens com sucesso e <failcount> sem sucesso.  Se precisar, os detalhes para cada mensagem estão a seguir. Caso contrário pode <a href=\"{$_CONF['site_admin_url']}/mail.php\">Enviar outra mensagem</a> ou voltar à <a href=\"{$_CONF['site_admin_url']}/moderation.php\">pagina de administração</a>.",
+    21 => 'Falhas',
+    22 => 'Sucessos',
+    23 => 'Nenhuma falha',
+    24 => 'Nenhum sucesso',
+    25 => '-- Selecione o grupo --',
+    26 => 'Preencha todos os campos no formulário e seleccione um grupo na lista.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'A instalação de plugins pode danificar a instalação do Geeklog e, possivelmente, o sistema. É importante que apenas instale plugins descarregados do <a href="http://www.geeklog.net" target="_blank">Site Geeklog</a> dado que nós testamos todos os plugins enviados para o nosso site nos mais variados sistemas operativos. É importante que perceba que a instalação de plugin\'s requere a execução de comandos do sistema que lhe podem trazer problemas de segurança se esses plugins não vierem de sites fidedignos. Para além deste aviso, nós não garantimos o sucesso da instalação de plugins nem podemos ser responsabilizados pelos danos causados pela instalação de plugin\'s. Por outras palavras, instale à sua responsabilidade. Por prudencia, recomendações de como instalar um plugin manualmente vem incluidas com cada plugin.',
+    2 => 'Responsabilidade da Instalação de Plug-in',
+    3 => 'Formulário de instalação de Plug-in',
+    4 => 'Ficheiro do Plug-in',
+    5 => 'Lista de Plug-in\'s ',
+    6 => 'Aviso: o Plug-in já está instalado!',
+    7 => 'O plug-in que está a tentar instalar já existe. Tem de apagar antes de reinstalar',
+    8 => 'Falhou o teste de compatibilidade do Plugin',
+    9 => 'Este plugin necessita de uma versão mais recente do Geeklog. Faça a actualização da sua cópia do <a href="http://www.geeklog.net">Geeklog</a> ou procure outra versão do plug-in.',
+    10 => '<br><b>Não há plugins instalados.</b><br><br>',
+    11 => 'Para modificar ou apagar um plug-in, clique no número desse plugin. Para saber maia sobre um plug-in, clique no nome do plug-in e será redireccionado para o site desse plugin. Para instalar ou actualizar um plug-in consulte a sua documentação.',
+    12 => 'nenhum nome de plugin enviado à função plugineditor()',
+    13 => 'Editor de Plug-in',
+    14 => 'Novo Plug-in',
+    15 => 'Administração',
+    16 => 'Nome do Plug-in',
+    17 => 'Versão do Plug-in',
+    18 => 'Versão do Geeklog',
+    19 => 'Activo',
+    20 => 'Sim',
+    21 => 'Não',
+    22 => 'Instalar',
+    23 => 'Guardar',
+    24 => 'Cancelar',
+    25 => 'Apagar',
+    26 => 'Nome',
+    27 => 'Página Web',
+    28 => 'Versão do Plug-in',
+    29 => 'Versão do GL',
+    30 => 'Apagar o Plug-in?',
+    31 => 'Tem a certeza que pretende apagar este plug-in?  Ao efectuar isto remove todos os dados e estructuras que este plug-in utiliza. Se tem a certeza, clique em apagar novamente.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "A sua password foi enviada para o seu email e deve chegar em breve. Siga as indicações presentes na mensagem e obrigado por utilizar o site {$_CONF['site_name']}",
+    2 => "Obrigado por enviar a sua notícia para {$_CONF['site_name']}.  Foi enviado para a nossa equipa para aprovação. Se for aceite, a sua notícia estará disponível para todos os utilizadores do nosso site.",
+    3 => "Obrigado por enviar a sua ligação para {$_CONF['site_name']}.  Foi enviado para a nossa equipa para aprovação.  Se for aceite, o seu link estará disponível na secção <a href={$_CONF['site_url']}/links.php>links.</a>",
+    4 => "Obrigado por enviar o seu evento para {$_CONF['site_name']}.  Foi enviado para a nossa equipa para aprovação.  Se for aceite, o seu evento estará visível na secção <a href={$_CONF['site_url']}/calendar.php>calendário.</a>",
+    5 => 'A informação da sua conta foi guardada com sucesso.',
+    6 => 'As suas preferências do layout do site foram guardadas com sucesso.',
+    7 => 'As suas preferências para os comentários foram guardadas com sucesso.',
+    8 => 'Terminou a sua sessão com sucesso.',
+    9 => 'A sua notícia foi registada com sucesso.',
+    10 => 'A sua notícia foi apagada com sucesso.',
+    11 => 'O seu bloco foi guardado com sucesso.',
+    12 => 'O bloco foi apagado com sucesso.',
+    13 => 'O seu tópico foi guardado com sucesso.',
+    14 => 'O tópico e todas as notícias desse tópico foram apagados com sucesso.',
+    15 => 'O seu link foi guardado com sucesso.',
+    16 => 'O link foi apagado com sucesso.',
+    17 => 'O seu evento foi registado com sucesso.',
+    18 => 'O evento foi apagado com sucesso.',
+    19 => 'A sua votação foi guardada com sucesso.',
+    20 => 'A votação foi apagada com sucesso.',
+    21 => 'O novo utilizador foi guardado com sucesso.',
+    22 => 'O utilizador foi apagado com sucesso',
+    23 => 'Erro ao tentar adicionar um evento ao seu calendário. Não foi indicado o id do evento.',
+    24 => 'O evento foi adicionado ao seu calendário',
+    25 => 'Não pode abrir o seu calendário pessoal enquanto não efectuar o login',
+    26 => 'O evento foi retirado do seu calendário pessoal com sucesso',
+    27 => 'Mensagem enviada com sucesso.',
+    28 => 'O plug-in foi guardado com sucesso',
+    29 => 'Pedimos desculpa, o calendário pessoal não está autorizado neste site',
+    30 => 'Acesso não permitido',
+    31 => 'Não tem acesso à manutenção de notícias. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    32 => 'Não tem acesso à manutenção de tópicos. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    33 => 'Não tem acesso à manutenção de blocos. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    34 => 'Não tem acesso à manutenção de links. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    35 => 'Não tem acesso à manutenção de eventos. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    36 => 'Não tem acesso à manutenção de votações. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    37 => 'Não tem acesso à manutenção de utilizadores. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    38 => 'Não tem acesso à manutenção de plugin\'s. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    39 => 'Não tem acesso à manutenção de email. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    40 => 'Mensagem do sistema',
+    41 => 'Não tem acesso à manutenção de palavras de substituição. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    42 => 'A palavra foi guardada com sucesso.',
+    43 => 'A palavra foi apagada com sucesso.',
+    44 => 'O plug-in foi instalado com sucesso!',
+    45 => 'O plug-in foi apagado com sucesso.',
+    46 => 'Não tem acesso à manutenção de cópias da base de dados. Relembramos que todas as tentativas de acesso a funções não autorizadas são registadas',
+    47 => 'Esta funcionalidade apenas trabalha em ambientes *nix.  Se estiver a trabalhar num ambiente *nix a cache foi limpa com sucesso. Se estiver no Windows, procure os ficheiros com o nome adodb_*.php e remova-os manualmente.',
+    48 => "Obrigado por se aplicar como um membro de {$_CONF['site_name']}. A nossa equipa irá rever a sua aplicação. Se aprovada, a sua password será enviada para o email que nos indicou.",
+    49 => 'O seu grupo foi guardado com sucesso.',
+    50 => 'O grupo foi apagado com sucesso.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Acesso',
+    'ownerroot' => 'Editor/Root',
+    'group' => 'Grupo',
+    'readonly' => 'Só leitura',
+    'accessrights' => 'Direitos de acesso',
+    'owner' => 'Autor',
+    'grantgrouplabel' => 'Dar permissão de edição a todos os Grupos',
+    'permmsg' => 'NOTA: membros são todos os utilizadores que efectuaram o login e anónimos são os visitantes da página sem login efectuado.',
+    'securitygroups' => 'Grupos de segurança',
+    'editrootmsg' => "Mesmo sendo membro do grupo de Administradores, não pode editar a informação de um utilizador root sem ser primeiro um utilizador root também.  Pode editar todos os utilizadores excepto os do grupo root. Lembramos que todas as tentativas de edição ilegal de utilizadores root são registadas.  Volte à página de <a href=\"{$_CONF['site_admin_url']}/user.php\">Administração de utilizadores</a>.",
+    'securitygroupsmsg' => 'Seleccione as caixas dos grupos aos quais o utilizador irá pertencer.',
+    'groupeditor' => 'Editor de grupos',
+    'description' => 'Descrição',
+    'name' => 'Nome',
+    'rights' => 'Direitos',
+    'missingfields' => 'Faltam campos',
+    'missingfieldsmsg' => 'Deve introduzir o nome e a descrição do grupo',
+    'groupmanager' => 'Manutenção de grupos',
+    'newgroupmsg' => 'Para modificar ou apagar um grupo, clique nesse grupo. Para criar um grupo novo clique em Novo grupo. Relembramos que os grupos do núcleo não podem ser apagados porque são utilizados no sistema.',
+    'groupname' => 'Nome',
+    'coregroup' => 'Grupo do núcleo',
+    'yes' => 'Sim',
+    'no' => 'Não',
+    'corerightsdescr' => "Este grupo pertence ao núcleo do site {$_CONF['site_name']}.  Daí que os direitos deste grupo não podem ser editados.  A seguir está a lista dos direitos de acesso dos membros deste grupo.",
+    'groupmsg' => 'Os Grupos de Segurança deste site são hierárquicos.  Adicionando este grupo a qualquer um dos grupos a seguir está a dar a este grupo os mesmos direitos desses grupos. Onde seja possível aconselhamos a utilizar os grupos listados a seguir para dar permissões ao grupo. Se necessita que este grupo tenha direitos personalizados seleccione os direitos de acesso às mais variadas funcionalidades deste site seleccionando \'Direitos\'.  Para adicionar este grupo a qualquer um dos seguintes seleccione a caixa correspondente.',
+    'coregroupmsg' => "Este grupo pertence ao núcleo do site {$_CONF['site_name']}.  Daí que os direitos deste grupo não podem ser editados.  A seguir está a lista dos direitos de acesso dos membros deste grupo.",
+    'rightsdescr' => 'O acesso de um grupo a um determinado direito pode ser dado directamente ao grupo OU a um grupo diferente que contenha esses direitos. Os que vê a seguir sem caixa de selecção são os direitos dados a este grupo porque este pertence a um grupo que tem essas permissões. Os direitos com caixas de selecção são direitos que podem ser dados directamente a este grupo.',
+    'lock' => 'Bloquear',
+    'members' => 'Membros',
+    'anonymous' => 'Anónimos',
+    'permissions' => 'Permissões',
+    'permissionskey' => 'L = leitura, E = edição, direitos de edição assumem direitos de leitura',
+    'edit' => 'Editar',
+    'none' => 'N/A',
+    'accessdenied' => 'Acesso não autorizado',
+    'storydenialmsg' => "Não tem permissão para ver esta notícia.  Isto pode acontecer porque você não é membro do site {$_CONF['site_name']}.  <a href=users.php?mode=new> Torne-se membro</a> do site {$_CONF['site_name']} para ter acesso como utilizador registado!",
+    'eventdenialmsg' => "Não tem permissão para ver este evento.  Isto pode acontecer porque você não é membro do site {$_CONF['site_name']}.  <a href=users.php?mode=new> Torne-se membro</a> do site {$_CONF['site_name']} para ter acesso como utilizador registado!",
+    'nogroupsforcoregroup' => 'Este grupo não pertence a qualquer um dos outros grupos',
+    'grouphasnorights' => 'Este grupo não tem qualquer acesso administrativo neste site',
+    'newgroup' => 'Novo grupo',
+    'adminhome' => 'Administração',
+    'save' => 'guardar',
+    'cancel' => 'cancelar',
+    'delete' => 'apagar',
+    'canteditroot' => 'Tentou editar o grupo Root mas como não está incluído nesse grupo não lhe é permitido o acesso. Contacte o administrador do sistema se acha que isto se deve a um erro',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Últimas 10 cópias de segurança',
+    'do_backup' => 'Fazer cópia',
+    'backup_successful' => 'Cópia efectuada com sucesso.',
+    'db_explanation' => 'Para criar uma cópia de segurança prima o botão a seguir',
+    'not_found' => "Caminho incorrecto ou o utilitário mysqldump não é executável.<br>Verifique a definição de <strong>\$_DB_mysqldump_path</strong> em config.php.<br>Variavel actualmente definida como: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Erro na cópia: O tamanho do ficheiro é 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} não existe ou não é uma directoria",
+    'no_access' => "ERRO: A directoria {$_CONF['backup_path']} não está acessível.",
+    'backup_file' => 'Ficheiro da cópia',
+    'size' => 'Tamanho',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Início',
+    2 => 'Contacto',
+    3 => 'Publicar',
+    4 => 'Ligações',
+    5 => 'Votações',
+    6 => 'Calendário',
+    7 => 'Estatísticas',
+    8 => 'Personalizar',
+    9 => 'Pesquisar',
+    10 => 'pesquisa avançada',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Erro 404',
+    2 => 'Procurei em todo o lado mas não encontrei <b>%s</b>.',
+    3 => "<p>Pedimos desculpa, mas o ficheiro que pediu não existe. Sinta-se à vontade e verifique na <a href=\"{$_CONF['site_url']}\">página principal</a> ou na <a href=\"{$_CONF['site_url']}/search.php\">página de pesquisa</a> para tentar encontrar o que perdeu."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login necessário',
+    2 => 'Queira desculpar, para aceder a esta área necessita de efectuar o login como utilizador.',
+    3 => 'Login',
+    4 => 'Novo utilizador'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/romanian.php 1.4.0sr5-1/cpanel-glprivate/language/romanian.php
--- 1.3.11sr1/cpanel-glprivate/language/romanian.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/romanian.php	2006-08-08 02:39:06.000000000 -0500
@@ -152,7 +152,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -319,7 +329,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -337,27 +363,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Resurse web',
-    2 => 'Nu exista resurse de vizualizat.',
-    3 => 'Propune un Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Vot salvat',
-    2 => 'Votul dvs. pentru sondaj a fost salvat. Va multumim!',
-    3 => 'Voteaza',
-    4 => 'Sondaje',
-    5 => 'Voturi',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -458,7 +463,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -488,7 +497,14 @@
     21 => 'Nu sunt link-uri pe sit sau nu au fost inca accesate.',
     22 => 'Top 10 stiri trimise altora prin email',
     23 => 'Adrese Email',
-    24 => 'Nu sunt stiri trimise altora prin email.'
+    24 => 'Nu sunt stiri trimise altora prin email.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -641,7 +657,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -676,35 +697,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Titlu Link',
-    4 => 'Link URL',
-    5 => 'Categorie',
-    6 => '(include http://)',
-    7 => 'Altele',
-    8 => 'Accesari Link',
-    9 => 'Descriere Link',
-    10 => 'E necesar sa introduceti un Titlu pentru link, Adresa/URL si Descriere.',
-    11 => 'Administrare Link-uri',
-    12 => 'Pentru a modifica sau sterge un link dati clic pe butonul de mai jos.  Pentru a crea un nou link dati clic pe butonul Link Nou de mai sus.',
-    13 => 'Titlu Link',
-    14 => 'Categorie Link',
-    15 => 'Adresa web/URL Link ',
-    16 => 'Acces interzis',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'Link Nou',
-    19 => 'Admin Home',
-    20 => 'Pentru altele, specificati',
-    21 => 'salveaza',
-    22 => 'anuleaza',
-    23 => 'sterge'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -727,16 +719,16 @@
     17 => 'Body Text',
     18 => 'Accesari',
     19 => 'comentarii',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Stire List',
     23 => 'To modify or sterge o stire, click on that Stire\'s number below. To view o stire, click on the Titlu of the Stire you wish to view. To create a new Stire click on new Stire above.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Previzualizare Stire',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Please fill in the Author, Titlu and Intro Text fields',
     32 => 'Featured',
@@ -769,39 +761,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mod',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Sondaj Creat',
-    4 => 'Sondaj %s salvat',
-    5 => 'Editare Sondaj',
-    6 => 'Sondaj ID',
-    7 => '(do not use spaces)',
-    8 => 'Appears on Homepage',
-    9 => 'Intrebare',
-    10 => 'Raspunsuri / Voturi',
-    11 => 'There was an error getting Sondaj answer data about the Sondaj %s',
-    12 => 'There was an error getting Sondaj intrebare data about the Sondaj %s',
-    13 => 'Create Sondaj',
-    14 => 'salveaza',
-    15 => 'anuleaza',
-    16 => 'sterge',
-    17 => 'Please enter a Poll ID',
-    18 => 'Lista Sondaje',
-    19 => 'To modify or sterge a Sondaj, click on that Sondaj.  To create a new Sondaj click on new Sondaj above.',
-    20 => 'Voturi',
-    21 => 'Access Denied',
-    22 => "You are trying to access a Sondaj that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the Sondaj administration screen</a>.",
-    23 => 'New Sondaj',
-    24 => 'Admin Home',
-    25 => 'Da',
-    26 => 'Nu'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -833,7 +816,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -875,7 +861,18 @@
     33 => 'trimite',
     34 => 'Eroare: trebuie specificat un fisieer pentru incarcat pe server/upload.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1020,7 +1017,11 @@
     31 => 'Are you sure you want to sterge this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click sterge again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1063,7 +1064,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1130,7 +1139,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1190,7 +1213,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1200,7 +1232,6 @@
     'last_ten_backups' => 'Ultimele 10 Backup-uri',
     'do_backup' => 'Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
     'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
@@ -1224,7 +1255,8 @@
     7 => 'Statistici',
     8 => 'Personalizeaza',
     9 => 'Cauta',
-    10 => 'cautare avansata'
+    10 => 'cautare avansata',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1266,4 +1298,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/romanian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/romanian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/romanian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/romanian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1507 @@
+<?php
+
+###############################################################################
+# romanian.php 
+# This is the romanian language page for GeekLog!
+#
+# Copyright (C) 2003 dan gheorghitza
+# dangk12@yahoo.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Scris de:',
+    2 => 'Citeste mai multe ...',
+    3 => 'comentarii',
+    4 => 'Editeaza',
+    5 => 'Sondaj',
+    6 => 'Rezultate',
+    7 => 'Rezultate Sondaj',
+    8 => 'voturi',
+    9 => 'Admin:',
+    10 => 'Trimiteri',
+    11 => 'Stiri',
+    12 => 'Block-uri',
+    13 => 'Sectiuni',
+    14 => 'Link-uri',
+    15 => 'Evenimente',
+    16 => 'Sondaje',
+    17 => 'Membri',
+    18 => 'Interogare SQL',
+    19 => 'Iesire/Deconectare',
+    20 => 'Membru Info:',
+    21 => 'Nume',
+    22 => 'Membru ID',
+    23 => 'Nivel Securitate',
+    24 => 'Anonim',
+    25 => 'Raspunde',
+    26 => 'Urmatoarele comentarii apartin celor care le-au trimis pe sit. Acest sit nu raspunde pentru continutul acestora.',
+    27 => 'Cel mai recent',
+    28 => 'Sterge',
+    29 => 'Nu sunt comentarii.',
+    30 => 'Stiri Vechi',
+    31 => 'Tag-uri HTML permise:',
+    32 => 'Eroare, nume Membru/username invalid',
+    33 => 'Eroare, nu se poate scrie in fisierul de log',
+    34 => 'Eroare',
+    35 => 'Iesire/Deconectare',
+    36 => 'pe',
+    37 => 'Nu sunt stiri ale vizitatorilor',
+    38 => 'Content Syndication',
+    39 => 'Actualizeaza',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Vizitatori',
+    42 => 'Scris de:',
+    43 => 'Raspunde la',
+    44 => 'Parinte',
+    45 => 'MySQL Eroare Numar',
+    46 => 'MySQL Eroare Mesaj',
+    47 => 'Membru Info',
+    48 => 'Informatii Cont',
+    49 => 'Preferinte',
+    50 => 'Eroare in codul SQL',
+    51 => 'ajutor',
+    52 => 'Nou',
+    53 => 'Admin Home',
+    54 => 'Nu se poate deschide fisierul.',
+    55 => 'Eroare la',
+    56 => 'Voteaza',
+    57 => 'Parola',
+    58 => 'Intra/Login',
+    59 => "Nu ai un cont inca? Inregistreaza-te ca <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Nou Membru</a>",
+    60 => 'Adauga un comentariu',
+    61 => 'Creaza Nou Cont',
+    62 => 'cuvinte',
+    63 => 'Preferinte Comentarii',
+    64 => 'Trimite stirea unui prieten',
+    65 => 'Vezi Versiunea pentru Imprimanta',
+    66 => 'Calendarul meu',
+    67 => 'Bine ati venit ',
+    68 => 'home',
+    69 => 'contact',
+    70 => 'cauta',
+    71 => 'contribuie',
+    72 => 'resurse web',
+    73 => 'sondaje vechi',
+    74 => 'calendar',
+    75 => 'cautare avansata',
+    76 => 'statistici sit',
+    77 => 'Plugin-uri',
+    78 => 'Evenimente recente',
+    79 => 'Ce mai e Nou',
+    80 => 'stiri in ultimele',
+    81 => 'stire in ultimele',
+    82 => 'ore',
+    83 => 'COMENTARII',
+    84 => 'LINK-URI',
+    85 => 'ultimele 48 ore',
+    86 => 'Nu sunt comentarii noi',
+    87 => 'ultimele 2 saptamani',
+    88 => 'Nu sunt link-uri recente',
+    89 => 'Nu sunt evenimente recente',
+    90 => 'Home',
+    91 => 'Pagina creata in',
+    92 => 'secunde',
+    93 => 'Copyright',
+    94 => 'All trademarks and copyrights on this page are owned by their respective owners.',
+    95 => 'Powered By',
+    96 => 'Grupuri',
+    97 => 'Lista Cuvinte',
+    98 => 'Plugin-uri',
+    99 => 'STIRI',
+    100 => 'Nu sunt stiri noi',
+    101 => 'Evenimente tale',
+    102 => 'Evenimente in site',
+    103 => 'DB Backup',
+    104 => 'de',
+    105 => 'Mail Membri',
+    106 => 'Vizualizari',
+    107 => 'GL Version Test',
+    108 => 'Sterge Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendar de Evenimente',
+    2 => 'Ne pare rau, nu sunt evenimente de vizualizat.',
+    3 => 'Cand',
+    4 => 'Unde',
+    5 => 'Descriere',
+    6 => 'Trimite Eveniment',
+    7 => 'Evenimente recente',
+    8 => 'Adaugand acest eveniment la calendaarul tau se pot accesa rapid evenimentele care te intereseaza cu un click pe "Calendarul meu" din sectiunea Membru Info',
+    9 => 'Adauga la Calendarul meu',
+    10 => 'Sterge din Calendarul meu',
+    11 => "Se adauga Eveniment in Calendarul lui {$_USER['username']}",
+    12 => 'Eveniment',
+    13 => 'Incepe',
+    14 => 'Se termina',
+    15 => 'Inapoi la Calendar'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Trimite un Comentariu',
+    2 => 'Mod trimitere',
+    3 => 'Iesire',
+    4 => 'Inregistrare',
+    5 => 'Membru',
+    6 => 'Intrati ca membru/utilizator inregistrat pentru a trimite comentarii. Pentru inregistrare completati miniformularul de mai jos.',
+    7 => 'Ultimul tau comentariu a fost acum',
+    8 => " secunde in urma.  Asteptati cel putin {$_CONF['commentspeedlimit']} secunde pentru a introduce un nou comentariu",
+    9 => 'Comentariu',
+    10 => 'Send Report',
+    11 => 'Trimite Comentariu',
+    12 => 'E necesar sa completati in Titlu si Comentariu pentru a putea trimite comentariul.',
+    13 => 'Informatia ta',
+    14 => 'Previzualizeaza',
+    15 => 'Report this post',
+    16 => 'Titlu',
+    17 => 'Eroare',
+    18 => 'Material Important',
+    19 => 'Va rugam sa continuati a trimite pe acest subiect.',
+    20 => 'Incearca sa raspunzi la comentariile altora in loc de a introduce comentarii noi.',
+    21 => 'Citeste mesajele altora inainte de a trimite pentru a evita dublarea unui mesaj',
+    22 => 'Alege sectiunea potrivita pentru mesajul tau.',
+    23 => 'Adresa ta email nu va fi facuta publica.',
+    24 => 'Vizitator Anonim',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profil Membru pentru',
+    2 => 'Nume membru',
+    3 => 'Nume',
+    4 => 'Parola',
+    5 => 'Email',
+    6 => 'Pagina web',
+    7 => 'Bio',
+    8 => 'Cheie PGP',
+    9 => 'Salveaza modificarile',
+    10 => 'Ultimele 10 comentarii pentru utilizatorul',
+    11 => 'Nu sunt comentarii',
+    12 => 'Preferinte membru pentru',
+    13 => 'Email Nightly Digest',
+    14 => 'Aceasta parola este generata aleatoriu. Este recomandat sa schimbi parola imediat. Pentru aceasta va logati si dati clic pe Informatii Cont din meniul Membru Info',
+    15 => "Contul tau {$_CONF['site_name']} a fost creat cu succes. Pentru a-l utiliza e necesar sa va logati utilizand informatiile de mai jos.  Este indicat sa va salvati acest mail.",
+    16 => 'Informatii Cont',
+    17 => 'Contul nu exista',
+    18 => 'Adresa email introdusa nu pare a vi valida (nume@server.com)',
+    19 => 'Nume Membru sau adresa email introduse exista deja.',
+    20 => 'Adresa email introdusa nu pare a vi valida (nume@server.com)',
+    21 => 'Eroare',
+    22 => "Inregistrare la {$_CONF['site_name']}!",
+    23 => "Crearea unui cont membru prin inregistrare va ofera toate beneficiile unui membru la {$_CONF['site_name']} si va permite sa trimiteti comentarii sau stiri/texte cu numele ales. Daca nu aveti un cont creat, puteti trimite texte doar ca anonim. Va reamintim ca adresa email nu va fi disponibila <b><i>niciodata</i></b> spre vizualizare publica.",
+    24 => 'Parola ta va fi trimisa la adresa de email introdusa.',
+    25 => 'Ati uitat parola?',
+    26 => 'Introduceti numele de utilizator/membru si dati clic pe Trimite Parola si o parola generata aleatoriu va fi trimisa la adresa de email introdusa.',
+    27 => 'Inregistrati-va!',
+    28 => 'Trimite Parola',
+    29 => 'iesit din',
+    30 => 'intrat din',
+    31 => 'Optiunea aleasa cere sa intrati ca membru/utilizator inregistrat',
+    32 => 'Semnatura',
+    33 => 'Niciodata disponibil spre vizualizare publica',
+    34 => 'Acesta este numele tau adevarat',
+    35 => 'Introduceti parola pentru modificare',
+    36 => 'Incepe cu http://',
+    37 => 'Aplicat la comentariile tale',
+    38 => 'Este despre tine! Oricine poate citi aceasta',
+    39 => 'Cheia publica PGP pentru date private',
+    40 => 'Nu exista iconite pentru subiecte',
+    41 => 'Moderati!',
+    42 => 'Format Data',
+    43 => 'Maxim stiri',
+    44 => 'Fara casute',
+    45 => 'Arata preferinte pentru',
+    46 => 'Exclude obiecte pentru',
+    47 => 'Configurare Casuta stiri pentru',
+    48 => 'Subiecte',
+    49 => 'Nu sunt iconite in stiri',
+    50 => 'Deselecteaza aceasta daca nu sunteti interesat',
+    51 => 'Doar stiri',
+    52 => 'Implicit este',
+    53 => 'Primiti inainte stirile zilei urmatoare',
+    54 => 'Selectati casutele pentru subiectele si autorii pe care nu-i vreti.',
+    55 => 'Daca nu selectati nimic, inseamna ca sunteti de acord cu selectarea implicita (optiunile ingrosate). Sau selectati doar optiunile dorite si selectarea implicita va fi ignorata.',
+    56 => 'Autori',
+    57 => 'Mod vizualizare',
+    58 => 'Ordine Sortare',
+    59 => 'Limita Comentariu',
+    60 => 'Cum doriti sa fie vizualizate comentariile?',
+    61 => 'Primul - cel mai nou sau cel mai vechi?',
+    62 => 'Implicit este 100',
+    63 => "Parola a fost trimisa prin e-mail si trebuie sa o primiti imediat. Va rugam sa urmati indicatiile din mesaj si va multumim pentru utilizarea {$_CONF['site_name']}",
+    64 => 'Preferinte Comentarii pentru',
+    65 => 'Intrare/Login din nou ca membru ',
+    66 => "Probabil ati introdus gresit datele. Va rugam sa le reintroduceti din nou mai jos. Sunteti un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">nou utilizator</a>?",
+    67 => 'Membru din',
+    68 => 'Salvati-mi datele pentru',
+    69 => 'Pentru cat timp doriti sa fie salvate datele personale dupa intrare/login?',
+    70 => "Personalizati design-ul si continutul {$_CONF['site_name']}",
+    71 => "Una din optiunile paginii {$_CONF['site_name']} este este ca puteti sa va alegeti ce va contine cum va arata pagina aceasta.  Pentru a beneficia de acestea e necesar, mai intai, sa va <a href=\"{$_CONF['site_url']}/users.php?mode=new\">inregistrati</a> with {$_CONF['site_name']}.  Sunteti deja membru/utilizator inregistrat? Atunci folositi modulul din stanga pentru a va loga/intra ca membru!",
+    72 => 'Model pagina',
+    73 => 'Limba',
+    74 => 'Schimba modelul paginii dupa preferinte!',
+    75 => 'Subiect de trimis prin email pentru',
+    76 => 'Daca selectati un subiect din lista de mai jos veti primi fiecare stire/text cu subiectul respectiv la sfarsitul fiecarei zile. Alegeti doar subiectele ce va intereseaza!',
+    77 => 'Poza',
+    78 => 'Adauga o poza personala!',
+    79 => 'Sterge imaginea',
+    80 => 'Intra',
+    81 => 'Trimite Email',
+    82 => 'Ultimele 10 stiri pentru utilizatorul',
+    83 => 'Statistici texte trimise de utilizatorul',
+    84 => 'Total numar de articole:',
+    85 => 'Total numar de comentarii:',
+    86 => 'Cauta toate textele trimise de',
+    87 => 'Your login name',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Set New Password',
+    92 => 'Enter New Password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Delete Account "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'delete account',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Privacy Options for',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email from Users',
+    103 => 'Allow email from other users',
+    104 => 'Show Online Status',
+    105 => 'Show up in Who\'s Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Nu sunt stiri de vizualizat.',
+    2 => 'Nu sunt stiri de vizualizat. Pentru ca nu exista stiri noi sau preferintele tale sunt prea restrictive.',
+    3 => ' pentru sectiunea %s',
+    4 => 'Stirea zilei',
+    5 => 'Inainte',
+    6 => 'Inapoi',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'A fost o eroare la trimiterea mesajului. Va rugam sa incercati din nou.',
+    2 => 'Mesajul a fost trimis cu succes.',
+    3 => 'Verificati daca adresa de email introdusa in campul Raspunde este valida.',
+    4 => 'Va rugam sa introduceti datele pentru campurile Numele tau, Raspunde, Subiect si Mesaj.',
+    5 => 'Eroare. Nu exista utilizatorul respectiv.',
+    6 => 'A fost o eroare.',
+    7 => 'Profil membru pentru',
+    8 => 'Nume membru',
+    9 => 'Membru URL/adresa web',
+    10 => 'Trimite email la',
+    11 => 'Numele tau:',
+    12 => 'Raspunde:',
+    13 => 'Subiect:',
+    14 => 'Mesaj:',
+    15 => 'HTML nu va fi interpretat.',
+    16 => 'Trimite Mesaj',
+    17 => 'Trimite unui prieten',
+    18 => 'Nume prieten',
+    19 => 'Adresa Email prieten',
+    20 => 'Numele tau',
+    21 => 'Adresa ta de Email',
+    22 => 'Toate campurile sunt obligatorii',
+    23 => "Acest mesaj a fost trimis de %s la %s deoarece a crezut ca ai putea fi interesat de acest text de la {$_CONF['site_url']}.  Acesta nu este SPAM si adresa dvs. de email nu a fost salvata sau stocata pentru folosire ulterioara.",
+    24 => 'Comentariu pentru aceasta stire la',
+    25 => 'Trebuie sa fiti membru/utilizator inregistrat pentru a folosi aceasta facilitate.  E nevoie de inregistrare pentru a preveni o folosire incorecta a sistemului',
+    26 => 'Acest formular va permite sa trimiteti un email unui membru selectat.   Toate campurile trebuie completate.',
+    27 => 'Mesaj scurt',
+    28 => '%s a scris: ',
+    29 => "Acesta este sumarul zilnic de la {$_CONF['site_name']} pentru ",
+    30 => ' Buletin informativ zilnic pentru ',
+    31 => 'Titlu',
+    32 => 'Data',
+    33 => 'Citeste tot textul la',
+    34 => 'Final mesaj',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Cautare avansata',
+    2 => 'Cuvinte cheie',
+    3 => 'Subiect',
+    4 => 'Toate',
+    5 => 'Tip',
+    6 => 'stiri',
+    7 => 'comentarii',
+    8 => 'Autori',
+    9 => 'Toate',
+    10 => 'Cauta',
+    11 => 'Rezultat cautare',
+    12 => 'rezultate',
+    13 => 'Rezultate cautare: Niciun rezultat',
+    14 => 'Niciun rezultat pentru cautarea ta dupa',
+    15 => 'Incercati din nou.',
+    16 => 'Titlu',
+    17 => 'Data',
+    18 => 'Autor',
+    19 => "Cauta in toata baza de date a {$_CONF['site_name']} prin stirile curente sau vechi",
+    20 => 'Data',
+    21 => 'la',
+    22 => '(Format pentru Data AAAA-LL-ZZ)',
+    23 => 'Accesari',
+    24 => 'Gasit',
+    25 => 'rezultate pentru',
+    26 => 'subiecte/items in',
+    27 => 'secunde',
+    28 => 'Nici o stire sau comentariu rezultate in urma cautarii',
+    29 => 'Rezultat Stiri si Comentarii',
+    30 => 'Nici un link rezultat in urma cautarii',
+    31 => 'Acest plug-in nu are rezultate',
+    32 => 'Eveniment',
+    33 => 'URL',
+    34 => 'Loc',
+    35 => 'Fiecare zi',
+    36 => 'Nici un Eveniment rezultat in urma cautarii',
+    37 => 'Rezultate Evenimente',
+    38 => 'Rezultate Link-uri',
+    39 => 'Link-uri',
+    40 => 'Evenimente',
+    41 => 'Cuvantul cautat trebuia sa aiba cel putin 3 litere.',
+    42 => 'Va rugam folositi un format pentru data de tipul AAAA-LL-ZZ (an-luna-zi).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistici Site',
+    2 => 'Total Accesari Sistem',
+    3 => 'Stiri(comentarii) in Sistem',
+    4 => 'Sondaje(Raspunsuri) in Sistem',
+    5 => 'Link-uri(Clicks) in Sistem',
+    6 => 'Evenimente in Sistem',
+    7 => 'Top 10 Stiri vizualizate',
+    8 => 'Stire Titlu',
+    9 => 'Vizualizari',
+    10 => 'Nu sunt siri pe sit sau nu au fost vizualizate.',
+    11 => 'Top 10 stiri comentate',
+    12 => 'comentarii',
+    13 => 'Nu sunt siri pe sit sau nu exista comentarii trimise pentru acestea.',
+    14 => 'Top 10 Sondaje',
+    15 => 'Intrebare Sondaj',
+    16 => 'Voturi',
+    17 => 'Nu sunt sondaje pe sit sau nu exista inca voturi pentru acestea.',
+    18 => 'Top 10 Link-uri',
+    19 => 'Link-uri',
+    20 => 'Accesari',
+    21 => 'Nu sunt link-uri pe sit sau nu au fost inca accesate.',
+    22 => 'Top 10 stiri trimise altora prin email',
+    23 => 'Adrese Email',
+    24 => 'Nu sunt stiri trimise altora prin email.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Link-uri inrudite',
+    2 => 'Trimite unui prieten',
+    3 => 'Pagina in format pentru imprimanta',
+    4 => 'Optiuni Stire',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Pentru a trimite o %s e necesar sa intri ca membru/utilizator inregistrat.',
+    2 => 'Intra/Login',
+    3 => 'Nou membru',
+    4 => 'Anunta un Eveniment',
+    5 => 'Trimite un Link',
+    6 => 'Trimite o stire',
+    7 => 'Inregistrarea e necesara',
+    8 => 'Trimite',
+    9 => 'Cand trimiteti un text pentru a fi introdus in aceasta pagina web, va rugam sa urmati sugestiile de mai jos: <ul><li>Completati toate campurile care sunt obligatorii<li>Introduceti informatii complete si corecte<li>Verificati adresele web/URL</ul>',
+    10 => 'Titlu',
+    11 => 'Link',
+    12 => 'Data incepere',
+    13 => 'Data terminare',
+    14 => 'Loc',
+    15 => 'Descriere',
+    16 => 'Pentru altele, specificati care',
+    17 => 'Categorie',
+    18 => 'Alta',
+    19 => 'Citeste mai inainte',
+    20 => 'Eroare: Categoria inexistenta',
+    21 => 'Cand selectati "Alta" varugam sa introduceti si un nume',
+    22 => 'Eroare: Date necompletate',
+    23 => 'Va rugam sa completati toate datele in formular. Sunt necesare toate.',
+    24 => 'Datele au fost salvate',
+    25 => '%s de inregistrare a fost salvat cu succes.',
+    26 => 'Limita Viteza',
+    27 => 'Membru',
+    28 => 'Subiect',
+    29 => 'Stire',
+    30 => 'Ultima trimitere a fost acum ',
+    31 => " secunde.  Asteptati {$_CONF['speedlimit']} secunde pentru a trimite iar.",
+    32 => 'Previzualizeaza',
+    33 => 'Previzualizare Stire',
+    34 => 'Iesire/Logout',
+    35 => 'Tag-uri HTML nu sunt permise',
+    36 => 'Mod trimitere',
+    37 => "Anuntand un eveniment la {$_CONF['site_name']}, evenimentul va fi introdus in Calendarul Master de unde alti membri il pot adauga in calendarul lor propriu. Aceasta facilitate <b>NOT</b> este pentru a stoca evenimente personale precum ziua de nastere si aniversari.<br><br>Odata introdus un eveniment, acesta va fi verificat si daca va fi aprobat, va aparea in Calendar Master.",
+    38 => 'Adauga Eveniment la',
+    39 => 'Calendar Master',
+    40 => 'Calendar Personal',
+    41 => 'Ora terminare',
+    42 => 'Ora incepere',
+    43 => 'Eveniment zilnic',
+    44 => 'Adresa 1',
+    45 => 'Adresa 2',
+    46 => 'Oras',
+    47 => 'Stat',
+    48 => 'Zip Cod',
+    49 => 'Eveniment Tip',
+    50 => 'Modifica Tipuri de Evenimente',
+    51 => 'Locul',
+    52 => 'Sterge',
+    53 => 'Inregistrare'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autenficarea necesara',
+    2 => 'Acces refuzat! Informatii introduse incorect',
+    3 => 'Parola gresita pentru utilizator',
+    4 => 'Membru:',
+    5 => 'Parola:',
+    6 => 'Accesul la zona de administrare a sit-ului este inregistrat si verificat periodic.<br>Aceasta zona este doar pentru persoanele autorizate.',
+    7 => 'intra/login'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Insufficient Admin Rights',
+    2 => 'You do not have the necessary rights to edit this block.',
+    3 => 'Block Editor',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Block Titlu',
+    6 => 'Topic',
+    7 => 'Toate',
+    8 => 'Block Security Level',
+    9 => 'Block Order',
+    10 => 'Block Tip',
+    11 => 'Portal Block',
+    12 => 'Normal Block',
+    13 => 'Portal Block Options',
+    14 => 'RDF URL',
+    15 => 'Ultimul RDF Update',
+    16 => 'Normal Block Options',
+    17 => 'Block Content',
+    18 => 'Please fill in the Block Titlu, Security Level and Content fields',
+    19 => 'Block Manager',
+    20 => 'Block Titlu',
+    21 => 'Block SecLev',
+    22 => 'Block Tip',
+    23 => 'Block Order',
+    24 => 'Block Topic',
+    25 => 'To modify or sterge a block, click on that block below.  To create a new block click on new block above.',
+    26 => 'Layout Block',
+    27 => 'PHP Block',
+    28 => 'PHP Block Options',
+    29 => 'Block Function',
+    30 => 'If you would like to have one of your blocks use PHP code, enter the name of the function above.  Your function name must start with the prefix "phpblock_" (e.g. phpblock_getweather).  If it does not have this prefix, your function will NOT be called.  We do this to keep people who may have hacked your Geeklog installation from putting arbitrary function calls that may be harmful to your system.  Be sure not to put empty parenthisis "()" after your function name.  Finally, it is recommended that you put all your PHP Block code in /path/to/geeklog/system/lib-custom.php.  That will allow the code to stay with you even when you upgrade to a newer version of Geeklog.',
+    31 => 'Error in PHP Block.  Function, %s, does not exist.',
+    32 => 'Error Missing Field(s)',
+    33 => 'You must enter the URL to the .rdf file for portal blocks',
+    34 => 'You must enter the Titlu and the function for PHP blocks',
+    35 => 'You must enter the Titlu and the content for normal blocks',
+    36 => 'You must enter the content for layout blocks',
+    37 => 'Bad PHP block function name',
+    38 => 'Functions for PHP Blocks must have the prefix \'phpblock_\' (e.g. phpblock_getweather).  The \'phpblock_\' prefix is required for security reasons to prevent the execution of arbitrary code.',
+    39 => 'Side',
+    40 => 'Stanga',
+    41 => 'Dreapta',
+    42 => 'You must enter the blockorder and security level for Geeklog default blocks',
+    43 => 'Homepage Only',
+    44 => 'Access Denied',
+    45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
+    46 => 'Bloc nou',
+    47 => 'Admin Home',
+    48 => 'Nume Bloc',
+    49 => ' (no spaces and must be unique)',
+    50 => 'Help File URL',
+    51 => 'include http://',
+    52 => 'If you leave this blank the help icon for this block will not be displayed',
+    53 => 'Enabled',
+    54 => 'salveaza',
+    55 => 'anuleaza',
+    56 => 'sterge',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor Evenimente',
+    2 => 'Error',
+    3 => 'Titlu Eveniment',
+    4 => 'Eveniment URL',
+    5 => 'Eveniment Start Date',
+    6 => 'Eveniment End Date',
+    7 => 'Eveniment Location',
+    8 => 'Eveniment Descriere',
+    9 => '(include http://)',
+    10 => 'You must provide the dates/times, descriere and Eveniment location!',
+    11 => 'Eveniment Manager',
+    12 => 'To modify or sterge a Eveniment, click on that Eveniment below.  To create a new Eveniment click on new Eveniment above.',
+    13 => 'Eveniment Titlu',
+    14 => 'Start Date',
+    15 => 'End Date',
+    16 => 'Access Denied',
+    17 => "You are trying to access an Eveniment that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/event.php\">go back to the Eveniment administration screen</a>.",
+    18 => 'Nou Eveniment',
+    19 => 'Admin Home',
+    20 => 'salveaza',
+    21 => 'anuleaza',
+    22 => 'sterge',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Stiri precedente',
+    2 => 'Stiri urmatoare',
+    3 => 'Mod',
+    4 => 'Mod trimitere',
+    5 => 'Editor Stiri',
+    6 => 'Nu sunt stiri in sistem',
+    7 => 'Autor',
+    8 => 'salveaza',
+    9 => 'previzualizeaza',
+    10 => 'anuleaza',
+    11 => 'sterge',
+    12 => 'ID',
+    13 => 'Titlu',
+    14 => 'Subiect',
+    15 => 'Data',
+    16 => 'Intro Text',
+    17 => 'Body Text',
+    18 => 'Accesari',
+    19 => 'comentarii',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Stire List',
+    23 => 'To modify or sterge o stire, click on that Stire\'s number below. To view o stire, click on the Titlu of the Stire you wish to view. To create a new Stire click on new Stire above.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Previzualizare Stire',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Please fill in the Author, Titlu and Intro Text fields',
+    32 => 'Featured',
+    33 => 'There can only be one featured stire',
+    34 => 'Draft',
+    35 => 'Da',
+    36 => 'Nu',
+    37 => 'Scrise de',
+    38 => 'Mai mult despre',
+    39 => 'Emails',
+    40 => 'Acces interzis',
+    41 => "You are trying to access o stire that you don't have rights to.  This attempt has been logged.  You may view the article in read-only below. Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the stire administration screen</a> when you are done.",
+    42 => "You are trying to access o stire that you don't have rights to.  This attempt has been logged.  Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the stire administration screen</a>.",
+    43 => 'New Stire',
+    44 => 'Admin Home',
+    45 => 'Access',
+    46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the stire will not be included in your RDF headline feed and it will be ignored by the search and statistics pages.',
+    47 => 'Images',
+    48 => 'image',
+    49 => 'dreapta',
+    50 => 'stanga',
+    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your stire.<BR><P><B>PREVIEWING</B>: Previewing o stire with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    52 => 'Sterge',
+    53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
+    54 => 'Attached Images Not Used',
+    55 => 'The following errors occured while trying to save your stire.  Please correct these errors before saving',
+    56 => 'Show Topic Icon',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Topic Editor',
+    2 => 'Topic ID',
+    3 => 'Topic Name',
+    4 => 'Topic Image',
+    5 => '(do not use spaces)',
+    6 => 'Deleting a topic sterges all stiri and blocks associated with it',
+    7 => 'Please fill in the Topic ID and Topic Name fields',
+    8 => 'Topic Manager',
+    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find your access level for each topic in parenthesis',
+    10 => 'Sort Order',
+    11 => 'Stiri/Page',
+    12 => 'Access Denied',
+    13 => "You are trying to access a topic that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/topic.php\">go back to the topic administration screen</a>.",
+    14 => 'Sort Method',
+    15 => 'alphabetical',
+    16 => 'default is',
+    17 => 'New Topic',
+    18 => 'Admin Home',
+    19 => 'save',
+    20 => 'anuleaza',
+    21 => 'sterge',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor Utilizatori',
+    2 => 'Membru ID',
+    3 => 'Nume membru',
+    4 => 'Nume',
+    5 => 'Parola',
+    6 => 'Nivel Securitate',
+    7 => 'Adresa Email',
+    8 => 'Pagina principala',
+    9 => '(nu utilizati spatii)',
+    10 => 'Va rugam, completati campurile Membru, Nume, Nivel Securitate si  Adresa Email',
+    11 => 'Administrare Ulilizatori',
+    12 => 'Pentru a modifica sau sterge un membru, dati clic pe un utilizator de mai jos.  Pentru a crea un nou utilizator dati clic pe butonul de creare nou utilizator din stanga. Puteti realiza cautari simple introducand utilizator, adresa de email sau nume (ex. *ion*, *.it sau *.ro) in formularul urmator.',
+    13 => 'SecLev',
+    14 => 'Reg. Data',
+    15 => 'Membru Nou',
+    16 => 'Admin Home',
+    17 => 'Schimba parola',
+    18 => 'anuleaza',
+    19 => 'sterge',
+    20 => 'salveaza',
+    21 => 'Numele Membru ales exista deja.',
+    22 => 'Eroare',
+    23 => 'Batch Add',
+    24 => 'Batch Import of Users',
+    25 => 'You can import a batch of users into Geeklog.  The import file must a tab-delimited text file and must have the fields in the following order: full name, Membru, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
+    26 => 'Cauta',
+    27 => 'Limita Rezultate',
+    28 => 'Check here to sterge this picture',
+    29 => 'Cale',
+    30 => 'Importa',
+    31 => 'Membri noi',
+    32 => 'Done processing. Imported %d and encountered %d failures',
+    33 => 'trimite',
+    34 => 'Eroare: trebuie specificat un fisieer pentru incarcat pe server/upload.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Approve',
+    2 => 'sterge',
+    3 => 'Edit',
+    4 => 'Profile',
+    10 => 'Titlu',
+    11 => 'Start Date',
+    12 => 'URL',
+    13 => 'Category',
+    14 => 'Date',
+    15 => 'Topic',
+    16 => 'User name',
+    17 => 'Full name',
+    18 => 'Email',
+    34 => 'Command and Control',
+    35 => 'Stire Submissions',
+    36 => 'Link Submissions',
+    37 => 'Eveniment Submissions',
+    38 => 'Trimite',
+    39 => 'There are no submissions to moderate at this time',
+    40 => 'User Submissions'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Duminica',
+    2 => 'Luni',
+    3 => 'Marti',
+    4 => 'Miercuri',
+    5 => 'Joi',
+    6 => 'Vineri',
+    7 => 'Sambata',
+    8 => 'Adauga Eveniment',
+    9 => 'Geeklog Eveniment',
+    10 => 'Evenimente pentru',
+    11 => 'Calendar Master',
+    12 => 'Calendarul meu',
+    13 => 'Ianuarie',
+    14 => 'Februarie',
+    15 => 'Martie',
+    16 => 'Aprilie',
+    17 => 'Mai',
+    18 => 'Iunie',
+    19 => 'Iulie',
+    20 => 'August',
+    21 => 'Septembrie',
+    22 => 'Octombrie',
+    23 => 'Noiembrie',
+    24 => 'Decembrie',
+    25 => 'Inapoi',
+    26 => 'Toata ziua',
+    27 => 'Saptamana',
+    28 => 'Calendar Personal pentru',
+    29 => 'Calendar Public',
+    30 => 'sterge eveniment',
+    31 => 'Adauga',
+    32 => 'Eveniment',
+    33 => 'Data',
+    34 => 'Ora',
+    35 => 'Adauga rapid',
+    36 => 'OK',
+    37 => 'Ne pare rau, facilitatea \'calendar personal\' nu este activata',
+    38 => 'Editor Evenimente Personale',
+    39 => 'Ziua',
+    40 => 'Saptamana',
+    41 => 'Luna'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'From',
+    3 => 'Reply-to',
+    4 => 'Subject',
+    5 => 'Body',
+    6 => 'Send to:',
+    7 => 'All users',
+    8 => 'Admin',
+    9 => 'Options',
+    10 => 'HTML',
+    11 => 'Urgent message!',
+    12 => 'Send',
+    13 => 'Reset',
+    14 => 'Ignore user settings',
+    15 => 'Error when sending to: ',
+    16 => 'Successfully sent messages to: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Send another message</a>",
+    18 => 'To',
+    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
+    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
+    21 => 'Failures',
+    22 => 'Successes',
+    23 => 'No failures',
+    24 => 'No successes',
+    25 => '-- Select Group --',
+    26 => 'Please fill in all the fields on the form and select a group of users from the drop down.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Plug-in List',
+    6 => 'Warning: Plug-in Already Installed!',
+    7 => 'The plug-in you are trying to install already exists.  Please sterge the plugin before re-installing it',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
+    11 => 'To modify or sterge a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
+    12 => 'no plugin name provided to plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'New Plug-in',
+    15 => 'Admin Home',
+    16 => 'Plug-in Name',
+    17 => 'Plug-in Version',
+    18 => 'Geeklog Version',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => 'Install',
+    23 => 'Salveaza',
+    24 => 'anuleaza',
+    25 => 'Sterge',
+    26 => 'Plug-in Name',
+    27 => 'Plug-in Homepage',
+    28 => 'Plug-in Version',
+    29 => 'Versiune Geeklog ',
+    30 => 'Sterge Plug-in?',
+    31 => 'Are you sure you want to sterge this plug-in?  By doing so you will remove all the data and data structures that this plug-in uses.  If you are sure, click sterge again on the form below.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Parola a fost trimisa prin e-mail si trebuie sa o primiti imediat. Va rugam sa urmati indicatiile din mesaj si va multumim pentru utilizarea {$_CONF['site_name']}",
+    2 => "Va multumim pentru stirea/textul trimis la {$_CONF['site_name']}.  A fost trimisa pentru aprobare. Daca va fi aprobata, stirea dvs. va fi disponibila pe sit pentru vizualizare.",
+    3 => "Va multumim pentru link-ul (adresa web)  propus(a) la {$_CONF['site_name']}.  A fost trimisa pentru aprobare. Daca va fi aprobat, link-ul dvs. va fi introdus in sectiunea <a href={$_CONF['site_url']}/links.php>link-uri</a>.",
+    4 => "Va multumim pentru evenimentul trimis la {$_CONF['site_name']}.  A fost trimisa pentru aprobare.  Daca va fi aprobat, evenimentul dvs. va fi introdus in sectiunea <a href={$_CONF['site_url']}/calendar.php>calendar</a>.",
+    5 => 'Informatiile tale au fost salvate cu succes.',
+    6 => 'Preferintele tale au fost salvate cu succes.',
+    7 => 'Preferintele tale pentru comentarii au fost salvate cu succes.',
+    8 => 'Ai iesit cu succes din aria utilizatori inregistrati/membri.',
+    9 => 'Stirea a fost salvata cu succes.',
+    10 => 'Stirea a fost stearsa cu succes.',
+    11 => 'Blocul a fost salvat cu succes.',
+    12 => 'Blocul a fost sters cu succes.',
+    13 => 'Subiectul tau a fost salvat cu succes.',
+    14 => 'The topic and all it\'s stiri and blocks have been successfully sters.',
+    15 => 'Link-ul tau a fost salvat cu succes.',
+    16 => 'Link-ul tau a fost sters cu succes.',
+    17 => 'Evenimentul a fost salvat cu succes.',
+    18 => 'Evenimentul a fost sters cu succes.',
+    19 => 'Sondajul a fost salvat cu succes.',
+    20 => 'Sondajul a fost sters cu succes.',
+    21 => 'Noul membru a fost salvat cu succes.',
+    22 => 'Ulilizatorul a fost sters cu succes',
+    23 => 'Eroare la adaugarea unui Eveniment in calendarul tau. There was no Eveniment id passed.',
+    24 => 'Evenimentul a fost salvat in calendarul tau',
+    25 => 'Nu se poate vedea calendarul tau personal pana nu intri ca utilizator inregistrat (login).',
+    26 => 'Eveniment was successfully removed from your personal calendar',
+    27 => 'Mesaj trimis cu succes.',
+    28 => 'The plug-in has been successfully saved',
+    29 => 'Sorry, personal calendars are not enabled on this site',
+    30 => 'Access interzis',
+    31 => 'Sorry, you do not have access to the stire administration page.  Please note that all attempts to access unauthorized features are logged',
+    32 => 'Sorry, you do not have access to the topic administration page.  Please note that all attempts to access unauthorized features are logged',
+    33 => 'Sorry, you do not have access to the block administration page.  Please note that all attempts to access unauthorized features are logged',
+    34 => 'Sorry, you do not have access to the link administration page.  Please note that all attempts to access unauthorized features are logged',
+    35 => 'Sorry, you do not have access to the Eveniment administration page.  Please note that all attempts to access unauthorized features are logged',
+    36 => 'Sorry, you do not have access to the Sondaj administration page.  Please note that all attempts to access unauthorized features are logged',
+    37 => 'Sorry, you do not have access to the user administration page.  Please note that all attempts to access unauthorized features are logged',
+    38 => 'Sorry, you do not have access to the plugin administration page.  Please note that all attempts to access unauthorized features are logged',
+    39 => 'Sorry, you do not have access to the mail administration page.  Please note that all attempts to access unauthorized features are logged',
+    40 => 'Mesaj sistem',
+    41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
+    42 => 'Your word has been successfully saved.',
+    43 => 'The word has been successfully sters.',
+    44 => 'The plug-in was successfully installed!',
+    45 => 'The plug-in was successfully sters.',
+    46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
+    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Va multumim pentru inregistrarea la {$_CONF['site_name']}. Vom revedea  inscrierea dvs. si daca va fi aprobata, parola dvs. va fi trimisa la adresa de e-mail pe care ati introdus-o.",
+    49 => 'Your group has been successfully saved.',
+    50 => 'The group has been successfully sters.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Access',
+    'ownerroot' => 'Owner/Root',
+    'group' => 'Group',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Access Rights',
+    'owner' => 'Owner',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTE: members is all logged in members of the site and anonymous is all users browsing the site that aren\'t logged in.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/user.php\">User Administration page</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Descriere',
+    'name' => 'Name',
+    'rights' => 'Rights',
+    'missingfields' => 'Missing Fields',
+    'missingfieldsmsg' => 'You must supply the name and a descriere for a group',
+    'groupmanager' => 'Group Manager',
+    'newgroupmsg' => 'To modify or sterge a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be sters because they are used in the system.',
+    'groupname' => 'Group Name',
+    'coregroup' => 'Core Group',
+    'yes' => 'Yes',
+    'no' => 'No',
+    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
+    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
+    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
+    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'lock' => 'Lock',
+    'members' => 'Members',
+    'anonymous' => 'Anonymous',
+    'permissions' => 'Permissions',
+    'permissionskey' => 'R = read, E = edit, edit rights assume read rights',
+    'edit' => 'Edit',
+    'none' => 'None',
+    'accessdenied' => 'Access Denied',
+    'storydenialmsg' => "You do not have access to view this stire.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this Eveniment.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
+    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'newgroup' => 'New Group',
+    'adminhome' => 'Admin Home',
+    'save' => 'save',
+    'cancel' => 'anuleaza',
+    'delete' => 'sterge',
+    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Ultimele 10 Backup-uri',
+    'do_backup' => 'Backup',
+    'backup_successful' => 'Database back up was successful.',
+    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
+    'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
+    'backup_file' => 'Backup file',
+    'size' => 'Size',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Home',
+    2 => 'Contact',
+    3 => 'Publica',
+    4 => 'Link-uri',
+    5 => 'Sondaje',
+    6 => 'Calendar',
+    7 => 'Statistici',
+    8 => 'Personalizeaza',
+    9 => 'Cauta',
+    10 => 'cautare avansata',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Eroare 404',
+    2 => 'Oh, nu! Ne-am uitat peste tot, dar n-am gasit <b>%s</b>.',
+    3 => "<p>Ne pare rau, dar pagina care o cautati nu exista. Va rugam, verificati <a href=\"{$_CONF['site_url']}\">pagina principala</a> sau <a href=\"{$_CONF['site_url']}/search.php\">pagina de cautare</a> sa vedeti daca gasiti ceea ce cautati."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Inregistrare necesara',
+    2 => 'Ne pare rau, pentru a avea acces la aceasta zona trebuie sa fiti membru/utilizator inregistrat.',
+    3 => 'Inregistrare',
+    4 => 'Membru Nou'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/russian.php 1.4.0sr5-1/cpanel-glprivate/language/russian.php
--- 1.3.11sr1/cpanel-glprivate/language/russian.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/russian.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,6 +15,9 @@
 # Updated for version 1.3.8-1sr2 by Kuznetsov Denis
 # d_kuz@bk.ru
 #
+# Updated (translating the untranslated text) by Konstantinn Boyandin
+# konstantin@boyandin.ru
+#
 # Credits of English version:
 # Special thanks to Mischa Polivanov for his work on this project
 #
@@ -91,9 +94,9 @@
     35 => '',
     36 => '',
     37 => ' ',
-    38 => 'Content Syndication',
+    38 => '',
     39 => '',
-    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    40 => '  <tt>register_globals = Off</tt>   <tt>php.ini</tt>.  Geeklog ,  <tt>register_globals</tt>   (<strong>on</strong>).    <strong>php.ini</strong>   HTTP .',
     41 => '',
     42 => ':',
     43 => '  ',
@@ -130,7 +133,7 @@
     74 => '',
     75 => ' ',
     76 => '',
-    77 => 'Plugins',
+    77 => '',
     78 => ' ',
     79 => ' ',
     80 => ' ',
@@ -148,7 +151,7 @@
     92 => '',
     93 => '',
     94 => '           .',
-    95 => 'Powered By',
+    95 => ' ',
     96 => '',
     97 => ' ',
     98 => '',
@@ -157,16 +160,26 @@
     101 => ' ',
     102 => ' ',
     103 => '  ',
-    104 => 'by',
+    104 => '',
     105 => ' ',
     106 => '',
-    107 => 'GL Version Test',
-    108 => ' Cache',
-    109 => 'Report abuse',
-    110 => 'Report this post to the site admin',
-    111 => 'View PDF Version',
-    112 => 'Registered Users',
-    113 => 'Documentation'
+    107 => '  GL',
+    108 => ' ',
+    109 => '   ',
+    110 => '    ',
+    111 => ' PDF',
+    112 => ' ',
+    113 => '',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -203,12 +216,12 @@
     7 => '    ',
     8 => "   .   ,  ,        {$_CONF['commentspeedlimit']} ",
     9 => '',
-    10 => 'Send Report',
+    10 => ' ',
     11 => ' ',
     12 => ',  : ,  ,   , ..      .',
     13 => ' ',
     14 => '',
-    15 => 'Report this post',
+    15 => '   ',
     16 => '',
     17 => '',
     18 => ' ',
@@ -218,9 +231,9 @@
     22 => ' ,      .',
     23 => '     .',
     24 => ' ',
-    25 => 'Are you sure you want to report this post to the site admin?',
-    26 => '%s reported the following abusive comment post:',
-    27 => 'Abuse report'
+    25 => '       ?',
+    26 => '%s      :',
+    27 => '   '
 );
 
 ###############################################################################
@@ -255,8 +268,8 @@
     26 => '           ,   .',
     27 => '  ',
     28 => ' ',
-    29 => 'logged out from',
-    30 => 'logged in from',
+    29 => ' ',
+    30 => ' ',
     31 => '    ,   ',
     32 => '',
     33 => '    ',
@@ -267,7 +280,7 @@
     38 => '  !   ',
     39 => '   PGP   ',
     40 => ' ',
-    41 => 'Willing to Moderate',
+    41 => '  ',
     42 => ' ',
     43 => '  ',
     44 => ' ',
@@ -333,7 +346,23 @@
     104 => ' -',
     105 => '  Who\'s Online ',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -346,29 +375,8 @@
     4 => '  ',
     5 => '',
     6 => '',
-    7 => 'First',
-    8 => 'Last'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => ' ',
-    2 => '   .',
-    3 => ' '
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => ' ',
-    2 => '  ',
-    3 => '',
-    4 => '  ',
-    5 => '',
-    6 => '  '
+    7 => '',
+    8 => ''
 );
 
 ###############################################################################
@@ -446,7 +454,7 @@
     28 => '    ,   ,  ',
     29 => '    ',
     30 => '\',   ,  ',
-    31 => 'This plug-in returned no matches',
+    31 => '  (ping)   ',
     32 => '',
     33 => 'URL',
     34 => '',
@@ -472,7 +480,11 @@
     54 => ' ',
     55 => '',
     56 => '',
-    57 => ''
+    57 => '',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -502,7 +514,14 @@
     21 => '   ,     .',
     22 => '10   ',
     23 => ' ',
-    24 => ',          '
+    24 => ',          ',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -513,7 +532,7 @@
     2 => '  ',
     3 => '  ',
     4 => ' ',
-    5 => 'PDF Story Format'
+    5 => ' PDF'
 );
 
 ###############################################################################
@@ -540,11 +559,11 @@
     18 => '',
     19 => '   ',
     20 => ':  ',
-    21 => '  "", ,     ',
+    21 => '  "", ,     ',
     22 => ':  ',
     23 => ',    .   .',
     24 => ' ',
-    25 => 'Your %s submission has been saved successfully.',
+    25 => '  %s  .',
     26 => ' ',
     27 => ' ',
     28 => '',
@@ -652,10 +671,15 @@
     54 => '',
     55 => '',
     56 => '',
-    57 => 'Move Block Down',
-    58 => 'Move Block Up',
-    59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    57 => '  ',
+    58 => '  ',
+    59 => '    ',
+    60 => '    ',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -663,7 +687,7 @@
 
 $LANG22 = array(
     1 => ' ',
-    2 => 'Error',
+    2 => '',
     3 => ' ',
     4 => '  ',
     5 => '  ',
@@ -684,38 +708,9 @@
     20 => '',
     21 => '',
     22 => '',
-    23 => 'Bad start date.',
-    24 => 'Bad end date.',
-    25 => 'End date is before start date.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => ' ',
-    2 => '',
-    3 => ' ',
-    4 => ' ',
-    5 => '',
-    6 => '( http://)',
-    7 => '',
-    8 => ' ',
-    9 => ' ',
-    10 => '   ,    .',
-    11 => 'Link Manager',
-    12 => '    ,   .        .',
-    13 => ' ',
-    14 => ' ',
-    15 => ' ',
-    16 => ' ',
-    17 => "     ,      .    . , <a href=\"{$_CONF['site_admin_url']}/link.php\">    </a>.",
-    18 => ' ',
-    19 => 'Home ',
-    20 => ':',
-    21 => '',
-    22 => '',
-    23 => ''
+    23 => '  .',
+    24 => '  .',
+    25 => '   .'
 );
 
 ###############################################################################
@@ -741,17 +736,17 @@
     17 => ' ',
     18 => '',
     19 => '',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => ' ',
     23 => '    ,    .        .        .',
-    24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
-    26 => ' ',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'File Upload Errors',
+    24 => 'ID,      ,  . ,  .',
+    25 => 'Error when saving story',
+    26 => '  ',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => '  ',
     31 => ',   ,   ',
     32 => '',
     33 => '     ',
@@ -779,43 +774,34 @@
     55 => '      .  ,    ,   ',
     56 => '  ',
     57 => '  ',
-    58 => 'Story Management',
-    59 => 'Option',
-    60 => 'Enabled',
-    61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => '',
-    2 => 'Please enter a question and at least one answer.',
-    3 => ' ',
-    4 => ' %s ',
-    5 => ' ',
-    6 => 'ID ',
-    7 => '(  )',
-    8 => '   ',
-    9 => '',
-    10 => ' / ',
-    11 => '       %s',
-    12 => '      %s',
-    13 => ' ',
-    14 => 'save',
-    15 => 'cancel',
-    16 => 'delete',
-    17 => 'Please enter a Poll ID',
-    18 => ' ',
-    19 => '    ,   .         .',
-    20 => '',
-    21 => ' ',
-    22 => "     ,      .    .  , <a href=\"{$_CONF['site_admin_url']}/poll.php\">    </a>.",
-    23 => ' ',
-    24 => 'Home ',
-    25 => '',
-    26 => ''
+    58 => ' ',
+    59 => '',
+    60 => '',
+    61 => ' ',
+    62 => ' ',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -846,8 +832,11 @@
     22 => ' ',
     23 => '         ',
     24 => '(*)',
-    25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    25 => ' ',
+    26 => '      -    .',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -870,7 +859,7 @@
     14 => ' .',
     15 => ' ',
     16 => 'Home ',
-    17 => 'changepw',
+    17 => ' ',
     18 => '',
     19 => '',
     20 => '',
@@ -885,11 +874,22 @@
     29 => '',
     30 => '',
     31 => ' ',
-    32 => 'Done processing. Imported %d and encountered %d failures',
+    32 => ' .  %d,  : %d',
     33 => '',
     34 => ':  ,   .',
     35 => ' ',
-    36 => '()'
+    36 => '()',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -987,7 +987,7 @@
     16 => '   : ',
     17 => "<a href={$_CONF['site_admin_url']}/mail.php>  </a>",
     18 => '',
-    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
+    19 => ':       ,   Logged-in.',
     20 => "  <successcount>     <failcount> .    ,        .     <a href=\"{$_CONF['site_admin_url']}/mail.php\">  </a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">   </a>.",
     21 => '',
     22 => '',
@@ -1032,52 +1032,64 @@
     29 => ' Geeklog',
     30 => ' ?',
     31 => ' ,     ? ,      ,    .    ,   "" .',
-    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'Code Version',
-    34 => 'Update'
+    32 => '<p><b>:    AutoLink</b></p>',
+    33 => ' ',
+    34 => '',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
 # admin/syndication.php
 
 $LANG33 = array(
-    1 => 'create feed',
-    2 => 'save',
-    3 => 'delete',
-    4 => 'cancel',
-    10 => 'Content Syndication',
-    11 => 'New Feed',
-    12 => 'Admin Home',
-    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
-    14 => 'Title',
-    15 => 'Type',
-    16 => 'Filename',
-    17 => 'Format',
-    18 => 'last updated',
-    19 => 'Enabled',
-    20 => 'Yes',
-    21 => 'No',
-    22 => '<i>(no feeds)</i>',
-    23 => 'all Stories',
-    24 => 'Feed Editor',
-    25 => 'Feed Title',
-    26 => 'Limit',
-    27 => 'Length of entries',
-    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
-    29 => 'Description',
-    30 => 'Last Update',
-    31 => 'Character Set',
-    32 => 'Language',
-    33 => 'Contents',
-    34 => 'Entries',
-    35 => 'Hours',
-    36 => 'Select type of feed',
-    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
-    38 => 'Error: Missing Fields',
-    39 => 'Please fill in the Feed Title, Description, and Filename.',
-    40 => 'Please enter a  number of entries or number of hours.',
-    41 => 'Links',
-    42 => 'Events'
+    1 => ' ',
+    2 => '',
+    3 => '',
+    4 => '',
+    10 => ' ',
+    11 => ' ',
+    12 => '  ',
+    13 => '     ,    .    ,     .',
+    14 => '',
+    15 => '',
+    16 => ' ',
+    17 => '',
+    18 => ' ',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '<i>( )</i>',
+    23 => ' ',
+    24 => ' ',
+    25 => ' ',
+    26 => '',
+    27 => ' ',
+    28 => '(0 =   , 1 =  ,  =    .)',
+    29 => '',
+    30 => ' ',
+    31 => '',
+    32 => '',
+    33 => '',
+    34 => '',
+    35 => '',
+    36 => '  ',
+    37 => '    ,   .  ,      Geeklog,      .',
+    38 => ':     ',
+    39 => ' ,    .',
+    40 => '   ,   .',
+    41 => '',
+    42 => '',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1130,7 +1142,7 @@
     44 => '  !',
     45 => '  .',
     46 => ',        .   ,        .',
-    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    47 => '    *nix.     *nix,   .    Windows,       adodb_*.php   .',
     48 => "       ' . {$_CONF['site_name']} . '.    .    ,         .",
     49 => '   .',
     50 => '   .',
@@ -1141,10 +1153,24 @@
     55 => '        . ,           .',
     56 => ' ,   ,     .',
     57 => '    .',
-    58 => 'Your feed has been successfully saved.',
-    59 => 'The feed has been successfully deleted.',
-    60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    58 => '  .',
+    59 => '  .',
+    60 => '  ',
+    61 => ' %s:   ',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1198,13 +1224,22 @@
     'listusers' => ' ',
     'listthem' => '',
     'usersingroup' => '   %s',
-    'usergroupadmin' => 'User Group Administration',
-    'add' => 'Add',
-    'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
-    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'usergroupadmin' => '  ',
+    'add' => '',
+    'remove' => '',
+    'availmembers' => ' ',
+    'groupmembers' => ' ',
+    'canteditgroup' => '   ,      .     ,   .',
+    'cantlistgroup' => '   ,       .     ,   .',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1214,7 +1249,6 @@
     'last_ten_backups' => ' 10 ',
     'do_backup' => ' ',
     'backup_successful' => '     .',
-    'no_backups' => '    ',
     'db_explanation' => '       Geeklog,   ',
     'not_found' => "    mysqldump   .<br> <strong>\$_DB_mysqldump_path</strong>    config.php.<br>     : <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => ' :   0 ',
@@ -1229,16 +1263,17 @@
 ###############################################################################
 
 $LANG_BUTTONS = array(
-    1 => 'Home',
-    2 => 'Contact',
-    3 => 'Get Published',
-    4 => 'Links',
-    5 => 'Polls',
-    6 => 'Calendar',
-    7 => 'Site Stats',
-    8 => 'Personalize',
-    9 => 'Search',
-    10 => 'advanced search'
+    1 => ' ',
+    2 => ' ',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => '',
+    7 => ' ',
+    8 => '',
+    9 => '',
+    10 => ' ',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1246,7 +1281,7 @@
 
 $LANG_404 = array(
     1 => '404 ',
-    2 => ',   ,     <b>%s</b>.',
+    2 => ',   ,     <b>%s</b>.',
     3 => "<p>  ,  ,   ,  . ,    <a href=\"{$_CONF['site_url']}\"> </a>  <a href=\"{$_CONF['site_url']}/search.php\"> </a>  ,     ,   :)."
 );
 
@@ -1264,20 +1299,226 @@
 # pdfgenerator.php
 
 $LANG_PDF = array(
-    1 => 'The PDF feature has been disabled',
-    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
-    3 => 'Unknown error during PDF generation',
-    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Loading your document.',
-    6 => 'Please wait while your document is loaded.',
-    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
-    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
-    9 => 'PDF Generator',
-    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    1 => ' PDF ',
+    2 => '      PDF.   ,    .  ,   HTML ,    xHTML. ,         .     0    .   ,       PDF,  .',
+    3 => '    PDF',
+    4 => '     - ,      PDF \' \'   .   ,   ,   .    ,    ,   PDF \' \'.',
+    5 => '  .',
+    6 => ',  .',
+    7 => '          \' ...\'  \' ...\'    .',
+    8 => '   HTMLDoc     ,       .    ,    .',
+    9 => ' PDF',
+    10 => ' -   PDF Ad-hoc (\' \').     URL  PDF.  ,   ,        PDF.  -   HTMLDoc,        ',
     11 => 'URL',
-    12 => 'Generate PDF!',
-    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
-    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+    12 => ' PDF!',
+    13 => ' PHP     (URL)   fopen().       php.ini  allow_url_fopen = On',
+    14 => 'PDF  ,        .'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
 );
 
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/russian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/russian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/russian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/russian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1524 @@
+<?php
+
+###############################################################################
+# russian.php
+# This is the russian language page for GeekLog!
+#
+# 01/10/2003 R.03-1
+# Thanks goes to Marina Prince & Frederick Ouano (RussianHouston.com)
+# for completing the project.
+# This version has been tested to work with Geeklog v.1.3.6
+#
+# Copyright (c) 2002 Konstantin Komash, Zoya Koneva
+# komash@profit.ru
+# 
+# Updated for version 1.3.8-1sr2 by Kuznetsov Denis
+# d_kuz@bk.ru
+#
+# Updated (translating the untranslated text) by Konstantinn Boyandin
+# konstantin@boyandin.ru
+#
+# Credits of English version:
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'utf-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Опубликовал:',
+    2 => 'читать дальше',
+    3 => 'Комментарии',
+    4 => 'Изменить',
+    5 => 'Голосовать',
+    6 => 'Результаты',
+    7 => 'Результаты опроса',
+    8 => 'голоса',
+    9 => 'Функции администратора:',
+    10 => 'Публикации',
+    11 => 'Статьи',
+    12 => 'Блоки',
+    13 => 'Темы',
+    14 => 'Ссылки',
+    15 => 'События',
+    16 => 'Опросы',
+    17 => 'Пользователи',
+    18 => 'Запрос SQL',
+    19 => 'Завершить сеанс',
+    20 => 'Информация о пользователе:',
+    21 => 'Имя пользователя',
+    22 => 'ID пользователя',
+    23 => 'Уровень безопастности',
+    24 => 'Без подписи',
+    25 => 'Ответ',
+    26 => 'Следующие комментарии принадлежат тем, кто их опубликовал. Этот сайт не несёт ответственности за содержание комментариев.',
+    27 => 'Свежайшая публикация',
+    28 => 'Удалить',
+    29 => 'Комментариев нет.',
+    30 => 'Предыдущие статьи',
+    31 => 'Разрешённые тэги HTML:',
+    32 => 'Ошибка, неправильное имя пользователя',
+    33 => 'Ошибка, не могу записать в журнальный файл',
+    34 => 'Ошибка',
+    35 => 'Выход',
+    36 => 'вкл',
+    37 => 'Статей нет',
+    38 => 'Синдикация',
+    39 => 'Обновить',
+    40 => 'Выставлен флаг <tt>register_globals = Off</tt> в вашем <tt>php.ini</tt>. Но Geeklog обязывает, чтобы <tt>register_globals</tt> был включен (<strong>on</strong>). Включите его в <strong>php.ini</strong> и перезагрузите HTTP сервер.',
+    41 => 'Гости',
+    42 => 'Автор:',
+    43 => 'Ответить на это',
+    44 => 'Предок',
+    45 => 'Номер ошибки MySQL',
+    46 => 'Сообщение об ошибке MySQL',
+    47 => 'Функции пользователя',
+    48 => 'Информация об учётной записи',
+    49 => 'Настройки изображения',
+    50 => 'Ошибка выражения SQL ',
+    51 => 'помощь',
+    52 => 'Создать',
+    53 => 'Рабочая страница Администратора',
+    54 => 'Не могу открыть файл.',
+    55 => 'Ошибка в',
+    56 => 'Голосовать',
+    57 => 'Пароль',
+    58 => 'Войти',
+    59 => "Вы ещё не зарегистрировались?  Сделайте это здесь: <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Новый пользователь</a>",
+    60 => 'Послать комментарий',
+    61 => 'Создать учётную запись',
+    62 => 'cлова',
+    63 => 'Параметры комментариев',
+    64 => 'Послать статью другу',
+    65 => 'Версия для печати',
+    66 => 'Мой календарь',
+    67 => 'Добро пожаловать на ',
+    68 => 'домой',
+    69 => 'почта',
+    70 => 'Найти',
+    71 => 'опубликовать',
+    72 => 'ссылки',
+    73 => 'прошлые опросы',
+    74 => 'календарь',
+    75 => 'расширенный поиск',
+    76 => 'статистика',
+    77 => 'Модули',
+    78 => 'Будущие события',
+    79 => 'Что нового',
+    80 => 'статей за',
+    81 => 'статья за',
+    82 => 'часов',
+    83 => 'КОММЕНТАРИИ',
+    84 => 'ССЫЛКИ',
+    85 => 'за 48 часов',
+    86 => 'Нет новых комментариев',
+    87 => 'за 2 недели',
+    88 => 'Нет свежих ссылок',
+    89 => 'Никаких событий не ожидается',
+    90 => 'Домой',
+    91 => 'Страница создана за',
+    92 => 'секунд',
+    93 => 'Копирайт',
+    94 => 'Все торговые марки и копирайты на этой странице являются собственностью соответствующих хозяев.',
+    95 => 'Работает на',
+    96 => 'Группы',
+    97 => 'Список слов',
+    98 => 'Плагины',
+    99 => 'СТАТЬИ',
+    100 => 'Новых статей нет',
+    101 => 'Ваши события',
+    102 => 'События сайта',
+    103 => 'Копии базы данных',
+    104 => 'от',
+    105 => 'Пользователи почты',
+    106 => 'Просмотры',
+    107 => 'Проверка версии GL',
+    108 => 'Очистить кэш',
+    109 => 'Сообщить о недопустимом использовании',
+    110 => 'Уведомить администрацию об этом постинге',
+    111 => 'Просмотреть PDF',
+    112 => 'Зарегистрированные пользователи',
+    113 => 'Документация',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Календарь событий',
+    2 => 'Извините, здесь нет событий для отображения.',
+    3 => 'Когда:',
+    4 => 'Где:',
+    5 => 'Описание:',
+    6 => 'Добавить событие',
+    7 => 'Будущие события',
+    8 => 'Добавив это событие в свой персональный календарь, Вы можите быстро просмотреть только те события, которые Вас интересуют на странице Мой календарь.',
+    9 => 'Добавить в Мой календарь',
+    10 => 'Удалить из Моего календаря',
+    11 => "Добавить событие в календарь {$_USER['username']}",
+    12 => 'Событие',
+    13 => 'Начало',
+    14 => 'Конец',
+    15 => 'Назад в Календарь'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Послать комментарий',
+    2 => 'Режим публикации',
+    3 => 'Выйти',
+    4 => 'Создать учётную запись',
+    5 => 'Имя пользователя',
+    6 => 'Прежде чем посылать комментарии, вы должны войти в систему. Если вы ещё не зарегистрированы, то создайте новую учётную запись.',
+    7 => 'Ваш последный комментарий был ',
+    8 => " секунд тому назад.  Просим извинить, но необходимо, что бы между комментариями прошло хотя бы {$_CONF['commentspeedlimit']} секунд",
+    9 => 'Комментарий',
+    10 => 'Отправить отчёт',
+    11 => 'Отправить комментарий',
+    12 => 'Пожалуйста, заполните поля: Имя, Почтовый адрес, Заголовок и Комментарий, т.к. они необходимы для публикации Вашего комментария.',
+    13 => 'Ваша информация',
+    14 => 'Предпросмотр',
+    15 => 'Сообщить об этом постинге',
+    16 => 'Заголовок',
+    17 => 'Ошибка',
+    18 => 'Важный материал',
+    19 => 'Пожалуйста, придерживайтесь в сообщении темы.',
+    20 => 'Пытайтесь ответить на комментарии других людей вместо того, что бы начинать новую цепочку.',
+    21 => 'Прочтите сообщения других людей до отправки собственного сообщения, что бы избежать дублирования того, что уже сказано.',
+    22 => 'Используйте заголовок, который бы точно передавал смысл сообщения.',
+    23 => 'Ваш почтовый адрес НЕ будет опубликован.',
+    24 => 'Анонимный пользователь',
+    25 => 'Вы действительно хотите уведомить администрацию об этом постинге?',
+    26 => '%s сообщил о следующем нарушающем правила постинге:',
+    27 => 'Сообщение о недопустимом использовании'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Профиль пользователя для',
+    2 => 'Имя пользователя',
+    3 => 'Полное имя',
+    4 => 'Пароль',
+    5 => 'Почтовый адрес',
+    6 => 'Домашняя страница',
+    7 => 'Биография',
+    8 => 'Ключ PGP',
+    9 => 'Сохранить информацию',
+    10 => 'Последние 10 комментариев на пользователя',
+    11 => 'Нет пользовательских комментариев',
+    12 => 'Установки пользователя для',
+    13 => 'Ночной дайджест почты',
+    14 => 'Этот пароль сгенерирован случайным образом. Мы рекомендуем сменить его немедленно. Для этого войдите в систему и выберите пункт Информация об учётной записи из Функций пользователя.',
+    15 => "Ваша учётная запись на {$_CONF['site_name']} успешно создана. Для того, чтобы использовать её, Вы должны войти в систему под именем и паролем, указанными ниже. Пожалуйста, сохраните это письмо, чтобы воспользоваться им в случае необходимости.",
+    16 => 'Ваша Учётная запись',
+    17 => 'Учётная запись не существует',
+    18 => 'Указан неверный электронный адрес',
+    19 => 'Указанные имя пользователя или электронный адрес уже существуют',
+    20 => 'Указан неверный электронный адрес',
+    21 => 'Ошибка',
+    22 => 'Создать учётную запись',
+    23 => 'Регистрация в нашей системе позволит Вам посылать комментарии и опубликовывать статьи под своим именем. Если Вы не зарегестрируетесь, все Ваши публикации будут подписаны - Без подписи.',
+    24 => 'Ваш пароль будет отправлен по указанному Вами электронному адресу.',
+    25 => 'Забыли пароль?',
+    26 => 'Введите Ваше имя пользователя и новый пароль будет отправлен по электронному адресу, указанному при регистрации.',
+    27 => 'Создать нового пользователя',
+    28 => 'Отправить пароль',
+    29 => 'вышел из',
+    30 => 'вошёл из',
+    31 => 'Прежде чем воспользоваться этой функцией, войдите в систему',
+    32 => 'Подпись',
+    33 => 'Эта информация недоступна другим пользователям',
+    34 => 'Это Ваше настоящее имя',
+    35 => 'Введите новый пароль, если Вы хотите изменить старый',
+    36 => 'Адрес должен начинаться с http://',
+    37 => 'Добавляется к комментариям',
+    38 => 'Информация о Вас! Доступна всем пользователям',
+    39 => 'Ваш публичный ключ PGP для совместного использования',
+    40 => 'Без рисунков',
+    41 => 'Настаиваю на модерации',
+    42 => 'Формат даты',
+    43 => 'Максимальное количество статей',
+    44 => 'Без разделов',
+    45 => 'Настройки изображения для',
+    46 => 'Исключённые разделы для',
+    47 => 'Конфигурация раздела новостей для',
+    48 => 'Темы',
+    49 => 'Не отображать рисунки в статьях',
+    50 => 'Снимите выделение, если вы не заитересованы',
+    51 => 'Отображать только новости',
+    52 => 'По умолчанию',
+    53 => 'Получать статьи дня каждый вечер',
+    54 => 'Отметьте темы и авторов, которых вы не хотите видеть.',
+    55 => 'Если Вы ничего не отметили, это означает, что Вы предпочли выбор по умолчанию. Если Вы отметили некоторые пункты, не забудьтевыбрать всё, что Вы хотите, так как выбор по умолчанию будет проигнорирован. Выбор по умолчанию выделен жирным шрифтом.',
+    56 => 'Авторы',
+    57 => 'Режим отображения',
+    58 => 'Порядок сортировки',
+    59 => 'Предельное количество комментариев',
+    60 => 'Как Вы хотите отображать свои комментарии?',
+    61 => 'По убыванию или по возрастанию даты?',
+    62 => 'По умолчанию 100',
+    63 => 'Ваш пароль был только что отправлен Вам по электронной почте. Пожалуйста, следуйте указаниям в сообщении. Мы благодарим Вас за использование ',
+    64 => 'Параметры комментариев для',
+    65 => 'Попробуйте ещё раз войти в систему',
+    66 => 'Возможно Вы неправильно набрали пароль или имя пользователя. Если это так, Вы можете снова попробовать войти в систему ниже. Если Вы забыли свой пароль, Вы можете получить по электронной почте новый. Для этого заполните форму, расположенную внизу этой страницы.',
+    67 => 'Зарегистрирован',
+    68 => 'Помнить обо мне до',
+    69 => 'Как долго мы должны помнить о Вас входа в систему?',
+    70 => "Настроить структуру и содержание {$_CONF['site_name']}",
+    71 => "На нашем сайте Вы можете настроить содержание информации, которую Вы получите, а так же структуру расположения информации. Для этого Вы должны <a href=\"{$_CONF['site_url']}/users.php?mode=new\">зарегистрироваться</a> на {$_CONF['site_name']}.  Вы уже зарегистрировались? Используйте форму для входа в систему!",
+    72 => 'Тема',
+    73 => 'Язык',
+    74 => 'Измените внешний вид сайта!',
+    75 => 'Отправлены темы для',
+    76 => 'Если Вы выберете тему из нижеприведенного списка, Вы сможете получать все новые сообщения опубликованные на эту тему в конце каждого дня.  Выбирайте только интересующие Вас темы!',
+    77 => 'Фотография',
+    78 => 'Добавьте Вашу фотографию!',
+    79 => 'Отметьте здесь, чтобы стереть изображение',
+    80 => 'Войти',
+    81 => 'Отправить письмо',
+    82 => 'Последние 10 статей для пользователя',
+    83 => 'Составляется статистика для пользователя',
+    84 => 'Всего статей:',
+    85 => 'Всего комментариев:',
+    86 => 'Найти все сообщения',
+    87 => 'Ваш логин',
+    88 => "Кто-то (возможно Вы) запросил новый пароль для Вашего аккаунта \"%s\" на {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nЕсли Вы действительно хотите произвести данное действие, пожалуйста, кликните на следующей ссылке:\n\n",
+    89 => "Если Вы не хотите выполнять данное действие, просто проигнорируйтеэто сообщение и запрос будет отменён (Ваш пароль останеттся неизменённым).\n\n",
+    90 => 'Вы можете отредактировать новый пароль для Вашего аккаунта ниже. Имейте ввиду, что Ваш старый пароль является валидным пока Вы не отправите это форму.',
+    91 => 'Установить новый пароль',
+    92 => 'ВВести новый пароль',
+    93 => 'Ваш последний запрос о новом пароле был %d секунд назад. Наш сайт требует как минимум %d секунд между запросами пароля.',
+    94 => 'Удалить аккаунт "%s"',
+    95 => 'Кликните кнопку "удалить аккаунт", которая находится ниже для удаления Вашего аккаунта из нашей базы данных. Имейте ввиду, что все статьи и комментарии, который Вы постили из под этого аккаунта <strong>не будут</strong> удалены, но убудт отображаться как будто их постил пользователь "Anonymous".',
+    96 => 'удалить аккаунт',
+    97 => 'Подтвердите удаление аккаунта',
+    98 => 'Вы уверены, что хотите удалить Ваш аккаунт? Сделав это, Вы не сможете войти в этот сайт снова (если не создадите новый аккаунт). Если вы уверены - кликните "удалить аккаунт" снова в форме ниже.',
+    99 => 'Установки Приватности для',
+    100 => 'Почта от Администратора',
+    101 => 'Разрешить почту от администриторов сайта',
+    102 => 'Почта от пользователей',
+    103 => 'Разрешить почту от других пользователей',
+    104 => 'Показывать онлайн-статус',
+    105 => 'Показывать в Who\'s Online блоке',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Новостей для показа нет',
+    2 => 'Новых статей для показа нет. Может быть нет новостей на данную тему, либо Ваши Установки пользователя слишком жесткие',
+    3 => 'для темы',
+    4 => 'Сегодняшняя Особая статья',
+    5 => 'Следующая',
+    6 => 'Предыдущая',
+    7 => 'Первая',
+    8 => 'Последняя'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'При отправке Вашего сообщения произошла ошибка. Пожалуйста, попробуйте ещё.',
+    2 => 'Сообщение было успешно отправлено.',
+    3 => 'Пожалуйста, удостоверьтесь, что Вы набрали правильный адрес в поле Обратный адрес.',
+    4 => 'Пожалуйста, заполните поля: Ваше имя, Обратный адрес, Тема, Сообщение.',
+    5 => 'Ошибка: Такого пользователя нет.',
+    6 => 'Произошла ошибка.',
+    7 => 'Биография пользователя для',
+    8 => 'Имя пользователя',
+    9 => 'URL пользователя',
+    10 => 'Письмо для',
+    11 => 'Ваше имя:',
+    12 => 'Обратный адрес:',
+    13 => 'Тема:',
+    14 => 'Сообщение:',
+    15 => 'HTML не будет интерпретирован.',
+    16 => 'Послать сообщение',
+    17 => 'Послать статью другу',
+    18 => 'Получатель',
+    19 => 'Адрес получателя',
+    20 => 'Отправитель',
+    21 => 'Адрес отправителя',
+    22 => 'Все поля обязательны',
+    23 => "Сообщение отправил %s, адрес %s, полагая, что Вас заинтересует следующая статья, источник: {$_CONF['site_url']}.  Это не SPAM, и электронные адреса, вовлечённые в эту  транзакцию, не были сохранены для последующего использования.",
+    24 => 'Комментарий на эту тему за',
+    25 => 'Чтобы использовать эту функцию, Вы должны войти в систему. Ваша регистрация поможет нам предотвратить неправильное использование системы',
+    26 => 'Эта форма позволит Вам отправить электронное сообщение выбранному пользователю.  Все поля обязательны.',
+    27 => 'Короткое сообщение',
+    28 => '%s пишет: ',
+    29 => "Это дневной дайджест с {$_CONF['site_name']} для ",
+    30 => ' Дневной новостной бюллетень для ',
+    31 => 'Название',
+    32 => 'Дата',
+    33 => 'Читайте полную статью на',
+    34 => 'Конец сообщения',
+    35 => 'Извините, но установки данного пользователя не позволяют ему отправить сообщение.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Расширенный поиск',
+    2 => 'Ключевые слова',
+    3 => 'Тема',
+    4 => 'Всё',
+    5 => 'Тип',
+    6 => 'Статьи',
+    7 => 'Комментарии',
+    8 => 'Авторы',
+    9 => 'Всё',
+    10 => 'Поиск',
+    11 => 'Результаты поиска',
+    12 => 'совпадений',
+    13 => 'Результат поиска статьи: Нет совпадений',
+    14 => 'Не найдено никаких совпадений по Вашему запросу',
+    15 => 'Пожалуйста, попробуйте ещё раз.',
+    16 => 'Заголовок',
+    17 => 'Дата',
+    18 => 'Автор',
+    19 => "Поиск по всей базе {$_CONF['site_name']} текущих и архивных статей",
+    20 => 'Дата',
+    21 => 'по',
+    22 => '(Формат даты ММ-ДД-ГГГГ)',
+    23 => 'Хиты',
+    24 => 'Найдено',
+    25 => 'совпадений для',
+    26 => 'пунктов за',
+    27 => 'секунд',
+    28 => 'Ни одной статьи или комментария, соответствующих Вашему запросу, не найдено',
+    29 => 'Результаты по статьям и комментариям',
+    30 => '\'Ссылки, соответствующие Вашему запросу, не найдены',
+    31 => 'Этот запрос (ping) не вернул результатов',
+    32 => 'Событие',
+    33 => 'URL',
+    34 => 'Место',
+    35 => 'Весь день',
+    36 => 'События, соответствующие Вашему запросу, не найдены',
+    37 => 'Результаты поиска событий',
+    38 => 'Результаты поиска ссылок',
+    39 => 'Ссылки',
+    40 => 'События',
+    41 => 'Строка запорса должна содержать как минимум 3 символа.',
+    42 => 'Пожалуйста, используйте дату в следующем формате: ГГГГ-ММ-ДД (год-месяц-день).',
+    43 => 'точное совпадение',
+    44 => 'все слова',
+    45 => 'любое из слов',
+    46 => 'следующие',
+    47 => 'предыдущие',
+    48 => 'Автор',
+    49 => 'Дата',
+    50 => 'Хиты',
+    51 => 'Ссылка',
+    52 => 'Расположение',
+    53 => 'Данные статьи',
+    54 => 'Данные комментария',
+    55 => 'запрос',
+    56 => 'И',
+    57 => 'ИЛИ',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Статистика сайта',
+    2 => 'Хиты в системе',
+    3 => 'Статьи (комментарии) в системе',
+    4 => 'Опросы (ответы) в системе',
+    5 => 'Ссылки (переходы по ссылкам) в системе',
+    6 => 'События в системе',
+    7 => 'Десятка самых читаемых статей',
+    8 => 'Название статьи',
+    9 => 'Просмотры',
+    10 => 'На сайте отсутствуют статьи, или их никто не просматривал.',
+    11 => 'Десятка наиболее комментируемых статей',
+    12 => 'Комментарии',
+    13 => 'На сайте отсутствуют статьи, или никто не опубликовал комментарии.',
+    14 => 'Десятка лучших опросов',
+    15 => 'Вопрос',
+    16 => 'Голоса',
+    17 => 'На сайте отсутствуют опросы, или никто не принял в них участие.',
+    18 => 'Десятка наиболее используемых ссылок',
+    19 => 'Ссылки',
+    20 => 'Хиты',
+    21 => 'На сайте отсутствуют ссылки, или никто ими не воспользовался.',
+    22 => '10 наиболее пересылаемых статей',
+    23 => 'Почтовые пересылки',
+    24 => 'Похоже, что никто не пересылал по почте статью на этом сайте',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Что имеет отношение',
+    2 => 'Отправить статью другу',
+    3 => 'Печатная форма статьи',
+    4 => 'Параметры статьи',
+    5 => 'Формат PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Для публикации Вы должны быть зарегестрированы как пользователь.',
+    2 => 'Войти',
+    3 => 'Новый пользователь',
+    4 => 'Добавление события',
+    5 => 'Публикация ссылки',
+    6 => 'Публикация статьи',
+    7 => 'Регистрация в системе обязятельна',
+    8 => 'Опубликовать',
+    9 => 'При публикации информации на этом сайте для последующего использования, рекомендуется придерживаться следующих указаний...<ul><li>Заполните все поля, они обязательны<li>Обеспечьте полную и достоверную информацию<li>Дважды проверьте используемые URL</li><li>Чтобы добавить рисунок, используйте тэг &lt;img src=ImageName&gt, где ImageName полное имя файла, заключенное в кавычки. Например, &lt;img src="C:/Мои документы/Мои рисунки/picture.jpg"&gt;.</li></ul>',
+    10 => 'Заголовок',
+    11 => 'Ссылка',
+    12 => 'Дата начала',
+    13 => 'Дата конца',
+    14 => 'Место проведения',
+    15 => 'Описание',
+    16 => 'Если Другое, пожалуйста, уточните',
+    17 => 'Категория',
+    18 => 'Другое',
+    19 => 'В первую очередь прочтите',
+    20 => 'Ошибка: Отсутствует категория',
+    21 => 'Когда выбираете "Другое", пожалуйста, всё равно обозначьте название категории',
+    22 => 'Ошибка: Незаполненные поля',
+    23 => 'Пожалуйста, заполните все поля формы. Все поля обязательны.',
+    24 => 'Публикация сохранена',
+    25 => 'Ваша статья %s успешно сохранена.',
+    26 => 'Ограничение быстродействия',
+    27 => 'Имя пользователя',
+    28 => 'Раздел',
+    29 => 'Текст',
+    30 => 'Последний ввод данных произошёл ',
+    31 => " секунд назад.  Система требует по крайней мере {$_CONF['speedlimit']} секунд между подачами данных.",
+    32 => 'Предпросмотр статьи',
+    33 => 'Предпросмотр',
+    34 => 'Выход из системы',
+    35 => 'Использование HTML тэгов запрещено',
+    36 => 'Режим публикации',
+    37 => 'Как только Вы добавите Ваше событие, оно будет отправлено администратору. По разрешению оно будет помещено в Главный календарь.',
+    38 => 'Добавить событие в',
+    39 => 'Главный календарь',
+    40 => 'Персональный календарь',
+    41 => 'Конечное время',
+    42 => 'Начальное время',
+    43 => 'Событие дня',
+    44 => 'Адрес строка 1',
+    45 => 'Адрес строка 2',
+    46 => 'Город',
+    47 => 'Штат',
+    48 => 'Индекс',
+    49 => 'Тип события',
+    50 => 'Изменить типы событий',
+    51 => 'Местоположение',
+    52 => 'Удалить',
+    53 => 'Создать счет'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Необходима аутентификация',
+    2 => 'Отказано! Неверная регистрационная информация',
+    3 => 'Неверный пароль',
+    4 => 'Имя пользователя:',
+    5 => 'Пароль:',
+    6 => 'Доступ к административным функциям этого сайта журналируется и просматривается.<br>Эта страница только для авторизованного персонала сайта.',
+    7 => 'вход'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Недостаточно административных прав',
+    2 => 'У Вас нет прав для изменения этого блока.',
+    3 => 'Редактор блоков',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Заголовок блока',
+    6 => 'Тема',
+    7 => 'Всё',
+    8 => 'Уровень допуска блока',
+    9 => 'Порядок блока',
+    10 => 'Тип блока',
+    11 => 'Портальный блок',
+    12 => 'Обычный блок',
+    13 => 'Параметры портального блока',
+    14 => 'RDF URL',
+    15 => 'Последнее обновление RDF',
+    16 => 'Параметры обычного блока',
+    17 => 'Содержимое блока',
+    18 => 'Пожалуйста, заполните поля Заголовок блока, Уровень допуска и Содержимое блока',
+    19 => 'Менеджер блоков',
+    20 => 'Заголовок блока',
+    21 => 'Уровень<br>секетности блока',
+    22 => 'Тип блока',
+    23 => 'Порядок блока',
+    24 => 'Тема блока',
+    25 => 'Для изменения или удаления блока, выберите блок ниже. Для создания нового нажмите на кнопку Создать блок.',
+    26 => 'Разметочный блок',
+    27 => 'Блок PHP',
+    28 => 'Свойства Блока PHP',
+    29 => 'Функция блока',
+    30 => 'Если Вы хотите, что бы один из блоков использовал PHP код, введите имя функции выше. Ваша функция должна начинаться с префикса "phpblock_" (например phpblock_getweather).  Если она не имеет указанного префикса, она НЕ будет вызвана.  Это сделано для того, что бы не позволить людям, которые могут взломать Ваш Geeklog, вызывать функции, которые могут быть опасны для Вашей системы.  Не помещайте пустые скобки "()" после имени Вашей функции.  Мы рекомендуем размещать код Ваших функций в /path/to/geeklog/system/lib-custom.php.  Это позволит Вам сохранить код даже в случае перехода на новую версию GeekLog.',
+    31 => 'Ошибка в Блоке PHP.  Функция %s не существует.',
+    32 => 'Ошибка потеряно(ы) поле(я)',
+    33 => 'Введите URL к .rdf файлу для портального блока',
+    34 => 'Введите заголовок и функцию для PHP блока',
+    35 => 'Введите заголовок и содержимое для обычного блока',
+    36 => 'Введите содержимое для структурного блока',
+    37 => 'Неверное имя для функции блока PHP',
+    38 => 'Функция для блока PHP должна иметь префикс "phpblock_" (например phpblock_getweather).  Префикс "phpblock_" необходим по соображениям безопасности для предотвращения исполнения нежелательного кода.',
+    39 => 'Сторона',
+    40 => 'Слева',
+    41 => 'Справа',
+    42 => 'Вы должны ввести порядок блоков и уровень допуска для блока по-умолчанию',
+    43 => 'Только для Главной страницы',
+    44 => 'Доступ закрыт',
+    45 => "Вы пытались получить доступ к блоку, для которого у Вас нет прав. Эта попытка была запротоколирована. Пожалуйста, <a href=\"{$_CONF['site_admin_url']}/block.php\">вернитесь на станицу администрирования блоков</a>.",
+    46 => 'Новый блок',
+    47 => 'Home администратора',
+    48 => 'Имя блока',
+    49 => ' (без пробелов и должно быть уникально)',
+    50 => 'URL файла помощи',
+    51 => 'включая http://',
+    52 => 'Если Вы оставите это поле пустым значок помощи для блока не будетпоказан',
+    53 => 'Разрешено',
+    54 => 'сохранить',
+    55 => 'отменить',
+    56 => 'удалить',
+    57 => 'Сдвинуть блок вниз',
+    58 => 'Сдвинуть блок вверх',
+    59 => 'Сдвинуть блок в правую сторону',
+    60 => 'Сдвинуть блок в левую сторону',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Редактирование события',
+    2 => 'Ошибка',
+    3 => 'Заголовок события',
+    4 => 'Ссылка на событие',
+    5 => 'Дата начала события',
+    6 => 'Дата конца события',
+    7 => 'Место проведения события',
+    8 => 'Описание события',
+    9 => '(включая http://)',
+    10 => 'Вы должны заполнить все поля на этой форме!',
+    11 => 'Менеджер событий',
+    12 => 'Для изменения или удаления события, выберите событие ниже. Для создания нового нажмите на кнопку Создать событие.',
+    13 => 'Заголовок события',
+    14 => 'Дата начала',
+    15 => 'Дата окончания',
+    16 => 'Доступ закрыт',
+    17 => "Вы пытались получить доступ к событию, для которого у Вас нет прав. Эта попытка была запротоколирована. Пожалуйста, <a href=\"{$_CONF['site_admin_url']}/event.php\">вернитесь на станицу администрирования событий</a>.",
+    18 => 'Новое событие',
+    19 => 'Home администратора',
+    20 => 'сохранить',
+    21 => 'отменить',
+    22 => 'удалить',
+    23 => 'Неверная начальная дата.',
+    24 => 'Неверная конечная дата.',
+    25 => 'Начальная дата позже конечной.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Предыдущие статьи',
+    2 => 'Следующие статьи',
+    3 => 'Режим',
+    4 => 'Режим публикации',
+    5 => 'Редактирование статьи',
+    6 => 'Статей нет',
+    7 => 'Автор',
+    8 => 'сохранить',
+    9 => 'предварительный просмотр',
+    10 => 'отменить',
+    11 => 'стереть',
+    12 => 'ID',
+    13 => 'Заголовок',
+    14 => 'Тема',
+    15 => 'Дата',
+    16 => 'Преамбула',
+    17 => 'Текст статьи',
+    18 => 'Хиты',
+    19 => 'Комментарии',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Список статей',
+    23 => 'Для изменения или удаления статьи, выберите номер статьи ниже.  Для просмотра статьи нажмите на её заголовок. Для создания новой нажмите на кнопку Создать статью.',
+    24 => 'ID, который вы выбрали для этой публикации, уже занят. Пожалуйста, выберите другой.',
+    25 => 'Error when saving story',
+    26 => 'Предварительный просмотр статьи',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Ошибка загрузки файла',
+    31 => 'Пожалуйста, заполните поля Автор, Заголовок и Преамбула',
+    32 => 'Особая',
+    33 => 'Может существовать только одна Особая статья',
+    34 => 'Черновик',
+    35 => 'Да',
+    36 => 'Нет',
+    37 => 'Ещё от',
+    38 => 'Ещё от',
+    39 => 'Пересылки',
+    40 => 'Доступ закрыт',
+    41 => "Вы пытались получить доступ к статье, на которую у Вас нет прав. Эта попытка была запротоколирована.  You may view the article in read-only below. Пожалуйста, <a href=\"{$_CONF['site_admin_url']}/story.php\">вернитесь на станицу администрирования статей</a> когда закончите.",
+    42 => "Вы пытались получить доступ к статье, на которую у Вас нет прав. Эта попытка была запротоколирована. Пожалуйста, <a href=\"{$_CONF['site_admin_url']}/story.php\">вернитесь на станицу администрирования статей</a>.",
+    43 => 'Новая статья',
+    44 => 'Home администратора',
+    45 => 'Доступ',
+    46 => '<b>Замечание:</b> Если Вы измените эту дату на дату в будущем, эта статья не будет опубликована до указанной даты. Это также означает, что статья не будет указана в Вашем RDF файле заголовкови будет игнорироваться при поиске и на странице статистики.',
+    47 => 'Изображения',
+    48 => 'изображение',
+    49 => 'справа',
+    50 => 'слева',
+    51 => 'Чтобы добавить одно из изображений прилагаемых Вами к статье, Вам следует добавить текст, сформатированный таким образом:  [imageX], [imageX_right] или [imageX_left], где X - номер прилагаемого Вами изображения.  Замечание: Вы должны использовать все прилагаемые Вами изображения. В противном случае, Вам не удастся сохранить Вашу статью.<BR><P><B>PREVIEWING</B>: Предварительный просмотр статьи с прилагаемыми изображениями лучше всего осуществить сохранив статью как набросок, ВМЕСТО того, чтобы нажимать кнопку предварительного просмотра.  Нажимайте кнопку предварительного просмотра только тогда, когда Вы не прилагаете к статье изображений.',
+    52 => 'Стереть',
+    53 => 'не был использован.  Вы должны включить эту картинку в преамбулу или текст перед тем, как сохранить Ваши изменения',
+    54 => 'Добавленные изображения не использованы',
+    55 => 'Следующие ошибки произошли при сохранении Вашей статьи.  Пожалуйста, исправьте ошибки перед тем, как сохранить статью',
+    56 => 'Показать иконку темы',
+    57 => 'Показывать немасштибируемую картинку',
+    58 => 'Управление статьёй',
+    59 => 'Опция',
+    60 => 'Включено',
+    61 => 'Автоматическая архивация',
+    62 => 'Автоматическое удаление',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Редактирование темы',
+    2 => 'ID темы',
+    3 => 'Наименование темы',
+    4 => 'Картинка темы',
+    5 => '(не использовать пробелы)',
+    6 => 'Удаление темы приведёт к удалению всех связанных с ней статей и блоков',
+    7 => 'Пожалуйста заполните поля ID темы и Наименование темы',
+    8 => 'Менеджер тем',
+    9 => 'Для изменения или удаления темы, выберите тему ниже.  Для создания новой нажмите на кнопку Создать тему.',
+    10 => 'Порядок сортировки',
+    11 => 'Статей на страницу',
+    12 => 'Доступ закрыт',
+    13 => "Вы пытались получить доступ к теме, на которую у Вас нет прав. Эта попытка была запротоколирована.  Пожалуйста, <a href=\"{$_CONF['site_admin_url']}/topic.php\">вернитесь на станицу администрирования тем</a>.",
+    14 => 'Метод сортировки',
+    15 => 'алфавитный',
+    16 => 'по-умолчанию',
+    17 => 'Новая тема',
+    18 => 'Home администратора',
+    19 => 'сохранить',
+    20 => 'отменить',
+    21 => 'стереть',
+    22 => 'По умолчанию',
+    23 => 'Сделать эту тему темо по умолчанию при добаслении новой статьи',
+    24 => '(*)',
+    25 => 'Тема архива',
+    26 => 'сделать темой по умолчаниюдля архивированных статей - разрешена только одна тема.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Редактирование пользователя',
+    2 => 'ID пользователя',
+    3 => 'Имя пользователя',
+    4 => 'Полное имя',
+    5 => 'Пароль',
+    6 => 'Уровень допуска',
+    7 => 'Почтовый адрес',
+    8 => 'Домашняя страница',
+    9 => '(не использовать пробелы)',
+    10 => 'Пожалуйста, заполните поля Имя пользователя, Полное имя, Уровень секретности и Почтовый адрес',
+    11 => 'Менеджер пользователей',
+    12 => 'Для изменения или удаления пользователя, выберите пользователя ниже.  Для создания нового нажмите на кнопку Создать пользователя.',
+    13 => 'УрСекр',
+    14 => 'Дата рег.',
+    15 => 'Новый пользователь',
+    16 => 'Home администратора',
+    17 => 'сменить пароль',
+    18 => 'отмена',
+    19 => 'удалить',
+    20 => 'сохранить',
+    21 => 'Такое имя пользователя уже существует.',
+    22 => 'Ошибка',
+    23 => 'Добавить группу',
+    24 => 'Импортировать группу пользователей',
+    25 => 'Вы можете импортировать группу пользователей.  Файл импорта должен быть tab-delimited текстовой файл и должен включать поля в следующем порядке: полное имя, ник, адрес почты.  Каждому импортированному пользователю будет выслан по почте пароль. В каждой линии файла может быть только один пользователь.  При несоблюдении этих инструкций, могут возникнуть проблемы, требующие ручного вмешательства, поэтому тщательно проверьте Ваш файл!',
+    26 => 'Поиск',
+    27 => 'Ограничить результаты',
+    28 => 'Отметьте здесь, чтобы стереть изображение',
+    29 => 'Путь',
+    30 => 'Импортировать',
+    31 => 'Новые пользователи',
+    32 => 'Обработка завершена. Импортировано %d, произошло ошибок: %d',
+    33 => 'отправить',
+    34 => 'Ошибка: укажите файл, который Вы загружаете.',
+    35 => 'Последний вход',
+    36 => '(никогда)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Одобрить',
+    2 => 'Удалить',
+    3 => 'Изменить',
+    4 => 'Профиль',
+    10 => 'Заголовок',
+    11 => 'Старт',
+    12 => 'URL',
+    13 => 'Категория',
+    14 => 'Датиа',
+    15 => 'Тема',
+    16 => 'Имя пользователя',
+    17 => 'Полное имя',
+    18 => 'Email',
+    34 => 'Команды управления',
+    35 => 'Статии на одобрение',
+    36 => 'Ссылки на одобрение',
+    37 => 'События на одобрение',
+    38 => 'Отправить',
+    39 => 'В данный момент модерировать нечего',
+    40 => 'Отправлено пользователями'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Воскресенье',
+    2 => 'Понедельник',
+    3 => 'Вторник',
+    4 => 'Среда',
+    5 => 'Четверг',
+    6 => 'Пятница',
+    7 => 'Суббота',
+    8 => 'Добавить событие',
+    9 => 'Событие Geeklog',
+    10 => 'События за',
+    11 => 'Главный календарь',
+    12 => 'Мой Календарь',
+    13 => 'Январь',
+    14 => 'Февраль',
+    15 => 'Март',
+    16 => 'Апрель',
+    17 => 'Май',
+    18 => 'Июнь',
+    19 => 'Июль',
+    20 => 'Август',
+    21 => 'Сентябрь',
+    22 => 'Октябрь',
+    23 => 'Ноябрь',
+    24 => 'Декабрь',
+    25 => 'Назад к ',
+    26 => 'Весь день',
+    27 => 'Неделя',
+    28 => 'Личный календарь для',
+    29 => 'Общий календарь',
+    30 => 'удалить событие',
+    31 => 'Добавить',
+    32 => 'Событие',
+    33 => 'Дата',
+    34 => 'Время',
+    35 => 'быстрое добавление',
+    36 => 'Послать',
+    37 => 'Извините, функция личного календаря на данном сайте не работает',
+    38 => 'Персональный редактор событий',
+    39 => 'День',
+    40 => 'Неделя',
+    41 => 'Месяц'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => 'Почта',
+    2 => 'От',
+    3 => 'Отвечать на',
+    4 => 'Тема',
+    5 => 'Тело',
+    6 => 'Адресат:',
+    7 => 'Все пользователи',
+    8 => 'Администратор',
+    9 => 'Параметры',
+    10 => 'HTML',
+    11 => 'Срочное сообщение!',
+    12 => 'Послать',
+    13 => 'Сброс',
+    14 => 'Игнорировать установки пользователя',
+    15 => 'Ошибка при отправке на: ',
+    16 => 'Сообщение успешно отправлено на: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Послать ещё сообщение</a>",
+    18 => 'Кому',
+    19 => 'Внимание: если хотите отправить сообщение всем участникам сайта, выберите группу Logged-in.',
+    20 => "Успешно отправлено <successcount> сообщений и не отправлено <failcount> сообщений.  К Вашему сведению, детали о попытках отправления каждого сообщения приведены ниже.  Вы можете также <a href=\"{$_CONF['site_admin_url']}/mail.php\">отправить новое сообщение</a> или <a href=\"{$_CONF['site_admin_url']}/moderation.php\">вернуться на страницу администрирования</a>.",
+    21 => 'Неудачи',
+    22 => 'Удачи',
+    23 => 'Неудач нет',
+    24 => 'Удач нет',
+    25 => '-- Выбрать группу --',
+    26 => 'Пожалуйста, заполните все поля формы и выберите группу пользователей из списка.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Установка плагина может повредить установленному у Вас Geeklog-у или даже Вашей системе.  Важно, что бы Вы устанавливали только плагины, скачанные с <a href="http://WWW.geeklog.net" target="_blank">Geeklog Homepage</a> т.к. мы тестируем все присланные нам плагины на различных операционных системах. Важно, что бы Вы понимали, что установка плагина требует исполнения некоторых системных команд, которые могут вызвать проблемы с безопастностью, особенно это касается плагинов, скачаных не с нашего сайта.  Даже после этого предупреждения мы не можем гарантировать успешность инсталяции и не несём ответственности за проблемы, вызванные установкой Geeklog-плагина. Иначе говоря, Вы устанавливаете плагин на свой собственный риск. Руководство по ручной установке плагина включено в каждый инсталляционный пакет.',
+    2 => 'Предупреждение о установке плагинов',
+    3 => 'Форма установки плагина',
+    4 => 'Файл плагина',
+    5 => 'Список плагинов',
+    6 => 'Предупреждение: Плагин уже установлен!',
+    7 => 'Плагин, который Вы пытаетесь установить, уже существует. Перед тем, как переустановить плагин, удалите его.',
+    8 => 'Проверка совместимости плагина провалилась',
+    9 => 'Плагин требует более новой версии Geeklog-а. Обновите Вашу копию с <a href=http://www.geeklog.net>Geeklog</a> или попробуйте найти другую версию плагина.',
+    10 => '<br><b>В системе нет установленных плагинов.</b><br><br>',
+    11 => 'Для изменения или удаления плагина, нажмите на его номер ниже. Для получения информации о плагине, нажмите на его имя, и вы будете направлены вебсайт плагина. Для установки или обновления плагина нажмите кнопку "Новый плагин" выше.',
+    12 => 'имя плагина не передано в plugineditor()',
+    13 => 'Редактор плагинов',
+    14 => 'Новый плагин',
+    15 => 'Home администратора',
+    16 => 'Наименование плагина',
+    17 => 'Версия плагина',
+    18 => 'Версия Geeklog',
+    19 => 'Разрешено',
+    20 => 'Да',
+    21 => 'Нет',
+    22 => 'Установить',
+    23 => 'Сохранить',
+    24 => 'Отмена',
+    25 => 'Удалить',
+    26 => 'Наименование плагина',
+    27 => 'Homepage плагина',
+    28 => 'Версия плагина',
+    29 => 'Версия Geeklog',
+    30 => 'Удалить плагин?',
+    31 => 'Вы уверены, что хотите удалить этот плагин? Продолжив, Вы удалите все файлы и данные, которые данный плагин использовал.  Если Вы уверены, нажмите кнопку "Удалить" ниже.',
+    32 => '<p><b>Ошибка: неверный формат тега AutoLink</b></p>',
+    33 => 'Версия кода',
+    34 => 'Обновить',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'создать синопсис',
+    2 => 'сохранить',
+    3 => 'удалить',
+    4 => 'отменить',
+    10 => 'Синдикация контента',
+    11 => 'Новый синопсис',
+    12 => 'Домой к администратору',
+    13 => 'Чтобы удалить или исправить настрйоки синопсиса, нажмите на его название. Чтобы создать новый синопсис, нажмите на соответствующую ссылку выше.',
+    14 => 'Заголовок',
+    15 => 'Тип',
+    16 => 'Имя файла',
+    17 => 'Формат',
+    18 => 'последнее обновление',
+    19 => 'Включен',
+    20 => 'Да',
+    21 => 'Нет',
+    22 => '<i>(нет синопсисов)</i>',
+    23 => 'все статьи',
+    24 => 'Редактор синопсисов',
+    25 => 'Заголовок синопсиса',
+    26 => 'Предел',
+    27 => 'Количество записей',
+    28 => '(0 = текст не включать, 1 = весь текст, прочее = ограничить указанным числом символов.)',
+    29 => 'Описание',
+    30 => 'Последнее обновление',
+    31 => 'Кодировка',
+    32 => 'Язык',
+    33 => 'Содержимое',
+    34 => 'Записи',
+    35 => 'Часы',
+    36 => 'Выберите тип синопсиса',
+    37 => 'Установите хотя бы один модуль, поддерживающий синдикацию контента. Укажите ниже, хотите ли вы создать синопсис Geeklog, или синопсис от одного из модулей.',
+    38 => 'Ошибка: не все необходимые поля заполнены',
+    39 => 'Укажите заголовок, описание и имя файла.',
+    40 => 'Укажите либо количество записей, либо количество часов.',
+    41 => 'Ссылки',
+    42 => 'События',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Ваш пароль был отправлен Вам по электронной почте. Пожалуйста, следуйте указаниям в полученном сообщении. Благодарим за использование {$_CONF['site_name']}",
+    2 => "Спасибо за добавление статьи на {$_CONF['site_name']}.  Она была принята на рассмотрение. Если разрешение будет получено, Вашу статью смогут прочитать другие пользователи нашего сайта.",
+    3 => "Спасибо за добавление ссылки на  {$_CONF['site_name']}.  Она была принята на рассмотрение. Если разрешение будет получено, Вашу ссылку можно будет увидеть в разделе <a href={$_CONF['site_url']}/links.php>Ссылки</a>.",
+    4 => "Спасибо за добавление события на {$_CONF['site_name']}.  Оно было принято на рассмотрение.  Если разрешение будет получено, Ваше событие можно будет увидеть в разделе <a href={$_CONF['site_url']}/calendar.php>Календарь</a>.",
+    5 => 'Информация о Вашей учётной записи была успешно сохранена.',
+    6 => 'Ваши настройки изображения были успешно сохранены.',
+    7 => 'Ваши параметры комментариев были успешно сохранены.',
+    8 => 'Вы успешно вышли из системы.',
+    9 => 'Статья была успешно сохранена.',
+    10 => 'Статья была успешно удалена.',
+    11 => 'Ваш блок был успешно сохранён.',
+    12 => 'Ваш блок был успешно удалён.',
+    13 => 'Тема была успешно сохранена.',
+    14 => 'Тема и все относящиеся к ней статьи и блоки были успешно удалены.',
+    15 => 'Ссылка была успешно сохранена.',
+    16 => 'Ссылка была успешно удалена.',
+    17 => 'Событие было успешно сохранено.',
+    18 => 'Событие было успешно удалено.',
+    19 => 'Опрос был успешно сохранён.',
+    20 => 'Опрос был успешно удалён.',
+    21 => 'Новый пользователь был успешно зарегестрирован.',
+    22 => 'Пользователь был успешно удалён',
+    23 => 'Ошибка при попытке добавления события в Ваш календарь. Но в чём состаяла ошибка .',
+    24 => 'Событие успешно добавлено в Выш персональный календарь',
+    25 => 'Не могу открыть Ваш персональный календарь до входа в систему',
+    26 => 'Событие было успешно удалено из Вашего персонального календаря',
+    27 => 'Сообщение успешно отправлено.',
+    28 => 'Плагин успешно сохранён',
+    29 => 'Извините, персональный календарь на этом сайте не работает',
+    30 => 'Доступ закрыт',
+    31 => 'Извините, у Вас нет допуска к администрированию статей.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    32 => 'Извините, у Вас нет допуска к администрированию тем.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    33 => 'Извините, у Вас нет допуска к администрированию блоков.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    34 => 'Извините, у Вас нет допуска к администрированию ссылок.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    35 => 'Извините, у Вас нет допуска к администрированию событий.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    36 => 'Извините, у Вас нет допуска к администрированию опросов.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    37 => 'Извините, у Вас нет допуска к администрированию пользователей.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    38 => 'Извините, у Вас нет допуска к администрированию плагинов.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    39 => 'Извините, у Вас нет допуска к администрированию почты.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    40 => 'Системное сообщение',
+    41 => 'Извините, у Вас нет допуска к администрированию слов-замен.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    42 => 'Ваше слово было успешно сохранено.',
+    43 => 'Слово успешно удалено.',
+    44 => 'Плагин успешно установлен!',
+    45 => 'Плагин успешно удалён.',
+    46 => 'Извините, у Вас нет допуска к созданию резервных копий.  Просим учесть, что все попытки доступа к запрещённым функциям протоколируются.',
+    47 => 'Это работает только под *nix.  Если вы пользуетесь *nix, кэш успешно очищен. Есди вы на Windows, вам придётся самим найти файлы вида adodb_*.php и удалить их.',
+    48 => "Спасибо за подачу заявления на членство в ' . {$_CONF['site_name']} . '. Мы рассмотрим Ваше заявление. Как только Вы приняты, Ваш пароль будет выслан Вам на указанный Вами адрес.",
+    49 => 'Ваша группа успешно сохранена.',
+    50 => 'Ваша группа успешно стерта.',
+    51 => 'Это имя пользователя уже используется. Пожалуйста, выберите другое.',
+    52 => 'Почтовый адрес, который Вы указали, не соотвествует правилам для валидных почтовых адресов.',
+    53 => 'Ваш новый пароль принят. Пожалуйста, используйте Ваш новый пароль ниже для входа прямо сейчас.',
+    54 => 'Время Вашего запроса на новый пароль истекло. Пожалуйста, попробуйте ещё раз ниже.',
+    55 => 'Постовое сообщение было Вам отправлено и должно прийти моментально. Пожалуйста, следуйте указаниям в сообщении для указания нового пароля для Вашего аккаунта.',
+    56 => 'Почтоый адрес, который Вы указали, уже используется в другом аккаунте.',
+    57 => 'Ваш аккаунт был успешно удалён.',
+    58 => 'Синопсис успешно сохранён.',
+    59 => 'Синопсис успешно удалён.',
+    60 => 'Модуль успешно обновлён',
+    61 => 'Модуль %s: неизвестное хранилище сообщений',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Доступ',
+    'ownerroot' => 'Владелец/Root',
+    'group' => 'Группа',
+    'readonly' => 'Только чтение',
+    'accessrights' => 'Права доступа',
+    'owner' => 'Владелец',
+    'grantgrouplabel' => 'Дать права на редактирование упомянутой группы',
+    'permmsg' => 'Замечание: Пользователи - все вошедшие в систему зарегистрированные пользователи, анонимные пользователи - все посетители сайта, не вошедшие в систему.',
+    'securitygroups' => 'Группы безопасности',
+    'editrootmsg' => "Даже если Вы Администратор Пользователей, Вы не можете изменить корневого пользователя если сами им не являетесь. Вы можете изменять любых пользователей, кроме корневого. Все попытки нелегально изменить корневых пользователей протоколируются. Пожалуйста, вернитесь на страницу <a href=\"{$_CONF['site_admin_url']}/users.php\">Администрирование Пользователей</a>.",
+    'securitygroupsmsg' => 'Выберите группы, к которым должен принадлежать пользователь.',
+    'groupeditor' => 'Редактор групп',
+    'description' => 'Описание',
+    'name' => 'Имя',
+    'rights' => 'Права',
+    'missingfields' => 'Пропущенные поля',
+    'missingfieldsmsg' => 'Вы должны заполнить наименование и описание группы',
+    'groupmanager' => 'Менеджер групп',
+    'newgroupmsg' => 'Для изменения или удаления группы, нажмите на группу ниже. Для создания новой группы нажмите "Новая группа" выше. Просим заметить, что удаление базовых групп невозможно, т.к. они используются в системе.',
+    'groupname' => 'Имя группы',
+    'coregroup' => 'Базовая группа',
+    'yes' => 'Да',
+    'no' => 'Нет',
+    'corerightsdescr' => 'Эта группа является базовой. Поэтому права для этой группы не редактируемы. Ниже перечислены права, которые данная группа имеет.',
+    'groupmsg' => 'Структура Групп Безопастности является иерархической. Включая данную группу в другую, Вы даёте данной группе теже права, что имеет эта группа.  Это позволяет Вам использовать группы, перечисленные ниже, для назначения прав группе. Если Вы хотите назначить этой группе произвольные права, то Вы можете выбрать права к отдельным функциям данного сайта в разделе "Права" указанном ниже. Что бы добавить группу к любой из перечисленных ниже, просто проставте галочки напротив нужных групп.',
+    'coregroupmsg' => 'Эта группа является базовой. Поэтому группы, к которым эта группа относится не поддаются изменению. Ниже перечислены группы, к которым данная группа относится.',
+    'rightsdescr' => 'Групповые права могут быть назначены назначены напрямую группе ИЛИ другой группе, к которой принадлежит данная. Те права, которые не имеют чекбоксов рядом, являются правами, доставшимися группе по наследству от групп к которым она принадлежит. Права с чекбоксами рядом могут быть назначены этой группе напрямую.',
+    'lock' => 'Блокировано',
+    'members' => 'Пользователь',
+    'anonymous' => 'Анонимный',
+    'permissions' => 'Права',
+    'permissionskey' => 'R = чтение, E = изменение, право изменить подразумевает право читать',
+    'edit' => 'Изменить',
+    'none' => 'Никаких',
+    'accessdenied' => 'Доступ закрыт',
+    'storydenialmsg' => "У Вас нет прав на просмотр этой статьи. Возможно, Вы просто не являетесь зарегистрированным пользователем {$_CONF['site_name']}.  Пожалуйста, <a href=users.php?mode=new>зарегистрируйтесь</a> на {$_CONF['site_name']} для получения пользовательского доступа!",
+    'eventdenialmsg' => "У Вас нет прав на просмотр этого события. Возможно, Вы просто не являетесь зарегистрированным пользователем {$_CONF['site_name']}.  Пожалуйста, <a href=users.php?mode=new>зарегистрируйтесь</a> на {$_CONF['site_name']} для получения пользовательского доступа!",
+    'nogroupsforcoregroup' => 'Эта группа не принадлежит ниодной другой группе',
+    'grouphasnorights' => 'Эта группа не имеет доступа ни к одной административной функции сайта.',
+    'newgroup' => 'Новая группа',
+    'adminhome' => 'Home администратора',
+    'save' => 'сохранить',
+    'cancel' => 'отмена',
+    'delete' => 'удалить',
+    'canteditroot' => 'Вы пытаетесь редактировать Корневую группу, но при этом не являетесь её членом поэтому доступ к этой группе закрыт. Пожалуйста, обратитесь к системному администратору, если считаете это ошибкой.',
+    'listusers' => 'Список пользователей',
+    'listthem' => 'список',
+    'usersingroup' => 'Пользователей в группе %s',
+    'usergroupadmin' => 'Администрирование групп пользователей',
+    'add' => 'Добавить',
+    'remove' => 'Удалить',
+    'availmembers' => 'Доступные пользователи',
+    'groupmembers' => 'Члены группы',
+    'canteditgroup' => 'Чтобы править эту группу, вы должны быть в составе группы. Если вы считаете это ошибкой, уведомите системного администратора.',
+    'cantlistgroup' => 'Чтобы увидеть состав группы, вы сами доложны быть в её составе. Если вы считаете это ошибкой, уведомите системного администратора.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Последние 10 бэкапов',
+    'do_backup' => 'Сделать Бэкап',
+    'backup_successful' => 'Резервное копирование базы данных успешно завершено.',
+    'db_explanation' => 'Для создания новой резервной копии Вашей системы Geeklog, нажмите кнопку ниже',
+    'not_found' => "Неправильный путь или утилита mysqldump не может выполняться.<br>Проверьте <strong>\$_DB_mysqldump_path</strong> определение в файле config.php.<br>Переменная в данный момент установлена в: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Неудачный бэкап: Размер файла 0 байт',
+    'path_not_found' => "{$_CONF['backup_path']} не существует или не является директорией",
+    'no_access' => "Ошибка: Директория {$_CONF['backup_path']} не доступна.",
+    'backup_file' => 'Бэкап-файл',
+    'size' => 'Размер',
+    'bytes' => 'Байт',
+    'total_number' => 'Общее количество бэкапов: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'В начало',
+    2 => 'Обратная связь',
+    3 => 'Опубликуйтесь',
+    4 => 'Ссылки',
+    5 => 'Опросы',
+    6 => 'Календарь',
+    7 => 'Статистика сайта',
+    8 => 'Персонализация',
+    9 => 'Искать',
+    10 => 'расширенный поиск',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Ошибка',
+    2 => 'Хмм, я посмотрел везде, но не смог найти <b>%s</b>.',
+    3 => "<p>Нам очень жаль, но файл, который Вы запросили, не существует. Пожайлуйста, не стесняйтесь посмотреть <a href=\"{$_CONF['site_url']}\">главную страницу</a> или <a href=\"{$_CONF['site_url']}/search.php\">страницу поиска</a> чтобы определить, сможете ли Вы найти то, что потеряли :)."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Требуется вход',
+    2 => 'Извините, чтобы получить доступ к этой зоне вы должны зайти как зарегистрированный пользователь.',
+    3 => 'Вход',
+    4 => 'Новый пользователь'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'Создание PDF отключено',
+    2 => 'Документ не был переведён в формат PDF. Документ был получен, но не был обработан.  Пожалуйста, используйте только HTML документы, согласующиеся со стандартом xHTML. Учтите, что слишком сложные документы могут не быть обработаны успешно. Итог обработки имел длину 0 байт и был удалён. Если вы считаете, что доукмент должен нормально превращаться в PDF, повторите попытку.',
+    3 => 'Неизвестная ошибка при создании PDF',
+    4 => 'Не предоставлено данных о странице - возможно, вы намеревались использовать превращение в PDF \'на лету\' указанным ниже инструментом. Если вы считаете, что произошёл сбой, сообщите системному администратору.  В противном случае, воспользуйтесь приведённым ниже бланком, чтобы создать PDF \'на лету\'.',
+    5 => 'Загружаю ваш документ.',
+    6 => 'Подождите, документ загружается.',
+    7 => 'Вы можете нажать правой клавишей на кнопку ниже и выбрать \'сохранить как...\' или \'сохранить ссылку...\' чтобы сохранить копию документа.',
+    8 => 'Путь к библиотеке HTMLDoc в конфигурационном файле указан неверно, или произошёл сбой при попытке её использовать.  Если ошибка повторяется, обратитесь к системному администратору.',
+    9 => 'Генератор PDF',
+    10 => 'Это - инструмент создания PDF Ad-hoc (\'на лету\'). Будет сделана попытка превращения URL в PDF.  Пожалуйста, имейте в виду, что не все страницы правильно преобразуются в PDF. Это - ограничения библиотеки HTMLDoc, и не следует сообщать о них администрации сайта',
+    11 => 'URL',
+    12 => 'Создать PDF!',
+    13 => 'НАстройки PHP не позволяют открывать ссылки (URL) при помощи fopen().  Системный администратор должен установить в php.ini флаг allow_url_fopen = On',
+    14 => 'PDF не существует, или уже у вас нет прав его просматривать.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/slovak.php 1.4.0sr5-1/cpanel-glprivate/language/slovak.php
--- 1.3.11sr1/cpanel-glprivate/language/slovak.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/slovak.php	2006-08-08 02:39:06.000000000 -0500
@@ -153,7 +153,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -320,7 +330,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -338,27 +364,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Veci kade-tade po weboch',
-    2 => 'Ni na zobrazenie',
-    3 => 'Pridaj linku'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Hlas uloen',
-    2 => 'Pre tto anketu bol tvoj hlas uloen',
-    3 => 'Hlasuj',
-    4 => 'Ankety v systme',
-    5 => 'Hlasy(ov)',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -459,7 +464,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -489,7 +498,14 @@
     21 => 'Zd sa, e na sajte nie s iadne linky alebo na ne nikto nechodi.',
     22 => 'lnky najviac posielan e-mailom',
     23 => 'E-maily',
-    24 => 'Zd sa, e nikto neposielal lnok e-mailom.'
+    24 => 'Zd sa, e nikto neposielal lnok e-mailom.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -642,7 +658,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -677,35 +698,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Link Editor',
-    2 => '',
-    3 => 'Link Title',
-    4 => 'Link URL',
-    5 => 'Category',
-    6 => '(include http://)',
-    7 => 'Other',
-    8 => 'Link Hits',
-    9 => 'Link Description',
-    10 => 'You need to provide a link Title, URL and Description.',
-    11 => 'Link Manager',
-    12 => 'To modify or delete a link, click on that link below.  To create a new link click new link above.',
-    13 => 'Link Title',
-    14 => 'Link Category',
-    15 => 'Link URL',
-    16 => 'Access Denied',
-    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/link.php\">go back to the link administration screen</a>.",
-    18 => 'New Link',
-    19 => 'Admin Home',
-    20 => 'If other, specify',
-    21 => 'save',
-    22 => 'cancel',
-    23 => 'delete'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -728,16 +720,16 @@
     17 => 'Body Text',
     18 => 'Hits',
     19 => 'Comments',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Story List',
     23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Story Preview',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Please fill in the Author, Title and Intro Text fields',
     32 => 'Featured',
@@ -770,39 +762,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Mode',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Poll Created',
-    4 => 'Poll %s saved',
-    5 => 'Edit Poll',
-    6 => 'Poll ID',
-    7 => '(do not use spaces)',
-    8 => 'Appears on Homepage',
-    9 => 'Question',
-    10 => 'Answers / Votes',
-    11 => 'There was an error getting poll answer data about the poll %s',
-    12 => 'There was an error getting poll question data about the poll %s',
-    13 => 'Create Poll',
-    14 => 'save',
-    15 => 'cancel',
-    16 => 'delete',
-    17 => 'Please enter a Poll ID',
-    18 => 'Poll List',
-    19 => 'To modify or delete a poll, click on that poll.  To create a new poll click on new poll above.',
-    20 => 'Voters',
-    21 => 'Access Denied',
-    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
-    23 => 'New Poll',
-    24 => 'Admin Home',
-    25 => 'Yes',
-    26 => 'No'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -834,7 +817,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -876,7 +862,18 @@
     33 => 'submit',
     34 => 'Error: You must specify a file to upload.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -988,7 +985,7 @@
 # admin/plugins.php
 
 $LANG32 = array(
-    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://geeklog.sourceforge.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
     2 => 'Plug-in Installation Disclaimer',
     3 => 'Plug-in Installation Form',
     4 => 'Plug-in File',
@@ -996,7 +993,7 @@
     6 => 'Warning: Plug-in Already Installed!',
     7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
     8 => 'Plugin Compatibility Check Failed',
-    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://geeklog.sourceforge.net">Geeklog</a> or get a newer version of the plug-in.',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
     10 => '<br><b>There are no plugins currently installed.</b><br><br>',
     11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
     12 => 'no plugin name provided to plugineditor()',
@@ -1021,7 +1018,11 @@
     31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the files, data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1064,7 +1065,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1131,7 +1140,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1191,7 +1214,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1201,7 +1233,6 @@
     'last_ten_backups' => 'Last 10 Back-ups',
     'do_backup' => 'Do Backup',
     'backup_successful' => 'Database back up was successful.',
-    'no_backups' => 'No backups in the system',
     'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
     'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup Failed: Filesize was 0 bytes',
@@ -1225,7 +1256,8 @@
     7 => 'tatistiky sajty',
     8 => 'Prispsobenie',
     9 => 'Hadaj',
-    10 => 'Fajnov vyhadvanie'
+    10 => 'Fajnov vyhadvanie',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1267,4 +1299,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/slovak_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/slovak_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/slovak_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/slovak_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1508 @@
+<?php
+
+###############################################################################
+# slovak.php
+# This is the slovak language page for GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Prispel:',
+    2 => 'zvyšok článku',
+    3 => 'komentáre(ov)',
+    4 => 'Edituj',
+    5 => 'Anketa',
+    6 => 'Výsledky',
+    7 => 'Výsledky hlasovania',
+    8 => 'hlasy(ov)',
+    9 => 'Admin Functions:',
+    10 => 'Submissions',
+    11 => 'Stories',
+    12 => 'Blocks',
+    13 => 'Topics',
+    14 => 'Links',
+    15 => 'Events',
+    16 => 'Polls',
+    17 => 'Users',
+    18 => 'SQL Query',
+    19 => 'Choď do preč',
+    20 => 'User Information:',
+    21 => 'Username',
+    22 => 'User ID',
+    23 => 'Security Level',
+    24 => 'Anonymous',
+    25 => 'Reply',
+    26 => 'Nasledujúce kometáre majú na triku ich autori [ak sa nebáli podpísať]<br>Nesnaž sa to hodiť na krk tomuto sajtu.',
+    27 => 'Posledný príspevok',
+    28 => 'Zmaž',
+    29 => 'Žiadne komentáre.',
+    30 => 'Staršie príspevky',
+    31 => 'Povolené HTML Tagy:',
+    32 => 'Ups, zle meno',
+    33 => 'Ups, nemôžem zapísať do log súboru',
+    34 => 'Chyba',
+    35 => 'Odhlásenie',
+    36 => 'on',
+    37 => 'Žiadne príspevky od užívateľov',
+    38 => 'Content Syndication',
+    39 => 'Obnov',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Neprihlásený užívateľ',
+    42 => 'Authored by:',
+    43 => 'Reaguj',
+    44 => 'Parent',
+    45 => 'MySQL Error Number',
+    46 => 'MySQL Error Message',
+    47 => 'Prihlásenie',
+    48 => 'Nastavenie užívateľa',
+    49 => 'Nastavenie zobrazovania',
+    50 => 'Problém s databázou',
+    51 => 'pomoc',
+    52 => 'Novinka(y)',
+    53 => 'Admin Home',
+    54 => 'Nemôžem otvoriť súbor',
+    55 => 'Chyba na',
+    56 => 'Hlasuj',
+    57 => 'Heslo',
+    58 => 'Meno',
+    59 => "Ak chceš konto, klikni <a href=\"{$_CONF['site_url']}/users.php?mode=new\">sem</a>",
+    60 => 'Pošli komentár',
+    61 => 'Create New Account',
+    62 => 'slov',
+    63 => 'Nastavenie komentárov',
+    64 => 'Pošli niekomu e-mailom',
+    65 => 'Zobraz tlačiteľnú verziu',
+    66 => 'Môj kalendár',
+    67 => 'Vitaj na',
+    68 => 'Domov',
+    69 => 'kontakt',
+    70 => 'Hľadaj',
+    71 => 'Prispej',
+    72 => 'Linky',
+    73 => 'Staršie ankety',
+    74 => 'Kalendár',
+    75 => 'Fajnovejšie vyhľadávanie',
+    76 => 'Štatistiky sajtu',
+    77 => 'Plugins',
+    78 => 'Blížiace sa akcie',
+    79 => 'Čo je nove',
+    80 => 'stories in last',
+    81 => 'story in last',
+    82 => 'hours',
+    83 => 'KOMENTÁRE',
+    84 => 'LINKY',
+    85 => 'do 48 hod',
+    86 => 'Žiadne nove kometáre',
+    87 => 'do 2 týždňov',
+    88 => 'Žiadne nove linky',
+    89 => 'Žiadne nadchádzajúce akcie',
+    90 => 'Hlavná stránka',
+    91 => 'Vygenerované za',
+    92 => 'sekúnd',
+    93 => 'Copyright',
+    94 => 'Všetky ochranné známky a autorské práva na tejto stránke patria dotyčným autorom a vlastníkom.',
+    95 => 'Beží na',
+    96 => 'Grupy',
+    97 => 'Word List',
+    98 => 'Plug-ins',
+    99 => 'ČLÁNKY',
+    100 => 'Žiadne nové články',
+    101 => 'Tvoje Akcie',
+    102 => 'Všeobecné Akcie',
+    103 => 'DB Backups',
+    104 => 'by',
+    105 => 'Mail Users',
+    106 => 'Videné',
+    107 => 'GL Version Test',
+    108 => 'Clear Cache',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendar of Events',
+    2 => 'I\'m Sorry, there are no events to display.',
+    3 => 'When',
+    4 => 'Where',
+    5 => 'Description',
+    6 => 'Add An Event',
+    7 => 'Upcoming Events',
+    8 => 'By adding this event to your calendar you can quickly view only the events you are interested in by clicking "My Calendar" from the User Functions area.',
+    9 => 'Add to My Calendar',
+    10 => 'Remove from My Calendar',
+    11 => "Adding Event to {$_USER['username']}'s Calendar",
+    12 => 'Event',
+    13 => 'Starts',
+    14 => 'Ends',
+    15 => 'Back to Calendar'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Pošli komentár',
+    2 => 'Post Mode',
+    3 => 'Choď do preč',
+    4 => 'Create Account',
+    5 => 'meno',
+    6 => 'This site requires you to be logged in to post a comment, please log in.  If you do not have an account you can use the form below to create one.',
+    7 => 'Tvoj posledný komentár bol pred ',
+    8 => " sekundami.  Tento sajt ma vyžaduje aspoň {$_CONF['commentspeedlimit']} sekúnd medzi komentármi",
+    9 => 'Komentár',
+    10 => 'Send Report',
+    11 => 'Odošli komentár',
+    12 => 'Prosím vyplň titulok a/alebo komentár samotný. Je to nutné, ak chceš komentár odoslať.',
+    13 => 'Tvoje Info',
+    14 => 'Ako to bude vyzerať?',
+    15 => 'Report this post',
+    16 => 'Titulok',
+    17 => 'Chyba',
+    18 => 'Dôležité oné',
+    19 => 'Snaž sa držať témy.',
+    20 => 'Je lepšie odpovedať na konkrétny komentár, ako začínať daľšiu vetvu.',
+    21 => 'Prečítaj si príspevky ostatných, nech neposielaš tú istú sprostosť znovu.',
+    22 => 'Do titulku napíš niečo jasné, aby všetci vedeli, o čo ti vlastne ide.',
+    23 => 'Tvoj e-mail NEBUDE zobrazený',
+    24 => 'Anonymný užívateľ',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Profil užívateľa',
+    2 => 'Meno užívateľa',
+    3 => 'Celé meno',
+    4 => 'Heslo',
+    5 => 'E-mail',
+    6 => 'Domovska web stránka',
+    7 => 'O mne',
+    8 => 'PGP Klúč',
+    9 => 'Ulož',
+    10 => 'Posledných 10 komentárov užívateľa',
+    11 => 'Žiadne komentáraComments',
+    12 => 'User Preferences for',
+    13 => 'Email Nightly Digest',
+    14 => 'This password is generated by a randomizer. It is recommended that you change this password immediately. To change your password, log in and then click Account Information from the User Functions menu.',
+    15 => "Your {$_CONF['site_name']} account has been created successfully. To be able to use it, you must login using the information below. Please save this mail for further reference.",
+    16 => 'Your Account Information',
+    17 => 'Account does not exist',
+    18 => 'The email address provided does not appear to be a valid email address',
+    19 => 'The username or email address provided already exists',
+    20 => 'The email address provided does not appear to be a valid email address',
+    21 => 'Error',
+    22 => "Register with {$_CONF['site_name']}!",
+    23 => 'Vytvorením loginu máš možnosť písať kometáre a prispievať článkami pod svojim menom.<br>Pokiaľ konto nemáš, vždy budeš pod anonymnou hlavičkou.<br><b>Tvoj e-mail nikde nebude zobrazený.<b><br>',
+    24 => 'Your password will be sent to the email address you enter.',
+    25 => 'Did You Forget Your Password?',
+    26 => 'Enter your username and click Email Password and a new password will be mailed to the email address on record.',
+    27 => 'Register Now!',
+    28 => 'Email Password',
+    29 => 'logged out from',
+    30 => 'logged in from',
+    31 => 'To, čo chceš robiť, vyžaduje prihlásenie',
+    32 => 'Podpis',
+    33 => 'Verejne sa nezobrazuje',
+    34 => 'Tvoje reálne meno',
+    35 => 'Zadaj heslo, ak ho chceš zmeniť',
+    36 => 'Musí začat s http://',
+    37 => 'Použije sa na tvoje kometáre',
+    38 => 'Hocičo, čo chceš, aby ostatní o tebe vedeli.',
+    39 => 'Tvoj verejný PGP kľúč',
+    40 => 'Žiadne ikonky tém',
+    41 => 'Willing to Moderate',
+    42 => 'Date Format',
+    43 => 'Maximum Stories',
+    44 => 'No boxes',
+    45 => 'Nastavenie zobrazovania pre',
+    46 => 'Vynechané položky pre',
+    47 => 'Konfigurácia boxíkov na pravej strane pre',
+    48 => 'Témy',
+    49 => 'V článkoch sa nebudú zobrazovať ikony tém',
+    50 => 'Uncheck this if you aren\'t interested',
+    51 => 'Just the news stories',
+    52 => 'The default is',
+    53 => 'Receive the days stories every night',
+    54 => 'Označ témy a autorov, ktorých nechceš vidieť.',
+    55 => 'Ak necháš všetko neoznačené, znamená to, že chceš štandardné nastavenie. Ak už začneš označovať, označ naozaj všetko, co chceš. Štandardné nastavenie bude ignorovať. Štandardné položky sú <strong>boldom</strong>.',
+    56 => 'Autori',
+    57 => 'Mód zobrazenia',
+    58 => 'Poradie triedenia',
+    59 => 'Limit na počet komentárov',
+    60 => 'Ako chceš zobrazovať komentáre?',
+    61 => 'Od najnovších alebo od najstarších?',
+    62 => 'Štandard je 100',
+    63 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
+    64 => 'Nastavenie komentárov pre',
+    65 => 'Skús sa prihlásiť znovu',
+    66 => "You may have mistyped your login credentials.  Please try logging in again below. Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?",
+    67 => 'Member Since',
+    68 => 'Pamätaj si ma',
+    69 => 'Ako dlho po prihlásení si ťa ma tento sajt pamäteť?',
+    70 => "Customize the layout and content of {$_CONF['site_name']}",
+    71 => "One of the great features of {$_CONF['site_name']} is you can customize the content you get and you can change the overall layout of this site.  In order to take advantage of these great features you must first <a href=\"{$_CONF['site_url']}/users.php?mode=new\">register</a> with {$_CONF['site_name']}.  Are you already a member?  Then use the login form to the left to log in!",
+    72 => 'Téma zobrazenia',
+    73 => 'Jazyk',
+    74 => 'Zmeň si vzhľad sajty',
+    75 => 'Emailed Topics for',
+    76 => 'If you select a topic from the list below you will receive any new stories posted to that topic at the end of each day.  Choose only the topics that interest you!',
+    77 => 'Foto',
+    78 => 'Pridaj svoje foto.',
+    79 => 'Zaškrtni, ak chceš zmazať fotku.',
+    80 => 'Login',
+    81 => 'Send Email',
+    82 => 'Last 10 stories for user',
+    83 => 'Posting statistics for user',
+    84 => 'Total number of articles:',
+    85 => 'Total number of comments:',
+    86 => 'Find all postings by',
+    87 => 'Your login name',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Set New Password',
+    92 => 'Enter New Password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Delete Account "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'delete account',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Privacy Options for',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email from Users',
+    103 => 'Allow email from other users',
+    104 => 'Show Online Status',
+    105 => 'Show up in Who\'s Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'No News to Display',
+    2 => 'There are no news stories to display.  There may be no news for this topic or your user preferences may be too restrictive',
+    3 => ' for topic %s',
+    4 => 'Dnešný hlavný članok',
+    5 => 'Ďaľší',
+    6 => 'Predošlý',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'There was an error sending your message. Please try again.',
+    2 => 'Message sent successfully.',
+    3 => 'Please make sure you use a valid email address in the Reply To field.',
+    4 => 'Please fill in the Your Name, Reply To, Subject and Message fields',
+    5 => 'Error: No such user.',
+    6 => 'There was an error.',
+    7 => 'User Profile for',
+    8 => 'User Name',
+    9 => 'User URL',
+    10 => 'Send mail to',
+    11 => 'Your Name:',
+    12 => 'Reply To:',
+    13 => 'Subject:',
+    14 => 'Message:',
+    15 => 'HTML will not be translated.',
+    16 => 'Send Message',
+    17 => 'Mail Story to a Friend',
+    18 => 'To Name',
+    19 => 'To Email Address',
+    20 => 'From Name',
+    21 => 'From Email Address',
+    22 => 'All fields are required',
+    23 => "This email was sent to you by %s at %s because they thought you might be interested it this article from {$_CONF['site_url']}.  This is not SPAM and the email addresses involved in this transaction were not saved to a list or stored for later use.",
+    24 => 'Comment on this story at',
+    25 => 'You must be logged in to user this feature.  By having you log in, it helps us prevent misuse of the system',
+    26 => 'This form will allow you to send an email to the selected user.  All fields are required.',
+    27 => 'Short message',
+    28 => '%s wrote: ',
+    29 => "This is the daily digest from {$_CONF['site_name']} for ",
+    30 => ' Daily Newsletter for ',
+    31 => 'Title',
+    32 => 'Date',
+    33 => 'Read the full article at',
+    34 => 'End of Message',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Fajnovejšie vyhľadávanie',
+    2 => 'Kľúčové slová',
+    3 => 'Téma',
+    4 => 'Všetko',
+    5 => 'Typ',
+    6 => 'Články',
+    7 => 'Komentáre',
+    8 => 'Autor',
+    9 => 'Všetko',
+    10 => 'Hľadaj',
+    11 => 'Výsledky hľadania',
+    12 => 'zhôd',
+    13 => 'Výsledok hľadania: žiadna zhoda',
+    14 => 'Nenašla sa žiadna zhoda pri hľadaní',
+    15 => 'Skús znova.',
+    16 => 'Titul',
+    17 => 'Dátum',
+    18 => 'Autor',
+    19 => 'Prehľadávanie celej databázy terajších a starých článkov',
+    20 => 'Dátum',
+    21 => 'do',
+    22 => '(Formát dátumu YYYY-MM-DD)',
+    23 => 'Prístupy',
+    24 => 'Nášiel',
+    25 => 'zhôd pre',
+    26 => 'položiek za',
+    27 => 'sekúnd',
+    28 => 'Žiadny článok alebo komentár nepasuje na tvoje hľadanie',
+    29 => 'Výsledok pre články a komentáre',
+    30 => '%Ziadna linka nepasuje na tvoje hľadanie',
+    31 => 'Tento modul nenašiel žiadnu zhodu',
+    32 => 'Akcia',
+    33 => 'URL',
+    34 => 'Miesto',
+    35 => 'Celý deň',
+    36 => 'Žiadna akcia nepasuje na tvoje hľadanie',
+    37 => 'Výsledok pre akcie',
+    38 => 'Výsledok pre linky',
+    39 => 'Linky',
+    40 => 'Akcie',
+    41 => 'Your query string should have at least 3 characters.',
+    42 => 'Please use a date formatted as YYYY-MM-DD (year-month-day).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Štatistiky sajty',
+    2 => 'Celkový počet prístupov',
+    3 => 'Články(Komentáre)',
+    4 => 'Ankety(Hlasované)',
+    5 => 'Linky(Kliknuté)',
+    6 => 'Akcie',
+    7 => 'Najčítanejšie články',
+    8 => 'Titulok',
+    9 => 'Čítané',
+    10 => 'Zdá sa, že na sajte nie sú žiadne články alebo ich nikto nečíta.',
+    11 => 'Najkomentovanejšie články',
+    12 => 'Komentárov',
+    13 => 'Zdá sa, že na sajte nie sú žiadne články alebo ich nikto nekomentuje.',
+    14 => 'Najpristupovanejšie ankety',
+    15 => 'Anketná otázka',
+    16 => 'Hlasov',
+    17 => 'Zdá sa, že na sajte nie sú žiadne ankety alebo nikto nehlasoval.',
+    18 => 'Najpristupovanejšie linky',
+    19 => 'Linky',
+    20 => 'Pristupy',
+    21 => 'Zdá sa, že na sajte nie sú žiadne linky alebo na ne nikto nechodi.',
+    22 => 'Články najviac posielané e-mailom',
+    23 => 'E-maily',
+    24 => 'Zdá sa, že nikto neposielal článok e-mailom.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Podobné',
+    2 => 'Pošli e-mailom',
+    3 => 'Verzia pre tlač',
+    4 => 'Voľby článku',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'To submit a %s you are required to be logged in as a user.',
+    2 => 'Login',
+    3 => 'New User',
+    4 => 'Submit a Event',
+    5 => 'Submit a Link',
+    6 => 'Submit a Story',
+    7 => 'Login is Required',
+    8 => 'Submit',
+    9 => 'When submitting information for use on this site we ask that you follow the following suggestions...<ul><li>Fill in all the fields, they\'re required<li>Provide complete and accurate information<li>Double check those URLs</ul>',
+    10 => 'Title',
+    11 => 'Link',
+    12 => 'Start Date',
+    13 => 'End Date',
+    14 => 'Location',
+    15 => 'Description',
+    16 => 'If other, please specify',
+    17 => 'Category',
+    18 => 'Other',
+    19 => 'Read First',
+    20 => 'Error: Missing Category',
+    21 => 'When selecting "Other" please also provide a category name',
+    22 => 'Error: Missing Fields',
+    23 => 'Please fill in all the fields on the form.  All fields are required.',
+    24 => 'Submission Saved',
+    25 => 'Your %s submission has been saved successfully.',
+    26 => 'Speed Limit',
+    27 => 'Username',
+    28 => 'Topic',
+    29 => 'Story',
+    30 => 'Your last submission was ',
+    31 => " seconds ago.  This site requires at least {$_CONF['speedlimit']} seconds between submissions",
+    32 => 'Preview',
+    33 => 'Story Preview',
+    34 => 'Log Out',
+    35 => 'HTML tags are not allowed',
+    36 => 'Post Mode',
+    37 => "Submitting an event to {$_CONF['site_name']} will put your event on the master calendar where users can optionally add your event to their personal calendar. This feature is <b>NOT</b> meant to store your personal events such as birthdays and anniversaries.<br><br>Once you submit your event it will be sent to our administrators and if approved, your event will appear on the master calendar.",
+    38 => 'Add Event To',
+    39 => 'Master Calendar',
+    40 => 'Personal Calendar',
+    41 => 'End Time',
+    42 => 'Start Time',
+    43 => 'All Day Event',
+    44 => 'Address Line 1',
+    45 => 'Address Line 2',
+    46 => 'City/Town',
+    47 => 'State',
+    48 => 'Zip Code',
+    49 => 'Event Type',
+    50 => 'Edit Event Types',
+    51 => 'Location',
+    52 => 'Delete',
+    53 => 'Create Account'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Authentication Required',
+    2 => 'Denied! Incorrect Login Information',
+    3 => 'Invalid password for user',
+    4 => 'Username:',
+    5 => 'Password:',
+    6 => 'All access to administrative portions of this web site are logged and reviewed.<br>This page is for the use of authorized personnel only.',
+    7 => 'login'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Insufficient Admin Rights',
+    2 => 'You do not have the necessary rights to edit this block.',
+    3 => 'Block Editor',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Block Title',
+    6 => 'Topic',
+    7 => 'All',
+    8 => 'Block Security Level',
+    9 => 'Block Order',
+    10 => 'Block Type',
+    11 => 'Portal Block',
+    12 => 'Normal Block',
+    13 => 'Portal Block Options',
+    14 => 'RDF URL',
+    15 => 'Last RDF Update',
+    16 => 'Normal Block Options',
+    17 => 'Block Content',
+    18 => 'Please fill in the Block Title, Security Level and Content fields',
+    19 => 'Block Manager',
+    20 => 'Block Title',
+    21 => 'Block SecLev',
+    22 => 'Block Type',
+    23 => 'Block Order',
+    24 => 'Block Topic',
+    25 => 'To modify or delete a block, click on that block below.  To create a new block click on new block above.',
+    26 => 'Layout Block',
+    27 => 'PHP Block',
+    28 => 'PHP Block Options',
+    29 => 'Block Function',
+    30 => 'If you would like to have one of your blocks use PHP code, enter the name of the function above.  Your function name must start with the prefix "phpblock_" (e.g. phpblock_getweather).  If it does not have this prefix, your function will NOT be called.  We do this to keep people who may have hacked your Geeklog installation from putting arbitrary function calls that may be harmful to your system.  Be sure not to put empty parenthisis "()" after your function name.  Finally, it is recommended that you put all your PHP Block code in /path/to/geeklog/system/lib-custom.php.  That will allow the code to stay with you even when you upgrade to a newer version of Geeklog.',
+    31 => 'Error in PHP Block.  Function, %s, does not exist.',
+    32 => 'Error Missing Field(s)',
+    33 => 'You must enter the URL to the .rdf file for portal blocks',
+    34 => 'You must enter the title and the function for PHP blocks',
+    35 => 'You must enter the title and the content for normal blocks',
+    36 => 'You must enter the content for layout blocks',
+    37 => 'Bad PHP block function name',
+    38 => 'Functions for PHP Blocks must have the prefix \'phpblock_\' (e.g. phpblock_getweather).  The \'phpblock_\' prefix is required for security reasons to prevent the execution of arbitrary code.',
+    39 => 'Side',
+    40 => 'Left',
+    41 => 'Right',
+    42 => 'You must enter the blockorder and security level for Geeklog default blocks',
+    43 => 'Homepage Only',
+    44 => 'Access Denied',
+    45 => "You are trying to access a block that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/block.php\">go back to the block administration screen</a>.",
+    46 => 'New Block',
+    47 => 'Admin Home',
+    48 => 'Block Name',
+    49 => ' (no spaces and must be unique)',
+    50 => 'Help File URL',
+    51 => 'include http://',
+    52 => 'If you leave this blank the help icon for this block will not be displayed',
+    53 => 'Enabled',
+    54 => 'save',
+    55 => 'cancel',
+    56 => 'delete',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Event Editor',
+    2 => 'Error',
+    3 => 'Event Title',
+    4 => 'Event URL',
+    5 => 'Event Start Date',
+    6 => 'Event End Date',
+    7 => 'Event Location',
+    8 => 'Event Description',
+    9 => '(include http://)',
+    10 => 'You must provide the dates/times, description and event location!',
+    11 => 'Event Manager',
+    12 => 'To modify or delete a event, click on that event below.  To create a new event click on new event above.',
+    13 => 'Event Title',
+    14 => 'Start Date',
+    15 => 'End Date',
+    16 => 'Access Denied',
+    17 => "You are trying to access an event that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/event.php\">go back to the event administration screen</a>.",
+    18 => 'New Event',
+    19 => 'Admin Home',
+    20 => 'save',
+    21 => 'cancel',
+    22 => 'delete',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Previous Stories',
+    2 => 'Next Stories',
+    3 => 'Mode',
+    4 => 'Post Mode',
+    5 => 'Story Editor',
+    6 => 'There are no stories in the system',
+    7 => 'Author',
+    8 => 'save',
+    9 => 'preview',
+    10 => 'cancel',
+    11 => 'delete',
+    12 => 'ID',
+    13 => 'Title',
+    14 => 'Topic',
+    15 => 'Date',
+    16 => 'Intro Text',
+    17 => 'Body Text',
+    18 => 'Hits',
+    19 => 'Comments',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Story List',
+    23 => 'To modify or delete a story, click on that story\'s number below. To view a story, click on the title of the story you wish to view. To create a new story click on new story above.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Story Preview',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Please fill in the Author, Title and Intro Text fields',
+    32 => 'Featured',
+    33 => 'There can only be one featured story',
+    34 => 'Draft',
+    35 => 'Yes',
+    36 => 'No',
+    37 => 'Viac od',
+    38 => 'Viac z',
+    39 => 'Emails',
+    40 => 'Access Denied',
+    41 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  You may view the article in read-only below. Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a> when you are done.",
+    42 => "You are trying to access a story that you don't have rights to.  This attempt has been logged.  Please <a href=\"{$_CONF['site_admin_url']}/story.php\">go back to the story administration screen</a>.",
+    43 => 'New Story',
+    44 => 'Admin Home',
+    45 => 'Access',
+    46 => '<b>NOTE:</b> if you modify this date to be in the future, this article will not be published until that date.  That also means the story will not be included in your RDF headline feed and it will be ignored by the search and statistics pages.',
+    47 => 'Images',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => 'To add one of the images you are attaching to this article you need to insert specially formatted text.  The specially formatted text is [imageX], [imageX_right] or [imageX_left] where X is the number of the image you have attached.  NOTE: You must use the images you attach.  If you do not you will be unable to save your story.<BR><P><B>PREVIEWING</B>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    52 => 'Delete',
+    53 => 'was not used.  You must include this image in the intro or body before you can save your changes',
+    54 => 'Attached Images Not Used',
+    55 => 'The following errors occured while trying to save your story.  Please correct these errors before saving',
+    56 => 'Show Topic Icon',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Topic Editor',
+    2 => 'Topic ID',
+    3 => 'Topic Name',
+    4 => 'Topic Image',
+    5 => '(do not use spaces)',
+    6 => 'Deleting a topic deletes all stories and blocks associated with it',
+    7 => 'Please fill in the Topic ID and Topic Name fields',
+    8 => 'Topic Manager',
+    9 => 'To modify or delete a topic, click on that topic.  To create a new topic click the new topic button to the left. You will find your access level for each topic in parenthesis',
+    10 => 'Sort Order',
+    11 => 'Stories/Page',
+    12 => 'Access Denied',
+    13 => "You are trying to access a topic that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/topic.php\">go back to the topic administration screen</a>.",
+    14 => 'Sort Method',
+    15 => 'alphabetical',
+    16 => 'default is',
+    17 => 'New Topic',
+    18 => 'Admin Home',
+    19 => 'save',
+    20 => 'cancel',
+    21 => 'delete',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'User Editor',
+    2 => 'User ID',
+    3 => 'User Name',
+    4 => 'Full Name',
+    5 => 'Password',
+    6 => 'Security Level',
+    7 => 'Email Address',
+    8 => 'Domů, do Prahy, do Podolí,...',
+    9 => '(do not use spaces)',
+    10 => 'Please fill in the Username, Full name, Security Level and Email Address fields',
+    11 => 'User Manager',
+    12 => 'To modify or delete a user, click on that user below.  To create a new user click the new user button to the left. You can do simple searches by entering parts of a username,email address or fullname (e.g.*son* or *.edu) in the form below.',
+    13 => 'SecLev',
+    14 => 'Reg. Date',
+    15 => 'New User',
+    16 => 'Admin Home',
+    17 => 'changepw',
+    18 => 'cancel',
+    19 => 'delete',
+    20 => 'save',
+    21 => 'The username you tried saving already exists.',
+    22 => 'Error',
+    23 => 'Batch Add',
+    24 => 'Batch Import of Users',
+    25 => 'You can import a batch of users into Geeklog.  The import file must a tab-delimited text file and must have the fields in the following order: full name, username, email address.  Each user you import will be emailed with a random password.  You must have one user entered per line.  Failure to follow these instructions will cause problems that may require manual work so double check your entries!',
+    26 => 'Search',
+    27 => 'Limit Results',
+    28 => 'Check here to delete this picture',
+    29 => 'Path',
+    30 => 'Import',
+    31 => 'New Users',
+    32 => 'Done processing. Imported %d and encountered %d failures',
+    33 => 'submit',
+    34 => 'Error: You must specify a file to upload.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Approve',
+    2 => 'Delete',
+    3 => 'Edit',
+    4 => 'Profile',
+    10 => 'Title',
+    11 => 'Start Date',
+    12 => 'URL',
+    13 => 'Category',
+    14 => 'Date',
+    15 => 'Topic',
+    16 => 'User name',
+    17 => 'Full name',
+    18 => 'Email',
+    34 => 'Command and Control',
+    35 => 'Story Submissions',
+    36 => 'Link Submissions',
+    37 => 'Event Submissions',
+    38 => 'Submit',
+    39 => 'There are no submissions to moderate at this time',
+    40 => 'User Submissions'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Sunday',
+    2 => 'Monday',
+    3 => 'Tuesday',
+    4 => 'Wednesday',
+    5 => 'Thursday',
+    6 => 'Friday',
+    7 => 'Saturday',
+    8 => 'Add Event',
+    9 => 'Geeklog Event',
+    10 => 'Events for',
+    11 => 'Master Calendar',
+    12 => 'My Calendar',
+    13 => 'January',
+    14 => 'February',
+    15 => 'March',
+    16 => 'April',
+    17 => 'May',
+    18 => 'June',
+    19 => 'July',
+    20 => 'August',
+    21 => 'September',
+    22 => 'October',
+    23 => 'November',
+    24 => 'December',
+    25 => 'Back to ',
+    26 => 'All Day',
+    27 => 'Week',
+    28 => 'Personal Calendar for',
+    29 => 'Public Calendar',
+    30 => 'delete event',
+    31 => 'Add',
+    32 => 'Event',
+    33 => 'Date',
+    34 => 'Time',
+    35 => 'Quick Add',
+    36 => 'Submit',
+    37 => 'Sorry, the personal calendar feature is not enabled on this site',
+    38 => 'Personal Event Editor',
+    39 => 'Day',
+    40 => 'Week',
+    41 => 'Month'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'From',
+    3 => 'Reply-to',
+    4 => 'Subject',
+    5 => 'Body',
+    6 => 'Send to:',
+    7 => 'All users',
+    8 => 'Admin',
+    9 => 'Options',
+    10 => 'HTML',
+    11 => 'Urgent message!',
+    12 => 'Send',
+    13 => 'Reset',
+    14 => 'Ignore user settings',
+    15 => 'Error when sending to: ',
+    16 => 'Successfully sent messages to: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Send another message</a>",
+    18 => 'To',
+    19 => 'NOTE: if you wish to send a message to all site members, select the Logged-in Users group from the drop down.',
+    20 => "Successfully sent <successcount> messages and unsuccessfully sent <failcount> messages.  If you need them, the details of each message attempts is below.  Otherwise you can <a href=\"{$_CONF['site_admin_url']}/mail.php\">Send another message</a> or you can <a href=\"{$_CONF['site_admin_url']}/moderation.php\">go back to the administration page</a>.",
+    21 => 'Failures',
+    22 => 'Successes',
+    23 => 'No failures',
+    24 => 'No successes',
+    25 => '-- Select Group --',
+    26 => 'Please fill in all the fields on the form and select a group of users from the drop down.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Installing plugins could possibly cause damage to your Geeklog installation and, possibly, to your system.  It is important that you only install plugins downloaded from the <a href="http://www.geeklog.net" target="_blank">Geeklog Homepage</a> as we thoroughly test all plugins submitted to our site on a variety of operating systems.  It is important that you understand that the plugin installation process will require the execution of a few filesystem commands which could lead to security problems particularly if you use plugins from third party sites.  Even with this warning you are getting, we do not gaurantee the success of any installation nor are we liable for damage caused by installing a Geeklog plugin.  In other words, install at your own risk.  For the wary, directions on how to manually install a plugin is included with each plugin package.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Plug-in List',
+    6 => 'Warning: Plug-in Already Installed!',
+    7 => 'The plug-in you are trying to install already exists.  Please delete the plugin before re-installing it',
+    8 => 'Plugin Compatibility Check Failed',
+    9 => 'This plugin requires a newer version of Geeklog. Either upgrade your copy of <a href="http://www.geeklog.net">Geeklog</a> or get a newer version of the plug-in.',
+    10 => '<br><b>There are no plugins currently installed.</b><br><br>',
+    11 => 'To modify or delete a plug-in, click on that plug-in\'s number below. To learn more about a plug-in, click the plug-in name and you will be directed to that plug-in\'s website. To install or upgrade a plug-in please consult it\'s documentation.',
+    12 => 'no plugin name provided to plugineditor()',
+    13 => 'Plugin Editor',
+    14 => 'New Plug-in',
+    15 => 'Admin Home',
+    16 => 'Plug-in Name',
+    17 => 'Plug-in Version',
+    18 => 'Geeklog Version',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => 'Install',
+    23 => 'Save',
+    24 => 'Cancel',
+    25 => 'Delete',
+    26 => 'Plug-in Name',
+    27 => 'Plug-in Homepage',
+    28 => 'Plug-in Version',
+    29 => 'Geeklog Version',
+    30 => 'Delete Plug-in?',
+    31 => 'Are you sure you want to delete this plug-in?  By doing so you will remove all the files, data and data structures that this plug-in uses.  If you are sure, click delete again on the form below.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Your password has been emailed to you and should arrive momentarily. Please follow the directions in the message and we thank-you for using {$_CONF['site_name']}",
+    2 => "Thank-you for submitting your story to {$_CONF['site_name']}.  It has been submitted to our staff for approval. If approved, your story will be available for others to read on our site.",
+    3 => "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links.php>links</a> section.",
+    4 => "Thank-you for submitting an event to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your event will be seen in our <a href={$_CONF['site_url']}/calendar.php>calendar</a> section.",
+    5 => 'Your account information has been successfully saved.',
+    6 => 'Your display preferences have been successfully saved.',
+    7 => 'Your comment preferences have been successfully saved.',
+    8 => 'You have been successfully logged out.',
+    9 => 'Your story has been successfully saved.',
+    10 => 'The story has been successfully deleted.',
+    11 => 'Your block has been successfully saved.',
+    12 => 'The block has been successfully deleted.',
+    13 => 'Your topic has been successfully saved.',
+    14 => 'The topic and all it\'s stories an blocks have been successfully deleted.',
+    15 => 'Your link has been successfully saved.',
+    16 => 'The link has been successfully deleted.',
+    17 => 'Your event has been successfully saved.',
+    18 => 'The event has been successfully deleted.',
+    19 => 'Your poll has been successfully saved.',
+    20 => 'The poll has been successfully deleted.',
+    21 => 'The new user has been successfully saved.',
+    22 => 'The user has been successfully deleted',
+    23 => 'Error trying to add an event to your calendar. There was no event id passed.',
+    24 => 'The event has been saved to your calendar',
+    25 => 'Cannot open your personal calendar until you login',
+    26 => 'Event was successfully removed from your personal calendar',
+    27 => 'Message successfully sent.',
+    28 => 'The plug-in has been successfully saved',
+    29 => 'Sorry, personal calendars are not enabled on this site',
+    30 => 'Access Denied',
+    31 => 'Sorry, you do not have access to the story administration page.  Please note that all attempts to access unauthorized features are logged',
+    32 => 'Sorry, you do not have access to the topic administration page.  Please note that all attempts to access unauthorized features are logged',
+    33 => 'Sorry, you do not have access to the block administration page.  Please note that all attempts to access unauthorized features are logged',
+    34 => 'Sorry, you do not have access to the link administration page.  Please note that all attempts to access unauthorized features are logged',
+    35 => 'Sorry, you do not have access to the event administration page.  Please note that all attempts to access unauthorized features are logged',
+    36 => 'Sorry, you do not have access to the poll administration page.  Please note that all attempts to access unauthorized features are logged',
+    37 => 'Sorry, you do not have access to the user administration page.  Please note that all attempts to access unauthorized features are logged',
+    38 => 'Sorry, you do not have access to the plugin administration page.  Please note that all attempts to access unauthorized features are logged',
+    39 => 'Sorry, you do not have access to the mail administration page.  Please note that all attempts to access unauthorized features are logged',
+    40 => 'System Message',
+    41 => 'Sorry, you do not have access to the word replacement page.  Please note that all attempts to access unauthorized features are logged',
+    42 => 'Your word has been successfully saved.',
+    43 => 'The word has been successfully deleted.',
+    44 => 'The plug-in was successfully installed!',
+    45 => 'The plug-in was successfully deleted.',
+    46 => 'Sorry, you do not have access to the database backup utility.  Please note that all attempts to access unauthorized features are logged',
+    47 => 'This functionality only works under *nix.  If you are running *nix as your operating system then your cache has been successfully cleared. If you are on Windows, you will need to search for files name adodb_*.php and remove them manually.',
+    48 => "Thank you for applying for a membership with {$_CONF['site_name']}. Our team will review your application. If approved, your password will be emailed to you at the email address you just entered.",
+    49 => 'Your group has been successfully saved.',
+    50 => 'The group has been successfully deleted.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Access',
+    'ownerroot' => 'Owner/Root',
+    'group' => 'Group',
+    'readonly' => 'Read-Only',
+    'accessrights' => 'Access Rights',
+    'owner' => 'Owner',
+    'grantgrouplabel' => 'Grant Above Group Edit Rights',
+    'permmsg' => 'NOTE: members is all logged in members of the site and anonymous is all users browsing the site that aren\'t logged in.',
+    'securitygroups' => 'Security Groups',
+    'editrootmsg' => "Even though you are a User Administrator, you can't edit a root user without first being a root user yourself.  You can edit all other users except root users. Please note that all attempts to illegally edit root users are logged.  Please go back to the <a href=\"{$_CONF['site_admin_url']}/users.php\">User Administration page</a>.",
+    'securitygroupsmsg' => 'Select the checkboxes for the groups you want the user to belong to.',
+    'groupeditor' => 'Group Editor',
+    'description' => 'Description',
+    'name' => 'Name',
+    'rights' => 'Rights',
+    'missingfields' => 'Missing Fields',
+    'missingfieldsmsg' => 'You must supply the name and a description for a group',
+    'groupmanager' => 'Group Manager',
+    'newgroupmsg' => 'To modify or delete a group, click on that group below. To create a new group click new group above. Please note that core groups cannot be deleted because they are used in the system.',
+    'groupname' => 'Group Name',
+    'coregroup' => 'Core Group',
+    'yes' => 'Yes',
+    'no' => 'No',
+    'corerightsdescr' => "This group is a core {$_CONF['site_name']} Group.  Therefore the rights for this group cannot be edited.  Below is a read-only list of the rights this group has access to.",
+    'groupmsg' => 'Security Groups on this site are hierarchical.  By adding this group to any of the groups below you will giving this group the same rights that those groups have.  Where possible it is encouraged you use the groups below to give rights to a group.  If you need this group to have custom rights then you can select the rights to various site features in the section below called \'Rights\'.  To add this group to any of the ones below simply check the box next to the group(s) that you want.',
+    'coregroupmsg' => "This group is a core {$_CONF['site_name']} Group.  Therefore the groups that this groups belongs to cannot be edited.  Below is a read-only list of the groups this group belongs to.",
+    'rightsdescr' => 'A groups access to a certain right below can be given directly to the group OR to a different group that this group is a part of.  The ones you see below without a checkbox are the rights that have been given to this group because it belongs to another group with that right.  The rights with checkboxes below are rights that can be given directly to this group.',
+    'lock' => 'Lock',
+    'members' => 'Members',
+    'anonymous' => 'Anonymous',
+    'permissions' => 'Permissions',
+    'permissionskey' => 'R = read, E = edit, edit rights assume read rights',
+    'edit' => 'Edit',
+    'none' => 'None',
+    'accessdenied' => 'Access Denied',
+    'storydenialmsg' => "You do not have access to view this story.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'eventdenialmsg' => "You do not have access to view this event.  This could be because you aren't a member of {$_CONF['site_name']}.  Please <a href=users.php?mode=new> become a member</a> of {$_CONF['site_name']} to receive full membership access!",
+    'nogroupsforcoregroup' => 'This group doesn\'t belong to any of the other groups',
+    'grouphasnorights' => 'This group doesn\'t have access to any of the administrative features of this site',
+    'newgroup' => 'New Group',
+    'adminhome' => 'Admin Home',
+    'save' => 'save',
+    'cancel' => 'cancel',
+    'delete' => 'delete',
+    'canteditroot' => 'You have tried to edit the Root group but you are not in the Root group yourself therefore your access to this group is denied.  Please contact the system administrator if you feel this is an error',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Last 10 Back-ups',
+    'do_backup' => 'Do Backup',
+    'backup_successful' => 'Database back up was successful.',
+    'db_explanation' => 'To create a new backup of your Geeklog system, hit the button below',
+    'not_found' => "Incorrect path or mysqldump utility not executable.<br>Check <strong>\$_DB_mysqldump_path</strong> definition in config.php.<br>Variable currently defined as: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup Failed: Filesize was 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} does not exist or is not a directory",
+    'no_access' => "ERROR: Directory {$_CONF['backup_path']} is not accessible.",
+    'backup_file' => 'Backup file',
+    'size' => 'Size',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'E.T. domů',
+    2 => 'Kontakt',
+    3 => 'Napíš článok',
+    4 => 'Linky',
+    5 => 'Ankety',
+    6 => 'Kalendár',
+    7 => 'Štatistiky sajty',
+    8 => 'Prispôsobenie',
+    9 => 'Hľadaj',
+    10 => 'Fajnové vyhľadávanie',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Gee, I\'ve looked everywhere but I can not find <b>%s</b>.',
+    3 => "<p>We're sorry, but the file you have requested does not exist. Please feel free to check the <a href=\"{$_CONF['site_url']}\">main page</a> or the <a href=\"{$_CONF['site_url']}/search.php\">search page</a> to see if you can find what you lost."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Login required',
+    2 => 'Sorry, to access this area you need to be logged in as a user.',
+    3 => 'Login',
+    4 => 'New User'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/slovenian.php 1.4.0sr5-1/cpanel-glprivate/language/slovenian.php
--- 1.3.11sr1/cpanel-glprivate/language/slovenian.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/slovenian.php	2006-08-08 02:39:06.000000000 -0500
@@ -159,7 +159,17 @@
     110 => 'Prijavi ta prispevek upravniku strani',
     111 => 'PDF verzija',
     112 => 'Prijavljeni uporabniki',
-    113 => 'Dokumentacija'
+    113 => 'Dokumentacija',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -326,7 +336,23 @@
     104 => 'Prikai Online Status',
     105 => 'Dovoli prikaz v bloku Na liniji so',
     106 => 'Lokacija',
-    107 => 'Prikazano v vaem javnem profilu'
+    107 => 'Prikazano v vaem javnem profilu',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -344,27 +370,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Zanimive povezave',
-    2 => 'V bazo podatkov ni vpisana nobena povezava.',
-    3 => 'Predlagaj povezavo'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Anketa shranjena',
-    2 => 'Va glas je bil shranjen',
-    3 => 'Glasuj',
-    4 => 'Seznam anket na spletni strani',
-    5 => 'glasov',
-    6 => 'Ostale ankete'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -465,7 +470,11 @@
     54 => 'Rezultati komentarjev',
     55 => 'fraza',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -495,7 +504,14 @@
     21 => 'Na spletni strani ni objavljena nobena povezava ali pa nihe ni obiskal nobene povezave.',
     22 => 'Deset najbolj po e-mailu posredovanih lankov',
     23 => 't. posredovanj',
-    24 => 'Nihe ni posredoval nobenega lanka po e-mailu.'
+    24 => 'Nihe ni posredoval nobenega lanka po e-mailu.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -648,7 +664,12 @@
     57 => 'Premakni blok dol',
     58 => 'Premakni blok gor',
     59 => 'Premakni blok na desno stran',
-    60 => 'Premakni blok na levo stran'
+    60 => 'Premakni blok na levo stran',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -683,35 +704,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Urejanje povezav',
-    2 => '',
-    3 => 'Naslov povezave',
-    4 => 'URL',
-    5 => 'Kategorija',
-    6 => '(Zane s http://)',
-    7 => 'Drugo',
-    8 => 'Zadetki povezave',
-    9 => 'Opis povezave',
-    10 => 'Vnesti morate Naslov povezave, URL in Opis.',
-    11 => 'Urejevalnik povezav',
-    12 => 'Izberite povezavo, ki jo elite urediti ali odstraniti. e elite ustvariti novo povezavo, kliknite zgoraj.',
-    13 => 'Naslov povezave',
-    14 => 'Kategorija',
-    15 => 'URL',
-    16 => 'Dostop zavrnjen!',
-    17 => "Do te povezave nimate dostopa. Va poskus je bil zabeleen v bazo podatkov. Prosimo, vrnite se na <a href=\"{$_CONF['site_url']}/admin/link.php\"> urejanje povezav</a>.",
-    18 => 'Nova povezava',
-    19 => 'Administratorske strani',
-    20 => 'e drugo, kaj',
-    21 => 'Shrani',
-    22 => 'Preklii',
-    23 => 'Izbrii'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -734,16 +726,16 @@
     17 => 'Razirjeno besedilo',
     18 => 't. branj',
     19 => 'Komentarjev',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Seznam lankov',
     23 => 'e elite spreminjati ali izbrisati lanek, kliknite na njegovo tevilko. e elite lanek pregledati, kliknite na njegov naslov. e elite objaviti nov lanek, kliknite na zgornjo povezavo.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Predogled lanka',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Napake pri shranjevanju datoteke',
     31 => 'Prosimo izpolnite polji Naslov in Uvodno besedilo',
     32 => 'Udarni lanek',
@@ -776,39 +768,30 @@
     59 => 'Opcija',
     60 => 'Omogoeno',
     61 => 'Samodejno arhiviranje',
-    62 => 'Samodejno brisanje'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Nain',
-    2 => 'Prosim vpii vpraanje in vsaj en odgovor.',
-    3 => 'Ustvarjena anketa',
-    4 => 'Anketa %s shranjena',
-    5 => 'Urejanje anketa',
-    6 => 'ID ankete',
-    7 => '(ne uporabljajte presledkov)',
-    8 => 'Objavi anketo',
-    9 => 'Vpraanje',
-    10 => 'Odgovorov / Glasov',
-    11 => 'Napaka pri odgovoru na anketo %s',
-    12 => 'Napaka pri vpraanju na anketo %s',
-    13 => 'Ustvari anketo',
-    14 => 'Shrani',
-    15 => 'Preklii',
-    16 => 'Izbrii',
-    17 => 'Prosim vpii ID ankete',
-    18 => 'Seznam anket',
-    19 => 'Izberite anketo, ki jo elite urediti ali odstraniti. e elite ustvariti novo anketo, kliknite zgoraj.',
-    20 => 'Glasov',
-    21 => 'Prepovedan dostop!',
-    22 => "Do te povezave nimate dostopa. Va poskus je bil zabeleen in shranjen. Prosimo, vrnite se na <a href=\"{$_CONF['site_url']}/admin/poll.php\"> administracijo anket.</a>.",
-    23 => 'Nova anketa',
-    24 => 'Administratorske strani',
-    25 => 'Da',
-    26 => 'Ne'
+    62 => 'Samodejno brisanje',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -840,7 +823,10 @@
     23 => 'Ustvari to temo privzeto za novo oddane lanke',
     24 => '(*)',
     25 => 'Arhiviraj temo',
-    26 => 'naredi to temo privzeto za arhivirane lanke. Samo ena tema je dovoljena.'
+    26 => 'naredi to temo privzeto za arhivirane lanke. Samo ena tema je dovoljena.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -882,7 +868,18 @@
     33 => 'polji',
     34 => 'Napaka: Mora doloiti datoteko.',
     35 => 'Zadnji vpis',
-    36 => '(nikoli)'
+    36 => '(nikoli)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1027,7 +1024,11 @@
     31 => 'Ali ste prepriani da elite odstraniti ta plug-in?  S tem bodo iz baze izbrisani tudi vsi podatki, ki jih uporablja ta plug-in.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1070,7 +1071,15 @@
     39 => 'Prosim izpolnite polja Naslov, Opis, Ime datoteke.',
     40 => 'Prosim vpiite tevilo vpisov ali tevilo ur.',
     41 => 'Povezave',
-    42 => 'Dogodki'
+    42 => 'Dogodki',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1137,7 +1146,21 @@
     58 => '(RDF) vsebina je bila uspeno shranjena.',
     59 => '(RDF) vsebina je bila uspeno izbrisana.',
     60 => 'Vtinik je bil uspeno obnovljen (updated)',
-    61 => 'Vtinik %s: Neznan okvir sporoila (Unknown message placeholder)'
+    61 => 'Vtinik %s: Neznan okvir sporoila (Unknown message placeholder)',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1197,7 +1220,16 @@
     'availmembers' => 'Uporabniki na voljo',
     'groupmembers' => 'lani skupine',
     'canteditgroup' => 'Za urejanje te skupine, morate biti njen lan. Prosim posvetujte se z administratorjem, e se vam zdi da je to sporoilo napaka.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1207,7 +1239,6 @@
     'last_ten_backups' => 'Zadnjih 10 backupov',
     'do_backup' => 'Naredi backup',
     'backup_successful' => 'Bravo. Baza podatkov se je uspeno bekapirala ;-).',
-    'no_backups' => 'Sistem nima backupa',
     'db_explanation' => 'e elite narediti backup vaega Geeklog sistema, kliknite gumb spodaj',
     'not_found' => "Napana pot ali mysqldump utility nima izvrevalnih pravic.<br>Preveri <strong>\$_DB_mysqldump_path</strong> definicijo v config.php.<br>Spremenljivka je trenutno definirana kot: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Backup neuspeen: Velikost datoteka je bila 0 bytov',
@@ -1231,7 +1262,8 @@
     7 => 'Statistika strani',
     8 => 'Osebne nastavitve',
     9 => 'Ii',
-    10 => 'Napredno iskanje'
+    10 => 'Napredno iskanje',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1273,4 +1305,210 @@
     14 => 'PDF ki ste ga zahtevali ali ne obstaja ali pa ste nepravilno dostopali do datoteke.'
 );
 
-?>
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/slovenian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/slovenian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/slovenian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/slovenian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1514 @@
+<?php
+
+###############################################################################
+# slovenian.php
+# language file for geeklog version 1.3.10
+#
+# This is the slovenian language page for GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Prevedel gape@gape.org ; za pripombe, predloge ipd ... piši na email
+# med plug-ini še nekaj manjka ... ker ne razumem scene
+# 
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Piše:',
+    2 => 'Beri dalje',
+    3 => 'komentarjev.',
+    4 => 'Uredi',
+    5 => 'Anketa',
+    6 => 'Rezultati',
+    7 => 'Rezultati ankete',
+    8 => 'glasov<br>',
+    9 => 'Administracijske funkcije:',
+    10 => 'Čakajoča vsebina',
+    11 => 'Članki',
+    12 => 'Bloki',
+    13 => 'Teme',
+    14 => 'Povezave',
+    15 => 'Dogodki',
+    16 => 'Ankete',
+    17 => 'Uporabniki',
+    18 => 'SQL poizvedovanje',
+    19 => 'Izhod iz sistema',
+    20 => 'Podatki o uporabniku:',
+    21 => 'Uporabniško ime',
+    22 => 'Uporabniški ID',
+    23 => 'Varnostni nivo',
+    24 => 'Anonimni uporabnik',
+    25 => 'Odgovori',
+    26 => 'Za komentarje so odgovorni njihovi avtorji. Avtorji spletne strani na komentarje obiskovalcev nimamo nobenega vpliva.',
+    27 => 'Zadnjikrat komentirano',
+    28 => 'Izbriši',
+    29 => 'Ni komentarjev.',
+    30 => 'Starejši članki',
+    31 => 'Dovoljeni HTML ukazi:',
+    32 => 'Napaka, neveljavno uporabniško ime',
+    33 => 'Napaka, ne morem shranjevati v log datoteko',
+    34 => 'Napaka',
+    35 => 'Izhod iz sistema',
+    36 => 'dne',
+    37 => 'Ni člankov',
+    38 => 'Združevanje vsebine (Syndication)',
+    39 => 'Osveži',
+    40 => 'Izključene so <tt>register_globals = Off</tt> v <tt>php.ini</tt>. Geeklog zahteva <tt>register_globals</tt> <strong>vključene</strong>. Preden nadaljuješ, jih prosim <strong>vključi</strong> in ponovno zaženi web server.',
+    41 => 'Gostje',
+    42 => 'Prispeval/a:',
+    43 => 'Odgovori na To',
+    44 => 'Starš',
+    45 => 'MySQL številka napake',
+    46 => 'MySQL sporočilo o napaki',
+    47 => 'Prijava uporabnika',
+    48 => 'Podatki o uporabniškem računu',
+    49 => 'Nastavitve',
+    50 => 'Napaka v SQL ukazu',
+    51 => 'pomoč',
+    52 => 'Novo',
+    53 => 'Administratorske strani',
+    54 => 'Ne morem odpreti datoteke',
+    55 => 'Napaka na',
+    56 => 'Glasuj',
+    57 => 'Geslo',
+    58 => 'Prijava',
+    59 => "Niste registriran uporabnik?  <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Registrirajte se</a>.",
+    60 => 'Dodaj komentar',
+    61 => 'Nov uporabnik',
+    62 => 'besed',
+    63 => 'Nastavitve komentarjev',
+    64 => 'Pošlji članek prijatelju po e-pošti',
+    65 => 'Stran prijazna za tisk',
+    66 => 'Osebni koledar',
+    67 => 'Dobrodošli na ',
+    68 => 'Domov',
+    69 => 'Kontakt',
+    70 => 'Išči',
+    71 => 'Dodaj članek',
+    72 => 'Zanimive povezave',
+    73 => 'Pretekle ankete',
+    74 => 'Koledar dogodkov',
+    75 => 'Napredno iskanje',
+    76 => 'Statistika spletne strani',
+    77 => 'Priključeni moduli',
+    78 => 'Dogodki',
+    79 => 'Kaj je novega',
+    80 => 'Člankov v zadnjih',
+    81 => 'Članek v zadnjih ',
+    82 => 'urah',
+    83 => 'KOMENTARJI BRALCEV<br>',
+    84 => 'POVEZAVE<br>',
+    85 => 'v zadnjih 48 urah',
+    86 => 'ni novih komentarjev',
+    87 => 'v zadnjih 2 tednih',
+    88 => 'ni novih povezav',
+    89 => 'Trenutno ni nobenih prihajajočih dogodkov.',
+    90 => 'Na osnovno stran',
+    91 => 'Spletna stran zgenerirana v',
+    92 => 'sekundah',
+    93 => 'Copyright',
+    94 => 'Vsa naša koda pripada vam.',
+    95 => 'Gnano z',
+    96 => 'Uporabniške skupine',
+    97 => 'Seznam besed',
+    98 => 'Priključni moduli',
+    99 => 'ČLANKI',
+    100 => 'Ni novih člankov',
+    101 => 'Vaši dogodki',
+    102 => 'Najavljeno je:',
+    103 => 'DB Bekapi',
+    104 => 'z',
+    105 => 'Email uporabniki',
+    106 => 'Ogledov',
+    107 => 'GL Test verzije',
+    108 => 'Izprazni cache',
+    109 => 'Prijavi zlorabo',
+    110 => 'Prijavi ta prispevek upravniku strani',
+    111 => 'PDF verzija',
+    112 => 'Prijavljeni uporabniki',
+    113 => 'Dokumentacija',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Koledar dogodkov',
+    2 => 'Trenutno ni v koledar vpisanega nobenega dogodka.',
+    3 => 'Kdaj',
+    4 => 'Kje',
+    5 => 'Opis',
+    6 => 'Dodaj dogodek',
+    7 => 'Prihajajoči dogodki',
+    8 => 'Ko boste dodali nov dogodek v vaš osebni koledar, lahko te dogodke pregledate s klikom na "Osebni koledar" v meniju "Osebne nastavitve".',
+    9 => 'Dodaj v Osebni koledar',
+    10 => 'Odstrani iz Osebnega koledarja',
+    11 => "Dodajanje dogodka v Osebni koledar uporabnika {$_USER['username']}",
+    12 => 'Dogodek',
+    13 => 'Začetek dogodka',
+    14 => 'Konec dogodka',
+    15 => 'nazaj na koledar'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Pošiljanje komentarja',
+    2 => 'Oblika besedila',
+    3 => 'Odjava',
+    4 => 'Registrirajte se',
+    5 => 'Uporabniško ime',
+    6 => 'Če želite posredovati komentar se morate registrirati. Če še nimate svojega uporabniškega imena in gesla, kliknite spodaj.',
+    7 => 'Vaš zadnji komentar je bil pred',
+    8 => " sekundami.  Med posameznimi komentarji bralca mora preteči vsaj {$_CONF['commentspeedlimit']} sekund",
+    9 => 'Komentar',
+    10 => 'Pošlji prijavo',
+    11 => 'Pošlji komentar',
+    12 => 'Če želite posredovati komentar, vpišite vaše ime, e-mail naslov, naslov komentarja in vsebino komentarja.',
+    13 => 'Vaše informacije',
+    14 => 'Predogled',
+    15 => 'Report this post',
+    16 => 'Naslov',
+    17 => 'Napaka',
+    18 => 'Pomembno',
+    19 => 'Prosimo da se skušate držati teme objavljenega članka.',
+    20 => 'Zaželeno je argumentiranje vaših trditev.',
+    21 => 'Preberite komentarje ostalih - morda je kdo že napisal kaj kar nameravate napisati tudi vi.',
+    22 => 'Pazite na pravilno slovnico in se izogibajte žalitvam drugih.',
+    23 => 'Vaš e-mail naslov ne bo javno objavljen.',
+    24 => 'Anonimni uporabnik',
+    25 => 'Ste prepričani da hočete prijaviti ta orispevek upravniku strani?',
+    26 => '%s je prijavil naslednji prispevek ki zlorablja:',
+    27 => 'Prijava zlorabe'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Uporabnik',
+    2 => 'Uporabniško ime',
+    3 => 'Ime',
+    4 => 'Geslo',
+    5 => 'Elektronski naslov',
+    6 => 'Spletna stran',
+    7 => 'Opis',
+    8 => 'PGP javni ključ',
+    9 => 'Shrani podatke',
+    10 => 'Zadnjih 10 komentarjev uporabnika',
+    11 => 'Uporabnik ni prispeval nobenih komentarjev',
+    12 => 'Uporabniške nastavitve za',
+    13 => 'Pošlji nočno poročilo (Nightly Digest)',
+    14 => 'Geslo se generira naključno. Priporočamo vam, da geslo takoj spremenite. To storite s klikom na Informacije o računu v  meniju Osebne nastavitve. Za spremembe osebnih nastavitev se morate prijaviti v sistem.',
+    15 => 'Vaš uporabniški račun na spletni strani je bil uspešno vzpostavljen. Če ga želite uporabljati, se morate prijaviti s spodnjimi podatki. Svetujemo vam da podatke o vašem uporabniškem računu shranite.',
+    16 => 'Informacije o vašem uporabniškem računu',
+    17 => 'Uporabniški račun ne obstaja',
+    18 => 'Vnešeni e-mail naslov ni veljaven',
+    19 => 'Vnešeno uporabniško ime ali e-mail naslov sta že uporabljena na tem sistemu',
+    20 => 'Vnešeni e-mail naslov ni veljaven',
+    21 => 'Napaka',
+    22 => "Registracija {$_CONF['site_name']}!",
+    23 => "Registracija vam omogoča članstvo na naši spletni strani{$_CONF['site_name']}. To pomeni da boste lahko objavljali komentarje, pošiljali svoje članke, dostopali in dodajali zapiske in bili deležni vseh pomembnih informacij. Če se ne registrirate, boste na spletni strani lahko sodelovali le kot anonimni uporabnik. <font color=red>Elektronski naslovi registriranih uporabnikov <b><i>ne bodo javno objavljeni</i></b>.",
+    24 => 'Geslo vam bomo poslali na e-mail naslov, ki ste ga vnesli.',
+    25 => 'Ste pozabili geslo?',
+    26 => 'Vnesite <em>uporabniško ime</em> <em>ali</em> email naslov s katerim ste se registrirali in kliknite spodnji gumb (Pošlji geslo po emailu). Navodila kako nastaviti novo geslo vam bomo sporočili na registrirani e-mail naslov.',
+    27 => 'Registrirajte se!',
+    28 => 'Pošlji geslo na e-mail naslov',
+    29 => 'odjava',
+    30 => 'prijava',
+    31 => 'Za izvedbo te funkcije se morate prijaviti',
+    32 => 'Podpis',
+    33 => 'Se nikoli javno ne prikaže',
+    34 => 'Vaše pravo ime',
+    35 => 'Vpiši spremenjeno geslo',
+    36 => 'Začneš z http://',
+    37 => 'Nastavitve komentarjev',
+    38 => 'To lahko prebere vsakdo',
+    39 => 'PGP javni klju?',
+    40 => 'Brez ikone teme',
+    41 => 'Pripravljen moderirati',
+    42 => 'Format datuma',
+    43 => 'Največ člankov',
+    44 => 'Brez okvirjev',
+    45 => 'Prikaži nastavitve za',
+    46 => 'Izključeni deli',
+    47 => 'Nastavitve novosti za',
+    48 => 'Teme',
+    49 => 'Brez ikon v člankih',
+    50 => 'Če vas ne zanima, odznačite',
+    51 => 'Samo novi članki',
+    52 => 'Privzeta nastavitev je 10',
+    53 => 'Prejmi nove članke vsako noč',
+    54 => 'Označi teme in avtorje, katerih prispevki vas ne zanimajo',
+    55 => 'Če pustite prazno, se bodo ohranile privzete nastavitve. Če začnete izbirati bloke, se bodo prikazali samo tisti, ki ste jih izbrali (brez privzetih). Privzete nastavitve so <B> povdarjene</B>.',
+    56 => 'Avtorji',
+    57 => 'Način prikaza',
+    58 => 'Uredi po',
+    59 => 'Omejitve komentarja',
+    60 => 'Kakšen način izpisa želite za svoje komentarje',
+    61 => 'Najprej novi ali stari?',
+    62 => 'Prevzeta vrednost je 100',
+    63 => "Geslo je bilo poslano na vaš e-mail naslov. Sledite navodilom, ki jih boste dobili. Hvala ker uporabljate spletno stran {$_CONF['site_name']}",
+    64 => 'Nastavitve komentarjev za',
+    65 => 'Poizkusite se ponovno prijaviti',
+    66 => "Morda ste se zmotili pri vnosu svojega uporabniškega imena ali gesla? Poizkusite se ponovno prijaviti. Ste morda še neregistriran uporabnik - v tem primeru se <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrirajte</a>.",
+    67 => 'Uporabnik od',
+    68 => 'Zapomni se me za',
+    69 => 'Kako dolgo naj si te zapomnim po zadnji prijavi?',
+    70 => "Priredi izgled spletne strani {$_CONF['site_name']}",
+    71 => "Ena od posebnosti spletne strani{$_CONF['site_name']} je popolna možnost prilagajanja izgleda posameznemu uporabniku.  Če želite uporabiti to možnost se morate najprej <a href=\"{$_CONF['site_url']}/users.php?mode=new\">prijaviti</a> na {$_CONF['site_name']}.  Ali ste že postali registrirani uporabnik?  Prijavite se!",
+    72 => 'Tema',
+    73 => 'Jezik',
+    74 => 'Spremeni izgled strani!',
+    75 => 'Teme po e-mailu',
+    76 => 'Nove članke iz izbranih področij boste ob koncu vsakega dneva prejeli po e-mailu. Izberite teme, ki vas zanimajo!',
+    77 => 'Slika',
+    78 => 'Dodaj svojo sliko!',
+    79 => 'Izbriši izbrano sliko',
+    80 => 'Vpis',
+    81 => 'Pošlji Email',
+    82 => 'Zadnjih 10 člankov uporabnika',
+    83 => 'Statistika objavljanja uporabnika',
+    84 => 'Skupno število člankov:',
+    85 => 'Skupno število komentarjev:',
+    86 => 'Najdi vse objave uporabnika',
+    87 => 'Vaše uporabniško ime',
+    88 => "Nekdo (verjetno ti) je zahteval novo geslo za tvoj račun  \"%s\" na {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nČe res želiš novo geslo, prosim klikni povezavo :\n\n",
+    89 => "Če nočeš novega gesla, preprosto ignoriraj to sporočilo in zahtevo bomo zavrgli (tvoje geslo bo ostalo nespremenjeno).\n\n",
+    90 => 'Spodaj lahko vpišeš novo geslo za svoj račun. Prosim, vedi, da je staro geslo še vedno veljavno, dokler ne  odpošlješ tega obrazca.',
+    91 => 'Nastavljanje novega gesla',
+    92 => 'Vpiši novo geslo',
+    93 => 'Tvoja zadnja zahteva za novo geslo je bila sprejeta pred %d sekundami. Te strani zahtevajo vsaj %d sekund med spremembami gesla.',
+    94 => 'Izbriši račun "%s"',
+    95 => 'Klikni gumb "Izbriši račun" spodaj za izbris svojega uporabniškega računa iz naše baze podatkov. Vedi, da bodo vsi prispevki, ki si jih prispeval/a pod tem računom <strong>ostali</strong> na naših straneh. Uporabnik, ki jih je prispeval pa bo postal anonimnež.',
+    96 => 'Izbriši račun',
+    97 => 'Potrdi brisanje računa',
+    98 => 'Si prepričan da želiš pobrisati svoj uporabniški račun. Po tem prijava na naše strani ne bo več mogoča (razen, če si ustvariš nov račun). Če si prepričan/a ponovno klikni "Izbriši račun" v spodnjem obrazcu.',
+    99 => 'Nastavitve zasebnosti za',
+    100 => 'Adminov email',
+    101 => 'Dovoli emaile od upravljalcev strani',
+    102 => 'Email od uporabnikov',
+    103 => 'Dovoli emaile od drugih uporabnikov strani',
+    104 => 'Prikaži Online Status',
+    105 => 'Dovoli prikaz v bloku Na liniji so',
+    106 => 'Lokacija',
+    107 => 'Prikazano v vašem javnem profilu',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Področje je trenutno prazno',
+    2 => 'Trenutno v tem tematskem področju ni nobenega članka, ali pa so vaše uporabniške nastavitve takšne da nimate dostopa do tega področja',
+    3 => '.',
+    4 => 'Današnji udarni članek',
+    5 => 'naslednja stran',
+    6 => 'prejšnja stran',
+    7 => 'Prva',
+    8 => 'Zadnja'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Napaka!!! Poskusite znova.',
+    2 => 'Sporočilo je bilo poslano',
+    3 => 'Uporabite pravi e-mail naslov!',
+    4 => 'Izpolnite polja: Ime, e-mail za odgovor, Zadeva in vpišite sporočilo',
+    5 => 'Napaka. Neznan uporabnik!',
+    6 => 'Upsss... Napaka ;-).',
+    7 => 'Uporabnik',
+    8 => 'Uporabniško ime',
+    9 => 'URL naslov',
+    10 => 'e-mail naslov',
+    11 => 'Ime:',
+    12 => 'e-mail za odgovor:',
+    13 => 'Zadeva:',
+    14 => 'Sporočilo:',
+    15 => 'HTML ukazi ne bodo upoštevani.',
+    16 => 'Pošlji sporočilo',
+    17 => 'Pošlji članek prijatelju po e-mailu',
+    18 => 'Ime prijatelja',
+    19 => 'Elektronski naslov prijatelja',
+    20 => 'Vaše ime',
+    21 => 'Vaš e-mail naslov',
+    22 => 'Izpolniti je potrebno vsa polja!',
+    23 => "To sporočilo vam je poslal naš obiskovalec %s (%s). Upravitelji spletne strani {$_CONF['site_url']} od koder je bilo sporočilo poslano, vaših podatkov nismo shranili v nobeno bazo podatkov.",
+    24 => 'Članek se nahaja na spletnem naslovu: ',
+    25 => 'Če želite poslati članek po e-pošti, se morate predhodno registrirati. Registracija je potrebna da preprečimo morebitne zlorabe sistema.',
+    26 => 'S pomočjo tega obrazca boste poslali e-mail izbranemu uporabniku. Izpolniti je potrebno vsa polja!',
+    27 => 'Kratko spremno sporočilo',
+    28 => 'Obiskovalec %s je napisal sledeče spremno sporočilo: ',
+    29 => "Dnevni pregled strani {$_CONF['site_name']} za ",
+    30 => 'Dnevne novice za',
+    31 => 'Naslov',
+    32 => 'Datum',
+    33 => 'Celotno besedilo:',
+    34 => 'Konec sporočila',
+    35 => 'Žal, ta uporabnik ne želi prejemati emailov.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Napredno iskanje',
+    2 => 'Ključne besede',
+    3 => 'Tematsko področje',
+    4 => 'vse',
+    5 => 'Nasvet',
+    6 => 'Članki',
+    7 => 'komentarji bralcev',
+    8 => 'Avtorji',
+    9 => 'vse',
+    10 => 'Išči',
+    11 => 'Rezultati iskanja',
+    12 => 'zadetki',
+    13 => 'Iskanje med članki: nič zadetkov',
+    14 => 'Za iskalni pojem',
+    15 => 'ni nobenega zadetka. Prosimo poizkusite ponovno.',
+    16 => 'Naslov',
+    17 => 'datum',
+    18 => 'avtor',
+    19 => 'Iskalnik celotne baze podatkov (vsi članki in vsi komentarji bralcev)',
+    20 => 'Datum',
+    21 => 'do',
+    22 => '(format datuma YYYY-MM-DD)',
+    23 => 'Št. zadetkov',
+    24 => 'Našel sem %d zadetkov',
+    25 => 'Iskal sem',
+    26 => 'zadetkov ',
+    27 => 'sekund.',
+    28 => 'Za vpisani iskalni pogoj ni bilo najdenega nobenega članka niti nobenega komentarja',
+    29 => 'Rezultati iskanja',
+    30 => 'Nobena povezava ne ustreza vašemu iskalnemu pogoju. Poizkusite znova!',
+    31 => 'Ni zadetkov za ta plug-in. Poizkusite znova!',
+    32 => 'Dogodek',
+    33 => 'URL',
+    34 => 'Lokacija',
+    35 => 'Celodnevno dogajanje',
+    36 => 'Noben dogodek ne ustreza vašemu iskalnemu pogoju. Poizkusite znova!',
+    37 => 'Rezultati za dogodke',
+    38 => 'Rezultati za povezave',
+    39 => 'Povezave',
+    40 => 'Dogodki',
+    41 => 'Iskalni niz mora imeti vsaj tri znake.',
+    42 => 'Datum naj bo formatiran na način: YYYY-MM-DD (leto-mesec-dan).',
+    43 => 'točna fraza',
+    44 => 'vse besede',
+    45 => 'katerakoli beseda',
+    46 => 'Naslednji',
+    47 => 'Prejšnji',
+    48 => 'Avtor',
+    49 => 'Datum',
+    50 => 'Zadetki',
+    51 => 'Povezava',
+    52 => 'Lokacija',
+    53 => 'Rezultati člankov',
+    54 => 'Rezultati komentarjev',
+    55 => 'fraza',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Statistike spletne strani',
+    2 => 'Število vseh obiskov strani',
+    3 => 'Število objavljenih člankov (komentarjev)',
+    4 => 'Število anket (odgovorov)',
+    5 => 'Število povezav (obiskov)',
+    6 => 'Število napovedanih dogodkov',
+    7 => 'Deset najbolj branih člankov',
+    8 => 'Naslov članka',
+    9 => 'Št. ogledov',
+    10 => 'Na spletni strani ni objavljenih člankov, ali pa nihče ni prebral nobenega članka.',
+    11 => 'Deset najbolj komentiranih člankov',
+    12 => 'Št. komentarjev',
+    13 => 'Na spletni strani ni objavljenih komentarjev, ali pa nihče ni objavil nobenega komentarja.',
+    14 => 'Deset najbolj obiskanih anket',
+    15 => 'Anketno vprašanje',
+    16 => 'Št. glasov',
+    17 => 'Na spletni strani ni objavljena nobena anketa, ali pa nihče ni glasoval pri nobeni anketi.',
+    18 => 'Deset najbolj obiskanih povezav',
+    19 => 'Povezave',
+    20 => 'Št. ogledov',
+    21 => 'Na spletni strani ni objavljena nobena povezava ali pa nihče ni obiskal nobene povezave.',
+    22 => 'Deset najbolj po e-mailu posredovanih člankov',
+    23 => 'Št. posredovanj',
+    24 => 'Nihče ni posredoval nobenega članka po e-mailu.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Sorodne povezave',
+    2 => 'Pošlji članek po e-pošti',
+    3 => 'Stran prijazna za tisk',
+    4 => 'Dodatne možnosti',
+    5 => 'PDF format članka'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => "Če želite objaviti %s se morate prijaviti. Še niste registrirani uporabnik? <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> Registrirajte se</a>.",
+    2 => 'Prijava',
+    3 => 'Nov uporabnik',
+    4 => 'Pošlji dogodek',
+    5 => 'Pošlji povezavo',
+    6 => 'Članek',
+    7 => 'Potrebno se je prijaviti!',
+    8 => 'Pošlji',
+    9 => 'Pri pošiljanju informacij se držite naslednjih priporočil:<ul><li>izpolnite vsa polja,<li>poskrbite da bo informacija, ki jo pošiljate točna in ustrezna,<li>pazite na slovnico,<li>preverite da delujejo vse povezave,<li><font color=red>prosimo da pošiljate <b>samo članke</b>, komentarje vpisujte pod posamezen članek, za splošne debate ali mnenja pa uporabite forum.</font></ul>',
+    10 => 'Naslov',
+    11 => 'Povezava',
+    12 => 'Datum začetka',
+    13 => 'Datum zaključka',
+    14 => 'Lokacija',
+    15 => 'Opis',
+    16 => 'Če \'drugo\', vpiši ime',
+    17 => 'Kategorija',
+    18 => 'Drugo',
+    19 => 'Prosimo, preberite',
+    20 => 'Napaka: ni določena kategorija',
+    21 => 'Kadar izberete "Drugo" vpišite tudi ime kategorije',
+    22 => 'Napaka: niso izpolnjena vsa polja',
+    23 => 'Prosimo izpolnite vsa polja obrazca.',
+    24 => 'Shranjeno!',
+    25 => 'Vaš %s prispevek je bil shranjen.',
+    26 => 'Omejitev hitrosti',
+    27 => 'Uporabniško ime',
+    28 => 'Tematsko področje',
+    29 => 'Vsebina članka',
+    30 => 'Vaša zadnja objava je bila poslana pred ',
+    31 => " sekundami. Nastavitve te spletne strani pa zahtevajo da med dvema objavama istega avtorja mine vsaj {$_CONF['speedlimit']} sekund",
+    32 => 'Predogled',
+    33 => 'Predogled članka',
+    34 => 'izhod',
+    35 => 'HTML ukazi ne bodo upoštevani',
+    36 => 'Oblika besedila',
+    37 => 'Dogodek bo dodan na skupni koledar, od koder ga registrirani uporabniki lahko dodajo na svoj osebni koledar. Ta aplikacija zato <b>NI</b> namenjena shranjevanju osebnih dogodkov (obletnice, rojstni dnevi, zabave...) če nas ne mislite nanje povabiti ;-)<br><br>Preden bo dogodek objavljen na skupnem koledarju dogodkov, ga bo pregledal administrator!',
+    38 => 'Dodaj dogodek v',
+    39 => 'Skupni koledar',
+    40 => 'Osebni koledar',
+    41 => 'Čas zaključka',
+    42 => 'Čas začetka',
+    43 => 'Celodnevni dogodek',
+    44 => 'Naslov 1',
+    45 => 'Naslov 2',
+    46 => 'Mesto',
+    47 => 'Država',
+    48 => 'Poštna številka',
+    49 => 'Tip dogodka',
+    50 => 'Uredi tipe dogodkov',
+    51 => 'Lokacija',
+    52 => 'Odstrani',
+    53 => 'Naredi račun'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Obvezna prijava',
+    2 => 'Dostop zavrnjen! Vnesli ste napačne podatke.',
+    3 => 'Napačno geslo za uporabnika',
+    4 => 'Uporabniško ime:',
+    5 => 'Geslo:',
+    6 => 'Vsi dostopi do administracijske strani se beležijo.<br>Ta del spletne strani lahko uporabljajo samo pooblaščene osebe.<p>',
+    7 => 'prijava'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Ups... ne bo šlo. Nimate zahtevanih administratorskih pravic ;-)',
+    2 => 'Za urejanje tega bloka nimate zahtevanih administratorskih pravic',
+    3 => 'Urejanje blokov',
+    4 => 'Pri branju je nastala težava (za detajle glej error.log).',
+    5 => 'Ime bloka',
+    6 => 'Tema',
+    7 => 'Vse',
+    8 => 'Varnostna raven bloka',
+    9 => 'Pravila bloka',
+    10 => 'Tip bloka',
+    11 => 'Blok na portalu',
+    12 => 'Običajni blok',
+    13 => 'Nastavitve bloka na portalu',
+    14 => 'RDF URL',
+    15 => 'Zadnja RDF osvežitev',
+    16 => 'Nastavitve običajnega bloka',
+    17 => 'Komentar',
+    18 => 'Vnesite ime in vsebino bloka',
+    19 => 'Administracija bloka',
+    20 => 'Ime bloka',
+    21 => 'Varnostna raven',
+    22 => 'Tip bloka',
+    23 => 'Pravila bloka',
+    24 => 'Tema bloka',
+    25 => 'Izberite blok, ki ga želite urediti ali odstraniti. Če želite ustvariti nov blok, kliknite zgoraj.',
+    26 => 'Izgled',
+    27 => 'PHP blok',
+    28 => 'Nastavitve PHP bloka',
+    29 => 'Funkcije bloka',
+    30 => 'Če želiš da blok uporablja php kodo, zgoraj vpiši ime funkcije. Ime funkcije se mora začeti z izrazom "phpblock_" (t.j. phpblock_getweather). Če funkcija nima te predpone, NE bo klicana.  To je narejeno tako zaradi tega, da potencialni hekerji ne morejo izvesti kode, ki bi lahko škodovala sistemu. Pazi da ne vstaviš praznih oklepajev "()" za ime funkcije. Priporočamo vso svojo kodo, tudi to za bloke, vpisujete v /pot/do/geekloga/system/lib-custom.php. Tako bo ta koda brez težav ostala z vami tudi po nadgradnji Geekloga.',
+    31 => 'Napaka v PHP bloku. Funkcija %s, ne obstaja.',
+    32 => 'Napaka. Manjkajo podatki',
+    33 => 'Vnesite URL naslov v datoteko .rdf za blok na portalu',
+    34 => 'Vnesite naslov in funkcijo PHP bloka',
+    35 => 'Vnesite naslov in vsebino bloka',
+    36 => 'Vnesite vsebino in izberite izgled bloka',
+    37 => 'Napačno ime funkcije PHP bloka',
+    38 => 'Funkcije PHP bloka morajo imeti predpono \'phpblock_\' (npr. phpblock_imefunkcije).  Predpona \'phpblock_\' je potrebna zaradi varnosti!',
+    39 => 'Stran',
+    40 => 'Levo',
+    41 => 'Desno',
+    42 => 'Vnesite ime bloka in vrstni red zanj.',
+    43 => 'Samo domača stran',
+    44 => 'Dostop zavrnjen',
+    45 => "Do tega bloka nimate dostopa. Vaš poskus je bil zabeležen v bazo podatkov! Prosimo, vrnite se na <a href=\"{$_CONF['site_url']}/admin/block.php\"> stran za administracijo</a>!",
+    46 => 'Nov blok',
+    47 => 'Administratorske strani',
+    48 => 'Ime bloka',
+    49 => ' (Presledki niso dovoljeni. Imena blokov ne smejo biti podvojena',
+    50 => 'URL za pomoč',
+    51 => 'Začneš s http://',
+    52 => 'Če pustite prazno, se ikona za pomoč ne bo izpisala!',
+    53 => 'Omogočeno',
+    54 => 'Shrani',
+    55 => 'Prekliči',
+    56 => 'Izbriši',
+    57 => 'Premakni blok dol',
+    58 => 'Premakni blok gor',
+    59 => 'Premakni blok na desno stran',
+    60 => 'Premakni blok na levo stran',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Urejanje dogodkov',
+    2 => 'Error',
+    3 => 'Naslov dogodka',
+    4 => 'URL dogodka',
+    5 => 'Začetek dogodka',
+    6 => 'Zaključek dogodka',
+    7 => 'Kraj dogodka',
+    8 => 'Opis dogodka',
+    9 => '(Začneš z http://)',
+    10 => 'Izpolniti morate vsa polja!',
+    11 => 'Urejevalnik dogodkov',
+    12 => 'Izberite dogodek, ki ga želite urediti ali odstraniti. Če želite objaviti nov dogodek, kliknite na nov dogodek spodaj. Kliknite na [C] če želite narediti kopijo že obstoječega dogodka.',
+    13 => 'Naslov dogodka',
+    14 => 'Začetek',
+    15 => 'Konec',
+    16 => 'Dostop zavrnjen',
+    17 => "Do tega dogodka nimate dostopa. Vaš poskus je bil zabeležen v bazo podatkov. Prosimo, vrnite se na <a href=\"{$_CONF['site_url']}/admin/event.php\"> urejanje dogodkov</a>!",
+    18 => 'Nov dogodek',
+    19 => 'Administratorske strani',
+    20 => 'Shrani',
+    21 => 'Prekliči',
+    22 => 'Izbriši',
+    23 => 'Neveljaven začetni čas.',
+    24 => 'Neveljaven končni čas.',
+    25 => 'Končni čas je pred začetnim časom.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Prejšnji članki',
+    2 => 'Naslednji članki',
+    3 => 'Nastavitve članka',
+    4 => 'Oblikovanje članka',
+    5 => 'Urejanje članka',
+    6 => 'Ni člankov v sistemu',
+    7 => 'Avtor',
+    8 => 'Shrani',
+    9 => 'Predogled',
+    10 => 'Prekliči',
+    11 => 'Izbriši',
+    12 => 'ID',
+    13 => 'Naslov',
+    14 => 'tematsko področje',
+    15 => 'datum',
+    16 => 'Uvodno besedilo',
+    17 => 'Razširjeno besedilo',
+    18 => 'Št. branj',
+    19 => 'Komentarjev',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Seznam člankov',
+    23 => 'Če želite spreminjati ali izbrisati članek, kliknite na njegovo številko. Če želite članek pregledati, kliknite na njegov naslov. Če želite objaviti nov članek, kliknite na zgornjo povezavo.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Predogled članka',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Napake pri shranjevanju datoteke',
+    31 => 'Prosimo izpolnite polji Naslov in Uvodno besedilo',
+    32 => 'Udarni članek',
+    33 => 'Udarni članek je lahko smo eden',
+    34 => 'Draft',
+    35 => 'Da',
+    36 => 'Ne',
+    37 => 'Več od avtorja',
+    38 => 'Več iz področja',
+    39 => 'Št. posredovanj po e-mailu',
+    40 => 'Dostop zavrnjen',
+    41 => "Poizkušate dostopati do članka do katerega nimate dostopa. Ta poizkus neveljavnega dostopa je bil zabeležen in shranjen. članek lahko samo preberete, ne morete pa ga urejati. Če želite lahko vstopite <a href=\"{$_CONF['site_url']}/admin/story.php\"> na administracijo članka</a>.",
+    42 => "Poizkušate dostopati do članka do katerega nimate dostopa. Ta poizkus neveljavnega dostopa je bil zabeležen in shranjen. Če želite lahko vstopite <a href=\"{$_CONF['site_url']}/admin/story.php\">na administracijo člankov</a>.",
+    43 => 'Nov članek',
+    44 => 'Administracijska stran',
+    45 => 'Dostop',
+    46 => '<b>POZOR:</b> vaš prispevek ne bo objavljen do izbranega datuma.Do tega datuma tudi na bo v vašem RDF in ne bo vključn v iskalnik.',
+    47 => 'Slike',
+    48 => 'slika',
+    49 => 'desno',
+    50 => 'levo',
+    51 => 'Sliko vstavite v članek s posebnim ukazom [imageX], [imageX_right] ali [imageX_left], kjer je X številka slike v prilogi. POZOR: uporabite lahko samo slike iz priloge. V nasprotnem primeru članka ne bo mogoče objaviti. <BR><P><B>PREDOGLED</B>: Predogled članka s slikami najenostavneje opraviter tako, da članek shranite kot draft in ne uporabite gumba Predogled. Funkcija Predogled deluje deluje le, če članek brez slik.',
+    52 => 'Odstrani',
+    53 => 'ni bila uporabljena. Sliko morate pred shranjevanjem vključiti v uvod ali med besedilo članka.',
+    54 => 'Priložene slike niso bile uporabljene',
+    55 => 'Napaka pri shranjevanju članka. Prosimo popravite napake na spodnjem seznamu:',
+    56 => 'Prikaži ikono teme',
+    57 => 'Oglej si nezmanjšano sliko',
+    58 => 'Administracija člankov',
+    59 => 'Opcija',
+    60 => 'Omogočeno',
+    61 => 'Samodejno arhiviranje',
+    62 => 'Samodejno brisanje',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Urejanje tem',
+    2 => 'ID teme',
+    3 => 'Ime teme',
+    4 => 'Slika teme',
+    5 => '(ne uporabljajte presledkov)',
+    6 => 'Če odstranite temo, odstranite tudi vse članke in bloke, ki so z njo povezani',
+    7 => 'Izpolnite ID teme in naslov teme.',
+    8 => 'Urejevalnik tem',
+    9 => 'Izberite temo, ki jo želite urediti ali odstraniti. Če želite ustvariti novo temo, kliknite gumb Nova tema, na levi. V vsaki temi najdeš, v oklepajih, svoj nivo dostopa. Zvazdica (*) označuje privzeto temo.',
+    10 => 'Uredi po',
+    11 => 'Člankov/Strani',
+    12 => 'Dostop zavrnjen!',
+    13 => "Do te teme nimate dostopa. Vaš poskus je bil zabeležen in shranjen. Prosimo, vrnite se na <a href=\"{$_CONF['site_url']}/admin/topic.php\"> administracijo tem</a>!",
+    14 => 'Uredi po',
+    15 => 'abecedi',
+    16 => 'privzeto',
+    17 => 'Nova tema',
+    18 => 'Administratorske strani',
+    19 => 'Shrani',
+    20 => 'Prekliči',
+    21 => 'Izbriši',
+    22 => 'Privzeto',
+    23 => 'Ustvari to temo privzeto za novo oddane članke',
+    24 => '(*)',
+    25 => 'Arhiviraj temo',
+    26 => 'naredi to temo privzeto za arhivirane članke. Samo ena tema je dovoljena.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Urejanje uporabnika',
+    2 => 'ID uporabnika',
+    3 => 'uporabniško ime',
+    4 => 'ime uporabnika',
+    5 => 'Geslo',
+    6 => 'Varnostni nivo',
+    7 => 'e-mail naslov',
+    8 => 'Vaša spletna stran',
+    9 => '(ne uporabljajte presledkov)',
+    10 => 'Prosimo vpišite uporabniško ime in e-mail.',
+    11 => 'Administracija uporabnikov',
+    12 => 'Če želite spremeniti ali izbrisati uporabnika, kliknite na njegovo uporabniško ime spodaj. Če želite ustvariti novega uporabnika, kliknite gumb Nov uporabnik na levi. V spodnje okence vpišite iskalni niz, iščete lahko po imenu, delu imena, emailu ali celotnem imenu (npr. *sin* ali *.si*).',
+    13 => 'Varnostni nivo',
+    14 => 'Datum registracije',
+    15 => 'nov uporabnik',
+    16 => 'Administratorske strani',
+    17 => 'spremeni geslo',
+    18 => 'prekini',
+    19 => 'izbriši',
+    20 => 'shrani',
+    21 => 'Uporabniško ime, ki ga želite hraniti že obstaja.',
+    22 => 'Napaka',
+    23 => 'Zaporedno dodajanje',
+    24 => 'Zaporedno dodajanje uporabnikov',
+    25 => 'Uvoziš lahko zaporedje uporabnikov v Geekloga.  Datoteka za uvoz mora biti razdeljena s tabi in mora biti navadna tekstovna datoteka. Polja naj si sledijo v naslednjem vrstnem redu: polno ime, uporabniško ime, email naslov.  Vsak uporabnik bo prejel email z naključnim geslom. Vsak uporabnik naj bo vpisan v svoji vrstici. Če ne upoštevaš teh navodil, lahko nastanejo precejšnje težave, ki bodo zahtevale ročno delo, zato, še enkrat preveri vpise v datoteki preden jo začneš uvažati!',
+    26 => 'Išči',
+    27 => 'Omejitve iskanja',
+    28 => 'Izbriši sliko',
+    29 => 'Pot',
+    30 => 'Uvozi',
+    31 => 'Novi uporabniki',
+    32 => 'Končano. Uvoženo %d in %d napak',
+    33 => 'pošlji',
+    34 => 'Napaka: Moraš določiti datoteko.',
+    35 => 'Zadnji vpis',
+    36 => '(nikoli)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Objavi',
+    2 => 'Izbriši',
+    3 => 'Uredi',
+    4 => 'Profil',
+    10 => 'Naslov',
+    11 => 'Datum začetka',
+    12 => 'URL',
+    13 => 'Kategorija',
+    14 => 'Datum',
+    15 => 'Tema',
+    16 => 'Uporabniško ime',
+    17 => 'Popolno ime',
+    18 => 'E-mail',
+    34 => 'Administratorske strani',
+    35 => 'Čakajoči članki',
+    36 => 'Čakajoče povezave',
+    37 => 'Čakajoči dogodki',
+    38 => 'Potrdi',
+    39 => 'Trenutno v tem področju ni nobene čakajoče vsebine.',
+    40 => 'Uporabniki so poslali'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'nedelja',
+    2 => 'ponedeljek',
+    3 => 'torek',
+    4 => 'sreda',
+    5 => 'četrtek',
+    6 => 'petek',
+    7 => 'sobota',
+    8 => 'Dodaj dogodek',
+    9 => '%s Dogodek',
+    10 => 'Dogodki za',
+    11 => 'Skupni koledar',
+    12 => 'Osebni koledar',
+    13 => 'januar',
+    14 => 'februar',
+    15 => 'marec',
+    16 => 'april',
+    17 => 'maj',
+    18 => 'junij',
+    19 => 'julij',
+    20 => 'avgust',
+    21 => 'september',
+    22 => 'oktober',
+    23 => 'november',
+    24 => 'december',
+    25 => 'Nazaj na ',
+    26 => 'Ves dan',
+    27 => 'teden',
+    28 => 'Osebni koledar za uporabnika',
+    29 => 'Skupni koledar',
+    30 => 'izbriši dogodek',
+    31 => 'Dodaj',
+    32 => 'Dogodek',
+    33 => 'Datum',
+    34 => 'Čas',
+    35 => 'Hitro dodajanje',
+    36 => 'Pošlji',
+    37 => 'Žal ta spletna stran ne omogoča upravljanja osebnih koledarjev',
+    38 => 'Urejanje osebnega koledarja',
+    39 => 'Dan',
+    40 => 'Teden',
+    41 => 'Mesec'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} EMail pripomoček",
+    2 => 'Od:',
+    3 => 'Naslov za odgovor:',
+    4 => 'Zadeva:',
+    5 => 'Sporočilo:',
+    6 => 'Naslov:',
+    7 => 'Vsem uporabnikom',
+    8 => 'Admin',
+    9 => 'Nastavitve',
+    10 => 'HTML',
+    11 => 'Nujno sporočilo!',
+    12 => 'Pošlji',
+    13 => 'Zbriši',
+    14 => 'Prezri uporabniške nastavitve',
+    15 => 'Napaka pri pošiljanju: ',
+    16 => 'Sporočilo je bilo uspešno poslano na naslov: ',
+    17 => "<a href={$_CONF['site_url']}/admin/mail.php>Pošlji novo sporočilo</a>",
+    18 => 'Za:',
+    19 => 'POZOR: če želite poslati sporočilo vsem uporabnikom strani, izberite skupino Prijavljeni uporabniki iz menija Uporabniki',
+    20 => "Uspešno poslana sporočila: <successcount>;<BR>Neuspešno poslana sporočila: <failcount>. Podrobnosti o neuspešno poslanih sporočilh najdete spodaj.<BR><BR>Želite poslati še kakšno <a href=\"{$_CONF['site_url']}/admin/mail.php\">sporočilo</a>? <BR><BR>Nazaj na <a href=\"{$_CONF['site_url']}/admin/moderation.php\">administratorkse strani</a>.",
+    21 => 'Neuspešno poslana sporočila',
+    22 => 'Uspešno poslana sporočila',
+    23 => 'Nobenega neuspešno poslanega sporočila',
+    24 => 'Nobenega uspešno poslanega sporočila',
+    25 => '-- Izberi skupino --',
+    26 => 'Prosim izpolni vsa polja v obrazcu in izberi skupino uporabnikov iz menija.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Instalacija vtičnikov (plugin) lahko povzroči škodo tvoji instalaciji Geekloga, lahko tudi tvojemu sistemu. Pomemno je, da instaliraš samo vtičnike, ki jih pretočiš z <a href="http://www.geeklog.net" target="_blank">Geeklogove domače strani</a> saj smo samo te dodobra preizkusili na različnih operacijskih sistemih. Pomembno je razumeti, da je instalacija vtičnikov proces, ki zahteva izvajanje nekaterih komand na nivoju datotečnega sistema. Te lahko vodijo do varnostnih lukenj, posebno če uporabljaš vtičnik iz strani tretjih oseb. Tudi s tem opozorilom, ne garantiramo uspeh katerekoli instalacije niti nismo odgovorni za škodo povzročeno z instalacijo vtičnika za Geeklog. Z drugimi besedami instaliraš na svojo lastno odgovornost. Navodila za ročno instalacijo vtičnika so vključena v paketu vsakega vtičnika.',
+    2 => 'Plug-in Installation Disclaimer',
+    3 => 'Plug-in Installation Form',
+    4 => 'Plug-in File',
+    5 => 'Spisek vtičnikov',
+    6 => 'Opozorilo: Plug-in je že nameščen!',
+    7 => 'Vtičnik ki ga skušaš namestiti je že nameščen. Prosim pobriši stari vtičnik pred ponovno instalacijo',
+    8 => 'Test kompatibilnosti vtičnika ni uspel',
+    9 => 'Ta vtičnik zahteva novejšo verzijo Geekloga. Namesti novo različico <a href="http://www.geeklog.net">Geekloga</a> ali najdi novejšo verzijo vtičnika.',
+    10 => '<br><b>Trenutno ni nameščenih nobenih vtičnikov.</b><br><br>',
+    11 => 'Za spremembo ali izbris vtičnika, klikni njegovo številko spodaj. Za več informacij o vtičniku, klikni njegovo ime in preusmerjen boš na njegovo domačo stran. Za instalacijo ali nadgradnjo vtičnika, klikni na gumb Nov vtičnik zgoraj.',
+    12 => 'nobeno ime vtičnika ni bilo poslano v plugineditor()',
+    13 => 'Urejevalnik vtičnikov(Plugin Editor)',
+    14 => 'Nov vtičnik',
+    15 => 'Administratorske strani',
+    16 => 'Ime vtičnika',
+    17 => 'Verzija vtičnika',
+    18 => 'Verzija Geekloga',
+    19 => 'Omogočen',
+    20 => 'Da',
+    21 => 'Ne',
+    22 => 'Namesti',
+    23 => 'Shrani',
+    24 => 'Prekliči',
+    25 => 'Odstrani',
+    26 => 'Ime Plug-ina',
+    27 => 'Plug-in Homepage',
+    28 => 'Verzija Plug-in',
+    29 => 'Verzija Geekloga',
+    30 => 'Odstrani Plug-in?',
+    31 => 'Ali ste prepričani da želite odstraniti ta plug-in?  S tem bodo iz baze izbrisani tudi vsi podatki, ki jih uporablja ta plug-in.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'ustvari vsebino (feed)',
+    2 => 'shrani',
+    3 => 'zbriši',
+    4 => 'prekliči',
+    10 => 'Vsebina (Syndication)',
+    11 => 'Nova vsebina (Feed)',
+    12 => 'Adminov dom',
+    13 => 'Za spreminjanje ali brisanje vsebine (feed), kliknite na vsebino spodaj. Za novo vsebino, kliknite na gumb Nova vsebina zgoraj.',
+    14 => 'Naslov',
+    15 => 'Tip',
+    16 => 'Ime datoteke',
+    17 => 'Format',
+    18 => 'zadnji obnovljen',
+    19 => 'Omogočeno',
+    20 => 'Da',
+    21 => 'Ne',
+    22 => '<i>(ni vsebine)</i>',
+    23 => 'vsi članki',
+    24 => 'Urejevalnik (RDF) vsebine',
+    25 => 'naslov vsebine',
+    26 => 'Meja',
+    27 => 'Dolžine vnosov',
+    28 => '(0 = brez dodatnega teksta, 1 = ves tekst, drugo = omeji tekst na to število znakov.)',
+    29 => 'Opis',
+    30 => 'Zadnjič obnovljeno',
+    31 => 'Nabor znakov',
+    32 => 'Jezik',
+    33 => 'Vsebina',
+    34 => 'Vpisi',
+    35 => 'Ure',
+    36 => 'Izberite tip vsebine',
+    37 => 'Nameščen imate vsaj en vtičnik, ki podpira sodelovanje (content syndication). Spodaj morate izbrati ali delate RDF vsebino za Geekloga ali za katerega od vtičnikov.',
+    38 => 'Napaka: Manjkajoča polja',
+    39 => 'Prosim izpolnite polja Naslov, Opis, Ime datoteke.',
+    40 => 'Prosim vpišite število vpisov ali število ur.',
+    41 => 'Povezave',
+    42 => 'Dogodki',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => 'Geslo smo vam poslali na vaš e-mail naslov. Elektronsko sporočilo vsebuje tudi vsa ustrezna navodila.',
+    2 => 'Za poslani članek se vam najlepše zahvaljujemo. Pred objavo ga bo pregledal eden izmed urednikov. Če bo odobren, bo objavljen na spletni strani.',
+    3 => "Za poslano povezavo se vam najlepše zahvaljujemo. Pred objavo jo bo pregledal eden izmed urednikov. Če bo odobrena, bo objavljena na strani <a href={$_CONF['site_url']}/links.php>povezav</a>.",
+    4 => "Za poslani dogodek se vam najlepše zahvaljujemo. Pred objavo ga bo pregledal eden izmed urednikov. Če bo odobren, bo objavljen v <a href={$_CONF['site_url']}/calendar.php>koledarju dogodkov</a>.",
+    5 => 'Podatki o vašem uporabniškem računu so bili shranjeni.',
+    6 => 'Nastavitve so bile uspešno shranjene.',
+    7 => 'Vaše nastavitve komentarjev so bile uspešno shranjene.',
+    8 => 'Odjava je bila uspešna.',
+    9 => 'članek je bil uspešno shranjen.',
+    10 => 'članek je bil izbrisan.',
+    11 => 'Vaši bloki so bili uspešno shranjeni.',
+    12 => 'Blok je bil izbrisan.',
+    13 => 'Tematsko področje je bilo uspešno shranjeno.',
+    14 => 'Tematsko področje skupaj z vsemi članki v njem z je bilo izbrisano.',
+    15 => 'Povezava je bila uspešno shranjena v bazo povezav.',
+    16 => 'Povezava je bila izbrisana.',
+    17 => 'Dogodek je bil uspešno shranjen v bazo dogodkov.',
+    18 => 'Dogodek je bil izbrisan.',
+    19 => 'Anketa je bila uspešno shranjena.',
+    20 => 'Anketa je bila izbrisana.',
+    21 => 'Uporabniške nastavitve so bile uspešno shranjene.',
+    22 => 'Uporabnik je bil izbrisan.',
+    23 => 'Napaka pri dodajanju dogodka v koledar dogodkov. Vnesite ID dogodka.',
+    24 => 'Dogodek je bil uspešno shranjen v vaš koledar dogodkov',
+    25 => 'Dostop do osebnega koledarja je mogoč le če ste prijavljeni.',
+    26 => 'Dogodek je bil odstranjen iz vašega osebnega koledarja dogodkov',
+    27 => 'Sporočilo je bilo poslano.',
+    28 => 'Vtičnik je bil uspešno shranjen',
+    29 => 'Žal ta stran ne podpira osebnega koledarja.',
+    30 => 'Dostop zavrnjen',
+    31 => 'Žal nimate dostopa do administracije člankov. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    32 => 'Žal nimate dostopa do administracije tematskih področij. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    33 => 'Žal nimate dostopa do administracije blokov. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    34 => 'Žal nimate dostopa do administracije povezav. Vsi poizkusi nedovoljenega dostopa se beležijo1',
+    35 => 'Žal nimate dostopa do administracije dogodkov. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    36 => 'Žal nimate dostopa do administracije anket. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    37 => 'Žal nimate dostopa do administracije uporabnikov. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    38 => 'Žal nimate dostopa do administracije priključnih modulov. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    39 => 'Žal nimate dostopa do administracije elektronske pošte. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    40 => 'Sistemsko sporočilo',
+    41 => 'Žal nimaš dostopa do strani za menjavo besed. Vsi poizkusi nedovoljenega dostopa se beležijo!',
+    42 => 'Beseda je bila uspešno shranjena.',
+    43 => 'Beseda je bila uspešno pobrisana.',
+    44 => 'Vtičnik je bil uspešno nameščen!',
+    45 => 'Vtičnik je bil odstranjen.',
+    46 => 'Žal nimate dostopa do bekapa baze. Vsak poskus nedovoljenega dostopa se beleži',
+    47 => 'To deluje samo pod operacijskim sistemom *nix.  Če uporabljaš *nix za svoj operacijski sistem, potem je bil cache uspešno izpraznjen. Če uporabljaš Windows OS, boš moral poiskati datoteke po imenu adodb_*.php in jih pobrisati ročno.',
+    48 => "Hvala ker ste se prijavili za članstvo v {$_CONF['site_name']}. Naše osebje vam bo sporočilo odgovor v kratkem. Če boste sprejeti, vam bomo poslali vaše geslo email naslov, ki te ga ravnokar napisali.",
+    49 => 'Skupina je bila uspešno shranjena.',
+    50 => 'Skupina je bila uspešno izbrisana.',
+    51 => 'To uporabniško ime je že zasedeno. Prosim izberi drugo.',
+    52 => 'Vpisani email ne izgleda kot pravi email naslov.',
+    53 => 'Tvoje novo geslo je sprejeto. Prosim uporabi to novo geslo spodaj za vpis v sistem.',
+    54 => 'Tvoja zahteva za novo geslo je potekla. Prosim poizkusi ponovno spodaj.',
+    55 => 'Poslal sem Email. Na tvoj naslov bi moral priti takoj. Prosim upoštevaj navodila v tem emailu, za izbiro novega gesla za svoj račun.',
+    56 => 'Vpisani email je že uporabljen za enega od računov na naši bazi podatkov.',
+    57 => 'Tvoj račun je bil uspešno pobrisan.',
+    58 => '(RDF) vsebina je bila uspešno shranjena.',
+    59 => '(RDF) vsebina je bila uspešno izbrisana.',
+    60 => 'Vtičnik je bil uspešno obnovljen (updated)',
+    61 => 'Vtičnik %s: Neznan okvir sporočila (Unknown message placeholder)',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Dostop',
+    'ownerroot' => 'Lastnik/Root',
+    'group' => 'Skupina',
+    'readonly' => 'Samo za branje',
+    'accessrights' => 'Pravice dostopa',
+    'owner' => 'Lastnik',
+    'grantgrouplabel' => 'Dovoli zgornji skupini pravice spreminjanja',
+    'permmsg' => 'OBVESTILO: uporabniki so vsi prijavljeni člani, anonimni uporabniki in vsi trenutni neprijavljeni obiskovalci strani.',
+    'securitygroups' => 'Varnostne skupine',
+    'editrootmsg' => "Čeprav ste administrator, ne morete spreminjati nastavitev root uporabnika, če sami niste root uporabnik. Lahko pa urejate nastavitve vseh ostalih uporabnikov. Vsi poizkusi nedovoljenega dostopa se beležijo. Vrnite se na <a href=\"{$_CONF['site_url']}/admin/users.php\">Administratorske strani</a>.",
+    'securitygroupsmsg' => 'Izberite skupine, katerim naj pripada uporabnik',
+    'groupeditor' => 'Urejanje skupin',
+    'description' => 'Opis',
+    'name' => 'Ime',
+    'rights' => 'Pravice',
+    'missingfields' => 'Manjkajoča polja',
+    'missingfieldsmsg' => 'Vpišite ime in opis skupine!',
+    'groupmanager' => 'Administracija skupin',
+    'newgroupmsg' => 'Izberite skupinpo, ki jo želeite odstraniti skupino ali spremeniti njene nastavitve. Če želite oblikovati novo skupino, kliknite na Nova skupina zgoraj! Osnovnih skupin ni mogoče odstraniti!',
+    'groupname' => 'Ime skupine',
+    'coregroup' => 'Osnovna skupina',
+    'yes' => 'Da',
+    'no' => 'Ne',
+    'corerightsdescr' => "Ta skupina je osnovna skupina {$_CONF['site_name']}. Pravice te skupine ne morejo biti spremenjene. Pravice, ki pripadajo tej skupini so na spodnjem seznamu!",
+    'groupmsg' => 'Varnost skupin na tej strnai je urejena hierarhično. Vsaka podskupina ima enake pravice kot njena nadskupina. Zato je priporočljiva uporaba podskupin. Če skupina potrebuje posebne pravice, jih izberite v meniju \'Pravice\'.',
+    'coregroupmsg' => "Ta skupina je osnovna skupina strani {$_CONF['site_name']}. Nastavitve skupin, ki ji pripadajo zato ne morejo biti spremenjene. Spodnji seznam vsebuje imena skupin, ki ji pripadajo.",
+    'rightsdescr' => 'Pravice, ki jih določite skupini, so avtomatsko dodeljene tudi vsem njenim podskupinam. Pravice lahko dodajate tako, da jih izberete iz spodnjega seznama. Če določena pravica nima \'checkboxa\' pomeni, da ji je ta pravica dodeljena, ker je podskupina neke druge skupine.',
+    'lock' => 'Zakleni',
+    'members' => 'člani',
+    'anonymous' => 'Anonimni uporabnik',
+    'permissions' => 'Pravice',
+    'permissionskey' => 'R = branje, E = spreminjanje, pravice spreminjanja predpostavljajo pravice branja',
+    'edit' => 'Uredi',
+    'none' => 'Nihče',
+    'accessdenied' => 'Dostop zavrnjen!',
+    'storydenialmsg' => "Žal nimate dostopa do tega članka. Morda zato, ker niste registrirani uporabnik {$_CONF['site_name']}? <a href=users.php?mode=New> Registrirajte se!</a> in dobili boste popoln dostop do strani {$_CONF['site_name']}",
+    'eventdenialmsg' => "Žal nimate dostopa do tega dogodka. Morda zato, ker niste registrirani uporabnik {$_CONF['site_name']}? <a href=users.php?mode=New> Registrirajte se!</a> in dobili boste popoln dostop do strani {$_CONF['site_name']}",
+    'nogroupsforcoregroup' => 'Ta skupina ne pripada nobeni od preostalih skupin',
+    'grouphasnorights' => 'Ta skupina nima nobenih administratorskih pravic.',
+    'newgroup' => 'Nova skupina',
+    'adminhome' => 'Administratorske strani',
+    'save' => 'Shrani',
+    'cancel' => 'Prekliči',
+    'delete' => 'Izbriši',
+    'canteditroot' => 'Poizkusili ste urejati nastavitve glavne skupine. Ker niste član glavne skupine je vaš dostop zavrnjen. Če mislite, da je to napaka, kontatkirajte administratorja sistema.',
+    'listusers' => 'Izpiši uporabnike',
+    'listthem' => 'Izpis',
+    'usersingroup' => 'Uporabniki v skupini %s',
+    'usergroupadmin' => 'Administracija skupin uporabnikov',
+    'add' => 'Dodaj',
+    'remove' => 'Odstrani',
+    'availmembers' => 'Uporabniki na voljo',
+    'groupmembers' => 'Člani skupine',
+    'canteditgroup' => 'Za urejanje te skupine, morate biti njen član. Prosim posvetujte se z administratorjem, če se vam zdi da je to sporočilo napaka.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Zadnjih 10 backupov',
+    'do_backup' => 'Naredi backup',
+    'backup_successful' => 'Bravo. Baza podatkov se je uspešno bekapirala ;-).',
+    'db_explanation' => 'Če želite narediti backup vašega Geeklog sistema, kliknite gumb spodaj',
+    'not_found' => "Napačna pot ali mysqldump utility nima izvrševalnih pravic.<br>Preveri <strong>\$_DB_mysqldump_path</strong> definicijo v config.php.<br>Spremenljivka je trenutno definirana kot: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Backup neuspešen: Velikost datoteka je bila 0 bytov',
+    'path_not_found' => "{$_CONF['backup_path']} ne obstaja ali pa ni direktorij",
+    'no_access' => "NAPAKA: Direktorij {$_CONF['backup_path']} ni dosegljiv.",
+    'backup_file' => 'Backup datoteka',
+    'size' => 'Velikost',
+    'bytes' => 'Bytov',
+    'total_number' => 'Skupno število bekapov: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Domov',
+    2 => 'Kontakt',
+    3 => 'Objavi',
+    4 => 'Povezave',
+    5 => 'Ankete',
+    6 => 'Koledar',
+    7 => 'Statistika strani',
+    8 => 'Osebne nastavitve',
+    9 => 'Išči',
+    10 => 'Napredno iskanje',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Napaka 404',
+    2 => 'Ups, pogledal sem povsod, ampak ne najdem <b>%s</b>.',
+    3 => "<p>Žal mi je, ampak, datoteka ki jo zahtevaš ne obstaja. Prosim preveri <a href=\"{$_CONF['site_url']}\">glavno stran</a> ali <a href=\"{$_CONF['site_url']}/search.php\">iskalno stran</a> in poglej če lahko najdeš kar si izgubil."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Zahtevan je vpis',
+    2 => 'Žal, za ogled tega dela strani, moraš biti logiran kot uporabnik.',
+    3 => 'Logiraj se',
+    4 => 'Nov uporabnik'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF način je onemogočen',
+    2 => 'Zahtevani dokument ni bil renderiran. Dokument je bil prejte ampak ga ni bilo možno sprocesirati. Prosim prepričaj se da pošiljaš PDF procesorju samo dokumente v obliki html, ki so bili napisani po xHTML standardu. Upoštevajte da pri pre-kompleksnih dokumentih lahko pride do tega, da se sploh ne sprocesirajo. Dokument ki je nastal na vašo zahtevo je dolg 0 bytov, in je bil izbrisan. Če ste prepričani, da bi se ta dokument moral pravilno izračunati, ga prosimo pošljite ponovno.',
+    3 => 'Neznana napaka med izdelavo PDF dokumenta',
+    4 => "Dobil nisem nobenih podatkov o strani, ali pa želite uporabiti ad-hoc PDF generator spodaj. Če mislite da ste dobili to stran\n          Po nesreči prosim sporočite to upravniku strani. Če temu ni tako, lahko uporabite spodnjo formo in si ustvarite PDF dokumente na način ad-hoc.",
+    5 => 'Nalagam vaš dokument.',
+    6 => 'Prosim počakajte, da naložim vaš dokument.',
+    7 => 'Spodnji gumb lahko kliknete z desnim miškinim gumbom in izberete \'save target...\' ali \'save link location...\' da shranite kopijo dokumenta.',
+    8 => "Pot do HTMLDoc izvršilne datoteke, ki je zapisana v nastavitvah je napačna in sistem je ne more zagnati. Prosimo sporočite ta problem upravniku strani\n          če se ponavlja.",
+    9 => 'Izdelovalnik PDF',
+    10 => "To je orodje za Ad-hoc izdelavo PDF dokumentov. Orodje bo poizkusilo predelati vse URL naslove v PDF. Prosim zavedaj se, da se nekatere internetne strani NE bodo pravilno renderirale s tem načinom (ad-hoc).  To\n           je omejitev orodja HTMLDoc in teh napak ne rabite prijavljati upravniku strani",
+    11 => 'URL',
+    12 => 'Naredi PDF!',
+    13 => 'PHP konfiguracija na tem serverju ne dovoli odpiranja internetnih naslovov (URL) z ukazom fopen(). Upravnik strani mora popraviti php.ini datoteko in v njej prestaviti allow_url_fopen na On',
+    14 => 'PDF ki ste ga zahtevali ali ne obstaja ali pa ste nepravilno dostopali do datoteke.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/spanish_argentina.php 1.4.0sr5-1/cpanel-glprivate/language/spanish_argentina.php
--- 1.3.11sr1/cpanel-glprivate/language/spanish_argentina.php	2004-12-31 10:03:36.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/spanish_argentina.php	2006-08-08 02:39:06.000000000 -0500
@@ -151,7 +151,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -318,7 +328,23 @@
     104 => 'Show Online Status',
     105 => 'Show up in Who\'s Online block',
     106 => 'Location',
-    107 => 'Shown in your public profile'
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -336,27 +362,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Links',
-    2 => 'No hay Links para mostrar.',
-    3 => 'Agregue un Link'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Voto Grabado',
-    2 => 'Su voto fue computado para la encuesta',
-    3 => 'Vote',
-    4 => 'Encuestas en el sistema',
-    5 => 'Votos',
-    6 => 'View other poll questions'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -457,7 +462,11 @@
     54 => 'Comment Results',
     55 => 'the phrase',
     56 => 'AND',
-    57 => 'OR'
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -487,7 +496,14 @@
     21 => 'Parecera que en este sitio no hay Links o que nadie nuca los visita.',
     22 => 'Las 10 Notas ms enviadas por email',
     23 => 'Emails',
-    24 => 'Parecera que nadie mand una nota por email en este sitio.'
+    24 => 'Parecera que nadie mand una nota por email en este sitio.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -640,7 +656,12 @@
     57 => 'Move Block Down',
     58 => 'Move Block Up',
     59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -675,35 +696,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor de Links',
-    2 => '',
-    3 => 'Ttulo',
-    4 => 'URL',
-    5 => 'Categoria',
-    6 => '(incluir http://)',
-    7 => 'Otro',
-    8 => 'Cantidad de accesos',
-    9 => 'Descripcin',
-    10 => 'Necesita completar los campos Ttulo, URL y Descripcin.',
-    11 => 'Administrador',
-    12 => 'Para modificar o borrar un Link seleccinelo ms abajo. Para crear uno nuevo seleccione \'Nuevo Link\' ms arriba.',
-    13 => 'Ttulo',
-    14 => 'Categoria',
-    15 => 'URL',
-    16 => 'Acceso Denegado',
-    17 => "No tiene permiso para acceder a este Link. Todo intento de acceso ser registrado. Por favor, vuelva a <a href=\"{$_CONF['site_admin_url']}/link.php\">la pgina de Administracin de Links</a>.",
-    18 => 'Nuevo Link',
-    19 => 'Pgina de Inicio - Administrador',
-    20 => 'Si otra/o, especifique',
-    21 => 'grabar',
-    22 => 'cancelar',
-    23 => 'borrar'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -726,16 +718,16 @@
     17 => 'Texto',
     18 => 'Accesos',
     19 => 'Comentarios',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Listado de Notas',
     23 => 'Para modificar o borrar una Nota seleccione el nmero de nota ms abajo. Para ver la Nota seleccione el ttulo de la misma. Para crear una nueva Nota seleccione \'Nueva Nota\' ms arriba.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Vista Previa',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'File Upload Errors',
     31 => 'Por favor complete los campos Autor, Introduccin y Texto',
     32 => 'Destacado',
@@ -757,7 +749,7 @@
     48 => 'imagen',
     49 => 'der',
     50 => 'izq',
-    51 => 'Para insertar una imagen en la Nota debe incluir un texto con el formato [imagenX], [imagenX_der] o [imageX_izq], donde X es el nmero de imagen dentro de la lista. NOTA: slo puede utilizar las imgenes de la lista, sino la Nota no podr ser grabada',
+    51 => 'Para insertar una imagen en la Nota debe incluir un texto con el formato [imageX], [imageX_right] o [imageX_left], donde X es el nmero de imagen dentro de la lista. NOTA: slo puede utilizar las imgenes de la lista, sino la Nota no podr ser grabada',
     52 => 'Borrar',
     53 => 'no fue usada.  Debe incluir esta imagen en la Introduccin o el Texto para poder grabar los cambios',
     54 => 'Imgenes no utilizadas',
@@ -768,39 +760,30 @@
     59 => 'Option',
     60 => 'Enabled',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modo',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Fecha de creacin',
-    4 => 'Encuesta %s grabada',
-    5 => 'Editar la Encuesta',
-    6 => 'ID',
-    7 => '(no use espacios)',
-    8 => 'Aparece en la Portada',
-    9 => 'Pregunta',
-    10 => 'Respuestas / Votos',
-    11 => 'Hubo un error buscando los datos para las respuesta de la Encuesta %s',
-    12 => 'Hubo un error buscando los datos para la pregunta de la Encuesta %s',
-    13 => 'Crear Encuesta',
-    14 => 'grabar',
-    15 => 'cancelar',
-    16 => 'borrar',
-    17 => 'Please enter a Poll ID',
-    18 => 'Listado de Encuestas',
-    19 => 'Para modificar o borrar una Encuesta eljala en la lista de abajo. Para crear una nueva selecione \'Nueva Encuesta\' ms arriba.',
-    20 => 'Votantes',
-    21 => 'Acceso Denegado',
-    22 => "Esta intentando acceder a una Encuesta para la cual no tiene derechos de acceso. Por favor vuelva a la <a href=\"{$_CONF['site_admin_url']}/poll.php\">pgina de administracin</a>.",
-    23 => 'Nueva Encuesta',
-    24 => 'Pgina de Inicio - Administrador',
-    25 => 'S',
-    26 => 'No'
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -832,7 +815,10 @@
     23 => 'make this the default topic for new story submissions',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -874,7 +860,18 @@
     33 => 'enviar',
     34 => 'Error: Debes especificar un archivo a enviar.',
     35 => 'Last Login',
-    36 => '(never)'
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1019,7 +1016,11 @@
     31 => 'Est seguro/a que desea borrar este Plug-in? Al hacerlo borrar todos los archivos, estructuras y datos asociados. Si est seguro/a seleccione "Borrar" en el formulario de abajo.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
     33 => 'Code Version',
-    34 => 'Update'
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1062,7 +1063,15 @@
     39 => 'Please fill in the Feed Title, Description, and Filename.',
     40 => 'Please enter a  number of entries or number of hours.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1129,7 +1138,21 @@
     58 => 'Your feed has been successfully saved.',
     59 => 'The feed has been successfully deleted.',
     60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1189,7 +1212,16 @@
     'availmembers' => 'Available Members',
     'groupmembers' => 'Group Members',
     'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1199,7 +1231,6 @@
     'last_ten_backups' => 'ltimos 10 Back-ups',
     'do_backup' => 'Hacer un Backup',
     'backup_successful' => 'El back up de la base se ha realizado con xito.',
-    'no_backups' => 'No hay backups en el sistema',
     'db_explanation' => 'Para crear un backup del sistema utilice el botn de abajo',
     'not_found' => "Ruta incorrecta o la utilidad mysqldump no se puede ejecutar.<br>Comprueba la definicin de <strong>\$_DB_mysqldump_path</strong> en config.php.<br>La variable est definida actualmente como: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Fallo de Backup: El tamao era de 0 bytes',
@@ -1223,7 +1254,8 @@
     7 => 'Estadsticas',
     8 => 'Personalizar',
     9 => 'Buscar',
-    10 => 'bsqueda avanzada'
+    10 => 'bsqueda avanzada',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1265,4 +1297,210 @@
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/spanish_argentina_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/spanish_argentina_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/spanish_argentina_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/spanish_argentina_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1506 @@
+<?php
+
+###############################################################################
+# This is the spanish language page for GeekLog!
+# 
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Contribuido por:',
+    2 => 'ver más',
+    3 => 'comentarios',
+    4 => 'Editar',
+    5 => 'Encuesta',
+    6 => 'Resultados',
+    7 => 'Resultados de la encuesta',
+    8 => 'votos',
+    9 => 'Funciones del Administrador:',
+    10 => 'Propuestas',
+    11 => 'Notas',
+    12 => 'Bloques',
+    13 => 'Secciones',
+    14 => 'Links',
+    15 => 'Eventos',
+    16 => 'Encuestas',
+    17 => 'Usuarios',
+    18 => 'Búsqueda SQL',
+    19 => 'Salir',
+    20 => 'Información del Usuario:',
+    21 => 'Nombre del Usuario',
+    22 => 'ID del Usuario',
+    23 => 'Nivel de Seguridad',
+    24 => 'Anónimo',
+    25 => 'Responder',
+    26 => 'Los siguientes comentarios son de quien sea que los haya enviado. Este sitio no es responsable por lo que dicen.',
+    27 => 'Envio más reciente',
+    28 => 'Borrar',
+    29 => 'No hay comentarios de usuarios.',
+    30 => 'Artículos anteriores',
+    31 => 'Tags HTML permitidos:',
+    32 => 'Error, usuario inválido',
+    33 => 'Error, no fue posible escribir el log',
+    34 => 'Error',
+    35 => 'Salir',
+    36 => 'sobre',
+    37 => 'No hay noticias del usuario',
+    38 => 'Content Syndication',
+    39 => 'Actualizar',
+    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    41 => 'Usuarios Inviados',
+    42 => 'Escrito por:',
+    43 => 'Responder a',
+    44 => 'Retornar',
+    45 => 'Nro de Error MySQL',
+    46 => 'Mensaje de Error MySQL',
+    47 => 'Funciones de Usuario',
+    48 => 'Mi cuenta',
+    49 => 'Mis Preferencias',
+    50 => 'Error en una sentencia SQL',
+    51 => 'ayuda',
+    52 => 'Nuevo',
+    53 => 'Sección de Administración',
+    54 => 'No fue posible abrir el archivo.',
+    55 => 'Error en',
+    56 => 'Vote',
+    57 => 'Password',
+    58 => 'Ingresar',
+    59 => "¿No tiene una cuenta todavía? <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Inscríbase</a>",
+    60 => 'Agregar un comentario',
+    61 => 'Crear una Nueva Cuenta',
+    62 => 'palabras',
+    63 => 'Mis preferencias de comentarios',
+    64 => 'Enviar la Nota a un Amigo',
+    65 => 'Ver la versión para imprimir',
+    66 => 'Mi Calendario',
+    67 => 'Bienvenido a ',
+    68 => 'Página Inicial',
+    69 => 'contacto',
+    70 => 'buscar',
+    71 => 'contribuir',
+    72 => 'recursos en la web',
+    73 => 'encuestas pasadas',
+    74 => 'calendario',
+    75 => 'búsqueda avanzada',
+    76 => 'estadísticas del sitio',
+    77 => 'Plugins',
+    78 => 'Próximos Eventos',
+    79 => 'Novedades',
+    80 => 'Notas',
+    81 => 'Nota',
+    82 => 'horas',
+    83 => 'COMENTARIOS',
+    84 => 'LINKS',
+    85 => 'últimas 48 hs',
+    86 => 'No hay nuevos comentarios',
+    87 => 'últimas 2 semanas',
+    88 => 'No hay nuevos links',
+    89 => 'No hay próximos eventos',
+    90 => 'Página Inicial',
+    91 => 'Esta página fue creada en',
+    92 => 'segundos',
+    93 => 'Derechos de autor',
+    94 => 'Todas las marcas y derechos en esta página son de sus respectivos dueños.',
+    95 => 'Powered By',
+    96 => 'Grupos',
+    97 => 'List de Palabras',
+    98 => 'Plug-ins',
+    99 => 'NOTAS',
+    100 => 'No hay nuevas notas',
+    101 => 'Mis Eventos',
+    102 => 'Eventos del sitio',
+    103 => 'DB Backups',
+    104 => 'por',
+    105 => 'Envair Mails',
+    106 => 'Vistas',
+    107 => 'Comprobación GL',
+    108 => 'Limpiar Caché',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendario de Eventos',
+    2 => 'Disculpe, no hay eventos para mostrar.',
+    3 => 'Cuando',
+    4 => 'Donde',
+    5 => 'Descripción',
+    6 => 'Agregar un Evento',
+    7 => 'Próximos Eventos',
+    8 => 'Al agregar este evento en su calendario usted podrá ver rápidamente los eventos que le interesan. Para ello elija "Mi Calendario" en el área de Funciones del usuario.',
+    9 => 'Agregar a Mi Calendario',
+    10 => 'Sacar de Mi Calendario',
+    11 => "Agregando el Evento al Calendario de {$_USER['username']}",
+    12 => 'Evento',
+    13 => 'Empieza',
+    14 => 'Termina',
+    15 => 'Volver al Calendario'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Agregar un Comentario',
+    2 => 'Tipo de envio',
+    3 => 'Salir',
+    4 => 'Crear una Cuenta',
+    5 => 'Nombre del Usuario',
+    6 => 'Este sitio requiere que tenga una cuenta para enviar un comentario. Si ya la tiene ingrese el usuario y el password. Si no tiene una cuenta puede crear una nueva en el formulario de abajo.',
+    7 => 'Su último comentario fue hace ',
+    8 => " segundos. Este sitio requiere al menos {$_CONF['commentspeedlimit']} segundos entre comentarios",
+    9 => 'Comentario',
+    10 => 'Send Report',
+    11 => 'Enviar el Comentario',
+    12 => 'Por favor complete el Nombre, Email, Título y Comentario, ya que son datos necesarios para el envío.',
+    13 => 'Su Información',
+    14 => 'Vista Previa',
+    15 => 'Report this post',
+    16 => 'Título',
+    17 => 'Error',
+    18 => 'Cosas Importantes',
+    19 => 'Por favor intente mantener el tema de la nota.',
+    20 => 'Intente responder a los commentarios de los demás en lugar de comenzar una nueva discución.',
+    21 => 'Lea los comentarios enviados para evitar comentarios duplicados.',
+    22 => 'Use un título claro que describa el contenido del mensaje.',
+    23 => 'Su dirección de email NO será divulgada.',
+    24 => 'Usuario Anónimo',
+    25 => 'Are you sure you want to report this post to the site admin?',
+    26 => '%s reported the following abusive comment post:',
+    27 => 'Abuse report'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Perfil del Usuario para',
+    2 => 'Nombre del Usuario',
+    3 => 'Nombre Completo',
+    4 => 'Password',
+    5 => 'Email',
+    6 => 'Homepage',
+    7 => 'Biografía',
+    8 => 'Clave PGP',
+    9 => 'Guardar',
+    10 => 'Ultimos 10 comentarios',
+    11 => 'No hay comentarios',
+    12 => 'Preferencias del Usuario para',
+    13 => 'Enviar un resumen cada noche por Email',
+    14 => 'Este password es generado al azar. Se recomienda que cambie el password cuanto antes. Para cambiar el password conectese al sitio con su usuario.',
+    15 => "Su cuenta en {$_CONF['site_name']} fue creada exitosamente. Para poder usarla debe ingresar utilizando los datos dados más abajo. Guarde este mensaje para futuras referencias.",
+    16 => 'Información de su cuenta',
+    17 => 'La cuenta no existe',
+    18 => 'El email ingresado no parece ser válido.',
+    19 => 'El usuario y el email ingresados ya existen',
+    20 => 'El email ingresado no parece ser válido.',
+    21 => 'Error',
+    22 => "Registrese en {$_CONF['site_name']}!",
+    23 => "Crear una cuenta le dará los beneficios de los usuarios de {$_CONF['site_name']} y le permitirá enviar notas, comentarios, etc. Si no tiene una cuenta sólo lo podrá hacer anónimamente. Queremos remarcar que su email <b><i>nunca</i></b> será publicado en este sitio.",
+    24 => 'Su password será enviado a la dirección de email que ingrese.',
+    25 => 'Olvidó su Password?',
+    26 => 'Ingrese su nombre de usuario y elija \'Enviar el Password por email\' y su nuevo password será enviado por email a su dirección',
+    27 => '¡Regístrate ahora!',
+    28 => 'Enviar el password por email',
+    29 => 'desconectado de',
+    30 => 'conectado a',
+    31 => 'La función que eligió requiere que esté conectado',
+    32 => 'Firma',
+    33 => 'Nunca mostrado publicamente',
+    34 => 'Este es tu nombre real',
+    35 => 'Ingrese el password para cambiarlo',
+    36 => 'Comienza con http://',
+    37 => 'Aplicado a tus comentarios',
+    38 => '¡Todo sobre Ud.! Todos van a poder leer esto.',
+    39 => 'Su clave pública de PGP para compartir',
+    40 => 'No hay íconos en Secciones',
+    41 => 'Deseando moderar',
+    42 => 'Formato de fecha',
+    43 => 'Cantidad máxima de Notas',
+    44 => 'Sin recuadros',
+    45 => 'Mostrar las preferencias de',
+    46 => 'Items excluidos para',
+    47 => 'Configuración de Noticias para',
+    48 => 'Secciones',
+    49 => 'Sin íconos en las notas',
+    50 => 'No seleccione esto si no está interesado',
+    51 => 'Sólo las notas nuevas',
+    52 => 'El valor por defecto es',
+    53 => 'Recibir cada noche las notas del día',
+    54 => 'Seleccione las Secciones y Autores que no desea ver.',
+    55 => 'Si no selecciona ninguna significa que desea la selección por defecto. De seleccionar, seleccione todas las de su interés ya que las opciones por defecto ya no serán tomadas en cuenta. Las opciones por defecto se muestran resaltadas.',
+    56 => 'Autores',
+    57 => 'Modo de Presentación',
+    58 => 'Orden',
+    59 => 'Limite por Comentario',
+    60 => '¿Cómo desea ver los comentarios?',
+    61 => '¿Primero los más antiguos o los más recientes?',
+    62 => 'El valor por defecto es 100',
+    63 => "Gracias por usar {$_CONF['site_name']}. Su password a sido enviado por email y estará llegando en unos instantes. Por favor siga las instrucciones en el mensaje.",
+    64 => 'Preferencias para los Comentarios de',
+    65 => 'Intente reconectarse otra vez',
+    66 => "Los datos ingresados no son válidos. Intente volver a conectarse aquí. ¿Es usted un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">usuario nuevo</a>?",
+    67 => 'Miembro desde',
+    68 => 'Recuérdeme para',
+    69 => '¿Cuánto tiempo debemos mantenerlo activo luego que se conectó?',
+    70 => "Personalize la apariencia y el contenido de {$_CONF['site_name']}",
+    71 => "Una de las grandes virtudes de {$_CONF['site_name']} es que puede personalizar el contenido que recibe y la apariencia del sitio. Para poder lograr esto debe primero <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrarse</a> en {$_CONF['site_name']}. Si ya es un miembro utilice el formulario de la izquierda para conectarse.",
+    72 => 'Theme',
+    73 => 'Idioma',
+    74 => '¡Cambie la apariencia de esta página!',
+    75 => 'Secciones enviadas por email a',
+    76 => 'Si selecciona una o más Secciones de la lista de abajo, todas las Notas nuevas de esas Secciones le serán enviadas por mail al finalizar el día.',
+    77 => 'Foto',
+    78 => 'Añadir una imagen tuya!',
+    79 => 'Tildar el checkbox para borrar tu foto',
+    80 => 'Identificación',
+    81 => 'Enviar Email',
+    82 => 'Ultimas 10 noticias para el usuario',
+    83 => 'Estadísticas de noticias para el usuario',
+    84 => 'Número total de artículos:',
+    85 => 'Número total de comentarios:',
+    86 => 'Encontrar todas las noticias de',
+    87 => 'Your login name',
+    88 => "Someone (possibly you) has requested a new password for your account \"%s\" on {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nIf you really want this action to be taken, please click on the following link:\n\n",
+    89 => "If you do not want this action to be taken, simply ignore this message and the request will be disregarded (your password will remain unchanged).\n\n",
+    90 => 'You can enter a new password for your account below. Please note that your old password is still valid until you submit this form.',
+    91 => 'Set New Password',
+    92 => 'Enter New Password',
+    93 => 'Your last request for a new password was %d seconds ago. This site requires at least %d seconds between password requests.',
+    94 => 'Delete Account "%s"',
+    95 => 'Click the "delete account" button below to remove your account from our database. Please note that any stories and comments you posted under this account will <strong>not</strong> be deleted but show up as being posted by "Anonymous".',
+    96 => 'delete account',
+    97 => 'Confirm Account Deletion',
+    98 => 'Are you sure you want to delete your account? By doing so, you will not be able to log into this site again (unless you create a new account). If you are sure, click "delete account" again on the form below.',
+    99 => 'Privacy Options for',
+    100 => 'Email from Admin',
+    101 => 'Allow email from Site Admins',
+    102 => 'Email from Users',
+    103 => 'Allow email from other users',
+    104 => 'Show Online Status',
+    105 => 'Show up in Who\'s Online block',
+    106 => 'Location',
+    107 => 'Shown in your public profile',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'No hay novedades para mostrar',
+    2 => 'No hay nuevas notas para mostrar. Puede que no haya novedades para esta Sección o que sus preferencias sean muy restrictivas.',
+    3 => 'para la Sección %s',
+    4 => 'Nota del Día',
+    5 => 'Siguiente',
+    6 => 'Anterior',
+    7 => 'First',
+    8 => 'Last'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Hubo un error al enviar su mensaje. Intente nuevamente por favor.',
+    2 => 'El mensaje fue enviado con éxito.',
+    3 => 'Por favor asegúrese de ingresar una dirección de email válida en el campo \'Responder a\'.',
+    4 => 'Por favor complete los campos Remitente, Responder a, Título y Mensaje',
+    5 => 'Error: No existe el usuario.',
+    6 => 'Hubo un error.',
+    7 => 'Perfil de usuario de',
+    8 => 'Nombre del Usuario',
+    9 => 'URL del Usuario',
+    10 => 'Enviar mensaje a',
+    11 => 'Remitente:',
+    12 => 'Responder a:',
+    13 => 'Título:',
+    14 => 'Mensaje:',
+    15 => 'El código HTML no será traducido.',
+    16 => 'Enviar el mensaje',
+    17 => 'Enviar la Nota a un Amigo',
+    18 => 'Destinatario',
+    19 => 'Dirección de email destino',
+    20 => 'Remitente',
+    21 => 'Responder a',
+    22 => 'Todos los campos son requeridos',
+    23 => "Este email fue enviado a Ud por %s en %s porque pensó que podría interesarle esta Nota en  {$_CONF['site_url']}. Esto no es SPAM y los emails involucrados en este envío no fueron guardados para ningún uso posterior.",
+    24 => 'Comentario sobre esta nota en',
+    25 => 'Debe conectarse para utilizar esta herramienta. Este control se realiza para evitar el mal uso del sistema.',
+    26 => 'Este form le permitirá enviar un email al usuario seleccionado. Todos los campos son necesarios.',
+    27 => 'Mensaje corto',
+    28 => '%s escribió: ',
+    29 => "Este es el resúmen diario de {$_CONF['site_name']} para ",
+    30 => ' Diario para ',
+    31 => 'Título',
+    32 => 'Fecha',
+    33 => 'Lea la Nota completa en',
+    34 => 'Fin del Mensaje',
+    35 => 'Sorry, this user prefers not to receive any emails.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Búsqueda Avanzada',
+    2 => 'Palabras Clave',
+    3 => 'Sección',
+    4 => 'Todo',
+    5 => 'Tipo',
+    6 => 'Notas',
+    7 => 'Comentarios',
+    8 => 'Autores',
+    9 => 'Todo',
+    10 => 'Buscar',
+    11 => 'Resultados de la búsqueda',
+    12 => 'resultados',
+    13 => 'Búsqueda de Notas: No hubo coincidencias',
+    14 => 'No se encontraron coincidencias búscando: ',
+    15 => 'Por favor intente nuevamente.',
+    16 => 'Título',
+    17 => 'Fecha',
+    18 => 'Autor',
+    19 => "Buscar en toda la base de datos de <B>{$_CONF['site_name']}</B>",
+    20 => 'Fecha',
+    21 => 'a',
+    22 => '(Formato de fecha DD-MM-YYYY)',
+    23 => 'Accesos',
+    24 => 'Se encontraron',
+    25 => 'coincidencias para',
+    26 => 'items en',
+    27 => 'segundos',
+    28 => 'No se encontraron coincidencias en Notas y Comentarios',
+    29 => 'Resultados para Notas y Comentarios',
+    30 => 'Ningún link coincide con la búsqueda',
+    31 => 'Este plug-in no devolvió resultados',
+    32 => 'Evento',
+    33 => 'URL',
+    34 => 'Ubicación',
+    35 => 'Todo el dia',
+    36 => 'Ningún evento coincidió con la búsqueda',
+    37 => 'Resultados de Eventos',
+    38 => 'Resultados de Links',
+    39 => 'Links',
+    40 => 'Eventos',
+    41 => 'Tu búsqueda  debe tener al menos 3 letras.',
+    42 => 'Por favor utiliza un formato de fecha como este DD-MM-YYYY (día-mes-año).',
+    43 => 'exact phrase',
+    44 => 'all of these words',
+    45 => 'any of these words',
+    46 => 'Next',
+    47 => 'Previous',
+    48 => 'Author',
+    49 => 'Date',
+    50 => 'Hits',
+    51 => 'Link',
+    52 => 'Location',
+    53 => 'Story Results',
+    54 => 'Comment Results',
+    55 => 'the phrase',
+    56 => 'AND',
+    57 => 'OR',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Estadísticas del sitio',
+    2 => 'Total de accesos al sistema',
+    3 => 'Notas(Comentarios) en el sistema',
+    4 => 'Encuestas(Respuestas) en el sistema',
+    5 => 'Links(Visitados) en el sistema',
+    6 => 'Eventos en el sistema',
+    7 => 'Las 10 Notas más vistas',
+    8 => 'Título de la Nota',
+    9 => 'Accesos',
+    10 => 'Parecería que no hay Notas en este sitio o que nadie jamás las vió.',
+    11 => 'Las 10 Notas más comentadas',
+    12 => 'Comentarios',
+    13 => 'Parecería que no hay Notas en este sitio o que nadie jamás escribió un comentario sobre ellas.',
+    14 => 'Las 10 Encuestas con más votos',
+    15 => 'Pregunta',
+    16 => 'Votos',
+    17 => 'Parecería que no hay Encuestas en este sitio o que nadie jamás votó.',
+    18 => 'Los 10 Links más visitados',
+    19 => 'Links',
+    20 => 'Visitas',
+    21 => 'Parecería que en este sitio no hay Links o que nadie nuca los visita.',
+    22 => 'Las 10 Notas más enviadas por email',
+    23 => 'Emails',
+    24 => 'Parecería que nadie mandó una nota por email en este sitio.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relacionado con esto...',
+    2 => 'Enviar la Nota a un amigo',
+    3 => 'Versión para imprimir',
+    4 => 'Opciones de la Nota',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Para enviar %s debe estar conectado con su usuario.',
+    2 => 'Ingresar',
+    3 => 'Nuevo usuario',
+    4 => 'Enviar un Evento',
+    5 => 'Enviar un Link',
+    6 => 'Enviar una nota',
+    7 => 'Debe conectarse',
+    8 => 'Enviar',
+    9 => 'Cuando envia información a este sitio le pedimos que tome en cuenta los siguientes consejos: <ul><li>Complete todos los campos requeridos<li>Chequee bien los URL\'s<li>Brinde información completa y precisa</ul>',
+    10 => 'Título',
+    11 => 'Link',
+    12 => 'Fecha de inicio',
+    13 => 'Fecha de finalización',
+    14 => 'Locación',
+    15 => 'Descripción',
+    16 => 'Si otra, especifique',
+    17 => 'Categoria',
+    18 => 'Otra',
+    19 => 'Lea antes',
+    20 => 'Error: Falta la Categoría',
+    21 => 'Por favor, cuando seleccione \'Otra\' complete el nombre de la categoría',
+    22 => 'Error: Faltan Campos',
+    23 => 'Por favor complete todo los campos del formulario. Todos los campos son requeridos.',
+    24 => 'Envío Guardado',
+    25 => 'Sus envíos fueron grabados con éxito.',
+    26 => 'Límite de Velocidad',
+    27 => 'Nombre del Usuario',
+    28 => 'Sección',
+    29 => 'Nota',
+    30 => 'Su último envío fue hace ',
+    31 => " segundos.  Este sitio requiere al menos {$_CONF['speedlimit']} segundos entre envíos",
+    32 => 'Vista Previa',
+    33 => 'Prever la Nota',
+    34 => 'Salir',
+    35 => 'Los tags de HTML no son permitidos',
+    36 => 'Formato del texto',
+    37 => "Los Eventos enviados a {$_CONF['site_name']} se agregan al Calendario Público, donde el resto de los usuarios pueden agregarlo a su Calendario Personal. Esta funcionalidad <b>NO</b> está pensada para que guarde sus eventos personales como cumpleaños, citas, etc.<br><br>Una vez enviado el evento será evaluado por los Administradores, de ser aprobado se mostrará en el Calendrio Público",
+    38 => 'Agregar un Evento a',
+    39 => 'Calendario Público',
+    40 => 'Calendario Personal',
+    41 => 'Hora de Finalización',
+    42 => 'Hora de Inicio',
+    43 => 'Evento de todo el día',
+    44 => 'Dirección',
+    45 => 'Dirección',
+    46 => 'Ciudad/Localidad',
+    47 => 'Provincia',
+    48 => 'Código Postal',
+    49 => 'Tipo de Evento',
+    50 => 'Editar los Tipos de Eventos',
+    51 => 'Locación',
+    52 => 'Borrar',
+    53 => 'Crear Cuenta'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autentificación Requerida',
+    2 => '¡Denegado! Incorrect Login Information',
+    3 => 'El password ingresado es inválido',
+    4 => 'Usuario:',
+    5 => 'Password:',
+    6 => 'Todo acceso a las partes administrativas es registrado y revisado.<br>Esta página es para uso exclusivo del personal autorizado.',
+    7 => 'Ingresar'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'No tiene derechos de Administrador',
+    2 => 'No tiene los derechos suficiente spara editar este bloque.',
+    3 => 'Editor de Bloques',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Título del Bloque',
+    6 => 'Sección',
+    7 => 'Todo',
+    8 => 'Nivel de seguridad del bloque',
+    9 => 'Orden del Bloque',
+    10 => 'Tipo de bloque',
+    11 => 'Bloque del Sistema',
+    12 => 'Bloque Normal',
+    13 => 'Opciones para el Bloque del Sistema',
+    14 => 'RDF(Resource Description Framework)URL',
+    15 => 'ültima actualización RDF',
+    16 => 'Opciones para el Bloque Normal',
+    17 => 'Contenido del Bloque',
+    18 => 'Por favor complete los campos Título, Nivel de Seguridad y Contenido',
+    19 => 'Administrador',
+    20 => 'Título',
+    21 => 'Nivel de Seguridad',
+    22 => 'Tipo',
+    23 => 'Nro. de Orden',
+    24 => 'Sección',
+    25 => 'Para modificar o borrar un bloque seleccionelo más abajo. Para crear uno nuevo Seleccione \'Nuevo Bloque\' arriba.',
+    26 => 'Bloque de Layout',
+    27 => 'Bloque PHP',
+    28 => 'Opciones del Bloque PHP',
+    29 => 'Funciones de Bloque',
+    30 => 'Si desea que su bloque utilice código PHP, ingrese aqui el nombre de la función. La función debe tener el prefijo "phpblock_" (ej. phpblock_getweather). De no tenerlo NO será invocada. Asegúrese de no incluir los paréntesis, "()", al final del nombre. Por último, se recomienda que guarde todo código PHP en /path/to/geeklog/system/lib-custom.php. Esto le permitirá que su código se mantenga aún entre cambios de versiones del sistema.',
+    31 => 'Error en un Bloque PHP.  La función, %s, no existe.',
+    32 => 'Error, Faltan Campos',
+    33 => 'Debe ingresar el URL del archivo .rdf para los Bloques del Sistema',
+    34 => 'debe ingresar el Título y la Función en los Bloques PHP',
+    35 => 'Debe ingresar el Título y el Contenido para los Bloques Normales',
+    36 => 'Debe ingresar el contenido para los Bloques de Layout',
+    37 => 'El nombre de la función en el Bloque PHP es inválido',
+    38 => 'Las funciones para los Bloques PHP deben tener el prefijo \'phpblock_\' (ej. phpblock_getweather). El prefijo es requerido por cuestiones de seguridad, para evitar que se ejecute código no deseado.',
+    39 => 'Ubicación',
+    40 => 'Izquierda',
+    41 => 'Derecha',
+    42 => 'Deber ingresar el nro. de orden y el nivel de seguridad para los bloques default',
+    43 => 'Sólo en la Página de Inicio',
+    44 => 'Acceso Denegado',
+    45 => "Usted esta tratando de acceder a un bloque en el cual usted no tiene los permisos requeridos.  Este intento ha sido registrado. Por favor  <a href=\"{$_CONF['site_admin_url']}/block.php\">vuelva a la pantalla de administración de bloques</a>.",
+    46 => 'Nuevo Bloque',
+    47 => 'Página de Inicio - Administrador',
+    48 => 'Nombre del Bloque',
+    49 => ' (sin espacios y debe ser único)',
+    50 => 'URL del archivo de ayuda',
+    51 => 'incluir http://',
+    52 => 'Si deja este campo en blanco no se mostrará el ícono de ayuda',
+    53 => 'Habilitado',
+    54 => 'grabar',
+    55 => 'cancelar',
+    56 => 'borrar',
+    57 => 'Move Block Down',
+    58 => 'Move Block Up',
+    59 => 'Move block to the right side',
+    60 => 'Move block to the left side',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor de Eventos',
+    2 => 'Error',
+    3 => 'Título',
+    4 => 'URL',
+    5 => 'Fecha de Inicio',
+    6 => 'Fecha de Finalización',
+    7 => 'Lugar',
+    8 => 'Descripción',
+    9 => '(incluir http://)',
+    10 => 'Necesita completar todos los campos de este formulario.',
+    11 => 'Administrador del Evento',
+    12 => 'Para modificar o borrar el evento seleccionarlo más abajo. Para crear uno nuevo seleccionar \'Nuevo Evento\' más arriba.',
+    13 => 'Título',
+    14 => 'Fecha de Inicio',
+    15 => 'Fecha de Finalización',
+    16 => 'Acceso Denegado',
+    17 => "No tiene permiso para acceder a este Evento. Todo intento de acceso será registrado. Por favor, vuelva a <a href=\"{$_CONF['site_admin_url']}/event.php\">la página de Administración de Eventos</a>.",
+    18 => 'Nuevo Evento',
+    19 => 'Página de Inicio - Administrador',
+    20 => 'grabar',
+    21 => 'cancelar',
+    22 => 'borrar',
+    23 => 'Bad start date.',
+    24 => 'Bad end date.',
+    25 => 'End date is before start date.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Notas Anteriores',
+    2 => 'Notas Siguientes',
+    3 => 'Modo',
+    4 => 'Modo de envio',
+    5 => 'Editor de Notas',
+    6 => 'No hay Noticias en el sistema',
+    7 => 'Autor',
+    8 => 'grabar',
+    9 => 'prever',
+    10 => 'cancelar',
+    11 => 'borrar',
+    12 => 'ID',
+    13 => 'Título',
+    14 => 'Sección',
+    15 => 'Fecha',
+    16 => 'Introducción',
+    17 => 'Texto',
+    18 => 'Accesos',
+    19 => 'Comentarios',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Listado de Notas',
+    23 => 'Para modificar o borrar una Nota seleccione el número de nota más abajo. Para ver la Nota seleccione el título de la misma. Para crear una nueva Nota seleccione \'Nueva Nota\' más arriba.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Vista Previa',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'File Upload Errors',
+    31 => 'Por favor complete los campos Autor, Introducción y Texto',
+    32 => 'Destacado',
+    33 => 'Sólo puede haber una Nota destacada',
+    34 => 'Borrador',
+    35 => 'Sí',
+    36 => 'No',
+    37 => 'Más de',
+    38 => 'Más en',
+    39 => 'Emails',
+    40 => 'Acceso Denegado',
+    41 => "Esta intentando acceder a una Nota para la cual no tiene derechos de acceso, por lo que podrá ver la Nota pero no editarla. Por favor vuelva a la <a href=\"{$_CONF['site_admin_url']}/story.php\">página de administración</a> cuando haya terminado.",
+    42 => "Esta intentando acceder a una Nota para la cual no tiene derechos de acceso. Por favor vuelva a la <a href=\"{$_CONF['site_admin_url']}/story.php\">página de administración</a>.",
+    43 => 'Nueva Nota',
+    44 => 'Página de Inicio - Administrador',
+    45 => 'Acceso',
+    46 => '<b>NOTA:</b> si modifica esta fecha por una futura, la Nota no será publicada hasta esa fecha. Esto también incluye el envió de titulares RDF(Resource Description Framework), la búsqueda y las estadísticas del sitio.',
+    47 => 'Imágenes',
+    48 => 'imagen',
+    49 => 'der',
+    50 => 'izq',
+    51 => 'Para insertar una imagen en la Nota debe incluir un texto con el formato [imageX], [imageX_right] o [imageX_left], donde X es el número de imagen dentro de la lista. NOTA: sólo puede utilizar las imágenes de la lista, sino la Nota no podrá ser grabada',
+    52 => 'Borrar',
+    53 => 'no fue usada.  Debe incluir esta imagen en la Introducción o el Texto para poder grabar los cambios',
+    54 => 'Imágenes no utilizadas',
+    55 => 'Los siguientes errores ocurriron al querer grabar su Nota. Por favor corrija los errores antes de grabar.',
+    56 => 'Mostrar Icono de Tema',
+    57 => 'View unscaled image',
+    58 => 'Story Management',
+    59 => 'Option',
+    60 => 'Enabled',
+    61 => 'Auto Archive',
+    62 => 'Auto Delete',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor de Secciones',
+    2 => 'ID',
+    3 => 'Nombre',
+    4 => 'Imagen',
+    5 => '(no use espacios)',
+    6 => 'Al borrar una Sección se borrarán todas sus Notas y Bloques asociados',
+    7 => 'Por favor complete los campos ID y Nombre',
+    8 => 'Administrador de Secciones',
+    9 => 'Para modificar o borrar una Sección elíjala en la lista de abajo. Para crear una nueva selecione \'Nueva Sección\' más arriba. Entre paréntesis figura el nivel de acceso que posee.',
+    10 => 'Nro. de Orden',
+    11 => 'Notas/Página',
+    12 => 'Acceso Denegado',
+    13 => "Esta intentando acceder a una Sección para la cual no tiene derechos de acceso. Por favor vuelva a la <a href=\"{$_CONF['site_admin_url']}/topic.php\">página de administración</a>.",
+    14 => 'Ordenamiento',
+    15 => 'alfabético',
+    16 => 'por defecto es',
+    17 => 'Nueva Sección',
+    18 => 'Página de Inicio - Administrador',
+    19 => 'grabar',
+    20 => 'cancelar',
+    21 => 'borrar',
+    22 => 'Default',
+    23 => 'make this the default topic for new story submissions',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor de Usuarios',
+    2 => 'ID',
+    3 => 'Nombre de Usuario',
+    4 => 'Nombre Completo',
+    5 => 'Password',
+    6 => 'Nivel de Seguridad',
+    7 => 'Dirección de Email',
+    8 => 'Págia de Inicio',
+    9 => '(no use espacios)',
+    10 => 'Por favor complete los campos Nombre de Usuario, Nombre Completo, Nivel de Seguridad y Dirección de Email',
+    11 => 'Administrador de Usuarios',
+    12 => 'Para modificar o borrar un Usuario elíjalo en la lista de abajo. Para crear uno nuevo selecione \'Nuevo Usuario\' más arriba.',
+    13 => 'Nivel de seguridad',
+    14 => 'Fecha de Registro',
+    15 => 'Nuevo Usuario',
+    16 => 'Página de Inicio - Administrador',
+    17 => 'Cambiar-Password',
+    18 => 'Cancelar',
+    19 => 'Borrar',
+    20 => 'Grabar',
+    21 => 'El Nombre de Uusario propuesto ya existe.',
+    22 => 'Error',
+    23 => 'Importación Masiva',
+    24 => 'Importación masiva de Usuarios',
+    25 => "Puede importar una lista de Usuarios a {$_CONF['site_name']}. El archivo con la lista de usuarios debe tener un registro por línea y los campos separados por TAB. Los campos deben estar en el siguiente orden: Nombre Completo, Nombre de Usuario, Dirección de Mail. A cada usuario agregado se le enviará por email un password generado al azar, que podrán cambiar al ingresar al sitio. Por favor, chequee bien el archivo de importación ya que los errores encontrados pueden llegar a necesaitar arreglos manuales.",
+    26 => 'Buscar',
+    27 => 'Limitar los resultados',
+    28 => 'Tildar el checkbox para borrar esta imagen',
+    29 => 'Ruta',
+    30 => 'Importar',
+    31 => 'Nuevos Usuarios',
+    32 => 'Proceso finalizado. Se importaron %d y hubieron %d fallos',
+    33 => 'enviar',
+    34 => 'Error: Debes especificar un archivo a enviar.',
+    35 => 'Last Login',
+    36 => '(never)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Aprobar',
+    2 => 'Borrar',
+    3 => 'Editar',
+    4 => 'Perfil',
+    10 => 'Título',
+    11 => 'Fecha Inicio',
+    12 => 'URL',
+    13 => 'Categoría',
+    14 => 'Fecha',
+    15 => 'Tema',
+    16 => 'Nombre del usuario',
+    17 => 'Nombre completo',
+    18 => 'Email',
+    34 => 'Página de administración',
+    35 => 'Envios de Notas',
+    36 => 'Envios de Links',
+    37 => 'Envios de Eventos',
+    38 => 'Enviar',
+    39 => 'No hay envios para moderar en este momento',
+    40 => 'Envios del Usuario'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Domingo',
+    2 => 'Lunes',
+    3 => 'Martes',
+    4 => 'Miércoles',
+    5 => 'Jueves',
+    6 => 'Viernes',
+    7 => 'Sábado',
+    8 => 'Agregar un Evento',
+    9 => 'Evento de Argos',
+    10 => 'Eventos para',
+    11 => 'Calendario Maestro',
+    12 => 'Mi Calendario',
+    13 => 'Enero',
+    14 => 'Febrero',
+    15 => 'Marzo',
+    16 => 'Abril',
+    17 => 'Mayo',
+    18 => 'Junio',
+    19 => 'Julio',
+    20 => 'Agosto',
+    21 => 'Septiembre',
+    22 => 'Octubre',
+    23 => 'Noviembre',
+    24 => 'Deciembre',
+    25 => 'Volver a ',
+    26 => 'Todo el día',
+    27 => 'Semana',
+    28 => 'Calendario Personal para',
+    29 => 'Calendario Público',
+    30 => 'borrar evento',
+    31 => 'Agregar',
+    32 => 'Evento',
+    33 => 'Fecha',
+    34 => 'Hora',
+    35 => 'Agregado rápido',
+    36 => 'Enviar',
+    37 => 'Disculpe, la opción de calendario personal no se encuentra habilitada en este sitio',
+    38 => 'Editor Personal de Eventos',
+    39 => 'Día',
+    40 => 'Semana',
+    41 => 'Mes'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']}  Mail Utility",
+    2 => 'De',
+    3 => 'Responder a',
+    4 => 'Título',
+    5 => 'Mensaje',
+    6 => 'Enviar a:',
+    7 => 'Todos los usuarios',
+    8 => 'Administrador',
+    9 => 'Opciones',
+    10 => 'HTML',
+    11 => '¡Mensaje Urgente!',
+    12 => 'Enviar',
+    13 => 'Reiniciar',
+    14 => 'Ignorar las preferencias del usuario',
+    15 => 'Error al mandar a: ',
+    16 => 'Se ha enviado con éxito a: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar otro mensaje</a>",
+    18 => 'Para',
+    19 => 'NOTA: si desea enviar un mensaje a todos los miembros del sitio, seleccione el grupo Logged-In Users en la lista.',
+    20 => "Se han enviado <successcount> mensajes con éxito y <failcount> han fallado.  Si desea, los detalles de cada envío figuran abajo. Tambien puede <a href=\"{$_CONF['site_admin_url']}/mail.php\">enviar otro mensaje</a> o volver a <a href=\"{$_CONF['site_admin_url']}/moderation.php\">la página de administración</a>.",
+    21 => 'Fallidos',
+    22 => 'Exitosos',
+    23 => 'No hubo envíos fallidos',
+    24 => 'No hubo envíos exitosos',
+    25 => '-- Selecciona Grupo --',
+    26 => 'Por favor, rellena todos los campos del formulario y selecciona un grupo de usuarios de la lista desplegable.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Instalar plugins puede dañar su instalación de Geeklog y, posiblemente, su sistema. Es importante que sólo instale plugins obtenidos de <a href="http://www.geeklog.net" target="_blank">Geeklog</a> ya que han sido testeados en varios entornos. Es también importante que entienda que la instalación del plugin requiere la ejecución de comandos del sistema que pueden traer problemas de seguridad. Aún con esta advertencia, no garantizamos el éxito de la instalación del plugin ni nos hacemos responsables por cualquier daño causado durante la instalación (o posterior a la misma). En otras palabras, instale el plugin a su propio riesgo. Las instrucciones particulares de instalación vienen dentro de cada plugin.',
+    2 => 'Advertencia de la Instalación del Plug-in',
+    3 => 'Formulario de instalación del Plug-in',
+    4 => 'Archivo del Plug-in',
+    5 => 'Listado de Plug-ins',
+    6 => 'Advertencia: ¡El Plug-in ya está instalado!',
+    7 => 'El plugin que intenta instalar ya existe. Por favor borre el plugin antes de reinstalarlo.',
+    8 => 'Falló el chequeo de compatibilidad del Plugin',
+    9 => 'Este Plug-in requiere una versión más nueva de Geeklog. Puede obtener una copia actualizada de <a href=http://www.geeklog.net>Geeklog</a> o instalar otra versión del Plug-in.',
+    10 => '<br><b>No hay Plugins instalados.</b><br><br>',
+    11 => 'Para modificar o borrar un plugin seleccione el número a la izquierda del mismo. Para acceder a la página de sus creadores seleccione en el título del plugin. Para instalar un nuevo plugin seleccione \'Nuevo Plugin\' más arriba.',
+    12 => 'no fue dado un nombre de plugin a la función plugineditor()',
+    13 => 'Editor de Plugins',
+    14 => 'Nuevo Plug-in',
+    15 => 'Página de Inicio - Administrador',
+    16 => 'Plug-in Name',
+    17 => 'Versión',
+    18 => 'Versión de Geeklog',
+    19 => 'Habilitado',
+    20 => 'Sí',
+    21 => 'No',
+    22 => 'Instalar',
+    23 => 'Guardar',
+    24 => 'Cancelar',
+    25 => 'Borrar',
+    26 => 'Nombre',
+    27 => 'Homepage',
+    28 => 'Versión',
+    29 => 'Versión de Geeklog',
+    30 => 'Borrar el Plug-in?',
+    31 => '¿Está seguro/a que desea borrar este Plug-in? Al hacerlo borrará todos los archivos, estructuras y datos asociados. Si está seguro/a seleccione "Borrar" en el formulario de abajo.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Code Version',
+    34 => 'Update',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'create feed',
+    2 => 'save',
+    3 => 'delete',
+    4 => 'cancel',
+    10 => 'Content Syndication',
+    11 => 'New Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Hours',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of hours.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Su password a sido enviado por mail y debe llegar en unos instantes. Por favor siga las indicaciones del mensaje. Gracias por usar {$_CONF['site_name']}",
+    2 => "Gracias por enviar su Nota a {$_CONF['site_name']}. La Nota se encuentra en proceso de aprobación. De ser aprobada podrá ser leida por todos los visitantes del sitio.",
+    3 => "Gracias por enviar su Link a {$_CONF['site_name']}. El Link se encuentra en proceso de aprobación. De ser aprobado podrá ser visto por todos los visitantes del sitio.",
+    4 => "Gracias por enviar su Evento a {$_CONF['site_name']}. El Evento se encuentra en proceso de aprobación. De ser aprobado podrá ser visto por todos los visitantes del sitio.",
+    5 => 'La información de su cuenta ha sido grabada con éxito.',
+    6 => 'Sus preferencias han sido grabadas con éxito.',
+    7 => 'Sus preferencias para Comentarios han sido grabadas con éxito.',
+    8 => 'Se ha descontectado con éxito.',
+    9 => 'Su Nota ha sido grabada con éxito.',
+    10 => 'La Nota ha sido borrada con éxito.',
+    11 => 'Su Bloque ha sido grabado con éxito.',
+    12 => 'El Bloque ha sido borrado con éxito.',
+    13 => 'Su Sección ha sido borrada con éxito.',
+    14 => 'La Sección junto con todas sus Notas y Bloques han sido borrado con éxito.',
+    15 => 'Su link fue grabado con éxito.',
+    16 => 'El link fue borrado con éxito.',
+    17 => 'Su Evento fue grabado con éxito.',
+    18 => 'El Evento fue borrado con éxito.',
+    19 => 'Su Encuesta fue grabada con éxito.',
+    20 => 'La encuesta fue borrada con éxito.',
+    21 => 'El nuevo Usuario fue grabado con éxito.',
+    22 => 'El Usuario fue borrado con éxito',
+    23 => 'Error al grabar el Evento en su Calendario. No fue pasado el ID.',
+    24 => 'El Evento fue grabado en su Calendario',
+    25 => 'No puede acceder a su Calendario Personal antes de conectarse con su usuario',
+    26 => 'El Evento fue borrado de su Calendario Personal',
+    27 => 'Mensaje enviado con éxito.',
+    28 => 'El Plug-In fue grabado con éxito',
+    29 => 'Disculpe, los Calendarios Personales no están habilitados en este sitio',
+    30 => 'Acceso Denegado',
+    31 => 'Disculpe, no tiene acceso a la página de administración de Notas. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    32 => 'Disculpe, no tiene acceso a la página de administración de Secciones. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    33 => 'Disculpe, no tiene acceso a la página de administración de Bloques. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    34 => 'Disculpe, no tiene acceso a la página de administración de Links. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    35 => 'Disculpe, no tiene acceso a la página de administración de Eventos. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    36 => 'Disculpe, no tiene acceso a la página de administración de Encuestas. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    37 => 'Disculpe, no tiene acceso a la página de administración de Usuarios. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    38 => 'Disculpe, no tiene acceso a la página de administración de Plug-ins. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    39 => 'Disculpe, no tiene acceso a la página de administración de Mail. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    40 => 'Mensaje del Sistema',
+    41 => 'Disculpe, no tiene acceso a la página de Reemplazo de Palabras. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    42 => 'La Palabra fue grabada con éxito.',
+    43 => 'La Palabra fue borrada con éxito.',
+    44 => 'El Plug-In fue instalado con éxito.',
+    45 => 'El Plug-In fue borrado con éxito.',
+    46 => 'Disculpe, no tiene acceso a la herramienta de Backup de la base de datos. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    47 => 'Esta función está disponible bajo *nix. Si estás usando *nix como tu sistema operativo, entonces tu caché ha sido limpiado con éxito. Si estás bajo Windows, necesitas buscar ficheros adodb_*.php y borrarlos manualmente.',
+    48 => "Gracias por registrarte como miembro en {$_CONF['site_name']}. Nuestro equipo comprobará tu solicitud. Si es aprobada, te será enviado tu password a la dirección email que has indicado.",
+    49 => 'Tu grupo ha sido grabado con éxito.',
+    50 => 'El grupo ha sido borrado con éxito.',
+    51 => 'This username is already in use. Please choose another one.',
+    52 => 'The email address provided does not appear to be a valid email address.',
+    53 => 'Your new password has been accepted. Please use your new password below to log in now.',
+    54 => 'Your request for a new password has expired. Please try again below.',
+    55 => 'An email has been sent to you and should arrive momentarily. Please follow the directions in the message to set a new password for your account.',
+    56 => 'The email address provided is already in use for another account.',
+    57 => 'Your account has been successfully deleted.',
+    58 => 'Your feed has been successfully saved.',
+    59 => 'The feed has been successfully deleted.',
+    60 => 'The plugin was successfully updated',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Acceso',
+    'ownerroot' => 'Propietario/Root',
+    'group' => 'Grupo',
+    'readonly' => 'Sólo-Lectura',
+    'accessrights' => 'Derechos de acceso',
+    'owner' => 'Propietario',
+    'grantgrouplabel' => 'Establecer los derechos del Grupo',
+    'permmsg' => 'NOTA: miembros son todos los miembros conectados y los usuarios anónimos en el sitio.',
+    'securitygroups' => 'Grupos de Seguridad',
+    'editrootmsg' => "Aunque usted sea un usuario con privilegios de administrator, usted no puede editar a un usuario <b>root</b> sin primeramente ser usted mismo un usuario <b>root</b>. Usted puede editar todo tipo de usuarios menos usuarios <b>root</b>. Note que todo inento ilegal de editar a un usuario <b>root</b> queda registrado por el server. Por favor vuelva atras a <a href=\"{$_CONF['site_admin_url']}/user.php\">La pagina de Administración de Usuarios</a>.",
+    'securitygroupsmsg' => 'Seleccione los checkboxes para los grupos que a usted quiere que el usuario pertenezca.',
+    'groupeditor' => 'Editor de Grupo',
+    'description' => 'Descripción',
+    'name' => 'Nombre',
+    'rights' => 'Derechos',
+    'missingfields' => 'Campos faltantes',
+    'missingfieldsmsg' => 'Debe ingresar un nombre y una descripción para el Grupo.',
+    'groupmanager' => 'Administrador de Grupos',
+    'newgroupmsg' => 'Para modificar o borrar un grupo seleccione el grupo aquí abajo. Para crear un grupo seleccione \'Nuevo Grupo\' aquí arriba. Tenga en cuenta que los Grupos del Sistema no pueden ser borrados.',
+    'groupname' => 'Nombre del Grupo',
+    'coregroup' => 'Grupo del Sistema? ',
+    'yes' => 'Sí',
+    'no' => 'No',
+    'corerightsdescr' => "Este grupo es un Grupo de Sistema de {$_CONF['site_name']}, y por ende sus derechos no pueden ser editados. A continuación se muestra una lista no editable de los derechos de acceso de este grupo.",
+    'groupmsg' => 'Los Grupos de Seguridad en este sitio son jerárquicos. Al agregar este grupo a cualquiera de los de abajo le estará dando los mismos derechos que esos grupos posean. De ser posible, se recomienda utilizar los grupos ya creados para dar los derechos a un nuevo grupo. Si necesita modificar los derechos del grupo, puede seleccionarlos en la sección llamada \'Derechos\'. Para agregar este grupo a cualquiera de los de abajo simplemente marque los grupos que quiera.',
+    'coregroupmsg' => "Este grupo es un Grupo de Sistema de {$_CONF['site_name']}, y por ende los grupos que pertenezcan a este grupo no podrán ser editados. A continuación se muestar una lista (no editable) de los grupos a los cuales este grupo pertenece.",
+    'rightsdescr' => 'El acceso de un grupo a ciertos privilegios puede ser dado directamente al grupo o a un grupo diferente al cual este grupo pertenezca. Los privilegios que usted vea debajo sin checkbox son los privilegios que fueron dados a este grupo porque ya pertenecia a otro grupo con ese privilegio. Los privilegios que veas debajo con checkbox son los derechos que pueden ser asignados directametne a este grupo.',
+    'lock' => 'Bloqueo',
+    'members' => 'Miembros',
+    'anonymous' => 'Anónimo',
+    'permissions' => 'Permisos',
+    'permissionskey' => 'R = lectura, E = edición, los permisos de edición suponen permisos de lectura',
+    'edit' => 'Editar',
+    'none' => 'Ninguno',
+    'accessdenied' => 'Acceso Denegado',
+    'storydenialmsg' => "No tiene acceso para ver esta Nota. Esto puede ser porque no es miembro de {$_CONF['site_name']}. Por favor <a href=users.php?mode=new>conviértase en un miembro</a> de {$_CONF['site_name']} para tener acceso.",
+    'eventdenialmsg' => "No tiene acceso para ver este Evento. Esto puede ser porque no es miembro de {$_CONF['site_name']}. Por favor <a href=users.php?mode=new>conviértase en un miembro</a> de {$_CONF['site_name']} para tener acceso.",
+    'nogroupsforcoregroup' => 'Este grupo no pertenece a ninguno de los otros grupos',
+    'grouphasnorights' => 'Este grupo no tiene acceso a las funciones de administración',
+    'newgroup' => 'Nuevo Grupo',
+    'adminhome' => 'Página de Administración',
+    'save' => 'Grabar',
+    'cancel' => 'Cancelar',
+    'delete' => 'borrar',
+    'canteditroot' => 'Ha intentado editar el Grupo Root. Como no es miembro del grupo no tiene acceso al mismo. Si cree que esto ha sido un error por favor contacte al administrador del sistema.',
+    'listusers' => 'List Users',
+    'listthem' => 'list',
+    'usersingroup' => 'Users in group "%s"',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Add',
+    'remove' => 'Remove',
+    'availmembers' => 'Available Members',
+    'groupmembers' => 'Group Members',
+    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Últimos 10 Back-ups',
+    'do_backup' => 'Hacer un Backup',
+    'backup_successful' => 'El back up de la base se ha realizado con éxito.',
+    'db_explanation' => 'Para crear un backup del sistema utilice el botón de abajo',
+    'not_found' => "Ruta incorrecta o la utilidad mysqldump no se puede ejecutar.<br>Comprueba la definición de <strong>\$_DB_mysqldump_path</strong> en config.php.<br>La variable está definida actualmente como: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Fallo de Backup: El tamaño era de 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} no existe o no es una carpeta",
+    'no_access' => "ERROR: La carpeta {$_CONF['backup_path']} no es accesible.",
+    'backup_file' => 'Archivo de backup',
+    'size' => 'Tamaño',
+    'bytes' => 'Bytes',
+    'total_number' => 'Total number of backups: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Inicio',
+    2 => 'Contacto',
+    3 => 'Publícate',
+    4 => 'Links',
+    5 => 'Encuentas',
+    6 => 'Calendario',
+    7 => 'Estadísticas',
+    8 => 'Personalizar',
+    9 => 'Buscar',
+    10 => 'búsqueda avanzada',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Error 404',
+    2 => 'Buah, he mirado en todos los lados pero no puedo encontrar <b>%s</b>.',
+    3 => "<p>Lo sentimos, pero el archivo que pides no existe. Por favor, consulta la <a href=\"{$_CONF['site_url']}\">página principal</a> o la <a href=\"{$_CONF['site_url']}/search.php\">página de búsqueda</a> para ver si puedes encontrar lo que has perdido."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Se requiere ingresar',
+    2 => 'Lo siento, para acceder a esta área tienes que estar autentificado como usuario.',
+    3 => 'Ingresar',
+    4 => 'Nuevo Usuario'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'The PDF feature has been disabled',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Loading your document.',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'Generate PDF!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/spanish.php 1.4.0sr5-1/cpanel-glprivate/language/spanish.php
--- 1.3.11sr1/cpanel-glprivate/language/spanish.php	2004-12-31 10:03:35.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/spanish.php	2006-08-08 02:39:06.000000000 -0500
@@ -151,7 +151,17 @@
     110 => 'Denuncia este mensaje al administrador de este sitio',
     111 => 'Ver la versin PDF',
     112 => 'Usuarios inscritos',
-    113 => 'Documentacin'
+    113 => 'Documentacin',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -318,7 +328,23 @@
     104 => 'Muestra el estado de quien est conectado(a)',
     105 => 'Muestra en el bloque Who\'s Online (usuarios conectados)',
     106 => 'Ubicacin',
-    107 => 'Mostrado en tu perfil pblico'
+    107 => 'Mostrado en tu perfil pblico',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -336,27 +362,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Enlaces',
-    2 => 'No hay enlaces para mostrar.',
-    3 => 'Agrega un enlace'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Voto guardado',
-    2 => 'Tu voto se ha computado para la encuesta',
-    3 => 'Vota',
-    4 => 'Encuestas en el sistema',
-    5 => 'Votos',
-    6 => 'Ver las otras preguntas de la encuesta'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -457,7 +462,11 @@
     54 => 'Resultados de Comentario',
     55 => 'la frase',
     56 => 'Y',
-    57 => 'O'
+    57 => 'O',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -487,7 +496,14 @@
     21 => 'Parece que en este sitio no hay Enlaces o que nadie los ha visitado.',
     22 => 'Las 10 Noticias ms enviadas por correo electrnico',
     23 => 'mensajes por correo electrnico',
-    24 => 'Parece que nadie ha enviado una noticia por correo electrnic en este sitio.'
+    24 => 'Parece que nadie ha enviado una noticia por correo electrnic en este sitio.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -640,7 +656,12 @@
     57 => 'Mueve el bloque abajo',
     58 => 'Mueve el bloque arriba',
     59 => 'Mueve el bloque a la derecha',
-    60 => 'Mueve el bloque a la izquierda'
+    60 => 'Mueve el bloque a la izquierda',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -675,35 +696,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Editor de Enlaces',
-    2 => '',
-    3 => 'Ttulo',
-    4 => 'URL',
-    5 => 'Categoria',
-    6 => '(incluir http://)',
-    7 => 'Otro',
-    8 => 'Cantidad de accesos',
-    9 => 'Descripcin',
-    10 => 'Tienes que completar los campos Ttulo, URL y Descripcin.',
-    11 => 'Administrador',
-    12 => 'Para modificar o borrar un Enlace seleccinalo ms abajo. Para crear uno nuevo selecciona \'Nuevo Enlace\' ms arriba.',
-    13 => 'Ttulo',
-    14 => 'Categora',
-    15 => 'URL',
-    16 => 'Acceso Denegado',
-    17 => "No tienes permiso para acceder a este Enlace. Todo intento de acceso ser registrado. Por favor, vuelve a <a href=\"{$_CONF['site_admin_url']}/link.php\">la pgina de Administracin de Enlaces</a>.",
-    18 => 'Nuevo Enlace',
-    19 => 'Pgina de Inicio - Administrador',
-    20 => 'Si es otra/o, especifica',
-    21 => 'guardar',
-    22 => 'cancelar',
-    23 => 'borrar'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -726,16 +718,16 @@
     17 => 'Texto',
     18 => 'Accesos',
     19 => 'Comentarios',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Listado de Noticias',
     23 => 'Para modificar o borrar una Noticia selecciona el nmero de Noticia ms abajo. Para ver la Noticia selecciona el ttulo de la misma. Para crear una nueva Noticia selecciona \'Enviar Noticia\' ms arriba.',
     24 => 'La ID que has elegido para este tema ya est siendo utilizada. Por favor, utiliza otra ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Lectura Previa',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Errores al Subir Archivos',
     31 => 'Por favor rellena los campos de Autor, Ttulo y Texto',
     32 => 'Destacada',
@@ -757,7 +749,7 @@
     48 => 'imagen',
     49 => 'der',
     50 => 'izq',
-    51 => 'Para insertar una imagen en la Noticia tienes que incluir un texto con el formato [imagenX], [imagenX_der] o [imagenX_izq], donde X es el nmero de imagen dentro de la lista. NOTA: slo puedes utilizar las imgenes de la lista, si no la Noticia no se podr guardar',
+    51 => 'Para insertar una imagen en la Noticia tienes que incluir un texto con el formato [imageX], [imageX_right] o [imageX_left], donde X es el nmero de imagen dentro de la lista. NOTA: slo puedes utilizar las imgenes de la lista, si no la Noticia no se podr guardar',
     52 => 'Borrar',
     53 => 'no se ha utilizado.  Tienes que incluir esta imagen en la Introduccin o el Texto para poder guardar los cambios',
     54 => 'Imgenes no utilizadas',
@@ -768,39 +760,30 @@
     59 => 'Opcin',
     60 => 'Habilitado',
     61 => 'Auto archivo',
-    62 => 'Auto borrado'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Modo',
-    2 => 'Por favor teclea una pregunta y como mnimo una respuesta.',
-    3 => 'Fecha de creacin',
-    4 => 'Encuesta %s guardada',
-    5 => 'Editar la Encuesta',
-    6 => 'Identificacin',
-    7 => '(no utilices espacios)',
-    8 => 'Aparece en la Portada',
-    9 => 'Pregunta',
-    10 => 'Respuestas / Votos',
-    11 => 'Hubo un error al buscar los datos para las respuesta de la Encuesta %s',
-    12 => 'Hubo un error al buscar los datos para la pregunta de la Encuesta %s',
-    13 => 'Crear Encuesta',
-    14 => 'guardar',
-    15 => 'cancelar',
-    16 => 'borrar',
-    17 => 'Por favor teclea un nombre de identificacin (ID) de la encuesta',
-    18 => 'Listado de Encuestas',
-    19 => 'Para modificar o borrar una Encuesta eljela en la lista de abajo. Para crear una nueva, selecciona \'Nueva Encuesta\' ms arriba.',
-    20 => 'Votantes',
-    21 => 'Acceso Denegado',
-    22 => "Ests intentando acceder a una Encuesta a la que no tienes derechos de acceso. Por favor vuelve a la <a href=\"{$_CONF['site_admin_url']}/poll.php\">pgina de administracin.",
-    23 => 'Nueva Encuesta',
-    24 => 'Pgina de Inicio - Administrador',
-    25 => 'S',
-    26 => 'No'
+    62 => 'Auto borrado',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -832,7 +815,10 @@
     23 => 'convirtelo en el tema por defecto para nuevas colaboraciones',
     24 => '(*)',
     25 => 'Archiva el tema',
-    26 => 'convirtelo en el tema por defecto para noticias archivadas. Slo se permite un tema.'
+    26 => 'convirtelo en el tema por defecto para noticias archivadas. Slo se permite un tema.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -874,7 +860,18 @@
     33 => 'enviar',
     34 => 'Error: Tienes que especificar el archivo que quieres subir.',
     35 => 'Ultimo acceso',
-    36 => '(nunca)'
+    36 => '(nunca)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1019,7 +1016,11 @@
     31 => 'Ests seguro(a) que quieres borrar este Plug-in? Al hacerlo borrars todos los archivos, estructuras y datos asociados. Si ests seguro/a selecciona "Borrar" en el formulario de abajo.',
     32 => '<p><b>Error, la etiqueta AutoLink no tiene el formato correcto</b></p>',
     33 => 'Versin del cdigo',
-    34 => 'Actualizacin'
+    34 => 'Actualizacin',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1062,7 +1063,15 @@
     39 => 'Por favor, rellena el Ttulo, Descripcin y Nombre del archivo de la transmisin.',
     40 => 'Por favor incluye el nmero de entradas o nmero de horas.',
     41 => 'Enlaces',
-    42 => 'Eventos'
+    42 => 'Eventos',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1129,7 +1138,21 @@
     58 => 'Tu transmisin se ha guardado satisfactoriamente.',
     59 => 'Tu transmisin se ha borrado satisfactoriamente.',
     60 => 'El plugin se ha actualizado satisfactoriamente',
-    61 => 'Plugin %s: marcador de mensaje desconocido'
+    61 => 'Plugin %s: marcador de mensaje desconocido',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1189,7 +1212,16 @@
     'availmembers' => 'Miembros disponibles',
     'groupmembers' => 'Miembros del grupo',
     'canteditgroup' => 'Para editar este grupo, tienes que ser un miembro del grupo. Por favor, contacta con el administrador del sistema si crees que esto es un error.',
-    'cantlistgroup' => 'Para ver los miembros de este grupo, tienes que ser un miembro t mismo(a). Por favor contacta con el administrador del sistema i crees que esto es un error.'
+    'cantlistgroup' => 'Para ver los miembros de este grupo, tienes que ser un miembro t mismo(a). Por favor contacta con el administrador del sistema i crees que esto es un error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1199,7 +1231,6 @@
     'last_ten_backups' => 'ltimas 10 copias de seguridad',
     'do_backup' => 'Hacer una copia de seguridad',
     'backup_successful' => 'La copia de seguridad de la base de datos se ha realizado satisfactoriamente.',
-    'no_backups' => 'No hay copias de seguridad en el sistema',
     'db_explanation' => 'Para crear una copia de seguridad del sistema utiliza el botn de abajo',
     'not_found' => "Ruta incorrecta o la utilidad mysqldump no se puede ejecutar.<br>Comprueba la definicin de <strong>\$_DB_mysqldump_path</strong> en config.php.<br>La variable est definida actualmente como: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Fallo de la copia de seguridad: El tamao era de 0 bytes',
@@ -1223,7 +1254,8 @@
     7 => 'Estadsticas',
     8 => 'Personalizacin',
     9 => 'Bsqueda',
-    10 => 'Bsqueda avanzada'
+    10 => 'Bsqueda avanzada',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1265,4 +1297,210 @@
     14 => 'El PDF que has solicitado o no existe o has intentado acceder a un archivo ilegalmente.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/spanish_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/spanish_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/spanish_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/spanish_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1506 @@
+<?php
+
+###############################################################################
+# This is the Spanish language page for GeekLog!
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Autor:',
+    2 => 'lectura del artículo completo',
+    3 => 'comentarios',
+    4 => 'Edición',
+    5 => 'Vota',
+    6 => 'Resultados',
+    7 => 'Resultados de la encuesta',
+    8 => 'votos',
+    9 => 'Funciones del(a) Administrador(a):',
+    10 => 'Propuestas',
+    11 => 'Noticias',
+    12 => 'Bloques',
+    13 => 'Secciones',
+    14 => 'Enlaces',
+    15 => 'Eventos',
+    16 => 'Encuestas',
+    17 => 'Usuarios(as)',
+    18 => 'Búsqueda SQL',
+    19 => 'Salida',
+    20 => 'Información del(a) usuario(a):',
+    21 => 'Nombre del(a) usuario(a)',
+    22 => 'Identidad (ID) del(a) usuario(a)',
+    23 => 'Nivel de Seguridad',
+    24 => 'Anónimo',
+    25 => 'Responder',
+    26 => 'Los siguientes comentarios son de la persona que los haya enviado. Este sitio no se hace responsable de las opiniones expresadas por los participantes en los foros y secciones de comentarios, y el hecho de publicar las mismas no significa que esté de acuerdo con ellas.',
+    27 => 'Comentario más reciente',
+    28 => 'Borrar',
+    29 => 'No hay comentarios de los usuarios.',
+    30 => 'Noticias anteriores',
+    31 => 'Etiquetas de HTML permitidas:',
+    32 => 'Error, usuario inválido',
+    33 => 'Error, no fue posible escribir el registro',
+    34 => 'Error',
+    35 => 'Salir',
+    36 => 'sobre',
+    37 => 'No hay noticias del(a) usuario(a)',
+    38 => 'Sindicación del contenido',
+    39 => 'Actualización',
+    40 => 'Tienes <tt>register_globals = Off</tt> en tu <tt>php.ini</tt>. Sin embargo, Geeklog requiere que <tt>register_globals</tt> esté <strong>on</strong>. Antes de continuar, por favor set it to <strong>on</strong> y restart your web server.',
+    41 => 'Usuarios invitados',
+    42 => 'Escrito por:',
+    43 => 'Responde a',
+    44 => 'Regresa',
+    45 => 'Número de Error MySQL',
+    46 => 'Mensaje de Error MySQL',
+    47 => 'Funciones del(a) usuario(a)',
+    48 => 'Mi cuenta',
+    49 => 'Mis Preferencias',
+    50 => 'Error en una frase SQL',
+    51 => 'ayuda',
+    52 => 'Nuevo',
+    53 => 'Sección de Administración',
+    54 => 'No se ha podido abrir el archivo.',
+    55 => 'Error en',
+    56 => 'Vota',
+    57 => 'Contraseña',
+    58 => 'Identificación',
+    59 => "¿No tienes una cuenta todavía? <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Inscríbete</a>",
+    60 => 'Agrega un comentario',
+    61 => 'Crea una cuenta nueva',
+    62 => 'palabras',
+    63 => 'Preferencias de Noticias',
+    64 => 'Envíala a un(a) amigo(a)',
+    65 => 'Ver la versión para imprimir',
+    66 => 'Mi Calendario',
+    67 => 'Bienvenido(a) a ',
+    68 => 'Página Inicial',
+    69 => 'contacto',
+    70 => 'buscar',
+    71 => 'envia la noticia',
+    72 => 'enlaces a otras webs',
+    73 => 'encuestas anteriores',
+    74 => 'calendario',
+    75 => 'búsqueda avanzada',
+    76 => 'estadísticas del sitio',
+    77 => 'Plugins',
+    78 => 'Próximos Eventos',
+    79 => 'Novedades',
+    80 => 'noticias',
+    81 => 'noticia',
+    82 => 'horas',
+    83 => 'COMENTARIOS',
+    84 => 'ENLACES',
+    85 => 'últimas 48 horas',
+    86 => 'No hay comentarios nuevos',
+    87 => 'últimas 2 semanas',
+    88 => 'No hay enlaces nuevos',
+    89 => 'No hay próximos eventos',
+    90 => 'Página Inicial',
+    91 => 'Esta página fue creada en',
+    92 => 'segundos',
+    93 => 'Derechos de autor',
+    94 => 'Todas las marcas y derechos en esta página son de sus respectivos dueños.',
+    95 => 'Otra web montada con',
+    96 => 'Grupos',
+    97 => 'Lista de Palabras',
+    98 => 'Plug-ins',
+    99 => 'NOTICIAS',
+    100 => 'No hay noticias nuevas',
+    101 => 'Mis Eventos',
+    102 => 'Eventos del sitio',
+    103 => 'Copias de seguridad de la base de datos',
+    104 => 'por',
+    105 => 'Usuarios del Correo',
+    106 => 'Lecturas',
+    107 => 'Comprobación de la versión de GL',
+    108 => 'Limpia la copia de visitas (Caché)',
+    109 => 'Denuncia los abusos',
+    110 => 'Denuncia este mensaje al administrador de este sitio',
+    111 => 'Ver la versión PDF',
+    112 => 'Usuarios inscritos',
+    113 => 'Documentación',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Calendario de Eventos',
+    2 => 'Disculpa, no hay eventos para mostrar.',
+    3 => 'Cuando',
+    4 => 'Donde',
+    5 => 'Descripción',
+    6 => 'Agrega un evento',
+    7 => 'Próximos eventos',
+    8 => 'Al agregar este evento a tu calendario podrás ver rápidamente los eventos que te interesen. Para ello elije "Mi Calendario" en el área de Funciones del(a) usuario(a).',
+    9 => 'Agregar a Mi Calendario',
+    10 => 'Sacar de Mi Calendario',
+    11 => "Agregando el Evento al Calendario de {$_USER['username']}",
+    12 => 'Evento',
+    13 => 'Empieza',
+    14 => 'Termina',
+    15 => 'Volver al Calendario'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Agrega un Comentario',
+    2 => 'Tipo de envio',
+    3 => 'Salida',
+    4 => 'Crea una cuenta',
+    5 => 'Nombre del(a) usuario(a)',
+    6 => 'Este sitio requiere que tengas una cuenta para enviar un comentario. Si ya la tienes, ingresa el nombre de usuario y la contraseña. Si no tienes una cuenta, puedes crear una nueva en el formulario de abajo',
+    7 => 'Tu último comentario fue hace ',
+    8 => " segundos. Este sitio requiere al menos {$_CONF['commentspeedlimit']} segundos entre comentarios",
+    9 => 'Comentario',
+    10 => 'Envia la denuncia',
+    11 => 'Envia el comentario',
+    12 => 'Por favor completa el Título y Comentario, ya que son datos necesarios para enviar un comentario.',
+    13 => 'Tu Información',
+    14 => 'Lectura Previa',
+    15 => 'Denuncia este mensaje',
+    16 => 'Título',
+    17 => 'Error',
+    18 => 'Cosas Importantes',
+    19 => 'Por favor intenta mantener el tema de la noticia.',
+    20 => 'Intenta responder a los comentarios de los demás en lugar de comenzar una nueva discusión.',
+    21 => 'Lée los comentarios enviados para evitar comentarios duplicados.',
+    22 => 'Utiliza un título claro que describa el contenido de tu mensaje.',
+    23 => 'Tu dirección de correo electrónico NO será divulgada.',
+    24 => 'Usuario Anónimo',
+    25 => '¿Estas seguro(a) que quieres denunciar este mensaje al administrador del sitio?',
+    26 => '%s ha denunciado el siguiente comentario abusivo:',
+    27 => 'Denuncia de abuso'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Perfil del(a) usuario(a) para',
+    2 => 'Nombre del(a) usuario(a)',
+    3 => 'Nombre Completo',
+    4 => 'Contraseña',
+    5 => 'Correo electrónico',
+    6 => 'Página personal',
+    7 => 'Biografía',
+    8 => 'Clave PGP',
+    9 => 'Guardar la Información',
+    10 => 'Últimos 10 comentarios',
+    11 => 'No hay comentarios',
+    12 => 'Preferencias del(a) usuario(a) para',
+    13 => 'Enviar un resumen cada noche por correo electrónico',
+    14 => 'Esta contraseña se genera al azar. Se recomienda que cambies la contraseña cuanto antes. Para cambiar la contraseña conecta al sitio con tu nombre de usuario.',
+    15 => "Tu cuenta en {$_CONF['site_name']} se ha creado satisfactoriamente. Para poder utilizarla tienes que ingresar utilizando los datos dados más abajo. Guarda este mensaje para futuras referencias.",
+    16 => 'Información de tu cuenta',
+    17 => 'La cuenta no existe',
+    18 => 'La dirección de correo electrónico ingresada no parece ser válida.',
+    19 => 'el(la) usuario(a) y la dirección de correo electrónico ingresados ya existen',
+    20 => 'La dirección de correo electrónico ingresada no parece ser válida.',
+    21 => 'Error',
+    22 => "Inscríbete en {$_CONF['site_name']}!",
+    23 => "La creación de una cuenta te dará las ventajas de los usuarios de {$_CONF['site_name']} y te permitirá enviar noticias, comentarios, etc. Si no tienes una cuenta sólo lo podrás hacer anónimamente. Queremos remarcar que tu dirección de correo electrónico <b><i>nunca</i></b> será publicada en este sitio.",
+    24 => 'Tu Contraseña se enviará a la dirección de correo electrónico que ingreses.',
+    25 => '¿Olvidaste tu contraseña?',
+    26 => 'Ingresa <em>o</em> tu nombre de usuario <em>o</em> la dirección de correo electrónico que utilizaste para inscribirte y pulsa Enviar Contraseña. Te llegarán por correo electrónico las instrucciones para crear una contraseña nueva a la dirección que figura en el archivo,.',
+    27 => '¡Inscríbete ahora!',
+    28 => 'Enviar la contraseña por correo electrónico',
+    29 => 'desconectado(a) de',
+    30 => 'conectado(a) a',
+    31 => 'La función que has elegido requiere que estés conectado(a)',
+    32 => 'Firma',
+    33 => 'No se mostrará públicamente',
+    34 => 'Este es tu nombre de verdad',
+    35 => 'Ingresa la contraseña para cambiarla',
+    36 => 'Comienza con http://',
+    37 => 'Se aplica a tus comentarios',
+    38 => '¡Todo sobre Ti! Todos van a poder leer esto.',
+    39 => 'Tu clave pública de PGP para compartir',
+    40 => 'Sin iconos de secciones',
+    41 => 'Intención de moderar',
+    42 => 'Formato de fecha',
+    43 => 'Cantidad máxima de noticias',
+    44 => 'Sin recuadros',
+    45 => 'Mostrar las preferencias de',
+    46 => 'Elementos excluídos de',
+    47 => 'Configuración de Noticias para',
+    48 => 'Secciones',
+    49 => 'Sin iconos en las noticias',
+    50 => 'No selecciones esto si no estás interesado',
+    51 => 'Sólo las noticias nuevas',
+    52 => 'El valor por defecto es',
+    53 => 'Recepción cada noche las noticias del día',
+    54 => 'Selecciona las Secciones y Autores que no quieres ver.',
+    55 => 'Si no seleccionas ninguna significa que quieres la selección por defecto. De seleccionar, selecciona todas las de tu interés ya que las opciones por defecto ya no serán tomadas en cuenta. Las opciones por defecto se muestran resaltadas.',
+    56 => 'Autores',
+    57 => 'Modo de Presentación',
+    58 => 'Orden de clasificación',
+    59 => 'Límite por Comentario',
+    60 => '¿Cómo quieres ver los comentarios?',
+    61 => '¿Primero los más antiguos o los más recientes?',
+    62 => 'El valor por defecto es 100',
+    63 => "Gracias por utilizar {$_CONF['site_name']}. Te hemos enviado tu contraseña por correo electrónico y llegará en unos instantes. Por favor sigue las instrucciones del mensaje.",
+    64 => 'Preferencias para los comentarios de',
+    65 => 'Intenta reconectarte otra vez',
+    66 => "Los datos ingresados no son válidos. Intenta reconectar abajo. ¿Eres un <a href=\"{$_CONF['site_url']}/users.php?mode=new\">usuario(a) nuevo(a)</a>?",
+    67 => 'Miembro desde',
+    68 => 'Recuérdame durante',
+    69 => '¿Cuánto tiempo tenemos que mantener tu nombre de usuario(a) en activo después de conectar?',
+    70 => "Personaliza la apariencia y el contenido de {$_CONF['site_name']}",
+    71 => "Una de las grandes virtudes de {$_CONF['site_name']} es que puedes personalizar el contenido que recibes y la apariencia del sitio. Para poder lograr esto tienes primero que <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> inscribirte</a> en {$_CONF['site_name']}. Si ya eres miembro, utiliza el formulario de la izquierda para conectarte.",
+    72 => 'Tema',
+    73 => 'Idioma',
+    74 => '¡Cambia la apariencia de esta página!',
+    75 => 'Secciones enviadas por correo electrónico a',
+    76 => 'Si seleccionas una o más Secciones de la lista de abajo, todas las noticias nuevas de esas Secciones te serán enviadas por correo electrónico al finalizar el día.',
+    77 => 'Foto',
+    78 => '¡Añade una foto tuya!',
+    79 => 'Activa esto para borrar esta imagen',
+    80 => 'Identificación',
+    81 => 'Envia  por correo electrónico',
+    82 => 'Últimas 10 noticias para el(la) usuario(a)',
+    83 => 'Estadísticas de noticias para el(la) usuario(a)',
+    84 => 'Número total de artículos:',
+    85 => 'Número total de comentarios:',
+    86 => 'Buscar todos los comentarios de',
+    87 => 'Tu nombre de acceso',
+    88 => "Alguien (posiblemente tú mismo(a)) ha solicitado una contraseña nueva para tu cuenta  \"%s\" en {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nSi quieres de verdad que se lleve a cabo esta acción, por favor pulsa en el enlace siguiente:\n\n",
+    89 => "si no quieres que se lleve a cabo esta acción, simplemente ignora este mensaje y la petición sera desatendida (tu contraseña no se modificará).\n\n",
+    90 => 'Puedes ingresar abajo una contraseña nueva para tu cuenta. Por favor, toma nota que la contraseña antigua seguirá siendo válida hasta que envies este formulario.',
+    91 => 'Crea una contraseña nueva',
+    92 => 'Ingresa una contraseña nueva',
+    93 => 'Tu última petición de una contraseña nueva fue hace %d segundos. Este sitio requiere como mínimo %d segundos entre peticiones de contraseñas.',
+    94 => 'Borra la cuenta "%s"',
+    95 => 'Pulsa abajo el botón "borrar la cuenta" para retirar tu cuenta de nuestra base de datos. Por favor, toma nota que cualquier noticia o comentario que hayas contribuído bajo esta cuenta <strong>no</strong> se borrará, sino que aparecerá como "Anónimo".',
+    96 => 'Borra la cuenta',
+    97 => 'Confirma el borrado de la Cuenta',
+    98 => '¿Estás seguro(a) que quieres borrar tu cuenta? Al hacerlo así, no podrás acceder a este sitio otra vez (a no ser que crees una cuenta nueva). Si estás seguro(a), pulsa "borrar cuenta" de nuevo en el formulario de abajo.',
+    99 => 'Opciones de privacidad para',
+    100 => 'Correo del(a) Administrador(a)',
+    101 => 'Permite el correo de los(as) Administradores(as) del sitio',
+    102 => 'Correo de los usuarios',
+    103 => 'Permite el correo de otros usuarios',
+    104 => 'Muestra el estado de quien está conectado(a)',
+    105 => 'Muestra en el bloque Who\'s Online (usuarios conectados)',
+    106 => 'Ubicación',
+    107 => 'Mostrado en tu perfil público',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'No hay novedades para mostrar',
+    2 => 'No hay nuevas noticias para mostrar. Puede que no haya novedades para esta Sección o que tus preferencias sean muy restrictivas.',
+    3 => 'para la Sección %s',
+    4 => 'Noticia del Día',
+    5 => 'Siguiente',
+    6 => 'Anterior',
+    7 => 'Primero',
+    8 => 'Ultimo'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Hubo un error al enviar tu mensaje. Inténtalo de nuevo por favor.',
+    2 => 'El mensaje fue enviado satisfactoriamente.',
+    3 => 'Por favor asegúrate de ingresar una dirección de correo electrónico válida en el campo \'Responder a\'.',
+    4 => 'Por favor completa los campos Remitente, Responder a, Título y Mensaje',
+    5 => 'Error: No existe el(la) usuario(a).',
+    6 => 'Hubo un error.',
+    7 => 'Perfil de usuario(a) de',
+    8 => 'Nombre del(a) usuario(a)',
+    9 => 'URL del(a) usuario(a)',
+    10 => 'Envia un mensaje a',
+    11 => 'Remitente:',
+    12 => 'Responde a:',
+    13 => 'Título:',
+    14 => 'Mensaje:',
+    15 => 'No se traducirá el código HTML.',
+    16 => 'Envia el mensaje',
+    17 => 'Enviar a un(a) amigo(a)',
+    18 => 'Destinatario(a)',
+    19 => 'Dirección de correo electrónico de destino',
+    20 => 'Remitente',
+    21 => 'Responde a',
+    22 => 'Es necesario rellenar todos los campos',
+    23 => "Este correo electrónico te lo envió %s en %s porque pensó que podría interesarte esta noticia en  {$_CONF['site_url']}. Esto no es SPAM (correo basura) y las direcciones de correo electrónico involucradas en este envío no se han guardado para su uso posterior.",
+    24 => 'Comentario sobre esta noticia en',
+    25 => 'Tienes que conectarte para utilizar esta herramienta. Este control se realiza para evitar el mal uso del sistema.',
+    26 => 'Este formulario te permitirá enviar un correo electrónico al usuario seleccionado. Todos los campos son necesarios.',
+    27 => 'Mensaje corto',
+    28 => '%s escribió: ',
+    29 => "Este es el resúmen diario de {$_CONF['site_name']} para ",
+    30 => ' Noticias diarias para ',
+    31 => 'Título',
+    32 => 'Fecha',
+    33 => 'Lee la Noticia completa en',
+    34 => 'Fin del mensaje',
+    35 => 'Lo siento, este usuario prefiere no recibir mensajes.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Búsqueda Avanzada',
+    2 => 'Palabras Clave',
+    3 => 'Sección',
+    4 => 'Todo',
+    5 => 'Tipo',
+    6 => 'noticias',
+    7 => 'Comentarios',
+    8 => 'Autores',
+    9 => 'Todo',
+    10 => 'Búsqueda',
+    11 => 'Resultados de la búsqueda',
+    12 => 'resultados',
+    13 => 'Búsqueda de noticias: No ha habido coincidencias',
+    14 => 'No se han encontrado coincidencias al buscar: ',
+    15 => 'Por favor inténtalo de nuevo.',
+    16 => 'Título',
+    17 => 'Fecha',
+    18 => 'Autor',
+    19 => "Busca en toda la base de datos de <B>{$_CONF['site_name']}</B>",
+    20 => 'Fecha',
+    21 => 'a',
+    22 => '(Formato de fecha DD-MM-YYYY)',
+    23 => 'Lecturas',
+    24 => 'Encontrados %d elementos',
+    25 => 'coincidencias con',
+    26 => 'elementos en ',
+    27 => 'segundos',
+    28 => 'No se han encontrado coincidencias en Noticias y Comentarios',
+    29 => 'Resultados de las Noticias y Comentarios',
+    30 => 'Ningún enlace coincide con tu búsqueda',
+    31 => 'Este plug-in no ha dado resultados',
+    32 => 'Evento',
+    33 => 'URL',
+    34 => 'Ubicación',
+    35 => 'Todo el dia',
+    36 => 'Ningún evento coincidió con tu búsqueda',
+    37 => 'Resultados de Eventos',
+    38 => 'Resultados de Enlaces',
+    39 => 'Enlaces',
+    40 => 'Eventos',
+    41 => 'Tu búsqueda  tiene que tener al menos 3 letras.',
+    42 => 'Por favor utiliza una fecha formateada como YYYY-MM-DD (año-mes-día).',
+    43 => 'frase exacta',
+    44 => 'todas estas palabras',
+    45 => 'cualquiera de estas palabras',
+    46 => 'Siguiente',
+    47 => 'Anterior',
+    48 => 'Autor(a)',
+    49 => 'Fecha',
+    50 => 'Lecturas',
+    51 => 'Enlace',
+    52 => 'Ubicación',
+    53 => 'Resultados de la noticia',
+    54 => 'Resultados de Comentario',
+    55 => 'la frase',
+    56 => 'Y',
+    57 => 'O',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Estadísticas del sitio',
+    2 => 'Total de accesos al sistema',
+    3 => 'Noticias(Comentarios) en el sistema',
+    4 => 'Encuestas(Respuestas) en el sistema',
+    5 => 'Enlaces(Visitados) en el sistema',
+    6 => 'Eventos en el sistema',
+    7 => 'Las 10 Noticias más leídas',
+    8 => 'Título de la Noticia',
+    9 => 'Accesos',
+    10 => 'Parece que no hay noticias en este sitio o que nadie las ha visto todavía.',
+    11 => 'Las 10 noticias más comentadas',
+    12 => 'Comentarios',
+    13 => 'Parece que no hay noticias en este sitio o que nadie ha escrito un comentario sobre ellas.',
+    14 => 'Las 10 Encuestas con más votos',
+    15 => 'Pregunta',
+    16 => 'Votos',
+    17 => 'Parece que no hay encuestas en este sitio o que nadie ha votado.',
+    18 => 'Los 10 Enlaces más visitados',
+    19 => 'Enlaces',
+    20 => 'Visitas',
+    21 => 'Parece que en este sitio no hay Enlaces o que nadie los ha visitado.',
+    22 => 'Las 10 Noticias más enviadas por correo electrónico',
+    23 => 'mensajes por correo electrónico',
+    24 => 'Parece que nadie ha enviado una noticia por correo electrónic en este sitio.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Relacionado con esto...',
+    2 => 'Envíalo a un(a) amigo(a)',
+    3 => 'Versión para imprimir',
+    4 => 'Opciones de la Noticia',
+    5 => 'Formato de noticia en PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Para enviar %s tienes que estar conectado(a) como usuario(a).',
+    2 => 'Ingresa',
+    3 => 'Usuario(a) Nuevo(a)',
+    4 => 'Agrega un Evento',
+    5 => 'Agrega un Enlace',
+    6 => 'Agrega una noticia',
+    7 => 'Tienes que conectarte',
+    8 => 'Envío de colaboraciones',
+    9 => 'Cuando envias información a este sitio te pedimos que tomes en cuenta los siguientes consejos: <ul><li>Completa todos los campos requeridos<li>Comprueba bien los URL\'s<li>Facilita información completa y precisa</ul>',
+    10 => 'Título',
+    11 => 'Enlace',
+    12 => 'Fecha de inicio',
+    13 => 'Fecha de finalización',
+    14 => 'Lugar',
+    15 => 'Descripción',
+    16 => 'Si es otra, especifica',
+    17 => 'Categoría',
+    18 => 'Otra',
+    19 => 'Léelo antes',
+    20 => 'Error: Falta la Categoría',
+    21 => 'Por favor, cuando selecciones \'Otra\' completa el nombre de la categoría',
+    22 => 'Error: Faltan Campos',
+    23 => 'Por favor completa todo los campos del formulario. Es necesario rellenar todos los campos.',
+    24 => 'Colaboración guardada',
+    25 => 'Tus colaboraciones se han guardado satisfactoriamente.',
+    26 => 'Límite de Velocidad',
+    27 => 'Nombre del(a) usuario(a)',
+    28 => 'Sección',
+    29 => 'Noticia',
+    30 => 'Tu última colaboración fue hace ',
+    31 => " segundos.  Este sitio requiere como mínimo {$_CONF['speedlimit']} segundos entre envíos",
+    32 => 'Lectura Previa',
+    33 => 'Lectura previa de la noticia',
+    34 => 'Salida',
+    35 => 'No se permiten etiquetas de HTML',
+    36 => 'Formato del texto',
+    37 => "Los eventos enviados a {$_CONF['site_name']} se agregan al Calendario Público, donde el resto de los usuarios pueden agregarlo a su Calendario Personal. Esta función <b>NO</b> está pensada para que guardes tus eventos personales como cumpleaños, citas, etc.<br><br>Una vez enviado, el evento será evaluado por los Administradores. De ser aprobado, se mostrará en el Calendario Público",
+    38 => 'Agrega un evento a',
+    39 => 'Calendario Público',
+    40 => 'Calendario Personal',
+    41 => 'Hora de finalización',
+    42 => 'Hora de inicio',
+    43 => 'Evento que dura todo el día',
+    44 => 'Dirección, línea 1',
+    45 => 'Dirección, línea 2',
+    46 => 'Ciudad/Localidad',
+    47 => 'Provincia/Estado',
+    48 => 'Código Postal',
+    49 => 'Tipo de Evento',
+    50 => 'Edita los tipos de eventos',
+    51 => 'Lugar',
+    52 => 'Borrar',
+    53 => 'Crea una cuenta'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Se requiere verificación',
+    2 => '¡Acceso denegado! La información de ingreso es incorrecta',
+    3 => 'La contraseña ingresada es inválida',
+    4 => 'Usuario(a):',
+    5 => 'Contraseña:',
+    6 => 'Todo acceso a las partes administrativas queda registrado y revisado.<br>Esta página es para uso exclusivo del personal autorizado.',
+    7 => 'Identificación'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'No tienes derechos de Administrador(a)',
+    2 => 'No tienes los derechos suficientes para editar este bloque.',
+    3 => 'Editor de Bloques',
+    4 => 'Ha habido un problema con la lectura deesta transmisión (ver error.log para más detalles).',
+    5 => 'Título del Bloque',
+    6 => 'Sección',
+    7 => 'Todo',
+    8 => 'Nivel de seguridad del bloque',
+    9 => 'Orden del Bloque',
+    10 => 'Tipo de bloque',
+    11 => 'Bloque del Sistema',
+    12 => 'Bloque Normal',
+    13 => 'Opciones para el Bloque del Sistema',
+    14 => 'RDF(Resource Description Framework)URL',
+    15 => 'última actualización del RDF',
+    16 => 'Opciones para el Bloque Normal',
+    17 => 'Contenido del Bloque',
+    18 => 'Por favor completa los campos Título, Nivel de Seguridad y Contenido del bloque',
+    19 => 'Administrador',
+    20 => 'Título',
+    21 => 'Nivel de Seguridad',
+    22 => 'Tipo',
+    23 => 'Número de Orden',
+    24 => 'Sección',
+    25 => 'Para modificar o borrar un bloque, selecciónalo más abajo. Para crear uno nuevo, selecciona \'Nuevo Bloque\' arriba.',
+    26 => 'Bloque de maquetación',
+    27 => 'Bloque de PHP',
+    28 => 'Opciones del Bloque PHP',
+    29 => 'Funciones del Bloque',
+    30 => 'Si quieres que tu bloque utilice código PHP, ingresa aquí el nombre de la función. La función tiene que tener el prefijo "phpblock_" (ej. phpblock_getweather). De no tenerlo NO será invocada. Asegúrate de no incluir los paréntesis, "()", al final del nombre. Por último, se recomienda que guardes todo código PHP en /path/to/geeklog/system/lib-custom.php. Esto te permitirá que tu código se mantenga aún entre cambios de versiones del sistema.',
+    31 => 'Error en un Bloque PHP.  La función, %s, no existe.',
+    32 => 'Error, Faltan Campos',
+    33 => 'Tienes que ingresar el URL del archivo .rdf para los Bloques del Sistema',
+    34 => 'Tienes que ingresar el Título y la Función en los Bloques PHP',
+    35 => 'Tienes que ingresar el Título y el Contenido para los Bloques Normales',
+    36 => 'Tienes que ingresar el contenido para los Bloques de Maquetación',
+    37 => 'El nombre de la función en el Bloque PHP es inválido',
+    38 => 'Las funciones para los Bloques PHP tienen que tener el prefijo \'phpblock_\' (ej. phpblock_getweather). Se requiere el prefijo por cuestiones de seguridad, para evitar que se ejecute código no deseado.',
+    39 => 'Ubicación',
+    40 => 'Izquierda',
+    41 => 'Derecha',
+    42 => 'Tienes que ingresar el número de orden y el nivel de seguridad para los bloques por defecto',
+    43 => 'Sólo en la Página de Inicio',
+    44 => 'Acceso Denegado',
+    45 => "Estás intentando acceder a un bloque al que no tienes derechos de acceso.  Este intento se ha registrado. Por favor <a href=\"{$_CONF['site_admin_url']}/block.php\">regresa a la pantalla de administración de bloques</a>.",
+    46 => 'Nuevo Bloque',
+    47 => 'Página de Inicio - Administrador',
+    48 => 'Nombre del Bloque',
+    49 => ' (sin espacios y tiene que ser único)',
+    50 => 'URL del archivo de ayuda',
+    51 => 'incluye http://',
+    52 => 'Si dejas este campo en blanco no se mostrará el ícono de ayuda',
+    53 => 'Habilitado',
+    54 => 'guardar',
+    55 => 'cancelar',
+    56 => 'borrar',
+    57 => 'Mueve el bloque abajo',
+    58 => 'Mueve el bloque arriba',
+    59 => 'Mueve el bloque a la derecha',
+    60 => 'Mueve el bloque a la izquierda',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Editor de Eventos',
+    2 => 'Error',
+    3 => 'Título',
+    4 => 'URL',
+    5 => 'Fecha de Inicio',
+    6 => 'Fecha de Finalización',
+    7 => 'Lugar',
+    8 => 'Descripción',
+    9 => '(incluye http://)',
+    10 => 'Tienes que completar todos los campos de este formulario.',
+    11 => 'Administrador del Evento',
+    12 => 'Para modificar o borrar un evento, pulsa en ese evento abajo. Para crear un Nuevo Evento pulsa sobre Evento Nuevo arriba. Pulsa sobre [C] para crear una copia de un evento ya existente.',
+    13 => 'Título',
+    14 => 'Fecha de Inicio',
+    15 => 'Fecha de Finalización',
+    16 => 'Acceso Denegado',
+    17 => "No tienes permiso para acceder a este Evento. Todo intento de acceso será registrado. Por favor, vuelve a <a href=\"{$_CONF['site_admin_url']}/event.php\">la página de Administración de Eventos</a>.",
+    18 => 'Nuevo Evento',
+    19 => 'Página de Inicio - Administrador',
+    20 => 'guardar',
+    21 => 'cancelar',
+    22 => 'borrar',
+    23 => 'Fecha de inicio incorecta.',
+    24 => 'Fecha de terminación incorrecta.',
+    25 => 'La fecha de terminación es anterior a la de inicio.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Noticias Anteriores',
+    2 => 'Noticias Siguientes',
+    3 => 'Modo',
+    4 => 'Modo de envio',
+    5 => 'Editor de Noticias',
+    6 => 'No hay Noticias en el sistema',
+    7 => 'Autor',
+    8 => 'guardar',
+    9 => 'Lectura previa',
+    10 => 'cancelar',
+    11 => 'borrar',
+    12 => 'ID',
+    13 => 'Título',
+    14 => 'Sección',
+    15 => 'Fecha',
+    16 => 'Introducción',
+    17 => 'Texto',
+    18 => 'Accesos',
+    19 => 'Comentarios',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Listado de Noticias',
+    23 => 'Para modificar o borrar una Noticia selecciona el número de Noticia más abajo. Para ver la Noticia selecciona el título de la misma. Para crear una nueva Noticia selecciona \'Enviar Noticia\' más arriba.',
+    24 => 'La ID que has elegido para este tema ya está siendo utilizada. Por favor, utiliza otra ID.',
+    25 => 'Error when saving story',
+    26 => 'Lectura Previa',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Errores al Subir Archivos',
+    31 => 'Por favor rellena los campos de Autor, Título y Texto',
+    32 => 'Destacada',
+    33 => 'Sólo puede haber una Noticia destacada',
+    34 => 'Borrador',
+    35 => 'Sí',
+    36 => 'No',
+    37 => 'Más de',
+    38 => 'Más en',
+    39 => 'correos electrónicos',
+    40 => 'Acceso Denegado',
+    41 => "Estás intentando acceder a una Noticia a la que no tienes derechos de acceso, por lo que podrás ver la Noticia pero no editarla. Por favor vuelve a la <a href=\"{$_CONF['site_admin_url']}/story.php\">página de administración</a> cuando hayas terminado.",
+    42 => "Estás intentando acceder a una Noticia a la que no tienes derechos de acceso. Por favor vuelve a la <a href=\"{$_CONF['site_admin_url']}/story.php\">página de administración</a>.",
+    43 => 'Nueva Noticia',
+    44 => 'Página de Inicio - Administrador',
+    45 => 'Acceso',
+    46 => '<b>NOTA:</b> si modificas esta fecha por una futura, la Noticia no se publicará hasta esa fecha. Esto también incluye el envió de titulares RDF(Resource Description Framework), la búsqueda y las estadísticas del sitio.',
+    47 => 'Imágenes',
+    48 => 'imagen',
+    49 => 'der',
+    50 => 'izq',
+    51 => 'Para insertar una imagen en la Noticia tienes que incluir un texto con el formato [imageX], [imageX_right] o [imageX_left], donde X es el número de imagen dentro de la lista. NOTA: sólo puedes utilizar las imágenes de la lista, si no la Noticia no se podrá guardar',
+    52 => 'Borrar',
+    53 => 'no se ha utilizado.  Tienes que incluir esta imagen en la Introducción o el Texto para poder guardar los cambios',
+    54 => 'Imágenes no utilizadas',
+    55 => 'Los siguientes errores ocurrieron al querer guardar tu Noticia. Por favor corrije los errores antes de guardar.',
+    56 => 'Mostrar icono de Tema',
+    57 => 'Ver imagen sin proporción',
+    58 => 'Gestión de las noticias',
+    59 => 'Opción',
+    60 => 'Habilitado',
+    61 => 'Auto archivo',
+    62 => 'Auto borrado',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Editor de Secciones',
+    2 => 'Identificación (ID)',
+    3 => 'Nombre',
+    4 => 'Imagen',
+    5 => '(no utilices espacios)',
+    6 => 'Al borrar una Sección se borrarán todas tus Noticias y Bloques asociados',
+    7 => 'Por favor completa los campos ID y Nombre',
+    8 => 'Administrador de Secciones',
+    9 => 'Para modificar o borrar un tema, pulsa sobre ese tema. Para crear un tema nuevo, pulsa el botón de Nuevo Tema en la izquierda. Encontrarás tu nivel de acceso para tema en paréntesis. El asterisco(*) denota el tema  por defecto.',
+    10 => 'Número de Orden',
+    11 => 'Noticias/Página',
+    12 => 'Acceso Denegado',
+    13 => "Estás intentando acceder a una Sección a la que no tienes derechos de acceso. Por favor vuelve a la <a href=\"{$_CONF['site_admin_url']}/topic.php\">página de administración.",
+    14 => 'Método de Ordenamiento',
+    15 => 'alfabético',
+    16 => 'por defecto es',
+    17 => 'Nueva Sección',
+    18 => 'Página de Inicio - Administrador',
+    19 => 'guardar',
+    20 => 'cancelar',
+    21 => 'borrar',
+    22 => 'Por defecto',
+    23 => 'conviértelo en el tema por defecto para nuevas colaboraciones',
+    24 => '(*)',
+    25 => 'Archiva el tema',
+    26 => 'conviértelo en el tema por defecto para noticias archivadas. Sólo se permite un tema.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Editor de Usuarios',
+    2 => 'ID',
+    3 => 'Nombre de Usuario(a)',
+    4 => 'Nombre Completo',
+    5 => 'Contraseña',
+    6 => 'Nivel de Seguridad',
+    7 => 'Dirección de correo electrónico',
+    8 => 'Página de Inicio',
+    9 => '(no utilices espacios)',
+    10 => ' Por favor, rellena los campos de Nombre de Usuario(a) y dirección de correo electrónico',
+    11 => 'Administrador de Usuarios',
+    12 => 'Para modificar o borrar a un(a) usuario(a), pulsa sobre ese(a) usuario(a) abajo.  Para crear un(a) usuario(a) nuevo(a) pulsa el botón de Nuevo Usuario en la izquierda. Puedes hacer búsquedas sencillas al teclear partes del nombre de usuario, dirección de correo electrónico o nombre completo (por ejemplo *son* o *.edu) en el formulario de abajo..',
+    13 => 'Nivel de seguridad',
+    14 => 'Fecha de Inscripción',
+    15 => 'Nuevo Usuario',
+    16 => 'Página de Inicio - Administrador',
+    17 => 'Cambia la contraseña',
+    18 => 'Cancelar',
+    19 => 'Borrar',
+    20 => 'Guardar',
+    21 => 'El Nombre de Usuario(a) propuesto ya existe.',
+    22 => 'Error',
+    23 => 'Importación Masiva',
+    24 => 'Importación masiva de Usuarios',
+    25 => "Puedes importar una lista de Usuarios(as) a {$_CONF['site_name']}. El archivo con la lista de usuarios(as) tiene que tener un registro por línea y los campos separados por TAB (tabulador). Los campos tienen que estar en el siguiente orden: Nombre Completo, Nombre de Usuario, Dirección de Correo electrónico. A cada usuario añadido se le enviará por correo electrónico una contraseña generada al azar, que podrán cambiar al ingresar al sitio. Por favor, ccomprueba bien el archivo de importación ya que los errores encontrados pueden llegar a requerir arreglos manuales.",
+    26 => 'Busca',
+    27 => 'Limita los resultados',
+    28 => 'Marca la casilla para borrar esta imagen',
+    29 => 'Ruta',
+    30 => 'Importación',
+    31 => 'Nuevos Usuarios',
+    32 => 'Proceso finalizado. Se han importado %d y ha habido %d fallos',
+    33 => 'enviar',
+    34 => 'Error: Tienes que especificar el archivo que quieres subir.',
+    35 => 'Ultimo acceso',
+    36 => '(nunca)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Aprobar',
+    2 => 'Borrar',
+    3 => 'Editar',
+    4 => 'Perfil',
+    10 => 'Título',
+    11 => 'Fecha de Inicio',
+    12 => 'URL',
+    13 => 'Categoría',
+    14 => 'Fecha',
+    15 => 'Tema',
+    16 => 'Nombre del(a) usuario(a)',
+    17 => 'Nombre completo',
+    18 => 'correo electrónico',
+    34 => 'Página de administración',
+    35 => 'Envíos de Noticias',
+    36 => 'Envíos de Enlaces',
+    37 => 'Envíos de Eventos',
+    38 => 'Enviar',
+    39 => 'No hay envíos para moderar en este momento',
+    40 => 'Envios del(a) usuario(a)'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Domingo',
+    2 => 'Lunes',
+    3 => 'Martes',
+    4 => 'Miércoles',
+    5 => 'Jueves',
+    6 => 'Viernes',
+    7 => 'Sábado',
+    8 => 'Agrega un evento',
+    9 => 'Evento de %s',
+    10 => 'Eventos para',
+    11 => 'Calendario Maestro',
+    12 => 'Mi Calendario',
+    13 => 'Enero',
+    14 => 'Febrero',
+    15 => 'Marzo',
+    16 => 'Abril',
+    17 => 'Mayo',
+    18 => 'Junio',
+    19 => 'Julio',
+    20 => 'Agosto',
+    21 => 'Septiembre',
+    22 => 'Octubre',
+    23 => 'Noviembre',
+    24 => 'Diciembre',
+    25 => 'Volver a ',
+    26 => 'Todo el día',
+    27 => 'Semana',
+    28 => 'Calendario Personal para',
+    29 => 'Calendario Público',
+    30 => 'borra el evento',
+    31 => 'Agrega',
+    32 => 'Evento',
+    33 => 'Fecha',
+    34 => 'Hora',
+    35 => 'Agregado rápido',
+    36 => 'Envía',
+    37 => 'Disculpa, la opción de calendario personal no se encuentra habilitada en este sitio',
+    38 => 'Editor Personal de Eventos',
+    39 => 'Día',
+    40 => 'Semana',
+    41 => 'Mes'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']}Utilidad de correo electrónico",
+    2 => 'De',
+    3 => 'Responde a',
+    4 => 'Título',
+    5 => 'Mensaje',
+    6 => 'Enviar a:',
+    7 => 'Todos los usuarios',
+    8 => 'Administrador',
+    9 => 'Opciones',
+    10 => 'HTML',
+    11 => '¡Mensaje Urgente!',
+    12 => 'Envío',
+    13 => 'Reinicio',
+    14 => 'Ignorar las preferencias del(a) usuario(a)',
+    15 => 'Error al mandar a: ',
+    16 => 'Se ha enviado satisfactoriamente a: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Enviar otro mensaje</a>",
+    18 => 'Para',
+    19 => 'NOTA: si quieres enviar un mensaje a todos los miembros del sitio, selecciona el grupo Logged-In Users en la lista.',
+    20 => "Se han enviado <successcount> mensajes satisfactoriamente y <failcount> han fallado.  Si quieres, los detalles de cada envío figuran abajo. Tambien puedes <a href=\"{$_CONF['site_admin_url']}/mail.php\">enviar otro mensaje</a> o volver a <a href=\"{$_CONF['site_admin_url']}/moderation.php\">la página de administración</a>.",
+    21 => 'Fallidos',
+    22 => 'Exitosos',
+    23 => 'No ha habido envíos fallidos',
+    24 => 'No ha habido envíos satisfactorios',
+    25 => '-- Selecciona el Grupo --',
+    26 => 'Por favor, rellena todos los campos del formulario y selecciona un grupo de usuarios de la lista desplegable.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'La instalación de Plug-in(s) puede dañar tu instalación de Geeklog y, posiblemente, tu sistema. Es importante que sólo instales Plug-in(s) obtenidos de <a href="http://www.geeklog.net" target="_blank">Geeklog</a> ya que han sido comprobados en varios entornos. Es también importante que entiendas que la instalación del Plug-in requiere la ejecución de instrucciones del sistema que pueden traer problemas de seguridad. Aún con esta advertencia, no garantizamos el éxito de la instalación del Plug-in ni nos hacemos responsables por cualquier daño causado durante la instalación (o posterior a la misma). En otras palabras, instala el Plug-in a tu propio riesgo. Las instrucciones particulares de instalación vienen dentro de cada Plug-in.',
+    2 => 'Advertencia de la instalación del Plug-in',
+    3 => 'Formulario de instalación del Plug-in',
+    4 => 'Archivo del Plug-in',
+    5 => 'Listado de(los) Plug-in(s)',
+    6 => 'Advertencia: ¡El Plug-in ya está instalado!',
+    7 => 'El Plug-in que intentas instalar ya existe. Por favor borra el Plug-in antes de reinstalarlo.',
+    8 => 'Falló la comprobación de compatibilidad del Plug-in',
+    9 => 'Este Plug-in requiere una versión más nueva de Geeklog. Puedes obtener una copia actualizada de <a href=http://www.geeklog.net>Geeklog</a> o instalar otra versión del Plug-in.',
+    10 => '<br><b>No hay Plug-in(s) instalados.</b><br><br>',
+    11 => 'Para modificar o borrar un Plug-in selecciona el número a la izquierda del mismo. Para acceder a la página de sus creadores seleccione en el título del Plug-in. Para instalar un nuevo Plug-in selecciona \'Nuevo Plug-in\' más arriba.',
+    12 => 'no se ha dado un nombre de plugin a la función plugineditor()',
+    13 => 'Editor de Plugins',
+    14 => 'Nuevo Plug-in',
+    15 => 'Página de Inicio - Administrador',
+    16 => 'Nombre del Plug-in',
+    17 => 'Versión',
+    18 => 'Versión de Geeklog',
+    19 => 'Habilitado',
+    20 => 'Sí',
+    21 => 'No',
+    22 => 'Instalación',
+    23 => 'Guardar',
+    24 => 'Cancelar',
+    25 => 'Borrar',
+    26 => 'Nombre',
+    27 => 'Portada',
+    28 => 'Versión',
+    29 => 'Versión de Geeklog',
+    30 => '¿Quieres borrar el Plug-in?',
+    31 => '¿Estás seguro(a) que quieres borrar este Plug-in? Al hacerlo borrarás todos los archivos, estructuras y datos asociados. Si estás seguro/a selecciona "Borrar" en el formulario de abajo.',
+    32 => '<p><b>Error, la etiqueta AutoLink no tiene el formato correcto</b></p>',
+    33 => 'Versión del código',
+    34 => 'Actualización',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Creación de la transmisión',
+    2 => 'guardar',
+    3 => 'borrar',
+    4 => 'cancelar',
+    10 => 'Sindicación del contenido',
+    11 => 'Transmisión nueva',
+    12 => 'Sede del Administrador',
+    13 => 'Para modificar o borrar una transmisión, pulsa sobre el título de la transmisión abajo. Para crear una transmisión nueva, pulsa sobre Transmisión nueva arriba.',
+    14 => 'Título',
+    15 => 'Teclea',
+    16 => 'Nombre del archivo',
+    17 => 'Formato',
+    18 => 'última actualización',
+    19 => 'Habilitado',
+    20 => 'Sí',
+    21 => 'No',
+    22 => '<i>(no hay transmisiones)</i>',
+    23 => 'todos los Temas',
+    24 => 'Editor de transmisiones',
+    25 => 'Título de la transmisión',
+    26 => 'Límite',
+    27 => 'Duración de las noticias',
+    28 => '(0 = sin texto, 1 = text completo, otro = limita a ese número de caracteres.)',
+    29 => 'Descripción',
+    30 => 'Actualización más reciente',
+    31 => 'Conjunto de caracteres',
+    32 => 'Idioma',
+    33 => 'Contenidos',
+    34 => 'Entradas',
+    35 => 'Horas',
+    36 => 'Selecciona el tipo de transmisión',
+    37 => 'Tienes como mínimo un plugin instalado que favorece la sindicación de contenido. Abajo tendrás que seleccionar so quieres una transmisión de Geeklog o una transmisión de uno de los plugins.',
+    38 => 'Error: Faltan campos',
+    39 => 'Por favor, rellena el Título, Descripción y Nombre del archivo de la transmisión.',
+    40 => 'Por favor incluye el número de entradas o número de horas.',
+    41 => 'Enlaces',
+    42 => 'Eventos',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Tu contraseña se ha enviado por correo electrónico y llegará en unos instantes. Por favor sigue las indicaciones del mensaje. Gracias por utilizar {$_CONF['site_name']}",
+    2 => "Gracias por enviar tu Noticia a {$_CONF['site_name']}. La Noticia se encuentra en proceso de aprobación. De ser aprobada, podrá ser leida por todos los visitantes del sitio.",
+    3 => "Gracias por enviar tu Enlace a {$_CONF['site_name']}. El Enlace se encuentra en proceso de aprobación. De ser aprobado, podrá ser visto por todos los visitantes del sitio.",
+    4 => "Gracias por enviar tu Evento a {$_CONF['site_name']}. El Evento se encuentra en proceso de aprobación. De ser aprobado, podrá ser visto por todos los visitantes del sitio.",
+    5 => 'La información de tu cuenta se ha guardado satisfactoriamente.',
+    6 => 'Tus preferencias se han guardado satisfactoriamente.',
+    7 => 'Tus preferencias para Comentarios han sido guardadas satisfactoriamente.',
+    8 => 'Te has desconectado satisfactoriamente.',
+    9 => 'Tu Noticia se ha guardado satisfactoriamente.',
+    10 => 'La Noticia se ha borrado satisfactoriamente.',
+    11 => 'Tu Bloque se ha guardado satisfactoriamente.',
+    12 => 'El Bloque se ha borrado satisfactoriamente.',
+    13 => 'Tu Sección se ha guardado satisfactoriamente.',
+    14 => 'La Sección junto con todas tus Noticias y Bloques se han borrado satisfactoriamente.',
+    15 => 'Tu enlace se ha guardado satisfactoriamente.',
+    16 => 'El enlace se ha borrado satisfactoriamente.',
+    17 => 'Tu Evento se ha guardado satisfactoriamente.',
+    18 => 'El Evento se ha borrado satisfactoriamente.',
+    19 => 'Tu Encuesta se ha guardado satisfactoriamente.',
+    20 => 'La Encuesta se ha borrado satisfactoriamente.',
+    21 => 'El Nuevo Usuario se ha guardado satisfactoriamente.',
+    22 => 'El Usuario se ha borrado satisfactoriamente',
+    23 => 'Error al guardar el Evento en tu Calendario. No fue procesado el ID.',
+    24 => 'El Evento se ha guardado en tu Calendario',
+    25 => 'No puedes acceder a tu Calendario Personal antes de conectarte como usuario',
+    26 => 'El Evento se ha borrado de tu Calendario Personal',
+    27 => 'Mensaje enviado satisfactoriamente.',
+    28 => 'El Plug-in se ha guardado satisfactoriamente',
+    29 => 'Disculpa, los Calendarios Personales no están habilitados en este sitio',
+    30 => 'Acceso Denegado',
+    31 => 'Disculpa, no tienes acceso a la página de administración de Noticias. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    32 => 'Disculpa, no tienes acceso a la página de administración de Secciones. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    33 => 'Disculpa, no tienes acceso a la página de administración de Bloques. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    34 => 'Disculpa, no tienes acceso a la página de administración de Enlaces. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    35 => 'Disculpa, no tienes acceso a la página de administración de Eventos. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    36 => 'Disculpa, no tienes acceso a la página de administración de Encuestas. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    37 => 'Disculpa, no tienes acceso a la página de administración de Usuarios. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    38 => 'Disculpa, no tienes acceso a la página de administración de Plug-in(s). Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    39 => 'Disculpa, no tienes acceso a la página de administración de Correo electrónico. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    40 => 'Mensaje del Sistema',
+    41 => 'Disculpa, no tienes acceso a la página de Reemplazo de Palabras. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    42 => 'La Palabra fue guardada satisfactoriamente.',
+    43 => 'La Palabra fue borrada satisfactoriamente.',
+    44 => 'El Plug-In fue instalado satisfactoriamente.',
+    45 => 'El Plug-In fue borrado satisfactoriamente.',
+    46 => 'Disculpa, no tienes acceso a la herramienta de copia de seguridad de la base de datos. Aclaramos que todo acceso sin autorización queda registrado en el servidor.',
+    47 => 'Esta función está disponible bajo *nix. Si estás utilizando *nix como tu sistema operativo, entonces tu copia de visitas (cache) se ha limpiado satisfactoriamente. Si estás bajo Windows, tienes que buscar los archivos adodb_*.php y borrarlos manualmente.',
+    48 => "Gracias por registrarte como miembro en {$_CONF['site_name']}. Nuestro equipo comprobará tu solicitud. Si es aprobada, te será enviada tu Contraseña a la dirección correo electrónico que has indicado.",
+    49 => 'Tu grupo se ha guardado satisfactoriamente.',
+    50 => 'El grupo se ha borrado satisfactoriamente.',
+    51 => 'Este nombre de usuario(a) ya está en uso. Por favor, elige otro.',
+    52 => 'La dirección facilitada no parece una dirección válida de correo electrónico.',
+    53 => 'Tu contraseña nueva se ha aceptada. Por favor, utiliza la contraseña nueva que parece abajo para ingresar de nuevo.',
+    54 => 'Tu petición de contraseña nueva ha caducado. Por favor, vuelve a intentarlo abajo.',
+    55 => 'El sistema te han enviado un correo electrónico y te llegará en breve. Por favor, sigue las instrucciones del mensaje para crear una contraseña nueva para tu cuenta.',
+    56 => 'La dirección de correo electrónico facilitada ya está en uso en otra cuenta.',
+    57 => 'Tu cuenta se ha borrado satisfactoriamente.',
+    58 => 'Tu transmisión se ha guardado satisfactoriamente.',
+    59 => 'Tu transmisión se ha borrado satisfactoriamente.',
+    60 => 'El plugin se ha actualizado satisfactoriamente',
+    61 => 'Plugin %s: marcador de mensaje desconocido',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Acceso',
+    'ownerroot' => 'Propietario/Raíz',
+    'group' => 'Grupo',
+    'readonly' => 'Sólo-Lectura',
+    'accessrights' => 'Derechos de acceso',
+    'owner' => 'Propietario',
+    'grantgrouplabel' => 'Establece los derechos del Grupo',
+    'permmsg' => 'NOTA: miembros son todos los miembros conectados y los usuarios anónimos que están en el sitio.',
+    'securitygroups' => 'Grupos de Seguridad',
+    'editrootmsg' => "Aunque seas un(a) Administrador(a) de Usuarios(as), no puedes editar a un usuario de raíz sin que te hayas dado de alta antes como usuario de raíz.  Puedes editar a todos los demás usuarios excepto los usuarios de raíz. Por favor, toma nota que cualquier intento de editar ilegalmente a los usuarios de raíz quedará registrado.  Por favor vuelve a <a href=\"{$_CONF['site_admin_url']}/users.php\">la página de Administración de usuarios</a>.",
+    'securitygroupsmsg' => 'Selecciona las casillas para los grupos a los que quieres que pertenezca el usuario.',
+    'groupeditor' => 'Editor de Grupo',
+    'description' => 'Descripción',
+    'name' => 'Nombre',
+    'rights' => 'Derechos',
+    'missingfields' => 'Campos que faltan',
+    'missingfieldsmsg' => 'Tienes que ingresar un nombre y una descripción para el Grupo.',
+    'groupmanager' => 'Administrador de Grupos',
+    'newgroupmsg' => 'Para modificar o borrar un grupo selecciona el grupo aquí abajo. Para crear un grupo selecciona \'Nuevo Grupo\' aquí arriba. Ten en cuenta que los Grupos del Sistema no se pueden borrar.',
+    'groupname' => 'Nombre del Grupo',
+    'coregroup' => 'Grupo del Sistema? ',
+    'yes' => 'Sí',
+    'no' => 'No',
+    'corerightsdescr' => "Este grupo es un Grupo de Sistema de {$_CONF['site_name']}, y por lo tanto sus derechos no se pueden editar. A continuación se muestra una lista no editable de los derechos de acceso de este grupo.",
+    'groupmsg' => 'Los Grupos de Seguridad en este sitio son jerárquicos. Al agregar este grupo a cualquiera de los de abajo le estará dando los mismos derechos que esos grupos posean. De ser posible, se recomienda utilizar los grupos ya creados para dar los derechos a un nuevo grupo. Si tienes que modificar los derechos del grupo, puedes seleccionarlos en la sección llamada \'Derechos\'. Para agregar este grupo a cualquiera de los de abajo simplemente marca los grupos que quieras.',
+    'coregroupmsg' => "Este grupo es un Grupo de Sistema de {$_CONF['site_name']}, y por ello los grupos que pertenezcan a este grupo no podrán ser editados. A continuación se muestra una lista (no editable) de los grupos a los cuales pertenece este grupo.",
+    'rightsdescr' => 'El derecho de acceso de un grupo a alguno de los derechos que se especifican abajo se pueden dar directamente al grupo O a un grupo diferente del que forma parte este grupo.  Los que ves abajo sin la casilla marcada son los derechos que se han otorgado a este grupo porque pertenece a otro con ese derecho.  Los derechos con las casillas abajo son los derechos que se pueden otorgar directamente a este grupo.',
+    'lock' => 'Bloqueo',
+    'members' => 'Miembros',
+    'anonymous' => 'Anónimo',
+    'permissions' => 'Permisos',
+    'permissionskey' => 'R = lectura, E = edición, los permisos de edición implican permisos de lectura',
+    'edit' => 'Editar',
+    'none' => 'Ninguno',
+    'accessdenied' => 'Acceso Denegado',
+    'storydenialmsg' => "No tienes acceso para ver esta Noticia. Esto puede ser porque no eres miembro de {$_CONF['site_name']}. Por favor <a href=users.php?mode=new>conviértete en un miembro</a> de {$_CONF['site_name']} para tener acceso.",
+    'eventdenialmsg' => "No tienes acceso para ver este Evento. Esto puede ser porque no eres miembro de {$_CONF['site_name']}. Por favor <a href=users.php?mode=new>conviértete en un miembro</a> de {$_CONF['site_name']} para tener acceso.",
+    'nogroupsforcoregroup' => 'Este grupo no pertenece a ninguno de los otros grupos',
+    'grouphasnorights' => 'Este grupo no tiene acceso a las funciones de administración',
+    'newgroup' => 'Nuevo Grupo',
+    'adminhome' => 'Página de Administración',
+    'save' => 'Guardar',
+    'cancel' => 'Cancelar',
+    'delete' => 'Borrar',
+    'canteditroot' => 'Has intentado editar el grupo Root (Raíz) pero no perteneces al grupo Root por lo que se te ha denegado el acceso.  Por favor, contacta con el(la) administrador(a) del sistema si crees que se trata de un errror',
+    'listusers' => 'Listado de Usuarios',
+    'listthem' => 'listado',
+    'usersingroup' => 'Usuarios en el grupo %s',
+    'usergroupadmin' => 'Administración del grupo de usuarios',
+    'add' => 'Añadir',
+    'remove' => 'Borrar',
+    'availmembers' => 'Miembros disponibles',
+    'groupmembers' => 'Miembros del grupo',
+    'canteditgroup' => 'Para editar este grupo, tienes que ser un miembro del grupo. Por favor, contacta con el administrador del sistema si crees que esto es un error.',
+    'cantlistgroup' => 'Para ver los miembros de este grupo, tienes que ser un miembro tú mismo(a). Por favor contacta con el administrador del sistema i crees que esto es un error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Últimas 10 copias de seguridad',
+    'do_backup' => 'Hacer una copia de seguridad',
+    'backup_successful' => 'La copia de seguridad de la base de datos se ha realizado satisfactoriamente.',
+    'db_explanation' => 'Para crear una copia de seguridad del sistema utiliza el botón de abajo',
+    'not_found' => "Ruta incorrecta o la utilidad mysqldump no se puede ejecutar.<br>Comprueba la definición de <strong>\$_DB_mysqldump_path</strong> en config.php.<br>La variable está definida actualmente como: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Fallo de la copia de seguridad: El tamaño era de 0 bytes',
+    'path_not_found' => "{$_CONF['backup_path']} no existe o no es una ruta",
+    'no_access' => "ERROR: No se puede acceder al directorio {$_CONF['backup_path']}.",
+    'backup_file' => 'Archivo de copias de seguridad',
+    'size' => 'Tamaño',
+    'bytes' => 'Bytes',
+    'total_number' => 'Número total de copias de seguridad: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Portada',
+    2 => 'Contacto',
+    3 => 'Colaboraciones',
+    4 => 'Enlaces',
+    5 => 'Encuestas',
+    6 => 'Calendario',
+    7 => 'Estadísticas',
+    8 => 'Personalización',
+    9 => 'Búsqueda',
+    10 => 'Búsqueda avanzada',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Error 404',
+    2 => 'Vaya, he buscado por todos los sitios, pero no puedo encontrar <b>%s</b>.',
+    3 => "<p>Lo sentimos, pero el fichero que pides no existe. Por favor, consulta la <a href=\"{$_CONF['site_url']}\">página principal</a> o la <a href=\"{$_CONF['site_url']}/search.php\">página de búsqueda</a> para ver si puedes encontrar lo que has perdido."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'se requiere ingresar',
+    2 => 'Lo siento, para acceder a esta área tienes que estar verificado(a) como usuario(a).',
+    3 => 'ingresa',
+    4 => 'Usuario (a) nuevo(a)'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'La función PDF está inhabilitada',
+    2 => 'El document facilitado no se ha reproducido. Se ha recibidido el documento pero no se ha procesado. Por favor, asegúrate que sólo se envíen documentos formateados en html con el estandar xHTML. Por favor, toma nota que los documentos muy complejos en html es posible que no se reproduzcan correctamente o que no aparezcan. El documento resultante de tu intento tiene 0 bytes de extensión, y ha sido borrado. Si no estas seguro(a) que tu documento se reproduzca bien, por favor, vuelve a enviarlo.',
+    3 => 'Error desconocido durante la generación de PDF',
+    4 => "No has dado datos de la página o quieres utilizar la herramienta de generación ad-hoc de PDF. Si crees que estas recibiendo esta página\n          por error entonces por favor contacta con el administrador del sistema.  De otro modo, puedes utilizar el formulario que hay abajo para generar PDFs.",
+    5 => 'Cargando tu documento.',
+    6 => 'Por favor, espera mientras se carga tu documento.',
+    7 => 'Puedes pulsar a la derecha el botón de abajo y elegir \'save target...\' o \'save link location...\' para guardar una copia de tu documento.',
+    8 => "La ruta dada por el archivo de configuración al HTMLDoc binario no es válida o este sistema no lo puede ejecutar.  Por favor contacta con el administrador del sistema si este problema\n          continúa.",
+    9 => 'Creador de PDF',
+    10 => "Esta es la herramienta ad-hoc de creación de PDF. Intentará convertir cualquier URL que le dés en un PDF.  Por favor, toma nota que algunas páginas de la red (Web) no se generarán correctamente con esta función.  Este\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => '¡Crea un PDF!',
+    13 => 'La configuración PHP en este servidor no permite que los URL se utilicen con la instrucción fopen.  El administrador del sistema tiene que editar el archivo php.ini y que esté conectado allow_url_fopen',
+    14 => 'El PDF que has solicitado o no existe o has intentado acceder a un archivo ilegalmente.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/swedish.php 1.4.0sr5-1/cpanel-glprivate/language/swedish.php
--- 1.3.11sr1/cpanel-glprivate/language/swedish.php	2004-12-31 10:03:36.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/swedish.php	2006-08-08 02:39:06.000000000 -0500
@@ -157,7 +157,17 @@
     110 => 'Report this post to the site admin',
     111 => 'View PDF Version',
     112 => 'Registered Users',
-    113 => 'Documentation'
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
 );
 
 ###############################################################################
@@ -324,7 +334,23 @@
     104 => 'Visa online-status',
     105 => 'Jag vill synas i \'Vem r hr\'-blocket',
     106 => 'Plats',
-    107 => 'Visas i din publika profil'
+    107 => 'Visas i din publika profil',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
 );
 
 ###############################################################################
@@ -342,27 +368,6 @@
 );
 
 ###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Internetlnkar',
-    2 => 'Det finns inga lnkar att visa.',
-    3 => 'Skicka in lnk'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Rst sparad',
-    2 => 'Din rst har nu sparats',
-    3 => 'Rst',
-    4 => 'Omrstningar i systemet',
-    5 => 'Rster',
-    6 => 'Visa andra omrstningar'
-);
-
-###############################################################################
 # profiles.php
 
 $LANG08 = array(
@@ -463,7 +468,11 @@
     54 => 'Kommentarsresultat',
     55 => 'frasen',
     56 => 'OCH',
-    57 => 'ELLER'
+    57 => 'ELLER',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -493,7 +502,14 @@
     21 => 'Det verkar inte finnas ngra lnkar p sajten, eller s har ingen av dom blivit klickade.',
     22 => 'De tio mest epostade artiklarna',
     23 => 'gnger',
-    24 => 'Det verkar inte som om ngon har epostat ngon artikel frn den hr sajten'
+    24 => 'Det verkar inte som om ngon har epostat ngon artikel frn den hr sajten',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -646,7 +662,12 @@
     57 => 'Flytta block nert',
     58 => 'Flytta block uppt',
     59 => 'Flytta block till hger sida',
-    60 => 'Flytta block till vnster sida'
+    60 => 'Flytta block till vnster sida',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -681,35 +702,6 @@
 );
 
 ###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'Lnkeditor',
-    2 => '',
-    3 => 'Lnktitel',
-    4 => 'Lnk',
-    5 => 'Kategori',
-    6 => '(inkludera http://)',
-    7 => 'annan',
-    8 => 'Lnktrffar',
-    9 => 'Lnkbeskrivning',
-    10 => 'Du mste ange en lnktitel, URL och beskrivning.',
-    11 => 'Lnkadministratr',
-    12 => 'Klicka p lnken fr att frndra eller radera den.  Klicka p "Ny lnk" ovan fr att skapa en ny lnk.',
-    13 => 'Lnktitel',
-    14 => 'Lnkkategori',
-    15 => 'Lnk',
-    16 => 'tkomst nekad',
-    17 => "Du ger inte tillgng till denna lnk.  Denna incident har loggats.  G tillbaka till <a href=\"{$_CONF['site_admin_url']}/link.php\">lnkadministrationen</a>.",
-    18 => 'Ny lnk',
-    19 => 'Administratrsmeny',
-    20 => 'om "annan", specificera',
-    21 => 'spara',
-    22 => 'ngra',
-    23 => 'radera'
-);
-
-###############################################################################
 # admin/story.php
 
 $LANG24 = array(
@@ -732,16 +724,16 @@
     17 => 'Brdtext',
     18 => 'Trffar',
     19 => 'Kommentarer',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Send Ping',
     22 => 'Artikellista',
     23 => 'Klicka p en artikels nummer nedan fr att redigera eller radera den.  Klicka p en artikels titel fr att lsa den artikeln.  Klicka p "ny artikel" ovan fr att skriva en ny artikel.',
     24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
+    25 => 'Error when saving story',
     26 => 'Frhandsgranska artikel',
-    27 => '',
-    28 => '',
-    29 => '',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
     30 => 'Uppladdningsfel',
     31 => 'Du mste ange titel och ingress',
     32 => 'Huvudartikel',
@@ -774,39 +766,30 @@
     59 => 'Val',
     60 => 'Aktiverat',
     61 => 'Automatisk arkivering',
-    62 => 'Automatisk radering'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'Lge',
-    2 => 'Du mste ange en frga och tminstone ett alternativ.',
-    3 => 'Omrstning skapades',
-    4 => 'Omrstning %s sparad',
-    5 => 'Redigera omrstning',
-    6 => 'Omrstnings-ID',
-    7 => '(anvnd inte mellanslag)',
-    8 => 'Visas p hemsidan',
-    9 => 'Frga',
-    10 => 'Svar / Rster',
-    11 => 'Det blev fel nr data angende omrstning %s hmtades',
-    12 => 'Det blev fel nr frgedata angende omrstning %s hmtades',
-    13 => 'Skapa omrstning',
-    14 => 'spara',
-    15 => 'ngra',
-    16 => 'radera',
-    17 => 'Du mste ange ett omrstnings-ID',
-    18 => 'Omrstningslista',
-    19 => 'Klicka p en omrstning fr att ndra eller radera den.  Klicka p "Ny omrstning" ovan fr att skapa en ny omrstning.',
-    20 => 'Rstande',
-    21 => 'tkomst nekad',
-    22 => "Du ger inte tillgng till denna omrstning.  Denna incident har loggats.  G tillbaka till <a href=\"{$_CONF['site_admin_url']}/poll.php\">omrstningsadministrationen</a>.",
-    23 => 'Ny omrstning',
-    24 => 'Administratrsmeny',
-    25 => 'Ja',
-    26 => 'Nej'
+    62 => 'Automatisk radering',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
 );
 
 ###############################################################################
@@ -838,7 +821,10 @@
     23 => 'Gr detta mne till standardvrde fr nya artiklar',
     24 => '(*)',
     25 => 'Arkivera mne',
-    26 => 'gr detta mne till sknsvrde fr alla arkiverade artiklar.  Bara ett mne tillts.'
+    26 => 'gr detta mne till sknsvrde fr alla arkiverade artiklar.  Bara ett mne tillts.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
 );
 
 ###############################################################################
@@ -880,7 +866,18 @@
     33 => 'skicka',
     34 => 'Fel:  Du mste ange en fil att skicka.',
     35 => 'Senaste inloggning',
-    36 => '(aldrig)'
+    36 => '(aldrig)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
 );
 
 ###############################################################################
@@ -1025,7 +1022,11 @@
     31 => 'r du sker p att du vill radera denna insticksmodu?  Om du gr det s kommer du att radera alla filer, data, och datastrukturer som denna insticksmodul anvnder.  Om du r sker, klicka "radera" igen nedan.',
     32 => '<p><b>Error AutoLink mrkord har inte korrekt format</b></p>',
     33 => 'Kodversion',
-    34 => 'Uppdatera'
+    34 => 'Uppdatera',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
 );
 
 ###############################################################################
@@ -1068,7 +1069,15 @@
     39 => 'Fyll i Kanaltitel, beskrivning och filnamn.',
     40 => 'Fyll antingen i antal inlgg eller ett antal timmar.',
     41 => 'Lnkar',
-    42 => 'Aktiviteter'
+    42 => 'Aktiviteter',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1135,7 +1144,21 @@
     58 => 'Din kanal har lagrats.',
     59 => 'Kanalen har raderats.',
     60 => 'Insticksmodulen har uppdaterats',
-    61 => 'Insticksmodul %s: Oknt meddelande'
+    61 => 'Insticksmodul %s: Oknt meddelande',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
 );
 
 ###############################################################################
@@ -1195,7 +1218,16 @@
     'availmembers' => 'Tillgngliga medlemmar',
     'groupmembers' => 'Gruppmedlemmar',
     'canteditgroup' => 'Du mste vara medlem i denna grupp fr att f redigera den.  Kontakta din systemadministratr om du anser att detta meddelande r felaktigt.',
-    'cantlistgroup' => 'Du mste vara medlem i denna grupp fr att f se dess medlemmar.  Kontakta din systemadministratr om du anser att detta meddelande r felaktigt.'
+    'cantlistgroup' => 'Du mste vara medlem i denna grupp fr att f se dess medlemmar.  Kontakta din systemadministratr om du anser att detta meddelande r felaktigt.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
 );
 
 ###############################################################################
@@ -1205,7 +1237,6 @@
     'last_ten_backups' => 'Senaste tio skerhetskopiorna',
     'do_backup' => 'Starta skerhetskopiering',
     'backup_successful' => 'Databasbackup genomfrd.',
-    'no_backups' => 'Inga skerhetskopior finns lagrade i systemet',
     'db_explanation' => 'Klicka nedan fr att skapa en skerhetskopia av ditt Geeklog-system',
     'not_found' => "Felaktig skvg eller s r inte mysqldump-programmet exekverbart.<BR>Kontrollera <strong>\$_DB_mysqldump_path</strong>-definitionen i config.php.<BR>Variabeln r fr nrvarande definierad som: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Skerhetskopiering misslyckades:  filstorleken r noll',
@@ -1229,7 +1260,8 @@
     7 => 'Statistik',
     8 => 'Personliga instllningar',
     9 => 'Sk',
-    10 => 'detaljerad skning'
+    10 => 'detaljerad skning',
+    11 => 'Directory'
 );
 
 ###############################################################################
@@ -1258,17 +1290,223 @@
     1 => 'PDF-funktionen r avstngd',
     2 => 'Dokumentet kunde inte renderas.  Dokumentet kunde hmtas, men kunde inte renderas.  Var noga med att bara skicka in html-formatterade dokument som r skrivna enligt xHTML.  Notera att komplexa dokument kanske inte kan renderas korrekt, eller ver huvud taget.  Ditt renderade dokumentet var 0 byte stort och har raderats.  Om du r vertygad om att ditt dokument borde kunna renderas, s br du skicka in det igen.',
     3 => 'Oknt fel vid PDF-generering',
-    4 => "Inget siddata gavs, eller s vill du anvnda ad-hoc PDF-genereringsverktyget nedan.  Om du anser att du inte borde f detta felmeddelande s br du kontakta systemadministratren.  Annars kan du prova att anvnda formulret nedan fr att generera PDF-filer med mer handplggning.",
+    4 => 'Inget siddata gavs, eller s vill du anvnda ad-hoc PDF-genereringsverktyget nedan.  Om du anser att du inte borde f detta felmeddelande s br du kontakta systemadministratren.  Annars kan du prova att anvnda formulret nedan fr att generera PDF-filer med mer handplggning.',
     5 => 'Laddar ditt dokument.',
     6 => 'Vnta medan ditt dokument laddas.',
     7 => 'Du kan hgerklicka p knappen nedan och vlja \'spara ml...\' eller \'spara lnk...\' fr att spara en kopia av ditt dokument.',
-    8 => "Den angivna skvgen till HTMLDoc-binren r felaktig, eller s kan det hr systemet inte exekvera den.  Kontakta systemadministratren om detta fel kvarstr.",
+    8 => 'Den angivna skvgen till HTMLDoc-binren r felaktig, eller s kan det hr systemet inte exekvera den.  Kontakta systemadministratren om detta fel kvarstr.',
     9 => 'PDF-generator',
-    10 => "Detta r Ad-hoc PDF-generering.  Verktyget kommer att frska konvertera valfri URL till en PDF.  Tnk p att vissa sidor inte renderas ordentligt med den hr funktionen, men detta r en begrnsning av HTMLDoc PDF-genereringsverktyget, och dessa felmeddelanden br inte rapporteras till systemadministratrerna p denna sajt",
+    10 => 'Detta r Ad-hoc PDF-generering.  Verktyget kommer att frska konvertera valfri URL till en PDF.  Tnk p att vissa sidor inte renderas ordentligt med den hr funktionen, men detta r en begrnsning av HTMLDoc PDF-genereringsverktyget, och dessa felmeddelanden br inte rapporteras till systemadministratrerna p denna sajt',
     11 => 'URL',
     12 => 'Generera PDF!',
     13 => 'PHP-konfigurationen p den hr servern tillter inte ppning av URL:er med fopen()-kommandot.  Systemadministratren mste redigera php.ini-filen och aktivera allow_url_fopen',
     14 => 'PDF-filen du begrde existerar inte, eller s frskte du hmta en fil som du inte har tillgng till.'
 );
 
-?>
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/swedish_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/swedish_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/swedish_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/swedish_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1512 @@
+<?php
+
+###############################################################################
+# swedish.php
+# This is the swedish language page for GeekLog!
+# Translation by: Markus Berg <kelvin@lysator.liu.se>
+#
+# Credits from original english.php:
+#
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2000 Jason Whittenburg
+# jwhitten@securitygeeks.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'UTF-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Skrivet av:',
+    2 => 'läs mer',
+    3 => 'kommentar(er)',
+    4 => 'Redigera',
+    5 => 'Rösta',
+    6 => 'Resultat',
+    7 => 'Röstresultat',
+    8 => 'röster',
+    9 => 'Administratörsfunktioner:',
+    10 => 'Bidrag',
+    11 => 'Artiklar',
+    12 => 'Block',
+    13 => 'Ämnen',
+    14 => 'Länkar',
+    15 => 'Aktiviteter',
+    16 => 'Omröstningar',
+    17 => 'Användare',
+    18 => 'SQL Query',
+    19 => 'Logga ut',
+    20 => 'Användarinformation:',
+    21 => 'Användarnamn',
+    22 => 'Användarnamn',
+    23 => 'Säkerhetsnivå',
+    24 => 'Anonym',
+    25 => 'Skriv ett inlägg',
+    26 => 'Följande inlägg ägs av de personer som gjort dem.  Denna sajt tar inget ansvar för det som sägs.',
+    27 => 'Senaste kommentar',
+    28 => 'Radera',
+    29 => 'Inga kommentarer.',
+    30 => 'Äldre artiklar',
+    31 => 'Tillåten HTML:',
+    32 => 'Error, felaktigt användarnamn',
+    33 => 'Error, kunde inte skriva till logfilen',
+    34 => 'Error',
+    35 => 'Logga ut',
+    36 => 'på',
+    37 => 'Inga artiklar',
+    38 => 'Content Syndication',
+    39 => 'Uppdatera',
+    40 => 'Du har <tt>register_globals = Off</tt> i din <tt>php.ini</tt>. Geeklog kräver att <tt>register_globals</tt> är påslaget. Innan du fortsätter så måste du sätta det till <strong>on</strong> och starta om din webbserver.',
+    41 => 'Gäster',
+    42 => 'Skrivet av:',
+    43 => 'Svara på detta',
+    44 => 'Upp',
+    45 => 'MySQL Error Number',
+    46 => 'MySQL felmeddelande',
+    47 => 'Användarfunktioner',
+    48 => 'Kontoinformation',
+    49 => 'Inställningar',
+    50 => 'Fel i SQL-förfrågan',
+    51 => 'hjälp',
+    52 => 'Ny',
+    53 => 'Administratörsmeny',
+    54 => 'Kunde inte öppna filen.',
+    55 => 'Fel vid',
+    56 => 'Rösta',
+    57 => 'Lösenord',
+    58 => 'Logga in',
+    59 => "Har du inget konto?  <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Anmäl dig här!</a>",
+    60 => 'Diskutera...',
+    61 => 'Skapa nytt konto',
+    62 => 'ord',
+    63 => 'Kommentarsinst.',
+    64 => 'Eposta artikel till någon',
+    65 => 'Version för utskrift',
+    66 => 'Min kalender',
+    67 => 'Välkommen till ',
+    68 => 'hem',
+    69 => 'kontakt',
+    70 => 'sök',
+    71 => 'skriv artikel',
+    72 => 'internetlänkar',
+    73 => 'tidigare omröstningar',
+    74 => 'kalender',
+    75 => 'detaljerad sökning',
+    76 => 'statistik',
+    77 => 'Plugin',
+    78 => 'Kommande aktiviteter',
+    79 => 'Nytt på sajten',
+    80 => 'artiklar de senaste',
+    81 => 'artikel de senaste',
+    82 => 'timmarna',
+    83 => 'KOMMENTARER',
+    84 => 'LÄNKAR',
+    85 => 'senaste 48 hrs',
+    86 => 'Inga nya kommentarer',
+    87 => 'senaste två veckorna',
+    88 => 'Inga nya länkar',
+    89 => 'Det finns inga kommande aktiviteter',
+    90 => 'Hem',
+    91 => 'Skapade denna sida på',
+    92 => 'sekunder',
+    93 => 'Copyright',
+    94 => 'Alla varumärken och copyright på denna sida ägs av deras respektive ägare.',
+    95 => 'Powered By',
+    96 => 'Grupper',
+    97 => 'Ordlista',
+    98 => 'Insticksmodul',
+    99 => 'ARTIKLAR',
+    100 => 'Inga nya artiklar',
+    101 => 'Dina aktiviteter',
+    102 => 'Sajtaktiviteter',
+    103 => 'DB backup',
+    104 => 'av',
+    105 => 'Eposta användare',
+    106 => 'visningar',
+    107 => 'GL versionstest',
+    108 => 'Radera buffert',
+    109 => 'Report abuse',
+    110 => 'Report this post to the site admin',
+    111 => 'View PDF Version',
+    112 => 'Registered Users',
+    113 => 'Documentation',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Aktivitetskalender',
+    2 => 'Det finns tyvärr inga aktiviteter att visa.',
+    3 => 'När',
+    4 => 'Var',
+    5 => 'Beskrivning',
+    6 => 'Ny aktivitet',
+    7 => 'Kommande aktiviteter',
+    8 => 'Genom att lägga till denna aktivitet till din kalender så kan du snabbt se enbart de aktiviteter du är intresserad av genom att klicka på "Min kalender" från användarfunktionsmenyn.',
+    9 => 'Lägg till i min kalender',
+    10 => 'Radera från min kalender',
+    11 => "Lägger till aktivitet i {$_USER['username']}:s kalender",
+    12 => 'Aktivitet',
+    13 => 'Startar',
+    14 => 'Slutar',
+    15 => 'Tillbaka till kalendern'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Skriv en kommentar',
+    2 => 'Kommentarsläge',
+    3 => 'Logga ut',
+    4 => 'Skapa ett konto',
+    5 => 'Användarnamn',
+    6 => 'För att skriva en kommentar på denna sajt måste man ha ett konto.  Om du inte har ett konto så kan du använda formuläret nedan för att skapa ett.',
+    7 => 'Din senaste kommentar var ',
+    8 => " sekunder sedan.  På denna sajt måste man vänta minst {$_CONF['commentspeedlimit']} sekunder mellan kommentarer",
+    9 => 'Kommentar',
+    10 => 'Send Report',
+    11 => 'Skicka in kommentar',
+    12 => 'Du måste fylla i Titel- Kommentarsfälten.',
+    13 => 'Din information',
+    14 => 'Förhandsgranska',
+    15 => 'Report this post',
+    16 => 'Titel',
+    17 => 'Error',
+    18 => 'Att tänka på',
+    19 => 'Försök hålla kommentarerna till ämnet.',
+    20 => 'Försök svara på andra personers kommentarer istället för att starta nya diskussioner.',
+    21 => 'Läs andra personers kommentarer innan du gör ditt inlägg för att förhindra upprepning av det som redan sagts.',
+    22 => 'Använd en tydlig ärenderad som beskriver vad ditt inlägg handlar om.',
+    23 => 'Din epostadress kommer INTE att vara publik.',
+    24 => 'Anonym användare',
+    25 => 'Är du säker på att du vill rapportera detta inlägg till sajtadministratören?',
+    26 => '%s har rapporterat följande inlägg:',
+    27 => 'Anmäl missbruk'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Användarprofil för',
+    2 => 'Användarnamn',
+    3 => 'För- och efternamn',
+    4 => 'Lösenord',
+    5 => 'Epost',
+    6 => 'Hemsida',
+    7 => 'Personlig information',
+    8 => 'PGP-nyckel',
+    9 => 'Spara information',
+    10 => 'De tio senaste kommentarerna för användare',
+    11 => 'Inga användarkommentarer',
+    12 => 'Användarinställningar för',
+    13 => 'Eposta nattlig sammanställning',
+    14 => 'Detta lösenord genereras av en slumpgenerator.  Du rekommenderas att omedelbart byta detta lösenord.  För att byta lösenord loggar man in och klickar på Kontoinformation från Användarfunktionsmenyn.',
+    15 => "Ditt {$_CONF['site_name']} konto är nu skapat.  För att använda det måste du logga in med hjälp av informationen nedan.  Spara detta mail för framtida bruk.",
+    16 => 'Din kontoinformation',
+    17 => 'Konto existerar inte',
+    18 => 'Den angivna epostadressen verkar inte vara giltig',
+    19 => 'Användarnamnet eller epostadressen existerar redan',
+    20 => 'Den angivna epostadressen verkar inte vara giltig',
+    21 => 'Error',
+    22 => "Registrera med {$_CONF['site_name']}!",
+    23 => "När du skapar ett användarkonto kommer du att få ta del av {$_CONF['site_name']}:s fördelar och du kommer att få möjlighet att posta kommentarer och skicka in artiklar som dig själv.  Om man inte har ett konto så kan man bara medverka anonymt.  Lägg märke till att din epostadress <B>aldrig</B> kommer att visas offentligt på denna sajt.",
+    24 => 'Ditt lösenord kommer att skickas till den epostadress du anger.',
+    25 => 'Har du glömt ditt lösenord?',
+    26 => 'Ange ditt användarnamn <em>eller</em> din registrerade epostadress och klicka på "Eposta lösenord" så kommer ett nytt lösenord att skickas till den epostadress vi har i vårt register.',
+    27 => 'Registrera nu!',
+    28 => 'Eposta lösenord',
+    29 => 'loggade ut från',
+    30 => 'loggade in från',
+    31 => 'För att använda denna funktion måste du vara inloggad',
+    32 => 'Signatur',
+    33 => 'Aldrig offentlig',
+    34 => 'Detta är ditt för- och efternamn',
+    35 => 'Ange lösenord för att ändra det',
+    36 => 'Börjar med http://',
+    37 => 'Läggs till dina kommentarer',
+    38 => 'Det handlar om dig!  Alla kan läsa detta',
+    39 => 'Din publika PGP-nyckel att dela ut',
+    40 => 'Inga ämnesikoner',
+    41 => 'Beredd att moderera',
+    42 => 'Datumformat',
+    43 => 'Maximalt antal artiklar',
+    44 => 'Inga block',
+    45 => 'Artikelinställningar för',
+    46 => 'Exkluderade saker för',
+    47 => 'Konfiguration av nyhetsblock för',
+    48 => 'Ämnen',
+    49 => 'Inga ikoner i artiklar',
+    50 => 'Klicka ur detta om du inte är intresserad',
+    51 => 'Bara artiklarna',
+    52 => 'Skönsvärdet är',
+    53 => 'Skicka mig dagens artiklar varje kväll',
+    54 => 'Klicka i boxarna för de ämnen och författare vars artiklar du inte vill se.',
+    55 => 'Om du lämnar dessa tomma betyder det att du vill ha standarduppsättningen med boxar.  Om du börjar välja så måste du välja alla de som du vill se, eftersom standardvalet därmed försvinner.  Standardboxarna är markerade med fetstil.',
+    56 => 'Författare',
+    57 => 'Visningsläge',
+    58 => 'Sorteringsordning',
+    59 => 'Kommentarsbegränsning',
+    60 => 'Hur vill du att kommentarer ska visas?',
+    61 => 'Nyaste eller äldsta först?',
+    62 => 'Standardvärdet är 100',
+    63 => "Ditt lösenord är nu epostat till dig och det bör anlända inom kort.  Vänligen följ instruktionerna däri.  Tack för att du använder {$_CONF['site_name']}",
+    64 => 'Kommentarsinställningar för',
+    65 => 'Försök att logga in igen',
+    66 => "Det är möjligt att du har skrivit fel.  Försök logga in igen.  Är du en <a href=\"{$_CONF['site_url']}/users.php?mode=new\">ny användare</a>?",
+    67 => 'Medlem sedan',
+    68 => 'Kom ihåg mig i',
+    69 => 'Hur länge ska vi komma ihåg dig från det att du loggar in?',
+    70 => "Personliga inställningar för utseende och innehåll av {$_CONF['site_name']}",
+    71 => "En av de bästa funktionerna i {$_CONF['site_name']} är att du kan göra personliga inställningar för det innehåll du vill se och du kan förändra utseendet på sajten.  För att ta tillvara på dessa funktioner måste du först <a href=\"{$_CONF['site_url']}/users.php?mode=new\">registrera</a> med {$_CONF['site_name']}.  Redan medlem?  Använd i så fall inloggningsrutan till vänster för att logga in!",
+    72 => 'Utseende',
+    73 => 'Språk',
+    74 => 'Förändra sajtens utseende!',
+    75 => 'Epostade ämnen för',
+    76 => 'Om du väljer ett ämne från listan nedan så kommer du att få alla nya artiklar från det ämnet mailat till dig varje kväll.  Välj bara de ämnen som intresserar dig!',
+    77 => 'Foto',
+    78 => 'Lägg till ett fotografi på dig själv!',
+    79 => 'Klicka i här för att radera denna bild',
+    80 => 'Logga in',
+    81 => 'Skicka epost',
+    82 => 'Senaste tio artiklar för användare',
+    83 => 'Kommentarsstatistik för användare',
+    84 => 'Totalt antal artiklar:',
+    85 => 'Totalt antal kommentarer:',
+    86 => 'Finn alla inlägg av',
+    87 => 'Ditt användarnamn',
+    88 => "Någon (kanske du) har begärt ett nytt lösenord för ditt konto \"%s\" på {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nKlicka på följande länk om du verkligen vill nollställa ditt lösenord:\n\n",
+    89 => "Om du inte vill göra detta så är det bara att ignorera detta mail (ditt lösenord kommer att vara oförändrat).\n\n",
+    90 => 'Ange ett nytt lösenord för ditt konto.  Märk att ditt gamla lösenord är giltigt tills du skickat in detta formulär.',
+    91 => 'Sätt nytt lösenord',
+    92 => 'Ange nytt lösenord',
+    93 => 'Din senaste lösenordsbegäran var för %d sekunder sedan.  Denna sajt kräver minst %d sekunder mellan lösenordsförfrågningar.',
+    94 => 'Radera konto "%s"',
+    95 => 'Klicka på "radera konto" knappen nedan för att radera ditt konto från vår databas. Notera att alla artiklar och kommentarer du postat från detta konto inte kommer att raderas, utan kommer istället att tillskrivas användaren "Anonymous".',
+    96 => 'radera konto',
+    97 => 'Bekräfta kontoradering',
+    98 => 'Är du säker på att du vill radera ditt konto?  Genom att radera ditt konto så kommer du inte längre att kunna logga in på denna sajt (såvida du inte först skapar ett nytt konto).  Klicka på "radera konto" i formuläret nedan för att bekräfta.',
+    99 => 'Sekretessinställningar för',
+    100 => 'Epost från Admin',
+    101 => 'Tillåt epost från sajtadministratörer',
+    102 => 'Epost från användare',
+    103 => 'Tillåt epost från andra användare',
+    104 => 'Visa online-status',
+    105 => 'Jag vill synas i \'Vem är här\'-blocket',
+    106 => 'Plats',
+    107 => 'Visas i din publika profil',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Det finns inga nyheter',
+    2 => 'Det finns inga artiklar att visa.  Antingen finns det inga artiklar, eller så är dina artikelinställningar för restriktiva.',
+    3 => ' i ämnet %s',
+    4 => 'Dagens huvudartikel',
+    5 => 'Nästa',
+    6 => 'Föregående',
+    7 => 'Första',
+    8 => 'Sista'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Det blev alldeles fel när vi skulle skicka ditt meddelande.  Försök igen.',
+    2 => 'Meddelande skickat.',
+    3 => 'Verifiera att det står en riktig epostadress i svarsfältet.',
+    4 => 'Fyll i namn-, svarsadress-, ärende- och meddelandefältet',
+    5 => 'Error: Användare existerar inte.',
+    6 => 'Nu blev det fel.',
+    7 => 'Användarprofil för',
+    8 => 'Användarnamn',
+    9 => 'Användarlänk',
+    10 => 'Skicka mail till',
+    11 => 'Ditt namn:',
+    12 => 'Svarsadress:',
+    13 => 'Ärende:',
+    14 => 'Meddelande:',
+    15 => 'HTML kommer inte att översättas.',
+    16 => 'Skicka meddelande',
+    17 => 'Eposta artikel till någon',
+    18 => 'Till namn',
+    19 => 'Till epostadress',
+    20 => 'Från namn',
+    21 => 'Från epostadress',
+    22 => 'Alla fält måste fyllas i',
+    23 => "Detta brev har skickats till dig från %s (%s) för att de trodde att du kunde vara intresserad av denna artikel från {$_CONF['site_url']}.  Detta är inte SPAM  och epostadresserna inblandade i detta har inte sparats.",
+    24 => 'Kommentera denna artikel på',
+    25 => 'För att använda denna funktion måste du vara inloggad.  Genom att kräva inloggning förhindrar vi missbruk av detta system',
+    26 => 'Detta formulär låter dig sända epost till den valda användare.  Alla fält måste fyllas i.',
+    27 => 'Kort meddelande',
+    28 => '%s skrev: ',
+    29 => "Detta är den dagliga sammanställningen från {$_CONF['site_name']} för ",
+    30 => ' Dagligt nyhetsbrev för ',
+    31 => 'Titel',
+    32 => 'Datum',
+    33 => 'Läs hela artikeln på',
+    34 => 'Slut på meddelandet',
+    35 => 'Beklagar, men denna användare vill inte ta emot någon epost.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Detaljerad sökning',
+    2 => 'Nyckelord',
+    3 => 'Ämne',
+    4 => 'Samtliga',
+    5 => 'Typ',
+    6 => 'Artiklar',
+    7 => 'Kommentarer',
+    8 => 'Författare',
+    9 => 'Samtliga',
+    10 => 'Sök',
+    11 => 'Sökresultat',
+    12 => 'träffar',
+    13 => 'Sökresultat:  inga träffar',
+    14 => 'Det fanns inga träffar för din sökning på',
+    15 => 'Försök igen.',
+    16 => 'Titel',
+    17 => 'Datum',
+    18 => 'Författare',
+    19 => "Sök igenom {$_CONF['site_name']} kompletta databas med nuvarande äldre artiklar",
+    20 => 'Datum',
+    21 => 'till',
+    22 => '(Datumformat ÅÅÅÅ-MM-DD)',
+    23 => 'Visningar',
+    24 => 'Fann %d post(er)',
+    25 => 'Sökte efter',
+    26 => 'post(er) ',
+    27 => 'sekunder',
+    28 => 'Ingen artikel eller kommentar matchar din sökning',
+    29 => 'Artikel- och kommentarsresultat',
+    30 => 'Inga länkar matchade din sökning',
+    31 => 'Denna insticksmodul gav inga träffar',
+    32 => 'Aktivitet',
+    33 => 'Länk',
+    34 => 'Plats',
+    35 => 'Hela dagen',
+    36 => 'Inga aktiviteter matchade din sökning',
+    37 => 'Aktivitetsresultat',
+    38 => 'Länkresultat',
+    39 => 'Länkar',
+    40 => 'Aktiviteter',
+    41 => 'Du måste söka på minst tre tecken..',
+    42 => 'Du måste använda datumformatet ÅÅÅÅ-MM-DD (år-månad-dag).',
+    43 => 'exakt fras',
+    44 => 'alla dessa ord',
+    45 => 'något av dessa ord',
+    46 => 'Nästa',
+    47 => 'Föregående',
+    48 => 'Författare',
+    49 => 'Datum',
+    50 => 'Träffar',
+    51 => 'Länk',
+    52 => 'Plats',
+    53 => 'Artikelresultat',
+    54 => 'Kommentarsresultat',
+    55 => 'frasen',
+    56 => 'OCH',
+    57 => 'ELLER',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Sajtstatistik',
+    2 => 'Totalt antal träffar på sajten',
+    3 => 'Artiklar(kommentarer) på sajten',
+    4 => 'Omröstningar(svar) på sajten',
+    5 => 'Länkar(träffar) på sajten',
+    6 => 'Aktiviteter i sajtkalendern',
+    7 => 'De tio mest lästa artiklarna',
+    8 => 'Artikeltitel',
+    9 => 'Visningar',
+    10 => 'Det verkar inte finnas några artiklar på den här sajten, eller så har ingen av dom blivit lästa.',
+    11 => 'De tio mest kommenterade artiklarna',
+    12 => 'Kommentarer',
+    13 => 'Det verkar inte finnas några artiklar på den här sajten, eller så har ingen av dom blivit kommenterade.',
+    14 => 'De tio största omröstningarna',
+    15 => 'Omröstningsfråga',
+    16 => 'Röster',
+    17 => 'Det verkar inte finnas några omröstningar på den här sajten, eller så har ingen röstat.',
+    18 => 'Tio populäraste länkarna',
+    19 => 'Länkar',
+    20 => 'Träffar',
+    21 => 'Det verkar inte finnas några länkar på sajten, eller så har ingen av dom blivit klickade.',
+    22 => 'De tio mest epostade artiklarna',
+    23 => 'gånger',
+    24 => 'Det verkar inte som om någon har epostat någon artikel från den här sajten',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Besläktad info',
+    2 => 'Eposta artikel till någon',
+    3 => 'Skriv ut artikel',
+    4 => 'Artikelalternativ',
+    5 => 'Artikel i PDF-format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Man måste vara inloggad för att skicka in en %s.',
+    2 => 'Logga in',
+    3 => 'Ny användare',
+    4 => 'Skicka in en aktivitet',
+    5 => 'Skicka in en länk',
+    6 => 'Skicka in en artikel',
+    7 => 'Inloggning krävs',
+    8 => 'Skicka',
+    9 => "När du skriver en artikel till den här sajten så är det bra om du följer dessa råd: <UL><LI>Samtliga fält måste fyllas i<LI>Informationen ska vara korrekt<LI>Kontrollera alla länkar en extra gång</UL>\n",
+    10 => 'Titel',
+    11 => 'Länk',
+    12 => 'Startdatum',
+    13 => 'Slutdatum',
+    14 => 'Plats',
+    15 => 'Beskrivning',
+    16 => 'Om "Annan", specificera',
+    17 => 'Kategori',
+    18 => 'Annan',
+    19 => 'Läs först',
+    20 => 'Error: Kategori saknas',
+    21 => 'Du måste ange en ny kategori när du väljer "Annan"',
+    22 => 'Error: Fält saknas',
+    23 => 'Fyll i samtliga fält i formuläret.',
+    24 => 'Sparad',
+    25 => '%s har sparats.',
+    26 => 'Hastighetsbegränsning',
+    27 => 'Användarnamn',
+    28 => 'Ämne',
+    29 => 'Artikel',
+    30 => 'Du skickade in en artikel för ',
+    31 => " sekunder sedan.  Du måste vänta minst {$_CONF['speedlimit']} sekunder mellan artiklar",
+    32 => 'Förhandsgranska',
+    33 => 'Förhandsgranska artikel',
+    34 => 'Logga ut',
+    35 => 'HTML-taggar är inte tillåtna',
+    36 => 'Artikeltyp',
+    37 => "När du skickar en aktivitet till {$_CONF['site_name']} så hamnar den i den centrala kalendern. Denna funktion är inte till för att lagra personlig information som födelsedagar eller namnsdagar.<BR><BR>När du sänder aktiviteten så skickas den till en administratör som, om den blir godkänd, lägger upp den på den centrala kalendern.",
+    38 => 'Lägg aktivitet till',
+    39 => 'Central kalender',
+    40 => 'Personlig kalender',
+    41 => 'Sluttid',
+    42 => 'Starttid',
+    43 => 'Heldagsaktivitet',
+    44 => 'Adressrad 1',
+    45 => 'Adressrad 2',
+    46 => 'Stad',
+    47 => 'Stat',
+    48 => 'Postnummer',
+    49 => 'Aktivitet',
+    50 => 'Redigera aktivitetstyper',
+    51 => 'Plats',
+    52 => 'Radera',
+    53 => 'Skapa konto'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Autentisering krävs',
+    2 => 'Felaktig inloggningsinformation',
+    3 => 'Felaktigt lösenord för användare',
+    4 => 'Användarnamn:',
+    5 => 'Lösenord:',
+    6 => 'All tillgång till administrativa delar av denna webbsajt loggas och kontrolleras.<br />Denna sida är bara till för behörig personal.',
+    7 => 'logga in'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Otillräckliga aministratörsrättigheter',
+    2 => 'Du har inte tillräckliga rättigheter för att redigera detta block.',
+    3 => 'Blockeditor',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Blocktitel',
+    6 => 'Ämne',
+    7 => 'Samtliga',
+    8 => 'Block säkerhetsnivå',
+    9 => 'Blockordning',
+    10 => 'Blocktyp',
+    11 => 'Portalblock',
+    12 => 'Normalt block',
+    13 => 'Portalblocksinställningar',
+    14 => 'RDF-länk',
+    15 => 'Senaste RDF-uppdatering',
+    16 => 'Normalblocksinställningar',
+    17 => 'Blockinnehåll',
+    18 => 'Ange Blocktitel, säkerhetsnivå och innehåll',
+    19 => 'Blockadministratör',
+    20 => 'Blocktitel',
+    21 => 'Blocksäk.nivå',
+    22 => 'Blocktyp',
+    23 => 'Blockordning',
+    24 => 'Blockämne',
+    25 => 'Klicka på ett block nedan för att förändra eller radera det.  Klicka på "Nytt block" ovan för att skapa ett nytt block.',
+    26 => 'Layoutblock',
+    27 => 'PHP-block',
+    28 => 'PHP-blockinställningar',
+    29 => 'Blockfunktion',
+    30 => 'Om du vill använda PHP-kod i ditt block, ange namnet på funktionen ovan.  Din funktion måste börja med prefixet "phpblock_" (t.ex. phpblock_getweather).  Om det inte har detta prefix kommer funktionen inte att kallas.  Detta görs för att förhindra personer som eventuellt har hackat din Geeklog-installation från att exekvera godtycklig kod som kan skada ditt system.  Sätt inte tomma parenteser "()" efter ditt funktionsnamn.  Slutligen rekommenderas du att lägga alla dina PHP-block i /path/to/geeklog/system/lib-custom.php.  Då kommer koden att vara kvar även när du uppdaterar till en ny version av GeekLog.',
+    31 => 'Fel i PHP-block.  Funktionen \"%s\" existerar inte.',
+    32 => 'Fel: Fält saknas',
+    33 => 'Du måste ange länken till .rdf-filen för portalblock',
+    34 => 'Du måste ange titel och funktion av PHP-block',
+    35 => 'Du måste ange titel och innehåll för normala block',
+    36 => 'Du måste ange innehåll för layout-block',
+    37 => 'Felaktigt funktionsnamn i PHP-blocket',
+    38 => 'Funktioner för PHP-block måste ha prefixet \'phpblock_\' (ex. phpblock_getweather).  Detta är en säkerhetsfunktion som förhindrar eventuella crackare att exekvera godtycklig kod på din server.',
+    39 => 'Sida',
+    40 => 'Vänster',
+    41 => 'Höger',
+    42 => 'Du måste ange blockordning och säkerhetsnivå för Geeklog:s standardblock',
+    43 => 'Endast hemsidan',
+    44 => 'Åtkomst nekad',
+    45 => "Du äger inte tillgång till detta block.  Denna incident har loggats.  Gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/block.php\">blockadministrationen</a>.",
+    46 => 'Nytt block',
+    47 => 'Administratörsmeny',
+    48 => 'Blocknamn',
+    49 => ' (inga mellanslag och namnet måste vara unikt)',
+    50 => 'Hjälplänk',
+    51 => 'inkludera http://',
+    52 => 'Om detta fält lämnas tomt så kommer inte hjälpikonen för detta block att visas',
+    53 => 'Aktiverad',
+    54 => 'spara',
+    55 => 'ångra',
+    56 => 'radera',
+    57 => 'Flytta block neråt',
+    58 => 'Flytta block uppåt',
+    59 => 'Flytta block till höger sida',
+    60 => 'Flytta block till vänster sida',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Aktivitetseditor',
+    2 => 'Error',
+    3 => 'Aktivitet',
+    4 => 'Aktivitetslänk',
+    5 => 'Startdatum för aktivitet',
+    6 => 'Slutdatum för aktivitet',
+    7 => 'Plats',
+    8 => 'Aktivitetsbeskrivning',
+    9 => '(inkludera http://)',
+    10 => 'Du måste ange datum/tider, aktivitetstitel och beskrivning!',
+    11 => 'Aktivitetsadministratör',
+    12 => 'Klicka på en aktivitet för att förändra eller radera den.  Klicka på "Ny aktivitet" ovan för att skapa en ny aktivitet.  Klicka på [C] för att kopiera en aktivitet.',
+    13 => 'Aktivitet',
+    14 => 'Startdatum',
+    15 => 'Slutdatum',
+    16 => 'Åtkomst nekad',
+    17 => "Du äger inte tillgång till denna aktivitet.  Denna incident har loggats.  Gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/event.php\">aktivitetsadministrationen</a>.",
+    18 => 'Ny aktivitet',
+    19 => 'Administratörsmeny',
+    20 => 'spara',
+    21 => 'ångra',
+    22 => 'radera',
+    23 => 'Felaktigt startdatum.',
+    24 => 'Felaktigt slutdatum.',
+    25 => 'Slutdatum är före startdatum, ju.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Tidigare artiklar',
+    2 => 'Senare artiklar',
+    3 => 'Läge',
+    4 => 'Skrivläge',
+    5 => 'Artikeleditor',
+    6 => 'Det finns inga artiklar i systemet',
+    7 => 'Författare',
+    8 => 'spara',
+    9 => 'förhandsgranska',
+    10 => 'ångra',
+    11 => 'radera',
+    12 => 'ID',
+    13 => 'Titel',
+    14 => 'Ämne',
+    15 => 'Datum',
+    16 => 'Ingress',
+    17 => 'Brödtext',
+    18 => 'Träffar',
+    19 => 'Kommentarer',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Artikellista',
+    23 => 'Klicka på en artikels nummer nedan för att redigera eller radera den.  Klicka på en artikels titel för att läsa den artikeln.  Klicka på "ny artikel" ovan för att skriva en ny artikel.',
+    24 => 'The ID you chose for this story is already in use. Please use another ID.',
+    25 => 'Error when saving story',
+    26 => 'Förhandsgranska artikel',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Uppladdningsfel',
+    31 => 'Du måste ange titel och ingress',
+    32 => 'Huvudartikel',
+    33 => 'Det kan bara finnas en huvudartikel',
+    34 => 'Utkast',
+    35 => 'Ja',
+    36 => 'Nej',
+    37 => 'Mer av',
+    38 => 'Mer från',
+    39 => 'Epost',
+    40 => 'Åtkomst nekad',
+    41 => "Du äger inte åtkomst till denna artikel.  Denna incident har loggats.  Du kan läsa artikeln nedan.  Gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/story.php\">artikeladministrationen</a> när du är klar.",
+    42 => "Du äger inte åtkomst till denna artikel.  Denna incident har loggats.  Gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/story.php\">artikeladministrationen</a>.",
+    43 => 'Ny artikel',
+    44 => 'Administratörsmeny',
+    45 => 'Tillgång',
+    46 => '<b>OBS:</b> om du anger ett framtida datum så kommer inte artikeln att publiceras förrän det datumet.  Det innebär också att artikeln inte kommer att synas i din RDF-export och inte heller i sök- eller statistiksidorna.',
+    47 => 'Bilder',
+    48 => 'image',
+    49 => 'right',
+    50 => 'left',
+    51 => '<P>För att använda bilderna du bifogar här måste du lägga till specialtaggar i din artikel. Specialtaggarna är [imageX], [imageX_right] eller [imageX_left] där X är bildens nummer.  OBS: Du måste använda alla bilder du bifogar.  Om du inte gör det så kommer du inte kunna spara din artikel.</P><P><B>Förhandsgranskning</B>: För att förhandsgranska en artikel med bifogade bilder måste du lagra den som utkast istället för att använda "Förhandsgranskning".  Använd bara "Förhandsgranskning" när artikeln saknar bilder.</P>',
+    52 => 'Radera',
+    53 => 'användes inte.  Du måste inkludera denna bild i ingressen eller brödtexten innan du kan spara dina ändringar',
+    54 => 'Bifogade bilder användes inte',
+    55 => 'Det blev fel när din artikel skulle sparas.  Rätta till dessa fel innan du sparar',
+    56 => 'Visa ämnesikon',
+    57 => 'Visa oskalad bild',
+    58 => 'Artikeladministration',
+    59 => 'Val',
+    60 => 'Aktiverat',
+    61 => 'Automatisk arkivering',
+    62 => 'Automatisk radering',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Ämneseditor',
+    2 => 'Ämnes-ID',
+    3 => 'Ämnesnamn',
+    4 => 'Ämnesikon',
+    5 => '(använd inte mellanslag)',
+    6 => 'Om man raderar ett ämne så raderas alla artiklar och block som är associerade med detta ämne',
+    7 => 'Ange ämnes-ID och ämnesnamn',
+    8 => 'Ämnesadministratör',
+    9 => 'Klicka på ett ämne för att redigera eller radera det ämnet.  Klicka på "Nytt ämne" ovan för att skapa ett nytt ämne.  Dina accessrättigheter står inom parentes.  Asterisken (*) anger standardvärdet.',
+    10 => 'Sorteringsordning',
+    11 => 'Artiklar/sida',
+    12 => 'Åtkomst nekad',
+    13 => "Du äger inte tillgång till detta ämne.  Denna incident har loggats.  Gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/topic.php\">ämnesadministrationen</a>.",
+    14 => 'Sorteringsmetod',
+    15 => 'alfabetisk',
+    16 => 'standardvärdet är',
+    17 => 'Nytt ämne',
+    18 => 'Administratörsmeny',
+    19 => 'spara',
+    20 => 'ångra',
+    21 => 'radera',
+    22 => 'skönsvärde',
+    23 => 'Gör detta ämne till standardvärde för nya artiklar',
+    24 => '(*)',
+    25 => 'Arkivera ämne',
+    26 => 'gör detta ämne till skönsvärde för alla arkiverade artiklar.  Bara ett ämne tillåts.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Användareditor',
+    2 => 'Användar-ID',
+    3 => 'Användarnamn',
+    4 => 'För- och efternamn',
+    5 => 'Lösenord',
+    6 => 'Säkerhetsnivå',
+    7 => 'Epostadress',
+    8 => 'Hemsida',
+    9 => '(använd inte mellanslag)',
+    10 => 'Du måste ange användarnamn och epostadress',
+    11 => 'Användaradministratör',
+    12 => 'Klicka på en användare för att redigera eller radera den.  Klicka på "Ny användare" ovan för att skapa en ny användare.  Du kan genomföra enkla sökningar genom att ange delar av ett användarnamn, epostadress eller för- eller efternamn i sökformuläret nedan.',
+    13 => 'Säknivå',
+    14 => 'Reg.datum',
+    15 => 'Ny användare',
+    16 => 'Administratörsmeny',
+    17 => 'byt lösenord',
+    18 => 'ångra',
+    19 => 'radera',
+    20 => 'spara',
+    21 => 'Det användarnamnet existerar redan.',
+    22 => 'Fel',
+    23 => 'Lägg till i klump',
+    24 => 'Klumpimportering av användare',
+    25 => 'Du kan importera en klump användare till Geeklog.  Importfilen måste vara en tab-separerad textfil innehållande följande fält: för- och efternamn, användarnamn epostadress.  Varje användare du importerar kommer att få ett slumpmässigt lösenord via epost.  Du måste ange en användare per rad.  Om du inte följer dessa instruktioner så kan det bli strul som bara kan rättas till manuellt.  Var med andra ord mycket noggrann!',
+    26 => 'Sök',
+    27 => 'Begränsa träffar',
+    28 => 'Klicka här för att radera denna bild',
+    29 => 'Sökväg',
+    30 => 'Importera',
+    31 => 'Nya användare',
+    32 => 'Klart!  Import klar av %d användare.  %d misslyckades',
+    33 => 'skicka',
+    34 => 'Fel:  Du måste ange en fil att skicka.',
+    35 => 'Senaste inloggning',
+    36 => '(aldrig)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Godkänn',
+    2 => 'Radera',
+    3 => 'Redigera',
+    4 => 'Profil',
+    10 => 'Titel',
+    11 => 'Startdatum',
+    12 => 'Länk',
+    13 => 'Kategori',
+    14 => 'Datum',
+    15 => 'Ämne',
+    16 => 'Användarnamn',
+    17 => 'För- och efternamn',
+    18 => 'Epost',
+    34 => 'Kontrollpanel',
+    35 => 'Nya artiklar',
+    36 => 'Nya länkar',
+    37 => 'Nya aktiviteter',
+    38 => 'Skicka',
+    39 => 'För tillfället finns det inga bidrag att ta ställning till',
+    40 => 'Nya användare'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'söndag',
+    2 => 'måndag',
+    3 => 'tisdag',
+    4 => 'onsdag',
+    5 => 'torsdag',
+    6 => 'fredag',
+    7 => 'lördag',
+    8 => 'Ny aktivitet',
+    9 => '%s-aktivitet',
+    10 => 'Aktiviteter för',
+    11 => 'Huvudkalender',
+    12 => 'Min kalender',
+    13 => 'januari',
+    14 => 'februari',
+    15 => 'mars',
+    16 => 'april',
+    17 => 'maj',
+    18 => 'juni',
+    19 => 'juli',
+    20 => 'augusti',
+    21 => 'september',
+    22 => 'oktober',
+    23 => 'november',
+    24 => 'december',
+    25 => 'Tillbaka till ',
+    26 => 'Hela dagen',
+    27 => 'Vecka',
+    28 => 'Personlig kalender för',
+    29 => 'Publik kalender',
+    30 => 'radera aktivitet',
+    31 => 'Lägg till',
+    32 => 'Aktivitet',
+    33 => 'Datum',
+    34 => 'Tid',
+    35 => 'Snabbokning',
+    36 => 'Godkänn',
+    37 => 'Den personliga kalendern är inte aktiverad på denna sajt.',
+    38 => 'Personlig aktivitetseditor',
+    39 => 'Dag',
+    40 => 'Vecka',
+    41 => 'Månad'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mail Utility",
+    2 => 'Från',
+    3 => 'Svar till',
+    4 => 'Ärende',
+    5 => 'Innehåll',
+    6 => 'Skicka till:',
+    7 => 'Alla användare',
+    8 => 'Administratör',
+    9 => 'Inställningar',
+    10 => 'HTML',
+    11 => 'Viktigt meddelande!',
+    12 => 'Skicka',
+    13 => 'Reset',
+    14 => 'Ignorera användarinställningar',
+    15 => 'Fel vid epostande till: ',
+    16 => 'Skickade epost till: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Skicka ytterligare epost</a>",
+    18 => 'Till',
+    19 => 'OBS: Välj "Inloggade användare" från rullgardinsmenyn för att skicka epost till samtliga sajtmedlemmar.',
+    20 => "Skickade <successcount> meddelanden och misslyckades att skicka <failcount> stycken.  Om du är intresserad så finns detaljerna för varje meddelande nedan.  Annars kan du <a href=\"{$_CONF['site_admin_url']}/mail.php\">sända ytterligare epost</a> eller gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/moderation.php\">administratörsmenyn</a>.",
+    21 => 'Misslyckad sändning',
+    22 => 'Lyckad sändning',
+    23 => 'Inga misslyckanden',
+    24 => 'Inga meddelande sända',
+    25 => '-- Välj grupp --',
+    26 => 'Ange alla fält i formuläret och välj en grupp från rullgardinsmenyn.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Att installera en insticksmodul kan skada din Geeklog-installation och möjligtvis även ditt system.  Det är viktigt att du bara installerar instickmoduler som du laddat hem från <a href="http://www.geeklog.net" target="_blank">Geeklog:s hemsida</a> eftersom vi testar alla våra insticksmoduler på ett flertal operativsystem.  Det är viktigt att du förstår att installationsprocessen kräver att ett fåtal filsystemskommandon kommer att exekveras.  Detta <EM>kan</EM> leda till säkerhetsproblem -- särskilt om insticksmodulen kommer från en tredje part.  Trots denna varning kan vi inte garantera någon installation.  Vi kan inte heller hållas skadeståndsskyldiga för eventuell skada som installationen av insticksmodulen kan orsaka.  Med andra ord: installera på egen risk!  För den försiktige finns det manuella installationsinstruktioner med varje insticksmodul.',
+    2 => 'Insticksmodul installationsvarning',
+    3 => 'Insticksmodul installationsformulär',
+    4 => 'Insticksmodulsfil',
+    5 => 'Insticksmodulslista',
+    6 => 'Varning:  insticksmodul redan installerad!',
+    7 => 'Insticksmodulen du försöker installera existerar redan.  Radera insticksmodulen innan du försöker installera den igen',
+    8 => 'Kompatibilitetstest för insticksmodul misslyckades',
+    9 => 'Denna insticksmodul kräver en nyare version av Geeklog.  Du måste antingen uppgradera din <a href="http://www.geeklog.net">Geeklog-installation</a> eller hämta en nyare version av insticksmodulen.',
+    10 => '<br><b>Inga insticksmoduler är installerade.</b><br><br>',
+    11 => 'Klicka på insticksmodulens namn för att få information om den modulen, inklusive en länk till insticksmodulens webbsajt.  Både den installerade versionen och versionen som insticksmodulen själv rapporterar kommer att visas.  Detta hjälper dig att se om en insticksmodul behöver uppgraderas.  Läs insticksmodulens manual om du vill ha information om hur man installerar eller uppgraderar den.',
+    12 => 'inget namn på insticksmodul skickades till plugineditor()',
+    13 => 'Insticksmodulseditor',
+    14 => 'Ny insticksmodul',
+    15 => 'Administratörsmeny',
+    16 => 'Namn på insticksmodul',
+    17 => 'Version på insticksmodul',
+    18 => 'Geeklog-version',
+    19 => 'Aktiverad',
+    20 => 'Ja',
+    21 => 'Nej',
+    22 => 'Installera',
+    23 => 'Spara',
+    24 => 'Ångra',
+    25 => 'Radera',
+    26 => 'Namn på insticksmodul',
+    27 => 'Insticksmodulens hemsida',
+    28 => 'Installerad version',
+    29 => 'Geeklog-version',
+    30 => 'Radera insticksmodul?',
+    31 => 'Är du säker på att du vill radera denna insticksmodu?  Om du gör det så kommer du att radera alla filer, data, och datastrukturer som denna insticksmodul använder.  Om du är säker, klicka "radera" igen nedan.',
+    32 => '<p><b>Error AutoLink märkord har inte korrekt format</b></p>',
+    33 => 'Kodversion',
+    34 => 'Uppdatera',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'skapa kanal',
+    2 => 'spara',
+    3 => 'radera',
+    4 => 'avbryt',
+    10 => 'Innehållsprenumeration',
+    11 => 'Ny kanal',
+    12 => 'Administratörsmeny',
+    13 => 'För att ändra eller radera en kanal måste du klicka på dess länk nedan.  För att skapa en ny kanal så måste du klicka på "Ny kanal" ovan.',
+    14 => 'Titel',
+    15 => 'Typ',
+    16 => 'Filnamn',
+    17 => 'Format',
+    18 => 'senast uppdaterad',
+    19 => 'Aktiverad',
+    20 => 'Ja',
+    21 => 'Nej',
+    22 => '<i>(inga kanaler)</i>',
+    23 => 'alla artiklar',
+    24 => 'Redigerar kanaler',
+    25 => 'Kanaltitel',
+    26 => 'Gräns',
+    27 => 'Storlek på inlägg',
+    28 => '(0 = ingen text, 1 = hela texten, annat = begränsat till angivet antal tecken.)',
+    29 => 'Beskrivning',
+    30 => 'Senaste uppdatering',
+    31 => 'Teckenuppsättning',
+    32 => 'Språk',
+    33 => 'Innehåll',
+    34 => 'Inlägg',
+    35 => 'Timmar',
+    36 => 'Kanaltyp',
+    37 => 'Du har åtminstone en insticksmodul som stöder innehållskanaler.  Nedan måste du välja om du vill skapa en Geeklog-kanal eller en kanal från en av insticksmodulerna.',
+    38 => 'Error: Fält saknas',
+    39 => 'Fyll i Kanaltitel, beskrivning och filnamn.',
+    40 => 'Fyll antingen i antal inlägg eller ett antal timmar.',
+    41 => 'Länkar',
+    42 => 'Aktiviteter',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Ditt lösenord har epostats till dig och borde ankomma inom kort.  Följ instruktionerna i meddelandet.  Tack för att du använder {$_CONF['site_name']}",
+    2 => "Tack för att du skickat din artikel till {$_CONF['site_name']}.  Den har nu skickats till vår personal för godkännande.  Om den godkänns så kommer din artikel att publiceras på vår sajt.",
+    3 => "Tack för att du skickat en länk till {$_CONF['site_name']}.  Den har nu skickats till vår personal för godkännande.  Om den godkänns så kommer din länk att publiceras bland våra övriga <a href={$_CONF['site_url']}/links.php>internetlänkar</a>.",
+    4 => "Tack för att du skickat en aktivitet till {$_CONF['site_name']}.  Den har nu skickats till vår personal för godkännande.  Om den godkänns så kommer din aktivitet att synas i vår <a href={$_CONF['site_url']}/calendar.php>kalender</a>.",
+    5 => 'Din kontoinformation har lagrats.',
+    6 => 'Dina artikelinställningar har lagrats.',
+    7 => 'Dina kommentarsinställningar har lagrats.',
+    8 => 'Du är nu utloggad.',
+    9 => 'Artikel sparad.',
+    10 => 'Artikel raderad.',
+    11 => 'Ditt block har nu sparats.',
+    12 => 'Blocket har raderats.',
+    13 => 'Ditt ämne har nu sparats.',
+    14 => 'Ämnet och alla dess artiklar och block har nu raderats.',
+    15 => 'Din länk har nu sparats.',
+    16 => 'Länken har raderats.',
+    17 => 'Din aktivitet har sparats.',
+    18 => 'Aktiviteten raderad.',
+    19 => 'Din omröstning har nu sparats.',
+    20 => 'Omröstningen raderad.',
+    21 => 'Den nya användaren har nu sparats.',
+    22 => 'Användaren har raderats',
+    23 => 'Det blev fel när aktiviteten skulle sparast till din kalender.  Det saknas ett aktivitets-ID.',
+    24 => 'Aktiviteten har sparats till din kalender',
+    25 => 'Du måste vara inloggad för att komma åt din personliga kalender',
+    26 => 'Aktiviteten raderad från din personliga kalender',
+    27 => 'Meddelande skickat.',
+    28 => 'Insticksmodulen har sparats',
+    29 => 'Personliga kalendrar är inte aktiverade på denna sajt',
+    30 => 'Åtkomst nekad',
+    31 => 'Du äger inte tillgång till artikeladministrationen.  Denna incident har loggats.',
+    32 => 'Du äger inte tillgång till ämnesadministrationen.  Denna incident har loggats.',
+    33 => 'Du äger inte tillgång till blockadministrationen.  Denna incident har loggats.',
+    34 => 'Du äger inte tillgång till länkadministrationen.  Denna incident har loggats.',
+    35 => 'Du äger inte tillgång till aktivitetsadministrationen.  Denna incident har loggats.',
+    36 => 'Du äger inte tillgång till omröstningsadministrationen.  Denna incident har loggats.',
+    37 => 'Du äger inte tillgång till användaradministrationen.  Denna incident har loggats.',
+    38 => 'Du äger inte tillgång till insticksmodulsadministrationen.  Denna incident har loggats.',
+    39 => 'Du äger inte tillgång till epostadministrationen.  Denna incident har loggats.',
+    40 => 'Systemmeddelande',
+    41 => 'Du äger inte tillgång till ordbytesadministrationen.  Denna incident har loggats.',
+    42 => 'Ditt ord har sparats.',
+    43 => 'Ordet har raderats.',
+    44 => 'Insticksmodulen installerad!',
+    45 => 'Insticksmodulen raderad.',
+    46 => 'Du äger inte tillgång till databasbackupsadministrationen.  Denna incident har loggats.',
+    47 => 'Denna funktion fungerar bara på *nix.  Om du använder *nix som ditt operativsystem så har din buffert raderats.  Om du använder Windows så måste du söka efter filer som heter adodb_*.php och radera dom manuellt.',
+    48 => "Tack för att du ansökt om medlemsskap i {$_CONF['site_name']}. Vårt team kommer att se över din ansökan och om den godkänns så kommer du att få ett lösenord via epost.",
+    49 => 'Din grupp har sparats.',
+    50 => 'Gruppen har raderats.',
+    51 => 'Detta användarnamn används redan.  Välj ett annat.',
+    52 => 'Den angivna epostadressen verkar inte vara giltig.',
+    53 => 'Ditt nya lösenord är nu lagrat.  Använd ditt nya lösenord för att logga in nu.',
+    54 => 'Tiden för din lösenordsbegäran har gått ut.  Försök igen nedan.',
+    55 => 'Ett meddelande har nu skickats till dig via epost och borde anlända inom kort.  Följ instruktionerna i det meddelandet för att sätta ett nytt lösenord på ditt konto.',
+    56 => 'Epostadressen du angivit används redan av ett annat konto.',
+    57 => 'Ditt konto har raderats.',
+    58 => 'Din kanal har lagrats.',
+    59 => 'Kanalen har raderats.',
+    60 => 'Insticksmodulen har uppdaterats',
+    61 => 'Insticksmodul %s: Okänt meddelande',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Rättigheter',
+    'ownerroot' => 'Ägare/root',
+    'group' => 'Grupp',
+    'readonly' => 'Endast läs',
+    'accessrights' => 'Rättigheter',
+    'owner' => 'Ägare',
+    'grantgrouplabel' => 'Ge ovanstående grupp redigeringsrättigheter',
+    'permmsg' => 'OBS: "medlemmar" är alla inloggade sajtmedlemmar och "anonym" är alla användare som läser sajten utan att ha loggat in.',
+    'securitygroups' => 'Säkerhetsgrupper',
+    'editrootmsg' => "Trots att du är en användaradministratör så kan du inte ändra root-kontot utan att vara root själv.  Du kan ändra alla användare förutom root-användare.  Denna incident har loggats.  Gå tillbaka till <a href=\"{$_CONF['site_admin_url']}/user.php\">användaradministrationen</a>.",
+    'securitygroupsmsg' => 'Kryssa i vilka grupper användare ska vara med i.',
+    'groupeditor' => 'Gruppeditor',
+    'description' => 'Beskrivning',
+    'name' => 'Namn',
+    'rights' => 'Rättigheter',
+    'missingfields' => 'Fält saknas',
+    'missingfieldsmsg' => 'Du måste ange ett namn och en beskrivning på gruppen',
+    'groupmanager' => 'Gruppadministratör',
+    'newgroupmsg' => 'Klicka på en grupp för att ändra eller radera den.  Klicka på "Ny grupp" ovan för att skapa en ny grupp.  Notera att kärngrupper inte kan raderas på grund av att de krävs för att systemet ska fungera.',
+    'groupname' => 'Gruppnamn',
+    'coregroup' => 'Kärngrupp',
+    'yes' => 'Ja',
+    'no' => 'Nej',
+    'corerightsdescr' => 'Detta är en kärngrupp och dess rättigheter kan inte modifieras.  Nedan finns en lista över de rättigheter denna grupp har tillgång till.',
+    'groupmsg' => 'Säkerhetsgrupper på denna sajt är hierarkiskt organiserade.  Genom att lägga denna grupp i någon annan grupp så kommer den att ärva de rättigheter de grupperna äger.  Där det är möjligt rekommenderas du använda de listade grupperna för att ge rättigheter till en grupp.  Om din grupp behöver skräddarsydda rättigheter så kan du välja vilka specifika sajtegenskaper du vill delegera via rutan nedan.  För att göra denna grupp till medlem av någon annan grupp så är det bara att markera vilken/vilka via kryssrutorna nedan.',
+    'coregroupmsg' => 'Detta är en kärngrupp och de grupper som denna grupp tillhör kan inte modifieras.  Nedan finns en lista över vilka grupper denna grupp tillhör.',
+    'rightsdescr' => 'De egenskaper en grupp äger kan antingen specificeras nedan eller genom att ge de egenskaperna till en grupp som den aktuella gruppen tillhör.  De egenskaper nedan som saknar kryssrutor är egenskaper som ärvts från någon av de grupper som den aktuella gruppen är med i.  De egenskaper som har kryssrutor kan delegeras direkt till denna grupp.',
+    'lock' => 'Lås',
+    'members' => 'Medlemmar',
+    'anonymous' => 'Anonym',
+    'permissions' => 'Rättigheter',
+    'permissionskey' => 'R = läs, E = ändra, rättighet att ändra innebär automatiskt läsrättigheter',
+    'edit' => 'Modifiera',
+    'none' => 'Ingen',
+    'accessdenied' => 'Åtkomst nekad',
+    'storydenialmsg' => "Du äger inga rättigheter att läsa denna artikel.  Det kan bero på att du inte är medlem i {$_CONF['site_name']}.  Du kan <a href=users.php?mode=new>skapa ett konto</a> för att få tillgång till allt innehåll på sajten!",
+    'eventdenialmsg' => "Du äger inga rättigheter att läsa denna aktivitet.  Det kan bero på att du inte är medlem i {$_CONF['site_name']}.  Du kan <a href=users.php?mode=new>skapa ett konto</a> för att få tillgång till allt innehåll på sajten!",
+    'nogroupsforcoregroup' => 'Denna grupp är inte medlem i någon annan grupp',
+    'grouphasnorights' => 'Denna grupp äger inte tillgång till några administrativa funktioner på denna sajt',
+    'newgroup' => 'Ny grupp',
+    'adminhome' => 'Administratörsmeny',
+    'save' => 'spara',
+    'cancel' => 'ångra',
+    'delete' => 'radera',
+    'canteditroot' => 'Du har försökt att modifiera Root-gruppen.  Detta har nekats på grund av att du själv inte är medlem i Root-gruppen.  Kontakta systemadministratören om du anser att detta är fel',
+    'listusers' => 'Lista användare',
+    'listthem' => 'lista',
+    'usersingroup' => 'Användare i grupp %s',
+    'usergroupadmin' => 'User Group Administration',
+    'add' => 'Lägg till',
+    'remove' => 'Radera',
+    'availmembers' => 'Tillgängliga medlemmar',
+    'groupmembers' => 'Gruppmedlemmar',
+    'canteditgroup' => 'Du måste vara medlem i denna grupp för att få redigera den.  Kontakta din systemadministratör om du anser att detta meddelande är felaktigt.',
+    'cantlistgroup' => 'Du måste vara medlem i denna grupp för att få se dess medlemmar.  Kontakta din systemadministratör om du anser att detta meddelande är felaktigt.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Senaste tio säkerhetskopiorna',
+    'do_backup' => 'Starta säkerhetskopiering',
+    'backup_successful' => 'Databasbackup genomförd.',
+    'db_explanation' => 'Klicka nedan för att skapa en säkerhetskopia av ditt Geeklog-system',
+    'not_found' => "Felaktig sökväg eller så är inte mysqldump-programmet exekverbart.<BR>Kontrollera <strong>\$_DB_mysqldump_path</strong>-definitionen i config.php.<BR>Variabeln är för närvarande definierad som: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Säkerhetskopiering misslyckades:  filstorleken är noll',
+    'path_not_found' => "{$_CONF['backup_path']} existerar inte eller är inte en katalog",
+    'no_access' => "FEL: Katalogen {$_CONF['backup_path']} är inte tillgänglig.",
+    'backup_file' => 'Backupfil',
+    'size' => 'Storlek',
+    'bytes' => 'Byte',
+    'total_number' => 'Totalt antal säkerhetskopior: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Aktuellt',
+    2 => 'Kontaktinfo',
+    3 => 'Skriv artikel',
+    4 => 'Länkar',
+    5 => 'Omröstningar',
+    6 => 'Kalender',
+    7 => 'Statistik',
+    8 => 'Personliga inställningar',
+    9 => 'Sök',
+    10 => 'detaljerad sökning',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Error',
+    2 => 'Jösses,  jag har letat överallt, men jag kan inte hitta <b>%s</b>.',
+    3 => "<p>Vi beklagar, men filen du söker existerar inte.  Leta gärna på vår <a href=\"{$_CONF['site_url']}\">förstasida</a> eller använd <a href=\"{$_CONF['site_url']}/search.php\">söksidan</a> för att försöka lokalisera det du söker."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Inloggning krävs',
+    2 => 'För att komma åt denna sida så måste du vara inloggad.',
+    3 => 'Logga in',
+    4 => 'Ny användare'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF-funktionen är avstängd',
+    2 => 'Dokumentet kunde inte renderas.  Dokumentet kunde hämtas, men kunde inte renderas.  Var noga med att bara skicka in html-formatterade dokument som är skrivna enligt xHTML.  Notera att komplexa dokument kanske inte kan renderas korrekt, eller över huvud taget.  Ditt renderade dokumentet var 0 byte stort och har raderats.  Om du är övertygad om att ditt dokument borde kunna renderas, så bör du skicka in det igen.',
+    3 => 'Okänt fel vid PDF-generering',
+    4 => 'Inget siddata gavs, eller så vill du använda ad-hoc PDF-genereringsverktyget nedan.  Om du anser att du inte borde få detta felmeddelande så bör du kontakta systemadministratören.  Annars kan du prova att använda formuläret nedan för att generera PDF-filer med mer handpåläggning.',
+    5 => 'Laddar ditt dokument.',
+    6 => 'Vänta medan ditt dokument laddas.',
+    7 => 'Du kan högerklicka på knappen nedan och välja \'spara mål...\' eller \'spara länk...\' för att spara en kopia av ditt dokument.',
+    8 => 'Den angivna sökvägen till HTMLDoc-binären är felaktig, eller så kan det här systemet inte exekvera den.  Kontakta systemadministratören om detta fel kvarstår.',
+    9 => 'PDF-generator',
+    10 => 'Detta är Ad-hoc PDF-generering.  Verktyget kommer att försöka konvertera valfri URL till en PDF.  Tänk på att vissa sidor inte renderas ordentligt med den här funktionen, men detta är en begränsning av HTMLDoc PDF-genereringsverktyget, och dessa felmeddelanden bör inte rapporteras till systemadministratörerna på denna sajt',
+    11 => 'URL',
+    12 => 'Generera PDF!',
+    13 => 'PHP-konfigurationen på den här servern tillåter inte öppning av URL:er med fopen()-kommandot.  Systemadministratören måste redigera php.ini-filen och aktivera allow_url_fopen',
+    14 => 'PDF-filen du begärde existerar inte, eller så försökte du hämta en fil som du inte har tillgång till.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/turkish.php 1.4.0sr5-1/cpanel-glprivate/language/turkish.php
--- 1.3.11sr1/cpanel-glprivate/language/turkish.php	2004-12-31 10:03:36.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/turkish.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,12 +2,10 @@
 
 ###############################################################################
 # turkish.php
-# This is the turkish language page for GeekLog!
-# Special thanks to Mischa Polivanov for his work on this project
-#
-# Copyright (C) 2003 ScriptEvi.com
-# webmaster@scriptevi.com
-# http://www.scriptevi.com
+# This is the turkish language page for GeekLog 1.4.0
+# Translated by Kemal CELLAT
+# kemal@moderntalking.biz
+# http://www.moderntalking.biz
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -82,7 +80,7 @@
     37 => 'Kullanclardan hi bir yaz gelmemi',
     38 => 'Content Syndication',
     39 => 'Yenile',
-    40 => 'You have <tt>register_globals = Off</tt> in your <tt>php.ini</tt>. However, Geeklog requires <tt>register_globals</tt> to be <strong>on</strong>. Before you continue, please set it to <strong>on</strong> and restart your web server.',
+    40 => 'php.ini parametlerinizden <tt>register_globals = Off</tt> konumundadr. ancak, Geeklog  iin <tt>register_globals</tt>parametresinin <strong>on</strong> konumunda olmas gerekmektedir. Before you continue, please set it to <strong>on</strong> and restart your web server.Ltfen servis salaycnz ile kontakt kurunuz',
     41 => 'Misafirler',
     42 => 'Yazar:',
     43 => 'Cevap Ver',
@@ -109,8 +107,8 @@
     64 => 'Bu Yazy bir Arkadana Gnder',
     65 => 'Baslabilir Hali',
     66 => 'Takvimim',
-    67 => ' ne Ho Geldiniz',
-    68 => 'ana Sayfa',
+    67 => 'Ho Geldiniz',
+    68 => 'Ana Sayfa',
     69 => 'iletiim',
     70 => 'ara',
     71 => 'yaz ekle',
@@ -151,11 +149,21 @@
     106 => 'Okunma',
     107 => 'GL Srm Testi',
     108 => 'nbellei Temizle',
-    109 => 'Report abuse',
-    110 => 'Report this post to the site admin',
-    111 => 'View PDF Version',
-    112 => 'Registered Users',
-    113 => 'Documentation'
+    109 => 'Uygunsuz ierik',
+    110 => 'Bu iletiyi site adminine bildirin',
+    111 => 'PDF Versiyonu gster',
+    112 => 'Kaytl yeler',
+    113 => 'Dkmantasyon',
+    114 => 'TRACKBACKS',
+    115 => 'Yeni trackback iletisi yok',
+    116 => 'Trackback',
+    117 => 'Dizin',
+    118 => 'Ltfen sradaki sayfay okuyunuz:',
+    119 => "ifrenizi mi <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">unuttunuz</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Yorumlar (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Tm HTML kodlar izinli'
 );
 
 ###############################################################################
@@ -192,12 +200,12 @@
     7 => 'Son yorumunuz ',
     8 => " saniye nceydi.  Bu sitede iki yorum arasnda minimum {$_CONF['commentspeedlimit']} saniye olmaldr.",
     9 => 'Yorum',
-    10 => 'Send Report',
+    10 => 'Rapor Et',
     11 => 'Yorumu Ekle',
     12 => 'Ltfen Balk ve Yorum bloklarn doldurunuz.',
     13 => 'Bilgileriniz',
     14 => 'n zleme',
-    15 => 'Report this post',
+    15 => 'Bu iletiyi Rapor Et',
     16 => 'Balk',
     17 => 'Hata',
     18 => 'nemli Bilgiler',
@@ -207,9 +215,9 @@
     22 => 'Yorumunuzun konusunu ieriini iyi anlatan bir ekilde seiniz.',
     23 => 'Email adresiniz dier kullanclara GSTERLMEYECEKTR.',
     24 => 'Herhangi Kullanc',
-    25 => 'Are you sure you want to report this post to the site admin?',
-    26 => '%s reported the following abusive comment post:',
-    27 => 'Abuse report'
+    25 => 'Bu iletiyi site adminine bildirmek istediinize emin misiniz?',
+    26 => '%s Bu ileti site adminine bildirilmitir:',
+    27 => 'ikayet Et'
 );
 
 ###############################################################################
@@ -306,7 +314,7 @@
     88 => "Birisi (belki siz) {$_CONF['site_name']}, sitesindeki \"%s\" hesabnz iin yeni bir ifre istedi <{$_CONF['site_url']}>.\n\nayet siz gerekten bu ifreyi almak istiyorsanz, ltfen bu linki tklayn:\n\n",
     89 => "ayet bu ifreyi almak istemiyorsanz, bu mesaj dikkate almayn ve bu istei nemsemeyin (ifreniz deimeyecek ve olduu gibi kalacaktr).\n\n",
     90 => 'Aadaki hesabnz iin yeni bir ifre girmelisiniz. Not: bu formu gnderinceye kadar eski ifreniz geerlidir.',
-    91 => 'Yeni ifre Tespit Et',
+    91 => 'Yeni ifre Belirle',
     92 => 'Yeni ifre Gir',
     93 => 'Yeni bir ifre isteiniz %d saniye nceydi. Bu site ifre istekleri arasnda en az %d saniye olmasn aramaktadr.',
     94 => '"%s" isimli yenin Hesabn Sil',
@@ -321,8 +329,24 @@
     103 => 'Dier yelerden email izni',
     104 => 'Aktifliinizin Grntlenmesi',
     105 => 'Aktif Kullanclar Blounda grntlenme',
-    106 => 'Location',
-    107 => 'Shown in your public profile'
+    106 => 'ehir',
+    107 => 'Kiisel profilinizde grntlenir',
+    108 => 'Yeni ifre tekrar',
+    109 => 'Yeni ifrenizi tekrar yazn',
+    110 => 'uan ki ifreniz',
+    111 => 'Ltfen uan kullanmakta olduunuz ifreyi girin',
+    112 => 'zin verilen giri saysn am bulunuyorsunuz.  Ltfen daha sonra tekrar deneyiniz.',
+    113 => 'Login Attempt Failed',
+    114 => 'Kapal Hesap',
+    115 => 'Hesabnz kapatlmtr, uzun sredir diri yapmam olabilirsiniz. Ltfen site admini ile iletiime geiniz.',
+    116 => 'Hesabnz Aktivasyon bekliyor',
+    117 => 'Hesabnz site ynetimi tarafndan onay beklemektedir. Hesabnz onaylanncaya kadar giri yapmazsnz.',
+    118 => "{$_CONF['site_name']}hesabnz site ynetimi tarafndan aktifletirildi. Aaadaki linkten kullanc adnz: (<username>) ve size daha nce gnderilen ifrenizle giri yapabilirsiniz.",
+    119 => 'Eer ifrenizi unuttuysanz, bu linkten yeni bir ifre belirleyebilirsiniz:',
+    120 => 'Aktif Hesap',
+    121 => 'Servis',
+    122 => 'zgnm, Yeni Kullanc kayd kapatlmtr',
+    123 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">Yeni ye misiniz?</a>?"
 );
 
 ###############################################################################
@@ -335,29 +359,8 @@
     4 => 'Gnn Yazs',
     5 => 'Sonraki',
     6 => 'nceki',
-    7 => 'First',
-    8 => 'Last'
-);
-
-###############################################################################
-# links.php
-
-$LANG06 = array(
-    1 => 'Web Adresleri',
-    2 => 'Gsterilecek bir adres yok.',
-    3 => 'Adres Ekle'
-);
-
-###############################################################################
-# pollbooth.php
-
-$LANG07 = array(
-    1 => 'Oyunuz kaydedildi',
-    2 => 'Anket iin verdiiniz oy kaydedildi',
-    3 => 'Oyla',
-    4 => 'Anketler',
-    5 => 'Oy var',
-    6 => 'Dier anketleri gster'
+    7 => 'lk',
+    8 => 'Son'
 );
 
 ###############################################################################
@@ -428,13 +431,13 @@
     21 => '-',
     22 => '(Tarih yaps YYYY-AA-GG)',
     23 => 'Okunma Says',
-    24 => 'Found %d items',
+    24 => '%d adet kayt bulundu',
     25 => 'kayt bulundu. Toplam',
     26 => 'kayt var. Arama sresi',
     27 => 'saniye.',
     28 => 'Aramanz sonucunda herhangi bir yaz veya yorum bulunamad',
     29 => 'Yaz ve Yorum Arama Sonular',
-    30 => 'No links matched your search Aramanz sonucunda herhangi bir Internet Adresi bulunamad.',
+    30 => 'Aramanz sonucunda herhangi bir link bulunamad.',
     31 => 'Bu eklenti herhangi bir sonu dndrmedi',
     32 => 'Etkinlik',
     33 => 'URL',
@@ -461,7 +464,11 @@
     54 => 'Yorum Sonular',
     55 => 'ibare',
     56 => 'VE',
-    57 => 'YADA'
+    57 => 'YADA',
+    58 => 'Daha fazla sonu &gt;&gt;',
+    59 => 'Sonular',
+    60 => 'sayfa',
+    61 => 'Refine search'
 );
 
 ###############################################################################
@@ -491,7 +498,14 @@
     21 => 'Sitenizde ya hi nternet Adresi yok yada hi kimse herhangi bir adresi kullanmam.',
     22 => 'En ok e-mail ile gnderilen 10 Yaz',
     23 => 'Email&nbsp;Says',
-    24 => 'Hi kimse sitenizdeki bir yazy bir arkadana gndermemi.'
+    24 => 'Hi kimse sitenizdeki bir yazy bir arkadana gndermemi.',
+    25 => 'Top 10 Trackback Commented Stories',
+    26 => 'Traback iletisi yok.',
+    27 => 'Aktif Kullanc Says',
+    28 => 'Top 10 Etkinlikler',
+    29 => 'Etkinlik',
+    30 => 'Hitler',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
 );
 
 ###############################################################################
@@ -641,10 +655,15 @@
     54 => 'Kaydet',
     55 => 'Vazge',
     56 => 'Sil',
-    57 => 'Move Block Down',
-    58 => 'Move Block Up',
-    59 => 'Move block to the right side',
-    60 => 'Move block to the left side'
+    57 => 'Blou Aa Ta',
+    58 => 'Blou Yukar Ta',
+    59 => 'Blou Saa Ta',
+    60 => 'Blou Sola Ta',
+    61 => 'Balk Yok',
+    62 => 'Article Limit',
+    63 => 'Geersiz Blok Bal',
+    64 => 'Balnz bo olamaz ve HTML kodu ieremez!',
+    65 => 'Order'
 );
 
 ###############################################################################
@@ -673,38 +692,9 @@
     20 => 'Kaydet',
     21 => 'Vazge',
     22 => 'Sil',
-    23 => 'Bad start date.',
-    24 => 'Bad end date.',
-    25 => 'End date is before start date.'
-);
-
-###############################################################################
-# admin/link.php
-
-$LANG23 = array(
-    1 => 'nternet Adresi Dzenleyicisi',
-    2 => '',
-    3 => 'Adres Bal',
-    4 => 'Adres URL\'i',
-    5 => 'Kategori',
-    6 => '(http:// ile balayn)',
-    7 => 'Dier',
-    8 => 'Adres Sayac',
-    9 => 'Adres Aklamas',
-    10 => 'Tm alanlar doldurmanz gerekmektedir.',
-    11 => 'Adres Yneticisi',
-    12 => 'Bir adresi deitirmek veya silmek istiyorsanz, adna basn. Yeni etkinlik yaratmak iin Yeni Etkinlik dmesine basn.',
-    13 => 'Adres Bal',
-    14 => 'Adres Kategorisi',
-    15 => 'Adres URL\'i',
-    16 => 'Eriim Engellendi',
-    17 => "Eriim hakknz olmayan bir yazya erimek istiyorsunuz. Bu eyleminiz kaytlara eklenmitir. Ltfen <a href=\"{$_CONF['site_admin_url']}/link.php\">kontrol ana sayfasna geri dnn</a>.",
-    18 => 'Yeni Adres',
-    19 => 'Kontrol Ana Sayfas',
-    20 => 'Farkl ise, belirtin',
-    21 => 'Kaydet',
-    22 => 'Vazge',
-    23 => 'Sil'
+    23 => 'Geersiz Balang.',
+    24 => 'Geersiz Biti tarihi.',
+    25 => 'Biti tarihi balangtan nce.'
 );
 
 ###############################################################################
@@ -730,17 +720,17 @@
     17 => 'erik',
     18 => 'Toplam okunma says',
     19 => 'Yorumlar',
-    20 => '',
-    21 => '',
+    20 => 'Ping',
+    21 => 'Ping Gnder',
     22 => 'Yaz Listesi',
     23 => 'Bir yazy deitirmek veya silmek istiyorsanz, yaznn numarasna basnz. Bir yazy grntlemek istiyorsanz, yaznn balna basnz. Yeni bir yaz yaratmak istiyorsanz, yukardaki Yeni Yaz dmesine basnz.',
-    24 => 'The ID you chose for this story is already in use. Please use another ID.',
-    25 => '',
-    26 => 'Yaz n zlemi',
-    27 => '',
-    28 => '',
-    29 => '',
-    30 => 'File Upload Errors',
+    24 => 'Setiiniz ID kullanlyor. Ltfen baka bir ID seiniz.',
+    25 => 'Yazy kaydederken hata olutu!',
+    26 => 'Yaz n zleme',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>NZLEME</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Dosya Upload Hatalar',
     31 => 'Ltfen, Yazar, Balk ve Konu alanlarn doldurunuz.',
     32 => 'ncelikli',
     33 => 'Sadece bir tane ncelikli yaz olabilir.',
@@ -768,43 +758,34 @@
     55 => 'Aadaki hatalar yaznz kaydetmeye alrken olutu.  Ltfen listelenen hatalar kontrol edip dzeltiniz',
     56 => 'Sembol Gster',
     57 => 'leksiz resim gster',
-    58 => 'Story Management',
+    58 => 'Yaz Ynetimi',
     59 => 'Option',
-    60 => 'Enabled',
+    60 => 'zinli',
     61 => 'Auto Archive',
-    62 => 'Auto Delete'
-);
-
-###############################################################################
-# admin/poll.php
-
-$LANG25 = array(
-    1 => 'zellikleri',
-    2 => 'Please enter a question and at least one answer.',
-    3 => 'Yaratlma Tarihi',
-    4 => 'Anket %s kaydedildi',
-    5 => 'Ankati Deitir',
-    6 => 'Anket Tanmlayc',
-    7 => '(boluk kullanmayn)',
-    8 => 'Ana Sayfada Gzkecek',
-    9 => 'Soru',
-    10 => 'Cevaplar / Oylar',
-    11 => '%s Anket cevap verilerini alrken bir sorun olutu',
-    12 => '%s Anket soru verilerini alrken bir sorun olutu',
-    13 => 'Anket Yarat',
-    14 => 'kaydet',
-    15 => 'vazge',
-    16 => 'sil',
-    17 => 'Please enter a Poll ID',
-    18 => 'Anket Listesi',
-    19 => 'Bir anketi deitirmek veya silmek istiyorsanz, anketin tanmlaycsna basnz. Bir anketi grntlemek istiyorsanz, anketin balna basnz. Yeni bir anket yaratmak istiyorsanz, yukardaki Yeni Anket dmesine basnz.',
-    20 => 'Oylayanlar',
-    21 => 'Eriim Engellendi',
-    22 => "Eriim hakknz olmayan bir yazya erimek istiyorsunuz.  Bu eyleminiz kaytlara eklenmitir. Ltfen  <a href=\"{$_CONF['site_admin_url']}/poll.php\">anket kontrol ekranna geri dnnz</a>.",
-    23 => 'Yeni Anket',
-    24 => 'Kontrol Ana Sayfas',
-    25 => 'Evet',
-    26 => 'Hayr'
+    62 => 'Otomatik Silme',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Yaz Yaym Tarihi',
+    70 => 'Toolbar Seimi',
+    71 => 'Basit Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Gelimi Toolbar',
+    74 => 'Gelimi II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Yaym zellikleri',
+    77 => 'Advanced Editor altrabilmek iin Javascript gereksinimi vardr.  config.php den gerekli ayarlar yapabilirsiniz',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'n zleme',
+    80 => 'Editr',
+    81 => 'Yaym Ayarlar',
+    82 => 'Resimler',
+    83 => 'Arivleme Ayarlar',
+    84 => 'Eriim Haklar',
+    85 => 'Tmn Gster'
 );
 
 ###############################################################################
@@ -836,7 +817,10 @@
     23 => 'bildirilen yeni yaz iin bunu varsaylan balk yap',
     24 => '(*)',
     25 => 'Archive Topic',
-    26 => 'make this the default topic for archived stories. Only one topic allowed.'
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'EN Fazla',
+    29 => 'Dosya Upload Hatalar'
 );
 
 ###############################################################################
@@ -878,7 +862,18 @@
     33 => 'gnder',
     34 => 'Hata: Ykleme yapmak iin bir dosya semi olmanz gerekiyor.',
     35 => 'Son Giri',
-    36 => '(asla)'
+    36 => '(asla)',
+    37 => 'UID',
+    38 => 'Grup Listeleniyor',
+    39 => 'ifre (tekrar)',
+    40 => 'Kayt Tarihi',
+    41 => 'Son Login Tarihi',
+    42 => 'Yasakland',
+    43 => 'Aktivasyon Bekliyor',
+    44 => 'Yetkilendirilme ',
+    45 => 'Aktif',
+    46 => 'ye Durumu',
+    47 => 'Dzenle'
 );
 
 ###############################################################################
@@ -919,7 +914,7 @@
     6 => 'Cuma',
     7 => 'Cumartesi',
     8 => 'Etkinlik Ekle',
-    9 => 'ScriptEvi Etkinlii',
+    9 => 'Site Etkinlii',
     10 => 'Etkinlikler:',
     11 => 'Genel Takvim',
     12 => 'Takvimim',
@@ -1022,20 +1017,24 @@
     30 => 'Eklentiyi Sil?',
     31 => 'Bu eklentiyi silmek istediinizden eminmisiniz? Bunu yaparsanz eklentinin kulland tm veriler ve veri yaplar da silinecektir. Eminseniz Sil dmesine bir daha basnz.',
     32 => '<p><b>Error AutoLink tag not correct format</b></p>',
-    33 => 'Code Version',
-    34 => 'Update'
+    33 => 'Yazlm versionu',
+    34 => 'Gncelle',
+    35 => 'Dzenle',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Gncelle!'
 );
 
 ###############################################################################
 # admin/syndication.php
 
 $LANG33 = array(
-    1 => 'create feed',
-    2 => 'save',
-    3 => 'delete',
-    4 => 'cancel',
+    1 => 'Olutur feed',
+    2 => 'Kaydet',
+    3 => 'Sil',
+    4 => 'Vazge',
     10 => 'Content Syndication',
-    11 => 'New Feed',
+    11 => 'Yeni Feed',
     12 => 'Admin Home',
     13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
     14 => 'Title',
@@ -1059,14 +1058,22 @@
     32 => 'Language',
     33 => 'Contents',
     34 => 'Entries',
-    35 => 'Hours',
+    35 => 'Saats',
     36 => 'Select type of feed',
     37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
     38 => 'Error: Missing Fields',
     39 => 'Please fill in the Feed Title, Description, and Filename.',
-    40 => 'Please enter a  number of entries or number of hours.',
+    40 => 'Please enter a  number of entries or number of Saats.',
     41 => 'Links',
-    42 => 'Events'
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
 );
 
 ###############################################################################
@@ -1126,14 +1133,28 @@
     51 => 'Bu kullanc ad zaten kullanlyor. Ltfen baka bir tane sein.',
     52 => 'Salanan email adresi geerli bir email adresi olarak gzkmyor.',
     53 => 'Yeni ifreniz kabul edildi. Ltfen aadan yeni ifrenizi kullanarak imdi giri yapn.',
-    54 => 'Yeni bir ifre isteme sresiniz doldu. Ltfen aadan tekrar deneyin.',
+    54 => 'Yeni bir ifre isteme sreniz doldu. Ltfen aadan tekrar deneyin.',
     55 => 'Size bir email gnderildi ve az nce yerine ulat. Hesabnza yeni bir ifre tayin etmek iin mesajdaki talimatlar ltfen takip ediniz.',
     56 => 'Salanan email adresi zaten baka bir hesap tarafndan kullanlyor.',
     57 => 'Hesabnz baaryla silindi.',
-    58 => 'Your feed has been successfully saved.',
-    59 => 'The feed has been successfully deleted.',
-    60 => 'The plugin was successfully updated',
-    61 => 'Plugin %s: Unknown message placeholder'
+    58 => 'Your feed baaryla kaydedildi.',
+    59 => 'The feed baaryla silindi.',
+    60 => 'Eklenti baaryla gncellendi',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'Trackback iletisi silindi.',
+    63 => 'Trackback iletisi silinirken hata olutu.',
+    64 => 'Trackback iletiniz baaryla gnderildi.',
+    65 => 'Weblog dizin servisi baaryla saved.',
+    66 => 'Weblog dizin servisi  silindi.',
+    67 => 'Yeni ifreniz does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'yeliiniz Bloke edildi!',
+    70 => 'yeliiniz ynetici onay bekliyor.',
+    71 => 'yeliiniz teyid edildi ve ynetici onay bekliyor.',
+    72 => 'Eklenti kurulumunda hata olutu. Ayrntlar iin  error.log dosyasna baknz.',
+    73 => 'Eklenti kaldrlrken bir hata olutu. Ayrntlar iin  error.log dosyasna baknz',
+    74 => 'pingback baaryla gnderildi.',
+    75 => 'Trackbacklar POST sorgulamas gerektirmektedir.'
 );
 
 ###############################################################################
@@ -1187,13 +1208,22 @@
     'listusers' => 'ye Listesi',
     'listthem' => 'liste',
     'usersingroup' => 'ye grubu %s',
-    'usergroupadmin' => 'User Group Administration',
-    'add' => 'Add',
-    'remove' => 'Remove',
-    'availmembers' => 'Available Members',
-    'groupmembers' => 'Group Members',
-    'canteditgroup' => 'To edit this group, you have to be a member of the group. Please contact the system administrator if you feel this is an error.',
-    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.'
+    'usergroupadmin' => 'User Group Ynetimi',
+    'add' => 'Ekle',
+    'remove' => 'Kaldr',
+    'availmembers' => 'Available Kullanclar',
+    'groupmembers' => 'Grup yeleri',
+    'canteditgroup' => 'Bu gurubu dzenleyebilmek iin, bu grubum bir yesi olmalsnz. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Ara',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Grup ID',
+    'plugin_access_denied_msg' => 'Ynetim sayfasna yetkisiz olarak girmeye altnz.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Grup ad Kullanlyor',
+    'groupexistsmsg' => 'Setiiniz grup ad kullanlmda, Baak bir grup ad seiniz.'
 );
 
 ###############################################################################
@@ -1203,7 +1233,6 @@
     'last_ten_backups' => 'Son 10 yedekleme',
     'do_backup' => 'Yedekleme Yap',
     'backup_successful' => 'Veritaban yedeklemesi baaryla sonuland.',
-    'no_backups' => 'Sisteminizde hi veritaban yedei yok.',
     'db_explanation' => 'Geeklog sisteminin yeni bir yedeini almak iin, aadaki butona basn.',
     'not_found' => "Hatal adres veya mysqldump program altrlnamyor.<br>config.php dosyanzdaki <strong>\$_DB_mysqldump_path</strong> deikenini kontrol edin.<br>Deiken u anki deeri: <var>{$_DB_mysqldump_path}</var>",
     'zero_size' => 'Yedekleme baarsz: Dosya boyutu 0 bayt idi.',
@@ -1227,7 +1256,8 @@
     7 => 'Site statistikleri',
     8 => 'zelletir',
     9 => 'Ara',
-    10 => 'Gelimi Arama'
+    10 => 'Gelimi Arama',
+    11 => 'Dizin'
 );
 
 ###############################################################################
@@ -1253,20 +1283,226 @@
 # pdfgenerator.php
 
 $LANG_PDF = array(
-    1 => 'The PDF feature has been disabled',
-    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been deleted. If you\'re sure that your document should render fine, please re-submit it.',
+    1 => 'PDF zellii kapatld',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been silindi. If you\'re sure that your document should render fine, please re-submit it.',
     3 => 'Unknown error during PDF generation',
     4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
-    5 => 'Loading your document.',
+    5 => 'Ykleniyor .',
     6 => 'Please wait while your document is loaded.',
     7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
     8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
     9 => 'PDF Generator',
     10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
     11 => 'URL',
-    12 => 'Generate PDF!',
+    12 => 'PDF Olutur!',
     13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
     14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
 );
 
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'Kimden',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[devamn oku]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'Trackback iletisi yok.',
+    'this_trackback_url' => 'Bu yaz iin Trackback URL si:',
+    'num_comments' => '%d trackback iletileri',
+    'send_trackback' => 'Ping Gnder',
+    'preview' => 'n zleme',
+    'editor_title' => 'trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Gnder',
+    'button_preview' => 'z zleme',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'Trackback URL si YOK',
+    'target_required' => 'Ltfen bir trackback URL si giriniz',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Trackback URLsi Seiniz',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to Gnder your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to Gnder your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not Gnder a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Gnder Pings',
+    'send_pings_for' => 'Gnder Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'ReGnder',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or Gnder a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Gnder Pingback',
+    'pingback_short' => 'Gnder Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Gnder Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Gnder Trackback',
+    'trackback_short' => 'Gnder a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that Gndering Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To Gnder a trackback comment for a story, go to the list of stories and click on "Gnder Ping" for the story. To Gnder a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to Gnder the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To Gnder a pingback for a story, go to the list of stories and click on "Gnder Ping" for the story. To Gnder a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when Gndering the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Dizini',
+    'title_year' => ' %d iin Article Dizini',
+    'title_month_year' => ' %s %d iin Article Dizini',
+    'nav_top' => 'Article Dizinine Geri Dn',
+    'no_articles' => 'Articles Yok.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n yeni %i in the last %t %s',
+    'new_last' => 'son %t %s',
+    'minutes' => 'dakikalar',
+    'hours' => 'saatler',
+    'days' => 'gnler',
+    'weeks' => 'haftalar',
+    'months' => 'aylar',
+    'minute' => 'dakika',
+    'hour' => 'saat',
+    'day' => 'gn',
+    'week' => 'hafta',
+    'month' => 'ay'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Arama',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Yorum Ekleme zinsiz',
+    -1 => 'Yorum Ekleme zinli'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Alt Alta',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'Yorum Gsterme'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Saat',
+    7200 => '2 Saat',
+    10800 => '3 Saat',
+    28800 => '8 Saat',
+    86400 => '1 Gn',
+    604800 => '1 Hafta',
+    2678400 => '1 Ay'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'nceliksiz',
+    1 => 'ncelikli'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Sadece Konularda Gster',
+    1 => 'Anasayfada Gster'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Text Formatl',
+    'html' => 'HTML Formatl'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'nce Eskiler',
+    'DESC' => 'nce Yeniler'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback zinli',
+    -1 => 'Trackback zinsiz'
+);
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/turkish_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/turkish_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/turkish_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/turkish_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1508 @@
+<?php
+
+###############################################################################
+# turkish.php
+# This is the turkish language page for GeekLog 1.4.0
+# Translated by Kemal CELLAT
+# kemal@moderntalking.biz
+# http://www.moderntalking.biz
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# - root (user)
+###############################################################################
+
+$LANG_CHARSET = 'utf-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Ekleyen:',
+    2 => 'devamý',
+    3 => 'yorum',
+    4 => 'Deðiþtir',
+    5 => 'Oy Kullan',
+    6 => 'Sonuçlar',
+    7 => 'Anket Sonuçlarý',
+    8 => 'oy',
+    9 => 'Yönetici kontrolleri:',
+    10 => 'Gönderilenler',
+    11 => 'Yazýlar',
+    12 => 'Bloklar',
+    13 => 'Konular',
+    14 => 'Internet Adresleri',
+    15 => 'Etkinlikler',
+    16 => 'Anketler',
+    17 => 'Kullanýcýlar',
+    18 => 'SQL Sorgusu',
+    19 => 'Sistemden Çýk',
+    20 => 'Kullanýcý Bilgileri:',
+    21 => 'Kullanýcý Adý',
+    22 => 'Kullanýcý Tanýmlayýcýsý',
+    23 => 'Güvenlik Seviyesi',
+    24 => 'Ýsimsiz Kullanýcý',
+    25 => 'Yorum Ekle',
+    26 => 'Aþaðýdaki yorumlarýn sorumluluðu gönderene aittir. Sitemiz herhangi bir sorumluluk kabul etmez.',
+    27 => 'En Son',
+    28 => 'Sil',
+    29 => 'Hiç yorum yapýlmamýþ.',
+    30 => 'Eski Yazýlar',
+    31 => 'Kabul edilen HTML komutlarý:',
+    32 => 'Kullanýcý adýnýz yanlýþ',
+    33 => 'Hata, kayýt dosyasýna yazýlamýyor',
+    34 => 'Hata',
+    35 => 'Çýkýþ Yap',
+    36 => 'on',
+    37 => 'Kullanýcýlardan hiç bir yazý gelmemiþ',
+    38 => 'Content Syndication',
+    39 => 'Yenile',
+    40 => 'php.ini parametlerinizden <tt>register_globals = Off</tt> konumundadýr. ancak, Geeklog  için <tt>register_globals</tt>parametresinin <strong>on</strong> konumunda olmasý gerekmektedir. Before you continue, please set it to <strong>on</strong> and restart your web server.Lütfen servis saðlayýcýnýz ile kontakt kurunuz',
+    41 => 'Misafirler',
+    42 => 'Yazar:',
+    43 => 'Cevap Ver',
+    44 => 'Üst',
+    45 => 'MySQL Hata Numarasý',
+    46 => 'MySQL Hata Mesajý',
+    47 => 'Kullanýcý',
+    48 => 'Kayýt Bilgileriniz',
+    49 => 'Görünüm Özellikleri',
+    50 => 'SQL komutunda hata var',
+    51 => 'yardým',
+    52 => 'Yeni',
+    53 => 'Kontrol Ana Sayfasý',
+    54 => 'Dosya açýlamýyor.',
+    55 => 'Hata',
+    56 => 'Oy kullan',
+    57 => 'Þifre',
+    58 => 'Sisteme Gir',
+    59 => "Hala üye deðilmisiniz?<br><a href=\"{$_CONF['site_url']}/users.php?mode=new\">Üye olun</a>",
+    60 => 'Yorum Gönder',
+    61 => 'Yeni ',
+    62 => 'kelime',
+    63 => 'Yorum Ayarlarý',
+    64 => 'Bu Yazýyý bir Arkadaþýna Gönder',
+    65 => 'Basýlabilir Hali',
+    66 => 'Takvimim',
+    67 => 'Hoþ Geldiniz',
+    68 => 'Ana Sayfa',
+    69 => 'iletiþim',
+    70 => 'ara',
+    71 => 'yazý ekle',
+    72 => 'web kaynaklarý',
+    73 => 'geçmiþ anketler',
+    74 => 'takvim',
+    75 => 'geliþmiþ arama',
+    76 => 'site istatistikleri',
+    77 => 'Eklentiler',
+    78 => 'Gelecek Etkinlikler',
+    79 => 'Yenilikler',
+    80 => 'hikaye son',
+    81 => 'hikaye son',
+    82 => 'saat',
+    83 => 'Yorumlar',
+    84 => 'Adresler',
+    85 => 'son 48 saat',
+    86 => 'Hiç yeni yorum yok',
+    87 => 'son 2 hafta',
+    88 => 'Hiç yeni adres yok',
+    89 => 'Hiç etkinlik yok',
+    90 => 'Ana Sayfa',
+    91 => 'Yaratýlma süresi:',
+    92 => 'saniye',
+    93 => 'Copyright',
+    94 => 'Bu sayfalarda yayýmlanan materyalin tüm haklarý sahiplerine aittir.',
+    95 => 'Powered By:',
+    96 => 'Gruplar',
+    97 => 'Kelime Listesi',
+    98 => 'Eklentiler',
+    99 => 'Yazýlar',
+    100 => 'Hiç yeni yazý yok',
+    101 => 'Etkinliklerim',
+    102 => 'Site Etkinlikleri',
+    103 => 'Veritabaný Yedekleri',
+    104 => 'ta. Gönderen:',
+    105 => 'Kullanýcýlara Mesaj',
+    106 => 'Okunma',
+    107 => 'GL Sürüm Testi',
+    108 => 'Önbelleði Temizle',
+    109 => 'Uygunsuz içerik',
+    110 => 'Bu iletiyi site adminine bildirin',
+    111 => 'PDF Versiyonu göster',
+    112 => 'Kayýtlý Üyeler',
+    113 => 'Dökümantasyon',
+    114 => 'TRACKBACKS',
+    115 => 'Yeni trackback iletisi yok',
+    116 => 'Trackback',
+    117 => 'Dizin',
+    118 => 'Lütfen sýradaki sayfayý okuyunuz:',
+    119 => "Þifrenizi mi <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">unuttunuz</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Yorumlar (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'Tüm HTML kodlarý izinli'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Etkinlik Takvimi',
+    2 => 'Üzgünüm, gösterilebilinecek etkinlik yok.',
+    3 => 'Ne Zaman',
+    4 => 'Nerede',
+    5 => 'Açýklama',
+    6 => 'Etkinlik Ekle',
+    7 => 'gelecek Etkinlikler',
+    8 => 'Bu etkinliði ekleyerek ileride sadece ilgilendiðiniz etkinlikleri "Takvimim" düðmesine basarak izleyebilirsiniz.',
+    9 => 'Takvimime Ekle',
+    10 => 'Takvimimden Çýkar',
+    11 => "Etkinlik {$_USER['username']} Takvimine ekleniyor",
+    12 => 'Etkinlik',
+    13 => 'Baþlangýç',
+    14 => 'Bitiþ',
+    15 => 'Takvime Geri Dön'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Yorum ekle',
+    2 => 'Biçim Methodu',
+    3 => 'Sistemden Çýk',
+    4 => 'Sisteme Üye ol',
+    5 => 'Kullanýcý Adý',
+    6 => 'Yorum koyabilmeniz için sisteme giriþ yapmanýz gerekiyor. Eðer bir kullanýcý adýnýz yoksa aþaðýdaki formu kullanarak kendinize bir tane yaratýn.',
+    7 => 'Son yorumunuz ',
+    8 => " saniye önceydi.  Bu sitede iki yorum arasýnda minimum {$_CONF['commentspeedlimit']} saniye olmalýdýr.",
+    9 => 'Yorum',
+    10 => 'Rapor Et',
+    11 => 'Yorumu Ekle',
+    12 => 'Lütfen Baþlýk ve Yorum bloklarýný doldurunuz.',
+    13 => 'Bilgileriniz',
+    14 => 'Ön Ýzleme',
+    15 => 'Bu iletiyi Rapor Et',
+    16 => 'Baþlýk',
+    17 => 'Hata',
+    18 => 'Önemli Bilgiler',
+    19 => 'Yorumlarýnýzýn konuyla ilgili olmasýna dikkat ediniz.',
+    20 => 'Yeni bir yorum baþlýðý açmaktansa baþka insanlarýn yorumlarýna cevap vermeyi tercih ediniz.',
+    21 => 'Baþka insanlarýn yorumlarýný okuyunuz ki ayný þeyleri bir de siz söylememiþ olun.',
+    22 => 'Yorumunuzun konusunu içeriðini iyi anlatan bir þekilde seçiniz.',
+    23 => 'Email adresiniz diðer kullanýcýlara GÖSTERÝLMEYECEKTÝR.',
+    24 => 'Herhangi Kullanýcý',
+    25 => 'Bu iletiyi site adminine bildirmek istediðinize emin misiniz?',
+    26 => '%s Bu ileti site adminine bildirilmiþtir:',
+    27 => 'Þikayet Et'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Kullanýcý Profili:',
+    2 => 'Kullanýcý Adý',
+    3 => 'Gerçek Ad',
+    4 => 'Þifre',
+    5 => 'Email',
+    6 => 'Web Sitesi',
+    7 => 'Hakkýnda',
+    8 => 'PGP Anahtarý',
+    9 => 'Kaydet',
+    10 => 'Bu kullanýcý için son 10 yorum -',
+    11 => 'Hiç Yorum Yok',
+    12 => 'Kullanýcý Özellikleri:',
+    13 => 'Her Gece Özet Email',
+    14 => 'Bu þifre rastgele yatarýlmýþtýr. Bu þifreyi olabildiðince çabuk deðiþtirmeniz önerilir. Þifrenizi deðiþtirmek için sisteme giriþ yapýp Kullanýcý menüsünden Kayýt Bilgilerine gidiniz.',
+    15 => "{$_CONF['site_name']} sitesindeki kullanýcý hesabýnýz baþarýyla yaratýldý. Bu hesabý kullanmak için sitemize aþaðýdaki bilgiler dahilinde giriþ yapýnýz. Bu maili ileride referans olarak kullanmak için kaydediniz.",
+    16 => 'Kullanýcý Hesap Bilgileriniz',
+    17 => 'Hesap yok',
+    18 => 'Belirttiðiniz email adresi gerçek bir email adresine benzemiyor',
+    19 => 'Kullanýcý adýnýz veye email adresiniz sistemde kullanýlýyor',
+    20 => 'Belirttiðiniz email adresi gerçek bir email adresine benzemiyor',
+    21 => 'Hata',
+    22 => "{$_CONF['site_name']} üye ol!",
+    23 => "Bir kullanýcý hesabý yaratmanýz size {$_CONF['site_name']} üyeliði saðlar. Bu sayede siteye kendinize ait yorumlarýnýzý gönderebilir ve kendi içeriðinizi düzenleyebilirsiniz. Eðer kullanýcý hesabýnýz yoksa sadece Herhangi Birisi-Ýsimsiz Kullanýcý olarak içerik ve yorum gönderebilirsiniz. Sistemimize verdiðiniz email adresi <b><i>hiç bir zaman</i></b> sitede görüntülenmeyecektir.",
+    24 => 'Þifreniz verdiðiniz email adresinize gönderilecektir.',
+    25 => 'Þifrenizi mi unuttunuz?',
+    26 => 'Kullanýcý adýnýzý girin ve Þifremi Gönder tuþuna basýn. Yeni yaratýlacak bir þifre sistemimize kayýtlý olan email adresinize gönderilecektir.',
+    27 => 'Üye Ol!',
+    28 => 'Þifremi Gönder',
+    29 => 'Sistemden çýktýnýz:',
+    30 => 'Sisteme girdiniz:',
+    31 => 'Seçtiðini bu kontrol sisteme giriþ yapmýþ olmanýzý gerektirmektedir',
+    32 => 'Ýmza',
+    33 => 'Site misafirlerine asla gösterilmeyecektir',
+    34 => 'Adýnýz ve soyadýnýz',
+    35 => 'Þifrenizi deðiþtirmek için',
+    36 => 'http:// ile baþlamalý',
+    37 => 'Yorumlarýnýza uygulanýr',
+    38 => 'Hakkýnýzla ilgili herþey! Herkes bunu okuyabilir',
+    39 => 'Paylaþacaðýnýz PGP anahtarýnýz',
+    40 => 'Konu Sembolü Kullanma',
+    41 => 'Yönetime Katýlmak Ýstiyorum',
+    42 => 'Tarih Biçimi',
+    43 => 'En Fazla Yazý Sayýsý',
+    44 => 'Bloklar Olmasýn',
+    45 => 'Görünüm Özellikleri -',
+    46 => 'Görmek Ýstemediðiniz Konu ve Yazarlar -',
+    47 => 'Haber Ayarlarý -',
+    48 => 'Konular',
+    49 => 'Yazýlarda semboller kullanýlmayacak',
+    50 => 'Ýlgilenmiyorsanýz iþareti kaldýrýn',
+    51 => 'Sadece haberler ile ilgili yazýlar',
+    52 => 'Varsayýlan:',
+    53 => 'Günün yazýlarýný her akþam al',
+    54 => 'Görmek istemediðiniz konu ve kullanýcýlar ile ilgili seçenekleri seçiniz.',
+    55 => 'Site tarafýndan varsayýlan seçim deðerlerini kullanmak istiyorsanýz, seçeneklerin tamamýný boþ býrakýrsanýz. Eðer herhangi bir seçim yaparsanýz, varsayýlan seçimler kullanýlmaz, bu yüzden görmek istediðiniz tüm özellikleri seçmeniz gerekir. Varsayýlan seçimler kalýn yazý tipi ile belirtilmiþtir.',
+    56 => 'Yazarlar',
+    57 => 'Görünüm Þekli',
+    58 => 'Sýralama Þekli',
+    59 => 'Yorum Sayýsý Limiti',
+    60 => 'Yorumlarýnýzýn nasýl görüntülenmesini istersiniz?',
+    61 => 'Ýlk en yeni mi, yoksa en eski mi gösterilsin?',
+    62 => 'Varsayýlan deðer 100',
+    63 => "Þifreniz email adresinize gönderildi. Lütfen, email mesajýnýzda belirtilen adýmlarý uygulayýn. {$_CONF['site_name']} kullandýðýnýz için teþekkür ederiz!",
+    64 => 'Yorum Ayarlarý -',
+    65 => 'Bir Daha Sisteme Girmeyi Deneyin',
+    66 => "Kullanýcý adýnýzý veya þifrenizi yanlýþ girdiniz. Lütfen aþaðýdaki formu kullanarak bir daha sisteme giriþ yapmayý deneyin. <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Yeni bir kullanýcý</a> mýsýnýz?",
+    67 => 'Üyelik Tarihi',
+    68 => 'Beni hatýrla:',
+    69 => 'Sizi sisteme giriþ yaptýktan sonra hatýrlama süresi',
+    70 => "{$_CONF['site_name']} için içerik ve görünüm ayarlarý düzenleyin",
+    71 => "{$_CONF['site_name']} nin en büyük özelliði, içeriðinizi özelleþtirebilir, bu sitenin tüm görüntüsünü deðiþtirebilirsiniz.  Bu büyük avantajlardan yararlanmak için öncelikle {$_CONF['site_name']} ne <a href=\"{$_CONF['site_url']}/users.php?mode=new\">kayýt yapmalýsýnýz</a>.  Zaten kayýtlý bir üyemisiniz?  O zaman sol taraftaki formu kullanarak giriþ yapýnýz!",
+    72 => 'Tema',
+    73 => 'Dil',
+    74 => 'Sitenin görünümünü deðiþtirin!',
+    75 => 'Email ile Gönderilecek Konular -',
+    76 => 'If you select a topic from the list below you will receive any new stories posted to that topic at the end of each day.  Choose only the topics that interest you!',
+    77 => 'Resim',
+    78 => 'Resminizi Ekleyin!',
+    79 => 'Resmi silmek için burayý seçin',
+    80 => 'Siteye Giriþ',
+    81 => 'Email Yolla',
+    82 => 'Son 10 Mesaj -',
+    83 => 'Yazý gönderme istatistikleri -',
+    84 => 'Yazýlan yazýlarýn toplamý:',
+    85 => 'Yazýlan yorumlarýn toplamý:',
+    86 => 'Gönderdiði tüm mesajlar:',
+    87 => 'Giriþ Adýnýz',
+    88 => "Birisi (belki siz) {$_CONF['site_name']}, sitesindeki \"%s\" hesabýnýz için yeni bir þifre istedi <{$_CONF['site_url']}>.\n\nÞayet siz gerçekten bu þifreyi almak istiyorsanýz, lütfen bu linki týklayýn:\n\n",
+    89 => "Þayet bu þifreyi almak istemiyorsanýz, bu mesajý dikkate almayýn ve bu isteði önemsemeyin (þifreniz deðiþmeyecek ve olduðu gibi kalacaktýr).\n\n",
+    90 => 'Aþaðýdaki hesabýnýz için yeni bir þifre girmelisiniz. Not: bu formu gönderinceye kadar eski þifreniz geçerlidir.',
+    91 => 'Yeni Þifre Belirle',
+    92 => 'Yeni Þifre Gir',
+    93 => 'Yeni bir þifre isteðiniz %d saniye önceydi. Bu site þifre istekleri arasýnda en az %d saniye olmasýný aramaktadýr.',
+    94 => '"%s" isimli üyenin Hesabýný Sil',
+    95 => 'Aþaðýdaki "hesabý sil" butonuna týklayýnca hesabýnýz, veritabanýmýzdan kaldýrýlacaktýr. Not, bu hesabýnýz altýnda gönderdiðiniz yazýlar ve yorumlar <strong>silinmeyecektir</strong> fakat iletiler "Ýsimsiz Kullanýcý" olarak görüntülenecektir.',
+    96 => 'hesabý sil',
+    97 => 'Hesap Silme Onayý',
+    98 => 'Hesabýnýzý silmek istediðinize eminmisiniz? Böylece yeni bir hesap yaratýncaya kadar bu siteye kayýtlý kullanýcý olarak giremeyeceksiniz. Þayet eminseniz aþaðýdaki formda ki "hesabý sil" butonuna tekrar týklayýnýz.',
+    99 => 'isimli üyenin Gizlilik Seçenekleri',
+    100 => 'Yöneticiden Email',
+    101 => 'Site yöneticilerinden email izni',
+    102 => 'Üyelerden Email',
+    103 => 'Diðer üyelerden email izni',
+    104 => 'Aktifliðinizin Görüntülenmesi',
+    105 => 'Aktif Kullanýcýlar Bloðunda görüntülenme',
+    106 => 'Þehir',
+    107 => 'Kiþisel profilinizde görüntülenir',
+    108 => 'Yeni þifre tekrar',
+    109 => 'Yeni þifrenizi tekrar yazýn',
+    110 => 'Þuan ki Þifreniz',
+    111 => 'Lütfen þuan kullanmakta olduðunuz þifreyi girin',
+    112 => 'Ýzin verilen giriþ sayýsýný aþmýþ bulunuyorsunuz.  Lütfen daha sonra tekrar deneyiniz.',
+    113 => 'Login Attempt Failed',
+    114 => 'Kapalý Hesap',
+    115 => 'Hesabýnýz kapatýlmýþtýr, uzun süredir diriþ yapmamýþ olabilirsiniz. Lütfen site admini ile iletiþime geçiniz.',
+    116 => 'Hesabýnýz Aktivasyon bekliyor',
+    117 => 'Hesabýnýz site yönetimi tarafýndan onay beklemektedir. Hesabýnýz onaylanýncaya kadar giriþ yapmazsýnýz.',
+    118 => "{$_CONF['site_name']}hesabýnýz site yönetimi tarafýndan aktifleþtirildi. Aþaðadaki linkten kullanýcý adýnýz: (<username>) ve size daha önce gönderilen þifrenizle giriþ yapabilirsiniz.",
+    119 => 'Eðer þifrenizi unuttuysanýz, bu linkten yeni bir þifre belirleyebilirsiniz:',
+    120 => 'Aktif Hesap',
+    121 => 'Servis',
+    122 => 'Üzgünüm, Yeni Kullanýcý kaydý kapatýlmýþtýr',
+    123 => "<a href=\"{$_CONF['site_url']}/users.php?mode=new\">Yeni Üye misiniz?</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Gösterilecek hiç haber yok',
+    2 => 'Gösterilecek hiç haber yazýsý yok. Bu konu hakkýnda hiç haber olmayabilir, veya belirlediðiniz ayarlar yüzünden gösterilemiyor olabilir',
+    3 => ' %s için',
+    4 => 'Günün Yazýsý',
+    5 => 'Sonraki',
+    6 => 'Önceki',
+    7 => 'Ýlk',
+    8 => 'Son'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'Mesaj gönderilirken bir hata oluþtu. Lütfen bir daha deneyin.',
+    2 => 'Mesajýnýz baþarýyla gönderildi.',
+    3 => 'Cevap Adresi alanýna doðru bir email adresi girdiðinizden emin olunuz.',
+    4 => 'Lütfen, Adýnýzý, Cevap Adresinizi, Konu ve Mesaj alanlarýný doldurunuz',
+    5 => 'Hata: Böyle bir kullanýcý yok.',
+    6 => 'Hata oluþtu.',
+    7 => 'Kullanýcý Profili:',
+    8 => 'Kullanýcý Adý',
+    9 => 'Kullanýcý URL\'ý',
+    10 => 'Mail yolla:',
+    11 => 'Adýnýz:',
+    12 => 'Cevap Adresi:',
+    13 => 'Konu:',
+    14 => 'Mesaj:',
+    15 => 'HTML kodu çevrilmeyecektir.',
+    16 => 'Mesajý Gönder',
+    17 => 'Bu Yazýyý bir Arkadaþýna Gönder',
+    18 => 'Alýcýnýn Adý',
+    19 => 'Alýcýnýn Email Adresi',
+    20 => 'Gönderen Adý',
+    21 => 'Gönderen Emaili',
+    22 => 'Bütün alanlarý doldurmalýsýnýz',
+    23 => "Bu email size %s (%s) tarafýndan gönderilmiþtir. Sizin bu yazý {$_CONF['site_url']} ile ilgilenebileceðinizi düþündü. Bu bir SPAM deðildir, ve sizin email adresiniz herhangi bir þekilde bir listeye eklenmemiþtir.",
+    24 => 'Bu yazýya yorum ekle',
+    25 => 'Bu özelliði kullanabilmeniz için sisteme giriþ yapmanýz gerekmektedir. Sitemize giriþ yapmanýz sayesinde sitemizin kötü kullanýmýný önlemiþ olursunuz',
+    26 => 'Bu form sizin seçtiðiniz kullanýcýya email yollamanýzý saðlar. Tüm alanlar mecburidir.',
+    27 => 'Mesaj',
+    28 => '%s: ',
+    29 => "Bu mesaj {$_CONF['site_name']} günlük özetidir. ",
+    30 => ' Günlük Haber Özeti ',
+    31 => 'Baþlýk',
+    32 => 'Tarih',
+    33 => 'Yazýnýn tamamý için:',
+    34 => 'Mesajýn Sonu',
+    35 => 'Üzgünüz, bu kullanýcý hiç mail almamayý tercih etmiþ.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Geliþmiþ Arama',
+    2 => 'Anahtar Kelimeler',
+    3 => 'Konu',
+    4 => 'Tamamý',
+    5 => 'Tipi',
+    6 => 'Yazýlar',
+    7 => 'Yorumlar',
+    8 => 'Yazarlar',
+    9 => 'Tamamý',
+    10 => 'Ara',
+    11 => 'Arama Sonuçlarý',
+    12 => 'bulundu',
+    13 => 'Arama Sonuçlarý: Hiç kayýt bulunamadý',
+    14 => 'Arama kriteriniz ile hiç kayýt bulunamadý:',
+    15 => 'Lütfen bir daha deneyin.',
+    16 => 'Baþlýk',
+    17 => 'Tarih',
+    18 => 'Yazar',
+    19 => "{$_CONF['site_name']} sitesinin veri tabanýnda bütün yazýlarý ara.",
+    20 => 'Tarih',
+    21 => '-',
+    22 => '(Tarih yapýsý YYYY-AA-GG)',
+    23 => 'Okunma Sayýsý',
+    24 => '%d adet kayýt bulundu',
+    25 => 'kayýt bulundu. Toplam',
+    26 => 'kayýt var. Arama süresi',
+    27 => 'saniye.',
+    28 => 'Aramanýz sonucunda herhangi bir yazý veya yorum bulunamadý',
+    29 => 'Yazý ve Yorum Arama Sonuçlarý',
+    30 => 'Aramanýz sonucunda herhangi bir link bulunamadý.',
+    31 => 'Bu eklenti herhangi bir sonuç döndürmedi',
+    32 => 'Etkinlik',
+    33 => 'URL',
+    34 => 'Yer',
+    35 => 'Tüm Gün',
+    36 => 'Aramanýz sonucunda herhangi bir etkinlik bulunamadý.',
+    37 => 'Etkinlik Arama Sonuçlarý',
+    38 => 'Internet Adresleri Arama Sonuçlarý',
+    39 => 'Adresler',
+    40 => 'Etkinlikler',
+    41 => 'Arama yapabilmeniz için en az 3 harften oluþan bir arama sorgusu girmeniz gerekmektedir.',
+    42 => 'Lütfen YYYY-AA-GG (Yýl-Ay-Gün) þeklinde düzenlenmiþ bir tarhi kullanýnýz.',
+    43 => 'tam cümle',
+    44 => 'bütün kelimeler',
+    45 => 'herhangi bir kelime',
+    46 => 'Sonraki',
+    47 => 'Önceki',
+    48 => 'Yazar',
+    49 => 'Tarih',
+    50 => 'Hit',
+    51 => 'Link',
+    52 => 'Konum',
+    53 => 'Yazý Sonuçlarý',
+    54 => 'Yorum Sonuçlarý',
+    55 => 'ibare',
+    56 => 'VE',
+    57 => 'YADA',
+    58 => 'Daha fazla sonuç &gt;&gt;',
+    59 => 'Sonuçlar',
+    60 => 'sayfa',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Site Ýstatistikleri',
+    2 => 'Siteye gelen toplam trafik',
+    3 => 'Sitedeki Yazýlar(Yorumlar)',
+    4 => 'Sitedeki Anketler(Cevaplar)',
+    5 => 'Sitedeki Internet Adresleri(Gidilme Sayýsý)',
+    6 => 'Sitedeki Etkinlikler',
+    7 => 'Ýlk 10 Yazý',
+    8 => 'Yazý Baþlýðý',
+    9 => 'Okunma&nbsp;Sayýsý',
+    10 => 'Sitenizde ya hiç yazý yok yada daha hiçkimse, hiçbir yazýyý okumamýþ.',
+    11 => 'En Çok Yorum Alan 10 Yazý',
+    12 => 'Yorum&nbsp;Sayýsý',
+    13 => 'Sitenizde ya hiç yazý yok yada daha hiç kimse yazýlara yorum yazmamýþ.',
+    14 => 'Ýlk 10 Anket',
+    15 => 'Anket Sorusu',
+    16 => 'Kullanýlan&nbsp;Oy&nbsp;Sayýsý',
+    17 => 'Sitenizde ya hiç anket yok yada daha hiç kimse herhangi bir ankete oy vermemiþ.',
+    18 => 'Ýlk 10 Ýnternet Adresi',
+    19 => 'Adresler',
+    20 => 'Kullaným&nbsp;Sayýsý',
+    21 => 'Sitenizde ya hiç Ýnternet Adresi yok yada hiç kimse herhangi bir adresi kullanmamýþ.',
+    22 => 'En çok e-mail ile gönderilen 10 Yazý',
+    23 => 'Email&nbsp;Sayýsý',
+    24 => 'Hiç kimse sitenizdeki bir yazýyý bir arkadaþýna göndermemiþ.',
+    25 => 'Top 10 Trackback Commented Stories',
+    26 => 'Traback iletisi yok.',
+    27 => 'Aktif Kullanýcý Sayýsý',
+    28 => 'Top 10 Etkinlikler',
+    29 => 'Etkinlik',
+    30 => 'Hitler',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Ýlgili',
+    2 => 'Arkadaþýna Gönder',
+    3 => 'Basýlmaya Uygun Þekli',
+    4 => 'Seçenekler',
+    5 => 'PDF Story Format'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => '%s gönderebilmek için sisteme bir kullanýcý olarak giriþ yapmýþ olmanýz gerekiyor.',
+    2 => 'Sisteme gir',
+    3 => 'Yeni Kullanýcý',
+    4 => 'Etkinlik Ekle',
+    5 => 'Ýnternet Adresi Ekle',
+    6 => 'Yazý Ekle',
+    7 => 'Sisteme giriþ yapmýþ olmanýz gerekiyor',
+    8 => 'Gönder',
+    9 => 'Bir bilgi gönderirken, þu önerileri dikkate almanýzý rica ederiz:<ul><li>Bütün alanlarý doldurmanýz mecburidir.<li>Tam ve doðru bilgi veriniz<li>Ýnternet Adresi girerken iki kere kontrol ediniz</ul>',
+    10 => 'Baþlýk',
+    11 => 'Ýnternet Adresi',
+    12 => 'Baþlangýç Tarihi',
+    13 => 'Bitiþ Tarihi',
+    14 => 'Yer',
+    15 => 'Açýklama',
+    16 => 'Farklý ise lütfen belirtiniz',
+    17 => 'Kategori',
+    18 => 'Diðer',
+    19 => 'Önce Okuyun',
+    20 => 'Hata: Kategori girilmemiþ',
+    21 => '"Diðer"\'i seçtiðinizde lütfen kategori adýný girin',
+    22 => 'Hata: Boþ alanlar var',
+    23 => 'Formdaki tüm alanlarý doldurunuz. Hepsinin doldurulmasý gerekmektedir.',
+    24 => 'Gönderiniz Kaydedildi',
+    25 => '%s gönderiniz baþarýyla kaydedildi.',
+    26 => 'Hýz Limiti',
+    27 => 'Kullanýcý Acý',
+    28 => 'Konu',
+    29 => 'Yazý',
+    30 => 'En son gönderiniz ',
+    31 => " saniye önceydi. Bu sitede iki gönderi arasýnda en az {$_CONF['speedlimit']} saniye geçmesi gerekmektedir",
+    32 => 'Öz Ýzleme',
+    33 => 'Yazý Ön Ýzleme',
+    34 => 'Sistemden çýk',
+    35 => 'HTML kodlarýnýn kullanýmýna izin verilmemektedir',
+    36 => 'Gönderi Tipi',
+    37 => "{$_CONF['site_name']} sitesine bir etkinlik göndermeniz halinde, gönderiniz sitenin Genel Takvim'ine eklenecektir. Genel Takvimi tüm kullanýcýlar görür ve takvimde ilgilerini çeken etkinlikleri özel takvimlerine ekleyebilirler. Sitenin bu özelliði, kiþisel etkinliklerinizi (doðum günleri, veya yýldönümlerini) eklemek için <b>deðildir</b>. Etkinliði gönderdikten sonra, sitenin yönetiminin onayýna gidecektir. Onay verildikten sonra Genel Takvim'de etkinliðinizi görebilirsiniz.",
+    38 => 'Etkinlik Ekle:',
+    39 => 'Genel Takvim',
+    40 => 'Kiþisel Takvim',
+    41 => 'Bitiþ Saati',
+    42 => 'Baþlangýç Saati',
+    43 => 'Tüm Gün Etkinliði',
+    44 => 'Adres Satýrý 1',
+    45 => 'Adres Satýrý 2',
+    46 => 'Þehir',
+    47 => 'Ýlçe',
+    48 => 'Posta Kodu',
+    49 => 'Etkinlik Tipi',
+    50 => 'Etkinlik Tiplerini Düzenle',
+    51 => 'Yer',
+    52 => 'Sil',
+    53 => 'Hesap Yarat'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Sisteme Giriþ Yapmýþ Olmanýz Gerekiyor',
+    2 => 'Engellendi! Sisteme Giriþ Bilgileriniz Yanlýþ',
+    3 => 'Þifre kullanýcý için yanlýþ:',
+    4 => 'Kullanýcý Adý:',
+    5 => 'Þifre:',
+    6 => 'Sitenin yönetim alanlarýnda yapýlan tüm iþlemler kaydedilir ve kontrol edilir.<br>Bu sayfa sadece yetkili kiþiler tarafýndan kullanýlabilir.',
+    7 => 'sisteme giriþ yap'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Yetersiz Yönetici Haklarý',
+    2 => 'Bu bloðu düzenlemek için yeterli haklara sahip deðilsiniz.',
+    3 => 'Blok Düzenleyicisi',
+    4 => 'There was a problem reading this feed (see error.log for details).',
+    5 => 'Blok Baþlýðý',
+    6 => 'Konu',
+    7 => 'Tamamý',
+    8 => 'Blok Güvenlik Seviyesi',
+    9 => 'Blok Sýrasý',
+    10 => 'Blok Tipi',
+    11 => 'Portal Blok',
+    12 => 'Normal Blok',
+    13 => 'Portal Blok Özellikleri',
+    14 => 'RDF Adresi',
+    15 => 'Son RDF Deðiþikliði',
+    16 => 'Normal Blok Özellikleri',
+    17 => 'Blok Ýçeriði',
+    18 => 'Lütfen Blok Baþlýðý, Güvenlik Seviyesi ve Ýçerik alanlarýný doldurunuz.',
+    19 => 'Blok Yöneticisi',
+    20 => 'Blok Baþlýðý',
+    21 => 'Blok Güv. Sev.',
+    22 => 'Blok Tipi',
+    23 => 'Blok Sýrasý',
+    24 => 'Blok Konusu',
+    25 => 'Bir bloðu silmek veya deðiþtirmek istiyorsanýz, bloðun ismine basýnýz. Yeni bir blok yaratmak için yukarýdaki Yeni Blok düðmesine basýnýz.',
+    26 => 'Düzenleme Bloðu',
+    27 => 'PHP Blok',
+    28 => 'PHP Blok Özellikleri',
+    29 => 'Blok Fonksiyonu',
+    30 => 'Eðer bloklarýnýzdan birinin PHP kodu kullanmasýný istiyorsanýz, PHP fonksiyonunun adýný yukarýya giriniz. Fonksiyon adýnýz "phpblock_" ile baþlamalýdýr(örn. phpblock_getweather). Eðer bu þekilde baþlamýyorsa, fonkisyonunuz çaðrýlmayacaktýr. Bunu yapmamýzýn nedeni, Geeklog sürümünü deðiþtiren insanlarýn sisteme zarar verebilecek fonksiyonlarý kullanmalarýný önlemek içindir. Fonkisyon adýndan sonra boþ parantez  "()" koymamaya dikkat edin. Son olarak, tüm PHP kodlarýnýzý /path/to/geeklog/system/lib-custom.php dosyasýna koymanýzý öneririz. Bu sayede sistemin yeni sürümünü yükleseniz bile yazdýðýný kiþisel PHP kodlarý silinmez.',
+    31 => 'PHP Bloðunda hata. %s fonksiyonu yok.',
+    32 => 'Hata: Eksik alan(lar)',
+    33 => 'Portal Bloklarý için .rdf dosyasýna olan adresi girmeniz gerekmektedir.',
+    34 => 'PHP Bloklarý için baþlýk ve fonkisyonu girmeniz gerekmektedir.',
+    35 => 'Normal bloklar için baþlýk ve içeriði girmeniz gerekmektedir.',
+    36 => 'Düzenleme bloðu için içerik girmelisiniz',
+    37 => 'PHP Blok fonksiyonunun adý uygun deðil',
+    38 => 'PHP Bloklar için çaðrýlacak fonksiyonlar \'phpblock_\' ile baþlamalýdýr (örn. phpblock_getweather). Bu ön ek herhangi bir fonksiyonun çaðrýlmasýný önlemek içindir.',
+    39 => 'Kenar',
+    40 => 'Sol',
+    41 => 'Sað',
+    42 => 'Geeklog varsayýlan bloklarý için, blok sýrasý ve güvenlik seviyesini girmelisiniz',
+    43 => 'Sadece Ana Sayfa',
+    44 => 'Eriþim Engellendi',
+    45 => "Eriþim hakkýnýz olmayan bir yazýya eriþmek istiyorsunuz. Bu eyleminiz kayýtlara eklenmiþtir. Lütfen <a href=\"{$_CONF['site_admin_url']}/alan.php\">kontrol ana sayfasýna geri dönün</a>.",
+    46 => 'Yeni Blok',
+    47 => 'Kontrol Ana Sayfasý',
+    48 => 'Alan Adý',
+    49 => ' (boþluk kullanýlmamalý ve tek olmalý)',
+    50 => 'Yardým Dosyasý Adresi',
+    51 => 'http:// ile baþlayýn',
+    52 => 'Bu alaný boþ býrakýrsanýz, blok ile iliþkili yardým düðmesi gösterilmeyecektir',
+    53 => 'Kullanýma Açýk',
+    54 => 'Kaydet',
+    55 => 'Vazgeç',
+    56 => 'Sil',
+    57 => 'Bloðu Aþaðý Taþý',
+    58 => 'Bloðu Yukarý Taþý',
+    59 => 'Bloðu Saða Taþý',
+    60 => 'Bloðu Sola Taþý',
+    61 => 'Baþlýk Yok',
+    62 => 'Article Limit',
+    63 => 'Geçersiz Blok Baþlýðý',
+    64 => 'Baþlýðýnýz boþ olamaz ve HTML kodu içeremez!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Etkinlik Düzenleyicisi',
+    2 => 'Error',
+    3 => 'Etkinlik Baþlýðý',
+    4 => 'Etkinlik Adresi',
+    5 => 'Etkinlik Baþlangýç Tarihi',
+    6 => 'Etkinlik Bitiþ Tarihi',
+    7 => 'Etkinlik Yeri',
+    8 => 'Etkinlik Açýklamasý',
+    9 => '(http:// ile baþlayýn)',
+    10 => 'Tüm alanlarý doldurmanýz gerekmektedir',
+    11 => 'Etkinlik Yöneticisi',
+    12 => 'Bir etkinliði deðiþtirmek veya silmek istiyorsanýz, adýna basýn. Yeni etkinlik yaratmak için Yeni Etkinlik düðmesine basýn.',
+    13 => 'Etkinlik Baþlýðý',
+    14 => 'Baþlangýç Tarihi',
+    15 => 'Bitiþ Tarihi',
+    16 => 'Eriþim Engellendi',
+    17 => "Eriþim hakkýnýz olmayan bir yazýya eriþmek istiyorsunuz. Bu eyleminiz kayýtlara eklenmiþtir. Lütfen <a href=\"{$_CONF['site_admin_url']}/event.php\">kontrol ana sayfasýna geri dönün</a>.",
+    18 => 'Yeni Etkinlik',
+    19 => 'Kontrol Ana Sayfasý',
+    20 => 'Kaydet',
+    21 => 'Vazgeç',
+    22 => 'Sil',
+    23 => 'Geçersiz Baþlangýç.',
+    24 => 'Geçersiz Bitiþ tarihi.',
+    25 => 'Bitiþ tarihi baþlangýçtan önce.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Önceki Yazý',
+    2 => 'Sonraki Yazý',
+    3 => 'Özellikler',
+    4 => 'Gönderi Þekli',
+    5 => 'Yazý Düzenle',
+    6 => 'Sisteme kayýtlý hiç bir yazý bulunmamakta.',
+    7 => 'Yazar',
+    8 => 'kaydet',
+    9 => 'ön izleme',
+    10 => 'vazgeç',
+    11 => 'sil',
+    12 => 'ID',
+    13 => 'Baþlýk',
+    14 => 'Konu',
+    15 => 'Tarih',
+    16 => 'Özet',
+    17 => 'Ýçerik',
+    18 => 'Toplam okunma sayýsý',
+    19 => 'Yorumlar',
+    20 => 'Ping',
+    21 => 'Ping Gönder',
+    22 => 'Yazý Listesi',
+    23 => 'Bir yazýyý deðiþtirmek veya silmek istiyorsanýz, yazýnýn numarasýna basýnýz. Bir yazýyý görüntülemek istiyorsanýz, yazýnýn baþlýðýna basýnýz. Yeni bir yazý yaratmak istiyorsanýz, yukarýdaki Yeni Yazý düðmesine basýnýz.',
+    24 => 'Seçtiðiniz ID kullanýlýyor. Lütfen baþka bir ID seçiniz.',
+    25 => 'Yazýyý kaydederken hata oluþtu!',
+    26 => 'Yazý Ön Ýzleme',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>ÖNÝZLEME</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Dosya Upload Hatalarý',
+    31 => 'Lütfen, Yazar, Baþlýk ve Konu alanlarýný doldurunuz.',
+    32 => 'Öncelikli',
+    33 => 'Sadece bir tane Öncelikli yazý olabilir.',
+    34 => 'Taslak',
+    35 => 'Evet',
+    36 => 'Hayýr',
+    37 => 'Yazdýklarý:',
+    38 => 'Yazýlanlar:',
+    39 => 'Emailler',
+    40 => 'Eriþiminiz Engellendi',
+    41 => "Eriþim hakkýnýz olmayan bir yazýya eriþmek istiyorsunuz. Bu eyleminiz kayýtlara eklenmiþtir. Bu yazýya salt okunur þekilde aþaðýdan eriþebilirsiniz. Ýþiniz bittiði zaman lütfen <a href=\"{$_CONF['site_admin_url']}/story.php\">kontrol ekranýna dönünüz</a>.",
+    42 => "Eriþim hakkýnýz olmayan bir yazýya eriþmek istiyorsunuz.  Bu eyleminiz kayýtlara eklenmiþtir.  Lütfen <a href=\"{$_CONF['site_admin_url']}/story.php\">kontrol ekranýna geri dönünüz</a>.",
+    43 => 'Yeni Yazý',
+    44 => 'Kontrol Ana Sayfasý',
+    45 => 'Aç(access)',
+    46 => '<b>NOT:</b> eðer ileride bir tarih verirseniz, yazýnýz o tarihe kadar yayýmlanmayacaktýr. Bu ayný zamanda bu yazýnýn RDF baþlýklarýnda ve arama ve istatistik sayfalarda görüntülenmeyecektir.',
+    47 => 'Resimler',
+    48 => 'resim',
+    49 => 'sað',
+    50 => 'sol',
+    51 => 'Bu resimlerden birini yazmakta olduðunuz yazýya eklemek istiyorsanýz, eklemek istediðiniz yere: [imageX], [imageX_right] veya [imageX_left] yazýn. Burada, X eklediðiniz resimin numarasýdýr. left ve right ekleri imajýn sola veya saða dayalý olarak çýkmasýna neden olur. NOT: Sadece eklediðiniz resimleri kullanabilirsiniz.  Eðer eklediðiniz resimleri kullanmazsanýz yazýnýzý kaydedemezsiniz.<BR><P><B>Ön Ýzleme</B>:  Resim eklenmiþ bir yazýyý Ön Ýzlem\'de görüntülemenin en iyi yolu: önce yazýnýzý Taslak olarak kaydetmenizdir. Bir yazýyý eðer resimleri eklenmediyse Ön Ýzleme butonunu kullanarak görüntüleyebilirsiniz.',
+    52 => 'Sil',
+    53 => 'kullanýlmadý. Bu resmi özet veya yazý bölümlerinden birinde kullanmadan deðiþiklikleri kaydedemezsiniz',
+    54 => 'Eklenen Resimler Kullanýlmadý',
+    55 => 'Aþaðýdaki hatalar yazýnýzý kaydetmeye çalýþýrken oluþtu.  Lütfen listelenen hatalarý kontrol edip düzeltiniz',
+    56 => 'Sembolü Göster',
+    57 => 'Ölçeksiz resim göster',
+    58 => 'Yazý Yönetimi',
+    59 => 'Option',
+    60 => 'Ýzinli',
+    61 => 'Auto Archive',
+    62 => 'Otomatik Silme',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Yazý Yayým Tarihi',
+    70 => 'Toolbar Seçimi',
+    71 => 'Basit Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Geliþmiþ Toolbar',
+    74 => 'Geliþmiþ II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Yayým Özellikleri',
+    77 => 'Advanced Editorü çalýþtýrabilmek için Javascript gereksinimi vardýr.  config.php den gerekli ayarlarý yapabilirsiniz',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Ön Ýzleme',
+    80 => 'Editör',
+    81 => 'Yayým Ayarlarý',
+    82 => 'Resimler',
+    83 => 'Arþivleme Ayarlarý',
+    84 => 'Eriþim Haklarý',
+    85 => 'Tümünü Göster'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Konu Düzenle',
+    2 => 'Konu Tanýmlayýcý',
+    3 => 'Konu Adý',
+    4 => 'Konu Resmi',
+    5 => '(boþluk kullanmayýn)',
+    6 => 'Bir konuyu sildiðiniz zaman o konuyla iliþkili tüm yazýlar ve bloklar silinecektir',
+    7 => 'Lütfen Konu Tanýmlayýcý ve  Konu Adý alanlarýný doldurunuz',
+    8 => 'Konu Yöneticisi',
+    9 => 'Bir konuyu deðiþtirmek veya silmek istiyorsanýz, konunun adýna basýnýz.  Yeni bir konu yaratmak istiyorsanýz, soldaki Yeni Konu düðmesine basýnýz. Her konuya olan eriþim haklarýnýzý parantez içinde görebilirsiniz',
+    10 => 'Sýralama',
+    11 => 'Yazý/Sayfa',
+    12 => 'Eriþim Engellendi',
+    13 => "Eriþim hakkýnýz olmayan bir konuya eriþmek istiyorsunuz.  Bu eyleminiz kayýtlara eklenmiþtir. Lütfen <a href=\"{$_CONF['site_admin_url']}/topic.php\">konu kontrol ekranýna geri dönünüz</a>.",
+    14 => 'Sýralama yöntemi',
+    15 => 'alfabetik',
+    16 => 'standart',
+    17 => 'Yeni Konu',
+    18 => 'Kontrol Ana Sayfasý',
+    19 => 'kaydet',
+    20 => 'vazgeç',
+    21 => 'sil',
+    22 => 'Varsayýlan',
+    23 => 'bildirilen yeni yazý için bunu varsayýlan baþlýk yap',
+    24 => '(*)',
+    25 => 'Archive Topic',
+    26 => 'make this the default topic for archived stories. Only one topic allowed.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'EN Fazla',
+    29 => 'Dosya Upload Hatalarý'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Kullanýcý Düzenle',
+    2 => 'Kullanýcý Tanýmlayýcýsý',
+    3 => 'Kullanýcý Adý',
+    4 => 'Gerçek Adý',
+    5 => 'Þifresi',
+    6 => 'Güvenlik Seviyesi',
+    7 => 'Email Adresi',
+    8 => 'Web Sitesi',
+    9 => '(boþluk kullanmayýn)',
+    10 => 'Lütfen Kullanýcý Adý, Gerçek Adý, Güvenlik Seviyesi, ve Email Adresi alanlarýný doldurunuz',
+    11 => 'Kullanýcý Düzenleyici',
+    12 => 'Bir kullanýcýnýn bilgilerini deðiþtirmek veya silmek istiyorsanýz, kullanýcý adýna basýnýz.  Yeni bir kullanýcý yaratmak istiyorsanýz, soldaki Yeni Kullanýcý düðmesine basýnýz. Aþaðýdaki formda kullanýcý adýný, email adresini veya gerçek adýný girerek basit aramalar yapabilirsiniz (örneðin *son* or *.edu).',
+    13 => 'Güvenlik Seviyesi',
+    14 => 'Kayýt Tarihi',
+    15 => 'Yeni Kullanýcý',
+    16 => 'Kontrol Ana Sayfasý',
+    17 => 'þifre deðiþtir',
+    18 => 'vazgeç',
+    19 => 'sil',
+    20 => 'kaydet',
+    21 => 'Seçtiðiniz kullanýcý adý kullanýlmakta.',
+    22 => 'Hata',
+    23 => 'Birden Fazla Kullanýcý Ekleme',
+    24 => 'Birden Fazla Kullanýcý Ekleme',
+    25 => 'Geeklog programýna birden fazla kullanýcýyý ekleyebilirsiniz. Sekme ile ayrýlmýþ bir metin dosyasýnýn içine alanlarý þu sýra ile ekleyin: gerçek adý, kullanýcý adý, email adresi.  Eklenen her kullanýcýya rasgele atanmýþ bir þifre, kullanýcýnýn email adresine gönderilecektir. Her satýra sadece bir kullanýcý adýnýn eklenmiþ olmasýna dikkat ediniz. Herhangi bir yanlýþlýkta eklenen her kullanýcýyý tek tek düzeltmek zorunda kalabilirsiniz. Bu yüzden dosyanýzý iki kere kontrol edin!',
+    26 => 'Ara',
+    27 => 'Sonuçlarý Sýnýrla',
+    28 => 'Resmi silmek için burayý seçin',
+    29 => 'Adres',
+    30 => 'Dýþarýdan al',
+    31 => 'Yeni Kullanýcýlar',
+    32 => 'Ekleme iþlemi tamamlandý. %d kullanýcý eklendi ve %d hata oluþtu',
+    33 => 'gönder',
+    34 => 'Hata: Yükleme yapmak için bir dosya seçmiþ olmanýz gerekiyor.',
+    35 => 'Son Giriþ',
+    36 => '(asla)',
+    37 => 'UID',
+    38 => 'Grup Listeleniyor',
+    39 => 'Þifre (tekrar)',
+    40 => 'Kayýt Tarihi',
+    41 => 'Son Login Tarihi',
+    42 => 'Yasaklandý',
+    43 => 'Aktivasyon Bekliyor',
+    44 => 'Yetkilendirilme ',
+    45 => 'Aktif',
+    46 => 'Üye Durumu',
+    47 => 'Düzenle'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Onayla',
+    2 => 'Sil',
+    3 => 'Deðiþtir',
+    4 => 'Profil',
+    10 => 'Baþlýk',
+    11 => 'Baþlangýç Tarihi',
+    12 => 'URL',
+    13 => 'Kategori',
+    14 => 'Tarih',
+    15 => 'Konu',
+    16 => 'Kullanýcý adý',
+    17 => 'Gerçek adý',
+    18 => 'Email',
+    34 => 'Kontrol',
+    35 => 'Eklenen Yazýlar',
+    36 => 'Eklenen Adresler',
+    37 => 'Eklenen Etkinlikler',
+    38 => 'Gönder',
+    39 => 'Onaylamanýz gereken herhangi bir eklenti yok',
+    40 => 'Kullanýcýlarýn ekledikleri'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Pazar',
+    2 => 'Pazartesi',
+    3 => 'Salý',
+    4 => 'Çarþamba',
+    5 => 'Perþembe',
+    6 => 'Cuma',
+    7 => 'Cumartesi',
+    8 => 'Etkinlik Ekle',
+    9 => 'Site Etkinliði',
+    10 => 'Etkinlikler:',
+    11 => 'Genel Takvim',
+    12 => 'Takvimim',
+    13 => 'Ocak',
+    14 => 'Þubat',
+    15 => 'Mart',
+    16 => 'Nisan',
+    17 => 'Mayýs',
+    18 => 'Haziran',
+    19 => 'Temmuz',
+    20 => 'Aðustos',
+    21 => 'Eylül',
+    22 => 'Ekim',
+    23 => 'Kasým',
+    24 => 'Aralýk',
+    25 => 'Geri: ',
+    26 => 'Tüm Gün',
+    27 => 'Hafta',
+    28 => 'Kiþisel Takvim:',
+    29 => 'Genel Takvim',
+    30 => 'etkinliði sil',
+    31 => 'Ekle',
+    32 => 'Etkinlik',
+    33 => 'Tarih',
+    34 => 'Saat',
+    35 => 'Hýzlý Ekle',
+    36 => 'Gönder',
+    37 => 'Özür dilerim, kiþisel takvim özelliði bu sitede tanýmlanmamýþ',
+    38 => 'Kiþisel Etkinlik Düzenleyicisi',
+    39 => 'Gün',
+    40 => 'Hafta',
+    41 => 'Ay'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "{$_CONF['site_name']} Mesaj Programý",
+    2 => 'Kimden',
+    3 => 'Cevaplama Adresi',
+    4 => 'Konu',
+    5 => 'Ýçerik',
+    6 => 'Gönderim:',
+    7 => 'Kullanýcý Ekle',
+    8 => 'Admin',
+    9 => 'Özellikler',
+    10 => 'HTML',
+    11 => 'Acil Mesaj!',
+    12 => 'Gönder',
+    13 => 'Temizle',
+    14 => 'Kullanýcý ayarlarýný dikkate alma',
+    15 => 'Kullanýcý(lar)a gönderilemiyor: ',
+    16 => 'Kullanýcý(lar)a baþarýyla gönderildi: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Bir mesaj daha gönder</a>",
+    18 => 'Kime',
+    19 => 'NOT: eðer bütün site üyelerine mesaj göndermek istiyorsanýz, seçim listesinden Sitedeki Kullanýcýlar grubunu seçiniz.',
+    20 => "<successcount> mesaj baþarýyla gönderildi ama <failcount> mesajýn gönderilmesinde sorun çýktý. Her gönderme denemesinin ayrýntýlarý aþaðýda bulunmaktadýr. <a href=\"{$_CONF['site_admin_url']}/mail.php\">Baþka bir mesaj gönderebilir</a>, veya <a href=\"{$_CONF['site_admin_url']}/moderation.php\">Kontrol Ana Sayfasý</a>na geri dönebilirisiniz.",
+    21 => 'Baþarýsýz',
+    22 => 'Baþarýlý',
+    23 => 'Baþarýsýz olan gönderim yok',
+    24 => 'Baþarýlý olan gönderim yok',
+    25 => '-- Grup seçin --',
+    26 => 'Lütfen formun tüm alanlarýný doldurun ve þeçim listesinden bir kullanýcý grubu seçin.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Sisteme eklenti (plug-in) yükleyerek Geeklog\'un çalýþmasýný ve belki sisteminizi bozabilirsiniz. Sadece <a href="http://www.geeklog.net" target="_blank">Geeklog Ana Sayfasý</a>\'ndan yüklediðiniz eklentileri yüklemeniz tavsiye edilir, çünkü bize ulaþan tüm eklentileri çeþitli iþletim sistemleriyle ayrýntýlý testlere sokuyoruz. Özellikle üçüncü firmalardan yüklediðiniz eklentilerin yüklenirken sisteminize zarar verebilecek programlar çalýþtýrabileceðini ve bunlarýn güvenlik açýklarýna neden olabileceðini anlamanýz önemlidir. Bu uyarýya raðmen, biz bu eklentinin yüklenmesinin baþarýyla tamamlanacaðýný garanti etmiyoruz, ve sisteminizde doðacak herhangi bir hasardan dolayý sorumluluk kabul etmiyoruz. Baþka bir deyiþle eklentiyi yüklerken doðacak tüm riskler size aittir.  Ayrýntýlarý öðrenmek isteyenler için her eklenti paketinde yüklemenin el ile yapýlabilmesi için ayrýntýlar ve adýmlar mevcuttur.',
+    2 => 'Eklenti Yükleme ile Ýlgili Yükümler',
+    3 => 'Eklenti Yükleme Formu',
+    4 => 'Eklenti Dosyasý',
+    5 => 'Eklenti Listesi',
+    6 => 'Uyarý: Eklenti zaten yüklenmiþ!',
+    7 => 'Yüklemeye çalýþtýðýnýz eklenti zaten yüklenmiþ. Eðer yeniden yüklemek istiyorsanýz, eklentiyi önce silin.',
+    8 => 'Eklenti uyumluluk kontrolü baþarýsýz.',
+    9 => 'Bu eklenti Geeklog\'un yeni bir versiyonun istemekte. Elinizdeki kopyayý ya <a href="http://www.geeklog.net">Geeklog</a> adresinden yenileyin ya da eklentinin yeni bir versiyonunu bulmalýsýnýz.',
+    10 => '<br><b>Þu anda hiç bir eklenti yüklenmemiþ.</b><br><br>',
+    11 => 'Bir eklentiyi deðiþtirmek veya silmek istiyorsanýz eklentinin numarasýna basýn. Eklenti hakkýnda daha fazla bilgi edinmek için eklentinin adýna basýn. Bu eklentinin web sitesini açar. Bir eklenti yüklemek veya sürümünü yenilemek için dokümantasyonuna baþvurun.',
+    12 => 'plugineditor()\'e hiç bir eklenti adý saðlanmadý',
+    13 => 'Eklenti Düzenle',
+    14 => 'Yeni Eklenti',
+    15 => 'Kontrol Ana Sayfasý',
+    16 => 'Eklenti Adý',
+    17 => 'Eklenti Sürümü',
+    18 => 'Geeklog Sürümü',
+    19 => 'Kullanýmda',
+    20 => 'Evet',
+    21 => 'Hayýr',
+    22 => 'Yükle',
+    23 => 'Kaydet',
+    24 => 'Vazgeç',
+    25 => 'Sil',
+    26 => 'Eklenti adý',
+    27 => 'Eklenti Web Sitesi',
+    28 => 'Eklenti Sürümü',
+    29 => 'Geeklog Sürümü',
+    30 => 'Eklentiyi Sil?',
+    31 => 'Bu eklentiyi silmek istediðinizden eminmisiniz? Bunu yaparsanýz eklentinin kullandýðý tüm veriler ve veri yapýlarý da silinecektir. Eminseniz Sil düðmesine bir daha basýnýz.',
+    32 => '<p><b>Error AutoLink tag not correct format</b></p>',
+    33 => 'Yazýlým versionu',
+    34 => 'Güncelle',
+    35 => 'Düzenle',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Güncelle!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'Oluþtur feed',
+    2 => 'Kaydet',
+    3 => 'Sil',
+    4 => 'Vazgeç',
+    10 => 'Content Syndication',
+    11 => 'Yeni Feed',
+    12 => 'Admin Home',
+    13 => 'To modify or delete a feed, click on the feed\'s title below. To create a new feed, click on New Feed above.',
+    14 => 'Title',
+    15 => 'Type',
+    16 => 'Filename',
+    17 => 'Format',
+    18 => 'last updated',
+    19 => 'Enabled',
+    20 => 'Yes',
+    21 => 'No',
+    22 => '<i>(no feeds)</i>',
+    23 => 'all Stories',
+    24 => 'Feed Editor',
+    25 => 'Feed Title',
+    26 => 'Limit',
+    27 => 'Length of entries',
+    28 => '(0 = no text, 1 = full text, other = limit to that number of chars.)',
+    29 => 'Description',
+    30 => 'Last Update',
+    31 => 'Character Set',
+    32 => 'Language',
+    33 => 'Contents',
+    34 => 'Entries',
+    35 => 'Saats',
+    36 => 'Select type of feed',
+    37 => 'You have at least one plugin installed that supports content syndication. Below you will need to select whether you want to create a Geeklog feed or a feed from one of the plugins.',
+    38 => 'Error: Missing Fields',
+    39 => 'Please fill in the Feed Title, Description, and Filename.',
+    40 => 'Please enter a  number of entries or number of Saats.',
+    41 => 'Links',
+    42 => 'Events',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Þifreniz email adresinize gönderilmiþtir. Lütfen, email adresinize gelen mesajdaki adýmlarý uygulayýn. {$_CONF['site_name']} kullandýðýnýz için teþekkür ederiz.",
+    2 => 'Yazýnýzý sitemize gönderdiðiniz için teþekkür ederiz.  Yazýnýz, site yönetimi tarafýndan onaylandýktan sonra yayýmlanacaktýr.',
+    3 => "Ýnternet adresini sitemize gönderdiðiniz için teþekkür ederiz. Adresiniz, site yönetimi tarafýndan onaylandýktan sonra yayýmlanacaktýr. Onaylandýktan sonra gönderdiðiniz adresi<a href={$_CONF['site_url']}/links.php>Adresler</a> bölümünde görebilirsiniz.",
+    4 => "Sitemize eklediðiniz etkinlik için teþekkür ederiz.  Gönderdiðiniz etkinlik, site yönetimi tarafýndan onaylandýktan sonra yayýmlanacaktýr. Onaylandýktan sonra <a href={$_CONF['site_url']}/calendar.php>takvim</a> bölümünde görebilirsiniz.",
+    5 => 'Kayýt bilgileriniz baþarýlý bir þekilde kaydedildi.',
+    6 => 'Görünüm ayarlarýnýz baþarýlý bir þekilde kaydedildi.',
+    7 => 'Yorum tercihleriniz baþarýlý bir þekilde kaydedildi.',
+    8 => 'Sistemden baþarýyla çýktýnýz.',
+    9 => 'Yazýnýz baþarýyla kaydedildi.',
+    10 => 'Yazýnýz baþarýyla silindi.',
+    11 => 'Bloðunuz baþarýyla kaydedildi.',
+    12 => 'Bloðunuz baþarýyla silindi.',
+    13 => 'Konunuz baþarýyla kaydedildi.',
+    14 => 'Konunuz ve bütün yazýlarý ve alanlarý baþarýyla silindi.',
+    15 => 'Internet Adresiniz baþarýyla kaydedildi.',
+    16 => 'Internet Adresiniz baþarýyla silindi.',
+    17 => 'Etkinliðiniz baþarýyla kaydedildi.',
+    18 => 'Etkinliðiniz baþarýyla silindi.',
+    19 => 'Anketiniz baþarýyla kaydedildi.',
+    20 => 'Anketiniz baþarýyla silindi.',
+    21 => 'Yeni kullanýcý baþarýyla kaydedildi.',
+    22 => 'Yeni kullanýcý baþarýyla silindi.',
+    23 => 'Takviminize etkinlik eklerken sorun oluþtu. Etkinlik tanýmlayýcýsý tanýmlanmamýþ.',
+    24 => 'Takviminize etkinlik baþarýyla eklendi.',
+    25 => 'Sisteme giriþ yapmadan kiþisel takviminizi açamazsýnýz.',
+    26 => 'Kiþisel takviminizden etkinlik baþarýyla silinmiþtir.',
+    27 => 'Mesaj baþarýlya iletildi.',
+    28 => 'Eklenti baþarýyla eklendi.',
+    29 => 'Üzgünüm, kiþisel takvimler bu sitede kullanýlamýyor.',
+    30 => 'Eriþim Engellendi',
+    31 => 'Yazý kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    32 => 'Konu kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    33 => 'Blok kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    34 => 'Internet Adresi kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    35 => 'Etkinlik kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    36 => 'Anket kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    37 => 'Kullanýcý kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    38 => 'Eklenti kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    39 => 'Mesaj kontrol sayfalarýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    40 => 'Sistem Mesajý',
+    41 => 'Kelime deðiþtirme sayfasýna eriþiminiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    42 => 'Kelimeniz baþarýyla kaydedildi.',
+    43 => 'Kelimeniz  baþarýyla silindi.',
+    44 => 'Eklenti baþarýlya yüklendi!',
+    45 => 'Eklenti baþarýyla silindi.',
+    46 => 'Veri tabaný yedekleme programýna eriþimiz yok.  Giriþ izni olmayan tüm etkinlikler kayýtlara geçmektedir.',
+    47 => 'Bu özellik sadece Linux, Unix gibi iþletim sistemlerinde çalýþýr.  Eðer Linux, Unix gibi bir iþletim sistemi kullanýyorsanýz, önbelleðiniz baþarýyla temizlenmiþtir. Eðer Windows kullanýyorsanýz, adodb_*.php  dosyalarýný aratýn ve silin.',
+    48 => "{$_CONF['site_name']} sitesine üyelik baþvurunuz için teþekkür ederiz. Site yönetimi baþvurunuzu inceleyecektir. Eðer kabul alýrsanýz þifreniz belirttiðiniz eðmail adreisne gönderilecektir.",
+    49 => 'Grubunuz baþarýyla kaydedildi.',
+    50 => 'Grup baþarýyla silindi.',
+    51 => 'Bu kullanýcý adý zaten kullanýlýyor. Lütfen baþka bir tane seçin.',
+    52 => 'Saðlanan email adresi geçerli bir email adresi olarak gözükmüyor.',
+    53 => 'Yeni þifreniz kabul edildi. Lütfen aþaðýdan yeni þifrenizi kullanarak þimdi giriþ yapýn.',
+    54 => 'Yeni bir þifre isteme süreniz doldu. Lütfen aþaðýdan tekrar deneyin.',
+    55 => 'Size bir email gönderildi ve az önce yerine ulaþtý. Hesabýnýza yeni bir þifre tayin etmek için mesajdaki talimatlarý lütfen takip ediniz.',
+    56 => 'Saðlanan email adresi zaten baþka bir hesap tarafýndan kullanýlýyor.',
+    57 => 'Hesabýnýz baþarýyla silindi.',
+    58 => 'Your feed baþarýyla kaydedildi.',
+    59 => 'The feed baþarýyla silindi.',
+    60 => 'Eklenti baþarýyla güncellendi',
+    61 => 'Plugin %s: Unknown message placeholder',
+    62 => 'Trackback iletisi silindi.',
+    63 => 'Trackback iletisi silinirken hata oluþtu.',
+    64 => 'Trackback iletiniz baþarýyla gönderildi.',
+    65 => 'Weblog dizin servisi baþarýyla saved.',
+    66 => 'Weblog dizin servisi  silindi.',
+    67 => 'Yeni þifreniz does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Üyeliðiniz Bloke edildi!',
+    70 => 'Üyeliðiniz yönetici onayý bekliyor.',
+    71 => 'Üyeliðiniz teyid edildi ve yönetici onayý bekliyor.',
+    72 => 'Eklenti kurulumunda hata oluþtu. Ayrýntýlar için  error.log dosyasýna bakýnýz.',
+    73 => 'Eklenti kaldýrýlýrken bir hata oluþtu. Ayrýntýlar için  error.log dosyasýna bakýnýz',
+    74 => 'pingback baþarýyla gönderildi.',
+    75 => 'Trackbacklar POST sorgulamasý gerektirmektedir.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Eriþim',
+    'ownerroot' => 'Sahibi/Root',
+    'group' => 'Grup',
+    'readonly' => 'Salt Okunur',
+    'accessrights' => 'Eriþim Haklarý',
+    'owner' => 'Sahibi',
+    'grantgrouplabel' => 'Yukarýdaki Grup Deðiþtirme Haklarýna Ýzin Ver',
+    'permmsg' => 'NOT: Üyeler bu sitenin, siteye girmiþ olan üyelerine denir, ve Herhangi ise sitede bulundan ama siteye giriþ yapmamýþ herhangi bir kullanýcýya denir.',
+    'securitygroups' => 'Güvenlik Gruplarý',
+    'editrootmsg' => "Kullanýcý Yöneticisi olmanýza raðmen root kullanýcýsýný, root kullanýcýsý olmadan deðiþtiremezsiniz. Root kullanýcýsý dýþýnda herhangi bir kullanýcýyý deðiþtirebiliriniz. Root kullanýcýsýna olan izinsiz tüm etkinlikler kaydedilmektedir. Lütfen <a href=\"{$_CONF['site_admin_url']}/user.php\">Kullarnýcý Kontrol Sayfasý</a>'na geri dönün.",
+    'securitygroupsmsg' => 'Kullanýcýnýn bulunmasýný istediðiniz gruplarý lütfen seçiniz.',
+    'groupeditor' => 'Grup Düzenleyicisi',
+    'description' => 'Taným',
+    'name' => 'Ad',
+    'rights' => 'Haklar',
+    'missingfields' => 'Eksik Bloklar',
+    'missingfieldsmsg' => 'Gruba bir Ad ve Taným vermelisiniz.',
+    'groupmanager' => 'Grup Düzenleyicisi',
+    'newgroupmsg' => 'Bir grubu deðiþtirmek veya silmek istiyorsanýz, grubun adýna basýnýz. Yeni bir grup yaratmak için yukarýdan Yeni Grup düðmesine basýnýz. Sistem tarafýndan yaratýlmýþ temel gruplar sistem tarafýndan kullanýldýðý için silinemez.',
+    'groupname' => 'Grup Adý',
+    'coregroup' => 'Temel Grubu',
+    'yes' => 'Evet',
+    'no' => 'Hayýr',
+    'corerightsdescr' => "Bu grup bir temel {$_CONF['site_name']} grubudur.  Bu nedenden bu grubun eriþim haklarý deðiþtirlemez. Aþaýðda bu grubun hangi haklara sahip olduðunun listesi bulunmaktadýr.",
+    'groupmsg' => 'Bu sitede kullanýlan güvenlik gruplarý hiyerarþiktir. Bir grubu bu gruba ekleyerek bu grubun sahip olduðu eriþim haklarýyla ayný eriþim haklarýný eklediðiniz gruba vermiþ olursunuz. Bir gruba güvenlik haklarý vermek için aþaðýdaki gruplarý kullanarak gruplar oluþturmaný önerilir. Eðer bir gruba özel haklar vermek istiyorsanýz, aþaðýdaki \'Haklar\' bölümünden istediðiniz özellikleri seçebilirsiniz. Bu grubu bir baþka grup(lar)ýn altýna eklemek için sadece aþaðýdaki gruplardan istediklerinizi seçin.',
+    'coregroupmsg' => "Bu grup bir temel {$_CONF['site_name']} grubudur.  Bu yüzden bu grubun bulunduðu gruplar deðiþtirilemez. Bu grubun bulunduðu gruplarýn salt okunur listesi aþaðýdadýr.",
+    'rightsdescr' => 'Bir grubun bir eriþim hakký buradan verilebilir veya grubun bir üst grubu varsa o gruba verilerek bu gurubun almasý saðlanabilinir. Aþaðýda eðer seçme kutusu olmayan haklar varsa bunlar bu grubun üyesi olduðu bir üst gruba verilmiþ olan haklardýr. Seçme kutusu olan haklarý seçerek bu gruba daha geniþ bir hak verebilirsiniz.',
+    'lock' => 'Kilit',
+    'members' => 'Üyeler',
+    'anonymous' => 'Ýsimsiz Kullanýcý',
+    'permissions' => 'Ýzinler',
+    'permissionskey' => 'R = oku, E = düzenle, haklarda deðiþiklik yap',
+    'edit' => 'Deðiþtir',
+    'none' => 'Hiçbiri',
+    'accessdenied' => 'Eriþim Engellendi',
+    'storydenialmsg' => "Bu yazýyý okuma yetkiniz yok. Bunun nedeni {$_CONF['site_name']} sitesinin bir üyesi olmamanýzdan kaynaklanýyor olabilir. Lütfen {$_CONF['site_name']} sitesinin <a href=users.php?mode=new> üyesi olun</a> ve sadece üyelere verilen haklara kavuþun!",
+    'eventdenialmsg' => "Bu etkinliði görüntüleme yetkiniz yok. Bunun nedeni {$_CONF['site_name']} sitesinin bir üyesi olmamanýzdan kaynaklanýyor olabilir. Lütfen {$_CONF['site_name']} sitesinin <a href=users.php?mode=new> üyesi olun</a> ve sadece üyelere verilen haklara kavuþun!",
+    'nogroupsforcoregroup' => 'Bu grup bir baþka gruba daðil deðil.',
+    'grouphasnorights' => 'Bu grup, sitenin hiç bir yönetimsel özelliklerine sahip deðil.',
+    'newgroup' => 'Yeni Grup',
+    'adminhome' => 'Kontrol Ana Sayfasý',
+    'save' => 'kaydet',
+    'cancel' => 'vazgeç',
+    'delete' => 'sil',
+    'canteditroot' => 'Root grubu deðiþtirmeye çalýþtýnýz, fakat root grubun bir üyesi deðilsiniz. Bu nedenden eriþiminiz engellendi. Eðer bunun bir hata olduðunu düþünüyorsanýz sistem yöneticinize danýþýn.',
+    'listusers' => 'Üye Listesi',
+    'listthem' => 'liste',
+    'usersingroup' => 'Üye grubu %s',
+    'usergroupadmin' => 'User Group Yönetimi',
+    'add' => 'Ekle',
+    'remove' => 'Kaldýr',
+    'availmembers' => 'Available Kullanýcýlar',
+    'groupmembers' => 'Grup Üyeleri',
+    'canteditgroup' => 'Bu gurubu düzenleyebilmek için, bu grubum bir üyesi olmalýsýnýz. Please contact the system administrator if you feel this is an error.',
+    'cantlistgroup' => 'To see the members of this group, you have to be a member yourself. Please contact the system administrator if you feel this is an error.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Ara',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Grup ID',
+    'plugin_access_denied_msg' => 'Yönetim sayfasýna yetkisiz olarak girmeye çalýþtýnýz.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Grup adý Kullanýlýyor',
+    'groupexistsmsg' => 'Seçtiðiniz grup adý kullanýlýmda, Baþak bir grup adý seçiniz.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Son 10 yedekleme',
+    'do_backup' => 'Yedekleme Yap',
+    'backup_successful' => 'Veritabaný yedeklemesi baþarýyla sonuçlandý.',
+    'db_explanation' => 'Geeklog sisteminin yeni bir yedeðini almak için, aþaðýdaki butona basýn.',
+    'not_found' => "Hatalý adres veya mysqldump programý çalýþtýrýlýnamýyor.<br>config.php dosyanýzdaki <strong>\$_DB_mysqldump_path</strong> deðiþkenini kontrol edin.<br>Deðiþken þu anki deðeri: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Yedekleme baþarýsýz: Dosya boyutu 0 bayt idi.',
+    'path_not_found' => "{$_CONF['backup_path']} adresi yok veya bir klasör deðil",
+    'no_access' => "HATA: Kalsör {$_CONF['backup_path']} eriþilinemiyor.",
+    'backup_file' => 'Yedek dosyasý',
+    'size' => 'Boyut',
+    'bytes' => 'Bayt',
+    'total_number' => 'Toplam backup sayýsý: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Ana Sayfa',
+    2 => 'Ýletiþim',
+    3 => 'Yazý Yazýn',
+    4 => 'Adresler',
+    5 => 'Anketler',
+    6 => 'Takvim',
+    7 => 'Site Ýstatistikleri',
+    8 => 'Özelleþtir',
+    9 => 'Ara',
+    10 => 'Geliþmiþ Arama',
+    11 => 'Dizin'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => '404 Hatasý',
+    2 => 'Üff, her yere baktým ama <b>%s</b> bulamadým.',
+    3 => "<p>Üzgünüz, belirttiðiniz dosya bulunamýyor. Lütfen <a href=\"{$_CONF['site_url']}\">ana sayfa</a>ya veya <a href=\"{$_CONF['site_url']}/search.php\">arama sayfasý</a>'na bakarak kaybettiðiniz dokümaný bulabilecekmisiniz bir bakýn."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Sisteme giriþ yapmanýz gerekiyor',
+    2 => 'Üzgünüm, bu alana giriþ yapabilmeniz için bir kullanýcý olarak giriþ yapmanýz gerekiyor.',
+    3 => 'Giriþ yap',
+    4 => 'Yeni Kullanýcý'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'PDF özelliði kapatýldý',
+    2 => 'The document provided was not rendered. The document was received but could not be processed.  Please make sure to submit only html formatted documents that have been written to the xHTML standard. Please note that overly complex html documents may not render correctly or at all.The document resulting from your attempt was 0 bytes in length, and has been silindi. If you\'re sure that your document should render fine, please re-submit it.',
+    3 => 'Unknown error during PDF generation',
+    4 => "No page data was given or you want to use the ad-hoc PDF generation tool below.  If you think you are getting this page\n          in error then please contact the system administrator.  Otherwise, you may use the form below to generate PDF's in an ad-hoc fashion.",
+    5 => 'Yükleniyor .',
+    6 => 'Please wait while your document is loaded.',
+    7 => 'You may right click the button below and choose \'save target...\' or \'save link location...\' to save a copy of your document.',
+    8 => "The path given in the configuration file to the HTMLDoc binary is invalid or this system cannot execute it.  Please contact the site administrator if this problem\n          persists.",
+    9 => 'PDF Generator',
+    10 => "This is the Ad-hoc PDF Generation tool. It will attempt to convert any URL you give into a PDF.  Please note that some web pages will not render properly with this feature.  This\n           is a limitation of the HTMLDoc PDF generation tool and such errors should not be reported to the administrators of this site",
+    11 => 'URL',
+    12 => 'PDF Oluþtur!',
+    13 => 'The PHP configuration on this server does not allow URLs to be used with the fopen() command.  The system administrator must edit the php.ini file and set allow_url_fopen to On',
+    14 => 'The PDF you requested either does not exist or you tried to illegally access a file.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'Kimden',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[devamýný oku]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'Trackback iletisi yok.',
+    'this_trackback_url' => 'Bu yazý için Trackback URL si:',
+    'num_comments' => '%d trackback iletileri',
+    'send_trackback' => 'Ping Gönder',
+    'preview' => 'Ön Ýzleme',
+    'editor_title' => 'trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Gönder',
+    'button_preview' => 'Öz Ýzleme',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'Trackback URL si YOK',
+    'target_required' => 'Lütfen bir trackback URL si giriniz',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Trackback URLsi Seçiniz',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to Gönder your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to Gönder your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not Gönder a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Gönder Pings',
+    'send_pings_for' => 'Gönder Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'ReGönder',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or Gönder a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Gönder Pingback',
+    'pingback_short' => 'Gönder Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Gönder Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Gönder Trackback',
+    'trackback_short' => 'Gönder a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that Göndering Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To Gönder a trackback comment for a story, go to the list of stories and click on "Gönder Ping" for the story. To Gönder a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to Gönder the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To Gönder a pingback for a story, go to the list of stories and click on "Gönder Ping" for the story. To Gönder a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when Göndering the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Dizini',
+    'title_year' => ' %d için Article Dizini',
+    'title_month_year' => ' %s %d için Article Dizini',
+    'nav_top' => 'Article Dizinine Geri Dön',
+    'no_articles' => 'Articles Yok.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n yeni %i in the last %t %s',
+    'new_last' => 'son %t %s',
+    'minutes' => 'dakikalar',
+    'hours' => 'saatler',
+    'days' => 'günler',
+    'weeks' => 'haftalar',
+    'months' => 'aylar',
+    'minute' => 'dakika',
+    'hour' => 'saat',
+    'day' => 'gün',
+    'week' => 'hafta',
+    'month' => 'ay'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Arama',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Yorum Ekleme Ýzinsiz',
+    -1 => 'Yorum Ekleme Ýzinli'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Alt Alta',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'Yorum Gösterme'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Saat',
+    7200 => '2 Saat',
+    10800 => '3 Saat',
+    28800 => '8 Saat',
+    86400 => '1 Gün',
+    604800 => '1 Hafta',
+    2678400 => '1 Ay'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Önceliksiz',
+    1 => 'Öncelikli'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Sadece Konularda Göster',
+    1 => 'Anasayfada Göster'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Text Formatlý',
+    'html' => 'HTML Formatlý'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Önce Eskiler',
+    'DESC' => 'Önce Yeniler'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Ýzinli',
+    -1 => 'Trackback Ýzinsiz'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/ukrainian_koi8-u.php 1.4.0sr5-1/cpanel-glprivate/language/ukrainian_koi8-u.php
--- 1.3.11sr1/cpanel-glprivate/language/ukrainian_koi8-u.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/ukrainian_koi8-u.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1509 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the Ukrainian language page for GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2005 Yaroslav Fedevych
+# jaroslaw@nospam.kiev.ua
+# 
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'koi8-u';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Ħ:',
+    2 => ' ̦',
+    3 => 'Ӧ',
+    4 => '',
+    5 => '',
+    6 => '',
+    7 => ' ',
+    8 => 'Ӧ',
+    9 => 'ͦΦ˦ æ:',
+    10 => 'Ħ',
+    11 => 'Ԧ',
+    12 => '',
+    13 => '',
+    14 => '',
+    15 => 'Ħ',
+    16 => '',
+    17 => 'ަ',
+    18 => ' SQL',
+    19 => '',
+    20 => 'æ  :',
+    21 => 'Ťæ \'',
+    22 => 'Ʀ ',
+    23 => ' ',
+    24 => 'Φ',
+    25 => 'צ',
+    26 => '  Ҧ  Φ ަ.    צצ  Φ ͦ.',
+    27 => 'צ֦ ',
+    28 => '',
+    29 => '  Ҧ.',
+    30 => 'Φۦ Ԧ',
+    31 => 'Φ ͦ HTML:',
+    32 => ',  Ťæ \'',
+    33 => ',   Ħ    ',
+    34 => '',
+    35 => 'Ť',
+    36 => '',
+    37 => '  ',
+    38 => 'æ ͦ',
+    39 => '',
+    40 => '  <tt>php.ini</tt>  <tt>register_globals = Off</tt>. Geeklog, , դ,   <tt>register_globals</tt>  <strong>on</strong>.  Φ ,  , צ   <strong>on</strong>  Ԧ -.',
+    41 => 'ަ-Ԧ',
+    42 => ':',
+    43 => 'צ  ',
+    44 => '',
+    45 => '  MySQL',
+    46 => 'צ MySQL  ',
+    47 => 'æ ',
+    48 => 'Ʀ ',
+    49 => '',
+    50 => '  ڦ SQL',
+    51 => 'צ',
+    52 => '',
+    53 => 'ͦΦ ͦ',
+    54 => '  צ .',
+    55 => ' ',
+    56 => '',
+    57 => '',
+    58 => 'צ',
+    59 => "  Ť? Ť  <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> </a>",
+    60 => 'ͦ ',
+    61 => '  Ʀ',
+    62 => '̦',
+    63 => '  Ҧ',
+    64 => 'Ħ  צ  ',
+    65 => 'Ҧ  ',
+    66 => ' ',
+    67 => '   ',
+    68 => 'ͦ',
+    69 => '\'',
+    70 => '',
+    71 => ' ',
+    72 => ' ',
+    73 => 'Φ ',
+    74 => '',
+    75 => ' ',
+    76 => ' ',
+    77 => '',
+    78 => 'ަ Ħ',
+    79 => ' ',
+    80 => 'צ  Φ',
+    81 => 'צ  Φ',
+    82 => '',
+    83 => '',
+    84 => '',
+    85 => ' Φ 48 ',
+    86 => '  Ҧ',
+    87 => ' Φ 2 Φ',
+    88 => ' Φ  ',
+    89 => '    Ħ',
+    90 => 'ͦ',
+    91 => ' Ҧ  ',
+    92 => '',
+    93 => 'Copyright',
+    94 => 'Ӧ צ   ˦   æ Ҧæ   צצ .',
+    95 => ' ',
+    96 => '',
+    97 => '̦ ̦',
+    98 => '',
+    99 => '',
+    100 => '  ',
+    101 => 'ۦ Ħ',
+    102 => 'Ħ  Ԧ',
+    103 => 'Φ Ц ',
+    104 => 'by',
+    105 => ' ',
+    106 => '',
+    107 => ' Ӧ GL',
+    108 => ' ',
+    109 => 'צ  ',
+    110 => 'צ ͦΦ   ',
+    111 => ' PDF-Ҧ',
+    112 => 'ŤΦ ަ',
+    113 => 'æ',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => ' Ħ',
+    2 => ',   Φ.',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => ' Ħ',
+    7 => 'ަ Ħ',
+    8 => '  Ħ   ,      æצ   Ħ,  " "   æ .',
+    9 => '   ',
+    10 => '   ',
+    11 => " Ħ    {$_USER['username']}",
+    12 => 'Ħ',
+    13 => '',
+    14 => 'դ',
+    15 => '  '
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'ͦ ',
+    2 => ' ',
+    3 => 'Ť',
+    4 => 'Ť',
+    5 => 'Ťæ \'',
+    6 => '  Ԧ   Ťæ  ͦ Ҧ.      Ʀ,         .',
+    7 => ' Φ   ',
+    8 => "  .    Ԧ  {$_CONF['commentspeedlimit']} () ͦ ",
+    9 => '',
+    10 => 'Ħ צ',
+    11 => 'Ħ ',
+    12 => ' צ   &laquo;&raquo;  &laquo;&raquo; &mdash;  ȦΦ  Ħ  .',
+    13 => ' æ',
+    14 => 'Φ ',
+    15 => 'צ   ',
+    16 => '',
+    17 => '',
+    18 => ' æ',
+    19 => ' ,   .',
+    20 => ' צצ  Ҧ  ͦ  צ .',
+    21 => '    ͦ     ,    .',
+    22 => '  ,  ,      צΦ.',
+    23 => '  ϧ   ̦.',
+    24 => 'Φ ',
+    25 => ' Φ,   צ    ͦΦצ?',
+    26 => '%s צѤ    Ӧ  ͦ:',
+    27 => 'צ  '
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => ' Ʀ ',
+    2 => 'Ťæ \'',
+    3 => ' \'',
+    4 => '',
+    5 => ' ',
+    6 => 'ͦ',
+    7 => 'Ʀ',
+    8 => ' PGP',
+    9 => ' æ',
+    10 => 'Φ 10 Ҧ ',
+    11 => ' Ҧ ',
+    12 => '˦  ',
+    13 => ' Φ  ',
+    14 => '     ˦.   ͦ  !   , Ť  Φ &laquo;æ  &raquo;   &laquo;æ &raquo;.',
+    15 => " Ʀ  {$_CONF['site_name']} Ц .     ,  Ҧ צ  ,   æ.  , ֦    .",
+    16 => 'æ   Ʀ',
+    17 => 'Ʀ  դ',
+    18 => '  ϧ     Ħ',
+    19 => ' Ťæ \'   ϧ   Ť',
+    20 => '      Ħ',
+    21 => '',
+    22 => "Ť  {$_CONF['site_name']}!",
+    23 => "  Ʀ   Ӧ    Ԧ {$_CONF['site_name']},     ͦ   ̦ Ҧ צ  Φ.     Ʀ, ͦ Ҧ    Φ. ,     <b><i>Φ</i></b>  ̦    Ԧ.",
+    24 => '  Ħ     .',
+    25 => '  צ ?',
+    26 => 'ۦ <em></em> Ϥ Ťæ \', <em></em>    Ťæ  , Ц  Φ &laquo;Ħ &raquo;. æ      ĦΦ    ۦ ڦ .',
+    27 => 'Ť !',
+    28 => 'Ħ ',
+    29 => 'Ť ',
+    30 => 'Ť ',
+    31 => '  æ  צ  Ťæ',
+    32 => '',
+    33 => '  դ ',
+    34 => '  Τ \'',
+    35 => 'Ħ    ͦ',
+    36 => '  http://',
+    37 => 'դ   Ҧ',
+    38 => '  &mdash;  !    ',
+    39 => ' ̦  PGP  ',
+    40 => ' ˦  ',
+    41 => '  ',
+    42 => ' ',
+    43 => ' ˦˦ ',
+    44 => ' צ',
+    45 => '   ',
+    46 => 'Φ  ',
+    47 => ' צ  ',
+    48 => '',
+    49 => ' ˦ ¦ ',
+    50 => 'Φͦ ,     æ',
+    51 => ' Ԧ-',
+    52 => ':',
+    53 => ' Ԧ  ',
+    54 => '   Ҧ,    .',
+    55 => '    ,    ¦ צ.   צ, \'  Ӧ, ˦ ,   ¦ դ. Φ    .',
+    56 => '',
+    57 => ' ',
+    58 => 'Ӧ ',
+    59 => ' Ҧ',
+    60 => '   ۦ Ҧ?',
+    61 => ' צۦ  Ҧۦ?',
+    62 => ' 100',
+    63 => "    ,   צ  .  ,  Φ  Ԧ ; դ   {$_CONF['site_name']}!",
+    64 => '  Ҧ ',
+    65 => ' Ť  ',
+    66 => "    Φ Ťæ .  צ  , .   <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> </a>?",
+    67 => ' צ',
+    68 => '\' ',
+    69 => '   \'  Ц   ?',
+    70 => " ΦΦ   ͦ {$_CONF['site_name']}",
+    71 => " צ  {$_CONF['site_name']}  ,        ͦ  Φ ͦ   .   ,   Φ <a href=\"{$_CONF['site_url']}/users.php?mode=new\"></a>  {$_CONF['site_name']}.   ?   ̦  צĦ  !",
+    72 => '',
+    73 => '',
+    74 => 'ͦΦ ΦΦ !',
+    75 => 'Φ  ',
+    76 => '    ,   Ӧ צ Ԧ    Ц ˦  . Ҧ  , Ҧ  æ!',
+    77 => 'צ',
+    78 => '  צ!',
+    79 => ' ,    צ',
+    80 => 'צ',
+    81 => 'Ħ ',
+    82 => 'Φ 10  ',
+    83 => ' ̦æ ',
+    84 => ' :',
+    85 => ' Ҧ:',
+    86 => ' , Ħ',
+    87 => ' Ťæ \'',
+    88 => " (, )      Ʀ \"%s\"  {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n  Ħ ,   Ħ צ,  , Φ   :\n\n",
+    89 => "     æ Ħ,    צ      (    ͦ).\n\n",
+    90 => '        Ʀ. :     ̦,    Ħ  .',
+    91 => '  ',
+    92 => 'ۦ  ',
+    93 => ' Φ     צ %d  .     %d  ͦ  .',
+    94 => '  "%s"',
+    95 => 'Φ  " ",  ,      ϧ  . ,  Ӧ Ԧ  Ҧ, Φ  Ц  , <strong> </strong>,    ĦΦ Φ.',
+    96 => ' Ʀ',
+    97 => 'Ħ  Ʀ',
+    98 => ' Φ,    צ Ʀ?  ,    צ     (Ȧ    Ʀ).   Φ  , Φ  &laquo; Ʀ&raquo;    ͦ,  .',
+    99 => ' Ԧ ',
+    100 => ' צ ͦΦҦ',
+    101 => '  צ ͦΦҦ ',
+    102 => ' צ ަ',
+    103 => '  צ  ަ',
+    104 => '    ̦Φ',
+    105 => '  צæ &laquo;  ̦Φ&raquo;',
+    106 => '',
+    107 => '   ̦ Ʀ̦',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => '   ',
+    2 => '   . ,     ,   ۦ   Φ',
+    3 => '   &laquo;%s&raquo;',
+    4 => ' Φ ',
+    5 => '',
+    6 => '',
+    7 => '',
+    8 => ''
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => ' צΦ צ  .  ,   .',
+    2 => 'צ Ц צ.',
+    3 => ' , Φ,  դ Ħ  ϧ   ̦ &laquo;צ &raquo;.',
+    4 => ' , Φ  &laquo; \'&raquo;, &laquo;צ &raquo;, &laquo;&raquo;  &laquo;צ&raquo;',
+    5 => ':   .',
+    6 => ' .',
+    7 => 'Ʀ  ',
+    8 => 'Ťæ \'',
+    9 => 'URL ',
+    10 => '  ',
+    11 => ' \':',
+    12 => 'צ :',
+    13 => ':',
+    14 => 'צ:',
+    15 => 'HTML  .',
+    16 => 'Ħ צ',
+    17 => 'Ħ צ   ',
+    18 => ' \'',
+    19 => '  ϧ ',
+    20 => ' Φ',
+    21 => '  ϧ ',
+    22 => 'Ӧ   \'  ',
+    23 => "   Ħ צ %s  %s,  צ() ,   æ  {$_CONF['site_url']}.    ; Φ  ϧ           .",
+    24 => '   ',
+    25 => '  æ æ  Φ Ť  ͦ.  Ťæ   ¦   .',
+    26 => '    Ħ   צ. Ӧ   \'.',
+    27 => ' צ',
+    28 => '%s (-): ',
+    29 => " &mdash;    {$_CONF['site_name']}  ",
+    30 => '    ',
+    31 => '',
+    32 => '',
+    33 => '   Ԧ ',
+    34 => ' צ',
+    35 => ',  צ      Ԧ.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => ' ',
+    2 => 'צ ',
+    3 => '',
+    4 => 'Ӧ',
+    5 => '',
+    6 => 'Ԧ',
+    7 => 'Ҧ',
+    8 => '',
+    9 => 'Ӧ',
+    10 => '',
+    11 => '  ',
+    12 => 'Ц',
+    13 => ' :  Ц',
+    14 => '  Ц   ',
+    15 => ' ,   .',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => "       -  Ԧ {$_CONF['site_name']}",
+    20 => ' ',
+    21 => '',
+    22 => '(  --)',
+    23 => '',
+    24 => ' %d Ҧ̦',
+    25 => ' ',
+    26 => 'Ҧ̦ ',
+    27 => '',
+    28 => '     Φ Ц , Φ Ҧ',
+    29 => '     ',
+    30 => '    צצ  ',
+    31 => '     ',
+    32 => 'Ħ',
+    33 => 'URL',
+    34 => '',
+    35 => ' ',
+    36 => '    צצ  Ħ',
+    37 => '   Ħ',
+    38 => '   ',
+    39 => '',
+    40 => 'Ħ',
+    41 => '    ͦ  3 .',
+    42 => ' ,    Ħ -- (Ҧ-ͦ-).',
+    43 => ' ',
+    44 => 'Ӧ æ ',
+    45 => '-˦   ̦',
+    46 => 'Φ',
+    47 => 'Φ',
+    48 => '',
+    49 => '',
+    50 => 'צ',
+    51 => '',
+    52 => '',
+    53 => '  ',
+    54 => '  Ҧ',
+    55 => '',
+    56 => '',
+    57 => '',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => ' ',
+    2 => '   ',
+    3 => '(Ҧ)  ͦ',
+    4 => '(צ)  ͦ',
+    5 => '()  ͦ',
+    6 => 'Ħ  ͦ',
+    7 => ' Φ ',
+    8 => ' Ԧ',
+    9 => 'Ħ',
+    10 => ',   Ԧ  ,    Φ Φ  .',
+    11 => ' Φ ',
+    12 => 'Ҧ',
+    13 => ',   Ԧ  ,    Φ Φ  .',
+    14 => ' Φ ',
+    15 => '',
+    16 => 'Ӧ',
+    17 => ',   Ԧ  ,     Φ Φ  .',
+    18 => ' Φ ',
+    19 => '',
+    20 => 'צ',
+    21 => ',   Ԧ  ,    Φ   Φ Φ  .',
+    22 => ' Ԧ צ  ',
+    23 => 'Ԧ',
+    24 => ',   Ԧ Φ    ϧ Ԧ.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Ħ',
+    2 => 'Ħ  צ',
+    3 => '  Ħ  ',
+    4 => ' Ԧ',
+    5 => '  Ԧ PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => ' ͦ %s,  Φ Ť  .',
+    2 => 'Ť',
+    3 => ' ',
+    4 => 'ͦ Ħ',
+    5 => 'ͦ ',
+    6 => 'ͦ ',
+    7 => ' Ťæ',
+    8 => 'ͦ',
+    9 => '  ͦΦ Ҧ̦   Ԧ   :<ul><li>Φ Ӧ ,  \'צ<li> Φ  Φ צԦ<li>צ  צަ</ul>',
+    10 => '',
+    11 => '',
+    12 => ' ',
+    13 => ' ˦',
+    14 => '',
+    15 => '',
+    16 => '֦,   ',
+    17 => 'Ҧ',
+    18 => '',
+    19 => ' ',
+    20 => ': դ Ҧ',
+    21 => ' &laquo;&raquo;, ֦    Ҧ',
+    22 => ': դ ̦',
+    23 => ' , Φ Ӧ  .  \'צ.',
+    24 => '̦æ ',
+    25 => ' ̦æ %s Ц .',
+    26 => ' Ԧ',
+    27 => 'Ťæ \'',
+    28 => '',
+    29 => '',
+    30 => ' Τ ̦ ',
+    31 => " () .     {$_CONF['speedlimit']}  ͦ ̦æ.",
+    32 => 'Φ ',
+    33 => 'Φ  Ԧ',
+    34 => 'Ť',
+    35 => 'ͦ HTML  ',
+    36 => ' צ',
+    37 => "̦æ Ħ  Ԧ {$_CONF['site_name']} ͦ  Ħ   Ҧ, צ ަ      Ҧ.  æ <b></b>  Ҧ ۦ Ԧ Ħ, - Φ   Ҧæ.<br><br> ͦ Ħ  Ħ  ͦΦ,  Ц    Ħ '   Ҧ.",
+    38 => ' Ħ ',
+    39 => ' ',
+    40 => ' ',
+    41 => ' ',
+    42 => ' ',
+    43 => 'Ħ æ ',
+    44 => '  1',
+    45 => '  2',
+    46 => '',
+    47 => '',
+    48 => ' ',
+    49 => ' Ħ',
+    50 => '  Ħ',
+    51 => '',
+    52 => '',
+    53 => ' '
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => ' Ʀæ',
+    2 => '! צ Ťæ æ',
+    3 => 'צ   ',
+    4 => 'Ťæ \':',
+    5 => ':',
+    6 => '   ͦΦ      .<br> Ҧ     .',
+    7 => 'צ'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'դ ͦΦ ',
+    2 => '   Φ     .',
+    3 => ' ˦',
+    4 => ' Φ æ æ  Ц (  צ error.log).',
+    5 => ' ',
+    6 => '',
+    7 => 'Ӧ',
+    8 => '  ',
+    9 => ' ',
+    10 => ' ',
+    11 => ' ',
+    12 => ' ',
+    13 => '  ',
+    14 => 'URL  RSS',
+    15 => 'Τ  RSS',
+    16 => '   ',
+    17 => 'ͦ ',
+    18 => ' , Φ     ͦ ',
+    19 => ' ',
+    20 => ' ',
+    21 => '  ',
+    22 => ' ',
+    23 => ' ',
+    24 => ' ',
+    25 => ' ͦ   , Φ   .    , Φ &laquo; &raquo; .',
+    26 => ' ',
+    27 => ' PHP',
+    28 => '  PHP',
+    29 => 'æ ',
+    30 => '   Ԧ   PHP   ڦ ϧ ˦, Ħ  æ .  ϧ æ    "phpblock_" (, phpblock_getweather).   æ    Ʀ,    .  ,   , Ҧ     ϧ æ Geeklog, צ  צ æ,    ۦ ͦ.  Φ,  Ц  æ   Φ  "()". Ԧ, ,   ͦ  צ   PHP  /path/to/geeklog/system/lib-custom.php. Ħ    צ    Geeklog  צϧ Ӧ.',
+    31 => '  æ PHP. æ %s  դ.',
+    32 => ' &mdash;   (̦)',
+    33 => ' Φ  URL   RSS   ˦',
+    34 => ' Φ    æ  ˦ PHP',
+    35 => ' Φ    ͦ   ˦',
+    36 => ' Φ  ͦ   ˦',
+    37 => '  æ   PHP',
+    38 => 'æ  ˦ PHP Φ  Ʀ &laquo;phpblock_&raquo; (, phpblock_getweather). Ʀ &laquo;phpblock_&raquo;   ͦ ,  ¦  צ .',
+    39 => '',
+    40 => '',
+    41 => '',
+    42 => 'Ȧ        ˦ Geeklog.',
+    43 => '  Ҧ',
+    44 => ' Ц צ',
+    45 => "    ,     .   .  , <a href=\"{$_CONF['site_admin_url']}/block.php\">Φ  Ҧ ͦΦ ˦</a>.",
+    46 => ' ',
+    47 => 'ͦ ͦΦ',
+    48 => ' ',
+    49 => ' (   ¦̦   Φ )',
+    50 => 'URL  צ',
+    51 => 'ަ http://',
+    52 => '    Φ,  צ     ',
+    53 => 'צ',
+    54 => '',
+    55 => '',
+    56 => '',
+    57 => 'ͦ  ',
+    58 => 'ͦ  ',
+    59 => 'ͦ  ',
+    60 => 'ͦ  ̦',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => ' Ħ',
+    2 => '',
+    3 => ' Ħ',
+    4 => 'URL Ħ',
+    5 => '  Ħ',
+    6 => ' ˦ Ħ',
+    7 => ' Ħ',
+    8 => ' Ħ',
+    9 => '(ަ http://)',
+    10 => ' Φ  /,  Ħ   ',
+    11 => ' Ħ',
+    12 => ' ͦ   Ħ Φ  Φ .   ϧ Ħ Φ &laquo; Ħ&raquo; Ҧ. Φ [C]   Ц ϧ  Ħ.',
+    13 => ' Ħ',
+    14 => ' ',
+    15 => ' ˦',
+    16 => ' Ц צ',
+    17 => "    Ħ,     .   .  , <a href=\"{$_CONF['site_admin_url']}/event.php\">Φ  Ҧ ͦΦ Ħ</a>.",
+    18 => ' Ħ',
+    19 => 'ͦ ͦΦ',
+    20 => '',
+    21 => '',
+    22 => '',
+    23 => '  .',
+    24 => 'צ ˦ .',
+    25 => '    .'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Φ Ԧ',
+    2 => 'Φ Ԧ',
+    3 => '',
+    4 => ' ',
+    5 => ' ',
+    6 => ' ͦ  ',
+    7 => '',
+    8 => '',
+    9 => 'Φ ',
+    10 => '',
+    11 => '',
+    12 => 'Ʀ',
+    13 => '',
+    14 => '',
+    15 => '',
+    16 => ' ',
+    17 => ' ',
+    18 => '',
+    19 => 'Ҧ',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => '̦ ',
+    23 => '    , Φ  Ҧ æ Ԧ .   , Φ  ϧ Ԧ.   ϧ Ԧ Φ &laquo; &raquo; .',
+    24 => '  Ʀ  Ԧ  դ.  ,  .',
+    25 => 'Error when saving story',
+    26 => 'Φ  Ԧ',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => '  Φ ',
+    31 => ' , Φ  &laquo;&raquo;  &laquo; &raquo;',
+    32 => '',
+    33 => '     ',
+    34 => '',
+    35 => '',
+    36 => '',
+    37 => ' צ',
+    38 => ' ',
+    39 => '',
+    40 => ' Ц צ',
+    41 => "     Ԧ,     .   .        ͦ Ԧ  .  ,  ˦Φ <a href=\"{$_CONF['site_admin_url']}/story.php\">Φ  Ҧ ͦΦ </a>.",
+    42 => "     Ԧ,     .   .  , <a href=\"{$_CONF['site_admin_url']}/story.php\">Φ  Ҧ ͦΦ </a>.",
+    43 => ' ',
+    44 => 'ͦ ͦΦ',
+    45 => '',
+    46 => '<b>:</b>   ͦ   ,     ,   ̦դ   æ .   ,         æ ˦ RSS,       Ҧ   .',
+    47 => '',
+    48 => '',
+    49 => '',
+    50 => '̦',
+    51 => '    , Ҧ    æ Ԧ,  Ȧ    ͦ .    [imageX], [imageX_right]  [imageX_left],  X &mdash;    . :  Φ  Φ .       .<br><p><b> </b>: Φ  Ԧ     Ħ, Ҧ   ,     &laquo;Φ &raquo;.     Ħ,    .',
+    52 => '',
+    53 => ' .  Φ        ,  Φ    ',
+    54 => 'Φ Φ ',
+    55 => ' ҦΦ ϧ Ԧ  Φ .  ,    Ҧ',
+    56 => '  ',
+    57 => '    ',
+    58 => ' ',
+    59 => 'æ',
+    60 => 'צ',
+    61 => 'Ȧ',
+    62 => '',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => ' ',
+    2 => 'Ʀ ',
+    3 => ' ',
+    4 => ' ',
+    5 => '(  ¦̦)',
+    6 => '    Ӧ \'Φ   Ԧ  ',
+    7 => ' , Φ  &laquo;Ʀ &raquo;  &laquo; &raquo;',
+    8 => ' ',
+    9 => ' ͦ   , Φ  Φ.    , Φ  &laquo; &raquo;,  ̦.     צ Ҧ   ϧ .  (*)   .',
+    10 => ' ',
+    11 => '/Ҧ',
+    12 => ' Ц צ',
+    13 => "     ,     .   .  , <a href=\"{$_CONF['site_admin_url']}/topic.php\">Φ  Ҧ ͦΦ </a>.",
+    14 => 'Ӧ ',
+    15 => '',
+    16 => '',
+    17 => ' ',
+    18 => 'ͦ ͦΦ',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '',
+    23 => '     Ħ ',
+    24 => '(*)',
+    25 => 'Ȧ ',
+    26 => '     Ȧ .     .',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => ' ަ',
+    2 => 'Ʀ ',
+    3 => 'Ťæ \' ',
+    4 => ' \'',
+    5 => '',
+    6 => ' ',
+    7 => ' ',
+    8 => 'ͦ',
+    9 => '(  ¦̦)',
+    10 => ' , Φ  &laquo;Ťæ \' &raquo;  &laquo; &raquo;',
+    11 => ' ަ',
+    12 => ' ͦ   , Φ   .     Φ  &laquo; &raquo; ̦.   Ħ  ,   Ťæ Φ,  Φ  ϧ  (, *son*  *.edu)   .',
+    13 => '',
+    14 => ' Ťæ',
+    15 => ' ',
+    16 => 'ͦ ͦΦ',
+    17 => 'changepw',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '\' ,    ,  դ.',
+    22 => '',
+    23 => ' ',
+    24 => '  ަ',
+    25 => '    Geeklog  ަ.         , Ħ æ.     :  \', Ťæ \',  .   צ  Ħ  ЦĦ . Φ    Φ ͦ   .   ڦ   , Ҧ   ,  צ  Ӧ !',
+    26 => '',
+    27 => ' ',
+    28 => 'ͦ ,    ',
+    29 => '',
+    30 => '',
+    31 => 'צ ަ',
+    32 => ' .  %d ަ,  %d ',
+    33 => 'Ħ',
+    34 => ':  Φ    .',
+    35 => ' Ťæ',
+    36 => '(Φ)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => '',
+    2 => '',
+    3 => '',
+    4 => 'Ʀ',
+    10 => '',
+    11 => ' ',
+    12 => 'URL',
+    13 => 'Ҧ',
+    14 => '',
+    15 => '',
+    16 => 'Ťæ \'',
+    17 => ' \'',
+    18 => 'Email',
+    34 => 'Command and Control',
+    35 => 'ĦΦ Ԧ',
+    36 => 'ĦΦ ',
+    37 => 'ĦΦ Ħ',
+    38 => 'Ħ',
+    39 => 'ڦ  Ҧ̦  æ',
+    40 => '˦ ̦æ'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Ħ',
+    2 => 'Ħ',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => '\'',
+    7 => '',
+    8 => ' Ħ',
+    9 => '%s Event',
+    10 => 'Ħ ',
+    11 => ' ',
+    12 => ' ',
+    13 => '',
+    14 => '',
+    15 => '',
+    16 => 'צ',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '',
+    23 => '',
+    24 => '',
+    25 => '  ',
+    26 => ' ',
+    27 => '',
+    28 => '  ',
+    29 => '̦ ',
+    30 => ' Ħ',
+    31 => '',
+    32 => 'Ħ',
+    33 => '',
+    34 => '',
+    35 => ' ',
+    36 => 'Ħ',
+    37 => ', æ  Ҧ     Ԧ',
+    38 => '  Ħ',
+    39 => '',
+    40 => '',
+    41 => ''
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => " Ӧ {$_CONF['site_name']}",
+    2 => '',
+    3 => 'צ ',
+    4 => '',
+    5 => '',
+    6 => ' Ħ:',
+    7 => 'Ӧ ',
+    8 => 'Admin',
+    9 => '',
+    10 => 'HTML',
+    11 => 'ͦ צ!',
+    12 => 'Ħ',
+    13 => '',
+    14 => '  ',
+    15 => '  צΦ : ',
+    16 => 'Ц צĦ צ : ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Ħ  צ</a>",
+    18 => '',
+    19 => ':    Ħ צ Ӧ , Ҧ ڦ   &laquo;ŤΦ ަ&raquo;.',
+    20 => "Ц  <successcount> צ,  <failcount> צ   Ħ. \n	  ҦΦ æ,       צ .  \n	   <a href=\"{$_CONF['site_admin_url']}/mail.php\">Ħ  צ</a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">  ͦΦ Ҧ</a>.",
+    21 => '',
+    22 => 'Ц æ',
+    23 => ' ',
+    24 => ' Ц æ',
+    25 => '-- Ҧ  --',
+    26 => 'Φ Ӧ    Ҧ  ަ ڦ .'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => '     ۦ æ Geeklog , , ۦ ͦ. ,     , Φ  <a href="http://www.geeklog.net">ͦ Geeklog</a>, ˦   צѤ Ӧ ĦΦ      æ Ħ æ . ,   ͦ,       ˦     ,     Ԧ  ,  ,   դ  ڦ Φ Ԧ. צ Ц æ ,   դ Ц - , Φ  צצ  ,     Geeklog.  ,      .  , Ҧ ڦ       .',
+    2 => ' צ ϧ ',
+    3 => '  ',
+    4 => ' ',
+    5 => '̦ ',
+    6 => ':   !',
+    7 => ',    ,  դ.  , ަ    ',
+    8 => 'צ   ͦΦ  ',
+    9 => '   צϧ Ӧ Geeklog.  צ צ ͦ <a href="http://www.geeklog.net">Geeklog</a>,    צ Ӧ .',
+    10 => '<br><b>     ϧ .</b><br><br>',
+    11 => '    , Φ   צ .   æ ,   ̦    (Ҧ).    Ӧ,  Ӧ,    .    Ħ,    .      Φ   צϧ æ.',
+    12 => 'plugineditor()    ',
+    13 => ' ',
+    14 => ' ',
+    15 => 'ͦ ͦΦ',
+    16 => ' ',
+    17 => 'Ӧ ',
+    18 => 'Ӧ Geeklog',
+    19 => 'צ',
+    20 => '',
+    21 => '',
+    22 => '',
+    23 => '',
+    24 => '',
+    25 => '',
+    26 => ' ',
+    27 => 'ͦ ',
+    28 => ' Ӧ',
+    29 => 'Ӧ Geeklog',
+    30 => ' ?',
+    31 => ' Φ,     ?  ,    Ӧ Φ   , Φ æ .   Φ, Φ &laquo;&raquo;    ͦ,  .',
+    32 => '<p><b>: צ   ͦ AutoLink</b></p>',
+    33 => 'Ӧ ',
+    34 => '',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => ' æ',
+    2 => '',
+    3 => '',
+    4 => '',
+    10 => 'æ ͦ',
+    11 => ' æ',
+    12 => 'ͦ ͦΦ',
+    13 => ' ͦ   æ, Φ  צ æ .   ϧ æ Φ &laquo; æ&raquo; .',
+    14 => '',
+    15 => '',
+    16 => ' ',
+    17 => '',
+    18 => 'Τ ',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '<i>( æ)</i>',
+    23 => 'Ӧ Ԧ',
+    24 => ' æ',
+    25 => ' æ',
+    26 => '',
+    27 => ' Ԧ',
+    28 => '(0 =  , 1 =  ,   =   æ ˦Ԧ ̦.)',
+    29 => '',
+    30 => 'Τ ',
+    31 => '¦ ̦',
+    32 => '',
+    33 => 'ͦ',
+    34 => '',
+    35 => '',
+    36 => 'Ҧ  æ',
+    37 => '     ,  Цդ æ ͦ.   Ҧ  ,     æ Geeklog  æ Φ  .',
+    38 => ':   æ',
+    39 => ' , Φ  &laquo; æ&raquo;, &laquo;&raquo;  &laquo; &raquo;.',
+    40 => ' , ֦ ˦˦   ˦˦ Ԧ.',
+    41 => '',
+    42 => 'Ħ',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "  צĦ ,  צ -    Ħ.  ,  ڦ  Ԧ. դ    {$_CONF['site_name']}",
+    2 => "դ  Ħ ϧ Ԧ  {$_CONF['site_name']}.  Ħ  צ  .   ,      .",
+    3 => "դ  Ħ   {$_CONF['site_name']}.  Ħ  צ  .   ,     Ħ̦ <a href={$_CONF['site_url']}/links.php></a>.",
+    4 => "դ  Ħ Ħ  {$_CONF['site_name']}.  Ħ  צ  .  Ħ ,     Ħ̦ <a href={$_CONF['site_url']}/calendar.php></a>.",
+    5 => 'æ    Ц .',
+    6 => 'ۦ  Ц .',
+    7 => 'ۦ   Ҧ Ц .',
+    8 => ' Ц   .',
+    9 => '  Ц .',
+    10 => ' Ц .',
+    11 => '  Ц .',
+    12 => ' Ц .',
+    13 => '  Ц .',
+    14 => ', Ӧ  Ԧ   Ц .',
+    15 => '  Ц .',
+    16 => ' Ц .',
+    17 => ' Ħ Ц .',
+    18 => 'Ħ Ц .',
+    19 => '  Ц .',
+    20 => ' Ц .',
+    21 => ' Ц .',
+    22 => ' Ц .',
+    23 => '  ¦  Ħ   .   Ʀ Ħ.',
+    24 => 'Ħ    ',
+    25 => '     צ,    צ  ',
+    26 => 'Ħ Ц     ',
+    27 => 'צ Ц צĦ.',
+    28 => ' Ц ',
+    29 => ', Ԧ Ҧ   Ԧ Φ',
+    30 => ' Ц צ',
+    31 => ',      Ҧ ͦΦ . ,  Ӧ     æ ',
+    32 => ',      Ҧ ͦΦ . ,  Ӧ     æ ',
+    33 => ',      Ҧ ͦΦ ˦. ,  Ӧ     æ ',
+    34 => ',      Ҧ ͦΦ . ,  Ӧ     æ ',
+    35 => ',      Ҧ ͦΦ Ħ. ,  Ӧ     æ ',
+    36 => ',      Ҧ ͦΦ . ,  Ӧ     æ ',
+    37 => ',      Ҧ ͦΦ ަ. ,  Ӧ     æ ',
+    38 => ',      Ҧ ͦΦ . ,  Ӧ     æ ',
+    39 => ',      Ҧ ͦΦ . ,  Ӧ     æ ',
+    40 => ' צ',
+    41 => ',      word replacement page. ,  Ӧ     æ ',
+    42 => '  Ц .',
+    43 => ' Ц .',
+    44 => ' Ц !',
+    45 => ' Ц .',
+    46 => ',        Ц  . ,  Ӧ     æ ',
+    47 => ' æΦ   Ц *nix.   æ   *nix, Ħ  Ц .    Windows,        adodb_*.php    Ԧ.',
+    48 => "դ       {$_CONF['site_name']}.     .  ڦ ,    Ħ       ϧ .",
+    49 => '  Ц .',
+    50 => ' Ц .',
+    51 => ' Ťæ \'  դ.  , Ҧ  .',
+    52 => '   , ,   .',
+    53 => '   .  ,  ,        .',
+    54 => '     Ҧ.  ,   , .',
+    55 => '   ,  -  .  ,  ڦ  Ԧ,       .',
+    56 => '    դ  .',
+    57 => '  Ц .',
+    58 => ' æ Ц .',
+    59 => 'æ Ц .',
+    60 => ' Ц ',
+    61 => ' %s: צ  ͦ  צ',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => '',
+    'ownerroot' => '/Root',
+    'group' => '',
+    'readonly' => ' ',
+    'accessrights' => ' ',
+    'owner' => '',
+    'grantgrouplabel' => ' Φ Ц  ',
+    'permmsg' => ':  &mdash;  Ӧ ŤΦ ަ ,  Φ &mdash;  Ӧ ަ ,   צ  .',
+    'securitygroups' => ' ',
+    'editrootmsg' => "   ͦΦ ަ,      root, ͦ    root.    Ӧ ަ, Ҧ ަ root. ,  Ӧ    ަ root .  , Φ  <a href=\"{$_CONF['site_admin_url']}/user.php\">Ҧ ͦΦ ަ</a>.",
+    'securitygroupsmsg' => 'ͦ ,    צ .',
+    'groupeditor' => ' ',
+    'description' => '',
+    'name' => '',
+    'rights' => '',
+    'missingfields' => 'դ ̦',
+    'missingfieldsmsg' => ' Φ      ',
+    'groupmanager' => ' ',
+    'newgroupmsg' => '    , Φ  .   ϧ  Φ &laquo; &raquo; Ҧ. ,  Φ   ,    .',
+    'groupname' => ' ',
+    'coregroup' => ' ',
+    'yes' => '',
+    'no' => '',
+    'corerightsdescr' => "      {$_CONF['site_name']}.      .   ͦ ̦ ,  æ Ц.",
+    'groupmsg' => '    Ԧ  Ȧ.     -ϧ   ,    Ӧ  Ԧ .  Ԧ ,  դ  Φ    Ц .        Ϥ ,       Ҧ    Ħ̦ &laquo;&raquo;,  .      ϧ   ,  צͦ     .',
+    'coregroupmsg' => "      {$_CONF['site_name']}.  ,    ,   .      (  ).",
+    'rightsdescr' => '          Ц  ۦ,  ϧ  Ҧ  . , Ҧ    ̦  ,  æ Ц,     ϧ    . ,     	,    æ Ц.',
+    'lock' => '',
+    'members' => '',
+    'anonymous' => 'Φ',
+    'permissions' => '',
+    'permissionskey' => 'R = , E = ,        ',
+    'edit' => '',
+    'none' => '',
+    'accessdenied' => ' Ц צ',
+    'storydenialmsg' => "      æ Ԧ.     ,       {$_CONF['site_name']}.  , <a href=users.php?mode=new>ɤ</a>  {$_CONF['site_name']}     !",
+    'eventdenialmsg' => "      æ Ħ.     ,       {$_CONF['site_name']}.   , <a href=users.php?mode=new>ɤ</a>  {$_CONF['site_name']}     !",
+    'nogroupsforcoregroup' => '     ϧ ϧ ',
+    'grouphasnorights' => '      ϧ ͦΦϧ æ  ',
+    'newgroup' => ' ',
+    'adminhome' => 'ͦ ͦΦ',
+    'save' => '',
+    'cancel' => '',
+    'delete' => '',
+    'canteditroot' => '    Root,    ŧ.   Ц  æ   צ.   ,   , Φ   ͦΦ.',
+    'listusers' => '̦ ަ',
+    'listthem' => '̦',
+    'usersingroup' => 'ަ  Ц "%s"',
+    'usergroupadmin' => 'ͦΦ  ަ',
+    'add' => '',
+    'remove' => '',
+    'availmembers' => 'Φ ',
+    'groupmembers' => ' ',
+    'canteditgroup' => '  æ   Φ   .    ,   , Φ   ͦΦ.',
+    'cantlistgroup' => '  Φ æ ,  ͦ Φ   .   ,   , Φ   ͦΦ.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Φ 10  Ц',
+    'do_backup' => '  Ц',
+    'backup_successful' => ' Ц   צ Ц.',
+    'db_explanation' => '  ϧ ϧ Ц  Geeklog, Φ ,  ',
+    'not_found' => "צ ,   ̦ mysqldump   .<br>צ  <strong>\$_DB_mysqldump_path</strong>  config.php.<br>ڦ ͦ  : <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => ' Ц  : ͦ   0 Ԧ',
+    'path_not_found' => "{$_CONF['backup_path']}  դ    ",
+    'no_access' => ":  {$_CONF['backup_path']} .",
+    'backup_file' => ' ϧ Ц',
+    'size' => 'ͦ',
+    'bytes' => 'Ԧ',
+    'total_number' => ' ˦˦  Ц: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'ͦ',
+    2 => 'Contact',
+    3 => '̦',
+    4 => '',
+    5 => '',
+    6 => '',
+    7 => ' ',
+    8 => 'Personalize',
+    9 => '',
+    10 => ' ',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => ' 404',
+    2 => ',   ,    צ <b>%s</b>.',
+    3 => "<p> ,      դ.  , צ <a href=\"{$_CONF['site_url']}\"> Ҧ</a>  <a href=\"{$_CONF['site_url']}/search.php\">Ҧ </a>,  ,   ,   ."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => ' Ťæ',
+    2 => ',    Ȧ Ť  .',
+    3 => 'צ',
+    4 => ' '
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'æΦ PDF ',
+    2 => '   צ.   ,    . Φ,   צ    Ԧ HTML,  צצ צ xHTML. ,   Φ  html  צ ,    Ӧ  צ. ,    Ԧ ϧ ,   0 Ԧ   .   Φ,    צ  ,  , ̦   .',
+    3 => 'צ   Φ PDF',
+    4 => '    Ҧ,       ad-hoc   PDF,  .   ,     Ҧ , \'֦   ͦΦ.          PDF  ad-hoc.',
+    5 => 'դ  .',
+    6 => ' , ,    .',
+    7 => '  ͦ       ۦ  æ,  ,      &laquo; ...&raquo;',
+    8 => '  Ʀæ ̦   צ  HTMLDoc ,       .  , Φ   ͦΦ,    .',
+    9 => ' PDF',
+    10 => ' &mdash;   Ad-hoc   PDF.      -  URL   PDF.  , ,    Ҧ    צ    .       PDF HTMLDoc,   ˦   ̦ צ ͦΦ  ',
+    11 => 'URL',
+    12 => ' PDF!',
+    13 => ' PHP   Ҧ   URL  Ħ fopen().  ͦΦ    php.ini,  allow_url_fopen   On',
+    14 => ' PDF,   դ,   դ,      ͦ   .'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/ukrainian.php 1.4.0sr5-1/cpanel-glprivate/language/ukrainian.php
--- 1.3.11sr1/cpanel-glprivate/language/ukrainian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/ukrainian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1507 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the ukrainian language page for GeekLog!
+#
+# Copyright (C) 2005 Vitaliy Biliyenko
+# v.lokki@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'Windows-1251';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => '():',
+    2 => ' ',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => '',
+    7 => ' ',
+    8 => '(,)',
+    9 => ' :',
+    10 => ' ',
+    11 => '',
+    12 => '',
+    13 => '',
+    14 => '',
+    15 => '䳿',
+    16 => '',
+    17 => '',
+    18 => ' SQL',
+    19 => ' ',
+    20 => '  :',
+    21 => '\' ',
+    22 => 'ID ',
+    23 => 'г ',
+    24 => '',
+    25 => '³',
+    26 => '        .       .',
+    27 => ' ',
+    28 => '',
+    29 => ' .',
+    30 => ' ',
+    31 => '  HTML:',
+    32 => ':  \' ',
+    33 => ':     ',
+    34 => '',
+    35 => '  ',
+    36 => 'on',
+    37 => '  ',
+    38 => ' ',
+    39 => '',
+    40 => '  <tt>php.ini</tt>  <tt>register_globals = Off</tt>.  Geeklog   <tt>register_globals</tt>  <strong>on</strong>.   , -,     <strong>on</strong>    .',
+    41 => '',
+    42 => ':',
+    43 => '³',
+    44 => '',
+    45 => '  MySQL',
+    46 => '   MySQL',
+    47 => 'i ',
+    48 => 'I  ',
+    49 => '',
+    50 => '   SQL',
+    51 => '',
+    52 => '',
+    53 => '',
+    54 => '  .',
+    55 => ' ',
+    56 => '',
+    57 => '',
+    58 => '',
+    59 => "   ?   : <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> </a>",
+    60 => ' ',
+    61 => '   ',
+    62 => '',
+    63 => ' ',
+    64 => '³   ',
+    65 => '   ',
+    66 => '̳ ',
+    67 => '   ',
+    68 => '',
+    69 => '',
+    70 => '',
+    71 => '',
+    72 => ' ',
+    73 => ' ',
+    74 => '',
+    75 => ' ',
+    76 => ' ',
+    77 => '',
+    78 => ' 䳿',
+    79 => ' ',
+    80 => '  ',
+    81 => '  ',
+    82 => '',
+    83 => 'i',
+    84 => '',
+    85 => '  48 ',
+    86 => '  ',
+    87 => '  2 ',
+    88 => '  ',
+    89 => 'ͳ   ',
+    90 => '',
+    91 => '  ',
+    92 => '',
+    93 => ' ',
+    94 => '           .',
+    95 => '  ',
+    96 => '',
+    97 => ' ',
+    98 => '',
+    99 => '',
+    100 => '  ',
+    101 => ' 䳿',
+    102 => '䳿 ',
+    103 => 'ﳿ  ',
+    104 => '',
+    105 => ' ',
+    106 => '',
+    107 => '  GL',
+    108 => ' ',
+    109 => '  ',
+    110 => '    ',
+    111 => ' PDF-',
+    112 => ' ',
+    113 => '',
+    114 => '',
+    115 => '  -',
+    116 => '',
+    117 => '',
+    118 => '-,     :',
+    119 => " <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\"></a>?",
+    120 => '    ',
+    121 => ' (%d)',
+    122 => ' (%d)',
+    123 => ' HTML '
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => ' ',
+    2 => ',    .',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => ' ',
+    7 => ' 䳿',
+    8 => '      ,       䳿,   ,  "̳ "   .',
+    9 => '  ̳ ',
+    10 => '   ',
+    11 => "    {$_USER['username']}",
+    12 => '',
+    13 => '',
+    14 => 'ʳ',
+    15 => '  '
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => ' ',
+    2 => ' ',
+    3 => '',
+    4 => '  ',
+    5 => '\' ',
+    6 => '   ,    .     ,     .',
+    7 => '    ',
+    8 => "  . ,        {$_CONF['commentspeedlimit']} ",
+    9 => '',
+    10 => '³ ',
+    11 => ' ',
+    12 => '-,     ,       .',
+    13 => ' ',
+    14 => ' ',
+    15 => '   ',
+    16 => '',
+    17 => '',
+    18 => ' ',
+    19 => '-,   .',
+    20 => '         .',
+    21 => '  ,      ,   .',
+    22 => ' ,      .',
+    23 => '     .',
+    24 => ' ',
+    25 => ' ,       ?',
+    26 => '%s     :',
+    27 => '  '
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => '  ',
+    2 => '\' ',
+    3 => ' \'',
+    4 => ' ',
+    5 => ' ',
+    6 => ' ',
+    7 => '',
+    8 => ' PGP',
+    9 => ' ',
+    10 => ' 10  ',
+    11 => '  ',
+    12 => ' ',
+    13 => '  ',
+    14 => '  .    .       "  "   .',
+    15 => "    {$_CONF['site_name']}  .         '  . -,    ,      .",
+    16 => '  ',
+    17 => '   ',
+    18 => '   ',
+    19 => '    \'   ',
+    20 => '   ',
+    21 => '',
+    22 => "  {$_CONF['site_name']}!",
+    23 => "          {$_CONF['site_name']}          '.    ,     . ,     <b><i></i></b>       .",
+    24 => '     .',
+    25 => ' ?',
+    26 => ' <em></em>  , <em></em>  ,        .          .',
+    27 => ' !',
+    28 => ' ',
+    29 => ' ',
+    30 => ' ',
+    31 => '    ,   ',
+    32 => 'ϳ',
+    33 => 'ͳ   ',
+    34 => '   \'',
+    35 => '  ,    ',
+    36 => '   http://',
+    37 => '  ',
+    38 => '  ,   ',
+    39 => '  PGP  ',
+    40 => '  ',
+    41 => ' ',
+    42 => ' ',
+    43 => '  ',
+    44 => ' ',
+    45 => '  ',
+    46 => '  ',
+    47 => '   ',
+    48 => '',
+    49 => '    ',
+    50 => ' ,    ',
+    51 => '³  ',
+    52 => ' ',
+    53 => '    ',
+    54 => '   ,     .',
+    55 => '    ,  ,      .     ,     ,   ,      .      .',
+    56 => '',
+    57 => ' ',
+    58 => ' ',
+    59 => ' ',
+    60 => '     ?',
+    61 => '³     ?',
+    62 => '  100',
+    63 => "      . -,    .     {$_CONF['site_name']}",
+    64 => '  ',
+    65 => '     ',
+    66 => '      \' .      .',
+    67 => '',
+    68 => '\'  ',
+    69 => '    \'      ?',
+    70 => "      {$_CONF['site_name']}",
+    71 => "       ,   ,     .    ,    <a href=\"{$_CONF['site_url']}/users.phpmode=new\"></a>  {$_CONF['site_name']}.   ?         !",
+    72 => ' ',
+    73 => '',
+    74 => '  !',
+    75 => '   ',
+    76 => '     ,    ,         .    ,   !',
+    77 => '',
+    78 => '  !',
+    79 => '  ,  ',
+    80 => '',
+    81 => ' ',
+    82 => ' 10   ',
+    83 => '   ',
+    84 => 'ʳ :',
+    85 => 'ʳ :',
+    86 => ' i  i',
+    87 => ' ',
+    88 => " ( )        \"%s\"  {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\n    , -,   :\n\n",
+    89 => "    ,        (   ). \n\n",
+    90 => '     . -,    ,          ',
+    91 => '  ',
+    92 => '  ',
+    93 => '       %d  .    %d      .',
+    94 => '  "%s"',
+    95 => ' " ",        . ,   ,      <strong></strong>  ,    "".',
+    96 => ' ',
+    97 => 'ϳ  ',
+    98 => ' ,    ?  ,        (   ).   ,  " " .',
+    99 => '  ',
+    100 => '  ',
+    101 => '    ',
+    102 => '  ',
+    103 => '    ',
+    104 => '³ -',
+    105 => '³   " "',
+    106 => '̳ ',
+    107 => '³   ',
+    108 => 'ϳ  ',
+    109 => '    ',
+    110 => ' ',
+    111 => '-,    ',
+    112 => '     . -,    .',
+    113 => '  ',
+    114 => '  ',
+    115 => '   ,    . -,   .',
+    116 => '    ',
+    117 => '       .    ,     .',
+    118 => "    {$_CONF['site_name']}  .      ,  ,    (<username>)     .",
+    119 => '   ,       :',
+    120 => '  ',
+    121 => '',
+    122 => ',    ',
+    123 => " <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> </a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => '   ',
+    2 => '    .            ',
+    3 => '   %s',
+    4 => '  ',
+    5 => '',
+    6 => '',
+    7 => '',
+    8 => ''
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'ϳ     .   .',
+    2 => '  .',
+    3 => '     ³.',
+    4 => ' : \', ³, , ',
+    5 => ':   .',
+    6 => ' .',
+    7 => ' ',
+    8 => '\' ',
+    9 => 'URL ',
+    10 => '  ',
+    11 => ' \':',
+    12 => '³:',
+    13 => ':',
+    14 => ':',
+    15 => 'HTML   .',
+    16 => ' ',
+    17 => '  ',
+    18 => '³',
+    19 => ' ',
+    20 => '',
+    21 => ' ',
+    22 => '  \'',
+    23 => "    %s  %s   / ,       {$_CONF['site_url']}.      ,    ,     .",
+    24 => '    ',
+    25 => '   ,     .        ',
+    26 => '        .   \'.',
+    27 => ' ',
+    28 => '%s (): ',
+    29 => "    {$_CONF['site_name']}  ",
+    30 => '     ',
+    31 => '',
+    32 => '',
+    33 => '   ',
+    34 => 'ʳ ',
+    35 => ',       .'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => ' ',
+    2 => 'i ',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => 'i',
+    7 => 'i',
+    8 => '',
+    9 => '',
+    10 => '',
+    11 => ' ',
+    12 => 'i()',
+    13 => ' : ii ',
+    14 => '   i   ',
+    15 => '-,   .',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => "  i i  i i  {$_CONF['site_name']}",
+    20 => '',
+    21 => '',
+    22 => '(  -MM-)',
+    23 => 'i',
+    24 => ' %d \'():',
+    25 => '',
+    26 => 'i ',
+    27 => '',
+    28 => ' i     ,  ',
+    29 => '    i',
+    30 => '     ',
+    31 => '     ',
+    32 => 'i',
+    33 => 'URL',
+    34 => '',
+    35 => ' ',
+    36 => '  i  ii  ',
+    37 => '  i',
+    38 => '  ',
+    39 => '',
+    40 => 'i',
+    41 => '   i i 3 .',
+    42 => '    -MM- (i-i-).',
+    43 => ' ',
+    44 => ' i ',
+    45 => ' - i i',
+    46 => '',
+    47 => 'i',
+    48 => '',
+    49 => '',
+    50 => 'i',
+    51 => '',
+    52 => '',
+    53 => '  ',
+    54 => '  ',
+    55 => '',
+    56 => 'AND',
+    57 => 'OR',
+    58 => '  &gt;&gt;',
+    59 => '',
+    60 => ' ',
+    61 => ' '
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => ' ',
+    2 => '   ',
+    3 => ' ()  ',
+    4 => '',
+    5 => '',
+    6 => '  ',
+    7 => '  ',
+    8 => ' ',
+    9 => '',
+    10 => '        .',
+    11 => '   ',
+    12 => '',
+    13 => '        .',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '        .',
+    22 => ' ,   ',
+    23 => ' ',
+    24 => ',         ',
+    25 => '10  - ',
+    26 => '  -.',
+    27 => 'ʳ  ',
+    28 => '10  ',
+    29 => '',
+    30 => 'ճ',
+    31 => '    ,     .'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Ci',
+    2 => '³  ',
+    3 => '   ',
+    4 => '',
+    5 => '  PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => '      .',
+    2 => '',
+    3 => ' ',
+    4 => ' ',
+    5 => ' ',
+    6 => ' ',
+    7 => '   \'',
+    8 => '',
+    9 => '         ,    ...<ul><li> \'   <li>     <li>   URL  </li></ul>',
+    10 => '',
+    11 => '',
+    12 => ' ',
+    13 => ' ',
+    14 => '̳ ',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '   ',
+    20 => '',
+    21 => '',
+    22 => ':  ',
+    23 => '-,    .    \'.',
+    24 => ' ',
+    25 => '   .',
+    26 => ' ',
+    27 => '\' ',
+    28 => '',
+    29 => '',
+    30 => '    ',
+    31 => "  .    {$_CONF['speedlimit']}   ",
+    32 => ' ',
+    33 => '  ',
+    34 => '  ',
+    35 => ' HTML  ',
+    36 => ' ',
+    37 => " 䳿  {$_CONF['site_name']}     ,           .   <b></b>      , ,    .<br><br>              '   .",
+    38 => '  ',
+    39 => ' ',
+    40 => ' ',
+    41 => 'ʳ',
+    42 => '',
+    43 => '   ',
+    44 => ',  1',
+    45 => ',  2',
+    46 => '̳/',
+    47 => '',
+    48 => '',
+    49 => ' 䳿',
+    50 => '  ',
+    51 => '',
+    52 => '',
+    53 => '  '
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => ' ',
+    2 => '³!   ',
+    3 => '  ',
+    4 => '\' :',
+    5 => ':',
+    6 => '        . <br>      .',
+    7 => ''
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => '  ',
+    2 => '       .',
+    3 => ' ',
+    4 => '     .  error.log,   .',
+    5 => '',
+    6 => '',
+    7 => '',
+    8 => 'г ',
+    9 => ' ',
+    10 => '',
+    11 => ' ',
+    12 => ' ',
+    13 => '  ',
+    14 => 'RSS URL',
+    15 => '  RSS',
+    16 => '  ',
+    17 => ' ',
+    18 => ' :     ',
+    19 => ' ',
+    20 => '',
+    21 => 'г  ',
+    22 => '',
+    23 => ' ',
+    24 => '',
+    25 => '    ,     .     ,  " " .   ,     [R]  [L].',
+    26 => ' ',
+    27 => ' PHP',
+    28 => '  PHP',
+    29 => ' ',
+    30 => '  ,      PHP ,  \' .       "phpblock_" (, phpblock_getweather).      ,     .    ,    ,     Geeklog,  ,     .     "()"    .       /path/to/geeklog/system/lib-custom.php.            Geeklog.',
+    31 => '   PHP.  %s  .',
+    32 => ' () ()',
+    33 => ' URL RSS    ',
+    34 => '     PHP ',
+    35 => '      ',
+    36 => '    ',
+    37 => ' \'    PHP',
+    38 => '   PHP    \'phpblock_\' (, phpblock_getweather).  \'phpblock_\'         .',
+    39 => '',
+    40 => '˳',
+    41 => '',
+    42 => '      ',
+    43 => '  ',
+    44 => '',
+    45 => "     ,      .    . -, <a href=\"{$_CONF['site_admin_url']}/block.php\">     </a>.",
+    46 => '',
+    47 => '',
+    48 => ' ',
+    49 => ' (     )',
+    50 => '',
+    51 => ' http://',
+    52 => '     ,       ',
+    53 => '',
+    54 => '',
+    55 => '',
+    56 => '',
+    57 => '  ',
+    58 => '  ',
+    59 => '  ',
+    60 => '  ',
+    61 => ' ',
+    62 => ' ',
+    63 => ' ',
+    64 => '        HTML!',
+    65 => ''
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => ' 䳿',
+    2 => '',
+    3 => ' ',
+    4 => 'URL 䳿',
+    5 => '  䳿',
+    6 => '  䳿',
+    7 => '̳ 䳿',
+    8 => ' 䳿',
+    9 => '( http://)',
+    10 => '     /,    䳿',
+    11 => ' ',
+    12 => '    ,     .     ,  " " .        䳿.',
+    13 => '',
+    14 => ' ',
+    15 => ' ',
+    16 => '',
+    17 => "     䳿,      .    . -, <a href=\"{$_CONF['site_admin_url']}/event.php\">    </a>.",
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '',
+    23 => '  .',
+    24 => '  .',
+    25 => '    .'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => ' ',
+    2 => ' ',
+    3 => '',
+    4 => ' ',
+    5 => ' ',
+    6 => '    ',
+    7 => '',
+    8 => '',
+    9 => ' ',
+    10 => '',
+    11 => '',
+    12 => 'ID',
+    13 => '',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => ' ',
+    18 => '(,i)',
+    19 => '(,)',
+    20 => 'ϳ',
+    21 => ' ',
+    22 => ' ',
+    23 => '    ,     .   ,   .    ,  " " .',
+    24 => 'ID,      ,  . -,   ID.',
+    25 => '    ',
+    26 => '  ',
+    27 => '   [unscaledX]  [imageX],      .',
+    28 => '<p><b>Ͳ </b>:      ,        .        .',
+    29 => '',
+    30 => '  ',
+    31 => '-,     ',
+    32 => '',
+    33 => '     ',
+    34 => '',
+    35 => '',
+    36 => 'ͳ',
+    37 => ' ',
+    38 => ' ',
+    39 => '',
+    40 => '',
+    41 => "     ,      .    .     . -, <a href=\"{$_CONF['site_admin_url']}/story.php\">       </a>  .",
+    42 => "     ,      .    . -, <a href=\"{$_CONF['site_admin_url']}/story.php\">    </a>.",
+    43 => '',
+    44 => '',
+    45 => '',
+    46 => '<b>:</b>         ,         .   ,         RSS         .',
+    47 => '',
+    48 => '',
+    49 => '',
+    50 => '',
+    51 => '       \'   ,      .      [imageX], [imageX_right]  [imageX_left],  X     ,   \'. :    ,   \'.       .<BR>',
+    52 => '',
+    53 => '  .          ,     ',
+    54 => 'ϳ\'   ',
+    55 => '     .  -,    ',
+    56 => '  ',
+    57 => '    ',
+    58 => ' ',
+    59 => '',
+    60 => '',
+    61 => ' ',
+    62 => ' ',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => '   ',
+    68 => '   ',
+    69 => '  ',
+    70 => '  ',
+    71 => ' ',
+    72 => ' ',
+    73 => ' ',
+    74 => '  II',
+    75 => ' ',
+    76 => ' ',
+    77 => '       Javascript.       config.php',
+    78 => ' <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default"></a>,    ',
+    79 => '',
+    80 => '',
+    81 => ' ',
+    82 => '',
+    83 => ' ',
+    84 => ' ',
+    85 => ' '
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => ' ',
+    2 => 'ID ',
+    3 => ' ',
+    4 => ' ',
+    5 => '(  )',
+    6 => '      \'     ',
+    7 => '-,   ID    ',
+    8 => ' ',
+    9 => '    ,  .    ,  " " .         . ǳ (*)    .',
+    10 => ' ',
+    11 => '  ',
+    12 => '³  ',
+    13 => "     ,      .    . -, <a href=\"{$_CONF['site_admin_url']}/topic.php\">      </a>.",
+    14 => ' ',
+    15 => '',
+    16 => ' ',
+    17 => ' ',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => ' ',
+    23 => '       ',
+    24 => '(*)',
+    25 => ' ',
+    26 => '       .      .',
+    27 => '  ',
+    28 => '',
+    29 => '  '
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => ' ',
+    2 => 'ID ',
+    3 => '\' ',
+    4 => ' \'',
+    5 => '',
+    6 => 'г ',
+    7 => ' ',
+    8 => ' ',
+    9 => '(  )',
+    10 => '-,   \'    ',
+    11 => ' ',
+    12 => '    ,     .     ,     .   ,  " " .     ,    ,    ( *son*  *.edu)   .',
+    13 => 'г ',
+    14 => ' ',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => ' \'  .',
+    22 => '',
+    23 => ' ',
+    24 => '  ',
+    25 => '      Geeklog.        -       :  \', \' ,   .  ,  ,    .        .          ,     !',
+    26 => '',
+    27 => '',
+    28 => '³   ',
+    29 => '',
+    30 => '',
+    31 => ' ',
+    32 => ' .  %d ,  %d ',
+    33 => '',
+    34 => ':      .',
+    35 => '   ',
+    36 => '()',
+    37 => 'UID',
+    38 => ' ',
+    39 => ' ( )',
+    40 => ' ',
+    41 => '  ',
+    42 => '',
+    43 => '  ',
+    44 => '  ',
+    45 => '',
+    46 => ' ',
+    47 => ''
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => '',
+    2 => '',
+    3 => '',
+    4 => '',
+    10 => '',
+    11 => ' ',
+    12 => 'URL',
+    13 => ' ',
+    14 => '',
+    15 => '',
+    16 => '\' ',
+    17 => ' \'',
+    18 => ' ',
+    34 => '',
+    35 => '  ',
+    36 => '',
+    37 => '䳿  ',
+    38 => '',
+    39 => '    ',
+    40 => '  '
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => '',
+    2 => '',
+    3 => '³',
+    4 => '',
+    5 => '',
+    6 => '\'',
+    7 => '',
+    8 => ' ',
+    9 => ' %s',
+    10 => '䳿 ',
+    11 => ' ',
+    12 => '̳ ',
+    13 => 'ѳ',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '',
+    18 => '',
+    19 => '',
+    20 => '',
+    21 => '',
+    22 => '',
+    23 => '',
+    24 => '',
+    25 => '  ',
+    26 => ' ',
+    27 => '',
+    28 => '  ',
+    29 => ' ',
+    30 => ' ',
+    31 => '',
+    32 => '',
+    33 => '',
+    34 => '',
+    35 => ' ',
+    36 => '',
+    37 => ',        ',
+    38 => '  ',
+    39 => '',
+    40 => '',
+    41 => '̳'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => " {$_CONF['site_name']}",
+    2 => 'i',
+    3 => 'ii:',
+    4 => '',
+    5 => '',
+    6 => ':',
+    7 => 'i i',
+    8 => 'ii',
+    9 => '',
+    10 => 'HTML',
+    11 => 'i i!',
+    12 => '',
+    13 => '',
+    14 => 'I  ',
+    15 => '  ii : ',
+    16 => 'i i i : ',
+    17 => "<a href=\"{$_CONF['site_admin_url']}/mail.php\">  </a>",
+    18 => '',
+    19 => ':       ,      .',
+    20 => "  <successcount>    - <failcount>.   ,     .     <a href=\"{$_CONF['site_admin_url']}/mail.php\">³  </a>  <a href=\"{$_CONF['site_admin_url']}/moderation.php\">    </a>.",
+    21 => '³()',
+    22 => 'i',
+    23 => ' ',
+    24 => ' ',
+    25 => '--   --',
+    26 => '         .'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => '    Geeklog    . ,     ,   <a href="http://www.geeklog.net" target="_blank">  Geeklog</a>,     ,   ,    . ,   ,        ,      ,    ,     .         ,            ,    Geeklog.  ,      .          .',
+    2 => '   ',
+    3 => '  ',
+    4 => ' ',
+    5 => ' ',
+    6 => ':   !',
+    7 => ',    ,  .  ,   ,  ',
+    8 => '     ',
+    9 => '     Geeklog.    <a href="http://www.geeklog.net">Geeklog</a>      .',
+    10 => '<br><b>    .</b><br><br>',
+    11 => '    ,     .     ,    .    ,      .    ,    .     , -,    .',
+    12 => '\'     plugineditor()',
+    13 => ' ',
+    14 => ' ',
+    15 => '',
+    16 => ' ',
+    17 => ' ',
+    18 => ' Geeklog',
+    19 => '',
+    20 => '',
+    21 => 'ͳ',
+    22 => '',
+    23 => '',
+    24 => '',
+    25 => '',
+    26 => ' ',
+    27 => ' ',
+    28 => ' ',
+    29 => ' Geeklog',
+    30 => ' ?',
+    31 => ' ,     ? ,      ,    .   ,  "".',
+    32 => '<p><b> -    AutoLink</b></p>',
+    33 => ' ',
+    34 => '',
+    35 => '',
+    36 => '',
+    37 => '',
+    38 => '!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => ' ',
+    2 => '',
+    3 => '',
+    4 => '',
+    10 => ' ',
+    11 => ' ',
+    12 => '',
+    13 => '    ,     .   ,  " " .',
+    14 => '',
+    15 => '',
+    16 => '\' ',
+    17 => '',
+    18 => ' ',
+    19 => '',
+    20 => '',
+    21 => 'ͳ',
+    22 => '<i>( )</i>',
+    23 => ' ',
+    24 => '  ',
+    25 => ' ',
+    26 => '',
+    27 => ' ',
+    28 => '(0 =  , 1 =  ,   =     .)',
+    29 => '',
+    30 => ' ',
+    31 => '',
+    32 => '',
+    33 => '',
+    34 => '',
+    35 => '',
+    36 => '  ',
+    37 => '     ,    .    ,     Geeklog     .',
+    38 => ':  ',
+    39 => '-,   ,   \' .',
+    40 => '-,      .',
+    41 => '',
+    42 => '䳿',
+    43 => '',
+    44 => '',
+    45 => '  ',
+    46 => ' ',
+    47 => '',
+    48 => '',
+    49 => ' ',
+    50 => "³  URL  ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "     . -,     .    {$_CONF['site_name']}",
+    2 => "     {$_CONF['site_name']}.     .    ,        .",
+    3 => '',
+    4 => "   䳿  {$_CONF['site_name']}.     .    ,        <a href=\"{$_CONF['site_url']}/calendar.php\"></a>.",
+    5 => '      .',
+    6 => '    .',
+    7 => '    .',
+    8 => '    .',
+    9 => '   .',
+    10 => '  .',
+    11 => '   .',
+    12 => '  .',
+    13 => '  .',
+    14 => ',    ,    ,  .',
+    15 => '',
+    16 => '',
+    17 => '   .',
+    18 => '  .',
+    19 => '   .',
+    20 => '  .',
+    21 => '   .',
+    22 => '  .',
+    23 => '    䳿   :   ID 䳿.',
+    24 => '      ',
+    25 => '     ,      .',
+    26 => '       ',
+    27 => '  .',
+    28 => '  .',
+    29 => ',       ',
+    30 => '³  ',
+    31 => ',       .  ,        ',
+    32 => ',       .  ,        ',
+    33 => ',       .  ,        ',
+    34 => ',       .  ,        ',
+    35 => ',       .  ,        ',
+    36 => ',       .  ,        ',
+    37 => ',       .  ,        ',
+    38 => ',       .  ,        ',
+    39 => ',       .  ,        ',
+    40 => ' ',
+    41 => ',       -.  ,        ',
+    42 => '  .',
+    43 => '  .',
+    44 => '  !',
+    45 => '  .',
+    46 => ',        .  ,        ',
+    47 => 'ֳ      Unix-.    Unix,       .     Windows,      adodb_*.php    .',
+    48 => "     {$_CONF['site_name']}.     .            .",
+    49 => '   .',
+    50 => '   .',
+    51 => ' \'   . -,  .',
+    52 => '    .',
+    53 => '   . -,       .',
+    54 => '     . -,   .',
+    55 => '     ,    . -,    ,        .',
+    56 => '       .',
+    57 => '    .',
+    58 => '    .',
+    59 => '   .',
+    60 => '  ',
+    61 => ' %s:   ',
+    62 => '- .',
+    63 => 'ϳ   -  .',
+    64 => ' -  .',
+    65 => '   .',
+    66 => '   .',
+    67 => '      !',
+    68 => '     .',
+    69 => '   !',
+    70 => '      .',
+    71 => '          .',
+    72 => 'ϳ     .      error.log.',
+    73 => 'ϳ     .      error.log.',
+    74 => 'ϳ  .',
+    75 => '    POST .'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => '',
+    'ownerroot' => '/Root',
+    'group' => '',
+    'readonly' => 'ҳ ',
+    'accessrights' => ' ',
+    'owner' => '',
+    'grantgrouplabel' => '    ',
+    'permmsg' => ':  -       ,   -    ,     .',
+    'securitygroups' => ' ',
+    'editrootmsg' => "     ,       ,       .      ,  .   ,       .  -,   <a href=\"{$_CONF['site_admin_url']}/user.php\">  </a>.",
+    'securitygroupsmsg' => '      .',
+    'groupeditor' => ' ',
+    'description' => '',
+    'name' => '\'',
+    'rights' => '',
+    'missingfields' => ' ',
+    'missingfieldsmsg' => '      ',
+    'groupmanager' => ' ',
+    'newgroupmsg' => '    ,     .   ,  " " . ,       ,    .',
+    'groupname' => '\' ',
+    'coregroup' => ' ',
+    'yes' => '',
+    'no' => 'ͳ',
+    'corerightsdescr' => "     {$_CONF['site_name']}.       .   ,    .",
+    'groupmsg' => '   .     ,       ,    .    ,   ,     .        ,           "" .    -    ,      .',
+    'coregroupmsg' => "     {$_CONF['site_name']}.  ,        .        .",
+    'rightsdescr' => '        ,    . ҳ ,     ,  ,       ,    .         .',
+    'lock' => '',
+    'members' => '',
+    'anonymous' => '',
+    'permissions' => '',
+    'permissionskey' => 'R = , E = ,      ',
+    'edit' => '',
+    'none' => '',
+    'accessdenied' => '³  ',
+    'storydenialmsg' => "        . ,       {$_CONF['site_name']}.  , <a href=\"{$_CONF['site_url']}/users.php?mode=new\"></a>  {$_CONF['site_name']}    !",
+    'eventdenialmsg' => "        䳿. ,      {$_CONF['site_name']}.  , <a href=\"{$_CONF['site_url']}/users.php?mode=new\"></a>  {$_CONF['site_name']}    !",
+    'nogroupsforcoregroup' => '        ',
+    'grouphasnorights' => '           ',
+    'newgroup' => ' ',
+    'adminhome' => '',
+    'save' => '',
+    'cancel' => '',
+    'delete' => '',
+    'canteditroot' => '    ,        ,     .  ,   ,    .',
+    'listusers' => '',
+    'listthem' => '',
+    'usersingroup' => '  "%s"',
+    'usergroupadmin' => '  ',
+    'add' => '',
+    'remove' => '',
+    'availmembers' => ' ',
+    'groupmembers' => ' ',
+    'canteditgroup' => '   ,     . -,   ,    .',
+    'cantlistgroup' => '    ,      . -,   ,    .',
+    'editgroupmsg' => '    ,  ()       .     ,       .    -  <b></b>,          .',
+    'listgroupmsg' => '   : <b>%s</b>',
+    'search' => '',
+    'submit' => '³',
+    'limitresults' => ' ',
+    'group_id' => 'ID ',
+    'plugin_access_denied_msg' => '       .  ,     .',
+    'groupexists' => ' \'   ',
+    'groupexistsmsg' => '     \'.     .'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => ' 10  ',
+    'do_backup' => '  ',
+    'backup_successful' => '     .',
+    'db_explanation' => '       Geeklog,  ',
+    'not_found' => "    mysqldump  .<br>  <strong>\$_DB_mysqldump_path</strong>   config.php.<br>  : <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => '  :   0 ',
+    'path_not_found' => "{$_CONF['backup_path']}      ",
+    'no_access' => ":  {$_CONF['backup_path']} .",
+    'backup_file' => '  ﳿ',
+    'size' => '',
+    'bytes' => '',
+    'total_number' => '  : %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => '',
+    2 => '',
+    3 => '',
+    4 => '',
+    5 => '',
+    6 => '',
+    7 => '',
+    8 => '',
+    9 => '',
+    10 => ' ',
+    11 => ''
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => ' 404',
+    2 => ',   ,     <b>%s</b>.',
+    3 => "<p> ,  ,   ,  . -,  <a href=\"{$_CONF['site_url']}\"> </a>  <a href=\"{$_CONF['site_url']}/search.php\"> </a>     ."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => ' \'',
+    2 => ',      ,   .',
+    3 => '',
+    4 => ' '
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => ' PDF ',
+    2 => '   .   ,    .  -,      html,    xHTML.   ,            .      0   ,    .   ,      , -  .',
+    3 => '     PDF',
+    4 => '    ,     ad-hoc PDF.    ,     ,    .            PDF   ad-hoc.',
+    5 => '  .',
+    6 => '-,     .',
+    7 => '         \' ...\',     .',
+    8 => '   HTMLDoc,    ,         .  -,    .',
+    9 => ' PDF',
+    10 => '    Ad-hoc PDF. ³   URL,   , PDF .    ,   -     .     HTMLDoc,         ',
+    11 => 'URL',
+    12 => ' PDF!',
+    13 => ' PHP       URL-   fopen().       php.ini   allow_url_fopen   On',
+    14 => 'PDF,      ,        .'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => '',
+    'from' => '',
+    'tracked_on' => ' ',
+    'read_more' => '[ ]',
+    'intro_text' => '      \'%s\':',
+    'no_comments' => ' -   .',
+    'this_trackback_url' => '-URL   :',
+    'num_comments' => '%d -',
+    'send_trackback' => ' ',
+    'preview' => '',
+    'editor_title' => ' -',
+    'trackback_url' => '-URL',
+    'entry_url' => 'URL ',
+    'entry_title' => ' ',
+    'blog_name' => ' ',
+    'excerpt' => '',
+    'truncate_warning' => ': -    ',
+    'button_send' => '',
+    'button_preview' => '',
+    'send_error' => '',
+    'send_error_details' => '    -:',
+    'url_missing' => ' URL ',
+    'url_required' => '-,    URL  .',
+    'target_missing' => ' -URL',
+    'target_required' => '-,  -URL',
+    'error_socket' => '   .',
+    'error_response' => '³ .',
+    'error_unspecified' => ' .',
+    'select_url' => ' -URL',
+    'not_found' => '-URL  ',
+    'autodetect_failed' => 'Geeklog    -URL  ,      . -,    .',
+    'trackback_explain' => '  ,  URL       -. Geeklog    -URL   .    <a href="%s">  ,</a>    .',
+    'no_links_trackback' => '  .     -   .',
+    'pingback' => 'ϳ',
+    'pingback_results' => ' ',
+    'send_pings' => ' ',
+    'send_pings_for' => '   "%s"',
+    'no_links_pingback' => '  .       .',
+    'pingback_success' => 'ϳ .',
+    'no_pingback_url' => '  -URL.',
+    'resend' => '',
+    'ping_all_explain' => '    ,    (<a href="http://en.wikipedia.org/wiki/Pingback">ϳ</a>),       ,   <a href="http://en.wikipedia.org/wiki/Trackback"></a>-,        .',
+    'pingback_button' => ' ',
+    'pingback_short' => '    ,     .',
+    'pingback_disabled' => '(ϳ )',
+    'ping_button' => ' ',
+    'ping_short' => 'ϳ  .',
+    'ping_disabled' => '(ϳ )',
+    'trackback_button' => ' ',
+    'trackback_short' => ' -.',
+    'trackback_disabled' => '( )',
+    'may_take_a_while' => ',        .',
+    'ping_results' => ' ',
+    'unknown_method' => '  ',
+    'ping_success' => 'ϳ .',
+    'error_site_name' => '-,   .',
+    'error_site_url' => '-,  URL .',
+    'error_ping_url' => '-,   -URL.',
+    'no_services' => '    .',
+    'services_headline' => ' ',
+    'service_explain' => '    ,    .    ,  " " .',
+    'service' => '',
+    'ping_method' => ' ',
+    'service_website' => '',
+    'service_ping_url' => 'ϳ URL',
+    'ping_standard' => ' ',
+    'ping_extended' => ' ',
+    'ping_unknown' => '( )',
+    'edit_service' => '  ',
+    'trackbacks' => '',
+    'editor_intro' => 'ϳ  -  <a href="%s">%s</a>.',
+    'editor_intro_none' => 'ϳ  -.',
+    'trackback_note' => '  -  ,       " "  .   ,  \'  ,  <a href="%s"></a>.',
+    'pingback_explain' => ' URL,     . ϳ       .',
+    'pingback_url' => 'ϳ-URL',
+    'site_url' => 'URL  ',
+    'pingback_note' => '    ,       " "  .   ,  \'  ,  <a href="%s"></a>.',
+    'pbtarget_missing' => ' -URL',
+    'pbtarget_required' => '-,  -URL',
+    'pb_error_details' => '    :'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => ' ',
+    'title_year' => '   %d',
+    'title_month_year' => '   %s %d',
+    'nav_top' => '   ',
+    'no_articles' => ' .'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n  %i   %t %s',
+    'new_last' => ' %t %s',
+    'minutes' => '',
+    'hours' => '',
+    'days' => '',
+    'weeks' => '',
+    'months' => '',
+    'minute' => '',
+    'hour' => '',
+    'day' => '',
+    'week' => '',
+    'month' => ''
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => '',
+    'limit_results' => ' ',
+    'submit' => '',
+    'edit' => '',
+    'admin_home' => '',
+    'create_new' => ' ',
+    'enabled' => '',
+    'title' => '',
+    'type' => '',
+    'topic' => '',
+    'help_url' => 'URL  ',
+    'save' => '',
+    'cancel' => '',
+    'delete' => '',
+    'copy' => '',
+    'no_results' => '-    -',
+    'data_error' => 'ϳ     . -,   .'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => ' ',
+    -1 => ' '
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => '',
+    'nested' => '',
+    'threaded' => '',
+    'nocomment' => ' '
+);
+
+$LANG_cookiecodes = array(
+    0 => '( )',
+    3600 => '1 ',
+    7200 => '2 ',
+    10800 => '3 ',
+    28800 => '8 ',
+    86400 => '1 ',
+    604800 => '1 ',
+    2678400 => '1 '
+);
+
+$LANG_dateformats = array(
+    0 => ''
+);
+
+$LANG_featurecodes = array(
+    0 => '',
+    1 => ''
+);
+
+$LANG_frontpagecodes = array(
+    0 => '   ',
+    1 => '  '
+);
+
+$LANG_postmodes = array(
+    'plaintext' => ' ',
+    'html' => ' HTML'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => ' ',
+    'DESC' => ' '
+);
+
+$LANG_trackbackcodes = array(
+    0 => ' ',
+    -1 => ' '
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/language/ukrainian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/language/ukrainian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/language/ukrainian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/language/ukrainian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1509 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the Ukrainian language page for GeekLog!
+# Special thanks to Mischa Polivanov for his work on this project
+#
+# Copyright (C) 2005 Yaroslav Fedevych
+# jaroslaw@nospam.kiev.ua
+# 
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+$LANG_CHARSET = 'utf-8';
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:  $LANG - variable name
+#               XX    - file id number
+#               YY    - phrase id number
+###############################################################################
+
+###############################################################################
+# USER PHRASES - These are file phrases used in end user scripts
+###############################################################################
+
+###############################################################################
+# lib-common.php
+
+$LANG01 = array(
+    1 => 'Надіслано:',
+    2 => 'читати далі',
+    3 => 'дописів',
+    4 => 'Редаґувати',
+    5 => 'Голосувати',
+    6 => 'Результати',
+    7 => 'Підсумки опитування',
+    8 => 'голосів',
+    9 => 'Адміністраторські функції:',
+    10 => 'Надіслане',
+    11 => 'Статті',
+    12 => 'Блоки',
+    13 => 'Теми',
+    14 => 'Посилання',
+    15 => 'Події',
+    16 => 'Опитування',
+    17 => 'Користувачі',
+    18 => 'Запит SQL',
+    19 => 'Вийти',
+    20 => 'Інформація про користувача:',
+    21 => 'Реєстраційне ім\'я',
+    22 => 'Ідентифікатор користувача',
+    23 => 'Рівень безпеки',
+    24 => 'Анонім',
+    25 => 'Відповідь',
+    26 => 'Власниками нижчеподаних коментарів є їхні дописувачі. Власники сайту не відповідають за їхній зміст.',
+    27 => 'Найсвіжіший допис',
+    28 => 'Видалити',
+    29 => 'Нема користувацьких коментарів.',
+    30 => 'Давніші статті',
+    31 => 'Дозволені мітки HTML:',
+    32 => 'Помилка, недопустиме реєстраційне ім\'я',
+    33 => 'Помилка, не вдалося здійснити запис до протокольного файлу',
+    34 => 'Помилка',
+    35 => 'Відреєструватись',
+    36 => 'на',
+    37 => 'Нема користувацьких статей',
+    38 => 'Трансляція вмісту',
+    39 => 'Поновити',
+    40 => 'У вашому <tt>php.ini</tt> встановлено <tt>register_globals = Off</tt>. Geeklog, однак, потребує, щоб значенням <tt>register_globals</tt> було <strong>on</strong>. Перш ніж продовжити, будь ласка, встановіть його в <strong>on</strong> та перезапустіть веб-сервер.',
+    41 => 'Користувачі-гості',
+    42 => 'Написав:',
+    43 => 'Відповісти на це',
+    44 => 'Предок',
+    45 => 'Номер помилки MySQL',
+    46 => 'Повідомлення MySQL про помилку',
+    47 => 'Функції користувача',
+    48 => 'Профіль користувача',
+    49 => 'Вподобання',
+    50 => 'Помилка у виразі SQL',
+    51 => 'довідка',
+    52 => 'Створити',
+    53 => 'Адміністраторська домівка',
+    54 => 'Не вдалося відкрити файл.',
+    55 => 'Помилка при',
+    56 => 'Голосувати',
+    57 => 'Пароль',
+    58 => 'Увійти',
+    59 => "Ще не зареєструвались? Зареєструйтесь як <a href=\"{$_CONF['site_url']}/users.php?mode=new\">новий користувач</a>",
+    60 => 'Розмістити коментар',
+    61 => 'Створити новий профіль',
+    62 => 'слів',
+    63 => 'Вподобання щодо коментарів',
+    64 => 'Надіслати статтю другові електронною поштою',
+    65 => 'Варіант для друку',
+    66 => 'Мій календар',
+    67 => 'Ласкаво просимо до ',
+    68 => 'Домівка',
+    69 => 'Зв\'язок',
+    70 => 'Пошук',
+    71 => 'Зробити внесок',
+    72 => 'Ресурси Тенет',
+    73 => 'Попередні опитування',
+    74 => 'Календар',
+    75 => 'Складний пошук',
+    76 => 'Статистика сайту',
+    77 => 'Втулки',
+    78 => 'Найближчі події',
+    79 => 'Що нового',
+    80 => 'повідомлень за останні',
+    81 => 'повідомлення за останні',
+    82 => 'годин',
+    83 => 'КОМЕНТАРІ',
+    84 => 'ПОСИЛАННЯ',
+    85 => 'за останні 48 год',
+    86 => 'Нема нових коментарів',
+    87 => 'за останні 2 тижні',
+    88 => 'Нема недавніх нових посилань',
+    89 => 'Наближчим часом немає жодних подій',
+    90 => 'Домівка',
+    91 => 'Цю сторінку створено за',
+    92 => 'секунд',
+    93 => 'Copyright',
+    94 => 'Всі торгові марки й авторські права на цій сторінці належать їх відповідним власникам.',
+    95 => 'Тут використано',
+    96 => 'Групи',
+    97 => 'Перелік слів',
+    98 => 'Втулки',
+    99 => 'СТАТТІ',
+    100 => 'Нема нових статей',
+    101 => 'Ваші події',
+    102 => 'Події на сайті',
+    103 => 'Резервні копії БД',
+    104 => 'by',
+    105 => 'Листувати користувачам',
+    106 => 'Перегляди',
+    107 => 'Тест версії GL',
+    108 => 'Очистити кеш',
+    109 => 'Повідомити про зловживання',
+    110 => 'Повідомити адміністратора про цей допис',
+    111 => 'Перегляд PDF-варіанту',
+    112 => 'Зареєстровані користувачі',
+    113 => 'Документація',
+    114 => 'TRACKBACKS',
+    115 => 'No new trackback comments',
+    116 => 'Trackback',
+    117 => 'Directory',
+    118 => 'Please continue reading on the next page:',
+    119 => "Lost your <a href=\"{$_CONF['site_url']}/users.php?mode=getpassword\">password</a>?",
+    120 => 'Permanent link to this comment',
+    121 => 'Comments (%d)',
+    122 => 'Trackbacks (%d)',
+    123 => 'All HTML is allowed'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG02 = array(
+    1 => 'Календар подій',
+    2 => 'Пробачте, однак показати нічого.',
+    3 => 'Коли',
+    4 => 'Де',
+    5 => 'Опис',
+    6 => 'Додати подію',
+    7 => 'Найближчі події',
+    8 => 'Додавши цю подію до свого календаря, ви можете швидко оглянути лише цікаві для вас події, клацнувши "Мій календар" з зони функцій користувача.',
+    9 => 'Додати до мого календаря',
+    10 => 'Вилучити з мого календаря',
+    11 => "Додавання події до календаря користувача {$_USER['username']}",
+    12 => 'Подія',
+    13 => 'Розпочинається',
+    14 => 'Завершується',
+    15 => 'Повернутись до календаря'
+);
+
+###############################################################################
+# comment.php
+
+$LANG03 = array(
+    1 => 'Розмістити коментар',
+    2 => 'Режим допису',
+    3 => 'Відреєструватись',
+    4 => 'Зареєструватись',
+    5 => 'Реєстраційне ім\'я',
+    6 => 'На цьому сайті вимагається ваша реєстрація для розміщення коментарів.  Якщо у вас немає профілю, ви можете скористатись поданою нижче формою для його створення.',
+    7 => 'Ваш останній коментар зроблено ',
+    8 => " секунд тому.  На цьому сайті вимагається {$_CONF['commentspeedlimit']} секунд(и) між коментарями",
+    9 => 'Коментар',
+    10 => 'Надіслати звіт',
+    11 => 'Надіслати коментар',
+    12 => 'Будьте ласкаві заповнити поля &laquo;Назва&raquo; й &laquo;Коментар&raquo; &mdash; вони необхідні для надіслання вашого коментаря.',
+    13 => 'Ваша інформація',
+    14 => 'Попередній перегляд',
+    15 => 'Повідомити про цей допис',
+    16 => 'Назва',
+    17 => 'Помилка',
+    18 => 'Важлива інформація',
+    19 => 'Будь ласка, дотримуйтесь теми обговорення.',
+    20 => 'Намагайтесь відповідати на коментарі інших замість створювати нові нитки.',
+    21 => 'Читайте дописи інших перед розміщенням власних задля уникнення повторень того, що вже було сказано.',
+    22 => 'Використайте ясну тему, котра опише, про що йдеться у вашому повідомленні.',
+    23 => 'Ваша адреса електронної пошти НЕ публікуватиметься.',
+    24 => 'Анонімний користувач',
+    25 => 'Ви впевнені, що бажаєте повідомити про цей допис адміністраторові?',
+    26 => '%s повідомляє про надуживання в дописі наступного змісту:',
+    27 => 'Звіт про надуживання'
+);
+
+###############################################################################
+# users.php
+
+$LANG04 = array(
+    1 => 'Користувацький профіль для',
+    2 => 'Реєстраційне ім\'я',
+    3 => 'Повне ім\'я',
+    4 => 'Пароль',
+    5 => 'Електронна пошта',
+    6 => 'Домівка',
+    7 => 'Біографія',
+    8 => 'Ключ PGP',
+    9 => 'Зберегти інформацію',
+    10 => 'Останні 10 коментарів користувача',
+    11 => 'Немає коментарів користувача',
+    12 => 'Користувацькі вподобання для',
+    13 => 'Відсилати нічний дайджест поштою',
+    14 => 'Цей пароль створено ґенератором випадкових рядків. Радимо негайно змінити цей пароль! Щоб зробити це, зареєструйтеся й клацніть &laquo;Інформація про рахунок&raquo; з меню &laquo;Функції користувача&raquo;.',
+    15 => "Ваш профіль для {$_CONF['site_name']} успішно створено. Щоб мати змогу ним скористатись, вам потрібно увійти до системи, використавши нижчеподану інформацію. Будь ласка, збережіть листа для подальшого використання.",
+    16 => 'Інформація про ваш профіль',
+    17 => 'Профіль не існує',
+    18 => 'Подана адреса електронної пошти не скидається на дійсну',
+    19 => 'Подане реєстраційне ім\'я чи адресу електронної пошти вже зареєстровано',
+    20 => 'Подана поштова адреса не скидається на дійсну',
+    21 => 'Помилка',
+    22 => "Зареєструйтесь на {$_CONF['site_name']}!",
+    23 => "Створення користувацького профілю надасть вам усі переваги членства на сайті {$_CONF['site_name']}, як також дозволить вам розміщувати дописи й публікувати матеріали від власного імені. Якщо у вас нема профілю, розмістити матеріал можна буде лише анонімно. Зауважте, що ваша поштова адреса <b><i>ніколи</i></b> не публікуватиметься в нас на сайті.",
+    24 => 'Ваш пароль надішлеться на подану вами поштову адресу.',
+    25 => 'Ви забули свій пароль?',
+    26 => 'Впишіть <em>або</em> своє реєстраційне ім\'я, <em>або</em> або використану при реєстрації поштову адресу, після чого клацніть &laquo;Надіслати пароль&raquo;. Інструкції щодо встановлення нового паролю будуть надіслані на адресу в нашій базі даних.',
+    27 => 'Зареєструйте мене!',
+    28 => 'Надіслати пароль',
+    29 => 'розреєструвався з',
+    30 => 'зареєструвався з',
+    31 => 'Обрана вами функція вимагає від вас реєстрації',
+    32 => 'Підпис',
+    33 => 'Ніколи не показується прилюдно',
+    34 => 'Це ваше справжнє ім\'я',
+    35 => 'Введіть пароль для його зміни',
+    36 => 'Починається з http://',
+    37 => 'Долучується до ваших коментарів',
+    38 => 'Усе це &mdash; про вас! Кожен може це прочитати',
+    39 => 'Ваш публічний ключ PGP для розповсюдження',
+    40 => 'Немає значків для теми',
+    41 => 'Бажаю бути наглядачем',
+    42 => 'Формат дати',
+    43 => 'Максимальна кількість статей',
+    44 => 'Без віконець',
+    45 => 'Вподобання щодо показу для',
+    46 => 'Вилучені елементи для',
+    47 => 'Налаштування віконця новин для',
+    48 => 'Теми',
+    49 => 'Без значків біля статей',
+    50 => 'Зніміть позначку, якщо це вас не цікавить',
+    51 => 'Лише статті-новини',
+    52 => 'Усталено:',
+    53 => 'Отримувати статті дня щовечора',
+    54 => 'Позначте теми й авторів, котрих не бажаєте бачити.',
+    55 => 'Якщо ви не залишите позначок, це означатиме усталений вибір віконець. Почавши вибирати віконця, пам\'ятайте встановити всі, які бажаєте, бо усталений вибір знехтується. Усталені елементи показано погрубшеним шрифтом.',
+    56 => 'Автори',
+    57 => 'Режим показу',
+    58 => 'Спосіб упорядкування',
+    59 => 'Обмеження коментарів',
+    60 => 'Як вам показувати ваші коментарі?',
+    61 => 'Спершу найновіші чи найстаріші?',
+    62 => 'Початково 100',
+    63 => "Ваш пароль вислано вам поштою, за хвилю він повинен прийти. Будь ласка, виконайте описані в листі кроки; дякуємо за використання {$_CONF['site_name']}!",
+    64 => 'Вподобання щодо коментарів для',
+    65 => 'Спробуйте зареєструватись іще раз',
+    66 => "Ви могли помились при вписуванні реєстраційних даних. Спробуйте ввійти ще раз, нижче. Чи ви <a href=\"{$_CONF['site_url']}/users.php?mode=new\">новий користувач</a>?",
+    67 => 'Учасник від',
+    68 => 'Пам\'ятати мене',
+    69 => 'Як довго нам пам\'ятати вас після входу до системи?',
+    70 => "Облаштувати зовнішній вигляд і вміст {$_CONF['site_name']}",
+    71 => "Чудовою властивістю сайту {$_CONF['site_name']} є те, що ви можете налаштувати для себе отримуваний вміст і повністю змінити загальний макет сайту. Аби цим скористатись, ви спершу повинні <a href=\"{$_CONF['site_url']}/users.php?mode=new\">записатись</a> на {$_CONF['site_name']}. Ви вже учасник? Скористайтесь формою ліворуч і ввійдіть на сайт!",
+    72 => 'Тема',
+    73 => 'Мова',
+    74 => 'Змініть зовнішність сайту!',
+    75 => 'Надсилані теми для',
+    76 => 'Вибравши тему з нижчеподаного списку, ви отримуватимете всі нові статті на цю тему під кінець кожного дня. Оберіть лише теми, котрі вас цікавлять!',
+    77 => 'Світлина',
+    78 => 'Додайте власну світлину!',
+    79 => 'Позначте тут, щоб видалити поточну світлину',
+    80 => 'Увійти',
+    81 => 'Надіслати листа',
+    82 => 'Останні 10 статей користувача',
+    83 => 'Статистика публікацій користувача',
+    84 => 'Всього статей:',
+    85 => 'Всього коментарів:',
+    86 => 'Знайти все, надіслане',
+    87 => 'Ваше реєстраційне ім\'я',
+    88 => "Хтось (можливо, ви) замовив новий пароль для вашого профілю \"%s\" на {$_CONF['site_name']}, <{$_CONF['site_url']}>.\n\nЯкщо ви справді бажаєте, щоб ця дія відбулась, будь ласка, клацніть ось це посилання:\n\n",
+    89 => "Якщо ви не хочете виконання цієї дії, просто знехтуйте це повідомлення й запит також буде знехтувано (ваш пароль залишиться без змін).\n\n",
+    90 => 'Нижче ви можете ввести новий пароль для свого профілю. Зауважте: ваш пароль залишиться в силі, доки ви не надішлете цю форму.',
+    91 => 'Встановити новий пароль',
+    92 => 'Впишіть новий пароль',
+    93 => 'Ваш останній запит на новий пароль відбувся %d секунд тому. Цей сайт вимагає щонайменше %d секунд між такими запитами.',
+    94 => 'Вилучити рахунок "%s"',
+    95 => 'Клацніть кнопку "вилучити рахунок", що нижче, для усунення вашого рахунку з нашої бази даних. Зауважте, що всі статті та коментарі, залишені вами під цим рахунком, <strong>не видалятимуться</strong>, а показуватимуться як надіслані анонімно.',
+    96 => 'вилучити профіль',
+    97 => 'Підтвердіть вилучення профілю',
+    98 => 'Ви впевнені, що бажаєте вилучити свій профіль? Зробивши це, ви не зможете ввійти на цей сайт знову (хіба що створите новий профіль). Якщо ви певні щодо цього, клацніть кнопку &laquo;вилучити профіль&raquo; ще раз на формі, що нижче.',
+    99 => 'Налаштування приватності для',
+    100 => 'Пошта від адміністраторів',
+    101 => 'Дозволити пошту від адміністраторів сайту',
+    102 => 'Пошта від користувачів',
+    103 => 'Дозволити пошту від інших користувачів',
+    104 => 'Показувати ваш стан на лінії',
+    105 => 'Показувати у віконці &laquo;хто на лінії&raquo;',
+    106 => 'Місцеперебування',
+    107 => 'Показувати у вашому публічному профілі',
+    108 => 'Confirm new password',
+    109 => 'Enter the New password again here',
+    110 => 'Current Password',
+    111 => 'Please enter your Current password',
+    112 => 'You have exceeded the number of allowed login attempts.  Please try again later.',
+    113 => 'Login Attempt Failed',
+    114 => 'Account Disabled',
+    115 => 'Your account has been disabled, you may not login. Please contact an Administrator.',
+    116 => 'Account Awaiting Activation',
+    117 => 'Your account is currently awaiting activation by an administrator. You will not be able to login until your account has been approved.',
+    118 => "Your {$_CONF['site_name']} account has now been activated by an administrator. You may now login to the site at the url below using your username (<username>) and password as previously emailed to you.",
+    119 => 'If you have forgotten your password, you may request a new one at this url:',
+    120 => 'Account Activated',
+    121 => 'Service',
+    122 => 'Sorry, new user registration is disabled',
+    123 => "Are you a <a href=\"{$_CONF['site_url']}/users.php?mode=new\">new user</a>?"
+);
+
+###############################################################################
+# index.php
+
+$LANG05 = array(
+    1 => 'Нема новин до показу',
+    2 => 'Нема новин до показу. Можливо, на цю тему немає новин, або ж ваші вподобання занадто обмежувальні',
+    3 => ' для теми &laquo;%s&raquo;',
+    4 => 'Вибрана сьогодні стаття',
+    5 => 'Наступна',
+    6 => 'Попередня',
+    7 => 'Перша',
+    8 => 'Остання'
+);
+
+###############################################################################
+# profiles.php
+
+$LANG08 = array(
+    1 => 'При відправленні повідомлення сталась помилка. Будь ласка, спробуйте ще раз.',
+    2 => 'Повідомлення успішно відправлене.',
+    3 => 'Будь ласка, впевніться, що використовуєте дійсну адресу електронної пошти в полі &laquo;Відповідати на&raquo;.',
+    4 => 'Будь ласка, заповніть поля &laquo;Ваше ім\'я&raquo;, &laquo;Відповідати на&raquo;, &laquo;Тема&raquo; й &laquo;Повідомлення&raquo;',
+    5 => 'Помилка: Нема такого користувача.',
+    6 => 'Сталась помилка.',
+    7 => 'Профіль користувача для',
+    8 => 'Реєстраційне ім\'я',
+    9 => 'URL користувача',
+    10 => 'Надсилати пошту на',
+    11 => 'Ваше ім\'я:',
+    12 => 'Відповідати на:',
+    13 => 'Тема:',
+    14 => 'Повідомлення:',
+    15 => 'HTML не дозволено.',
+    16 => 'Відіслати повідомлення',
+    17 => 'Надіслати другові цю статтю листом',
+    18 => 'На ім\'я',
+    19 => 'На адресу електронної пошти',
+    20 => 'Від імені',
+    21 => 'Від адреси електронної пошти',
+    22 => 'Всі поля є обов\'язковими до заповнення',
+    23 => "Цього листа вам надіслано від %s о %s, бо він(вона) вважає, що вас зацікавить стаття {$_CONF['site_url']}. Це не є спамом; залучені адреси електронної пошти не занесено в список і не збережено для подальшого вжитку.",
+    24 => 'Коментуйте цю статтю на',
+    25 => 'Для використання цієї функції ви повинні зареєструватись у системі. Примусова реєстрація допомагає нам запобігти неправильному використанню системи.',
+    26 => 'Ця форма дозволить вам надіслати листа вибраному користувачеві. Всі поля є обов\'язковими.',
+    27 => 'Коротке повідомлення',
+    28 => '%s написав(-ла): ',
+    29 => "Це &mdash; щоденний дайджест сайту {$_CONF['site_name']} для ",
+    30 => ' Щоденна розсилка новин ',
+    31 => 'Назва',
+    32 => 'Дата',
+    33 => 'Читайте повний текст статті на',
+    34 => 'Кінець повідомлення',
+    35 => 'Вибачте, цьому користувачеві до вподоби не отримувати жодних листів.'
+);
+
+###############################################################################
+# search.php
+
+$LANG09 = array(
+    1 => 'Складний пошук',
+    2 => 'Ключові слова',
+    3 => 'Тема',
+    4 => 'Всі',
+    5 => 'Тип',
+    6 => 'Статті',
+    7 => 'Коментарі',
+    8 => 'Автори',
+    9 => 'Всі',
+    10 => 'Шукати',
+    11 => 'Шукати серед знайденого',
+    12 => 'співпадань',
+    13 => 'Результат пошуку: без співпадань',
+    14 => 'Не знайдено співпадань для вашого пошуку',
+    15 => 'Будь ласка, спробуйте ще раз.',
+    16 => 'Назва',
+    17 => 'Дата',
+    18 => 'Автор',
+    19 => "Перешукати всю базу даних поточних і старих статей-новин на сайті {$_CONF['site_name']}",
+    20 => 'Дата з',
+    21 => 'по',
+    22 => '(Вигляд дати РРРР-ММ-ДД)',
+    23 => 'Перегляди',
+    24 => 'Знайдено %d матеріалів',
+    25 => 'Ви шукали',
+    26 => 'матеріалів ',
+    27 => 'секунд',
+    28 => 'Для вашого пошуку не знайдено ні підхожих статей, ні коментарів',
+    29 => 'Результати пошуку в статтях і коментарях',
+    30 => 'Вашим умовам пошуку не відповідає жодне посилання',
+    31 => 'Ця втулка не повернула жодного результату',
+    32 => 'Подія',
+    33 => 'URL',
+    34 => 'Місцезнаходження',
+    35 => 'Цілий день',
+    36 => 'Вашим умовам пошуку не віповідає жодна подія',
+    37 => 'Результати пошуку серед подій',
+    38 => 'Результати пошуку серед посилань',
+    39 => 'Посилання',
+    40 => 'Події',
+    41 => 'Рядок вашого запиту повинен містити щонайменше 3 символи.',
+    42 => 'Будь ласка, використовуйте дати у вигляді РРРР-ММ-ДД (рік-місяць-день).',
+    43 => 'точна фраза',
+    44 => 'всі ці слова',
+    45 => 'будь-які з цих слів',
+    46 => 'Наступні',
+    47 => 'Попередні',
+    48 => 'Автор',
+    49 => 'Дата',
+    50 => 'Відвідувань',
+    51 => 'Посилання',
+    52 => 'Місцезнаходження',
+    53 => 'Результати для статей',
+    54 => 'Результати для коментарів',
+    55 => 'фразу',
+    56 => 'І',
+    57 => 'АБО',
+    58 => 'More results &gt;&gt;',
+    59 => 'Results',
+    60 => 'per page',
+    61 => 'Refine search'
+);
+
+###############################################################################
+# stats.php
+
+$LANG10 = array(
+    1 => 'Статистика сайту',
+    2 => 'Всього звертань до системи',
+    3 => 'Статей(Коментарів) у системі',
+    4 => 'Опитувань(Відповідей) у системі',
+    5 => 'Посилань(Клацань) у системі',
+    6 => 'Подій у системі',
+    7 => 'Десятка найпопулярніших статей',
+    8 => 'Назва статті',
+    9 => 'Переглядів',
+    10 => 'Схоже, на цьому сайті нема статей, або ж їх ніхто ніколи не читав.',
+    11 => 'Десятка найобговорюваніших статей',
+    12 => 'Коментарі',
+    13 => 'Схоже, на цьому сайті нема статей, або ж їх ніхто ніколи не коментував.',
+    14 => 'Десятка найпопулярніших опитувань',
+    15 => 'Запитання',
+    16 => 'Голосів',
+    17 => 'Схоже, на цьому сайті нема опитувань, або ж у них ніхто ніколи не голосував.',
+    18 => 'Десятка найпопулярніших посилань',
+    19 => 'Посилання',
+    20 => 'Відвідувань',
+    21 => 'Схоже, на цьому сайті нема посилань, або ж на жодній з них ніхто ніколи не клацав.',
+    22 => 'Десятка найчастіше відсиланих поштою статей',
+    23 => 'Листів',
+    24 => 'Схоже, на цьому сайті ніхто не надсилав поштою жодної статті.',
+    25 => 'Top Ten Trackback Commented Stories',
+    26 => 'No trackback comments found.',
+    27 => 'Number of active users',
+    28 => 'Top Ten Events',
+    29 => 'Event',
+    30 => 'Hits',
+    31 => 'It appears that there are no events on this site or no one has ever clicked on one.'
+);
+
+###############################################################################
+# article.php
+
+$LANG11 = array(
+    1 => 'Подібне',
+    2 => 'Надіслати статтю другові',
+    3 => 'Стаття у вигляді для друку',
+    4 => 'Налаштування статті',
+    5 => 'Стаття в форматі PDF'
+);
+
+###############################################################################
+# submit.php
+
+$LANG12 = array(
+    1 => 'Щоб розмістити %s, ви повинні зареєструватись як користувач.',
+    2 => 'Зареєструватись',
+    3 => 'Новий користувач',
+    4 => 'Розмістити подію',
+    5 => 'Розмістити посилання',
+    6 => 'Розмістити статтю',
+    7 => 'Вимагається реєстрація',
+    8 => 'Розмістити',
+    9 => 'Просимо при розміщенні матеріалів тут на сайті додержувати цих порад:<ul><li>Заповніть усі поля, вони обов\'язкові<li>Надавайте повні й точні відомості<li>Перевірте посилання двічі</ul>',
+    10 => 'Назва',
+    11 => 'Посилання',
+    12 => 'Дата початку',
+    13 => 'Дата закінчення',
+    14 => 'Місце',
+    15 => 'Опис',
+    16 => 'Вкажіть, якщо якась інша',
+    17 => 'Категорія',
+    18 => 'Інше',
+    19 => 'Спершу прочитайте',
+    20 => 'Помилка: бракує категорії',
+    21 => 'Вибравши &laquo;Інше&raquo;, вкажіть також і назву категорії',
+    22 => 'Помилка: бракує полів',
+    23 => 'Будь ласка, заповніть усі поля форми. Вони обов\'язкові.',
+    24 => 'Публікацію збережено',
+    25 => 'Вашу публікацію %s успішно збережено.',
+    26 => 'Обмеження швидкості',
+    27 => 'Реєстраційне ім\'я',
+    28 => 'Тема',
+    29 => 'Стаття',
+    30 => 'Ви востаннє публікувались ',
+    31 => " секунд(и) тому. Цей сайт вимагає щонайменше {$_CONF['speedlimit']} секунд між публікаціями.",
+    32 => 'Попередній перегляд',
+    33 => 'Попередній перегляд статті',
+    34 => 'Розреєструватись',
+    35 => 'Розмітку HTML не дозволено',
+    36 => 'Режим відправлення',
+    37 => "Публікація події на сайті {$_CONF['site_name']} розмістить вашу подію на головному календарі, звідки користувачі зможуть додавати її до особистих календарів. Ця функція <b>НЕ</b> призначена зберігати ваші особисті події, як-от дні народження та річниці.<br><br>Після розміщення подію буде надіслано нашим адміністраторам, і після їхнього схвалення ваша подія з'явиться на головному календарі.",
+    38 => 'Додати подію до',
+    39 => 'головного календаря',
+    40 => 'особистого календаря',
+    41 => 'Час завершення',
+    42 => 'Час початку',
+    43 => 'Подія цілого дня',
+    44 => 'Рядок адреси 1',
+    45 => 'Рядок адреси 2',
+    46 => 'Місто',
+    47 => 'Штат',
+    48 => 'Поштовий індекс',
+    49 => 'Тип події',
+    50 => 'Редагувати типи подій',
+    51 => 'Місце',
+    52 => 'Викреслити',
+    53 => 'Створити рахунок'
+);
+
+###############################################################################
+# ADMIN PHRASES - These are file phrases used in admin scripts
+###############################################################################
+
+###############################################################################
+# admin/auth.inc.php
+
+$LANG20 = array(
+    1 => 'Вимагається автентифікація',
+    2 => 'Відмовлено! Невірна реєстраційна інформація',
+    3 => 'Невірний пароль для користувача',
+    4 => 'Реєстраційне ім\'я:',
+    5 => 'Пароль:',
+    6 => 'Увесь доступ до адміністративних частин цього сайту протоколюється і наглядається.<br>Ця сторінка призначена лише для допущеного персоналу.',
+    7 => 'увійти'
+);
+
+###############################################################################
+# admin/block.php
+
+$LANG21 = array(
+    1 => 'Бракує адміністративних прав',
+    2 => 'Ви не маєте достатніх прав для редагування цього блоку.',
+    3 => 'Редактор блоків',
+    4 => 'При читанні цієї трансляції виник клопіт (за подробицями дивіться error.log).',
+    5 => 'Назва блоку',
+    6 => 'Тема',
+    7 => 'Всі',
+    8 => 'Рівень безпеки блоку',
+    9 => 'Порядок блоку',
+    10 => 'Тип блоку',
+    11 => 'Блок порталу',
+    12 => 'Звичайний блок',
+    13 => 'Налаштування портального блоку',
+    14 => 'URL для RSS',
+    15 => 'Останнє поновлення RSS',
+    16 => 'Налаштування для звичайного блоку',
+    17 => 'Вміст блоку',
+    18 => 'Будь ласка, заповніть поля для назви та вмісту блоку',
+    19 => 'Керування блоками',
+    20 => 'Назва блоку',
+    21 => 'Рівень безпеки блоку',
+    22 => 'Тип блоку',
+    23 => 'Порядок блоку',
+    24 => 'Тема блоку',
+    25 => 'Аби змінити чи вилучити блок, клацніть на ньому нижче. Щоб створити новий блок, клацніть &laquo;Новий блок&raquo; вище.',
+    26 => 'Блок макету',
+    27 => 'Блок PHP',
+    28 => 'Налаштування блоку PHP',
+    29 => 'Функція блоку',
+    30 => 'Якщо ви б хотіли використати код PHP в одному зі своїх блоків, введіть назву функції вище. Назва вашої функції повинна починатися з "phpblock_" (наприклад, phpblock_getweather).  Якщо функція не матиме такого префіксу, вона не буде викликана. Це зроблено, щоб стримати людей, котрі могли б уламатись до вашої інсталяції Geeklog, від виклику довільних функцій, що зашкодили б вашій системі.  Упевніться, що після назви функції НЕ йдуть порожні дужки "()". Нарешті, радиться, щоб ви розмістили весь свій код блоку PHP в /path/to/geeklog/system/lib-custom.php. Тоді цей код залишиться навіть коли ви поновите Geeklog до новішої версії.',
+    31 => 'Помилка в блоці PHP. Функція %s не існує.',
+    32 => 'Помилка &mdash; брак поля (полів)',
+    33 => 'Ви повинні ввести URL до файлу RSS для портальних блоків',
+    34 => 'Ви повинні ввести назву й функцію для блоків PHP',
+    35 => 'Ви повинні ввести назву та вміст для звичайних блоків',
+    36 => 'Ви повинні ввести вміст для макетних блоків',
+    37 => 'Недопустима назва функції для блоку PHP',
+    38 => 'Функції для блоків PHP повинні мати префікс &laquo;phpblock_&raquo; (наприклад, phpblock_getweather). Префікс &laquo;phpblock_&raquo; вимагається з міркувань безпеки, щоб запобігти виконанню довільного коду.',
+    39 => 'Боковий',
+    40 => 'Ліворуч',
+    41 => 'Праворуч',
+    42 => 'Необхідно ввести назву й порядок блоку для усталених блоків Geeklog.',
+    43 => 'Лише домашня сторінка',
+    44 => 'В доступі відмовлено',
+    45 => "Ви намагаєтесь доступитись до блоку, на який не маєте прав. Цю спробу запротокольовано. Будь ласка, <a href=\"{$_CONF['site_admin_url']}/block.php\">поверніться на сторінку адміністрування блоків</a>.",
+    46 => 'Новий блок',
+    47 => 'Домівка адміністратора',
+    48 => 'Назва блоку',
+    49 => ' (повинен бути без пробілів і мати унікальну назву)',
+    50 => 'URL файлу довідки',
+    51 => 'включіть http://',
+    52 => 'Якщо залишити це поле порожнім, значок довідки для цього блоку не показуватиметься',
+    53 => 'Увімкнено',
+    54 => 'зберегти',
+    55 => 'скасувати',
+    56 => 'вилучити',
+    57 => 'Перемістити блок донизу',
+    58 => 'Перемістити блок догори',
+    59 => 'Перемістити блок праворуч',
+    60 => 'Перемістити блок ліворуч',
+    61 => 'No Title',
+    62 => 'Article Limit',
+    63 => 'Bad Block Title',
+    64 => 'Your Title must not be empty and cannot contain HTML!',
+    65 => 'Order'
+);
+
+###############################################################################
+# admin/event.php
+
+$LANG22 = array(
+    1 => 'Редактор подій',
+    2 => 'Помилка',
+    3 => 'Назва події',
+    4 => 'URL події',
+    5 => 'Дата початку події',
+    6 => 'Дата кінця події',
+    7 => 'Місце події',
+    8 => 'Опис події',
+    9 => '(включіть http://)',
+    10 => 'Ви повинні подати дати/час, назву події й її опис',
+    11 => 'Менеджер подій',
+    12 => 'Для зміни чи вилучення події клацніть на ній нижче. Для створення нової події клацніть &laquo;нову подію&raquo; вгорі. Клацніть [C] для створення копії наявної вже події.',
+    13 => 'Назва події',
+    14 => 'Дата початку',
+    15 => 'Дата кінця',
+    16 => 'В доступі відмовлено',
+    17 => "Ви намагаєтесь доступитись до події, на котру не маєте прав. Цю спробу запротокольовано. Будь ласка, <a href=\"{$_CONF['site_admin_url']}/event.php\">поверніться на стоорінку адміністрування подій</a>.",
+    18 => 'Нова подія',
+    19 => 'Домівка адміністратора',
+    20 => 'зберегти',
+    21 => 'скасувати',
+    22 => 'вилучити',
+    23 => 'Неправильна початкова дата.',
+    24 => 'Невірна кінцева дата.',
+    25 => 'Кінцева дата настає перед початковою.'
+);
+
+###############################################################################
+# admin/story.php
+
+$LANG24 = array(
+    1 => 'Попередні статті',
+    2 => 'Наступні статті',
+    3 => 'Режим',
+    4 => 'Режим допису',
+    5 => 'Редактор статей',
+    6 => 'В системі немає статей',
+    7 => 'Автор',
+    8 => 'зберегти',
+    9 => 'попередній перегляд',
+    10 => 'скасувати',
+    11 => 'вилучити',
+    12 => 'Ідентифікатор',
+    13 => 'Назва',
+    14 => 'Тема',
+    15 => 'Дата',
+    16 => 'Текст вступу',
+    17 => 'Основний текст',
+    18 => 'Звертань',
+    19 => 'Коментарів',
+    20 => 'Ping',
+    21 => 'Send Ping',
+    22 => 'Перелік статей',
+    23 => 'Щоб виправити чи вилучити статтю, клацніть на номері цієї статті нижче. Щоб переглянути статтю, клацніть назву бажаної статті. Для створення нової статті клацніть &laquo;Нова стаття&raquo; вище.',
+    24 => 'Обраний вами ідентифікатор для статті вже використовується. Будь ласка, використайте інший.',
+    25 => 'Error when saving story',
+    26 => 'Попередній перегляд статті',
+    27 => 'If you use [unscaledX] instead of [imageX], the image will be inserted at its original dimensions.',
+    28 => '<p><b>PREVIEWING</b>: Previewing a story with images attached is best done by saving the article as a draft INSTEAD OF hitting the preview button.  Use the preview button only when images are not attached.',
+    29 => 'Trackbacks',
+    30 => 'Помилка при завантаженні файлу',
+    31 => 'Будь ласка, заповніть поля &laquo;Назва&raquo; та &laquo;Текст вступу&raquo;',
+    32 => 'Вибрана',
+    33 => 'Вибраною може бути лише одна стаття',
+    34 => 'Чернетка',
+    35 => 'Так',
+    36 => 'Ні',
+    37 => 'Більше від',
+    38 => 'Більше з',
+    39 => 'Пошта',
+    40 => 'В доступі відмовлено',
+    41 => "Ви намагаєтесь отримати доступ до статті, на яку не маєте прав. Цю спробу запротокольовано. Нижче ви можете прочитати цю статтю в режимі тільки для перегляду. Будь ласка, по закінченні <a href=\"{$_CONF['site_admin_url']}/story.php\">поверніться на сторінку адміністрування статей</a>.",
+    42 => "Ви намагаєтесь отримати доступ до статті, на яку не маєте прав. Цю спробу запротокольовано. Будь ласка, <a href=\"{$_CONF['site_admin_url']}/story.php\">поверніться на сторінку адміністрування статей</a>.",
+    43 => 'Нова стаття',
+    44 => 'Домівка адміністратора',
+    45 => 'Доступ',
+    46 => '<b>УВАГА:</b> якщо ви зміните цю дату так, що вона буде в майбутньому, стаття не опублікується до настання цієї дати. Це також означає, що цю статтю не буде включено у вашу трансляцію заголовків RSS, а також вона буде знехтувана на сторінках пошуку та статистики.',
+    47 => 'Зображення',
+    48 => 'зображення',
+    49 => 'праворуч',
+    50 => 'ліворуч',
+    51 => 'Щоб додати одне з зображень, котрі ви долучаєте до цієї статті, вам необхідно вставити особливим чином розмічений текст. Таким текстом є [imageX], [imageX_right] або [imageX_left], де X &mdash; це номер долученого зображення. УВАГА: ви повинні використати долучувані зображення. Інакше ви не зможете зберегти свою статтю.<br><p><b>ПОПЕРЕДНІЙ ПЕРЕГЛЯД</b>: Попередній перегляд статті з долученими зображеннями найкраще здійснювати, зберігаючи статтю як чернетку, А НЕ натискаючи кнопку &laquo;попередній перегляд&raquo;. Використовуйте цю кнопку лише тоді, коли долучених зображень немає.',
+    52 => 'Вилучити',
+    53 => 'не використано. Ви повинні включити це зображення у вступ чи основний текст, перш ніж зможете зберегти цю статтю',
+    54 => 'Невикористані долучені зображення',
+    55 => 'При зберіганні вашої статті стались наступні помилки. Будь ласка, виправте їх перед зберіганням',
+    56 => 'Показувати значок теми',
+    57 => 'Переглянути зображення в натуральну величину',
+    58 => 'Керування статтями',
+    59 => 'Опція',
+    60 => 'Увімкнено',
+    61 => 'Автоархівування',
+    62 => 'Автовилучення',
+    63 => '',
+    64 => '',
+    65 => '',
+    66 => '',
+    67 => 'Expand the Content Edit Area size',
+    68 => 'Reduce the Content Edit Area size',
+    69 => 'Publish Story Date',
+    70 => 'Toolbar Selection',
+    71 => 'Basic Toolbar',
+    72 => 'Common Toolbar',
+    73 => 'Advanced Toolbar',
+    74 => 'Advanced II Toolbar',
+    75 => 'Full Featured',
+    76 => 'Publish Options',
+    77 => 'Javascript needs to be enabled for Advanced Editor. Option can be disabled in the main site config.php',
+    78 => 'Click <a href="%s/story.php?mode=edit&amp;sid=%s&amp;editopt=default">here</a> to use default editor',
+    79 => 'Preview',
+    80 => 'Editor',
+    81 => 'Publish Options',
+    82 => 'Images',
+    83 => 'Archive Options',
+    84 => 'Permissions',
+    85 => 'Show All'
+);
+
+###############################################################################
+# admin/topic.php
+
+$LANG27 = array(
+    1 => 'Редактор тем',
+    2 => 'Ідентифікатор теми',
+    3 => 'Назва теми',
+    4 => 'Зображення теми',
+    5 => '(не використовуйте пробілів)',
+    6 => 'Вилучення теми видалить також усі пов\'язані з нею статті й блоки',
+    7 => 'Будь ласка, заповніть поля &laquo;Ідентифікатор теми&raquo; й &laquo;Назва теми&raquo;',
+    8 => 'Менеджер тем',
+    9 => 'Аби змінити чи вилучити тему, клацніть на ній. Щоб створити нову тему, клацніть кнопку &laquo;нова тема&raquo;, що ліворуч. В дужках ви знайдете свій рівень доступу до кожної теми. Зірочка (*) позначає усталену тему.',
+    10 => 'Порядок сортування',
+    11 => 'Статей/Сторінка',
+    12 => 'В доступі відмовлено',
+    13 => "Ви намагаєтесь отримати доступ до теми, на яку не маєте прав. Цю спробу запротокольовано. Будь ласка, <a href=\"{$_CONF['site_admin_url']}/topic.php\">поверніться на сторінку адміністрування тем</a>.",
+    14 => 'Спосіб сортування',
+    15 => 'абетковий',
+    16 => 'усталено',
+    17 => 'Нова тема',
+    18 => 'Домівка адміністратора',
+    19 => 'зберегти',
+    20 => 'скасувати',
+    21 => 'вилучити',
+    22 => 'Усталено',
+    23 => 'зробити цю тему усталеною для новонадісланих статей',
+    24 => '(*)',
+    25 => 'Архівна тема',
+    26 => 'зробити цю тему усталеною для архівних статей. Дозволено лише одну таку тему.',
+    27 => 'Or Upload Topic Icon',
+    28 => 'Maximum',
+    29 => 'File Upload Errors'
+);
+
+###############################################################################
+# admin/user.php
+
+$LANG28 = array(
+    1 => 'Редактор користувачів',
+    2 => 'Ідентифікатор користувача',
+    3 => 'Реєстраційне ім\'я користувача',
+    4 => 'Повне ім\'я',
+    5 => 'Пароль',
+    6 => 'Рівень безпеки',
+    7 => 'Електронна адреса',
+    8 => 'Домівка',
+    9 => '(не використовуйте пробілів)',
+    10 => 'Будь ласка, заповніть поля &laquo;Реєстраційне ім\'я користувача&raquo; й &laquo;Електронна адреса&raquo;',
+    11 => 'Менеджер користувачів',
+    12 => 'Аби змінити чи вилучити користувача, клацніть на ньому нижче. Для створення нового користувача клацніть кнопку &laquo;новий користувач&raquo; ліворуч. Ви можете здійснювати простий пошук, вводячи частини реєстраційного імені, повного імені й електронної адреси (наприклад, *son* або *.edu) в нижчеподану форму.',
+    13 => 'РівБезп',
+    14 => 'Дата реєстрації',
+    15 => 'Новий користувач',
+    16 => 'Домівка адміністратора',
+    17 => 'changepw',
+    18 => 'скасувати',
+    19 => 'вилучити',
+    20 => 'зберегти',
+    21 => 'Ім\'я користувача, котре ви намагалися зберегти, вже існує.',
+    22 => 'Помилка',
+    23 => 'Пакетне додавання',
+    24 => 'Пакетне імпортування користувачів',
+    25 => 'Ві можете заімпортувати в Geeklog пакет користувачів. Файл для імпорту мусить бути текстовим файлом з полями, розділеними табуляціями. Ось поля та їх порядок: повне ім\'я, реєстраційне ім\'я, електронна адреса. Кожному імпортованому користувачеві буде надіслано випадково підібраний пароль. Дані про кожного користувача повинні міститися в окремому рядку. Невиконання цих вказівок може спричинити клопоти, котрі вимагатимуть ручного втручання, тож перевірте добре всі поля!',
+    26 => 'Пошук',
+    27 => 'Обмежити результати',
+    28 => 'Відмітьте тут, якщо бажаєте стерти зображення',
+    29 => 'Шлях',
+    30 => 'Імпорт',
+    31 => 'Нові користувачі',
+    32 => 'Обробку завершено. Імпортовано %d користувачів, сталося %d невдач',
+    33 => 'надіслати',
+    34 => 'Помилка: ви повинні вказати файл для завантаження.',
+    35 => 'Остання реєстрація',
+    36 => '(ніколи)',
+    37 => 'UID',
+    38 => 'Group Listing',
+    39 => 'Password (again)',
+    40 => 'Registration Date',
+    41 => 'Last login Date',
+    42 => 'Banned',
+    43 => 'Awaiting Activation',
+    44 => 'Awaiting Authorization',
+    45 => 'Active',
+    46 => 'User Status',
+    47 => 'Edit'
+);
+
+###############################################################################
+# admin/moderation.php
+
+$LANG29 = array(
+    1 => 'Схвалити',
+    2 => 'Видалити',
+    3 => 'Редагувати',
+    4 => 'Профіль',
+    10 => 'Назва',
+    11 => 'Дата початку',
+    12 => 'URL',
+    13 => 'Категорія',
+    14 => 'Дата',
+    15 => 'Тема',
+    16 => 'Реєстраційне ім\'я',
+    17 => 'Повне ім\'я',
+    18 => 'Email',
+    34 => 'Command and Control',
+    35 => 'Надіслані статті',
+    36 => 'Надіслані посилання',
+    37 => 'Надіслані події',
+    38 => 'Надіслати',
+    39 => 'Наразі немає матеріалів для модерації',
+    40 => 'Користувацькі публікації'
+);
+
+###############################################################################
+# calendar.php
+
+$LANG30 = array(
+    1 => 'Неділя',
+    2 => 'Понеділок',
+    3 => 'Вівторок',
+    4 => 'Середа',
+    5 => 'Четвер',
+    6 => 'П\'ятниця',
+    7 => 'Субота',
+    8 => 'Додати подію',
+    9 => '%s Event',
+    10 => 'Події для',
+    11 => 'Головний календар',
+    12 => 'Мій календар',
+    13 => 'Січень',
+    14 => 'Лютий',
+    15 => 'Березень',
+    16 => 'Квітень',
+    17 => 'Травень',
+    18 => 'Червень',
+    19 => 'Липень',
+    20 => 'Серпень',
+    21 => 'Вересень',
+    22 => 'Жовтень',
+    23 => 'Листопад',
+    24 => 'Грудень',
+    25 => 'Повернутись до ',
+    26 => 'Весь день',
+    27 => 'Тиждень',
+    28 => 'Особистий календар для',
+    29 => 'Публічний календар',
+    30 => 'витерти подію',
+    31 => 'Додати',
+    32 => 'Подія',
+    33 => 'Дата',
+    34 => 'Час',
+    35 => 'Швидке додавання',
+    36 => 'Надіслати',
+    37 => 'Пробачте, функція особистих календарів не дозволена на цьому сайті',
+    38 => 'Редактор особистих подій',
+    39 => 'День',
+    40 => 'Тиждень',
+    41 => 'Місяць'
+);
+
+###############################################################################
+# admin/mail.php
+
+$LANG31 = array(
+    1 => "Поштовий засіб {$_CONF['site_name']}",
+    2 => 'Від',
+    3 => 'Відповідати на',
+    4 => 'Тема',
+    5 => 'Текст',
+    6 => 'Кому надіслати:',
+    7 => 'Всім користувачам',
+    8 => 'Admin',
+    9 => 'Налаштування',
+    10 => 'HTML',
+    11 => 'Термінове повідомлення!',
+    12 => 'Надіслати',
+    13 => 'Скинути',
+    14 => 'Знехтувати користувацькими налаштуваннями',
+    15 => 'Помилка при відсиланні до: ',
+    16 => 'Успішно відіслано повідомлення до: ',
+    17 => "<a href={$_CONF['site_admin_url']}/mail.php>Надіслати ще повідомлення</a>",
+    18 => 'До',
+    19 => 'УВАГА: якщо ви бажаєте надіслати повідомлення всім учасникам, виберіть зі списку групу &laquo;Зареєстровані користувачі&raquo;.',
+    20 => "Успішно послано <successcount> повідомлення, а <failcount> повідомлень не вдалось надіслати. \n	Якщо вам потрібні подробиці, ви можете переглянути їх про кожне повідомлення нижче.  \n	Або ж можна <a href=\"{$_CONF['site_admin_url']}/mail.php\">Надіслати ще повідомлення</a> або <a href=\"{$_CONF['site_admin_url']}/moderation.php\">повернутись на адміністраторську сторінку</a>.",
+    21 => 'Невдач',
+    22 => 'Успішних операцій',
+    23 => 'Нема невдач',
+    24 => 'Нема успішних операцій',
+    25 => '-- Виберіть групу --',
+    26 => 'Заповніть усі поля форми й виберіть групу користувачів зі списку.'
+);
+
+###############################################################################
+# admin/plugins.php
+
+$LANG32 = array(
+    1 => 'Встановлення втулок може завдати шкоди вашій інсталяції Geeklog і, можливо, вашій системі. Важливо, щоб ви встановлювали лише втулки, звантажені з <a href="http://www.geeklog.net">Домівки Geeklog</a>, оскільки ми ретельно перевіряємо всі надіслані на наш сайт втулки на цілому ряді операційних систем. Важливо, щоб ви розуміли, що процес встановення втулки вимагатиме виконання кількох команд роботи з файловою системою, що може призвести до клопотів з безпекою, особливо ж, якщо ви використовуєте втулки зі сторонніх сайтів. Навіть після цієї остороги, ми не ґарантуємо успіху будь-якого встановлення, ані не відповідаємо за шкоду, спричинену встановленням втулки для Geeklog. Іншими словами, встановлюйте на власний страх і ризик. Для обережних, керівництво зі встановлення втулки власноруч постачається з кожною втулкою.',
+    2 => 'Юридичне повідомлення встановлюваної втулки',
+    3 => 'Форма встановлення втулки',
+    4 => 'Файл втулки',
+    5 => 'Перелік втулок',
+    6 => 'Увага: втулку вже встановлено!',
+    7 => 'Втулка, котру ви намагаєтесь встановити, вже існує. Будь ласка, вилучіть втулку перед її перевстановленням',
+    8 => 'Перевірку втулки на сумісність не пройдено',
+    9 => 'Ця втулка вимагає новішої версії Geeklog. Або поновіть свій примірник <a href="http://www.geeklog.net">Geeklog</a>, або ж отримайте новішу версію втулки.',
+    10 => '<br><b>В даний момент не встановлено жодної втулки.</b><br><br>',
+    11 => 'Аби виправити чи вилучити втулку, клацніть на її назві нижче. Це покаже подробиці втулки, в тому числі й сайт автора (авторів). Показуються і встановлена версія, й версія, отримана з коду втулки. Це допоможе вам дізнатись, чи варто поновлювати втулку. Для встановлення чи поновлення втулки зверніться до її супровідної документації.',
+    12 => 'plugineditor() не надано назви втулки',
+    13 => 'Редактор втулок',
+    14 => 'Нова втулка',
+    15 => 'Домівка адміністратора',
+    16 => 'Назва втулки',
+    17 => 'Версія втулки',
+    18 => 'Версія Geeklog',
+    19 => 'Увімкнена',
+    20 => 'Так',
+    21 => 'Ні',
+    22 => 'Встановити',
+    23 => 'Зберегти',
+    24 => 'Скасувати',
+    25 => 'Вилучити',
+    26 => 'Назва втулки',
+    27 => 'Домівка втулки',
+    28 => 'Встановлена версія',
+    29 => 'Версія Geeklog',
+    30 => 'Вилучити втулку?',
+    31 => 'Ви впевнені, що хочете вилучити цю втулку? Зробивши це, ви усунете також усі дані й структури даних, використовувані цією втулкою. Якщо ви впевнені, клацніть &laquo;вилучити&raquo; ще раз на формі, що нижче.',
+    32 => '<p><b>Помилка: невірний формат для мітки AutoLink</b></p>',
+    33 => 'Версія коду',
+    34 => 'Поновити',
+    35 => 'Edit',
+    36 => 'Code',
+    37 => 'Data',
+    38 => 'Update!'
+);
+
+###############################################################################
+# admin/syndication.php
+
+$LANG33 = array(
+    1 => 'створити трансляцію',
+    2 => 'зберегти',
+    3 => 'вилучити',
+    4 => 'скасувати',
+    10 => 'Трансляція вмісту',
+    11 => 'Нова трансляція',
+    12 => 'Домівка адміністратора',
+    13 => 'Щоб змінити чи вилучити трансляцію, клацніть на назві трансляції нижче. Для створення нової трансляції клацніть &laquo;Нова трансляція&raquo; вище.',
+    14 => 'Назва',
+    15 => 'Тип',
+    16 => 'Назва файлу',
+    17 => 'Формат',
+    18 => 'востаннє поновлено',
+    19 => 'Дозволено',
+    20 => 'Так',
+    21 => 'Ні',
+    22 => '<i>(нема трансляцій)</i>',
+    23 => 'всі статті',
+    24 => 'Редактор трансляцій',
+    25 => 'Назва трансляції',
+    26 => 'Обмеження',
+    27 => 'Довжина елементів',
+    28 => '(0 = без тексту, 1 = повний текст, все інше = обмежити до цієї кількості символів.)',
+    29 => 'Опис',
+    30 => 'Останнє поновлення',
+    31 => 'Набір символів',
+    32 => 'Мова',
+    33 => 'Зміст',
+    34 => 'Елементи',
+    35 => 'Години',
+    36 => 'Виберіть тип трансляції',
+    37 => 'У вас встановлена щонайменше одна втулка, що підтримує трансляцію вмісту. Нижче вам потрібно буде вибрати, чи ви бажаєте створити трансляцію Geeklog чи трансляцію однієї з втулок.',
+    38 => 'Помилка: не вказано трансляцію',
+    39 => 'Будь ласка, заповніть поля &laquo;Назва трансляції&raquo;, &laquo;Опис&raquo; і &laquo;Назва файлу&raquo;.',
+    40 => 'Будь ласка, вкажіть кількість годин або кількість елементів.',
+    41 => 'Посилання',
+    42 => 'Події',
+    43 => 'All',
+    44 => 'None',
+    45 => 'Header-link in topic',
+    46 => 'Limit Results',
+    47 => 'Search',
+    48 => 'Edit',
+    49 => 'Feed Logo',
+    50 => "Relative to site url ({$_CONF['site_url']})"
+);
+
+###############################################################################
+# confirmation and error messages
+
+$MESSAGE = array(
+    1 => "Ваш пароль відіслано поштою, й він ось-ось повинен до вас надійти. Будь ласка, виконайте вказівки в листі. Дякуємо вам за користування {$_CONF['site_name']}",
+    2 => "Дякуємо за надіслання вашої статті на {$_CONF['site_name']}. Її надіслано нашому штатові для схвалення. Якщо статтю схвалять, вона стане доступною для прочитання іншим.",
+    3 => "Дякуємо за надіслання посилання на {$_CONF['site_name']}. Його надіслано нашому штатові для схвалення. Якщо посилання схвалять, воно стане видимим у розділі <a href={$_CONF['site_url']}/links.php>посилань</a>.",
+    4 => "Дякуємо за надіслання події на {$_CONF['site_name']}. Її надіслано нашому штатові для схвалення. Якщо подію схвалять, її буде видно в розділі <a href={$_CONF['site_url']}/calendar.php>календаря</a>.",
+    5 => 'Інформацію про ваш рахунок успішно збережено.',
+    6 => 'Ваші вподобання успішно збережено.',
+    7 => 'Ваші вподобання щодо коментарів успішно збережено.',
+    8 => 'Ви успішно вийшли із системи.',
+    9 => 'Вашу статтю успішно збережено.',
+    10 => 'Статтю успішно вилучено.',
+    11 => 'Ваш блок успішно збережено.',
+    12 => 'Блок успішно вилучено.',
+    13 => 'Вашу тему успішно збережено.',
+    14 => 'Тему, всі її статті та блоки успішно вилучено.',
+    15 => 'Ваше посилання успішно збережено.',
+    16 => 'Посилання успішно вилучено.',
+    17 => 'Вашу подію успішно збережено.',
+    18 => 'Подію успішно вилучено.',
+    19 => 'Ваше опитування успішно збережено.',
+    20 => 'Опитування успішно вилучено.',
+    21 => 'Користувача успішно збережено.',
+    22 => 'Користувача успішно вилучено.',
+    23 => 'Помилка при спробі додати подію до вашого календаря. Не передано ідентифікатор події.',
+    24 => 'Подію збережено до вашого календаря',
+    25 => 'Ваш особистий календар не вдасться відкрити, поки ви не ввійдете в систему',
+    26 => 'Подію успішно усунено з вашого особистого календаря',
+    27 => 'Повідомлення успішно відіслано.',
+    28 => 'Втулку успішно збережено',
+    29 => 'Вибачте, особисті календарі на цьому сайті недозволені',
+    30 => 'В доступі відмовлено',
+    31 => 'Пробачте, у вас немає доступу до сторінки адміністрування статей. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    32 => 'Пробачте, у вас немає доступу до сторінки адміністрування тем. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    33 => 'Пробачте, у вас немає доступу до сторінки адміністрування блоків. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    34 => 'Пробачте, у вас немає доступу до сторінки адміністрування посилань. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    35 => 'Пробачте, у вас немає доступу до сторінки адміністрування подій. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    36 => 'Пробачте, у вас немає доступу до сторінки адміністрування опитувань. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    37 => 'Пробачте, у вас немає доступу до сторінки адміністрування користувачів. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    38 => 'Пробачте, у вас немає доступу до сторінки адміністрування втулок. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    39 => 'Пробачте, у вас немає доступу до сторінки адміністрування пошти. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    40 => 'Системне повідомлення',
+    41 => 'Пробачте, у вас немає доступу до word replacement page. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    42 => 'Ваше слово успішно збережене.',
+    43 => 'Слово успішно вилучене.',
+    44 => 'Втулку успішно встановлено!',
+    45 => 'Втулку успішно вилучено.',
+    46 => 'Пробачте, у вас немає доступу до засобу резервного копіювання бази даних. Зауважте, що всі спроби доступу до недозволених функцій протоколюються',
+    47 => 'Ця функціональність працює лише під *nix. Якщо вашою операційною системою є *nix, тоді кеш успішно очищено. Якщо у вас Windows, вам треба буде пошукати файли за назвою adodb_*.php і усунути їх самостійно.',
+    48 => "Дякуємо вам за ваше бажання стати учасником {$_CONF['site_name']}. Наша команда розгляне вашу заяву. В разі ухвали, ваш пароль буде надіслано вам на щойно вами вказану адресу електронної пошти.",
+    49 => 'Вашу групу успішно збережено.',
+    50 => 'Групу успішно вилучено.',
+    51 => 'Це реєстраційне ім\'я вже використовується. Будь ласка, оберіть якесь інше.',
+    52 => 'Надана вами електронна адреса, схоже, не є допустимою.',
+    53 => 'Ваш новий пароль прийнято. А тепер, будь ласка, використайте цей новий пароль для входу в систему.',
+    54 => 'Ваш запит на новий пароль застарів. Будь ласка, спробуйте ще раз, нижче.',
+    55 => 'Вам вислано електронного листа, який ось-ось має прийти. Будь ласка, виконайте вказівки в листі, щоб встановити новий пароль для вашого рахунку.',
+    56 => 'Надана електронна адреса вже використовується іншим рахунком.',
+    57 => 'Ваш рахунок успішно вилучено.',
+    58 => 'Вашу трансляцію успішно збережено.',
+    59 => 'Трансляцію успішно вилучено.',
+    60 => 'Втулку успішно поновлено',
+    61 => 'Втулка %s: Невідоме поле заміщення для повідомлення',
+    62 => 'The trackback comment has been deleted.',
+    63 => 'An error occurred when deleting the trackback comment.',
+    64 => 'Your trackback comment has been successfully sent.',
+    65 => 'Weblog directory service successfully saved.',
+    66 => 'The weblog directory service has been deleted.',
+    67 => 'The new password does not match the confirmation password!',
+    68 => 'You have to enter the correct current password.',
+    69 => 'Your account has been blocked!',
+    70 => 'Your account is awaiting administrator approval.',
+    71 => 'Your account has now been confirmed and is awaiting administrator approval.',
+    72 => 'An error occured while attempting to install the plugin. See error.log for details.',
+    73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.',
+    74 => 'The pingback has been successfully sent.',
+    75 => 'Trackbacks must be sent using a POST request.'
+);
+
+###############################################################################
+
+$LANG_ACCESS = array(
+    'access' => 'Доступ',
+    'ownerroot' => 'Власник/Root',
+    'group' => 'Група',
+    'readonly' => 'Лише читання',
+    'accessrights' => 'Права доступу',
+    'owner' => 'Власник',
+    'grantgrouplabel' => 'Надати вищеподаній групі права редагування',
+    'permmsg' => 'УВАГА: учасники &mdash; це всі зареєстровані користувачі сайту, а аноніми &mdash; це всі користувачі сайту, що не ввійшли до системи.',
+    'securitygroups' => 'Групи безпеки',
+    'editrootmsg' => "Хоча ви є адміністратором користувачів, ви не зможете редагувати користувача root, самі не бувши користувачем root. Ви можете редагувати всіх користувачів, окрім користувачів root. Зауважте, що всі спроби незаконно редагувати користувачів root протоколюються. Будь ласка, поверніться на <a href=\"{$_CONF['site_admin_url']}/user.php\">сторінку адміністрування користувачів</a>.",
+    'securitygroupsmsg' => 'Відмітьте групи, до котрих бажаєте віднести користувача.',
+    'groupeditor' => 'Редактор груп',
+    'description' => 'Опис',
+    'name' => 'Назва',
+    'rights' => 'Права',
+    'missingfields' => 'Бракує полів',
+    'missingfieldsmsg' => 'Ви повинні надати назву та опис для групи',
+    'groupmanager' => 'Менеджер груп',
+    'newgroupmsg' => 'Аби виправити чи вилучити групу, клацніть її нижче. Для створення нової групи клацніть &laquo;нова група&raquo; вгорі. Зауважте, що основні групи неможливо вилучити, бо вони використовуються системою.',
+    'groupname' => 'Назва групи',
+    'coregroup' => 'Основна група',
+    'yes' => 'Так',
+    'no' => 'Ні',
+    'corerightsdescr' => "Ця група є основною для сайту {$_CONF['site_name']}. Тому її права не можна редагувати. Нижче наведено незмінюваний перелік прав, наданих цій групі.",
+    'groupmsg' => 'Групи безпеки на цьому сайті є ієрархічними. Додаючи цю групу до будь-якої з нижчеподаних груп, ви дасте їй всі права тієї групи. Де тільки можливо, вас заохочується використовувати нижчеподані групи для надання групі прав. Якщо ж ви бажаєте окремих прав для своєї групи, то можете обрати права доступу до різних можливостей сайту в розділі &laquo;Права&raquo;, що нижче. Щоб додати цю групу до якоїсь із нижченаведених груп, просто відмітьте поля поряд з бажаними групами.',
+    'coregroupmsg' => "Ця група є основною для сайту {$_CONF['site_name']}. Тому групи, до яких вона належить, редагувати не можна. Нижче подано список цих груп (лише для читання).",
+    'rightsdescr' => 'Доступ групи до певного з нижчеподаних прав можна прямо надати групі АБО іншій, частиною якої є потрібна нам група. Права, котрі ви бачите без полів для галочки, надаються цій групі, бо вона належить до іншої групи з таким правом. Права, що мають поряд поля для	галочки, можуть прямо надаватись цій групі.',
+    'lock' => 'Замкнути',
+    'members' => 'Учасники',
+    'anonymous' => 'Аноніми',
+    'permissions' => 'Дозволи',
+    'permissionskey' => 'R = читання, E = редагування, права на редагування включають і права на читання',
+    'edit' => 'Редагування',
+    'none' => 'Немає',
+    'accessdenied' => 'В доступі відмовлено',
+    'storydenialmsg' => "Ви не маєте доступу до перегляду цієї статті. Це може бути через те, що ви не є учасником сайту {$_CONF['site_name']}. Будь ласка, <a href=users.php?mode=new>приєднайтесь</a> до {$_CONF['site_name']} для отримання повного учасницького доступу!",
+    'eventdenialmsg' => "Ви не маєте доступу до перегляду цієї події. Це може бути через те, що ви не є учасником сайту {$_CONF['site_name']}.  Будь ласка, <a href=users.php?mode=new>приєднайтесь</a> до {$_CONF['site_name']} для отримання повного учасницького доступу!",
+    'nogroupsforcoregroup' => 'Ця група не належить до жодної іншої групи',
+    'grouphasnorights' => 'Ця група не має доступу до жодної адміністративної функції цього сайту',
+    'newgroup' => 'Нова група',
+    'adminhome' => 'Домівка адміністратора',
+    'save' => 'зберегти',
+    'cancel' => 'скасувати',
+    'delete' => 'вилучити',
+    'canteditroot' => 'Ви намагались редагувати групу Root, не належачи до неї. Тому в доступі до цієї групи вам відмовлено. Якщо ви вважаєте, що це помилка, зверніться до системного адміністратора.',
+    'listusers' => 'Перелік користувачів',
+    'listthem' => 'перелік',
+    'usersingroup' => 'Користувачі в групі "%s"',
+    'usergroupadmin' => 'Адміністрування груп користувачів',
+    'add' => 'Додати',
+    'remove' => 'Усунути',
+    'availmembers' => 'Доступні учасники',
+    'groupmembers' => 'Члени групи',
+    'canteditgroup' => 'Для редагування цієї групи ви повинні бути її членом.  Якщо ви вважаєте, що це помилка, зверніться до системного адміністратора.',
+    'cantlistgroup' => 'Щоб бачити членів цієї групи, ви самі повинні бути її членом. Якщо ви вважаєте, що це помилка, зверніться до системного адміністратора.',
+    'editgroupmsg' => 'To modify the group membership, click on the member names(s) and use the add or remove buttons. If the member is a member of the group, their name will appear on the right side only. Once you are complete - press <b>Save</b> to update the group and return to the main group admin page.',
+    'listgroupmsg' => 'Listing of all current members in the group: <b>%s</b>',
+    'search' => 'Search',
+    'submit' => 'Submit',
+    'limitresults' => 'Limit Results',
+    'group_id' => 'Group ID',
+    'plugin_access_denied_msg' => 'You are illegally trying access a plugin administration page.  Please note that all attempts to illegally access this page are logged.',
+    'groupexists' => 'Group name already exists',
+    'groupexistsmsg' => 'There is already a group with this name. Group names must be unique.'
+);
+
+###############################################################################
+# admin/database.php
+
+$LANG_DB_BACKUP = array(
+    'last_ten_backups' => 'Останні 10 резервних копій',
+    'do_backup' => 'Зробити резервну копію',
+    'backup_successful' => 'Резервне копіювання бази даних відбулося успішно.',
+    'db_explanation' => 'Для створення нової резервної копії системи Geeklog, натисніть кнопку, що нижче',
+    'not_found' => "Невірний шлях, або ж утиліта mysqldump не є виконуваною.<br>Перевірте означення <strong>\$_DB_mysqldump_path</strong> в config.php.<br>Наразі змінну означено як: <var>{$_DB_mysqldump_path}</var>",
+    'zero_size' => 'Резервне копіювання не вдалося: розмір файлу становив 0 байтів',
+    'path_not_found' => "{$_CONF['backup_path']} не існує або не є каталогом",
+    'no_access' => "ПОМИЛКА: Каталог {$_CONF['backup_path']} недоступний.",
+    'backup_file' => 'Файл резервної копії',
+    'size' => 'Розмір',
+    'bytes' => 'Байтів',
+    'total_number' => 'Загальна кількість резервних копій: %d'
+);
+
+###############################################################################
+
+$LANG_BUTTONS = array(
+    1 => 'Домівка',
+    2 => 'Contact',
+    3 => 'Опублікуватись',
+    4 => 'Посилання',
+    5 => 'Опитування',
+    6 => 'Календар',
+    7 => 'Статистика сайту',
+    8 => 'Personalize',
+    9 => 'Шукати',
+    10 => 'складний пошук',
+    11 => 'Directory'
+);
+
+###############################################################################
+# 404.php
+
+$LANG_404 = array(
+    1 => 'Помилка 404',
+    2 => 'Бачте, ми дивилися всюди, та не змогли відшукати <b>%s</b>.',
+    3 => "<p>Просимо пробачення, однак запитаний вами файл не існує. Будь ласка, перевірте <a href=\"{$_CONF['site_url']}\">головну сторінку</a> або <a href=\"{$_CONF['site_url']}/search.php\">сторінку пошуку</a>, щоб побачити, чи знайдеться те, що ви шукаєте."
+);
+
+###############################################################################
+# login form
+
+$LANG_LOGIN = array(
+    1 => 'Вимагається реєстрація',
+    2 => 'Вибачте, для доступу сюди необхідно зареєструватись як користувач.',
+    3 => 'Увійти',
+    4 => 'Новий користувач'
+);
+
+###############################################################################
+# pdfgenerator.php
+
+$LANG_PDF = array(
+    1 => 'Функціональність PDF вимкнено',
+    2 => 'Наданий документ не відтворено. Документ було прийнято, однак не вдалось обробити. Впевніться, що ви відсилаєте лише документи в форматі HTML, що відповідають стандартові xHTML. Зауважте, що занадто складні документи html можуть відтворитись неправильно, а то й зовсім не відтворитись. Документ, що створився в результаті вашої спроби, мав довжину 0 байтів та був видалений. Якщо ви впевнені, що документ повинен відтворитись без проблем, будь ласка, вишліть його ще раз.',
+    3 => 'Невідома помилка при створенні PDF',
+    4 => 'Не подано даних про сторінку, або ж ви бажаєте скористатись інструментом ad-hoc для створення PDF, що нижче. Якщо ви вважаєте, що потрапили на цю сторінку помилково, зв\'яжіться з системним адміністратором. В іншому випадку можете скористатись нижчеподаною формою для створення PDF способом ad-hoc.',
+    5 => 'Завантажується ваш документ.',
+    6 => 'Будь ласка, зачекайте, доки ваш документ завантажиться.',
+    7 => 'Для збереження примірника вашого документу можете клацнути правою кнопкою миші на кнопці, що нижче, й вибрати з контекстного меню &laquo;Зберегти посилання...&raquo;',
+    8 => 'Поданий у конфігураційному файлі шлях до двійкового файлу HTMLDoc непримустимий, або ця система не може його виконати. Будь ласка, зверніться до системного адміністратора, якщо проблема не зникає.',
+    9 => 'Створювач PDF',
+    10 => 'Це &mdash; інструмент  Ad-hoc для створення PDF. Він намагається перетворити документ з будь-якого поданого URL в формат PDF. Будь ласка, зауважте, що не кожна сторінка Тенет зможе правильно відтворитись за допомогою цього знаряддя. Це є обмеженням інструменту для створення PDF HTMLDoc, і про такі помилки не слід звітувати адміністраторам цього сайту',
+    11 => 'URL',
+    12 => 'Створити PDF!',
+    13 => 'Налаштування PHP на цьому сервері не дозволяють URL у команді fopen(). Системний адміністратор повинен виправити файл php.ini, встановивши allow_url_fopen в значення On',
+    14 => 'Файл PDF, котрий ви запитуєте, або не існує, або ж ви вчинили спробу неправомірного доступу до файлу.'
+);
+
+###############################################################################
+# trackback.php
+
+$LANG_TRB = array(
+    'trackback' => 'Trackback',
+    'from' => 'from',
+    'tracked_on' => 'Tracked on',
+    'read_more' => '[read more]',
+    'intro_text' => 'Here\'s what others have to say about \'%s\':',
+    'no_comments' => 'No trackback comments for this entry.',
+    'this_trackback_url' => 'Trackback URL for this entry:',
+    'num_comments' => '%d trackback comments',
+    'send_trackback' => 'Send Pings',
+    'preview' => 'Preview',
+    'editor_title' => 'Send trackback comment',
+    'trackback_url' => 'Trackback URL',
+    'entry_url' => 'Entry URL',
+    'entry_title' => 'Entry Title',
+    'blog_name' => 'Site Name',
+    'excerpt' => 'Excerpt',
+    'truncate_warning' => 'Note: The receiving site may truncate your excerpt',
+    'button_send' => 'Send',
+    'button_preview' => 'Preview',
+    'send_error' => 'Error',
+    'send_error_details' => 'Error when sending trackback comment:',
+    'url_missing' => 'No Entry URL',
+    'url_required' => 'Please enter at least a URL for the entry.',
+    'target_missing' => 'No Trackback URL',
+    'target_required' => 'Please enter a trackback URL',
+    'error_socket' => 'Could not open socket.',
+    'error_response' => 'Response not understood.',
+    'error_unspecified' => 'Unspecified error.',
+    'select_url' => 'Select Trackback URL',
+    'not_found' => 'Trackback URL not found',
+    'autodetect_failed' => 'Geeklog could not detect the Trackback URL for the post you want to send your comment to. Please enter it manually below.',
+    'trackback_explain' => 'From the links below, please select the URL you want to send your Trackback comment to. Geeklog will then try to determine the correct Trackback URL for that post. Or you can <a href="%s">enter it manually</a> if you know it already.',
+    'no_links_trackback' => 'No links found. You can not send a Trackback comment for this entry.',
+    'pingback' => 'Pingback',
+    'pingback_results' => 'Pingback results',
+    'send_pings' => 'Send Pings',
+    'send_pings_for' => 'Send Pings for "%s"',
+    'no_links_pingback' => 'No links found. No Pingbacks were sent for this entry.',
+    'pingback_success' => 'Pingback sent.',
+    'no_pingback_url' => 'No pingback URL found.',
+    'resend' => 'Resend',
+    'ping_all_explain' => 'You can now notify the sites you linked to (<a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>), advertise that your site has been updated by pinging weblog directory services, or send a <a href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> comment in case you wrote about a post on someone else\'s site.',
+    'pingback_button' => 'Send Pingback',
+    'pingback_short' => 'Send Pingbacks to all sites linked from this entry.',
+    'pingback_disabled' => '(Pingback disabled)',
+    'ping_button' => 'Send Ping',
+    'ping_short' => 'Ping weblog directory services.',
+    'ping_disabled' => '(Ping disabled)',
+    'trackback_button' => 'Send Trackback',
+    'trackback_short' => 'Send a Trackback comment.',
+    'trackback_disabled' => '(Trackback disabled)',
+    'may_take_a_while' => 'Please note that sending Pingbacks and Pings may take a while.',
+    'ping_results' => 'Ping results',
+    'unknown_method' => 'Unknown ping method',
+    'ping_success' => 'Ping sent.',
+    'error_site_name' => 'Please enter the site\'s name.',
+    'error_site_url' => 'Please enter the site\'s URL.',
+    'error_ping_url' => 'Please enter a valid Ping URL.',
+    'no_services' => 'No weblog directory services configured.',
+    'services_headline' => 'Weblog Directory Services',
+    'service_explain' => 'To modify or delete a weblog directory service, click on the edit icon of that service below. To add a new weblog directory service, click on "Create New" above.',
+    'service' => 'Service',
+    'ping_method' => 'Ping method',
+    'service_website' => 'Website',
+    'service_ping_url' => 'URL to ping',
+    'ping_standard' => 'Standard Ping',
+    'ping_extended' => 'Extended Ping',
+    'ping_unknown' => '(unknown method)',
+    'edit_service' => 'Edit Weblog Directory Service',
+    'trackbacks' => 'Trackbacks',
+    'editor_intro' => 'Prepare your trackback comment for <a href="%s">%s</a>.',
+    'editor_intro_none' => 'Prepare your trackback comment.',
+    'trackback_note' => 'To send a trackback comment for a story, go to the list of stories and click on "Send Ping" for the story. To send a trackback that is not related to a story, <a href="%s">click here</a>.',
+    'pingback_explain' => 'Enter a URL to send the Pingback to. The pingback will point to your site\'s homepage.',
+    'pingback_url' => 'Pingback URL',
+    'site_url' => 'This site\'s URL',
+    'pingback_note' => 'To send a pingback for a story, go to the list of stories and click on "Send Ping" for the story. To send a pingback that is not related to a story, <a href="%s">click here</a>.',
+    'pbtarget_missing' => 'No Pingback URL',
+    'pbtarget_required' => 'Please enter a pingback URL',
+    'pb_error_details' => 'Error when sending the pingback:'
+);
+
+###############################################################################
+# directory.php
+
+$LANG_DIR = array(
+    'title' => 'Article Directory',
+    'title_year' => 'Article Directory for %d',
+    'title_month_year' => 'Article Directory for %s %d',
+    'nav_top' => 'Back to Article Directory',
+    'no_articles' => 'No articles.'
+);
+
+###############################################################################
+# "What's New" Time Strings
+# 
+# For the first two strings, you can use the following placeholders.
+# Order them so it makes sense in your language:
+# %i    item, "Stories"
+# %n    amount, "2", "20" etc.
+# %t    time, "2" (weeks)
+# %s    scale, "hrs", "weeks"
+
+$LANG_WHATSNEW = array(
+    'new_string' => '%n new %i in the last %t %s',
+    'new_last' => 'last %t %s',
+    'minutes' => 'minutes',
+    'hours' => 'hours',
+    'days' => 'days',
+    'weeks' => 'weeks',
+    'months' => 'months',
+    'minute' => 'minute',
+    'hour' => 'hour',
+    'day' => 'day',
+    'week' => 'week',
+    'month' => 'month'
+);
+
+###############################################################################
+# Admin - Strings
+# 
+# These are some standard strings used by core functions as well as plugins to
+# display administration lists and edit pages
+
+$LANG_ADMIN = array(
+    'search' => 'Search',
+    'limit_results' => 'Limit Results',
+    'submit' => 'Submit',
+    'edit' => 'Edit',
+    'admin_home' => 'Admin Home',
+    'create_new' => 'Create New',
+    'enabled' => 'Enabled',
+    'title' => 'Title',
+    'type' => 'Type',
+    'topic' => 'Topic',
+    'help_url' => 'Help File URL',
+    'save' => 'Save',
+    'cancel' => 'Cancel',
+    'delete' => 'Delete',
+    'copy' => 'Copy',
+    'no_results' => '- No entries found -',
+    'data_error' => 'There was an error processing the subscription data. Please check the data source.'
+);
+
+###############################################################################
+# Localisation of the texts for the various drop-down menus that are actually
+# stored in the database. If these exist, they override the texts from the
+# database.
+
+$LANG_commentcodes = array(
+    0 => 'Comments Enabled',
+    -1 => 'Comments Disabled'
+);
+
+
+$LANG_commentmodes = array(
+    'flat' => 'Flat',
+    'nested' => 'Nested',
+    'threaded' => 'Threaded',
+    'nocomment' => 'No Comments'
+);
+
+$LANG_cookiecodes = array(
+    0 => '(don\'t)',
+    3600 => '1 Hour',
+    7200 => '2 Hours',
+    10800 => '3 Hours',
+    28800 => '8 Hours',
+    86400 => '1 Day',
+    604800 => '1 Week',
+    2678400 => '1 Month'
+);
+
+$LANG_dateformats = array(
+    0 => 'System Default'
+);
+
+$LANG_featurecodes = array(
+    0 => 'Not Featured',
+    1 => 'Featured'
+);
+
+$LANG_frontpagecodes = array(
+    0 => 'Show Only in Topic',
+    1 => 'Show on Front Page'
+);
+
+$LANG_postmodes = array(
+    'plaintext' => 'Plain Old Text',
+    'html' => 'HTML Formatted'
+);
+
+$LANG_sortcodes = array(
+    'ASC' => 'Oldest First',
+    'DESC' => 'Newest First'
+);
+
+$LANG_trackbackcodes = array(
+    0 => 'Trackback Enabled',
+    -1 => 'Trackback Disabled'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/logs/spamx.log 1.4.0sr5-1/cpanel-glprivate/logs/spamx.log
--- 1.3.11sr1/cpanel-glprivate/logs/spamx.log	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/logs/spamx.log	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+*** dummy entry ***
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/config.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/config.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/config.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/config.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,152 @@
+<?php
+
+// Reminder: always indent with 4 spaces (no tabs). 
+// +---------------------------------------------------------------------------+
+// | config.php   Links plugin configuration file                              |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users.sourceforge DOT net        |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is licensed under the terms of the GNU General Public License|
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                      |
+// | See the GNU General Public License for more details.                      |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: config.php,v 1.7 2005/12/09 12:05:22 ospiess Exp $
+/** 
+ * Links plugin configuration file
+ * 
+ * @package Links
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+/**
+* the link plugin's config aray
+* 
+* @global array $_LI_CONF 
+*/
+$_LI_CONF = array();
+/**
+* the link plugin's version setting
+* 
+* @global array $_LI_CONF['version']
+*/
+$_LI_CONF['version'] = '1.0';          // Plugin Version
+
+/**
+ * this lets you select which functions are available for registered users only
+ * 
+ * @global array $_LI_CONF['linksloginrequired']
+ */ 
+$_LI_CONF['linksloginrequired'] = 0;
+
+/**
+ * Submission Settings
+ * enable (set to 1) or disable (set to 0) submission queues:
+ * 
+ * @global array $_LI_CONF['linksubmission']
+ */
+$_LI_CONF['linksubmission']  = 1;
+
+/**
+ * Following times are in seconds
+ * 
+ * @global array $_LI_CONF['newlinksinterval']
+ */ 
+$_LI_CONF['newlinksinterval']    = 1209600; // = 14 days
+
+/**
+ * Set to 1 to hide a section from the What's New block:
+ * 
+ * @global array $_LI_CONF['hidenewlinks']
+ */ 
+$_LI_CONF['hidenewlinks']    = 0;
+
+/**
+ * Set to 1 to hide a section from the Top menu:
+ *
+ * @global array $_LI_CONF['hidenewlinks']
+ */
+$_LI_CONF['hidelinksmenu']    = 0;
+
+/**
+ * categories per column
+ * You can set this and $_LI_CONF['linksperpage'] to 0 to get back the old (pre-1.3.6)
+ * style of the links section. Setting only linkcols to 0 will hide the
+ * categories but keep the paging. Setting only linksperpage to 0 will list
+ * all the links of the selected category on one page.
+ * 
+ * @global array $_LI_CONF['linkcols'] 
+ */ 
+$_LI_CONF['linkcols']     =  3; 
+
+/**
+ * links per page
+ * You can set this and $_LI_CONF['linkcols'] to 0 to get back the old (pre-1.3.6)
+ * style of the links section. Setting only linkcols to 0 will hide the
+ * categories but keep the paging. Setting only linksperpage to 0 will list
+ * all the links of the selected category on one page.
+ * 
+ * @global array $_LI_CONF['linksperpage']
+ */ 
+$_LI_CONF['linksperpage'] = 10;
+
+/**
+ * notify when a new link was submitted
+ * 
+ * @global array $_LI_CONF['notification']
+ */ 
+$_LI_CONF['notification'] = 0; 
+
+/**
+ * should we remove links submited by users if account is removed? (1)
+ * or change owner to root (0)
+ * 
+ * @global array $_LI_CONF['delete_links']
+ */ 
+$_LI_CONF['delete_links'] = 0; 
+
+/**
+ * Define default permissions for new links created from the Admin panel.
+ * Permissions are perm_owner, perm_group, perm_members, perm_anon (in that
+ * order). Possible values:<br>
+ * - 3 = read + write permissions (perm_owner and perm_group only)
+ * - 2 = read-only
+ * - 0 = neither read nor write permissions
+ * (a value of 1, ie. write-only, does not make sense and is not allowed)
+ * 
+ * @global array $_LI_CONF['default_permissions']
+ */ 
+$_LI_CONF['default_permissions'] = array (3, 2, 2, 2);
+
+// database table names - don't change
+$_TABLES['links']               = $_DB_table_prefix . 'links';
+$_TABLES['linksubmission']      = $_DB_table_prefix . 'linksubmission';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/functions.inc 1.4.0sr5-1/cpanel-glprivate/plugins/links/functions.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/links/functions.inc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/functions.inc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1153 @@
+<?php
+
+// +---------------------------------------------------------------------------+
+// | Links Plugin 1.0  functions.inc                                           |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+
+/**
+ * This file does two things: 1) it implements the necessary Geeklog Plugin
+ * API method and 2) implements all the common code needed by the links
+ * Plugins' PHP files.
+ *
+ * @package Links
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005-2006
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ *
+ */
+
+
+// Reminder: always indent with 4 spaces (no tabs).
+// $Id: functions.inc,v 1.49.2.2 2006/07/22 17:31:20 dhaun Exp $
+
+
+if (strpos ($_SERVER['PHP_SELF'], 'functions.inc') !== false) {
+    die ('This file can not be used on its own.');
+}
+
+$langfile = $_CONF['path'] . 'plugins/links/language/'
+          . $_CONF['language'] . '.php';
+
+if (file_exists ($langfile)) {
+    require_once ($langfile);
+} else {
+    require_once ($_CONF['path'] . 'plugins/links/language/english.php');
+}
+
+require_once ($_CONF['path'] . 'plugins/links/config.php');
+
+// +---------------------------------------------------------------------------+
+// | Geeklog Plugin API Implementations                                        |
+// +---------------------------------------------------------------------------+
+
+/**
+* Returns the items for this plugin that should appear on the main menu
+*
+* NOTE: this MUST return the url/value pairs in the following format
+* $<arrayname>[<label>] = <url>
+*
+*/
+function plugin_getmenuitems_links()
+{
+    global $_CONF, $LANG_LINKS, $_LI_CONF;
+
+    if ($_LI_CONF['hidelinksmenu'] == 0) {
+        $menuitems[$LANG_LINKS[114]] = $_CONF['site_url'] . '/links/index.php';
+    }
+    return $menuitems;
+}
+
+function plugin_whatsnewsupported_links()
+{
+    global $_TABLES, $_LI_CONF, $LANG_LINKS, $LANG_WHATSNEW;
+
+    $hidewhatsnew = $_LI_CONF['hidenewlinks'];
+    if ( $hidewhatsnew == 0 ) {
+        $retval = array( $LANG_LINKS[84], '<small>'
+                         . COM_formatTimeString( $LANG_WHATSNEW['new_last'],
+                                                 $_LI_CONF['newlinksinterval'] )
+                         . '</small>'
+                       );
+    } else {
+        $retval = false;
+    }
+
+    return $retval;
+}
+
+function plugin_getwhatsnew_links()
+{
+    global $_CONF, $_TABLES, $_USER, $_LI_CONF, $LANG_LINKS;
+
+    $retval = '';
+
+    // Get newest links
+    $sql = "SELECT lid,title FROM {$_TABLES['links']} WHERE (date >= (date_sub(NOW(), INTERVAL {$_LI_CONF['newlinksinterval']} SECOND)))" . COM_getPermSQL( 'AND' ) . ' ORDER BY date DESC LIMIT 15';
+    $result = DB_query( $sql );
+    $nrows = DB_numRows( $result );
+
+    if( $nrows > 0 )
+    {
+        $newlinks = array();
+        for( $x = 0; $x < $nrows; $x++ )
+        {
+            $A = DB_fetchArray( $result );
+            $A['title'] = stripslashes( $A['title'] );
+
+            // redirect link via portal.php so we can count the clicks
+            $lcount = COM_buildUrl( $_CONF['site_url']
+                    . '/links/portal.php?what=link&amp;item=' . $A['lid'] );
+
+            // Trim the length if over 16 characters
+            $itemlen = strlen( $A['title'] );
+            if( $itemlen > 16 )
+            {
+                $newlinks [] = '<a href="' . $lcount . '" title="'
+                    . $A['title'] . '">' . substr( $A['title'], 0, 16 )
+                    . '...</a>' . LB;
+            }
+            else
+            {
+                $newlinks[] = '<a href="' . $lcount . '">'
+                    . substr( $A['title'], 0, $itemlen ) . '</a>' . LB;
+            }
+        }
+
+        $retval .= COM_makeList( $newlinks, 'list-new-links' );
+    }
+    else
+    {
+        $retval .= $LANG_LINKS[88] . '<br>' . LB;
+    }
+
+    return $retval;
+}
+
+/**
+* Implements the [link:] autotag.
+*
+*/
+function plugin_autotags_links ($op, $content = '', $autotag = '')
+{
+    global $_CONF, $_TABLES;
+
+    if ($op == 'tagname' ) {
+        return 'link';
+    } else if ($op == 'parse') {
+        $lid = COM_applyFilter ($autotag['parm1']);
+        $url = COM_buildUrl ($_CONF['site_url'] . '/links/portal.php?what=link&item='
+                             . $lid);
+        if (empty ($autotag['parm2'])) {
+            $linktext = stripslashes (DB_getItem ($_TABLES['links'],
+                                      'title', "lid = '$lid'"));
+        } else {
+            $linktext = $autotag['parm2'];
+        }
+        $link = '<a href="' . $url . '">' . $linktext . '</a>';
+        $content = str_replace ($autotag['tagstr'], $link, $content);
+
+        return $content;
+    }
+}
+
+/**
+* Geeklog is checking to see if this plugin supports comments, tell it no.
+*
+* NOTE: to support comments you must used the same date/time based ID for your
+* widget.  In other words, to make primary keys for your plugin you should call
+* makesid().  Comments are keyed off of that...it is a limitation on how Geeklog
+* does comments.
+*
+*/
+function plugin_commentsupport_links()
+{
+    // links will not use comments
+    return false;
+}
+
+
+/**
+* Called by the plugin Editor to display the current plugin code version
+* This may be different then the version installed and registered currently.
+* If newer then you may want to run the update
+*/
+function plugin_chkVersion_links ()
+{
+    global $_LI_CONF;
+
+    return $_LI_CONF['version'];
+}
+
+/**
+* Helper function: count number of links and total number of clicks
+*
+* @return   array(number of links, number of clicks);
+*
+*/
+function LINKS_countLinksAndClicks ()
+{
+    global $_TABLES;
+
+    $result = DB_query ("SELECT COUNT(*) AS count,SUM(hits) AS clicks FROM {$_TABLES['links']}" . COM_getPermSQL ());
+    $A = DB_fetchArray($result);
+    $total_links = $A['count'];
+    $total_clicks = $A['clicks'];
+    if (empty ($total_clicks)) {
+        $total_clicks = 0;
+    }
+
+    return array ($total_links, $total_clicks);
+}
+
+/**
+* Shows the statistics for the links plugin on stats.php.
+* If $showsitestats is 1 then we are to only print the overall stats in the
+* 'site statistics box' otherwise we show the detailed stats
+*
+* @param    int     showsitestate   Flag to let us know which stats to get
+*/
+function plugin_showstats_links ($showsitestats)
+{
+    global $_CONF, $_TABLES, $LANG_LINKS_STATS;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+
+    $result = DB_query("SELECT lid,url,title,hits FROM {$_TABLES['links']} WHERE (hits > 0)" . COM_getPermSQL ('AND') . " ORDER BY hits DESC LIMIT 10");
+    $nrows  = DB_numRows ($result);
+    if ($nrows > 0) {
+        $header_arr = array(
+            array('text' => $LANG_LINKS_STATS['stats_page_title'], 'field' => 'sid'),
+            array('text' => $LANG_LINKS_STATS['stats_hits'], 'field' => 'hits'),
+        );
+        $data_arr = array();
+        $text_arr = array('has_menu'     =>  false,
+                          'title'        => $LANG_LINKS_STATS['stats_headline'],
+        );
+        for ($i = 0; $i < $nrows; $i++) {
+            $A = DB_fetchArray($result);
+            $A['title'] = stripslashes(str_replace('$','&#36;',$A['title']));
+            $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                      . "/links/portal.php?what=link&amp;item={$A['lid']}"). "\">{$A['title']}</a>";
+            $A['hits'] = COM_numberFormat ($A['hits']);
+            $data_arr[$i] = $A;
+        }
+        $display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
+    } else {
+        $display .= COM_startBlock($LANG_LINKS_STATS['stats_headline']);
+        $display .= $LANG_LINKS_STATS['stats_no_hits'];
+        $display .= COM_endBlock();
+    }
+
+    return $display;
+}
+
+/**
+* New stats plugin API function for proper integration with the site stats
+*
+* @return   array(item text, item count);
+*
+*/
+function plugin_statssummary_links ()
+{
+    global $LANG_LINKS_STATS;
+
+    list($total_links, $total_clicks) = LINKS_countLinksAndClicks ();
+
+    $item_count = COM_NumberFormat ($total_links)
+                . ' (' . COM_NumberFormat ($total_clicks) . ')';
+
+
+    return array ($LANG_LINKS_STATS['links'], $item_count);
+}
+
+/**
+* Geeklog is asking us to provide any new items that show up in the type
+* drop-down on search.php.  Let's users search for links.
+*
+*/
+function plugin_searchtypes_links()
+{
+    global $LANG_LINKS;
+
+    $tmp['links'] = $LANG_LINKS[14];
+
+    return $tmp;
+}
+
+
+/**
+* This searches for links matching the user query and returns an array of
+* for the header and table rows back to search.php where it will be formated and
+* printed
+*
+* @param    string  $query      Keywords user is looking for
+* @param    date    $datestart  Start date to get results for
+* @param    date    $dateend    End date to get results for
+* @param    string  $topic      The topic they were searching in
+* @param    string  $type       Type of items they are searching, or 'all'
+* @param    int     $author     Get all results by this author
+* @param    string  $keyType    search key type: 'all', 'phrase', 'any'
+* @param    int     $page       page number of current search
+* @param    int     $perpage    number of results per page
+*
+*/
+function plugin_dopluginsearch_links($query, $datestart, $dateend, $topic, $type, $author, $keyType, $page, $perpage)
+{
+    global $_CONF, $_TABLES, $LANG_LINKS_SEARCH;
+
+    if (empty($type)) {
+        $type = 'all';
+    }
+
+    // Bail if we aren't supppose to do our search
+    if ($type <> 'all' AND $type <> 'links') {
+        $plugin_results = new Plugin();
+        $plugin_results->plugin_name = 'links';
+        $plugin_results->searchlabel = $LANG_LINKS_SEARCH['results'];
+        return $plugin_results;
+    }
+
+    $select = "SELECT *,UNIX_TIMESTAMP(date) AS day";
+    $sql = " FROM {$_TABLES['links']} WHERE date <> 1 ";
+
+    if (!empty ($query)) {
+        if ($keyType == 'phrase') {
+            $mysearchterm = addslashes ($query);
+            $sql .= " AND (description LIKE '%$mysearchterm%')"
+                 . " OR (title LIKE '%$mysearchterm%')";
+        } else if ($keyType == 'all') {
+            $mywords = explode (' ', $query);
+            $sql .= ' AND (';
+            $tmp = '';
+            foreach ($mywords AS $mysearchterm) {
+                $mysearchterm = addslashes (trim ($mysearchterm));
+                if (!empty ($mysearchterm)) {
+                    $tmp .= "(description LIKE '%$mysearchterm%')"
+                         . " OR (title LIKE '%$mysearchterm%') AND ";
+                }
+            }
+            $tmp = substr ($tmp, 0, strlen ($tmp) - 5);
+            $sql .= $tmp . ')';
+        } else if ($keyType == 'any') {
+            $mywords = explode (' ', $query);
+            $sql .= ' AND (';
+            $tmp = '';
+            foreach ($mywords AS $mysearchterm) {
+                $mysearchterm = addslashes (trim ($mysearchterm));
+                if (!empty ($mysearchterm)) {
+                    $tmp .= "(description LIKE '%$mysearchterm%')"
+                         . " OR (title LIKE '%$mysearchterm%') OR ";
+                }
+            }
+            $tmp = substr ($tmp, 0, strlen ($tmp) - 4);
+            $sql .= $tmp . ')';
+        } else {  // quick search
+            $mysearchterm = addslashes ($query);
+            $sql .= " AND (description LIKE '%$mysearchterm%')"
+                 . " OR (title LIKE '%$mysearchterm%')";
+        }
+    }
+
+    if (!empty ($datestart) && !empty ($dateend)) {
+        $delim = substr ($datestart, 4, 1);
+        if (!empty($delim)) {
+            $DS = explode ($delim, $datestart);
+            $DE = explode ($delim, $dateend);
+            $startdate = mktime (0, 0, 0, $DS[1], $DS[2], $DS[0]);
+            $enddate = mktime (23, 59, 59, $DE[1], $DE[2], $DE[0]);
+            $sql .= " AND (UNIX_TIMESTAMP(date) BETWEEN '$startdate' AND '$enddate')";
+        }
+    }
+
+    if (!empty ($author)) {
+        $sql .= "AND (owner_id = '$author')";
+    }
+    $sql .= " ORDER BY date DESC ";
+    $l = ($perpage * $page) - $perpage;
+    $sql .= 'LIMIT ' . $l . ',' . $perpage;
+
+    // Perform search
+    $result = DB_query ($select . $sql);
+    $mycount = DB_numRows ($result);
+    $result_count = DB_query ('SELECT COUNT(*)' . $sql);
+    $B = DB_fetchArray ($result_count, true);
+
+    $plugin_results = new Plugin();
+    $plugin_results->plugin_name = 'links';
+    $plugin_results->searchlabel = $LANG_LINKS_SEARCH['results'];
+    $plugin_results->addSearchHeading ($LANG_LINKS_SEARCH['title']);
+    $plugin_results->addSearchHeading ($LANG_LINKS_SEARCH['date']);
+    $plugin_results->addSearchHeading ($LANG_LINKS_SEARCH['author']);
+    $plugin_results->addSearchHeading ($LANG_LINKS_SEARCH['hits']);
+    $plugin_results->num_searchresults = 0;
+    $plugin_results->num_itemssearched = $B[0];
+    $plugin_results->supports_paging = true;
+
+    // NOTE if any of your data items need to be links then add them here!
+    // make sure data elements are in an array and in the same order as your
+    // headings above!
+    for ($i = 0; $i < $mycount; $i++) {
+        $A = DB_fetchArray ($result);
+
+        if (SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon'])) {
+            $thetime = COM_getUserDateTimeFormat ($A['day']);
+            $A['title'] = stripslashes ($A['title']);
+            $submitter = COM_getDisplayName ($A['owner_id']);
+            if ($A['owner_id'] > 1) {
+                $profile = '<a href="' . $_CONF['site_url']
+                         . '/users.php?mode=profile&amp;uid=' . $A['owner_id']
+                         . '">' . $submitter . '</a>';
+            } else {
+                $profile = $submitter;
+            }
+            $linkUrl = COM_buildURL ($_CONF['site_url']
+                                     . '/links/portal.php?what=link&amp;item='
+                                     . $A['lid']);
+            $row = array ('<a href="' . $linkUrl . '">' . $A['title'] . '</a>',
+                    $thetime[0], $profile, COM_NumberFormat ($A['hits']));
+            $plugin_results->addSearchResult ($row);
+            $plugin_results->num_searchresults++;
+        }
+    }
+
+    return $plugin_results;
+}
+
+
+/**
+* This will put an option for links in the command and control block on
+* moderation.php
+*
+*/
+function plugin_cclabel_links()
+{
+    global $_CONF, $LANG_LINKS;
+
+    if (SEC_hasRights ('links.edit')) {
+        return array ($LANG_LINKS[14],
+                      $_CONF['site_admin_url'] . '/plugins/links/index.php',
+                      plugin_geticon_links ());
+    }
+
+    return false;
+}
+
+/**
+* returns the administrative option for this plugin
+*
+*/
+function plugin_getadminoption_links()
+{
+    global $_CONF, $_TABLES, $LANG_LINKS;
+
+    if (SEC_hasRights ('links.edit,links.delete', 'OR')) {
+        $total_links = DB_getItem ($_TABLES['links'], 'COUNT(*)',
+                                   COM_getPermSql (''));
+
+        return array ($LANG_LINKS[14],
+                      $_CONF['site_admin_url'] . '/plugins/links/index.php',
+                      $total_links);
+    }
+}
+
+/**
+* A user is about to be deleted. Update ownership of any links owned
+* by that user or delete them.
+*
+* @param   uid   int   User id of deleted user
+*
+*/
+function plugin_user_delete_links ($uid)
+{
+    global $_TABLES, $_LI_CONF;
+
+    if (DB_count ($_TABLES['links'], "owner_id = $uid") == 0) {
+        return;
+    }
+
+    if ($_LI_CONF['delete_links'] == 1) {
+        // delete the pages
+        DB_query ("DELETE FROM {$_TABLES['links']} WHERE owner_id = $uid");
+    } else {
+        // assign ownership to a user from the Root group
+        $rootgroup = DB_getItem ($_TABLES['groups'], 'grp_id',
+                                 "grp_name = 'Root'");
+        $result = DB_query ("SELECT DISTINCT ug_uid FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $rootgroup ORDER BY ug_uid LIMIT 1");
+        $A = DB_fetchArray ($result);
+        $rootuser = $A['ug_uid'];
+        DB_query ("UPDATE {$_TABLES['links']} SET owner_id = $rootuser WHERE owner_id = $uid");
+    }
+}
+
+/*
+* Do we support feeds?
+*/
+function plugin_getfeednames_links()
+{
+    global $_TABLES;
+
+    $feeds = array ();
+
+    $result = DB_query ("SELECT lid,category FROM {$_TABLES['links']} GROUP BY category ORDER BY category ASC");
+    $num = DB_numRows ($result);
+
+    if ($num > 0) {
+        $feeds[] = array ('id' => 'all', 'name' => 'all categories');
+    }
+
+    for ($i = 0; $i < $num; $i++) {
+        $A = DB_fetchArray ($result);
+        $feeds[] = array ('id' => $A['category'], 'name' => $A['category']);
+    }
+
+    return $feeds;
+}
+
+/*
+* Provide feed data
+*/
+function plugin_getfeedcontent_links ($feed, &$link, &$update)
+{
+    global $_CONF, $_TABLES;
+
+    $result = DB_query( "SELECT topic,limits,content_length FROM {$_TABLES['syndication']} WHERE fid = '$feed'" );
+    $S = DB_fetchArray( $result );
+
+
+    $result = DB_query( "SELECT lid,owner_id,title,description,UNIX_TIMESTAMP(date) AS modified FROM " . $_TABLES['links'] . links_buildSql ($S['topic'], $S['limits']) );
+
+    $content = array();
+    $lids = array();
+    $nrows = DB_numRows( $result );
+
+    for( $i = 0; $i < $nrows; $i++ )
+    {
+        $row = DB_fetchArray( $result );
+        $lids[] = $row['lid'];
+
+        $linktitle = stripslashes( $row['title'] );
+        $linkdesc = stripslashes( $row['description'] );
+
+        $linklink = COM_buildUrl( $_CONF['site_url']
+                  . '/links/portal.php?what=link&item=' . $row['lid'] );
+
+        $content[] = array( 'title'   => $linktitle,
+                            'summary' => $linkdesc,
+                            'link'    => $linklink,
+                            'uid'     => $row['owner_id'],
+                            'author'  => COM_getDisplayName( $row['owner_id'] ),
+                            'date'    => $row['modified'],
+                            'format'  => 'plaintext'
+                          );
+    }
+
+    $link = $_CONF['site_url'] . '/links/index.php';
+    $update = implode( ',', $lids );
+
+    return $content;
+}
+
+function links_buildSql ($category, $limits)
+{
+    $where = '';
+    if ($category != 'all') {
+        $where = "category='" . $category . "'";
+    }
+
+    $limitsql = '';
+    if (!empty ($limits)) {
+        if (substr ($limits, -1) == 'h') { // last xx hours
+            $limitsql = '';
+            $hours = substr ($limits, 0, -1);
+            if (!empty ($where)) {
+                $where .= ' AND ';
+            }
+            $where .= "date >= DATE_SUB(NOW(),INTERVAL $hours HOUR)";
+        } else {
+            $limitsql = ' LIMIT ' . $limits;
+        }
+    }
+    else
+    {
+        $limitsql = ' LIMIT 10';
+    }
+
+    if (!empty ($where)) {
+        $where = ' WHERE ' . $where;
+    }
+
+    $sql = $where . ' ORDER BY date DESC' . $limitsql;
+
+    return $sql;
+}
+
+/**
+* Checking if links feeds are up to date
+*
+* @param    int     $feed           id of feed to be checked
+* @param    string  $topic          topic (actually: category)
+* @param    string  $update_data    data describing current feed contents
+* @param    string  $limit          number of entries or number of hours
+* @param    string  $updated_type   (optional) type of feed to be updated
+* @param    string  $updated_topic  (optional) feed's "topic" to be updated
+* @param    string  $updated_id     (optional) id of entry that has changed
+*
+*/
+function plugin_feedupdatecheck_links ($feed, $topic, $update_data, $limit, $updated_type = '', $updated_topic = '', $updated_id = '')
+{
+    global $_TABLES;
+
+    $is_current = true;
+
+    if ($updated_type != 'links') {
+        // we're not interested
+        $updated_type = '';
+        $updated_topic = '';
+        $updated_id = '';
+    }
+
+    $sql = "SELECT lid FROM {$_TABLES['links']}" . links_buildSql ($topic, $limit);
+    $result = DB_query ($sql);
+    $num = DB_numRows ($result);
+
+    $lids = array ();
+    for ($i = 0; $i < $num; $i++) {
+        $A = DB_fetchArray ($result);
+
+        if ($A['lid'] == $updated_id) {
+            // this feed has to be updated - no further checks needed
+            return false;
+        }
+
+        $lids[] = $A['lid'];
+    }
+    $current = implode (',', $lids);
+
+    return ($current != $update_data) ? false : true;
+}
+
+/**
+* Removes the datastructures for this plugin from the Geeklog database
+*
+* This may get called by the install routine to undo anything done to this
+* point.
+*
+* @steps   Array    Holds all the steps that have been completed by the install
+*
+*/
+function plugin_uninstall_links ()
+{
+    global $_TABLES, $_CONF;
+
+    // Uninstalls the links plugin
+
+    // Remove the linksubmisssion table
+    COM_errorLog ('Dropping linksubmission table', 1);
+    DB_query ("DROP TABLE {$_TABLES['linksubmission']}");
+    COM_errorLog ('...success', 1);
+
+    // Remove the links table
+    COM_errorLog ('Dropping links table', 1);
+    DB_query ("DROP TABLE {$_TABLES['links']}");
+    COM_errorLog ('...success', 1);
+
+    // Remove feed files
+    COM_errorLog ('removing links feed files', 1);
+    $sql = "SELECT filename FROM {$_TABLES['syndication']} WHERE type = 'links';";
+    $result = DB_query( $sql );
+    $nrows = DB_numRows( $result );
+    COM_errorLog ($nrows. ' files stored in table.', 1);
+    if ( $nrows > 0 ) {
+        for ( $i = 0; $i < $nrows; $i++ ) {
+            $fcount = $i + 1;
+            $A = DB_fetchArray( $result );
+            $fullpath = SYND_getFeedPath( $A[0] );
+            if ( file_exists( $fullpath ) ) {
+                unlink ($fullpath);
+                COM_errorLog ("removed file $fcount of $nrows: $fullpath", 1);
+            } else {
+                COM_errorLog ("cannot remove file $fcount of $nrows, it does not exist! ($fullpath)", 1);
+            }
+        }
+    }
+    COM_errorLog ('...success', 1);
+
+    // Remove Links Feeds from syndiaction table
+    COM_errorLog ('removing links feeds from table', 1);
+    DB_query ("DELETE FROM {$_TABLES['syndication']} WHERE `type` = 'links'");
+    COM_errorLog ('...success', 1);
+
+    // Remove security for this plugin
+
+    // Remove the links admin group
+    $grp_id = DB_getItem ($_TABLES['groups'], 'grp_id',
+                          "grp_name = 'Links Admin'");
+
+    if (!empty ($grp_id)) {
+        COM_errorLog ('Attempting to remove the Links Admin group', 1);
+        DB_query ("DELETE FROM {$_TABLES['groups']} WHERE grp_id = $grp_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    // Remove related features
+    $edit_id = DB_getItem ($_TABLES['features'], 'ft_id',
+                           "ft_name = 'links.edit'");
+    $moderate_id = DB_getItem ($_TABLES['features'], 'ft_id',
+                               "ft_name = 'links.moderate'");
+    $submit_id = DB_getItem ($_TABLES['features'], 'ft_id',
+                             "ft_name = 'links.submit'");
+
+    // Remove access to those features
+    if (!empty ($edit_id)) {
+        COM_errorLog ('Attempting to remove links.edit rights from all groups' ,1);
+        DB_query ("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $edit_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    if (!empty ($moderate_id)) {
+        COM_errorLog ('Attempting to remove links.moderate rights from all groups', 1);
+        DB_query ("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $moderate_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    if (!empty ($submit_id)) {
+        COM_errorLog ('Attempting to remove links.submit rights from all groups', 1);
+        DB_query ("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $submit_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    // Remove Links Admin group from all other groups
+    if (!empty ($grp_id)) {
+        COM_errorLog ('Attempting to Links Admin group from all groups.', 1);
+        DB_query("DELETE FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $grp_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    // remove features
+    if (!empty ($edit_id)) {
+        COM_errorLog ('Attempting to remove the links.edit feature', 1);
+        DB_query ("DELETE FROM {$_TABLES['features']} WHERE ft_id = $edit_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    if (!empty ($moderate_id)) {
+        COM_errorLog ('Attempting to remove the links.moderate feature', 1);
+        DB_query ("DELETE FROM {$_TABLES['features']} WHERE ft_id = $moderate_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    if (!empty ($submit_id)) {
+        COM_errorLog ('Attempting to remove the links.submit feature', 1);
+        DB_query ("DELETE FROM {$_TABLES['features']} WHERE ft_id = $submit_id");
+        COM_errorLog ('...success', 1);
+    }
+
+    // Unregister the plugin with Geeklog
+    // Always attempt to remove these entries or lib-common.php would still
+    // try and read our functions.inc file ...
+    COM_errorLog ('Attempting to unregister the plugin from Geeklog', 1);
+    DB_query ("DELETE FROM {$_TABLES['plugins']} WHERE pi_name = 'links'");
+    COM_errorLog ('...success',1);
+
+    COM_errorLog ('Finished uninstalling the Links plugin.', 1);
+
+    return true;
+}
+
+/**
+*
+* Counts the items that are submitted
+*
+*/
+function plugin_submissioncount_links()
+{
+   global $_TABLES;
+
+   return DB_count ($_TABLES['linksubmission']);
+}
+
+/**
+*
+* Checks that the current user has the rights to moderate the
+* plugin, returns true if this is the case, false otherwise
+*
+* @return        boolean       Returns true if moderator
+*
+*/
+function plugin_ismoderator_links()
+{
+    return SEC_hasRights ('links.moderate');
+}
+
+
+/**
+* Returns SQL & Language texts to moderation.php
+*/
+function plugin_itemlist_links()
+{
+    global $_TABLES, $LANG_LINKS_SUBMIT;
+
+    if (plugin_ismoderator_links()) {
+        $plugin = new Plugin();
+        $plugin->submissionlabel = $LANG_LINKS_SUBMIT[11];
+        $plugin->submissionhelpfile = 'cclinksubmission.html';
+        $plugin->getsubmissionssql = "SELECT lid AS id,title,category,url FROM {$_TABLES['linksubmission']} ORDER BY title ASC";
+        $plugin->addSubmissionHeading($LANG_LINKS_SUBMIT[8]);
+        $plugin->addSubmissionHeading($LANG_LINKS_SUBMIT[10]);
+        $plugin->addSubmissionHeading($LANG_LINKS_SUBMIT[9]);
+
+        return $plugin;
+    }
+}
+
+/**
+* returns list of moderation values
+*
+* The array returned contains (in order): the row 'id' label, main plugin
+* table, moderation fields (comma seperated), and plugin submission table
+*
+* @return       array        Returns array of useful moderation values
+*
+*/
+function plugin_moderationvalues_links()
+{
+    global $_TABLES;
+
+    return array ('lid',
+                  $_TABLES['links'],
+                  'lid,category,url,description,title,date',
+                  $_TABLES['linksubmission']);
+}
+
+
+/**
+* Performs plugin exclusive work for items approved by moderation
+*
+* While moderation.php handles the actual move from linkssubmission
+* to links tables, within the function we handle all other approval
+* relate tasks
+*
+* @param      string       $id      Identifying string
+* @return     string       Any wanted HTML output
+*
+*/
+function plugin_moderationapprove_links ($id)
+{
+    global $_TABLES, $_USER, $_GROUPS, $_LI_CONF;
+
+    $A = array ();
+    SEC_setDefaultPermissions ($A, $_LI_CONF['default_permissions']);
+
+    // Since the linksubmission table does not contain fields for the owner
+    // and group, we set those to the current user. Also set the default
+    // permissions as specified in the plugin's config.php
+    if (isset ($_GROUPS['Links Admin'])) {
+        $group_id = $_GROUPS['Links Admin'];
+    } else {
+        $group_id = SEC_getFeatureGroup ('links.moderate');
+    }
+    DB_query ("UPDATE {$_TABLES['links']} SET owner_id = '{$_USER['uid']}', group_id = '$group_id', perm_owner = '{$A['perm_owner']}', perm_group = '{$A['perm_group']}', perm_members = '{$A['perm_members']}', perm_anon = '{$A['perm_anon']}' WHERE lid = '$id'");
+
+    return '';
+}
+
+/**
+* Performs plugin exclusive work for items deleted by moderation
+*
+* While moderation.php handles the actual removal from <plugin>submission
+* table, within this function we handle all other deletion
+* relate tasks
+*
+* @param      string       $id      Identifying string
+* @return     string       Any wanted HTML output
+*
+*/
+function plugin_moderationdelete_links($id)
+{
+    global $_TABLES;
+
+    // these tables should not contain any rows with ml_id = $id
+    // this is done 'just in case'
+    DB_delete ($_TABLES['linksubmission'], 'lid', $id);
+
+    return '';
+}
+
+/**
+* Check submission form values and save if OK. Else show form again
+*
+*/
+function plugin_savesubmission_links($A)
+{
+    global $_CONF, $_TABLES, $LANG12;
+
+    if (!empty ($A['title']) && !empty ($A['description']) &&
+                !empty ($A['url'])) {
+        $retval = plugin_save_submit_links ($A);
+    } else {
+        $retval .= COM_siteHeader()
+            . COM_startBlock ($LANG12[22], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'))
+            . $LANG12[23]
+            . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
+            . submissionform('links')
+            . COM_siteFooter ();
+    }
+
+    return $retval;
+}
+
+/**
+* Shows link submission form
+*
+*/
+function plugin_submit_links()
+{
+    global $_CONF, $_TABLES, $LANG_LINKS_SUBMIT, $LANG12;
+
+    $retval = COM_startBlock ($LANG_LINKS_SUBMIT[1], 'submitlink.html');
+
+    $linkform = new Template($_CONF['path'] . '/plugins/links/templates');
+    $linkform->set_file('linkform', 'submitlink.thtml');
+    $linkform->set_var('site_url', $_CONF['site_url']);
+    $linkform->set_var('layout_url', $_CONF['layout_url']);
+    $linkform->set_var('lang_title', $LANG12[10]);
+    $linkform->set_var('lang_link', $LANG_LINKS_SUBMIT[2]);
+    $linkform->set_var('lang_category', $LANG_LINKS_SUBMIT[3]);
+    $dummycategory = '';
+    $linkform->set_var('link_category_options',
+                       links_getCategoryList ($dummycategory));
+    $linkform->set_var('lang_other', $LANG_LINKS_SUBMIT[4]);
+    $linkform->set_var('lang_ifother', $LANG_LINKS_SUBMIT[5]);
+    $linkform->set_var('lang_description', $LANG12[15]);
+    $linkform->set_var('lang_htmlnotallowed', $LANG12[35]);
+    $linkform->set_var('lang_submit', $LANG12[8]);
+    $linkform->set_var('max_url_length', 255);
+    $linkform->parse('theform', 'linkform');
+    $retval .= $linkform->finish($linkform->get_var('theform'));
+    $retval .= COM_endBlock();
+
+    return $retval;
+}
+
+/**
+* Saves a link submission
+*
+* @param    array   $A  Data for that submission
+* @return   string      HTML redirect
+*
+*/
+function plugin_save_submit_links ($A)
+{
+    global $_CONF, $_TABLES, $_USER, $_LI_CONF, $LANG_LINKS_SUBMIT;
+
+    $retval = '';
+
+    $A['category'] = strip_tags (COM_stripslashes ($A['category']));
+    $A['categorydd'] = strip_tags (COM_stripslashes ($A['categorydd']));
+    if ($A['categorydd'] != $LANG_LINKS_SUBMIT[4] && !empty ($A['categorydd'])) {
+        $A['category'] = $A['categorydd'];
+    } else if ($A['categorydd'] != $LANG_LINKS_SUBMIT[4]) {
+        $retval .= COM_startBlock ($LANG_LINKS_SUBMIT[6], '',
+                       COM_getBlockTemplate ('_msg_block', 'header'))
+                . $LANG_LINKS_SUBMIT[7]
+                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
+                . submissionform ('links')
+                . COM_siteFooter ();
+
+        return $retval;
+    }
+
+    // pseudo-formatted link description for the spam check
+    $spamcheck = '<p><a href="' . $A['url'] . '">' . $A['title'] . '</a> ('
+               . $A['category'] . ', ' . $A['categorydd'] . ')<br>'
+               . $A['description'] . '</p>';
+    $result = PLG_checkforSpam ($spamcheck, $_CONF['spamx']);
+    if ($result > 0) {
+        COM_updateSpeedlimit ('submit');
+        COM_displayMessageAndAbort ($result, 'spamx', 403, 'Forbidden');
+    }
+
+    $A['category'] = addslashes ($A['category']);
+    $A['description'] = addslashes (htmlspecialchars (COM_checkWords ($A['description'])));
+    $A['title'] = addslashes (strip_tags (COM_checkWords ($A['title'])));
+
+    $A['url'] = strip_tags ($A['url']);
+    if (!empty ($A['url'])) {
+        $pos = strpos ($A['url'], ':');
+        if ($pos === false) {
+            $A['url'] = 'http://' . $A['url'];
+        } else {
+            $prot = substr ($A['url'], 0, $pos + 1);
+            if (($prot != 'http:') && ($prot != 'https:')) {
+                $A['url'] = 'http:' . substr ($A['url'], $pos + 1);
+            }
+        }
+        $A['url'] = addslashes ($A['url']);
+    }
+    $A['lid'] = addslashes (COM_makeSid ());
+    COM_updateSpeedlimit ('submit');
+
+    if (($_LI_CONF['linksubmission'] == 1) && !SEC_hasRights ('links.submit')) {
+        $result = DB_save ($_TABLES['linksubmission'],
+                    'lid,category,url,description,title,date',
+                    "{$A['lid']},'{$A['category']}','{$A['url']}','{$A['description']}','{$A['title']}',NOW()");
+
+        if (isset ($_LI_CONF['notification']) && ($_LI_CONF['notification']==1)) {
+            LINKS_sendNotification ($_TABLES['linksubmission'], $A);
+        }
+
+        $retval = COM_refresh ($_CONF['site_url'] . '/index.php?msg=1&plugin=links');
+    } else { // add link directly
+        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
+            $owner_id = $_USER['uid'];
+        } else {
+            $owner_id = 1; // anonymous user
+        }
+        $result = DB_save ($_TABLES['links'], 'lid,category,url,description,title,date,owner_id', "{$A['lid']},'{$A['category']}','{$A['url']}','{$A['description']}','{$A['title']}',NOW(),$owner_id");
+        if (isset ($_LI_CONF['notification']) && ($_LI_CONF['notification']==1)) {
+            LINKS_sendNotification ($_TABLES['links'], $A);
+        }
+        COM_rdfUpToDateCheck ();
+
+        $retval = COM_refresh ($_CONF['site_url'] . '/index.php?msg=4&plugin=links');
+    }
+
+    return $retval;
+}
+
+/**
+* Send an email notification for a new submission.
+*
+* @param    string  $table  Table where the new submission can be found
+* @param    array   $A      submission data
+*
+*/
+function LINKS_sendNotification ($table, $A)
+{
+    global $_CONF, $_TABLES, $LANG_LINKS, $LANG_LINKS_SUBMIT,
+           $LANG08;
+    $title = stripslashes ($A['title']);
+    $description = stripslashes ($A['description']);
+
+    $mailbody = "$LANG_LINKS_SUBMIT[8]: $title\n"
+              . "$LANG_LINKS_SUBMIT[9]: <{$A['url']}>\n"
+              . "$LANG_LINKS_SUBMIT[3]: {$A['category']}\n\n"
+              . $description . "\n\n";
+    if ($table == $_TABLES['linksubmission']) {
+        $mailbody .= "$LANG_LINKS[10] <{$_CONF['site_admin_url']}/moderation.php>\n\n";
+    } else {
+        $mailbody .= "$LANG_LINKS[114] <{$_CONF['site_url']}/links/index.php?category=" . urlencode ($A['category']) . ">\n\n";
+    }
+    $mailsubject = $_CONF['site_name'] . ' ' . $LANG_LINKS_SUBMIT[11];
+
+    $mailbody .= "\n------------------------------\n";
+    $mailbody .= "\n$LANG08[34]\n";
+    $mailbody .= "\n------------------------------\n";
+
+    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
+}
+
+/**
+* Returns the URL of the plugin's icon
+*
+* @return   string      URL of the icon
+*
+*/
+function plugin_geticon_links ()
+{
+    global $_CONF;
+
+    return $_CONF['site_url'] . '/links/images/links.png';
+}
+
+function plugin_getListField_links($fieldname, $fieldvalue, $A, $icon_arr)
+{
+    global $_CONF, $LANG_ADMIN, $LANG_ACCESS;
+    $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
+    if ($access > 0) {
+        switch($fieldname) {
+            case "edit":
+                $retval = "<a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php?mode=edit&amp;lid={$A['lid']}\">{$icon_arr['edit']}</a>";
+                break;
+            case "access":
+                if ($access == 3) {
+                   $retval = $LANG_ACCESS['edit'];
+                } else {
+                   $retval = $LANG_ACCESS['readonly'];
+                }
+                break;
+            case "title":
+                $title = stripslashes($A['title']);
+                $retval = "<a href=\"{$A['url']}\">$title</a>";
+                break;
+            default:
+                $retval = $fieldvalue;
+                break;
+        }
+    }
+    return $retval;
+}
+
+/**
+* Return a list of all link categories
+*
+* @param    string  $current_category   currently selected category
+* @return   string                      <option> list containing all categories
+*
+* Note: $current_category will be returned as an empty string when found in the
+*       current list of categories and left untouched when it's a new category,
+*       i.e. the user selected "Other". This is needed for moderating link
+*       submissions.
+*
+*/
+function links_getCategoryList (&$current_category)
+{
+    global $_TABLES, $LANG_LINKS_ADMIN;
+
+    $retval = '';
+
+    $result = DB_query("SELECT DISTINCT category FROM {$_TABLES['links']} GROUP BY category");
+    $nrows = DB_numRows($result);
+
+    $retval = '<option value="' . $LANG_LINKS_ADMIN[7] . '">'
+            . $LANG_LINKS_ADMIN[7] . '</option>';
+    for ($i = 0; $i < $nrows; $i++) {
+        $A = DB_fetchArray ($result);
+        $category = $A['category'];
+        $retval .= '<option value="' . $category . '"';
+        if ($category == $current_category) {
+            $retval .= ' selected="selected"';
+            $current_category = '';
+        }
+        $retval .= '>' . $category . '</option>';
+    }
+
+    return $retval;
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/chinese_simplified_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/chinese_simplified_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/chinese_simplified_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/chinese_simplified_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,136 @@
+<?php
+
+###############################################################################
+# chinese_simplified_utf-8.php
+#
+# This is the Chinese Simplified (UTF-8) language set for GeekLog Links plugin
+# 
+# Last updated January 10, 2006
+#
+# Copyright (C) 2005 Samuel M. Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+/**
+* the link plugin's lang array
+* 
+* @global array $LANG_LINKS 
+*/
+$LANG_LINKS= array(
+    10 => '提交物',
+    14 => '连结',
+    84 => '连结',
+    88 => '没有新的连结',
+    114 => '网际资源',
+    116 => '加一联结'
+);
+
+###############################################################################
+# for stats
+/**
+* the link plugin's lang stats array
+* 
+* @global array $LANG_LINKS_STATS
+*/
+$LANG_LINKS_STATS = array(
+    'links' => '系统里的联结(点击)',
+    'stats_headline' => '头十个联结',
+    'stats_page_title' => '联结',
+    'stats_hits' => '采样数',
+    'stats_no_hits' => '看来本站没有连结或是没人点击过本站的连结。',
+);
+
+###############################################################################
+# for the search
+/**
+* the link plugin's lang search array
+* 
+* @global array $LANG_LINKS_SEARCH 
+*/
+$LANG_LINKS_SEARCH = array(
+ 'results' => '联结结果',
+ 'title' => '标题',
+ 'date' => '加入日其',
+ 'author' => '提交者',
+ 'hits' => '点击'
+);
+###############################################################################
+# for the submission form
+/**
+* the link plugin's lang submit form array
+* 
+* @global array $LANG_LINKS_SUBMIT 
+*/
+$LANG_LINKS_SUBMIT = array(
+    1 => '提交一个联结',
+    2 => '联结',
+    3 => '类别',
+    4 => '其他',
+    5 => '若其他, 情指定',
+    6 => '错误: 无类别',
+    7 => '若选 "其他" 请提供类别名称',
+    8 => '标题',
+    9 => '网址',
+    10 => '类别',
+    11 => '提交联结'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "谢谢你给本站提交一个联结. 此联结已提交到管理员处等待批准. 若批准，你的联结将显示在<a href={$_CONF['site_url']}/links/index.php>联结</a>处.";
+$PLG_links_MESSAGE2 = '你的连接已存续成功.';
+$PLG_links_MESSAGE3 = '联结已成功的删除.';
+$PLG_links_MESSAGE4 = "谢谢你为本站提交一个联结.  你的连接现在已显现在<a href={$_CONF['site_url']}/links/index.php>联结</a>处.";
+
+###############################################################################
+# admin/link.php
+/**
+* the link plugin's lang admin array
+* 
+* @global array $LANG_LINKS_ADMIN 
+*/
+$LANG_LINKS_ADMIN = array(
+    1 => '联结编辑器',
+    2 => '联结ID',
+    3 => '联结标题',
+    4 => '联结网址',
+    5 => '类别',
+    6 => '(请包括 http://)',
+    7 => '其他',
+    8 => '联结采样数',
+    9 => '联结描述',
+    10 => '你需要提供联结得标题, 网址及描述.',
+    11 => '联结管理器',
+    12 => '若要更改或删除一个联结，请点击一下那联结的编辑标图.  若要建立一个新的联结请点击以上的 "建新".',
+    14 => '联结类别',
+    16 => '拒绝进入',
+    17 => "你再使用一个你没有权的联结.  此企图已被记录. 请<a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">回到连接管理处</a>.",
+    20 => '若是其他, 请注明',
+    21 => '存续',
+    22 => '取消',
+    23 => '删除',
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/chinese_traditional_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/chinese_traditional_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/chinese_traditional_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/chinese_traditional_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,136 @@
+<?php
+
+###############################################################################
+# chinese_traditional_utf-8.php
+#
+# This is the Chinese Traditional (UTF-8) language set for GeekLog Links plugin
+# 
+# Last updated January 10, 2006
+#
+# Copyright (C) 2005 Samuel M. Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+/**
+* the link plugin's lang array
+* 
+* @global array $LANG_LINKS 
+*/
+$LANG_LINKS= array(
+    10 => '提交物',
+    14 => '連結',
+    84 => '連結',
+    88 => '沒有新的連結',
+    114 => '網際資源',
+    116 => '加一聯結'
+);
+
+###############################################################################
+# for stats
+/**
+* the link plugin's lang stats array
+* 
+* @global array $LANG_LINKS_STATS
+*/
+$LANG_LINKS_STATS = array(
+    'links' => '系統裏的聯結(點擊)',
+    'stats_headline' => '頭十個聯結',
+    'stats_page_title' => '聯結',
+    'stats_hits' => '採樣數',
+    'stats_no_hits' => '看來本站沒有連結或是沒人點擊過本站的連結。',
+);
+
+###############################################################################
+# for the search
+/**
+* the link plugin's lang search array
+* 
+* @global array $LANG_LINKS_SEARCH 
+*/
+$LANG_LINKS_SEARCH = array(
+ 'results' => '聯結結果',
+ 'title' => '標題',
+ 'date' => '加入日其',
+ 'author' => '提交者',
+ 'hits' => '點擊'
+);
+###############################################################################
+# for the submission form
+/**
+* the link plugin's lang submit form array
+* 
+* @global array $LANG_LINKS_SUBMIT 
+*/
+$LANG_LINKS_SUBMIT = array(
+    1 => '提交一個聯結',
+    2 => '聯結',
+    3 => '類別',
+    4 => '其他',
+    5 => '若其他, 情指定',
+    6 => '錯誤: 無類別',
+    7 => '若選 "其他" 請提供類別名稱',
+    8 => '標題',
+    9 => '網址',
+    10 => '類別',
+    11 => '提交聯結'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "謝謝你給本站提交一個聯結. 此聯結已提交到管理員處等待批准. 若批准，你的聯結將顯示在<a href={$_CONF['site_url']}/links/index.php>聯結</a>處.";
+$PLG_links_MESSAGE2 = '你的連接已存續成功.';
+$PLG_links_MESSAGE3 = '聯結已成功的刪除.';
+$PLG_links_MESSAGE4 = "謝謝你為本站提交一個聯結.  你的連接現在已顯現在<a href={$_CONF['site_url']}/links/index.php>聯結</a>處.";
+
+###############################################################################
+# admin/link.php
+/**
+* the link plugin's lang admin array
+* 
+* @global array $LANG_LINKS_ADMIN 
+*/
+$LANG_LINKS_ADMIN = array(
+    1 => '聯結編輯器',
+    2 => '聯結ID',
+    3 => '聯結標題',
+    4 => '聯結網址',
+    5 => '類別',
+    6 => '(請包括 http://)',
+    7 => '其他',
+    8 => '聯結採樣數',
+    9 => '聯結描述',
+    10 => '你需要提供聯結得標題, 網址及描述.',
+    11 => '聯結管理器',
+    12 => '若要更改或刪除一個聯結，請點擊一下那聯結的編輯標圖.  若要建立一個新的聯結請點擊以上的 "建新".',
+    14 => '聯結類別',
+    16 => '拒絕進入',
+    17 => "你再使用一個你沒有權的聯結.  此企圖已被記錄. 請<a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">回到連接管理處</a>.",
+    20 => '若是其他, 請注明',
+    21 => '存續',
+    22 => '取消',
+    23 => '刪除',
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/dutch.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/dutch.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/dutch.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/dutch.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,155 @@
+<?php
+
+###############################################################################
+# dutch.php
+# This is the Dutch language file for the Geeklog Links plugin
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: dutch.php,v 1.1.2.2 2006/03/04 20:54:11 dhaun Exp $
+
+/** 
+ * This is the english language page for the Geeklog links Plug-in! 
+ * 
+ * @package Links
+ * @subpackage Language
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+/**
+* the link plugin's lang array
+* 
+* @global array $LANG_LINKS 
+*/
+$LANG_LINKS= array(
+    10 => 'Ingezonden links',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'Geen recente nieuwe links',
+    114 => 'Links',
+    116 => 'Link toevoegen'
+);
+
+###############################################################################
+# for stats
+/**
+* the link plugin's lang stats array
+* 
+* @global array $LANG_LINKS_STATS
+*/
+$LANG_LINKS_STATS = array(
+    'links' => 'Links (Kliks) in het systeem',
+    'stats_headline' => 'Top Tien Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Hits',
+    'stats_no_hits' => 'Er zijn nog geen links aanwezig of er is nog niet op geklikt.',
+);
+
+###############################################################################
+# for the search
+/**
+* the link plugin's lang search array
+* 
+* @global array $LANG_LINKS_SEARCH 
+*/
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Link resultaten',
+ 'title' => 'Titel',
+ 'date' => 'Toegevoegd op',
+ 'author' => 'Ingezonden door',
+ 'hits' => 'Kliks'
+);
+###############################################################################
+# for the submission form
+/**
+* the link plugin's lang submit form array
+* 
+* @global array $LANG_LINKS_SUBMIT 
+*/
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Link voorstellen',
+    2 => 'Link',
+    3 => 'Categorie',
+    4 => 'Anders',
+    5 => 'Indien anders, geef op',
+    6 => 'Fout: categorie ontbreekt',
+    7 => 'Wanneer "Anders" is geselecteerd geef dan naam van de nieuwe categorie op',
+    8 => 'Titel',
+    9 => 'URL',
+    10 => 'Categorie',
+    11 => 'Ingezonden links'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Hartelijk dank voor het voorstellen van uw link op {$_CONF['site_name']}.  De link is voorgesteld aan de beheerder ter goedkeuring. Indien accoord, wordt uw link opgenomen in de  <a href={$_CONF['site_url']}/links/index.php>links</a> directory.";
+$PLG_links_MESSAGE2 = 'De link is opgeslagen.';
+$PLG_links_MESSAGE3 = 'De link is verwijderd.';
+$PLG_links_MESSAGE4 = "Hartelijk dank voor het toevoegen van uw link op {$_CONF['site_name']}.  De link is opgenomen in de <a href={$_CONF['site_url']}/links/index.php>links</a> directory.";
+
+###############################################################################
+# admin/link.php
+/**
+* the link plugin's lang admin array
+* 
+* @global array $LANG_LINKS_ADMIN 
+*/
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link Editor',
+    2 => 'Link ID',
+    3 => 'Link Titel',
+    4 => 'Link URL',
+    5 => 'Categorie',
+    6 => '(inclusief http://)',
+    7 => 'Anders',
+    8 => 'Link Hits',
+    9 => 'Link omschrijving',
+    10 => 'U dient een link titel, URL en omschrijving op te geven.',
+    11 => 'Link Manager',
+    12 => 'Om een link te wijzigen of verwijderen, klik op het Edit icoontje naast de link.  Om een nieuwe link toe te voegen, klik op "Link toevoegen" hierboven.',
+    14 => 'Link Categorie',
+    16 => 'Toegang geweigerd',
+    17 => "U probeert een link waar u geen toegang toe heeft te bewerken.  Deze poging is vastgelegd. Ga AUB terug naar de <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">linkmanager</a>.",
+    20 => 'Indien anders, geef op',
+    21 => 'opslaan',
+    22 => 'annuleer',
+    23 => 'verwijder'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/english.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/english.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/english.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/english.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,155 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for the Geeklog links Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: english.php,v 1.10 2005/11/26 06:37:32 trinity Exp $
+
+/** 
+ * This is the english language page for the Geeklog links Plug-in! 
+ * 
+ * @package Links
+ * @subpackage Language
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+/**
+* the link plugin's lang array
+* 
+* @global array $LANG_LINKS 
+*/
+$LANG_LINKS= array(
+    10 => 'Submissions',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'No recent new links',
+    114 => 'Web Resources',
+    116 => 'Add A Link'
+);
+
+###############################################################################
+# for stats
+/**
+* the link plugin's lang stats array
+* 
+* @global array $LANG_LINKS_STATS
+*/
+$LANG_LINKS_STATS = array(
+    'links' => 'Links (Clicks) in the System',
+    'stats_headline' => 'Top Ten Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Hits',
+    'stats_no_hits' => 'It appears that there are no links on this site or no one has ever clicked on one.',
+);
+
+###############################################################################
+# for the search
+/**
+* the link plugin's lang search array
+* 
+* @global array $LANG_LINKS_SEARCH 
+*/
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Link Results',
+ 'title' => 'Title',
+ 'date' => 'Date Added',
+ 'author' => 'Submited by',
+ 'hits' => 'Clicks'
+);
+###############################################################################
+# for the submission form
+/**
+* the link plugin's lang submit form array
+* 
+* @global array $LANG_LINKS_SUBMIT 
+*/
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Submit a Link',
+    2 => 'Link',
+    3 => 'Category',
+    4 => 'Other',
+    5 => 'If other, please specify',
+    6 => 'Error: Missing Category',
+    7 => 'When selecting "Other" please also provide a category name',
+    8 => 'Title',
+    9 => 'URL',
+    10 => 'Category',
+    11 => 'Link Submissions'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links/index.php>links</a> section.";
+$PLG_links_MESSAGE2 = 'Your link has been successfully saved.';
+$PLG_links_MESSAGE3 = 'The link has been successfully deleted.';
+$PLG_links_MESSAGE4 = "Thank-you for submitting a link to {$_CONF['site_name']}.  You can see it now in the <a href={$_CONF['site_url']}/links/index.php>links</a> section.";
+
+###############################################################################
+# admin/link.php
+/**
+* the link plugin's lang admin array
+* 
+* @global array $LANG_LINKS_ADMIN 
+*/
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link Editor',
+    2 => 'Link ID',
+    3 => 'Link Title',
+    4 => 'Link URL',
+    5 => 'Category',
+    6 => '(include http://)',
+    7 => 'Other',
+    8 => 'Link Hits',
+    9 => 'Link Description',
+    10 => 'You need to provide a link Title, URL and Description.',
+    11 => 'Link Manager',
+    12 => 'To modify or delete a link, click on that link\'s edit icon below.  To create a new link, click on "Create New" above.',
+    14 => 'Link Category',
+    16 => 'Access Denied',
+    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">go back to the link administration screen</a>.",
+    20 => 'If other, specify',
+    21 => 'save',
+    22 => 'cancel',
+    23 => 'delete'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/english_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/english_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/english_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/english_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,155 @@
+<?php
+
+###############################################################################
+# english_utf-8.php
+# This is the english language page for the Geeklog links Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: english_utf-8.php,v 1.1 2006/02/11 12:43:22 dhaun Exp $
+
+/** 
+ * This is the english language page for the Geeklog links Plug-in! 
+ * 
+ * @package Links
+ * @subpackage Language
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+/**
+* the link plugin's lang array
+* 
+* @global array $LANG_LINKS 
+*/
+$LANG_LINKS= array(
+    10 => 'Submissions',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'No recent new links',
+    114 => 'Web Resources',
+    116 => 'Add A Link'
+);
+
+###############################################################################
+# for stats
+/**
+* the link plugin's lang stats array
+* 
+* @global array $LANG_LINKS_STATS
+*/
+$LANG_LINKS_STATS = array(
+    'links' => 'Links (Clicks) in the System',
+    'stats_headline' => 'Top Ten Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Hits',
+    'stats_no_hits' => 'It appears that there are no links on this site or no one has ever clicked on one.',
+);
+
+###############################################################################
+# for the search
+/**
+* the link plugin's lang search array
+* 
+* @global array $LANG_LINKS_SEARCH 
+*/
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Link Results',
+ 'title' => 'Title',
+ 'date' => 'Date Added',
+ 'author' => 'Submited by',
+ 'hits' => 'Clicks'
+);
+###############################################################################
+# for the submission form
+/**
+* the link plugin's lang submit form array
+* 
+* @global array $LANG_LINKS_SUBMIT 
+*/
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Submit a Link',
+    2 => 'Link',
+    3 => 'Category',
+    4 => 'Other',
+    5 => 'If other, please specify',
+    6 => 'Error: Missing Category',
+    7 => 'When selecting "Other" please also provide a category name',
+    8 => 'Title',
+    9 => 'URL',
+    10 => 'Category',
+    11 => 'Link Submissions'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Thank-you for submitting a link to {$_CONF['site_name']}.  It has been submitted to our staff for approval.  If approved, your link will be seen in the <a href={$_CONF['site_url']}/links/index.php>links</a> section.";
+$PLG_links_MESSAGE2 = 'Your link has been successfully saved.';
+$PLG_links_MESSAGE3 = 'The link has been successfully deleted.';
+$PLG_links_MESSAGE4 = "Thank-you for submitting a link to {$_CONF['site_name']}.  You can see it now in the <a href={$_CONF['site_url']}/links/index.php>links</a> section.";
+
+###############################################################################
+# admin/link.php
+/**
+* the link plugin's lang admin array
+* 
+* @global array $LANG_LINKS_ADMIN 
+*/
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link Editor',
+    2 => 'Link ID',
+    3 => 'Link Title',
+    4 => 'Link URL',
+    5 => 'Category',
+    6 => '(include http://)',
+    7 => 'Other',
+    8 => 'Link Hits',
+    9 => 'Link Description',
+    10 => 'You need to provide a link Title, URL and Description.',
+    11 => 'Link Manager',
+    12 => 'To modify or delete a link, click on that link\'s edit icon below.  To create a new link, click on "Create New" above.',
+    14 => 'Link Category',
+    16 => 'Access Denied',
+    17 => "You are trying to access a link that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">go back to the link administration screen</a>.",
+    20 => 'If other, specify',
+    21 => 'save',
+    22 => 'cancel',
+    23 => 'delete'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/german_formal.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german_formal.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/german_formal.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german_formal.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,121 @@
+<?php
+
+###############################################################################
+# german_formal.php
+#
+# This is the German language file for the Geeklog Links Plugin,
+# addressing the user as "Sie" (formal German).
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german_formal.php,v 1.1 2005/12/12 21:01:30 dhaun Exp $
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_LINKS= array(
+    10 => 'Beitrge',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'Es gibt keine Links anzuzeigen.',
+    114 => 'Links',
+    116 => 'Link hinzufgen'
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => 'Anzahl Links (Klicks)',
+    'stats_headline' => 'Top Ten der Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Angeklickt',
+    'stats_no_hits' => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.'
+);
+
+###############################################################################
+# for the search
+
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Ergebnisse: Links',
+ 'title' => 'Titel',
+ 'date' => 'Hinzugefgt',
+ 'author' => 'Eingereicht von',
+ 'hits' => 'Angeklickt'
+);
+
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Einen Link einreichen',
+    2 => 'Link',
+    3 => 'Kategorie',
+    4 => 'Andere',
+    5 => 'oder neue Kategorie',
+    6 => 'Fehler: Kategorie fehlt',
+    7 => 'Wenn Sie "Andere" auswhlen, geben Sie bitte auch eine neue Kategorie ein',
+    8 => 'Titel',
+    9 => 'URL',
+    10 => 'Kategorie',
+    11 => 'Beitrge: Links'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Danke fr Ihren Beitrag zu {$_CONF['site_name']}. Ihr Link wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a> aufgelistet werden.";
+$PLG_links_MESSAGE2 = 'Ihr Link wurde gespeichert.';
+$PLG_links_MESSAGE3 = 'Der Link wurde gelscht.';
+$PLG_links_MESSAGE4 = "Danke fr Ihren Link. Sie finden ihn nun unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a>.";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link-Editor',
+    2 => 'Link-ID',
+    3 => 'Titel',
+    4 => 'URL',
+    5 => 'Kategorie',
+    6 => '(mit http://)',
+    7 => 'Andere',
+    8 => 'Angeklickt',
+    9 => 'Beschreibung',
+    10 => 'Sie mssen einen Titel, eine URL und eine Beschreibung fr den Link eben.',
+    11 => 'Link-Manager',
+    12 => 'Auf das ndern-Icon klicken, um einen Link zu ndern oder zu lschen.  
+Mit Neu anlegen (s.o.) kann ein neuer Link angelegt werden.',
+    13 => 'Titel',
+    14 => 'Kategorie',
+    15 => 'URL',
+    16 => 'Zugriff verweigert',
+    17 => "Sie haben keine Zugriffsrechte fr diesen Link. Dieser Zugriffsversuch  wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">Zurck zum  Administrator-Men</a>.",
+    20 => 'Andere bitte eingeben',
+    21 => 'Speichern',
+    22 => 'Abbruch',
+    23 => 'Lschen'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/german_formal_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german_formal_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/german_formal_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german_formal_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,121 @@
+<?php
+
+###############################################################################
+# german_formal_utf-8.php
+#
+# This is the German language file for the Geeklog Links Plugin,
+# addressing the user as "Sie" (formal German).
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german_formal_utf-8.php,v 1.1 2005/12/12 21:01:30 dhaun Exp $
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_LINKS= array(
+    10 => 'Beiträge',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'Es gibt keine Links anzuzeigen.',
+    114 => 'Links',
+    116 => 'Link hinzufügen'
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => 'Anzahl Links (Klicks)',
+    'stats_headline' => 'Top Ten der Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Angeklickt',
+    'stats_no_hits' => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.'
+);
+
+###############################################################################
+# for the search
+
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Ergebnisse: Links',
+ 'title' => 'Titel',
+ 'date' => 'Hinzugefügt',
+ 'author' => 'Eingereicht von',
+ 'hits' => 'Angeklickt'
+);
+
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Einen Link einreichen',
+    2 => 'Link',
+    3 => 'Kategorie',
+    4 => 'Andere',
+    5 => 'oder neue Kategorie',
+    6 => 'Fehler: Kategorie fehlt',
+    7 => 'Wenn Sie "Andere" auswählen, geben Sie bitte auch eine neue Kategorie ein',
+    8 => 'Titel',
+    9 => 'URL',
+    10 => 'Kategorie',
+    11 => 'Beiträge: Links'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Danke für Ihren Beitrag zu {$_CONF['site_name']}. Ihr Link wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a> aufgelistet werden.";
+$PLG_links_MESSAGE2 = 'Ihr Link wurde gespeichert.';
+$PLG_links_MESSAGE3 = 'Der Link wurde gelöscht.';
+$PLG_links_MESSAGE4 = "Danke für Ihren Link. Sie finden ihn nun unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a>.";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link-Editor',
+    2 => 'Link-ID',
+    3 => 'Titel',
+    4 => 'URL',
+    5 => 'Kategorie',
+    6 => '(mit http://)',
+    7 => 'Andere',
+    8 => 'Angeklickt',
+    9 => 'Beschreibung',
+    10 => 'Sie müssen einen Titel, eine URL und eine Beschreibung für den Link eben.',
+    11 => 'Link-Manager',
+    12 => 'Auf das Ändern-Icon klicken, um einen Link zu ändern oder zu löschen.  
+Mit Neu anlegen (s.o.) kann ein neuer Link angelegt werden.',
+    13 => 'Titel',
+    14 => 'Kategorie',
+    15 => 'URL',
+    16 => 'Zugriff verweigert',
+    17 => "Sie haben keine Zugriffsrechte für diesen Link. Dieser Zugriffsversuch  wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">Zurück zum  Administrator-Menü</a>.",
+    20 => 'Andere bitte eingeben',
+    21 => 'Speichern',
+    22 => 'Abbruch',
+    23 => 'Löschen'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/german.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/german.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,120 @@
+<?php
+
+###############################################################################
+# german.php
+#
+# This is the German language file for the Geeklog Links Plugin
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german.php,v 1.2 2005/12/12 21:01:30 dhaun Exp $
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_LINKS= array(
+    10 => 'Beitrge',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'Es gibt keine Links anzuzeigen.',
+    114 => 'Links',
+    116 => 'Link hinzufgen'
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => 'Anzahl Links (Klicks)',
+    'stats_headline' => 'Top Ten der Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Angeklickt',
+    'stats_no_hits' => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.'
+);
+
+###############################################################################
+# for the search
+
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Ergebnisse: Links',
+ 'title' => 'Titel',
+ 'date' => 'Hinzugefgt',
+ 'author' => 'Eingereicht von',
+ 'hits' => 'Angeklickt'
+);
+
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Einen Link einreichen',
+    2 => 'Link',
+    3 => 'Kategorie',
+    4 => 'Andere',
+    5 => 'oder neue Kategorie',
+    6 => 'Fehler: Kategorie fehlt',
+    7 => 'Wenn Du "Andere" auswhlst, gib bitte auch eine neue Kategorie ein',
+    8 => 'Titel',
+    9 => 'URL',
+    10 => 'Kategorie',
+    11 => 'Beitrge: Links'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Danke fr Deinen Beitrag zu {$_CONF['site_name']}. Dein Link wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a> aufgelistet werden.";
+$PLG_links_MESSAGE2 = 'Dein Link wurde gespeichert.';
+$PLG_links_MESSAGE3 = 'Der Link wurde gelscht.';
+$PLG_links_MESSAGE4 = "Danke fr Deinen Link. Du findest ihn nun unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a>.";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link-Editor',
+    2 => 'Link-ID',
+    3 => 'Titel',
+    4 => 'URL',
+    5 => 'Kategorie',
+    6 => '(mit http://)',
+    7 => 'Andere',
+    8 => 'Angeklickt',
+    9 => 'Beschreibung',
+    10 => 'Du musst einen Titel, eine URL und eine Beschreibung fr den Link eben.',
+    11 => 'Link-Manager',
+    12 => 'Auf das ndern-Icon klicken, um einen Link zu ndern oder zu lschen.  
+Mit Neu anlegen (s.o.) kann ein neuer Link angelegt werden.',
+    13 => 'Titel',
+    14 => 'Kategorie',
+    15 => 'URL',
+    16 => 'Zugriff verweigert',
+    17 => "Du hast keine Zugriffsrechte fr diesen Link. Dieser Zugriffsversuch  wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">Zurck zum  Administrator-Men</a>.",
+    20 => 'Andere bitte eingeben',
+    21 => 'Speichern',
+    22 => 'Abbruch',
+    23 => 'Lschen'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/german_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/german_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/german_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,120 @@
+<?php
+
+###############################################################################
+# german_utf-8.php
+#
+# This is the German language file for the Geeklog Links Plugin
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german_utf-8.php,v 1.1 2005/12/12 21:01:30 dhaun Exp $
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_LINKS= array(
+    10 => 'Beiträge',
+    14 => 'Links',
+    84 => 'LINKS',
+    88 => 'Es gibt keine Links anzuzeigen.',
+    114 => 'Links',
+    116 => 'Link hinzufügen'
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => 'Anzahl Links (Klicks)',
+    'stats_headline' => 'Top Ten der Links',
+    'stats_page_title' => 'Links',
+    'stats_hits' => 'Angeklickt',
+    'stats_no_hits' => 'Es gibt keine Links oder sie wurden von niemandem angeklickt.'
+);
+
+###############################################################################
+# for the search
+
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Ergebnisse: Links',
+ 'title' => 'Titel',
+ 'date' => 'Hinzugefügt',
+ 'author' => 'Eingereicht von',
+ 'hits' => 'Angeklickt'
+);
+
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Einen Link einreichen',
+    2 => 'Link',
+    3 => 'Kategorie',
+    4 => 'Andere',
+    5 => 'oder neue Kategorie',
+    6 => 'Fehler: Kategorie fehlt',
+    7 => 'Wenn Du "Andere" auswählst, gib bitte auch eine neue Kategorie ein',
+    8 => 'Titel',
+    9 => 'URL',
+    10 => 'Kategorie',
+    11 => 'Beiträge: Links'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Danke für Deinen Beitrag zu {$_CONF['site_name']}. Dein Link wurde an unser Team weitergeleitet. Wenn er akzeptiert wird, wird er bald unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a> aufgelistet werden.";
+$PLG_links_MESSAGE2 = 'Dein Link wurde gespeichert.';
+$PLG_links_MESSAGE3 = 'Der Link wurde gelöscht.';
+$PLG_links_MESSAGE4 = "Danke für Deinen Link. Du findest ihn nun unter den <a href=\"{$_CONF['site_url']}/links/index.php\">Links</a>.";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => 'Link-Editor',
+    2 => 'Link-ID',
+    3 => 'Titel',
+    4 => 'URL',
+    5 => 'Kategorie',
+    6 => '(mit http://)',
+    7 => 'Andere',
+    8 => 'Angeklickt',
+    9 => 'Beschreibung',
+    10 => 'Du musst einen Titel, eine URL und eine Beschreibung für den Link eben.',
+    11 => 'Link-Manager',
+    12 => 'Auf das Ändern-Icon klicken, um einen Link zu ändern oder zu löschen.  
+Mit Neu anlegen (s.o.) kann ein neuer Link angelegt werden.',
+    13 => 'Titel',
+    14 => 'Kategorie',
+    15 => 'URL',
+    16 => 'Zugriff verweigert',
+    17 => "Du hast keine Zugriffsrechte für diesen Link. Dieser Zugriffsversuch  wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">Zurück zum  Administrator-Menü</a>.",
+    20 => 'Andere bitte eingeben',
+    21 => 'Speichern',
+    22 => 'Abbruch',
+    23 => 'Löschen'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/japanese.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/japanese.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/japanese.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/japanese.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,116 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for the Geeklog links Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: japanese.php,v 1.4 2006/02/04 13:16:59 dhaun Exp $
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+$LANG_LINKS= array(
+    10 => '',
+    14 => '',
+    84 => '',
+    88 => '󥯤Ϥޤ',
+    114 => '󥯽',
+    116 => '󥯤ɲ'
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => 'ϿƤ󥯡ʥå',
+    'stats_headline' => '(10)',
+    'stats_page_title' => '',
+    'stats_hits' => 'ҥå',
+    'stats_no_hits' => 'ΥȤˤϥ󥯤ĤʤåͤʤΤɤ餫Τ褦Ǥ',
+); 
+ 
+###############################################################################
+# for the search
+ 
+$LANG_LINKS_SEARCH = array(
+ 'results' => '󥯤θ',
+ 'title' => 'ȥ',
+ 'date' => 'ɲä',
+ 'author' => 'Ƽ',
+ 'hits' => 'å'
+);
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => '󥯤Ͽ',
+    2 => '',
+    3 => 'ƥ',
+    4 => '¾',
+    5 => 'õ',
+    6 => '顼ƥǤ',
+    7 => '֤¾פ򤹤ˤϿƥ̾Ƥ',
+    8 => 'ȥ',
+    9 => 'URL',
+    10 => 'ƥ',
+    11 => '󥯤Ͽ'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "{$_CONF['site_name']}˥󥯤ϿƤƤ꤬ȤåդƤǧƼ뤫ɤȽǤޤ줿硢<a href={$_CONF['site_url']}/links.php></a>˥󥯤ɽޤ";
+$PLG_links_MESSAGE2 = '󥯤̵Ͽޤ';
+$PLG_links_MESSAGE3 = '󥯤κλޤ';
+$PLG_links_MESSAGE4 = "{$_CONF['site_name']}˥󥯤ϿƤƤ꤬Ȥޤ󥯤<a href={$_CONF['site_url']}/links.php>links</a>ǳǧǤޤ";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => '󥯤Խ',
+    2 => 'ID',
+    3 => 'ȥ',
+    4 => 'URL',
+    5 => 'ƥ',
+    6 => '(http://ޤ)',
+    7 => '¾',
+    8 => '󥯤λ',
+    9 => '',
+    10 => 'ȥ롢URLɬפǤ',
+    11 => '󥯤δ',
+    12 => '󥯤ϳƥ󥯤ΡԽץ򥯥åƤϾΡֿפ򥯥åƤ',
+    14 => 'ƥ',
+    16 => 'ݤޤ',
+    17 => "¤Τʤ󥯤˥褦ȤޤΤǥ˵Ͽޤ<a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">󥯤δ̤ä</a>",
+    20 => '¾',
+    21 => '¸',
+    22 => '󥻥',
+    23 => ''
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/japanese_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/japanese_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/japanese_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/japanese_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,116 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for the Geeklog links Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: japanese_utf-8.php,v 1.3 2005/12/22 11:37:04 dhaun Exp $
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+$LANG_LINKS= array(
+    10 => '投稿',
+    14 => 'リンク',
+    84 => 'リンク',
+    88 => '新しいリンクはありません',
+    114 => 'リンク集',
+    116 => 'リンクの追加'
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => '登録されているリンク（クリック数）',
+    'stats_headline' => 'リンク(上位10件)',
+    'stats_page_title' => 'リンク',
+    'stats_hits' => 'ヒット',
+    'stats_no_hits' => 'このサイトにはリンクが一つもないか、クリックした人がいないかのどちらかのようです。',
+); 
+ 
+###############################################################################
+# for the search
+ 
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'リンクの検索結果',
+ 'title' => 'タイトル',
+ 'date' => '追加した日時',
+ 'author' => '投稿者',
+ 'hits' => 'クリック数'
+);
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => 'リンクの登録',
+    2 => 'リンク',
+    3 => 'カテゴリ',
+    4 => 'その他',
+    5 => '特記事項',
+    6 => 'エラー：カテゴリを選んでください',
+    7 => '「その他」を選択する場合には新しいカテゴリ名を記入してください。',
+    8 => 'タイトル',
+    9 => 'URL',
+    10 => 'カテゴリ',
+    11 => 'リンクを登録する'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "{$_CONF['site_name']}にリンクを登録してくれてありがとう。スタッフが内容を確認して受け入れるかどうか判断いたします。受け入れられた場合、<a href={$_CONF['site_url']}/links.php>リンク</a>セクションにリンクが表示されます。";
+$PLG_links_MESSAGE2 = 'リンクは無事登録されました。';
+$PLG_links_MESSAGE3 = 'リンクの削除が完了しました。';
+$PLG_links_MESSAGE4 = "{$_CONF['site_name']}にリンクを登録してくれてありがとうございます。リンクは<a href={$_CONF['site_url']}/links.php>links</a>で確認できます。";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => 'リンクの編集',
+    2 => 'ID',
+    3 => 'タイトル',
+    4 => 'URL',
+    5 => 'カテゴリ',
+    6 => '(http://を含む)',
+    7 => 'その他',
+    8 => 'リンクの参照',
+    9 => '説明',
+    10 => 'タイトル、URL、説明が必要です',
+    11 => 'リンクの管理',
+    12 => 'リンクを修正、削除する場合は各リンクの「編集」アイコンをクリックしてください。新規作成は上の「新規」をクリックしてください。',
+    14 => 'カテゴリ',
+    16 => 'アクセスが拒否されました',
+    17 => "権限のないリンクにアクセスしようとしましたのでログに記録しました。<a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">リンクの管理画面に戻って</a>ください。",
+    20 => 'その他を指定',
+    21 => '保存',
+    22 => 'キャンセル',
+    23 => '削除'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/polish.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/polish.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/polish.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/polish.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,152 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the polish language page for the Geeklog links Plug-in!
+#
+# Copyright (C) 2006 Robert Stadnik
+# geeklog_pl AT geeklog DOT now DOT pl
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: polish.php,v 1.1 2006/02/11 14:02:09 dhaun Exp $
+
+/** 
+ * This is the english language page for the Geeklog links Plug-in! 
+ * 
+ * @package Links
+ * @subpackage Language
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+/**
+* the link plugin's lang array
+* 
+* @global array $LANG_LINKS 
+*/
+$LANG_LINKS= array(
+    10 => 'Przesane Linki',
+    14 => 'Linki',
+    84 => 'LINKI',
+    88 => 'Brak nowych linkw',
+    114 => 'Linki',
+    116 => 'Dodaj Link'
+);
+
+###############################################################################
+# for stats
+/**
+* the link plugin's lang stats array
+* 
+* @global array $LANG_LINKS_STATS
+*/
+$LANG_LINKS_STATS = array(
+    'links' => 'Liczba Linkw (Klikni) w Serwisie',
+    'stats_headline' => '10 Najpopularniejszych Linkw',
+    'stats_page_title' => 'Linki',
+    'stats_hits' => 'Odson',
+    'stats_no_hits' => 'Wyglda na to, e nie ma adnych linkw albo nikt jeszcze nie klikn na aden link.',
+);
+
+###############################################################################
+# for the search
+/**
+* the link plugin's lang search array
+* 
+* @global array $LANG_LINKS_SEARCH 
+*/
+$LANG_LINKS_SEARCH = array(
+ 'results' => 'Linki - Wyniki',
+ 'title' => 'Tytu',
+ 'date' => 'Dodano',
+ 'author' => 'Przesany przez',
+ 'hits' => 'Klikni'
+);
+###############################################################################
+# for the submission form
+/**
+* the link plugin's lang submit form array
+* 
+* @global array $LANG_LINKS_SUBMIT 
+*/
+$LANG_LINKS_SUBMIT = array(
+    1 => 'Przelij Link',
+    2 => 'Link',
+    3 => 'Kategoria',
+    4 => 'Inne',
+    5 => 'Jeli Inne, prosz sprecyzowa jaka',
+    6 => 'B: Brak Kategorii',
+    7 => 'Podczas wyboru "Inne" prosz poda nazw kategorii',
+    8 => 'Tytu',
+    9 => 'URL',
+    10 => 'Kategoria',
+    11 => 'Przelij Link'
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "Dzikuj za przesanie linka.  Po zatwierdzeniu link pojawi si w sekcji <a href={$_CONF['site_url']}/links/index.php>linki</a>.";
+$PLG_links_MESSAGE2 = 'Link zosta zapisany.';
+$PLG_links_MESSAGE3 = 'Link zosta wykasowany.';
+$PLG_links_MESSAGE4 = "Dzikuj za przesanie linka.  Link jest dostpny w sekcji <a href={$_CONF['site_url']}/links/index.php>linki</a>.";
+
+###############################################################################
+# admin/link.php
+/**
+* the link plugin's lang admin array
+* 
+* @global array $LANG_LINKS_ADMIN 
+*/
+$LANG_LINKS_ADMIN = array(
+    1 => 'Edytor Linkw',
+    2 => 'ID Linka',
+    3 => 'Tytu Linka',
+    4 => 'URL Link',
+    5 => 'Kategoria',
+    6 => '(wcznie z http://)',
+    7 => 'Inne',
+    8 => 'Odson',
+    9 => 'Opis Linka',
+    10 => 'Musisz poda Tytu, URL, i Opis.',
+    11 => 'Menader Linkw',
+    12 => 'Aby zmodyfikowa lub wykasowa link, kliknij na ikon edycji poniej.  Aby stworzy nowy link, kliknij na "Nowy Link" powyej.',
+    14 => 'Kategoria Linka',
+    16 => 'Odmowa Dostpu',
+    17 => "Nie masz uprawnie do tego linka.  Twoja prba wejcia zostaa zarejestrowana w logu. Prosz <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">do ekranu zarzdzania linkami</a>.",
+    20 => 'Jeli inna, podaj jaka',
+    21 => 'zapisz',
+    22 => 'anuluj',
+    23 => 'kasuj'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/README 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/README
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/README	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/README	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,7 @@
+This directory contains the language files for the polls plugin. The
+plugin will pick the appropriate language file automatically based on the
+language settings in your user settings or the default language in config.php.
+
+If there is no language file for your language, then the plugin will revert
+to english.php.
+
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/russian.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/russian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/russian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/russian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,114 @@
+<?php
+
+###############################################################################
+# russian.php
+# This is the russian language page for the Geeklog Links Plug-in!
+#
+# Copyright (C) 2006 Volodymyr V. Prokurashko
+# vvprok@ukr.net
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_LINKS= array(
+    10 => '',
+    14 => '',
+    84 => '',
+    88 => '  ',
+    114 => '',
+    116 => ' '
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => ' ()  ',
+    'stats_headline' => '10   ',
+    'stats_page_title' => '',
+    'stats_hits' => '',
+    'stats_no_hits' => '    ,     .',
+);
+
+###############################################################################
+# for the search
+
+$LANG_LINKS_SEARCH = array(
+ 'results' => '   ',
+ 'title' => '',
+ 'date' => '',
+ 'author' => '',
+ 'hits' => ''
+);
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => ' ',
+    2 => '',
+    3 => '',
+    4 => '',
+    5 => ' "", ',
+    6 => ':  ',
+    7 => ' "", ,   ',
+    8 => '',
+    9 => 'URL',
+    10 => '',
+    11 => ' '
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "    {$_CONF['site_name']} !       .    ,      <a href={$_CONF['site_url']}/links/index.php></a>.";
+$PLG_links_MESSAGE2 = '   .';
+$PLG_links_MESSAGE3 = '  .';
+$PLG_links_MESSAGE4 = "    {$_CONF['site_name']} !      <a href={$_CONF['site_url']}/links/index.php></a>.";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => ' ',
+    2 => 'ID ',
+    3 => '',
+    4 => 'URL',
+    5 => '',
+    6 => '( http://)',
+    7 => '',
+    8 => '  ',
+    9 => '',
+    10 => '   , URL  .',
+    11 => ' ',
+    12 => '     ,    ,   .      ,  " " .',
+    14 => ' ',
+    16 => ' ',
+    17 => "         .      .  , <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">  </a>.",
+    20 => ' , ',
+    21 => '',
+    22 => '',
+    23 => ''
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/language/ukrainian.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/ukrainian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/language/ukrainian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/language/ukrainian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,115 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the ukrainian language page for the Geeklog Links Plug-in!
+#
+# Copyright (C) 2005 Vitaliy Biliyenko
+# v.lokki@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: ukrainian.php,v 1.1 2005/12/22 11:56:37 dhaun Exp $
+
+###############################################################################
+# Array Format:
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_LINKS= array(
+    10 => '',
+    14 => '',
+    84 => '',
+    88 => '  ',
+    114 => ' ',
+    116 => ' '
+);
+
+###############################################################################
+# for stats
+
+$LANG_LINKS_STATS = array(
+    'links' => '˳ ()  ',
+    'stats_headline' => '10  ',
+    'stats_page_title' => '',
+    'stats_hits' => 'ճ',
+    'stats_no_hits' => '    ,      .',
+);
+
+###############################################################################
+# for the search
+
+$LANG_LINKS_SEARCH = array(
+ 'results' => '  ',
+ 'title' => '',
+ 'date' => '',
+ 'author' => '',
+ 'hits' => ''
+);
+###############################################################################
+# for the submission form
+
+$LANG_LINKS_SUBMIT = array(
+    1 => ' ',
+    2 => '',
+    3 => '',
+    4 => '',
+    5 => ' , ',
+    6 => ': ³ ',
+    7 => ' "", -,   ',
+    8 => '',
+    9 => 'URL',
+    10 => '',
+    11 => ' '
+);
+
+###############################################################################
+# Messages for COM_showMessage the submission form
+
+$PLG_links_MESSAGE1 = "    {$_CONF['site_name']} .       .          <a href={$_CONF['site_url']}/links/index.php> </a>.";
+$PLG_links_MESSAGE2 = '   .';
+$PLG_links_MESSAGE3 = '  .';
+$PLG_links_MESSAGE4 = "    {$_CONF['site_name']} .      <a href={$_CONF['site_url']}/links/index.php> </a>.";
+
+###############################################################################
+# admin/link.php
+
+$LANG_LINKS_ADMIN = array(
+    1 => ' ',
+    2 => 'ID ',
+    3 => '',
+    4 => 'URL',
+    5 => '',
+    6 => '( http://)',
+    7 => '',
+    8 => 'ճ ',
+    9 => '',
+    10 => '   , URL  .',
+    11 => ' ',
+    12 => '    ,     .     ,  " " .',
+    14 => ' ',
+    16 => ' ',
+    17 => "     ,      .    . -, <a href=\"{$_CONF['site_admin_url']}/plugins/links/index.php\">  </a>.",
+    20 => ' , ',
+    21 => '',
+    22 => '',
+    23 => ''
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/sql/install.php 1.4.0sr5-1/cpanel-glprivate/plugins/links/sql/install.php
--- 1.3.11sr1/cpanel-glprivate/plugins/links/sql/install.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/sql/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,90 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Links Plugin 1.0                                                          |
+// +---------------------------------------------------------------------------+
+// | Installation SQL                                                          |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Trinity Bays      - trinity AT steubentech DOT com               |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is licensed under the terms of the GNU General Public License|
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                      |
+// | See the GNU General Public License for more details.                      |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+
+/** 
+ * Links plugin Installation SQL  
+ * 
+ * @package Links
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+
+
+// $Id: install.php,v 1.2 2005/11/26 06:37:34 trinity Exp $
+
+$_SQL[] = "
+CREATE TABLE {$_TABLES['links']} (
+  lid varchar(20) NOT NULL default '',
+  category varchar(32) default NULL,
+  url varchar(255) default NULL,
+  description text,
+  title varchar(96) default NULL,
+  hits int(11) NOT NULL default '0',
+  date datetime default NULL,
+  owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
+  perm_owner tinyint(1) unsigned NOT NULL default '3',
+  perm_group tinyint(1) unsigned NOT NULL default '2',
+  perm_members tinyint(1) unsigned NOT NULL default '2',
+  perm_anon tinyint(1) unsigned NOT NULL default '2',
+  INDEX links_lid(lid),
+  INDEX links_category(category),
+  INDEX links_date(date),
+  PRIMARY KEY  (lid)
+) TYPE=MyISAM
+";
+
+$_SQL[] = "
+CREATE TABLE {$_TABLES['linksubmission']} (
+  lid varchar(20) NOT NULL default '',
+  category varchar(32) default NULL,
+  url varchar(255) default NULL,
+  description text,
+  title varchar(96) default NULL,
+  hits int(11) default NULL,
+  date datetime default NULL,
+  PRIMARY KEY  (lid)
+) TYPE=MyISAM
+";
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/admin/linkeditor.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/admin/linkeditor.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/admin/linkeditor.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/admin/linkeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,89 @@
+                                <form action="{site_admin_url}/plugins/links/index.php" method="post">
+                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
+
+                                        <tr>
+                                            <td align="right">{lang_linktitle}:</td>
+                                            <td>
+                                                <input type="text" size="48" maxlength="96" name="title" value="{link_title}">
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_linkid}:</td>
+                                            <td>
+                                                <input type="text" size="40" maxlength="40" name="lid" value="{link_id}">
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_linkurl}:</td>
+                                            <td>
+                                                <input type="text" size="48" maxlength="{max_url_length}" name="url" value="{link_url}"> {lang_includehttp}
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_category}:</td>
+                                            <td>
+                                                <select name="categorydd">
+                                                    {category_options}
+                                                </select>
+                                                {lang_ifotherspecify}: <input type="text" name="category" size="12" maxlength="32" value="{category}">
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_linkhits}:</td>
+                                            <td>
+                                                <input type="text" size="11" name="hits" value="{link_hits}">
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right" valign="top">{lang_linkdescription}:</td>
+                                            <td>
+                                                <textarea name="description" cols="50" rows="8">{link_description}</textarea>
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"><hr><td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"><b>{lang_accessrights}</b></td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_owner}:</td>
+                                            <td>{owner_username}<input type="hidden" name="owner_id" value="{link_ownerid}"></td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_group}:</td>
+                                            <td>
+                                                {group_dropdown}
+                                            </td>
+                                        <tr>
+                                        <tr>
+                                            <td colspan="2"><b>{lang_permissions}</b>:</td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"></td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2">{lang_permissionskey}</td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2">
+                                                {permissions_editor}
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2">{lang_lockmsg}<td>
+                                        </tr>
+                                        <tr><td>&nbsp;</td></tr>
+                                        <tr>
+                                            <td colspan="2">
+                                                <input type="submit" value="{lang_save}" name="mode"> 
+                                                <input type="submit" value="{lang_cancel}" name="mode">
+                                                <input type="hidden" value="{link_id}" name="old_lid">
+                                                {delete_option}
+                                            </td>
+                                        </tr>
+                                    </table>
+                                </form>
+<script language="JavaScript1.2" defer>
+editor_generate('description');
+</script>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categoryactivecol.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categoryactivecol.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categoryactivecol.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categoryactivecol.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<td width="{width}%"><strong>{category_name} ({category_count})</strong></td>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categorycol.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categorycol.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categorycol.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categorycol.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<td width="{width}%"><a href="{category_link}">{category_name}</a> ({category_count})</td>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categorylinks.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categorylinks.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categorylinks.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categorylinks.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<h3>{link_category}</h3>
+<ul>
+  {link_details}
+</ul>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categorynavigation.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categorynavigation.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categorynavigation.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categorynavigation.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+<h2>{lang_categories}</h2>
+
+<table width="100%">
+{category_row}
+</table>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categoryrow.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categoryrow.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/categoryrow.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/categoryrow.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<tr>{category_col}</tr>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/linkdetails.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/linkdetails.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/linkdetails.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/linkdetails.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<li>
+  <strong><a href="{link_url}" title="{link_actual_url}">{link_name}</a></strong> ({link_hits}) {link_edit}<br>
+  {link_description}
+</li>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/links.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/links.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/links.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/links.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+{category_navigation}
+<p>[ <a href="{site_url}/submit.php?type=links">{lang_addalink}</a> ]</p>
+{category_links}
+{page_navigation}
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/pagenavigation.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/pagenavigation.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/pagenavigation.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/pagenavigation.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<p align="center">{begin_backlink}{lang_back}{end_backlink}&nbsp;[{lang_page_of}]&nbsp;{begin_nextlink}{lang_next}{end_nextlink}</p>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/links/templates/submitlink.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/submitlink.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/links/templates/submitlink.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/links/templates/submitlink.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,35 @@
+                            <form action="{site_url}/submit.php" method="post">
+                                <table border="0" cellspacing="0" cellpadding="3">
+                                    <tr>
+                                        <td align="right"><b>{lang_title}:</b></td>
+                                        <td><input type="text" size="36" maxlength="96" name="title"></td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right"><b>{lang_link}:</b></td>
+                                        <td><input type="text" size="36" maxlength="{max_url_length}" name="url" value="http://"></td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right"><b>{lang_category}:</b></td>
+                                        <td>
+                                            <select name="categorydd">
+                                                {link_category_options}<option>{lang_other}</option>
+                                            </select> 
+                                            <b>{lang_ifother}:</b> <input type="text" name="category" size="12" maxlength="32">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right" valign="top"><b>{lang_description}:</b></td>
+                                        <td><textarea name="description" cols="45" rows="8"></textarea></td>
+                                    </tr>
+                                    <tr>
+                                        <td align="center" colspan="2">{lang_htmlnotallowed}</td>
+                                    </tr>
+                                    <tr>
+                                        <td align="center" colspan="2">
+                                            <input type="hidden" name="mode" value="{lang_submit}">
+                                            <input type="hidden" name="type" value="links">
+                                            <input type="submit" value="{lang_submit}">
+                                        </td>
+                                    </tr>
+                                </table>
+                            </form>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/config.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/config.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/config.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/config.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,75 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Polls Plugin 1.0                                                          |
+// +---------------------------------------------------------------------------+
+// | config.php                                                                |
+// |                                                                           |
+// | Polls plugin configuration file                                           |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Trinity Bays      - trinity93 AT steubentech DOT com             |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: config.php,v 1.6 2005/09/18 12:09:45 dhaun Exp $
+
+$_PO_CONF['version']            = '1.0'; // Plugin Version
+
+// Poll Settings
+
+// when set to 1 will only allow logged-in users to view the list of past polls
+// (also see $_CONF['loginrequired'] in Geeklog's config.php)
+$_PO_CONF['pollsloginrequired'] = 0;
+
+$_PO_CONF['maxanswers']         = 10; // max. number of options in a poll
+
+// 'submitorder' is the order in which answers are saved in admin/poll.php
+// 'voteorder' will list answers ordered by number of votes (highest->lowest);
+$_PO_CONF['answerorder']        = 'submitorder';
+
+// how long a poll is closed for a user after they've voted
+$_PO_CONF['pollcookietime']     = 86400;  // seconds (= 24 hours)
+$_PO_CONF['polladdresstime']    = 604800; // seconds (= 7 days)
+
+// When a user is deleted, ownership of polls created by that user can
+// be transfered to a user in the Root group (= 0) or the polls can be
+// deleted (= 1).
+$_PO_CONF['delete_polls'] = 0;
+
+// Define default permissions for new polls created from the Admin panel.
+// Permissions are perm_owner, perm_group, perm_members, perm_anon (in that
+// order). Possible values:
+// 3 = read + write permissions (perm_owner and perm_group only)
+// 2 = read-only
+// 0 = neither read nor write permissions
+// (a value of 1, ie. write-only, does not make sense and is not allowed)
+$_PO_CONF['default_permissions'] = array (3, 2, 2, 2);
+
+// database table names - don't change
+$_TABLES['pollanswers']         = $_DB_table_prefix . 'pollanswers';
+$_TABLES['pollquestions']       = $_DB_table_prefix . 'pollquestions';
+$_TABLES['pollvoters']          = $_DB_table_prefix . 'pollvoters';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/functions.inc 1.4.0sr5-1/cpanel-glprivate/plugins/polls/functions.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/functions.inc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/functions.inc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,892 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Polls Plugin 1.0                                                          |
+// +---------------------------------------------------------------------------+
+// | functions.inc                                                             |
+// |                                                                           |
+// | This file does two things: 1) it implements the necessary Geeklog Plugin  |
+// | API method and 2) implements all the common code needed by the Polls      |
+// | plugin' PHP files.                                                        |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Tom Willett      - twillett AT users DOT sourceforge DOT net     |
+// |          Blaine Lang      - langmail AT sympatico DOT ca                  |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: functions.inc,v 1.37.2.1 2006/06/30 12:20:49 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'functions.inc') !== false) {
+    die ('This file can not be used on its own.');
+}
+
+$langfile = $_CONF['path'] . 'plugins/polls/language/'
+          . $_CONF['language'] . '.php';
+
+if (file_exists ($langfile)) {
+    require_once ($langfile);
+} else {
+    require_once ($_CONF['path'] . 'plugins/polls/language/english.php');
+}
+
+require_once ($_CONF['path'] . 'plugins/polls/config.php');
+
+
+// +---------------------------------------------------------------------------+
+// | Geeklog Plugin API Implementations                                        |
+// +---------------------------------------------------------------------------+
+
+/**
+* Returns the items for this plugin that should appear on the main menu
+*
+* NOTE: this MUST return the url/value pairs in the following format
+* $<arrayname>[<label>] = <url>
+*
+*/
+function plugin_getmenuitems_polls ()
+{
+    global $_CONF, $_PO_CONF, $LANG_POLLS;
+
+    $anon = (empty ($_USER['uid']) || ($_USER['uid'] <= 1)) ? true : false;
+    if($anon && ($_CONF['loginrequired'] || $_PO_CONF['pollsloginrequired'])) {
+        return false;
+    } else {
+        $menuitems[$LANG_POLLS['polls']] = $_CONF['site_url']
+                                         . '/polls/index.php';
+    }
+
+    return $menuitems;
+}
+
+/**
+* Geeklog is checking to see if this plugin supports comments, tell it yes.
+*
+* NOTE: to support comments you must used the same date/time based ID for your
+* widget.  In other words, to make primary keys for your plugin you should call
+* makesid().  Comments are keyed off of that...it is a limitation on how Geeklog
+* does comments.
+*
+*/
+function plugin_commentsupport_polls()
+{
+    // polls will use comments
+    return true;
+}
+
+/**
+ * Poll saves a comment
+ *
+ * @param   string  $type   Plugin to save comment
+ * @param   string  $title  comment title
+ * @param   string  $comment comment text
+ * @param   string  $id     Item id to which $cid belongs
+ * @param   int     $pid    comment parent
+ * @param   string  $postmode 'html' or 'text'
+ * @return  mixed   false for failure, HTML string (redirect?) for success
+ */
+function plugin_savecomment_polls($title, $comment, $id, $pid, $postmode)
+{
+    global $_CONF, $_TABLES, $LANG03, $_USER;
+
+    $retval = '';
+
+    $commentcode = DB_getItem ($_TABLES['pollquestions'], 'commentcode',
+                               "qid = '$id'");
+    if ($commentcode < 0) {
+        return COM_refresh ($_CONF['site_url'] . '/index.php');
+    }
+
+    $ret = CMT_saveComment ($title, $comment, $id, $pid, 'polls', $postmode);
+    if ($ret > 0) { // failure //FIXME: some failures should not return to comment form
+        $retval .= COM_siteHeader()
+            . CMT_commentForm ($_USER['uid'], $title, $comment, $id, $pid,
+                    'polls', $LANG03[14], $postmode)
+            . COM_siteFooter();
+    } else { // success
+        $retval = COM_refresh ($_CONF['site_url']
+                                . "/polls/index.php?qid=$id&aid=-1");
+    }
+
+    return $retval;
+}
+
+/**
+ * polls: delete a comment
+ *
+ * @param   int     $cid    Comment to be deleted
+ * @param   string  $id     Item id to which $cid belongs
+ * @return  mixed   false for failure, HTML string (redirect?) for success
+ */
+function plugin_deletecomment_polls($cid, $id)
+{
+    global $_CONF, $_TABLES, $_USER;
+
+    $retval = '';
+
+    $has_editPermissions = SEC_hasRights ('polls.edit');
+    $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid = '{$id}'");
+    $A = DB_fetchArray ($result);
+
+    if ($has_editPermissions && SEC_hasAccess ($A['owner_id'],
+            $A['group_id'], $A['perm_owner'], $A['perm_group'],
+            $A['perm_members'], $A['perm_anon']) == 3) {
+        CMT_deleteComment($cid, $id, 'polls');
+        $retval .= COM_refresh ($_CONF['site_url']
+                                 . "/polls/index.php?qid=$id&aid=-1");
+    } else {
+        COM_errorLog ("User {$_USER['username']} (IP: {$_SERVER['REMOTE_ADDR']}) "
+                    . "tried to illegally delete comment $cid from poll $id");
+        $retval .= COM_refresh ($_CONF['site_url'] . '/index.php');
+    }
+
+    return $retval;
+}
+
+
+/**
+* Helper function: count number of polls and total number of votes
+*
+* @return   array(number of polls, number of votes);
+*
+*/
+function POLLS_countPollsAndVotes ()
+{
+    global $_TABLES;
+
+    $total_polls = 0;
+    $total_answers = 0;
+
+    $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
+    $A = DB_fetchArray($result);
+    $total_polls = $A['count'];
+
+    $result = DB_query ("SELECT qid FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
+    $nrows = DB_numRows ($result);
+    if ($nrows > 0) {
+        $questions = '';
+        for ($i = 1; $i <= $nrows; $i++) {
+            $A = DB_fetchArray($result);
+            if ($i > 1) {
+                $questions .= ',';
+            }
+            $questions .= "'" . $A['qid'] . "'";
+        }
+        $result = DB_query ("SELECT SUM(votes) FROM {$_TABLES['pollanswers']} WHERE qid IN ({$questions})");
+        $A = DB_fetchArray($result, true);
+        $total_answers = $A[0];
+    }
+
+    return array ($total_polls, $total_answers);
+}
+
+/**
+* Shows the statistics for the Polls plugin on stats.php.
+* If $showsitestats is 1 then we are to only print the overall stats in the
+* 'site statistics box' otherwise we show the detailed stats
+*
+* @param    int     showsitestate   Flag to let us know which stats to get
+*/
+function plugin_showstats_polls ($showsitestats)
+{
+    global $_CONF, $_TABLES, $LANG_POLLS;
+    require_once( $_CONF['path_system'] . 'lib-admin.php' );
+    $retval = '';
+    $result = DB_query("SELECT qid,question,voters from {$_TABLES['pollquestions']} WHERE (voters > 0)" . COM_getPermSQL ('AND') . " ORDER BY voters DESC LIMIT 10");
+    $nrows  = DB_numRows ($result);
+
+    if ($nrows > 0) {
+        require_once( $_CONF['path_system'] . 'lib-admin.php' );
+        $header_arr = array(
+            array('text' => $LANG_POLLS['stats_questions'], 'field' => 'qid'),
+            array('text' => $LANG_POLLS['stats_votes'], 'field' => 'voters'),
+        );
+        $data_arr = array();
+        $text_arr = array('has_menu'     => false,
+                          'title'        => $LANG_POLLS['stats_top10'],
+        );
+        for ($i = 0; $i < $nrows; $i++) {
+            $A = DB_fetchArray ($result);
+            $A['qid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                      . "/polls/index.php?qid={$A['qid']}&amp;aid=-1"). "\">{$A['question']}</a>";
+            $A['voters'] = COM_NumberFormat ($A['voters']);
+            $data_arr[$i] = $A;
+        }
+        $retval .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
+    } else {
+        $retval .= COM_startBlock ($LANG_POLLS['stats_top10']);
+        $retval .= $LANG_POLLS['stats_none'];
+        $retval .= COM_endBlock ();
+    }
+    
+
+    return $retval;
+}
+
+/**
+* New stats plugin API function for proper integration with the site stats
+*
+* @return   array(item text, item count);
+*
+*/
+function plugin_statssummary_polls ()
+{
+    global $LANG_POLLS;
+
+    list($total_polls, $total_answers) = POLLS_countPollsAndVotes ();
+
+    $item_count = COM_numberFormat ($total_polls)
+                . ' (' . COM_numberFormat ($total_answers) . ')';
+
+    return array ($LANG_POLLS['stats_summary'], $item_count);
+}
+
+
+/**
+* This will put an option for polls in the command and control block on
+* moderation.php
+*
+*/
+function plugin_cclabel_polls()
+{
+    global $_CONF, $LANG_POLLS;
+
+    if (SEC_hasRights ('polls.edit')) {
+        return array ($LANG_POLLS['polls'],
+                $_CONF['site_admin_url'] . '/plugins/polls/index.php',
+                plugin_geticon_polls ());
+    }
+
+    return false;
+}
+
+
+/**
+* returns the administrative option for this plugin
+*
+*/
+function plugin_getadminoption_polls()
+{
+    global $_CONF, $_TABLES, $LANG_POLLS;
+
+    if (SEC_hasRights ('polls.edit')) {
+        $result = DB_query ("SELECT COUNT(*) AS cnt FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
+        $A = DB_fetchArray ($result);
+        $total_pages = $A['cnt'];
+
+        return array ($LANG_POLLS['polls'],
+                      $_CONF['site_admin_url'] . '/plugins/polls/index.php',
+                      $total_pages);
+    }
+}
+
+
+/**
+* A user is about to be deleted. Update ownership of any polls owned
+* by that user or delete them.
+*
+* @param   uid   int   User id of deleted user
+*
+*/
+function plugin_user_delete_polls ($uid)
+{
+    global $_TABLES, $_PO_CONF;
+
+    if (DB_count ($_TABLES['pollquestions'], "owner_id = $uid") == 0) {
+        // there are no polls owned by this user
+        return;
+    }
+
+    if ($_PO_CONF['delete_polls'] == 1) {
+        // delete the polls
+        $result = DB_query ("SELECT qid FROM {$_TABLES['pollquestions']} WHERE owner_id = $uid");
+        $numPolls = DB_numRows ($result);
+        for ($i = 0; $i < $numPolls; $i++) {
+            list($qid) = DB_fetchArray ($result);
+            DB_delete ($_TABLES['pollanswers'], 'qid', $qid);
+            DB_delete ($_TABLES['pollvoters'], 'qid', $qid);
+            DB_query ("DELETE FROM {$_TABLES['comments']} WHERE sid = '$qid' AND type = 'polls'");
+        }
+        DB_delete ($_TABLES['pollquestions'], 'owner_id', $uid);
+    } else {
+        // assign ownership to a user from the Root group
+        $rootgroup = DB_getItem ($_TABLES['groups'], 'grp_id',
+                                 "grp_name = 'Root'");
+        $result = DB_query ("SELECT DISTINCT ug_uid FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $rootgroup ORDER BY ug_uid LIMIT 1");
+        list($rootuser) = DB_fetchArray ($result);
+
+        DB_query ("UPDATE {$_TABLES['pollquestions']} SET owner_id = $rootuser WHERE owner_id = $uid");
+    }
+}
+
+/**
+* Return the current version of code.
+* Used in the Plugin Editor to show the registered version and code version
+*/
+function plugin_chkVersion_polls()
+{
+    global $_PO_CONF;
+
+    return $_PO_CONF['version'];
+}
+
+
+/**
+* Removes the datastructures for this plugin from the Geeklog database
+*
+* This may get called by the install routine to undo anything done to this
+* point.  To do that, $steps will have a list of steps to undo
+*
+* @steps   Array    Holds all the steps that have been completed by the install
+*
+*/
+function plugin_uninstall_polls($steps = '')
+{
+    global $_TABLES;
+
+    // Uninstalls the polls plugin
+
+    if (empty($steps) OR $steps['createtable'] == 1) {
+        // Remove the pollquestions and pollanswers tables
+        COM_errorLog('Dropping polls answers table',1);
+        DB_query("DROP TABLE {$_TABLES['pollanswers']}");
+        COM_errorLog('...success',1);
+        COM_errorLog('Dropping polls questions table',1);
+        DB_query("DROP TABLE {$_TABLES['pollquestions']}");
+        COM_errorLog('...success',1);
+        COM_errorLog('Dropping pollvoters table',1);
+        DB_query("DROP TABLE {$_TABLES['pollvoters']}");
+        COM_errorLog('...success',1);
+    }
+
+    // Remove security for this plugin
+
+    // Remove the polls admin group
+    $grp_id = DB_getItem($_TABLES['groups'], 'grp_id', "grp_name = 'Polls Admin'");
+
+    if (empty($steps) OR $steps['insertgroup'] == 1) {
+        COM_errorLog('Attempting to remove the Polls Admin Group', 1);
+        DB_query("DELETE FROM {$_TABLES['groups']} WHERE grp_id = $grp_id");
+        COM_errorLog('...success',1);
+    }
+
+    // Remove related features
+    $edit_id = DB_getItem($_TABLES['features'], 'ft_id', "ft_name = 'polls.edit'");
+
+    if (empty($steps) OR $steps['addededittogroup'] == 1) {
+        // Remove access to those features
+        COM_errorLog('Attempting to remove rights to polls.edit from all groups',1);
+        DB_query("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $edit_id");
+        COM_errorLog('...success',1);
+    }
+
+    if (empty($steps) OR $steps['addedrootuserstogroup'] == 1) {
+        // Remove root users from the group
+        COM_errorLog('Attempting to remove root users from admin of polls pages');
+        DB_query("DELETE FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $grp_id");
+        COM_errorLog('...success',1);
+    }
+
+    if (empty($steps) OR $steps['insertedfeatureedit'] == 1) {
+        COM_errorLog('Attempting to remove the polls.edit feature',1);
+        DB_query("DELETE FROM {$_TABLES['features']} WHERE ft_id = $edit_id");
+        COM_errorLog('...success',1);
+    }
+
+    // Unregister the plugin with Geeklog
+    // Always attempt to remove these entries or lib-common.php would still
+    // try and read our functions.inc file ...
+    COM_errorLog('Attempting to unregister the polls plugin from Geeklog',1);
+    DB_query("DELETE FROM {$_TABLES['plugins']} WHERE pi_name = 'polls'");
+    COM_errorLog('...success',1);
+
+    COM_errorLog('leaving plugin_uninstall_polls',1);
+
+    return true;
+}
+
+/**
+* Get path for the template files.
+*
+* @param    string  $path   subdirectory within the base template path
+* @return   string          full path to template directory
+*
+*/
+function polls_templatePath ($path = '')
+{
+    global $_CONF;
+
+    if (empty ($path)) {
+        $layout_path = $_CONF['path_layout'] . polls;
+    } else {
+        $layout_path = $_CONF['path_layout'] . polls . '/' . $path;
+    }
+
+    if (is_dir ($layout_path)) {
+        $retval = $layout_path;
+    } else {
+        $retval = $_CONF['path'] . 'plugins/polls/templates';
+        if (!empty ($path)) {
+            $retval .= '/' . $path;
+        }
+    }
+
+    return $retval;
+}
+
+
+/**
+* Shows a poll form
+*
+* Shows an HTML formatted poll for the given question ID
+*
+* @param      string      $qid      ID for poll question
+* @see function COM_pollResults
+* @see function COM_showPoll
+* @return       string  HTML Formatted Poll
+*
+*/
+
+function POLLS_pollVote( $qid )
+{
+    global $_CONF, $_TABLES, $LANG_POLLS, $LANG01;
+
+    $retval = '';
+
+    $question = DB_query( "SELECT question,voters,commentcode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid='$qid'" );
+    $Q = DB_fetchArray( $question );
+
+    if( SEC_hasAccess( $Q['owner_id'], $Q['group_id'], $Q['perm_owner'], $Q['perm_group'], $Q['perm_members'], $Q['perm_anon'] ) == 0 )
+    {
+        return $retval;
+    }
+
+    $nquestion = DB_numRows( $question );
+    $fields = array( 'ipaddress', 'qid' );
+    $values = array( $_SERVER['REMOTE_ADDR'], $qid );
+    $id = DB_count( $_TABLES['pollvoters'], $fields, $values );
+
+    if( empty( $_COOKIE[$qid] ) && $id == 0 )
+    {
+        if( $nquestion == 1 )
+        {
+            $answers = DB_query( "SELECT answer,aid FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY aid" );
+            $nanswers = DB_numRows( $answers );
+
+            if( $nanswers > 0 )
+            {
+                $poll = new Template( $_CONF['path'] . 'plugins/polls/templates/' );
+                $poll->set_file( array( 'panswer' => 'pollanswer.thtml',
+                                        'block' => 'pollblock.thtml',
+                                        'comments' => 'pollcomments.thtml' ));
+                $poll->set_var( 'site_url', $_CONF['site_url'] );
+                $poll->set_var( 'layout_url', $_CONF['layout_url'] );
+
+                $poll->set_var( 'poll_question', $Q['question'] );
+                $poll->set_var( 'poll_id', $qid );
+                $poll->set_var( 'num_votes', COM_numberFormat( $Q['voters'] ));
+                $poll->set_var( 'poll_vote_url', $_CONF['site_url']
+                        . '/polls/index.php');
+                $poll->set_var( 'poll_results_url', $_CONF['site_url']
+                        . '/polls/index.php?qid=' . $qid . '&amp;aid=-1');
+
+                $poll->set_var( 'lang_vote', $LANG_POLLS['vote'] );
+                $poll->set_var( 'lang_votes', $LANG_POLLS['votes'] );
+                $poll->set_var( 'lang_results', $LANG_POLLS['results'] );
+
+                for( $i = 1; $i <= $nanswers; $i++ )
+                {
+                    $A = DB_fetchArray( $answers );
+                    $poll->set_var( 'answer_id', $A['aid'] );
+                    $poll->set_var( 'answer_text', $A['answer'] );
+                    $poll->parse( 'poll_answers', 'panswer', true );
+                }
+
+                if( $Q['commentcode'] >= 0 )
+                {
+                    $poll->set_var( 'num_comments',
+                            COM_numberFormat( DB_count( $_TABLES['comments'],
+                                                        'sid', $qid )));
+                    $poll->set_var( 'lang_comments', $LANG01[3] );
+                    $poll->set_var( 'poll_comments_url', $_CONF['site_url'] .
+                        '/polls/index.php?qid=' . $qid . '&amp;aid=-1#comments');
+                    $poll->parse( 'poll_comments', 'comments', true );
+                }
+                else
+                {
+                    $poll->set_var( 'poll_comments', '' );
+                    $poll->set_var( 'poll_comments_url', '' );
+                }
+
+                $retval =  $poll->finish( $poll->parse( 'output', 'block' )) . LB;
+            }
+        }
+    }
+    else
+    {
+        $retval .= POLLS_pollResults( $qid );
+    }
+
+    return $retval;
+}
+
+/**
+* This shows a poll
+*
+* This will determine if a user needs to see the poll form OR the poll
+* result.
+*
+* @param        int        $sise       Size in pixels of poll results
+* @param        string     $qid        Question ID to show (optional)
+* @see function COM_pollVote
+* @see function COM_pollResults
+* @return    String  HTML Formated string of Poll
+*
+*/
+
+function POLLS_showPoll( $size, $qid='' )
+{
+    global $_CONF, $_PO_CONF, $_TABLES;
+
+    $retval = '';
+
+    DB_query( "DELETE FROM {$_TABLES['pollvoters']} WHERE date < unix_timestamp() - {$_PO_CONF['polladdresstime']}" );
+
+    if( !empty( $qid ))
+    {
+        $pcount = DB_count( $_TABLES['pollvoters'], array( 'ipaddress', 'qid' ),
+                            array( $_SERVER['REMOTE_ADDR'], $qid ));
+
+        if( empty( $_COOKIE[$qid]) && $pcount == 0 )
+        {
+            $retval .= POLLS_pollVote( $qid );
+        }
+        else
+        {
+            $retval .= POLLS_pollResults( $qid, $size );
+        }
+    }
+    else
+    {
+        $result = DB_query( "SELECT qid from {$_TABLES['pollquestions']} WHERE display = 1 ORDER BY date DESC" );
+        $nrows = DB_numRows( $result );
+        
+        $title = DB_getItem( $_TABLES['blocks'], 'title', "name='poll_block'" );
+
+        if( $nrows > 0 )
+        {
+            for( $i = 1; $i <= $nrows; $i++ )
+            {
+                $Q = DB_fetchArray( $result );
+                $qid = $Q['qid'];
+                $id = array( 'ipaddress', 'qid' );
+                $value = array( $_SERVER['REMOTE_ADDR'], $qid );
+                $pcount = DB_count( $_TABLES['pollvoters'], $id, $value );
+
+                if( $size < 120 ) // assume we're in the poll block
+                {
+                    if ( $i > 1 )
+                    {
+                        $retval .= COM_startBlock( $title, '',
+                             COM_getBlockTemplate( 'poll_block', 'header' ));
+                    }
+
+                             # $_CONF['path'] . 'plugins/polls/templates/
+                }
+                else // assume we're in polls/index.php
+                {
+                    $retval .= COM_startBlock( $title );
+                }
+
+                if( !isset( $_COOKIE[$qid]) && $pcount == 0)
+                {
+                    $retval .= POLLS_pollVote( $qid );
+                }
+                else
+                {
+                    $retval .= POLLS_pollResults( $qid, $size );
+                }
+                
+                if( $size < 120 )
+                {
+                    if ( $i < $nrows )
+                    {
+                        $retval .= COM_endBlock( COM_getBlockTemplate( 
+                             'poll_block', 'footer' ));
+                    }
+                }
+                else
+                {
+                    $retval .= COM_endBlock();
+                }
+                
+            }
+        }
+    }
+
+    return $retval;
+}
+
+/**
+* Shows the results of a poll
+*
+* Shows the poll results for a given poll question
+*
+* @param        string      $qid        ID for poll question to show
+* @param        int         $scale      Size in pixels to scale formatted results to
+* @param        string      $order      'ASC' or 'DESC' for Comment ordering (SQL statment ordering)
+* @param        string      $mode       Comment Mode possible values 'nocomment', 'flat', 'nested', 'threaded'
+* @see COM_pollVote
+* @see COM_showPoll
+* @return     string   HTML Formated Poll Results
+*
+*/
+function POLLS_pollResults( $qid, $scale=400, $order='', $mode='' )
+{
+    global $_CONF, $_TABLES, $_PO_CONF, $LANG01, $LANG_POLLS, $_COM_VERBOSE;
+
+    $retval = '';
+
+    $question = DB_query( "SELECT question,voters,commentcode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid='$qid'" );
+    $Q = DB_fetchArray( $question );
+
+    if( SEC_hasAccess( $Q['owner_id'], $Q['group_id'], $Q['perm_owner'], $Q['perm_group'], $Q['perm_members'], $Q['perm_anon']) == 0 )
+    {
+        return $retval;
+    }
+
+    $nquestion = DB_numRows( $question );
+    if( $nquestion == 1 )
+    {
+        if( $_PO_CONF['answerorder'] == 'voteorder' )
+        {
+            $answers = DB_query( "SELECT votes,answer FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY votes DESC" );
+        }
+        else
+        {
+            $answers = DB_query( "SELECT votes,answer FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY aid" );
+        }
+
+        $nanswers = DB_numRows( $answers );
+
+        if( $_COM_VERBOSE )
+        {
+            COM_errorLog( "got $answers answers in COM_pollResults", 1 );
+        }
+
+        if( $nanswers > 0 )
+        {
+
+            $poll = new Template( $_CONF['path'] . 'plugins/polls/templates/' );
+            $poll->set_file( array( 'result' => 'pollresult.thtml',
+                                    'comments' => 'pollcomments.thtml',
+                                    'votes_bar' => 'pollvotes_bar.thtml',
+                                    'votes_num' => 'pollvotes_num.thtml' ));
+            $poll->set_var( 'site_url', $_CONF['site_url'] );
+            $poll->set_var( 'layout_url', $_CONF['layout_url'] );
+
+            $poll->set_var( 'poll_question', $Q['question'] );
+            $poll->set_var( 'poll_id', $qid );
+            $poll->set_var( 'num_votes', COM_numberFormat( $Q['voters'] ));
+
+            $poll->set_var( 'lang_votes', $LANG_POLLS['votes'] );
+
+            for( $i = 1; $i <= $nanswers; $i++ )
+            {
+                $A = DB_fetchArray( $answers );
+
+                if( $Q['voters'] == 0 )
+                {
+                    $percent = 0;
+                }
+                else
+                {
+                    $percent = $A['votes'] / $Q['voters'];
+                }
+
+                $poll->set_var( 'answer_text', $A['answer'] );
+                $poll->set_var( 'answer_counter', $i );
+                $poll->set_var( 'answer_odd', (( $i - 1 ) % 2 ));
+                $poll->set_var( 'answer_num', COM_numberFormat( $A['votes'] ));
+                $poll->set_var( 'answer_percent',
+                                sprintf( '%.2f', $percent * 100 ));
+                if( $scale < 120 )
+                {
+                    $poll->parse( 'poll_votes', 'votes_num', true );
+                }
+                else
+                {
+                    $width = $percent * $scale;
+                    $poll->set_var( 'bar_width', $width );
+                    $poll->parse( 'poll_votes', 'votes_bar', true );
+                }
+            }
+
+            if( $Q['commentcode'] >= 0 )
+            {
+                $poll->set_var( 'num_comments',
+                        COM_numberFormat( DB_count( $_TABLES['comments'],
+                                                    'sid', $qid )));
+                $poll->set_var( 'lang_comments', $LANG01[3] );
+                $poll->set_var( 'poll_comments_url', $_CONF['site_url'] .
+                        '/polls/index.php?qid=' . $qid . '&amp;aid=-1#comments');
+                $poll->parse( 'poll_comments', 'comments', true );
+            }
+            else
+            {
+                $poll->set_var( 'poll_comments_url', '' );
+                $poll->set_var( 'poll_comments', '' );
+            }
+
+            $poll->set_var( 'lang_pollquestions', $LANG_POLLS['pollquestions'] );
+
+            $retval .= $poll->finish( $poll->parse( 'output', 'result' ));
+
+            if( $scale > 399 && $Q['commentcode'] >= 0 )
+            {
+                $delete_option = ( SEC_hasRights( 'polls.edit' ) &&
+                    SEC_hasAccess( $Q['owner_id'], $Q['group_id'],
+                    $Q['perm_owner'], $Q['perm_group'], $Q['perm_members'],
+                    $Q['perm_anon'] ) == 3 ? true : false );
+                require_once $_CONF['path_system'] . 'lib-comment.php';
+                $retval .= CMT_userComments( $qid, $Q['question'], 'polls',
+                                             $order, $mode, 0, 1, false, $delete_option );
+            }
+        }
+    }
+
+    return $retval;
+}
+
+
+function phpblock_polls()
+{
+    $retval = POLLS_showPoll( 60 );
+
+    return $retval;
+}
+
+
+/**
+* Returns the URL of the plugin's icon
+*
+* @return   string      URL of the icon
+*
+*/
+function plugin_geticon_polls ()
+{
+    global $_CONF;
+
+    return $_CONF['site_url'] . '/polls/images/polls.png';
+}
+
+/**
+* Plugin should display [a] comment[s]
+*
+* @param   string  $id     Unique idenifier for item comment belongs to
+* @param   int     $cid    Comment id to display (possibly including sub-comments)
+* @param   string  $title  Page/comment title
+* @param   string  $order  'ASC' or 'DSC' or blank                            
+* @param   string  $format 'threaded', 'nested', or 'flat'                    
+* @param   int     $page   Page number of comments to display                 
+* @param   boolean $view   True to view comment (by cid), false to display (by $pid)
+* @return  mixed   results of calling the plugin_displaycomment_ function     
+*/
+function plugin_displaycomment_polls ($id, $cid, $title, $order, $format, $page, $view)
+{
+    global $_TABLES, $LANG_ACCESS;
+
+    $retval = '';
+
+    $sql = "SELECT COUNT(*) AS count, owner_id, group_id, perm_owner, perm_group, perm_members, perm_anon FROM {$_TABLES['pollquestions']} WHERE (qid = '$id')" . COM_getPermSQL('AND') . ' GROUP BY qid';
+    $result = DB_query ($sql);
+    $A = DB_fetchArray ($result);
+    $allowed = $A['count'];
+
+    if ($allowed == 1) {
+        $delete_option = (SEC_hasRights ('polls.edit') &&
+                (SEC_hasAccess ($A['owner_id'], $A['group_id'],
+                    $A['perm_owner'], $A['perm_group'], $A['perm_members'],
+                    $A['perm_anon']) == 3));
+        $retval .= CMT_userComments ($id, $title, 'polls', $order, $format,
+                                     $cid, $page, $view, $delete_option);
+    } else {
+        $retval .= COM_startBlock ($LANG_ACCESS['accessdenied'], '',
+                        COM_getBlockTemplate ('_msg_block', 'header'))
+                . $LANG_ACCESS['storydenialmsg']
+                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    }
+
+    return $retval;
+}
+
+function plugin_getListField_polls($fieldname, $fieldvalue, $A, $icon_arr)
+{
+    global $_CONF, $LANG25, $LANG_ACCESS;
+
+    $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
+                             $A['perm_owner'], $A['perm_group'],
+                             $A['perm_members'], $A['perm_anon']);
+    if ($access > 0) {
+        switch($fieldname) {
+            case 'edit':
+                if ($access == 3) {
+                    $retval = "<a href=\"{$_CONF['site_admin_url']}/plugins/polls/index.php?mode=edit&amp;qid={$A['qid']}\">{$icon_arr['edit']}</a>";
+                }
+                break;
+            case 'unixdate':
+                $retval = strftime ($_CONF['daytime'], $A['unixdate']);
+                break;
+            case 'question':
+                $retval = "<a href=\"{$_CONF['site_url']}/polls/index.php?qid={$A['qid']}&aid=-1\">$fieldvalue</a>";
+                break;
+            case 'access':
+                if ($access == 3) {
+                    $access = $LANG_ACCESS['edit'];
+                } else {
+                    $access = $LANG_ACCESS['readonly'];
+                }
+                $retval = $access;
+                break;
+            case 'display':
+                if ($A['display'] == 1) {
+                    $retval = $LANG25[25];
+                } else {
+                    $retval = $LANG25[26];
+                }
+                break;
+            case 'voters':
+                $retval = COM_numberFormat ($A['voters']);
+                break;
+            default:
+                $retval = $fieldvalue;
+                break;
+        }
+    } else {
+        $retval = false;
+    }
+
+    return $retval;
+}
+
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/chinese_simplified_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/chinese_simplified_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/chinese_simplified_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/chinese_simplified_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,94 @@
+<?php
+
+###############################################################################
+# chinese_simplified_utf-8.php
+# This is the Chinese Simplified UTF-8 language page for 
+# the Geeklog Polls Plug-in!
+#
+# Last updated on January 10, 2006
+#
+# Copyright (C) 2005 Samuel Maung Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => '民意调查',
+    'results'           => '结果',
+    'pollresults'       => '调查结果',
+    'votes'             => '票',
+    'vote'              => '票',
+    'pastpolls'         => '过去的调查',
+    'savedvotetitle'    => '投票已存续',
+    'savedvotemsg'      => '你投的票已经收存了',
+    'pollstitle'        => '个民意调查在这系统里',
+    'pollquestions'     => '看其他调查问题',
+    'stats_top10'       => '最高十个民意调查',
+    'stats_questions'   => '调查题目',
+    'stats_votes'       => '投票数',
+    'stats_none'        => '看来此站没有民意调查，或没有人曾投过票.',
+    'stats_summary'     => '这系统里的调查(答案)',
+    'open_poll'         => '开放投票'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => '方式',
+    2 => '请输入一个题目和最少一个答案.',
+    3 => '调查已建立',
+    4 => "调查 %s 已存了",
+    5 => '修改调查',
+    6 => '调查 ID',
+    7 => '(不可用空键)',
+    8 => '显示在主页',
+    9 => '问题',
+    10 => '答案 / 投票',
+    11 => "索取调查 %s 答案资料是出了错误",
+    12 => "索取调查 %s 问题资料是出了错误",
+    13 => '建立一个民意调查',
+    14 => '存',
+    15 => '取消',
+    16 => '删除',
+    17 => '请输入一个民意调查 ID',
+    18 => '民意调查目录',
+    19 => '若要修改或删除一个民意调查, 点击它旁边的修改图.  若要建立一个新的民意调查, 点击以上的 "建新".',
+    20 => '投票者',
+    21 => '拒绝进入',
+    22 => "你在进入一个你没权进入得投票调查。此企图以备记录。 请回到 <a href=\"{$_CONF['site_admin_url']}/poll.php\">民意调查管理处</a>.",
+    23 => '新民意调查',
+    24 => '管理处',
+    25 => '是',
+    26 => '否',
+    27 => '修改',
+    28 => '提交',
+    29 => '搜寻',
+    30 => '限制结果',
+);
+
+$PLG_polls_MESSAGE19 = '你的民意调查已顺利的存续了.';
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/chinese_traditional_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/chinese_traditional_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/chinese_traditional_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/chinese_traditional_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,94 @@
+<?php
+
+###############################################################################
+# chinese_traditional_utf-8.php
+# This is the Chinese Traditional UTF-8 language page for 
+# the Geeklog Polls Plug-in!
+#
+# Last updated on January 10, 2006
+#
+# Copyright (C) 2005 Samuel Maung Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => '民意調查',
+    'results'           => '結果',
+    'pollresults'       => '調查結果',
+    'votes'             => '票',
+    'vote'              => '票',
+    'pastpolls'         => '過去的調查',
+    'savedvotetitle'    => '投票已存續',
+    'savedvotemsg'      => '你投的票已經收存了',
+    'pollstitle'        => '個民意調查在這系統裏',
+    'pollquestions'     => '看其他調查問題',
+    'stats_top10'       => '最高十個民意調查',
+    'stats_questions'   => '調查題目',
+    'stats_votes'       => '投票數',
+    'stats_none'        => '看來此站沒有民意調查，或沒有人曾投過票.',
+    'stats_summary'     => '這系統裏的調查(答案)',
+    'open_poll'         => '開放投票'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => '方式',
+    2 => '請輸入一個題目和最少一個答案.',
+    3 => '調查已建立',
+    4 => "調查 %s 已存了",
+    5 => '修改調查',
+    6 => '調查 ID',
+    7 => '(不可用空鍵)',
+    8 => '顯示在主頁',
+    9 => '問題',
+    10 => '答案 / 投票',
+    11 => "索取調查 %s 答案資料是出了錯誤",
+    12 => "索取調查 %s 問題資料是出了錯誤",
+    13 => '建立一個民意調查',
+    14 => '存',
+    15 => '取消',
+    16 => '刪除',
+    17 => '請輸入一個民意調查 ID',
+    18 => '民意調查目錄',
+    19 => '若要修改或刪除一個民意調查, 點擊它旁邊的修改圖.  若要建立一個新的民意調查, 點擊以上的 "建新".',
+    20 => '投票者',
+    21 => '拒絕進入',
+    22 => "你在進入一個你沒權進入得投票調查。此企圖以備記錄。 請回到 <a href=\"{$_CONF['site_admin_url']}/poll.php\">民意調查管理處</a>.",
+    23 => '新民意調查',
+    24 => '管理處',
+    25 => '是',
+    26 => '否',
+    27 => '修改',
+    28 => '提交',
+    29 => '搜尋',
+    30 => '限制結果',
+);
+
+$PLG_polls_MESSAGE19 = '你的民意調查已順利的存續了.';
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/dutch.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/dutch.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/dutch.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/dutch.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+###############################################################################
+# ducth.php
+# This is the Dutch language file for the Geeklog Polls plugin
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => 'Peilingen',
+    'results'           => 'Resultaten',
+    'pollresults'       => 'Peiling Resultaten',
+    'votes'             => 'stemmen',
+    'vote'              => 'Stem',
+    'pastpolls'         => 'Oudere peilingen',
+    'savedvotetitle'    => 'Stem opgeslagen',
+    'savedvotemsg'      => 'Uw stem is in de peling opgenomen',
+    'pollstitle'        => 'Peilingen in systeem',
+    'pollquestions'     => 'Bekijke andere peilingen',
+    'stats_top10'       => 'Top Tien Peilingen',
+    'stats_questions'   => 'Peiling vraag',
+    'stats_votes'       => 'Stemmen',
+    'stats_none'        => 'Er zijn geen peilingen aanwezig of er is nog niet op gestemd.',
+    'stats_summary'     => 'Peilingen (resultaten) in het systeem',
+    'open_poll'         => 'Open voor stemmen'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Modus',
+    2 => 'Geef een vraag en tenminsten 1 antwoord op.',
+    3 => 'Peiling aangemaakt',
+    4 => "Peiling %s bewaard",
+    5 => 'Edit peiling',
+    6 => 'Peiling ID',
+    7 => '(zonder spaties)',
+    8 => 'Verschijnt op Homepage',
+    9 => 'Vraag',
+    10 => 'Antwoorden / Stemmen',
+    11 => "Er is een fout opgettreden tijdens het verkrijgen van de antwoorden van peiling %s",
+    12 => "Er is een fout opgettreden tijdens het verkrijgen van de stemmen van peiling %s",
+    13 => 'Maak peiling',
+    14 => 'bewaar',
+    15 => 'annuleer',
+    16 => 'verwijder',
+    17 => 'Geef AUB een peiling ID op',
+    18 => 'Peiling lijst',
+    19 => 'Om een peiling te veranderen of te verwijderen, klik op het Edit icoon naast de peiling. Om een nieuwe peiling te maken, klik op "Maak peiling" hierboven.',
+    20 => 'Stemmers',
+    21 => 'Toegang geweigerd',
+    22 => "U probeert een peiling waar u geen toegang toe heeft te bewerken.  Deze poging is vastgelegd. Ga AUB terug naar de <a href=\"{$_CONF['site_admin_url']}/poll.php\">peiling editor</a>.",
+    23 => 'Nieuwe Peiling',
+    24 => 'Admin Home',
+    25 => 'Ja',
+    26 => 'Nee',
+    27 => 'Wijzig',
+    28 => 'Verzend',
+    29 => 'Zoek',
+    30 => 'Limiteer resultaten',
+);
+
+$PLG_polls_MESSAGE19 = 'Your poll has been successfully saved.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/english.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/english.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/english.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/english.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for the Geeklog Polls Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => 'Polls',
+    'results'           => 'Results',
+    'pollresults'       => 'Poll Results',
+    'votes'             => 'votes',
+    'vote'              => 'Vote',
+    'pastpolls'         => 'Past Polls',
+    'savedvotetitle'    => 'Vote Saved',
+    'savedvotemsg'      => 'Your vote was saved for the poll',
+    'pollstitle'        => 'Polls in System',
+    'pollquestions'     => 'View other poll questions',
+    'stats_top10'       => 'Top Ten Polls',
+    'stats_questions'   => 'Poll Question',
+    'stats_votes'       => 'Votes',
+    'stats_none'        => 'It appears that there are no polls on this site or no one has ever voted.',
+    'stats_summary'     => 'Polls (Answers) in the system',
+    'open_poll'         => 'Open for Voting'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Mode',
+    2 => 'Please enter a question and at least one answer.',
+    3 => 'Poll Created',
+    4 => "Poll %s saved",
+    5 => 'Edit Poll',
+    6 => 'Poll ID',
+    7 => '(do not use spaces)',
+    8 => 'Appears on Homepage',
+    9 => 'Question',
+    10 => 'Answers / Votes',
+    11 => "There was an error getting poll answer data about the poll %s",
+    12 => "There was an error getting poll question data about the poll %s",
+    13 => 'Create Poll',
+    14 => 'save',
+    15 => 'cancel',
+    16 => 'delete',
+    17 => 'Please enter a Poll ID',
+    18 => 'Poll List',
+    19 => 'To modify or delete a poll, click on the edit icon of the poll.  To create a new poll, click on "Create New" above.',
+    20 => 'Voters',
+    21 => 'Access Denied',
+    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
+    23 => 'New Poll',
+    24 => 'Admin Home',
+    25 => 'Yes',
+    26 => 'No',
+    27 => 'Edit',
+    28 => 'Submit',
+    29 => 'Search',
+    30 => 'Limit Results',
+);
+
+$PLG_polls_MESSAGE19 = 'Your poll has been successfully saved.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/english_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/english_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/english_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/english_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+###############################################################################
+# english_utf-8.php
+# This is the english language page for the Geeklog Polls Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => 'Polls',
+    'results'           => 'Results',
+    'pollresults'       => 'Poll Results',
+    'votes'             => 'votes',
+    'vote'              => 'Vote',
+    'pastpolls'         => 'Past Polls',
+    'savedvotetitle'    => 'Vote Saved',
+    'savedvotemsg'      => 'Your vote was saved for the poll',
+    'pollstitle'        => 'Polls in System',
+    'pollquestions'     => 'View other poll questions',
+    'stats_top10'       => 'Top Ten Polls',
+    'stats_questions'   => 'Poll Question',
+    'stats_votes'       => 'Votes',
+    'stats_none'        => 'It appears that there are no polls on this site or no one has ever voted.',
+    'stats_summary'     => 'Polls (Answers) in the system',
+    'open_poll'         => 'Open for Voting'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Mode',
+    2 => 'Please enter a question and at least one answer.',
+    3 => 'Poll Created',
+    4 => "Poll %s saved",
+    5 => 'Edit Poll',
+    6 => 'Poll ID',
+    7 => '(do not use spaces)',
+    8 => 'Appears on Homepage',
+    9 => 'Question',
+    10 => 'Answers / Votes',
+    11 => "There was an error getting poll answer data about the poll %s",
+    12 => "There was an error getting poll question data about the poll %s",
+    13 => 'Create Poll',
+    14 => 'save',
+    15 => 'cancel',
+    16 => 'delete',
+    17 => 'Please enter a Poll ID',
+    18 => 'Poll List',
+    19 => 'To modify or delete a poll, click on the edit icon of the poll.  To create a new poll, click on "Create New" above.',
+    20 => 'Voters',
+    21 => 'Access Denied',
+    22 => "You are trying to access a poll that you don't have rights to.  This attempt has been logged. Please <a href=\"{$_CONF['site_admin_url']}/poll.php\">go back to the poll administration screen</a>.",
+    23 => 'New Poll',
+    24 => 'Admin Home',
+    25 => 'Yes',
+    26 => 'No',
+    27 => 'Edit',
+    28 => 'Submit',
+    29 => 'Search',
+    30 => 'Limit Results',
+);
+
+$PLG_polls_MESSAGE19 = 'Your poll has been successfully saved.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german_formal.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german_formal.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german_formal.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german_formal.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+###############################################################################
+# german_formal.php
+#
+# This is the German language file for the Geeklog Polls Plugin,
+# addressing the user as "Sie" (formal German).
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german_formal.php,v 1.1 2005/12/17 19:52:22 dhaun Exp $
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+$LANG_POLLS = array(
+    'polls'             => 'Umfragen',
+    'results'           => 'Ergebnisse',
+    'pollresults'       => 'Umfrage-Ergebnisse',
+    'votes'             => 'Stimmen',
+    'vote'              => 'Abstimmen',
+    'pastpolls'         => 'ltere Umfragen',
+    'savedvotetitle'    => 'Stimme gespeichert',
+    'savedvotemsg'      => 'Ihre Stimme wurde fr die Umfrage gespeichert: ',
+    'pollstitle'        => 'Umfragen im System',
+    'pollquestions'     => 'ltere Umfragen ansehen',
+    'stats_top10'       => 'Top Ten der Umfragen',
+    'stats_questions'   => 'Thema der Umfrage',
+    'stats_votes'       => 'Stimmen',
+    'stats_none'        => 'Es gibt keine Umfragen oder es wurden keine Stimmen abgegeben.',
+    'stats_summary'     => 'Anzahl Umfragen (Stimmen)',
+    'open_poll'         => 'Abstimmen mglich'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Modus',
+    2 => 'Bitte eine Frage und mindestens eine Antwort eingeben.',
+    3 => 'Umfrage gestartet',
+    4 => 'Umfrage %s wurde gespeichert',
+    5 => 'Umfrage editieren',
+    6 => 'Umfrage-ID',
+    7 => '(keine Leerzeichen!)',
+    8 => 'Erscheint auf der Startseite',
+    9 => 'Thema',
+    10 => 'Antworten / Stimmen',
+    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
+    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
+    13 => 'Umfrage anlegen',
+    14 => 'Speichern',
+    15 => 'Abbruch',
+    16 => 'Lschen',
+    17 => 'Bitte eine Umfrage-ID eingeben.',
+    18 => 'Liste der Umfragen',
+    19 => 'Um eine Umfrage zu ndern oder zu lschen, auf das ndern-Icon klicken. Mit Neu anlegen (s.o.) wird eine neue Umfrage angelegt.',
+    20 => 'Stimmen',
+    21 => 'Zugriff verweigert',
+    22 => "Sie haben keine Zugriffsrechte fr diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/polls/index.php\">Zurck zum Administrator-Men</a>.",
+    23 => 'Neue Umfrage',
+    24 => 'Admin Home',
+    25 => 'Ja',
+    26 => 'Nein',
+    27 => 'ndern',
+    28 => 'Abschicken',
+    29 => 'Suchen',
+    30 => 'Anzahl Ergebnisse'
+);
+
+$PLG_polls_MESSAGE19 = 'Ihre Umfrage wurde gespeichert.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german_formal_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german_formal_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german_formal_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german_formal_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+###############################################################################
+# german_formal_utf-8.php
+#
+# This is the German language file for the Geeklog Polls Plugin,
+# addressing the user as "Sie" (formal German).
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german_formal_utf-8.php,v 1.1 2005/12/17 19:52:22 dhaun Exp $
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+$LANG_POLLS = array(
+    'polls'             => 'Umfragen',
+    'results'           => 'Ergebnisse',
+    'pollresults'       => 'Umfrage-Ergebnisse',
+    'votes'             => 'Stimmen',
+    'vote'              => 'Abstimmen',
+    'pastpolls'         => 'Ältere Umfragen',
+    'savedvotetitle'    => 'Stimme gespeichert',
+    'savedvotemsg'      => 'Ihre Stimme wurde für die Umfrage gespeichert: ',
+    'pollstitle'        => 'Umfragen im System',
+    'pollquestions'     => 'Ältere Umfragen ansehen',
+    'stats_top10'       => 'Top Ten der Umfragen',
+    'stats_questions'   => 'Thema der Umfrage',
+    'stats_votes'       => 'Stimmen',
+    'stats_none'        => 'Es gibt keine Umfragen oder es wurden keine Stimmen abgegeben.',
+    'stats_summary'     => 'Anzahl Umfragen (Stimmen)',
+    'open_poll'         => 'Abstimmen möglich'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Modus',
+    2 => 'Bitte eine Frage und mindestens eine Antwort eingeben.',
+    3 => 'Umfrage gestartet',
+    4 => 'Umfrage %s wurde gespeichert',
+    5 => 'Umfrage editieren',
+    6 => 'Umfrage-ID',
+    7 => '(keine Leerzeichen!)',
+    8 => 'Erscheint auf der Startseite',
+    9 => 'Thema',
+    10 => 'Antworten / Stimmen',
+    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
+    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
+    13 => 'Umfrage anlegen',
+    14 => 'Speichern',
+    15 => 'Abbruch',
+    16 => 'Löschen',
+    17 => 'Bitte eine Umfrage-ID eingeben.',
+    18 => 'Liste der Umfragen',
+    19 => 'Um eine Umfrage zu ändern oder zu löschen, auf das Ändern-Icon klicken. Mit Neu anlegen (s.o.) wird eine neue Umfrage angelegt.',
+    20 => 'Stimmen',
+    21 => 'Zugriff verweigert',
+    22 => "Sie haben keine Zugriffsrechte für diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/polls/index.php\">Zurück zum Administrator-Menü</a>.",
+    23 => 'Neue Umfrage',
+    24 => 'Admin Home',
+    25 => 'Ja',
+    26 => 'Nein',
+    27 => 'Ändern',
+    28 => 'Abschicken',
+    29 => 'Suchen',
+    30 => 'Anzahl Ergebnisse'
+);
+
+$PLG_polls_MESSAGE19 = 'Ihre Umfrage wurde gespeichert.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+<?php
+
+###############################################################################
+# german.php
+#
+# This is the German language file for the Geeklog Polls Plugin
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german.php,v 1.2 2005/12/17 19:52:22 dhaun Exp $
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+$LANG_POLLS = array(
+    'polls'             => 'Umfragen',
+    'results'           => 'Ergebnisse',
+    'pollresults'       => 'Umfrage-Ergebnisse',
+    'votes'             => 'Stimmen',
+    'vote'              => 'Abstimmen',
+    'pastpolls'         => 'ltere Umfragen',
+    'savedvotetitle'    => 'Stimme gespeichert',
+    'savedvotemsg'      => 'Deine Stimme wurde fr die Umfrage gespeichert: ',
+    'pollstitle'        => 'Umfragen im System',
+    'pollquestions'     => 'ltere Umfragen ansehen',
+    'stats_top10'       => 'Top Ten der Umfragen',
+    'stats_questions'   => 'Thema der Umfrage',
+    'stats_votes'       => 'Stimmen',
+    'stats_none'        => 'Es gibt keine Umfragen oder es wurden keine Stimmen abgegeben.',
+    'stats_summary'     => 'Anzahl Umfragen (Stimmen)',
+    'open_poll'         => 'Abstimmen mglich'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Modus',
+    2 => 'Bitte eine Frage und mindestens eine Antwort eingeben.',
+    3 => 'Umfrage gestartet',
+    4 => 'Umfrage %s wurde gespeichert',
+    5 => 'Umfrage editieren',
+    6 => 'Umfrage-ID',
+    7 => '(keine Leerzeichen!)',
+    8 => 'Erscheint auf der Startseite',
+    9 => 'Thema',
+    10 => 'Antworten / Stimmen',
+    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
+    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
+    13 => 'Umfrage anlegen',
+    14 => 'Speichern',
+    15 => 'Abbruch',
+    16 => 'Lschen',
+    17 => 'Bitte eine Umfrage-ID eingeben.',
+    18 => 'Liste der Umfragen',
+    19 => 'Um eine Umfrage zu ndern oder zu lschen, auf das ndern-Icon klicken. Mit Neu anlegen (s.o.) wird eine neue Umfrage angelegt.',
+    20 => 'Stimmen',
+    21 => 'Zugriff verweigert',
+    22 => "Du hast keine Zugriffsrechte fr diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/polls/index.php\">Zurck zum Administrator-Men</a>.",
+    23 => 'Neue Umfrage',
+    24 => 'Admin Home',
+    25 => 'Ja',
+    26 => 'Nein',
+    27 => 'ndern',
+    28 => 'Abschicken',
+    29 => 'Suchen',
+    30 => 'Anzahl Ergebnisse'
+);
+
+$PLG_polls_MESSAGE19 = 'Deine Umfrage wurde gespeichert.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/german_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/german_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+<?php
+
+###############################################################################
+# german_utf-8.php
+#
+# This is the German language file for the Geeklog Polls Plugin
+#
+# Copyright (C) 2005 Dirk Haun
+# dirk AT haun-online DOT de
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+# $Id: german_utf-8.php,v 1.1 2005/12/17 19:52:22 dhaun Exp $
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+$LANG_POLLS = array(
+    'polls'             => 'Umfragen',
+    'results'           => 'Ergebnisse',
+    'pollresults'       => 'Umfrage-Ergebnisse',
+    'votes'             => 'Stimmen',
+    'vote'              => 'Abstimmen',
+    'pastpolls'         => 'Ältere Umfragen',
+    'savedvotetitle'    => 'Stimme gespeichert',
+    'savedvotemsg'      => 'Deine Stimme wurde für die Umfrage gespeichert: ',
+    'pollstitle'        => 'Umfragen im System',
+    'pollquestions'     => 'Ältere Umfragen ansehen',
+    'stats_top10'       => 'Top Ten der Umfragen',
+    'stats_questions'   => 'Thema der Umfrage',
+    'stats_votes'       => 'Stimmen',
+    'stats_none'        => 'Es gibt keine Umfragen oder es wurden keine Stimmen abgegeben.',
+    'stats_summary'     => 'Anzahl Umfragen (Stimmen)',
+    'open_poll'         => 'Abstimmen möglich'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'Modus',
+    2 => 'Bitte eine Frage und mindestens eine Antwort eingeben.',
+    3 => 'Umfrage gestartet',
+    4 => 'Umfrage %s wurde gespeichert',
+    5 => 'Umfrage editieren',
+    6 => 'Umfrage-ID',
+    7 => '(keine Leerzeichen!)',
+    8 => 'Erscheint auf der Startseite',
+    9 => 'Thema',
+    10 => 'Antworten / Stimmen',
+    11 => 'Beim Abrufen der Stimmen von Umfrage %s trat ein Fehler auf.',
+    12 => 'Beim Abrufen der Fragen von Umfrage %s trat ein Fehler auf.',
+    13 => 'Umfrage anlegen',
+    14 => 'Speichern',
+    15 => 'Abbruch',
+    16 => 'Löschen',
+    17 => 'Bitte eine Umfrage-ID eingeben.',
+    18 => 'Liste der Umfragen',
+    19 => 'Um eine Umfrage zu ändern oder zu löschen, auf das Ändern-Icon klicken. Mit Neu anlegen (s.o.) wird eine neue Umfrage angelegt.',
+    20 => 'Stimmen',
+    21 => 'Zugriff verweigert',
+    22 => "Du hast keine Zugriffsrechte für diese Umfrage. Dieser Zugriffsversuch wurde protokolliert. <a href=\"{$_CONF['site_admin_url']}/plugins/polls/index.php\">Zurück zum Administrator-Menü</a>.",
+    23 => 'Neue Umfrage',
+    24 => 'Admin Home',
+    25 => 'Ja',
+    26 => 'Nein',
+    27 => 'Ändern',
+    28 => 'Abschicken',
+    29 => 'Suchen',
+    30 => 'Anzahl Ergebnisse'
+);
+
+$PLG_polls_MESSAGE19 = 'Deine Umfrage wurde gespeichert.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/japanese.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/japanese.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/japanese.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/japanese.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,88 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for the Geeklog Polls Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'     => '󥱡',
+    'results'   => '',
+    'pollresults'   => 'ɼ',
+    'votes'     => 'ɼ',
+    'vote'      => 'ɼ',
+    'pastpolls' => '󥱡Ȥΰ',
+    'savedvotetitle'    => 'ɼϿޤ',
+    'savedvotemsg'  => 'ɼϿޤ',
+    'pollstitle'    => '罸Υ󥱡',
+    'pollquestions' => '¾Υ󥱡Ȥ򸫤'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => '⡼',
+    2 => 'ȺĤϤƤ',
+    3 => '',
+    4 => "󥱡ȡ %s ˤ¸ޤ",
+    5 => '󥱡ȤԽ',
+    6 => '󥱡Ȥ ID',
+    7 => '(ڡޤޤʤ)',
+    8 => 'ۡڡɽ',
+    9 => '䤹뤳',
+    10 => '  ɼ',
+    11 => "󥱡( %s )ˤ˥顼ޤ",
+    12 => "󥱡( %s )ˤܤ˥顼ޤ",
+    13 => '󥱡Ȥκ',
+    14 => '¸',
+    15 => '',
+    16 => '',
+    17 => 'ɼIDϤƤ',
+    18 => '󥱡Ȱ',
+    19 => '󥱡ȤԽ뤿ˤϡȥ뺸Υ򥯥åƤ˺ϡֿפ򥯥åƤȥ򥯥åȥ󥱡ȤǤޤ',
+    20 => 'ɼ',
+    21 => 'ݤޤ',
+    22 => "¤Τʤ󥱡ȤԽ褦Ȥޤι԰٤ϵϿޤ<a href=\"{$_CONF['site_admin_url']}/poll.php\">ɼδ</a>äƤ",
+    23 => '󥱡',
+    24 => '',
+    25 => 'Ϥ',
+    26 => '',
+    27 => 'Խ',
+    28 => '',
+    29 => '',
+    30 => 'ɽ'
+
+);
+
+$PLG_polls_MESSAGE19 = '󥱡ȤϿޤ';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/japanese_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/japanese_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/japanese_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/japanese_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,88 @@
+<?php
+
+###############################################################################
+# english.php
+# This is the english language page for the Geeklog Polls Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Copyright (C) 2005 Trinity Bays
+# trinity93@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'     => 'アンケート',
+    'results'   => '結果',
+    'pollresults'   => '投票結果',
+    'votes'     => '投票',
+    'vote'      => '投票する',
+    'pastpolls' => 'アンケートの一覧',
+    'savedvotetitle'    => '投票が登録されました',
+    'savedvotemsg'  => '今の投票が登録されました',
+    'pollstitle'    => '募集中のアンケート',
+    'pollquestions' => '他のアンケートを見る'
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => 'モード',
+    2 => '質問と最低一つの選択肢を入力してください',
+    3 => '作成日時',
+    4 => "アンケート（ %s ）が保存されました",
+    5 => 'アンケートの編集',
+    6 => 'アンケートの ID',
+    7 => '(スペースを含まないこと)',
+    8 => 'ホームページに表示する',
+    9 => '質問すること',
+    10 => '回答 ／ 投票数',
+    11 => "アンケート( %s )における選択肢にエラーがありました",
+    12 => "アンケート( %s )における質問項目にエラーがありました",
+    13 => 'アンケートの作成',
+    14 => '保存',
+    15 => '中止',
+    16 => '削除',
+    17 => '投票IDを入力してください',
+    18 => 'アンケート一覧',
+    19 => 'アンケートを削除・編集するためには、タイトル左のアイコンをクリックしてください。新規に作成する場合は、「新規作成」をクリックしてください。タイトルをクリックするとアンケートを閲覧できます。',
+    20 => '投票者',
+    21 => 'アクセスが拒否されました',
+    22 => "管理権限のないアンケートを編集しようとしました。この行為は記録されます。<a href=\"{$_CONF['site_admin_url']}/poll.php\">投票の管理画面</a>に戻ってください。",
+    23 => '新規アンケート',
+    24 => '管理画面',
+    25 => 'はい',
+    26 => 'いいえ',
+    27 => '編集',
+    28 => '検索',
+    29 => '検索条件',
+    30 => '表示件数'
+
+);
+
+$PLG_polls_MESSAGE19 = 'アンケートが登録されました。';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/README 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/README
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/README	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/README	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,7 @@
+This directory contains the language files for the polls plugin. The
+plugin will pick the appropriate language file automatically based on the
+language settings in your user settings or the default language in config.php.
+
+If there is no language file for your language, then the plugin will revert
+to english.php.
+
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/russian.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/russian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/russian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/russian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,91 @@
+<?php
+
+###############################################################################
+# russian.php
+# This is the russian language page for the Geeklog Polls Plug-in!
+#
+# Copyright (C) 2006 Volodymyr V. Prokurashko
+# vvprok@ukr.net
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => '',
+    'results'           => '',
+    'pollresults'       => ' ',
+    'votes'             => '',
+    'vote'              => '',
+    'pastpolls'         => ' ',
+    'savedvotetitle'    => ' ',
+    'savedvotemsg'      => '     ',
+    'pollstitle'        => '',
+    'pollquestions'     => '   ',
+    'stats_top10'       => '10  ',
+    'stats_questions'   => '',
+    'stats_votes'       => '',
+    'stats_none'        => '    ,       .',
+    'stats_summary'     => ' ()  ',
+    'open_poll'         => '  '
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => '',
+    2 => ',       .',
+    3 => ' ',
+    4 => " %s ",
+    5 => ' ',
+    6 => 'ID ',
+    7 => '(  )',
+    8 => '   ',
+    9 => '',
+    10 => ' / ',
+    11 => "        %s  ",
+    12 => "        %s  ",
+    13 => ' ',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => ',  ID ',
+    18 => ' ',
+    19 => '     ,    ,   .      ,  " " .',
+    20 => '',
+    21 => ' ',
+    22 => "         .    . , <a href=\"{$_CONF['site_admin_url']}/poll.php\">  a>.",
+    23 => ' ',
+    24 => '',
+    25 => '',
+    26 => '',
+    27 => '',
+    28 => '',
+    29 => '',
+    30 => ' ',
+);
+
+$PLG_polls_MESSAGE19 = '   .';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/language/ukrainian.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/ukrainian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/language/ukrainian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/language/ukrainian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,91 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the ukrainian language page for the Geeklog Polls Plug-in!
+#
+# Copyright (C) 2005 Vitaliy Biliyenko
+# v.lokki@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_POLLS = array(
+    'polls'             => '',
+    'results'           => '',
+    'pollresults'       => ' ',
+    'votes'             => '',
+    'vote'              => '',
+    'pastpolls'         => ' ',
+    'savedvotetitle'    => ' ',
+    'savedvotemsg'      => '    ',
+    'pollstitle'        => '  ',
+    'pollquestions'     => '  ',
+    'stats_top10'       => '10  ',
+    'stats_questions'   => ' ',
+    'stats_votes'       => '',
+    'stats_none'        => '    ,       .',
+    'stats_summary'     => ' ()  ',
+    'open_poll'         => '³  '
+);
+
+###############################################################################
+# admin/plugins/polls/index.php
+
+$LANG25 = array(
+    1 => '',
+    2 => '-,       .',
+    3 => ' ',
+    4 => " %s ",
+    5 => ' ',
+    6 => 'ID ',
+    7 => '(  )',
+    8 => '   ',
+    9 => '',
+    10 => '³ / ',
+    11 => "ϳ       %s  ",
+    12 => "ϳ       %s  ",
+    13 => ' ',
+    14 => '',
+    15 => '',
+    16 => '',
+    17 => '-,  ID ',
+    18 => ' ',
+    19 => '    ,     .     ,  " " .',
+    20 => '',
+    21 => ' ',
+    22 => "     ,      .    . -, <a href=\"{$_CONF['site_admin_url']}/poll.php\">  </a>.",
+    23 => ' ',
+    24 => '',
+    25 => '',
+    26 => 'ͳ',
+    27 => '',
+    28 => '',
+    29 => '',
+    30 => ' ',
+);
+
+$PLG_polls_MESSAGE19 = '   .';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/sql/install.php 1.4.0sr5-1/cpanel-glprivate/plugins/polls/sql/install.php
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/sql/install.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/sql/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,90 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Polls Plugin 1.0                                                          |
+// +---------------------------------------------------------------------------+
+// | Installation SQL                                                          |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Trinity Bays      - trinity AT steubentech DOT com               |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is licensed under the terms of the GNU General Public License|
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                      |
+// | See the GNU General Public License for more details.                      |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: install.php,v 1.1 2005/11/13 13:46:06 dhaun Exp $
+
+$_SQL[] = "
+CREATE TABLE {$_TABLES['pollanswers']} (
+  qid varchar(20) NOT NULL default '',
+  aid tinyint(3) unsigned NOT NULL default '0',
+  answer varchar(255) default NULL,
+  votes mediumint(8) unsigned default NULL,
+  PRIMARY KEY  (qid,aid)
+) TYPE=MyISAM
+";
+
+$_SQL[] = "
+CREATE TABLE {$_TABLES['pollquestions']} (
+  qid varchar(20) NOT NULL default '',
+  question varchar(255) default NULL,
+  voters mediumint(8) unsigned default NULL,
+  date datetime default NULL,
+  display tinyint(4) NOT NULL default '0',
+  commentcode tinyint(4) NOT NULL default '0',
+  statuscode tinyint(4) NOT NULL default '0',
+  owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
+  perm_owner tinyint(1) unsigned NOT NULL default '3',
+  perm_group tinyint(1) unsigned NOT NULL default '2',
+  perm_members tinyint(1) unsigned NOT NULL default '2',
+  perm_anon tinyint(1) unsigned NOT NULL default '2',
+  INDEX pollquestions_qid(qid),
+  INDEX pollquestions_date(date),
+  INDEX pollquestions_display(display),
+  INDEX pollquestions_commentcode(commentcode),
+  INDEX pollquestions_statuscode(statuscode),
+  PRIMARY KEY  (qid)
+) TYPE=MyISAM
+";
+
+$_SQL[] = "
+CREATE TABLE {$_TABLES['pollvoters']} (
+  id int(10) unsigned NOT NULL auto_increment,
+  qid varchar(20) NOT NULL default '',
+  ipaddress varchar(15) NOT NULL default '',
+  date int(10) unsigned default NULL,
+  PRIMARY KEY  (id)
+) TYPE=MyISAM
+";
+
+$_SQL[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',1,'Trackbacks',0) ";
+$_SQL[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',2,'Links and Polls plugins',0) ";
+$_SQL[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',3,'Revamped admin areas',0) ";
+$_SQL[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',4,'FCKeditor included',0) ";
+$_SQL[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',5,'Remote user authentication',0) ";
+$_SQL[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',6,'Other',0) ";
+
+// Note: The 'pollquestion' entry for the above answers is in the install script
+
+$_SQL[] = "INSERT INTO {$_TABLES['blocks']} (is_enabled, name, type, title, tid, blockorder, content, onleft, phpblockfn, owner_id, group_id, perm_owner, perm_group) VALUES (1,'polls_block','phpblock','Poll','all',30,'',0,'phpblock_polls',{$_USER['uid']},1,3,3)";
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/admin/pollansweroption.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/admin/pollansweroption.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/admin/pollansweroption.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/admin/pollansweroption.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<input type="text" name="answer[]" value="{answer_text}" size="30" maxlength="255"> / <input type="text" name="votes[]" value="{answer_votes}" size="5"><BR>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/admin/polleditor.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/admin/polleditor.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/admin/polleditor.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/admin/polleditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,75 @@
+                                <form action="{site_admin_url}/plugins/polls/index.php" method="post">
+                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
+                                        <tr>
+                                            <td align="right">{lang_pollid}:</td>
+                                            <td><input type="text" name="qid" value="{poll_id}" size="20"> {lang_donotusespaces}</td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_question}:</td>
+                                            <td><input type="text" name="question" value="{poll_question}" size="50" maxlength="255"></td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_mode}:</td>
+                                            <td>
+                                                <select name="commentcode">
+                                                    {comment_options}
+                                                </select>
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_appearsonhomepage}:</td>
+                                            <td><input type="checkbox" name="mainpage" {poll_display}></td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"><hr><td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right" valign="top">{lang_answersvotes}:</td>
+                                            <td>
+                                                {answer_option}
+                                                <input type="text" name="answer[]" value="{answer_text}" size="30" maxlength="255"> / <input type="text" name="votes[]" value="{answer_votes}" size="5"><BR>
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"><hr><td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"><b>{lang_accessrights}</b></td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_owner}:</td>
+                                            <td>{owner_username}<input type="hidden" name="owner_id" value="{owner_id}"></td>
+                                        </tr>
+                                        <tr>
+                                            <td align="right">{lang_group}:</td>
+                                            <td>
+                                                {group_dropdown}
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"><b>{lang_permissions}</b>:</td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2"></td>
+                                        <tr>
+                                        <tr>
+                                            <td colspan="2">{lang_permissionskey}</td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2">
+                                                {permissions_editor}
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td colspan="2">{lang_permissions_msg}</td>
+                                        </tr>
+                                        <tr><td>&nbsp;</td></tr>
+                                        <tr>
+                                            <td colspan="2">
+                                                <input type="submit" name="mode" value="{lang_save}">
+                                                <input type="submit" name="mode" value="{lang_cancel}"> 
+                                                {delete_option}
+                                            </td>
+                                        </tr>
+                                    </table>
+                                </form>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollanswer.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollanswer.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollanswer.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollanswer.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+  <input type="radio" name="aid" value="{answer_id}">{answer_text}<br>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollblock.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollblock.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollblock.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollblock.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,8 @@
+<b>{poll_question}</b>
+<form action="{poll_vote_url}" name="Vote" method="POST">
+  <input type="hidden" name="qid" value="{poll_id}">
+  {poll_answers}
+  <input type="submit" value="{lang_vote}">
+  <a href="{poll_results_url}">{lang_results}</a>
+</form>
+<span class="block-vote">{num_votes} {lang_votes}{poll_comments}</span><br>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollcomments.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollcomments.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollcomments.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollcomments.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+ | <a href="{poll_comments_url}">{num_comments} {lang_comments}</a>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/polllist.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/polllist.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/polllist.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/polllist.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+                            <br>{item_num}. <a href="{poll_url}">{poll_question}</a> ({poll_votes} {lang_votes}){ending_br} 
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollresult.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollresult.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollresult.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollresult.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,6 @@
+<br><b>{poll_question}</b><br><br>
+<table border="0" cellpadding="3" cellspacing="0" align="center">
+{poll_votes}
+</table>
+<div class="block-vote-results" align="left"><br><a href="{site_url}/polls/index.php">{lang_pollquestions}</a></div>
+<div class="block-vote-results" align="right">{num_votes} {lang_votes} {poll_comments}</div>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollvotes_bar.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollvotes_bar.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollvotes_bar.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollvotes_bar.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<tr>
+  <td align="right"><b>{answer_text}</b></td>
+  <td><img src="{layout_url}/images/bar.gif" width="{bar_width}" height="10" align="bottom" alt=""> {answer_num} ({answer_percent}%)</td>
+</tr>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollvotes_num.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollvotes_num.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/polls/templates/pollvotes_num.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/polls/templates/pollvotes_num.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<tr>
+  <td align="right"><b>{answer_text}</b></td>
+  <td>{answer_percent}% </td>
+</tr>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/BaseAdmin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/BaseAdmin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/BaseAdmin.class.php	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/BaseAdmin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -4,7 +4,10 @@
  * Abstract class for Admin Duties for Spam comments
  * 
  * @author Tom Willett	tomw AT pigstye DOT net 
+ *
+ * $Id: BaseAdmin.class.php,v 1.3 2005/04/10 10:02:42 dhaun Exp $
  */
+
 class BaseAdmin {
     /**
      * 
@@ -31,4 +34,4 @@
     } 
 } 
 
-?>
\ No newline at end of file
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/BaseCommand.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/BaseCommand.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/BaseCommand.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/BaseCommand.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -4,7 +4,10 @@
  * Basic Command Abstract class
  * 
  * @author Tom Willett	tomw AT pigstye DOT net 
+ *
+ * $Id: BaseCommand.class.php,v 1.3 2005/04/10 10:02:43 dhaun Exp $
  */
+
 class BaseCommand {
     /**
      * 
@@ -41,4 +44,4 @@
     } 
 } 
 
-?>
\ No newline at end of file
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/BlackList.Examine.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/BlackList.Examine.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/BlackList.Examine.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/BlackList.Examine.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,20 +1,36 @@
 <?php
+
 /**
  * File: BlackList.Examine.class.php
- * This is the Personal BlackList Examine class for the Geeklog SpamX Plug-in!
+ * This is the Personal BlackList Examine class for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author		Tom Willett		tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: BlackList.Examine.class.php,v 1.10.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'BlackList.Examine.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 /**
  * Include Abstract Examine Class
  */
 require_once($_CONF['path'] . 'plugins/spamx/' . 'BaseCommand.class.php');
 
 /**
+* html_entity_decode is only available as of PHP 4.3.0
+*/
+if (!function_exists ('html_entity_decode')) {
+    require_once ('PHP/Compat.php');
+
+    PHP_Compat::loadFunction ('html_entity_decode');
+}
+
+/**
  * Examines Comment according to Personal BLacklist
  * 
  * @author Tom Willett tomw AT pigstye DOT net 
@@ -27,28 +43,41 @@
     /**
      * Here we do the work
      */
-    function execute($comment)
+    function execute ($comment)
     {
-        global $_CONF, $_TABLES, $_USER, $LANG_SX00, $result;
+        global $_CONF, $_TABLES, $_USER, $LANG_SX00;
+
+        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
+            $uid = $_USER['uid'];
+        } else {
+            $uid = 1;
+        }
 
         /**
          * Include Blacklist Data
          */
-        $result = DB_query("SELECT * FROM {$_TABLES['spamx']} WHERE name='Personal'", 1);
-        $nrows = DB_numRows($result);
+        $result = DB_query ("SELECT value FROM {$_TABLES['spamx']} WHERE name='Personal'", 1);
+        $nrows = DB_numRows ($result);
 
+        // named entities
+        $comment = html_entity_decode ($comment);
+        // decimal notation
+        $comment = preg_replace ('/&#(\d+);/me', "chr(\\1)", $comment);
+        // hex notation
+        $comment = preg_replace ('/&#x([a-f0-9]+);/mei', "chr(0x\\1)", $comment);
         $ans = 0;
-        for($i = 1;$i <= $nrows;$i++) {
-            $A = DB_fetchArray($result);
-            $val = $A['value'];
-            if (preg_match("#$val#", $comment)) {
+        for ($i = 1; $i <= $nrows; $i++) {
+            list ($val) = DB_fetchArray ($result);
+            if (preg_match ("#$val#i", $comment)) {
                 $ans = 1; // quit on first positive match
-                SPAMX_log($LANG_SX00['foundspam'] . $val . $LANG_SX00['foundspam2'] . $_USER['uid'] . $LANG_SX00['foundspam3'] . $_SERVER['REMOTE_ADDR']);
+                SPAMX_log ($LANG_SX00['foundspam'] . $val .
+                           $LANG_SX00['foundspam2'] . $uid .
+                           $LANG_SX00['foundspam3'] . $_SERVER['REMOTE_ADDR']);
                 break;
-            } 
-        } 
+            }
+        }
         return $ans;
-    } 
-} 
+    }
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/config.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/config.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/config.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/config.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,31 +1,49 @@
 <?php
+
 /**
  * File: config.php
- * This is the config file for the Geeklog SpamX Plug-in!
+ * This is the config file for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author		Tom Willett		tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: config.php,v 1.13 2005/12/17 20:37:50 dhaun Exp $
  */
 
-$_SPX_CONF['version'] = '1.0.1';
-// Default Spamx Action
+$_SPX_CONF['version'] = '1.0.3';
+
+// Default Spam-X Action
 $_SPX_CONF['action'] = 128; // Default is ignore comment
 
-// URL blacklist changes RSS feed (currently only RSS v1.0 is supported)
-$_SPX_CONF['rss_url'] = 'http://www.jayallen.org/comment_spam/feeds/blacklist-changes.rdf';
+// NOTE: MT-Blacklist has been discontinued, i.e. the links to jayallen.org
+//       no longer work. For the time being, we provide a copy of the last
+//       version of MT-Blacklist on geeklog.net (see below) but there will be
+//       no more updates.
+//       Also see http://www.geeklog.net/article.php/mt-blacklist-discontinued
+
 // Entire MT-Blacklist (for inital import)
-$_SPX_CONF['mtblacklist_url'] = 'http://www.jayallen.org/comment_spam/blacklist.txt';
-// SpamX urls
+$_SPX_CONF['mtblacklist_url'] = 'http://www.geeklog.net/backend/blacklist.txt';
+
+// URL blacklist changes RSS feed (no longer working - see above)
+$_SPX_CONF['rss_url'] = 'http://www.jayallen.org/comment_spam/feeds/blacklist-changes.rdf';
+
+// Spam-X URLs
 $_SPX_CONF['spamx_rss_url'] = 'http://www.pigstye.net/backend/spamx_users.rdf';
 $_SPX_CONF['spamx_submit_url'] = 'http://www.pigstye.net/gplugs/spamx/submit.php';
+
 // address which mail admin module will use
 $_SPX_CONF['notification_email'] = $_CONF['site_mail'];
-// This sets Ban Plugin Table Prefix the Same as Geeklog
+
+// if set to = true, skip spam check for members of the "spamx Admin" group
+$_SPX_CONF['admin_override'] = false;
+
+// This sets Spam-X Plugin Table Prefix the same as Geeklog
 $_SPX_table_prefix = $_DB_table_prefix;
+
 // DO NOT CHANGE THE STUFF BELOW UNLESS YOU KNOW WHAT YOU ARE DOING
-// Add SpamX Plugin table to $_TABLES array
+// Add Spam-X Plugin table to $_TABLES array
 $_TABLES['spamx'] = $_SPX_table_prefix . 'spamx';
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/DeleteComment.Action.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/DeleteComment.Action.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/DeleteComment.Action.class.php	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/DeleteComment.Action.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,14 +1,21 @@
 <?php
+
 /**
  * File: DeleteComment.Action.class.php
- * This is the Delete Comment Action  for the Geeklog SpamX Plug-in!
+ * This is the Delete Comment Action  for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author		Tom Willett		tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: DeleteComment.Action.class.php,v 1.4.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'DeleteComment.Action.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 /**
  * Include Abstract Action Class
  */
@@ -33,11 +40,20 @@
 
     function execute($comment)
     {
-        global $result, $_CONF, $LANG_SX00;
+        global $result, $_CONF, $_TABLES, $LANG_SX00;
         $result = 128;
+
+        // update count of deleted spam posts
+        // Yes, there is the possibility of a race condition here. But it's
+        // only for statistical purposes anyway, nothing important ...
+        $counter = DB_getItem ($_TABLES['vars'], 'value', "name = 'spamx.counter'");
+        $counter++;
+        DB_query ("UPDATE {$_TABLES['vars']} SET value = $counter WHERE name = 'spamx.counter'");
+
         SPAMX_log($LANG_SX00['spamdeleted']);
+
         return 1;
     } 
 } 
 
-?>
\ No newline at end of file
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/Developer.txt 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/Developer.txt
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/Developer.txt	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/Developer.txt	2006-08-08 02:39:06.000000000 -0500
@@ -3,16 +3,19 @@
 
 The code from comment.php can be used as an example of the call.
 
-// Let plugins have a chance to decide what to do before saving the comment.
-$someError = PLG_commentPreSave($comment,$_CONF['spamx']);
+// Let plugins have a chance to check for SPAM
+$result = PLG_checkforSpam ($comment, $_CONF['spamx']);
     
-// If a plugin returned an error, return it
-if ($someError) {
-    return $someError;
+// Now check the result and redirect to index.php if spam action was taken
+if ($result > 0) {
+    // notice no return value here to prevent spam based denial of service attack
+    echo COM_refresh ($_CONF['site_url'] . '/index.php?msg='
+                      . $result . '&amp;plugin=spamx');
+    exit;
 }
 
 All that is required is to send the comment to spamx with the
-PLG_commentPreSave call.  The two parameters are the comment text itself and
+PLG_checkforSpam call.  The two parameters are the comment text itself and
 an action number with tells spamx what actions to take if spam is found. 
 You can use the built in actions by passing the sum of the numbers of the
 spamx action modules for those actions you want to use.  The actions are
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditBlackList.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditBlackList.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditBlackList.Admin.class.php	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditBlackList.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,14 +1,21 @@
 <?php
+
 /**
  * File: EditBlackList.Admin.class.php
- * This is the Edit Personal Blacklist Module for the Geeklog SpamX Plug-in!
+ * This is the Edit Personal Blacklist Module for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author		Tom Willett		tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: EditBlackList.Admin.class.php,v 1.4.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'EditBlackList.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 /**
  * Personal Black List Editor
  */
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditHeader.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditHeader.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditHeader.Admin.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditHeader.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,94 @@
+<?php
+
+/**
+* File: EditHeader.Admin.class.php
+* This is the Edit HTTP Header Module for the Geeklog Spam-X Plug-in!
+*
+* Copyright (C) 2005 by the following authors:
+* Author    Dirk Haun <dirk AT haun-online DOT de>
+*
+* based on the works of Tom Willett <tomw AT pigstye DOT net>
+*
+* Licensed under GNU General Public License
+*
+* $Id: EditHeader.Admin.class.php,v 1.3.2.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'EditHeader.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+/**
+* HTTP Header Editor
+*/
+
+require_once($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
+
+class EditHeader extends BaseAdmin {
+    /**
+     * Constructor
+     */
+    function display()
+    {
+        global $_CONF, $_GET, $_POST, $_TABLES, $LANG_SX00;
+
+        $action = COM_applyFilter ($_GET['action']);
+        if (empty ($action)) {
+            $action = COM_applyFilter ($_POST['paction']);
+        }
+
+        if ($action == 'delete') {
+            $entry = $_GET['entry'];
+            if (!empty ($entry)) {
+                $dbentry = addslashes ($entry);
+                $result = DB_query ("DELETE FROM {$_TABLES['spamx']} WHERE name='HTTPHeader' AND value='$dbentry'");
+            }
+        } elseif ($action == $LANG_SX00['addentry']) {
+            $entry = '';
+            $name = COM_applyFilter ($_REQUEST['header-name']);
+            $n = explode (':', $name);
+            $name = $n[0];
+            $value = $_REQUEST['header-value'];
+
+            if (!empty ($name) && !empty ($value)) {
+                $entry = $name . ': ' . $value;
+            }
+
+            $dbentry = addslashes ($entry);
+            if (!empty ($entry)) {
+                $result = DB_query ("INSERT INTO {$_TABLES['spamx']} VALUES ('HTTPHeader','$dbentry')");
+            }
+        }
+
+        $display = '<hr><p><b>';
+        $display .= $LANG_SX00['headerblack'];
+        $display .= '</b></p><ul>';
+        $result = DB_query ("SELECT value FROM {$_TABLES['spamx']} WHERE name='HTTPHeader' ORDER BY value");
+        $nrows = DB_numRows ($result);
+        for ($i = 0; $i < $nrows; $i++) {
+            list($e) = DB_fetchArray ($result);
+
+            $display .= '<li><a href="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=EditHeader&amp;action=delete&amp;entry=' . urlencode ($e) . '">' . $e . '</a></li>';
+        }
+        $display .= '</ul><p>' . $LANG_SX00['e1'] . '</p>';
+        $display .= '<p>' . $LANG_SX00['e2'] . '</p>';
+
+        $display .= '<form method="POST" action="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=EditHeader">';
+        $display .= '<table border="0" width="100%">' . LB;
+        $display .= '<tr><td align="right"><b>Header:</b></td>' . LB;
+        $display .= '<td><input type="text" size="40" name="header-name"> e.g. <tt>User-Agent</tt></td></tr>' . LB;
+        $display .= '<tr><td align="right"><b>Content:</b></td>' . LB;
+        $display .= '<td><input type="text" size="40" name="header-value"> e.g. <tt>Mozilla</tt></td></tr>' . LB;
+        $display .= '</table>' . LB;
+        $display .= '<p><input type="Submit" name="paction" value="' . $LANG_SX00['addentry'] . '">';
+        $display .= '</form>';
+        return $display;
+    }
+
+    function link()
+    {
+        return "Edit HTTP Header Blacklist";
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditIP.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditIP.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditIP.Admin.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditIP.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,81 @@
+<?php
+
+/**
+* File: EditIP.Admin.class.php
+* This is the Edit IPBlacklist Module for the Geeklog Spam-X Plug-in!
+*
+* Copyright (C) 2004-2005 by the following authors:
+* Author        Tom Willett        tomw AT pigstye DOT net
+*
+* Licensed under GNU General Public License
+*
+* $Id: EditIP.Admin.class.php,v 1.2.4.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'EditIP.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+/**
+* Personal Black List Editor
+*/
+
+require_once($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
+
+class EditIP extends BaseAdmin {
+    /**
+     * Constructor
+     */
+    function display()
+    {
+        global $_CONF, $_GET, $_POST, $_TABLES, $LANG_SX00;
+
+        require_once $_CONF['path'] . 'plugins/spamx/rss.inc.php';
+
+        $action = COM_applyFilter($_GET['action']);
+        if (empty($action)) {
+            $action = COM_applyFilter($_POST['paction']);
+        }
+
+        $entry = COM_applyFilter($_GET['entry']);
+        if (empty($entry)) {
+            $entry = COM_applyFilter($_POST['pentry']);
+        }
+
+        if ($action == 'delete') {
+            $result = DB_query('DELETE FROM ' . $_TABLES['spamx'] . ' where name="IP" AND value="' . $entry . '"');
+        } elseif ($action == $LANG_SX00['addentry']) {
+            if ($entry != "") {
+                $result = DB_query('INSERT INTO ' . $_TABLES['spamx'] . ' VALUES ("IP","' . $entry . '")');
+            }
+        } elseif ($action == $LANG_SX00['addcen']) {
+            foreach($_CONF['censorlist'] as $entry) {
+                $result = DB_query('INSERT INTO ' . $_TABLES['spamx'] . ' VALUES ("IP","' . $entry . '")');
+            }
+        }
+
+        $display = '<hr><p><b>';
+        $display .= $LANG_SX00['ipblack'];
+        $display .= '</b></p><ul>';
+        $result = DB_query ('SELECT value FROM ' . $_TABLES['spamx'] . ' WHERE name="IP"');
+        $nrows = DB_numRows($result);
+        for ($i = 0; $i < $nrows; $i++) {
+            list($e) = DB_fetchArray ($result);
+            $display .= '<li><a href="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=EditIP&action=delete&entry=' . urlencode($e) . '">' . $e . '</a></li>';
+        }
+        $display .= '</ul><p>' . $LANG_SX00['e1'] . '</p>';
+        $display .= '<p>' . $LANG_SX00['e2'] . '</p>';
+        $display .= '<form method="post" action="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=EditIP">';
+        $display .= '<input type="text" size ="30" name="pentry">&nbsp;&nbsp;&nbsp;';
+        $display .= '<input type="submit" name="paction" value="' . $LANG_SX00['addentry'] . '">';
+        $display .= '</form>';
+        return $display;
+    }
+
+    function link()
+    {
+        return "Edit IP Blacklist";
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditIPofURL.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditIPofURL.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/EditIPofURL.Admin.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/EditIPofURL.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,81 @@
+<?php
+
+/**
+* File: EditIP.Admin.class.php
+* This is the Edit IPBlacklist Module for the Geeklog Spam-X Plug-in!
+*
+* Copyright (C) 2004-2005 by the following authors:
+* Author        Tom Willett        tomw AT pigstye DOT net
+*
+* Licensed under GNU General Public License
+*
+* $Id: EditIPofURL.Admin.class.php,v 1.2.4.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'EditIPofURL.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+/**
+* Personal Black List Editor
+*/
+
+require_once($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
+
+class EditIPofUrl extends BaseAdmin {
+    /**
+     * Constructor
+     */
+    function display()
+    {
+        global $_CONF, $_GET, $_POST, $_TABLES, $LANG_SX00;
+
+        require_once $_CONF['path'] . 'plugins/spamx/rss.inc.php';
+
+        $action = COM_applyFilter($_GET['action']);
+        if (empty($action)) {
+            $action = COM_applyFilter($_POST['paction']);
+        }
+
+        $entry = COM_applyFilter($_GET['entry']);
+        if (empty($entry)) {
+            $entry = COM_applyFilter($_POST['pentry']);
+        }
+
+        if ($action == 'delete') {
+            $result = DB_query('DELETE FROM ' . $_TABLES['spamx'] . ' where name="IPofUrl" AND value="' . $entry . '"');
+        } elseif ($action == $LANG_SX00['addentry']) {
+            if ($entry != "") {
+                $result = DB_query('INSERT INTO ' . $_TABLES['spamx'] . ' VALUES ("IPofUrl","' . $entry . '")');
+            }
+        } elseif ($action == $LANG_SX00['addcen']) {
+            foreach($_CONF['censorlist'] as $entry) {
+                $result = DB_query('INSERT INTO ' . $_TABLES['spamx'] . ' VALUES ("IPofUrl","' . $entry . '")');
+            }
+        }
+
+        $display = '<hr><p><b>';
+        $display .= $LANG_SX00['ipofurlblack'];
+        $display .= '</b></p><ul>';
+        $result = DB_query('SELECT value FROM ' . $_TABLES['spamx'] . ' WHERE name="IPofUrl"');
+        $nrows = DB_numRows($result);
+        for ($i = 0; $i < $nrows; $i++) {
+            list($e) = DB_fetchArray ($result);
+            $display .= '<li><a href="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=EditIPofUrl&action=delete&entry=' . urlencode($e) . '">' . $e . '</a></li>';
+        }
+        $display .= '</ul><p>' . $LANG_SX00['e1'] . '</p>';
+        $display .= '<p>' . $LANG_SX00['e2'] . '</p>';
+        $display .= '<form method="post" action="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=EditIPofUrl">';
+        $display .= '<input type="text" size ="30" name="pentry">&nbsp;&nbsp;&nbsp;';
+        $display .= '<input type="submit" name="paction" value="' . $LANG_SX00['addentry'] . '">';
+        $display .= '</form>';
+        return $display;
+    }
+
+    function link()
+    {
+        return "Edit IP of URL Blacklist";
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/functions.inc 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/functions.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/functions.inc	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/functions.inc	2006-08-08 02:39:06.000000000 -0500
@@ -1,14 +1,22 @@
 <?php
+
 /**
  * File: functions.inc
- * This is the functions.inc for the Geeklog SpamX Plug-in!
+ * This is the functions.inc for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Authors      Tom Willett     tomw AT pigstye DOT net
+ *              Dirk Haun       dirk AT haun-online DOT de
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: functions.inc,v 1.19.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'functions.inc') !== false) {
+    die ('This file can not be used on its own.');
+}
+
 /**
  * Language file Include
  */
@@ -24,39 +32,10 @@
 * Include spamx config files
 */
 require_once ($_CONF['path'] . 'plugins/spamx/config.php');
+
 // +---------------------------------------------------------------------------+
 // | Geeklog Plugin API Implementations                                        |
 // +---------------------------------------------------------------------------+
-/**
- * Returns the items for this plugin that should appear on the main menu
- * 
- * NOTE: this MUST return the url/value pairs in the following format
- * $<arrayname>[<label>] = <url>
- * 
- * Universal Plugin:  Uncomment and fill in variables;
- * 
- * @return array Associative array of menu items to be added to menu
- */
-function plugin_getmenuitems_spamx()
-{
-    return array();
-} 
-
-/**
- * Check to see if this Plugin uses comments
- * 
- * Geeklog is checking to see if this plugin supports comments, tell it no!
- * NOTE: to support comments you must use the same date/time based ID for your
- * widget.  In other words, to make primary keys for your plugin you should call
- * makesid().  Comments are keyed off of that...it is a limitation on how geeklog
- * does comments.
- * 
- * @return boolean true or false
- */
-function plugin_commentsupport_spamx()
-{
-    return false;
-} 
 
 /**
  * Shows the statistics for the plugin on stats.php.  If
@@ -70,9 +49,52 @@
  */
 function plugin_showstats_spamx($showsitestats)
 {
+    global $_CONF, $_TABLES, $LANG_SX00;
     $retval = '';
+
+    if (SEC_hasRights('spamx.admin')) {
+        // detailed stats are only visible to Spam-X admins
+        require_once( $_CONF['path_system'] . 'lib-admin.php' );
+        $header_arr = array(
+            array('text' => $LANG_SX00['stats_page_title'], 'field' => 'label'),
+            array('text' => $LANG_SX00['stats_entries'], 'field' => 'stats'),
+        );
+        $data_arr = array();
+        $text_arr = array('has_menu'     => false,
+                          'title'        => $LANG_SX00['stats_headline'],
+        );
+        $data_arr = array(
+            array('label' => $LANG_SX00['stats_mtblacklist'],
+                'stats' => COM_numberFormat (DB_count ($_TABLES['spamx'], 'name', 'MTBlacklist'))),
+            array('label' => $LANG_SX00['stats_pblacklist'],
+                'stats' => COM_numberFormat (DB_count ($_TABLES['spamx'], 'name', 'Personal'))),
+            array('label' => $LANG_SX00['stats_ip'],
+                'stats' => COM_numberFormat (DB_count ($_TABLES['spamx'], 'name', 'IP'))),
+            array('label' => $LANG_SX00['stats_ipofurl'],
+                'stats' => COM_numberFormat (DB_count ($_TABLES['spamx'], 'name', 'IPofUrl'))),
+            array('label' => $LANG_SX00['stats_header'],
+                'stats' => COM_numberFormat (DB_count ($_TABLES['spamx'], 'name', 'HTTPHeader')))
+        );
+        $retval .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
+    }
+
     return $retval;
-} 
+}
+
+/**
+* New stats plugin API function for proper integration with the site stats
+* 
+* @return   array(item text, item count);
+* 
+*/
+function plugin_statssummary_spamx ()
+{
+    global $_TABLES, $LANG_SX00;
+
+    $counter = DB_getItem ($_TABLES['vars'], 'value', "name = 'spamx.counter'");
+
+    return array ($LANG_SX00['stats_deleted'], COM_numberFormat ($counter));
+}
 
 /**
  * This will put an option for the plugin in the command and control block on moderation.php
@@ -89,7 +111,7 @@
     if (SEC_hasRights('spamx.admin')) {
         $retval = array($LANG_SX00['plugin_name'],
             $_CONF['site_admin_url'] . '/plugins/spamx/index.php',
-            $_CONF['site_admin_url'] . '/plugins/spamx/images/spamx.gif');
+            plugin_geticon_spamx ());
     } 
 
     return $retval;
@@ -119,12 +141,48 @@
  * 
  * @return string    plugin version
  */
-function plugin_chkVersion_spamx() {
-    global $_SPX_CONF; 
+function plugin_chkVersion_spamx ()
+{
+    global $_SPX_CONF;
+
     return $_SPX_CONF['version'];
 }
 
 /**
+* Update the Spam-X plugin
+*
+* @return   int     Number of message to display
+*
+*/
+function plugin_upgrade_spamx ()
+{
+    global $_TABLES, $_SPX_CONF;
+
+    $v = DB_getItem ($_TABLES['plugins'], 'pi_version', "pi_name = 'spamx'");
+
+    if ($v != $_SPX_CONF['version']) {
+        switch ($v) {
+            case '1.0.1':
+                // Add the counter
+                DB_query ("INSERT INTO {$_TABLES['vars']} VALUES ('spamx.counter', '0')");
+                break;
+        }
+
+        // update version number
+        DB_query ("UPDATE {$_TABLES['plugins']} SET pi_version = '{$_SPX_CONF['version']}' WHERE pi_name = 'spamx'");
+
+        // check if version number was updated successfully
+        $v = DB_getItem ($_TABLES['plugins'], 'pi_version', "pi_name = 'spamx'");
+    }
+
+    if ($v == $_SPX_CONF['version']) {
+        return 3001;
+    }
+
+    return 3002;
+}
+
+/**
  * Actual Plugin Functions here.
  */
 
@@ -136,27 +194,35 @@
 
 function plugin_checkforSpam_spamx($comment, $action)
 {
-    global $_TABLES, $_CONF, $_SPX_CONF; 
-    // Set up Spamx_Action and SpamX_Examine arrays
+    global $_CONF, $_TABLES, $_SPX_CONF; 
+
+    // skip spam check for members of the 'spamx Admin' group, if enabled
+    if (isset ($_SPX_CONF['admin_override']) && $_SPX_CONF['admin_override']) {
+        if (SEC_inGroup ('spamx Admin')) {
+            return 0;
+        }
+    }
+
+    // Set up Spamx_Action and Spamx_Examine arrays
     $Spamx_Action = array();
     $Spamx_Examine = array();
     if ($dir = @opendir($_CONF['path'] . 'plugins/spamx/')) {
         while (($file = readdir($dir)) !== false) {
             if (is_file($_CONF['path'] . 'plugins/spamx/' . $file)) {
                 if (substr($file, -17) == '.Action.class.php') {
-                    $sfile = str_replace(".Action.class.php", "", $file);
+                    $sfile = str_replace('.Action.class.php', '', $file);
                     require_once ($_CONF['path'] . 'plugins/spamx/' . $file);
                     $CM = new $sfile;
                     $Spamx_Action[$CM->number()] = $sfile;
-                } 
+                }
                 if (substr($file, -18) == '.Examine.class.php') {
-                    $sfile = str_replace(".Examine.class.php", "", $file);
+                    $sfile = str_replace('.Examine.class.php', '', $file);
                     $Spamx_Examine[] = $sfile;
-                } 
-            } 
-        } 
+                }
+            }
+        }
         closedir($dir);
-    } 
+    }
     $res = 0;
     foreach ($Spamx_Examine as $Examine) {
         $filename = $Examine . '.Examine.class.php';
@@ -165,25 +231,27 @@
         $res = $EX->execute($comment);
         if ($res == 1) {
             break;
-        } 
-    } 
+        }
+    }
 
     if ($res == 1) { // Examine Class found a match - spam detected
         if ($action == -1 or $action == '') {
             $action = $_SPX_CONF['action'];
-        } 
+        }
         foreach($Spamx_Action as $Num => $Act) {
-            if (($action &$Num) == $Num) {
+            if (($action & $Num) == $Num) {
                 $filename = $Act . '.Action.class.php';
                 require_once($_CONF['path'] . 'plugins/spamx/' . $filename);
                 $AC = new $Act;
                 $AC->execute($comment);
-            } 
-        } 
+            }
+        }
+
         return $AC->result();
-    } 
+    }
+
     return $res;
-} 
+}
 
 /**
  * Logs message to spamx.log
@@ -199,7 +267,7 @@
 {
     global $_CONF, $LANG01, $_SPAMX_log_flg;
 
-    if ($_SPAMX_log_flg == true) {
+    if ($_SPAMX_log_flg) {
         $timestamp = strftime("%c");
         $logfile = $_CONF['path_log'] . 'spamx.log';
 
@@ -209,10 +277,22 @@
 
         fputs($file, "$timestamp - $logentry \n");
     } 
-    return $retval;
 } 
 
 /**
+* Returns the URL of the plugin's icon
+*
+* @return   string      URL of the icon
+*
+*/
+function plugin_geticon_spamx ()
+{
+    global $_CONF;
+
+    return $_CONF['site_admin_url'] . '/plugins/spamx/images/spamx.png';
+}
+
+/**
  * Removes the datastructures for this plugin from the Geeklog database.
  * This routine will get called from the Plugin install program if user select De-Install or if Delete is used in the Plugin Editor.
  * The Plugin Installer will also call this routine upon and install error to remove anything it has created.
@@ -252,6 +332,7 @@
     COM_errorLog("Removing $pi_name Admin Group", 1);
     DB_query("DELETE FROM {$_TABLES['groups']} WHERE grp_id = $grp_id", 1);
     DB_query("DELETE FROM {$_TABLES['vars']} WHERE name = '{$pi_name}_gid'");
+    DB_query("DELETE FROM {$_TABLES['vars']} WHERE name = 'spamx.counter'");
     COM_errorLog("Removing root users from admin of $pi_name");
     DB_query("DELETE FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $grp_id", 1); 
     // Remove all the associated features -- access rights
@@ -263,7 +344,7 @@
     } 
 
     COM_errorLog ('Dropping ' . $_TABLES['spamx'] . ' table.', 1);
-    DB_query ("DROP TABLE {$_TABLES['spamx']}");
+    DB_query ("DROP TABLE {$_TABLES['spamx']}", 1);
 
     COM_errorLog('...success', 1);
     return true;
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/Header.Examine.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/Header.Examine.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/Header.Examine.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/Header.Examine.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+/**
+* File: Header.Examine.class.php
+* This is the HTTP Header Examine class for the Geeklog Spam-X Plug-in!
+*
+* Copyright (C) 2005 by the following authors:
+* Author    Dirk Haun <dirk AT haun-online DOT de>
+*
+* based on the works of Tom Willett <tomw AT pigstye DOT net>
+*
+* Licensed under the GNU General Public License
+*
+* $Id: Header.Examine.class.php,v 1.3.4.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'Header.Examine.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+/**
+* Include Abstract Examine Class
+*/
+require_once($_CONF['path'] . 'plugins/spamx/' . 'BaseCommand.class.php');
+
+/**
+* Examines Post according to HTTP Headers
+*
+* @author Dirk Haun <dirk AT haun-online DOT de>
+*/
+
+class Header extends BaseCommand {
+    /**
+     * No Constructor Use BaseCommand constructor
+     */
+    /**
+     * Here we do the work
+     */
+    function execute($comment)
+    {
+        global $_CONF, $_TABLES, $_USER, $LANG_SX00, $result;
+
+        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
+            $uid = $_USER['uid'];
+        } else {
+            $uid = 1;
+        }
+
+        // get HTTP headers of the current request
+        if (function_exists ('getallheaders')) {
+            $headers = getallheaders ();
+        } else {
+            // if getallheaders() is not available, we have to fake it using
+            // the $_SERVER['HTTP_...'] values
+            $headers = array ();
+            foreach ($_SERVER as $key => $content) {
+                if (substr ($key, 0, 4) == 'HTTP') {
+                    $name = str_replace ('_', '-', substr ($key, 5));
+                    $headers[$name] = $content;
+                }
+            }
+        }
+
+        $result = DB_query ("SELECT value FROM {$_TABLES['spamx']} WHERE name='HTTPHeader'", 1);
+        $nrows = DB_numRows ($result);
+
+        $ans = 0;
+        for ($i = 0; $i < $nrows; $i++) {
+            list ($entry) = DB_fetchArray ($result);
+
+            $v = explode (':', $entry);
+            $name = trim ($v[0]);
+            $value = trim ($v[1]);
+
+            foreach ($headers as $key => $content) {
+                if (strcasecmp ($name, $key) == 0) {
+                    if (preg_match ("#$value#i", $content)) {
+                        $ans = 1; // quit on first positive match
+                        SPAMX_log ($LANG_SX00['foundspam'] . $entry .
+                                   $LANG_SX00['foundspam2'] . $uid . 
+                                   $LANG_SX00['foundspam3'] .
+                                   $_SERVER['REMOTE_ADDR']);
+                        break;
+                    }
+                }
+            }
+        }
+
+        return $ans;
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/Import.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/Import.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/Import.Admin.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/Import.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -6,16 +6,22 @@
  * 
  * Updates Sites MT Blacklist via Master MT Blacklist rss feed
  * 
- * Copyright (C) 2004 by the following authors:
- * Author      Tom Willett     tomw@pigstye.net
- * Author      Dirk Haun       dirk@haun-online.de
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author      Tom Willett     tomw AT pigstye DOT net
+ * Author      Dirk Haun       dirk AT haun-online DOT de
  * 
  * Licensed under GNU General Public License
  * 
  * Based on MT-Blacklist Updater by
  * Cheah Chu Yeow (http://blog.codefront.net/)
+ *
+ * $Id: Import.Admin.class.php,v 1.9.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'Import.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 require_once ($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
 
 class Import extends BaseAdmin {
@@ -59,6 +65,14 @@
         require_once($_CONF['path'] . 'plugins/spamx/magpierss/rss_utils.inc');
 
         $rss = fetch_rss($_SPX_CONF['rss_url']); 
+        if ($rss === false) {
+            if (strpos ($_SPX_CONF['rss_url'], 'jayallen.org') === false) {
+                return '<p>An error occured when updating MT Blacklist</p>';
+            } else {
+                return '<p>Please note that MT-Blacklist has been <a href="http://www.geeklog.net/article.php/mt-blacklist-discontinued">discontinued</a> and will not be updated any more.</p>';
+            }
+        }
+
         // entries to add and delete, according to the blacklist changes feed
         $to_add = array();
         $to_delete = array();
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/IP.Examine.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/IP.Examine.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/IP.Examine.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/IP.Examine.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,68 @@
+<?php
+
+/**
+* File: BlackList.Examine.class.php
+* This is the Personal BlackList Examine class for the Geeklog Spam-X Plug-in!
+*
+* Copyright (C) 2004-2005 by the following authors:
+* Author        Tom Willett        tomw AT pigstye DOT net
+*
+* Licensed under GNU General Public License
+*
+* $Id: IP.Examine.class.php,v 1.6.2.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'IP.Examine.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+/**
+* Include Abstract Examine Class
+*/
+require_once($_CONF['path'] . 'plugins/spamx/' . 'BaseCommand.class.php');
+
+/**
+* Examines Comment according to Personal BLacklist
+*
+* @author Tom Willett tomw AT pigstye DOT net
+*/
+
+class IP extends BaseCommand {
+    /**
+     * No Constructor Use BaseCommand constructor
+     */
+    /**
+     * Here we do the work
+     */
+    function execute($comment)
+    {
+        global $_CONF, $_TABLES, $_USER, $LANG_SX00, $result;
+
+        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
+            $uid = $_USER['uid'];
+        } else {
+            $uid = 1;
+        }
+
+        /**
+         * Include Blacklist Data
+         */
+        $result = DB_query("SELECT value FROM {$_TABLES['spamx']} WHERE name='IP'", 1);
+        $nrows = DB_numRows($result);
+
+        $ans = 0;
+        for ($i = 1; $i <= $nrows; $i++) {
+            list ($val) = DB_fetchArray ($result);
+            if ( preg_match ("#$val#i", $_SERVER['REMOTE_ADDR'])) {
+                $ans = 1; // quit on first positive match
+                SPAMX_log ($LANG_SX00['foundspam'] . $val .
+                           $LANG_SX00['foundspam2'] . $uid .
+                           $LANG_SX00['foundspam3'] . $_SERVER['REMOTE_ADDR']);
+                break;
+            }
+        }
+        return $ans;
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/IPofUrl.Examine.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/IPofUrl.Examine.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/IPofUrl.Examine.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/IPofUrl.Examine.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,89 @@
+<?php
+
+/**
+* File: BlackList.Examine.class.php
+* This is the Personal BlackList Examine class for the Geeklog Spam-X Plug-in!
+*
+* Copyright (C) 2004-2005 by the following authors:
+* Author        Tom Willett        tomw AT pigstye DOT net
+*
+* Licensed under GNU General Public License
+*
+* $Id: IPofUrl.Examine.class.php,v 1.4.4.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'IPofUrl.Examine.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+/**
+* Include Abstract Examine Class
+*/
+require_once($_CONF['path'] . 'plugins/spamx/' . 'BaseCommand.class.php');
+
+/**
+* html_entity_decode is only available as of PHP 4.3.0
+*/
+if (!function_exists ('html_entity_decode')) {
+    require_once ('PHP/Compat.php');
+
+    PHP_Compat::loadFunction ('html_entity_decode');
+}
+
+/**
+* Examines Comment according to Personal BLacklist
+*
+* @author Tom Willett tomw AT pigstye DOT net
+*/
+
+class IPofUrl extends BaseCommand {
+    /**
+     * No Constructor Use BaseCommand constructor
+     */
+    /**
+     * Here we do the work
+     */
+    function execute($comment)
+    {
+        global $_CONF, $_TABLES, $_USER, $LANG_SX00, $result;
+
+        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
+            $uid = $_USER['uid'];
+        } else {
+            $uid = 1;
+        }
+
+        /**
+         * Check for IP of url in blacklist
+         */
+        /*
+        * regex to find urls $2 = fqd
+        */
+        $regx = '(ftp|http|file)://([^/\\s]+)';
+        $num = preg_match_all ("#{$regx}#", html_entity_decode ($comment), $urls);
+
+        $result = DB_query ("SELECT value FROM {$_TABLES['spamx']} WHERE name='IPofUrl'", 1);
+        $nrows = DB_numRows ($result);
+
+        $ans = 0;
+        for ($j = 1; $j <= $nrows; $j++) {
+            list ($val) = DB_fetchArray ($result);
+            for ($i = 0; $i < $num; $i++) {
+              $ip = gethostbyname ($urls[2][$i]);
+              if ($val == $ip) {
+                $ans = 1; // quit on first positive match
+                SPAMX_log ($LANG_SX00['foundspam'] . $urls[2][$i] .
+                           $LANG_SX00['foundspam2'] . $uid .
+                           $LANG_SX00['foundspam3'] . $_SERVER['REMOTE_ADDR']);
+                break;
+              }
+            }
+            if ($ans == 1) {
+              break;
+            }
+        }
+        return $ans;
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/english.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/english.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/english.php	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/english.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,12 +2,14 @@
 
 /**
  * File: english.php
- * This is the English language page for the Geeklog SpamX Plug-in!
+ * This is the English language page for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author        Tom Willett        tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: english.php,v 1.13 2005/09/25 16:39:12 dhaun Exp $
  */
 
 $LANG_SX00 = array (
@@ -17,14 +19,14 @@
     'inst4' => 'send an email to <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> telling me. ',
     'inst5' => 'All requests will be honored.',
     'submit' => 'Submit',
-    'subthis' => 'this info to SpamX Central Database',
+    'subthis' => 'this info to Spam-X Central Database',
     'secbut' => 'This second button creates an rdf feed so that others can import your list.',
     'sitename' => 'Site Name: ',
-    'URL' => 'URL to SpamX List: ',
+    'URL' => 'URL to Spam-X List: ',
     'RDF' => 'RDF url: ',
-    'impinst1a' => 'Before you use the SpamX comment Spam blocker facility to view and import personal Blacklists from other',
+    'impinst1a' => 'Before you use the Spam-X comment Spam blocker facility to view and import personal Blacklists from other',
     'impinst1b' => ' sites, I ask that you press the following two buttons. (You have to press the last one.)',
-    'impinst2' => 'This first submits your website to the Gplugs/SpamX site so that it can be added to the master list of ',
+    'impinst2' => 'This first submits your website to the Gplugs/Spam-X site so that it can be added to the master list of ',
     'impinst2a' => 'sites sharing their blacklists. (Note: if you have multiple sites you might want to designate one as the ',
     'impinst2b' => 'master and only submit its name. This will allow you to update your sites easily and keep the list smaller.) ',
     'impinst2c' => 'After you press the Submit button, press [back] on your browser to return here.',
@@ -44,11 +46,11 @@
     'addcen' => 'Add Censor List',
     'addentry' => 'Add Entry',
     'e1' => 'To Delete an entry click it.',
-    'e2' => 'To Add an entry, enter in in the box and click Add.  Entries can use full Perl Regular Expressions.',
-    'pblack' => 'SpamX Personal Blacklist',
-    'conmod' => 'Configure SpamX Module Usage',
-    'acmod' => 'SpamX Action Modules',
-    'exmod' => 'SpamX Examine Modules',
+    'e2' => 'To Add an entry, enter it in the box and click Add.  Entries can use full Perl Regular Expressions.',
+    'pblack' => 'Spam-X Personal Blacklist',
+    'conmod' => 'Configure Spam-X Module Usage',
+    'acmod' => 'Spam-X Action Modules',
+    'exmod' => 'Spam-X Examine Modules',
     'actmod' => 'Active Modules',
     'avmod' => 'Available Modules',
     'coninst' => '<hr>Click on an Active module to remove it, click on an Available module to add it.<br>Modules are executed in order presented.',
@@ -62,9 +64,9 @@
     'uPlist' => 'Update Personal Blacklist',
     'entriesadded' => 'Entries Added',
     'entriesdeleted' => 'Entries Deleted',
-    'viewlog' => 'View SpamX Log',
+    'viewlog' => 'View Spam-X Log',
     'clearlog' => 'Clear Log File',
-    'logcleared' => '- SpamX Log File Cleared',
+    'logcleared' => '- Spam-X Log File Cleared',
     'plugin' => 'Plugin',
     'access_denied' => 'Access Denied',
     'access_denied_msg' => 'Only Root Users have Access to this Page.  Your user name and IP have been recorded.',
@@ -88,27 +90,47 @@
 	'deletespam' => 'Delete Spam',
 	'numtocheck' => 'Number of Comments to check',
 	'note1'		=> '<p>Note: Mass Delete is intended to help you when you are hit by',
-	'note2'		=> ' comment spam and SpamX does not catch it.  <ul><li>First find the link(s) or other ',
-	'note3'		=> 'identifiers of this Spam comment and add it to you personal blacklist.</li><li>Then ',
-	'note4'		=> 'come back here and have SpamX check the latest comments for spam.</li></ul>Comments ',
+	'note2'		=> ' comment spam and Spam-X does not catch it.  <ul><li>First find the link(s) or other ',
+	'note3'		=> 'identifiers of this spam comment and add it to your personal blacklist.</li><li>Then ',
+	'note4'		=> 'come back here and have Spam-X check the latest comments for spam.</li></ul>Comments ',
 	'note5'		=> 'are checked from newest comment to oldest -- checking more comments ',
-	'note6'		=> 'requires more time for the check</p>',
-	'masshead'	=> '<hr><center><h1>Mass Delete Spam Comments</h1></center>',
+	'note6'		=> 'requires more time for the check.</p>',
+	'masshead'	=> '<hr><h1 align="center">Mass Delete Spam Comments</h1>',
+	'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
 	'comdel'	=> ' comments deleted.',
     'initial_Pimport' => '<p>Personal Blacklist Import"',
     'initial_import' => 'Initial MT-Blacklist Import',
     'import_success' => '<p>Successfully imported %d blacklist entries.',
     'import_failure' => '<p><strong>Error:</strong> No entries found.',
     'allow_url_fopen' => '<p>Sorry, your webserver configuration does not allow reading of remote files (<code>allow_url_fopen</code> is off). Please download the blacklist from the following URL and upload it into Geeklog\'s "data" directory, <tt>%s</tt>, before trying again:',
-    'documentation' => 'SpamX Plugin Documentation',
-    'emailmsg' => "A new spam comment has been posted at \"%s\"\nUser UID:\"%s\"\n\nContent:\"%s\"",
-    'plugin_name' => 'SpamX'
-);
+    'documentation' => 'Spam-X Plugin Documentation',
+    'emailmsg' => "A new spam post has been submitted at \"%s\"\nUser UID: \"%s\"\n\nContent:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
 
+    'plugin_name' => 'Spam-X'
+);
 
-/* Define Messages that are shown when SPAMX module action is taken */
-$PLG_spamx_MESSAGE128 = 'SPAM detected and Comment or Message was deleted.';
-$PLG_spamx_MESSAGE8   = 'SPAM detected. Email sent to admin.';
 
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = 'Spam detected and Comment or Message was deleted.';
+$PLG_spamx_MESSAGE8   = 'Spam detected. Email sent to admin.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/english_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/english_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/english_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/english_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * File: english_utf-8.php
+ * This is the English language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2004-2006 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
+ * 
+ * Licensed under GNU General Public License
+ *
+ * $Id: english_utf-8.php,v 1.1 2006/02/11 12:43:22 dhaun Exp $
+ */
+
+$LANG_SX00 = array (
+    'inst1' => '<p>If you do this, then others ',
+    'inst2' => 'will be able to view and import your personal blacklist and we can create a more effective ',
+    'inst3' => 'distributed database.</p><p>If you have submitted your website and decide you do not wish your website to remain on the list ',
+    'inst4' => 'send an email to <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> telling me. ',
+    'inst5' => 'All requests will be honored.',
+    'submit' => 'Submit',
+    'subthis' => 'this info to Spam-X Central Database',
+    'secbut' => 'This second button creates an rdf feed so that others can import your list.',
+    'sitename' => 'Site Name: ',
+    'URL' => 'URL to Spam-X List: ',
+    'RDF' => 'RDF url: ',
+    'impinst1a' => 'Before you use the Spam-X comment Spam blocker facility to view and import personal Blacklists from other',
+    'impinst1b' => ' sites, I ask that you press the following two buttons. (You have to press the last one.)',
+    'impinst2' => 'This first submits your website to the Gplugs/Spam-X site so that it can be added to the master list of ',
+    'impinst2a' => 'sites sharing their blacklists. (Note: if you have multiple sites you might want to designate one as the ',
+    'impinst2b' => 'master and only submit its name. This will allow you to update your sites easily and keep the list smaller.) ',
+    'impinst2c' => 'After you press the Submit button, press [back] on your browser to return here.',
+    'impinst3' => 'The Following values will be sent: (you can edit them if they are wrong).',
+    'availb' => 'Available Blacklists',
+    'clickv' => 'Click to View Blacklist',
+    'clicki' => 'Click to Import Blacklist',
+    'ok' => 'OK',
+    'rsscreated' => 'RSS Feed Created',
+    'add1' => 'Added ',
+    'add2' => ' entries from ',
+    'add3' => "'s blacklist.",
+    'adminc' => 'Administration Commands:',
+    'mblack' => 'My Blacklist:',
+    'rlinks' => 'Related Links:',
+    'e3' => 'To Add the words from Geeklogs CensorList Press the Button:',
+    'addcen' => 'Add Censor List',
+    'addentry' => 'Add Entry',
+    'e1' => 'To Delete an entry click it.',
+    'e2' => 'To Add an entry, enter it in the box and click Add.  Entries can use full Perl Regular Expressions.',
+    'pblack' => 'Spam-X Personal Blacklist',
+    'conmod' => 'Configure Spam-X Module Usage',
+    'acmod' => 'Spam-X Action Modules',
+    'exmod' => 'Spam-X Examine Modules',
+    'actmod' => 'Active Modules',
+    'avmod' => 'Available Modules',
+    'coninst' => '<hr>Click on an Active module to remove it, click on an Available module to add it.<br>Modules are executed in order presented.',
+    'fsc' => 'Found Spam Comment matching ',
+    'fsc1' => ' posted by user ',
+    'fsc2' => ' from IP ',
+    'uMTlist' => 'Update MT-Blacklist',
+    'uMTlist2' => ': Added ',
+    'uMTlist3' => ' entries and deleted ',
+    'entries' => ' entries.',
+    'uPlist' => 'Update Personal Blacklist',
+    'entriesadded' => 'Entries Added',
+    'entriesdeleted' => 'Entries Deleted',
+    'viewlog' => 'View Spam-X Log',
+    'clearlog' => 'Clear Log File',
+    'logcleared' => '- Spam-X Log File Cleared',
+    'plugin' => 'Plugin',
+    'access_denied' => 'Access Denied',
+    'access_denied_msg' => 'Only Root Users have Access to this Page.  Your user name and IP have been recorded.',
+    'admin' => 'Plugin Administration',
+    'install_header' => 'Install/Uninstall Plugin',
+    'installed' => 'The Plugin is Installed',
+    'uninstalled' => 'The Plugin is Not Installed',
+    'install_success' => 'Installation Successful',
+    'install_failed' => 'Installation Failed -- See your error log to find out why.',
+    'uninstall_msg' => 'Plugin Successfully Uninstalled',
+    'install' => 'Install',
+    'uninstall' => 'UnInstall',
+    'warning' => 'Warning! Plugin is still Enabled',
+    'enabled' => 'Disable plugin before uninstalling.',
+    'readme' => 'STOP! Before you press install please read the ',
+    'installdoc' => 'Install Document.',
+    'spamdeleted' => 'Deleted Spam Comment',
+    'foundspam' => 'Found Spam Comment matching ',
+    'foundspam2' => ' posted by user ',
+    'foundspam3' => ' from IP ',
+	'deletespam' => 'Delete Spam',
+	'numtocheck' => 'Number of Comments to check',
+	'note1'		=> '<p>Note: Mass Delete is intended to help you when you are hit by',
+	'note2'		=> ' comment spam and Spam-X does not catch it.  <ul><li>First find the link(s) or other ',
+	'note3'		=> 'identifiers of this spam comment and add it to your personal blacklist.</li><li>Then ',
+	'note4'		=> 'come back here and have Spam-X check the latest comments for spam.</li></ul>Comments ',
+	'note5'		=> 'are checked from newest comment to oldest -- checking more comments ',
+	'note6'		=> 'requires more time for the check.</p>',
+	'masshead'	=> '<hr><h1 align="center">Mass Delete Spam Comments</h1>',
+	'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
+	'comdel'	=> ' comments deleted.',
+    'initial_Pimport' => '<p>Personal Blacklist Import"',
+    'initial_import' => 'Initial MT-Blacklist Import',
+    'import_success' => '<p>Successfully imported %d blacklist entries.',
+    'import_failure' => '<p><strong>Error:</strong> No entries found.',
+    'allow_url_fopen' => '<p>Sorry, your webserver configuration does not allow reading of remote files (<code>allow_url_fopen</code> is off). Please download the blacklist from the following URL and upload it into Geeklog\'s "data" directory, <tt>%s</tt>, before trying again:',
+    'documentation' => 'Spam-X Plugin Documentation',
+    'emailmsg' => "A new spam post has been submitted at \"%s\"\nUser UID: \"%s\"\n\nContent:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
+);
+
+
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = 'Spam detected and Comment or Message was deleted.';
+$PLG_spamx_MESSAGE8   = 'Spam detected. Email sent to admin.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/farsi_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/farsi_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/farsi_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/farsi_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,138 @@
+<?php
+
+/**
+ * File: farsi.php
+ * This is the Farsi (Persian) language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
+ *
+ * Farsi (Persian) translation provided by 4shir.
+ *
+ * Licensed under GNU General Public License
+ *
+ * $Id: farsi_utf-8.php,v 1.2 2005/09/25 16:39:12 dhaun Exp $
+ */
+
+$LANG_SX00 = array (
+    'inst1' => '<p>If you do this, then others ',
+    'inst2' => 'will be able to view and import your personal blacklist and we can create a more effective ',
+    'inst3' => 'distributed database.</p><p>If you have submitted your website and decide you do not wish your website to remain on the list ',
+    'inst4' => 'send an email to <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> telling me. ',
+    'inst5' => 'All requests will be honored.',
+    'submit' => 'Submit',
+    'subthis' => 'this info to Spam-X Central Database',
+    'secbut' => 'This second button creates an rdf feed so that others can import your list.',
+    'sitename' => 'Site Name: ',
+    'URL' => 'URL to Spam-X List: ',
+    'RDF' => 'RDF url: ',
+    'impinst1a' => 'Before you use the Spam-X comment Spam blocker facility to view and import personal Blacklists from other',
+    'impinst1b' => ' sites, I ask that you press the following two buttons. (You have to press the last one.)',
+    'impinst2' => 'This first submits your website to the Gplugs/Spam-X site so that it can be added to the master list of ',
+    'impinst2a' => 'sites sharing their blacklists. (Note: if you have multiple sites you might want to designate one as the ',
+    'impinst2b' => 'master and only submit its name. This will allow you to update your sites easily and keep the list smaller.) ',
+    'impinst2c' => 'After you press the Submit button, press [back] on your browser to return here.',
+    'impinst3' => 'The Following values will be sent: (you can edit them if they are wrong).',
+    'availb' => 'Available Blacklists',
+    'clickv' => 'Click to View Blacklist',
+    'clicki' => 'Click to Import Blacklist',
+    'ok' => 'OK',
+    'rsscreated' => 'RSS Feed Created',
+    'add1' => 'Added ',
+    'add2' => ' entries from ',
+    'add3' => "'s blacklist.",
+    'adminc' => 'Administration Commands:',
+    'mblack' => 'My Blacklist:',
+    'rlinks' => 'Related Links:',
+    'e3' => 'To Add the words from Geeklogs CensorList Press the Button:',
+    'addcen' => 'Add Censor List',
+    'addentry' => 'Add Entry',
+    'e1' => 'To Delete an entry click it.',
+    'e2' => 'To Add an entry, enter it in the box and click Add.  Entries can use full Perl Regular Expressions.',
+    'pblack' => 'Spam-X Personal Blacklist',
+    'conmod' => 'Configure Spam-X Module Usage',
+    'acmod' => 'Spam-X Action Modules',
+    'exmod' => 'Spam-X Examine Modules',
+    'actmod' => 'Active Modules',
+    'avmod' => 'Available Modules',
+    'coninst' => '<hr>Click on an Active module to remove it, click on an Available module to add it.<br>Modules are executed in order presented.',
+    'fsc' => 'Found Spam Comment matching ',
+    'fsc1' => ' posted by user ',
+    'fsc2' => ' from IP ',
+    'uMTlist' => 'Update MT-Blacklist',
+    'uMTlist2' => ': Added ',
+    'uMTlist3' => ' entries and deleted ',
+    'entries' => ' entries.',
+    'uPlist' => 'Update Personal Blacklist',
+    'entriesadded' => 'Entries Added',
+    'entriesdeleted' => 'Entries Deleted',
+    'viewlog' => 'View Spam-X Log',
+    'clearlog' => 'Clear Log File',
+    'logcleared' => '- Spam-X Log File Cleared',
+    'plugin' => 'Plugin',
+    'access_denied' => 'Access Denied',
+    'access_denied_msg' => 'Only Root Users have Access to this Page.  Your user name and IP have been recorded.',
+    'admin' => 'Plugin Administration',
+    'install_header' => 'Install/Uninstall Plugin',
+    'installed' => 'The Plugin is Installed',
+    'uninstalled' => 'The Plugin is Not Installed',
+    'install_success' => 'Installation Successful',
+    'install_failed' => 'Installation Failed -- See your error log to find out why.',
+    'uninstall_msg' => 'Plugin Successfully Uninstalled',
+    'install' => 'Install',
+    'uninstall' => 'UnInstall',
+    'warning' => 'Warning! Plugin is still Enabled',
+    'enabled' => 'Disable plugin before uninstalling.',
+    'readme' => 'STOP! Before you press install please read the ',
+    'installdoc' => 'Install Document.',
+    'spamdeleted' => 'Deleted Spam Comment',
+    'foundspam' => 'Found Spam Comment matching ',
+    'foundspam2' => ' posted by user ',
+    'foundspam3' => ' from IP ',
+	'deletespam' => 'Delete Spam',
+	'numtocheck' => 'Number of Comments to check',
+	'note1'		=> '<p>Note: Mass Delete is intended to help you when you are hit by',
+	'note2'		=> ' comment spam and Spam-X does not catch it.  <ul><li>First find the link(s) or other ',
+	'note3'		=> 'identifiers of this spam comment and add it to your personal blacklist.</li><li>Then ',
+	'note4'		=> 'come back here and have Spam-X check the latest comments for spam.</li></ul>Comments ',
+	'note5'		=> 'are checked from newest comment to oldest -- checking more comments ',
+	'note6'		=> 'requires more time for the check.</p>',
+	'masshead'	=> '<hr><h1 align="center">Mass Delete Spam Comments</h1>',
+    'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
+	'comdel'	=> ' comments deleted.',
+    'initial_Pimport' => '<p>Personal Blacklist Import"',
+    'initial_import' => 'Initial MT-Blacklist Import',
+    'import_success' => '<p>Successfully imported %d blacklist entries.',
+    'import_failure' => '<p><strong>Error:</strong> No entries found.',
+    'allow_url_fopen' => '<p>Sorry, your webserver configuration does not allow reading of remote files (<code>allow_url_fopen</code> is off). Please download the blacklist from the following URL and upload it into Geeklog\'s "data" directory, <tt>%s</tt>, before trying again:',
+    'documentation' => 'Spam-X Plugin Documentation',
+    'emailmsg' => "A new spam post has been submitted at \"%s\"\nUser UID: \"%s\"\n\nContent:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'شناسايي هرز نامه ها'
+);
+
+
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = 'Spam detected and Comment or Message was deleted.';
+$PLG_spamx_MESSAGE8   = 'Spam detected. Email sent to admin.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/french_canada.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/french_canada.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/french_canada.php	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/french_canada.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,13 +1,17 @@
 <?php
 
 /**
- * File: french.php
- * This is the French language page for the Geeklog SpamX Plug-in!
- * 
- * Copyright (C) 2004 by the following authors:
- * Author        Tom Willett        tomw@pigstye.net
+ * File: french_canada.php
+ * This is the French language page for the Geeklog Spam-X Plug-in!
  * 
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
+ *
+ * French translation provided by Alain Ponton.
+ *
  * Licensed under GNU General Public License
+ *
+ * $Id: french_canada.php,v 1.6 2005/09/25 16:39:12 dhaun Exp $
  */
 
 $LANG_SX00 = array (
@@ -17,14 +21,14 @@
     'inst4' => 'envoyez un courriel   <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> pour me le faire savoir. ',
     'inst5' => 'Toutes les demandes seront honores',
     'submit' => 'Soumettre',
-    'subthis' => ' la base de donnes centrale SpamX',
+    'subthis' => ' la base de donnes centrale Spam-X',
     'secbut' => 'Ce second bouton permet de crer un fichier RDF afin de permettre l\'importation de votre liste.',
     'sitename' => 'Nom du Site: ',
-    'URL' => 'URL vers la Liste SpamX: ',
+    'URL' => 'URL vers la Liste Spam-X: ',
     'RDF' => 'URL du fichier RDF: ',
-    'impinst1a' => 'Avant d\'utiliser l\'utilitaire anti-comentaires indsirables SpamX pour voir et importer les listes noires personnelles des autres',
+    'impinst1a' => 'Avant d\'utiliser l\'utilitaire anti-comentaires indsirables Spam-X pour voir et importer les listes noires personnelles des autres',
     'impinst1b' => ' sites, je vous demande d\'utiliser les deux boutons suivants. (Le dernier est obligatoire.)',
-    'impinst2' => 'Le premier soumet votre site web au site Gplugs/SpamX afin de l\'ajouter  la liste principale des ',
+    'impinst2' => 'Le premier soumet votre site web au site Gplugs/Spam-X afin de l\'ajouter  la liste principale des ',
     'impinst2a' => 'sites partagant leur liste noire. (Note: si vous avez plusieurs sites, vous devriez en dsigner un comme site matre ',
     'impinst2b' => 'et soumettre ce dernier seulement. Ceci vous permettra de mettre votre site  jour facilement tout en conservant une liste plus petite.) ',
     'impinst2c' => 'Aprs avoir cliqu le bouton Soumettre, utilisez le bouton [prcdent] de votre navigateur pour revenir  cette page.',
@@ -45,10 +49,10 @@
     'addentry' => 'Ajouter l\'entre',
     'e1' => 'Pour supprimer une entre cliquez dessus.',
     'e2' => 'Pour ajouter une entre, entrez-la dans la case et cliquez Ajouter.  Les entres peuvent utiliser les expressions rgulires compltes de Perl.',
-    'pblack' => 'Liste Noire Personnelle SpamX',
-    'conmod' => 'Configurer utilisation du module SpamX',
-    'acmod' => 'Modules Action de SpamX',
-    'exmod' => 'Modules Vrification de SpamX',
+    'pblack' => 'Liste Noire Personnelle Spam-X',
+    'conmod' => 'Configurer utilisation du module Spam-X',
+    'acmod' => 'Modules Action de Spam-X',
+    'exmod' => 'Modules Vrification de Spam-X',
     'actmod' => 'Modules actifs',
     'avmod' => 'Modules disponibles',
     'coninst' => '<hr>Cliquez sur un module actif pour le supprimer, cliquez sur un module disponible pour l\'ajouter.<br>Les modules sont excuts dans l\'ordre affich.',
@@ -62,9 +66,9 @@
     'uPlist' => 'Mettre  jour Liste Noire personnelle',
     'entriesadded' => 'entres ajoutes',
     'entriesdeleted' => 'entres supprimes',
-    'viewlog' => 'Voir fichier log SpamX',
+    'viewlog' => 'Voir fichier log Spam-X',
     'clearlog' => 'Vider fichier ',
-    'logcleared' => '- fichier log SpamX vide',
+    'logcleared' => '- fichier log Spam-X vide',
     'plugin' => 'Plugin',
     'access_denied' => 'Accs refus',
     'access_denied_msg' => 'Seulement les utilisateurs Root ont accs  cette page.  Votre code d\'usager et votre adresse IP ont t enregistrs.',
@@ -88,27 +92,47 @@
 	'deletespam' => 'Supprimer Commentaire',
 	'numtocheck' => 'Nombre de commentaires  vrifier',
 	'note1'		=> '<p>Note: La suppression en lot a pour but de faciliter la tche lorsque vous tes victime d\'un',
-	'note2'		=> ' commentaire indsirable et que SpamX ne le reconnat pas.  <ul><li>Trouvez d\'abord le(s) lien(s) ou autre ',
+	'note2'		=> ' commentaire indsirable et que Spam-X ne le reconnat pas.  <ul><li>Trouvez d\'abord le(s) lien(s) ou autre ',
 	'note3'		=> 'identificateurs de ce commentaire indsirable et ajoutez-le  votre liste noire personnelle.</li><li>Ensuite ',
-	'note4'		=> 'revenez ici et excutez SpamX pour vrifier les derniers commentaires.</li></ul>Les commentaires ',
+	'note4'		=> 'revenez ici et excutez Spam-X pour vrifier les derniers commentaires.</li></ul>Les commentaires ',
 	'note5'		=> 'sont vrifis  partir des plus rcents -- vrifier plus de commentaires ',
 	'note6'		=> 'ncessite plus de temps pour la vrification</p>',
-	'masshead'	=> '<hr><center><h1>Suppression de commentaires en lot</h1></center>',
+	'masshead'	=> '<hr><h1 align="center">Suppression de commentaires en lot</h1>',
+    'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
 	'comdel'	=> ' commentaires supprims.',
     'initial_Pimport' => '<p>Importer Liste Noire Personnelle"',
     'initial_import' => 'Importer Liste Noire Principale Originale',
     'import_success' => '<p>Importation avec succs de %d entres dans la liste noire.',
     'import_failure' => '<p><strong>Erreur:</strong> Aucune entre trouve.',
     'allow_url_fopen' => '<p>Dsol, la configuration de votre serveur web ne permet pas la lecture de fichiers distants (<code>allow_url_fopen</code> est dsactiv). Veuillez tlcharger la liste noire de l\'adresse suivante et placez-la dans le rpertoire "data" de Geeklog, <tt>%s</tt>, avant un nouvel essai:',
-    'documentation' => 'Documentation du Plugin SpamX',
+    'documentation' => 'Documentation du Plugin Spam-X',
     'emailmsg' => "Un nouveau commentaire indsirable a t envoy  \"%s\"\nUser UID:\"%s\"\n\nContent:\"%s\"",
-    'plugin_name' => 'SpamX'
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
 );
 
 
-/* Define Messages that are shown when SPAMX module action is taken */
+/* Define Messages that are shown when Spam-X module action is taken */
 $PLG_spamx_MESSAGE128 = 'Commentaire indsirable dtect et Commentaire ou Message supprim.';
 $PLG_spamx_MESSAGE8   = 'Commentaire indsirable dtect et Commentaire supprim. Courriel envoy  l\Administrateur.';
 
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/french_france.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/french_france.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/french_france.php	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/french_france.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,12 +1,14 @@
 <?php
 
 /**
- * File: french.php
- * This is the French language page for the Geeklog SpamX Plug-in!
- * 
- * Copyright (C) 2004 by the following authors:
- * Author        Tom Willett        tomw@pigstye.net
+ * File: french_france.php
+ * This is the French language page for the Geeklog Spam-X Plug-in!
  * 
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
+ *
+ * French translation provided by Alain Ponton.
+ *
  * Licensed under GNU General Public License
  */
 
@@ -17,14 +19,14 @@
     'inst4' => 'envoyez un courriel   <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> pour me le faire savoir. ',
     'inst5' => 'Toutes les demandes seront honores',
     'submit' => 'Soumettre',
-    'subthis' => ' la base de donnes centrale SpamX',
+    'subthis' => ' la base de donnes centrale Spam-X',
     'secbut' => 'Ce second bouton permet de crer un fichier RDF afin de permettre l\'importation de votre liste.',
     'sitename' => 'Nom du Site: ',
-    'URL' => 'URL vers la Liste SpamX: ',
+    'URL' => 'URL vers la Liste Spam-X: ',
     'RDF' => 'URL du fichier RDF: ',
-    'impinst1a' => 'Avant d\'utiliser l\'utilitaire anti-comentaires indsirables SpamX pour voir et importer les listes noires personnelles des autres',
+    'impinst1a' => 'Avant d\'utiliser l\'utilitaire anti-comentaires indsirables Spam-X pour voir et importer les listes noires personnelles des autres',
     'impinst1b' => ' sites, je vous demande d\'utiliser les deux boutons suivants. (Le dernier est obligatoire.)',
-    'impinst2' => 'Le premier soumet votre site web au site Gplugs/SpamX afin de l\'ajouter  la liste principale des ',
+    'impinst2' => 'Le premier soumet votre site web au site Gplugs/Spam-X afin de l\'ajouter  la liste principale des ',
     'impinst2a' => 'sites partagant leur liste noire. (Note: si vous avez plusieurs sites, vous devriez en dsigner un comme site matre ',
     'impinst2b' => 'et soumettre ce dernier seulement. Ceci vous permettra de mettre votre site  jour facilement tout en conservant une liste plus petite.) ',
     'impinst2c' => 'Aprs avoir cliqu le bouton Soumettre, utilisez le bouton [prcdent] de votre navigateur pour revenir  cette page.',
@@ -45,10 +47,10 @@
     'addentry' => 'Ajouter l\'entre',
     'e1' => 'Pour supprimer une entre cliquez dessus.',
     'e2' => 'Pour ajouter une entre, entrez-la dans la case et cliquez Ajouter.  Les entres peuvent utiliser les expressions rgulires compltes de Perl.',
-    'pblack' => 'Liste Noire Personnelle SpamX',
-    'conmod' => 'Configurer utilisation du module SpamX',
-    'acmod' => 'Modules Action de SpamX',
-    'exmod' => 'Modules Vrification de SpamX',
+    'pblack' => 'Liste Noire Personnelle Spam-X',
+    'conmod' => 'Configurer utilisation du module Spam-X',
+    'acmod' => 'Modules Action de Spam-X',
+    'exmod' => 'Modules Vrification de Spam-X',
     'actmod' => 'Modules actifs',
     'avmod' => 'Modules disponibles',
     'coninst' => '<hr>Cliquez sur un module actif pour le supprimer, cliquez sur un module disponible pour l\'ajouter.<br>Les modules sont excuts dans l\'ordre affich.',
@@ -62,9 +64,9 @@
     'uPlist' => 'Mettre  jour Liste Noire personnelle',
     'entriesadded' => 'entres ajoutes',
     'entriesdeleted' => 'entres supprimes',
-    'viewlog' => 'Voir fichier log SpamX',
+    'viewlog' => 'Voir fichier log Spam-X',
     'clearlog' => 'Vider fichier ',
-    'logcleared' => '- fichier log SpamX vide',
+    'logcleared' => '- fichier log Spam-X vide',
     'plugin' => 'Plugin',
     'access_denied' => 'Accs refus',
     'access_denied_msg' => 'Seulement les utilisateurs Root ont accs  cette page.  Votre code d\'usager et votre adresse IP ont t enregistrs.',
@@ -88,27 +90,47 @@
 	'deletespam' => 'Supprimer Commentaire',
 	'numtocheck' => 'Nombre de commentaires  vrifier',
 	'note1'		=> '<p>Note: La suppression en lot a pour but de faciliter la tche lorsque vous tes victime d\'un',
-	'note2'		=> ' commentaire indsirable et que SpamX ne le reconnat pas.  <ul><li>Trouvez d\'abord le(s) lien(s) ou autre ',
+	'note2'		=> ' commentaire indsirable et que Spam-X ne le reconnat pas.  <ul><li>Trouvez d\'abord le(s) lien(s) ou autre ',
 	'note3'		=> 'identificateurs de ce commentaire indsirable et ajoutez-le  votre liste noire personnelle.</li><li>Ensuite ',
-	'note4'		=> 'revenez ici et excutez SpamX pour vrifier les derniers commentaires.</li></ul>Les commentaires ',
+	'note4'		=> 'revenez ici et excutez Spam-X pour vrifier les derniers commentaires.</li></ul>Les commentaires ',
 	'note5'		=> 'sont vrifis  partir des plus rcents -- vrifier plus de commentaires ',
 	'note6'		=> 'ncessite plus de temps pour la vrification</p>',
-	'masshead'	=> '<hr><center><h1>Suppression de commentaires en lot</h1></center>',
+	'masshead'	=> '<hr><h1 align="center">Suppression de commentaires en lot</h1>',
+    'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
 	'comdel'	=> ' commentaires supprims.',
     'initial_Pimport' => '<p>Importer Liste Noire Personnelle"',
     'initial_import' => 'Importer Liste Noire Principale Originale',
     'import_success' => '<p>Importation avec succs de %d entres dans la liste noire.',
     'import_failure' => '<p><strong>Erreur:</strong> Aucune entre trouve.',
     'allow_url_fopen' => '<p>Dsol, la configuration de votre serveur web ne permet pas la lecture de fichiers distants (<code>allow_url_fopen</code> est dsactiv). Veuillez tlcharger la liste noire de l\'adresse suivante et placez-la dans le rpertoire "data" de Geeklog, <tt>%s</tt>, avant un nouvel essai:',
-    'documentation' => 'Documentation du Plugin SpamX',
+    'documentation' => 'Documentation du Plugin Spam-X',
     'emailmsg' => "Un nouveau commentaire indsirable a t envoy  \"%s\"\nUser UID:\"%s\"\n\nContent:\"%s\"",
-    'plugin_name' => 'SpamX'
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
 );
 
 
-/* Define Messages that are shown when SPAMX module action is taken */
+/* Define Messages that are shown when Spam-X module action is taken */
 $PLG_spamx_MESSAGE128 = 'Commentaire indsirable dtect et Commentaire ou Message supprim.';
 $PLG_spamx_MESSAGE8   = 'Commentaire indsirable dtect et Commentaire supprim. Courriel envoy  l\Administrateur.';
 
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/italian.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/italian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/italian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/italian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,138 @@
+<?php
+
+/**
+ * File: italian.php
+ * This is the Italian language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2004 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
+ * Copyright (C) 2005 magomarcelo   magomarcelo AT gmail DOT com
+ *                                  magomarcelo.blogspot.com
+ *
+ * Licensed under GNU General Public License
+ *
+ * $Id: italian.php,v 1.5 2005/09/25 16:39:12 dhaun Exp $
+ */
+
+$LANG_SX00 = array (
+    'inst1' => '<p>Cos&igrave; facendo, poi altri ',
+    'inst2' => 'saranno in grado di visualizzare ed importare la tua blacklist personale e noi possiamo creare un pi&ugrave; efficace ',
+    'inst3' => 'database distribuito.</p><p>Se hai iscritto il tuo sito web e decidi che non desideri pi&ugrave; che esso rimanga nella lista ',
+    'inst4' => 'invia una e-mail a <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> per dirmelo. ',
+    'inst5' => 'Saranno onorate tutte le richieste.',
+    'submit' => 'Invia',
+    'subthis' => 'questa informazione al Database Centrale Spam-X',
+    'secbut' => 'Questo secondo bottone crea un feed rdf in modo che altri possano importare la tua lista.',
+    'sitename' => 'Nome Sito: ',
+    'URL' => 'URL Lista Spam-X: ',
+    'RDF' => 'URL RDF: ',
+    'impinst1a' => 'Prima di utilizzare la funzionalit&agrave; di blocco commenti Spam di Spam-X per visualizzare ed importare le Blacklist personali da altri',
+    'impinst1b' => ' siti, ti chiedo di premere sui due seguenti bottoni. (Devi premerne almeno uno.)',
+    'impinst2' => 'Il primo registra il tuo sito web sul sito Gplugs/Spam-X in modo che possa essere aggiunto alla lista principale dei ',
+    'impinst2a' => 'siti che condividono le proprie blacklist. (Nota: se hai pi&ugrave; di un sito potresti volerne indicare uno solo come il ',
+    'impinst2b' => 'principale e registrare solo il suo nome. Ci&ograve; ti permetter&agrave; di aggiornare i tuoi siti facilmente e mantenere la lista pi&ugrave; piccola.) ',
+    'impinst2c' => 'Dope aver premuto il bottone Invia, premi [back] sul tuo browser per tornare qui.',
+    'impinst3' => 'Saranno inviati i seguenti valori: (puoi modificarli se sono errati).',
+    'availb' => 'Blacklist Disponibili',
+    'clickv' => 'Fai Clic per Visualizzare la Blacklist',
+    'clicki' => 'Fai Clic per Importare la Blacklist',
+    'ok' => 'OK',
+    'rsscreated' => 'Feed RSS Creato',
+    'add1' => 'Aggiunti ',
+    'add2' => ' elementi dalla blacklist di ',
+    'add3' => ".",
+    'adminc' => 'Comandi di Amministrazione:',
+    'mblack' => 'La Mia Blacklist:',
+    'rlinks' => 'Collegamenti Correlati:',
+    'e3' => 'Per Aggiungere le parole presenti nella Censor List di Geeklog Premi il Bottone:',
+    'addcen' => 'Aggiungi Censor List',
+    'addentry' => 'Aggiungi Elemento',
+    'e1' => 'Per Eliminare un elemento fai clic su di esso.',
+    'e2' => 'Per Aggiungere un elemento, inseriscilo nel box e fai clic su Aggiungi. Gli elementi possono utilizzare tutti i tipi di Espressioni Regolari Perl.',
+    'pblack' => 'Blacklist Personale Spam-X',
+    'conmod' => 'Configura Utilizzo Modulo Spam-X',
+    'acmod' => 'Moduli Azione Spam-X',
+    'exmod' => 'Moduli Analisi Spam-X',
+    'actmod' => 'Moduli Attivi',
+    'avmod' => 'Moduli Disponibili',
+    'coninst' => '<hr>Fai clic su un modulo Attivo per eliminarlo, fai clic su un modulo Disponibile per aggiungerlo.<br>I moduli vengono eseguiti nell\'ordine visualizzato.',
+    'fsc' => 'Trovato Commento Spam corrispondente a ',
+    'fsc1' => ' inviato dall\'utente ',
+    'fsc2' => ' from IP ',
+    'uMTlist' => 'Aggiorna MT-Blacklist',
+    'uMTlist2' => ': Aggiunti ',
+    'uMTlist3' => ' elementi ed eliminati ',
+    'entries' => ' elementi.',
+    'uPlist' => 'Aggiorna Blacklist Personale',
+    'entriesadded' => 'Elementi Aggiunti',
+    'entriesdeleted' => 'Elementi Elminati',
+    'viewlog' => 'Visualizza Log Spam-X',
+    'clearlog' => 'Cancella File di Log',
+    'logcleared' => '- File di Log di Spam-X Cancellato',
+    'plugin' => 'Plugin',
+    'access_denied' => 'Accesso Negato',
+    'access_denied_msg' => 'Solo gli Utenti Root possono Accedere a questa Pagina. Il Tuo nome utente ed IP sono stati registrati.',	
+    'admin' => 'Amministrazione Plugin',
+    'install_header' => 'Installa/Disinstalla Plugin',
+    'installed' => 'Il Plugin &egrave; Installato',
+    'uninstalled' => 'Il Plugin Non &egrave; Installato',
+    'install_success' => 'Installation Successful',	
+    'install_failed' => 'Installazione Fallita -- Controlla l\'error log per scoprire il perch&egrave;.',
+    'uninstall_msg' => 'Plugin Disinstallato con Successo',	
+    'install' => 'Installa',
+    'uninstall' => 'Disinstalla',
+    'warning' => 'Attenzione! Il plugin &egrave; ancora Attivo',
+    'enabled' => 'Disattiva il plugin prima di disinstallarlo.',
+    'readme' => 'STOP! Prima di premere prego leggi il ',
+    'installdoc' => 'Installa Documento.',
+    'spamdeleted' => 'Commento Spam Eliminato',
+    'foundspam' => 'Trovato Commento Spam corrispondente a ',
+    'foundspam2' => ' inviato dall\'utente ',
+    'foundspam3' => ' dall\'IP ',
+	'deletespam' => 'Elimina Spam',
+	'numtocheck' => 'Numero Commenti da controllare',
+	'note1'		=> '<p>Nota: L\'Eliminazione in Blocco serve ad aiutarti quando sei colpito da',
+	'note2'		=> ' commenti spam e Spam-X non riesce a bloccarli. <ul><li>Prima cerca il o i link o altri ',
+	'note3'		=> 'identificatori di questo commento Spam ed aggiungilo alla tua blacklist personale.</li><li>Poi ',
+	'note4'		=> 'torna qui a fai controllare a Spam-X se gli ultimi commenti sono spam.</li></ul>I commenti ',
+	'note5'		=> 'vengono controllati dal pi&ugrave; recente al meno recente -- controllare pi&ugrave; commenti ',
+	'note6'		=> 'richiede pi&ugrave; tempo per il controllo</p>',
+	'masshead'	=> '<hr><h1 align="center">Eliminazione in Blocco Commenti Spam</h1>',
+    'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
+	'comdel'	=> ' commenti eliminati.',
+    'initial_Pimport' => '<p>Importazione Blacklist Personale"',
+    'initial_import' => 'Importazione Iniziale MT-Blacklist',
+    'import_success' => '<p>Importati con successo %d elementi della blacklist.',
+    'import_failure' => '<p><strong>Errore:</strong> Nessun elemento trovato.',
+    'allow_url_fopen' => '<p>Spiacente, la configurazione del tuo webserver non permette la lettura di file remoti (<code>allow_url_fopen</code> &egrave; off). Please download the blacklist from the following URL and upload it into Geeklog\'s "data" directory, <tt>%s</tt>, before trying again:',
+    'documentation' => 'Documentazione Plugin Spam-X',
+    'emailmsg' => "Un nuovo commento spam &egrave; stato inviato su \"%s\"\nUID utente:\"%s\"\n\nContenuto:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
+);
+
+
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = 'Spam identificato ed il Commento o Messaggio &egrave; stato eliminato.';
+$PLG_spamx_MESSAGE8   = 'Spam identificato. E-mail inviata all\'amministratore.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/spanish.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/spanish.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/spanish.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/spanish.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ * File: spanish.php
+ * This is the Spanish language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author        Tom Willett        tomw AT pigstye DOT net
+ * 
+ * Licensed under GNU General Public License
+ *
+ * $Id: spanish.php,v 1.4 2005/09/25 16:39:12 dhaun Exp $
+ */
+
+// +---------------------------------------------------------------------------+
+// | Archivo en Espaol para el plugin spamx                                   |
+// | Traducido por: vivi1123                                                   |
+// | http://comunidad.share4ever.net/                                          |
+// +---------------------------------------------------------------------------+
+
+
+$LANG_SX00 = array (
+    'inst1' => '<p>Si haces esto, los dems ',
+    'inst2' => 'podrn ver e importar tu lista negra personal y nosotros podemos crear una base de datos ',
+    'inst3' => 'distribuida ms eficaz.</p><p>Si has registrado tu sitio web y decides que no deseas permanecer en la lista ',
+    'inst4' => 'enva un correo electrnico a <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a> para comunicrmelo. ',
+    'inst5' => 'Todas las peticiones sern respetadas.',
+    'submit' => 'Enviar',
+    'subthis' => 'esta informacin a la base de datos de Spam-X Central Database',
+    'secbut' => 'Este botn segundo crea una fuente rdf para que otras personas puedan importar tu lista.',
+    'sitename' => 'Nombre del Sitio: ',
+    'URL' => 'URL a la lista de Spam-X: ',
+    'RDF' => 'RDF url: ',
+    'impinst1a' => 'Antes de usar la caracterstica de bloqueo de Spam con el comentario de Spam-X para ver e importar Listas negras personales de otros ',
+    'impinst1b' => ' sitios, te pido que pulses sobre los siguientes dos botones. (Tienes que pulsar sobre el ltimo.)',
+    'impinst2' => 'Este primero enva tu sitio web al sitio Gplugs/Spam-X para que pueda aadirse al listado principal de ',
+    'impinst2a' => 'sitios que comparten sus listas negras. (Nota: Si tienes varios sitios puede que te interese designar uno de ellos como el ',
+    'impinst2b' => 'principal y slo  incluir su nombre. Esto te permitir actualizar tus sitios con facilidad y mantener una lista ms pequea.) ',
+    'impinst2c' => 'Despus de pulsar sobre el botn de Enviar, pulsa sobre [atrs]en tu navegador para volver aqu.',
+    'impinst3' => 'Se enviarn los siguientes valores: (puedes editarlos si estn equivocados).',
+    'availb' => 'Listas Negras Disponibles',
+    'clickv' => 'Cliquea para ver la Lista Negra',
+    'clicki' => 'Cliquea para Importar la Lista Negra',
+    'ok' => 'OK',
+    'rsscreated' => 'Se cre la fuente RSS',
+    'add1' => 'Se han Aadido ',
+    'add2' => ' datos desde ',
+    'add3' => "la lista negra de  .",
+    'adminc' => 'Comandos de Administracin:',
+    'mblack' => 'Mi Lista Negra:',
+    'rlinks' => 'Enlaces Relacionados:',
+    'e3' => 'Para aadir las palabras desde la lista de palabras censuradas de Geeklogs CensorList Pulsa el Botn:',
+    'addcen' => 'Aadir Lista de Palabras Censuradas',
+    'addentry' => 'Aadir dato',
+    'e1' => 'Para Borrar el dato cliqualo.',
+    'e2' => 'Para Aadir un dato, introdcelo en la caja y pulsa sobre Aadir.  Los datos pueden presentarse con Expresiones Normales de Perl.',
+    'pblack' => 'Lista Negra Personal de Spam-X',
+    'conmod' => 'Configurar el uso del mdulo de Spam-X',
+    'acmod' => 'Mdulos de Accin de Spam-X',
+    'exmod' => 'Mdulos de Examen de Spam-X',
+    'actmod' => 'Mdulos Activos',
+    'avmod' => 'Mdulos Disponibles',
+    'coninst' => '<hr>Cliquea sobre un Mdulo Activo para borrarlo, cliquea sobre un mdulo Disponible para aadirlo.<br>Los mdulos se ejecutan en el orden en que han sido presentados.',
+    'fsc' => 'Encontrado un comentario de Spam coincidente',
+    'fsc1' => ' enviado por el usuario ',
+    'fsc2' => ' desde el IP ',
+    'uMTlist' => 'Actualizar la Lista Negra-MT',
+    'uMTlist2' => ': Aadidas ',
+    'uMTlist3' => ' entradas y borradas ',
+    'entries' => ' entradas.',
+    'uPlist' => 'Actualizar la Lista Negra Personal',
+    'entriesadded' => 'Entradas Aadidas',
+    'entriesdeleted' => 'Entradas Borradas',
+    'viewlog' => 'Ver el registro de Spam-X',
+    'clearlog' => 'Limpiar el fichero de Registros',
+    'logcleared' => '- Fichero de Registros limpiado',
+    'plugin' => 'Plugin',
+    'access_denied' => 'Acceso Denegado',
+    'access_denied_msg' => 'Slo los Usuarios Raz tiene Acceso a esta pgina.  Tu nombre de usuario y direccin IP han sido registrados.',
+    'admin' => 'Plugin de Administracin',
+    'install_header' => 'Plugin de Instalar/Desinstalar ',
+    'installed' => 'Se ha instalado el Plugin',
+    'uninstalled' => 'No se ha instalado el Plugin',
+    'install_success' => 'Se ha instalado con xito',
+    'install_failed' => 'Instalacin Fallida -- Lee tu registro de errores para averiguar por qu.',
+    'uninstall_msg' => 'Se ha desinstalado el Plugin con xito',
+    'install' => 'Instalar',
+    'uninstall' => 'Desinstalar',
+    'warning' => 'Aviso! El Plugin est an habilitado',
+    'enabled' => 'Deshabilite el plugin antes de desinstalar.',
+    'readme' => 'DETENTE! Antes de pulsar sobre instalar, por favor lee el ',
+    'installdoc' => 'Documento de Instalacin.',
+    'spamdeleted' => 'Comentario de Spam borrado',
+    'foundspam' => 'Encontrado comentario de Spam coincidente ',
+    'foundspam2' => ' enviado por el usuario ',
+    'foundspam3' => ' desde el IP ',
+	'deletespam' => 'Borrar Spam',
+	'numtocheck' => 'Nmero de Comentarios a comprobar',
+	'note1'		=> '<p>Nota: Borrado masivo est para ayudarte cuando te avasalla ',
+	'note2'		=> ' comentarios de spam y Spam-X no lo pilla.  <ul><li>Primero, encuentra el/los enlace/s u otros ',
+	'note3'		=> 'identificadores de este comentario de Spam y lo aades a tu lista negra personal.</li><li>Despus ',
+	'note4'		=> 'vuelve aqu y haz que Spam-X compruebe los ltimos comentarios de spam.</li></ul>Los comentarios ',
+	'note5'		=> 'se comprueban desde los ms nuevos hasta los ms antiguos -- La comprobacin de ms comentarios ',
+	'note6'		=> 'requiere ms tiempo para llevarse a cabo</p>',
+	'masshead'	=> '<hr><center><h1>Borrado Masivo de Comentarios Spam</h1></center>',
+    'masstb' => '<hr><h1 align="center">Mass Delete Trackback Spam</h1>',
+	'comdel'	=> ' comentarios borrados.',
+    'initial_Pimport' => '<p>Importar la Lista Negra Personal"',
+    'initial_import' => 'Importar la lista Negra-MT inicial',
+    'import_success' => '<p>Se ha importado con xito los datos de la Lista Negra de %d.',
+    'import_failure' => '<p><strong>Error:</strong> No se han encontrado datos.',
+    'allow_url_fopen' => '<p>Lo sentimos, la configuracin de tu servidor de web no permite la lectura de ficheros remotos (<code>allow_url_fopen</code> is off). Por favor, descarga la Lista Negra desde el siguiente URL y sbelo al directorio de "datos" de Geeklog\'s, <tt>%s</tt>, antes de intentarlo de nuevo:',
+    'documentation' => 'Documentacin del Plugin de Spam-X',
+    'emailmsg' => "Un nuevo comentario de spam ha sido enviado en/desde \"%s\"\nUser UID:\"%s\"\n\nContent:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
+);
+
+
+/* Define los Mensajes que se muestran cuando una accin del mdulo de Spam-X se lleva a cabo */
+$PLG_spamx_MESSAGE128 = 'Se ha detectado spam y se ha borrado el Comentario o el Mensaje.';
+$PLG_spamx_MESSAGE8   = 'Se ha detectado spam. Se ha enviado un correo al administrador.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/ukrainian_koi8-u.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/ukrainian_koi8-u.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/ukrainian_koi8-u.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/ukrainian_koi8-u.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * File: ukrainian.php
+ * This is the Ukrainian language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2004 by the following authors:
+ * Author        Tom Willett        tomw@pigstye.net
+ * Copyright (C) 2005 by the following authors:
+ * Author        Yaroslav Fedevych  jaroslaw@nospam.kiev.ua
+ * 
+ * Licensed under GNU General Public License
+ */
+
+$LANG_SX00 = array (
+    'inst1' => '<p>   , ۦ ',
+    'inst2' => '       ,      Φ ',
+    'inst3' => 'Ħ  .</p><p>   Φ  צ ,   Ҧ,   ,  צ    , ',
+    'inst4' => '   <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a>. ',
+    'inst5' => 'Ӧ   Φ.',
+    'submit' => 'Ħ',
+    'subthis' => ' æ  ϧ   Spam-X',
+    'secbut' => '   æ rdf,   ۦ    .',
+    'sitename' => ' : ',
+    'URL' => 'URL   Spam-X: ',
+    'RDF' => 'URL  RDF: ',
+    'impinst1a' => '       Spam-X       ˦ צ ',
+    'impinst1b' => ' Ԧ,    Φ צ . ( Φ  .)',
+    'impinst2' => '   צ Φ      Gplugs/Spam-X,         ',
+    'impinst2a' => 'Ԧ,  ͦ  . (:    ˦ Ԧ,         ',
+    'impinst2b' => '    .      ϧ      ͦ.) ',
+    'impinst2c' => '   &laquo;Ħ&raquo;, Φ []   ަ,   .',
+    'impinst3' => ' ĦΦ Φ : (   ,   Φ).',
+    'availb' => 'Φ Φ ',
+    'clickv' => 'Φ,    ',
+    'clicki' => 'Φ,    ',
+    'ok' => '',
+    'rsscreated' => 'æ RSS ',
+    'add1' => ' ',
+    'add2' => ' Ӧ    ',
+    'add3' => ".",
+    'adminc' => ' ͦΦ:',
+    'mblack' => '  :',
+    'rlinks' => 'ҦΦ :',
+    'e3' => '      Geeklog, Φ :',
+    'addcen' => '  ',
+    'addentry' => ' ',
+    'e1' => '  , Φ .',
+    'e2' => '  , Ħ     Φ &laquo;&raquo;.       ŭ ڦ Perl.',
+    'pblack' => '   Spam-X',
+    'conmod' => '   Spam-X',
+    'acmod' => '̦ Ħ Spam-X',
+    'exmod' => '̦ צ Spam-X',
+    'actmod' => 'Φ ̦',
+    'avmod' => 'Φ ̦',
+    'coninst' => '<hr>Φ     ;     .<br>̦   ,    .',
+    'fsc' => '  ,  Ц  ',
+    'fsc1' => ', Ħ  ',
+    'fsc2' => '  IP ',
+    'uMTlist' => '  MT-',
+    'uMTlist2' => ':  ',
+    'uMTlist3' => ' Ӧ,  ',
+    'entries' => ' Ӧ.',
+    'uPlist' => '   ',
+    'entriesadded' => ' Ӧ',
+    'entriesdeleted' => ' Ӧ',
+    'viewlog' => '  Spam-X',
+    'clearlog' => '  ',
+    'logcleared' => '-   Spam-X ',
+    'plugin' => '',
+    'access_denied' => ' Ц צ',
+    'access_denied_msg' => ' ަ  Root    æ Ҧ.  \'   IP Φ.',
+    'admin' => 'ͦΦ ',
+    'install_header' => '/ ',
+    'installed' => ' ',
+    'uninstalled' => '  ',
+    'install_success' => ' Ц',
+    'install_failed' => '   -- צ  ,  Ħ .',
+    'uninstall_msg' => ' Ц ',
+    'install' => '',
+    'uninstall' => '',
+    'warning' => '!    צ',
+    'enabled' => 'Φ    .',
+    'readme' => '!  ,    &laquo;&raquo;,  ,  ',
+    'installdoc' => '  .',
+    'spamdeleted' => '  ',
+    'foundspam' => '  ,  Ц  ',
+    'foundspam2' => ', Ħ  ',
+    'foundspam3' => '  IP ',
+	'deletespam' => ' ',
+	'numtocheck' => '˦ Ҧ  צ',
+	'note1'		=> '<p>:     ,    צ ',
+	'note2'		=> '   ,  Spam-X   . <ul><li> Ħ   ۦ ',
+	'note3'		=> 'Ʀ           .</li><li>Ħ ',
+	'note4'		=> 'Φ    æ Spam-X צ Φۦ Ҧ   .</li></ul>Ҧ ',
+	'note5'		=> 'צ צ צ  Ҧ --   ¦,  ',
+	'note6'		=> '¦     צ.</p>',
+	'masshead'	=> '<hr><center><h1>   Ҧ</h1></center>',
+	'comdel'	=> ' Ҧ .',
+    'initial_Pimport' => '<p>   "',
+    'initial_import' => '   MT-',
+    'import_success' => '<p>Ц  %d Ӧ  .',
+    'import_failure' => '<p><strong>:</strong>   Ӧ.',
+    'allow_url_fopen' => '<p>,      Ѥ  צΦ  (<code>allow_url_fopen</code> Ҧ off).  ,      URL      "data" Geeklog, <tt>%s</tt>   :', 
+    'documentation' => 'æ   Spam-X',
+    'emailmsg' => "Ħ     \"%s\"\nƦ :\"%s\"\n\nͦ:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
+);
+
+
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = ' .   צ .';
+$PLG_spamx_MESSAGE8   = ' . Ħ  ͦΦצ.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/ukrainian.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/ukrainian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/ukrainian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/ukrainian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * File: ukrainian.php
+ * This is the Ukrainian language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2005 by Vitaliy Biliyenko
+ * v.lokki@gmail.com
+ * 
+ * Licensed under GNU General Public License
+ *
+ * $Id: ukrainian.php,v 1.1 2005/12/22 11:56:38 dhaun Exp $
+ */
+
+$LANG_SX00 = array (
+    'inst1' => '<p>   ,   ',
+    'inst2' => '             ',
+    'inst3' => '  .</p><p>    ,    ,     , ',
+    'inst4' => '   <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a>   . ',
+    'inst5' => '   .',
+    'submit' => '',
+    'subthis' => '      Spam-X',
+    'secbut' => '     RDF,      .',
+    'sitename' => ' : ',
+    'URL' => 'URL  Spam-X: ',
+    'RDF' => 'RDF url: ',
+    'impinst1a' => '    Spam-X comment Spam blocker         ',
+    'impinst1b' => ' ,       . (    .)',
+    'impinst2' => '      Gplugs/Spam-X   - ',
+    'impinst2a' => ',     . (:      ,      ',
+    'impinst2b' => '    .           .) ',
+    'impinst2c' => 'ϳ ,     ,  []   ,   .',
+    'impinst3' => '   : ( ,   ).',
+    'availb' => '  ',
+    'clickv' => '    ',
+    'clicki' => '    ',
+    'ok' => 'OK',
+    'rsscreated' => ' RSS ',
+    'add1' => ' ',
+    'add2' => '   ',
+    'add3' => "  .",
+    'adminc' => ' :',
+    'mblack' => '̳  :',
+    'rlinks' => ' :',
+    'e3' => '      Geeklog,  :',
+    'addcen' => '  ',
+    'addentry' => ' ',
+    'e1' => '  ,  .',
+    'e2' => '  ,       .        Perl (Perl Regular Expressions).',
+    'pblack' => '   Spam-X',
+    'conmod' => '   Spam-X',
+    'acmod' => ' 䳿 Spam-X',
+    'exmod' => '  Spam-X',
+    'actmod' => ' ',
+    'avmod' => ' ',
+    'coninst' => '<hr>  ,   ,   ,   .<br>     .',
+    'fsc' => '  Spam- ',
+    'fsc1' => '   ',
+    'fsc2' => '  IP- ',
+    'uMTlist' => ' MT-Blacklist',
+    'uMTlist2' => ':  ',
+    'uMTlist3' => '    ',
+    'entries' => ' .',
+    'uPlist' => '   ',
+    'entriesadded' => ' ',
+    'entriesdeleted' => ' ',
+    'viewlog' => '  Spam-X',
+    'clearlog' => ' ',
+    'logcleared' => '- - Spam-X ',
+    'plugin' => '',
+    'access_denied' => ' ',
+    'access_denied_msg' => '       .     IP- .',
+    'admin' => ' ',
+    'install_header' => '/ ',
+    'installed' => ' ',
+    'uninstalled' => '  ',
+    'install_success' => ' ',
+    'install_failed' => '  --  error.log  .',
+    'uninstall_msg' => '  ',
+    'install' => '',
+    'uninstall' => '',
+    'warning' => '!    ',
+    'enabled' => '   .',
+    'readme' => '!      ',
+    'installdoc' => '  Install.',
+    'spamdeleted' => ' Spam-',
+    'foundspam' => '  Spam- ',
+    'foundspam2' => '   ',
+    'foundspam3' => '  IP- ',
+	'deletespam' => ' Spam',
+	'numtocheck' => 'ʳ   ',
+	'note1'		=> '<p>:      ,    ',
+	'note2'		=> '    Spam-X   .  <ul><li>     ',
+	'note3'		=> '  -       .</li><li> ',
+	'note4'		=> '    Spam-X     .</li></ul> ',
+	'note5'		=> '     --     ',
+	'note6'		=> '  .</p>',
+	'masshead'	=> '<hr><h1 align="center">  Spam-</h1>',
+	'masstb' => '<hr><h1 align="center">  -</h1>',
+	'comdel'	=> '  .',
+    'initial_Pimport' => '<p>  "',
+    'initial_import' => '  MT-Blacklist',
+    'import_success' => '<p>  %d   .',
+    'import_failure' => '<p><strong>:</strong>   .',
+    'allow_url_fopen' => '<p>,         (<code>allow_url_fopen</code>   off). -,      URL      "data"  Geeklog, <tt>%s</tt>,    :',
+    'documentation' => '  Spam-X',
+    'emailmsg' => " -    \"%s\"\nUID : \"%s\"\n\n:\"%s\"",
+    'emailsubject' => '-  %s',
+    'ipblack' => '  IP Spam-X',
+    'ipofurlblack' => '  IP  URL Spam-X',
+    'headerblack' => '  HTTP- Spam-X',
+    'headers' => ' :',
+
+    'stats_headline' => ' Spam-X',
+    'stats_page_title' => ' ',
+    'stats_entries' => '',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => '  ',
+    'stats_ip' => ' IP-',
+    'stats_ipofurl' => '  IP  URL',
+    'stats_header' => 'HTTP-',
+    'stats_deleted' => '   ',
+
+    'plugin_name' => 'Spam-X'
+);
+
+
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = ' ,    .';
+$PLG_spamx_MESSAGE8   = ' .    .';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = ' Spam-X  .';
+$PLG_spamx_MESSAGE3002 = '    Spam-X.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/ukrainian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/ukrainian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/language/ukrainian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/language/ukrainian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * File: ukrainian.php
+ * This is the Ukrainian language page for the Geeklog Spam-X Plug-in!
+ * 
+ * Copyright (C) 2004 by the following authors:
+ * Author        Tom Willett        tomw@pigstye.net
+ * Copyright (C) 2005 by the following authors:
+ * Author        Yaroslav Fedevych  jaroslaw@nospam.kiev.ua
+ * 
+ * Licensed under GNU General Public License
+ */
+
+$LANG_SX00 = array (
+    'inst1' => '<p>Якщо ви це зробите, інші ',
+    'inst2' => 'зможуть переглядати й імпортувати ваш особистий чорний список, і ми так зможемо створити ефективнішу ',
+    'inst3' => 'розподілену базу даних.</p><p>Якщо ви надсилали дані про свій сайт, а тепер вирішили, що не хочете, аби він залишався в нашому списку, ',
+    'inst4' => 'листуйте за адресою <a href="mailto:spamx@pigstye.net">spamx@pigstye.net</a>. ',
+    'inst5' => 'Всі запити будуть задоволені.',
+    'submit' => 'Надіслати',
+    'subthis' => 'цю інформацію до центральної бази даних Spam-X',
+    'secbut' => 'Друга кнопка створює трансляцію rdf, так що інші зможуть імпортувати ваш список.',
+    'sitename' => 'Назва сайту: ',
+    'URL' => 'URL до списку Spam-X: ',
+    'RDF' => 'URL до RDF: ',
+    'impinst1a' => 'Перед використанням засобу блокування спаму в коментарях Spam-X для перегляду й імпорту особистих чорних списків від інших',
+    'impinst1b' => ' сайтів, попрошу вас натиснути наступні дві кнопки. (Ви повинні натиснути останню.)',
+    'impinst2' => 'Перша з них відсилає дані про ваш сайт на сайт Gplugs/Spam-X, щоб його можна було додати до головного списку ',
+    'impinst2a' => 'сайтів, що обмінюються чорними списками. (Увага: якщо у вас декілька сайтів, ви можете визначити один із них як головний ',
+    'impinst2b' => 'і подати лише його назву. Це дозволить вам легко поновлювати свої сайти та мати список меншого розміру.) ',
+    'impinst2c' => 'Після натискання кнопки &laquo;Надіслати&raquo;, натисніть [назад] у вашому оглядачі, щоб повернутись сюди.',
+    'impinst3' => 'Будуть надіслані наступні значення: (ви можете їх виправити, якщо вони неправильні).',
+    'availb' => 'Наявні чорні списки',
+    'clickv' => 'Клацніть, щоб переглянути чорний список',
+    'clicki' => 'Клацніть, щоб імпортувати чорний список',
+    'ok' => 'Гаразд',
+    'rsscreated' => 'Трансляцію RSS створено',
+    'add1' => 'Додано ',
+    'add2' => ' записів з чорного списку ',
+    'add3' => ".",
+    'adminc' => 'Команди адміністрування:',
+    'mblack' => 'Мій чорний список:',
+    'rlinks' => 'Споріднені посилання:',
+    'e3' => 'Щоб додати слова з цензурного списку Geeklog, натисніть кнопку:',
+    'addcen' => 'Додати цензурний список',
+    'addentry' => 'Додати запис',
+    'e1' => 'Щоб вилучити запис, клацніть його.',
+    'e2' => 'Щоб додати запис, введіть його в поле й натисніть &laquo;Додати&raquo;. В записах можна використати всю множину реґулярних виразів Perl.',
+    'pblack' => 'Особистий чорний список Spam-X',
+    'conmod' => 'Налаштувати використання модуля Spam-X',
+    'acmod' => 'Модулі дій Spam-X',
+    'exmod' => 'Модулі перевірки Spam-X',
+    'actmod' => 'Активні модулі',
+    'avmod' => 'Наявні модулі',
+    'coninst' => '<hr>Клацніть активний модуль для його усунення; клацання наявного модуля додасть його.<br>Модулі виконуються в порядку, в котрому їх подано.',
+    'fsc' => 'Знайдено спамовий коментар, що співпадає з ',
+    'fsc1' => ', надісланий користувачем ',
+    'fsc2' => ' з IP ',
+    'uMTlist' => 'Поновити чорний MT-список',
+    'uMTlist2' => ': Додано ',
+    'uMTlist3' => ' записів, вилучено ',
+    'entries' => ' записів.',
+    'uPlist' => 'Поновити особистий чорний список',
+    'entriesadded' => 'Додано записів',
+    'entriesdeleted' => 'Вилучено записів',
+    'viewlog' => 'Перегляд журналу Spam-X',
+    'clearlog' => 'Очистити файл журналу',
+    'logcleared' => '- файл журналу Spam-X очищено',
+    'plugin' => 'Втулка',
+    'access_denied' => 'В доступі відмовлено',
+    'access_denied_msg' => 'Лише користувачі групи Root мають доступ до цієї сторінки. Ваше ім\'я користувача та IP записані.',
+    'admin' => 'Адміністрування втулки',
+    'install_header' => 'Встановити/вилучити втулку',
+    'installed' => 'Втулку встановлено',
+    'uninstalled' => 'Втулку не встановлено',
+    'install_success' => 'Встановлення успішне',
+    'install_failed' => 'Встановлення не вдалось -- дивіться протокол помилок, щоб дізнатись причину.',
+    'uninstall_msg' => 'Втулку успішно вилучено',
+    'install' => 'Встановити',
+    'uninstall' => 'Вилучити',
+    'warning' => 'Увага! Втулка все ще ввімкнена',
+    'enabled' => 'Вимкніть втулку перед її вилученням.',
+    'readme' => 'УВАГА! Перед тим, як натискати кнопку &laquo;Встановити&raquo;, будь ласка, прочитайте ',
+    'installdoc' => 'Документ із встановлення.',
+    'spamdeleted' => 'Вилучено спамовий коментар',
+    'foundspam' => 'Знайдено спамовий коментар, котрий співпадає з ',
+    'foundspam2' => ', надісланий користувачем ',
+    'foundspam3' => ' з IP ',
+	'deletespam' => 'Вилучити спам',
+	'numtocheck' => 'Кількість кометарів для перевірки',
+	'note1'		=> '<p>Увага: масове вилучення задумано як допомогу, коли у вас відбувається атака',
+	'note2'		=> ' спамом у коментарях, а Spam-X його не ловить. <ul><li>Спершу знайдіть посилання чи інші ',
+	'note3'		=> 'ідентифікатори цього спамового коментаря й додайте його до вашого особистого чорного списку.</li><li>Тоді ',
+	'note4'		=> 'поверніться сюди й дайте втулці Spam-X перевірити найостанніші коментарі на предмет спаму.</li></ul>Коментарі ',
+	'note5'		=> 'перевіряються від новіших до старіших -- чим їх більше, тим ',
+	'note6'		=> 'більше часу знадобиться на їх перевірку.</p>',
+	'masshead'	=> '<hr><center><h1>Масове вилучення спамових коментарів</h1></center>',
+	'comdel'	=> ' коментарів вилучено.',
+    'initial_Pimport' => '<p>Імпорт особистого чорного списку"',
+    'initial_import' => 'Імпорт початкового чорного MT-списку',
+    'import_success' => '<p>Успішно імпортовано %d записів чорного списку.',
+    'import_failure' => '<p><strong>Помилка:</strong> не знайдено записів.',
+    'allow_url_fopen' => '<p>Пробачте, налаштування вашого сервера Тенет не дозволяє прочитувати віддалені файли (<code>allow_url_fopen</code> дорівнює off). Будь ласка, звантажте чорний список з наступного URL і завантажте його в каталог "data" Geeklog, <tt>%s</tt> перед наступною спробою:', 
+    'documentation' => 'Документація щодо втулки Spam-X',
+    'emailmsg' => "Надіслано новий спамовий коментар на \"%s\"\nІдентифікатор користувача:\"%s\"\n\nВміст:\"%s\"",
+    'emailsubject' => 'Spam post at %s',
+    'ipblack' => 'Spam-X IP Blacklist',
+    'ipofurlblack' => 'Spam-X IP of URL Blacklist',
+    'headerblack' => 'Spam-X HTTP Header Blacklist',
+    'headers' => 'Request headers:',
+
+    'stats_headline' => 'Spam-X Statistics',
+    'stats_page_title' => 'Blacklist',
+    'stats_entries' => 'Entries',
+    'stats_mtblacklist' => 'MT-Blacklist',
+    'stats_pblacklist' => 'Personal Blacklist',
+    'stats_ip' => 'Blocked IPs',
+    'stats_ipofurl' => 'Blocked by IP of URL',
+    'stats_header' => 'HTTP headers',
+    'stats_deleted' => 'Posts deleted as spam',
+
+    'plugin_name' => 'Spam-X'
+);
+
+
+/* Define Messages that are shown when Spam-X module action is taken */
+$PLG_spamx_MESSAGE128 = 'Виявлено спам. Коментар чи повідомлення вилучено.';
+$PLG_spamx_MESSAGE8   = 'Виявлено спам. Надіслано листа адміністраторові.';
+
+// Messages for the plugin upgrade
+$PLG_spamx_MESSAGE3001 = 'Spam-X plugin upgraded successfully.';
+$PLG_spamx_MESSAGE3002 = 'Failed to upgrade the Spam-X plugin.';
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/LogView.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/LogView.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/LogView.Admin.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/LogView.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,14 +1,21 @@
 <?php
+
 /**
  * File: Logview.Admin.class.php
- * This is the LogViewer for the Geeklog SpamX Plug-in!
+ * This is the LogViewer for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author       Tom Willett     tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: LogView.Admin.class.php,v 1.5.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'LogView.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 require_once($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
 
 class LogView extends BaseAdmin {
@@ -19,6 +26,7 @@
     {
         global $_CONF, $_POST, $LANG_SX00;
 
+        $max_Log_Size = 100000; 
         $action = COM_applyFilter($_POST['action']);
         $path = $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=LogView';
         $log = 'spamx.log';
@@ -30,7 +38,19 @@
             $fd = fopen($_CONF['path_log'] . $log, "w");
             fputs($fd, "$timestamp {$LANG_SX00['logcleared']} \n");
             fclose($fd);
-        } 
+        }
+        $fsize = filesize($_CONF['path_log'] . $log);
+        if ($fsize > $max_Log_Size) {
+          $fd=fopen($_CONF['path_log'] . $log, "r");
+          fseek($fd,-$max_Log_Size,SEEK_END);
+          $data = fgets($fd);
+          $data = fread($fd,$max_Log_Size);
+          fclose($fd);
+          $fd = fopen($_CONF['path_log'] . $log, "w");
+          fputs($fd, "$timestamp {$LANG_SX00['logcleared']} \n");
+          fwrite($fd,$data);
+          fclose($fd);
+        }
         $display .= "<hr><pre>";
         $display .= implode('', file($_CONF['path_log'] . $log));
         $display .= "</pre>";
@@ -43,6 +63,6 @@
 
         return $LANG_SX00['viewlog'];
     } 
-} 
-
+}     
+      
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/extlib/Snoopy.class.inc 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/extlib/Snoopy.class.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/extlib/Snoopy.class.inc	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/extlib/Snoopy.class.inc	2006-08-08 02:39:06.000000000 -0500
@@ -1,109 +1,119 @@
 <?php
 
-/**
- * Snoopy - the PHP net client
- * Author: Monte Ohrt <monte@ispi.net>
- * Copyright (c): 1999-2000 ispi, all rights reserved
- * Version: 1.01
- * 
+/*************************************************
+
+Snoopy - the PHP net client
+Author: Monte Ohrt <monte@ispi.net>
+Copyright (c): 1999-2000 ispi, all rights reserved
+Version: 1.0
+
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * 
- * You may contact the author of Snoopy by e-mail at:
- * monte@ispi.net
- * 
- * Or, write to:
- * Monte Ohrt
- * CTO, ispi
- * 237 S. 70th suite 220
- * Lincoln, NE 68510
- * 
- * The latest version of Snoopy can be obtained from:
- * http://snoopy.sourceforge.com
- */
-
-class Snoopy {
-    /**
-     * *** Public variables ***
-     */
-
-    /* user definable vars */
-
-    var $host = "www.php.net"; // host name we are connecting to
-    var $port = 80; // port we are connecting to
-    var $proxy_host = ""; // proxy host to use
-    var $proxy_port = ""; // proxy port to use
-    var $agent = "Snoopy v1.01"; // agent we masquerade as
-    var $referer = ""; // referer info to pass
-    var $cookies = array(); // array of cookies to pass 
-    // $cookies["username"]="joe";
-    var $rawheaders = array(); // array of raw headers to send 
-    // $rawheaders["Content-type"]="text/html";
-    var $maxredirs = 5; // http redirection depth maximum. 0 = disallow
-    var $lastredirectaddr = ""; // contains address of last redirected address
-    var $offsiteok = true; // allows redirection off-site
-    var $maxframes = 0; // frame content depth maximum. 0 = disallow
-    var $expandlinks = true; // expand links to fully qualified URLs. 
-    // this only applies to fetchlinks()
-    // or submitlinks()
-    var $passcookies = true; // pass set cookies back through redirects 
-    // NOTE: this currently does not respect
-    // dates, domains or paths.
-    var $user = ""; // user for http authentication
-    var $pass = ""; // password for http authentication 
-    // http accept types
-    var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
-
-    var $results = ""; // where the content is put
-    var $error = ""; // error messages sent here
-    var $response_code = ""; // response code returned from server
-    var $headers = array(); // headers returned from server sent here
-    var $maxlength = 500000; // max return data length (body)
-    var $read_timeout = 0; // timeout on read operations, in seconds 
-    // supported only since PHP 4 Beta 4
-    // set to 0 to disallow timeouts
-    var $timed_out = false; // if a read operation timed out
-    var $status = 0; // http request status
-    var $curl_path = "/usr/local/bin/curl"; 
-    // Snoopy will use cURL for fetching
-    // SSL content if a full system path to
-    // the cURL binary is supplied here.
-    // set to false if you do not have
-    // cURL installed. See http://curl.haxx.se
-    // for details on installing cURL.
-    // Snoopy does *not* use the cURL
-    // library functions built into php,
-    // as these functions are not stable
-    // as of this Snoopy release.
-    /**
-     * *** Private variables ***
-     */
-
-    var $_maxlinelen = 4096; // max line length (headers)
-    var $_httpmethod = "GET"; // default http request method
-    var $_httpversion = "HTTP/1.0"; // default http request version
-    var $_submit_method = "POST"; // default submit method
-    var $_submit_type = "application/x-www-form-urlencoded"; // default submit type
-    var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type
-    var $_redirectaddr = false; // will be set if page fetched is a redirect
-    var $_redirectdepth = 0; // increments on an http redirect
-    var $_frameurls = array(); // frame src urls
-    var $_framedepth = 0; // increments on frame depth
-    var $_isproxy = false; // set if using a proxy server
-    var $_fp_timeout = 30; // timeout for socket connection
-    
-    /*======================================================================*\
+
+You may contact the author of Snoopy by e-mail at:
+monte@ispi.net
+
+Or, write to:
+Monte Ohrt
+CTO, ispi
+237 S. 70th suite 220
+Lincoln, NE 68510
+
+The latest version of Snoopy can be obtained from:
+http://snoopy.sourceforge.com
+
+*************************************************/
+
+class Snoopy
+{
+	/**** Public variables ****/
+	
+	/* user definable vars */
+
+	var $host			=	"www.php.net";		// host name we are connecting to
+	var $port			=	80;					// port we are connecting to
+	var $proxy_host		=	"";					// proxy host to use
+	var $proxy_port		=	"";					// proxy port to use
+	var $agent			=	"Snoopy v1.0";		// agent we masquerade as
+	var	$referer		=	"";					// referer info to pass
+	var $cookies		=	array();			// array of cookies to pass
+												// $cookies["username"]="joe";
+	var	$rawheaders		=	array();			// array of raw headers to send
+												// $rawheaders["Content-type"]="text/html";
+
+	var $maxredirs		=	5;					// http redirection depth maximum. 0 = disallow
+	var $lastredirectaddr	=	"";				// contains address of last redirected address
+	var	$offsiteok		=	true;				// allows redirection off-site
+	var $maxframes		=	0;					// frame content depth maximum. 0 = disallow
+	var $expandlinks	=	true;				// expand links to fully qualified URLs.
+												// this only applies to fetchlinks()
+												// or submitlinks()
+	var $passcookies	=	true;				// pass set cookies back through redirects
+												// NOTE: this currently does not respect
+												// dates, domains or paths.
+	
+	var	$user			=	"";					// user for http authentication
+	var	$pass			=	"";					// password for http authentication
+	
+	// http accept types
+	var $accept			=	"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
+	
+	var $results		=	"";					// where the content is put
+		
+	var $error			=	"";					// error messages sent here
+	var	$response_code	=	"";					// response code returned from server
+	var	$headers		=	array();			// headers returned from server sent here
+	var	$maxlength		=	500000;				// max return data length (body)
+	var $read_timeout	=	0;					// timeout on read operations, in seconds
+												// supported only since PHP 4 Beta 4
+												// set to 0 to disallow timeouts
+	var $timed_out		=	false;				// if a read operation timed out
+	var	$status			=	0;					// http request status
+	
+	var	$curl_path		=	"/usr/bin/curl";
+												// Snoopy will use cURL for fetching
+												// SSL content if a full system path to
+												// the cURL binary is supplied here.
+												// set to false if you do not have
+												// cURL installed. See http://curl.haxx.se
+												// for details on installing cURL.
+												// Snoopy does *not* use the cURL
+												// library functions built into php,
+												// as these functions are not stable
+												// as of this Snoopy release.
+	
+	// send Accept-encoding: gzip?
+	var $use_gzip		= true;	
+	
+	/**** Private variables ****/	
+	
+	var	$_maxlinelen	=	4096;				// max line length (headers)
+	
+	var $_httpmethod	=	"GET";				// default http request method
+	var $_httpversion	=	"HTTP/1.0";			// default http request version
+	var $_submit_method	=	"POST";				// default submit method
+	var $_submit_type	=	"application/x-www-form-urlencoded";	// default submit type
+	var $_mime_boundary	=   "";					// MIME boundary for multipart/form-data submit type
+	var $_redirectaddr	=	false;				// will be set if page fetched is a redirect
+	var $_redirectdepth	=	0;					// increments on an http redirect
+	var $_frameurls		= 	array();			// frame src urls
+	var $_framedepth	=	0;					// increments on frame depth
+	
+	var $_isproxy		=	false;				// set if using a proxy server
+	var $_fp_timeout	=	30;					// timeout for socket connection
+
+/*======================================================================*\
 	Function:	fetch
 	Purpose:	fetch the contents of a web page
 				(and possibly other protocols in the
@@ -112,486 +122,247 @@
 	Output:		$this->results	the output text from the fetch
 \*======================================================================*/
 
-    function fetch($URI)
-    { 
-        // preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS);
-        $URI_PARTS = parse_url($URI);
-        if (!empty($URI_PARTS["user"]))
-            $this->user = $URI_PARTS["user"];
-        if (!empty($URI_PARTS["pass"]))
-            $this->pass = $URI_PARTS["pass"];
-
-        switch ($URI_PARTS["scheme"]) {
-            case "http":
-                $this->host = $URI_PARTS["host"];
-                if (!empty($URI_PARTS["port"]))
-                    $this->port = $URI_PARTS["port"];
-                if ($this->_connect($fp)) {
-                    if ($this->_isproxy) {
-                        // using proxy, send entire URI
-                        $this->_httprequest($URI, $fp, $URI, $this->_httpmethod);
-                    } else {
-                        $path = $URI_PARTS["path"] . ($URI_PARTS["query"] ? "?" . $URI_PARTS["query"] : ""); 
-                        // no proxy, send only the path
-                        $this->_httprequest($path, $fp, $URI, $this->_httpmethod);
-                    } 
-
-                    $this->_disconnect($fp);
-
-                    if ($this->_redirectaddr) {
-                        /* url was redirected, check if we've hit the max depth */
-                        if ($this->maxredirs > $this->_redirectdepth) {
-                            // only follow redirect if it's on this site, or offsiteok is true
-                            if (preg_match("|^http://" . preg_quote($this->host) . "|i", $this->_redirectaddr) || $this->offsiteok) {
-                                /* follow the redirect */
-                                $this->_redirectdepth++;
-                                $this->lastredirectaddr = $this->_redirectaddr;
-                                $this->fetch($this->_redirectaddr);
-                            } 
-                        } 
-                    } 
-
-                    if ($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) {
-                        $frameurls = $this->_frameurls;
-                        $this->_frameurls = array();
-
-                        while (list(, $frameurl) = each($frameurls)) {
-                            if ($this->_framedepth < $this->maxframes) {
-                                $this->fetch($frameurl);
-                                $this->_framedepth++;
-                            } else
-                                break;
-                        } 
-                    } 
-                } else {
-                    return false;
-                } 
-                return true;
-                break;
-            case "https":
-                if (!$this->curl_path || (!is_executable($this->curl_path)))
-                    return false;
-                $this->host = $URI_PARTS["host"];
-                if (!empty($URI_PARTS["port"]))
-                    $this->port = $URI_PARTS["port"];
-                if ($this->_isproxy) {
-                    // using proxy, send entire URI
-                    $this->_httpsrequest($URI, $URI, $this->_httpmethod);
-                } else {
-                    $path = $URI_PARTS["path"] . ($URI_PARTS["query"] ? "?" . $URI_PARTS["query"] : ""); 
-                    // no proxy, send only the path
-                    $this->_httpsrequest($path, $URI, $this->_httpmethod);
-                } 
-
-                if ($this->_redirectaddr) {
-                    /* url was redirected, check if we've hit the max depth */
-                    if ($this->maxredirs > $this->_redirectdepth) {
-                        // only follow redirect if it's on this site, or offsiteok is true
-                        if (preg_match("|^http://" . preg_quote($this->host) . "|i", $this->_redirectaddr) || $this->offsiteok) {
-                            /* follow the redirect */
-                            $this->_redirectdepth++;
-                            $this->lastredirectaddr = $this->_redirectaddr;
-                            $this->fetch($this->_redirectaddr);
-                        } 
-                    } 
-                } 
-
-                if ($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) {
-                    $frameurls = $this->_frameurls;
-                    $this->_frameurls = array();
-
-                    while (list(, $frameurl) = each($frameurls)) {
-                        if ($this->_framedepth < $this->maxframes) {
-                            $this->fetch($frameurl);
-                            $this->_framedepth++;
-                        } else
-                            break;
-                    } 
-                } 
-                return true;
-                break;
-            default: 
-                // not a valid protocol
-                $this->error = 'Invalid protocol "' . $URI_PARTS["scheme"] . '"\n';
-                return false;
-                break;
-        } 
-        return true;
-    } 
-
-    /*======================================================================*\
-	Function:	submit
-	Purpose:	submit an http form
-	Input:		$URI	the location to post the data
-				$formvars	the formvars to use.
-					format: $formvars["var"] = "val";
-	Output:		$this->results	the text output from the post
-\*======================================================================*/
-
-    function submit($URI, $formvars = "", $formfiles = "")
-    {
-        unset($postdata);
-
-        $postdata = $this->_prepare_post_body($formvars, $formfiles);
-
-        $URI_PARTS = parse_url($URI);
-        if (!empty($URI_PARTS["user"]))
-            $this->user = $URI_PARTS["user"];
-        if (!empty($URI_PARTS["pass"]))
-            $this->pass = $URI_PARTS["pass"];
-
-        switch ($URI_PARTS["scheme"]) {
-            case "http":
-                $this->host = $URI_PARTS["host"];
-                if (!empty($URI_PARTS["port"]))
-                    $this->port = $URI_PARTS["port"];
-                if ($this->_connect($fp)) {
-                    if ($this->_isproxy) {
-                        // using proxy, send entire URI
-                        $this->_httprequest($URI, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata);
-                    } else {
-                        $path = $URI_PARTS["path"] . ($URI_PARTS["query"] ? "?" . $URI_PARTS["query"] : ""); 
-                        // no proxy, send only the path
-                        $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata);
-                    } 
-
-                    $this->_disconnect($fp);
-
-                    if ($this->_redirectaddr) {
-                        /* url was redirected, check if we've hit the max depth */
-                        if ($this->maxredirs > $this->_redirectdepth) {
-                            if (!preg_match("|^" . $URI_PARTS["scheme"] . "://|", $this->_redirectaddr))
-                                $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr, $URI_PARTS["scheme"] . "://" . $URI_PARTS["host"]); 
-                            // only follow redirect if it's on this site, or offsiteok is true
-                            if (preg_match("|^http://" . preg_quote($this->host) . "|i", $this->_redirectaddr) || $this->offsiteok) {
-                                /* follow the redirect */
-                                $this->_redirectdepth++;
-                                $this->lastredirectaddr = $this->_redirectaddr;
-                                $this->submit($this->_redirectaddr, $formvars, $formfiles);
-                            } 
-                        } 
-                    } 
-
-                    if ($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) {
-                        $frameurls = $this->_frameurls;
-                        $this->_frameurls = array();
-
-                        while (list(, $frameurl) = each($frameurls)) {
-                            if ($this->_framedepth < $this->maxframes) {
-                                $this->fetch($frameurl);
-                                $this->_framedepth++;
-                            } else
-                                break;
-                        } 
-                    } 
-                } else {
-                    return false;
-                } 
-                return true;
-                break;
-            case "https":
-                if (!$this->curl_path || (!is_executable($this->curl_path)))
-                    return false;
-                $this->host = $URI_PARTS["host"];
-                if (!empty($URI_PARTS["port"]))
-                    $this->port = $URI_PARTS["port"];
-                if ($this->_isproxy) {
-                    // using proxy, send entire URI
-                    $this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata);
-                } else {
-                    $path = $URI_PARTS["path"] . ($URI_PARTS["query"] ? "?" . $URI_PARTS["query"] : ""); 
-                    // no proxy, send only the path
-                    $this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata);
-                } 
-
-                if ($this->_redirectaddr) {
-                    /* url was redirected, check if we've hit the max depth */
-                    if ($this->maxredirs > $this->_redirectdepth) {
-                        if (!preg_match("|^" . $URI_PARTS["scheme"] . "://|", $this->_redirectaddr))
-                            $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr, $URI_PARTS["scheme"] . "://" . $URI_PARTS["host"]); 
-                        // only follow redirect if it's on this site, or offsiteok is true
-                        if (preg_match("|^http://" . preg_quote($this->host) . "|i", $this->_redirectaddr) || $this->offsiteok) {
-                            /* follow the redirect */
-                            $this->_redirectdepth++;
-                            $this->lastredirectaddr = $this->_redirectaddr;
-                            $this->submit($this->_redirectaddr, $formvars, $formfiles);
-                        } 
-                    } 
-                } 
-
-                if ($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) {
-                    $frameurls = $this->_frameurls;
-                    $this->_frameurls = array();
-
-                    while (list(, $frameurl) = each($frameurls)) {
-                        if ($this->_framedepth < $this->maxframes) {
-                            $this->fetch($frameurl);
-                            $this->_framedepth++;
-                        } else
-                            break;
-                    } 
-                } 
-                return true;
-                break;
-
-            default: 
-                // not a valid protocol
-                $this->error = 'Invalid protocol "' . $URI_PARTS["scheme"] . '"\n';
-                return false;
-                break;
-        } 
-        return true;
-    } 
-
-    /*======================================================================*\
-	Function:	fetchlinks
-	Purpose:	fetch the links from a web page
-	Input:		$URI	where you are fetching from
-	Output:		$this->results	an array of the URLs
-\*======================================================================*/
+	function fetch($URI)
+	{
+	
+		//preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS);
+		$URI_PARTS = parse_url($URI);
+		if (!empty($URI_PARTS["user"]))
+			$this->user = $URI_PARTS["user"];
+		if (!empty($URI_PARTS["pass"]))
+			$this->pass = $URI_PARTS["pass"];
+				
+		switch($URI_PARTS["scheme"])
+		{
+			case "http":
+				$this->host = $URI_PARTS["host"];
+				if(!empty($URI_PARTS["port"]))
+					$this->port = $URI_PARTS["port"];
+				if($this->_connect($fp))
+				{
+					if($this->_isproxy)
+					{
+						// using proxy, send entire URI
+						$this->_httprequest($URI,$fp,$URI,$this->_httpmethod);
+					}
+					else
+					{
+						$path = $URI_PARTS["path"].(isset($URI_PARTS["query"]) ? "?".$URI_PARTS["query"] : "");
+						// no proxy, send only the path
+						$this->_httprequest($path, $fp, $URI, $this->_httpmethod);
+					}
+					
+					$this->_disconnect($fp);
+
+					if($this->_redirectaddr)
+					{
+						/* url was redirected, check if we've hit the max depth */
+						if($this->maxredirs > $this->_redirectdepth)
+						{
+							// only follow redirect if it's on this site, or offsiteok is true
+							if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
+							{
+								/* follow the redirect */
+								$this->_redirectdepth++;
+								$this->lastredirectaddr=$this->_redirectaddr;
+								$this->fetch($this->_redirectaddr);
+							}
+						}
+					}
+
+					if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0)
+					{
+						$frameurls = $this->_frameurls;
+						$this->_frameurls = array();
+						
+						while(list(,$frameurl) = each($frameurls))
+						{
+							if($this->_framedepth < $this->maxframes)
+							{
+								$this->fetch($frameurl);
+								$this->_framedepth++;
+							}
+							else
+								break;
+						}
+					}					
+				}
+				else
+				{
+					return false;
+				}
+				return true;					
+				break;
+			case "https":
+				if(!$this->curl_path || (!is_executable($this->curl_path))) {
+					$this->error = "Bad curl ($this->curl_path), can't fetch HTTPS \n";
+					return false;
+				}
+				$this->host = $URI_PARTS["host"];
+				if(!empty($URI_PARTS["port"]))
+					$this->port = $URI_PARTS["port"];
+				if($this->_isproxy)
+				{
+					// using proxy, send entire URI
+					$this->_httpsrequest($URI,$URI,$this->_httpmethod);
+				}
+				else
+				{
+					$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");
+					// no proxy, send only the path
+					$this->_httpsrequest($path, $URI, $this->_httpmethod);
+				}
+
+				if($this->_redirectaddr)
+				{
+					/* url was redirected, check if we've hit the max depth */
+					if($this->maxredirs > $this->_redirectdepth)
+					{
+						// only follow redirect if it's on this site, or offsiteok is true
+						if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
+						{
+							/* follow the redirect */
+							$this->_redirectdepth++;
+							$this->lastredirectaddr=$this->_redirectaddr;
+							$this->fetch($this->_redirectaddr);
+						}
+					}
+				}
+
+				if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0)
+				{
+					$frameurls = $this->_frameurls;
+					$this->_frameurls = array();
+
+					while(list(,$frameurl) = each($frameurls))
+					{
+						if($this->_framedepth < $this->maxframes)
+						{
+							$this->fetch($frameurl);
+							$this->_framedepth++;
+						}
+						else
+							break;
+					}
+				}					
+				return true;					
+				break;
+			default:
+				// not a valid protocol
+				$this->error	=	'Invalid protocol "'.$URI_PARTS["scheme"].'"\n';
+				return false;
+				break;
+		}		
+		return true;
+	}
 
-    function fetchlinks($URI)
-    {
-        if ($this->fetch($URI)) {
-            if (is_array($this->results)) {
-                for($x = 0;$x < count($this->results);$x++)
-                $this->results[$x] = $this->_striplinks($this->results[$x]);
-            } else
-                $this->results = $this->_striplinks($this->results);
-
-            if ($this->expandlinks)
-                $this->results = $this->_expandlinks($this->results, $URI);
-            return true;
-        } else
-            return false;
-    } 
-
-    /*======================================================================*\
-	Function:	fetchform
-	Purpose:	fetch the form elements from a web page
-	Input:		$URI	where you are fetching from
-	Output:		$this->results	the resulting html form
-\*======================================================================*/
 
-    function fetchform($URI)
-    {
-        if ($this->fetch($URI)) {
-            if (is_array($this->results)) {
-                for($x = 0;$x < count($this->results);$x++)
-                $this->results[$x] = $this->_stripform($this->results[$x]);
-            } else
-                $this->results = $this->_stripform($this->results);
-
-            return true;
-        } else
-            return false;
-    } 
-
-    /*======================================================================*\
-	Function:	fetchtext
-	Purpose:	fetch the text from a web page, stripping the links
-	Input:		$URI	where you are fetching from
-	Output:		$this->results	the text from the web page
-\*======================================================================*/
-
-    function fetchtext($URI)
-    {
-        if ($this->fetch($URI)) {
-            if (is_array($this->results)) {
-                for($x = 0;$x < count($this->results);$x++)
-                $this->results[$x] = $this->_striptext($this->results[$x]);
-            } else
-                $this->results = $this->_striptext($this->results);
-            return true;
-        } else
-            return false;
-    } 
-
-    /*======================================================================*\
-	Function:	submitlinks
-	Purpose:	grab links from a form submission
-	Input:		$URI	where you are submitting from
-	Output:		$this->results	an array of the links from the post
-\*======================================================================*/
-
-    function submitlinks($URI, $formvars = "", $formfiles = "")
-    {
-        if ($this->submit($URI, $formvars, $formfiles)) {
-            if (is_array($this->results)) {
-                for($x = 0;$x < count($this->results);$x++) {
-                    $this->results[$x] = $this->_striplinks($this->results[$x]);
-                    if ($this->expandlinks)
-                        $this->results[$x] = $this->_expandlinks($this->results[$x], $URI);
-                } 
-            } else {
-                $this->results = $this->_striplinks($this->results);
-                if ($this->expandlinks)
-                    $this->results = $this->_expandlinks($this->results, $URI);
-            } 
-            return true;
-        } else
-            return false;
-    } 
-
-    /*======================================================================*\
-	Function:	submittext
-	Purpose:	grab text from a form submission
-	Input:		$URI	where you are submitting from
-	Output:		$this->results	the text from the web page
-\*======================================================================*/
-
-    function submittext($URI, $formvars = "", $formfiles = "")
-    {
-        if ($this->submit($URI, $formvars, $formfiles)) {
-            if (is_array($this->results)) {
-                for($x = 0;$x < count($this->results);$x++) {
-                    $this->results[$x] = $this->_striptext($this->results[$x]);
-                    if ($this->expandlinks)
-                        $this->results[$x] = $this->_expandlinks($this->results[$x], $URI);
-                } 
-            } else {
-                $this->results = $this->_striptext($this->results);
-                if ($this->expandlinks)
-                    $this->results = $this->_expandlinks($this->results, $URI);
-            } 
-            return true;
-        } else
-            return false;
-    } 
-
-    /*======================================================================*\
-	Function:	set_submit_multipart
-	Purpose:	Set the form submission content type to
-				multipart/form-data
-\*======================================================================*/
-    function set_submit_multipart()
-    {
-        $this->_submit_type = "multipart/form-data";
-    } 
-
-    /*======================================================================*\
-	Function:	set_submit_normal
-	Purpose:	Set the form submission content type to
-				application/x-www-form-urlencoded
-\*======================================================================*/
-    function set_submit_normal()
-    {
-        $this->_submit_type = "application/x-www-form-urlencoded";
-    } 
 
-    /*======================================================================*\
+/*======================================================================*\
 	Private functions
 \*======================================================================*/
-
-    /*======================================================================*\
+	
+	
+/*======================================================================*\
 	Function:	_striplinks
 	Purpose:	strip the hyperlinks from an html document
 	Input:		$document	document to strip.
 	Output:		$match		an array of the links
 \*======================================================================*/
 
-    function _striplinks($document)
-    {
-        preg_match_all("'<\s*a\s.*?href\s*=\s*			# find <a href=
+	function _striplinks($document)
+	{	
+		preg_match_all("'<\s*a\s+.*href\s*=\s*			# find <a href=
 						([\"\'])?					# find single or double quote
 						(?(1) (.*?)\\1 | ([^\s\>]+))		# if quote found, match up to next matching
 													# quote, otherwise match up to next space
-						'isx", $document, $links); 
-        // catenate the non-empty matches from the conditional subpattern
-        while (list($key, $val) = each($links[2])) {
-            if (!empty($val))
-                $match[] = $val;
-        } while (list($key, $val) = each($links[3])) {
-            if (!empty($val))
-                $match[] = $val;
-        } 
-        // return the links
-        return $match;
-    } 
+						'isx",$document,$links);
+						
+
+		// catenate the non-empty matches from the conditional subpattern
 
-    /*======================================================================*\
+		while(list($key,$val) = each($links[2]))
+		{
+			if(!empty($val))
+				$match[] = $val;
+		}				
+		
+		while(list($key,$val) = each($links[3]))
+		{
+			if(!empty($val))
+				$match[] = $val;
+		}		
+		
+		// return the links
+		return $match;
+	}
+
+/*======================================================================*\
 	Function:	_stripform
 	Purpose:	strip the form elements from an html document
 	Input:		$document	document to strip.
 	Output:		$match		an array of the links
 \*======================================================================*/
 
-    function _stripform($document)
-    {
-        preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi", $document, $elements); 
-        // catenate the matches
-        $match = implode("\r\n", $elements[0]); 
-        // return the links
-        return $match;
-    } 
-
-    /*======================================================================*\
+	function _stripform($document)
+	{	
+		preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements);
+		
+		// catenate the matches
+		$match = implode("\r\n",$elements[0]);
+				
+		// return the links
+		return $match;
+	}
+
+	
+	
+/*======================================================================*\
 	Function:	_striptext
 	Purpose:	strip the text from an html document
 	Input:		$document	document to strip.
 	Output:		$text		the resulting text
 \*======================================================================*/
 
-    function _striptext($document)
-    { 
-        // I didn't use preg eval (//e) since that is only available in PHP 4.0.
-        // so, list your entities one by one here. I included some of the
-        // more common ones.
-        $search = array("'<script[^>]*?>.*?</script>'si", // strip out javascript
-            "'<[\/\!]*?[^<>]*?>'si", // strip out html tags
-            "'([\r\n])[\s]+'", // strip out white space
-            "'&(quot|#34|#034|#x22);'i", // replace html entities
-            "'&(amp|#38|#038|#x26);'i", // added hexadecimal values
-            "'&(lt|#60|#060|#x3c);'i",
-            "'&(gt|#62|#062|#x3e);'i",
-            "'&(nbsp|#160|#xa0);'i",
-            "'&(iexcl|#161);'i",
-            "'&(cent|#162);'i",
-            "'&(pound|#163);'i",
-            "'&(copy|#169);'i",
-            "'&(reg|#174);'i",
-            "'&(deg|#176);'i",
-            "'&(#39|#039|#x27);'",
-            "'&(euro|#8364);'i", // europe
-            "'&a(uml|UML);'", // german
-            "'&o(uml|UML);'",
-            "'&u(uml|UML);'",
-            "'&A(uml|UML);'",
-            "'&O(uml|UML);'",
-            "'&U(uml|UML);'",
-            "'&szlig;'i",
-            );
-        $replace = array("",
-            "",
-            "\\1",
-            "\"",
-            "&",
-            "<",
-            ">",
-            " ",
-            chr(161),
-            chr(162),
-            chr(163),
-            chr(169),
-            chr(174),
-            chr(176),
-            chr(39),
-            chr(128),
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            );
+	function _striptext($document)
+	{
+		
+		// I didn't use preg eval (//e) since that is only available in PHP 4.0.
+		// so, list your entities one by one here. I included some of the
+		// more common ones.
+								
+		$search = array("'<script[^>]*?>.*?</script>'si",	// strip out javascript
+						"'<[\/\!]*?[^<>]*?>'si",			// strip out html tags
+						"'([\r\n])[\s]+'",					// strip out white space
+						"'&(quote|#34);'i",					// replace html entities
+						"'&(amp|#38);'i",
+						"'&(lt|#60);'i",
+						"'&(gt|#62);'i",
+						"'&(nbsp|#160);'i",
+						"'&(iexcl|#161);'i",
+						"'&(cent|#162);'i",
+						"'&(pound|#163);'i",
+						"'&(copy|#169);'i"
+						);				
+		$replace = array(	"",
+							"",
+							"\\1",
+							"\"",
+							"&",
+							"<",
+							">",
+							" ",
+							chr(161),
+							chr(162),
+							chr(163),
+							chr(169));
+					
+		$text = preg_replace($search,$replace,$document);
+								
+		return $text;
+	}
 
-        $text = preg_replace($search, $replace, $document);
-
-        return $text;
-    } 
-
-    /*======================================================================*\
+/*======================================================================*\
 	Function:	_expandlinks
 	Purpose:	expand each link into a fully qualified URL
 	Input:		$links			the links to qualify
@@ -599,30 +370,31 @@
 	Output:		$expandedLinks	the expanded links
 \*======================================================================*/
 
-    function _expandlinks($links, $URI)
-    {
-        preg_match("/^[^\?]+/", $URI, $match);
-
-        $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|", "", $match[0]);
-
-        $search = array("|^http://" . preg_quote($this->host) . "|i",
-            "|^(?!http://)(\/)?(?!mailto:)|i",
-            "|/\./|",
-            "|/[^\/]+/\.\./|"
-            );
-
-        $replace = array("",
-            $match . "/",
-            "/",
-            "/"
-            );
+	function _expandlinks($links,$URI)
+	{
+		
+		preg_match("/^[^\?]+/",$URI,$match);
+
+		$match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
+				
+		$search = array( 	"|^http://".preg_quote($this->host)."|i",
+							"|^(?!http://)(\/)?(?!mailto:)|i",
+							"|/\./|",
+							"|/[^\/]+/\.\./|"
+						);
+						
+		$replace = array(	"",
+							$match."/",
+							"/",
+							"/"
+						);			
+				
+		$expandedLinks = preg_replace($search,$replace,$links);
 
-        $expandedLinks = preg_replace($search, $replace, $links);
+		return $expandedLinks;
+	}
 
-        return $expandedLinks;
-    } 
-
-    /*======================================================================*\
+/*======================================================================*\
 	Function:	_httprequest
 	Purpose:	go get the http data from the server
 	Input:		$url		the url to fetch
@@ -631,135 +403,182 @@
 				$body		body contents to send if any (POST)
 	Output:		
 \*======================================================================*/
+	
+	function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="")
+	{
+		if($this->passcookies && $this->_redirectaddr)
+			$this->setcookies();
+			
+		$URI_PARTS = parse_url($URI);
+		if(empty($url))
+			$url = "/";
+		$headers = $http_method." ".$url." ".$this->_httpversion."\r\n";		
+		if(!empty($this->agent))
+			$headers .= "User-Agent: ".$this->agent."\r\n";
+		if(!empty($this->host) && !isset($this->rawheaders['Host']))
+			$headers .= "Host: ".$this->host."\r\n";
+		if(!empty($this->accept))
+			$headers .= "Accept: ".$this->accept."\r\n";
+		
+		if($this->use_gzip) {
+			// make sure PHP was built with --with-zlib
+			// and we can handle gzipp'ed data
+			if ( function_exists(gzinflate) ) {
+			   $headers .= "Accept-encoding: gzip\r\n";
+			}
+			else {
+			   trigger_error(
+			   	"use_gzip is on, but PHP was built without zlib support.".
+				"  Requesting file(s) without gzip encoding.", 
+				E_USER_NOTICE);
+			}
+		}
+		
+		if(!empty($this->referer))
+			$headers .= "Referer: ".$this->referer."\r\n";
+		if(!empty($this->cookies))
+		{			
+			if(!is_array($this->cookies))
+				$this->cookies = (array)$this->cookies;
+	
+			reset($this->cookies);
+			if ( count($this->cookies) > 0 ) {
+				$cookie_headers .= 'Cookie: ';
+				foreach ( $this->cookies as $cookieKey => $cookieVal ) {
+				$cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; ";
+				}
+				$headers .= substr($cookie_headers,0,-2) . "\r\n";
+			} 
+		}
+		if(!empty($this->rawheaders))
+		{
+			if(!is_array($this->rawheaders))
+				$this->rawheaders = (array)$this->rawheaders;
+			while(list($headerKey,$headerVal) = each($this->rawheaders))
+				$headers .= $headerKey.": ".$headerVal."\r\n";
+		}
+		if(!empty($content_type)) {
+			$headers .= "Content-type: $content_type";
+			if ($content_type == "multipart/form-data")
+				$headers .= "; boundary=".$this->_mime_boundary;
+			$headers .= "\r\n";
+		}
+		if(!empty($body))	
+			$headers .= "Content-length: ".strlen($body)."\r\n";
+		if(!empty($this->user) || !empty($this->pass))	
+			$headers .= "Authorization: BASIC ".base64_encode($this->user.":".$this->pass)."\r\n";
+
+		$headers .= "\r\n";
+		
+		// set the read timeout if needed
+		if ($this->read_timeout > 0)
+			socket_set_timeout($fp, $this->read_timeout);
+		$this->timed_out = false;
+		
+		fwrite($fp,$headers.$body,strlen($headers.$body));
+		
+		$this->_redirectaddr = false;
+		unset($this->headers);
+		
+		// content was returned gzip encoded?
+		$is_gzipped = false;
+						
+		while($currentHeader = fgets($fp,$this->_maxlinelen))
+		{
+			if ($this->read_timeout > 0 && $this->_check_timeout($fp))
+			{
+				$this->status=-100;
+				return false;
+			}
+				
+		//	if($currentHeader == "\r\n")
+			if(preg_match("/^\r?\n$/", $currentHeader) )
+			      break;
+						
+			// if a header begins with Location: or URI:, set the redirect
+			if(preg_match("/^(Location:|URI:)/i",$currentHeader))
+			{
+				// get URL portion of the redirect
+				preg_match("/^(Location:|URI:)\s+(.*)/",chop($currentHeader),$matches);
+				// look for :// in the Location header to see if hostname is included
+				if(!preg_match("|\:\/\/|",$matches[2]))
+				{
+					// no host in the path, so prepend
+					$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;
+					// eliminate double slash
+					if(!preg_match("|^/|",$matches[2]))
+							$this->_redirectaddr .= "/".$matches[2];
+					else
+							$this->_redirectaddr .= $matches[2];
+				}
+				else
+					$this->_redirectaddr = $matches[2];
+			}
+		
+			if(preg_match("|^HTTP/|",$currentHeader))
+			{
+                if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status))
+				{
+					$this->status= $status[1];
+                }				
+				$this->response_code = $currentHeader;
+			}
+			
+			if (preg_match("/Content-Encoding: gzip/", $currentHeader) ) {
+				$is_gzipped = true;
+			}
+			
+			$this->headers[] = $currentHeader;
+		}
+
+		# $results = fread($fp, $this->maxlength);
+		$results = "";
+		while ( $data = fread($fp, $this->maxlength) ) {
+		    $results .= $data;
+		    if (
+		        strlen($results) > $this->maxlength ) {
+		        break;
+		    }
+		}
+		
+		// gunzip
+		if ( $is_gzipped ) {
+			// per http://www.php.net/manual/en/function.gzencode.php
+			$results = substr($results, 10);
+			$results = gzinflate($results);
+		}
+		
+		if ($this->read_timeout > 0 && $this->_check_timeout($fp))
+		{
+			$this->status=-100;
+			return false;
+		}
+		
+		// check if there is a a redirect meta tag
+		
+		if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))
+		{
+			$this->_redirectaddr = $this->_expandlinks($match[1],$URI);	
+		}
+
+		// have we hit our frame depth and is there frame src to fetch?
+		if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))
+		{
+			$this->results[] = $results;
+			for($x=0; $x<count($match[1]); $x++)
+				$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);
+		}
+		// have we already fetched framed content?
+		elseif(is_array($this->results))
+			$this->results[] = $results;
+		// no framed content
+		else
+			$this->results = $results;
+		
+		return true;
+	}
 
-    function _httprequest($url, $fp, $URI, $http_method, $content_type = "", $body = "")
-    {
-        $cookie_headers = '';
-        if ($this->passcookies && $this->_redirectaddr)
-            $this->setcookies();
-
-        $URI_PARTS = parse_url($URI);
-        if (empty($url))
-            $url = "/";
-        $headers = $http_method . " " . $url . " " . $this->_httpversion . "\r\n";
-        if (!empty($this->agent))
-            $headers .= "User-Agent: " . $this->agent . "\r\n";
-        if (!empty($this->host) && !isset($this->rawheaders['Host']))
-            $headers .= "Host: " . $this->host . "\r\n";
-        if (!empty($this->accept))
-            $headers .= "Accept: " . $this->accept . "\r\n";
-        if (!empty($this->referer))
-            $headers .= "Referer: " . $this->referer . "\r\n";
-        if (!empty($this->cookies)) {
-            if (!is_array($this->cookies))
-                $this->cookies = (array)$this->cookies;
-
-            reset($this->cookies);
-            if (count($this->cookies) > 0) {
-                $cookie_headers .= 'Cookie: ';
-                foreach ($this->cookies as $cookieKey => $cookieVal) {
-                    $cookie_headers .= $cookieKey . "=" . urlencode($cookieVal) . "; ";
-                } 
-                $headers .= substr($cookie_headers, 0, -2) . "\r\n";
-            } 
-        } 
-        if (!empty($this->rawheaders)) {
-            if (!is_array($this->rawheaders))
-                $this->rawheaders = (array)$this->rawheaders;
-            while (list($headerKey, $headerVal) = each($this->rawheaders))
-            $headers .= $headerKey . ": " . $headerVal . "\r\n";
-        } 
-        if (!empty($content_type)) {
-            $headers .= "Content-type: $content_type";
-            if ($content_type == "multipart/form-data")
-                $headers .= "; boundary=" . $this->_mime_boundary;
-            $headers .= "\r\n";
-        } 
-        if (!empty($body))
-            $headers .= "Content-length: " . strlen($body) . "\r\n";
-        if (!empty($this->user) || !empty($this->pass))
-            $headers .= "Authorization: Basic " . base64_encode($this->user . ":" . $this->pass) . "\r\n";
-
-        $headers .= "\r\n"; 
-        // set the read timeout if needed
-        if ($this->read_timeout > 0)
-            socket_set_timeout($fp, $this->read_timeout);
-        $this->timed_out = false;
-
-        fwrite($fp, $headers . $body, strlen($headers . $body));
-
-        $this->_redirectaddr = false;
-        unset($this->headers);
-
-        while ($currentHeader = fgets($fp, $this->_maxlinelen)) {
-            if ($this->read_timeout > 0 && $this->_check_timeout($fp)) {
-                $this->status = -100;
-                return false;
-            } 
-
-            if ($currentHeader == "\r\n")
-                break; 
-            // if a header begins with Location: or URI:, set the redirect
-            if (preg_match("/^(Location:|URI:)/i", $currentHeader)) {
-                // get URL portion of the redirect
-                preg_match("/^(Location:|URI:)[ ]+(.*)/", chop($currentHeader), $matches); 
-                // look for :// in the Location header to see if hostname is included
-                if (!preg_match("|\:\/\/|", $matches[2])) {
-                    // no host in the path, so prepend
-                    $this->_redirectaddr = $URI_PARTS["scheme"] . "://" . $this->host . ":" . $this->port; 
-                    // eliminate double slash
-                    if (!preg_match("|^/|", $matches[2]))
-                        $this->_redirectaddr .= "/" . $matches[2];
-                    else
-                        $this->_redirectaddr .= $matches[2];
-                } else
-                    $this->_redirectaddr = $matches[2];
-            } 
-
-            if (preg_match("|^HTTP/|", $currentHeader)) {
-                if (preg_match("|^HTTP/[^\s]*\s(.*?)\s|", $currentHeader, $status)) {
-                    $this->status = $status[1];
-                } 
-                $this->response_code = $currentHeader;
-            } 
-
-            $this->headers[] = $currentHeader;
-        } 
-
-        $results = '';
-        do {
-            $_data = fread($fp, $this->maxlength);
-            if (strlen($_data) == 0) {
-                break;
-            } 
-            $results .= $_data;
-        } while (true);
-
-        if ($this->read_timeout > 0 && $this->_check_timeout($fp)) {
-            $this->status = -100;
-            return false;
-        } 
-        // check if there is a a redirect meta tag
-        if (preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i", $results, $match)) {
-            $this->_redirectaddr = $this->_expandlinks($match[1], $URI);
-        } 
-        // have we hit our frame depth and is there frame src to fetch?
-        if (($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i", $results, $match)) {
-            $this->results[] = $results;
-            for($x = 0; $x < count($match[1]); $x++)
-            $this->_frameurls[] = $this->_expandlinks($match[1][$x], $URI_PARTS["scheme"] . "://" . $this->host);
-        } 
-        // have we already fetched framed content?
-        elseif (is_array($this->results))
-            $this->results[] = $results; 
-        // no framed content
-        else
-            $this->results = $results;
-
-        return true;
-    } 
-
-    /*======================================================================*\
+/*======================================================================*\
 	Function:	_httpsrequest
 	Purpose:	go get the https data from the server using curl
 	Input:		$url		the url to fetch
@@ -767,282 +586,315 @@
 				$body		body contents to send if any (POST)
 	Output:		
 \*======================================================================*/
+	
+	function _httpsrequest($url,$URI,$http_method,$content_type="",$body="")
+	{
+		if($this->passcookies && $this->_redirectaddr)
+			$this->setcookies();
+
+		$headers = array();		
+					
+		$URI_PARTS = parse_url($URI);
+		if(empty($url))
+			$url = "/";
+		// GET ... header not needed for curl
+		//$headers[] = $http_method." ".$url." ".$this->_httpversion;		
+		if(!empty($this->agent))
+			$headers[] = "User-Agent: ".$this->agent;
+		if(!empty($this->host))
+			$headers[] = "Host: ".$this->host;
+		if(!empty($this->accept))
+			$headers[] = "Accept: ".$this->accept;
+		if(!empty($this->referer))
+			$headers[] = "Referer: ".$this->referer;
+		if(!empty($this->cookies))
+		{			
+			if(!is_array($this->cookies))
+				$this->cookies = (array)$this->cookies;
+	
+			reset($this->cookies);
+			if ( count($this->cookies) > 0 ) {
+				$cookie_str = 'Cookie: ';
+				foreach ( $this->cookies as $cookieKey => $cookieVal ) {
+				$cookie_str .= $cookieKey."=".urlencode($cookieVal)."; ";
+				}
+				$headers[] = substr($cookie_str,0,-2);
+			}
+		}
+		if(!empty($this->rawheaders))
+		{
+			if(!is_array($this->rawheaders))
+				$this->rawheaders = (array)$this->rawheaders;
+			while(list($headerKey,$headerVal) = each($this->rawheaders))
+				$headers[] = $headerKey.": ".$headerVal;
+		}
+		if(!empty($content_type)) {
+			if ($content_type == "multipart/form-data")
+				$headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary;
+			else
+				$headers[] = "Content-type: $content_type";
+		}
+		if(!empty($body))	
+			$headers[] = "Content-length: ".strlen($body);
+		if(!empty($this->user) || !empty($this->pass))	
+			$headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass);
+			
+		for($curr_header = 0; $curr_header < count($headers); $curr_header++) {
+			$cmdline_params .= " -H \"".$headers[$curr_header]."\"";
+		}
+			  	                         
+		if(!empty($body))
+			$cmdline_params .= " -d \"$body\"";
+		
+		if($this->read_timeout > 0)
+			$cmdline_params .= " -m ".$this->read_timeout;
+		
+		$headerfile = uniqid(time());
+		
+		# accept self-signed certs
+		$cmdline_params .= " -k"; 
+		exec($this->curl_path." -D \"/tmp/$headerfile\"".escapeshellcmd($cmdline_params)." ".escapeshellcmd($URI),$results,$return);
+		
+		if($return)
+		{
+			$this->error = "Error: cURL could not retrieve the document, error $return.";
+			return false;
+		}
+			
+			
+		$results = implode("\r\n",$results);
+		
+		$result_headers = file("/tmp/$headerfile");
+						
+		$this->_redirectaddr = false;
+		unset($this->headers);
+						
+		for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++)
+		{
+			
+			// if a header begins with Location: or URI:, set the redirect
+			if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader]))
+			{
+				// get URL portion of the redirect
+				preg_match("/^(Location: |URI:)(.*)/",chop($result_headers[$currentHeader]),$matches);
+				// look for :// in the Location header to see if hostname is included
+				if(!preg_match("|\:\/\/|",$matches[2]))
+				{
+					// no host in the path, so prepend
+					$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;
+					// eliminate double slash
+					if(!preg_match("|^/|",$matches[2]))
+							$this->_redirectaddr .= "/".$matches[2];
+					else
+							$this->_redirectaddr .= $matches[2];
+				}
+				else
+					$this->_redirectaddr = $matches[2];
+			}
+		
+			if(preg_match("|^HTTP/|",$result_headers[$currentHeader]))
+			{
+			    $this->response_code = $result_headers[$currentHeader];
+			    if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$this->response_code, $match))
+			    {
+				$this->status= $match[1];
+                	    }
+			}
+			$this->headers[] = $result_headers[$currentHeader];
+		}
+
+		// check if there is a a redirect meta tag
+		
+		if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))
+		{
+			$this->_redirectaddr = $this->_expandlinks($match[1],$URI);	
+		}
+
+		// have we hit our frame depth and is there frame src to fetch?
+		if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))
+		{
+			$this->results[] = $results;
+			for($x=0; $x<count($match[1]); $x++)
+				$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);
+		}
+		// have we already fetched framed content?
+		elseif(is_array($this->results))
+			$this->results[] = $results;
+		// no framed content
+		else
+			$this->results = $results;
+
+		unlink("/tmp/$headerfile");
+		
+		return true;
+	}
 
-    function _httpsrequest($url, $URI, $http_method, $content_type = "", $body = "")
-    {
-        if ($this->passcookies && $this->_redirectaddr)
-            $this->setcookies();
-
-        $headers = array();
-
-        $URI_PARTS = parse_url($URI);
-        if (empty($url))
-            $url = "/"; 
-        // GET ... header not needed for curl
-        // $headers[] = $http_method." ".$url." ".$this->_httpversion;
-        if (!empty($this->agent))
-            $headers[] = "User-Agent: " . $this->agent;
-        if (!empty($this->host))
-            $headers[] = "Host: " . $this->host;
-        if (!empty($this->accept))
-            $headers[] = "Accept: " . $this->accept;
-        if (!empty($this->referer))
-            $headers[] = "Referer: " . $this->referer;
-        if (!empty($this->cookies)) {
-            if (!is_array($this->cookies))
-                $this->cookies = (array)$this->cookies;
-
-            reset($this->cookies);
-            if (count($this->cookies) > 0) {
-                $cookie_str = 'Cookie: ';
-                foreach ($this->cookies as $cookieKey => $cookieVal) {
-                    $cookie_str .= $cookieKey . "=" . urlencode($cookieVal) . "; ";
-                } 
-                $headers[] = substr($cookie_str, 0, -2);
-            } 
-        } 
-        if (!empty($this->rawheaders)) {
-            if (!is_array($this->rawheaders))
-                $this->rawheaders = (array)$this->rawheaders;
-            while (list($headerKey, $headerVal) = each($this->rawheaders))
-            $headers[] = $headerKey . ": " . $headerVal;
-        } 
-        if (!empty($content_type)) {
-            if ($content_type == "multipart/form-data")
-                $headers[] = "Content-type: $content_type; boundary=" . $this->_mime_boundary;
-            else
-                $headers[] = "Content-type: $content_type";
-        } 
-        if (!empty($body))
-            $headers[] = "Content-length: " . strlen($body);
-        if (!empty($this->user) || !empty($this->pass))
-            $headers[] = "Authorization: BASIC " . base64_encode($this->user . ":" . $this->pass);
-
-        for($curr_header = 0; $curr_header < count($headers); $curr_header++)
-        $cmdline_params .= " -H \"" . $headers[$curr_header] . "\"";
-
-        if (!empty($body))
-            $cmdline_params .= " -d \"$body\"";
-
-        if ($this->read_timeout > 0)
-            $cmdline_params .= " -m " . $this->read_timeout;
-
-        $headerfile = uniqid(time());
-
-        exec($this->curl_path . " -D \"/tmp/$headerfile\"" . $cmdline_params . " " . $URI, $results, $return);
-
-        if ($return) {
-            $this->error = "Error: cURL could not retrieve the document, error $return.";
-            return false;
-        } 
-
-        $results = implode("\r\n", $results);
-
-        $result_headers = file("/tmp/$headerfile");
-
-        $this->_redirectaddr = false;
-        unset($this->headers);
-
-        for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) {
-            // if a header begins with Location: or URI:, set the redirect
-            if (preg_match("/^(Location: |URI: )/i", $result_headers[$currentHeader])) {
-                // get URL portion of the redirect
-                preg_match("/^(Location: |URI:)\s+(.*)/", chop($result_headers[$currentHeader]), $matches); 
-                // look for :// in the Location header to see if hostname is included
-                if (!preg_match("|\:\/\/|", $matches[2])) {
-                    // no host in the path, so prepend
-                    $this->_redirectaddr = $URI_PARTS["scheme"] . "://" . $this->host . ":" . $this->port; 
-                    // eliminate double slash
-                    if (!preg_match("|^/|", $matches[2]))
-                        $this->_redirectaddr .= "/" . $matches[2];
-                    else
-                        $this->_redirectaddr .= $matches[2];
-                } else
-                    $this->_redirectaddr = $matches[2];
-            } 
-
-            if (preg_match("|^HTTP/|", $result_headers[$currentHeader]))
-                $this->response_code = $result_headers[$currentHeader];
-
-            $this->headers[] = $result_headers[$currentHeader];
-        } 
-        // check if there is a a redirect meta tag
-        if (preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i", $results, $match)) {
-            $this->_redirectaddr = $this->_expandlinks($match[1], $URI);
-        } 
-        // have we hit our frame depth and is there frame src to fetch?
-        if (($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i", $results, $match)) {
-            $this->results[] = $results;
-            for($x = 0; $x < count($match[1]); $x++)
-            $this->_frameurls[] = $this->_expandlinks($match[1][$x], $URI_PARTS["scheme"] . "://" . $this->host);
-        } 
-        // have we already fetched framed content?
-        elseif (is_array($this->results))
-            $this->results[] = $results; 
-        // no framed content
-        else
-            $this->results = $results;
-
-        unlink("/tmp/$headerfile");
-
-        return true;
-    } 
-
-    /*======================================================================*\
+/*======================================================================*\
 	Function:	setcookies()
 	Purpose:	set cookies for a redirection
 \*======================================================================*/
+	
+	function setcookies()
+	{
+		for($x=0; $x<count($this->headers); $x++)
+		{
+		if(preg_match("/^set-cookie:[\s]+([^=]+)=([^;]+)/i", $this->headers[$x],$match))
+			$this->cookies[$match[1]] = $match[2];
+		}
+	}
 
-    function setcookies()
-    {
-        for($x = 0; $x < count($this->headers); $x++) {
-            if (preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x], $match))
-                // $this->cookies[$match[1]] = $match[2];   // bugfix - gene_wood@sourceforge.net
-                $this->cookies[$match[1]] = urldecode($match[2]);
-        } 
-    } 
-
-    /*======================================================================*\
+	
+/*======================================================================*\
 	Function:	_check_timeout
 	Purpose:	checks whether timeout has occurred
 	Input:		$fp	file pointer
 \*======================================================================*/
 
-    function _check_timeout($fp)
-    {
-        if ($this->read_timeout > 0) {
-            $fp_status = socket_get_status($fp);
-            if ($fp_status["timed_out"]) {
-                $this->timed_out = true;
-                return true;
-            } 
-        } 
-        return false;
-    } 
+	function _check_timeout($fp)
+	{
+		if ($this->read_timeout > 0) {
+			$fp_status = socket_get_status($fp);
+			if ($fp_status["timed_out"]) {
+				$this->timed_out = true;
+				return true;
+			}
+		}
+		return false;
+	}
 
-    /*======================================================================*\
+/*======================================================================*\
 	Function:	_connect
 	Purpose:	make a socket connection
 	Input:		$fp	file pointer
 \*======================================================================*/
-
-    function _connect(&$fp)
-    {
-        if (!empty($this->proxy_host) && !empty($this->proxy_port)) {
-            $this->_isproxy = true;
-            $host = $this->proxy_host;
-            $port = $this->proxy_port;
-        } else {
-            $host = $this->host;
-            $port = $this->port;
-        } 
-
-        $this->status = 0;
-
-        if ($fp = fsockopen($host,
-                $port,
-                $errno,
-                $errstr,
-                $this->_fp_timeout
-                )) {
-            // socket connection succeeded
-            return true;
-        } else {
-            // socket connection failed
-            $this->status = $errno;
-            switch ($errno) {
-                case -3:
-                    $this->error = "socket creation failed (-3)";
-                case -4:
-                    $this->error = "dns lookup failure (-4)";
-                case -5:
-                    $this->error = "connection refused or timed out (-5)";
-                default:
-                    $this->error = "connection failed (" . $errno . ")";
-            } 
-            return false;
-        } 
-    } 
-    /*======================================================================*\
+	
+	function _connect(&$fp)
+	{
+		if(!empty($this->proxy_host) && !empty($this->proxy_port))
+			{
+				$this->_isproxy = true;
+				$host = $this->proxy_host;
+				$port = $this->proxy_port;
+			}
+		else
+		{
+			$host = $this->host;
+			$port = $this->port;
+		}
+	
+		$this->status = 0;
+		
+		if($fp = fsockopen(
+					$host,
+					$port,
+					$errno,
+					$errstr,
+					$this->_fp_timeout
+					))
+		{
+			// socket connection succeeded
+
+			return true;
+		}
+		else
+		{
+			// socket connection failed
+			$this->status = $errno;
+			switch($errno)
+			{
+				case -3:
+					$this->error="socket creation failed (-3)";
+				case -4:
+					$this->error="dns lookup failure (-4)";
+				case -5:
+					$this->error="connection refused or timed out (-5)";
+				default:
+					$this->error="connection failed (".$errno.")";
+			}
+			return false;
+		}
+	}
+/*======================================================================*\
 	Function:	_disconnect
 	Purpose:	disconnect a socket connection
 	Input:		$fp	file pointer
 \*======================================================================*/
+	
+	function _disconnect($fp)
+	{
+		return(fclose($fp));
+	}
 
-    function _disconnect($fp)
-    {
-        return(fclose($fp));
-    } 
-
-    /*======================================================================*\
+	
+/*======================================================================*\
 	Function:	_prepare_post_body
 	Purpose:	Prepare post body according to encoding type
 	Input:		$formvars  - form variables
 				$formfiles - form upload files
 	Output:		post body
 \*======================================================================*/
-
-    function _prepare_post_body($formvars, $formfiles)
-    {
-        settype($formvars, "array");
-        settype($formfiles, "array");
-
-        if (count($formvars) == 0 && count($formfiles) == 0)
-            return;
-
-        switch ($this->_submit_type) {
-            case "application/x-www-form-urlencoded":
-                reset($formvars);
-                while (list($key, $val) = each($formvars)) {
-                    if (is_array($val) || is_object($val)) {
-                        while (list($cur_key, $cur_val) = each($val)) {
-                            $postdata .= urlencode($key) . "[]=" . urlencode($cur_val) . "&";
-                        } 
-                    } else
-                        $postdata .= urlencode($key) . "=" . urlencode($val) . "&";
-                } 
-                break;
-
-            case "multipart/form-data":
-                $this->_mime_boundary = "Snoopy" . md5(uniqid(microtime()));
-
-                reset($formvars);
-                while (list($key, $val) = each($formvars)) {
-                    if (is_array($val) || is_object($val)) {
-                        while (list($cur_key, $cur_val) = each($val)) {
-                            $postdata .= "--" . $this->_mime_boundary . "\r\n";
-                            $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n";
-                            $postdata .= "$cur_val\r\n";
-                        } 
-                    } else {
-                        $postdata .= "--" . $this->_mime_boundary . "\r\n";
-                        $postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n";
-                        $postdata .= "$val\r\n";
-                    } 
-                } 
-
-                reset($formfiles);
-                while (list($field_name, $file_names) = each($formfiles)) {
-                    settype($file_names, "array");
-                    while (list(, $file_name) = each($file_names)) {
-                        if (!is_readable($file_name)) continue;
-
-                        $fp = fopen($file_name, "r");
-                        $file_content = fread($fp, filesize($file_name));
-                        fclose($fp);
-                        $base_name = basename($file_name);
-
-                        $postdata .= "--" . $this->_mime_boundary . "\r\n";
-                        $postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n";
-                        $postdata .= "$file_content\r\n";
-                    } 
-                } 
-                $postdata .= "--" . $this->_mime_boundary . "--\r\n";
-                break;
-        } 
-
-        return $postdata;
-    } 
-} 
+	
+	function _prepare_post_body($formvars, $formfiles)
+	{
+		settype($formvars, "array");
+		settype($formfiles, "array");
+
+		if (count($formvars) == 0 && count($formfiles) == 0)
+			return;
+		
+		switch ($this->_submit_type) {
+			case "application/x-www-form-urlencoded":
+				reset($formvars);
+				while(list($key,$val) = each($formvars)) {
+					if (is_array($val) || is_object($val)) {
+						while (list($cur_key, $cur_val) = each($val)) {
+							$postdata .= urlencode($key)."[]=".urlencode($cur_val)."&";
+						}
+					} else
+						$postdata .= urlencode($key)."=".urlencode($val)."&";
+				}
+				break;
+
+			case "multipart/form-data":
+				$this->_mime_boundary = "Snoopy".md5(uniqid(microtime()));
+				
+				reset($formvars);
+				while(list($key,$val) = each($formvars)) {
+					if (is_array($val) || is_object($val)) {
+						while (list($cur_key, $cur_val) = each($val)) {
+							$postdata .= "--".$this->_mime_boundary."\r\n";
+							$postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n";
+							$postdata .= "$cur_val\r\n";
+						}
+					} else {
+						$postdata .= "--".$this->_mime_boundary."\r\n";
+						$postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n";
+						$postdata .= "$val\r\n";
+					}
+				}
+				
+				reset($formfiles);
+				while (list($field_name, $file_names) = each($formfiles)) {
+					settype($file_names, "array");
+					while (list(, $file_name) = each($file_names)) {
+						if (!is_readable($file_name)) continue;
+
+						$fp = fopen($file_name, "r");
+						$file_content = fread($fp, filesize($file_name));
+						fclose($fp);
+						$base_name = basename($file_name);
+
+						$postdata .= "--".$this->_mime_boundary."\r\n";
+						$postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n";
+						$postdata .= "$file_content\r\n";
+					}
+				}
+				$postdata .= "--".$this->_mime_boundary."--\r\n";
+				break;
+		}
+
+		return $postdata;
+	}
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_cache.inc 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_cache.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_cache.inc	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_cache.inc	2006-08-08 02:39:06.000000000 -0500
@@ -2,10 +2,10 @@
 /*
  * Project:     MagpieRSS: a simple RSS integration tool
  * File:        rss_cache.inc, a simple, rolling(no GC), cache 
- *				for RSS objects, keyed on URL.
+ *              for RSS objects, keyed on URL.
  * Author:      Kellan Elliott-McCrea <kellan@protest.net>
- * Version:		0.51
- * License:		GPL
+ * Version:     0.51
+ * License:     GPL
  *
  * The lastest version of MagpieRSS can be obtained from:
  * http://magpierss.sourceforge.net
@@ -17,165 +17,184 @@
  */
 
 class RSSCache {
-    var $BASE_CACHE = './cache'; // where the cache files are stored
-    var $MAX_AGE = 3600; // when are files stale, default one hour
-    var $ERROR = ""; // accumulate error messages
-    function RSSCache ($base = '', $age = '')
-    {
-        if ($base) {
+    var $BASE_CACHE = './cache';    // where the cache files are stored
+    var $MAX_AGE    = 3600;         // when are files stale, default one hour
+    var $ERROR      = "";           // accumulate error messages
+    
+    function RSSCache ($base='', $age='') {
+        if ( $base ) {
             $this->BASE_CACHE = $base;
-        } 
-        if ($age) {
+        }
+        if ( $age ) {
             $this->MAX_AGE = $age;
-        } 
+        }
+        
         // attempt to make the cache directory
-        if (! file_exists($this->BASE_CACHE)) {
-            $status = @mkdir($this->BASE_CACHE, 0755); 
-            // if make failed
-            if (! $status) {
-                $this->error("Cache couldn't make dir '" . $this->BASE_CACHE . "'."
-                    );
-            } 
-        } 
-    } 
-
-    /*=======================================================================*\
-	Function:	set
-	Purpose:	add an item to the cache, keyed on url
-	Input:		url from wich the rss file was fetched
-	Output:		true on sucess	
+        if ( ! file_exists( $this->BASE_CACHE ) ) {
+            $status = @mkdir( $this->BASE_CACHE, 0755 );
+            
+            // if make failed 
+            if ( ! $status ) {
+                $this->error(
+                    "Cache couldn't make dir '" . $this->BASE_CACHE . "'."
+                );
+            }
+        }
+    }
+    
+/*=======================================================================*\
+    Function:   set
+    Purpose:    add an item to the cache, keyed on url
+    Input:      url from wich the rss file was fetched
+    Output:     true on sucess  
 \*=======================================================================*/
-    function set ($url, $rss)
-    {
+    function set ($url, $rss) {
         $this->ERROR = "";
-        $cache_file = $this->file_name($url);
-        $fp = @fopen($cache_file, 'w');
-
-        if (! $fp) {
-            $this->error("Cache unable to open file for writing: $cache_file"
-                );
+        $cache_file = $this->file_name( $url );
+        $fp = @fopen( $cache_file, 'w' );
+        
+        if ( ! $fp ) {
+            $this->error(
+                "Cache unable to open file for writing: $cache_file"
+            );
             return 0;
-        } 
-
-        $data = $this->serialize($rss);
-        fwrite($fp, $data);
-        fclose($fp);
-
+        }
+        
+        
+        $data = $this->serialize( $rss );
+        fwrite( $fp, $data );
+        fclose( $fp );
+        
         return $cache_file;
-    } 
-
-    /*=======================================================================*\
-	Function:	get
-	Purpose:	fetch an item from the cache
-	Input:		url from wich the rss file was fetched
-	Output:		cached object on HIT, false on MISS	
-\*=======================================================================*/
-    function get ($url)
-    {
+    }
+    
+/*=======================================================================*\
+    Function:   get
+    Purpose:    fetch an item from the cache
+    Input:      url from wich the rss file was fetched
+    Output:     cached object on HIT, false on MISS 
+\*=======================================================================*/ 
+    function get ($url) {
         $this->ERROR = "";
-        $cache_file = $this->file_name($url);
-
-        if (! file_exists($cache_file)) {
-            $this->debug("Cache doesn't contain: $url (cache file: $cache_file)"
-                );
+        $cache_file = $this->file_name( $url );
+        
+        if ( ! file_exists( $cache_file ) ) {
+            $this->debug( 
+                "Cache doesn't contain: $url (cache file: $cache_file)"
+            );
             return 0;
-        } 
-
+        }
+        
         $fp = @fopen($cache_file, 'r');
-        if (! $fp) {
-            $this->error("Failed to open cache file for reading: $cache_file"
-                );
+        if ( ! $fp ) {
+            $this->error(
+                "Failed to open cache file for reading: $cache_file"
+            );
             return 0;
-        } 
-
-        $data = fread($fp, filesize($cache_file));
-        $rss = $this->unserialize($data);
-
-        return $rss;
-    } 
-
-    /*=======================================================================*\
-	Function:	check_cache
-	Purpose:	check a url for membership in the cache
-				and whether the object is older then MAX_AGE (ie. STALE)
-	Input:		url from wich the rss file was fetched
-	Output:		cached object on HIT, false on MISS	
-\*=======================================================================*/
-    function check_cache ($url)
-    {
+        }
+        
+        if ($filesize = filesize($cache_file) ) {
+        	$data = fread( $fp, filesize($cache_file) );
+        	$rss = $this->unserialize( $data );
+        
+        	return $rss;
+    	}
+    	
+    	return 0;
+    }
+
+/*=======================================================================*\
+    Function:   check_cache
+    Purpose:    check a url for membership in the cache
+                and whether the object is older then MAX_AGE (ie. STALE)
+    Input:      url from wich the rss file was fetched
+    Output:     cached object on HIT, false on MISS 
+\*=======================================================================*/     
+    function check_cache ( $url ) {
         $this->ERROR = "";
-        $filename = $this->file_name($url);
-
-        if (file_exists($filename)) {
+        $filename = $this->file_name( $url );
+        
+        if ( file_exists( $filename ) ) {
             // find how long ago the file was added to the cache
             // and whether that is longer then MAX_AGE
-            $mtime = filemtime($filename);
+            $mtime = filemtime( $filename );
             $age = time() - $mtime;
-            if ($this->MAX_AGE > $age) {
+            if ( $this->MAX_AGE > $age ) {
                 // object exists and is current
                 return 'HIT';
-            } else {
+            }
+            else {
                 // object exists but is old
                 return 'STALE';
-            } 
-        } else {
+            }
+        }
+        else {
             // object does not exist
             return 'MISS';
-        } 
-    } 
-
-    /*=======================================================================*\
-	Function:	serialize
-\*=======================================================================*/
-    function serialize ($rss)
-    {
-        return serialize($rss);
-    } 
+        }
+    }
 
-    /*=======================================================================*\
-	Function:	unserialize
-\*=======================================================================*/
-    function unserialize ($data)
-    {
-        return unserialize($data);
-    } 
-
-    /*=======================================================================*\
-	Function:	file_name
-	Purpose:	map url to location in cache
-	Input:		url from wich the rss file was fetched
-	Output:		a file name
-\*=======================================================================*/
-    function file_name ($url)
-    {
-        $filename = md5($url);
-        return join(DIRECTORY_SEPARATOR, array($this->BASE_CACHE, $filename));
-    } 
-
-    /*=======================================================================*\
-	Function:	error
-	Purpose:	register error
-\*=======================================================================*/
-    function error ($errormsg, $lvl = E_USER_WARNING)
-    { 
+	function cache_age( $cache_key ) {
+		$filename = $this->file_name( $url );
+		if ( file_exists( $filename ) ) {
+			$mtime = filemtime( $filename );
+            $age = time() - $mtime;
+			return $age;
+		}
+		else {
+			return -1;	
+		}
+	}
+	
+/*=======================================================================*\
+    Function:   serialize
+\*=======================================================================*/     
+    function serialize ( $rss ) {
+        return serialize( $rss );
+    }
+
+/*=======================================================================*\
+    Function:   unserialize
+\*=======================================================================*/     
+    function unserialize ( $data ) {
+        return unserialize( $data );
+    }
+    
+/*=======================================================================*\
+    Function:   file_name
+    Purpose:    map url to location in cache
+    Input:      url from wich the rss file was fetched
+    Output:     a file name
+\*=======================================================================*/     
+    function file_name ($url) {
+        $filename = md5( $url );
+        return join( DIRECTORY_SEPARATOR, array( $this->BASE_CACHE, $filename ) );
+    }
+
+/*=======================================================================*\
+    Function:   error
+    Purpose:    register error
+\*=======================================================================*/         
+    function error ($errormsg, $lvl=E_USER_WARNING) {
         // append PHP's error message if track_errors enabled
-        if (isset($php_errormsg)) {
+        if ( isset($php_errormsg) ) { 
             $errormsg .= " ($php_errormsg)";
-        } 
+        }
         $this->ERROR = $errormsg;
-        if (MAGPIE_DEBUG) {
-            trigger_error($errormsg, $lvl);
-        } else {
-            error_log($errormsg, 0);
-        } 
-    } 
-
-    function debug ($debugmsg, $lvl = E_USER_NOTICE)
-    {
-        if (MAGPIE_DEBUG) {
+        if ( MAGPIE_DEBUG ) {
+            trigger_error( $errormsg, $lvl);
+        }
+        else {
+            error_log( $errormsg, 0);
+        }
+    }
+    
+    function debug ($debugmsg, $lvl=E_USER_NOTICE) {
+        if ( MAGPIE_DEBUG ) {
             $this->error("MagpieRSS [debug] $debugmsg", $lvl);
-        } 
-    } 
-} 
+        }
+    }
+
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_fetch.inc 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_fetch.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_fetch.inc	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_fetch.inc	2006-08-08 02:39:06.000000000 -0500
@@ -2,11 +2,10 @@
 /*
  * Project:     MagpieRSS: a simple RSS integration tool
  * File:        rss_fetch.inc, a simple functional interface
- 				to fetching and parsing RSS files, via the
-				function fetch_rss()
+                to fetching and parsing RSS files, via the
+                function fetch_rss()
  * Author:      Kellan Elliott-McCrea <kellan@protest.net>
- * Version:		0.51
- * License:		GPL
+ * License:     GPL
  *
  * The lastest version of MagpieRSS can be obtained from:
  * http://magpierss.sourceforge.net
@@ -15,23 +14,26 @@
  * Magpie mailing list:
  * magpierss-general@lists.sourceforge.net
  *
- */ 
+ */
+ 
 // Setup MAGPIE_DIR for use on hosts that don't include
 // the current path in include_path.
 // with thanks to rajiv and smarty
 if (!defined('DIR_SEP')) {
     define('DIR_SEP', DIRECTORY_SEPARATOR);
-} 
+}
 
 if (!defined('MAGPIE_DIR')) {
     define('MAGPIE_DIR', dirname(__FILE__) . DIR_SEP);
-} 
+}
+
+require_once( MAGPIE_DIR . 'rss_parse.inc' );
+require_once( MAGPIE_DIR . 'rss_cache.inc' );
 
-require_once(MAGPIE_DIR . 'rss_parse.inc');
-require_once(MAGPIE_DIR . 'rss_cache.inc');
 // for including 3rd party libraries
 define('MAGPIE_EXTLIB', MAGPIE_DIR . 'extlib' . DIR_SEP);
-require_once(MAGPIE_EXTLIB . 'Snoopy.class.inc');
+require_once( MAGPIE_EXTLIB . 'Snoopy.class.inc');
+
 
 /* 
  * CONSTANTS - redefine these in your script to change the
@@ -58,49 +60,51 @@
  *
 */
 
+
 /*=======================================================================*\
-	Function: fetch_rss: 
-	Purpose:  return RSS object for the give url
-			  maintain the cache
-	Input:	  url of RSS file
-	Output:	  parsed RSS object (see rss_parse.inc)
-
-	NOTES ON CACHEING:  
-	If caching is on (MAGPIE_CACHE_ON) fetch_rss will first check the cache.
-	
-	NOTES ON RETRIEVING REMOTE FILES:
-	If conditional gets are on (MAGPIE_CONDITIONAL_GET_ON) fetch_rss will
-	return a cached object, and touch the cache object upon recieving a
-	304.
-	
-	NOTES ON FAILED REQUESTS:
-	If there is an HTTP error while fetching an RSS object, the cached
-	version will be return, if it exists (and if MAGPIE_CACHE_FRESH_ONLY is off)
+    Function: fetch_rss: 
+    Purpose:  return RSS object for the give url
+              maintain the cache
+    Input:    url of RSS file
+    Output:   parsed RSS object (see rss_parse.inc)
+
+    NOTES ON CACHEING:  
+    If caching is on (MAGPIE_CACHE_ON) fetch_rss will first check the cache.
+    
+    NOTES ON RETRIEVING REMOTE FILES:
+    If conditional gets are on (MAGPIE_CONDITIONAL_GET_ON) fetch_rss will
+    return a cached object, and touch the cache object upon recieving a
+    304.
+    
+    NOTES ON FAILED REQUESTS:
+    If there is an HTTP error while fetching an RSS object, the cached
+    version will be return, if it exists (and if MAGPIE_CACHE_FRESH_ONLY is off)
 \*=======================================================================*/
 
-define('MAGPIE_VERSION', '0.51');
+define('MAGPIE_VERSION', '0.72');
 
 $MAGPIE_ERROR = "";
 
-function fetch_rss ($url)
-{ 
+function fetch_rss ($url) {
     // initialize constants
     init();
-
-    if (!isset($url)) {
+    
+    if ( !isset($url) ) {
         error("fetch_rss called without a url");
         return false;
-    } 
+    }
+    
     // if cache is disabled
-    if (!MAGPIE_CACHE_ON) {
+    if ( !MAGPIE_CACHE_ON ) {
         // fetch file, and parse it
-        $resp = _fetch_remote_file($url);
-        if (is_success($resp->status)) {
-            return _response_to_rss($resp);
-        } else {
+        $resp = _fetch_remote_file( $url );
+        if ( is_success( $resp->status ) ) {
+            return _response_to_rss( $resp );
+        }
+        else {
             error("Failed to fetch $url and cache is off");
             return false;
-        } 
+        }
     } 
     // else cache is ON
     else {
@@ -109,312 +113,346 @@
         // 2. if there is a hit, make sure its fresh
         // 3. if cached obj fails freshness check, fetch remote
         // 4. if remote fails, return stale object, or error
-        $cache = new RSSCache(MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE);
-
+        
+        $cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE );
+        
         if (MAGPIE_DEBUG and $cache->ERROR) {
             debug($cache->ERROR, E_USER_WARNING);
-        } 
-
-        $cache_status = 0; // response of check_cache
+        }
+        
+        
+        $cache_status    = 0;       // response of check_cache
         $request_headers = array(); // HTTP headers to send with fetch
-        $rss = 0; // parsed RSS object
-        $errormsg = 0; // errors, if any
+        $rss             = 0;       // parsed RSS object
+        $errormsg        = 0;       // errors, if any
+        
+        // store parsed XML by desired output encoding
+        // as character munging happens at parse time
+        $cache_key       = $url . MAGPIE_OUTPUT_ENCODING;
+        
         if (!$cache->ERROR) {
             // return cache HIT, MISS, or STALE
-            $cache_status = $cache->check_cache($url);
-        } 
+            $cache_status = $cache->check_cache( $cache_key);
+        }
+                
         // if object cached, and cache is fresh, return cached obj
-        if ($cache_status == 'HIT') {
-            $rss = $cache->get($url);
-            if (isset($rss) and $rss) {
+        if ( $cache_status == 'HIT' ) {
+            $rss = $cache->get( $cache_key );
+            if ( isset($rss) and $rss ) {
+                // should be cache age
                 $rss->from_cache = 1;
-                if (MAGPIE_DEBUG > 1) {
+                if ( MAGPIE_DEBUG > 1) {
                     debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
-                } 
+                }
                 return $rss;
-            } 
-        } 
+            }
+        }
+        
         // else attempt a conditional get
+        
         // setup headers
-        if ($cache_status == 'STALE') {
-            $rss = $cache->get($url);
-            if ($rss->etag and $rss->last_modified) {
+        if ( $cache_status == 'STALE' ) {
+            $rss = $cache->get( $cache_key );
+            if ( $rss and $rss->etag and $rss->last_modified ) {
                 $request_headers['If-None-Match'] = $rss->etag;
                 $request_headers['If-Last-Modified'] = $rss->last_modified;
-            } 
-        } 
-
-        $resp = _fetch_remote_file($url, $request_headers);
-
+            }
+        }
+        
+        $resp = _fetch_remote_file( $url, $request_headers );
+        
         if (isset($resp) and $resp) {
-            if ($resp->status == '304') {
+          if ($resp->status == '304' ) {
                 // we have the most current copy
-                if (MAGPIE_DEBUG > 1) {
+                if ( MAGPIE_DEBUG > 1) {
                     debug("Got 304 for $url");
-                } 
+                }
                 // reset cache on 304 (at minutillo insistent prodding)
-                $cache->set($url, $rss);
+                $cache->set($cache_key, $rss);
                 return $rss;
-            } elseif (is_success($resp->status)) {
-                $rss = _response_to_rss($resp);
-                if ($rss) {
+            }
+            elseif ( is_success( $resp->status ) ) {
+                $rss = _response_to_rss( $resp );
+                if ( $rss ) {
                     if (MAGPIE_DEBUG > 1) {
                         debug("Fetch successful");
-                    } 
+                    }
                     // add object to cache
-                    $cache->set($url, $rss);
+                    $cache->set( $cache_key, $rss );
                     return $rss;
-                } 
-            } else {
-                $errormsg = "Failed to fetch $url. ";
-                if ($resp->error) {
-                    // compensate for Snoopy's annoying habbit to tacking
-                    // on '\n'
-                    $http_error = substr($resp->error, 0, -2);
+                }
+            }
+            else {
+                $errormsg = "Failed to fetch $url ";
+                if ( $resp->status == '-100' ) {
+                    $errormsg .= "(Request timed out after " . MAGPIE_FETCH_TIME_OUT . " seconds)";
+                }
+                elseif ( $resp->error ) {
+                    # compensate for Snoopy's annoying habbit to tacking
+                    # on '\n'
+                    $http_error = substr($resp->error, 0, -2); 
                     $errormsg .= "(HTTP Error: $http_error)";
-                } else {
-                    $errormsg .= "(HTTP Response: " . $resp->response_code . ')';
-                } 
-            } 
-        } else {
+                }
+                else {
+                    $errormsg .=  "(HTTP Response: " . $resp->response_code .')';
+                }
+            }
+        }
+        else {
             $errormsg = "Unable to retrieve RSS file for unknown reasons.";
-        } 
+        }
+        
         // else fetch failed
+        
         // attempt to return cached object
         if ($rss) {
-            if (MAGPIE_DEBUG) {
+            if ( MAGPIE_DEBUG ) {
                 debug("Returning STALE object for $url");
-            } 
+            }
             return $rss;
-        } 
+        }
+        
         // else we totally failed
-        error($errormsg);
-
+        error( $errormsg ); 
+        
         return false;
+        
     } // end if ( !MAGPIE_CACHE_ON ) {
 } // end fetch_rss()
+
 /*=======================================================================*\
-	Function:	error
-	Purpose:	set MAGPIE_ERROR, and trigger error
+    Function:   error
+    Purpose:    set MAGPIE_ERROR, and trigger error
 \*=======================================================================*/
 
-function error ($errormsg, $lvl = E_USER_WARNING)
-{
-    global $MAGPIE_ERROR; 
-    // append PHP's error message if track_errors enabled
-    if (isset($php_errormsg)) {
-        $errormsg .= " ($php_errormsg)";
-    } 
-    if ($errormsg) {
-        $errormsg = "MagpieRSS: $errormsg";
-        $MAGPIE_ERROR = $errormsg;
-        trigger_error($errormsg, $lvl);
-    } 
-} 
+function error ($errormsg, $lvl=E_USER_WARNING) {
+        global $MAGPIE_ERROR;
+        
+        // append PHP's error message if track_errors enabled
+        if ( isset($php_errormsg) ) { 
+            $errormsg .= " ($php_errormsg)";
+        }
+        if ( $errormsg ) {
+            $errormsg = "MagpieRSS: $errormsg";
+            $MAGPIE_ERROR = $errormsg;
+            trigger_error( $errormsg, $lvl);                
+        }
+}
 
-function debug ($debugmsg, $lvl = E_USER_NOTICE)
-{
+function debug ($debugmsg, $lvl=E_USER_NOTICE) {
     trigger_error("MagpieRSS [debug] $debugmsg", $lvl);
-} 
-
+}
+            
 /*=======================================================================*\
-	Function:	magpie_error
-	Purpose:	accessor for the magpie error variable
+    Function:   magpie_error
+    Purpose:    accessor for the magpie error variable
 \*=======================================================================*/
-function magpie_error ($errormsg = "")
-{
+function magpie_error ($errormsg="") {
     global $MAGPIE_ERROR;
-
-    if (isset($errormsg) and $errormsg) {
+    
+    if ( isset($errormsg) and $errormsg ) { 
         $MAGPIE_ERROR = $errormsg;
-    } 
-
-    return $MAGPIE_ERROR;
-} 
+    }
+    
+    return $MAGPIE_ERROR;   
+}
 
 /*=======================================================================*\
-	Function:	_fetch_remote_file
-	Purpose:	retrieve an arbitrary remote file
-	Input:		url of the remote file
-				headers to send along with the request (optional)
-	Output:		an HTTP response object (see Snoopy.class.inc)	
+    Function:   _fetch_remote_file
+    Purpose:    retrieve an arbitrary remote file
+    Input:      url of the remote file
+                headers to send along with the request (optional)
+    Output:     an HTTP response object (see Snoopy.class.inc)  
 \*=======================================================================*/
-function _fetch_remote_file ($url, $headers = "")
-{ 
+function _fetch_remote_file ($url, $headers = "" ) {
     // Snoopy is an HTTP client in PHP
     $client = new Snoopy();
     $client->agent = MAGPIE_USER_AGENT;
     $client->read_timeout = MAGPIE_FETCH_TIME_OUT;
     $client->use_gzip = MAGPIE_USE_GZIP;
-    if (is_array($headers)) {
+    if (is_array($headers) ) {
         $client->rawheaders = $headers;
-    } 
-
+    }
+    
     @$client->fetch($url);
     return $client;
-} 
+
+}
 
 /*=======================================================================*\
-	Function:	_response_to_rss
-	Purpose:	parse an HTTP response object into an RSS object
-	Input:		an HTTP response object (see Snoopy)
-	Output:		parsed RSS object (see rss_parse)
-\*=======================================================================*/
-function _response_to_rss ($resp)
-{
-    $rss = new MagpieRSS($resp->results); 
-    // if RSS parsed successfully
-    if ($rss and !$rss->ERROR) {
+    Function:   _response_to_rss
+    Purpose:    parse an HTTP response object into an RSS object
+    Input:      an HTTP response object (see Snoopy)
+    Output:     parsed RSS object (see rss_parse)
+\*=======================================================================*/
+function _response_to_rss ($resp) {
+    $rss = new MagpieRSS( $resp->results, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING );
+    
+    // if RSS parsed successfully       
+    if ( $rss and !$rss->ERROR) {
+        
         // find Etag, and Last-Modified
         foreach($resp->headers as $h) {
             // 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1"
             if (strpos($h, ": ")) {
                 list($field, $val) = explode(": ", $h, 2);
-            } else {
+            }
+            else {
                 $field = $h;
                 $val = "";
-            } 
-
-            if ($field == 'ETag') {
+            }
+            
+            if ( $field == 'ETag' ) {
                 $rss->etag = $val;
-            } 
-
-            if ($field == 'Last-Modified') {
+            }
+            
+            if ( $field == 'Last-Modified' ) {
                 $rss->last_modified = $val;
-            } 
-        } 
-
-        return $rss;
+            }
+        }
+        
+        return $rss;    
     } // else construct error message
     else {
         $errormsg = "Failed to parse RSS file.";
-
+        
         if ($rss) {
             $errormsg .= " (" . $rss->ERROR . ")";
-        } 
+        }
         error($errormsg);
-
+        
         return false;
     } // end if ($rss and !$rss->error)
-} 
+}
 
 /*=======================================================================*\
-	Function:	init
-	Purpose:	setup constants with default values
-				check for user overrides
+    Function:   init
+    Purpose:    setup constants with default values
+                check for user overrides
 \*=======================================================================*/
-function init ()
-{
-    if (defined('MAGPIE_INITALIZED')) {
+function init () {
+    if ( defined('MAGPIE_INITALIZED') ) {
         return;
-    } else {
-        define('MAGPIE_INITALIZED', 1);
-    } 
-
-    if (!defined('MAGPIE_CACHE_ON')) {
-        define('MAGPIE_CACHE_ON', 0);
-    } 
+    }
+    else {
+        define('MAGPIE_INITALIZED', true);
+    }
+    
+    if ( !defined('MAGPIE_CACHE_ON') ) {
+        define('MAGPIE_CACHE_ON', true);
+    }
 
-    if (!defined('MAGPIE_CACHE_DIR')) {
+    if ( !defined('MAGPIE_CACHE_DIR') ) {
         define('MAGPIE_CACHE_DIR', './cache');
-    } 
-
-    if (!defined('MAGPIE_CACHE_AGE')) {
-        define('MAGPIE_CACHE_AGE', 60 * 60); // one hour
-    } 
-
-    if (!defined('MAGPIE_CACHE_FRESH_ONLY')) {
-        define('MAGPIE_CACHE_FRESH_ONLY', 0);
-    } 
+    }
 
-    if (!defined('MAGPIE_DEBUG')) {
+    if ( !defined('MAGPIE_CACHE_AGE') ) {
+        define('MAGPIE_CACHE_AGE', 60*60); // one hour
+    }
+
+    if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) {
+        define('MAGPIE_CACHE_FRESH_ONLY', false);
+    }
+
+    if ( !defined('MAGPIE_OUTPUT_ENCODING') ) {
+        define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1');
+    }
+    
+    if ( !defined('MAGPIE_INPUT_ENCODING') ) {
+        define('MAGPIE_INPUT_ENCODING', null);
+    }
+    
+    if ( !defined('MAGPIE_DETECT_ENCODING') ) {
+        define('MAGPIE_DETECT_ENCODING', true);
+    }
+    
+    if ( !defined('MAGPIE_DEBUG') ) {
         define('MAGPIE_DEBUG', 0);
-    } 
-
-    if (!defined('MAGPIE_USER_AGENT')) {
-        $ua = 'MagpieRSS/' . MAGPIE_VERSION . ' (+http://magpierss.sf.net';
-
-        if (MAGPIE_CACHE_ON) {
+    }
+    
+    if ( !defined('MAGPIE_USER_AGENT') ) {
+        $ua = 'MagpieRSS/'. MAGPIE_VERSION . ' (+http://magpierss.sf.net';
+        
+        if ( MAGPIE_CACHE_ON ) {
             $ua = $ua . ')';
-        } else {
+        }
+        else {
             $ua = $ua . '; No cache)';
-        } 
-
+        }
+        
         define('MAGPIE_USER_AGENT', $ua);
-    } 
-
-    if (!defined('MAGPIE_FETCH_TIME_OUT')) {
+    }
+    
+    if ( !defined('MAGPIE_FETCH_TIME_OUT') ) {
         define('MAGPIE_FETCH_TIME_OUT', 5); // 5 second timeout
-    } 
+    }
+    
     // use gzip encoding to fetch rss files if supported?
-    if (!defined('MAGPIE_USE_GZIP')) {
-        define('MAGPIE_USE_GZIP', true);
-    } 
-} 
+    if ( !defined('MAGPIE_USE_GZIP') ) {
+        define('MAGPIE_USE_GZIP', true);    
+    }
+}
+
 // NOTE: the following code should really be in Snoopy, or at least
 // somewhere other then rss_fetch!
+
 /*=======================================================================*\
-	HTTP STATUS CODE PREDICATES
-	These functions attempt to classify an HTTP status code
-	based on RFC 2616 and RFC 2518.
-	
-	All of them take an HTTP status code as input, and return true or false
+    HTTP STATUS CODE PREDICATES
+    These functions attempt to classify an HTTP status code
+    based on RFC 2616 and RFC 2518.
+    
+    All of them take an HTTP status code as input, and return true or false
 
-	All this code is adapted from LWP's HTTP::Status.
+    All this code is adapted from LWP's HTTP::Status.
 \*=======================================================================*/
 
+
 /*=======================================================================*\
-	Function:	is_info
-	Purpose:	return true if Informational status code
+    Function:   is_info
+    Purpose:    return true if Informational status code
 \*=======================================================================*/
-function is_info ($sc)
-{
-    return $sc >= 100 && $sc < 200;
-} 
+function is_info ($sc) { 
+    return $sc >= 100 && $sc < 200; 
+}
 
 /*=======================================================================*\
-	Function:	is_success
-	Purpose:	return true if Successful status code
+    Function:   is_success
+    Purpose:    return true if Successful status code
 \*=======================================================================*/
-function is_success ($sc)
-{
-    return $sc >= 200 && $sc < 300;
-} 
+function is_success ($sc) { 
+    return $sc >= 200 && $sc < 300; 
+}
 
 /*=======================================================================*\
-	Function:	is_redirect
-	Purpose:	return true if Redirection status code
+    Function:   is_redirect
+    Purpose:    return true if Redirection status code
 \*=======================================================================*/
-function is_redirect ($sc)
-{
-    return $sc >= 300 && $sc < 400;
-} 
+function is_redirect ($sc) { 
+    return $sc >= 300 && $sc < 400; 
+}
 
 /*=======================================================================*\
-	Function:	is_error
-	Purpose:	return true if Error status code
+    Function:   is_error
+    Purpose:    return true if Error status code
 \*=======================================================================*/
-function is_error ($sc)
-{
-    return $sc >= 400 && $sc < 600;
-} 
+function is_error ($sc) { 
+    return $sc >= 400 && $sc < 600; 
+}
 
 /*=======================================================================*\
-	Function:	is_client_error
-	Purpose:	return true if Error status code, and its a client error
+    Function:   is_client_error
+    Purpose:    return true if Error status code, and its a client error
 \*=======================================================================*/
-function is_client_error ($sc)
-{
-    return $sc >= 400 && $sc < 500;
-} 
+function is_client_error ($sc) { 
+    return $sc >= 400 && $sc < 500; 
+}
 
 /*=======================================================================*\
-	Function:	is_client_error
-	Purpose:	return true if Error status code, and its a server error
+    Function:   is_client_error
+    Purpose:    return true if Error status code, and its a server error
 \*=======================================================================*/
-function is_server_error ($sc)
-{
-    return $sc >= 500 && $sc < 600;
-} 
+function is_server_error ($sc) { 
+    return $sc >= 500 && $sc < 600; 
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_parse.inc 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_parse.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_parse.inc	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_parse.inc	2006-08-08 02:39:06.000000000 -0500
@@ -1,312 +1,605 @@
 <?php
-/*
- * Project:     MagpieRSS: a simple RSS integration tool
- * File:        rss_parse.inc includes code for parsing
- *				RSS, and returning an RSS object
- * Author:      Kellan Elliott-McCrea <kellan@protest.net>
- * Version:		0.51
- * License:		GPL
- *
- * The lastest version of MagpieRSS can be obtained from:
- * http://magpierss.sourceforge.net
- *
- * For questions, help, comments, discussion, etc., please join the
- * Magpie mailing list:
- * magpierss-general@lists.sourceforge.net
- *
- */
-
-/* 
- * NOTES ON RSS PARSING PHILOSOPHY (moderately important):
- * MagpieRSS parse all versions of RSS with a few limitation (mod_content, and
- * mod_taxonomy support is shaky) into a simple object, with 2 fields, 
- * the hash 'channel', and the array 'items'.
- *
- * MagpieRSS is a forgiving and inclusive parser.  It currently makes no
- * attempt to enforce the validity on an RSS feed.  It will include any
- * properly formatted tags it finds, allowing to you to mix RSS 0.93, with RSS
- * 1.0, with tags or your own imagining.  This sort of witches brew is a bad
- * bad idea!  But Magpie is less pendantic then I am.
- *
- * RSS validators are readily available on the web at:
- * http://feeds.archive.org/validator/
- * http://www.ldodds.com/rss_validator/1.0/validator.html
- *
- */
-
-/*
- * EXAMPLE PARSE RESULTS:
- *
- * Magpie tries to parse RSS into ease to use PHP datastructures.
- *
- * For example, Magpie on encountering RSS 1.0 item entry:
- *
- * <item rdf:about="http://protest.net/NorthEast/calendrome.cgi?span=event&#38;ID=210257">
- * <title>Weekly Peace Vigil</title>
- * <link>http://protest.net/NorthEast/calendrome.cgi?span=event&#38;ID=210257</link>
- * <description>Wear a white ribbon</description>
- * <dc:subject>Peace</dc:subject>
- * <ev:startdate>2002-06-01T11:00:00</ev:startdate>
- * <ev:location>Northampton, MA</ev:location>
- * <ev:enddate>2002-06-01T12:00:00</ev:enddate>
- * <ev:type>Protest</ev:type>
- * </item>
- * 
- * Would transform it into the following associative array, and push it
- * onto the array $rss-items
- *
- * array(
- *	title => 'Weekly Peace Vigil',
- *	link =>
- *	'http://protest.net/NorthEast/calendrome.cgi?span=event&#38;ID=210257',
- *	description => 'Wear a white ribbon',
- *	dc => array (
- *			subject => 'Peace'
- *		),
- *	ev => array (
- *		startdate => '2002-06-01T11:00:00',
- *		enddate => '2002-06-01T12:00:00',
- *		type => 'Protest',
- *		location => 'Northampton, MA'
- *	)
- * )
- *
- */
 
+/**
+* Project:     MagpieRSS: a simple RSS integration tool
+* File:        rss_parse.inc  - parse an RSS or Atom feed
+*               return as a simple object.
+*
+* Handles RSS 0.9x, RSS 2.0, RSS 1.0, and Atom 0.3
+*
+* The lastest version of MagpieRSS can be obtained from:
+* http://magpierss.sourceforge.net
+*
+* For questions, help, comments, discussion, etc., please join the
+* Magpie mailing list:
+* magpierss-general@lists.sourceforge.net
+*
+* @author           Kellan Elliott-McCrea <kellan@protest.net>
+* @version          0.7a
+* @license          GPL
+*
+*/
+
+define('RSS', 'RSS');
+define('ATOM', 'Atom');
+
+require_once (MAGPIE_DIR . 'rss_utils.inc');
+
+/**
+* Hybrid parser, and object, takes RSS as a string and returns a simple object.
+*
+* see: rss_fetch.inc for a simpler interface with integrated caching support
+*
+*/
 class MagpieRSS {
-    /*
-	 * Hybrid parser, and object.  (probably a bad idea! :)
-	 *
-	 * Useage Example:
-	 *
-	 * $some_rss = "<?xml version="1.0"......
-	 *
-	 * $rss = new MagpieRSS( $some_rss );
-	 *
-	 * // print rss chanel title
-	 * echo $rss->channel['title'];
-	 *
-	 * // print the title of each item
-	 * foreach ($rss->items as $item ) {
-	 *	  echo $item[title];
-	 * }
-	 *
-	 * see rss_fetch.inc for a simpler interface
-	 */
-
     var $parser;
-
-    var $current_item = array(); // item currently being parsed
-    var $items = array(); // collection of parsed items
-    var $channel = array(); // hash of channel fields
-    var $textinput = array();
-    var $image = array();
-
-    var $parent_field = array('RDF');
-    var $current_field = '';
-    var $current_namespace = false;
-
+    
+    var $current_item   = array();  // item currently being parsed
+    var $items          = array();  // collection of parsed items
+    var $channel        = array();  // hash of channel fields
+    var $textinput      = array();
+    var $image          = array();
+    var $feed_type;
+    var $feed_version;
+    var $encoding       = '';       // output encoding of parsed rss
+    
+    var $_source_encoding = '';     // only set if we have to parse xml prolog
+    
     var $ERROR = "";
-
-    /*======================================================================*\
-    Function: MagpieRSS
-    Purpose:  Constructor, sets up XML parser,parses source,
-			  and populates object.. 
-	Input:	  String containing the RSS to be parsed
-\*======================================================================*/
-    function MagpieRSS ($source)
-    { 
-        // if PHP xml isn't compiled in, die
-        
+    var $WARNING = "";
+    
+    // define some constants
+    
+    var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright');
+    var $_KNOWN_ENCODINGS    = array('UTF-8', 'US-ASCII', 'ISO-8859-1');
+
+    // parser variables, useless if you're not a parser, treat as private
+    var $stack              = array(); // parser stack
+    var $inchannel          = false;
+    var $initem             = false;
+    var $incontent          = false; // if in Atom <content mode="xml"> field 
+    var $intextinput        = false;
+    var $inimage            = false;
+    var $current_namespace  = false;
+    
+
+    /**
+     *  Set up XML parser, parse source, and return populated RSS object..
+     *   
+     *  @param string $source           string containing the RSS to be parsed
+     *
+     *  NOTE:  Probably a good idea to leave the encoding options alone unless
+     *         you know what you're doing as PHP's character set support is
+     *         a little weird.
+     *
+     *  NOTE:  A lot of this is unnecessary but harmless with PHP5 
+     *
+     *
+     *  @param string $output_encoding  output the parsed RSS in this character 
+     *                                  set defaults to ISO-8859-1 as this is PHP's
+     *                                  default.
+     *
+     *                                  NOTE: might be changed to UTF-8 in future
+     *                                  versions.
+     *                               
+     *  @param string $input_encoding   the character set of the incoming RSS source. 
+     *                                  Leave blank and Magpie will try to figure it
+     *                                  out.
+     *                                  
+     *                                   
+     *  @param bool   $detect_encoding  if false Magpie won't attempt to detect
+     *                                  source encoding. (caveat emptor)
+     *
+     */
+    function MagpieRSS ($source, $output_encoding='ISO-8859-1', 
+                        $input_encoding=null, $detect_encoding=true) 
+    {   
+        # if PHP xml isn't compiled in, die
+        #
         if (!function_exists('xml_parser_create')) {
-            $this->error("Failed to load PHP's XML Extension. " . "http://www.php.net/manual/en/ref.xml.php",
-                E_USER_ERROR);
-        } 
-
-        $parser = @xml_parser_create();
-
+            $this->error( "Failed to load PHP's XML Extension. " . 
+                          "http://www.php.net/manual/en/ref.xml.php",
+                           E_USER_ERROR );
+        }
+        
+        list($parser, $source) = $this->create_parser($source, 
+                $output_encoding, $input_encoding, $detect_encoding);
+        
+        
         if (!is_resource($parser)) {
-            $this->error("Failed to create an instance of PHP's XML parser. " . "http://www.php.net/manual/en/ref.xml.php",
-                E_USER_ERROR);
-        } 
-
-        $this->parser = $parser; 
-        // pass in parser, and a reference to this object
-        // setup handlers
-        
-        xml_set_object($this->parser, $this);
-        xml_set_element_handler($this->parser, 'start_element', 'end_element');
-        xml_set_character_data_handler($this->parser, 'cdata');
-
-        $status = xml_parse($this->parser, $source);
-
-        if (! $status) {
-            $errorcode = xml_get_error_code($this->parser);
-            if ($errorcode != XML_ERROR_NONE) {
-                $xml_error = xml_error_string($errorcode);
+            $this->error( "Failed to create an instance of PHP's XML parser. " .
+                          "http://www.php.net/manual/en/ref.xml.php",
+                          E_USER_ERROR );
+        }
+
+        
+        $this->parser = $parser;
+        
+        # pass in parser, and a reference to this object
+        # setup handlers
+        #
+        xml_set_object( $this->parser, $this );
+        xml_set_element_handler($this->parser, 
+                'feed_start_element', 'feed_end_element' );
+                        
+        xml_set_character_data_handler( $this->parser, 'feed_cdata' ); 
+    
+        $status = xml_parse( $this->parser, $source );
+        
+        if (! $status ) {
+            $errorcode = xml_get_error_code( $this->parser );
+            if ( $errorcode != XML_ERROR_NONE ) {
+                $xml_error = xml_error_string( $errorcode );
                 $error_line = xml_get_current_line_number($this->parser);
                 $error_col = xml_get_current_column_number($this->parser);
                 $errormsg = "$xml_error at line $error_line, column $error_col";
 
-                $this->error($errormsg);
-            } 
-        } 
-
-        xml_parser_free($this->parser);
-    } 
-
-    function start_element ($p, $element, &$attrs)
-    {
-        $element = strtolower($element); 
-        // check for a namespace, and split if found
+                $this->error( $errormsg );
+            }
+        }
         
-        $namespace = false;
-        if (strpos($element, ':')) {
-            list($namespace, $element) = split(':', $element, 2);
-        } 
-        $this->current_field = $element;
-        if ($namespace and $namespace != 'rdf') {
-            $this->current_namespace = $namespace;
-        } 
-
-        if ($element == 'channel') {
-            array_unshift($this->parent_field, 'channel');
-        } elseif ($element == 'items') {
-            array_unshift($this->parent_field, 'items');
-        } elseif ($element == 'item') {
-            array_unshift($this->parent_field, 'item');
-        } elseif ($element == 'textinput') {
-            array_unshift($this->parent_field, 'textinput');
-        } elseif ($element == 'image') {
-            array_unshift($this->parent_field, 'image');
-        } 
-    } 
-
-    function end_element ($p, $element)
-    {
-        $element = strtolower($element);
+        xml_parser_free( $this->parser );
 
-        if ($element == 'item') {
+        $this->normalize();
+    }
+    
+    function feed_start_element($p, $element, &$attrs) {
+        $el = $element = strtolower($element);
+        $attrs = array_change_key_case($attrs, CASE_LOWER);
+        
+        // check for a namespace, and split if found
+        $ns = false;
+        if ( strpos( $element, ':' ) ) {
+            list($ns, $el) = split( ':', $element, 2); 
+        }
+        if ( $ns and $ns != 'rdf' ) {
+            $this->current_namespace = $ns;
+        }
+            
+        # if feed type isn't set, then this is first element of feed
+        # identify feed from root element
+        #
+        if (!isset($this->feed_type) ) {
+            if ( $el == 'rdf' ) {
+                $this->feed_type = RSS;
+                $this->feed_version = '1.0';
+            }
+            elseif ( $el == 'rss' ) {
+                $this->feed_type = RSS;
+                $this->feed_version = $attrs['version'];
+            }
+            elseif ( $el == 'feed' ) {
+                $this->feed_type = ATOM;
+                $this->feed_version = $attrs['version'];
+                $this->inchannel = true;
+            }
+            return;
+        }
+    
+        if ( $el == 'channel' ) 
+        {
+            $this->inchannel = true;
+        }
+        elseif ($el == 'item' or $el == 'entry' ) 
+        {
+            $this->initem = true;
+            if ( isset($attrs['rdf:about']) ) {
+                $this->current_item['about'] = $attrs['rdf:about']; 
+            }
+        }
+        
+        // if we're in the default namespace of an RSS feed,
+        //  record textinput or image fields
+        elseif ( 
+            $this->feed_type == RSS and 
+            $this->current_namespace == '' and 
+            $el == 'textinput' ) 
+        {
+            $this->intextinput = true;
+        }
+        
+        elseif (
+            $this->feed_type == RSS and 
+            $this->current_namespace == '' and 
+            $el == 'image' ) 
+        {
+            $this->inimage = true;
+        }
+        
+        # handle atom content constructs
+        elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
+        {
+            // avoid clashing w/ RSS mod_content
+            if ($el == 'content' ) {
+                $el = 'atom_content';
+            }
+            
+            $this->incontent = $el;
+            
+            
+        }
+        
+        // if inside an Atom content construct (e.g. content or summary) field treat tags as text
+        elseif ($this->feed_type == ATOM and $this->incontent ) 
+        {
+            // if tags are inlined, then flatten
+            $attrs_str = join(' ', 
+                    array_map('map_attrs', 
+                    array_keys($attrs), 
+                    array_values($attrs) ) );
+            
+            $this->append_content( "<$element $attrs_str>"  );
+                    
+            array_unshift( $this->stack, $el );
+        }
+        
+        // Atom support many links per containging element.
+        // Magpie treats link elements of type rel='alternate'
+        // as being equivalent to RSS's simple link element.
+        //
+        elseif ($this->feed_type == ATOM and $el == 'link' ) 
+        {
+            if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) 
+            {
+                $link_el = 'link';
+            }
+            else {
+                $link_el = 'link_' . $attrs['rel'];
+            }
+            
+            $this->append($link_el, $attrs['href']);
+        }
+        // set stack[0] to current element
+        else {
+            array_unshift($this->stack, $el);
+        }
+    }
+    
+
+    
+    function feed_cdata ($p, $text) {
+        if ($this->feed_type == ATOM and $this->incontent) 
+        {
+            $this->append_content( $text );
+        }
+        else {
+            $current_el = join('_', array_reverse($this->stack));
+            $this->append($current_el, $text);
+        }
+    }
+    
+    function feed_end_element ($p, $el) {
+        $el = strtolower($el);
+        
+        if ( $el == 'item' or $el == 'entry' ) 
+        {
             $this->items[] = $this->current_item;
             $this->current_item = array();
-            array_shift($this->parent_field);
-        } elseif ($element == 'channel' or $element == 'items' or
-            $element == 'textinput' or $element == 'image') {
-            array_shift($this->parent_field);
-        } 
-
-        $this->current_field = '';
-        $this->current_namespace = false;
-    } 
-
-    function cdata ($p, $text)
-    { 
-        // skip item, channel, items first time we see them
+            $this->initem = false;
+        }
+        elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) 
+        {
+            $this->intextinput = false;
+        }
+        elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) 
+        {
+            $this->inimage = false;
+        }
+        elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
+        {   
+            $this->incontent = false;
+        }
+        elseif ($el == 'channel' or $el == 'feed' ) 
+        {
+            $this->inchannel = false;
+        }
+        elseif ($this->feed_type == ATOM and $this->incontent  ) {
+            // balance tags properly
+            // note:  i don't think this is actually neccessary
+            if ( $this->stack[0] == $el ) 
+            {
+                $this->append_content("</$el>");
+            }
+            else {
+                $this->append_content("<$el />");
+            }
+
+            array_shift( $this->stack );
+        }
+        else {
+            array_shift( $this->stack );
+        }
         
-        if ($this->parent_field[0] == $this->current_field or
-            ! $this->current_field) {
-            return;
-        } elseif ($this->parent_field[0] == 'channel') {
-            if ($this->current_namespace) {
-                $this->append($this->channel[ $this->current_namespace ][ $this->current_field ],
-                    $text);
-            } else {
-                $this->append($this->channel[ $this->current_field ], $text);
-            } 
-        } elseif ($this->parent_field[0] == 'item') {
-            if ($this->current_namespace) {
-                $this->append($this->current_item[ $this->current_namespace ][$this->current_field ],
-                    $text);
-            } else {
-                $this->append($this->current_item[ $this->current_field ],
-                    $text);
-            } 
-        } elseif ($this->parent_field[0] == 'textinput') {
-            if ($this->current_namespace) {
-                $this->append($this->textinput[ $this->current_namespace ][ $this->current_field ],
-                    $text);
-            } else {
-                $this->append($this->textinput[ $this->current_field ],
-                    $text);
-            } 
-        } elseif ($this->parent_field[0] == 'image') {
-            if ($this->current_namespace) {
-                $this->append($this->image[ $this->current_namespace ][ $this->current_field ],
-                    $text);
-            } else {
-                $this->append($this->image[ $this->current_field ],
-                    $text);
-            } 
-        } 
-    } 
-
-    function append (&$str1, $str2 = "")
-    {
-        if (!isset($str1)) {
-            $str1 = "";
-        } 
+        $this->current_namespace = false;
+    }
+    
+    function concat (&$str1, $str2="") {
+        if (!isset($str1) ) {
+            $str1="";
+        }
         $str1 .= $str2;
-    } 
+    }
+    
+    
+    
+    function append_content($text) {
+        if ( $this->initem ) {
+            $this->concat( $this->current_item[ $this->incontent ], $text );
+        }
+        elseif ( $this->inchannel ) {
+            $this->concat( $this->channel[ $this->incontent ], $text );
+        }
+    }
+    
+    // smart append - field and namespace aware
+    function append($el, $text) {
+        if (!$el) {
+            return;
+        }
+        if ( $this->current_namespace ) 
+        {
+            if ( $this->initem ) {
+                $this->concat(
+                    $this->current_item[ $this->current_namespace ][ $el ], $text);
+            }
+            elseif ($this->inchannel) {
+                $this->concat(
+                    $this->channel[ $this->current_namespace][ $el ], $text );
+            }
+            elseif ($this->intextinput) {
+                $this->concat(
+                    $this->textinput[ $this->current_namespace][ $el ], $text );
+            }
+            elseif ($this->inimage) {
+                $this->concat(
+                    $this->image[ $this->current_namespace ][ $el ], $text );
+            }
+        }
+        else {
+            if ( $this->initem ) {
+                $this->concat(
+                    $this->current_item[ $el ], $text);
+            }
+            elseif ($this->intextinput) {
+                $this->concat(
+                    $this->textinput[ $el ], $text );
+            }
+            elseif ($this->inimage) {
+                $this->concat(
+                    $this->image[ $el ], $text );
+            }
+            elseif ($this->inchannel) {
+                $this->concat(
+                    $this->channel[ $el ], $text );
+            }
+            
+        }
+    }
+    
+    function normalize () {
+        // if atom populate rss fields
+        if ( $this->is_atom() ) {
+            $this->channel['description'] = $this->channel['tagline'];
+            for ( $i = 0; $i < count($this->items); $i++) {
+                $item = $this->items[$i];
+                if ( isset($item['summary']) )
+                    $item['description'] = $item['summary'];
+                if ( isset($item['atom_content']))
+                    $item['content']['encoded'] = $item['atom_content'];
+                
+                $atom_date = (isset($item['issued']) ) ? $item['issued'] : $item['modified'];
+                if ( $atom_date ) {
+                    $epoch = @parse_w3cdtf($atom_date);
+                    if ($epoch and $epoch > 0) {
+                        $item['date_timestamp'] = $epoch;
+                    }
+                }
+                
+                $this->items[$i] = $item;
+            }       
+        }
+        elseif ( $this->is_rss() ) {
+            $this->channel['tagline'] = $this->channel['description'];
+            for ( $i = 0; $i < count($this->items); $i++) {
+                $item = $this->items[$i];
+                if ( isset($item['description']))
+                    $item['summary'] = $item['description'];
+                if ( isset($item['content']['encoded'] ) )
+                    $item['atom_content'] = $item['content']['encoded'];
+                
+                if ( $this->is_rss() == '1.0' and isset($item['dc']['date']) ) {
+                    $epoch = @parse_w3cdtf($item['dc']['date']);
+                    if ($epoch and $epoch > 0) {
+                        $item['date_timestamp'] = $epoch;
+                    }
+                }
+                elseif ( isset($item['pubdate']) ) {
+                    $epoch = @strtotime($item['pubdate']);
+                    if ($epoch > 0) {
+                        $item['date_timestamp'] = $epoch;
+                    }
+                }
+                
+                $this->items[$i] = $item;
+            }
+        }
+    }
+    
+    
+    function is_rss () {
+        if ( $this->feed_type == RSS ) {
+            return $this->feed_version; 
+        }
+        else {
+            return false;
+        }
+    }
+    
+    function is_atom() {
+        if ( $this->feed_type == ATOM ) {
+            return $this->feed_version;
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+    * return XML parser, and possibly re-encoded source
+    *
+    */
+    function create_parser($source, $out_enc, $in_enc, $detect) {
+        if ( substr(phpversion(),0,1) == 5) {
+            $parser = $this->php5_create_parser($in_enc, $detect);
+        }
+        else {
+            list($parser, $source) = $this->php4_create_parser($source, $in_enc, $detect);
+        }
+        if ($out_enc) {
+            $this->encoding = $out_enc;
+            xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $out_enc);
+        }
+        
+        return array($parser, $source);
+    }
+    
+    /**
+    * Instantiate an XML parser under PHP5
+    *
+    * PHP5 will do a fine job of detecting input encoding
+    * if passed an empty string as the encoding. 
+    *
+    * All hail libxml2!
+    *
+    */
+    function php5_create_parser($in_enc, $detect) {
+        // by default php5 does a fine job of detecting input encodings
+        if(!$detect && $in_enc) {
+            return xml_parser_create($in_enc);
+        }
+        else {
+            return xml_parser_create('');
+        }
+    }
+    
+    /**
+    * Instaniate an XML parser under PHP4
+    *
+    * Unfortunately PHP4's support for character encodings
+    * and especially XML and character encodings sucks.  As
+    * long as the documents you parse only contain characters
+    * from the ISO-8859-1 character set (a superset of ASCII,
+    * and a subset of UTF-8) you're fine.  However once you
+    * step out of that comfy little world things get mad, bad,
+    * and dangerous to know.
+    *
+    * The following code is based on SJM's work with FoF
+    * @see http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
+    *
+    */
+    function php4_create_parser($source, $in_enc, $detect) {
+        if ( !$detect ) {
+            return array(xml_parser_create($in_enc), $source);
+        }
+        
+        if (!$in_enc) {
+            if (preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/m', $source, $m)) {
+                $in_enc = strtoupper($m[1]);
+                $this->source_encoding = $in_enc;
+            }
+            else {
+                $in_enc = 'UTF-8';
+            }
+        }
+        
+        if ($this->known_encoding($in_enc)) {
+            return array(xml_parser_create($in_enc), $source);
+        }
+        
+        // the dectected encoding is not one of the simple encodings PHP knows
+        
+        // attempt to use the iconv extension to
+        // cast the XML to a known encoding
+        // @see http://php.net/iconv
+       
+        if (function_exists('iconv'))  {
+            $encoded_source = iconv($in_enc,'UTF-8', $source);
+            if ($encoded_source) {
+                return array(xml_parser_create('UTF-8'), $encoded_source);
+            }
+        }
+        
+        // iconv didn't work, try mb_convert_encoding
+        // @see http://php.net/mbstring
+        if(function_exists('mb_convert_encoding')) {
+            $encoded_source = mb_convert_encoding($source, 'UTF-8', $in_enc );
+            if ($encoded_source) {
+                return array(xml_parser_create('UTF-8'), $encoded_source);
+            }
+        }
+        
+        // else 
+        $this->error("Feed is in an unsupported character encoding. ($in_enc) " .
+                     "You may see strange artifacts, and mangled characters.",
+                     E_USER_NOTICE);
+            
+        return array(xml_parser_create(), $source);
+    }
+    
+    function known_encoding($enc) {
+        $enc = strtoupper($enc);
+        if ( in_array($enc, $this->_KNOWN_ENCODINGS) ) {
+            return $enc;
+        }
+        else {
+            return false;
+        }
+    }
 
-    function error ($errormsg, $lvl = E_USER_WARNING)
-    { 
+    function error ($errormsg, $lvl=E_USER_WARNING) {
         // append PHP's error message if track_errors enabled
-        if ($php_errormsg) {
+        if ( isset($php_errormsg) ) { 
             $errormsg .= " ($php_errormsg)";
-        } 
-        $this->ERROR = $errormsg;
-        if (MAGPIE_DEBUG) {
-            trigger_error($errormsg, $lvl);
+        }
+        if ( MAGPIE_DEBUG ) {
+            trigger_error( $errormsg, $lvl);        
+        }
+        else {
+            error_log( $errormsg, 0);
+        }
+        
+        $notices = E_USER_NOTICE|E_NOTICE;
+        if ( $lvl&$notices ) {
+            $this->WARNING = $errormsg;
         } else {
-            error_log($errormsg, 0);
-        } 
-    } 
-
-    /*======================================================================*\
-	EVERYTHING BELOW HERE IS FOR DEBUGGING PURPOSES
-\*======================================================================*/
-    function show_list ()
-    {
-        echo "<ol>\n";
-        foreach ($this->items as $item) {
-            echo "<li>", $this->show_item($item);
-        } 
-        echo "</ol>";
-    } 
-
-    function show_channel ()
-    {
-        echo "channel:<br>";
-        echo "<ul>";
-        while (list($key, $value) = each($this->channel)) {
-            echo "<li> $key: $value";
-        } 
-        echo "</ul>";
-    } 
-
-    function show_item ($item)
-    {
-        echo "item: $item[title]";
-        echo "<ul>";
-        while (list($key, $value) = each($item)) {
-            if (is_array($value)) {
-                echo "<br><b>$key</b>";
-                echo "<ul>";
-                while (list($ns_key, $ns_value) = each($value)) {
-                    echo "<li>$ns_key: $ns_value";
-                } 
-                echo "</ul>";
-            } else {
-                echo "<li> $key: $value";
-            } 
-        } 
-        echo "</ul>";
-    } 
-
-    /*======================================================================*\
-	END DEBUGGING FUNCTIONS	
-\*======================================================================*/
+            $this->ERROR = $errormsg;
+        }
+    }
+    
+    
+} // end class RSS
+
+function map_attrs($k, $v) {
+    return "$k=\"$v\"";
+}
+
+// patch to support medieval versions of PHP4.1.x, 
+// courtesy, Ryan Currie, ryan@digibliss.com
+
+if (!function_exists('array_change_key_case')) {
+	define("CASE_UPPER",1);
+	define("CASE_LOWER",0);
+
+
+	function array_change_key_case($array,$case=CASE_LOWER) {
+       if ($case=CASE_LOWER) $cmd=strtolower;
+       elseif ($case=CASE_UPPER) $cmd=strtoupper;
+       foreach($array as $key=>$value) {
+               $output[$cmd($key)]=$value;
+       }
+       return $output;
+	}
 
-} # end class RSS
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_utils.inc 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_utils.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/magpierss/rss_utils.inc	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/magpierss/rss_utils.inc	2006-08-08 02:39:06.000000000 -0500
@@ -3,8 +3,8 @@
  * Project:     MagpieRSS: a simple RSS integration tool
  * File:        rss_utils.inc, utility methods for working with RSS
  * Author:      Kellan Elliott-McCrea <kellan@protest.net>
- * Version:		0.51
- * License:		GPL
+ * Version:     0.51
+ * License:     GPL
  *
  * The lastest version of MagpieRSS can be obtained from:
  * http://magpierss.sourceforge.net
@@ -14,52 +14,54 @@
  * magpierss-general@lists.sourceforge.net
  */
 
+
 /*======================================================================*\
     Function: parse_w3cdtf
     Purpose:  parse a W3CDTF date into unix epoch
 
-	NOTE: http://www.w3.org/TR/NOTE-datetime
+    NOTE: http://www.w3.org/TR/NOTE-datetime
 \*======================================================================*/
 
-function parse_w3cdtf ($date_str)
-{ 
-    // regex to match wc3dtf
+function parse_w3cdtf ( $date_str ) {
+    
+    # regex to match wc3dtf
     $pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/";
-
-    if (preg_match($pat, $date_str, $match)) {
-        list($year, $month, $day, $hours, $minutes, $seconds) =
-        array($match[1], $match[2], $match[3], $match[4], $match[5], $match[6]); 
-        // calc epoch for current date assuming GMT
-        $epoch = gmmktime($hours, $minutes, $seconds, $month, $day, $year);
-
+    
+    if ( preg_match( $pat, $date_str, $match ) ) {
+        list( $year, $month, $day, $hours, $minutes, $seconds) = 
+            array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]);
+        
+        # calc epoch for current date assuming GMT
+        $epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);
+        
         $offset = 0;
-        if ($match[10] == 'Z') {
-            // zulu time, aka GMT
-        } else {
-            list($tz_mod, $tz_hour, $tz_min) =
-            array($match[8], $match[9], $match[10]); 
-            // zero out the variables
-            if (! $tz_hour) {
-                $tz_hour = 0;
-            } 
-            if (! $tz_min) {
-                $tz_min = 0;
-            } 
-
-            $offset_secs = (($tz_hour * 60) + $tz_min) * 60; 
-            // is timezone ahead of GMT?  then subtract offset
+        if ( $match[10] == 'Z' ) {
+            # zulu time, aka GMT
+        }
+        else {
+            list( $tz_mod, $tz_hour, $tz_min ) =
+                array( $match[8], $match[9], $match[10]);
             
-            if ($tz_mod == '+') {
+            # zero out the variables
+            if ( ! $tz_hour ) { $tz_hour = 0; }
+            if ( ! $tz_min ) { $tz_min = 0; }
+        
+            $offset_secs = (($tz_hour*60)+$tz_min)*60;
+            
+            # is timezone ahead of GMT?  then subtract offset
+            #
+            if ( $tz_mod == '+' ) {
                 $offset_secs = $offset_secs * -1;
-            } 
-
-            $offset = $offset_secs;
-        } 
+            }
+            
+            $offset = $offset_secs; 
+        }
         $epoch = $epoch + $offset;
         return $epoch;
-    } else {
+    }
+    else {
         return -1;
-    } 
-} 
+    }
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/MailAdmin.Action.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MailAdmin.Action.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/MailAdmin.Action.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MailAdmin.Action.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,14 +1,21 @@
 <?php
+
 /**
  * File: MailAdmin.Action.class.php
- * This is the Mail Admin Action for the Geeklog SpamX Plug-in!
+ * This is the Mail Admin Action for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author		Tom Willett		tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
+ *
+ * $Id: MailAdmin.Action.class.php,v 1.10.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'MailAdmin.Action.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 /**
  * Include Abstract Action Class
  */
@@ -40,13 +47,32 @@
             $uid = 1;
         }
         $uid .= '@' . $_SERVER['REMOTE_ADDR'];
-        $msg = sprintf($LANG_SX00['emailmsg'], $_CONF['site_name'], $uid, $comment);
+        $msg = sprintf ($LANG_SX00['emailmsg'],
+                        $_CONF['site_name'], $uid, $comment);
+
+        // Add headers of the spam post to help track down the source.
+        // Function 'getallheaders' is not available when PHP is running as
+        // CGI. Print the HTTP_... headers from $_SERVER array instead then.
+        $msg .= "\n\n" . $LANG_SX00['headers'] . "\n";
+        if (function_exists ('getallheaders')) {
+            $headers = getallheaders ();
+            foreach ($headers as $key => $content) {
+                $msg .= $key . ': ' . $content . "\n";
+            }
+        } else {
+            foreach ($_SERVER as $key => $content) {
+                if (substr ($key, 0, 4) == 'HTTP') {
+                    $msg .= $key . ': ' . $content . "\n";
+                }
+            }
+        }
 
-        COM_mail($_SPX_CONF['notification_email'], 'Spam Comment at ' . $_CONF['site_name'], $msg);
+        $subject = sprintf ($LANG_SX00['emailsubject'], $_CONF['site_name']);
+        COM_mail ($_SPX_CONF['notification_email'], $subject, $msg);
         $result = 8;
-        SPAMX_log('Mail Sent to Admin');
+        SPAMX_log ('Mail Sent to Admin');
         return 0;
-    } 
-} 
+    }
+}
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/MassDelete.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MassDelete.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/MassDelete.Admin.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MassDelete.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,133 +1,140 @@
 <?php
+
 /**
 * file:  MassDelete.Admin.class.php
 * Mass delete comment spam
 *
-* Copyright (C) 2004 by the following authors:
+* Copyright (C) 2004-2006 by the following authors:
 *
-* @ Author		Tom Willett		tomw@pigstye.net
+* @ Author        Tom Willett        tomw AT pigstye DOT net
 *
 * Licensed under GNU General Public License
 *
+* $Id: MassDelete.Admin.class.php,v 1.10.2.1 2006/06/30 12:20:49 dhaun Exp $
 */
 
+if (strpos ($_SERVER['PHP_SELF'], 'MassDelete.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 require_once($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
+require_once($_CONF['path_system'] . 'lib-comment.php');
 
 
 class MassDelete extends BaseAdmin {
-	/**
-	* Constructor
-	* 
-	*/
-	function display(){
-		global $_CONF, $_POST, $_TABLES, $LANG_SX00;
-		
-		$display = $LANG_SX00['masshead'];
-
-		$act = $_POST['action'];
-		$lmt = $_POST['limit'];
-
-		if (($act == $LANG_SX00['deletespam']) && ($lmt>0)) {
-			$numc = 0;
-		    $result=DB_query("SELECT * FROM {$_TABLES['spamx']} WHERE name='Examine'");
-		    $nrows = DB_numRows($result);
-		    for ($i=1;$i<=$nrows;$i++) {
-		    	$A=DB_fetchArray($result);
-		        $Spamx_Examine[]=$A['value'];
-			}   
-			$result = DB_query("SELECT * from {$_TABLES['comments']} ORDER by Date DESC LIMIT $lmt");
-			$nrows = DB_numRows($result);
-			for($i=1;$i<=$nrows;$i++) {
-				$A=DB_fetchArray($result);
-		        foreach($Spamx_Examine as $Examine) {
-					$filename=$Examine . '.Examine.class.php';
-        	        if (file_exists($_CONF['path'] . 'plugins/spamx/' . $filename)) {
-            	    	require_once($_CONF['path'] . 'plugins/spamx/' . $filename);
-						$EX = new $Examine;
-						$res = $EX->execute($A['comment']);
-						if ($res == 1) {
-							break;
-						}
-					}
-				}
-				if ($res == 1) {
-					$this->delcomment($A['cid'], $A['sid'], $A['type']);
-					$numc = $numc + 1;
-				}
-			}
-			$display .= $numc . $LANG_SX00['comdel'];
-		} else {
-			$display .= '<form method="post" action="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=MassDelete">';
-			$display .= $LANG_SX00['numtocheck'] . "&nbsp;&nbsp&nbsp" . ' <select name="limit">';
-			$display .= '<option value = "10">10</option><option value="50" selected>50</option>';
-			$display .= '<option value = "100" selected>100</option><option value="200">200</option>';
-			$display .= '<option value = "300">300</option><option value="400">400</option>';
-			$display .= '</select>';
-			$display .= $LANG_SX00['note1'];
-			$display .= $LANG_SX00['note2'];
-			$display .= $LANG_SX00['note3'];
-			$display .= $LANG_SX00['note4'];
-			$display .= $LANG_SX00['note5'];
-			$display .= $LANG_SX00['note6'];
-			$display .= '<input type = "Submit" name="action" value="' . $LANG_SX00['deletespam'] . '">';
-			$display .= '</form>';
-		}
-		
-		return $display;
-		
-	}
-	
-	function link()
-	{
-		global $LANG_SX00;
-		return "Mass Delete Spam Comments";
-	}
-	/**
-	* Deletes a given comment
-	* (lifted from comment.php)
-	* @param    int         $cid    Comment ID
-	* @param    string      $sid    ID of object comment belongs to
-	* @param    string      $type   Comment type (e.g. article, poll, etc)
-	* @return   string      Returns string needed to redirect page to right place
-	*
-	*/
-	function delcomment ($cid, $sid, $type) 
-	{
-    	global $_CONF, $_TABLES, $_USER;
-
-	    $retval = '';
-
-	    if (is_numeric ($cid) && ($cid > 0) && !empty ($sid) && !empty ($type)) {
-
-        	// only comments of type 'article' and 'poll' are handled by Geeklog
-        	if (($type == 'article') || ($type == 'poll')) {
-
-            	if ($type == 'article') {
-                	$table = $_TABLES['stories'];
-	                $idname = 'sid';
-        	    } else {
-            	    $table = $_TABLES['pollquestions'];
-            	    $idname = 'qid';
-    	        }
-        	    $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$table} WHERE {$idname} = '{$sid}'");
-        	    $A = DB_fetchArray ($result);
-
-           	    $pid = DB_getItem ($_TABLES['comments'], 'pid', "cid = '$cid'");
-
-           	    DB_change ($_TABLES['comments'], 'pid', $pid, 'pid', $cid);
-                DB_delete ($_TABLES['comments'], 'cid', $cid);
-
-   	            if ($type == 'article') {
-               	    $comments = DB_count ($_TABLES['comments'], 'sid', $sid);
-               	    DB_change ($_TABLES['stories'], 'comments', $comments, 'sid', $sid);
-   	            }
-    	    } else {
-        	    // See if plugin will handle this
-        	    $retval = PLG_handlePluginComment ($type, $cid, 'delete');
-	        }
-			SPAMX_log($LANG_SX00['spamdeleted']);
-	    }
-	}
+    /**
+    * Constructor
+    *
+    */
+    function display()
+    {
+        global $_CONF, $_TABLES, $LANG_SX00;
+
+        $display = $LANG_SX00['masshead'];
+
+        $act = $_POST['action'];
+        $lmt = $_POST['limit'];
+
+        if (($act == $LANG_SX00['deletespam']) && ($lmt>0)) {
+            $numc = 0;
+            $spamx_path = $_CONF['path'] . 'plugins/spamx/';
+
+            if ($dir = @opendir($spamx_path)) {
+                while(($file = readdir($dir)) !== false) {
+                    if (is_file($spamx_path . $file)) {
+                        if (substr($file, -18) == '.Examine.class.php') {
+                            $tmp = str_replace('.Examine.class.php', '', $file);
+                            $Spamx_Examine[] = $tmp;
+
+                            require_once ($spamx_path . $file);
+                        }
+                    }
+                }
+                closedir($dir);
+            }
+
+            $result = DB_query("SELECT comment,cid,sid,type FROM {$_TABLES['comments']} ORDER BY date DESC LIMIT $lmt");
+            $nrows = DB_numRows($result);
+            for ($i = 0; $i < $nrows; $i++) {
+                $A = DB_fetchArray($result);
+                foreach($Spamx_Examine as $Examine) {
+                    $EX = new $Examine;
+                    $res = $EX->execute($A['comment']);
+                    if ($res == 1) {
+                        break;
+                    }
+                }
+                if ($res == 1) {
+                    $this->delcomment($A['cid'], $A['sid'], $A['type']);
+                    $numc = $numc + 1;
+                }
+            }
+            $display .= $numc . $LANG_SX00['comdel'];
+        } else {
+            $display .= '<form method="post" action="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=MassDelete">';
+            $display .= $LANG_SX00['numtocheck'] . "&nbsp;&nbsp&nbsp" . ' <select name="limit">';
+            $display .= '<option value = "10">10</option><option value="50">50</option>';
+            $display .= '<option value = "100" selected="selected">100</option><option value="200">200</option>';
+            $display .= '<option value = "300">300</option><option value="400">400</option>';
+            $display .= '</select>';
+            $display .= $LANG_SX00['note1'];
+            $display .= $LANG_SX00['note2'];
+            $display .= $LANG_SX00['note3'];
+            $display .= $LANG_SX00['note4'];
+            $display .= $LANG_SX00['note5'];
+            $display .= $LANG_SX00['note6'];
+            $display .= '<input type = "Submit" name="action" value="' . $LANG_SX00['deletespam'] . '">';
+            $display .= '</form>';
+        }
+
+        return $display;
+    }
+
+    function link()
+    {
+        global $LANG_SX00;
+
+        return "Mass Delete Spam Comments";
+    }
+
+    /**
+    * Deletes a given comment
+    * (lifted from comment.php)
+    * @param    int         $cid    Comment ID
+    * @param    string      $sid    ID of object comment belongs to
+    * @param    string      $type   Comment type (e.g. article, poll, etc)
+    * @return   string      Returns string needed to redirect page to right place
+    *
+    */
+    function delcomment ($cid, $sid, $type)
+    {
+        global $_CONF, $_TABLES;
+
+        $type = COM_applyFilter ($type);
+        $sid = COM_applyFilter ($sid);
+        switch ( $type ) {
+            case 'article':
+                $has_editPermissions = SEC_hasRights ('story.edit');
+                $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['stories']} WHERE sid = '$sid'");
+                $A = DB_fetchArray ($result);
+
+                if ($has_editPermissions && SEC_hasAccess ($A['owner_id'],
+                        $A['group_id'], $A['perm_owner'], $A['perm_group'],
+                        $A['perm_members'], $A['perm_anon']) == 3) {
+                    CMT_deleteComment(COM_applyFilter($cid, true), $sid, 'article');
+                    $comments = DB_count ($_TABLES['comments'], 'sid', $sid);
+                    DB_change ($_TABLES['stories'], 'comments', $comments,
+                               'sid', $sid);
+                } else {
+                    COM_errorLog ("User {$_USER['username']} (IP: {$_SERVER['REMOTE_ADDR']}) tried to illegally delete comment $cid from $type $sid");
+                }
+                break;
+            default: // assume plugin
+                PLG_commentDelete($type, COM_applyFilter ($cid, true), $sid);
+                break;
+        }
+        SPAMX_log($LANG_SX00['spamdeleted']);
+    }
 }
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/MassDelTrackback.Admin.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MassDelTrackback.Admin.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/MassDelTrackback.Admin.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MassDelTrackback.Admin.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,134 @@
+<?php
+
+/**
+* file:  MassDelTrackback.Admin.class.php
+*
+* Mass delete trackback spam
+*
+* Copyright (C) 2004-2006 by the following authors:
+*
+* @author   Tom Willett     tomw AT pigstye DOT net
+* @author   Dirk Haun       dirk AT haun-online DOT de
+*
+* Licensed under GNU General Public License
+*
+* $Id: MassDelTrackback.Admin.class.php,v 1.3.2.1 2006/06/30 12:20:49 dhaun Exp $
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'MassDelTrackback.Admin.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+require_once ($_CONF['path'] . 'plugins/spamx/BaseAdmin.class.php');
+
+
+class MassDelTrackback extends BaseAdmin {
+
+    function display()
+    {
+        global $_CONF, $_TABLES, $LANG_SX00;
+
+        $display = $LANG_SX00['masstb'];
+
+        $act = $_POST['action'];
+        $lmt = COM_applyFilter ($_POST['limit'], true);
+
+        if (($act == $LANG_SX00['deletespam']) && ($lmt > 0)) {
+            $numc = 0;
+            $spamx_path = $_CONF['path'] . 'plugins/spamx/';
+
+            if ($dir = @opendir ($spamx_path)) {
+                while (($file = readdir ($dir)) !== false) {
+                    if (is_file ($spamx_path . $file)) {
+                        if (substr ($file, -18) == '.Examine.class.php') {
+                            $tmp = str_replace ('.Examine.class.php', '', $file);
+                            $Spamx_Examine[] = $tmp;
+
+                            require_once ($spamx_path . $file);
+                        }
+                    }
+                }
+                closedir ($dir);
+            }
+
+            require_once ($_CONF['path_system'] . 'lib-trackback.php');
+
+            $result = DB_query ("SELECT cid,sid,type,url,title,blog,excerpt FROM {$_TABLES['trackback']} ORDER BY date DESC LIMIT $lmt");
+            $nrows = DB_numRows ($result);
+            for ($i = 0; $i < $nrows; $i++) {
+                $A = DB_fetchArray ($result);
+                $comment = TRB_formatComment ($A['url'], $A['title'],
+                                              $A['blog'], $A['excerpt']);
+
+                foreach ($Spamx_Examine as $Examine) {
+                    $EX = new $Examine;
+                    $res = $EX->execute ($comment);
+                    if ($res == 1) {
+                        break;
+                    }
+                }
+                if ($res == 1) {
+                    $this->deltrackback ($A['cid'], $A['sid'], $A['type']);
+                    $numc = $numc + 1;
+                }
+            }
+            $display .= $numc . $LANG_SX00['comdel'];
+        } else {
+            $display .= '<form method="post" action="' . $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=MassDelTrackback">';
+            $display .= $LANG_SX00['numtocheck'] . '&nbsp;&nbsp&nbsp' . ' <select name="limit">';
+            $display .= '<option value="10">10</option>'
+                     .  '<option value="50">50</option>'
+                     .  '<option value="100" selected="selected">100</option>'
+                     .  '<option value="200">200</option>'
+                     .  '<option value="300">300</option>'
+                     .  '<option value="400">400</option>';
+            $display .= '</select>';
+            $display .= $LANG_SX00['note1'];
+            $display .= $LANG_SX00['note2'];
+            $display .= $LANG_SX00['note3'];
+            $display .= $LANG_SX00['note4'];
+            $display .= $LANG_SX00['note5'];
+            $display .= $LANG_SX00['note6'];
+            $display .= '<input type="submit" name="action" value="' . $LANG_SX00['deletespam'] . '">';
+            $display .= '</form>';
+        }
+
+        return $display;
+    }
+
+    function link()
+    {
+        global $LANG_SX00;
+
+        return 'Mass Delete Trackback Spam';
+    }
+
+    /**
+    * Deletes a given trackback comment
+    *
+    * @param    int         $cid    Comment ID
+    * @param    string      $sid    ID of object comment belongs to
+    * @param    string      $type   Comment type (e.g. article, poll, etc)
+    * @return   void
+    *
+    */
+    function deltrackback ($cid, $sid, $type)
+    {
+        global $_TABLES, $LANG_SX00;
+
+        if (TRB_allowDelete ($sid, $type)) {
+            TRB_deleteTrackbackComment ($cid);
+
+            if ($type == 'article') {
+                $tbcount = DB_count ($_TABLES['trackback'],
+                                     array ('type', 'sid'),
+                                     array ('article', $sid));
+                DB_query ("UPDATE {$_TABLES['stories']} SET trackbacks = $tbcount WHERE sid = '$sid'");
+            }
+
+            SPAMX_log ($LANG_SX00['spamdeleted']);
+        }
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/MTBlackList.Examine.class.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MTBlackList.Examine.class.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/MTBlackList.Examine.class.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/MTBlackList.Examine.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,23 +1,40 @@
 <?php
+
 /**
  * File: MTBlackList.Examine.class.php
- * This module examines comments for entries on the MT-Blacklist for the Geeklog SpamX Plug-in!
+ * This module examines comments for entries on the MT-Blacklist
+ * for the Geeklog Spam-X Plug-in!
  * 
- * Copyright (C) 2004 by the following authors:
- * Author		Tom Willett		tomw@pigstye.net
+ * Copyright (C) 2004-2005 by the following authors:
+ * Author		Tom Willett		tomw AT pigstye DOT net
  * 
  * Licensed under GNU General Public License
  * 
  * The MT-Blacklist is maintained by Jay Allen
  * http://www.jayallen.org/comment_spam/
+ *
+ * $Id: MTBlackList.Examine.class.php,v 1.10.2.1 2006/06/30 12:20:49 dhaun Exp $
  */
 
+if (strpos ($_SERVER['PHP_SELF'], 'MTBlackList.Examine.class.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
 /**
  * Include Abstract Examine Class
  */
 require_once($_CONF['path'] . 'plugins/spamx/' . 'BaseCommand.class.php');
 
 /**
+* html_entity_decode is only available as of PHP 4.3.0
+*/
+if (!function_exists ('html_entity_decode')) {
+    require_once ('PHP/Compat.php');
+
+    PHP_Compat::loadFunction ('html_entity_decode');
+}
+
+/**
  * Examines Comment according to MT-BLacklist
  * 
  * @author Tom Willett tomw AT pigstye DOT net 
@@ -30,23 +47,35 @@
     /**
      * Here we do the work
      */
-    function execute($comment)
+    function execute ($comment)
     {
         global $_CONF, $_USER, $_TABLES, $LANG_SX00;
 
+        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
+            $uid = $_USER['uid'];
+        } else {
+            $uid = 1;
+        }
+
         /**
          * Include Blacklist Data
          */
-        $result = DB_Query("SELECT * FROM {$_TABLES['spamx']} WHERE name='MTBlacklist'", 1);
-        $nrows = DB_numRows($result);
+        $result = DB_Query ("SELECT value FROM {$_TABLES['spamx']} WHERE name = 'MTBlacklist'", 1);
+        $nrows = DB_numRows ($result);
 
-        $ans = 0; //Found Flag
-        for ($i = 1;$i <= $nrows;$i++) {
-            $A = DB_fetchArray($result);
-            $val = $A['value'];
-            if (@preg_match("#$val#", $comment)) {
+        // named entities
+        $comment = html_entity_decode ($comment);
+        // decimal notation
+        $comment = preg_replace ('/&#(\d+);/me', "chr(\\1)", $comment);
+        // hex notation
+        $comment = preg_replace ('/&#x([a-f0-9]+);/mei', "chr(0x\\1)", $comment);
+        $ans = 0; // Found Flag
+        for ($i = 1; $i <= $nrows; $i++) {
+            list ($val) = DB_fetchArray ($result);
+            if (@preg_match ("#$val#i", $comment)) {
                 $ans = 1; // quit on first positive match
-                SPAMX_log($LANG_SX00['fsc'] . $val . $LANG_SX00['fsc1'] . $_USER['uid'] . $LANG_SX00['fsc2'] . $_SERVER['REMOTE_ADDR']);
+                SPAMX_log ($LANG_SX00['fsc'] . $val . $LANG_SX00['fsc1'] .
+                           $uid . $LANG_SX00['fsc2'] . $_SERVER['REMOTE_ADDR']);
                 break;
             } 
         } 
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/rss.inc.php 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/rss.inc.php
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/rss.inc.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/rss.inc.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,9 +1,11 @@
 <?php
 
 /**
- * Create the spamx rss feed
+ * Create the Spam-X rss feed
  * 
  * @param items $ array of blacklisted sites
+ *
+ * $Id: rss.inc.php,v 1.3 2005/04/10 10:02:46 dhaun Exp $
  */
 
 function Spamx_rss($items)
@@ -11,7 +13,7 @@
     global $_CONF; 
     // Basic Data
     $about = $_CONF['site_url'] . '/spamx/index.php';
-    $title = 'SpamX Blacklist';
+    $title = 'Spam-X Blacklist';
     $description = 'Personal Spamx Blacklist from site ' . $_CONF['site_name']; 
     // Dublic Core Data
     $dc = array('dc:publisher' => $_CONF['site_name'],
@@ -204,4 +206,4 @@
     } 
 } 
 
-?>
\ No newline at end of file
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/spamx.html 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/spamx.html
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/spamx.html	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/spamx.html	1969-12-31 18:00:00.000000000 -0600
@@ -1,120 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <title>Geeklog Documentation - SpamX Plugin</title>
-  <link rel="stylesheet" type="text/css" href="docstyle.css" title="Dev Stylesheet">
-</head>
-
-<body>
-<table cellpadding="2" cellspacing="2" border="0" width="100%">
-<tr>
-  <td valign="top"><img src="images/newlogo.gif" alt="Geeklog Documentation" width="235" height="90" border="0"></td>
-</tr>
-<tr>
-  <td valign="top" class="menu"><a href="index.html">Geeklog Documentation</a> - SpamX Plugin</td>
-</tr>
-</table>
-
-<h1>SpamX Plugin</h1>
-
-<h2>Introduction</h2>
-
-<p>The Geeklog SpamX plugin was created to fight the problem of comment spam
-for Geeklog systems. If you are unfamiliar with comment spam you might see the
-<a href="http://kalsey.com/2003/11/comment_spam_manifesto/">Comment Spam
-Manifesto</a>.</p>
-
-<h2>MT-Blacklist</h2>
-
-<p>The main mechanism SpamX uses to fight comment spam is to use the blacklist 
-created by Jay Allen and Movable Type users - MT-Blacklist.  You can find out
-info about this project at <a href="http://www.jayallen.org/comment_spam/">http://www.jayallen.org/comment_spam/</a>. Jay has taken
-it upon himself not only to write and support the plugin for Movable Type but
-also to maintain the blacklist.  This requires human effort to review all the
-submissions and determine which are really spam and which are just noise.  If
-you have a few extra bucks drop by Jay's website above and drop a few dollars
-in his PayPal account to show your appreciation.</p>
-
-<p>The MT-Blacklist theory is that comment spammers do it to increase their
-Google rankings and therefore the link is all important.  The MT-Blacklist
-therefore only filters on urls.</p>
-
-<h2>Other options</h2>
-
-<p>The MT-Blacklist is only one part of the Geeklog SpamX plugin however.  The
-SpamX plugin has its own personal blacklist that you can add to. You can
-use it to filter anything from comments.  One option is to import the Geeklog
-<a href="config.html#desc_censorlist">censor list</a> and ban all comments
-which contain one of those words.  This or an expanded list might be usefull
-for a website that caters to children.  Then no comments with offensive
-language could be posted.</p>
-
-<h2>Module types</h2>
-
-<p>The SpamX plugin was built to be expandable to easily adapt to changes the
-comment spammers might make.  There are three types of modules: <b>admin</b>,
-<b>examine</b> and <b>action</b>.  A new module is contained in a file and can
-simply be dropped in and it will be added to the plugin.  The modules with
-which the plugin ships are:</p>
-
-<ul>
-  <li>Admin
-    <ul>
-      <li>View SpamX log</li>
-      <li>Update MT-Blacklist</li>
-      <li>Edit Personal Blacklist</li>
-      <li>View/Import Other Personal Blacklists</li>
-    </ul></li>
-  <li>Examine
-    <ul>
-      <li>MT-Blacklist</li>
-      <li>Personal Blacklist</li>
-    </ul></li>
-  <li>Action
-    <ul>
-      <li>Delete Comment if on Blacklist</li>
-      <li>Mail Admin if Comment Rejected</li>
-    </ul></li>
-</ul>
-
-<p>Other modules can be just dropped into place and they will become
-available to the plugin.  To remove a module just
-delete it from the spamx directory or rename it.  Planned modules include:</p>
-
-Admin
-    <ul>
-      <li>Easy mass deletion of spam comments</li>
-      <li>Parsing comments and automatic adding spam links</li>
-      <li>Comparing MT-Blacklist and personal blacklist to eliminate
-          duplications</li>
-    </ul>
-
-<p>Action modules are each assigned a number and the actions taken when a
-spam comment is found can be designated by a configuration variable.  Note:
-the spamx interface has been generalized and can be called by other modules
-and plugins.  See the developer docs for details.</p>
-
-<h2>Sharing blacklists</h2>
-
-<p>One feature of the SpamX plugin is the ability to share your blacklist and to
-view and import the Blacklists of other SpamX plugin users.  Your participation
-in this will help give early warning to other SpamX plugin users.  This
-facility will also make it possible to create special blacklists for different
-classes of users such as k-12 schools. The sharing of blacklists uses rss feeds 
-to distibute the blacklists.  If anyone wants to create a special blacklist I 
-will make the server and interface scripts to facilitate this.</p>
-
-<h2>Plugin Homepage</h2>
-
-<p>Further information as well as a support forum for the SpamX plugin can be
-found on the <a href="http://www.pigstye.net/gplugs/staticpages/index.php/spamx">SpamX Plugin's Homepage</a>.</p>
-
-<table border="0" width="100%" class="footer">
-<tr valign="top">
-  <td colspan="2"><a href="http://www.geeklog.net">The Geeklog Documentation Project</a><br>
-    All trademarks and copyrights on this page are owned by their respective owners. GeekLog is copyleft.</td>
-</tr>
-</table>
-
-</body>
-</html>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/spamx/templates/admin.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/templates/admin.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/spamx/templates/admin.thtml	2004-12-31 10:03:31.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/spamx/templates/admin.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,2 +1,2 @@
-<a href="{site_admin_url}/plugins/{plugin}/index.php"><img src="{site_admin_url}/plugins/{plugin}/images/{plugin}.gif" border="0" alt="[{plugin_name}]"></a>
+<a href="{site_admin_url}/plugins/{plugin}/index.php"><img src="{site_admin_url}/plugins/{plugin}/images/{plugin}.png" border="0" alt="[{plugin_name}]"></a>
 &nbsp;&nbsp; <b><font size="4"> {header} </font></b>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/config.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/config.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/config.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/config.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,6 +1,6 @@
 <?php
 
-$_SP_CONF['version'] = '1.4.1';
+$_SP_CONF['version'] = '1.4.2';
 
 // If you don't plan on using PHP code in static pages, you should set this
 // to 0, thus disabling the execution of PHP.
@@ -38,4 +38,13 @@
 $_SP_CONF['filter_html'] = 0;
 $_SP_CONF['censor'] = 1;
 
+// Define default permissions for new pages created from the Admin panel.
+// Permissions are perm_owner, perm_group, perm_members, perm_anon (in that
+// order). Possible values:
+// 3 = read + write permissions (perm_owner and perm_group only)
+// 2 = read-only
+// 0 = neither read nor write permissions
+// (a value of 1, ie. write-only, does not make sense and is not allowed)
+$_SP_CONF['default_permissions'] = array (3, 2, 2, 2);
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/functions.inc 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/functions.inc
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/functions.inc	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/functions.inc	2006-08-08 02:39:06.000000000 -0500
@@ -2,7 +2,7 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Static Pages Plugin 1.4.1                                                 |
+// | Static Pages Plugin 1.4.2                                                 |
 // +---------------------------------------------------------------------------+
 // | functions.inc                                                             |
 // |                                                                           |
@@ -10,12 +10,12 @@
 // | API method and 2) implements all the common code needed by the Static     |
 // | Pages' PHP files.                                                         |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
-// |          Tom Willett      - twillett@users.sourceforge.net                |
-// |          Blaine Lang      - langmail@sympatico.ca                         |
-// |          Dirk Haun        - dirk@haun-online.de                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Tom Willett      - twillett AT users DOT sourceforge DOT net     |
+// |          Blaine Lang      - langmail AT sympatico DOT ca                  |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -34,7 +34,11 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: functions.inc,v 1.47 2004/12/22 17:13:45 dhaun Exp $
+// $Id: functions.inc,v 1.63.2.1 2006/06/30 12:20:49 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'functions.inc') !== false) {
+    die ('This file can not be used on its own.');
+}
 
 $langfile = $_CONF['path'] . 'plugins/staticpages/language/'
           . $_CONF['language'] . '.php';
@@ -98,73 +102,99 @@
 * does comments.
 *
 */
-function plugin_commentsupport_staticpages() 
+function plugin_commentsupport_staticpages()
 {
     // Static Pages will not use comments
     return false;
 }
 
 /**
+* Helper function: Count static pages visible to the current user
+*
+* @return   int     number of pages
+*
+*/
+function SP_countVisiblePages ()
+{
+    global $_TABLES;
+
+    $perms = SP_getPerms ();
+    if (!empty ($perms)) {
+        $perms = ' WHERE ' . $perms;
+    }
+    $result = DB_query ("SELECT COUNT(*) AS cnt FROM {$_TABLES['staticpage']}" . $perms);
+    $A = DB_fetchArray ($result);
+
+    return $A['cnt'];
+}
+
+/**
 * Shows the statistics for the Static Pages plugin on stats.php.
 * If $showsitestats is 1 then we are to only print the overall stats in the
 * 'site statistics box' otherwise we show the detailed stats
 *
 * @param    int     showsitestate   Flag to let us know which stats to get
 */
-function plugin_showstats_staticpages($showsitestats) 
+function plugin_showstats_staticpages($showsitestats)
 {
     global $_CONF, $_TABLES, $LANG_STATIC;
-
     $retval = '';
 
-    $stat_templates = new Template ($_CONF['path_layout'] . 'stats');
-    $stat_templates->set_file (array ('itemstats' => 'itemstatistics.thtml',
-                                      'statrow'   => 'singlestat.thtml'));
-    if ($showsitestats == 1) {
-        $perms = SP_getPerms ();
-        if (!empty ($perms)) {
-            $perms = ' WHERE ' . $perms;
+    $perms = SP_getPerms ();
+    if (!empty ($perms)) {
+        $perms = ' AND ' . $perms;
+    }
+    $result = DB_query ("SELECT sp_id,sp_title,sp_hits FROM {$_TABLES['staticpage']} WHERE sp_hits > 0" . $perms . ' ORDER BY sp_hits DESC LIMIT 10');
+    $nrows  = DB_numRows ($result);
+    if ($nrows > 0) {
+        require_once( $_CONF['path_system'] . 'lib-admin.php' );
+        $header_arr = array(
+            array('text' => $LANG_STATIC['stats_page_title'], 'field' => 'sid'),
+            array('text' => $LANG_STATIC['stats_hits'], 'field' => 'sp_hits'),
+        );
+        $data_arr = array();
+        $text_arr = array('has_menu'     => false,
+                          'title'        => $LANG_STATIC['stats_headline'],
+        );
+        for ($i = 0; $i < $nrows; $i++) {
+            $A = DB_fetchArray ($result);
+            $A['sp_title'] = stripslashes ($A['sp_title']);
+            $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                      . "/staticpages/index.php?page={$A['sp_id']}"). "\">{$A['sp_title']}</a>";
+            $A['sp_hits'] = COM_NumberFormat ($A['sp_hits']);
+            $data_arr[$i] = $A;
         }
-        $result = DB_query ("SELECT count(*) AS cnt FROM {$_TABLES['staticpage']}" . $perms);
-        $A = DB_fetchArray ($result);
-        $total_pages = $A['cnt'];
-        $retval = '<table border="0" width="100%" cellspacing="0" cellpadding="0">';
-        $retval .= '<tr><td>' . $LANG_STATIC['staticpages'] . '</td>';
-        $retval .= '<td align="right">' . $total_pages . '&nbsp;&nbsp;</td></tr></table>';
+        $retval .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
     } else {
-        $perms = SP_getPerms ();
-        if (!empty ($perms)) {
-            $perms = ' AND ' . $perms;
-        }
-        $result = DB_query ("SELECT sp_id,sp_title,sp_hits FROM {$_TABLES['staticpage']} WHERE sp_hits > 0" . $perms . ' ORDER BY sp_hits DESC LIMIT 10');
-        $nrows  = DB_numRows ($result);
         $retval .= COM_startBlock ($LANG_STATIC['stats_headline']);
-        if ($nrows > 0) {
-            $stat_templates->set_var ('item_label', $LANG_STATIC['stats_page_title']);
-            $stat_templates->set_var ('stat_name', $LANG_STATIC['stats_hits']);
-            for ($i = 0; $i < $nrows; $i++) {
-                $A = DB_fetchArray ($result);
-                $stat_templates->set_var ('item_url', COM_buildURL ($_CONF['site_url'] . '/staticpages/index.php?page=' . $A['sp_id']));
-                $stat_templates->set_var ('item_text', stripslashes ($A['sp_title']));
-                $stat_templates->set_var ('item_stat', $A['sp_hits']);
-                $stat_templates->parse ('stat_row','statrow',true); 
-            }
-            $stat_templates->parse ('output','itemstats');
-            $retval .= $stat_templates->finish ($stat_templates->get_var ('output'));
-        } else {
-            $retval .= $LANG_STATIC['stats_no_hits'];
-        }	
+        $retval .= $LANG_STATIC['stats_no_hits'];
         $retval .= COM_endBlock();
     }
+
     return $retval;
 }
 
 /**
+* New stats plugin API function for proper integration with the site stats
+*
+* @return   array(item text, item count);
+*
+*/
+function plugin_statssummary_staticpages ()
+{
+    global $_TABLES, $LANG_STATIC;
+
+    $total_pages = SP_countVisiblePages ();
+
+    return array ($LANG_STATIC['staticpages'], COM_numberFormat ($total_pages));
+}
+
+/**
 * Geeklog is asking us to provide any new items that show up in the type
 * drop-down on search.php.  Let's let users search static pages!
 *
 */
-function plugin_searchtypes_staticpages() 
+function plugin_searchtypes_staticpages()
 {
     global $LANG_STATIC;
 
@@ -177,7 +207,7 @@
 /**
 * this searches for static pages matching the user query and returns an array of
 * for the header and table rows back to search.php where it will be formated and
-* printed 
+* printed
 *
 * @param    string  $query      Keywords user is looking for
 * @param    date    $datestart  Start date to get results for
@@ -186,14 +216,15 @@
 * @param    string  $type       Type of items they are searching, or 'all'
 * @param    int     $author     Get all results by this author
 * @param    string  $keyType    search key type: 'all', 'phrase', 'any'
+* @param    int     $page       page number of current search
+* @param    int     $perpage    number of results per page
 *
-* Oct 05/2002: Blaine Lang, Corrected bug with SQL Search string. 
 */
-function plugin_dopluginsearch_staticpages($query, $datestart, $dateend, $topic, $type, $author, $keyType) 
+function plugin_dopluginsearch_staticpages($query, $datestart, $dateend, $topic, $type, $author, $keyType, $page, $perpage)
 {
     global $_CONF, $_TABLES, $LANG_STATIC;
 
-    if (empty($type)) {
+    if (empty ($type)) {
         $type = 'all';
     }
 
@@ -202,11 +233,13 @@
         $plugin_results = new Plugin();
         $plugin_results->plugin_name = 'staticpages';
         $plugin_results->searchlabel = $LANG_STATIC['results'];
+
         return $plugin_results;
     }
 
     // Build search SQL - exclude static PHP pages from search.
-    $sql = "SELECT *,UNIX_TIMESTAMP(sp_date) AS day FROM " . $_TABLES['staticpage'] . " WHERE (sp_php != 1)";
+    $select = "SELECT u.username,u.fullname,sp.sp_id,sp.sp_title,sp.sp_hits,sp.sp_uid,UNIX_TIMESTAMP(sp.sp_date) AS day";
+    $sql = " FROM {$_TABLES['staticpage']} AS sp,{$_TABLES['users']} AS u WHERE (sp.sp_uid = u.uid) AND (sp_php != 1)" . COM_getPermSQL ('AND');
 
     if (!empty ($query)) {
         if ($keyType == 'phrase') {
@@ -248,22 +281,29 @@
 
     if (!empty ($datestart) && !empty ($dateend)) {
         $delim = substr ($datestart, 4, 1);
-        $DS = explode ($delim, $datestart);
-        $DE = explode ($delim, $dateend);
-        $startdate = mktime (0, 0, 0, $DS[1], $DS[2], $DS[0]);
-        $enddate = mktime (23, 59, 59, $DE[1], $DE[2], $DE[0]);
-        $sql .= " AND (UNIX_TIMESTAMP(sp_date) BETWEEN '$startdate' AND '$enddate')";
+        if (!empty($delim)) {
+            $DS = explode ($delim, $datestart);
+            $DE = explode ($delim, $dateend);
+            $startdate = mktime (0, 0, 0, $DS[1], $DS[2], $DS[0]);
+            $enddate = mktime (23, 59, 59, $DE[1], $DE[2], $DE[0]);
+            $sql .= " AND (UNIX_TIMESTAMP(sp_date) BETWEEN '$startdate' AND '$enddate')";
+        }
     }
 
     if (!empty ($author)) {
         $sql .= "AND (sp_uid = '$author')";
     }
-    $sql    .= " ORDER BY sp_date desc";
+    $sql    .= " ORDER BY sp_date DESC ";
+    $l = ($perpage * $page) - $perpage;
+    $sql .= 'LIMIT ' . $l . ',' . $perpage;
 
     // Perform search
-    $result = DB_query ($sql);
+    $result = DB_query ($select . $sql);
+    $mycount = DB_numRows ($result);
+    $result_count = DB_query ('SELECT COUNT(*)' . $sql);
+    $B = DB_fetchArray ($result_count, true);
 
-    // OK, now return coma delmited string of table header labels
+    // OK, now return table header labels
     $plugin_results = new Plugin();
     $plugin_results->plugin_name = 'staticpages';
     $plugin_results->searchlabel = $LANG_STATIC['results'];
@@ -271,27 +311,35 @@
     $plugin_results->addSearchHeading ($LANG_STATIC['date']);
     $plugin_results->addSearchHeading ($LANG_STATIC['author']);
     $plugin_results->addSearchHeading ($LANG_STATIC['hits']);
-    $mycount = DB_numRows ($result);
+    $plugin_results->num_searchresults = 0;
+    $plugin_results->num_itemssearched = $B[0];
+    $plugin_results->supports_paging = true;
 
-    // NOTE if any of your data items need to be links then add them here! 
+    // NOTE if any of your data items need to be links then add them here!
     // make sure data elements are in an array and in the same order as your
     // headings above!
-    for ($i = 1; $i <= $mycount; $i++) {
+    for ($i = 0; $i < $mycount; $i++) {
         $A = DB_fetchArray ($result);
 
-        if (SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon'])) {
-            $rcnt++;
-            $thetime = COM_getUserDateTimeFormat ($A['day']);
-            $A['sp_title'] = stripslashes ($A['sp_title']);
-            $row = array ('<a href="' . COM_buildURL ($_CONF['site_url'] . '/staticpages/index.php?page=' . $A['sp_id']) . '">' . $A['sp_title'] . '</a>',
-                    $thetime[0],
-                    '<a href="' . $_CONF['site_url'] . '/users.php?mode=profile&amp;uid=' . $A['sp_uid'] . '">' . DB_getItem ($_TABLES['users'], 'username', "uid = '{$A['sp_uid']}'") . '</a>',
-                    $A['sp_hits']);
-            $plugin_results->addSearchResult ($row);
+        $thetime = COM_getUserDateTimeFormat ($A['day']);
+        $A['sp_title'] = stripslashes ($A['sp_title']);
+        $pageurl = COM_buildURL ($_CONF['site_url']
+                        . '/staticpages/index.php?page=' . $A['sp_id']);
+        if (isset ($_CONF['show_fullname']) && ($_CONF['show_fullname'] == 1) &&
+                !empty ($A['fullname'])) {
+            $author = $A['fullname'];
+        } else {
+            $author = $A['username'];
         }
+        $profile = $_CONF['site_url'] . '/users.php?mode=profile&amp;uid='
+                 . $A['sp_uid'];
+        $row = array ('<a href="' . $pageurl . '">' . $A['sp_title'] . '</a>',
+                      $thetime[0],
+                      '<a href="' . $profile . '">' . $author . '</a>',
+                      COM_NumberFormat ($A['sp_hits']));
+        $plugin_results->addSearchResult ($row);
+        $plugin_results->num_searchresults++;
     }
-    $plugin_results->num_searchresults = $rcnt;
-    $plugin_results->num_itemssearched = DB_count ($_TABLES['staticpage']);
 
     return $plugin_results;
 }
@@ -302,14 +350,14 @@
 * moderation.php
 *
 */
-function plugin_cclabel_staticpages() 
+function plugin_cclabel_staticpages()
 {
     global $LANG_STATIC, $_CONF;
 
     if (SEC_hasRights ('staticpages.edit,staticpages.delete', 'OR')) {
         return array ($LANG_STATIC['staticpages'],
                 $_CONF['site_admin_url'] . '/plugins/staticpages/index.php',
-                $_CONF['site_url'] . '/staticpages/images/staticpages.gif');
+                plugin_geticon_staticpages ());
     }
 
     return false;
@@ -319,7 +367,7 @@
 * returns the administrative option for this plugin
 *
 */
-function plugin_getadminoption_staticpages() 
+function plugin_getadminoption_staticpages()
 {
     global $_CONF, $LANG_STATIC, $_TABLES;
 
@@ -328,7 +376,7 @@
         $A = DB_fetchArray ($result);
         $total_pages = $A['cnt'];
         return array ($LANG_STATIC['staticpages'], $_CONF['site_admin_url'] . '/plugins/staticpages/index.php', $total_pages);
-    }	
+    }
 }
 
 /**
@@ -337,12 +385,12 @@
 * Takes User id and permission and returns SQL where clause which will return
 * the appropriate objects.
 * This assumes that the table has the following security structure:
-* owner_id        | mediumint(8)          
-* group_id        | mediumint(8)          
-* perm_owner      | tinyint(1) unsigned   
-* perm_group      | tinyint(1) unsigned   
-* perm_members    | tinyint(1) unsigned  
-* perm_anon       | tinyint(1) unsigned  
+* owner_id        | mediumint(8)
+* group_id        | mediumint(8)
+* perm_owner      | tinyint(1) unsigned
+* perm_group      | tinyint(1) unsigned
+* perm_members    | tinyint(1) unsigned
+* perm_anon       | tinyint(1) unsigned
 * This will work with the standard GL tables
 *
 * @param    string  $table  Table name (used in joins)
@@ -395,7 +443,7 @@
 */
 function plugin_centerblock_staticpages ($where = 1, $page = 1, $topic ='')
 {
-    global $_CONF, $_TABLES, $_SP_CONF, $LANG_STATIC, $HTTP_GET_VARS;
+    global $_CONF, $_TABLES, $_SP_CONF, $LANG_STATIC;
 
     $retval = '';
 
@@ -457,7 +505,7 @@
                         $retval .= COM_siteHeader ('menu');
                         break;
                 }
-                $retval .= COM_showMessage ($HTTP_GET_VARS['msg']);
+                $retval .= COM_showMessage ($_GET['msg']);
             }
 
             if (($spresult['sp_inblock'] == 1) && !empty ($spresult['sp_title'])
@@ -542,7 +590,7 @@
 
 
 /**
-* Return the current version of code. 
+* Return the current version of code.
 * Used in the Plugin Editor to show the registered version and code version
 */
 function plugin_chkVersion_staticpages()
@@ -567,7 +615,7 @@
         $url = COM_buildUrl ($_CONF['site_url'] . '/staticpages/index.php?page='
                              . $sp_id);
         if (empty ($autotag['parm2'])) {
-            $linktext = stripslashes (DB_getItem ($_TABLES['staticpages'],
+            $linktext = stripslashes (DB_getItem ($_TABLES['staticpage'],
                                       'sp_title', "sp_id = '$sp_id'"));
         } else {
             $linktext = $autotag['parm2'];
@@ -580,6 +628,19 @@
 }
 
 /**
+* Returns the URL of the plugin's icon
+*
+* @return   string      URL of the icon
+*
+*/
+function plugin_geticon_staticpages ()
+{
+    global $_CONF;
+
+    return $_CONF['site_url'] . '/staticpages/images/staticpages.png';
+}
+
+/**
 * Removes the datastructures for this plugin from the Geeklog database
 *
 * This may get called by the install routine to undo anything done to this
@@ -587,7 +648,7 @@
 *
 * @steps   Array    Holds all the steps that have been completed by the install
 *
-*/  
+*/
 function plugin_uninstall_staticpages($steps = '')
 {
     global $_TABLES;
@@ -595,7 +656,7 @@
     // Uninstalls the static pages plugin
 
     if (empty($steps) OR $steps['createtable'] == 1) {
-        // Remove the staticpage table 
+        // Remove the staticpage table
         COM_errorLog('Dropping staticpage table',1);
         DB_query("DROP TABLE {$_TABLES['staticpage']}");
         COM_errorLog('...success',1);
@@ -618,21 +679,21 @@
     $php_id = DB_getItem($_TABLES['features'], 'ft_id', "ft_name = 'staticpages.PHP'");
 
     if (empty($steps) OR $steps['addededittogroup'] == 1) {
-        // Remove access to those features 
+        // Remove access to those features
         COM_errorLog('Attempting to remove rights to staticpage.edit from all groups',1);
         DB_query("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $edit_id");
         COM_errorLog('...success',1);
     }
 
     if (empty($steps) OR $steps['addeddeletetogroup'] == 1) {
-        // Remove access to those features 
+        // Remove access to those features
         COM_errorLog('Attempting to remove rights to staticpage.delete from all groups',1);
         DB_query("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $delete_id");
         COM_errorLog('...success',1);
     }
 
     if (empty($steps) OR $steps['addedphptogroup'] == 1) {
-        // Remove access to those features 
+        // Remove access to those features
         COM_errorLog('Attempting to remove rights to staticpage.PHP from all groups',1);
         DB_query("DELETE FROM {$_TABLES['access']} WHERE acc_ft_id = $php_id");
         COM_errorLog('...success',1);
@@ -704,4 +765,49 @@
     return $retval;
 }
 
+function plugin_getListField_staticpages($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ADMIN, $LANG_STATIC, $_TABLES;
+
+    switch($fieldname) {
+        case "edit":
+            $retval = "<a href=\"{$_CONF['site_admin_url']}/plugins/staticpages/index.php?mode=edit&amp;sp_id={$A['sp_id']}\">{$icon_arr['edit']}</a>";
+            break;
+        case "copy":
+            $retval = "<a href=\"{$_CONF['site_admin_url']}/plugins/staticpages/index.php?mode=clone&amp;sp_id={$A['sp_id']}\">{$icon_arr['copy']}</a>";
+            break;
+        case "sp_title":
+            $sp_title = stripslashes ($A['sp_title']);
+            $url = COM_buildUrl ($_CONF['site_url'] .
+                                 '/staticpages/index.php?page=' . $A['sp_id']);
+            $retval = '<a href="' . $url . '" title="'
+                    . $LANG_STATIC['title_display'] . '">' . $sp_title . '</a>';
+            break;
+        case "sp_uid":
+            $nresult = DB_query ("SELECT username,fullname FROM {$_TABLES['users']} WHERE uid = {$A['sp_uid']}");
+            $N = DB_fetchArray ($nresult);
+            $retval = $N['username'];
+            break;
+        case "sp_centerblock":
+            if ($A['sp_centerblock']) {
+                switch ($A['sp_where']) {
+                    case '1': $where = $LANG_STATIC['centerblock_top']; break;
+                    case '2': $where = $LANG_STATIC['centerblock_feat']; break;
+                    case '3': $where = $LANG_STATIC['centerblock_bottom']; break;
+                    default:  $where = $LANG_STATIC['centerblock_entire']; break;
+                }
+                $retval = $where;
+            } else {
+                $retval = $LANG_STATIC['centerblock_no'];
+            }
+            break;
+        case "unixdate":
+            $retval = strftime ($_CONF['daytime'], $A['unixdate']);
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+    return $retval;
+}
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/chinese_simplified_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/chinese_simplified_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/chinese_simplified_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/chinese_simplified_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,117 @@
+<?php
+
+###############################################################################
+# chinese_simplified_utf-8.php
+# This is the Chinese Simplified Unicode (utf-8) language set
+# for the Geeklog Static Page Plug-in!
+#
+# Last updated January 10, 2006
+#
+# Copyright (C) 2005 Samuel M. Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => '新页',
+    'adminhome' => '管理处',
+    'staticpages' => '静态页',
+    'staticpageeditor' => '静态页编辑器',
+    'writtenby' => '作者',
+    'date' => '更新日期',
+    'title' => '标题',
+    'content' => '内容',
+    'hits' => '采样数',
+    'staticpagelist' => '静态页目录',
+    'url' => '网址',
+    'edit' => '编辑',
+    'lastupdated' => '更新日期',
+    'pageformat' => '网页各式',
+    'leftrightblocks' => '左右组件',
+    'blankpage' => '空页',
+    'noblocks' => '无组件',
+    'leftblocks' => '左组件',
+    'addtomenu' => '加入菜单',
+    'label' => '标签',
+    'nopages' => '此系统无静态页',
+    'save' => '存续',
+    'preview' => '预览',
+    'delete' => '删除',
+    'cancel' => '取消',
+    'access_denied' => '拒绝入门',
+    'access_denied_msg' => '你在非法进入静态页管理处. 请注意，你企图非法的进入此页的资料会被记录下来',
+    'all_html_allowed' => '所有 HTML 代号读可用',
+    'results' => '静态页结果',
+    'author' => '作者',
+    'no_title_or_content' => '你最少要填入<b>标题</b> 和 <b>内容</b>.',
+    'no_such_page_logged_in' => '对不起 '.$_USER['username'].'..',
+    'no_such_page_anon' => '请登入..',
+    'no_page_access_msg' => "这也许是你未登入, 或不是此站的用户. 请 <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> 申请成为用户 </a> 来得到登入权",
+    'php_msg' => 'PHP: ',
+    'php_warn' => '注意: 你的静态页上的 PHP 代号将会被评价. 请小心 !!',
+    'exit_msg' => 'Exit 类型: ',
+    'exit_info' => '启动 需要登入 的通知.  不勾此框便即用正常安全检查.',
+    'deny_msg' => '拒绝进入此页.  也许此页也被搬移，删除，或你无足够许可进入此页.',
+    'stats_headline' => '头十个静态页',
+    'stats_page_title' => '网页标题',
+    'stats_hits' => '采样数',
+    'stats_no_hits' => '看来此站没有静态页或无人曾看过任何静态页.',
+    'id' => 'ID',
+    'duplicate_id' => '你选的 ID 已经被用，请选另一个.',
+    'instructions' => '若要更改或删除一个静态页，在它旁边的编辑图上点击。若要看一个静态页，在它的标题上点击。若要建立一个新的静态页，在以上的‘建新’上点距。若要复制一个静态页，再它旁边的复制图上点击。',
+    'centerblock' => '中组件: ',
+    'centerblock_msg' => '若勾此匡，此静态页便会显为‘中组件’，就是变成网页中间的框框。',
+    'topic' => '主题: ',
+    'position' => '位置: ',
+    'all_topics' => '所有',
+    'no_topic' => '只显在主页',
+    'position_top' => '顶部',
+    'position_feat' => '在重要文章下面',
+    'position_bottom' => '底部',
+    'position_entire' => '整页',
+    'head_centerblock' => '中组件',
+    'centerblock_no' => '不',
+    'centerblock_top' => '顶',
+    'centerblock_feat' => '重要文章',
+    'centerblock_bottom' => '底',
+    'centerblock_entire' => '整页',
+    'inblock_msg' => '在一个组件内: ',
+    'inblock_info' => '将静态页包在组件框里.',
+    'title_edit' => '编辑此页',
+    'title_copy' => '复制此页',
+    'title_display' => '显示此页',
+    'select_php_none' => '不要执行PHP',
+    'select_php_return' => '执行 PHP (return)',
+    'select_php_free' => '执行 PHP',
+    'php_not_activated' => '使用 PHP 的功能为开启.',
+    'printable_format' => '打印格式',
+    'edit' => '编辑',
+    'copy' => '复制',
+    'limit_results' => '限制结果',
+    'search' => '搜寻',
+    'submit' => '提交'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/chinese_traditional_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/chinese_traditional_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/chinese_traditional_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/chinese_traditional_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,117 @@
+<?php
+
+###############################################################################
+# chinese_traditional_utf-8.php
+# This is the Chinese Traditional Unicode (utf-8) language set
+# for the Geeklog Static Page Plug-in!
+#
+# Last updated January 10, 2006
+#
+# Copyright (C) 2005 Samuel M. Stone
+# sam@stonemicro.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => '新頁',
+    'adminhome' => '管理處',
+    'staticpages' => '靜態頁',
+    'staticpageeditor' => '靜態頁編輯器',
+    'writtenby' => '作者',
+    'date' => '更新日期',
+    'title' => '標題',
+    'content' => '內容',
+    'hits' => '採樣數',
+    'staticpagelist' => '靜態頁目錄',
+    'url' => '網址',
+    'edit' => '編輯',
+    'lastupdated' => '更新日期',
+    'pageformat' => '網頁各式',
+    'leftrightblocks' => '左右組件',
+    'blankpage' => '空頁',
+    'noblocks' => '無組件',
+    'leftblocks' => '左組件',
+    'addtomenu' => '加入菜單',
+    'label' => '標簽',
+    'nopages' => '此系統無靜態頁',
+    'save' => '存續',
+    'preview' => '預覽',
+    'delete' => '刪除',
+    'cancel' => '取消',
+    'access_denied' => '拒絕入門',
+    'access_denied_msg' => '你在非法進入靜態頁管理處. 請注意，你企圖非法的進入此頁的資料會被記錄下來',
+    'all_html_allowed' => '所有 HTML 代號讀可用',
+    'results' => '靜態頁結果',
+    'author' => '作者',
+    'no_title_or_content' => '你最少要填入<b>標題</b> 和 <b>內容</b>.',
+    'no_such_page_logged_in' => '對不起 '.$_USER['username'].'..',
+    'no_such_page_anon' => '請登入..',
+    'no_page_access_msg' => "這也許是你未登入, 或不是此站的用戶. 請 <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> 申請成為用戶 </a> 來得到登入權",
+    'php_msg' => 'PHP: ',
+    'php_warn' => '注意: 你的靜態頁上的 PHP 代號將會被評價. 請小心 !!',
+    'exit_msg' => 'Exit 類型: ',
+    'exit_info' => '啟動 需要登入 的通知.  不勾此框便即用正常安全檢查.',
+    'deny_msg' => '拒絕進入此頁.  也許此頁也被搬移，刪除，或你無足夠許可進入此頁.',
+    'stats_headline' => '頭十個靜態頁',
+    'stats_page_title' => '網頁標題',
+    'stats_hits' => '採樣數',
+    'stats_no_hits' => '看來此站沒有靜態頁或無人曾看過任何靜態頁.',
+    'id' => 'ID',
+    'duplicate_id' => '你選的 ID 已經被用，請選另一個.',
+    'instructions' => '若要更改或刪除一個靜態頁，在它旁邊的編輯圖上點擊。若要看一個靜態頁，在它的標題上點擊。若要建立一個新的靜態頁，在以上的‘建新’上點距。若要複製一個靜態頁，再它旁邊的複製圖上點擊。',
+    'centerblock' => '中組件: ',
+    'centerblock_msg' => '若勾此匡，此靜態頁便會顯為‘中組件’，就是變成網頁中間的框框。',
+    'topic' => '主題: ',
+    'position' => '位置: ',
+    'all_topics' => '所有',
+    'no_topic' => '只顯在主頁',
+    'position_top' => '頂部',
+    'position_feat' => '在重要文章下面',
+    'position_bottom' => '底部',
+    'position_entire' => '整頁',
+    'head_centerblock' => '中組件',
+    'centerblock_no' => '不',
+    'centerblock_top' => '頂',
+    'centerblock_feat' => '重要文章',
+    'centerblock_bottom' => '底',
+    'centerblock_entire' => '整頁',
+    'inblock_msg' => '在一個組件內: ',
+    'inblock_info' => '將靜態頁包在組件框裏.',
+    'title_edit' => '編輯此頁',
+    'title_copy' => '複製此頁',
+    'title_display' => '顯示此頁',
+    'select_php_none' => '不要執行PHP',
+    'select_php_return' => '執行 PHP (return)',
+    'select_php_free' => '執行 PHP',
+    'php_not_activated' => '使用 PHP 的功能為開啟.',
+    'printable_format' => '打印格式',
+    'edit' => '編輯',
+    'copy' => '複製',
+    'limit_results' => '限制結果',
+    'search' => '搜尋',
+    'submit' => '提交'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/dutch.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/dutch.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/dutch.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/dutch.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,111 +1,111 @@
-<?php
-
-###############################################################################
-# dutch.php
-# This is the Dutch language page for the Geeklog Static Page Plug-in!
-#
-# Copyright (C) 2001 Tony Bibbs
-# tony@tonybibbs.com
-#
-# Ported to level 1.3.10 by: Ko de Pree <ko@depree.nl>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-###############################################################################
-
-###############################################################################
-# Array Format: 
-# $LANGXX[YY]:	$LANG - variable name
-#		  	XX - file id number
-#			YY - phrase id number
-###############################################################################
-
-
-$LANG_STATIC= array(
-    newpage => 'Nieuwe Pagina',
-    adminhome => 'Beheerder Home',
-    staticpages => 'Static Pages',
-    staticpageeditor => 'Static Page Editor',
-    writtenby => 'Geschreven door',
-    date => 'Laatst bijgewerkt',
-    title => 'Titel',
-    content => 'Inhoud',
-    hits => 'Treffers',
-    staticpagelist => 'Static Page Lijst',
-    url => 'URL',
-    edit => 'Wijzigen',
-    lastupdated => 'Laatst bijgewerkt',
-    pageformat => 'Pagina formaat',
-    leftrightblocks => 'Linker & Rechter Blokken',
-    blankpage => 'Blanco Pagina',
-    noblocks => 'Geen Blokken',
-    leftblocks => 'Linker Blokken',
-    addtomenu => 'Aan menu toevoegen',
-    label => 'Label',
-    nopages => 'Er zijn nog geen static pages.',
-    save => 'opslaan',
-    preview => 'preview',
-    delete => 'verwijderen',
-    cancel => 'annuleren',
-    access_denied => 'Geen toegang',
-    access_denied_msg => 'U heeft ongeautoriseerd geprobeerd een van de Static Pages op te roepen. Deze poging is vastgelegd.',
-    all_html_allowed => 'HTML is toegestaan',
-    results => 'Static Pages Resultaten',
-    author => 'Auteur',
-    no_title_or_content => 'Gelieve de <b>Titel</b> en <b>Content</b> op te geven.',
-    no_such_page_logged_in => 'Helaas. '.$_USER['username'].'..',
-    no_such_page_anon => 'Gelieve eerst in te loggen...',
-    no_page_access_msg => "Dit kan optreden omdat u niet ingelogd bent, of geen lid bent van {$_CONF["site_name"]}. <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Meldt u aann</a> op {$_CONF["site_name"]} om alle faciliteiten te verkrijgen",
-    php_msg => 'PHP: ',
-    php_warn => 'Pas op !!  PHP code in uw pagina wordt uitgevoerd indien de optie geactiveerd is. Wees hiermee voorzichtig !!',
-    exit_msg => 'Exit Type: ',
-    exit_info => 'Activeer het Portaal bericht "Login Required". Niet aanvinken voor normale beveiligingsfunkties en berichtgevingen.',
-    deny_msg => 'De toegang naar deze pagina is geweigerd. De pagina is verwijderd of verplaatst, of u bent hiervoor niet geautoriseerd.',
-    stats_headline => 'Top Tien Static Pages',
-    stats_page_title => 'Pagina Titel',
-    stats_hits => 'Treffers',
-    stats_no_hits => 'Het lijkt er op dat er geen static pages aanwezig zijn, of dat niemand ze ooit opgevraagd heeft.',
-    id => 'ID',
-    duplicate_id => 'De ID die u opgeeft voor deze static page is reeds in gebruik. Kies een andere ID.',
-    instructions => 'Om een static page te wijzigen of te vewijderen, klik op het nummer van de betreffende pagina hieronder. Om een static page in te zien, klik op de titel van de betreffende pagina. Om een nieuwe static page aan te leggen klik op "Nieuwe Pagina" hierboven. Klik op [C] om een kopie te maken.',
-    centerblock => 'Centerblok: ',
-    centerblock_msg => 'Indien aangevinkt, wordt deze Static Page weergegeven in het midden van de index pagina.',
-    topic => 'Thema: ',
-    position => 'Positie: ',
-    all_topics => 'All',
-    no_topic => 'Alleen Homepage',
-    position_top => 'Bovenaan',
-    position_feat => 'Na HoofdArtikel',
-    position_bottom => 'Onderaan',
-    position_entire => 'Gehele Pagina',
-    head_centerblock => 'Centerblok',
-    centerblock_no => 'Nee',
-    centerblock_top => 'Bovenaan',
-    centerblock_feat => 'HoofdArtikel',
-    centerblock_bottom => 'Onderaan',
-    centerblock_entire => 'Gehele pagina',
-    'inblock_msg' => 'In een blok: ',
-    'inblock_info' => 'Geef de Static Page weer als een blok.',
-    'title_edit' => 'Wijzig pagina',
-    'title_copy' => 'Maak een copy van deze pagina',
-    'title_display' => 'Laat de pagina zien',
-    'select_php_none' => 'maak het uitvoeren van PHP onmogelijk',
-    'select_php_return' => 'uitvoeren van PHP (return)',
-    'select_php_free' => 'voer PHP uit',
-    'php_not_activated' => 'Het gebruik van PHP in Static Pages is niet geactiveerd. Bekijk de <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentatie</a> voor meer bijzonderheden.',
-    'printable_format' => 'Printbare versie'
-);
-
-?>
+<?php
+
+###############################################################################
+# dutch.php
+# This is the Dutch language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+#
+# Ported to level 1.3.10 by: Ko de Pree <ko@depree.nl>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => 'Nieuwe Pagina',
+    'adminhome' => 'Beheerder Home',
+    'staticpages' => 'Static Pages',
+    'staticpageeditor' => 'Static Page Editor',
+    'writtenby' => 'Geschreven door',
+    'date' => 'Laatst bijgewerkt',
+    'title' => 'Titel',
+    'content' => 'Inhoud',
+    'hits' => 'Treffers',
+    'staticpagelist' => 'Static Page Lijst',
+    'url' => 'URL',
+    'edit' => 'Wijzigen',
+    'lastupdated' => 'Laatst bijgewerkt',
+    'pageformat' => 'Pagina formaat',
+    'leftrightblocks' => 'Linker & Rechter Blokken',
+    'blankpage' => 'Blanco Pagina',
+    'noblocks' => 'Geen Blokken',
+    'leftblocks' => 'Linker Blokken',
+    'addtomenu' => 'Aan menu toevoegen',
+    'label' => 'Label',
+    'nopages' => 'Er zijn nog geen static pages.',
+    'save' => 'opslaan',
+    'preview' => 'preview',
+    'delete' => 'verwijderen',
+    'cancel' => 'annuleren',
+    'access_denied' => 'Geen toegang',
+    'access_denied_msg' => 'U heeft ongeautoriseerd geprobeerd een van de Static Pages op te roepen. Deze poging is vastgelegd.',
+    'all_html_allowed' => 'HTML is toegestaan',
+    'results' => 'Static Pages Resultaten',
+    'author' => 'Auteur',
+    'no_title_or_content' => 'Gelieve de <b>Titel</b> en <b>Content</b> op te geven.',
+    'no_such_page_logged_in' => 'Helaas. '.$_USER['username'].'..',
+    'no_such_page_anon' => 'Gelieve eerst in te loggen...',
+    'no_page_access_msg' => "Dit kan optreden omdat u niet ingelogd bent, of geen lid bent van {$_CONF["site_name"]}. <a href=\"{$_CONF['site_url']}/users.php?mode=new\">Meldt u aann</a> op {$_CONF["site_name"]} om alle faciliteiten te verkrijgen",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'Pas op !!  PHP code in uw pagina wordt uitgevoerd indien de optie geactiveerd is. Wees hiermee voorzichtig !!',
+    'exit_msg' => 'Exit Type: ',
+    'exit_info' => 'Activeer het Portaal bericht "Login Required". Niet aanvinken voor normale beveiligingsfunkties en berichtgevingen.',
+    'deny_msg' => 'De toegang naar deze pagina is geweigerd. De pagina is verwijderd of verplaatst, of u bent hiervoor niet geautoriseerd.',
+    'stats_headline' => 'Top Tien Static Pages',
+    'stats_page_title' => 'Pagina Titel',
+    'stats_hits' => 'Treffers',
+    'stats_no_hits' => 'Het lijkt er op dat er geen static pages aanwezig zijn, of dat niemand ze ooit opgevraagd heeft.',
+    'id' => 'ID',
+    'duplicate_id' => 'De ID die u opgeeft voor deze static page is reeds in gebruik. Kies een andere ID.',
+    'instructions' => 'Om een static page te wijzigen of te vewijderen, klik op het nummer van de betreffende pagina hieronder. Om een static page in te zien, klik op de titel van de betreffende pagina. Om een nieuwe static page aan te leggen klik op "Nieuwe Pagina" hierboven. Klik op [C] om een kopie te maken.',
+    'centerblock' => 'Centerblok: ',
+    'centerblock_msg' => 'Indien aangevinkt, wordt deze Static Page weergegeven in het midden van de index pagina.',
+    'topic' => 'Thema: ',
+    'position' => 'Positie: ',
+    'all_topics' => 'All',
+    'no_topic' => 'Alleen Homepage',
+    'position_top' => 'Bovenaan',
+    'position_feat' => 'Na HoofdArtikel',
+    'position_bottom' => 'Onderaan',
+    'position_entire' => 'Gehele Pagina',
+    'head_centerblock' => 'Centerblok',
+    'centerblock_no' => 'Nee',
+    'centerblock_top' => 'Bovenaan',
+    'centerblock_feat' => 'HoofdArtikel',
+    'centerblock_bottom' => 'Onderaan',
+    'centerblock_entire' => 'Gehele pagina',
+    'inblock_msg' => 'In een blok: ',
+    'inblock_info' => 'Geef de Static Page weer als een blok.',
+    'title_edit' => 'Wijzig pagina',
+    'title_copy' => 'Maak een copy van deze pagina',
+    'title_display' => 'Laat de pagina zien',
+    'select_php_none' => 'maak het uitvoeren van PHP onmogelijk',
+    'select_php_return' => 'uitvoeren van PHP (return)',
+    'select_php_free' => 'voer PHP uit',
+    'php_not_activated' => 'Het gebruik van PHP in Static Pages is niet geactiveerd. Bekijk de <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentatie</a> voor meer bijzonderheden.',
+    'printable_format' => 'Printbare versie'
+);
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/english.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/english.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/english.php	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/english.php	2006-08-08 02:39:06.000000000 -0500
@@ -77,7 +77,7 @@
     'stats_no_hits' => 'It appears that there are no static pages on this site or no one has ever viewed them.',
     'id' => 'ID',
     'duplicate_id' => 'The ID you chose for this static page is already in use. Please select another ID.',
-    'instructions' => 'To modify or delete a static page, click on that page\'s number below. To view a static page, click on the title of the page you wish to view. To create a new static page click on new page above. Click on [C] to create a copy of an existing page.',
+    'instructions' => 'To modify or delete a static page, click on that page\'s edit icon below. To view a static page, click on the title of the page you wish to view. To create a new static page, click on "Create New" above. Click on on the copy icon to create a copy of an existing page.',
     'centerblock' => 'Centerblock: ',
     'centerblock_msg' => 'When checked, this Static Page will be displayed as a center block on the index page.',
     'topic' => 'Topic: ',
@@ -103,7 +103,12 @@
     'select_php_return' => 'execute PHP (return)',
     'select_php_free' => 'execute PHP',
     'php_not_activated' => 'The use of PHP in static pages is not activated. Please see the <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentation</a> for details.',
-    'printable_format' => 'Printable Format'
+    'printable_format' => 'Printable Format',
+    'edit' => 'Edit',
+    'copy' => 'Copy',
+    'limit_results' => 'Limit Results',
+    'search' => 'Search',
+    'submit' => 'Submit'
 );
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/english_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/english_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/english_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/english_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,114 @@
+<?php
+
+###############################################################################
+# english_utf-8.php
+# This is the english language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => 'New Page',
+    'adminhome' => 'Admin Home',
+    'staticpages' => 'Static Pages',
+    'staticpageeditor' => 'Static Page Editor',
+    'writtenby' => 'Written By',
+    'date' => 'Last Updated',
+    'title' => 'Title',
+    'content' => 'Content',
+    'hits' => 'Hits',
+    'staticpagelist' => 'Static Page List',
+    'url' => 'URL',
+    'edit' => 'Edit',
+    'lastupdated' => 'Last Updated',
+    'pageformat' => 'Page Format',
+    'leftrightblocks' => 'Left & Right Blocks',
+    'blankpage' => 'Blank Page',
+    'noblocks' => 'No Blocks',
+    'leftblocks' => 'Left Blocks',
+    'addtomenu' => 'Add To Menu',
+    'label' => 'Label',
+    'nopages' => 'No static pages are in the system yet',
+    'save' => 'save',
+    'preview' => 'preview',
+    'delete' => 'delete',
+    'cancel' => 'cancel',
+    'access_denied' => 'Access Denied',
+    'access_denied_msg' => 'You are illegally trying access one of the Static Pages administration pages.  Please note that all attempts to illegally access this page are logged',
+    'all_html_allowed' => 'All HTML is allowed',
+    'results' => 'Static Pages Results',
+    'author' => 'Author',
+    'no_title_or_content' => 'You must at least fill in the <b>Title</b> and <b>Content</b> fields.',
+    'no_such_page_logged_in' => 'Sorry '.$_USER['username'].'..',
+    'no_such_page_anon' => 'Please log in..',
+    'no_page_access_msg' => "This could be because you're not logged in, or not a member of {$_CONF['site_name']}. Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> become a member</a> of {$_CONF['site_name']} to receive full membership access",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'Warning: PHP code in your page will be evaluated if you enable this option. Use with caution !!',
+    'exit_msg' => 'Exit Type: ',
+    'exit_info' => 'Enable for Login Required Message.  Leave unchecked for normal security check and message.',
+    'deny_msg' => 'Access to this page is denied.  Either the page has been moved/removed or you do not have sufficient permissions.',
+    'stats_headline' => 'Top Ten Static Pages',
+    'stats_page_title' => 'Page Title',
+    'stats_hits' => 'Hits',
+    'stats_no_hits' => 'It appears that there are no static pages on this site or no one has ever viewed them.',
+    'id' => 'ID',
+    'duplicate_id' => 'The ID you chose for this static page is already in use. Please select another ID.',
+    'instructions' => 'To modify or delete a static page, click on that page\'s edit icon below. To view a static page, click on the title of the page you wish to view. To create a new static page, click on "Create New" above. Click on on the copy icon to create a copy of an existing page.',
+    'centerblock' => 'Centerblock: ',
+    'centerblock_msg' => 'When checked, this Static Page will be displayed as a center block on the index page.',
+    'topic' => 'Topic: ',
+    'position' => 'Position: ',
+    'all_topics' => 'All',
+    'no_topic' => 'Homepage Only',
+    'position_top' => 'Top Of Page',
+    'position_feat' => 'After Featured Story',
+    'position_bottom' => 'Bottom Of Page',
+    'position_entire' => 'Entire Page',
+    'head_centerblock' => 'Centerblock',
+    'centerblock_no' => 'No',
+    'centerblock_top' => 'Top',
+    'centerblock_feat' => 'Feat. Story',
+    'centerblock_bottom' => 'Bottom',
+    'centerblock_entire' => 'Entire Page',
+    'inblock_msg' => 'In a block: ',
+    'inblock_info' => 'Wrap Static Page in a block.',
+    'title_edit' => 'Edit page',
+    'title_copy' => 'Make a copy of this page',
+    'title_display' => 'Display page',
+    'select_php_none' => 'do not execute PHP',
+    'select_php_return' => 'execute PHP (return)',
+    'select_php_free' => 'execute PHP',
+    'php_not_activated' => 'The use of PHP in static pages is not activated. Please see the <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentation</a> for details.',
+    'printable_format' => 'Printable Format',
+    'edit' => 'Edit',
+    'copy' => 'Copy',
+    'limit_results' => 'Limit Results',
+    'search' => 'Search',
+    'submit' => 'Submit'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/farsi_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/farsi_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/farsi_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/farsi_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,111 @@
+<?php
+
+###############################################################################
+# farsi.php
+# This is the farsi language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2004 Hesm.H
+# hesam@4shir.com
+# www.4shir.com
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+$LANG_CHARSET = 'utf-8';
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => 'صفحه جديد',
+    'adminhome' => 'خانه رييس',
+    'staticpages' => 'آمار صفحات',
+    'staticpageeditor' => 'ويرايشگر آمار صفحات',
+    'writtenby' => 'نوشته شده بويسله',
+    'date' => 'آخرين به روز آوري',
+    'title' => 'عنوان',
+    'content' => 'محتويات',
+    'hits' => 'مشاهده',
+    'staticpagelist' => 'صفحه ليست آمار',
+    'url' => 'URL',
+    'edit' => 'ويرايش',
+    'lastupdated' => 'آخرين به روز رساني',
+    'pageformat' => 'فرمت صفحه',
+    'leftrightblocks' => 'بلاكهاي راست و چپ',
+    'blankpage' => 'صفحه خالي',
+    'noblocks' => 'بدون بلاك',
+    'leftblocks' => 'بلاكهاي راست',
+    'addtomenu' => 'افزودن به فهرست',
+    'label' => 'اتيكت',
+    'nopages' => 'هنوز هيچ صفحه در سيستم براي آمار در صفحه موجود نيست',
+    'save' => 'ذخيره',
+    'preview' => 'پيش نمايش',
+    'delete' => 'حذف',
+    'cancel' => 'لغو',
+    'access_denied' => 'غير قابل دسترسي ',
+    'access_denied_msg' => 'شما در حال تلاش براي دسترسي به صفحه اي از صفحات آماري هستيدكه براي شما مجاز نميباشد. اين تلاش شما براي ادمين فرستاده شد',
+    'all_html_allowed' => 'تمام كدهاي |Html | اجازه دارند',
+    'results' => 'نتيجه آمار صفحات',
+    'author' => 'نويسنده',
+    'no_title_or_content' => 'شما بايد حداقل فيلد<b>عنوان</b>و<b>محتوي</b> پر نماييد',
+    'no_such_page_logged_in' => 'متاسفم '.$_USER['username'].'..',
+    'no_such_page_anon' => 'لطفا وارد شويد',
+    'no_page_access_msg' => "اين صفحه قابل دسترسي است يا شما وارد نشده ايد يا عضو سايت {$_CONF['site_name']} نيستيد.لطفا <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> عضو ما شويد</a> of {$_CONF['site_name']} براي دسترسي كامل و استفاده از سايت مانند اعضاي ما",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'اخطار: |Html| در صفحه شما ارزيابي ميشود اگر شما اين گزينه را فعال كنيد . با دقت استفاده كنيد',
+    'exit_msg' => 'نوع خروج ',
+    'exit_info' => 'فعالسازي پيام  لازم الورود . ترك بدون چك كردن براي امنيت پايين و چك كردن پيامها',
+    'deny_msg' => 'اين صفحه غير قابل دسترسي است. يا مكان صفحه تغيير كرده يا شما اجازه دسترسي به آن را نداريد',
+    'stats_headline' => '10 صفحه برتر از نظر آمار',
+    'stats_page_title' => 'عنوان صفحه',
+    'stats_hits' => 'مشاهده',
+    'stats_no_hits' => 'اين هنگامي ظاهر ميشود كه هيچ صفحه آماري در سايت موجود نميباشد يا تا به حال ديده نشده است',
+    'id' => 'شناسه',
+    'duplicate_id' => 'شناسه اي كه شما براي استفاده از صفحه آمارها وارد نموده ايد قبلا استفاده شده. لطفا يكي ديگر وارد كنيد',
+    'instructions' => 'براي تغيير يا پاك كردن صفحه آمار سايت روي شماره صفحه مربوطه كليك كنيد. براي ديدن آمار سايت روي عنوان صفحه مورد نظرتان كليك كنيد. رو ي [C]  براي كپي كردن از يك صفحه موجود كليك كنيد',
+    'centerblock' => 'شمارنده بلاك: ',
+    'centerblock_msg' => 'اگر علامت زده شود اين صفحه آماري در بلاك وسط سايت و ايندكس به نمايش در خواهد آمد',
+    'topic' => 'موضوع/تاپيك: ',
+    'position' => 'موقعيت: ',
+    'all_topics' => 'همه',
+    'no_topic' => 'فقط صفحه خانگي',
+    'position_top' => 'بالاي صفحه',
+    'position_feat' => 'بعد از نمايان كردن مقالات',
+    'position_bottom' => 'پايين صفحه',
+    'position_entire' => 'همگي صفحه',
+    'head_centerblock' => 'بلاك وسط',
+    'centerblock_no' => 'خير',
+    'centerblock_top' => 'بالا',
+    'centerblock_feat' => 'بهترين . مقاله',
+    'centerblock_bottom' => 'پايين',
+    'centerblock_entire' => 'همكي صفحه',
+    'inblock_msg' => 'در يك بلاك: ',
+    'inblock_info' => 'قرار دادن كل آمار در يك بلاك',
+    'title_edit' => 'ويرايش صفحه',
+    'title_copy' => 'گرفتن يك كپي از اين صفحه',
+    'title_display' => 'نمايش صفحه',
+    'select_php_none' => 'را اجرا نكنيدPHP',
+    'select_php_return' => 'اجرا كنيدPHP (،پس فرستادن)',
+    'select_php_free' => 'اجرا كنيدPHP',
+    'php_not_activated' => 'استفاده از |PhP| در آمار صفحات فعال نيست . لطفا به مستندات يك نگاه بياندازيد !!',
+    'printable_format' => 'فرمت قابل پرينت'
+);
+#YA hagh
+#Doostan  Agar  Moshkeli  BOOd  BA  MAN  TAmas  BEgirid------By:Hesam.H
+#e-mail: info1@4shir.com OR ir.security@gmail.com
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german_formal.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german_formal.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german_formal.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german_formal.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,12 +2,13 @@
 
 ###############################################################################
 # german_formal.php
-# This is the formal german language file for the Geeklog Static Page Plug-in!
+#
+# This is the formal German language file for the Geeklog Static Pages plugin
 #
 # Copyright (C) 2001 Tony Bibbs
-# tony@tonybibbs.com
+# tony AT tonybibbs DOT com
 #
-# German translation by Dirk Haun <dirk@haun-online.de>
+# German translation by Dirk Haun <dirk AT haun-online DOT de>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -79,7 +80,7 @@
     'stats_no_hits' => 'Es gibt keine Statischen Seiten oder sie wurden von niemandem gelesen.',
     'id' => 'ID',
     'duplicate_id' => 'Diese ID wird bereits fr eine andere Statische Seite benutzt. Bitte whlen Sie eine andere ID.',
-    'instructions' => 'Auf die Nummer klicken, um eine Statische Seite zu ndern oder zu lschen. Um eine Statische Seite anzusehen, auf deren Titel klicken. Auf Neue Seite (s.o.) klicken, um einen neue Statische Seite anzulegen. Auf das [C] klicken, um eine Kopie einer vorhandenen Seite zu erhalten.',
+    'instructions' => 'Um eine Statische Seite zu ndern oder zu lschen, auf das ndern-Icon klicken. Um eine Statische Seite anzusehen, auf deren Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neue Statische Seite anzulegen. Auf das Kopie-Icon klicken, um eine Kopie einer vorhandenen Seite zu erhalten.',
     'centerblock' => 'Centerblock: ',
     'centerblock_msg' => 'Wenn angekreuzt wird diese Seite als Block auf der Index-Seite angezeigt.',
     'topic' => 'Kategorie: ',
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german_formal_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german_formal_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german_formal_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german_formal_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,112 @@
+<?php
+
+###############################################################################
+# german_formal_utf-8.php
+#
+# This is the formal German language file for the Geeklog Static Pages plugin
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony AT tonybibbs DOT com
+#
+# German translation by Dirk Haun <dirk AT haun-online DOT de>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => 'Neue Seite',
+    'adminhome' => 'Admin Home',
+    'staticpages' => 'Statische Seiten',
+    'staticpageeditor' => 'Editor für Statische Seiten',
+    'writtenby' => 'Autor',
+    'date' => 'Letzte Änderung',
+    'title' => 'Titel',
+    'content' => 'Inhalt',
+    'hits' => 'Abrufe',
+    'staticpagelist' => 'Liste der Statischen Seiten',
+    'url' => 'URL',
+    'edit' => 'Ändern',
+    'lastupdated' => 'Letzte Änderung',
+    'pageformat' => 'Seitenformat',
+    'leftrightblocks' => 'Blöcke links &amp; rechts',
+    'blankpage' => 'Leere Seite',
+    'noblocks' => 'Keine Blöcke',
+    'leftblocks' => 'Blöcke links',
+    'addtomenu' => 'Ins Menü aufnehmen',
+    'label' => 'Label',
+    'nopages' => 'Es sind keine statischen Seiten vorhanden.',
+    'save' => 'Speichern',
+    'preview' => 'Vorschau',
+    'delete' => 'Löschen',
+    'cancel' => 'Abbruch',
+    'access_denied' => 'Zugriff verweigert',
+    'access_denied_msg' => 'Sie haben unerlaubter Weise versucht, auf eine der Admin-Seiten für Statische Seiten zuzugreifen. Hinweis: Alle derartigen Versuche werden protokolliert',
+    'all_html_allowed' => 'Alle HTML-Tags sind erlaubt',
+    'results' => 'Gefundene Statische Seiten',
+    'author' => 'Autor',
+    'no_title_or_content' => 'Bitte füllen Sie mindestens die Felder <b>Titel</b> und <b>Inhalt</b> aus.',
+    'no_such_page_logged_in' => 'Sorry, ' . $_USER['username'] . ' ...',
+    'no_such_page_anon' => 'Bitte einloggen.',
+    'no_page_access_msg' => "This could be because you're not logged in, or not a member of {$_CONF["site_name"]}. Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> become a member</a> of {$_CONF["site_name"]} to receive full membership access.",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'Hinweis: Wenn diese Option aktiviert ist, wird in der Seite enthaltener PHP-Code ausgeführt. <em>Bitte mit Bedacht verwenden!</em>',
+    'exit_msg' => 'Hinweistext: ',
+    'exit_info' => 'Art des Hinweistextes, wenn kein Zugriff auf die Seite erlaubt ist: Aktiviert = "Anmeldung erforderlich", nicht aktiviert = "Zugriff verweigert".',
+    'deny_msg' => 'Zugriff auf diese Seite ist nicht möglich. Die Seite wurde entweder umbenannt oder gelöscht oder Sie haben nicht die nötigen Zugriffsrechte.',
+    'stats_headline' => 'Top Ten der Statischen Seiten',
+    'stats_page_title' => 'Titel',
+    'stats_hits' => 'Angezeigt',
+    'stats_no_hits' => 'Es gibt keine Statischen Seiten oder sie wurden von niemandem gelesen.',
+    'id' => 'ID',
+    'duplicate_id' => 'Diese ID wird bereits für eine andere Statische Seite benutzt. Bitte wählen Sie eine andere ID.',
+    'instructions' => 'Um eine Statische Seite zu ändern oder zu löschen, auf das Ändern-Icon klicken. Um eine Statische Seite anzusehen, auf deren Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neue Statische Seite anzulegen. Auf das Kopie-Icon klicken, um eine Kopie einer vorhandenen Seite zu erhalten.',
+    'centerblock' => 'Centerblock: ',
+    'centerblock_msg' => 'Wenn angekreuzt wird diese Seite als Block auf der Index-Seite angezeigt.',
+    'topic' => 'Kategorie: ',
+    'position' => 'Position: ',
+    'all_topics' => 'Alle',
+    'no_topic' => 'Nur auf der Startseite',
+    'position_top' => 'Seitenanfang',
+    'position_feat' => 'Nach Hauptartikel',
+    'position_bottom' => 'Seitenende',
+    'position_entire' => 'Ganze Seite',
+    'head_centerblock' => 'Centerblock',
+    'centerblock_no' => 'Nein',
+    'centerblock_top' => 'oben',
+    'centerblock_feat' => 'Hauptartikel',
+    'centerblock_bottom' => 'unten',
+    'centerblock_entire' => 'Ganze Seite',
+    'inblock_msg' => 'Im Block: ',
+    'inblock_info' => 'Seite in einen Block packen.',
+    'title_edit' => 'Seite ändern',
+    'title_copy' => 'Seite kopieren',
+    'title_display' => 'Seite anzeigen',
+    'select_php_none' => 'PHP nicht ausführen',
+    'select_php_return' => 'PHP ausführen (mit return)',
+    'select_php_free' => 'PHP ausführen',
+    'php_not_activated' => 'Das Verwenden von PHP in statischen Seiten ist nicht aktiviert. Hinweise zur Aktivierung finden sich in der <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">Dokumentation</a>.',
+    'printable_format' => 'Druckfähige Version'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,12 +2,13 @@
 
 ###############################################################################
 # german.php
-# This is the German language file for the Geeklog Static Pages Plug-in.
+#
+# This is the German language file for the Geeklog Static Pages plugin
 #
 # Copyright (C) 2001 Tony Bibbs
-# tony@tonybibbs.com
+# tony AT tonybibbs DOT com
 #
-# German translation by Dirk Haun <dirk@haun-online.de>
+# German translation by Dirk Haun <dirk AT haun-online DOT de>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -79,7 +80,7 @@
     'stats_no_hits' => 'Es gibt keine Statischen Seiten oder sie wurden von niemandem gelesen.',
     'id' => 'ID',
     'duplicate_id' => 'Diese ID wird bereits fr eine andere Statische Seite benutzt. Bitte whle eine andere ID.',
-    'instructions' => 'Auf die Nummer klicken, um eine Statische Seite zu ndern oder zu lschen. Um eine Statische Seite anzusehen, auf deren Titel klicken. Auf Neue Seite (s.o.) klicken, um einen neue Statische Seite anzulegen. Auf das [C] klicken, um eine Kopie einer vorhandenen Seite zu erhalten.',
+    'instructions' => 'Um eine Statische Seite zu ndern oder zu lschen, auf das ndern-Icon klicken. Um eine Statische Seite anzusehen, auf deren Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neue Statische Seite anzulegen. Auf das Kopie-Icon klicken, um eine Kopie einer vorhandenen Seite zu erhalten.',
     'centerblock' => 'Centerblock: ',
     'centerblock_msg' => 'Wenn angekreuzt wird diese Seite als Block auf der Index-Seite angezeigt.',
     'topic' => 'Kategorie: ',
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/german_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/german_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,112 @@
+<?php
+
+###############################################################################
+# german_utf-8.php
+#
+# This is the German language file for the Geeklog Static Pages plugin
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony AT tonybibbs DOT com
+#
+# German translation by Dirk Haun <dirk AT haun-online DOT de>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => 'Neue Seite',
+    'adminhome' => 'Admin Home',
+    'staticpages' => 'Statische Seiten',
+    'staticpageeditor' => 'Editor für Statische Seiten',
+    'writtenby' => 'Autor',
+    'date' => 'Letzte Änderung',
+    'title' => 'Titel',
+    'content' => 'Inhalt',
+    'hits' => 'Abrufe',
+    'staticpagelist' => 'Liste der Statischen Seiten',
+    'url' => 'URL',
+    'edit' => 'Ändern',
+    'lastupdated' => 'Letzte Änderung',
+    'pageformat' => 'Seitenformat',
+    'leftrightblocks' => 'Blöcke links &amp; rechts',
+    'blankpage' => 'Leere Seite',
+    'noblocks' => 'Keine Blöcke',
+    'leftblocks' => 'Blöcke links',
+    'addtomenu' => 'Ins Menü aufnehmen',
+    'label' => 'Label',
+    'nopages' => 'Es sind keine statischen Seiten vorhanden.',
+    'save' => 'Speichern',
+    'preview' => 'Vorschau',
+    'delete' => 'Löschen',
+    'cancel' => 'Abbruch',
+    'access_denied' => 'Zugriff verweigert',
+    'access_denied_msg' => 'Du hast unerlaubter Weise versucht, auf eine der Admin-Seiten für Statische Seiten zuzugreifen. Hinweis: Alle derartigen Versuche werden protokolliert',
+    'all_html_allowed' => 'Alle HTML-Tags sind erlaubt',
+    'results' => 'Gefundene Statische Seiten',
+    'author' => 'Autor',
+    'no_title_or_content' => 'Bitte mindestens die Felder <b>Titel</b> und <b>Inhalt</b> ausfüllen.',
+    'no_such_page_logged_in' => 'Sorry, ' . $_USER['username'] . ' ...',
+    'no_such_page_anon' => 'Bitte einloggen.',
+    'no_page_access_msg' => "This could be because you're not logged in, or not a member of {$_CONF["site_name"]}. Please <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> become a member</a> of {$_CONF["site_name"]} to receive full membership access.",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'Hinweis: Wenn diese Option aktiviert ist, wird in der Seite enthaltener PHP-Code ausgeführt. <em>Bitte mit Bedacht verwenden!</em>',
+    'exit_msg' => 'Hinweistext: ',
+    'exit_info' => 'Art des Hinweistextes, wenn kein Zugriff auf die Seite erlaubt ist: Aktiviert = "Anmeldung erforderlich", nicht aktiviert = "Zugriff verweigert".',
+    'deny_msg' => 'Zugriff auf diese Seite ist nicht möglich. Die Seite wurde entweder umbenannt oder gelöscht oder Du hast nicht die nötigen Zugriffsrechte.',
+    'stats_headline' => 'Top Ten der Statischen Seiten',
+    'stats_page_title' => 'Titel',
+    'stats_hits' => 'Angezeigt',
+    'stats_no_hits' => 'Es gibt keine Statischen Seiten oder sie wurden von niemandem gelesen.',
+    'id' => 'ID',
+    'duplicate_id' => 'Diese ID wird bereits für eine andere Statische Seite benutzt. Bitte wähle eine andere ID.',
+    'instructions' => 'Um eine Statische Seite zu ändern oder zu löschen, auf das Ändern-Icon klicken. Um eine Statische Seite anzusehen, auf deren Titel klicken. Auf Neu anlegen (s.o.) klicken, um einen neue Statische Seite anzulegen. Auf das Kopie-Icon klicken, um eine Kopie einer vorhandenen Seite zu erhalten.',
+    'centerblock' => 'Centerblock: ',
+    'centerblock_msg' => 'Wenn angekreuzt wird diese Seite als Block auf der Index-Seite angezeigt.',
+    'topic' => 'Kategorie: ',
+    'position' => 'Position: ',
+    'all_topics' => 'Alle',
+    'no_topic' => 'Nur auf der Startseite',
+    'position_top' => 'Seitenanfang',
+    'position_feat' => 'Nach Hauptartikel',
+    'position_bottom' => 'Seitenende',
+    'position_entire' => 'Ganze Seite',
+    'head_centerblock' => 'Centerblock',
+    'centerblock_no' => 'Nein',
+    'centerblock_top' => 'oben',
+    'centerblock_feat' => 'Hauptartikel',
+    'centerblock_bottom' => 'unten',
+    'centerblock_entire' => 'Ganze Seite',
+    'inblock_msg' => 'Im Block: ',
+    'inblock_info' => 'Seite in einen Block packen.',
+    'title_edit' => 'Seite ändern',
+    'title_copy' => 'Seite kopieren',
+    'title_display' => 'Seite anzeigen',
+    'select_php_none' => 'PHP nicht ausführen',
+    'select_php_return' => 'PHP ausführen (mit return)',
+    'select_php_free' => 'PHP ausführen',
+    'php_not_activated' => 'Das Verwenden von PHP in statischen Seiten ist nicht aktiviert. Hinweise zur Aktivierung finden sich in der <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">Dokumentation</a>.',
+    'printable_format' => 'Druckfähige Version'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/italian.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/italian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/italian.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/italian.php	2006-08-08 02:39:06.000000000 -0500
@@ -6,6 +6,7 @@
 #
 # Copyright (C) 2001 Tony Bibbs
 # tony@tonybibbs.com
+# Copyright (C) 2005 magomarcelo magomarcelo@gmail.com magomarcelo.blogspot.com
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -32,78 +33,78 @@
 
 
 $LANG_STATIC= array(
-    newpage => 'Nuova Pagina',
-    adminhome => 'Home Amministrazione',
-    staticpages => 'Pagine Statiche',
-    staticpageeditor => 'Editor Pagine Statiche',
-    writtenby => 'Scritto da',
-    date => 'Ultimo Agg.',
-    title => 'Titolo',
-    content => 'Contenuto',
-    hits => 'Visite',
-    staticpagelist => 'Lista Pagine Statiche',
-    url => 'URL',
-    edit => 'Modifica',
-    lastupdated => 'Ultimo Agg.',
-    pageformat => 'Formato Pag.',
-    leftrightblocks => 'Blocchi a Sinistra & Destra',
-    blankpage => 'Pagina Vuota',
-    noblocks => 'Nessun Blocco',
-    leftblocks => 'Blocchi a Sinistra',
-    addtomenu => 'Agg. al Menu',
-    label => 'Etichetta',
-    nopages => 'Nessuna pagina statica al momento nel sistema',
-    save => 'Salva',
-    preview => 'Anteprima',
-    delete => 'Cancella',
-    cancel => 'Elimina',
-    access_denied => 'Accesso Negato',
-    access_denied_msg => 'Stai tentando di accedere illegalmente all\'Amministrazione Pagine Statiche.  Prego nota che tutti i tentativi di accesso illegali sono registrati',
-    all_html_allowed => 'Tutto l\'HTML permesso',
-    results => 'Risultati Pagine Statiche',
-    author => 'Autore',
-    no_title_or_content => 'Devi almeno compilare i campi <b>Titolo</b> e <b>Contenuto</b>.',
-    no_such_page_logged_in => 'Spiacenti '.$_USER['username'].'..',
-    no_such_page_anon => 'Prego entra nel sito..',
-    no_page_access_msg => "Questo potrebbe indicare che tu non sei entrato nel sito, o non sei un membro di {$_CONF["site_name"]}. Prego <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> diventa un membro</a> di {$_CONF["site_name"]} per ricevere pieno accesso al sito",
-    php_msg => 'PHP: ',
-    php_warn => 'Attenzione: il codice PHP della tua pagina sar&agrave; valutato se abiliti questa opzione. <br><strong>Usare con cautela !!</strong>',
-    exit_msg => 'Tipo Uscita: ',
-    exit_info => 'Abilita per Richiesta Messaggio di Login.  Lascia deselezionato per il normale controllo di sicurezza e messaggio.',
-    deny_msg => 'Accesso a questa pagina negato.  Pu&ograve; essere che questa pagina &egrave; stata spostata/rimossa o che non hai i permessi sufficiente per visulaizzarla.',
-    stats_headline => 'Top 10 Pagine Statiche',
-    stats_page_title => 'Titolo Pagina',
-    stats_hits => 'Visite',
-    stats_no_hits => 'Sembra che non ci siano pagine statiche in questo sito o che nessuno ne ha ancora visualizzata una.',
-    id => 'ID',
-    duplicate_id => 'L\'ID che hai selezionato per questa pagina statica &egrave; gi&agrave; in uso. Prego seleziona un\'altro ID.',
-    instructions => 'Per modificare o eliminare una pagina statica, clicca sul numero della pagina sotto. Per visualizzare una pagina statica, clicca sul titolo della pagina che desideri vedere. Per creare una nuova pagina statica clicca su [ Nuova Pagina ] sopra. Clicca su [C] per creare una copia di una pagina esistente.',
-    centerblock => 'BloccoCentrale: ',
-    centerblock_msg => 'Quando selezionato, questa Pagina Statica sar&agrave; visualizzata come un blocco centrale nella pagina index.',
-    topic => 'Argomento: ',
-    position => 'Posizione: ',
-    all_topics => 'Tutte',
-    no_topic => 'Solo Homepage',
-    position_top => 'Capo Pagina',
-    position_feat => 'Dopo Articolo Evidenziato',
-    position_bottom => 'Fine Pagina',
-    position_entire => 'Pagina Intera',
-    head_centerblock => 'BloccoCentrale',
-    centerblock_no => 'No',
-    centerblock_top => 'Capo Pag.',
-    centerblock_feat => 'Art. Evidenz.',
-    centerblock_bottom => 'Fine Pag.',
-    centerblock_entire => 'Intera Pagina',
-    'inblock_msg' => 'In a block: ',
-    'inblock_info' => 'Wrap Static Page in a block.',
-    'title_edit' => 'Edit page',
-    'title_copy' => 'Make a copy of this page',
-    'title_display' => 'Display page',
-    'select_php_none' => 'do not execute PHP',
-    'select_php_return' => 'execute PHP (return)',
-    'select_php_free' => 'execute PHP',
-    'php_not_activated' => 'The use of PHP in static pages is not activated. Please see the <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentation</a> for details.',
-    'printable_format' => 'Printable Format'
+    'newpage' => 'Nuova Pagina',
+    'adminhome' => 'Home Amministrazione',
+    'staticpages' => 'Pagine Statiche',
+    'staticpageeditor' => 'Editor Pagine Statiche',
+    'writtenby' => 'Scritto da',
+    'date' => 'Ultimo Agg.',
+    'title' => 'Titolo',
+    'content' => 'Contenuto',
+    'hits' => 'Visite',
+    'staticpagelist' => 'Lista Pagine Statiche',
+    'url' => 'URL',
+    'edit' => 'Modifica',
+    'lastupdated' => 'Ultimo Agg.',
+    'pageformat' => 'Formato Pag.',
+    'leftrightblocks' => 'Blocchi a Sinistra & Destra',
+    'blankpage' => 'Pagina Vuota',
+    'noblocks' => 'Nessun Blocco',
+    'leftblocks' => 'Blocchi a Sinistra',
+    'addtomenu' => 'Agg. al Menu',
+    'label' => 'Etichetta',
+    'nopages' => 'Nessuna pagina statica al momento nel sistema',
+    'save' => 'Salva',
+    'preview' => 'Anteprima',
+    'delete' => 'Cancella',
+    'cancel' => 'Elimina',
+    'access_denied' => 'Accesso Negato',
+    'access_denied_msg' => 'Stai tentando di accedere illegalmente all\'Amministrazione Pagine Statiche.  Prego nota che tutti i tentativi di accesso illegali sono registrati',
+    'all_html_allowed' => 'Tutto l\'HTML permesso',
+    'results' => 'Risultati Pagine Statiche',
+    'author' => 'Autore',
+    'no_title_or_content' => 'Devi almeno compilare i campi <b>Titolo</b> e <b>Contenuto</b>.',
+    'no_such_page_logged_in' => 'Spiacenti '.$_USER['username'].'..',
+    'no_such_page_anon' => 'Prego entra nel sito..',
+    'no_page_access_msg' => "Questo potrebbe indicare che tu non sei entrato nel sito, o non sei un membro di {$_CONF["site_name"]}. Prego <a href=\"{$_CONF['site_url']}/users.php?mode=new\"> diventa un membro</a> di {$_CONF["site_name"]} per ricevere pieno accesso al sito",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'Attenzione: il codice PHP della tua pagina sar&agrave; valutato se abiliti questa opzione. <br><strong>Usare con cautela !!</strong>',
+    'exit_msg' => 'Tipo Uscita: ',
+    'exit_info' => 'Abilita per Richiesta Messaggio di Login.  Lascia deselezionato per il normale controllo di sicurezza e messaggio.',
+    'deny_msg' => 'Accesso a questa pagina negato.  Pu&ograve; essere che questa pagina &egrave; stata spostata/rimossa o che non hai i permessi sufficiente per visulaizzarla.',
+    'stats_headline' => 'Top 10 Pagine Statiche',
+    'stats_page_title' => 'Titolo Pagina',
+    'stats_hits' => 'Visite',
+    'stats_no_hits' => 'Sembra che non ci siano pagine statiche in questo sito o che nessuno ne ha ancora visualizzata una.',
+    'id' => 'ID',
+    'duplicate_id' => 'L\'ID che hai selezionato per questa pagina statica &egrave; gi&agrave; in uso. Prego seleziona un\'altro ID.',
+    'instructions' => 'Per modificare o eliminare una pagina statica, clicca sul numero della pagina sotto. Per visualizzare una pagina statica, clicca sul titolo della pagina che desideri vedere. Per creare una nuova pagina statica clicca su [ Nuova Pagina ] sopra. Clicca su [C] per creare una copia di una pagina esistente.',
+    'centerblock' => 'BloccoCentrale: ',
+    'centerblock_msg' => 'Quando selezionato, questa Pagina Statica sar&agrave; visualizzata come un blocco centrale nella pagina index.',
+    'topic' => 'Argomento: ',
+    'position' => 'Posizione: ',
+    'all_topics' => 'Tutte',
+    'no_topic' => 'Solo Homepage',
+    'position_top' => 'Capo Pagina',
+    'position_feat' => 'Dopo Articolo Evidenziato',
+    'position_bottom' => 'Fine Pagina',
+    'position_entire' => 'Pagina Intera',
+    'head_centerblock' => 'BloccoCentrale',
+    'centerblock_no' => 'No',
+    'centerblock_top' => 'Capo Pag.',
+    'centerblock_feat' => 'Art. Evidenz.',
+    'centerblock_bottom' => 'Fine Pag.',
+    'centerblock_entire' => 'Intera Pagina',
+    'inblock_msg' => 'In un blocco: ',
+    'inblock_info' => 'Racchiudi Pagina Statica in un blocco.',
+    'title_edit' => 'Modifica Pagina',
+    'title_copy' => 'Duplica questa pagina',
+    'title_display' => 'Visualizza pagina',
+    'select_php_none' => 'non eseguire PHP',
+    'select_php_return' => 'esegui PHP (return)',
+    'select_php_free' => 'esegui PHP',
+    'php_not_activated' => 'L\'uso di PHP nelle pagine statiche &egrave; disattivato. Prego vedi la <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentazione</a> per dettagli.',
+    'printable_format' => 'Formato Stampabile'
 );
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/japanese.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/japanese.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/japanese.php	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/japanese.php	2006-08-08 02:39:06.000000000 -0500
@@ -34,78 +34,90 @@
 
 
 $LANG_STATIC= array(
-    newpage => 'ڡ',
-    adminhome => 'ڡ',
-    staticpages => 'Ūʸ˥ڡ',
-    staticpageeditor => 'ŪڡԽ',
-    writtenby => 'ԡ',
-    date => 'ǽ',
-    title => 'ȥ',
-    content => '',
-    hits => 'α',
-    staticpagelist => 'Ūڡ',
-    url => 'URL',
-    edit => 'Խ',
-    lastupdated => 'ǽ',
-    pageformat => 'ڡեޥå',
-    leftrightblocks => 'Υ֥åդ',
-    blankpage => 'ڡ',
-    noblocks => '֥åʤ',
-    leftblocks => '¦֥åΤ',
-    addtomenu => '˥塼ɲä',
-    label => '٥',
-    nopages => 'Ūڡƥˤޤ',
-    save => '¸',
-    preview => 'ץӥ塼',
-    delete => '',
-    cancel => '󥻥',
-    access_denied => 'ݤޤ',
-    access_denied_msg => 'Ūڡδڡ˸¤ʤǥ褦Ȥޤ¤ΤʤϤ٤ƵϿޤΤǤդ',
-    all_html_allowed => '٤ƤHTMLѤǤޤ',
-    results => 'Static Pages Results',
-    author => 'ԡ',
-    no_title_or_content => 'ʤȤ⡢<b>ȥ</b><b></b>ϵƤ',
-    no_such_page_logged_in => $_USER['username'].'󡢤ʤ',
-    no_such_page_anon => 'ޤ󤷤Ƥ',
-    no_page_access_msg => "ϡޤ󤷤Ƥʤ⤽⤳Υȡ{$_CONF["site_name"]}ˤΥСǤϤʤȹͤޤ{$_CONF["site_name"]}<a href=\"{$_CONF['site_url']}/users.php?mode=new\"> СϿ</a>뤫ŬڤʥԤƤ",
-    php_msg => 'PHP: ',
-    php_warn => 'աΥץͭˤȡʤΥڡ˴ޤޤPHPɤ¹ԤޤѤˤϺǿդʧäƤ',
-    exit_msg => 'Exit Type: ',
-    exit_info => 'ץסå򤷤ʤˤ̾ΥƥåŬѤ졢åɽޤ',
-    deny_msg => 'ڡؤΥϵݤޤڡưޤϺ줿¤ʤΤ줫Ǥ',
-    stats_headline => 'Ūڡʾ̣',
-    stats_page_title => 'ȥ',
-    stats_hits => 'α',
-    stats_no_hits => 'ŪڡʤԤʤΤɤ餫Ǥ',
-    id => 'IDʥڡ̾',
-    duplicate_id => 'ꤷIDϤǤ˻ȤƤޤ̤ID򤴻Ѥ',
-    instructions => 'ڡԽ뤿ˤϡʲΥڡֹ򥯥åƤڡϡȥ򥯥åƤڡˤϡֿץܥ򲡤Ƥ[C]򲡤ȡ¸ΥڡΥԡǤޤ',
-    centerblock => '󥿡֥å: ',
-    centerblock_msg => 'åȡȥåץڡ濴ʬɽޤ',
-    topic => ': ',
-    position => ': ',
-    all_topics => '٤',
-    no_topic => 'ۡڡΤ',
-    position_top => 'ڡκǾ',
-    position_feat => 'ܵβ',
-    position_bottom => 'ڡβ',
-    position_entire => 'ڡ',
-    head_centerblock => '󥿡֥å',
-    centerblock_no => '',
-    centerblock_top => '',
-    centerblock_feat => 'ܵ',
-    centerblock_bottom => '',
-    centerblock_entire => 'ڡ',
-    'inblock_msg' => 'In a block: ',
-    'inblock_info' => 'Wrap Static Page in a block.',
-    'title_edit' => 'Edit page',
-    'title_copy' => 'Make a copy of this page',
-    'title_display' => 'Display page',
-    'select_php_none' => 'do not execute PHP',
-    'select_php_return' => 'execute PHP (return)',
-    'select_php_free' => 'execute PHP',
-    'php_not_activated' => 'The use of PHP in static pages is not activated. Please see the <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">documentation</a> for details.',
-    'printable_format' => 'Printable Format'
+    'newpage' => 'ڡ',
+    'adminhome' => '',
+    'staticpages' => 'Ūڡ',
+    'staticpageeditor' => 'ŪڡԽ',
+    'writtenby' => '',
+    'date' => 'ǽ',
+    'title' => 'ȥ',
+    'content' => '',
+    'hits' => '',
+    'staticpagelist' => 'Ūڡ',
+    'url' => 'URL',
+    'edit' => 'Խ',
+    'lastupdated' => 'ǽ',
+    'pageformat' => 'ڡ쥤',
+    'leftrightblocks' => 'Υ֥åդ',
+    'blankpage' => 'ʤ',
+    'noblocks' => '֥åʤ',
+    'leftblocks' => '¦֥åΤ',
+    'addtomenu' => '˥塼ɲ',
+    'label' => '٥',
+    'nopages' => 'Ūڡƥˤޤ',
+    'save' => '¸',
+    'preview' => 'ץӥ塼',
+    'delete' => '',
+    'cancel' => '󥻥',
+    'access_denied' => 'ݤޤ',
+    'access_denied_msg' => 'Ūڡδڡ˸¤ʤǥ褦Ȥޤ¤ΤʤϤ٤ƵϿޤΤǤդ',
+    'all_html_allowed' => '٤ƤHTMLѤǤޤ',
+    'results' => 'Static Pages Results',
+    'author' => '',
+    'no_title_or_content' => 'ʤȤ⡢<b>ȥ</b><b></b>ϵƤ',
+    'no_such_page_logged_in' => $_USER['username'].'󡢤ʤ',
+    'no_such_page_anon' => 'ޤ󤷤Ƥ',
+    'no_page_access_msg' => "ϡޤ󤷤Ƥʤ⤽⤳Υȡ{$_CONF["site_name"]}ˤΥСǤϤʤȹͤޤ{$_CONF["site_name"]}<a href=\"{$_CONF['site_url']}/users.php?mode=new\"> СϿ</a>뤫ŬڤʥԤƤ",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'աΥץͭˤȡʤΥڡ˴ޤޤPHPɤ¹ԤޤѤˤϺٿդʧäƤ',
+    'exit_msg' => '¤ʤΥ: ',
+    'exit_info' => 'åȥ̤ɽޤå򤷤ʤˤϡָ¤ʤפȤåɽޤ',
+    'deny_msg' => 'ڡؤΥϵݤޤڡưޤϺ줿¤ʤΤ줫Ǥ',
+    'stats_headline' => 'Ūڡʾ̣',
+    'stats_page_title' => 'ȥ',
+    'stats_hits' => '',
+    'stats_no_hits' => 'ŪڡʤԤʤΤɤ餫Ǥ',
+    'id' => 'IDʥڡ̾',
+    'duplicate_id' => 'ꤷIDϤǤ˻ȤƤޤ̤ID򤴻Ѥ',
+    'instructions' => 'ڡԽ뤿ˤϡʲΥڡֹ򥯥åƤڡϡȥ򥯥åƤڡˤϡֿץܥ򲡤Ƥ[C]򲡤ȡ¸ΥڡΥԡǤޤ',
+    'centerblock' => '󥿡֥å: ',
+    'centerblock_msg' => 'åȡȥåץڡ濴ʬɽޤ',
+    'topic' => ': ',
+    'position' => 'ɽ: ',
+    'all_topics' => '٤',
+    'no_topic' => 'ۡڡΤ',
+    'position_top' => 'ڡκǾ',
+    'position_second' => 'ξ',
+    'position_feat' => 'ܵβ',
+    'position_bottom' => 'ڡβ',
+    'position_entire' => 'ڡ',
+    'position_menutab' => 'إå',
+    'position_footer' => 'եå',
+    'head_centerblock' => '󥿡֥å',
+    'centerblock_no' => '',
+    'centerblock_top' => '',
+    'centerblock_second' => 'ξ',
+    'centerblock_feat' => 'ܵ',
+    'centerblock_bottom' => '',
+    'centerblock_menutab' => 'إå',
+    'centerblock_footer' => 'եå',
+    'centerblock_entire' => 'ڡ',
+    'inblock_msg' => '֥å: ',
+    'inblock_info' => 'ڡ֥åǰϤ',
+    'title_edit' => 'Խ',
+    'title_copy' => 'ԡ',
+    'title_display' => 'ڡɽ',
+    'select_php_none' => 'PHP¹Ԥʤ',
+    'select_php_return' => 'PHP¹Ԥ (return)',
+    'select_php_free' => 'PHP¹Ԥ',
+    'php_not_activated' => 'ŪڡPHPϻѤʤˤʤäƤޤܺ٤ˤĤƤ <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">Ϣʸ</a> ',
+    'printable_format' => 'ѥեޥå',
+    'edit' => 'Խ',
+    'copy' => 'ԡ',
+    'limit_results' => 'ʹ',
+    'search' => '',
+    'submit' => 'Ͽ'
+
 );
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/japanese_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/japanese_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/japanese_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/japanese_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,123 @@
+<?php
+
+###############################################################################
+# japanese.php
+# This is the english language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2001 Tony Bibbs
+# tony@tonybibbs.com
+# Tranlated by SaY
+# sakata@ecofirm.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => '新規ページ',
+    'adminhome' => '管理画面',
+    'staticpages' => '静的ページ',
+    'staticpageeditor' => '静的ページの編集',
+    'writtenby' => '著者',
+    'date' => '最終更新日',
+    'title' => 'タイトル',
+    'content' => '内容',
+    'hits' => '閲覧件数',
+    'staticpagelist' => '静的ページ一覧',
+    'url' => 'URL',
+    'edit' => '編集',
+    'lastupdated' => '最終更新日：',
+    'pageformat' => 'ページレイアウト',
+    'leftrightblocks' => '左右のブロック付き',
+    'blankpage' => '何もなし',
+    'noblocks' => 'ブロックなし',
+    'leftblocks' => '左側ブロックのみ',
+    'addtomenu' => 'メニューに追加',
+    'label' => 'ラベル',
+    'nopages' => '静的ページがシステムにありません',
+    'save' => '保存',
+    'preview' => 'プレビュー',
+    'delete' => '削除',
+    'cancel' => 'キャンセル',
+    'access_denied' => 'アクセスが拒否されました',
+    'access_denied_msg' => '静的ページの管理ページに権限なしでアクセスしようとしました。権限のないアクセスはすべて記録されますのでご注意ください。',
+    'all_html_allowed' => 'すべてのHTMLが利用できます。',
+    'results' => 'Static Pages Results',
+    'author' => '著者',
+    'no_title_or_content' => '少なくとも、<b>タイトル</b>と<b>内容</b>は記入してください。',
+    'no_such_page_logged_in' => $_USER['username'].'さん、ごめんなさい',
+    'no_such_page_anon' => 'まずログインしてください。',
+    'no_page_access_msg' => "この問題は、まだログインしていないか、そもそもこのサイト（{$_CONF["site_name"]}）のメンバーではないためだと考えられます。{$_CONF["site_name"]}に<a href=\"{$_CONF['site_url']}/users.php?mode=new\"> メンバー登録</a>するか、適切なアクセス権を管理者から取得してください。",
+    'php_msg' => 'PHP: ',
+    'php_warn' => '注意：このオプションを有効にすると、あなたのページに含まれるPHPコードが実行されます。利用には細心の注意を払ってください。',
+    'exit_msg' => '権限なしのアクセス: ',
+    'exit_info' => 'チェックするとログイン画面が表示されます。チェックをしない場合には「権限がない」というメッセージが表示されます。',
+    'deny_msg' => 'ページへのアクセスは拒否されました。ページが移動または削除されたか、権限がないかのいずれかです。',
+    'stats_headline' => '静的ページ（上位１０）',
+    'stats_page_title' => 'タイトル',
+    'stats_hits' => '閲覧数',
+    'stats_no_hits' => '静的ページがないか、閲覧者がいないかのどちらかです。',
+    'id' => 'ID（ページ名）',
+    'duplicate_id' => '指定したIDはすでに使われています。別のIDをご使用ください。',
+    'instructions' => 'ページを編集・削除するためには、以下のページ番号をクリックしてください。ページを閲覧する場合は、タイトルをクリックしてください。新しいページを作成する場合には、「新規」ボタンを押してください。[C]を押すと、既存のページのコピーを作成できます。',
+    'centerblock' => 'センターブロック: ',
+    'centerblock_msg' => 'チェックすると、トップページの中心部分に表示されます。',
+    'topic' => '話題: ',
+    'position' => '表示場所: ',
+    'all_topics' => 'すべて',
+    'no_topic' => 'ホームページのみ',
+    'position_top' => 'ページの最上部',
+    'position_second' => '記事の上',
+    'position_feat' => '注目記事の下',
+    'position_bottom' => 'ページの下',
+    'position_entire' => 'ページ全体',
+    'position_menutab' => 'ヘッダー',
+    'position_footer' => 'フッター',
+    'head_centerblock' => 'センターブロック',
+    'centerblock_no' => 'いいえ',
+    'centerblock_top' => '上部',
+    'centerblock_second' => '記事の上',
+    'centerblock_feat' => '注目記事',
+    'centerblock_bottom' => '下部',
+    'centerblock_menutab' => 'ヘッダー',
+    'centerblock_footer' => 'フッター',
+    'centerblock_entire' => 'ページ全体',
+    'inblock_msg' => 'ブロックの中: ',
+    'inblock_info' => 'ページをブロックで囲む',
+    'title_edit' => '編集',
+    'title_copy' => 'コピーを作成',
+    'title_display' => 'ページを表示する',
+    'select_php_none' => 'PHPを実行しない',
+    'select_php_return' => 'PHPを実行する (return)',
+    'select_php_free' => 'PHPを実行する',
+    'php_not_activated' => '静的ページでPHPは使用しない設定になっています。詳細については <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">関連文書</a> をご覧下さい。',
+    'printable_format' => '印刷用フォーマット',
+    'edit' => '編集',
+    'copy' => 'コピー',
+    'limit_results' => '絞込検索',
+    'search' => '検索',
+    'submit' => '登録'
+
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/ukrainian_koi8-u.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/ukrainian_koi8-u.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/ukrainian_koi8-u.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/ukrainian_koi8-u.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,114 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the ukrainian language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2005 Yaroslav Fedevych
+# jaroslaw@nospam.kiev.ua
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => ' Ҧ',
+    'adminhome' => 'ͦ ͦΦ',
+    'staticpages' => 'Φ Ҧ',
+    'staticpageeditor' => '  Ҧ',
+    'writtenby' => '(-)',
+    'date' => 'Τ ',
+    'title' => '',
+    'content' => 'ͦ',
+    'hits' => '',
+    'staticpagelist' => '̦  Ҧ',
+    'url' => 'URL',
+    'edit' => '',
+    'lastupdated' => 'Τ ',
+    'pageformat' => ' Ҧ',
+    'leftrightblocks' => '   ',
+    'blankpage' => ' Ҧ',
+    'noblocks' => ' ˦',
+    'leftblocks' => ' ̦',
+    'addtomenu' => '  ',
+    'label' => '',
+    'nopages' => ' ͦ    Ҧ',
+    'save' => '',
+    'preview' => 'Φ ',
+    'delete' => '',
+    'cancel' => '',
+    'access_denied' => ' Ц צ',
+    'access_denied_msg' => '      Ҧ ͦΦ  Ҧ.  , ,  Ӧ ˦  ',
+    'all_html_allowed' => '  HTML',
+    'results' => '   Ҧ',
+    'author' => '',
+    'no_title_or_content' => ' Φ    <b></b>  <b>ͦ</b>.',
+    'no_such_page_logged_in' => ', '.$_USER['username'].'..',
+    'no_such_page_anon' => ' , Ħ Ťæ..',
+    'no_page_access_msg' => "    ,    Ť  ͦ,     {$_CONF['site_name']}.  , <a href=\"{$_CONF['site_url']}/users.php?mode=new\">ۦ  </a> {$_CONF['site_name']}     ",
+    'php_msg' => 'PHP: ',
+    'php_warn' => ':  PHP  ۦ Ҧæ ,   צ  æ.   Φ !!',
+    'exit_msg' => ' : ',
+    'exit_info' => 'צΦ  צ  ȦΦ Ťæ. ۦ צͦ  ϧ צ   צ.',
+    'deny_msg' => ' Ц  æ Ҧ צ.  Ҧ ͦ/,        ̦.',
+    'stats_headline' => ' Φ  Ҧ',
+    'stats_page_title' => ' Ҧ',
+    'stats_hits' => '',
+    'stats_no_hits' => ',  Ҧ   Ԧ ,   Φ   .',
+    'id' => 'Ʀ',
+    'duplicate_id' => '   æ ϧ Ҧ Ʀ,   դ.  , Ҧ  .',
+    'instructions' => '    ϧ Ҧ Φ    Ҧ.   ϧ Ҧ Φ   צ.   Ҧ Φ &laquo; Ҧ&raquo; . Φ [C]   Ц  ϧ Ҧ.',
+    'centerblock' => ' : ',
+    'centerblock_msg' => ' צͦ,   Ҧ      Φ Ҧæ.',
+    'topic' => ': ',
+    'position' => ': ',
+    'all_topics' => 'Ӧ',
+    'no_topic' => ' ͦ',
+    'position_top' => 'Ȧ Ҧ',
+    'position_feat' => ' ϧ Ԧ',
+    'position_bottom' => ' Ҧ',
+    'position_entire' => ' Ҧ',
+    'head_centerblock' => ' ',
+    'centerblock_no' => '',
+    'centerblock_top' => 'Ȧ',
+    'centerblock_feat' => ' ',
+    'centerblock_bottom' => '',
+    'centerblock_entire' => ' Ҧ',
+    'inblock_msg' => ' æ: ',
+    'inblock_info' => '  Ҧ  .',
+    'title_edit' => ' Ҧ',
+    'title_copy' => ' Ц æ Ҧ',
+    'title_display' => ' Ҧ',
+    'select_php_none' => '  PHP',
+    'select_php_return' => ' PHP ( )',
+    'select_php_free' => ' PHP',
+    'php_not_activated' => ' PHP   Ҧ  .   צ,  , <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">æ</a>.',
+    'printable_format' => '  ',
+    'edit' => 'Edit',
+    'copy' => 'Copy',
+    'limit_results' => 'Limit Results',
+    'search' => 'Search',
+    'submit' => 'Submit'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/ukrainian.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/ukrainian.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/ukrainian.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/ukrainian.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,114 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the ukrainian language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2005 Vitaliy Biliyenko
+# v.lokki@gmail.com
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => ' ',
+    'adminhome' => '',
+    'staticpages' => ' ',
+    'staticpageeditor' => '  ',
+    'writtenby' => '',
+    'date' => ' ',
+    'title' => '',
+    'content' => '',
+    'hits' => 'ճ',
+    'staticpagelist' => '  ',
+    'url' => 'URL',
+    'edit' => '',
+    'lastupdated' => ' ',
+    'pageformat' => ' ',
+    'leftrightblocks' => '˳   ',
+    'blankpage' => ' ',
+    'noblocks' => ' ',
+    'leftblocks' => '˳ ',
+    'addtomenu' => '  ',
+    'label' => '̳',
+    'nopages' => '     ',
+    'save' => '',
+    'preview' => '',
+    'delete' => '',
+    'cancel' => '',
+    'access_denied' => ' ',
+    'access_denied_msg' => '           .   , ,           ',
+    'all_html_allowed' => ' HTML ',
+    'results' => '   ',
+    'author' => '',
+    'no_title_or_content' => '     <b></b>  <b></b>.',
+    'no_such_page_logged_in' => ' '.$_USER['username'].'..',
+    'no_such_page_anon' => ' ,  ..',
+    'no_page_access_msg' => ",   ,    ,     {$_CONF['site_name']}.  , <a href=\"{$_CONF['site_url']}/users.php?mode=new\">  </a> {$_CONF['site_name']}    ",
+    'php_msg' => 'PHP: ',
+    'php_warn' => ': PHP          .  !!',
+    'exit_msg' => ' : ',
+    'exit_info' => '   .         .',
+    'deny_msg' => '    .    /,      .',
+    'stats_headline' => '10   ',
+    'stats_page_title' => ' ',
+    'stats_hits' => 'ճ',
+    'stats_no_hits' => '          .',
+    'id' => 'ID',
+    'duplicate_id' => '  ID     .  ,   ID.',
+    'instructions' => '     ,      .   ,    .     ,    .   ﳿ,    .',
+    'centerblock' => ' : ',
+    'centerblock_msg' => '  ,           .',
+    'topic' => ': ',
+    'position' => ': ',
+    'all_topics' => '',
+    'no_topic' => '  ',
+    'position_top' => ' ',
+    'position_feat' => 'ϳ  ',
+    'position_bottom' => ' ',
+    'position_entire' => '  ',
+    'head_centerblock' => ' ',
+    'centerblock_no' => 'ͳ',
+    'centerblock_top' => '',
+    'centerblock_feat' => '. ',
+    'centerblock_bottom' => '',
+    'centerblock_entire' => ' ',
+    'inblock_msg' => ' : ',
+    'inblock_info' => '    .',
+    'title_edit' => ' ',
+    'title_copy' => ' ',
+    'title_display' => ' ',
+    'select_php_none' => '  PHP',
+    'select_php_return' => ' PHP (return)',
+    'select_php_free' => ' PHP',
+    'php_not_activated' => ' PHP     .  ,   <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php"></a>  .',
+    'printable_format' => '  ',
+	'edit' => '',
+    'copy' => '',
+    'limit_results' => ' ',
+    'search' => '',
+    'submit' => '³'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/ukrainian_utf-8.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/ukrainian_utf-8.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/language/ukrainian_utf-8.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/language/ukrainian_utf-8.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,114 @@
+<?php
+
+###############################################################################
+# ukrainian.php
+# This is the ukrainian language page for the Geeklog Static Page Plug-in!
+#
+# Copyright (C) 2005 Yaroslav Fedevych
+# jaroslaw@nospam.kiev.ua
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+###############################################################################
+
+###############################################################################
+# Array Format: 
+# $LANGXX[YY]:	$LANG - variable name
+#		  	XX - file id number
+#			YY - phrase id number
+###############################################################################
+
+
+$LANG_STATIC= array(
+    'newpage' => 'Нова сторінка',
+    'adminhome' => 'Домівка адміністратора',
+    'staticpages' => 'Статичні сторінки',
+    'staticpageeditor' => 'Редактор статичних сторінок',
+    'writtenby' => 'Написав(-ла)',
+    'date' => 'Востаннє поновлено',
+    'title' => 'Назва',
+    'content' => 'Вміст',
+    'hits' => 'Звертань',
+    'staticpagelist' => 'Перелік статичних сторінок',
+    'url' => 'URL',
+    'edit' => 'Редагувати',
+    'lastupdated' => 'Востаннє поновлено',
+    'pageformat' => 'Формат сторінки',
+    'leftrightblocks' => 'Лівий та правий блоки',
+    'blankpage' => 'Чиста сторінка',
+    'noblocks' => 'Без блоків',
+    'leftblocks' => 'Блоки ліворуч',
+    'addtomenu' => 'Додати до меню',
+    'label' => 'Мітка',
+    'nopages' => 'В системі ще немає статичних сторінок',
+    'save' => 'зберегти',
+    'preview' => 'попередній перегляд',
+    'delete' => 'вилучити',
+    'cancel' => 'скасувати',
+    'access_denied' => 'В доступі відмовлено',
+    'access_denied_msg' => 'Ви намагаєтесь незаконно отримати доступ до сторінок адміністрування статичних сторінок. Будь ласка, зауважте, що всі такі спроби протоколюються',
+    'all_html_allowed' => 'Дозволено весь HTML',
+    'results' => 'Результати для статичних сторінок',
+    'author' => 'Автор',
+    'no_title_or_content' => 'Ви повинні заповнити щонайменше поля <b>Назва</b> та <b>Вміст</b>.',
+    'no_such_page_logged_in' => 'Пробачте, '.$_USER['username'].'..',
+    'no_such_page_anon' => 'Будь ласка, пройдіть реєстрацію..',
+    'no_page_access_msg' => "Це могло бути через те, що ви не зареєструвались у системі, або не є учасником {$_CONF['site_name']}. Будь ласка, <a href=\"{$_CONF['site_url']}/users.php?mode=new\">запишіться як учасник</a> {$_CONF['site_name']} для отримання повного членського доступу",
+    'php_msg' => 'PHP: ',
+    'php_warn' => 'Увага: код PHP у вашій сторінці обчислюватиметься, якщо ви ввімкнете цю опцію. Використовуйте з обережністю !!',
+    'exit_msg' => 'Тип виходу: ',
+    'exit_info' => 'Увімкніть для повідомлення про необхідність реєстрації. Залишіть невідміченим для звичайної перевірки безпеки й повідомлення.',
+    'deny_msg' => 'В доступі до цієї сторінки відмовлено. Або сторінку перемістили/вилучили, або ж у вас недостатньо для цього дозволів.',
+    'stats_headline' => 'Десятка найпопулярніших статичних сторінок',
+    'stats_page_title' => 'Назва сторінки',
+    'stats_hits' => 'Звернень',
+    'stats_no_hits' => 'Схоже, статичних сторінок на цьому сайті немає, або ж ніхто їх не переглядав.',
+    'id' => 'Ідентифікатор',
+    'duplicate_id' => 'Ви обрали для цієї статичної сторінки ідентифікатор, що вже використовується. Будь ласка, виберіть якийсь інакший.',
+    'instructions' => 'Для виправлення чи вилучення статичної сторінки клацніть нижче на її номері. Для перегляду статичної сторінки клацніть на її назві. Для створення сторінки клацніть &laquo;Нова сторінка&raquo; вище. Клацніть [C] для створення копії вже наявної сторінки.',
+    'centerblock' => 'Центральний блок: ',
+    'centerblock_msg' => 'Якщо відмітити, ця статична сторінка показуватиметься як центральний блок на головній сторінці.',
+    'topic' => 'Тема: ',
+    'position' => 'Розташування: ',
+    'all_topics' => 'Всі',
+    'no_topic' => 'Лише домівка',
+    'position_top' => 'Верхівка сторінки',
+    'position_feat' => 'Після вираної статті',
+    'position_bottom' => 'Низ сторінки',
+    'position_entire' => 'Вся сторінка',
+    'head_centerblock' => 'Центральний блок',
+    'centerblock_no' => 'Немає',
+    'centerblock_top' => 'Верхівка',
+    'centerblock_feat' => 'Вибрана стаття',
+    'centerblock_bottom' => 'Низ',
+    'centerblock_entire' => 'Ціла сторінка',
+    'inblock_msg' => 'В блоці: ',
+    'inblock_info' => 'Загорнути статичну сторінку в блок.',
+    'title_edit' => 'Виправити сторінку',
+    'title_copy' => 'Зробити копію цієї сторінки',
+    'title_display' => 'Показувати сторінку',
+    'select_php_none' => 'не виконувати PHP',
+    'select_php_return' => 'виконати PHP (з поверненням)',
+    'select_php_free' => 'виконати PHP',
+    'php_not_activated' => 'Використання PHP на статичних сторінках не активовано. За подробицями дивіться, будь ласка, <a href="' . $_CONF['site_url'] . '/docs/staticpages.html#php">документацію</a>.',
+    'printable_format' => 'Формат для друку',
+    'edit' => 'Edit',
+    'copy' => 'Copy',
+    'limit_results' => 'Limit Results',
+    'search' => 'Search',
+    'submit' => 'Submit'
+);
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/README 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/README
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/README	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/README	1969-12-31 18:00:00.000000000 -0600
@@ -1,149 +0,0 @@
-Static Pages Geeklog Plug-in version 1.0
-March 8th, 2002
-
-In This Document
-----------------
-
-Welcome
-List of Files with Descriptions
-License
-Support
-How To Help
-Known Issues
-System Requirements and Installation
-Security Issues
-Uninstalling
-Special Thanks
-
-Welcome
--------
-This Static Page Geeklog Plug-in is the source code and database that is used to 
-for creating semi-static pages in Geeklog quickly.  Like Geeklog this 
-has is released under the GNU General Public License. It is a bona fide Open 
-Source / Free Software project. 
-
-The Static Page Geeklog Plugin-in is managed by Tony Bibbs
-Like all good open source projects, Geeklog and this plug-in both depend on the 
-community. Thanks for your continued support, and let us know what we can 
-do to make Geeklog and the Static Page Plug-in even better.
-
-The Static Page GeekLog Plug-in features the following:
-
-- Runs on Geeklog version 1.3.4
-- 100% database driven
-- Automatically displays the last time a pages was updated after changes (unless blank page option is used).
-- Let's you pick if the left or right blocks (or both) show up on a static page or, if you prefer, you can create an
-  HTML page from scratch
-- Uses the Geeklog security model to control who can edit a page
-- Automatically generates the URL for pages for easy pasting into a template or
-  or HTML file
-- Great for creating security policies, about us pages and other static content.
-
-LIST OF FILES WITH DESCRIPTIONS
--------------------------------
-
-FILE: /path/to/geeklog/public_html/admin/plugins/staticpages/install.php 
-DESCRIPTION: Static Page install and uninstall untility. 
-
-FILE: /path/to/geeklog/public_html/admin/plugins/staticpages/index.php 
-DESCRIPTION: Static Page administration page 
-
-FILE: /path/to/geeklog/public_html/staticpages/index.php 
-DESCRIPTION: Core static page code
-
-FILE: /path/to/geeklog/plugins/staticpages/staticpages.cfg
-DESCRIPTION: The static pages configuration file 
-
-FILE: /path/to/geeklog/plugins/staticpages/functions.inc
-DESCRIPTION: Implements the Geeklog Plugin-API and has any common functions 
-
-LICENSE
--------
-Like GeekLog, the Static Page Plug-in is licensed under the: GPL. There should be an included LICENSE file
-if it really interests you (or you having trouble sleeping) go ahead a read it.
-
-In a nice gesture you could provide a link back to Geeklog and the Static Page Geeklog Plug-in: 
-
-http://www.geeklog.net/
-http://sourceforge.net/projects/geeklogplugins
-
-SUPPORT
--------
-The best support channel is a mailing list located at:
-http://lists.geeklog.net/listinfo/geeklog-users.
-
-Additionally the GeekLog home page is a good source of information at:
-http://www.geeklog.net
-
-Finally, you can catch most of the developers in IRC at:
-irc.freenode.net
-#Geeklog
-
-HOW TO HELP
------------
-If you would like to help make the Static Pages Geeklog Plug-in even better 
-please feel free to contribute bug fixes and submit enhancement requests
-to the Geeklog website.  This is the first release and it has a long way
-before it is 'polished' and I realize that.
-
-KNOWN ISSUES
-------------
-May want to enhance the security so that each page is assigned an owner/group and 
-associated permissions just like Geeklog stories/blocks/etc do it.  I am speaking from
-the user's perspective, NOT the admin's perspective.  Administrative security already
-uses the Geeklog security model.
-
-SYSTEM REQUIREMENTS AND INSTALLATION
-------------------------------------
-You must install this plugin-in with a version of Geeklog version 1.3.4. You can get this
-plugin to work with Geeklog 1.3 through 1.3.3 by downloading the latest admin/plugins.php and
-getting the update templates for layout/<theme_name/admin/plugins/pluginlist.thtml. This is gauranted
-not to work with any version prior to Geeklog 1.3.
-
-To install:
-1) Download the tarball and put it in /path/to/geeklog/plugins
-2) uncompress the tarball
-3) Change into the newly created staticpages directory
-4) Move the staticpages/admin directory to /path/to/geeklog/public_html/admin/plugins/staticpages/
-   NOTE: you must use that directory name
-5) Move the staticpages/public_html directory to /path/to/geeklog/public_html/staticpages/
-   NOTE: you must use that directory name
-6) In your browser, go to http://your_geeklog_url/admin/plugins/staticpages/install.php
-7) You should get a message that your the datastructures have been created
-8) That's it!
-
-UNINSTALLING
-------------
-1) Execute this in your database client:
-        ALTER TABLE <vars_table> SET value = '0' WHERE name = 'staticpages'
-   Be sure to substitute <vars_table> with the name of your Geeklog vars table
-2) In your browser, navigate to http://your_geeklog_url/admin/plugins/staticpages/install.php
-3) You should get a message saying the data structure were successfully removed.
-4) Remove the following directories:
-         /path/to/geeklog/plugins/staticpages/
-         /path/to/geeklog/public_html/staticpages/
-         /path/to/geeklog/public_html/admin/plugins/staticpages/
-5) that's it!
-
-SECURITY ISSUES
----------------
-It is up to you to properly secure your database, web server and host
-settings.  If you are looking for information in securing your system
-some starting points I can recommend are:
-
-http://www.php.net
-http://www.mysql.com
-http://www.apache.org
-http://www.devshed.com
-http://www.securityfocus.com
-http://www.linux.com
-
-SPECIAL THANKS
---------------
-
-I want to send out thanks to the great people on the geeklog-devel mailing list for helping us make
-a great plug-in!
-
-
-ENJOY!
-
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/sql/install.php 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/sql/install.php
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/sql/install.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/sql/install.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Static Pages Plugin 1.4.2                                                 |
+// +---------------------------------------------------------------------------+
+// | Installation SQL                                                          |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Tom Willett      - twillett AT users DOT sourceforge DOT net     |
+// |          Blaine Lang      - langmail AT sympatico DOT ca                  |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is licensed under the terms of the GNU General Public License|
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                      |
+// | See the GNU General Public License for more details.                      |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: install.php,v 1.1 2005/11/13 13:46:06 dhaun Exp $
+
+$_SQL[] = "
+CREATE TABLE {$_TABLES['staticpage']} (
+  sp_id varchar(40) NOT NULL default '',
+  sp_uid mediumint(8) NOT NULL default '1',
+  sp_title varchar(128) NOT NULL default '',
+  sp_content text NOT NULL, 
+  sp_hits mediumint(8) unsigned NOT NULL default '0',
+  sp_date datetime NOT NULL default '0000-00-00 00:00:00',
+  sp_format varchar(20) NOT NULL default '',
+  sp_onmenu tinyint(1) unsigned NOT NULL default '0',
+  sp_label varchar(64) default NULL,
+  owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
+  perm_owner tinyint(1) unsigned NOT NULL default '3',
+  perm_group tinyint(1) unsigned NOT NULL default '2',
+  perm_members tinyint(1) unsigned NOT NULL default '2',
+  perm_anon tinyint(1) unsigned NOT NULL default '2',
+  sp_centerblock tinyint(1) unsigned NOT NULL default '0',
+  sp_tid varchar(20) NOT NULL default 'none',
+  sp_where tinyint(1) unsigned NOT NULL default '1',
+  sp_php tinyint(1) unsigned NOT NULL default '0',
+  sp_nf tinyint(1) unsigned default '0',
+  sp_inblock tinyint(1) unsigned default '1',
+  PRIMARY KEY  (sp_id),
+  KEY staticpage_sp_uid (sp_uid),
+  KEY staticpage_sp_date (sp_date),
+  KEY staticpage_sp_onmenu (sp_onmenu),
+  KEY staticpage_sp_centerblock (sp_centerblock),
+  KEY staticpage_sp_tid (sp_tid),
+  KEY staticpage_sp_where (sp_where)
+) TYPE=MyISAM
+";
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/editor_advanced.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/editor_advanced.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/editor_advanced.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/editor_advanced.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,149 @@
+<script type="text/javascript">
+    // Setup editor path for FCKeditor JS Functions
+    geeklogEditorBasePath = "{site_url}/fckeditor/" ;
+</script>
+<script type="text/JavaScript" src="{site_url}/javascript/staticpages_fckeditor.js"></script>
+
+  {start_block_editor}
+  <form action="{site_admin_url}/plugins/staticpages/index.php" method="post">
+      <table border="0" cellspacing="0" cellpadding="3" width="100%">
+          <tr>
+              <td align="right">{lang_title}:</td>
+              <td><input type="text" size="48" maxlength="255" name="sp_title" value="{sp_title}"></td>
+          </tr>
+          <tr>
+              <td align="right">{lang_addtomenu}:</td>
+              <td>
+                  <input type="checkbox" name="sp_onmenu" {onmenu_checked}>&nbsp;&nbsp;{lang_label}:
+                  <input type="text" name="sp_label" size="48" maxlength="64" value="{sp_label}">
+              </td>
+          </tr>
+          <tr>
+              <td align="right">{lang_pageformat}:</td>
+              <td>
+                  <select name="sp_format">
+                      <option value="blankpage" {blankpage_selected}>{lang_blankpage}</option>
+                      <option value="noblocks" {noblock_selected}>{lang_noblocks}</option>
+                      <option value="leftblocks" {leftblocks_selected}>{lang_leftblocks}</option>
+                      <option value="allblocks" {allblocks_selected}>{lang_leftrightblocks}</option>
+                  </select>
+              </td>
+          </tr>
+          <tr>
+            <td align="right">{lang_id}:</td>
+            <td><input type="text" name="sp_id" size="40" maxlength="40" value="{sp_id}"></td>
+          </tr>
+          <tr>
+            <td style="text-align:right;padding-bottom:15px;">{lang_url}:</td>
+            <td style="padding-bottom:15px;">{example_url}</td>
+          </tr>
+           <tr>
+                  <td style="text-align:right;vertical-align:top;padding-top:10px;border-top:1px solid #CCC;">{lang_content}</td>
+               <td style="padding-top:10px;border-top:1px solid #CCC;">
+               <div style="padding-left:10px;">
+                    <img src="{layout_url}/images/expand.gif" border="0" TITLE="{lang_expandhelp}" onclick="changeHTMLAreaSize('larger');">
+                    <span style="padding-left:15px;"><img src="{layout_url}/images/collapse.gif" border="0" TITLE="{lang_reducehelp}" onclick="changeHTMLAreaSize('smaller');"></span>
+                     <!-- BL: Not supported yet. Works in Firefox but not in IE
+                    <span style="padding-left:15px;">{lang_toolbar}:&nbsp;
+                      <select id="fckeditor_toolbar_selector" name="fckeditor_toolbar_selector" onchange="changeToolbar(this.value);">
+                           <option value="editor-toolbar1">{toolbar1}</option>
+                           <option value="editor-toolbar2">{toolbar2}</option>
+                           <option value="editor-toolbar3">{toolbar3}</option>
+                           <option value="editor-toolbar4">{toolbar4}</option>
+                           <option value="Default">{toolbar5}</option>
+                      </select>
+                    </span>
+                    -->
+                  <div style="margin-top:10px;border:1px solid #CCC;">
+                      <textarea id="sp_content" name="sp_content" cols="75" rows="24" wrap="virtual">{sp_content}</textarea>
+                  </div>
+                  <br><span class="warningsmall">{lang_allowedhtml}</span><br><br>
+               </div>
+              </td>
+           </tr>
+          <tr>
+              <td align="right">{lang_writtenby}:</td>
+              <td>{username}<input type="hidden" name="sp_uid" value="{sp_uid}"></td>
+          </tr>
+          <tr>
+              <td align="right">{lang_lastupdated}:</td>
+              <td>{sp_formateddate}<input type="hidden" name="unixdate" value="{sp_date}"></td>
+          </tr>
+          <tr>
+              <td colspan="2"><hr></td>
+          </tr>
+          <tr>
+              <td align="right" valign="top">{lang_centerblock}</td>
+              <td valign="top"><input type="checkbox" name="sp_centerblock" {centerblock_checked}>&nbsp;&nbsp;{lang_centerblock_msg}</td>
+          </tr>
+          <tr>
+              <td align="right">{lang_position}</td>
+              <td>{pos_selection}&nbsp;&nbsp;&nbsp;{lang_topic}&nbsp;&nbsp;{topic_selection}</td>
+          </tr>
+          <tr>
+              <td colspan="2"><hr></td>
+          </tr>
+          <tr>
+              <td align="right" valign="top">{inblock_msg}</td>
+              <td valign="top"><input type="checkbox" name="sp_inblock" {inblock_checked}>&nbsp;&nbsp;{inblock_info}</td>
+          </tr>
+          <tr>
+              <td align="right" valign="top">{php_msg}</td>
+              <td valign="top">{php_selector}&nbsp;&nbsp;{php_warn}</td>
+          </tr>
+          <tr>
+              <td align="right" valign="top">{exit_msg}</td>
+              <td valign="top"><input type="checkbox" name="sp_nf" {exit_checked}>&nbsp;&nbsp;{exit_info}</td>
+          </tr>
+          <tr>
+              <td colspan="2"><hr></td>
+          </tr>
+          <tr>
+              <td colspan="2"><b>{lang_accessrights}<b></td>
+          </tr>
+          <tr>
+              <td align="right">{lang_owner}:</td>
+              <td>{owner_username}<input type="hidden" name="owner_id" value="{owner_id}"></td>
+          </tr>
+          <tr>
+              <td align="right">{lang_group}:</td>
+              <td>
+                  {group_dropdown}
+              </td>
+          </tr>
+          <tr>
+              <td colspan="2"><b>{lang_permissions}</b>:</td>
+          </tr>
+          <tr>
+              <td colspan="2"></td>
+          </tr>
+          <tr>
+              <td colspan="2">{lang_perm_key}</td>
+          </tr>
+          <tr>
+              <td colspan="2">
+              {permissions_editor}
+              </td>
+          </tr>
+          <tr>
+              <td colspan="2">{permissions_msg}<td>
+          </tr>
+          <tr>
+              <td colspan="2"><hr><td>
+          </tr>
+          <tr>
+              <td align="right">{lang_hits}:</td>
+              <td><input type="hidden" name="sp_hits" value="{sp_hits}">{sp_hits_formatted}</td>
+          </tr>
+          <tr><td>&nbsp;</td></tr>
+          <tr>
+              <td colspan="2">
+                  <input type="submit" value="{lang_save}" name="mode"> 
+                  <input type="submit" value="{lang_cancel}" name="mode"> 
+                  {delete_option}
+                  <input type="hidden" name="sp_old_id" value="{sp_old_id}">
+              </td>
+          </tr>
+      </table>
+  </form>
+  {end_block}
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/editor.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/editor.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/editor.thtml	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/editor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -62,7 +62,7 @@
           </tr>
           <tr>
               <td align="right" valign="top">{inblock_msg}</td>
-              <td valign="top"><input type="checkbox" name="sp_inblock" value="1" {inblock_checked}>&nbsp;&nbsp;{inblock_info}</td>
+              <td valign="top"><input type="checkbox" name="sp_inblock" {inblock_checked}>&nbsp;&nbsp;{inblock_info}</td>
           </tr>
           <tr>
               <td align="right" valign="top">{php_msg}</td>
@@ -70,7 +70,7 @@
           </tr>
           <tr>
               <td align="right" valign="top">{exit_msg}</td>
-              <td valign="top"><input type="checkbox" name="sp_nf" value="1" {exit_checked}>&nbsp;&nbsp;{exit_info}</td>
+              <td valign="top"><input type="checkbox" name="sp_nf" {exit_checked}>&nbsp;&nbsp;{exit_info}</td>
           </tr>
           <tr>
               <td colspan="2"><hr></td>
@@ -110,7 +110,7 @@
           </tr>
           <tr>
               <td align="right">{lang_hits}:</td>
-              <td><input type="hidden" name="sp_hits" value="{sp_hits}">{sp_hits}</td>
+              <td><input type="hidden" name="sp_hits" value="{sp_hits}">{sp_hits_formatted}</td>
           </tr>
           <tr><td>&nbsp;</td></tr>
           <tr>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/list.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/list.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/list.thtml	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/list.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,25 +0,0 @@
-  {start_block_list}
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr>
-          <td rowspan="2">
-              <img src="{site_url}/staticpages/images/staticpages.gif">
-          </td>
-          <td>[ <a href="{new_page_url}">{lang_newpage}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-      </tr>
-      <tr>
-          <td>{lang_instructions}</td>
-      </tr>
-  </table>
-  <table cellpadding="0" cellspacing="3" border="0" width="100%">
-      <tr>
-          <th align="left" colspan="2">#</th>
-          <th align="left">{lang_title}</th>
-          <th>{lang_centerblock}</th>
-          <th>{lang_writtenby}</th>
-          <th>{lang_lastupdated}</th>
-      </tr>
-      {list_item} 
-      <tr><td colspan="4">{lang_nopages_msg}</td></tr>
-  </table>
-  {google_paging}
-  {end_block}
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/row.thtml 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/row.thtml
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/templates/admin/row.thtml	2004-12-31 10:03:32.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/templates/admin/row.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
-    <tr align="center">
-        <td align="left">
-            <a href="{page_edit_url}" title="{lang_title_edit}">{row_number}</a>
-        </td>
-        <td align="left">
-            [<a href="{page_clone_url}" title="{lang_title_copy}">C</a>]
-        </td>
-        <td align="left">
-            <a href="{page_display_url}" title="{lang_title_display}">{sp_title}</a>
-        </td>
-        <td>{sp_centerblock}</td>
-        <td>{username}</td>
-        <td>{sp_date}</td>
-    </tr>
diff -ruN 1.3.11sr1/cpanel-glprivate/plugins/staticpages/TO-DO 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/TO-DO
--- 1.3.11sr1/cpanel-glprivate/plugins/staticpages/TO-DO	2004-12-31 10:03:33.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/plugins/staticpages/TO-DO	1969-12-31 18:00:00.000000000 -0600
@@ -1,8 +0,0 @@
-Static Pages Geeklog Plugin 0.1.0
----------------------------------
-
-1) Integrate a bb-code style system as opposed to using HTML.
-2) May want to make this part of the core GL code-base and have it so that users can have a personal page...something like http://www.example.com/userpage.php?uid=1
-3) May want to implement the same security on each individual page as you would for stories, links, etc.
-3) Anything else?  Email suggestions on how this plugin could be made better to Tony Bibbs at tony@tonybibbs.com
-
diff -ruN 1.3.11sr1/cpanel-glprivate/sql/mysql_tableanddata.php 1.4.0sr5-1/cpanel-glprivate/sql/mysql_tableanddata.php
--- 1.3.11sr1/cpanel-glprivate/sql/mysql_tableanddata.php	2004-12-31 10:02:23.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/sql/mysql_tableanddata.php	2006-08-08 02:39:06.000000000 -0500
@@ -20,11 +20,12 @@
   content text,
   rdfurl varchar(255) default NULL,
   rdfupdated datetime NOT NULL default '0000-00-00 00:00:00',
+  rdflimit smallint(5) unsigned NOT NULL default '0',
   onleft tinyint(3) unsigned NOT NULL default '1',
   phpblockfn varchar(64) default '',
   help varchar(128) default '',
-  group_id mediumint(8) unsigned NOT NULL default '1',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
   perm_group tinyint(1) unsigned NOT NULL default '3',
   perm_members tinyint(1) unsigned NOT NULL default '2',
@@ -75,6 +76,7 @@
   INDEX comments_uid(uid),
   INDEX comments_lft(lft),
   INDEX comments_rht(rht),
+  INDEX comments_date(date),
   PRIMARY KEY  (cid)
 ) TYPE=MyISAM
 ";
@@ -101,11 +103,13 @@
   eid varchar(20) NOT NULL default '',
   title varchar(128) default NULL,
   description text,
+  postmode varchar(10) NOT NULL default 'plaintext',
   datestart date default NULL,
   dateend date default NULL,
   url varchar(255) default NULL,
-  group_id mediumint(8) unsigned NOT NULL default '1',
+  hits mediumint(8) unsigned NOT NULL default '0',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
   perm_group tinyint(1) unsigned NOT NULL default '3',
   perm_members tinyint(1) unsigned NOT NULL default '2',
@@ -122,6 +126,8 @@
   timeend time default NULL,
   INDEX events_eid(eid),
   INDEX events_event_type(event_type),
+  INDEX events_datestart(datestart),
+  INDEX events_dateend(dateend),
   PRIMARY KEY  (eid)
 ) TYPE=MyISAM
 ";
@@ -181,6 +187,7 @@
   ug_uid mediumint(8) unsigned default NULL,
   ug_grp_id mediumint(8) unsigned default NULL,
   INDEX group_assignments_ug_main_grp_id(ug_main_grp_id),
+  INDEX group_assignments_ug_uid(ug_uid),
   KEY ug_main_grp_id (ug_main_grp_id)
 ) TYPE=MyISAM
 ";
@@ -192,33 +199,35 @@
   grp_descr varchar(255) NOT NULL default '',
   grp_gl_core tinyint(1) unsigned NOT NULL default '0',
   PRIMARY KEY  (grp_id),
-  KEY grp_name (grp_name)
+  UNIQUE grp_name (grp_name)
 ) TYPE=MyISAM
 ";
 
 $_SQL[15] = "
 CREATE TABLE {$_TABLES['links']} (
-  lid varchar(20) NOT NULL default '',
+  lid varchar(40) NOT NULL default '',
   category varchar(32) default NULL,
   url varchar(255) default NULL,
   description text,
   title varchar(96) default NULL,
   hits int(11) NOT NULL default '0',
   date datetime default NULL,
-  group_id mediumint(8) unsigned NOT NULL default '1',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
-  perm_group tinyint(1) unsigned NOT NULL default '3',
+  perm_group tinyint(1) unsigned NOT NULL default '2',
   perm_members tinyint(1) unsigned NOT NULL default '2',
   perm_anon tinyint(1) unsigned NOT NULL default '2',
   INDEX links_lid(lid),
+  INDEX links_category(category),
+  INDEX links_date(date),
   PRIMARY KEY  (lid)
 ) TYPE=MyISAM
 ";
 
 $_SQL[16] = "
 CREATE TABLE {$_TABLES['linksubmission']} (
-  lid varchar(20) NOT NULL default '',
+  lid varchar(40) NOT NULL default '',
   category varchar(32) default NULL,
   url varchar(255) default NULL,
   description text,
@@ -252,8 +261,9 @@
   allday tinyint(1) NOT NULL default '0',
   url varchar(255) default NULL,
   description text,
-  group_id mediumint(8) unsigned NOT NULL default '1',
+  postmode varchar(10) NOT NULL default 'plaintext',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
   perm_group tinyint(1) unsigned NOT NULL default '3',
   perm_members tinyint(1) unsigned NOT NULL default '2',
@@ -297,8 +307,8 @@
   display tinyint(4) NOT NULL default '0',
   commentcode tinyint(4) NOT NULL default '0',
   statuscode tinyint(4) NOT NULL default '0',
-  group_id mediumint(8) unsigned NOT NULL default '1',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
   perm_group tinyint(1) unsigned NOT NULL default '3',
   perm_members tinyint(1) unsigned NOT NULL default '2',
@@ -307,6 +317,7 @@
   INDEX pollquestions_display(display),
   INDEX pollquestions_commentcode(commentcode),
   INDEX pollquestions_statuscode(statuscode),
+  INDEX pollquestions_date(date),
   PRIMARY KEY  (qid)
 ) TYPE=MyISAM
 ";
@@ -354,10 +365,12 @@
 $_SQL[26] = "
 CREATE TABLE {$_TABLES['speedlimit']} (
   id int(10) unsigned NOT NULL auto_increment,
-  ipaddress varchar(15) NOT NULL default '', 
+  ipaddress varchar(15) NOT NULL default '',
   date int(10) unsigned default NULL,
   type varchar(30) NOT NULL default 'submit',
-  PRIMARY KEY (id) 
+  PRIMARY KEY (id),
+  KEY type_ipaddress (type,ipaddress),
+  KEY date (date)
 ) TYPE = MyISAM
 ";
 
@@ -382,14 +395,17 @@
   hits mediumint(8) unsigned NOT NULL default '0',
   numemails mediumint(8) unsigned NOT NULL default '0',
   comments mediumint(8) unsigned NOT NULL default '0',
+  trackbacks mediumint(8) unsigned NOT NULL default '0',
   related text,
   featured tinyint(3) unsigned NOT NULL default '0',
   show_topic_icon tinyint(1) unsigned NOT NULL default '1',
   commentcode tinyint(4) NOT NULL default '0',
+  trackbackcode tinyint(4) NOT NULL default '0',
   statuscode tinyint(4) NOT NULL default '0',
-  expire DATETIME NOT NULL,
+  expire DATETIME NOT NULL default '0000-00-00 00:00:00',
   postmode varchar(10) NOT NULL default 'html',
   frontpage tinyint(3) unsigned default '1',
+  in_transit tinyint(1) unsigned default '0',
   owner_id mediumint(8) NOT NULL default '1',
   group_id mediumint(8) NOT NULL default '2',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
@@ -403,6 +419,9 @@
   INDEX stories_hits(hits),
   INDEX stories_statuscode(statuscode),
   INDEX stories_expire(expire),
+  INDEX stories_date(date),
+  INDEX stories_frontpage(frontpage),
+  INDEX stories_in_transit(in_transit),
   PRIMARY KEY  (sid)
 ) TYPE=MyISAM
 ";
@@ -425,12 +444,14 @@
   fid int(10) unsigned NOT NULL auto_increment,
   type varchar(30) NOT NULL default 'geeklog',
   topic varchar(48) NOT NULL default '::all',
-  format varchar(20) NOT NULL default 'rss',
+  header_tid varchar(48) NOT NULL default 'none',
+  format varchar(20) NOT NULL default 'RSS-2.0',
   limits varchar(5) NOT NULL default '10',
   content_length smallint(5) unsigned NOT NULL default '0',
   title varchar(40) NOT NULL default '',
   description text,
-  filename varchar(40) NOT NULL default 'geeklog.rdf',
+  feedlogo varchar(255),
+  filename varchar(40) NOT NULL default 'geeklog.rss',
   charset varchar(20) NOT NULL default 'UTF-8',
   language varchar(20) NOT NULL default 'en-gb',
   is_enabled tinyint(1) unsigned NOT NULL default '1',
@@ -453,8 +474,8 @@
   limitnews tinyint(3) default NULL,
   is_default tinyint(1) unsigned NOT NULL DEFAULT '0',
   archive_flag tinyint(1) unsigned NOT NULL DEFAULT '0',
-  group_id mediumint(8) unsigned NOT NULL default '1',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
   perm_group tinyint(1) unsigned NOT NULL default '3',
   perm_members tinyint(1) unsigned NOT NULL default '2',
@@ -486,13 +507,14 @@
 CREATE TABLE {$_TABLES['userindex']} (
   uid mediumint(8) NOT NULL default '1',
   tids varchar(255) NOT NULL default '',
-  etids varchar(255) NOT NULL default '',
+  etids text,
   aids varchar(255) NOT NULL default '',
   boxes varchar(255) NOT NULL default '',
   noboxes tinyint(4) NOT NULL default '0',
   maxstories tinyint(4) default NULL,
   INDEX userindex_uid(uid),
   INDEX userindex_noboxes(noboxes),
+  INDEX userindex_maxstories(maxstories),
   PRIMARY KEY  (uid)
 ) TYPE=MyISAM
 ";
@@ -531,6 +553,8 @@
 CREATE TABLE {$_TABLES['users']} (
   uid mediumint(8) NOT NULL auto_increment,
   username varchar(16) NOT NULL default '',
+  remoteusername varchar(60) NULL,
+  remoteservice varchar(60) NULL,
   fullname varchar(80) default NULL,
   passwd varchar(32) NOT NULL default '',
   email varchar(96) default NULL,
@@ -542,8 +566,14 @@
   theme varchar(64) default NULL,
   language varchar(64) default NULL,
   pwrequestid varchar(16) default NULL,
+  status smallint(5) unsigned NOT NULL default '1',
   PRIMARY KEY  (uid),
-  KEY LOGIN (uid,passwd,username)
+  KEY LOGIN (uid,passwd,username),
+  INDEX users_username(username),
+  INDEX users_fullname(fullname),
+  INDEX users_email(email),
+  INDEX users_passwd(passwd),
+  INDEX users_pwrequestid(pwrequestid)
 ) TYPE=MyISAM
 ";
 
@@ -565,6 +595,38 @@
 ";
 
 $_SQL[40] = "
+CREATE TABLE {$_TABLES['trackback']} (
+  cid int(10) unsigned NOT NULL auto_increment,
+  sid varchar(40) NOT NULL,
+  url varchar(255) default NULL,
+  title varchar(128) default NULL,
+  blog varchar(80) default NULL,
+  excerpt text,
+  date datetime default NULL,
+  type varchar(30) NOT NULL default 'article',
+  ipaddress varchar(15) NOT NULL default '',
+  PRIMARY KEY (cid),
+  INDEX trackback_sid(sid),
+  INDEX trackback_url(url),
+  INDEX trackback_type(type),
+  INDEX trackback_date(date)
+) TYPE=MyISAM
+";
+
+$_SQL[41] = "
+CREATE TABLE {$_TABLES['pingservice']} (
+  pid smallint(5) unsigned NOT NULL auto_increment,
+  name varchar(128) default NULL,
+  ping_url varchar(255) default NULL,
+  site_url varchar(255) default NULL,
+  method varchar(80) default NULL,
+  is_enabled tinyint(1) unsigned NOT NULL DEFAULT '1',
+  PRIMARY KEY (pid),
+  INDEX pingservice_is_enabled(is_enabled)
+) TYPE=MyISAM
+";
+
+$_SQL[42] = "
 CREATE TABLE {$_TABLES['staticpage']} (
   sp_id varchar(40) NOT NULL default '',
   sp_uid mediumint(8) NOT NULL default '1',
@@ -575,8 +637,8 @@
   sp_format varchar(20) NOT NULL default '',
   sp_onmenu tinyint(1) unsigned NOT NULL default '0',
   sp_label varchar(64) default NULL,
-  group_id mediumint(8) unsigned NOT NULL default '1',
   owner_id mediumint(8) unsigned NOT NULL default '1',
+  group_id mediumint(8) unsigned NOT NULL default '1',
   perm_owner tinyint(1) unsigned NOT NULL default '3',
   perm_group tinyint(1) unsigned NOT NULL default '2',
   perm_members tinyint(1) unsigned NOT NULL default '2',
@@ -596,8 +658,8 @@
   KEY staticpage_sp_where (sp_where)
 ) TYPE=MyISAM
 ";
- 
-$_SQL[41] = "
+
+$_SQL[43] = "
 CREATE TABLE {$_TABLES['spamx']} (
   name varchar(20) NOT NULL default '',
   value varchar(255) NOT NULL default '',
@@ -605,6 +667,14 @@
 ) TYPE=MyISAM
 ";
 
+$_SQL[44] = "
+CREATE TABLE {$_TABLES['trackbackcodes']} (
+  code tinyint(4) NOT NULL default '0',
+  name varchar(32) default NULL,
+  PRIMARY KEY  (code)
+) TYPE=MyISAM
+";
+
 $_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (1,3) ";
 $_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (2,3) ";
 $_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (3,5) ";
@@ -626,11 +696,12 @@
 $_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (17,14) ";
 $_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (18,14) ";
 $_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (23,15) ";
+$_DATA[] = "INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES (24,3) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (1,1,'user_block','gldefault','User Functions','all',2,'','','0000-00-00 00:00:00',1,'',1,2,3,3,2,2) ";
 $_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (2,1,'admin_block','gldefault','Admins Only','all',1,'','','0000-00-00 00:00:00',1,'',1,2,3,3,2,2) ";
 $_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (3,1,'section_block','gldefault','Topics','all',0,'','','0000-00-00 00:00:00',1,'',1,2,3,3,2,2) ";
-$_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (4,1,'poll_block','gldefault','Poll','all',2,'','','0000-00-00 00:00:00',0,'',1,2,3,3,2,2) ";
+$_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (4,1,'polls_block','phpblock','Poll','all',2,'','','0000-00-00 00:00:00',0,'phpblock_polls',1,2,3,3,2,2) ";
 $_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (5,1,'events_block','gldefault','Events','all',4,'','','0000-00-00 00:00:00',1,'',1,2,3,3,2,2) ";
 $_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (6,1,'whats_new_block','gldefault','What\'s New','all',3,'','','0000-00-00 00:00:00',0,'',1,2,3,3,2,2) ";
 $_DATA[] = "INSERT INTO {$_TABLES['blocks']} (bid, is_enabled, name, type, title, tid, blockorder, content, rdfurl, rdfupdated, onleft, phpblockfn, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES (7,1,'first_block','normal','About GeekLog','homeonly',1,'<p><b>Welcome to GeekLog!</b><p>If you\'re already familiar with GeekLog - and especially if you\'re not: There have been many improvements to GeekLog since earlier versions that you might want to read up on. Please read the <a href=\"docs/changes.html\">release notes</a>. If you need help, please see the <a href=\"docs/support.html\">support options</a>.','','0000-00-00 00:00:00',0,'',4,2,3,3,2,2) ";
@@ -674,23 +745,20 @@
 $_DATA[] = "INSERT INTO {$_TABLES['dateformats']} (dfid, format, description) VALUES (17,'%d/%m/%y %H:%M','21/03/99 22:00') ";
 $_DATA[] = "INSERT INTO {$_TABLES['dateformats']} (dfid, format, description) VALUES (18,'%a %d %b %I:%M%p','Sun 21 Mar 10:00PM') ";
 
-$_DATA[] = "INSERT INTO {$_TABLES['eventsubmission']} (eid, title, description, location, datestart, dateend, url, allday, zipcode, state, city, address2, address1, event_type, timestart, timeend) VALUES ('2004100114064662','Test event','test','Test','2004-10-02','2004-10-03','http://www.tonybibbs.com/',0,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL) ";
+$_DATA[] = "INSERT INTO {$_TABLES['eventsubmission']} (eid, title, description, location, datestart, dateend, url, allday, zipcode, state, city, address2, address1, event_type, timestart, timeend) VALUES ('2005100114064662','Geeklog installed','Today, you successfully installed this Geeklog site.','Your webserver',CURDATE(),CURDATE(),'http://www.geeklog.net/',1,NULL,NULL,NULL,NULL,NULL,'',NULL,NULL) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['featurecodes']} (code, name) VALUES (0,'Not Featured') ";
 $_DATA[] = "INSERT INTO {$_TABLES['featurecodes']} (code, name) VALUES (1,'Featured') ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (1,'story.edit','Access to story editor',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (2,'story.moderate','Ablility to moderate pending stories',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (3,'link.moderate','Ablility to moderate pending links',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (4,'link.edit','Access to link editor',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (2,'story.moderate','Ability to moderate pending stories',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (5,'user.edit','Access to user editor',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (6,'user.delete','Ablility to delete a user',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (7,'user.mail','Ablility to send email to members',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (8,'event.moderate','Ablility to moderate pending events',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (6,'user.delete','Ability to delete a user',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (7,'user.mail','Ability to send email to members',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (8,'event.moderate','Ability to moderate pending events',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (9,'event.edit','Access to event editor',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (10,'block.edit','Access to block editor',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (11,'topic.edit','Access to topic editor',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (12,'poll.edit','Access to poll editor',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (13,'plugin.edit','Access to plugin editor',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (14,'group.edit','Ability to edit groups',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (15,'group.delete','Ability to delete groups',1) ";
@@ -698,10 +766,14 @@
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (17,'staticpages.edit','Ability to edit a static page',0) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (18,'staticpages.delete','Ability to delete static pages',0) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (19,'story.submit','May skip the story submission queue',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (20,'link.submit','May skip the link submission queue',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (21,'event.submit','May skip the event submission queue',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (22,'staticpages.PHP','Ability use PHP in static pages',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (23,'spamx.admin', 'spamx Admin', 0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (23,'spamx.admin', 'Full access to Spam-X plugin', 0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (24,'story.ping', 'Ability to send pings, pingbacks, or trackbacks for stories', 1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (3,'links.moderate','Ability to moderate pending links',0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (4,'links.edit','Access to links editor',0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (20,'links.submit','May skip the links submission queue',0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['features']} (ft_id, ft_name, ft_descr, ft_gl_core) VALUES (12,'polls.edit','Access to polls editor',0) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['frontpagecodes']} (code, name) VALUES (0,'Show Only in Topic') ";
 $_DATA[] = "INSERT INTO {$_TABLES['frontpagecodes']} (code, name) VALUES (1,'Show on Front Page') ";
@@ -732,11 +804,6 @@
 $_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (12,NULL,1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (9,NULL,11) ";
 $_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (2,NULL,11) ";
-$_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (2,3,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (3,3,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (5,3,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (7,3,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (13,3,NULL) ";
 $_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (10,2,NULL) ";
 $_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (9,2,NULL) ";
 $_DATA[] = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid, ug_grp_id) VALUES (8,2,NULL) ";
@@ -754,34 +821,40 @@
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (2,'All Users','Group that a typical user is added to',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (3,'Story Admin','Has full access to story features',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (4,'Block Admin','Has full access to block features',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (5,'Link Admin','Has full access to link features',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (5,'Links Admin','Has full access to links features',0) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (6,'Topic Admin','Has full access to topic features',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (7,'Event Admin','Has full access to event features',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (8,'Poll Admin','Has full access to poll features',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (8,'Polls Admin','Has full access to polls features',0) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (9,'User Admin','Has full access to user features',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (10,'Plugin Admin','Has full access to plugin features',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (11,'Group Admin','Is a User Admin with Acces to Groups too',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (12,'Mail Admin','Can Use Mail Utility',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (13,'Logged-in Users','All Registered Members',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (11,'Group Admin','Is a User Admin with access to groups, too',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (12,'Mail Admin','Can use Mail Utility',1) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (13,'Logged-in Users','All registered members',1) ";
 $_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (14,'Static Page Admin','Can administer static pages',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (15,'spamx Admin', 'Users in this group can administer the spamx plugin',0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (15,'spamx Admin', 'Users in this group can administer the Spam-X plugin',0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['groups']} (grp_id, grp_name, grp_descr, grp_gl_core) VALUES (16,'Remote Users', 'Users in this group can have authenticated against a remote server.',1) ";
 
-$_DATA[] = "INSERT INTO {$_TABLES['links']} (lid, category, url, description, title, hits, date, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES ('20040119095147683','Geeklog Sites','http://www.geeklog.net','All you ever need to know about GeekLog - and more ...','Geeklog Project Homepage',42,NULL,5,2,3,3,2,2) ";
+$_DATA[] = "INSERT INTO {$_TABLES['links']} (lid, category, url, description, title, date, owner_id, group_id) VALUES ('geeklog.net','Geeklog Sites','http://www.geeklog.net/','Visit the Geeklog homepage for support, FAQs, updates, add-ons, and a great community.','Geeklog Project Homepage',NOW(),1,5)";
+$_DATA[] = "INSERT INTO {$_TABLES['linksubmission']} (lid, category, url, description, title, date) VALUES ('geeklog-announce','Geeklog Sites','http://lists.geeklog.net/mailman/listinfo/geeklog-announce','Subscribe to the Geeklog Announcements mailing list to stay up to date on new Geeklog releases.','Geeklog Announcements Mailing List',NOW())";
 
 $_DATA[] = "INSERT INTO {$_TABLES['maillist']} (code, name) VALUES (0,'Don\'t Email') ";
 $_DATA[] = "INSERT INTO {$_TABLES['maillist']} (code, name) VALUES (1,'Email Headlines Each Night') ";
 
-$_DATA[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('staticpages', '1.4.1','1.3.10',1,'http://www.tonybibbs.com') ";
-$_DATA[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('spamx', '1.0.1','1.3.10',1,'http://www.pigstye.net/gplugs/staticpages/index.php/spamx') ";
+$_DATA[] = "INSERT INTO {$_TABLES['pingservice']} (pid, name, site_url, ping_url, method, is_enabled) VALUES (1, 'Ping-O-Matic', 'http://pingomatic.com/', 'http://rpc.pingomatic.com/', 'weblogUpdates.ping', 1)";
 
-$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',1,'Professional theme',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',2,'SpamX plugin included',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',3,'Story Archive feature',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',4,'Clickable links in text mode',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',5,'Autolinks / Autotags',0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',6,'Other',0) ";
+$_DATA[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('staticpages', '1.4.2','1.4.0',1,'http://www.geeklog.net/') ";
+$_DATA[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('spamx', '1.0.3','1.4.0',1,'http://www.pigstye.net/gplugs/staticpages/index.php/spamx') ";
+$_DATA[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('links', '1.0', '1.4.0', 1, 'http://www.geeklog.net/')";
+$_DATA[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('polls', '1.0', '1.4.0', '1', 'http://www.geeklog.net/')";
+
+$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',1,'Trackbacks',0)";
+$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',2,'Links and Polls plugins',0)";
+$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',3,'Revamped admin areas',0)";
+$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',4,'FCKeditor included',0)";
+$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',5,'Remote user authentication',0)";
+$_DATA[] = "INSERT INTO {$_TABLES['pollanswers']} (qid, aid, answer, votes) VALUES ('geeklogfeaturepoll',6,'Other',0)";
 
-$_DATA[] = "INSERT INTO {$_TABLES['pollquestions']} (qid, question, voters, date, display, commentcode, statuscode, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES ('geeklogfeaturepoll','What is the best new feature of Geeklog?',0,'2004-01-01 12:43:20',1,0,0,8,2,3,3,2,2) ";
+$_DATA[] = "INSERT INTO {$_TABLES['pollquestions']} (qid, question, voters, date, display, commentcode, statuscode, owner_id, group_id, perm_owner, perm_group) VALUES ('geeklogfeaturepoll','What is the best new feature of Geeklog?',0,NOW(),1,0,0,2,8,3,3) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['postmodes']} (code, name) VALUES ('plaintext','Plain Old Text') ";
 $_DATA[] = "INSERT INTO {$_TABLES['postmodes']} (code, name) VALUES ('html','HTML Formatted') ";
@@ -793,11 +866,11 @@
 $_DATA[] = "INSERT INTO {$_TABLES['statuscodes']} (code, name) VALUES (0,'Normal') ";
 $_DATA[] = "INSERT INTO {$_TABLES['statuscodes']} (code, name) VALUES (10,'Archive') ";
 
-$_DATA[] = "INSERT INTO {$_TABLES['stories']} (sid, uid, draft_flag, tid, date, title, introtext, bodytext, hits, numemails, comments, related, featured, commentcode, statuscode, postmode, frontpage, owner_id, group_id, perm_owner, perm_group, perm_members, perm_anon) VALUES ('20040101093000103',2,0,'GeekLog','2004-01-01 09:30:00','Welcome to Geeklog!','<p>Welcome and let me be the first to congratulate you on installing GeekLog. Please take the time to read everything in the <a href=\"docs/index.html\">docs directory</a>. Geeklog now has enhanced, user-based security.  You should thoroughly understand how these work before you run a production Geeklog Site.\r\r<p>Below are a list of usernames that have access to a specific portion of the site. While Admin has access to everything, Moderator only has access to the areas related to stories, links, and events. The password for each account is <b>password</b>. \r\r<p>Accounts:\r<ul>\r<li>Admin</li>\r<li>Moderator</li>\r</ul>','',100,1,0,'',1,0,0,'html',1,2,3,3,3,2,2) ";
+$_DATA[] = "INSERT INTO {$_TABLES['stories']} (sid, uid, draft_flag, tid, date, title, introtext, bodytext, hits, numemails, comments, related, featured, commentcode, statuscode, postmode, frontpage, owner_id, group_id, perm_owner, perm_group, perm_members, perm_anon) VALUES ('welcome',2,0,'GeekLog',NOW(),'Welcome to Geeklog!','<p>Welcome and let me be the first to congratulate you on installing GeekLog. Please take the time to read everything in the <a href=\"docs/index.html\">docs directory</a>. Geeklog now has enhanced, user-based security.  You should thoroughly understand how these work before you run a production Geeklog Site.\r\r<p>To log into your new GeekLog site, please use this account:\r<p>Username: <b>Admin</b><br>\rPassword: <b>password</b>','<p><b>And don\'t forget to change your password after logging in!</b>',100,1,0,'',1,0,0,'html',1,2,3,3,2,2,2) ";
 
-$_DATA[] = "INSERT INTO {$_TABLES['storysubmission']} (sid, uid, tid, title, introtext, date, postmode) VALUES ('20040101120556538',2,'GeekLog','Are you secure?','<p>This is a reminder to secure your site once you have Geeklog up and running. What you should do:</p>\r\r<ol>\r<li>Change the default password for all Admin accounts.</li>\r<li>Remove the install directory (you won\'t need it any more).</li>\r</ol>','2004-01-01 12:05:56','html') ";
+$_DATA[] = "INSERT INTO {$_TABLES['storysubmission']} (sid, uid, tid, title, introtext, date, postmode) VALUES ('security-reminder',2,'GeekLog','Are you secure?','<p>This is a reminder to secure your site once you have Geeklog up and running. What you should do:</p>\r\r<ol>\r<li>Change the default password for the Admin account.</li>\r<li>Remove the install directory (you won\'t need it any more).</li>\r</ol>',NOW(),'html') ";
 
-$_DATA[] = "INSERT INTO {$_TABLES['syndication']} (type, topic, format, limits, content_length, title, description, filename, charset, language, is_enabled, updated, update_info) VALUES ('geeklog', '::all', 'rss', 10, 0, 'Geeklog Site', 'Another Nifty Geeklog Site', 'geeklog.rdf', 'UTF-8', 'en-gb', 1, '0000-00-00 00:00:00', NULL)";
+$_DATA[] = "INSERT INTO {$_TABLES['syndication']} (type, topic, header_tid, format, limits, content_length, title, description, filename, charset, language, is_enabled, updated, update_info) VALUES ('geeklog', '::all', 'all', 'RSS-2.0', 10, 1, 'Geeklog Site', 'Another Nifty Geeklog Site', 'geeklog.rss', 'UTF-8', 'en-gb', 1, '0000-00-00 00:00:00', NULL)";
 
 $_DATA[] = "INSERT INTO {$_TABLES['topics']} (tid, topic, imageurl, sortnum, limitnews, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES ('General','General News','/images/topics/topic_news.gif',1,10,6,2,3,2,2,2)";
 $_DATA[] = "INSERT INTO {$_TABLES['topics']} (tid, topic, imageurl, sortnum, limitnews, group_id, owner_id, perm_owner, perm_group, perm_members, perm_anon) VALUES ('GeekLog','GeekLog','/images/topics/topic_gl.gif',2,10,6,2,3,2,2,2)";
@@ -863,50 +936,29 @@
 
 $_DATA[] = "INSERT INTO {$_TABLES['usercomment']} (uid, commentmode, commentorder, commentlimit) VALUES (1,'nested','ASC',100) ";
 $_DATA[] = "INSERT INTO {$_TABLES['usercomment']} (uid, commentmode, commentorder, commentlimit) VALUES (2,'threaded','ASC',100) ";
-$_DATA[] = "INSERT INTO {$_TABLES['usercomment']} (uid, commentmode, commentorder, commentlimit) VALUES (3,'threaded','ASC',100) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['userindex']} (uid, tids, etids, aids, boxes, noboxes, maxstories) VALUES (1,'','-','','',0,NULL) ";
 $_DATA[] = "INSERT INTO {$_TABLES['userindex']} (uid, tids, etids, aids, boxes, noboxes, maxstories) VALUES (2,'','','','',0,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['userindex']} (uid, tids, etids, aids, boxes, noboxes, maxstories) VALUES (3,'','','','',0,NULL) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['userinfo']} (uid, about, pgpkey, userspace, tokens, totalcomments, lastgranted) VALUES (1,NULL,NULL,'',0,0,0) ";
 $_DATA[] = "INSERT INTO {$_TABLES['userinfo']} (uid, about, pgpkey, userspace, tokens, totalcomments, lastgranted) VALUES (2,NULL,NULL,'',0,0,0) ";
-$_DATA[] = "INSERT INTO {$_TABLES['userinfo']} (uid, about, pgpkey, userspace, tokens, totalcomments, lastgranted) VALUES (3,NULL,NULL,'',0,0,0) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['userprefs']} (uid, noicons, willing, dfid, tzid, emailstories) VALUES (1,0,0,0,'',0) ";
 $_DATA[] = "INSERT INTO {$_TABLES['userprefs']} (uid, noicons, willing, dfid, tzid, emailstories) VALUES (2,0,1,0,'edt',1) ";
-$_DATA[] = "INSERT INTO {$_TABLES['userprefs']} (uid, noicons, willing, dfid, tzid, emailstories) VALUES (3,0,1,0,'edt',1) ";
 
 #
 # Dumping data for table 'users'
 #
 
-$_DATA[] = "INSERT INTO {$_TABLES['users']} (uid, username, fullname, passwd, email, homepage, sig, regdate, cookietimeout, theme) VALUES (1,'Anonymous','Anonymous','',NULL,NULL,'','2004-01-01 00:00:01',0,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['users']} (uid, username, fullname, passwd, email, homepage, sig, regdate, cookietimeout, theme) VALUES (2,'Admin','Geeklog SuperUser','5f4dcc3b5aa765d61d8327deb882cf99','root@localhost','http://www.geeklog.net','','2004-01-01 00:00:02',28800,NULL) ";
-$_DATA[] = "INSERT INTO {$_TABLES['users']} (uid, username, fullname, passwd, email, homepage, sig, regdate, cookietimeout, theme) VALUES (3,'Moderator','Moderator','5f4dcc3b5aa765d61d8327deb882cf99','moderator','http://www.geeklog.net','','2004-01-01 00:00:03',28800,NULL) ";
+$_DATA[] = "INSERT INTO {$_TABLES['users']} (uid, username, fullname, passwd, email, homepage, sig, regdate, cookietimeout, theme, status) VALUES (1,'Anonymous','Anonymous','',NULL,NULL,'',NOW(),0,NULL,3) ";
+$_DATA[] = "INSERT INTO {$_TABLES['users']} (uid, username, fullname, passwd, email, homepage, sig, regdate, cookietimeout, theme, status) VALUES (2,'Admin','Geeklog SuperUser','5f4dcc3b5aa765d61d8327deb882cf99','root@localhost','http://www.geeklog.net/','',NOW(),28800,NULL,3) ";
 
 $_DATA[] = "INSERT INTO {$_TABLES['vars']} (name, value) VALUES ('totalhits','0') ";
 $_DATA[] = "INSERT INTO {$_TABLES['vars']} (name, value) VALUES ('lastemailedstories','') ";
+$_DATA[] = "INSERT INTO {$_TABLES['vars']} (name, value) VALUES ('last_scheduled_run','') ";
+$_DATA[] = "INSERT INTO {$_TABLES['vars']} (name, value) VALUES ('spamx.counter','0') ";
 
-#
-# These indexes are only added for MySQL version 3.23.2 and up
-#
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['comments']} ADD INDEX comments_date(date)";
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['events']} ADD INDEX events_datestart(datestart)";
-$_INDEX[] = "ALTER TABLE {$_TABLES['events']} ADD INDEX events_dateend(dateend)";
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['group_assignments']} ADD INDEX group_assignments_ug_uid(ug_uid)";
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['links']} ADD INDEX links_category(category)";
-$_INDEX[] = "ALTER TABLE {$_TABLES['links']} ADD INDEX links_date(date)";
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['pollquestions']} ADD INDEX pollquestions_date(date)";
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['stories']} ADD INDEX stories_date(date)";
-$_INDEX[] = "ALTER TABLE {$_TABLES['stories']} ADD INDEX stories_frontpage(frontpage)";
-
-$_INDEX[] = "ALTER TABLE {$_TABLES['userindex']} ADD INDEX userindex_maxstories(maxstories)";
+$_DATA[] = "INSERT INTO {$_TABLES['trackbackcodes']} (code, name) VALUES (0,'Trackback Enabled') ";
+$_DATA[] = "INSERT INTO {$_TABLES['trackbackcodes']} (code, name) VALUES (-1,'Trackback Disabled') ";
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/sql/updates/mysql_1.3.11_to_1.4.0.php 1.4.0sr5-1/cpanel-glprivate/sql/updates/mysql_1.3.11_to_1.4.0.php
--- 1.3.11sr1/cpanel-glprivate/sql/updates/mysql_1.3.11_to_1.4.0.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/sql/updates/mysql_1.3.11_to_1.4.0.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,196 @@
+<?php
+
+$_SQL[] = "CREATE TABLE {$_TABLES['trackback']} (
+  cid int(10) unsigned NOT NULL auto_increment, 
+  sid varchar(40) NOT NULL, 
+  url varchar(255) default NULL,
+  title varchar(128) default NULL,
+  blog varchar(80) default NULL, 
+  excerpt text,
+  date datetime default NULL,
+  type varchar(30) NOT NULL default 'article',
+  ipaddress varchar(15) NOT NULL default '',
+  PRIMARY KEY (cid),
+  INDEX trackback_sid(sid), 
+  INDEX trackback_url(url), 
+  INDEX trackback_date(date), 
+  INDEX trackback_type(type)
+) TYPE=MyISAM";
+
+$_SQL[] = "CREATE TABLE {$_TABLES['pingservice']} (
+  pid smallint(5) unsigned NOT NULL auto_increment,
+  name varchar(128) default NULL,
+  ping_url varchar(255) default NULL,
+  site_url varchar(255) default NULL,
+  method varchar(80) default NULL,
+  is_enabled tinyint(1) unsigned NOT NULL DEFAULT '1',
+  PRIMARY KEY (pid),
+  INDEX pingservice_is_enabled(is_enabled)
+) TYPE=MyISAM";
+
+$_SQL[] = "CREATE TABLE {$_TABLES['trackbackcodes']} (
+  code tinyint(4) NOT NULL default '0',
+  name varchar(32) default NULL,
+  PRIMARY KEY  (code)
+) TYPE=MyISAM ";
+
+// a weblog directory to ping (which, in turn, pings others)
+$_SQL[] = "INSERT INTO {$_TABLES['pingservice']} (pid, name, site_url, ping_url, method, is_enabled) VALUES (1, 'Ping-O-Matic', 'http://pingomatic.com/', 'http://rpc.pingomatic.com/', 'weblogUpdates.ping', 1)";
+
+$_SQL[] = "INSERT INTO {$_TABLES['trackbackcodes']} (code, name) VALUES (0,'Trackback Enabled') ";
+$_SQL[] = "INSERT INTO {$_TABLES['trackbackcodes']} (code, name) VALUES (-1,'Trackback Disabled') ";
+
+// max. number of entries to import into a portal block
+$_SQL[] = "ALTER TABLE {$_TABLES['blocks']} ADD rdflimit smallint(5) unsigned NOT NULL default '0' AFTER rdfupdated";
+
+// new story.ping feature (also see function upgrade_addFeature below)
+$_SQL[] = "INSERT INTO {$_TABLES['features']} (ft_name, ft_descr, ft_gl_core) VALUES ('story.ping', 'Ability to send pings, pingbacks, or trackbacks for stories', 1)";
+
+// remote authentication fields
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD remoteusername varchar(60) NULL after username";
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD remoteservice varchar(60) NULL after remoteusername";
+// new user status, for ban etc.
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD status smallint(5) unsigned NOT NULL default '1'";
+// Make all users WITH a password active.
+$_SQL[] = "UPDATE {$_TABLES['users']} SET status=3 WHERE (passwd IS NOT NULL) OR (passwd != '')";
+// a few more indexes on the users table can' hurt ...
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD INDEX users_username(username)";
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD INDEX users_fullname(fullname)";
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD INDEX users_email(email)";
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD INDEX users_passwd(passwd)";
+$_SQL[] = "ALTER TABLE {$_TABLES['users']} ADD INDEX users_pwrequestid(pwrequestid)";
+// Add the remote authenticated group:
+$_SQL[] = "INSERT INTO {$_TABLES['groups']} (grp_name, grp_descr, grp_gl_core) VALUES ('Remote Users', 'Users in this group can have authenticated against a remote server.',1) ";
+
+// for quicker access to large speedlimit tables
+$_SQL[] = "ALTER TABLE {$_TABLES['speedlimit']} ADD INDEX type_ipaddress(type,ipaddress)";
+$_SQL[] = "ALTER TABLE {$_TABLES['speedlimit']} ADD INDEX date(date)";
+
+// new 'in transit' status
+$_SQL[] = "ALTER TABLE {$_TABLES['stories']} ADD in_transit tinyint(1) unsigned default '0' AFTER frontpage";
+$_SQL[] = "ALTER TABLE {$_TABLES['stories']} ADD INDEX stories_in_transit(in_transit)";
+
+// trackback code - just like commentcode
+$_SQL[] = "ALTER TABLE {$_TABLES['stories']} ADD trackbackcode tinyint(4) NOT NULL default '0' AFTER commentcode";
+
+// trackback counter
+$_SQL[] = "ALTER TABLE {$_TABLES['stories']} ADD trackbacks mediumint(8) unsigned NOT NULL default '0' AFTER comments";
+
+// new header-link for feeds
+$_SQL[] = "ALTER TABLE {$_TABLES['syndication']} ADD header_tid varchar(48) NOT NULL default 'none' AFTER topic;";
+// add logo
+$_SQL[] = "ALTER TABLE {$_TABLES['syndication']} ADD feedlogo varchar(255) AFTER description;";
+// change default format to RSS-2.0
+$_SQL[] = "ALTER TABLE {$_TABLES['syndication']} CHANGE format format varchar(20) NOT NULL default 'RSS-2.0';";
+// Upgrade format values
+$_SQL[] = "UPDATE {$_TABLES['syndication']} SET format='Atom-0.3' WHERE format='atom'";
+$_SQL[] = "UPDATE {$_TABLES['syndication']} SET format='RDF-1.0' WHERE format='rdf'";
+$_SQL[] = "UPDATE {$_TABLES['syndication']} SET format='RSS-0.9x' WHERE format='rss'";
+$_SQL[] = "UPDATE {$_TABLES['syndication']} SET format='RSS-2.0' WHERE format='rss2'";
+
+// add links plugin
+$_SQL[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version, pi_enabled, pi_homepage) VALUES ('links', '1.0', '1.4.0', 1, 'http://www.geeklog.net/')";
+// update links feeds to links plugin
+$_SQL[] = "UPDATE {$_TABLES['syndication']} SET type = 'links', topic = 'all' WHERE topic = '::links';";
+
+// add polls plugin
+$_SQL[] = "INSERT INTO {$_TABLES['plugins']} (pi_name, pi_version, pi_gl_version,pi_enabled, pi_homepage) VALUES ('polls', '1.0', '1.4.0', '1', 'http://www.geeklog.net/')";
+
+// updates core -> plugin
+$_SQL[] = "UPDATE {$_TABLES['blocks']} SET type = 'phpblock', phpblockfn ='phpblock_polls' WHERE name = 'poll_block';";
+
+$_SQL[] = "UPDATE {$_TABLES['features']} SET ft_gl_core = '0', ft_name='polls.edit' WHERE ft_name = 'poll.edit';";
+$_SQL[] = "UPDATE {$_TABLES['groups']} SET grp_gl_core = '0', grp_name = 'Links Admin' WHERE grp_name = 'Link Admin';";
+$_SQL[] = "UPDATE {$_TABLES['groups']} SET grp_gl_core = '0', grp_name = 'Polls Admin' WHERE grp_name = 'Poll Admin';";
+
+// rename "link.*" features to "links.*" to match the plugin name
+$_SQL[] = "UPDATE {$_TABLES['features']} SET ft_name = 'links.moderate', ft_gl_core = '0' WHERE ft_name = 'link.moderate';";
+$_SQL[] = "UPDATE {$_TABLES['features']} SET ft_name = 'links.edit', ft_gl_core = '0' WHERE ft_name = 'link.edit';";
+$_SQL[] = "UPDATE {$_TABLES['features']} SET ft_name = 'links.submit', ft_gl_core = '0' WHERE ft_name = 'link.submit';";
+
+// the included Spam-X requires Geeklog 1.4.0 now (for the MassDelete modules)
+$_SQL[] = "UPDATE {$_TABLES['plugins']} SET pi_version = '1.0.3', pi_gl_version = '1.4.0' WHERE pi_name = 'spamx'";
+
+// Static Pages plugin is version 1.4.2 now
+$_SQL[] = "UPDATE {$_TABLES['plugins']} SET pi_version = '1.4.2', pi_gl_version = '1.4.0', pi_homepage = 'http://www.geeklog.net/' WHERE pi_name = 'staticpages'";
+
+// update poll(s) comments
+$_SQL[] = "UPDATE {$_TABLES['comments']} SET type = 'polls' WHERE type = 'poll'";
+
+// allow for more topic ids in the user's preferences (bug #490)
+$_SQL[] = "ALTER TABLE {$_TABLES['userindex']} CHANGE etids etids text";
+
+// add a hits counter for events
+$_SQL[] = "ALTER TABLE {$_TABLES['events']} ADD hits mediumint(8) unsigned NOT NULL default '0' AFTER url";
+$_SQL[] = "ALTER TABLE {$_TABLES['events']} ADD postmode varchar(10) NOT NULL default 'plaintext' AFTER description";
+$_SQL[] = "ALTER TABLE {$_TABLES['personal_events']} ADD postmode varchar(10) NOT NULL default 'plaintext' AFTER description";
+
+// allow up to 40 characters for a link id
+$_SQL[] = "ALTER TABLE {$_TABLES['links']} CHANGE lid lid varchar(40) NOT NULL default ''";
+$_SQL[] = "ALTER TABLE {$_TABLES['linksubmission']} CHANGE lid lid varchar(40) NOT NULL default ''";
+
+// add the new 'story.ping' feature to the Story Admin group
+function upgrade_addFeature ()
+{
+    global $_TABLES;
+
+    $grp_id = DB_getItem ($_TABLES['groups'], 'grp_id',
+                          "grp_name = 'Story Admin'");
+    $ft_id = DB_getItem ($_TABLES['features'], 'ft_id',
+                         "ft_name = 'story.ping'");
+
+    if (($grp_id > 0) && ($ft_id > 0)) {
+        DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id, acc_grp_id) VALUES ($ft_id,$grp_id)");
+    }
+}
+
+function upgrade_uniqueGroupNames()
+{
+    global $_TABLES;
+
+    $groups = DB_count ($_TABLES['groups']);
+    $result = DB_query ("SELECT DISTINCT grp_name FROM {$_TABLES['groups']} ORDER BY grp_gl_core ASC");
+    $numGroups = DB_numRows($result);
+
+    if ($groups != $numGroups) {
+        // find and delete the duplicates
+
+        // first, prepare a list of all unique group names
+        $names = array ();
+        for ($i = 0; $i < $numGroups; $i++) {
+            $A = DB_fetchArray ($result);
+            $names[] = $A['grp_name'];
+        }
+
+        // then search for names that occur more than once
+        foreach ($names as $name) {
+            $result = DB_query ("SELECT grp_id FROM {$_TABLES['groups']} WHERE grp_name = '$name'");
+            $num = DB_numRows ($result);
+            if ($num > 1) {
+                // we're going to keep the first entry - fetch and discard
+                $A = DB_fetchArray ($result);
+                $num--;
+                for ($i = 0; $i < $num; $i++) {
+                    list($grp_id) = DB_fetchArray ($result);
+
+                    DB_delete ($_TABLES['access'], 'acc_grp_id', $grp_id);
+                    DB_delete ($_TABLES['group_assignments'], 'ug_grp_id', $grp_id);
+                    DB_delete ($_TABLES['group_assignments'], 'ug_main_grp_id', $grp_id);
+                    DB_delete ($_TABLES['groups'], 'grp_id', $grp_id);
+                }
+
+                // check if we already found all the duplicates
+                $groups -= $num;
+                if ($groups == $numGroups) {
+                    break;
+                }
+            }
+        }
+    }
+
+    // make 'grp_name' a unique index
+    DB_query ("ALTER TABLE {$_TABLES['groups']} DROP INDEX grp_name");
+    DB_query ("ALTER TABLE {$_TABLES['groups']} ADD UNIQUE grp_name(grp_name)");
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/authentication/Blogger.auth.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/authentication/Blogger.auth.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/authentication/Blogger.auth.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/authentication/Blogger.auth.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,72 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | Blogger.auth.class.php                                                    |
+// |                                                                           |
+// | Geeklog Distributed Authentication Module.                                |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2004 by the following authors:                         |
+// |                                                                           |
+// | Authors: Michael Jervis   - mike@fuckingbrit.com                          |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: Blogger.auth.class.php,v 1.4 2005/10/02 17:44:44 mjervis Exp $
+
+// PEAR class to handle XML-RPC
+require_once ('XML/RPC.php');
+
+class Blogger
+{
+    var $email;
+
+    function authenticate($username, $password)
+    {
+        $email = '';
+        $message = new XML_RPC_Message('blogger.getUserInfo',
+								array(
+    								new XML_RPC_Value('XXXXXXXXXXXX', 'string'),
+									new XML_RPC_Value($username, 'string'),
+									new XML_RPC_Value($password, 'string')
+								)
+												);
+        $client = new XML_RPC_Client('/api/', 'www.blogger.com', 80);
+        $result = $client->send($message, 5, 'http');
+        if ($result && ($result->faultString() == '')) {
+            // Get the email address:
+            $value = $result->value();
+            // Blogger return faultcode = 0 for a login fail.
+            // which the lib doesn't handle. Hence horrible stuff.
+            $f = $value->structmem('faultString');
+            if ($f)
+            {
+                return false;
+            } else {
+                $value = $value->structmem('email');
+                $this->email = $value->scalarVal();
+                return true;
+            }
+        }
+        else {
+            return false;
+        }
+    }
+}
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/authentication/LiveJournal.auth.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/authentication/LiveJournal.auth.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/authentication/LiveJournal.auth.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/authentication/LiveJournal.auth.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,64 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | LiveJournal.auth.class.php                                               |
+// |                                                                           |
+// | Geeklog Distributed Authentication Module.                                |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2004 by the following authors:                         |
+// |                                                                           |
+// | Authors: Michael Jervis   - mike@fuckingbrit.com                          |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: LiveJournal.auth.class.php,v 1.2 2005/06/12 09:31:19 mjervis Exp $
+
+// PEAR class to handle XML-RPC
+require_once ('XML/RPC.php');
+
+class LiveJournal
+{
+    var $email;
+    
+    function authenticate($username, $password)
+    {
+        /* check it's livejournal.com */
+        $email = '';
+        $struct = new XML_RPC_Value(
+                array('username' => new XML_RPC_Value($username, 'string'),
+                          'hpassword' => new XML_RPC_Value(md5($password), 'string')
+                  ), 'struct'
+                );
+
+        $message = new XML_RPC_Message('LJ.XMLRPC.login');
+        $message->addparam($struct);
+        $client = new XML_RPC_Client('/interface/xmlrpc', 'www.livejournal.com', 80);
+        $result = $client->send($message, 5);
+        if ($result && !$result->faultCode()) {
+            /* Carefuly noting that no LJ API returns the email address, */
+            /* because they suck.                                        */
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+}
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/calendar.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/calendar.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/calendar.class.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/calendar.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: calendar.class.php,v 1.5 2004/07/26 14:32:43 dhaun Exp $
+// $Id: calendar.class.php,v 1.6 2005/11/14 09:22:04 dhaun Exp $
 
 /**
 * This file contains the two classes used to help support the calendar pages.
@@ -518,7 +518,11 @@
     *
     */
     function getDayData($week,$daynum) {
-        return $this->_matrix[$week][$daynum];
+        if (isset ($this->_matrix[$week][$daynum])) {
+            return $this->_matrix[$week][$daynum];
+        }
+
+        return '';
     }
 
 }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/downloader.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/downloader.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/downloader.class.php	2004-12-31 10:02:21.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/downloader.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -8,9 +8,9 @@
 // |                                                                           |
 // | Geeklog file download class library.                                      |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2002 by the following authors:                              |
+// | Copyright (C) 2002-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -29,7 +29,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: downloader.class.php,v 1.7 2004/10/10 03:38:31 vinny Exp $
+// $Id: downloader.class.php,v 1.12 2005/11/19 03:58:20 vinny Exp $
 
 /**
 * This class allows you to download a file from outside the web tree.  Many hooks
@@ -116,31 +116,31 @@
     *
     */
     function _addWarning($warningText)
-	{
+    {
         $nwarnings = count($this->_warnings);
         $nwarnings = $nwarnings + 1;
         $this->_warnings[$nwarnings] = $warningText;
         if ($this->loggingEnabled()) {
             $this->_logItem('Warning',$warningText);
         }
-	}
-	
-	/**
-	* Adds an error that was encountered
-	*
-	* @param    string      $errorText  Text of error
-	* @access   private
-	*
-	*/
-	function _addError($errorText)
-	{
+    }
+    
+    /**
+    * Adds an error that was encountered
+    *
+    * @param    string      $errorText  Text of error
+    * @access   private
+    *
+    */
+    function _addError($errorText)
+    {
         $nerrors = count($this->_errors);
         $nerrors = $nerrors + 1;
         $this->_errors[$nerrors] = $errorText;
         if ($this->loggingEnabled()) {
             $this->_logItem('Error',$errorText);
         }
-	}
+    }
 
     /**
     * Adds a debug message
@@ -168,8 +168,8 @@
     * @access   private
     *
     */
-	function _logItem($logtype, $text)
-	{
+    function _logItem($logtype, $text)
+    {
         $timestamp = strftime("%c");
         if (!$file = fopen($this->_logFile,a)) {
             // couldn't open log file for writing so let's disable logging and add an error
@@ -180,9 +180,9 @@
         fputs ($file, "$timestamp - $logtype: $text \n");
         fclose($file);
         return true;
-	}
-	
-	/**
+    }
+    
+    /**
     * Defines superset of available Mime types.
     *
     * @param    array       $extensions     string array of valid mime types this object will accept
@@ -190,35 +190,35 @@
     */
     function _setAvailableExtensions($extensions = array())
     {
-		if (sizeof($extensions) == 0) {
-			$this->_availableMimeTypes = 
-				array(
-					'tgz' => 'application/x-gzip-compressed',
+        if (sizeof($extensions) == 0) {
+            $this->_availableMimeTypes = 
+                array(
+                    'tgz' => 'application/x-gzip-compressed',
                     'gz' =>  'application/x-gzip-compressed',
-					'zip' => 'application/x-zip-compresseed',
-					'tar' => 'application/x-tar',
-					'php' => 'text/plain',
+                    'zip' => 'application/x-zip-compresseed',
+                    'tar' => 'application/x-tar',
+                    'php' => 'text/plain',
                     'phps' => 'text/plain',
                     'txt' => 'text/plain',
-					'html' => 'text/html',
+                    'html' => 'text/html',
                     'htm' => 'text/html',
-					'bmp' => 'image/bmp',
+                    'bmp' => 'image/bmp',
                     'ico' => 'image/bmp',
-					'gif' => 'image/gif',
-					'jpg' => 'image/jpeg',
+                    'gif' => 'image/gif',
+                    'jpg' => 'image/jpeg',
                     'jpeg' => 'image/jpeg',
-					'png' => 'image/x-png',
-					'mp3' => 'audio/mpeg',
-					'wav' => 'audio/wav',
-					'pdf' => 'application/pdf',
-					'swf' => 'application/x-shockwave-flash',
-					'doc' => 'application/msword',
-					'xls' => 'application/vnd.ms-excel',
-					'exe' => 'application/octet-stream'
-				);
-		} else {
-			$this->_availableMimeTypes = $extensions;
-		}
+                    'png' => 'image/x-png',
+                    'mp3' => 'audio/mpeg',
+                    'wav' => 'audio/wav',
+                    'pdf' => 'application/pdf',
+                    'swf' => 'application/x-shockwave-flash',
+                    'doc' => 'application/msword',
+                    'xls' => 'application/vnd.ms-excel',
+                    'exe' => 'application/octet-stream'
+                );
+        } else {
+            $this->_availableMimeTypes = $extensions;
+        }
 
         $this->_availableExtensions = array ();
         foreach ($this->_availableMimeTypes as $ext => $mime) {
@@ -241,7 +241,7 @@
     {
         if (is_array($validIPS)) {
             $this->_limitByIP = true;
-            $this->_allowedIPS = $valid_IPS;
+            $this->_allowedIPS = $validIPS;
             return true;
         } else {
             $this->_addError('Bad call to method limitByIP(), must pass array of valid IP addresses');
@@ -394,31 +394,30 @@
     *
     */
     function setAllowedExtensions($validExtensions = array())
-	{
+    {
         // This is a subset of _availableMimetypes.  Go ahead and make sure
         // all the mime types passed to this function are in the
         // available list
-        for ($i = 1; $i <= count($validExtensions); $i++) {
-            if (!in_array(current($validExtensions),$this->_availableMimeTypes)) {
-                $this->_addError('extension, ' .current($validExtensions) . ' is not in the list of available file types for download');
+        foreach ($validExtensions as $ext => $mime) {
+            if (!in_array ($mime, $this->_availableMimeTypes)) {
+                $this->_addError('extension, ' . $ext . ' is not in the list of available file types for download');
                 return;
             }
-            next($validExtensions);
         }
         $this->_allowedExtensions = $validExtensions;
-	}
-	
-	/**
-	* Gets allowed mime types for this instance
-	*
-	* @return   array       array of allowed mime types/file extensions
-	*
-	*/
-	function getAllowedExtensions()
-	{
-		return $this->_allowedExtensions;
-	}
-	
+    }
+    
+    /**
+    * Gets allowed mime types for this instance
+    *
+    * @return   array       array of allowed mime types/file extensions
+    *
+    */
+    function getAllowedExtensions()
+    {
+        return $this->_allowedExtensions;
+    }
+    
     /**
     * Checks to see that mime type for current file is allowed for upload
     *
@@ -429,11 +428,11 @@
     function checkExtension($extension)
     {
         if (!in_array($extension,array_keys($this->getAllowedExtensions()))) {
-			$this->_addError('File type, .' . $extension . ', not in list of allowed file types available for download');
-			return false;
-		} else {
-			return true;
-		}
+            $this->_addError('File type, .' . $extension . ', not in list of allowed file types available for download');
+            return false;
+        } else {
+            return true;
+        }
     }
     
     /**
@@ -444,7 +443,7 @@
     *
     */
     function setPath($uploadDir)
-	{
+    {
         if (!is_dir($uploadDir)) {
             $this->_addError('Specified source directory, ' . $uploadDir . ' is not a valid directory');
             return false;
@@ -458,19 +457,19 @@
         $this->_sourceDirectory = $uploadDir;
         
         return true;
-	}
-	
-	/**
-	* Returns directory to upload to
-	*
-	* @return   string      returns directory where files for downloading reside
-	*
-	*/
-	function getPath()
-	{
+    }
+    
+    /**
+    * Returns directory to upload to
+    *
+    * @return   string      returns directory where files for downloading reside
+    *
+    */
+    function getPath()
+    {
         return $this->_sourceDirectory;
-	}
-	
+    }
+    
     /**
     * Attempts to dowload a file
     *
@@ -478,22 +477,34 @@
     * @return   boolean     true on success otherwise false
     *
     */
-	function downloadFile($fileName)
-	{
-        // Ensure file exists        
-        if(!is_file(($this->_sourceDirectory . $fileName)) OR
-           ($this->_sourceDirectory <> (dirname(realpath($this->_sourceDirectory . $fileName)) . '/'))) {
+    function downloadFile($fileName)
+    {
+        if (strstr( PHP_OS, "WIN")) {  // Added as test1 below was failing on Windows platforms 
+            $strPathSeparator = '\\';
+            $this->_sourceDirectory = str_replace('/','\\',$this->_sourceDirectory);
+        } else {
+            $strPathSeparator = '/';
+        }
+
+        if(!is_file($this->_sourceDirectory . $fileName)) {
+            echo "<br>{$this->sourceDirectory}{$filename} does not exist";
+        }
+
+
+        // Ensure file exists and is accessible
+        if(!is_file($this->_sourceDirectory . $fileName) OR 
+            ($this->_sourceDirectory <> (dirname($this->_sourceDirectory . $strPathSeparator .$fileName) .$strPathSeparator)) ) {
             $this->_addError('Specified file ' . $this->_sourceDirectory . $fileName . ' does not exist or is not accessible');
             return false;
         }
-        
-        // Make sure file is readable
+
+        // Make sure file is readable - test 2
         clearstatcache();
         if (!is_readable($this->_sourceDirectory . $fileName)) {
             $this->_addError('Specified file, ' . $this->_sourceDirectory . $fileName . ' exists but is not readable');
             return false;
         }
-        
+
         // OK, file is valid, get file extension
         $pos = strrpos($fileName,'.') + 1;
         $fextension = substr($fileName, $pos);
@@ -511,10 +522,10 @@
 
             fpassthru( $fp );
         }
-        
-        return true;  	
-	}
-	
+
+        return true;
+    }
+
 }
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/kses.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/kses.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/kses.class.php	2004-12-31 10:02:21.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/kses.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,670 +1,1162 @@
-<?php
-	/*
-	 *	This is a fork of a slick piece of procedural code called 'kses' written by Ulf Harnhammar
-	 * The entire set of functions was wrapped in a PHP object with some internal modifications
-	 * by Richard Vasquez (http://www.chaos.org/) 7/25/2003
-	 *
-	 *	The original (procedural) version of the code can be found at:
-	 * http://sourceforge.net/projects/kses/
-	 *
-	 *	[kses strips evil scripts!]
-	 *
-	 * ==========================================================================================
-	 *
-	 * class.kses.php 0.0.2 - PHP class that filters HTML/XHTML only allowing some elements and
-	 *	                       attributes to be passed through.
-	 *
-	 * Copyright (C) 2003 Richard R. Vasquez, Jr.
-	 *
-	 * Derived from kses 0.2.1 - HTML/XHTML filter that only allows some elements and attributes
-	 * Copyright (C) 2002, 2003  Ulf Harnhammar
-	 *
-	 * ==========================================================================================
-	 *
-	 * This program is free software and open source software; you can redistribute
-	 * it and/or modify it under the terms of the GNU General Public License as
-	 * published by the Free Software Foundation; either version 2 of the License,
-	 * or (at your option) any later version.
-	 *
-	 * This program is distributed in the hope that it will be useful, but WITHOUT
-	 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-	 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-	 * more details.
-	 *
-	 * You should have received a copy of the GNU General Public License along
-	 * with this program; if not, write to the Free Software Foundation, Inc.,
-	 * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  or visit
-	 * http://www.gnu.org/licenses/gpl.html
-	 *
-	 * ==========================================================================================
-	 * CONTACT INFORMATION:
-	 *
-	 * Email:    View current valid email address at http://www.chaos.org/contact/
-	 */
-
-	class kses
-	{
-		var $allowed_protocols = array('http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'gopher', 'mailto');
-		var $allowed_html      = array();
-
-		function kses()
-		{
-		}
-
-		function Parse($string = "")
-		{
-			if (get_magic_quotes_gpc())
-			{
-  				$string = stripslashes($string);
-			}
-			$string = $this->_no_null($string);
-			$string = $this->_js_entities($string);
-			$string = $this->_normalize_entities($string);
-			$string = $this->_hook($string);
-			return    $this->_split($string);
-		}
-
-		function Protocols()
-		{
-			$c_args = func_num_args();
-			if($c_args != 1)
-			{
-				return false;
-			}
-
-			$protocol_data = func_get_arg(0);
-
-			if(is_array($protocol_data))
-			{
-				foreach($protocol_data as $protocol)
-				{
-					$this->AddProtocol($protocol);
-				}
-			}
-			elseif(is_string($protocol_data))
-			{
-				$this->AddProtocol($protocol_data);
-				return true;
-			}
-			else
-			{
-				trigger_error("kses::Protocols() did not receive a string or an array.", E_USER_WARNING);
-				return false;
-			}
-		}
-
-		function AddProtocol($protocol = "")
-		{
-			if(!is_string($protocol))
-			{
-				trigger_error("kses::AddProtocol() requires a string.", E_USER_WARNING);
-				return false;
-			}
-
-			$protocol = strtolower(trim($protocol));
-			if($protocol == "")
-			{
-				trigger_error("kses::AddProtocol() tried to add an empty/NULL protocol.", E_USER_WARNING);
-				return false;
-			}
-
-			// Remove any inadvertent ':' at the end of the protocol.
-			if(substr($protocol, strlen($protocol) - 1, 1) == ":")
-			{
-				$protocol = substr($protocol, 0, strlen($protocol) - 1);
-			}
-
-			if(!in_array($protocol, $this->allowed_protocols))
-			{
-				array_push($this->allowed_protocols, $protocol);
-				sort($this->allowed_protocols);
-			}
-			return true;
-		}
-
-		function AddHTML($tag = "", $attribs = array())
-		{
-			if(!is_string($tag))
-			{
-				trigger_error("kses::AddHTML() requires the tag to be a string", E_USER_WARNING);
-				return false;
-			}
-
-			$tag = strtolower(trim($tag));
-			if($tag == "")
-			{
-				trigger_error("kses::AddHTML() tried to add an empty/NULL tag", E_USER_WARNING);
-				return false;
-			}
-
-			if(!is_array($attribs))
-			{
-				trigger_error("kses::AddHTML() requires an array (even an empty one) of attributes for '$tag'", E_USER_WARNING);
-				return false;
-			}
-
-			$new_attribs = array();
-			foreach($attribs as $idx1 => $val1)
-			{
-				$new_idx1 = strtolower($idx1);
-				$new_val1 = $attribs[$idx1];
-
-				if(is_array($new_val1))
-				{
-					$tmp_val = array();
-					foreach($new_val1 as $idx2 => $val2)
-					{
-						$new_idx2 = strtolower($idx2);
-						$tmp_val[$new_idx2] = $val2;
-					}
-					$new_val1 = $tmp_val;
-				}
-
-				$new_attribs[$new_idx1] = $new_val1;
-			}
-
-			$this->allowed_html[$tag] = $new_attribs;
-			return true;
-		}
-
-		###############################################################################
-		# This function removes any NULL or chr(173) characters in $string.
-		###############################################################################
-		function _no_null($string)
-		{
-			$string = preg_replace('/\0+/', '', $string);
-			$string = preg_replace('/(\\\\0)+/', '', $string);
-			$string = preg_replace('/\xad+/', '', $string); # deals with Opera "feature"
-			return $string;
-		} # function _no_null
-
-		###############################################################################
-		# This function removes the HTML JavaScript entities found in early versions of
-		# Netscape 4.
-		###############################################################################
-		function _js_entities($string)
-		{
-		  return preg_replace('%&\s*\{[^}]*(\}\s*;?|$)%', '', $string);
-		} # function _js_entities
-
-
-		###############################################################################
-		# This function normalizes HTML entities. It will convert "AT&T" to the correct
-		# "AT&amp;T", "&#00058;" to "&#58;", "&#XYZZY;" to "&amp;#XYZZY;" and so on.
-		###############################################################################
-		function _normalize_entities($string)
-		{
-			# Disarm all entities by converting & to &amp;
-		  $string = str_replace('&', '&amp;', $string);
-
-			# Change back the allowed entities in our entity white list
-
-		  $string = preg_replace('/&amp;([A-Za-z][A-Za-z0-9]{0,19});/', '&\\1;', $string);
-		  $string = preg_replace('/&amp;#0*([0-9]{1,5});/e', '\$this->_normalize_entities2("\\1")', $string);
-		  $string = preg_replace('/&amp;#([Xx])0*(([0-9A-Fa-f]{2}){1,2});/', '&#\\1\\2;', $string);
-
-		  return $string;
-		} # function _normalize_entities
-
-
-		###############################################################################
-		# This function helps _normalize_entities() to only accept 16 bit values
-		# and nothing more for &#number; entities.
-		###############################################################################
-		function _normalize_entities2($i)
-		{
-		  return (($i > 65535) ? "&amp;#$i;" : "&#$i;");
-		} # function _normalize_entities2
-
-		###############################################################################
-		# You add any kses hooks here.
-		###############################################################################
-		function _hook($string)
-		{
-		  return $string;
-		} # function _hook
-
-		###############################################################################
-		# This function goes through an array, and changes the keys to all lower case.
-		###############################################################################
-		function _array_lc($inarray)
-		{
-		  $outarray = array();
-
-		  foreach ($inarray as $inkey => $inval)
-		  {
-			 $outkey = strtolower($inkey);
-			 $outarray[$outkey] = array();
-
-			 foreach ($inval as $inkey2 => $inval2)
-			 {
-				$outkey2 = strtolower($inkey2);
-				$outarray[$outkey][$outkey2] = $inval2;
-			 } # foreach $inval
-		  } # foreach $inarray
-
-		  return $outarray;
-		} # function _array_lc
-
-		###############################################################################
-		# This function searches for HTML tags, no matter how malformed. It also
-		# matches stray ">" characters.
-		###############################################################################
-		function _split($string)
-		{
-			return preg_replace(
-				'%(<'.   # EITHER: <
-				'[^>]*'. # things that aren't >
-				'(>|$)'. # > or end of string
-				'|>)%e', # OR: just a >
-				"\$this->_split2('\\1')",
-				$string);
-		} # function _split
-
-		function _split2($string)
-		###############################################################################
-		# This function does a lot of work. It rejects some very malformed things
-		# like <:::>. It returns an empty string, if the element isn't allowed (look
-		# ma, no strip_tags()!). Otherwise it splits the tag into an element and an
-		# attribute list.
-		###############################################################################
-		{
-			$string = $this->_stripslashes($string);
-
-			if (substr($string, 0, 1) != '<')
-			{
-				# It matched a ">" character
-				return '&gt;';
-			}
-
-			if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9]+)([^>]*)>?$%', $string, $matches))
-			{
-				# It's seriously malformed
-				return '';
-			}
-
-			$slash    = trim($matches[1]);
-			$elem     = $matches[2];
-			$attrlist = $matches[3];
-
-			if (!is_array($this->allowed_html[strtolower($elem)]))
-			{
-				# They are using a not allowed HTML element
-				return '';
-			}
-
-			return $this->_attr("$slash$elem", $attrlist);
-		} # function _split2
-
-		###############################################################################
-		# This function removes all attributes, if none are allowed for this element.
-		# If some are allowed it calls s_hair() to split them further, and then it
-		# builds up new HTML code from the data that _hair() returns. It also
-		# removes "<" and ">" characters, if there are any left. One more thing it
-		# does is to check if the tag has a closing XHTML slash, and if it does,
-		# it puts one in the returned code as well.
-		###############################################################################
-		function _attr($element, $attr)
-		{
-			# Is there a closing XHTML slash at the end of the attributes?
-			$xhtml_slash = '';
-			if (preg_match('%\s/\s*$%', $attr))
-			{
-				$xhtml_slash = ' /';
-			}
-
-			# Are any attributes allowed at all for this element?
-			if (count($this->allowed_html[strtolower($element)]) == 0)
-			{
-				return "<$element$xhtml_slash>";
-			}
-
-			# Split it
-			$attrarr = $this->_hair($attr);
-
-			# Go through $attrarr, and save the allowed attributes for this element
-			# in $attr2
-			$attr2 = '';
-			foreach ($attrarr as $arreach)
-			{
-				$current = $this->allowed_html[strtolower($element)][strtolower($arreach['name'])];
-				if ($current == '')
-				{
-					# the attribute is not allowed
-					continue;
-				}
-
-				if (!is_array($current))
-				{
-					# there are no checks
-					$attr2 .= ' '.$arreach['whole'];
-				}
-				else
-				{
-					# there are some checks
-					$ok = true;
-					foreach ($current as $currkey => $currval)
-					{
-						if (!$this->_check_attr_val($arreach['value'], $arreach['vless'], $currkey, $currval))
-						{
-							$ok = false;
-							break;
-						}
-					}
-
-					if ($ok)
-					{
-						# it passed them
-						$attr2 .= ' '.$arreach['whole'];
-					}
-				} # if !is_array($current)
-			} # foreach
-
-			# Remove any "<" or ">" characters
-			$attr2 = preg_replace('/[<>]/', '', $attr2);
-			return "<$element$attr2$xhtml_slash>";
-		} # function _attr
-
-		###############################################################################
-		# This function does a lot of work. It parses an attribute list into an array
-		# with attribute data, and tries to do the right thing even if it gets weird
-		# input. It will add quotes around attribute values that don't have any quotes
-		# or apostrophes around them, to make it easier to produce HTML code that will
-		# conform to W3C's HTML specification. It will also remove bad URL protocols
-		# from attribute values.
-		###############################################################################
-		function _hair($attr)
-		{
-			$attrarr  = array();
-			$mode     = 0;
-			$attrname = '';
-
-			# Loop through the whole attribute list
-
-			while (strlen($attr) != 0)
-			{
-				# Was the last operation successful?
-				$working = 0;
-
-				switch ($mode)
-				{
-					case 0:	# attribute name, href for instance
-						if (preg_match('/^([-a-zA-Z]+)/', $attr, $match))
-						{
-							$attrname = $match[1];
-							$working = $mode = 1;
-							$attr = preg_replace('/^[-a-zA-Z]+/', '', $attr);
-						}
-						break;
-					case 1:	# equals sign or valueless ("selected")
-						if (preg_match('/^\s*=\s*/', $attr)) # equals sign
-						{
-							$working = 1;
-							$mode    = 2;
-							$attr    = preg_replace('/^\s*=\s*/', '', $attr);
-							break;
-						}
-						if (preg_match('/^\s+/', $attr)) # valueless
-						{
-							$working   = 1;
-							$mode      = 0;
-							$attrarr[] = array(
-								'name'  => $attrname,
-								'value' => '',
-								'whole' => $attrname,
-								'vless' => 'y'
-							);
-							$attr      = preg_replace('/^\s+/', '', $attr);
-						}
-						break;
-					case 2: # attribute value, a URL after href= for instance
-						if (preg_match('/^"([^"]*)"(\s+|$)/', $attr, $match)) # "value"
-						{
-							$thisval   = $this->_bad_protocol($match[1]);
-							$attrarr[] = array(
-								'name'  => $attrname,
-								'value' => $thisval,
-								'whole' => "$attrname=\"$thisval\"",
-								'vless' => 'n'
-							);
-							$working   = 1;
-							$mode      = 0;
-							$attr      = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr);
-							break;
-						}
-						if (preg_match("/^'([^']*)'(\s+|$)/", $attr, $match)) # 'value'
-						{
-							$thisval   = $this->_bad_protocol($match[1]);
-							$attrarr[] = array(
-								'name'  => $attrname,
-								'value' => $thisval,
-								'whole' => "$attrname='$thisval'",
-								'vless' => 'n'
-							);
-							$working   = 1;
-							$mode      = 0;
-							$attr      = preg_replace("/^'[^']*'(\s+|$)/", '', $attr);
-							break;
-						}
-						if (preg_match("%^([^\s\"']+)(\s+|$)%", $attr, $match)) # value
-						{
-							$thisval   = $this->_bad_protocol($match[1]);
-							$attrarr[] = array(
-								'name'  => $attrname,
-								'value' => $thisval,
-								'whole' => "$attrname=\"$thisval\"",
-								'vless' => 'n'
-							);
-							# We add quotes to conform to W3C's HTML spec.
-							$working   = 1;
-							$mode      = 0;
-							$attr      = preg_replace("%^[^\s\"']+(\s+|$)%", '', $attr);
-						}
-						break;
-				} # switch
-
-				if ($working == 0) # not well formed, remove and try again
-				{
-					$attr = $this->_html_error($attr);
-					$mode = 0;
-				}
-			} # while
-
-			# special case, for when the attribute list ends with a valueless
-			# attribute like "selected"
-			if ($mode == 1)
-			{
-				$attrarr[] = array(
-					'name'  => $attrname,
-					'value' => '',
-					'whole' => $attrname,
-					'vless' => 'y'
-				);
-			}
-
-			return $attrarr;
-		} # function _hair
-
-		###############################################################################
-		# This function removes all non-allowed protocols from the beginning of
-		# $string. It ignores whitespace and the case of the letters, and it does
-		# understand HTML entities. It does its work in a while loop, so it won't be
-		# fooled by a string like "javascript:javascript:alert(57)".
-		###############################################################################
-		function _bad_protocol($string)
-		{
-			$string  = $this->_no_null($string);
-			$string2 = $string.'a';
-
-			while ($string != $string2)
-			{
-				$string2 = $string;
-				$string  = $this->_bad_protocol_once($string);
-			} # while
-
-			return $string;
-		} # function _bad_protocol
-
-		###############################################################################
-		# This function searches for URL protocols at the beginning of $string, while
-		# handling whitespace and HTML entities.
-		###############################################################################
-		function _bad_protocol_once($string)
-		{
-			return preg_replace(
-				'/^((&[^;]*;|[\sA-Za-z0-9])*)'.
-				'(:|&#58;|&#[Xx]3[Aa];)\s*/e',
-				'\$this->_bad_protocol_once2("\\1")',
-				$string
-			);
-			return $string;
-		} # function _bad_protocol_once
-
-
-		###############################################################################
-		# This function processes URL protocols, checks to see if they're in the white-
-		# list or not, and returns different data depending on the answer.
-		###############################################################################
-		function _bad_protocol_once2($string)
-		{
-			$string2 = $this->_decode_entities($string2);
-			$string2 = preg_replace('/\s/', '', $string);
-			$string2 = $this->_no_null($string2);
-			$string2 = strtolower($string2);
-
-			$allowed = false;
-			foreach ($this->allowed_protocols as $one_protocol)
-			{
-				if (strtolower($one_protocol) == $string2)
-				{
-					$allowed = true;
-					break;
-				}
-			}
-
-			if ($allowed)
-			{
-				return "$string2:";
-			}
-			else
-			{
-				return '';
-			}
-		} # function _bad_protocol_once2
-
-		###############################################################################
-		# This function performs different checks for attribute values. The currently
-		# implemented checks are "maxlen", "minlen", "maxval", "minval" and "valueless"
-		# with even more checks to come soon.
-		###############################################################################
-		function _check_attr_val($value, $vless, $checkname, $checkvalue)
-		{
-			$ok = true;
-
-			switch (strtolower($checkname))
-			{
-				# The maxlen check makes sure that the attribute value has a length not
-				# greater than the given value. This can be used to avoid Buffer Overflows
-				# in WWW clients and various Internet servers.
-				case 'maxlen':
-					if (strlen($value) > $checkvalue)
-					{
-						$ok = false;
-					}
-					break;
-
-				# The minlen check makes sure that the attribute value has a length not
-				# smaller than the given value.
-				case 'minlen':
-					if (strlen($value) < $checkvalue)
-					{
-						$ok = false;
-					}
-					break;
-
-				# The maxval check does two things: it checks that the attribute value is
-				# an integer from 0 and up, without an excessive amount of zeroes or
-				# whitespace (to avoid Buffer Overflows). It also checks that the attribute
-				# value is not greater than the given value.
-				# This check can be used to avoid Denial of Service attacks.
-				case 'maxval':
-					if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value))
-					{
-						$ok = false;
-					}
-					if ($value > $checkvalue)
-					{
-						$ok = false;
-					}
-					break;
-
-				# The minval check checks that the attribute value is a positive integer,
-				# and that it is not smaller than the given value.
-				case 'minval':
-					if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value))
-					{
-						$ok = false;
-					}
-					if ($value < $checkvalue)
-					{
-						$ok = false;
-					}
-					break;
-
-				# The valueless check checks if the attribute has a value
-				# (like <a href="blah">) or not (<option selected>). If the given value
-				# is a "y" or a "Y", the attribute must not have a value.
-				# If the given value is an "n" or an "N", the attribute must have one.
-				case 'valueless':
-				if (strtolower($checkvalue) != $vless)
-				{
-					$ok = false;
-				}
-				break;
-
-			} # switch
-
-			return $ok;
-		} # function _check_attr_val
-
-		###############################################################################
-		# This function changes the character sequence  \"  to just  "
-		# It leaves all other slashes alone. It's really weird, but the quoting from
-		# preg_replace(//e) seems to require this.
-		###############################################################################
-		function _stripslashes($string)
-		{
-			return preg_replace('%\\\\"%', '"', $string);
-		} # function _stripslashes
-
-		###############################################################################
-		# This function deals with parsing errors in _hair(). The general plan is
-		# to remove everything to and including some whitespace, but it deals with
-		# quotes and apostrophes as well.
-		###############################################################################
-		function _html_error($string)
-		{
-			return preg_replace('/^("[^"]*("|$)|\'[^\']*(\'|$)|\S)*\s*/', '', $string);
-		} # function _html_error
-
-		###############################################################################
-		# This function decodes numeric HTML entities (&#65; and &#x41;). It doesn't
-		# do anything with other entities like &auml;, but we don't need them in the
-		# URL protocol white listing system anyway.
-		###############################################################################
-		function _decode_entities($string)
-		{
-			$string = preg_replace('/&#([0-9]+);/e', 'chr("\\1")', $string);
-			$string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', 'chr(hexdec("\\1"))', $string);
-			return $string;
-		} # function _decode_entities
-
-		###############################################################################
-		# This function returns kses' version number.
-		###############################################################################
-		function _version()
-		{
-			return '0.0.2 (OOP fork of kses 0.2.1)';
-		} # function _version
-	}
+<?php
+	/*
+	 * ==========================================================================================
+	 *
+	 * This program is free software and open source software; you can redistribute
+	 * it and/or modify it under the terms of the GNU General Public License as
+	 * published by the Free Software Foundation; either version 2 of the License,
+	 * or (at your option) any later version.
+	 *
+	 * This program is distributed in the hope that it will be useful, but WITHOUT
+	 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+	 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+	 * more details.
+	 *
+	 * You should have received a copy of the GNU General Public License along
+	 * with this program; if not, write to the Free Software Foundation, Inc.,
+	 * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  or visit
+	 * http://www.gnu.org/licenses/gpl.html
+	 *
+	 * ==========================================================================================
+	 */
+
+	/**
+	*	Class file for PHP4 OOP version of kses
+	*
+	*	This is an updated version of kses to work with PHP4 that works under E_STRICT.
+	*
+	*	This upgrade provides the following:
+	*	+ Version number synced to procedural version number
+	*	+ PHPdoc style documentation has been added to the class.  See http://www.phpdoc.org/ for more info.
+	*	+ Some methods are now deprecated due to nomenclature style change.  See method documentation for specifics.
+	*	+ Kses4 now works in E_STRICT
+	*	+ Addition of methods AddProtocols(), filterKsestextHook(), RemoveProtocol() and RemoveProtocols()
+	*	+ Deprecated _hook(), Protocols()
+	*	+ Integrated code from kses 0.2.2 into class.
+	*	+ Added methods DumpProtocols(), DumpMethods()
+	*
+	*	@package    kses
+	*	@subpackage kses4
+	*/
+
+	if(substr(phpversion(), 0, 1) < 4)
+	{
+		die("Class kses requires PHP 4 or higher.");
+	}
+
+	/**
+	*	Only install KSES4 once
+	*/
+	if(!defined('KSES_CLASS_PHP4'))
+	{
+		define('KSES_CLASS_PHP4', true);
+
+	/**
+	*	Kses strips evil scripts!
+	*
+	*	This class provides the capability for removing unwanted HTML/XHTML, attributes from
+	*	tags, and protocols contained in links.  The net result is a much more powerful tool
+	*	than the PHP internal strip_tags()
+	*
+	*	This is a fork of a slick piece of procedural code called 'kses' written by Ulf Harnhammar
+	*	The entire set of functions was wrapped in a PHP object with some internal modifications
+	*	by Richard Vasquez (http://www.chaos.org/) 7/25/2003
+	*
+	*	This upgrade provides the following:
+	*	+ Version number synced to procedural version number
+	*	+ PHPdoc style documentation has been added to the class.  See http://www.phpdoc.org/ for more info.
+	*	+ Some methods are now deprecated due to nomenclature style change.  See method documentation for specifics.
+	*	+ Kses4 now works in E_STRICT
+	*	+ Addition of methods AddProtocols(), filterKsestextHook(), RemoveProtocol(), RemoveProtocols() and SetProtocols()
+	*	+ Deprecated _hook(), Protocols()
+	*	+ Integrated code from kses 0.2.2 into class.
+	*
+	*	@author     Richard R. Vsquez, Jr. (Original procedural code by Ulf Hrnhammar)
+	*	@link       http://sourceforge.net/projects/kses/ Home Page for Kses
+	*	@link       http://chaos.org/contact/ Contact page with current email address for Richard Vasquez
+	*	@copyright  Richard R. Vsquez, Jr. 2003-2005
+	*	@version    PHP4 OOP 0.2.2
+	*	@license    http://www.gnu.org/licenses/gpl.html GNU Public License
+	*	@package    kses
+	*/
+		class kses4
+		{
+			/**#@+
+			 *	@access private
+			 *	@var array
+			 */
+			var $allowed_protocols = array();
+			var $allowed_html      = array();
+			/**#@-*/
+
+			/**
+			 *	Constructor for kses.
+			 *
+			 *	This sets a default collection of protocols allowed in links, and creates an
+			 *	empty set of allowed HTML tags.
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function kses4()
+			{
+				/**
+				 *	You could add protocols such as ftp, new, gopher, mailto, irc, etc.
+				 *
+				 *	The base values the original kses provided were:
+				 *		'http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'gopher', 'mailto'
+				 */
+				$this->allowed_protocols = array('http', 'ftp', 'mailto');
+				$this->allowed_html      = array();
+			}
+
+			/**
+			 *	Basic task of kses - parses $string and strips it as required.
+			 *
+			 *	This method strips all the disallowed (X)HTML tags, attributes
+			 *	and protocols from the input $string.
+			 *
+			 *	@access public
+			 *	@param string $string String to be stripped of 'evil scripts'
+			 *	@return string The stripped string
+			 *	@since PHP4 OOP 0.2.1
+			 */
+			function Parse($string = "")
+			{
+				if (get_magic_quotes_gpc())
+				{
+					$string = stripslashes($string);
+				}
+				$string = $this->_no_null($string);
+				$string = $this->_js_entities($string);
+				$string = $this->_normalize_entities($string);
+				$string = $this->filterKsesTextHook($string);
+				return    $this->_split($string);
+			}
+
+			/**
+			 *	Allows for single/batch addition of protocols
+			 *
+			 *	This method accepts one argument that can be either a string
+			 *	or an array of strings.  Invalid data will be ignored.
+			 *
+			 *	The argument will be processed, and each string will be added
+			 *	via AddProtocol().
+			 *
+			 *	@access public
+			 *	@param mixed , A string or array of protocols that will be added to the internal list of allowed protocols.
+			 *	@return bool Status of adding valid protocols.
+			 *	@see AddProtocol()
+			 *	@since PHP4 OOP 0.2.1
+			 */
+			function AddProtocols()
+			{
+				$c_args = func_num_args();
+				if($c_args != 1)
+				{
+					trigger_error("kses4::AddProtocols() did not receive an argument.", E_USER_WARNING);
+					return false;
+				}
+
+				$protocol_data = func_get_arg(0);
+
+				if(is_array($protocol_data) && count($protocol_data) > 0)
+				{
+					foreach($protocol_data as $protocol)
+					{
+						$this->AddProtocol($protocol);
+					}
+					return true;
+				}
+				elseif(is_string($protocol_data))
+				{
+					$this->AddProtocol($protocol_data);
+					return true;
+				}
+				else
+				{
+					trigger_error("kses4::AddProtocols() did not receive a string or an array.", E_USER_WARNING);
+					return false;
+				}
+			}
+
+			/**
+			 *	Allows for single/batch addition of protocols
+			 *
+			 *	@deprecated Use AddProtocols()
+			 *	@see AddProtocols()
+			 *	@return bool
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function Protocols()
+			{
+				$c_args = func_num_args();
+				if($c_args != 1)
+				{
+					trigger_error("kses4::Protocols() did not receive an argument.", E_USER_WARNING);
+					return false;
+				}
+
+				return $this->AddProtocols(func_get_arg(0));
+			}
+
+			/**
+			 *	Adds a single protocol to $this->allowed_protocols.
+			 *
+			 *	This method accepts a string argument and adds it to
+			 *	the list of allowed protocols to keep when performing
+			 *	Parse().
+			 *
+			 *	@access public
+			 *	@param string $protocol The name of the protocol to be added.
+			 *	@return bool Status of adding valid protocol.
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function AddProtocol($protocol = "")
+			{
+				if(!is_string($protocol))
+				{
+					trigger_error("kses4::AddProtocol() requires a string.", E_USER_WARNING);
+					return false;
+				}
+
+				$protocol = strtolower(trim($protocol));
+				if($protocol == "")
+				{
+					trigger_error("kses4::AddProtocol() tried to add an empty/NULL protocol.", E_USER_WARNING);
+					return false;
+				}
+
+				// Remove any inadvertent ':' at the end of the protocol.
+				if(substr($protocol, strlen($protocol) - 1, 1) == ":")
+				{
+					$protocol = substr($protocol, 0, strlen($protocol) - 1);
+				}
+
+				if(!in_array($protocol, $this->allowed_protocols))
+				{
+					array_push($this->allowed_protocols, $protocol);
+					sort($this->allowed_protocols);
+				}
+				return true;
+			}
+
+			/**
+			 *	Allows for single/batch replacement of protocols
+			 *
+			 *	This method accepts one argument that can be either a string
+			 *	or an array of strings.  Invalid data will be ignored.
+			 *
+			 *	Existing protocols will be removed, then the argument will be
+			 *	processed, and each string will be added via AddProtocol().
+			 *
+			 *	@access public
+			 *	@param mixed , A string or array of protocols that will be the new internal list of allowed protocols.
+			 *	@return bool Status of replacing valid protocols.
+			 *	@since PHP4 OOP 0.2.2
+			 *	@see AddProtocol()
+			 */
+			function SetProtocols()
+			{
+				$c_args = func_num_args();
+				if($c_args != 1)
+				{
+					trigger_error("kses4::SetProtocols() did not receive an argument.", E_USER_WARNING);
+					return false;
+				}
+
+				$protocol_data = func_get_arg(0);
+
+				if(is_array($protocol_data) && count($protocol_data) > 0)
+				{
+					$this->allowed_protocols = array();
+					foreach($protocol_data as $protocol)
+					{
+						$this->AddProtocol($protocol);
+					}
+					return true;
+				}
+				elseif(is_string($protocol_data))
+				{
+					$this->allowed_protocols = array();
+					$this->AddProtocol($protocol_data);
+					return true;
+				}
+				else
+				{
+					trigger_error("kses4::SetProtocols() did not receive a string or an array.", E_USER_WARNING);
+					return false;
+				}
+			}
+
+			/**
+			 *	Raw dump of allowed protocols
+			 *
+			 *	This returns an indexed array of allowed protocols for a particular KSES
+			 *	instantiation.
+			 *
+			 *	@access public
+			 *	@return array The list of allowed protocols.
+			 *	@since PHP4 OOP 0.2.2
+			 */
+			function DumpProtocols()
+			{
+				return $this->allowed_protocols;
+			}
+
+			/**
+			 *	Raw dump of allowed (X)HTML elements
+			 *
+			 *	This returns an indexed array of allowed (X)HTML elements and attributes
+			 *	for a particular KSES instantiation.
+			 *
+			 *	@access public
+			 *	@return array The list of allowed elements.
+			 *	@since PHP4 OOP 0.2.2
+			 */
+			function DumpElements()
+			{
+				return $this->allowed_html;
+			}
+
+			/**
+			 *	Adds valid (X)HTML with corresponding attributes that will be kept when stripping 'evil scripts'.
+			 *
+			 *	This method accepts one argument that can be either a string
+			 *	or an array of strings.  Invalid data will be ignored.
+			 *
+			 *	@access public
+			 *	@param string $tag (X)HTML tag that will be allowed after stripping text.
+			 *	@param array $attribs Associative array of allowed attributes - key => attribute name - value => attribute parameter
+			 *	@return bool Status of Adding (X)HTML and attributes.
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function AddHTML($tag = "", $attribs = array())
+			{
+				if(!is_string($tag))
+				{
+					trigger_error("kses4::AddHTML() requires the tag to be a string", E_USER_WARNING);
+					return false;
+				}
+
+				$tag = strtolower(trim($tag));
+				if($tag == "")
+				{
+					trigger_error("kses4::AddHTML() tried to add an empty/NULL tag", E_USER_WARNING);
+					return false;
+				}
+
+				if(!is_array($attribs))
+				{
+					trigger_error("kses4::AddHTML() requires an array (even an empty one) of attributes for '$tag'", E_USER_WARNING);
+					return false;
+				}
+
+				$new_attribs = array();
+				if(is_array($attribs) && count($attribs) > 0)
+				{
+					foreach($attribs as $idx1 => $val1)
+					{
+						$new_idx1 = strtolower($idx1);
+						$new_val1 = $attribs[$idx1];
+
+						if(is_array($new_val1) && count($new_val1) > 0)
+						{
+							$tmp_val = array();
+							foreach($new_val1 as $idx2 => $val2)
+							{
+								$new_idx2 = strtolower($idx2);
+								$tmp_val[$new_idx2] = $val2;
+							}
+							$new_val1 = $tmp_val;
+						}
+
+						$new_attribs[$new_idx1] = $new_val1;
+					}
+				}
+
+				$this->allowed_html[$tag] = $new_attribs;
+				return true;
+			}
+
+			/**
+			 *	Removes a single protocol from $this->allowed_protocols.
+			 *
+			 *	This method accepts a string argument and removes it from
+			 *	the list of allowed protocols to keep when performing
+			 *	Parse().
+			 *
+			 *	@access public
+			 *	@param string $protocol The name of the protocol to be removed.
+			 *	@return bool Status of removing valid protocol.
+			 *	@since PHP4 OOP 0.2.1
+			 */
+			function RemoveProtocol($protocol = "")
+			{
+				if(!is_string($protocol))
+				{
+					trigger_error("kses4::RemoveProtocol() requires a string.", E_USER_WARNING);
+					return false;
+				}
+
+				// Remove any inadvertent ':' at the end of the protocol.
+				if(substr($protocol, strlen($protocol) - 1, 1) == ":")
+				{
+					$protocol = substr($protocol, 0, strlen($protocol) - 1);
+				}
+
+				$protocol = strtolower(trim($protocol));
+				if($protocol == "")
+				{
+					trigger_error("kses4::RemoveProtocol() tried to remove an empty/NULL protocol.", E_USER_WARNING);
+					return false;
+				}
+
+				//	Ensures that the protocol exists before removing it.
+				if(in_array($protocol, $this->allowed_protocols))
+				{
+					$this->allowed_protocols = array_diff($this->allowed_protocols, array($protocol));
+					sort($this->allowed_protocols);
+				}
+
+				return true;
+			}
+
+			/**
+			 *	Allows for single/batch removal of protocols
+			 *
+			 *	This method accepts one argument that can be either a string
+			 *	or an array of strings.  Invalid data will be ignored.
+			 *
+			 *	The argument will be processed, and each string will be removed
+			 *	via RemoveProtocol().
+			 *
+			 *	@access public
+			 *	@param mixed , A string or array of protocols that will be removed from the internal list of allowed protocols.
+			 *	@return bool Status of removing valid protocols.
+			 *	@see RemoveProtocol()
+			 *	@since PHP5 OOP 0.2.1
+			 */
+			function RemoveProtocols()
+			{
+				$c_args = func_num_args();
+				if($c_args != 1)
+				{
+					return false;
+				}
+
+				$protocol_data = func_get_arg(0);
+
+				if(is_array($protocol_data) && count($protocol_data) > 0)
+				{
+					foreach($protocol_data as $protocol)
+					{
+						$this->RemoveProtocol($protocol);
+					}
+				}
+				elseif(is_string($protocol_data))
+				{
+					$this->RemoveProtocol($protocol_data);
+					return true;
+				}
+				else
+				{
+					trigger_error("kses4::RemoveProtocols() did not receive a string or an array.", E_USER_WARNING);
+					return false;
+				}
+			}
+
+			/**
+			 *	This method removes any NULL or characters in $string.
+			 *
+			 *	@access private
+			 *	@param string $string
+			 *	@return string String without any NULL/chr(173)
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _no_null($string)
+			{
+				$string = preg_replace('/\0+/', '', $string);
+				$string = preg_replace('/(\\\\0)+/', '', $string);
+				return $string;
+			}
+
+			/**
+			 *	This function removes the HTML JavaScript entities found in early versions of
+			 *	Netscape 4.
+			 *
+			 *	@access private
+			 *	@param string $string
+			 *	@return string String without any NULL/chr(173)
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _js_entities($string)
+			{
+			  return preg_replace('%&\s*\{[^}]*(\}\s*;?|$)%', '', $string);
+			}
+
+			/**
+			 *	Normalizes HTML entities
+			 *
+			 *	This function normalizes HTML entities. It will convert "AT&T" to the correct
+			 *	"AT&amp;T", "&#00058;" to "&#58;", "&#XYZZY;" to "&amp;#XYZZY;" and so on.
+			 *
+			 *	@access private
+			 *	@param string $string
+			 *	@return string String with normalized entities
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _normalize_entities($string)
+			{
+				# Disarm all entities by converting & to &amp;
+			  $string = str_replace('&', '&amp;', $string);
+
+				# Change back the allowed entities in our entity white list
+
+			  $string = preg_replace('/&amp;([A-Za-z][A-Za-z0-9]{0,19});/', '&\\1;', $string);
+			  $string = preg_replace('/&amp;#0*([0-9]{1,5});/e', '\$this->_normalize_entities2("\\1")', $string);
+			  $string = preg_replace('/&amp;#([Xx])0*(([0-9A-Fa-f]{2}){1,2});/', '&#\\1\\2;', $string);
+
+			  return $string;
+			}
+
+			/**
+			 *	Helper method used by normalizeEntites()
+			 *
+			 *	This method helps normalizeEntities() to only accept 16 bit values
+			 *	and nothing more for &#number; entities.
+			 *
+			 *	This method helps normalize_entities() during a preg_replace()
+			 *	where a &#(0)*XXXXX; occurs.  The '(0)*XXXXXX' value is converted to
+			 *	a number and the result is returned as a numeric entity if the number
+			 *	is less than 65536.  Otherwise, the value is returned 'as is'.
+			 *
+			 *	@access private
+			 *	@param string $i
+			 *	@return string Normalized numeric entity
+			 *	@see _normalize_entities()
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _normalize_entities2($i)
+			{
+			  return (($i > 65535) ? "&amp;#$i;" : "&#$i;");
+			}
+
+			/**
+			 *	Allows for additional user defined modifications to text.
+			 *
+			 *	@deprecated use filterKsesTextHook()
+			 *	@param string $string
+			 *	@see filterKsesTextHook()
+			 *	@return string
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _hook($string)
+			{
+			  return $this->filterKsesTextHook($string);
+			}
+
+			/**
+			 *	Allows for additional user defined modifications to text.
+			 *
+			 *	This method allows for additional modifications to be performed on
+			 *	a string that's being run through Parse().  Currently, it returns the
+			 *	input string 'as is'.
+			 *
+			 *	This method is provided for users to extend the kses class for their own
+			 *	requirements.
+			 *
+			 *	@access public
+			 *	@param string $string String to perfrom additional modifications on.
+			 *	@return string User modified string.
+			 *	@see Parse()
+			 *	@since PHP5 OOP 1.0.0
+			 */
+			function filterKsesTextHook($string)
+			{
+			  return $string;
+			}
+
+			/**
+			 *	This method goes through an array, and changes the keys to all lower case.
+			 *
+			 *	@access private
+			 *	@param array $in_array Associative array
+			 *	@return array Modified array
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _array_lc($inarray)
+			{
+			  $outarray = array();
+
+				if(is_array($inarray) && count($inarray) > 0)
+				{
+					foreach ($inarray as $inkey => $inval)
+					{
+						$outkey = strtolower($inkey);
+						$outarray[$outkey] = array();
+
+						if(is_array($inval) && count($inval) > 0)
+						{
+							foreach ($inval as $inkey2 => $inval2)
+							{
+								$outkey2 = strtolower($inkey2);
+								$outarray[$outkey][$outkey2] = $inval2;
+							}
+						}
+					}
+				}
+
+			  return $outarray;
+			}
+
+			/**
+			 *	This method searched for HTML tags, no matter how malformed.  It also
+			 *	matches stray ">" characters.
+			 *
+			 *	@access private
+			 *	@param string $string
+			 *	@return string HTML tags
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _split($string)
+			{
+				return preg_replace(
+					'%(<'.   # EITHER: <
+					'[^>]*'. # things that aren't >
+					'(>|$)'. # > or end of string
+					'|>)%e', # OR: just a >
+					"\$this->_split2('\\1')",
+					$string);
+			}
+
+			/**
+			 *	This method strips out disallowed and/or mangled (X)HTML tags along with assigned attributes.
+			 *
+			 *	This method does a lot of work. It rejects some very malformed things
+			 *	like <:::>. It returns an empty string if the element isn't allowed (look
+			 *	ma, no strip_tags()!). Otherwise it splits the tag into an element and an
+			 *	allowed attribute list.
+			 *
+			 *	@access private
+			 *	@param string $string
+			 *	@return string Modified string minus disallowed/mangled (X)HTML and attributes
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _split2($string)
+			{
+				$string = $this->_stripslashes($string);
+
+				if (substr($string, 0, 1) != '<')
+				{
+					# It matched a ">" character
+					return '&gt;';
+				}
+
+				if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9]+)([^>]*)>?$%', $string, $matches))
+				{
+					# It's seriously malformed
+					return '';
+				}
+
+				$slash    = trim($matches[1]);
+				$elem     = $matches[2];
+				$attrlist = $matches[3];
+
+				if (
+					!isset($this->allowed_html[strtolower($elem)]) ||
+					!is_array($this->allowed_html[strtolower($elem)])
+				)
+				{
+					# They are using a not allowed HTML element
+					return '';
+				}
+
+				if ($slash != '')
+				{
+					return "<$slash$elem>";
+				}
+				# No attributes are allowed for closing elements
+
+				return $this->_attr("$slash$elem", $attrlist);
+			}
+
+			/**
+			 *	This method strips out disallowed attributes for (X)HTML tags.
+			 *
+			 *	This method removes all attributes if none are allowed for this element.
+			 *	If some are allowed it calls $this->_hair() to split them further, and then it
+			 *	builds up new HTML code from the data that $this->_hair() returns. It also
+			 *	removes "<" and ">" characters, if there are any left. One more thing it
+			 *	does is to check if the tag has a closing XHTML slash, and if it does,
+			 *	it puts one in the returned code as well.
+			 *
+			 *	@access private
+			 *	@param string $element (X)HTML tag to check
+			 *	@param string $attr Text containing attributes to check for validity.
+			 *	@return string Resulting valid (X)HTML or ''
+			 *	@see _hair()
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _attr($element, $attr)
+			{
+				# Is there a closing XHTML slash at the end of the attributes?
+				$xhtml_slash = '';
+				if (preg_match('%\s/\s*$%', $attr))
+				{
+					$xhtml_slash = ' /';
+				}
+
+				# Are any attributes allowed at all for this element?
+				if (
+					!isset($this->allowed_html[strtolower($element)]) ||
+					count($this->allowed_html[strtolower($element)]) == 0
+				)
+				{
+					return "<$element$xhtml_slash>";
+				}
+
+				# Split it
+				$attrarr = $this->_hair($attr);
+
+				# Go through $attrarr, and save the allowed attributes for this element
+				# in $attr2
+				$attr2 = '';
+				if(is_array($attrarr) && count($attrarr) > 0)
+				{
+					foreach ($attrarr as $arreach)
+					{
+						if(!isset($this->allowed_html[strtolower($element)][strtolower($arreach['name'])]))
+						{
+							continue;
+						}
+
+						$current = $this->allowed_html[strtolower($element)][strtolower($arreach['name'])];
+						if ($current == '')
+						{
+							# the attribute is not allowed
+							continue;
+						}
+
+						if (!is_array($current))
+						{
+							# there are no checks
+							$attr2 .= ' '.$arreach['whole'];
+						}
+						else
+						{
+							# there are some checks
+							$ok = true;
+							if(is_array($current) && count($current) > 0)
+							{
+								foreach ($current as $currkey => $currval)
+								{
+									if (!$this->_check_attr_val($arreach['value'], $arreach['vless'], $currkey, $currval))
+									{
+										$ok = false;
+										break;
+									}
+								}
+
+								if ($ok)
+								{
+									# it passed them
+									$attr2 .= ' '.$arreach['whole'];
+								}
+							}
+						}
+					}
+				}
+
+				# Remove any "<" or ">" characters
+				$attr2 = preg_replace('/[<>]/', '', $attr2);
+				return "<$element$attr2$xhtml_slash>";
+			}
+
+			/**
+			 *	This method combs through an attribute list string and returns an associative array of attributes and values.
+			 *
+			 *	This method does a lot of work. It parses an attribute list into an array
+			 *	with attribute data, and tries to do the right thing even if it gets weird
+			 *	input. It will add quotes around attribute values that don't have any quotes
+			 *	or apostrophes around them, to make it easier to produce HTML code that will
+			 *	conform to W3C's HTML specification. It will also remove bad URL protocols
+			 *	from attribute values.
+			 *
+			 *	@access private
+			 *	@param string $attr Text containing tag attributes for parsing
+			 *	@return array Associative array containing data on attribute and value
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _hair($attr)
+			{
+				$attrarr  = array();
+				$mode     = 0;
+				$attrname = '';
+
+				# Loop through the whole attribute list
+
+				while (strlen($attr) != 0)
+				{
+					# Was the last operation successful?
+					$working = 0;
+
+					switch ($mode)
+					{
+						case 0:	# attribute name, href for instance
+							if (preg_match('/^([-a-zA-Z]+)/', $attr, $match))
+							{
+								$attrname = $match[1];
+								$working = $mode = 1;
+								$attr = preg_replace('/^[-a-zA-Z]+/', '', $attr);
+							}
+							break;
+						case 1:	# equals sign or valueless ("selected")
+							if (preg_match('/^\s*=\s*/', $attr)) # equals sign
+							{
+								$working = 1;
+								$mode    = 2;
+								$attr    = preg_replace('/^\s*=\s*/', '', $attr);
+								break;
+							}
+							if (preg_match('/^\s+/', $attr)) # valueless
+							{
+								$working   = 1;
+								$mode      = 0;
+								$attrarr[] = array(
+									'name'  => $attrname,
+									'value' => '',
+									'whole' => $attrname,
+									'vless' => 'y'
+								);
+								$attr      = preg_replace('/^\s+/', '', $attr);
+							}
+							break;
+						case 2: # attribute value, a URL after href= for instance
+							if (preg_match('/^"([^"]*)"(\s+|$)/', $attr, $match)) # "value"
+							{
+								$thisval   = $this->_bad_protocol($match[1]);
+								$attrarr[] = array(
+									'name'  => $attrname,
+									'value' => $thisval,
+									'whole' => "$attrname=\"$thisval\"",
+									'vless' => 'n'
+								);
+								$working   = 1;
+								$mode      = 0;
+								$attr      = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr);
+								break;
+							}
+							if (preg_match("/^'([^']*)'(\s+|$)/", $attr, $match)) # 'value'
+							{
+								$thisval   = $this->_bad_protocol($match[1]);
+								$attrarr[] = array(
+									'name'  => $attrname,
+									'value' => $thisval,
+									'whole' => "$attrname='$thisval'",
+									'vless' => 'n'
+								);
+								$working   = 1;
+								$mode      = 0;
+								$attr      = preg_replace("/^'[^']*'(\s+|$)/", '', $attr);
+								break;
+							}
+							if (preg_match("%^([^\s\"']+)(\s+|$)%", $attr, $match)) # value
+							{
+								$thisval   = $this->_bad_protocol($match[1]);
+								$attrarr[] = array(
+									'name'  => $attrname,
+									'value' => $thisval,
+									'whole' => "$attrname=\"$thisval\"",
+									'vless' => 'n'
+								);
+								# We add quotes to conform to W3C's HTML spec.
+								$working   = 1;
+								$mode      = 0;
+								$attr      = preg_replace("%^[^\s\"']+(\s+|$)%", '', $attr);
+							}
+							break;
+					}
+
+					if ($working == 0) # not well formed, remove and try again
+					{
+						$attr = $this->_html_error($attr);
+						$mode = 0;
+					}
+				}
+
+				# special case, for when the attribute list ends with a valueless
+				# attribute like "selected"
+				if ($mode == 1)
+				{
+					$attrarr[] = array(
+						'name'  => $attrname,
+						'value' => '',
+						'whole' => $attrname,
+						'vless' => 'y'
+					);
+				}
+
+				return $attrarr;
+			}
+
+			/**
+			 *	This method removes disallowed protocols.
+			 *
+			 *	This method removes all non-allowed protocols from the beginning of
+			 *	$string. It ignores whitespace and the case of the letters, and it does
+			 *	understand HTML entities. It does its work in a while loop, so it won't be
+			 *	fooled by a string like "javascript:javascript:alert(57)".
+			 *
+			 *	@access private
+			 *	@param string $string String to check for protocols
+			 *	@return string String with removed protocols
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _bad_protocol($string)
+			{
+				$string  = $this->_no_null($string);
+				$string = preg_replace('/\xad+/', '', $string); # deals with Opera "feature"
+				$string2 = $string.'a';
+
+				while ($string != $string2)
+				{
+					$string2 = $string;
+					$string  = $this->_bad_protocol_once($string);
+				} # while
+
+				return $string;
+			}
+
+			/**
+			 *	Helper method used by _bad_protocol()
+			 *
+			 *	This function searches for URL protocols at the beginning of $string, while
+			 *	handling whitespace and HTML entities.
+			 *
+			 *	@access private
+			 *	@param string $string String to check for protocols
+			 *	@return string String with removed protocols
+			 *	@see _bad_protocol()
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _bad_protocol_once($string)
+			{
+				return preg_replace(
+					'/^((&[^;]*;|[\sA-Za-z0-9])*)'.
+					'(:|&#58;|&#[Xx]3[Aa];)\s*/e',
+					'\$this->_bad_protocol_once2("\\1")',
+					$string
+				);
+			}
+
+			/**
+			 *	Helper method used by _bad_protocol_once() regex
+			 *
+			 *	This function processes URL protocols, checks to see if they're in the white-
+			 *	list or not, and returns different data depending on the answer.
+			 *
+			 *	@access private
+			 *	@param string $string String to check for protocols
+			 *	@return string String with removed protocols
+			 *	@see _bad_protocol()
+			 *	@see _bad_protocol_once()
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _bad_protocol_once2($string)
+			{
+				$string = $this->_decode_entities($string);
+				$string = preg_replace('/\s/', '', $string);
+				$string = $this->_no_null($string);
+				$string = preg_replace('/\xad+/', '', $string); # deals with Opera "feature"
+				$string = strtolower($string);
+
+				$allowed = false;
+				if(is_array($this->allowed_protocols) && count($this->allowed_protocols) > 0)
+				{
+					foreach ($this->allowed_protocols as $one_protocol)
+					{
+						if (strtolower($one_protocol) == $string)
+						{
+							$allowed = true;
+							break;
+						}
+					}
+				}
+
+				if ($allowed)
+				{
+					return "$string:";
+				}
+				else
+				{
+					return '';
+				}
+			}
+
+			/**
+			 *	This function performs different checks for attribute values.
+			 *
+			 *	The currently implemented checks are "maxlen", "minlen", "maxval",
+			 *	"minval" and "valueless" with even more checks to come soon.
+			 *
+			 *	@access private
+			 *	@param string $value The value of the attribute to be checked.
+			 *	@param string $vless Indicates whether the the value is supposed to be valueless
+			 *	@param string $checkname The check to be performed
+			 *	@param string $checkvalue The value that is to be checked against
+			 *	@return bool Indicates whether the check passed or not
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _check_attr_val($value, $vless, $checkname, $checkvalue)
+			{
+				$ok = true;
+
+				switch (strtolower($checkname))
+				{
+					/**
+					*	The maxlen check makes sure that the attribute value has a length not
+					*	greater than the given value. This can be used to avoid Buffer Overflows
+					*	in WWW clients and various Internet servers.
+					*/
+					case 'maxlen':
+						if (strlen($value) > $checkvalue)
+						{
+							$ok = false;
+						}
+						break;
+
+					/**
+					*	The minlen check makes sure that the attribute value has a length not
+					*	smaller than the given value.
+					*/
+					case 'minlen':
+						if (strlen($value) < $checkvalue)
+						{
+							$ok = false;
+						}
+						break;
+
+					/**
+					*	The maxval check does two things: it checks that the attribute value is
+					*	an integer from 0 and up, without an excessive amount of zeroes or
+					*	whitespace (to avoid Buffer Overflows). It also checks that the attribute
+					*	value is not greater than the given value.
+					*	This check can be used to avoid Denial of Service attacks.
+					*/
+					case 'maxval':
+						if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value))
+						{
+							$ok = false;
+						}
+						if ($value > $checkvalue)
+						{
+							$ok = false;
+						}
+						break;
+
+					/**
+					*	The minval check checks that the attribute value is a positive integer,
+					*	and that it is not smaller than the given value.
+					*/
+					case 'minval':
+						if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value))
+						{
+							$ok = false;
+						}
+						if ($value < $checkvalue)
+						{
+							$ok = false;
+						}
+						break;
+
+					/**
+					*	The valueless check checks if the attribute has a value
+					*	(like <a href="blah">) or not (<option selected>). If the given value
+					*	is a "y" or a "Y", the attribute must not have a value.
+					*	If the given value is an "n" or an "N", the attribute must have one.
+					*/
+					case 'valueless':
+					if (strtolower($checkvalue) != $vless)
+					{
+						$ok = false;
+					}
+					break;
+
+				}
+
+				return $ok;
+			}
+
+			/**
+			 *	Changes \" to "
+			 *
+			 *	This function changes the character sequence  \"  to just  "
+			 *	It leaves all other slashes alone. It's really weird, but the quoting from
+			 *	preg_replace(//e) seems to require this.
+			 *
+			 *	@access private
+			 *	@param string $string The string to be stripped.
+			 *	@return string string stripped of \"
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _stripslashes($string)
+			{
+				return preg_replace('%\\\\"%', '"', $string);
+			}
+
+			/**
+			 *	helper method for _hair()
+			 *
+			 *	This function deals with parsing errors in _hair(). The general plan is
+			 *	to remove everything to and including some whitespace, but it deals with
+			 *	quotes and apostrophes as well.
+			 *
+			 *	@access private
+			 *	@param string $string The string to be stripped.
+			 *	@return string string stripped of whitespace
+			 *	@see _hair()
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _html_error($string)
+			{
+				return preg_replace('/^("[^"]*("|$)|\'[^\']*(\'|$)|\S)*\s*/', '', $string);
+			}
+
+			/**
+			 *	Decodes numeric HTML entities
+			 *
+			 *	This method decodes numeric HTML entities (&#65; and &#x41;). It doesn't
+			 *	do anything with other entities like &auml;, but we don't need them in the
+			 *	URL protocol white listing system anyway.
+			 *
+			 *	@access private
+			 *	@param string $value The entitiy to be decoded.
+			 *	@return string Decoded entity
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _decode_entities($string)
+			{
+				$string = preg_replace('/&#([0-9]+);/e', 'chr("\\1")', $string);
+				$string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', 'chr(hexdec("\\1"))', $string);
+				return $string;
+			}
+
+			/**
+			 *	Returns PHP4 OOP version # of kses.
+			 *
+			 *	Since this class has been refactored and documented and proven to work,
+			 *	I'm syncing the version number to procedural kses.
+			 *
+			 *	@access public
+			 *	@return string Version number
+			 *	@since PHP4 OOP 0.0.1
+			 */
+			function _version()
+			{
+				return 'PHP4 0.2.2 (OOP fork of procedural kses 0.2.2)';
+			}
+		}
+
+
+
+	}
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/navbar.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/navbar.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/navbar.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/navbar.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,174 @@
+<?php
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +-------------------------------------------------------------------------+
+// | Geeklog 1.3                                                             |
+// +-------------------------------------------------------------------------+
+// | navbar.class.php                                                        |
+// |                                                                         |
+// | class to create and display a CSS based Navbar for site navigation      |
+// +-------------------------------------------------------------------------+
+// | Copyright (C) 2004 by Consult4Hire Inc.                                 |
+// |                                                                         |
+// | Author:                                                                 |
+// | Blaine Lang                 -    blaine@portalparts.com                 |
+// +-------------------------------------------------------------------------+
+// |                                                                         |
+// | This program is free software; you can redistribute it and/or           |
+// | modify it under the terms of the GNU General Public License             |
+// | as published by the Free Software Foundation; either version 2          |
+// | of the License, or (at your option) any later version.                  |
+// |                                                                         |
+// | This program is distributed in the hope that it will be useful,         |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                    |
+// | See the GNU General Public License for more details.                    |
+// |                                                                         |
+// | You should have received a copy of the GNU General Public License       |
+// | along with this program; if not, write to the Free Software Foundation, |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.         |
+// |                                                                         |
+// +-------------------------------------------------------------------------+
+//
+
+/**
+* This class will allow you to setup and generate a CSS Tab Menu
+* Version 1.0 June 4, 2005
+*
+* @author       Blaine Lang <blaine@portalparts.com>
+*
+*/
+
+/* Example Use 
+    include ($_CONF['path_system'] . 'classes/navbar.class.php');
+
+    $menuitems = array (
+        'Site Links' => $_CONF['site_url'] .'/links.php',
+        'My Calendar'=> $_CONF['site_url'] .'/calendar.php',
+        'Polls'      => $_CONF['site_url'] .'/pollbooth.php'
+    );
+
+    $navbar = new navbar;
+    $navbar->set_menuitems($menuitems);
+
+    // Add a menuitem if user has access
+    if (SEC_inGroup('Root')) {
+        $navbar->add_menuitem('Admin Home',$_CONF['site_admin_url'] . '/moderation.php');
+    }
+
+    // Add a Menuiem which activates a Javascript function when the onClick event is triggered
+    $navbar->add_menuitem('On click test','alert("This works");',true);
+
+    // Add a new Menuitem which may or may not have a URL to redirect to but also triggers an onClick JS function
+    $navbar->add_menuitem('Search Engine','http://www.google.com');
+    // Pass in the label to attach the onClick function to
+    $navbar->set_onclick('Search Engine','return confirm("Do you want to leave this site?");');
+
+    // Set the current selected tab
+    $navbar->set_selected('My Calendar');
+    echo $navbar->generate();
+
+*/
+
+
+class navbar  {
+
+    // Private Properties
+    /**
+    * @access private
+    */
+    var $_menuitems;      // Array
+    /**
+    * @access private
+    */
+    var $_selected = '';      // string
+    /**
+    * @access private
+    */
+    var $_parms = '';      // string
+    /**
+    * @access private
+    */
+    var $_onclick;      // Array
+
+
+    /**
+    * Constructor
+    *
+    */
+    function navbar()
+    {
+    }
+
+    function set_menuitems($menuitems)
+    {
+       $this->_menuitems = $menuitems;
+    }
+
+    function add_menuitem($label,$link,$onclick=false)
+    {
+        if ($onclick) {
+            $this->_menuitems[$label] = '#';
+            $this->set_onClick($label, $link);
+        } else {
+            $this->_menuitems[$label] = $link;
+        }
+    }
+
+
+    function set_selected($selected)
+    {
+        $this->_selected = $selected;
+    }
+
+    function set_defaultparms($parms)
+    {
+        $this->_parms = $parms;
+    }
+
+    function set_onClick($item, $option)
+    {
+        $this->_onclick[$item] = $option;
+    }
+
+    function generate() {
+        global $_CONF;
+        $navtemplate = new Template($_CONF['path_layout'] . 'navbar');
+        $navtemplate->set_file (array (
+            'navbar'       => 'navbar.thtml',
+            'menuitem'     => 'menuitem.thtml',
+            ));
+
+        if ($this->_parms != '') {
+            $navtemplate->set_var( 'parms',  $this->_parms);
+        }
+
+        for ($i=1; $i <= count($this->_menuitems); $i++)  {
+            $label = key($this->_menuitems);
+            $linkurl = current($this->_menuitems);
+            if ( is_array($this->_onclick) AND array_key_exists($label,$this->_onclick) ) {
+                $onclick = " onClick='{$this->_onclick[$label]}'";
+                $navtemplate->set_var( 'onclick', $onclick);
+                $navtemplate->set_var( 'link', ($linkurl == '') ? '#' : $linkurl);
+            } else {
+                $navtemplate->set_var( 'onclick', '');
+                $navtemplate->set_var( 'link', $linkurl);
+            }
+            if ($label == $this->_selected) {
+                $navtemplate->set_var( 'cssactive', ' id="active"');
+                $navtemplate->set_var( 'csscurrent',' id="current"');
+            } else {
+                $navtemplate->set_var( 'cssactive', '');
+                $navtemplate->set_var( 'csscurrent','');
+            }
+            $navtemplate->set_var( 'label',  $label);
+            $navtemplate->parse( 'menuitems', 'menuitem', true );
+            next($this->_menuitems);
+        }
+        $navtemplate->parse ('output', 'navbar');
+        $retval = $navtemplate->finish($navtemplate->get_var('output'));
+        return $retval;
+    }
+
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/rss.feed.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/rss.feed.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/rss.feed.class.php	2004-12-31 10:02:21.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/rss.feed.class.php	1969-12-31 18:00:00.000000000 -0600
@@ -1,285 +0,0 @@
-<?php
-
-/* Reminder: always indent with 4 spaces (no tabs). */
-// +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
-// +---------------------------------------------------------------------------+
-// | rss.feed.class.php                                                        |
-// |                                                                           |
-// | Geeklog class for RSS 0.91 feeds.                                         |
-// +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2003 by the following authors:                         |
-// |                                                                           |
-// | Authors: Tony Bibbs       - tony AT geeklog DOT net                       |
-// |          Dirk Haun        - dirk AT haun-online DOT de                    |
-// +---------------------------------------------------------------------------+
-// |                                                                           |
-// | This program is free software; you can redistribute it and/or             |
-// | modify it under the terms of the GNU General Public License               |
-// | as published by the Free Software Foundation; either version 2            |
-// | of the License, or (at your option) any later version.                    |
-// |                                                                           |
-// | This program is distributed in the hope that it will be useful,           |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
-// | GNU General Public License for more details.                              |
-// |                                                                           |
-// | You should have received a copy of the GNU General Public License         |
-// | along with this program; if not, write to the Free Software Foundation,   |
-// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-//
-// $Id: rss.feed.class.php,v 1.1 2003/08/12 21:10:06 dhaun Exp $
-
-/**
-* Geeklog RSS 0.91 class
-*
-* Parts of this code have originally been lifted from phpweblog which is
-* licenced under the GPL. It has since been heavily modified.
-*
-* @author Dirk Haun <dirk AT haun-online DOT de>
-* @package net.geeklog.rss
-*
-*/
-class Rss {
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feedfile = 'geeklog.rdf';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feedpath = '';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feedurl = '';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_sitelink = '';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feedtitle = '';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feeddesc = '';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feedlang = 'en-gb';
-
-    /**
-    * @access private
-    * @var string
-    */
-    var $_feedencoding = 'UTF-8';
-
-    /**
-    * @access private
-    * @var int
-    */
-    var $_feedcontentlen = 0;
-
-
-    /**
-    * Constructor
-    *
-    * Initializes private variables.
-    *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
-    * @access public
-    *
-    */
-    function Rss ()
-    {
-        global $_CONF;
-
-        if (!empty ($_CONF['default_charset'])) {
-            $this->_feedencoding = $_CONF['default_charset'];
-        } else {
-            $this->_feedencoding = 'UTF-8';
-        }
-
-        if (!empty ($_CONF['rdf_language'])) {
-            $this->_feedlang = $_CONF['rdf_language'];
-        } else {
-            $this->_feedlang = $_CONF['locale'];
-        }
-    }
-
-    /**
-    * Set file name for the RSS feed.
-    *
-    * @param   string   filename   actual file name, e.g. 'geeklog.rdf'
-    *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
-    * @access public
-    *
-    */
-    function setFeedfile ($filename = '')
-    {
-        global $_CONF;
-
-        if (!empty ($filename)) {
-            $this->_feedfile = $filename;
-        } else {
-            $pos = strrpos ($_CONF['rdf_file'], '/');
-            $this->_feedfile = substr ($_CONF['rdf_file'], $pos + 1);
-        }
-        $path = $_CONF['rdf_file'];
-        $pos = strrpos ($path, '/');
-        $path = substr ($path, 0, $pos + 1);
-        $this->_feedpath = $path . $this->_feedfile;
-        $this->_feedurl = substr_replace ($path, $_CONF['site_url'], 0,
-                                          strlen ($_CONF['path_html']) - 1);
-    }
-
-    /**
-    * Set information for an RSS feed.
-    *
-    * @param string   link    link to the site where this feed originates
-    * @param string   title   (short) title of the feed
-    * @param string   desc    (longer) description of the feed
-    *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
-    * @access public
-    *
-    */
-    function setFeedinfo ($link = '', $title = '', $desc = '')
-    {
-        $this->_sitelink = $link;
-        $this->_feedtitle = $title;
-        $this->_feeddesc = $desc;
-    }
-
-    /**
-    * Set formats for an RSS feed.
-    *
-    * @param int      contentlen    length of the content of an entry
-    * @param string   language      feed language, e.g. 'en-gb'
-    * @param string   encoding      feed encoding, e.g. 'UTF-8'
-    *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
-    * @access public
-    *
-    */
-    function setFeedformats ($contentlen = 0, $language = '', $encoding = '')
-    {
-        $this->_feedcontentlen = $contentlen;
-
-        if (!empty ($language)) {
-            $this->_feedlang = $language;
-        }
-
-        if (!empty ($encoding)) {
-            $this->_feedencoding = $encoding;
-        }
-    }
-
-    /**
-    * Format the content of an item
-    *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
-    * @access private
-    *
-    */
-    function _formatContent ($text)
-    {
-        $storytext = trim (strip_tags ($text));
-        $storytext = preg_replace ("/(\015)/", "", $storytext);
-        if ($this->_feedcontentlen > 1) {
-            if (strlen ($storytext) > $this->_feedcontentlen) {
-                $storytext = substr ($storytext, 0, $this->_feedcontentlen - 3)
-                           . '...';
-            }
-        }
-
-        return htmlspecialchars ($storytext);
-    }
-
-    /**
-    * Write the actual feed file.
-    *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
-    * @access public
-    *
-    */
-    function write ($content)
-    {
-        global $LANG01;
-
-        if (sizeof ($content) == 0) {
-            return false;
-        }
-
-        $success = false;
-
-        if ($fd = @fopen ($this->_feedpath, 'w')) {
-            fputs ($fd, "<?xml version=\"1.0\" encoding=\"$this->_feedencoding\"?>\n\n");
-            // according to <http://feeds.archive.org/validator/>, this
-            // shouldn't be used any more ...
-            // fputs ($fd, "<!DOCTYPE rss PUBLIC \"-//Netscape Communications//DTD RSS 0.91//EN\"\n \"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\n");
-
-            fputs ($fd, "<rss version=\"0.91\">\n");
-            fputs ($fd, "<channel>\n");
-            fputs ($fd, '<title>' . htmlspecialchars ($this->_feedtitle)
-                        . "</title>\n");
-            fputs ($fd, '<link>' . htmlspecialchars ($this->_sitelink)
-                        . "</link>\n");
-            fputs ($fd, '<description>' . htmlspecialchars ($this->_feeddesc)
-                        . "</description>\n");
-            fputs ($fd, '<language>' . $this->_feedlang . "</language>\n\n");
-
-            foreach ($content as $entry) {
-                $desc = '';
-                if ($this->_feedcontentlen > 0) {
-                    $desc = '<description>'
-                          . $this->_formatContent ($entry['text'])
-                          . "</description>\n";
-                }
-                $title = '<title>' . htmlspecialchars ($entry['title'])
-                       . "</title>\n";
-                $link = '<link>' . htmlspecialchars ($entry['link'])
-                      . "</link>\n";
-
-                fputs ($fd, "<item>\n");
-                fputs ($fd, $title);
-                fputs ($fd, $link);
-                if (!empty ($desc)) {
-                    fputs ($fd, $desc);
-                }
-                fputs ($fd, "</item>\n\n");
-            }
-
-            fputs ($fd, "</channel>\n");
-            fputs ($fd, "</rss>\n");
-
-            fclose ($fd);
-
-            $success = true;
-        } else {
-            COM_errorLog ($LANG01[54] . ' ' . $this->_feedpath, 1);
-        }
-
-        return $success;
-    }
-}
-
-?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/sanitize.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/sanitize.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/sanitize.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/sanitize.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,327 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | sanitize.class.php                                                        |
+// |                                                                           |
+// | Geeklog data filtering or sanitizing class library.                       |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2002-2004 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
+// |          Dirk Haun        - dirk@haun-online.de                           |
+// |          Blaine Lang      - blaine@portalparts.com                        |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+
+/* Class derived from original procedural code in Geeklog 1.3.x lib-common.php
+*  Jan 2005: Blaine Lang
+*/
+
+if (strpos ($_SERVER['PHP_SELF'], 'sanitize.class.php') !== false) {
+    die ('This file can not be used on its own.');
+}
+
+/**
+ * Include the base kses class if not already loaded
+ */
+require_once($_CONF['path_system'] . 'classes/kses.class.php');
+
+class sanitize extends kses {
+
+    var $string = '';
+    var $_parmissions = '';
+    var $_isnumeric = false;
+    var $_logging = false;
+    var $_setglobal = false;
+    var $_censordata = false;
+
+    /* Filter or sanitize single parm */
+    function filterparm ($parm) {
+        global $_SERVER;
+
+        $p = $this->Parse( $parm );
+
+        if( $this->_isnumeric )
+        {
+            // Note: PHP's is_numeric() accepts values like 4e4 as numeric
+            if( !is_numeric( $p ) || ( preg_match( '/^([0-9]+)$/', $p ) == 0 ))
+            {
+               $p = 0;
+            }
+        }
+        else
+        {
+            $p = preg_replace( '/\/\*.*/', '', $p );
+            $pa = explode( "'", $p );
+            $pa = explode( '"', $pa[0] );
+            $pa = explode( '`', $pa[0] );
+            $pa = explode( ';', $pa[0] );
+            $pa = explode( '\\', $pa[0] );
+            $p = $pa[0];
+        }
+
+        if( $this->logging )
+        {
+            if( strcmp( $p, $parm ) != 0 )
+            {
+                COM_errorLog( "Filter applied: >> $parm << filtered to $p [IP {$_SERVER['REMOTE_ADDR']}]", 1);
+            }
+        }
+
+        return $p;
+
+    }
+
+    /* Prepare data for SQL insert and apply filtering 
+    *  Supports passing a single parm or array of parms
+    */
+    function prepareForDB($data) {
+        if (is_array($data)) {
+            # loop through array and apply the filters
+            foreach($data as $var)  {
+                $return_data[]  = addslashes($this->filterHTML($var));
+            }
+            return $return_data;
+        }
+        else
+        {
+            $data = $this->filterHTML($data);
+            $data = addslashes($data);
+            return $data;
+        }
+    }
+
+    function filterHTML ($message) {
+        global $_CONF;
+
+        // strip_tags() gets confused by HTML comments ...
+        $message = preg_replace( '/<!--.+?-->/', '', $message );
+
+        if( isset( $_CONF['allowed_protocols'] ) && is_array( $_CONF['allowed_protocols'] ) && ( sizeof( $_CONF['allowed_protocols'] ) > 0 ))
+        {
+            $this->Protocols( $_CONF['allowed_protocols'] );
+        }
+        else
+        {
+            $this->Protocols( array( 'http:', 'https:', 'ftp:' ));
+        }
+
+        if( empty( $this->permissions) || !SEC_hasRights( $this->permissions ) ||
+                empty( $_CONF['admin_html'] ))
+        {
+            $html = $_CONF['user_html'];
+        }
+        else
+        {
+            $html = array_merge_recursive( $_CONF['user_html'],
+                                           $_CONF['admin_html'] );
+        }
+
+        foreach( $html as $tag => $attr )
+        {
+            $this->AddHTML( $tag, $attr );
+        }
+
+        $message = $this->Parse( $message );
+        $message = $this->formatCode($message);
+        $message = $this->censor($message);
+        return $message;
+
+    }
+
+
+    /* Apply filtering to a single parm or array of parms
+    *  Parms may be in either $_POST or $_GET input parms array
+    *  If type (GET or POST) is not set then POST is checked first
+    *  Optionally Parms can be made global
+    */
+    function sanitizeParms($vars,$type='')  {
+      $return_data = array();
+
+      #setup common reference to SuperGlobals depending which array is needed
+      if ($type == "GET" OR $type == "POST") {
+        if ($type =="GET") { $SG_Array =& $_GET; }
+        if ($type =="POST") { $SG_Array =& $_POST; }
+
+        # loop through SuperGlobal data array and grab out data for allowed fields if found
+        foreach($vars as $key)  {
+          if (array_key_exists($key,$SG_Array)) { $return_data[$key]=$SG_Array[$key]; }
+        }
+
+      }
+      else
+      {
+        foreach ($vars as $key) {
+          if (array_key_exists($key, $_POST)) { 
+            $return_data[$key] = $_POST[$key];
+          }
+          elseif (array_key_exists($key, $_GET))
+          { 
+            $return_data[$key] = $_GET[$key];
+          }
+        }
+      }
+
+        # loop through $vars array and apply the filter
+        foreach($vars as $value)  {
+          $return_data[$value]  = $this->filterparm($return_data[$value]);
+        }
+
+      // Optionally set $GLOBALS or return the array
+      if ($this->_setglobal) {
+          # loop through final data and define all the variables using the $GLOBALS array
+          foreach ($return_data as $key=>$value)  {
+            $GLOBALS[$key]=$value;
+          }
+      }
+      else
+      {
+         return $return_data;
+      }
+
+    }
+
+
+    function formatCode($message)  {
+
+        // Get rid of any newline characters
+        $message = preg_replace( "/\n/", '', $message );
+
+        // Replace any $ with &#36; (HTML equiv)
+        $message = str_replace( '$', '&#36;', $message );
+
+        // handle [code] ... [/code]
+        do
+        {
+            $start_pos = strpos( strtolower( $message ), '[code]' );
+            if( $start_pos !== false )
+            {
+                $end_pos = strpos( strtolower( $message ), '[/code]' );
+                if( $end_pos !== false )
+                {
+                    $encoded = $this->_handleCode( substr( $message, $start_pos + 6,
+                            $end_pos - ( $start_pos + 6 )));
+                    $encoded = '<pre><code>' . $encoded . '</code></pre>';
+                    $message = substr( $message, 0, $start_pos ) . $encoded
+                         . substr( $message, $end_pos + 7 );
+                }
+                else // missing [/code]
+                {
+                    // Treat the rest of the text as code (so as not to lose any
+                    // special characters). However, the calling entity should
+                    // better be checking for missing [/code] before calling this
+                    // function ...
+                    $encoded = $this->_handleCode( substr( $message, $start_pos + 6 ));
+                    $encoded = '<pre><code>' . $encoded . '</code></pre>';
+                    $message = substr( $message, 0, $start_pos ) . $encoded;
+                }
+            }
+        }
+        while( $start_pos !== false );
+
+        return $message;
+
+    }
+
+    /**
+    * Handles the part within a [code] ... [/code] section, i.e. escapes all
+    * special characters.
+    *
+    * @param   string  $str  the code section to encode
+    * @return  string  $str with the special characters encoded
+    *
+    */
+    function _handleCode( $str )
+    {
+        $search  = array( '&',     '\\',    '<',    '>',    '[',     ']'     );
+        $replace = array( '&amp;', '&#92;', '&lt;', '&gt;', '&#91;', '&#93;' );
+
+        $str = str_replace( $search, $replace, $str );
+
+        return( $str );
+    }
+
+
+    /**
+    * This censors inappropriate content
+    *
+    * This will replace 'bad words' with something more appropriate
+    *
+    * @param        string      $message        String to check
+    * @return   string  Edited $Message
+    *
+    */
+
+    function censor ($message)
+    {
+        global $_CONF;
+
+        $editedMessage = $message;
+
+        if( $this->_censordata )
+        {
+            if( is_array( $_CONF['censorlist'] ))
+            {
+                $replacement = $_CONF['censorreplace'];
+
+                switch( $_CONF['censormode'])
+                {
+                    case 1: # Exact match
+                        $regExPrefix = '(\s*)';
+                        $regExSuffix = '(\W*)';
+                        break;
+
+                    case 2: # Word beginning
+                        $regExPrefix = '(\s*)';
+                        $regExSuffix = '(\w*)';
+                        break;
+
+                    case 3: # Word fragment
+                        $regExPrefix   = '(\w*)';
+                        $regExSuffix   = '(\w*)';
+                        break;
+                }
+
+                for( $i = 0; $i < count( $_CONF['censorlist']); $i++ )
+                {
+                    $editedMessage = eregi_replace( $regExPrefix . $_CONF['censorlist'][$i] . $regExSuffix, "\\1$replacement\\2", $editedMessage );
+                }
+            }
+        }
+
+        return $editedMessage;
+    }
+
+
+    function setPermissions($permissions) {
+        $this->permissions = $permissions;
+    }
+
+    function setLogging($state=false) {
+        $this->logging = $state;
+    }
+
+
+}
+
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/search.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/search.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/search.class.php	2004-12-31 10:02:21.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/search.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,13 +2,13 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | search.php                                                                |
 // |                                                                           |
 // | Geeklog search class.                                                     |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
 // | Authors: Tony Bibbs       - tony AT geeklog DOT net                       |
 // |          Dirk Haun        - dirk AT haun-online DOT de                    |
@@ -30,9 +30,9 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: search.class.php,v 1.28 2004/08/23 19:36:36 dhaun Exp $
+// $Id: search.class.php,v 1.49.2.1 2006/06/30 12:20:48 dhaun Exp $
 
-if (eregi ('search.class.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
+if (strpos ($_SERVER['PHP_SELF'], 'search.class.php') !== false) {
     die ('This file can not be used on its own.');
 }
 
@@ -51,49 +51,55 @@
     * @var string
     */
     var $_query = '';
-    
+
     /**
     * @access private
     * @var string
     */
     var $_topic = '';
-    
+
     /**
     * @access private
     * @var string
     */
     var $_dateStart = null;
-    
+
     /**
     * @access private
     * @var string
     */
     var $_dateEnd = null;
-    
+
     /**
     * @access private
     * @var integer
     */
     var $_author = null;
-    
+
     /**
     * @access private
     * @var string
     */
     var $_type = '';
-    
+
     /**
     * @access private
     * @var string
     */
     var $_keyType = '';
-    
+
+    /**
+    * @access private
+    * @var integer
+    */
+    var $_page = 0;
+
     /**
     * @access private
     * @var integer
     */
-    var $_page = null;
-    
+    var $_per_page = 10;
+
     /**
     * Constructor
     *
@@ -105,36 +111,56 @@
     */
     function Search()
     {
-        global $HTTP_POST_VARS, $HTTP_GET_VARS;
-        
-        // This page is register_globals friendly.  Because I
-        // can't guarantee a version of PHP > 4.1 I can't simply
-        // reference $_REQUEST so $input_vars simulates this.
-        $input_vars = array();
-        if (count($HTTP_POST_VARS) == 0) {
-            $input_vars = $HTTP_GET_VARS;
-        } else {
-            $input_vars = $HTTP_POST_VARS;
-        }
-        
+        global $_CONF;
+
         // Set search criteria
-        $this->_query = strip_tags (COM_stripslashes ($input_vars['query']));
-        $this->_topic = COM_applyFilter ($input_vars['topic']);
-        $this->_dateStart = COM_applyFilter ($input_vars['datestart']);
-        $this->_dateEnd = COM_applyFilter ($input_vars['dateend']);
-        $this->_author = COM_applyFilter ($input_vars['author']);
-        $this->_type = COM_applyFilter ($input_vars['type']);
+        if (isset ($_REQUEST['query'])) {
+            $this->_query = strip_tags (COM_stripslashes ($_REQUEST['query']));
+        }
+        if (isset ($_REQUEST['topic'])) {
+            $this->_topic = COM_applyFilter ($_REQUEST['topic']);
+        }
+        if (isset ($_REQUEST['datestart'])) {
+            $this->_dateStart = COM_applyFilter ($_REQUEST['datestart']);
+        }
+        if (isset ($_REQUEST['dateend'])) {
+            $this->_dateEnd = COM_applyFilter ($_REQUEST['dateend']);
+        }
+        if (isset ($_REQUEST['author'])) {
+            $this->_author = COM_applyFilter ($_REQUEST['author']);
+        }
+        if (isset ($_REQUEST['type'])) {
+            $this->_type = COM_applyFilter ($_REQUEST['type']);
+        }
         if (empty ($this->_type)) {
             $this->_type = 'all';
         }
-        $this->_keyType = COM_applyFilter ($input_vars['keyType']);
-        $this->_page = COM_applyFilter ($input_vars['page']);
-        
+        if (isset ($_REQUEST['keyType'])) {
+            $this->_keyType = COM_applyFilter ($_REQUEST['keyType']);
+        }
+        if (isset ($_REQUEST['results'])) {
+            $this->_per_page = COM_applyFilter ($_REQUEST['results'], true);
+        }
+        if ($this->_per_page < 1) {
+            if (isset ($_CONF['num_search_results']) &&
+                    ($_CONF['num_search_results'] > 0)) {
+                $this->_per_page = $_CONF['num_search_results'];
+            } else {
+                $this->_per_page = 10;
+            }
+        }
+        if (isset ($_REQUEST['page'])) {
+            $this->_page = COM_applyFilter ($_REQUEST['page'], true);
+        }
+        if ($this->_page < 1) {
+            $this->_page = 1;
+        }
+
         // In case we got a username instead of uid, convert it.  This should
         // make custom themes for search page easier.
         $this->_convertAuthor();
     }
-    
+
     /**
     * Converts a username to a uid
     *
@@ -145,12 +171,12 @@
     function _convertAuthor()
     {
         global $_TABLES;
-        
+
         if (is_numeric ($this->_author) &&
                 preg_match ('/^([0-9]+)$/', $this->_author)) {
             return;
         }
-        
+
         if (!empty ($this->_author)) {
             $this->_author = DB_getItem ($_TABLES['users'], 'uid',
                     "username='" . addslashes ($this->_author) . "'");
@@ -158,33 +184,16 @@
     }
 
     /**
-    * Create SQL to check the topic permissions of the current user.
+    * Return the user's username or full name for display, depending
+    * on the $_CONF['show_fullname'] config.php setting
     *
-    * @author Dirk Haun <dirk AT haun-online DOT de>
+    * @author Dirk Haun <dirk AT haun-online DOT de
     * @access private
     *
     */
-    function _checkTopicPermissions ()
+    function _displayName ($username, $fullname)
     {
-        global $_TABLES;
-
-        $topicsql = '';
-
-        $tresult = DB_query ("SELECT tid FROM {$_TABLES['topics']}"
-                             . COM_getPermSQL ());
-        $trows = DB_numRows ($tresult);
-        if ($trows > 0) {
-            $tids = array ();
-            for ($i = 0; $i < $trows; $i++) {
-                $T = DB_fetchArray ($tresult);
-                $tids[] = $T['tid'];
-            }
-            if (sizeof ($tids) > 0) {
-                $topicsql = "AND (tid IN ('" . implode ("','", $tids) . "')) ";
-            }
-        }
-
-        return $topicsql;
+        return COM_getDisplayName('', $username, $fullname);
     }
 
     /**
@@ -197,38 +206,23 @@
     */
     function _searchStories()
     {
-        global $LANG09, $_CONF, $_TABLES, $_USER, $_GROUPS;
-
-        $urlQuery = urlencode($this->_query);
+        global $_CONF, $_TABLES, $_USER, $_GROUPS, $LANG09;
 
-        if ($_CONF['max_search_results'] > 0) {
-            $resultLimit = $_CONF['max_search_results'];
-        }
+        $urlQuery = urlencode ($this->_query);
 
-        $resultPage = 1;
+        if ($this->_type == 'all' OR $this->_type == 'stories') {
 
-        if($this->_page > 1) {
-            $resultPage = $this->_page;
-        }
+            $select = "SELECT u.username,u.fullname,s.uid,sid,title,introtext,bodytext,hits,UNIX_TIMESTAMP(date) AS day,'story' AS type";
+            $sql = " FROM {$_TABLES['stories']} AS s,{$_TABLES['users']} AS u WHERE (draft_flag = 0) AND (date <= NOW()) AND (u.uid = s.uid) ";
 
-        $groupList = '';
-        if (!empty ($_USER['uid'])) {
-            foreach ($_GROUPS AS $grp) {
-                $groupList .= $grp . ',';
-            }
-            $groupList = substr($groupList, 0, -1);
-        }
-
-        if ($this->_type == 'all' OR $this->_type == 'stories') {
-            $sql = "SELECT sid,title,introtext,bodytext,hits,uid,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon,UNIX_TIMESTAMP(date) as day,'story' as type FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW()) " . $this->_checkTopicPermissions ();
             if (!empty ($this->_query)) {
                 if($this->_keyType == 'phrase') {
                     // do an exact phrase search (default)
                     $mywords[] = $this->_query;
                     $mysearchterm = addslashes ($this->_query);
-                    $sql .= "AND (introtext like '%$mysearchterm%'  ";
-                    $sql .= "OR bodytext like '%$mysearchterm%' ";
-                    $sql .= "OR title like '%$mysearchterm%')  ";
+                    $sql .= "AND (introtext LIKE '%$mysearchterm%' ";
+                    $sql .= "OR bodytext LIKE '%$mysearchterm%' ";
+                    $sql .= "OR title LIKE '%$mysearchterm%') ";
                 } elseif($this->_keyType == 'all') {
                     // must contain ALL of the keywords
                     $mywords = explode(' ', $this->_query);
@@ -236,9 +230,9 @@
                     $tmp = '';
                     foreach ($mywords AS $mysearchterm) {
                         $mysearchterm = addslashes (trim ($mysearchterm));
-                        $tmp .= "(introtext like '%$mysearchterm%' OR ";
-                        $tmp .= "bodytext like '%$mysearchterm%' OR ";
-                        $tmp .= "title like '%$mysearchterm%') AND ";
+                        $tmp .= "(introtext LIKE '%$mysearchterm%' OR ";
+                        $tmp .= "bodytext LIKE '%$mysearchterm%' OR ";
+                        $tmp .= "title LIKE '%$mysearchterm%') AND ";
                     }
                     $tmp = substr($tmp, 0, strlen($tmp) - 4);
                     $sql .= $tmp;
@@ -250,42 +244,46 @@
                     $tmp = '';
                     foreach ($mywords AS $mysearchterm) {
                         $mysearchterm = addslashes (trim ($mysearchterm));
-                        $tmp .= "(introtext like '%$mysearchterm%' OR ";
-                        $tmp .= "bodytext like '%$mysearchterm%' OR ";
-                        $tmp .= "title like '%$mysearchterm%') OR ";
+                        $tmp .= "(introtext LIKE '%$mysearchterm%' OR ";
+                        $tmp .= "bodytext LIKE '%$mysearchterm%' OR ";
+                        $tmp .= "title LIKE '%$mysearchterm%') OR ";
                     }
                     $tmp = substr($tmp, 0, strlen($tmp) - 3);
                     $sql .= "($tmp)";
                 } else {
                     $mywords[] = $this->_query;
                     $mysearchterm = addslashes ($this->_query);
-                    $sql .= "AND (introtext like '%$mysearchterm%'  ";
-                    $sql .= "OR bodytext like '%$mysearchterm%' ";
-                    $sql .= "OR title like '%$mysearchterm%')  ";
+                    $sql .= "AND (introtext LIKE '%$mysearchterm%' ";
+                    $sql .= "OR bodytext LIKE '%$mysearchterm%' ";
+                    $sql .= "OR title LIKE '%$mysearchterm%') ";
                 }
             }
             if (!empty($this->_dateStart) AND !empty($this->_dateEnd)) {
                 $delim = substr($this->_dateStart, 4, 1);
-                $DS = explode($delim, $this->_dateStart);
-                $DE = explode($delim, $this->_dateEnd);
-                $startdate = mktime(0,0,0,$DS[1],$DS[2],$DS[0]);
-                $enddate = mktime(23,59,59,$DE[1],$DE[2],$DE[0]);
-                $sql .= "AND (UNIX_TIMESTAMP(date) BETWEEN '$startdate' AND '$enddate') ";
+                if (!empty($delim)) {
+                    $DS = explode($delim, $this->_dateStart);
+                    $DE = explode($delim, $this->_dateEnd);
+                    $startdate = mktime(0,0,0,$DS[1],$DS[2],$DS[0]);
+                    $enddate = mktime(23,59,59,$DE[1],$DE[2],$DE[0]);
+                    $sql .= "AND (UNIX_TIMESTAMP(date) BETWEEN '$startdate' AND '$enddate') ";
+                }
             }
             if (!empty($this->_topic)) {
                 $sql .= "AND (tid = '$this->_topic') ";
             }
             if (!empty($this->_author) && ($this->_author > 0)) {
-                $sql .= "AND (uid = '$this->_author') ";
+                $sql .= "AND (s.uid = '$this->_author') ";
             }
-            $permsql = COM_getPermSQL ('AND');
+            $permsql = COM_getPermSQL ('AND') . COM_getTopicSQL ('AND');
             $sql .= $permsql;
-            $sql .= "ORDER BY date desc";
-    
-            $result_stories = DB_query($sql);
-            $nrows_stories = DB_numRows($result_stories);
-            $result_count = DB_query("SELECT COUNT(*) FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW())" . $permsql);
-            $B = DB_fetchArray($result_count, true);
+            $sql .= ' ORDER BY date DESC ';
+            $l = ($this->_per_page * $this->_page) - $this->_per_page;
+            $sql .= 'LIMIT ' . $l . ',' . $this->_per_page;
+
+            $result_stories = DB_query ($select . $sql);
+            $result_count = DB_query ('SELECT COUNT(*)' . $sql);
+            $B = DB_fetchArray ($result_count, true);
+
             $story_results = new Plugin();
             $story_results->searchlabel = $LANG09[53];
             $story_results->addSearchHeading($LANG09[16]);
@@ -294,41 +292,46 @@
             $story_results->addSearchHeading($LANG09[23]);
             $story_results->num_searchresults = 0;
             $story_results->num_itemssearched = $B[0];
-    
+            $story_results->supports_paging = true;
+
             // NOTE if any of your data items need to be links then add them
             // here! Make sure data elements are in an array and in the same
             // order as your headings above!
             while ($A = DB_fetchArray($result_stories)) {
-                if (SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']) > 0) {
-                    // get rows    
-                    $A['title'] = str_replace('$','&#36;',$A['title']);
-                    $thetime = COM_getUserDateTimeFormat($A['day']);
-                    if (empty ($urlQuery)) {
-                        $articleUrl = COM_buildUrl ($_CONF['site_url']
-                                        . '/article.php?story=' . $A['sid']);
-                    } else {
-                        $articleUrl = $_CONF['site_url'] . '/article.php?story='
-                            . $A['sid'] . '&amp;query=' . urlencode ($urlQuery);
-                    }
-                    $row = array ('<a href="' . $articleUrl . '">'
-                            . stripslashes ($A['title']) . '</a>', $thetime[0],
-                            DB_getItem ($_TABLES['users'], 'username',
-                            "uid = '{$A['uid']}'"), $A['hits']);
-                    $story_results->addSearchResult($row);
-                    $story_results->num_searchresults++;
+                // get rows
+                $A['title'] = str_replace ('$', '&#36;', $A['title']);
+                $thetime = COM_getUserDateTimeFormat ($A['day']);
+                if (empty ($urlQuery)) {
+                    $articleUrl = COM_buildUrl ($_CONF['site_url']
+                                    . '/article.php?story=' . $A['sid']);
                 } else {
-                    // user is not allowed to see this item so don't count it either
-                    $story_results->num_itemssearched--;
+                    $articleUrl = $_CONF['site_url'] . '/article.php?story='
+                        . $A['sid'] . '&amp;query=' . urlencode ($urlQuery);
                 }
+                $author = $this->_displayName ($A['username'], $A['fullname']);
+                if ($A['uid'] == 1) {
+                    $profile = $author;
+                } else {
+                    $profile = '<a href="' . $_CONF['site_url']
+                             . '/users.php?mode=profile&amp;uid=' . $A['uid']
+                             . '">' . $author . '</a>';
+                }
+                $row = array ('<a href="' . $articleUrl . '">'
+                              . stripslashes ($A['title']) . '</a>',
+                              $thetime[0], $profile,
+                              COM_NumberFormat ($A['hits']));
+                $story_results->addSearchResult ($row);
+                $story_results->num_searchresults++;
             }
         } else {
             $story_results = new Plugin();
             $story_results->searchlabel = $LANG09[37];
             $story_results->num_itemssearched = 0;
         }
+
         return $story_results;
     }
-    
+
     /**
     * Performs search on all comments
     *
@@ -339,63 +342,92 @@
     */
     function _searchComments()
     {
-        global $LANG09, $_CONF, $_TABLES, $_USER, $_GROUPS;
+        global $_CONF, $_TABLES, $_USER, $_GROUPS, $LANG09;
 
         if ($this->_type == 'all' OR $this->_type == 'comments') {
 
             $stsql = COM_getPermSQL ('AND', 0, 2, $_TABLES['stories']);
-            $stsql .= $this->_checkTopicPermissions ();
+            $stsql .= COM_getTopicSQL ('AND');
 
             $stwhere = '';
 
-            $groupList = '';
-            if (!empty ($_USER['uid'])) {
-                foreach ($_GROUPS as $grp) {
-                    $groupList .= $grp . ',';
-                }
-                $groupList = substr($groupList, 0, -1);
-            }
-            if (!empty ($_USER['uid'])) {
+            if (empty ($_USER['uid']) || ($_USER['uid'] == 1)) {
+                $stwhere .= "({$_TABLES['stories']}.perm_anon IS NOT NULL)";
+            } else {
                 $stwhere .= "({$_TABLES['stories']}.owner_id IS NOT NULL AND {$_TABLES['stories']}.perm_owner IS NOT NULL) OR ";
                 $stwhere .= "({$_TABLES['stories']}.group_id IS NOT NULL AND {$_TABLES['stories']}.perm_group IS NOT NULL) OR ";
-                $stwhere .= "({$_TABLES['stories']}.perm_members IS NOT NULL) OR ";
+                $stwhere .= "({$_TABLES['stories']}.perm_members IS NOT NULL)";
             }
-            $stwhere .= "({$_TABLES['stories']}.perm_anon IS NOT NULL)";
-    
-            $posql = COM_getPermSQL ('AND', 0, 2, $_TABLES['pollquestions']);
-            $powhere = '';
-            if (!empty ($_USER['uid'])) {
-                $powhere .= "({$_TABLES['pollquestions']}.owner_id IS NOT NULL AND {$_TABLES['pollquestions']}.perm_owner IS NOT NULL) OR ";
-                $powhere .= "({$_TABLES['pollquestions']}.group_id IS NOT NULL AND {$_TABLES['pollquestions']}.perm_group IS NOT NULL) OR ";
-                $powhere .= "({$_TABLES['pollquestions']}.perm_members IS NOT NULL) OR ";
-            }
-            $powhere .= "({$_TABLES['pollquestions']}.perm_anon IS NOT NULL)";
-    
+
             $mysearchterm = addslashes ($this->_query);
-            $sql = "SELECT {$_TABLES['stories']}.sid,{$_TABLES['comments']}.title,comment,pid,cid,{$_TABLES['comments']}.uid,{$_TABLES['comments']}.sid AS qid,type as comment_type,UNIX_TIMESTAMP({$_TABLES['comments']}.date) as day,'comment' as type FROM {$_TABLES['comments']} ";
+            $select = "SELECT {$_TABLES['users']}.username,{$_TABLES['users']}.fullname,{$_TABLES['stories']}.sid,{$_TABLES['comments']}.title,comment,pid,cid,{$_TABLES['comments']}.uid,{$_TABLES['comments']}.sid AS qid,type as comment_type,UNIX_TIMESTAMP({$_TABLES['comments']}.date) as day,'comment' as type";
+            $sql = " FROM {$_TABLES['users']},{$_TABLES['comments']} ";
             $sql .= "LEFT JOIN {$_TABLES['stories']} ON (({$_TABLES['stories']}.sid = {$_TABLES['comments']}.sid)" . $stsql . ") ";
-            $sql .= "LEFT JOIN {$_TABLES['pollquestions']} ON ((qid = {$_TABLES['comments']}.sid)" . $posql . ") ";
             $sql .= "WHERE ";
-            $sql .= "({$_TABLES['stories']}.draft_flag = 0) AND ({$_TABLES['stories']}.date <= NOW()) AND ";
-            $sql .= " (comment like '%$mysearchterm%' ";
-            $sql .= "OR {$_TABLES['comments']}.title like '%$mysearchterm%') ";
+            $sql .= " {$_TABLES['users']}.uid = {$_TABLES['comments']}.uid AND ";
+            $sql .= "({$_TABLES['stories']}.draft_flag = 0) AND ({$_TABLES['stories']}.date <= NOW()) ";
+
+            if (!empty ($this->_query)) {
+                if($this->_keyType == 'phrase') {
+                    // do an exact phrase search (default)
+                    $mywords[] = $this->_query;
+                    $mysearchterm = addslashes ($this->_query);
+                    $sql .= "AND (comment LIKE '%$mysearchterm%' ";
+                    $sql .= "OR {$_TABLES['comments']}.title LIKE '%$mysearchterm%') ";
+                } elseif($this->_keyType == 'all') {
+                    // must contain ALL of the keywords
+                    $mywords = explode(' ', $this->_query);
+                    $sql .= 'AND ';
+                    $tmp = '';
+                    foreach ($mywords AS $mysearchterm) {
+                        $mysearchterm = addslashes (trim ($mysearchterm));
+                        $tmp .= "(comment LIKE '%$mysearchterm%' OR ";
+                        $tmp .= "{$_TABLES['comments']}.title LIKE '%$mysearchterm%') AND ";
+                    }
+                    $tmp = substr($tmp, 0, strlen($tmp) - 4);
+                    $sql .= $tmp;
+                } else if ($this->_keyType == 'any') {
+                    // must contain ANY of the keywords
+                    $mywords = explode(' ', $this->_query);
+                    $sql .= 'AND ';
+                    $tmp = '';
+                    foreach ($mywords AS $mysearchterm) {
+                        $mysearchterm = addslashes (trim ($mysearchterm));
+                        $tmp .= "(comment LIKE '%$mysearchterm%' OR ";
+                        $tmp .= "{$_TABLES['comments']}.title LIKE '%$mysearchterm%') OR ";
+                    }
+                    $tmp = substr($tmp, 0, strlen($tmp) - 3);
+                    $sql .= "($tmp)";
+                } else {
+                    $mywords[] = $this->_query;
+                    $mysearchterm = addslashes ($this->_query);
+                    $sql .= "AND (comment LIKE '%$mysearchterm%' ";
+                    $sql .= "OR {$_TABLES['comments']}.title LIKE '%$mysearchterm%') ";
+                }
+            }
+
             if (!empty($this->_dateStart) && !empty($this->_dateEnd)) {
                 $delim = substr($this->_dateStart, 4, 1);
-                $DS = explode($delim, $this->_dateStart);
-                $DE = explode($delim, $this->_dateEnd);
-                $startdate = mktime(0,0,0,$DS[1],$DS[2],$DS[0]);
-                $enddate = mktime(23,59,59,$DE[1],$DE[2],$DE[0]);
-                $sql .= "AND (UNIX_TIMESTAMP({$_TABLES['comments']}.date) BETWEEN '$startdate' AND '$enddate') ";
+                if (!empty($delim)) {
+                    $DS = explode($delim, $this->_dateStart);
+                    $DE = explode($delim, $this->_dateEnd);
+                    $startdate = mktime(0,0,0,$DS[1],$DS[2],$DS[0]);
+                    $enddate = mktime(23,59,59,$DE[1],$DE[2],$DE[0]);
+                    $sql .= "AND (UNIX_TIMESTAMP({$_TABLES['comments']}.date) BETWEEN '$startdate' AND '$enddate') ";
+                }
             }
             if (!empty($this->_author)) {
                 $sql .= "AND ({$_TABLES['comments']}.uid = '$this->_author') ";
             }
-            $sql .= "AND ((" .  $stwhere . ") OR (" . $powhere . ")) ";
-            $sql .= "ORDER BY {$_TABLES['comments']}.date DESC";
-            $result_comments = DB_query($sql);
-            $sql = "SELECT count(*) FROM {$_TABLES['comments']} LEFT JOIN {$_TABLES['stories']} ON (({$_TABLES['stories']}.sid = {$_TABLES['comments']}.sid)" . $stsql . ") LEFT JOIN {$_TABLES['pollquestions']} ON ((qid = {$_TABLES['comments']}.sid)" . $posql . ") WHERE ((" .  $stwhere . ") OR (" . $powhere . "))";
-            $result_count = DB_query($sql);
+            $sql .= 'AND (' .  $stwhere . ') ';
+            $sql .= "ORDER BY {$_TABLES['comments']}.date DESC ";
+            $l = ($this->_per_page * $this->_page) - $this->_per_page;
+            $sql .= 'LIMIT ' . $l . ',' . $this->_per_page;
+
+            $result_comments = DB_query ($select . $sql);
+            $result_count = DB_query ('SELECT COUNT(*)' . $sql);
             $B = DB_fetchArray ($result_count, true);
+
             $comment_results = new Plugin();
             $comment_results->searchlabel = $LANG09[54];
             $comment_results->addSearchHeading($LANG09[16]);
@@ -403,23 +435,37 @@
             $comment_results->addSearchHeading($LANG09[18]);
             $comment_results->num_searchresults = 0;
             $comment_results->num_itemssearched = $B[0];
-    
-            // NOTE if any of your data items need to be links then add them here! 
-            // make sure data elements are in an array and in the same order as
-            // your headings above!
+            $comment_results->supports_paging = true;
+
+            if (!empty ($this->_query)) {
+                $querystring = '&amp;query=' . $this->_query;
+            } else {
+                $querystring = '';
+            }
+
+            // NOTE if any of your data items need to be links then add them
+            // here! Make sure data elements are in an array and in the same
+            // order as your headings above!
+            $names = array ();
             while ($A = DB_fetchArray($result_comments)) {
                 $A['title'] = str_replace('$','&#36;',$A['title']);
-                if (!empty ($this->_query)) {
-                    $querystring = '&amp;query=' . $this->_query;
-                } else {
-                    $querystring = '';
-                }
                 $A['title'] = '<a href="' . $_CONF['site_url']
                             . '/comment.php?mode=view&amp;cid=' . $A['cid']
-                            . '">' . stripslashes ($A['title']) . '</a>';
-
+                            . $querystring . '">' . stripslashes ($A['title'])
+                            . '</a>';
                 $thetime = COM_getUserDateTimeFormat ($A['day']);
-                $row = array ($A['title'], $thetime[0], DB_getItem ($_TABLES['users'], 'username', "uid = '{$A['uid']}'"));
+                if (empty ($names[$A['uid']])) {
+                    $names[$A['uid']] = COM_getDisplayName ($A['uid']);
+                }
+                $author = $names[$A['uid']];
+                if ($A['uid'] == 1) {
+                    $profile = $author;
+                } else {
+                    $profile = '<a href="' . $_CONF['site_url']
+                             . '/users.php?mode=profile&amp;uid=' . $A['uid']
+                             . '">' . $author . '</a>';
+                }
+                $row = array ($A['title'], $thetime[0], $profile);
                 $comment_results->addSearchResult($row);
                 $comment_results->num_searchresults++;
             }
@@ -428,106 +474,10 @@
             $comment_results->searchlabel = $LANG09[54];
             $comment_results->num_itemssearched = 0;
         }
-        return $comment_results;        
-    }
-    
-    /**
-    * Performs search on all links
-    *
-    * @author Tony Bibbs <tony AT geeklog DOT net>
-    * @access private
-    * @return object Plugin object
-    *
-    */
-    function _searchLinks()
-    {
-        global $LANG09, $_CONF, $_TABLES;
-
-        // Build SQL
-        if ( $this->_query != "" AND (($this->_type == 'links') OR ($this->_type == 'all')) ) {
-            $sql = "SELECT lid,title,description,url,hits,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE ";
-    
-            if ($this->_keyType == 'phrase') {
-                // do an exact phrase search (default)
-                $mywords[] = $this->_query;
-                $mysearchterm = addslashes ($this->_query);
-                $sql .= "(description like '%$mysearchterm%' ";
-                $sql .= "OR title like '%$mysearchterm%')  ";
-            } else if ($this->_keyType == 'all')  { 
-                // must contain ALL of the keywords
-                $mywords = explode(' ', $this->_query);
-                $tmp = '';
-                foreach ($mywords AS $mysearchterm) {
-                    $mysearchterm = addslashes (trim ($mysearchterm));
-                    $tmp .= "(description like '%$mysearchterm%' OR ";
-                    $tmp .= "title like '%$mysearchterm%') AND ";
-                }
-                $tmp = substr($tmp, 0, strlen($tmp) - 4);
-                $sql .= $tmp;
-            } elseif($this->_keyType == 'any') {
-                // need to do WORD searches
-                $mywords = explode(' ', $this->_query);
-                $tmp = '';
-                foreach ($mywords AS $mysearchterm) {
-                    $mysearchterm = addslashes (trim ($mysearchterm));
-                    $tmp .= "(description like '%$mysearchterm%' OR ";
-                    $tmp .= "title like '%$mysearchterm%') OR ";
-                }
-                $tmp = substr($tmp,0,strlen($tmp)-3);
-                $sql .= "($tmp)";
-            } else {
-                $mywords[] = $this->_query;
-                $mysearchterm = addslashes ($this->_query);
-                $sql .= "(description like '%$mysearchterm%' ";
-                $sql .= "OR title like '%$mysearchterm%')  ";
-            }
-    
-            if (!empty($this->_dateStart) AND !empty($this->_dateEnd)) {
-                $delim = substr($this->_dateStart, 4, 1);
-                $DS = explode($delim, $this->_dateStart);
-                $DE = explode($delim, $this->_dateEnd);
-                $startdate = mktime(0, 0, 0, $DS[1], $DS[2], $DS[0]);
-                $enddate = mktime(23, 59, 59, $DE[1], $DE[2], $DE[0]);
-                $sql .= "AND (UNIX_TIMESTAMP(date) BETWEEN '$startdate' AND '$enddate') ";
-            }
-            $sql .= "ORDER BY title ASC";
-            $result_links = DB_query($sql);
-            $nrows_links = DB_numRows($result_links);
-            $link_results = new Plugin();
-            $link_results->searchlabel = $LANG09[38];
-            $link_results->addSearchHeading($LANG09[16]);
-            $link_results->addSearchHeading($LANG09[33]);
-            $link_results->addSearchHeading($LANG09[23]);
-            $link_results->num_searchresults = 0;
-            $link_results->num_itemssearched = DB_count($_TABLES['links']);
-    
-            // NOTE if any of your data items need to be links then add them here! 
-            // make sure data elements are in an array and in the same order as
-            // your headings above!
-            while ($A = DB_fetchArray($result_links)) {
-                if (SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']) > 0) {
-                    $thetime = COM_getUserDateTimeFormat($A['day']);
-                    $row = array (stripslashes ($A['title']),
-                                  '<a href="' . COM_buildUrl ($_CONF['site_url']
-                                  . '/portal.php?what=link&amp;item='
-                                  . $A['lid']) . '">' . $A['url'] . '</a>',
-                                  $A['hits']);
-                    $link_results->addSearchResult($row);
-                    $link_results->num_searchresults++;
-                } else {
-                    // user is not allowed to see this item so don't count it either
-                    $link_results->num_itemssearched--;
-                }
-            }
-        } else {
-            $link_results = new Plugin();
-            $link_results->searchlabel = $LANG09[38];
-            $link_results->num_itemssearched = 0;
-        }
 
-        return $link_results;
+        return $comment_results;
     }
-    
+
     /**
     * Performs search on all events
     *
@@ -537,29 +487,30 @@
     */
     function _searchEvents()
     {
-        global $LANG09, $_CONF, $_TABLES;
-    
+        global $_CONF, $_TABLES, $LANG09, $LANG12;
+
         if (($this->_type == 'events') OR
             (($this->_type == 'all') AND empty($this->_author))) {
-            $sql = "SELECT eid,title,description,location,datestart,dateend,timestart,timeend,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon,UNIX_TIMESTAMP(datestart) as day FROM {$_TABLES['events']} WHERE ";
-    
+            $select = "SELECT eid,title,description,location,datestart,dateend,timestart,timeend,allday,UNIX_TIMESTAMP(datestart) AS day";
+            $sql = " FROM {$_TABLES['events']} WHERE ";
+
             if($this->_keyType == 'phrase') {
                 // do an exact phrase search (default)
                 $mywords[] = $this->_query;
                 $mysearchterm = addslashes ($this->_query);
-                $sql .= "(location like '%$mysearchterm%'  ";
-                $sql .= "OR description like '%$mysearchterm%' ";
-                $sql .= "OR title like '%$mysearchterm%') ";
-            } 
+                $sql .= "(location LIKE '%$mysearchterm%'  ";
+                $sql .= "OR description LIKE '%$mysearchterm%' ";
+                $sql .= "OR title LIKE '%$mysearchterm%') ";
+            }
             elseif($this->_keyType == 'all') {
                 //must contain ALL of the keywords
                 $mywords = explode(' ', $this->_query);
                 $tmp = '';
                 foreach ($mywords AS $mysearchterm) {
                     $mysearchterm = addslashes (trim ($mysearchterm));
-                    $tmp .= "(location like '%$mysearchterm%' OR ";
-                    $tmp .= "description like '%$mysearchterm%' OR ";
-                    $tmp .= "title like '%$mysearchterm%') AND ";
+                    $tmp .= "(location LIKE '%$mysearchterm%' OR ";
+                    $tmp .= "description LIKE '%$mysearchterm%' OR ";
+                    $tmp .= "title LIKE '%$mysearchterm%') AND ";
                 }
                 $tmp = substr($tmp, 0, strlen($tmp) - 4);
                 $sql .= $tmp;
@@ -569,9 +520,9 @@
                 $tmp = '';
                 foreach ($mywords AS $mysearchterm) {
                     $mysearchterm = addslashes (trim ($mysearchterm));
-                    $tmp .= "(location like '%$mysearchterm%' OR ";
-                    $tmp .= "description like '%$mysearchterm%' OR ";
-                    $tmp .= "title like '%$mysearchterm%') OR ";
+                    $tmp .= "(location LIKE '%$mysearchterm%' OR ";
+                    $tmp .= "description LIKE '%$mysearchterm%' OR ";
+                    $tmp .= "title LIKE '%$mysearchterm%') OR ";
                 }
                 $tmp = substr($tmp, 0, strlen($tmp) - 3);
                 $sql .= "($tmp)";
@@ -580,78 +531,86 @@
             {
                 $mywords[] = $this->_query;
                 $mysearchterm = addslashes ($this->_query);
-                $sql .= "(location like '%$mysearchterm%'  ";
-                $sql .= "OR description like '%$mysearchterm%' ";
-                $sql .= "OR title like '%$mysearchterm%')  ";
+                $sql .= "(location LIKE '%$mysearchterm%' ";
+                $sql .= "OR description LIKE '%$mysearchterm%' ";
+                $sql .= "OR title LIKE '%$mysearchterm%') ";
             }
 
             if (!empty($this->_dateStart) AND !empty($this->_dateEnd)) {
                 $delim = substr($this->_dateStart, 4, 1);
-                $DS = explode($delim, $this->_dateStart);
-                $DE = explode($delim, $this->_dateEnd);
-                $startdate = mktime(0, 0, 0, $DS[1], $DS[2], $DS[0]);
-                $enddate = mktime(23, 59, 59, $DE[1], $DE[2], $DE[0]);
-                $sql .= "AND (UNIX_TIMESTAMP(datestart) BETWEEN '$startdate' AND '$enddate') ";
-            }
-            $sql .= "ORDER BY datestart desc";
-            $result_events = DB_query($sql);
-            $nrows_events = DB_numRows($result_events);
+                if (!empty($delim)) {
+                    $DS = explode($delim, $this->_dateStart);
+                    $DE = explode($delim, $this->_dateEnd);
+                    $startdate = mktime(0, 0, 0, $DS[1], $DS[2], $DS[0]);
+                    $enddate = mktime(23, 59, 59, $DE[1], $DE[2], $DE[0]);
+                    $sql .= "AND (UNIX_TIMESTAMP(datestart) BETWEEN '$startdate' AND '$enddate') ";
+                }
+            }
+            $sql .= COM_getPermSQL ('AND');
+            $sql .= ' ORDER BY datestart DESC ';
+            $l = ($this->_per_page * $this->_page) - $this->_per_page;
+            $sql .= 'LIMIT ' . $l . ',' . $this->_per_page;
+
+            $result_events = DB_query ($select . $sql);
+            $result_count = DB_query ('SELECT COUNT(*)' . $sql);
+            $B = DB_fetchArray ($result_count, true);
+
             $event_results = new Plugin();
             $event_results->searchresults = array();
             $event_results->searchlabel = $LANG09[37];
-            if (!$_CONF['expanded_search_results']) 
-            {
-                $event_results->addSearchHeading($LANG09[16]);
-                $event_results->addSearchHeading($LANG09[37]);
-                $event_results->addSearchHeading($LANG09[34]);
-            }
+            $event_results->addSearchHeading($LANG09[16]);
+            $event_results->addSearchHeading($LANG09[49]);
+            $event_results->addSearchHeading($LANG09[34]);
+            $event_results->addSearchHeading($LANG12[15]);
             $event_results->num_searchresults = 0;
-            $event_results->num_itemssearched = DB_count($_TABLES['events']);
-    
-            // NOTE if any of your data items need to be links then add them here! 
-            // make sure data elements are in an array and in the same order as your
-            // headings above!
-            while ($A = DB_fetchArray($result_events)) {
-                if (SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']) > 0) {
-                    if ($A['allday'] == 0) {
-                        $fulldate = $A['datestart'] . ' ' . $A['timestart'] . ' - ' . $A['dateend'] . ' ' . $A['timeend'];
+            $event_results->num_itemssearched = $B[0];
+            $event_results->supports_paging = true;
+
+            // NOTE if any of your data items need to be links then add them
+            // here! Make sure data elements are in an array and in the same
+            // order as your headings above!
+            while ($A = DB_fetchArray ($result_events)) {
+                if ($A['allday'] == 0) {
+                    $fulldate = $A['datestart'] . ' ' . $A['timestart'] . ' - '
+                              . $A['dateend'] . ' ' . $A['timeend'];
+                } else {
+                    if ($A['datestart'] <> $A['dateend']) {
+                        $fulldate = $A['datestart'] . ' - ' . $A['dateend']
+                                  . ' ' . $LANG09[35];
                     } else {
-                        if ($A['datestart'] <> $A['dateend']) {
-                            $fulldate = $A['datestart'] . ' - ' . $A['dateend'] . ' ' . $LANG09[35];
-                        } else {
-                            $fulldate = $A['datestart'] . ' ' . $LANG09[35];
-                        }
+                        $fulldate = $A['datestart'] . ' ' . $LANG09[35];
                     }
-                    $thetime = COM_getUserDateTimeFormat($A['day']);
-                    $A['title'] = str_replace('$','&#36;',$A['title']);
-                    $row = array('<a href="' . $_CONF['site_url'] . '/calendar_event.php?eid=' . $A['eid'] . '">' . $A['title'] . '</a>',
-                                $fulldate,
-                                $A['location'],$A['description']);
-                    $event_results->addSearchResult($row);
-                    $event_results->num_searchresults++;
-                } else {
-                    // user is not allowed to see this item so don't count it either
-                    $event_results->num_itemssearched--;
                 }
+                $thetime = COM_getUserDateTimeFormat ($A['day']);
+                $A['title'] = stripslashes ($A['title']);
+                $A['title'] = str_replace ('$', '&#36;', $A['title']);
+                $row = array ('<a href="' . $_CONF['site_url']
+                              . '/calendar_event.php?eid=' . $A['eid'] . '">'
+                              . $A['title'] . '</a>', $fulldate,
+                              stripslashes ($A['location']),
+                              stripslashes ($A['description']));
+                $event_results->addSearchResult($row);
+                $event_results->num_searchresults++;
             }
         } else {
             $event_results = new Plugin();
             $event_results->searchlabel = $LANG09[37];
             $event_results->num_itemssearched = 0;
         }
+
         return $event_results;
     }
-    
+
     function _showPager($resultPage, $pages, $extra='')
     {
         global $_CONF, $LANG09;
-        
+
         $urlQuery = urlencode($this->_query);
         $pager = '';
         if ($pages > 1) {
             if ($resultPage > 1) {
-                $previous = $resultPage-1;
-                $pager .= " <a href = {$_CONF['site_url']}/search.php?query=$urlQuery&keyType=$this->_keyType&page=$previous&type=$this->_type&topic=$this->_topic&mode=search$extra>{$LANG09[47]}</a> ";
+                $previous = $resultPage - 1;
+                $pager .= ' <a href="' . $_CONF['site_url'] . '/search.php?query=' . $urlQuery . '&amp;keyType=' . $this->_keyType . '&amp;page=' . $previous . '&amp;type=' . $this->_type . '&amp;topic=' . $this->_topic . '&amp;mode=search' . $extra . '">' . $LANG09[47] . '</a> ';
             }
             if ($pages <= 20) {
                 $startPage = 1;
@@ -680,6 +639,7 @@
         }
         return $pager;
     }
+
     /**
     * Gets formatted output of all searches
     *
@@ -694,14 +654,14 @@
     */
     function _formatResults($nrows_plugins, $total_plugins, $result_plugins, $searchtime)
     {
-        global $_CONF, $LANG09, $_USER;
-        
-        $searchmain = new Template($_CONF['path_layout'] . 'search');
-        $searchmain->set_file(array('searchresults'=>'searchresults.thtml'));
-        $tmpTxt = sprintf($LANG09[24], $nrows_plugins);
-        $searchmain->set_var('lang_found', $tmpTxt);
-        $searchmain->set_var('num_matches', '');
-        
+        global $_CONF, $_USER, $LANG09;
+
+        $retval = '';
+
+        $searchmain = new Template ($_CONF['path_layout'] . 'search');
+        $searchmain->set_file(array ('searchresults' => 'searchresults.thtml'));
+        $searchmain->set_var ('num_matches', '');
+
         if ($this->_keyType == 'any') {
             $searchQuery = str_replace(' ', "</b>' " . $LANG09[57] . " '<b>",$this->_query);
             $searchQuery = "<b>'$searchQuery'</b>";
@@ -714,77 +674,180 @@
             }
         }
         $searchmain->set_var('lang_matchesfor', $LANG09[25] . " $searchQuery.");
-        $searchmain->set_var('num_items_searched', $total);
+        $searchmain->set_var('num_items_searched', 0);
         $searchmain->set_var('lang_itemsin', $LANG09[26]);
         $searchmain->set_var('search_time', $searchtime);
         $searchmain->set_var('lang_seconds', $LANG09[27]);
-        
+        $searchmain->set_var('lang_refine_search', $LANG09[61]);
+
         // Print plugins search results
         reset($result_plugins);
         $cur_plugin = new Plugin();
         $searchresults = new Template($_CONF['path_layout'] . 'search');
-                
-        for ($i = 1; $i <= count($result_plugins); $i++) {
-            $searchresults->set_file(array('searchheading'=>'searchresults_heading.thtml',
-                                            'searchrows'=>'searchresults_rows.thtml',
-                                            'searchblock' => 'searchblock.thtml',
-                                            'headingcolumn'=>'headingcolumn.thtml',
-                                            'resultrow'=>'resultrow.thtml',
-                                            'resulttitle'=>'resultcolumn.thtml',
-                                            'resultcolumn'=>'resultcolumn.thtml'));
+
+        $maxdisplayed = 0;
+        $totalfound = 0;
+        $searchblocks = '';
+        for ($i = 1; $i <= count ($result_plugins); $i++) {
+            $displayed = 0;
+            $searchresults->set_file (array (
+                'searchheading' => 'searchresults_heading.thtml',
+                'searchrows'    => 'searchresults_rows.thtml',
+                'searchblock'   => 'searchblock.thtml',
+                'headingcolumn' => 'headingcolumn.thtml',
+                'resultrow'     => 'resultrow.thtml',
+                'resulttitle'   => 'resultcolumn.thtml',
+                'resultcolumn'  => 'resultcolumn.thtml'
+            ));
             if ($i == 1) {
-                $searchresults->set_var('data_cols','');
-                $searchresults->set_var('headings','');
+                $searchresults->set_var ('data_cols', '');
+                $searchresults->set_var ('headings', '');
+            }
+            $cur_plugin = current ($result_plugins);
+            $start_results = (($this->_per_page * $this->_page) - $this->_per_page) + 1;
+            if ($cur_plugin->supports_paging) {
+                $start_results = 1;
+                $end_results = $cur_plugin->num_searchresults;
+                $totalfound += $cur_plugin->num_searchresults;
+            } else {
+                // this plugin doesn't know about paging - fake it
+                if ($cur_plugin->num_searchresults < $start_results) {
+                    $cur_plugin->num_searchresults = 0;
+                } else if ($cur_plugin->num_searchresults >= $start_results) {
+                    $end_results = ($start_results + $this->_per_page) - 1;
+                    if ($end_results > $cur_plugin->num_searchresults) {
+                        $end_results = $cur_plugin->num_searchresults;
+                    }
+                    $totalfound += ($end_results - $start_results) + 1;
+                } else {
+                    $start_results = 1;
+                    $end_results = $cur_plugin->num_searchresults;
+                    $totalfound += $cur_plugin->num_searchresults;
+                }
             }
-            $cur_plugin = current($result_plugins);
-            if (($cur_plugin->num_searchresults > 0) OR $_CONF['showemptysearchresults']) {
+            if ($cur_plugin->num_searchresults > 0) {
                 // Clear out data columns from previous result block
                 $searchresults->set_var('data_cols','');
                 $searchresults->set_var('start_block_results',COM_startBlock($cur_plugin->searchlabel));
                 $searchresults->set_var('headings','');
+                $searchresults->set_var('label', '#');
+                $searchresults->parse('headings','headingcolumn',true);
                 for ($j = 1; $j <= $cur_plugin->num_searchheadings; $j++) {
                     $searchresults->set_var('label', $cur_plugin->searchheading[$j]);
                     $searchresults->parse('headings','headingcolumn',true);
                 }
                 $searchresults->set_var('results','');
-                for ($j = 1; $j <= $cur_plugin->num_searchresults; $j++) {
-                    $columns = current($cur_plugin->searchresults);
+                $resultNumber = 0;
+                for ($j = $start_results; $j <= $end_results; $j++) {
+                    $columns = $cur_plugin->searchresults[$j - 1];
+                    if ($cur_plugin->supports_paging) {
+                        $searchresults->set_var('data', (($this->_per_page * $this->_page) - $this->_per_page) + $j . '.');
+                    } else {
+                        $searchresults->set_var('data', $j . '.');
+                    }
+                    $searchresults->parse('data_cols','resultcolumn',true);
                     for ($x = 1; $x <= count($columns); $x++) {
-                            $searchresults->set_var('data', current($columns));
-                            $searchresults->parse('data_cols','resultcolumn',true);
-                            next($columns);
+                        $searchresults->set_var('data', current($columns));
+                        $searchresults->parse('data_cols','resultcolumn',true);
+                        next($columns);
                     }
-                    $searchresults->parse('results','resultrow',true);
-                    $searchresults->set_var('data_cols','');
-                    next($cur_plugin->searchresults);
                     $resultNumber++;
+                    $searchresults->set_var ('cssid', ($resultNumber % 2) + 1);
+                    $searchresults->parse ('results', 'resultrow', true);
+                    $searchresults->set_var ('data_cols', '');
+                    $displayed++;
                 }
                 if ($cur_plugin->num_searchresults == 0) {
                     $searchresults->set_var('results',
-                                '<tr><td colspan="4" align="center"><br>' . $LANG09[31]
-                                . '</td></tr>');
+                            '<tr><td colspan="4" align="center"><br>'
+                            . $LANG09[31] . '</td></tr>');
                 }
                 $searchresults->set_var('end_block', COM_endBlock());
                 $searchblocks .= $searchresults->parse('tmpoutput','searchblock');
             }
             next($result_plugins);
+            if ($displayed > $maxdisplayed) {
+                $maxdisplayed = $displayed;
+            }
         }
-        $searchmain->set_var('search_blocks', $searchblocks);
-        $searchmain->set_var('search_pager', $this->_showPager($resultPage, $pages, ''));
-        $retval .= $searchmain->parse('output','searchresults');
 
-        reset($result_plugins);
-        $totalfound = 0;
-        foreach ($result_plugins as $key) {
-            $totalfound .= $key->num_searchresults;
+        if ($maxdisplayed == 0) {
+            $searchblocks .= '<p>' . $LANG09[13] . '</p>' . LB;
+        }
+
+        $searchmain->set_var ('search_blocks', $searchblocks);
+
+        $searchUrl = $_CONF['site_url'] . '/search.php?mode=search';
+        $queryUrl = '';
+        if (!empty ($this->_query)) {
+            $urlQuery = urlencode ($this->_query);
+            $queryUrl .= '&amp;query=' . $urlQuery;
+        }
+        $queryUrl .= '&amp;keyType=' . $this->_keyType
+                  . '&amp;type=' . $this->_type;
+        if (!empty ($this->_dateStart)) {
+            $queryUrl .= '&amp;datestart=' . $this->_dateStart;
+        }
+        if (!empty ($this->_dateEnd)) {
+            $queryUrl .= '&amp;dateend=' . $this->_dateEnd;
+        }
+        if (!empty ($this->_topic)) {
+            $queryUrl .= '&amp;topic=' . $this->_topic;
         }
-        if ( $totalfound == 0) {
+        if (!empty ($this->_author) && ($this->_author > 0)) {
+            $queryUrl .= '&amp;author=' . $this->_author;
+        }
+        $queryUrl .= '&amp;results=' . $this->_per_page;
+        if ($this->_page > 1) {
+            if ($maxdisplayed >= $this->_per_page) {
+                $numpages = $this->_page + 1;
+            } else {
+                $numpages = $this->_page;
+            }
+        } else {
+            if ($maxdisplayed >= $this->_per_page) {
+                $numpages = 2;
+            } else {
+                $numpages = 1;
+            }
+        }
+        if ($numpages > $this->_page) {
+            $next = '<a href="' . $searchUrl . $queryUrl . '&amp;page='
+                  . ($this->_page + 1) . '">' . $LANG09[58] . '</a>';
+        } else {
+            $next = $LANG09[58];
+        }
+        $searchUrl .= $queryUrl;
+        $searchmain->set_var ('search_pager',
+                COM_printPageNavigation ($searchUrl, $this->_page, $numpages,
+                                         'page=', false, '', $next));
+        $tmpTxt = sprintf ($LANG09[24], $totalfound);
+        $searchmain->set_var ('lang_found', $tmpTxt);
+        if (($totalfound == 0) && ($this->_page == 1)) {
+            $searchmain->set_var ('refine_url', '');
+            $searchmain->set_var ('start_refine_anchortag', '');
+            $searchmain->set_var ('end_refine_anchortag', '');
+            $searchmain->set_var ('refine_search', '');
+        } else {
+            $refineUrl = $_CONF['site_url'] . '/search.php?mode=refine'
+                       . $queryUrl;
+            $refineLink = '<a href="' . $refineUrl . '">';
+            $searchmain->set_var ('refine_url', $refineUrl);
+            $searchmain->set_var ('start_refine_anchortag', $refineLink);
+            $searchmain->set_var ('end_refine_anchortag', '</a>');
+            $searchmain->set_var ('refine_search',
+                                  $refineLink . $LANG09[61] . '</a>');
+        }
+        $retval .= $searchmain->parse ('output', 'searchresults');
+
+        if (($totalfound == 0) && ($this->_page == 1)) {
             $searchObj = new Search();
-            $retval .=  $searchObj->showForm();
+            $retval .=  $searchObj->showForm ();
         }
+
         return $retval;
     }
-    
+
     /**
     * Determines if any advanced search criteria were supplied
     *
@@ -806,7 +869,7 @@
         }
         return false;
     }
-    
+
     /**
     * Shows an error message to anonymous users
     *
@@ -833,10 +896,10 @@
         $login->parse ('output', 'login');
         $retval .= $login->finish ($login->get_var('output'));
         $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-    
+
         return $retval;
     }
-    
+
     /**
     * Determines if user is allowed to perform a search
     *
@@ -888,7 +951,7 @@
     */
     function _isFormAllowed ()
     {
-        global $_USER, $_CONF;
+        global $_CONF, $_USER;
 
         if (empty($_USER['username']) AND (($_CONF['loginrequired'] == 1) OR ($_CONF['searchloginrequired'] >= 1))) {
             return false;
@@ -897,65 +960,6 @@
         return true;
     }
 
-    function _getSummary($query,$fullText)
-    {
-        global $_CONF;
-        
-        if ($query) {
-            $mywords = explode(' ',$query);
-            $position = 0;
-            
-            // Find the first keyword in our text
-            foreach ($mywords as $searchword) {
-                $temp = stristr($fullText, $searchword);
-                $pos = strlen($fullText) - strlen($temp);
-                
-                if($pos < $position OR $position == 0) {
-                    $position = $pos;
-                }
-            }    
-            // Make sure we aren't beyond the end of the string
-            if ($position >= strlen($fullText)) {
-                $position = 0;
-            }
-        
-            //provide a buffer for content
-            $position = $position - 50;
-            
-            // Make sure we aren't before the beginning of the string
-            if ($position < 0) {
-                $position = 0;
-            }
-                
-            $summary = substr( $fullText,$position,$_CONF['summary_length']);  
-            
-            //remove unnecessary tags
-            $summary = strip_tags($summary,'<ol><ul><li><br>');
-            $summary = preg_replace ("/^.*\">/i", "", $summary);
-            
-            //Dress it up a little                      
-            if (strlen($summary) != strlen($fullText)) {
-                if ($position > 0) {
-                    $summary = "&hellip; $summary";
-                }
-                if (($position + $_CONF['summary_length']) < strlen($fullText)) {
-                    $summary = "$summary &hellip;";
-                }
-            }
-            
-            //highlight the key words
-            foreach ($mywords as $searchword) {
-                $summary = preg_replace ("/($searchword)/i", "<b>\\1</b>", "$summary");
-            }
-        } else {
-            $summary = substr($fullText, 0, $_CONF['summary_length']);
-            if (strlen($fullText) > $_CONF['summary_length']) {
-                $summary = "$summary &hellip;";
-            }
-        }
-        return $summary;
-    }
-    
     /**
     * Shows search form
     *
@@ -966,7 +970,7 @@
     * @return string HTML output for form
     *
     */
-    function showForm()
+    function showForm ()
     {
         global $_CONF, $_TABLES, $LANG09;
 
@@ -986,29 +990,78 @@
         $searchform->set_var('lang_keywords', $LANG09[2]);
         $searchform->set_var('lang_date', $LANG09[20]);
         $searchform->set_var('lang_to', $LANG09[21]);
-        $searchform->set_var('date_format', $LANG09[22]);    
+        $searchform->set_var('date_format', $LANG09[22]);
         $searchform->set_var('lang_topic', $LANG09[3]);
         $searchform->set_var('lang_all', $LANG09[4]);
-        $searchform->set_var('topic_option_list', COM_topicList('tid,topic'));
+        $searchform->set_var('topic_option_list',
+                             COM_topicList ('tid,topic', $this->_topic));
         $searchform->set_var('lang_type', $LANG09[5]);
         $searchform->set_var('lang_stories', $LANG09[6]);
         $searchform->set_var('lang_comments', $LANG09[7]);
         $searchform->set_var('lang_links', $LANG09[39]);
         $searchform->set_var('lang_events', $LANG09[40]);
-        
+        $searchform->set_var('lang_results', $LANG09[59]);
+        $searchform->set_var('lang_per_page', $LANG09[60]);
+
         $searchform->set_var('lang_exact_phrase', $LANG09[43]);
         $searchform->set_var('lang_all_words', $LANG09[44]);
         $searchform->set_var('lang_any_word', $LANG09[45]);
-        
+
+        $searchform->set_var ('query', htmlspecialchars ($this->_query));
+        $searchform->set_var ('datestart', $this->_dateStart);
+        $searchform->set_var ('dateend', $this->_dateEnd);
+        $searchform->set_var ($this->_per_page . '_selected',
+                              'selected="selected"');
+
+        $phrase_selected = '';
+        $all_selected = '';
+        $any_selected = '';
+        if ($this->_keyType == 'phrase') {
+            $phrase_selected = 'selected="selected"';
+        } else if ($this->_keyType == 'all') {
+            $all_selected = 'selected="selected"';
+        } else if ($this->_keyType == 'any') {
+            $any_selected = 'selected="selected"';
+        }
+        $searchform->set_var ('key_phrase_selected', $phrase_selected);
+        $searchform->set_var ('key_all_selected', $all_selected);
+        $searchform->set_var ('key_any_selected', $any_selected);
+
         $plugintypes = PLG_getSearchTypes();
         $pluginoptions = '';
+        $plugin_selected = false;
         // Generally I don't like to hardcode HTML but this seems easiest
-        for ($i = 1; $i <= count($plugintypes); $i++) {
-            $pluginoptions .= '<option value="' . key($plugintypes) . '">' . current($plugintypes) . '</option>' . LB; 
+        for ($i = 0; $i < count ($plugintypes); $i++) {
+            $pluginoptions .= '<option value="' . key ($plugintypes) . '"';
+            if ($this->_type == key ($plugintypes)) {
+                $pluginoptions .= ' selected="selected"';
+                $plugin_selected = true;
+            }
+            $pluginoptions .= '>' . current ($plugintypes) . '</option>' . LB;
             next($plugintypes);
         }
         $searchform->set_var('plugin_types', $pluginoptions);
-    
+
+        $all_selected = '';
+        $stories_selected = '';
+        $comments_selected = '';
+        $events_selected = '';
+        if (!$plugin_selected) {
+            if ($this->_type == 'stories') {
+                $stories_selected = 'selected="selected"';
+            } else if ($this->_type == 'comments') {
+                $comments_selected = 'selected="selected"';
+            } else if ($this->_type == 'events') {
+                $events_selected = 'selected="selected"';
+            } else {
+                $all_selected = 'selected="selected"';
+            }
+        }
+        $searchform->set_var ('type_all_selected', $all_selected);
+        $searchform->set_var ('stories_selected', $stories_selected);
+        $searchform->set_var ('comments_selected', $comments_selected);
+        $searchform->set_var ('events_selected', $events_selected);
+
         if ($_CONF['contributedbyline'] == 1) {
             $searchform->set_var('lang_authors', $LANG09[8]);
             $searchusers = array();
@@ -1020,14 +1073,30 @@
             while ($A = DB_fetchArray($result)) {
                 $searchusers[$A['uid']] = $A['uid'];
             }
-            
+
             $inlist = implode(',', $searchusers);
-            
+
             if (!empty ($inlist)) {
-                $result = DB_query("SELECT uid,username FROM {$_TABLES['users']} WHERE uid in ($inlist) ORDER by username");
+                $sql = "SELECT uid,username,fullname FROM {$_TABLES['users']} WHERE uid IN ($inlist)";
+                if (isset ($_CONF['show_fullname']) &&
+                        ($_CONF['show_fullname'] == 1)) {
+                    /* Caveat: This will group all users with an emtpy fullname
+                     *         together, so it's not exactly sorted by their
+                     *         full name ...
+                     */
+                    $sql .= ' ORDER BY fullname,username';
+                } else {
+                    $sql .= ' ORDER BY username';
+                }
+                $result = DB_query ($sql);
                 $useroptions = '';
                 while ($A = DB_fetchArray($result)) {
-                    $useroptions .= '<option value="' . $A['uid'] . '">' . $A['username'] . '</option>';
+                    $useroptions .= '<option value="' . $A['uid'] . '"';
+                    if ($A['uid'] == $this->_author) {
+                        $useroptions .= ' selected="selected"';
+                    }
+                    $useroptions .= '>' . $this->_displayName ($A['username'],
+                                            $A['fullname']) . '</option>';
                 }
                 $searchform->set_var('author_option_list', $useroptions);
                 $searchform->parse('author_form_element', 'authors', true);
@@ -1035,17 +1104,18 @@
                 $searchform->set_var('author_form_element', '<input type="hidden" name="author" value="0">');
             }
         } else {
-            $searchform->set_var('author_form_element', '<input type="hidden" name="author" value="0">');
+            $searchform->set_var ('author_form_element',
+                    '<input type="hidden" name="author" value="0">');
         }
-        $searchform->set_var('lang_search', $LANG09[10]);    
+        $searchform->set_var('lang_search', $LANG09[10]);
         $searchform->parse('output', 'searchform');
-    
+
         $retval .= $searchform->finish($searchform->get_var('output'));
         $retval .= COM_endBlock();
-    
+
         return $retval;
     }
-    
+
     /**
     * Kicks off the appropriate search(es)
     *
@@ -1055,6 +1125,8 @@
     */
     function doSearch()
     {
+        global $_CONF;
+
         // Verify current user can perform requested search
         if (!$this->_isSearchAllowed()) {
             return $this->_getAccessDeniedMessage();
@@ -1063,40 +1135,39 @@
         // Start search timer
         $searchtimer = new timerobject();
         $searchtimer->setPercision(4);
-        $searchtimer->startTimer();    
+        $searchtimer->startTimer();
 
         // Do searches
         $this->story_results = $this->_searchStories();
         $this->comment_results = $this->_searchComments();
-        $this->link_results = $this->_searchLinks();
         $this->event_results = $this->_searchEvents();
 
         // Have plugins do their searches
-        list($nrows_plugins, $total_plugins, $result_plugins) = PLG_doSearch($this->_query, $this->_dateStart, $this->_dateEnd, $this->_topic, $this->_type, $this->_author, $this->_keyType);
-        
+        list($nrows_plugins, $total_plugins, $result_plugins) = PLG_doSearch($this->_query, $this->_dateStart, $this->_dateEnd, $this->_topic, $this->_type, $this->_author, $this->_keyType, $this->_page, $this->_per_page);
+
         // Add the core GL object search results to plugin results
-        $nrows_plugins = $nrows_plugins + $this->story_results->num_searchresults;
-        $nrows_plugins = $nrows_plugins + $this->comment_results->num_searchresults;
-        $nrows_plugins = $nrows_plugins + $this->link_results->num_searchresults;
-        $nrows_plugins = $nrows_plugins + $this->event_results->num_searchresults;
-        
-        $total_plugins = $total_plugins + $this->story_results->num_itemssearched;
-        $total_plugins = $total_plugins + $this->comment_results->num_itemssearched;
-        $total_plugins = $total_plugins + $this->link_results->num_itemssearched;
-        $total_plugins = $total_plugins + $this->event_results->num_itemssearched;
-        
+        $nrows_plugins += $this->story_results->num_searchresults;
+        $nrows_plugins += $this->comment_results->num_searchresults;
+        $nrows_plugins += $this->event_results->num_searchresults;
+
+        $total_plugins += $this->story_results->num_itemssearched;
+        $total_plugins += $this->comment_results->num_itemssearched;
+        $total_plugins += $this->event_results->num_itemssearched;
+
         // Move GL core objects to front of array
-        array_unshift($result_plugins, $this->story_results, $this->comment_results, $this->link_results, $this->event_results);
-        
+        array_unshift ($result_plugins, $this->story_results,
+                       $this->comment_results, $this->event_results);
+
         // Searches are done, stop timer
         $searchtime = $searchtimer->stopTimer();
-      
+
         // Format results
-        $retval = $this->_formatResults($nrows_plugins, $total_plugins, $result_plugins, $searchtime);
-        
+        $retval = $this->_formatResults ($nrows_plugins, $total_plugins,
+                                         $result_plugins, $searchtime);
+
         return $retval;
     }
-    
+
 }
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/syndication/atom.feed.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/atom.feed.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/syndication/atom.feed.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/atom.feed.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,461 @@
+<?php
+  /****************************************************************************/
+  /* atom.feed.class.php                                                      */
+  /*                                                                          */
+  /****************************************************************************/
+  /* Copyright (c) 2004 Michael Jervis (mike@fuckingbrit.com)                 */
+  /*                                                                          */
+  /* This software is licensed under the terms of the ZLIB License:           */
+  /*                                                                          */
+  /* This software is provided 'as-is', without any express or implied        */
+  /* warranty. In no event will the authors be held liable for any damages    */
+  /* arising from the use of this software.                                   */
+  /*                                                                          */
+  /* Permission is granted to anyone to use this software for any purpose,    */
+  /* including commercial applications, and to alter it and redistribute it   */
+  /* freely, subject to the following restrictions:                           */
+  /*                                                                          */
+  /*  1. The origin of this software must not be misrepresented; you must not */
+  /*     claim that you wrote the original software. If you use this software */
+  /*     in a product, an acknowledgment in the product documentation would be*/
+  /*     appreciated but is not required.                                     */
+  /*                                                                          */
+  /*  2. Altered source versions must be plainly marked as such, and must not */
+  /*     be misrepresented as being the original software.                    */
+  /*                                                                          */
+  /*  3. This notice may not be removed or altered from any source            */
+  /*     distribution.                                                        */
+  /****************************************************************************/
+  // $Id: atom.feed.class.php,v 1.9 2005/12/03 11:57:40 mjervis Exp $
+
+  /**
+    * Provides feed handlers for Atom 0.3 and Atom 1.0
+    *
+    * @author Michael Jervis (mike@fuckingbrit.com)
+    * @version 1.1
+    */
+
+  /**
+   * atom03 provides reading and writing of Atom 0.3 format syndication feeds.
+   *
+   * @author Michael Jervis (mike@fuckingbrit.com)
+   * @copyright Michael Jervis 2004
+   * @abstract
+   */
+  class Atom03 extends FeedParserBase
+  {
+    /**
+      * @access private
+      * @var boolean
+      */
+    var $_inItem;
+
+    /**
+      * @access private
+      * @var array
+      */
+    var $_currentItem;
+
+    function Atom03()
+    {
+      $this->FeedParserBase();
+      $this->_inItem = false;
+    }
+
+    function _RFC3339Date($timestamp='')
+    {
+        $return = '';
+        if( !empty($timestamp) )
+        {
+            $return = strftime("%Y-%m-%dT%T", $timestamp);
+            $suffix = strftime("%z", $timestamp);
+        } else {
+            $return = strftime("%Y-%m-%dT%T");
+            $suffix = strftime("%z");
+        }
+        return $return.substr($suffix,0,3).':'.substr($suffix,3,2);
+    }
+
+    /**
+      * Format an article into an Atom 0.3 <entry> tag.
+      *
+      * Takes an associative article array and turns it into an XML definition
+      * of an article. Uses merely title, link and summary.
+      *
+      * @param array $article Associative array describing an article.
+      */
+    function _formatArticle( $article )
+    {
+      $xml = "<entry>\n";
+      $xml .= '<title mode="escaped">'.$this->_safeXML( $article['title'] )."</title>\n";
+      $xml .= '<link rel="alternate" type="text/html" href="'.$this->_safeXML( $article['link'] )."\"/>\n";
+      $xml .= '<id>'.htmlspecialchars( $article['link'] )."</id>\n";
+      $xml .= '<issued>'.$this->_RFC3339Date( $article['date'] )."</issued>\n";
+      $xml .= '<modified>'.$this->_RFC3339Date( $article['date'] )."</modified>\n";
+      if( array_key_exists( 'author', $article ) )
+      {
+        $xml .= "<author>\n<name>{$article['author']}</name>\n</author>\n";
+      }
+      if( array_key_exists( 'summary', $article ) )
+      {
+        if( strlen( $article['summary'] ) > 0 )
+        {
+          $xml .= '<content type="text/html" mode="escaped">'
+                          . $this->_safeXML ($article['summary'])
+                          . "</content>\n";
+        }
+      }
+      if( is_array( $this->extensions ) )
+      {
+        foreach( $this->extensions as $extendingTag )
+        {
+            $xml .= "$extendingTag\n";
+        }
+      }
+      $xml .= "</entry>\n";
+      return $xml;
+    }
+
+    /**
+      * Return the formatted start of a feed.
+      *
+      * This will start the xml and create header information about the feed
+      * itself.
+      */
+    function _feedHeader()
+    {
+      $xml = '<?xml version="1.0" encoding="' . $this->encoding . '" ?>' . LB . LB
+           . '<feed version="0.3"  xmlns="http://purl.org/atom/ns#"'.$this->_injectNamespaces().'>' . LB
+           . '<title mode="escaped">' . $this->_safeXML( $this->title ) . '</title>' . LB
+           . '<tagline mode="escaped">' . $this->_safeXML( $this->description ) . '</tagline>' . LB
+           . '<link rel="alternate" type="text/html" href="' . $this->_safeXML( $this->sitelink ) . '"/>' . LB
+           . '<modified>'.$this->_RFC3339Date().'</modified>' . LB
+           . "<author>\n<name>" . $this->_safeXML( $this->title ) . '</name>' . LB
+           . '<email>' . $this->_safeXML( $this->sitecontact ) . "</email>\n</author>\n";
+      if( is_array( $this->extensions ) )
+      {
+        foreach( $this->extensions as $extendingTag )
+        {
+            $xml .= "$extendingTag\n";
+        }
+      }
+      return $xml;
+    }
+
+    /**
+      * Return the formatted end of a feed.
+      *
+      * just closes things off nicely.
+      */
+    function _feedFooter()
+    {
+      $xml = "</feed>\n";
+      return $xml;
+    }
+
+    /**
+      * Handle the begining of an XML element
+      *
+      * This is called from the parserfactory once the type of data has been
+      * determined. Standard XML_PARSER element handler.
+      *
+      * @author Michael Jervis (mike@fuckingbrit.com)
+      * @copyright Michael Jervis 2004
+      */
+    function startElement($parser, $name, $attributes)
+    {
+      if( $name == 'ENTRY' )
+      {
+        $this->_inItem = true;
+        $this->_currentItem = array();
+      } else if( $this->_inItem ) {
+        if( $name == 'LINK' )
+        {
+          $this->_currentItem['link'] = $attributes['HREF'];
+        }
+      } else {
+        if( $name == 'LINK' )
+        {
+          $this->sitelink = $attributes['HREF'];
+        }
+      }
+      $this->_currentTag = $name;
+    }
+
+    /**
+      * Handle the close of an XML element
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function endElement($parser, $name)
+    {
+      if( $name == 'ENTRY' )
+      {
+        $this->_inItem = false;
+        $this->articles[] = $this->_currentItem;
+      }
+      $this->_currentTag = '';
+    }
+
+    /**
+      * Handles character data.
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function charData($parser, $data)
+    {
+      if( $this->_inItem )
+      {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          if( empty( $this->_currentItem['title'] ) )
+          {
+            $this->_currentItem['title'] = $data;
+          } else {
+            $this->_currentItem['title'] .= $data;
+          }
+        } else if( $this->_currentTag == 'CONTENT' ) {
+          if( empty( $this->_currentItem['summary'] ) )
+          {
+            $this->_currentItem['summary'] = $data;
+          } else {
+            $this->_currentItem['summary'] .= $data;
+          }
+        } else if( $this->_currentTag == 'MODIFIED' ) {
+          $this->_currentItem['date'] = $data;
+        } else if( $this->_currentTag == 'ISSUED' ) {
+          if( empty( $this->currentItem['date'] ) )
+          {
+            $this->currentITem['date'] = $data;
+          }
+        }
+      } else {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          $this->title .= $data;
+        } else if( $this->_currentTag == 'TAGLINE' ) {
+          $this->description .= $data;
+        }
+      }
+    }
+  }
+
+  /**
+   * atom10 provides reading and writing of Atom 1.0 format syndication feeds.
+   *
+   * @author Michael Jervis (mike@fuckingbrit.com)
+   * @copyright Michael Jervis 2005
+   * @abstract
+   */
+  class Atom10 extends FeedParserBase
+  {
+    /**
+      * @access private
+      * @var boolean
+      */
+    var $_inItem;
+
+    /**
+      * @access private
+      * @var array
+      */
+    var $_currentItem;
+
+    function Atom10()
+    {
+      $this->FeedParserBase();
+      $this->_inItem = false;
+    }
+
+    /**
+      * Format an article into an Atom 0.3 <entry> tag.
+      *
+      * Takes an associative article array and turns it into an XML definition
+      * of an article. Uses merely title, link and summary.
+      *
+      * @param array $article Associative array describing an article.
+      */
+    function _formatArticle( $article )
+    {
+      $xml = "<entry>\n";
+      $xml .= '<title type="html">'.$this->_safeXML( $article['title'] )."</title>\n";
+      $xml .= '<link rel="alternate" type="text/html" href="'.$this->_safeXML( $article['link'] )."\"/>\n";
+      $xml .= '<id>' . $this->_createId($article['link'], $article['date']) . "</id>\n";
+      $xml .= '<published>'.$this->_RFC3339Date( $article['date'] )."</published>\n";
+      $xml .= '<updated>'.$this->_RFC3339Date( $article['date'] )."</updated>\n";
+      if( array_key_exists( 'author', $article ) )
+      {
+        $xml .= "<author>\n<name>{$article['author']}</name>\n</author>\n";
+      }
+      if( array_key_exists( 'summary', $article ) )
+      {
+        if( strlen( $article['summary'] ) > 0 )
+        {
+          $xml .= '<content type="html">'
+                          . $this->_safeXML ($article['summary'])
+                          . "</content>\n";
+        }
+      }
+      if( is_array( $this->extensions ) )
+      {
+        foreach( $this->extensions as $extendingTag )
+        {
+            $xml .= "$extendingTag\n";
+        }
+      }
+      $xml .= "</entry>\n";
+      return $xml;
+    }
+
+    function _createId($url, $date)
+    {
+        $start = strpos($url, '/') + 2;
+        $end = strpos($url, '/', $start);
+        $tag = 'tag:'.substr($url, $start, $end-$start);
+        $tag .= strftime(",%Y-%m-%d", $date).':'.substr($url, $end);
+        return $tag;
+    }
+
+    function _RFC3339Date($timestamp='')
+    {
+        $return = '';
+        if( !empty($timestamp) )
+        {
+            $return = strftime("%Y-%m-%dT%T", $timestamp);
+            $suffix = strftime("%z", $timestamp);
+        } else {
+            $return = strftime("%Y-%m-%dT%T");
+            $suffix = strftime("%z");
+        }
+        return $return.substr($suffix,0,3).':'.substr($suffix,3,2);
+    }
+
+    /**
+      * Return the formatted start of a feed.
+      *
+      * This will start the xml and create header information about the feed
+      * itself.
+      */
+    function _feedHeader()
+    {
+      $xml = '<?xml version="1.0" encoding="' . $this->encoding . '" ?>' . LB . LB
+           . '<feed xmlns="http://www.w3.org/2005/Atom"'.$this->_injectNamespaces().'>' . LB
+           . '<title type="text">' . $this->_safeXML( $this->title ) . '</title>' . LB
+           . '<subtitle type="text">' . $this->_safeXML( $this->description ) . '</subtitle>' . LB
+           . '<link rel="self" href="' . $this->_safeXML( $this->url ) . '"/>' . LB
+           . '<link rel="alternate" type="text/html" href="' . $this->_safeXML( $this->sitelink ) . '/"/>' . LB;
+      if ($this->feedlogo != '')
+      {
+           $xml .= '<logo>' . $this->_safeXML( $this->feedlogo ) . '</logo>' . LB;
+      }
+      $xml .= '<id>' . $this->_safeXML( $this->sitelink ) . '/</id>' . LB
+           . '<updated>'.$this->_RFC3339Date().'</updated>' . LB
+           . "<author>\n<name>" . $this->_safeXML( $this->title ) . '</name>' . LB
+           . '<email>' . $this->_safeXML( $this->sitecontact ) . "</email>\n</author>\n";
+      if( is_array( $this->extensions ) )
+      {
+        foreach( $this->extensions as $extendingTag )
+        {
+            $xml .= "$extendingTag\n";
+        }
+      }
+      return $xml;
+    }
+
+    /**
+      * Return the formatted end of a feed.
+      *
+      * just closes things off nicely.
+      */
+    function _feedFooter()
+    {
+      $xml = "</feed>\n";
+      return $xml;
+    }
+
+    /**
+      * Handle the begining of an XML element
+      *
+      * This is called from the parserfactory once the type of data has been
+      * determined. Standard XML_PARSER element handler.
+      *
+      * @author Michael Jervis (mike@fuckingbrit.com)
+      * @copyright Michael Jervis 2004
+      */
+    function startElement($parser, $name, $attributes)
+    {
+      if( $name == 'ENTRY' )
+      {
+        $this->_inItem = true;
+        $this->_currentItem = array();
+      } else if( $this->_inItem ) {
+        if( $name == 'LINK' )
+        {
+          $this->_currentItem['link'] = $attributes['HREF'];
+        }
+      } else {
+        if( $name == 'LINK' )
+        {
+          $this->sitelink = $attributes['HREF'];
+        }
+      }
+      $this->_currentTag = $name;
+    }
+
+    /**
+      * Handle the close of an XML element
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function endElement($parser, $name)
+    {
+      if( $name == 'ENTRY' )
+      {
+        $this->_inItem = false;
+        $this->articles[] = $this->_currentItem;
+      }
+      $this->_currentTag = '';
+    }
+
+    /**
+      * Handles character data.
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function charData($parser, $data)
+    {
+      if( $this->_inItem )
+      {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          if( empty( $this->_currentItem['title'] ) )
+          {
+            $this->_currentItem['title'] = $data;
+          } else {
+            $this->_currentItem['title'] .= $data;
+          }
+        } else if( $this->_currentTag == 'CONTENT' ) {
+          if( empty( $this->_currentItem['summary'] ) )
+          {
+            $this->_currentItem['summary'] = $data;
+          } else {
+            $this->_currentItem['summary'] .= $data;
+          }
+        } else if( $this->_currentTag == 'UPDATED' ) {
+          $this->_currentItem['date'] = $data;
+        } else if( $this->_currentTag == 'PUBLISHED' ) {
+          if( empty( $this->currentItem['date'] ) )
+          {
+            $this->currentITem['date'] = $data;
+          }
+        }
+      } else {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          $this->title .= $data;
+        } else if( $this->_currentTag == 'SUBTITLE' ) {
+          $this->description .= $data;
+        }
+      }
+    }
+  }
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/syndication/feedparserbase.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/feedparserbase.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/syndication/feedparserbase.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/feedparserbase.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,304 @@
+<?php
+  /****************************************************************************/
+  /* FeedParserBase.class.php                                                 */
+  /*                                                                          */
+  /****************************************************************************/
+  /* Copyright (c) 2004 Michael Jervis (mike@fuckingbrit.com)                 */
+  /*                                                                          */
+  /* This software is licensed under the terms of the ZLIB License:           */
+  /*                                                                          */
+  /* This software is provided 'as-is', without any express or implied        */
+  /* warranty. In no event will the authors be held liable for any damages    */
+  /* arising from the use of this software.                                   */
+  /*                                                                          */
+  /* Permission is granted to anyone to use this software for any purpose,    */
+  /* including commercial applications, and to alter it and redistribute it   */
+  /* freely, subject to the following restrictions:                           */
+  /*                                                                          */
+  /*  1. The origin of this software must not be misrepresented; you must not */
+  /*     claim that you wrote the original software. If you use this software */
+  /*     in a product, an acknowledgment in the product documentation would be*/
+  /*     appreciated but is not required.                                     */
+  /*                                                                          */
+  /*  2. Altered source versions must be plainly marked as such, and must not */
+  /*     be misrepresented as being the original software.                    */
+  /*                                                                          */
+  /*  3. This notice may not be removed or altered from any source            */
+  /*     distribution.                                                        */
+  /****************************************************************************/
+
+  /**
+   * FeedParserBase provides an abstract ancestor class for feed parsers.
+   *
+   * @author Michael Jervis (mike@fuckingbrit.com)
+   * @copyright Michael Jervis 2004
+   * @abstract
+   */
+  class FeedParserBase
+  {
+    /**
+      * An array of items.
+      *
+      * This holds all the news from the source. This should be an array of
+      * associative arrays. Each item will have:
+      * title - The title
+      * URI - Link to the full story
+      * date - The date of the article
+      * Optional (pre-defined) items are:
+      * summary - Short version of article
+      * text - full version
+      * author - Who wrote the article
+      */
+    var $articles;
+
+    /**
+      * Encoding tag for the XML declaration
+      */
+    var $encoding;
+
+    /**
+      * Language for the feed
+      */
+    var $lang;
+
+    /**
+      * Title for the feed
+      */
+    var $title;
+
+    /**
+      * The description of the feed
+      */
+    var $description;
+
+    /**
+      * The URL of the feed
+      */
+    var $url;
+
+    /**
+      * URL of the site
+      */
+    var $sitelink;
+
+    /**
+      * Site contact
+      */
+    var $sitecontact;
+
+    /**
+      * copyright tag:
+      */
+    var $copyright;
+
+    /**
+      * system powering the feed
+      */
+    var $system;
+
+    /**
+      * Image to link to the feed.
+      */
+    var $feedlogo;
+
+    /**
+      * Additional namespaces to add.
+      */
+    var $namespaces;
+
+    /**
+      * Additional tags to add.
+      */
+    var $extensions;
+
+    /**
+      * Stuff for parsing XML
+      */
+    var $_currentTag;
+
+    function FeedParserBase()
+    {
+      $this->encoding = 'iso-8859-1';
+      $title = 'Killer Feed System Feed';
+      $this->lang = 'en-gb';
+      $currentTag = '';
+      $articles = array();
+    }
+
+    /**
+      * Create a file for the stream
+      *
+      * Writes the $items content to the file supplied in the format we have
+      * specified. Uses the (abstract) function formatArticle to return XML
+      * for an article.
+      *
+      * @param string $fileName The fully qualified path to the file to create.
+      * @param integer $limit (optional) max number of items to write.
+      */
+    function createFeed( $fileName, $limit='' )
+    {
+      /* If we have no items, return false */
+      if( count( $this->articles ) == 0 )
+      {
+        return false;
+      } else {
+        /* Start the XML Feed formating */
+        $xml = $this->_feedHeader();
+
+        /* Start with a limit of the size of the array, then, if we have a
+         * specific max length use that unless it's bigger than our count */
+        $count = count( $this->articles );
+        if( $limit )
+        {
+          if( $limit < $count )
+          {
+            $count = $limit;
+          }
+        }
+
+        /* Put the first $count items into the xml, using formatArticle */
+        for( $i = 0; $i < $count; $i++ )
+        {
+          $xml .= $this->_formatArticle( $this->articles[$i] );
+        }
+
+        /* Close off the feed */
+        $xml .= $this->_feedFooter();
+        /* And write it to file */
+        return $this->_writeFile( $fileName, $xml );
+      }
+    }
+
+    function _writeFile( $fileName, $data )
+    {
+      if( $fp = @fopen( $fileName, 'w' ) )
+      {
+        fputs( $fp, $data );
+        fclose( $fp );
+        return true;
+      } else {
+        return false;
+      }
+    }
+
+    /**
+      * Format an article into feed specific XML.
+      *
+      * Takes an associative article array and turns it into an XML definition
+      * of an article.
+      * @param array $article ASsociative array describing an article.
+      */
+    function _formatArticle( $article )
+    {
+      $xml = "<article>\n";
+      while( list($key, $value) = each( $article ) )
+      {
+        if($key != 'extensions')
+        {
+            $value = $this->safeXML( $value );
+            $xml .= "<$key>$value</$key>\n>";
+        } else {
+            if(is_array($value))
+            {
+                foreach( $value as $ext )
+                {
+                    $xml .= $ext."\n";
+                }
+            } else {
+                $xml .= $value."\n";
+            }
+        }
+
+      }
+      $xml .= "</article>\n";
+      return $xml;
+    }
+
+    /**
+      * Make sure a string is safe to be chardata in an xml element
+      *
+      * @param string $string the string to escape.
+      */
+    function _safeXML( $string )
+    {
+      return htmlspecialchars($string);
+    }
+
+    /**
+      * Return the formatted start of a feed.
+      *
+      * This will start the xml and create header information about the feed
+      * itself.
+      */
+    function _feedHeader()
+    {
+      $xml = "<?xml version=\"1.0\" encoding=\"{$this->encoding}\"?>\n\n";
+
+      $xml .= '<feed'.$this->_injectNamespaces().">\n";
+
+      $xml .= "<title>{$this->title}</title>\n";
+      foreach( $this->extensions as $extendingTag )
+      {
+        $xml .= $extendingTag."\n";
+      }
+      return $xml;
+    }
+
+    /**
+      * Inject XMLNS items into the feed master element,
+      * if needed.
+      */
+    function _injectNamespaces()
+    {
+        $xml = ' ';
+        if( is_array($this->namespaces) )
+        {
+            $xml .= implode(' ', $this->namespaces);
+        }
+
+        return $xml;
+    }
+
+    /**
+      * Return the formatted end of a feed.
+      *
+      * just closes things off nicely.
+      */
+    function _feedFooter()
+    {
+      $xml = '</feed>';
+      return $xml;
+    }
+
+    /**
+      * Handle the begining of an XML element
+      *
+      * This is called from the parserfactory once the type of data has been
+      * determined. Standard XML_PARSER element handler.
+      *
+      * @author Michael Jervis (mike@fuckingbrit.com)
+      * @copyright Michael Jervis 2004
+      */
+    function startElement($parser, $name, $attributes)
+    {
+    }
+
+    /**
+      * Handle the close of an XML element
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function endElement($parser, $name)
+    {
+    }
+
+    /**
+      * Handles character data.
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function charData($parser, $data)
+    {
+    }
+  }
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/syndication/parserfactory.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/parserfactory.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/syndication/parserfactory.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/parserfactory.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,279 @@
+<?php
+  /****************************************************************************/
+  /* feedparserfactory.class.php                                              */
+  /*                                                                          */
+  /****************************************************************************/
+  /* Copyright (c) 2004 Michael Jervis (mike@fuckingbrit.com)                 */
+  /*                                                                          */
+  /* This software is licensed under the terms of the ZLIB License:           */
+  /*                                                                          */
+  /* This software is provided 'as-is', without any express or implied        */
+  /* warranty. In no event will the authors be held liable for any damages    */
+  /* arising from the use of this software.                                   */
+  /*                                                                          */
+  /* Permission is granted to anyone to use this software for any purpose,    */
+  /* including commercial applications, and to alter it and redistribute it   */
+  /* freely, subject to the following restrictions:                           */
+  /*                                                                          */
+  /*  1. The origin of this software must not be misrepresented; you must not */
+  /*     claim that you wrote the original software. If you use this software */
+  /*     in a product, an acknowledgment in the product documentation would be*/
+  /*     appreciated but is not required.                                     */
+  /*                                                                          */
+  /*  2. Altered source versions must be plainly marked as such, and must not */
+  /*     be misrepresented as being the original software.                    */
+  /*                                                                          */
+  /*  3. This notice may not be removed or altered from any source            */
+  /*     distribution.                                                        */
+  /****************************************************************************/
+
+  // Require pear HTTP_REQUEST
+  require_once('HTTP/Request.php');
+  /**
+   * FeedParserFactory provides generic access to syndication feed formats.
+   *
+   * <p>This library provides abstraction of feed formats. It provides a factory
+   * pattern interface to constructing feed handlers to parse incoming
+   * syndication files, and write outgoing syndication files. The interface is
+   * not tied to any system implementation, however, I plan to provide interface
+   * to geeklog.</p>
+   *
+   * @author Michael Jervis (mike@Fuckingbrit.com)
+   * @copyright Michael Jervis 2004
+   * @see FeedParserBase
+   */
+  class FeedParserFactory
+  {
+    var $readerName;
+    var $reader;
+    var $userAgent;
+
+    /**
+      * Constructor, loads feedparser classes into memory.
+      *
+      * This takes a path on which the supporting feed classes exist, and then
+      * tries to find all *.feed.class.php and brings them into scope.
+      *
+      * @param string $path path to include files from.
+      */
+    function FeedParserFactory( $path='' )
+    {
+      if( $path != '' )
+      {
+        if( is_dir( $path ) )
+        {
+          $folder = opendir( $path );
+          while( ( $filename = @readdir( $folder ) ) !== false )
+          {
+            if( preg_match( '/(.*)\.feed\.class\.php$/i', $filename ) )
+            {
+              require_once( $path.'/'.$filename );
+            }
+          }
+        }
+      }
+    }
+
+    /**
+      * Method to get a feed handler class.
+      *
+      * This function takes a url, fetches it, parses it, and thus figures out
+      * what type of feed parser to return, with the contents all parsed for your
+      * viewing pleasure.
+      *
+      * @access public
+      * @param string $url The url to a feed type to syndicate.
+      */
+    function reader( $url, $targetformat='' )
+    {
+      if( $data = $this->_getFeed( $url ) )
+      {
+        return $this->_findFeed( $data, $targetformat );
+      } else {
+        return false;
+      }
+    }
+
+    /**
+      * Method to get a feed handler class.
+      *
+      * this function assumes you know what you want, and gets you a blank feed
+      * handler to write that data.
+      *
+      * @access public
+      * @param string $feedtype the type of feed to get
+      * @param float $version the version
+      */
+    function writer( $feedtype, $version=2.0 )
+    {
+      $feedtype = strtolower($feedtype);
+      switch ($feedtype)
+      {
+        case 'rss':
+          if( $version == '' )
+          {
+            return new RSS0x();
+          } else {
+            if( $version < 1.0 )
+            {
+              return new RSS0x();
+            } else if( $version >= 2.0 ) {
+              return new RSS20();
+            } else {
+              return new RSS0x();
+            }
+          }
+          break;
+        case 'rdf':
+          return new RDF();
+          break;
+        case 'atom':
+          if( $version == '' )
+          {
+            return new Atom10();
+          } else {
+            if( $version < 1.0 )
+            {
+              return new Atom03();
+            } else {
+              return new Atom10();
+            }
+          }
+          break;
+        default:
+          return false;
+          break;
+      }
+    }
+
+    /**
+      * Provides an array of feed types understood.
+      *
+      * Provides an array of feed types understood. Yeah it's manual, but, the
+      * feed reader has to be edited to support new inbounds anyway.
+      *
+      * @access public
+      */
+    function getFeedTypes()
+    {
+      $types = array();
+      $types[] = array('name'=>'RSS','version'=>'0.9x');
+      $types[] = array('name'=>'RSS','version'=>'2.0');
+      $types[] = array('name'=>'RDF','version'=>'1.0');
+      $types[] = array('name'=>'Atom','version'=>'0.3');
+      $types[] = array('name'=>'Atom','version'=>'1.0');
+      return $types;
+    }
+
+    /**
+      * Opens a url in a file pointer
+      *
+      * @access private
+      * @param string $url The URL to open.
+      */
+    function _getFeed( $url )
+    {
+      $req =& new HTTP_Request($url, array('allowRedirects' => true));
+      if ($this->userAgent != '')
+      {
+        $req->addHeader('User-Agent', $this->userAgent);
+      }
+      if (!PEAR::isError($req->sendRequest())) {
+        return $req->getResponseBody();
+      } else {
+        return false;
+      }
+    }
+
+    /**
+      * Find out what format a feed is in.
+      *
+      * @access private
+      */
+    function _findFeed( $data, $format='' )
+    {
+      $xml_parser = xml_parser_create();
+      xml_parser_set_option( $xml_parser, XML_OPTION_CASE_FOLDING, true );
+      if( $format != '' )
+      {
+        @xml_parser_set_option( $xml_parser, XML_OPTION_TARGET_ENCODING,
+                                $format );
+      }
+      xml_set_element_handler( $xml_parser, array(&$this,'_startElement'), array(&$this, '_endElement') );
+      xml_set_character_data_handler( $xml_parser, array(&$this,'_charData') );
+
+      if( !xml_parse( $xml_parser, $data ) )
+      {
+        xml_parser_free( $xml_parser );
+        return false;
+      }
+      xml_parser_free( $xml_parser );
+
+      if( $this->reader != false )
+      {
+        return $this->reader;
+      } else {
+        return false;
+      }
+    }
+
+    function _startElement( $parser, $name, $attributes )
+    {
+      if( !$this->readerName )
+      {
+        /* Check for atom */
+        if( $name == 'FEED' )
+        {
+          if( array_key_exists('VERSION', $attributes) )
+          {
+            $this->readerName = 'Atom03';
+          } else {
+            $this->readerName = 'Atom10';
+          }
+          $this->readerName = 'Atom03';
+        } elseif ( $name == 'RSS' ) {
+          if( array_key_exists('VERSION', $attributes) )
+          {
+            $version = $attributes['VERSION'];
+          } else {
+            $version = 0.91;
+          }
+          if( $version < 1 )
+          {
+            $this->readerName = 'RSS0x';
+          } else {
+            $this->readerName = 'RSS20';
+          }
+        } elseif ( $name = 'RDF:RDF' ) {
+          $this->readerName = 'RDF';
+        }
+        if( $this->readerName )
+        {
+          $this->reader = new $this->readerName;
+          //echo( "Made a new {$this->readerName} called {$this->reader} it's a ".get_class($this->reader)." I'm a ".get_class($this) );
+        }
+      }
+
+      if( $this->reader )
+      {
+        $this->reader->startElement( $parser, $name, $attributes );
+      }
+    }
+
+    function _endElement( $parser, $name )
+    {
+      if( $this->reader )
+      {
+        $this->reader->endElement( $parser, $name );
+      }
+    }
+
+    function _charData( $parser, $data )
+    {
+      if( $this->reader )
+      {
+        $this->reader->charData( $parser, $data );
+      }
+    }
+  }
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/syndication/rdf.feed.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/rdf.feed.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/syndication/rdf.feed.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/rdf.feed.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,237 @@
+<?php
+  /****************************************************************************/
+  /* rdf.feed.class.php                                                       */
+  /*                                                                          */
+  /****************************************************************************/
+  /* Copyright (c) 2004 Michael Jervis (mike@fuckingbrit.com)                 */
+  /*                                                                          */
+  /* This software is licensed under the terms of the ZLIB License:           */
+  /*                                                                          */
+  /* This software is provided 'as-is', without any express or implied        */
+  /* warranty. In no event will the authors be held liable for any damages    */
+  /* arising from the use of this software.                                   */
+  /*                                                                          */
+  /* Permission is granted to anyone to use this software for any purpose,    */
+  /* including commercial applications, and to alter it and redistribute it   */
+  /* freely, subject to the following restrictions:                           */
+  /*                                                                          */
+  /*  1. The origin of this software must not be misrepresented; you must not */
+  /*     claim that you wrote the original software. If you use this software */
+  /*     in a product, an acknowledgment in the product documentation would be*/
+  /*     appreciated but is not required.                                     */
+  /*                                                                          */
+  /*  2. Altered source versions must be plainly marked as such, and must not */
+  /*     be misrepresented as being the original software.                    */
+  /*                                                                          */
+  /*  3. This notice may not be removed or altered from any source            */
+  /*     distribution.                                                        */
+  /****************************************************************************/
+
+  /**
+    * Provides feed handlers for RDF 1.0
+    *
+    * @author Michael Jervis (mike@fuckingbrit.com)
+    * @version 1.0
+    */
+
+  /**
+   * RDF provides reading and writing of RDF 1.0 format syndication feeds.
+   *
+   * @author Michael Jervis (mike@fuckingbrit.com)
+   * @copyright Michael Jervis 2004
+   * @abstract
+   */
+  class RDF extends FeedParserBase
+  {
+    /**
+      * @access private
+      * @var boolean
+      */
+    var $_inItem;
+
+    /**
+      * @access private
+      * @var array
+      */
+    var $_currentItem;
+
+    function RDF()
+    {
+      $this->FeedParserBase();
+      $this->_inItem = false;
+    }
+
+    /**
+      * Format an article into an Atom 0.3 <entry> tag.
+      *
+      * Takes an associative article array and turns it into an XML definition
+      * of an article. Uses merely title, link and summary.
+      *
+      * @param array $article Associative array describing an article.
+      */
+    function _formatArticle( $article )
+    {
+      $xml = "<item rdf:about=\"{$article['link']}\">\n";
+      $xml .= '<title>'.$this->_safeXML( $article['title'] )."</title>\n";
+      $xml .= '<link>'.$this->_safeXML( $article['link'] )."</link>\n";
+      if( array_key_exists( 'author', $article ) )
+      {
+        $xml .= '<dc:creator>'.$article['author']."</dc:creator>\n";
+      }
+      if( array_key_exists( 'summary', $article ) )
+      {
+        if( strlen( $article['summary'] ) > 0 )
+        {
+          $xml .= '<content:encoded>'
+                          . $this->_safeXML ($article['summary'])
+                          . "</content:encoded>\n";
+        }
+      }
+      if( is_array( $article->extensions ) )
+      {
+        foreach( $article->extensions as $extendingTag )
+        {
+            $xml .= "$extendingTag\n";
+        }
+      }
+      $xml .= "</item>\n";
+      return $xml;
+    }
+
+    /**
+      * Return the formatted start of a feed.
+      *
+      * This will start the xml and create header information about the feed
+      * itself.
+      */
+    function _feedHeader()
+    {
+      $xml = "<?xml version=\"1.0\" encoding=\"{$this->encoding}\"?>\n\n";
+      $this->namespaces[] = 'xmlns:dc="http://purl.org/dc/elements/1.1/"';
+      $this->namespaces[] = 'xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"';
+      $this->namespaces[] = 'xmlns="http://purl.org/rss/1.0/"';
+      $xml .= '<rdf:RDF'.$this->_injectNamespaces().">\n";
+      $xml .= "<channel  rdf:about=\"{$this->feedlogo}\">\n";
+      $xml .= "<title>".$this->_safeXML( $this->title )."</title>\n";
+      $xml .= '<link>'.$this->_safeXML( $this->sitelink )."</link>\n";
+      $xml .= '<description>'.$this->_safeXML( $this->description )."</description>\n";
+      $xml .= '<dc:language>'.$this->lang."</dc:language>\n";
+      if( strlen($this->feedlogo) > 0 )
+      {
+        $xml .= '<image rdf:resource="'.$this->_safeXML( $this->feedlogo )."\"/>\n";
+      }
+
+      if( strlen($this->sitecontact) > 0 )
+      {
+        $xml .= '<dc:creator>'.$this->sitecontact."</dc:creator>\n";
+      }
+      $xml .= "<items>\n<rdf:Seq/>\n</items>\n";
+      if( strlen($this->feedlogo) > 0 )
+      {
+        $xml .= "<image  rdf:about=\"{$this->feedlogo}\">\n";
+        $xml .= '<url>'.$this->_safeXML( $this->feedlogo )."</url>\n";
+        $xml .= '<title>'.$this->_safeXML( $this->title )."</title>\n";
+        $xml .= '<link>'.$this->_safeXML( $this->sitelink )."</link>\n";
+        $xml .= "</image>\n";
+      }
+      if( is_array( $this->extensions ) )
+      {
+        foreach( $this->extensions as $extendingTag )
+        {
+            $xml .= "$extendingTag\n";
+        }
+      }
+      $xml .= "</channel>\n";
+
+      return $xml;
+    }
+
+    /**
+      * Return the formatted end of a feed.
+      *
+      * just closes things off nicely.
+      */
+    function _feedFooter()
+    {
+      $xml = "</rdf:RDF>\n";
+      return $xml;
+    }
+
+    /**
+      * Handle the begining of an XML element
+      *
+      * This is called from the parserfactory once the type of data has been
+      * determined. Standard XML_PARSER element handler.
+      *
+      * @author Michael Jervis (mike@fuckingbrit.com)
+      * @copyright Michael Jervis 2004
+      */
+    function startElement($parser, $name, $attributes)
+    {
+      if( $name == 'ITEM' )
+      {
+        $this->_inItem = true;
+        $this->_currentItem = array();
+      }
+      $this->_currentTag = $name;
+    }
+
+    /**
+      * Handle the close of an XML element
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function endElement($parser, $name)
+    {
+      if( $name == 'ITEM' )
+      {
+        $this->_inItem = false;
+        $this->articles[] = $this->_currentItem;
+      }
+      $this->_currentTag = '';
+    }
+
+    /**
+      * Handles character data.
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function charData($parser, $data)
+    {
+      if( $this->_inItem )
+      {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          if( empty( $this->_currentItem['title'] ) )
+          {
+            $this->_currentItem['title'] = $data;
+          } else {
+            $this->_currentItem['title'] .= $data;
+          }
+        } else if( $this->_currentTag == 'LINK' ) {
+          if( empty( $this->_currentItem['link'] ) )
+          {
+            $this->_currentItem['link'] = $data;
+          } else {
+            $this->_currentItem['link'] .= $data;
+          }
+        } else if( $this->_currentTag == 'CONTENT:ENCODED' ) {
+          if( empty( $this->_currentItem['summary'] ) )
+          {
+            $this->_currentItem['summary'] = $data;
+          } else {
+            $this->_currentItem['summary'] .= $data;
+          }
+        }
+      } else {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          $this->title .= $data;
+        } else if( $this->_currentTag == 'LINK' ) {
+          $this->sitelink .= $data;
+        } else if( $this->_currentTag == 'DESCRIPTION' ) {
+          $this->description .= $data;
+        }
+      }
+    }
+  }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/syndication/rss.feed.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/rss.feed.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/syndication/rss.feed.class.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/syndication/rss.feed.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,498 @@
+<?php
+  /****************************************************************************/
+  /* rss.feed.class.php                                                       */
+  /*                                                                          */
+  /****************************************************************************/
+  /* Copyright (c) 2004 Michael Jervis (mike@fuckingbrit.com)                 */
+  /*                                                                          */
+  /* This software is licensed under the terms of the ZLIB License:           */
+  /*                                                                          */
+  /* This software is provided 'as-is', without any express or implied        */
+  /* warranty. In no event will the authors be held liable for any damages    */
+  /* arising from the use of this software.                                   */
+  /*                                                                          */
+  /* Permission is granted to anyone to use this software for any purpose,    */
+  /* including commercial applications, and to alter it and redistribute it   */
+  /* freely, subject to the following restrictions:                           */
+  /*                                                                          */
+  /*  1. The origin of this software must not be misrepresented; you must not */
+  /*     claim that you wrote the original software. If you use this software */
+  /*     in a product, an acknowledgment in the product documentation would be*/
+  /*     appreciated but is not required.                                     */
+  /*                                                                          */
+  /*  2. Altered source versions must be plainly marked as such, and must not */
+  /*     be misrepresented as being the original software.                    */
+  /*                                                                          */
+  /*  3. This notice may not be removed or altered from any source            */
+  /*     distribution.                                                        */
+  /****************************************************************************/
+
+  /**
+    * Provides feed handlers for RSS 0.9x and RSS 2.0
+    *
+    * This library file provides multiple class definitions for dealing with
+    * variants of the RSS syndication format. We will <b>not</b> handle RSS 1.0
+    * however, that is RDF and handled in a seperate case. This is purely for
+    * the original RSS and the 2.0 that was created to deal with the fact
+    * that RDF was overkill for the original purpose of RSS.
+    *
+    * @author Michael Jervis (mike@fuckingbrit.com)
+    * @version 1.0
+    */
+
+  /**
+   * rss0x provides reading and writing of RSS 0.91 format syndication feeds.
+   *
+   * @author Michael Jervis (mike@fuckingbrit.com)
+   * @copyright Michael Jervis 2004
+   * @abstract
+   */
+  class RSS0x extends FeedParserBase
+  {
+    /**
+      * @access private
+      * @var boolean
+      */
+    var $_inItem;
+
+    /**
+      * @access private
+      * @var array
+      */
+    var $_currentItem;
+
+    function RSS0x()
+    {
+      $this->FeedParserBase();
+      $this->_inItem = false;
+    }
+
+    /**
+      * Format an article into an RSS 0.91 <item> tag.
+      *
+      * Takes an associative article array and turns it into an XML definition
+      * of an article. Uses merely title, link and summary.
+      *
+      * @param array $article Associative array describing an article.
+      */
+    function _formatArticle( $article )
+    {
+      $xml = "<item>\n";
+      $xml .= '<title>'.$this->_safeXML( $article['title'] )."</title>\n";
+      $xml .= '<link>'.$this->_safeXML( $article['link'] )."</link>\n";
+      if( array_key_exists( 'summary', $article ) )
+      {
+        if( strlen( $article['summary'] ) > 0 )
+        {
+          $xml .= '<description>'.$this->_safeXML( $article['summary'] )."</description>\n";
+        }
+      }
+
+      if( is_array($article['extensions']) )
+      {
+        foreach( $article['extensions'] as $extensionTag )
+        {
+            $xml .= "$extensionTag\n";
+        }
+      }
+      $xml .= "</item>\n";
+      return $xml;
+    }
+
+    /**
+      * Return the formatted start of a feed.
+      *
+      * This will start the xml and create header information about the feed
+      * itself.
+      */
+    function _feedHeader()
+    {
+      $xml = "<?xml version=\"1.0\" encoding=\"{$this->encoding}\"?>\n\n";
+      $xml .= "<rss version=\"0.91\"".$this->_injectNamespaces().">\n<channel>\n";
+      $xml .= "<title>".$this->_safeXML( $this->title )."</title>\n";
+      $xml .= "<link>".$this->_safeXML( $this->sitelink )."</link>\n";
+      if( strlen( $this->description ) > 0 )
+      {
+        $xml .= "<description>".$this->_safeXML( $this->description )."</description>\n";
+      }
+      $xml .= "<language>{$this->lang}</language>\n";
+      if( strlen($this->feedlogo) > 0 )
+      {
+        $xml .= "<image>\n";
+        $xml .= '<url>'.$this->_safeXML( $this->feedlogo )."</url>\n";
+        $xml .= '<title>'.$this->_safeXML( $this->title )."</title>\n";
+        $xml .= '<link>'.$this->_safeXML( $this->sitelink )."</link>\n";
+        $xml .= "</image>\n";
+      }
+      foreach( $this->extensions as $extendingTag )
+      {
+        $xml .= $extendingTag."\n";
+      }
+      return $xml;
+    }
+
+    /**
+      * Return the formatted end of a feed.
+      *
+      * just closes things off nicely.
+      */
+    function _feedFooter()
+    {
+      $xml = "</channel>\n</rss>\n";
+      return $xml;
+    }
+
+    /**
+      * Handle the begining of an XML element
+      *
+      * This is called from the parserfactory once the type of data has been
+      * determined. Standard XML_PARSER element handler.
+      *
+      * @author Michael Jervis (mike@fuckingbrit.com)
+      * @copyright Michael Jervis 2004
+      */
+    function startElement($parser, $name, $attributes)
+    {
+      if( $name == 'ITEM' )
+      {
+        $this->_inItem = true;
+        $this->_currentItem = array();
+      }
+      $this->_currentTag = $name;
+    }
+
+    /**
+      * Handle the close of an XML element
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function endElement($parser, $name)
+    {
+      if( $name == 'ITEM' )
+      {
+        $this->_inItem = false;
+        $this->articles[] = $this->_currentItem;
+      }
+      $this->_currentTag = '';
+    }
+
+    /**
+      * Handles character data.
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function charData($parser, $data)
+    {
+      if( $this->_inItem )
+      {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          if( empty( $this->_currentItem['title'] ) )
+          {
+            $this->_currentItem['title'] = $data;
+          } else {
+            $this->_currentItem['title'] .= $data;
+          }
+        } else if( $this->_currentTag == 'LINK' ) {
+          if( empty( $this->_currentItem['link'] ) )
+          {
+            $this->_currentItem['link'] = $data;
+          } else {
+            $this->_currentItem['link'] .= $data;
+          }
+        } else if( $this->_currentTag == 'DESCRIPTION' ) {
+          if( empty( $this->_currentItem['summary'] ) )
+          {
+            $this->_currentItem['summary'] = $data;
+          } else {
+            $this->_currentItem['summary'] .= $data;
+          }
+        }
+      } else {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          $this->title .= $data;
+        } else if( $this->_currentTag == 'LINK' ) {
+          $this->sitelink .= $data;
+        } else if( $this->_currentTag == 'DESCRIPTION' ) {
+          $this->description .= $data;
+        }
+      }
+    }
+  }
+
+
+  /**
+   * rss20 provides reading and writing of RSS 2.0 format syndication feeds.
+   *
+   * @author Michael Jervis (mike@fuckingbrit.com)
+   * @copyright Michael Jervis 2004
+   * @abstract
+   */
+  class RSS20 extends FeedParserBase
+  {
+    /**
+      * @access private
+      * @var boolean
+      */
+    var $_inItem;
+
+    /**
+      * @access private
+      * @var array
+      */
+    var $_currentItem;
+
+    /**
+      * Date of feed, for reading only
+      */
+    var $date;
+
+    /**
+      * is the guid element a permalink?
+      */
+    var $_permaLink;
+
+    /**
+      * Have we used GUID for link?
+      */
+    var $_linkGUID;
+
+    function RSS20()
+    {
+      $this->FeedParserBase();
+      $this->_inItem = false;
+      $this->_linkGUID = false;
+    }
+
+    /**
+      * Format an article into an RSS 2.0 <item> tag.
+      *
+      * Takes an associative article array and turns it into an XML definition
+      * of an article. Uses merely title, link and summary.
+      *
+      * @param array $article Associative array describing an article.
+      */
+    function _formatArticle( $article )
+    {
+      $xml = "<item>\n";
+      $xml .= '<title>'.$this->_safeXML( $article['title'] )."</title>\n";
+      $xml .= '<link>'.$this->_safeXML( $article['link'] )."</link>\n";
+      $xml .= '<guid isPermaLink="true">'.$this->_safeXML( $article['link'] )."</guid>\n";
+      $xml .= '<pubDate>'.strftime( '%a, %d %b %Y %H:%M:%S %z', $article['date'] )."</pubDate>\n";
+      if( array_key_exists( 'commenturl', $article ) )
+      {
+        $xml .= '<comments>'.$this->_safeXML( $article['commenturl'] )."</comments>\n";
+      }
+      if( array_key_exists( 'topic', $article ) )
+      {
+        $topic = $article['topic'];
+        if( is_array( $topic ))
+        {
+          foreach( $topic as $subject )
+          {
+            $xml .= '<dc:subject>'.$this->_safeXML( $subject )."</dc:subject>\n";
+          }
+        }
+        else
+        {
+          $xml .= '<dc:subject>'.$this->_safeXML( $topic )."</dc:subject>\n";
+        }
+      }
+      if( array_key_exists( 'summary', $article ) )
+      {
+        if( strlen( $article['summary'] ) > 0 )
+        {
+          $xml .= '<description>'.$this->_safeXML( $article['summary'] )."</description>\n";
+        }
+      }
+      if( isset($article['extensions']) &&  is_array($article['extensions']) )
+      {
+        foreach( $article['extensions'] as $extensionTag )
+        {
+            $xml .= "$extensionTag\n";
+        }
+      }
+      $xml .= "</item>\n";
+      return $xml;
+    }
+
+    /**
+      * Return the formatted start of a feed.
+      *
+      * This will start the xml and create header information about the feed
+      * itself.
+      */
+    function _feedHeader()
+    {
+      global $_CONF;
+
+      if( !is_array($this->namespaces) )
+      {
+        $this->namespaces = array();
+      }
+      $this->namespaces[] = 'xmlns:dc="http://purl.org/dc/elements/1.1/"';
+
+      $xml = "<?xml version=\"1.0\" encoding=\"{$this->encoding}\"?>\n\n";
+      $xml .= "<rss version=\"2.0\"".$this->_injectNamespaces().">\n";
+      $xml .= "<channel>\n";
+      $xml .= "<title>".$this->_safeXML( $this->title )."</title>\n";
+      $xml .= "<link>".$this->_safeXML( $this->sitelink )."</link>\n";
+      if( strlen( $this->description ) > 0 )
+      {
+        $xml .= "<description>".$this->_safeXML( $this->description )."</description>\n";
+      }
+      if( strlen($this->sitecontact) > 0 )
+      {
+        $xml .= '<managingEditor>'.$this->_safeXML( $this->sitecontact )."</managingEditor>\n";
+        $xml .= '<webMaster>'.$this->_safeXML( $this->sitecontact )."</webMaster>\n";
+      }
+      if( strlen($this->copyright) > 0 )
+      {
+        $xml .= '<copyright>'.$this->_safeXML( $this->copyright )."</copyright>\n";
+      }
+      if( strlen($this->system) > 0 )
+      {
+        $xml .= '<generator>'.$this->_safeXML( $this->system )."</generator>\n";
+      }
+      $xml .= '<pubDate>'.strftime( '%a, %d %b %Y %H:%M:%S %z' )."</pubDate>\n";
+      $xml .= "<language>{$this->lang}</language>\n";
+
+      if( strlen($this->feedlogo) > 0 )
+      {
+        $xml .= "<image>\n";
+        $xml .= '<url>'.$this->_safeXML( $this->feedlogo )."</url>\n";
+        $xml .= '<title>'.$this->_safeXML( $this->title )."</title>\n";
+        $xml .= '<link>'.$this->_safeXML( $this->sitelink )."</link>\n";
+        $xml .= "</image>\n";
+      }
+      foreach( $this->extensions as $extendingTag )
+      {
+        $xml .= $extendingTag."\n";
+      }
+      return $xml;
+    }
+
+    /**
+      * Return the formatted end of a feed.
+      *
+      * just closes things off nicely.
+      */
+    function _feedFooter()
+    {
+      $xml = "</channel>\n</rss>\n";
+      return $xml;
+    }
+
+    /**
+      * Handle the begining of an XML element
+      *
+      * This is called from the parserfactory once the type of data has been
+      * determined. Standard XML_PARSER element handler.
+      *
+      * @author Michael Jervis (mike@fuckingbrit.com)
+      * @copyright Michael Jervis 2004
+      */
+    function startElement($parser, $name, $attributes)
+    {
+      $this->_currentTag = $name;
+      if( $name == 'ITEM' )
+      {
+        $this->_inItem = true;
+        $this->_currentItem = array();
+        $this->_permaLink = false;
+      } else if( ($name == 'GUID') && array_key_exists('ISPERMALINK', $attributes) ) {
+        if( $attributes['ISPERMALINK'] == 'true' )
+        {
+          $this->_permaLink = true;
+        } else {
+          $this->_permaLink = false;
+        }
+      } else {
+        $this->_permaLink = false;
+      }
+
+    }
+
+    /**
+      * Handle the close of an XML element
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function endElement($parser, $name)
+    {
+      if( $name == 'ITEM' )
+      {
+        $this->_inItem = false;
+        $this->articles[] = $this->_currentItem;
+      } elseif( $name == 'GUID' && $this->_permaLink ) {
+        /* if we have a guid that is ALSO a permalink, override link with it */
+        $this->_currentItem['link'] = $this->_currentItem['guid'];
+        $this->_linkGUID = true;
+      }
+      $this->_currentTag = '';
+    }
+
+    /**
+      * Handles character data.
+      *
+      * Called by the parserfactory during parsing.
+      */
+    function charData($parser, $data)
+    {
+      if( $this->_inItem )
+      {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          if( empty( $this->_currentItem['title'] ) )
+          {
+            $this->_currentItem['title'] = $data;
+          } else {
+            $this->_currentItem['title'] .= $data;
+          }
+        } else if( $this->_currentTag == 'LINK' ) {
+          if( !$this->_linkGUID )
+          {
+              if( empty( $this->_currentItem['link'] ) )
+              {
+                $this->_currentItem['link'] = $data;
+              } else {
+                $this->_currentItem['link'] .= $data;
+              }
+          }
+        } else if( $this->_currentTag == 'DESCRIPTION' ) {
+          if( empty( $this->_currentItem['summary'] ) )
+          {
+            $this->_currentItem['summary'] = $data;
+          } else {
+            $this->_currentItem['summary'] .= $data;
+          }
+        } else if( $this->_currentTag == 'PUBDATE' ) {
+          $this->_currentItem['date'] = $data;
+        } else if( $this->_currentTag == 'GUID' ) {
+          if( empty( $this->_currentItem['guid'] ) )
+          {
+            $this->_currentItem['guid'] = $data;
+          } else {
+            $this->_currentItem['guid'] .= $data;
+          }
+        }
+      } else {
+        if( $this->_currentTag == 'TITLE' )
+        {
+          $this->title .= $data;
+        } else if( $this->_currentTag == 'LINK' ) {
+          $this->sitelink .= $data;
+        } else if( $this->_currentTag == 'DESCRIPTION' ) {
+          $this->description .= $data;
+        } else if( $this->_currentTag == 'MANAGINGEDITOR' ) {
+          $this->sitecontact .= $data;
+        } else if( $this->_currentTag == 'COPYRIGHT' ) {
+          $this->copyright .= $data;
+        } else if( $this->_currentTag == 'PUBDATE' ) {
+          $this->date .= $data;
+        }
+      }
+    }
+  }
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/upload.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/upload.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/upload.class.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/upload.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,13 +2,13 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | upload.class.php                                                          |
 // |                                                                           |
 // | Geeklog file upload class library.                                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2002-2004 by the following authors:                         |
+// | Copyright (C) 2002-2006 by the following authors:                         |
 // |                                                                           |
 // | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
 // |          Dirk Haun        - dirk@haun-online.de                           |
@@ -30,7 +30,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: upload.class.php,v 1.39 2004/12/19 10:12:28 dhaun Exp $
+// $Id: upload.class.php,v 1.43 2006/01/15 20:59:11 dhaun Exp $
 
 /**
 * This class will allow you to securely upload one or more files from a form
@@ -639,7 +639,20 @@
                 $newwidth = (int) ($imageInfo['width'] * $sizefactor);
                 $newheight = (int) ($imageInfo['height'] * $sizefactor);
                 $newsize = $newwidth . 'x' . $newheight;
-                $image_dest = ImageCreateTrueColor($newwidth, $newheight);
+
+                // ImageCreateTrueColor may throw a fatal error on some PHP
+                // versions when GD2 is not installed. Ugly workaround, but
+                // there seems to be no better way. Also see the discussion at
+                // http://php.net/ImageCreateTrueColor
+                $image_dest = @ImageCreateTrueColor($newwidth, $newheight);
+                if (!$image_dest) {
+                    $thumb = imagecreate ($newwidth, $newheight);
+                    imageJPEG ($thumb, $filename);
+                    imagedestroy ($thumb);
+                    $image_dest = @imagecreatefromjpeg ($filename);
+                    unlink ($filename);
+                }
+
                 imagecopyresized ($image_dest, $image_source, 0, 0, 0, 0,
                                   $newwidth, $newheight, $imageInfo['width'],
                                   $imageInfo['height']);
@@ -828,7 +841,7 @@
     {
         if (is_array($validIPS)) {
             $this->_limitByIP = true;
-            $this->_allowedIPS = $valid_IPS;
+            $this->_allowedIPS = $validIPS;
             return true;
         } else {
             $this->_addError('Bad call to method limitByIP(), must pass array of valid IP addresses');
@@ -1130,12 +1143,12 @@
 	function numFiles()
 	{
         if (empty($this->_filesToUpload)) {
-            $this->_filesToUpload = $GLOBALS['HTTP_POST_FILES'];
+            $this->_filesToUpload = $_FILES;
         }
 
         $fcount = 0;
 
-        for ($i = 1; $i <= count($GLOBALS['HTTP_POST_FILES']); $i++) {
+        for ($i = 1; $i <= count($_FILES); $i++) {
             $curFile = current($this->_filesToUpload);
         
             // Make sure file field on HTML form wasn't empty
@@ -1144,7 +1157,7 @@
             }
             next($this->_filesToUpload);
         }
-        reset($GLOBALS['HTTP_POST_FILES']);
+        reset($_FILES);
 
         return $fcount;
 	}
@@ -1156,20 +1169,20 @@
 	*/
 	function uploadFiles()
 	{
-        global $HTTP_SERVER_VARS;
+        global $_SERVER;
 
         // Before we do anything, let's see if we are limiting file uploads by
         // IP address and, if so, verify the poster is originating from one of
         // those places
         if ($this->_limitByIP) {
-            if (!in_array($HTTP_SERVER_VARS['REMOTE_ADDR'], $this->_allowedIPS)) {
-                $this->_addError('The IP, ' . $HTTP_SERVER_VARS['REMOTE_ADDR'] . ' is not in the list of '
+            if (!in_array($_SERVER['REMOTE_ADDR'], $this->_allowedIPS)) {
+                $this->_addError('The IP, ' . $_SERVER['REMOTE_ADDR'] . ' is not in the list of '
                     . 'accepted IP addresses.  Refusing to allow file upload(s)');
                 return false;
             }
         }
 
-		$this->_filesToUpload = $GLOBALS['HTTP_POST_FILES'];
+		$this->_filesToUpload = $_FILES;
 		$numFiles = count($this->_filesToUpload);
 
         // For security sake, check to make sure a DOS isn't happening by making
@@ -1192,7 +1205,7 @@
 
         for ($i = 1; $i <= $numFiles; $i++) {
 
-            $this->_currentFile = current($GLOBALS['HTTP_POST_FILES']);
+            $this->_currentFile = current($_FILES);
 
             // Make sure file field on HTML form wasn't empty before proceeding
             if (!empty($this->_currentFile['name'])) {
@@ -1219,7 +1232,7 @@
                 // No file name specified...send as warning.
                 $this->_addWarning('File #' . $i . ' on the HTML form was empty...ignoring it and continuing');
             }
-            next($GLOBALS['HTTP_POST_FILES']);
+            next($_FILES);
         }
 
 		// This function returns false if any errors were encountered
diff -ruN 1.3.11sr1/cpanel-glprivate/system/classes/url.class.php 1.4.0sr5-1/cpanel-glprivate/system/classes/url.class.php
--- 1.3.11sr1/cpanel-glprivate/system/classes/url.class.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/classes/url.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -30,7 +30,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: url.class.php,v 1.8 2004/08/11 09:23:34 dhaun Exp $
+// $Id: url.class.php,v 1.9 2005/06/26 08:38:32 mjervis Exp $
 
 /**
 * This class will allow you to use friendlier URL's, like:
@@ -76,10 +76,10 @@
     */
     function _getArguments()
     {
-        global $HTTP_SERVER_VARS;
+        global $_SERVER;
 
-        if (isset ($HTTP_SERVER_VARS['PATH_INFO'])) {
-            $this->_arguments = explode ('/', $HTTP_SERVER_VARS['PATH_INFO']);
+        if (isset ($_SERVER['PATH_INFO'])) {
+            $this->_arguments = explode ('/', $_SERVER['PATH_INFO']);
             array_shift ($this->_arguments);
         } else {
             $this->_arguments = array ();
@@ -162,11 +162,11 @@
     */
     function getArgument($name)
     {
-        global $HTTP_GET_VARS;
+        global $_GET;
         
         // if in GET VARS array return it 
-        if (!empty($HTTP_GET_VARS[$name])) {
-            return $HTTP_GET_VARS[$name];
+        if (!empty($_GET[$name])) {
+            return $_GET[$name];
         }
         
         // ok, pull from query string
diff -ruN 1.3.11sr1/cpanel-glprivate/system/databases/mysql.class.php 1.4.0sr5-1/cpanel-glprivate/system/databases/mysql.class.php
--- 1.3.11sr1/cpanel-glprivate/system/databases/mysql.class.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/databases/mysql.class.php	2006-08-08 02:39:06.000000000 -0500
@@ -8,9 +8,9 @@
 // |                                                                           |
 // | mysql database class                                                      |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs, tony@tonybibbs.com                                   |
+// | Authors: Tony Bibbs, tony AT tonybibbs DOT com                            |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -29,7 +29,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: mysql.class.php,v 1.19 2004/11/20 17:55:07 dhaun Exp $
+// $Id: mysql.class.php,v 1.20 2005/05/09 19:01:15 dhaun Exp $
 
 /**
 * This file is the mysql implementation of the Geeklog abstraction layer.
@@ -171,7 +171,7 @@
     * Turns detailed error reporting on
     *
     * If set to true, this will display detailed error messages on the site.
-    * Otherwise, it will only that state an error occured without going into
+    * Otherwise, it will only that state an error occurred without going into
     * details. The complete error message (including the offending SQL request)
     * is always available from error.log.
     *
@@ -666,7 +666,7 @@
             if ($this->_display_error) {
                 return  @mysql_errno() . ': ' . @mysql_error();
             } else {
-                return 'An SQL error has occured. Please see error.log for details.';
+                return 'An SQL error has occurred. Please see error.log for details.';
             }
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/install_templates/databasesettings.tpl 1.4.0sr5-1/cpanel-glprivate/system/install_templates/databasesettings.tpl
--- 1.3.11sr1/cpanel-glprivate/system/install_templates/databasesettings.tpl	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/install_templates/databasesettings.tpl	2006-08-08 02:39:06.000000000 -0500
@@ -11,7 +11,7 @@
     </table>
     <input type="hidden" name="page" value="2">
     <input type="hidden" name="geeklog_path" value="{geeklog_path}">
-    <p align="center"><input type="submit" name="action" value="&lt;&lt; Previous">&nbsp;<input type="submit" name="action" value="Next &gt;&gt;"></p>
+    <p align="center"><input type="submit" name="action" value="&lt;&lt; Previous">&nbsp;{NEXT_BUTTON}</p>
     </form>
 </body>
 </html>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-admin.php 1.4.0sr5-1/cpanel-glprivate/system/lib-admin.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-admin.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-admin.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,859 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | lib-admin.php                                                             |
+// |                                                                           |
+// | Admin-related functions needed in more than one place.                    |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs         - tony AT tonybibbs DOT com                   |
+// |          Mark Limburg       - mlimburg AT users DOT sourceforge DOT net   |
+// |          Jason Whittenburg  - jwhitten AT securitygeeks DOT com           |
+// |          Dirk Haun          - dirk AT haun-online DOT de                  |
+// |          Oliver Spiesshofer - oliver AT spiesshofer DOT com               |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: lib-admin.php,v 1.45.2.1 2006/06/30 12:20:48 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'lib-admin.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+function ADMIN_simpleList($fieldfunction, $header_arr, $text_arr,
+                           $data_arr, $menu_arr = '')
+{
+    global $_CONF, $_TABLES, $LANG_ADMIN, $LANG_ACCESS, $_IMAGE_TYPE, $MESSAGE;
+
+    $retval = '';
+
+    $help_url = "";
+    if (!empty($text_arr['help_url'])) {
+        $help_url = $text_arr['help_url'];
+    }
+    
+    $title = "";
+    if (!empty($text_arr['title'])) {
+        $title = $text_arr['title'];
+    }
+    
+    $form_url = '';
+    if (!empty($text_arr['form_url'])) {
+        $form_url = $text_arr['form_url'];
+    }
+
+    $icon = '';
+    if (isset($text_arr['icon'])) {
+        $icon = $text_arr['icon'];
+    }
+    $admin_templates = new Template($_CONF['path_layout'] . 'admin/lists');
+    $admin_templates->set_file (array ('topmenu' => 'topmenu_nosearch.thtml',
+                                       'list' => 'list.thtml',
+                                       'header' => 'header.thtml',
+                                       'row' => 'listitem.thtml',
+                                       'field' => 'field.thtml',
+                                       'menufields' => 'menufields.thtml'
+                                      ));
+    $admin_templates->set_var('site_url', $_CONF['site_url']);
+    $admin_templates->set_var('form_url', $form_url);
+    $admin_templates->set_var('icon', $icon);
+
+    $admin_templates->set_var('lang_edit', $LANG_ADMIN['edit']);
+
+    if ($text_arr['has_menu']) {
+        for ($i = 0; $i < count($menu_arr); $i++) {
+            $admin_templates->set_var('menu_url', $menu_arr[$i]['url'] );
+            $admin_templates->set_var('menu_text', $menu_arr[$i]['text'] );
+            if ($i < (count($menu_arr) -1)) {
+                $admin_templates->set_var('line', '|' );
+            }
+            $admin_templates->parse('menu_fields', 'menufields', true);
+            $admin_templates->clear_var('line');
+        }
+        $admin_templates->set_var('lang_instructions', $text_arr['instructions']);
+        $admin_templates->parse('top_menu', 'topmenu', true);
+    }
+
+    $icon_arr = array(
+        'edit' => '<img src="' . $_CONF['layout_url'] . '/images/edit.'
+             . $_IMAGE_TYPE . '" border="0" alt="' . $LANG_ADMIN['edit'] . '" title="'
+             . $LANG_ADMIN['edit'] . '">',
+        'copy' => '<img src="' . $_CONF['layout_url'] . '/images/copy.'
+             . $_IMAGE_TYPE . '" border="0" alt="' . $LANG_ADMIN['copy'] . '" title="'
+             . $LANG_ADMIN['copy'] . '">',
+        'list' => '<img src="' . $_CONF['layout_url'] . '/images/list.'
+            . $_IMAGE_TYPE . '" border="0" alt="' . $LANG_ACCESS['listthem']
+            . '" title="' . $LANG_ACCESS['listthem'] . '">'
+    );
+
+    $retval .= COM_startBlock ($title, $help_url,
+                               COM_getBlockTemplate ('_admin_block', 'header'));
+
+    # HEADER FIELDS array(text, field, sort)
+    for ($i=0; $i < count( $header_arr ); $i++) {
+        $admin_templates->set_var('header_text', $header_arr[$i]['text']);
+        $admin_templates->parse('header_row', 'header', true);
+    }
+
+    if (count($data_arr)==0) {
+        if (isset($text_arr['no_data'])) {
+            $message = $text_arr['no_data'];
+        } else {
+            $message = $LANG_ADMIN['no_results'];
+        }
+        $admin_templates->set_var('message', $message);
+    } else if ($data_arr == false) {
+        $admin_templates->set_var('message', $LANG_ADMIN['data_error']);
+    } else {
+        for ($i = 0; $i < count($data_arr); $i++) {
+            for ($j = 0; $j < count($header_arr); $j++) {
+                $fieldname = $header_arr[$j]['field'];
+                $fieldvalue = '';
+                if (!empty($data_arr[$i][$fieldname])) {
+                    $fieldvalue = $data_arr[$i][$fieldname];
+                }
+                if (!empty($fieldfunction)) {
+                    $fieldvalue = $fieldfunction($fieldname, $fieldvalue, $data_arr[$i], $icon_arr);
+                } else {
+                    $fieldvalue = $fieldvalue;
+                }
+                if ($fieldvalue !== false) {
+                    $admin_templates->set_var('itemtext', $fieldvalue);
+                    $admin_templates->parse('item_field', 'field', true);
+                }
+            }
+            $admin_templates->set_var('cssid', ($i%2)+1);
+            $admin_templates->parse('item_row', 'row', true);
+            $admin_templates->clear_var('item_field');
+        }
+    }
+
+    $admin_templates->parse('output', 'list');
+    $retval .= $admin_templates->finish($admin_templates->get_var('output'));
+    $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+    return $retval;
+
+}
+/**
+* Creates a list of data with a menu, search, filter, clickable headers etc.
+*
+* @param    string  $component      name of the list
+* @param    string  $fieldfunction  name of the function that handles special entries
+* @param    array   $header_arr     array of header fields with sortables and table fields
+* @param    array   $text_arr       array with different text strings
+* @param    array   $query_arr      array with sql-options
+* @param    array   $menu_arr       menu-entries
+* @param    array   $defsort_arr    default sorting values
+* @param    string  $filter         additional drop-down filters
+* @param    string  $extra          additional values passed to fieldfunction
+* @return   string                  HTML output of function
+*
+*/
+function ADMIN_list($component, $fieldfunction, $header_arr, $text_arr,
+            $query_arr, $menu_arr, $defsort_arr, $filter = '', $extra = '')
+{
+    global $_CONF, $_TABLES, $LANG_ADMIN, $LANG_ACCESS, $_IMAGE_TYPE, $MESSAGE;
+
+    $retval = '';
+
+    $filter_str = '';
+    $order_sql = '';
+    $limit = '';
+    $prevorder = "";
+    if (isset($_GET['prevorder'])) { # what was the last sorting?
+        $prevorder = COM_applyFilter ($_GET['prevorder']);
+    }
+
+    $query = "";
+    if (isset($_REQUEST['q'])) { # get query (text-search)
+        $query = $_REQUEST['q'];
+    }
+
+    $query_limit = "";
+    if (isset($_REQUEST['query_limit'])) { # get query-limit (list-length)
+        $query_limit = COM_applyFilter ($_REQUEST['query_limit'], true);
+    }
+
+    $offset = 0;
+    if (isset ($_REQUEST['offset'])) { # get offset (where does next page start?)
+        $offset = COM_applyFilter ($_REQUEST['offset'], true);
+    }
+    $curpage = 1;
+    $page = "";
+    if (isset ($_REQUEST[$component . 'listpage'])) {
+        $page = COM_applyFilter ($_GET[$component . 'listpage'], true);
+        $curpage = $page;
+    }
+    if ($curpage <= 0) {
+        $curpage = 1; #current page has to be larger 0
+    }
+    
+    #$unfiltered='';
+    #if (!empty($query_arr['unfiltered'])) {
+    #    $unfiltered = $query_arr['unfiltered'];
+    #}
+
+    $help_url = ""; # do we have a help url for the block-header?
+    if (!empty($text_arr['help_url'])) {
+        $help_url = $text_arr['help_url'];
+    }
+    
+    $form_url = ""; # what is the form-url for the search button?
+    if (!empty($text_arr['form_url'])) {
+        $form_url = $text_arr['form_url'];
+    }
+
+    $title = ""; # what is the title of the page?
+    if (!empty($text_arr['title'])) {
+        $title = $text_arr['title'];
+    }
+
+    # get all template fields. Maybe menufields can be only loaded if used?
+    $admin_templates = new Template($_CONF['path_layout'] . 'admin/lists');
+    $admin_templates->set_file (array ('topmenu' => 'topmenu.thtml',
+                                       'list' => 'list.thtml',
+                                       'header' => 'header.thtml',
+                                       'row' => 'listitem.thtml',
+                                       'field' => 'field.thtml',
+                                       'menufields' => 'menufields.thtml'
+                                      ));
+    # inserty some values into the template
+    $admin_templates->set_var('site_url', $_CONF['site_url']);
+    $admin_templates->set_var('form_url', $form_url);
+    $admin_templates->set_var('icon', $text_arr['icon']);
+    $admin_templates->set_var('lang_edit', $LANG_ADMIN['edit']);
+    
+    # define icon paths. Those will be transmitted to $fieldfunction.
+    $icon_arr = array(
+        'edit' => '<img src="' . $_CONF['layout_url'] . '/images/edit.'
+             . $_IMAGE_TYPE . '" border="0" alt="' . $LANG_ADMIN['edit']
+             . '" title="' . $LANG_ADMIN['edit'] . '">',
+        'copy' => '<img src="' . $_CONF['layout_url'] . '/images/copy.'
+             . $_IMAGE_TYPE . '" border="0" alt="' . $LANG_ADMIN['copy']
+             . '" title="' . $LANG_ADMIN['copy'] . '">',
+        'list' => '<img src="' . $_CONF['layout_url'] . '/images/list.'
+            . $_IMAGE_TYPE . '" border="0" alt="' . $LANG_ACCESS['listthem']
+            . '" title="' . $LANG_ACCESS['listthem'] . '">'
+    );
+    # the user can disable the menu. if used, create it.
+    if ($text_arr['has_menu']) {
+        for ($i = 0; $i < count($menu_arr); $i++) { # iterate through menu
+            $admin_templates->set_var('menu_url', $menu_arr[$i]['url'] );
+            $admin_templates->set_var('menu_text', $menu_arr[$i]['text'] );
+            if ($i < (count($menu_arr) -1)) {
+                $admin_templates->set_var('line', '|' ); # add separator
+            }
+            $admin_templates->parse('menu_fields', 'menufields', true);
+            $admin_templates->clear_var('line'); # clear separator after use
+        }
+        # add text strings to template
+        $admin_templates->set_var('lang_search', $LANG_ADMIN['search']);
+        $admin_templates->set_var('lang_submit', $LANG_ADMIN['submit']);
+        $admin_templates->set_var('lang_limit_results', $LANG_ADMIN['limit_results']);
+        $admin_templates->set_var('lang_instructions', $text_arr['instructions']);
+        $admin_templates->set_var('last_query', $query);
+        $admin_templates->set_var('filter', $filter);
+        $admin_templates->parse('top_menu', 'topmenu', true);
+    }
+    
+    # since people search with ...* replace with ....% for SQL
+    $query = str_replace ('*', '%', $query);
+    $sql_query = addslashes ($query); # replace quotes etc for security
+    $sql = $query_arr['sql']; # get sql from array that builds data
+
+    $order_var = ""; # number that is displayed in URL
+    $order = "";     # field that is used in SQL
+    if (!isset($_GET['order'])) {
+        $order = $defsort_arr['field'];
+    } else {
+        $order_var = COM_applyFilter ($_GET['order'], true);
+        $order_var_link = "&amp;order=$order_var"; # keep the variable for the google paging
+        $order = $header_arr[$order_var]['field'];  # current order field name
+    }
+
+    $direction = "";
+    if (!isset($_GET['direction'])) { # get direction to sort after
+        $direction = $defsort_arr['direction'];
+    } else {
+        $direction = $_GET['direction'];
+    }
+    if ($order == $prevorder) { #reverse direction if prev. order was the same
+        $direction = ($direction == 'desc') ? 'asc' : 'desc';
+    } else {
+        $direction = ($direction == 'desc') ? 'desc' : 'asc';
+    }
+
+    if ($direction == 'asc') { # assign proper arrow img name dep. on sort order
+        $arrow = 'bararrowdown';
+    } else {
+        $arrow = 'bararrowup';
+    }
+    # make actual order arrow image
+    $img_arrow = '&nbsp;<img src="' . $_CONF['layout_url'] . '/images/' . $arrow
+            . '.' . $_IMAGE_TYPE . '" border="0" alt="">';
+    
+    if (!empty($order)) { # concat order string
+        $order_sql = "ORDER BY $order $direction";
+    }
+
+    # HEADER FIELDS array(text, field, sort)
+    for ($i=0; $i < count( $header_arr ); $i++) { #iterate through all headers
+        $admin_templates->set_var('header_text', $header_arr[$i]['text']); # title
+        if ($header_arr[$i]['sort'] != false) { # is this sortable?
+            if ($order==$header_arr[$i]['field']) { # is this currently sorted?
+                $admin_templates->set_var('img_arrow', $img_arrow);
+            }
+            # make the mouseover effect is sortable
+            $admin_templates->set_var('mouse_over', "OnMouseOver=\"this.style.cursor='pointer';\"");
+            $order_var = $i; # assign number to field so we know what to sort
+            $onclick="onclick=\"window.location.href='$form_url?" #onclick action
+                    ."order=$order_var&amp;prevorder=$order&amp;direction=$direction"
+                    ."&amp;" . $component . "listpage=$page"
+                    ."&amp;q=$query&amp;query_limit=$query_limit$extra';\"";
+            $admin_templates->set_var('on_click', $onclick);
+        }
+        $admin_templates->parse('header_row', 'header', true);
+        $admin_templates->clear_var('img_arrow'); # clear all for next header
+        $admin_templates->clear_var('mouse_over');
+        $admin_templates->clear_var('on_click');
+        $admin_templates->clear_var('arrow');
+    }
+
+    $has_extras = '';
+    if (isset($text_arr['has_extras'])) { # does this one use extras? (google paging)
+        $has_extras = $text_arr['has_extras'];
+    }
+    if ($has_extras) {
+        $limit = 50; # default query limit if not other chosen.
+                     # maybe this could be a setting from the list?
+        if (!empty($query_limit)) {
+            $limit = $query_limit;
+        }
+        if ($query != '') { # set query into form after search
+            $admin_templates->set_var ('query', urlencode($query) );
+        } else {
+            $admin_templates->set_var ('query', '');
+        }
+        $admin_templates->set_var ('query_limit', $query_limit);
+        # choose proper dropdown field for query limit
+        $admin_templates->set_var($limit . '_selected', 'selected="selected"');
+
+        if (!empty($query_arr['default_filter'])){ # add default filter to sql
+            $filter_str = " {$query_arr['default_filter']}";
+        }
+        if (!empty ($query)) { # add query fields with search term
+            $filter_str .= " AND (";
+            for ($f = 0; $f < count($query_arr['query_fields']); $f++) {
+                $filter_str .= $query_arr['query_fields'][$f] . " LIKE '$sql_query'";
+                if ($f < (count($query_arr['query_fields']) - 1)) {
+                    $filter_str .= " OR ";
+                }
+            }
+            $filter_str .= ")";
+        }
+        $num_pages = ceil (DB_getItem ($_TABLES[$query_arr['table']], 'count(*)',
+                            "1 " . $filter_str) / $limit);
+        if ($num_pages < $curpage) { # make sure we dont go beyond possible results
+               $curpage = 1;
+        }
+        $offset = (($curpage - 1) * $limit);
+        $limit = "LIMIT $offset,$limit"; # get only current page data
+    }
+
+    # SQL
+    $sql .= "$filter_str $order_sql $limit;";
+    $result = DB_query($sql);
+    $nrows = DB_numRows($result);
+    $r = 1; # r is the counter for the actual displayed rows for correct coloring
+    for ($i = 0; $i < $nrows; $i++) { # now go through actual data
+        $A = DB_fetchArray($result);
+        $this_row = false; # as long as no fields are returned, dont print row
+        for ($j = 0; $j < count($header_arr); $j++) {
+            $fieldname = $header_arr[$j]['field']; # get field name from headers
+            $fieldvalue = '';
+            if (!empty($A[$fieldname])) { # is there a field in data like that?
+                $fieldvalue = $A[$fieldname]; # yes, get its data
+            }
+            if (!empty($fieldfunction)) { # do we have a fieldfunction?
+                $fieldvalue = $fieldfunction($fieldname, $fieldvalue, $A, $icon_arr);
+            } else { # if not just take the value
+                $fieldvalue = $fieldvalue;
+            }
+            if ($fieldvalue !== false) { # return was there, so write line
+                $this_row = true;
+            } else {
+                $fieldvalue = ''; # set field = ''
+            }
+            $admin_templates->set_var('itemtext', $fieldvalue); # write field
+            $admin_templates->parse('item_field', 'field', true);
+        }
+        if ($this_row) { # there was data in at least one field, so print line
+            $r++; # switch to next color
+            $admin_templates->set_var('cssid', ($r%2)+1); # make alternating table color
+            $admin_templates->parse('item_row', 'row', true); # process the complete row
+        }
+        $admin_templates->clear_var('item_field'); # clear field
+    }
+
+    if ($nrows==0) { # there is no data. return notification message.
+        if (isset($text_arr['no_data'])) {
+            $message = $text_arr['no_data']; # there is a user-message
+        } else {
+            $message = $LANG_ADMIN['no_results']; # take std.
+        }
+        $admin_templates->set_var('message', $message);
+    }
+
+    if ($has_extras) { # now make google-paging
+        if (!empty($query)) { # port query to next page
+            $base_url = $form_url . '?q=' . urlencode($query) . "&amp;query_limit=$query_limit$order_var_link&amp;direction=$direction";
+        } else {
+            $base_url = $form_url . "?query_limit=$query_limit$order_var_link&amp;direction=$direction";
+        }
+
+        if ($num_pages > 1) { # print actual google-paging
+            $admin_templates->set_var('google_paging',COM_printPageNavigation($base_url,$curpage,$num_pages, $component . 'listpage='));
+        } else {
+            $admin_templates->set_var('google_paging', '');
+        }
+    }
+
+    $admin_templates->parse('output', 'list');
+    
+    # Do the actual output
+    $retval .= COM_startBlock ($title, $help_url,
+                               COM_getBlockTemplate ('_admin_block', 'header'))
+             . $admin_templates->finish($admin_templates->get_var('output'))
+             . COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer'));
+
+    return $retval;
+}
+
+
+
+function ADMIN_getListField_blocks($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ADMIN, $LANG21, $_IMAGE_TYPE;
+    $retval = false;
+
+    $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
+
+    if (($access > 0) && (hasBlockTopicAccess ($A['tid']) > 0)) {
+        switch($fieldname) {
+            case "edit":
+                if ($access == 3) {
+                    $retval = "<a href=\"{$_CONF['site_admin_url']}/block.php?mode=edit&amp;bid={$A['bid']}\">{$icon_arr['edit']}</a>";
+                }
+                break;
+            case 'title':
+                $retval = stripslashes ($A['title']);
+                if (empty ($retval)) {
+                    $retval = '(' . $A['name'] . ')';
+                }
+                break;
+            case 'blockorder':
+                $retval .= $A['blockorder'];
+                break;
+            case 'is_enabled':
+                if ($access == 3) {
+                    if ($A['is_enabled'] == 1) {
+                        $switch = 'checked="checked"';
+                    } else {
+                        $switch = '';
+                    }
+                    $retval = "<form action=\"{$_CONF['site_admin_url']}/block.php\" method=\"post\">"
+                             ."<input type=\"checkbox\" name=\"blkenable\" onclick=\"submit()\" value=\"{$A['bid']}\" $switch>"
+                             ."<input type=\"hidden\" name=\"blkChange\" value=\"{$A['bid']}\"></form>";
+                }
+                break;
+            case 'move':
+                if ($access == 3) {
+                    if ($A['onleft'] == 1) {
+                        $side = $LANG21[40];
+                        $blockcontrol_image = 'block-right.' . $_IMAGE_TYPE;
+                        $moveTitleMsg = $LANG21[59];
+                        $switchside = '1';
+                    } else {
+                        $blockcontrol_image = 'block-left.' . $_IMAGE_TYPE;
+                        $moveTitleMsg = $LANG21[60];
+                        $switchside = '0';
+                    }
+                    $retval.="<img src=\"{$_CONF['layout_url']}/images/admin/$blockcontrol_image\" width=\"45\" height=\"20\" border=\"0\" usemap=\"#arrow{$A['bid']}\" alt=\"\">"
+                            ."<map name=\"arrow{$A['bid']}\">"
+                            ."<area coords=\"0,0,12,20\"  title=\"{$LANG21[58]}\" href=\"{$_CONF['site_admin_url']}/block.php?mode=move&amp;bid={$A['bid']}&amp;where=up\" alt=\"{$LANG21[58]}\">"
+                            ."<area coords=\"13,0,29,20\" title=\"$moveTitleMsg\" href=\"{$_CONF['site_admin_url']}/block.php?mode=move&amp;bid={$A['bid']}&amp;where=$switchside\" alt=\"$moveTitleMsg\">"
+                            ."<area coords=\"30,0,43,20\" title=\"{$LANG21[57]}\" href=\"{$_CONF['site_admin_url']}/block.php?mode=move&amp;bid={$A['bid']}&amp;where=dn\" alt=\"{$LANG21[57]}\">"
+                            ."</map>";
+                }
+                break;
+            default:
+                $retval = $fieldvalue;
+                break;
+        }
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_events($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ACCESS, $LANG_ADMIN;
+    $retval = '';
+
+    $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']);
+
+    switch($fieldname) {
+        case "edit":
+            if ($access == 3) {
+                $retval = "<a href=\"{$_CONF['site_admin_url']}/event.php?mode=edit&amp;eid={$A['eid']}\">{$icon_arr['edit']}</a>";
+            }
+            break;
+        case "copy":
+            if ($access == 3) {
+                $retval = "<a href=\"{$_CONF['site_admin_url']}/event.php?mode=clone&amp;eid={$A['eid']}\">{$icon_arr['copy']}</a>";
+            }
+            break;
+        case 'access':
+            if ($access == 3) {
+                $retval = $LANG_ACCESS['edit'];
+            } else {
+                $retval = $LANG_ACCESS['readonly'];
+            }
+            break;
+        case 'title':
+            $retval = stripslashes ($A['title']);
+            $retval = "<a href=\"{$_CONF['site_url']}/calendar_event.php?eid="
+                    . "{$A['eid']}\">$retval</a>";
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_groups($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ACCESS, $LANG_ADMIN, $thisUsersGroups;
+    $retval = '';
+    
+    if( !is_array($thisUsersGroups) )
+    {
+        $thisUsersGroups = SEC_getUserGroups();
+    }
+    if (in_array ($A['grp_id'], $thisUsersGroups ) ||
+        SEC_groupIsRemoteUserAndHaveAccess( $A['grp_id'], $thisUsersGroups )) {
+        switch($fieldname) {
+            case "edit":
+                $retval = "<a href=\"{$_CONF['site_admin_url']}/group.php?mode=edit&amp;grp_id={$A['grp_id']}\">{$icon_arr['edit']}</a>";
+                break;
+            case 'grp_gl_core':
+                if ($A['grp_gl_core'] == 1) {
+                    $retval = $LANG_ACCESS['yes'];
+                } else {
+                    $retval = $LANG_ACCESS['no'];
+                }
+                break;
+            case 'list':
+                $retval = "<a href=\"{$_CONF['site_admin_url']}/group.php?mode=listusers&amp;grp_id={$A['grp_id']}\">"
+                         ."{$icon_arr['list']}</a>&nbsp;&nbsp;"
+                         ."<a href=\"{$_CONF['site_admin_url']}/group.php?mode=editusers&amp;grp_id={$A['grp_id']}\">"
+                         ."{$icon_arr['edit']}</a>";
+                break;
+            default:
+                $retval = $fieldvalue;
+                break;
+        }
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_users($fieldname, $fieldvalue, $A, $icon_arr)
+{
+    global $_CONF, $LANG_ADMIN, $LANG28, $_IMAGE_TYPE;
+
+    $retval = '';
+
+    switch($fieldname) {
+        case "edit":
+            $retval = "<a href=\"{$_CONF['site_admin_url']}/user.php?mode=edit&amp;uid={$A['uid']}\">{$icon_arr['edit']}</a>";
+            break;
+        case 'username':
+            $photoico = '<img src="' . $_CONF['layout_url']
+                      . '/images/smallcamera.' . $_IMAGE_TYPE
+                      . '" border="0" alt="">';
+            if (!empty($A['photo']))
+                 {$photoico = "&nbsp;" . $photoico;}
+            else
+                 {$photoico = '';}
+            $retval = '<a href="'. $_CONF['site_url']. '/users.php?mode=profile&amp;uid='
+                      . $A['uid'].'">' . $fieldvalue.'</a>' . $photoico;
+            break;
+        case "lastlogin":
+             if ($fieldvalue < 1) {
+                 $retval = $LANG28[36];
+             } else {
+                 $retval = strftime ($_CONF['daytime'],$A['lastlogin']);
+             }
+
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_stories($fieldname, $fieldvalue, $A, $icon_arr)
+{
+    global $_CONF, $_TABLES, $LANG_ADMIN, $LANG24, $LANG_ACCESS, $_IMAGE_TYPE;
+
+    static $topics;
+
+    if (!isset ($topics)) {
+        $topics = array ();
+    }
+
+    $retval = '';
+
+    switch($fieldname) {
+        case "unixdate":
+            $curtime = COM_getUserDateTimeFormat ($A['unixdate']);
+            $retval = strftime($_CONF['daytime'], $curtime[1]);
+            break;
+        case "title":
+            $A['title'] = str_replace('$', '&#36;', $A['title']);
+            $article_url = COM_buildUrl ($_CONF['site_url'] . '/article.php?story='
+                                  . $A['sid']);
+            $retval =  "<a href=\"$article_url\">" . stripslashes($A['title']) . "</a>";
+            break;
+        case "draft_flag":
+            if ($A['draft_flag'] == 1) {
+                $retval = $LANG24[35];
+            } else {
+                $retval = $LANG24[36];
+            }
+            break;
+        case "access":
+        case "edit":
+            $access = SEC_hasAccess ($A['owner_id'], $A['group_id'],
+                                     $A['perm_owner'], $A['perm_group'],
+                                     $A['perm_members'], $A['perm_anon']);
+            if ($access == 3) {
+                if (SEC_hasTopicAccess ($A['tid']) == 3) {
+                    $access = $LANG_ACCESS['edit'];
+                } else {
+                    $access = $LANG_ACCESS['readonly'];
+                }
+            } else {
+                $access = $LANG_ACCESS['readonly'];
+            }
+            if ($fieldname == 'access') {
+                $retval = $access;
+            } else if ($access == $LANG_ACCESS['edit']) {
+                $retval = "<a href=\"{$_CONF['site_admin_url']}/story.php?mode=edit&amp;sid={$A['sid']}\">{$icon_arr['edit']}</a>";
+            }
+            break;
+        case "featured":
+            if ($A['featured'] == 1) {
+                $retval = $LANG24[35];
+            } else {
+                $retval = $LANG24[36];
+            }
+            break;
+        case "ping":
+            $pingico = '<img src="' . $_CONF['layout_url'] . '/images/sendping.'
+                     . $_IMAGE_TYPE . '" border="0" alt="' . $LANG24[21] . '" title="'
+                     . $LANG24[21] . '">';
+            if (($A['draft_flag'] == 0) && ($A['unixdate'] < time())) {
+                $url = $_CONF['site_admin_url']
+                     . '/trackback.php?mode=sendall&amp;id=' . $A['sid'];
+                $retval = '<a href="' . $url . '">' . $pingico . '</a>';
+            } else {
+                $retval = '';
+            }
+            break;
+        case 'tid':
+            if (!isset ($topics[$A['tid']])) {
+                $topics[$A['tid']] = DB_getItem ($_TABLES['topics'], 'topic',
+                                                 "tid = '{$A['tid']}'");
+            }
+            $retval = $topics[$A['tid']];
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+
+    return $retval;
+}
+
+function ADMIN_getListField_syndication($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ADMIN, $LANG33, $_IMAGE_TYPE;
+    $retval = '';
+    
+    switch($fieldname) {
+        case "edit":
+            $retval = "<a href=\"{$_CONF['site_admin_url']}/syndication.php?mode=edit&amp;fid={$A['fid']}\">{$icon_arr['edit']}</a>";
+            break;
+        case 'type':
+            $retval = ucwords($A['type']);
+            break;
+        case 'format':
+            $retval = str_replace ('-' , ' ', ucwords ($A['format']));
+            break;
+        case 'updated':
+            $retval = strftime ($_CONF['daytime'], $A['date']);
+            break;
+        case 'is_enabled':
+            if ($A['is_enabled'] == 1) {
+                $switch = 'checked="checked"';
+            } else {
+                $switch = '';
+            }
+            $retval = "<form action=\"{$_CONF['site_admin_url']}/syndication.php\" method=\"POST\">"
+                     ."<input type=\"checkbox\" name=\"feedenable\" onclick=\"submit()\" value=\"{$A['fid']}\" $switch>"
+                     ."<input type=\"hidden\" name=\"feedChange\" value=\"{$A['fid']}\"></form>";
+            break;
+        case 'header_tid':
+            if ($A['header_tid'] == 'all') {
+                $retval = $LANG33[43];
+            } elseif ($A['header_tid'] == 'none') {
+                $retval = $LANG33[44];
+            }
+            break;
+        case 'filename':
+            $url = SYND_getFeedUrl ();
+            $retval = '<a href="' . $url . $A['filename'] . '">' . $A['filename'] . '</a>';
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_plugins($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ADMIN, $LANG32;
+    $retval = '';
+
+    switch($fieldname) {
+        case "edit":
+            $retval = "<a href=\"{$_CONF['site_admin_url']}/plugins.php?mode=edit&amp;pi_name={$A['pi_name']}\">{$icon_arr['edit']}</a>";
+            break;
+        case 'pi_version':
+            $plugin_code_version = PLG_chkVersion ($A['pi_name']);
+            if (empty ($plugin_code_version)) {
+                $code_version = 'N/A';
+            } else {
+                $code_version = $plugin_code_version;
+            }
+            $pi_installed_version = $A['pi_version'];
+            if (empty ($plugin_code_version) ||
+                    ($pi_installed_version == $code_version)) {
+                $retval = $pi_installed_version;
+            } else {
+                $retval = "{$LANG32[37]}: $pi_installed_version,&nbsp;{$LANG32[36]}: $plugin_code_version";
+                if ($A['pi_enabled'] == 1) {
+                    $retval .= " <b>{$LANG32[38]}</b>";
+                }
+            }
+            break;
+        case 'enabled':
+            if ($A['pi_enabled'] == 1) {
+                $switch = 'checked="checked"';
+            } else {
+                $switch = '';
+            }
+            $retval = "<form action=\"{$_CONF['site_admin_url']}/plugins.php\" method=\"post\">"
+                     ."<input type=\"checkbox\" name=\"pluginenable\" onclick=\"submit()\" value=\"{$A['pi_name']}\" $switch>"
+                     ."<input type=\"hidden\" name=\"pluginChange\" value=\"{$A['pi_name']}\">"
+                     ."</form>";
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_moderation($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_ADMIN, $type;
+    $retval = '';
+    
+    switch($fieldname) {
+        case "edit":
+            $retval = "<a href=\"{$A['edit']}\">{$icon_arr['edit']}</a>";
+            break;
+        case "delete":
+            $retval = "<input type=\"radio\" name=\"action[{$A['row']}]\" value=\"delete\">";
+            break;
+        case "approve":
+            $retval = "<input type=\"radio\" name=\"action[{$A['row']}]\" value=\"approve\">"
+                     ."<input type=\"hidden\" name=\"id[{$A['row']}]\" value=\"{$A[0]}\">";
+            break;
+        case "day":
+            $retval = strftime ($_CONF['daytime'], $A['day']);
+            break;
+        default:
+            $retval = COM_makeClickableLinks (stripslashes ( $fieldvalue));
+            break;
+    }
+    return $retval;
+}
+
+function ADMIN_getListField_trackback($fieldname, $fieldvalue, $A, $icon_arr) {
+    global $_CONF, $LANG_TRB, $type;
+    $retval = '';
+    
+    switch($fieldname) {
+        case "edit":
+            $retval = "<a href=\"{$_CONF['site_admin_url']}/trackback.php?mode=editservice&amp;service_id={$A['pid']}\">{$icon_arr['edit']}</a>";
+            break;
+        case "name":
+            $retval = "<a href=\"{$A['site_url']}\">{$A['name']}</a>";
+            break;
+        case "method":
+            if ($A['method'] == 'weblogUpdates.ping') {
+                $retval = $LANG_TRB['ping_standard'];
+            } else if ($A['method'] == 'weblogUpdates.extendedPing') {
+                $retval = $LANG_TRB['ping_extended'];
+            } else {
+                $retval = '<span class="warningsmall">' .
+                        $LANG_TRB['ping_unknown'] .  '</span>';
+            }
+            break;
+        case "is_enabled":
+            if ($A['is_enabled'] == 1) {
+                $switch = 'checked="checked"';
+            } else {
+                $switch = '';
+            }
+            $retval = "<form action=\"{$_CONF['site_admin_url']}/trackback.php\" method=\"POST\">"
+                     ."<input type=\"checkbox\" name=\"serviceenable\" onclick=\"submit()\" value=\"{$A['pid']}\" $switch>"
+                     ."<input type=\"hidden\" name=\"serviceChange\" value=\"{$A['pid']}\">"
+                     ."</form>";
+            break;
+        default:
+            $retval = $fieldvalue;
+            break;
+    }
+    return $retval;
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-comment.php 1.4.0sr5-1/cpanel-glprivate/system/lib-comment.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-comment.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-comment.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1181 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | lib-comment.php                                                           |
+// |                                                                           |
+// | Geeklog comment library.                                                  |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2006 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: lib-comment.php,v 1.28.2.3 2006/07/22 14:12:03 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'lib-comment.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+if( $_CONF['allow_user_photo'] )
+{
+    // only needed for the USER_getPhoto function
+    require_once ($_CONF['path_system'] . 'lib-user.php');
+}
+
+/**
+* This function displays the comment control bar
+*
+* Prints the control that allows the user to interact with Geeklog Comments
+*
+* @param        string      $sid        ID of item in question
+* @param        string      $title      Title of item
+* @param        string      $type       Type of item (i.e. story, photo, etc)
+* @param        string      $order      Order that comments are displayed in
+* @param        string      $mode       Mode (nested, flat, etc.)
+* @see CMT_userComments
+* @see CMT_commentChildren
+* @return     string   HTML Formated comment bar
+*
+*/
+function CMT_commentBar( $sid, $title, $type, $order, $mode )
+{
+    global $_CONF, $_TABLES, $_USER, $LANG01;
+
+    $parts = explode( '/', $_SERVER['PHP_SELF'] );
+    $page = array_pop( $parts );
+    $nrows = DB_count( $_TABLES['comments'], 'sid', $sid );
+
+    $commentbar = new Template( $_CONF['path_layout'] . 'comment' );
+    $commentbar->set_file( array( 'commentbar' => 'commentbar.thtml' ));
+    $commentbar->set_var( 'site_url', $_CONF['site_url'] );
+    $commentbar->set_var( 'layout_url', $_CONF['layout_url'] );
+
+    $commentbar->set_var( 'lang_comments', $LANG01[3] );
+    $commentbar->set_var( 'lang_refresh', $LANG01[39] );
+    $commentbar->set_var( 'lang_reply', $LANG01[25] );
+    $commentbar->set_var( 'lang_disclaimer', $LANG01[26] );
+
+    $commentbar->set_var( 'story_title', stripslashes( $title ));
+    $commentbar->set_var( 'num_comments', COM_numberFormat( $nrows ));
+    $commentbar->set_var( 'comment_type', $type );
+    $commentbar->set_Var( 'sid', $sid );
+
+    if( $type == 'article' ) {
+        $articleUrl = COM_buildUrl( $_CONF['site_url']
+                                    . "/article.php?story=$sid" );
+        $commentbar->set_var( 'story_link', $articleUrl );
+        $commentbar->set_var( 'article_url', $articleUrl );
+
+        if( $page == 'comment.php' ) {
+            $commentbar->set_var( 'start_storylink_anchortag', '<a href="'
+                    . $articleUrl . '" class="non-ul">' );
+            $commentbar->set_var( 'end_storylink_anchortag', '</a>' );
+        }
+    } else { // for a plugin
+        // Link to plugin defined link or lacking that a generic link that the plugin should support (hopefully)
+        list($plgurl, $plgid) = PLG_getCommentUrlId($type);
+        $commentbar->set_var( 'story_link', "$plgurl?$plgid=$sid" );
+    }
+
+    if( !empty( $_USER['uid'] ) && ( $_USER['uid'] > 1 )) {
+        $username = $_USER['username'];
+        $fullname = DB_getItem( $_TABLES['users'], 'fullname',
+                                "uid = '{$_USER['uid']}'" ); 
+    } else {
+        $result = DB_query( "SELECT username,fullname FROM {$_TABLES['users']} WHERE uid = 1" );
+        $N = DB_fetchArray( $result );
+        $username = $N['username'];
+        $fullname = $N['fullname'];
+    }
+    if( empty( $fullname )) {
+        $fullname = $username;
+    }
+    $commentbar->set_var( 'user_name', $username );   
+    $commentbar->set_var( 'user_fullname', $fullname );    
+
+    if( !empty( $_USER['username'] )) {
+        $commentbar->set_var( 'user_nullname', $username );
+        $commentbar->set_var( 'login_logout_url',
+                              $_CONF['site_url'] . '/users.php?mode=logout' );
+        $commentbar->set_var( 'lang_login_logout', $LANG01[35] );
+    } else {
+        $commentbar->set_var( 'user_nullname', '' );
+        $commentbar->set_var( 'login_logout_url',
+                              $_CONF['site_url'] . '/users.php?mode=new' );
+        $commentbar->set_var( 'lang_login_logout', $LANG01[61] );
+    }
+
+    if( $page == 'comment.php' ) {
+        $commentbar->set_var( 'parent_url', 
+                              $_CONF['site_url'] . '/comment.php' );
+        $hidden = '';
+        if( $_REQUEST['mode'] == 'view' ) {
+            $hidden .= '<input type="hidden" name="cid" value="' . $_REQUEST['cid'] . '">';
+            $hidden .= '<input type="hidden" name="pid" value="' . $_REQUEST['cid'] . '">';
+        }
+        else if( $_REQUEST['mode'] == 'display' ) {
+            $hidden .= '<input type="hidden" name="pid" value="' . $_REQUEST['pid'] . '">';
+        }
+        $commentbar->set_var( 'hidden_field', $hidden . 
+                '<input type="hidden" name="mode" value="' . $_REQUEST['mode'] . '">' );
+    } else if( $type == 'poll' ) {
+        $commentbar->set_var( 'parent_url', 
+                              $_CONF['site_url'] . '/pollbooth.php' );
+        $commentbar->set_var( 'hidden_field',         
+                '<input type="hidden" name="scale" value="400">' .
+                '<input type="hidden" name="qid" value="' . $sid . '">' .
+                '<input type="hidden" name="aid" value="-1">' );
+    } else if( $type == 'article' ) {
+        $commentbar->set_var( 'parent_url',
+                              $_CONF['site_url'] . '/article.php' );
+        $commentbar->set_var( 'hidden_field',
+                '<input type="hidden" name="story" value="' . $sid . '">' );
+    } else { // plugin
+        // Link to plugin defined link or lacking that a generic link that the plugin should support (hopefully)
+        list($plgurl, $plgid) = PLG_getCommentUrlId($type);
+        $commentbar->set_var( 'parent_url', $plgurl );
+        $commentbar->set_var( 'hidden_field',
+                '<input type="hidden" name="' . $plgid . '" value="' . $sid . '">' );
+    }
+
+    // Order
+    $selector = '<select name="order">' . LB
+              . COM_optionList( $_TABLES['sortcodes'], 'code,name', $order )
+              . LB . '</select>';
+    $commentbar->set_var( 'order_selector', $selector);
+
+    // Mode
+    if( $page == 'comment.php' ) {
+        $selector = '<select name="format">';
+    } else {
+        $selector = '<select name="mode">';
+    }
+    $selector .= LB
+               . COM_optionList( $_TABLES['commentmodes'], 'mode,name', $mode )
+               . LB . '</select>';
+    $commentbar->set_var( 'mode_selector', $selector);
+
+    return $commentbar->finish( $commentbar->parse( 'output', 'commentbar' ));
+}    
+
+
+/**
+* This function prints &$comments (db results set of comments) in comment format
+* -For previews, &$comments is assumed to be an associative array containing
+*  data for a single comment.
+* 
+* @param     array      &$comments Database result set of comments to be printed
+* @param     string     $mode      'flat', 'threaded', etc
+* @param     string     $type      Type of item (article, poll, etc.)
+* @param     string     $order     How to order the comments 'ASC' or 'DESC'
+* @param     boolean    $delete_option   if current user can delete comments
+* @param     boolean    $preview   Preview display (for edit) or not
+* @return    string     HTML       Formated Comment 
+*
+*/
+function CMT_getComment( &$comments, $mode, $type, $order, $delete_option = false, $preview = false )
+{
+    global $_CONF, $_TABLES, $_USER, $LANG01, $_IMAGE_TYPE;
+
+    $indent = 0;  // begin with 0 indent
+    $retval = ''; // initialize return value
+
+    $template = new Template( $_CONF['path_layout'] . 'comment' );
+    $template->set_file( array( 'comment' => 'comment.thtml',
+                                'thread'  => 'thread.thtml'  ));
+
+    // generic template variables
+    $template->set_var( 'site_url', $_CONF['site_url'] );
+    $template->set_var( 'layout_url', $_CONF['layout_url'] );
+    $template->set_var( 'lang_replytothis', $LANG01[43] );
+    $template->set_var( 'lang_reply', $LANG01[25] );
+    $template->set_var( 'lang_authoredby', $LANG01[42] );
+    $template->set_var( 'lang_on', $LANG01[36] );
+    $template->set_var( 'lang_permlink', $LANG01[120] );
+    $template->set_var( 'order', $order );    
+
+    // Make sure we have a default value for comment indentation
+    if( !isset( $_CONF['comment_indent'] )) {
+        $_CONF['comment_indent'] = 25;
+    }
+
+    if( $preview ) {
+        $A = $comments;   
+        if( empty( $A['nice_date'] )) {
+            $A['nice_date'] = time();
+        }
+        $mode = 'flat';
+    } else {
+        $A = DB_fetchArray($comments);
+    }
+
+    if( empty( $A ) ) {
+        return '';
+    }
+
+    $row = 1;
+    do {
+        // determines indentation for current comment
+        if( $mode == 'threaded' || $mode == 'nested' ) {
+            $indent = ($A['indent'] - $A['pindent']) * $_CONF['comment_indent'];
+        }
+
+        // comment variables
+        $template->set_var( 'indent', $indent );
+        $template->set_var( 'author', $A['username'] );
+        $template->set_var( 'author_id', $A['uid'] );
+        $template->set_var( 'cid', $A['cid'] );
+        $template->set_var( 'cssid', $row % 2 );
+
+        if( $A['uid'] > 1 ) {
+            if( empty( $A['fullname'] )) {
+                $template->set_var( 'author_fullname', $A['username'] );
+                $alttext = $A['username'];
+            } else {
+                $template->set_var( 'author_fullname', $A['fullname'] );
+                $alttext = $A['fullname'];
+            }
+
+            $photo = '';
+            if( $_CONF['allow_user_photo'] ) {
+                $photo = USER_getPhoto( $A['uid'], $A['photo'] );
+            }
+            if( !empty( $photo )) {
+                $template->set_var( 'author_photo', $photo );
+                $template->set_var( 'camera_icon', '<a href="'
+                        . $_CONF['site_url']
+                        . '/users.php?mode=profile&amp;uid=' . $A['uid']
+                        . '"><img src="' . $_CONF['layout_url']
+                        . '/images/smallcamera.' . $_IMAGE_TYPE
+                        . '" border="0" alt=""></a>' );
+            } else {
+                $template->set_var( 'author_photo', '' );
+                $template->set_var( 'camera_icon', '' );
+            }
+
+            $template->set_var( 'start_author_anchortag', '<a href="'
+                    . $_CONF['site_url'] . '/users.php?mode=profile&amp;uid='
+                    . $A['uid'] . '">' );
+            $template->set_var( 'end_author_anchortag', '</a>' );
+        } else {
+            $template->set_var( 'author_fullname', $A['username'] );
+            $template->set_var( 'author_photo', '' );
+            $template->set_var( 'camera_icon', '' );
+            $template->set_var( 'start_author_anchortag', '' );
+            $template->set_var( 'end_author_anchortag', '' );
+        }
+
+        // hide reply link from anonymous users if they can't post replies
+        $hidefromanon = false;
+        if( empty( $_USER['username'] ) && (( $_CONF['loginrequired'] == 1 ) 
+                || ( $_CONF['commentsloginrequired'] == 1 ))) {
+            $hidefromanon = true;
+        }
+
+        // this will hide HTML that should not be viewed in preview mode
+        if( $preview || $hidefromanon ) {
+            $template->set_var( 'hide_if_preview', 'style="display:none"' );
+        } else {
+            $template->set_var( 'hide_if_preview', '' );
+        }
+
+        // for threaded mode, add a link to comment parent
+        if( $mode == 'threaded' && $A['pid'] != 0 && $indent == 0 ) {
+            $result = DB_query( "SELECT title,pid from {$_TABLES['comments']} where cid = '{$A['pid']}'" );
+            $P = DB_fetchArray( $result );
+            if ($P['pid'] != 0) {
+                $plink = $_CONF['site_url'] . '/comment.php?mode=display&amp;sid='
+                       . $A['sid'] . '&amp;title=' . urlencode( htmlspecialchars( $P['title'] ))
+                       . '&amp;type=' . $type . '&amp;order=' . $order . '&amp;pid='
+                       . $P['pid'] . '&amp;format=threaded';;
+            } else {
+                $plink = $_CONF['site_url'] . '/comment.php?mode=view&amp;sid='
+                       . $A['sid'] . '&amp;title=' . urlencode( htmlspecialchars( $P['title'] ))
+                       . '&amp;type=' . $type . '&amp;order=' . $order . '&amp;cid='
+                       . $A['pid'] . '&amp;format=threaded';
+            }
+            $template->set_var( 'parent_link', "| <a href=\"$plink\">{$LANG01[44]}</a>");
+        } else {
+            $template->set_var( 'parent_link', '');
+        }
+
+        $template->set_var( 'date', strftime( $_CONF['date'], $A['nice_date'] ));
+        $template->set_var( 'sid', $A['sid'] );
+        $template->set_var( 'type', $A['type'] );
+
+        // If deletion is allowed, displays delete link
+        if( $delete_option ) {
+            $deloption = '| <a href="' . $_CONF['site_url']
+                       . '/comment.php?mode=delete&amp;cid='
+                       . $A['cid'] . '&amp;sid=' . $A['sid'] . '&amp;type='
+                       . $type . '">' . $LANG01[28] . '</a> ';
+            if( !empty( $A['ipaddress'] )) {
+                if( empty( $_CONF['ip_lookup'] )) {
+                    $deloption .= '| ' . $A['ipaddress'] . ' ';
+                } else {
+                    $iplookup = str_replace( '*', $A['ipaddress'],
+                                             $_CONF['ip_lookup'] );
+                    $deloption .= '| <a href="' . $iplookup . '">'
+                               . $A['ipaddress'] . '</a> ';
+                }
+            }
+            $template->set_var( 'delete_option', $deloption );
+        } else if( !empty( $_USER['username'] )) {
+            $reportthis = ' | <a href="' . $_CONF['site_url']
+                        . '/comment.php?mode=report&amp;cid=' . $A['cid']
+                        . '&amp;type=' . $type . '" title="' . $LANG01[110]
+                        . '">' . $LANG01[109] . '</a> ';
+            $template->set_var( 'delete_option', $reportthis );
+        } else {
+            $template->set_var( 'delete_option', '' );
+        }
+
+        // and finally: format the actual text of the comment
+        if( preg_match( '/<.*>/', $A['comment'] ) == 0 ) {
+            $A['comment'] = nl2br( $A['comment'] );
+        }
+
+        // highlight search terms if specified
+        if( !empty( $_REQUEST['query'] )) {
+            $A['comment'] = COM_highlightQuery( $A['comment'],
+                                                $_REQUEST['query'] );
+        }
+
+        $A['comment'] = str_replace( '$', '&#36;',  $A['comment'] );
+        $A['comment'] = str_replace( '{', '&#123;', $A['comment'] );
+        $A['comment'] = str_replace( '}', '&#125;', $A['comment'] );
+
+        // Replace any plugin autolink tags
+        $A['comment'] = PLG_replaceTags( $A['comment'] );
+
+        // create a reply to link
+        $reply_link = "{$_CONF['site_url']}/comment.php?sid={$A['sid']}&amp;pid={$A['cid']}"
+                    . "&amp;title=" . urlencode($A['title']) . "&amp;type={$A['type']}";
+        $template->set_var( 'reply_link', $reply_link);
+        
+        // format title for display, must happen after reply_link is created
+        $A['title'] = htmlspecialchars( $A['title'] );
+        $A['title'] = str_replace( '$', '&#36;', $A['title'] );
+
+        $template->set_var( 'title', $A['title'] );
+        $template->set_var( 'comments', $A['comment'] );
+
+        // parse the templates
+        if( ($mode == 'threaded') && $indent > 0 ) {
+            $template->set_var( 'pid', $A['pid'] );
+            $retval .= $template->parse( 'output', 'thread' );   
+        } else {
+            $template->set_var( 'pid', $A['cid'] );
+            $retval .= $template->parse( 'output', 'comment' );   
+        }
+        $row++;
+    } while( $A = DB_fetchArray( $comments ));
+
+    return $retval;
+}
+
+/**
+* This function displays the comments in a high level format.
+*
+* Begins displaying user comments for an item
+*
+* @param        string      $sid       ID for item to show comments for
+* @param        string      $title     Title of item
+* @param        string      $type      Type of item (article, poll, etc.)
+* @param        string      $order     How to order the comments 'ASC' or 'DESC'
+* @param        string      $mode      comment mode (nested, flat, etc.)
+* @param        int         $pid       id of parent comment
+* @param        int         $page      page number of comments to display
+* @param        boolean     $cid       true if $pid should be interpreted as a cid instead
+* @param        boolean     $delete_option   if current user can delete comments
+* @see function CMT_commentBar
+* @see function CMT_commentChildren
+* @return     string  HTML Formated Comments
+*
+*/
+function CMT_userComments( $sid, $title, $type='article', $order='', $mode='', $pid = 0, $page = 1, $cid = false, $delete_option = false )
+{
+    global $_CONF, $_TABLES, $_USER, $LANG01;
+
+    if( !empty( $_USER['uid'] ) ) {
+        $result = DB_query( "SELECT commentorder,commentmode,commentlimit FROM {$_TABLES['usercomment']} WHERE uid = '{$_USER['uid']}'" );
+        $U = DB_fetchArray( $result );
+        if( empty( $order ) ) {
+            $order = $U['commentorder'];
+        }
+        if( empty( $mode ) ) {
+            $mode = $U['commentmode'];
+        }
+        $limit = $U['commentlimit'];
+    }
+
+    if( $order != 'ASC' && $order != 'DESC' ) {
+        $order = 'ASC';
+    }
+
+    if( empty( $mode )) {
+        $mode = $_CONF['comment_mode'];
+    }
+
+    if( empty( $limit )) {
+        $limit = $_CONF['comment_limit'];
+    }
+    
+    if( !is_numeric($page) || $page < 1 ) {
+        $page = 1;
+    }
+
+    $start = $limit * ( $page - 1 );
+
+    $template = new Template( $_CONF['path_layout'] . 'comment' );
+    $template->set_file( array( 'commentarea' => 'startcomment.thtml' ));
+    $template->set_var( 'site_url', $_CONF['site_url'] );
+    $template->set_var( 'layout_url', $_CONF['layout_url'] );
+    $template->set_var( 'commentbar',
+                        CMT_commentBar( $sid, $title, $type, $order, $mode));
+    $template->set_var( 'sid', $sid );
+    $template->set_var( 'comment_type', $type );
+    
+    if( $mode == 'nested' || $mode == 'threaded' || $mode == 'flat' ) {
+        // build query
+        switch( $mode ) {
+            case 'flat':
+                if( $cid ) {
+                    $count = 1;
+
+                    $q = "SELECT c.*, u.username, u.fullname, u.photo, " 
+                         . "unix_timestamp(c.date) AS nice_date "
+                       . "FROM {$_TABLES['comments']} as c, {$_TABLES['users']} as u "
+                       . "WHERE c.uid = u.uid AND c.cid = $pid AND type='{$type}'";
+                } else {
+                    $count = DB_count( $_TABLES['comments'], 'sid', $sid );
+            
+                    $q = "SELECT c.*, u.username, u.fullname, u.photo, " 
+                         . "unix_timestamp(c.date) AS nice_date "
+                       . "FROM {$_TABLES['comments']} as c, {$_TABLES['users']} as u "
+                       . "WHERE c.uid = u.uid AND c.sid = '$sid' AND type='{$type}'"
+                       . "ORDER BY date $order LIMIT $start, $limit";
+                }
+                break;
+
+            case 'nested':
+            case 'threaded':
+            default:
+                if( $order == 'DESC' ) {
+                    $cOrder = 'c.rht DESC';
+                } else {
+                    $cOrder = 'c.lft ASC'; 
+                }                            
+
+                // We can simplify the query, and hence increase performance
+                // when pid = 0 (when fetching all the comments for a given sid)
+                if( $cid ) {  // pid refers to commentid rather than parentid
+                    // count the total number of applicable comments
+                    $q2 = "SELECT COUNT(*) "
+                        . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2 "
+                        . "WHERE c.sid = '$sid' AND (c.lft >= c2.lft AND c.lft <= c2.rht) "
+                        . "AND c2.cid = $pid AND c.type='{$type}'";
+                    $result = DB_query( $q2 );
+                    list( $count ) = DB_fetchArray( $result );
+
+                    $q = "SELECT c.*, u.username, u.fullname, u.photo, c2.indent as pindent, " 
+                         . "unix_timestamp(c.date) AS nice_date "
+                       . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2, "
+                         . "{$_TABLES['users']} as u "
+                       . "WHERE c.sid = '$sid' AND (c.lft >= c2.lft AND c.lft <= c2.rht) "
+                         . "AND c2.cid = $pid AND c.uid = u.uid AND c.type='{$type}'"
+                       . "ORDER BY $cOrder LIMIT $start, $limit";
+                } else {    // pid refers to parentid rather than commentid
+                    if( $pid == 0 ) {  // the simple, fast case
+                        // count the total number of applicable comments
+                        $count = DB_count( $_TABLES['comments'], 'sid', $sid );
+
+                        $q = "SELECT c.*, u.username, u.fullname, u.photo, 0 as pindent, " 
+                             . "unix_timestamp(c.date) AS nice_date "
+                           . "FROM {$_TABLES['comments']} as c, {$_TABLES['users']} as u "
+                           . "WHERE c.sid = '$sid' AND c.uid = u.uid  AND type='{$type}'"
+                           . "ORDER BY $cOrder LIMIT $start, $limit";
+                    } else {
+                        // count the total number of applicable comments
+                        $q2 = "SELECT COUNT(*) "
+                            . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2 "
+                            . "WHERE c.sid = '$sid' AND (c.lft > c2.lft AND c.lft < c2.rht) "
+                            . "AND c2.cid = $pid AND c.type='{$type}'";
+                        $result = DB_query($q2);
+                        list($count) = DB_fetchArray($result);
+
+                        $q = "SELECT c.*, u.username, u.fullname, u.photo, c2.indent + 1 as pindent, " 
+                             . "unix_timestamp(c.date) AS nice_date "
+                           . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2, "
+                             . "{$_TABLES['users']} as u "
+                           . "WHERE c.sid = '$sid' AND (c.lft > c2.lft AND c.lft < c2.rht) "
+                             . "AND c2.cid = $pid AND c.uid = u.uid AND c.type='{$type}'"
+                           . "ORDER BY $cOrder LIMIT $start, $limit";
+                    }
+                }
+                break;
+        }
+
+        $thecomments = '';
+        $result = DB_query( $q );
+        $thecomments .= CMT_getComment( $result, $mode, $type, $order,
+                                        $delete_option );
+        
+        // Pagination
+        $tot_pages =  ceil( $count / $limit );
+        $pLink = $_CONF['site_url'] . "/article.php?story=$sid&amp;type=$type&amp;order=$order&amp;mode=$mode";
+        $template->set_var( 'pagenav',
+                         COM_printPageNavigation($pLink, $page, $tot_pages));
+        
+        $template->set_var( 'comments', $thecomments );
+        $retval = $template->parse( 'output', 'commentarea' );
+    }
+
+    return $retval;
+}
+
+/**
+* Displays the comment form
+*
+* @param    string  $title      Title of comment
+* @param    string  $comment    Text of comment
+* @param    string  $sid        ID of object comment belongs to
+* @param    int     $pid        ID of parent comment
+* @param    string  $type       Type of object comment is posted to
+* @param    string  $mode       Mode, e.g. 'preview'
+* @param    string  $postmode   Indicates if comment is plain text or HTML
+* @return   string  HTML for comment form
+*
+*/
+function CMT_commentForm($title,$comment,$sid,$pid='0',$type,$mode,$postmode) 
+{
+    global $_CONF, $_TABLES, $_USER, $LANG03, $LANG12, $LANG_LOGIN;
+
+    $retval = '';
+
+    // never trust $uid ...
+    if (empty ($_USER['uid'])) {
+        $uid = 1;
+    } else {
+        $uid = $_USER['uid'];
+    }
+
+    if (empty($_USER['username']) &&
+        (($_CONF['loginrequired'] == 1) || ($_CONF['commentsloginrequired'] == 1))) {
+        $retval .= COM_startBlock ($LANG_LOGIN[1], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'));
+        $loginreq = new Template($_CONF['path_layout'] . 'submit');
+        $loginreq->set_file('loginreq', 'submitloginrequired.thtml');
+        $loginreq->set_var('login_message', $LANG_LOGIN[2]);
+        $loginreq->set_var('site_url', $_CONF['site_url']);
+        $loginreq->set_var('lang_login', $LANG_LOGIN[3]);
+        $loginreq->set_var('lang_newuser', $LANG_LOGIN[4]);
+        $loginreq->parse('errormsg', 'loginreq');
+        $retval .= $loginreq->finish($loginreq->get_var('errormsg'));
+        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+        return $retval;
+    } else {
+        COM_clearSpeedlimit ($_CONF['commentspeedlimit'], 'comment');
+
+        $last = COM_checkSpeedlimit ('comment');
+
+        if ($last > 0) {
+            $retval .= COM_startBlock ($LANG12[26], '',
+                               COM_getBlockTemplate ('_msg_block', 'header'))
+                . $LANG03[7]
+                . $last
+                . $LANG03[8]
+                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+        } else {
+
+            if (($_CONF['advanced_editor'] == 1) && file_exists ($_CONF['path_layout'] . 'comment/commentform_advanced.thtml')) {
+                $postmode = 'html';
+            } elseif (empty ($postmode)) {
+                $postmode = $_CONF['postmode'];
+            }
+
+            $sig = '';
+            if ($uid > 1) {
+                $sig = DB_getItem ($_TABLES['users'], 'sig', "uid = '$uid'");
+            }
+
+            // Note:
+            // $comment / $newcomment is what goes into the preview / is
+            // actually stored in the database -> strip HTML
+            // $commenttext is what the user entered and goes back into the
+            // <textarea> -> don't strip HTML
+
+            $commenttext = htmlspecialchars (COM_stripslashes ($comment));
+
+            $fakepostmode = $postmode;
+            if ($postmode == 'html') {
+                $comment = COM_checkWords (COM_checkHTML (addslashes (COM_stripslashes ($comment))));
+            } else {
+                $comment = htmlspecialchars (COM_checkWords (COM_stripslashes ($comment)));
+                $newcomment = COM_makeClickableLinks ($comment);
+                if (strcmp ($comment, $newcomment) != 0) {
+                    $comment = nl2br ($newcomment);
+                    $fakepostmode = 'html';
+                }
+            }
+            // Replace $, {, and } with special HTML equivalents
+            $commenttext = str_replace('$','&#36;',$commenttext);
+            $commenttext = str_replace('{','&#123;',$commenttext);
+            $commenttext = str_replace('}','&#125;',$commenttext);
+
+            $title = COM_checkWords (strip_tags (COM_stripslashes ($title)));
+            // $title = str_replace('$','&#36;',$title); done in CMT_getComment
+
+            $_POST['title'] = $title;
+            $newcomment = $comment;
+            if (!empty ($sig)) {
+                if (($postmode == 'html') || ($fakepostmode == 'html')) {
+                    $newcomment .= '<p>---<br>' . nl2br ($sig);
+                } else {
+                    $newcomment .= LB . LB . '---' . LB . $sig;
+                }
+            }
+            $_POST['comment'] = $newcomment;
+
+            if ($mode == $LANG03[14] && !empty($title) && !empty($comment) ) {
+                $start = new Template( $_CONF['path_layout'] . 'comment' );
+                $start->set_file( array( 'comment' => 'startcomment.thtml' ));
+                $start->set_var( 'site_url', $_CONF['site_url'] );
+                $start->set_var( 'layout_url', $_CONF['layout_url'] );
+                $start->set_var( 'hide_if_preview', 'style="display:none"' );
+
+                // Clean up all the vars
+                $A = array();
+                foreach ($_POST as $key => $value) {
+                    if (($key == 'pid') || ($key == 'cid')) {
+                        $A[$key] = COM_applyFilter ($_POST[$key], true);
+                    } else if (($key == 'title') || ($key == 'comment')) {
+                        // these have already been filtered above
+                        $A[$key] = $_POST[$key];
+                    } else {
+                        $A[$key] = COM_applyFilter ($_POST[$key]);
+                    }
+                }
+
+                if (empty ($A['username'])) {
+                    $A['username'] = DB_getItem ($_TABLES['users'], 'username',
+                                                 "uid = $uid");
+                }
+                $thecomments = CMT_getComment ($A, 'flat', $type, 'ASC', false,
+                                               true );
+
+                $start->set_var( 'comments', $thecomments );
+                $retval .= COM_startBlock ($LANG03[14])
+                        . $start->finish( $start->parse( 'output', 'comment' ))
+                        . COM_endBlock ();
+            } else if ($mode == $LANG03[14]) {
+                $retval .= COM_startBlock ($LANG03[17], '',
+                               COM_getBlockTemplate ('_msg_block', 'header'))
+                    . $LANG03[12]
+                    . COM_endBlock(COM_getBlockTemplate ('_msg_block', 'footer'));
+                $mode = 'error';
+            }
+
+            $comment_template = new Template($_CONF['path_layout'] . 'comment');
+            if (($_CONF['advanced_editor'] == 1) && file_exists ($_CONF['path_layout'] . 'comment/commentform_advanced.thtml')) {
+                $comment_template->set_file('form','commentform_advanced.thtml');
+            } else {
+                $comment_template->set_file('form','commentform.thtml');
+            }
+            $comment_template->set_var('site_url', $_CONF['site_url']);
+            $comment_template->set_var('start_block_postacomment', COM_startBlock($LANG03[1]));
+            $comment_template->set_var('lang_username', $LANG03[5]);
+            $comment_template->set_var('sid', $sid);
+            $comment_template->set_var('pid', $pid);
+            $comment_template->set_var('type', $type);
+
+            if (!empty($_USER['username'])) {
+                $comment_template->set_var('uid', $_USER['uid']);
+                $comment_template->set_var('username', $_USER['username']);
+                $comment_template->set_var('action_url', $_CONF['site_url'] . '/users.php?mode=logout');
+                $comment_template->set_var('lang_logoutorcreateaccount', $LANG03[03]);
+            } else {
+                $comment_template->set_var('uid', 1);
+                $comment_template->set_var('username', $LANG03[24]);
+                $comment_template->set_var('action_url', $_CONF['site_url'] . '/users.php?mode=new'); 
+                $comment_template->set_var('lang_logoutorcreateaccount', $LANG03[04]);
+            }
+
+            if ($postmode == 'html') {
+                $comment_template->set_var ('show_texteditor', 'none');
+                $comment_template->set_var ('show_htmleditor', '');
+            } else {
+                $comment_template->set_var ('show_texteditor', '');
+                $comment_template->set_var ('show_htmleditor', 'none');
+            }
+
+            $comment_template->set_var('lang_title', $LANG03[16]);
+            $comment_template->set_var('title', htmlspecialchars($title));
+            $comment_template->set_var('lang_comment', $LANG03[9]);
+            $comment_template->set_var('comment', $commenttext);
+            $comment_template->set_var('lang_postmode', $LANG03[2]);
+            $comment_template->set_var('postmode_options', COM_optionList($_TABLES['postmodes'],'code,name',$postmode));
+            $comment_template->set_var('allowed_html', COM_allowedHTML());
+            $comment_template->set_var('lang_importantstuff', $LANG03[18]);
+            $comment_template->set_var('lang_instr_line1', $LANG03[19]);        
+            $comment_template->set_var('lang_instr_line2', $LANG03[20]);        
+            $comment_template->set_var('lang_instr_line3', $LANG03[21]);        
+            $comment_template->set_var('lang_instr_line4', $LANG03[22]);        
+            $comment_template->set_var('lang_instr_line5', $LANG03[23]);        
+            $comment_template->set_var('lang_preview', $LANG03[14]);
+
+            if (($_CONF['skip_preview'] == 1) || ($mode == $LANG03[14])) {
+                $comment_template->set_var('save_option', '<input type="submit" name="mode" value="' . $LANG03[11] . '">');
+            }
+
+            $comment_template->set_var('end_block', COM_endBlock());        
+            $comment_template->parse('output', 'form');
+            $retval .= $comment_template->finish($comment_template->get_var('output'));
+        }
+    }
+
+    return $retval;
+}
+
+/**
+ * Save a comment
+ *
+ * @author   Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param    string      $title      Title of comment
+ * @param    string      $comment    Text of comment
+ * @param    string      $sid        ID of object receiving comment
+ * @param    int         $pid        ID of parent comment
+ * @param    string      $type       Type of comment this is (article, polls, etc)
+ * @param    string      $postmode   Indicates if text is HTML or plain text
+ * @return   int         0 for success, > 0 indicates error
+ *
+ */
+function CMT_saveComment ($title, $comment, $sid, $pid, $type, $postmode) {
+    global $_CONF, $_TABLES, $_USER, $LANG03;
+
+    $ret = 0;
+
+    // Get a valid uid
+    if (empty ($_USER['uid'])) {
+        $uid = 1;
+    } else {
+        $uid = $_USER['uid'];
+    }
+
+    // Sanity check
+    if (empty ($sid) || empty ($title) || empty ($comment) || empty ($type) ) {
+        COM_errorLog("CMT_saveComment: $uid from {$_SERVER['REMOTE_ADDR']} tried "
+                   . 'to submit a comment with one or more missing values.');
+        return $ret = 1;
+    }
+
+    // Check that anonymous comments are allowed
+    if (($uid == 1) && (($_CONF['loginrequired'] == 1) 
+            || ($_CONF['commentsloginrequired'] == 1))) {
+        COM_errorLog("CMT_saveComment: IP address {$_SERVER['REMOTE_ADDR']} "
+                   . 'attempted to save a comment with anonymous comments disabled for site.');
+        return $ret = 2;
+    }
+
+    // Check for people breaking the speed limit
+    COM_clearSpeedlimit ($_CONF['commentspeedlimit'], 'comment');
+    $last = COM_checkSpeedlimit ('comment');
+    if ($last > 0) {
+        COM_errorLog("CMT_saveComment: $uid from {$_SERVER['REMOTE_ADDR']} tried "
+                   . 'to submit a comment before the speed limit expired');
+        return $ret = 3;
+    }
+
+    // Let plugins have a chance to check for SPAM
+    $result = PLG_checkforSpam($comment, $_CONF['spamx']);
+    // Now check the result and display message if spam action was taken
+    if ($result > 0) {
+        // update speed limit nonetheless
+        COM_updateSpeedlimit ('comment');
+
+        // then tell them to get lost ...
+        COM_displayMessageAndAbort ($result, 'spamx', 403, 'Forbidden');
+    }
+
+    // Let plugins have a chance to decide what to do before saving the comment, return errors.
+    if ($someError = PLG_commentPreSave($uid, $title, $comment, $sid, $pid, $type, $postmode)) {
+        return $someError;
+    }
+
+    // Clean 'em up a bit!
+    if ($postmode == 'html') {
+        $comment = COM_checkWords (COM_checkHTML (addslashes (COM_stripslashes ($comment))));
+    } else {
+        $comment = htmlspecialchars (COM_checkWords (COM_stripslashes ($comment)));
+        $newcomment = COM_makeClickableLinks ($comment);
+        if (strcmp ($comment, $newcomment) != 0) {
+            $comment = nl2br ($newcomment);
+            $postmode = 'html';
+        }
+    }
+    $title = COM_checkWords (strip_tags (COM_stripslashes ($title)));
+
+    // Get signature
+    $sig = '';
+    if ($uid > 1) {
+        $sig = DB_getItem($_TABLES['users'],'sig', "uid = '$uid'");
+    }
+    if (!empty ($sig)) {
+        if ($postmode == 'html') {
+            $comment .= '<p>---<br>' . nl2br($sig);
+        } else {
+            $comment .= LB . LB . '---' . LB . $sig;
+        }
+    }
+
+    // check for non-int pid's
+    // this should just create a top level comment that is a reply to the original item
+    if (!is_numeric($pid) || ($pid < 0)) {
+        $pid = 0;
+    }
+
+    if (!empty ($title) && !empty ($comment)) {
+        COM_updateSpeedlimit ('comment');
+        $title = addslashes ($title);
+        $comment = addslashes ($comment);
+
+        // Insert the comment into the comment table
+        DB_query("LOCK TABLES {$_TABLES['comments']} WRITE");
+        if ($pid > 0) {
+            $result = DB_query("SELECT rht, indent FROM {$_TABLES['comments']} WHERE cid = $pid "
+                             . "AND sid = '$sid'");
+            list($rht, $indent) = DB_fetchArray($result);
+            if ( !DB_error() ) {
+                DB_query("UPDATE {$_TABLES['comments']} SET lft = lft + 2 "
+                       . "WHERE sid = '$sid' AND type = '$type' AND lft >= $rht");
+                DB_query("UPDATE {$_TABLES['comments']} SET rht = rht + 2 "
+                       . "WHERE sid = '$sid' AND type = '$type' AND rht >= $rht");
+                DB_save ($_TABLES['comments'], 'sid,uid,comment,date,title,pid,lft,rht,indent,type,ipaddress',
+                        "'$sid',$uid,'$comment',now(),'$title',$pid,$rht,$rht+1,$indent+1,'$type','{$_SERVER['REMOTE_ADDR']}'");
+            } else { //replying to non-existent comment or comment in wrong article
+                COM_errorLog("CMT_saveComment: $uid from {$_SERVER['REMOTE_ADDR']} tried "
+                           . 'to reply to a non-existent comment or the pid/sid did not match');
+                $ret = 4; // Cannot return here, tables locked!
+            }
+        } else {
+            $rht = DB_getItem($_TABLES['comments'], 'MAX(rht)', "sid = '$sid'");
+            if ( DB_error() ) {
+                $rht = 0;
+            }
+            DB_save ($_TABLES['comments'], 'sid,uid,comment,date,title,pid,lft,rht,indent,type,ipaddress',
+                    "'$sid',$uid,'$comment',now(),'$title',$pid,$rht+1,$rht+2,0,'$type','{$_SERVER['REMOTE_ADDR']}'");
+        }
+        $cid = DB_insertId();
+        DB_query('UNLOCK TABLES');
+
+        // Send notification of comment if no errors and notications enabled for comments
+        if (($ret == 0) && isset ($_CONF['notification']) &&
+                in_array ('comment', $_CONF['notification'])) {
+            CMT_sendNotification ($title, $comment, $uid, $_SERVER['REMOTE_ADDR'],
+                              $type, $cid);
+        }
+    } else {
+        COM_errorLog("CMT_saveComment: $uid from {$_SERVER['REMOTE_ADDR']} tried "
+                   . 'to submit a comment with invalid $title and/or $comment.');
+        return $ret = 5;
+    }
+
+    return $ret;
+}
+
+/**
+* Send an email notification for a new comment submission.
+*
+* @param    $title      string      comment title
+* @param    $comment    string      text of the comment
+* @param    $uid        integer     user id
+* @param    $ipaddress  string      poster's IP address
+* @param    $type       string      type of comment ('article', 'poll', ...)
+* @param    $cid        integer     comment id
+*
+*/
+function CMT_sendNotification ($title, $comment, $uid, $ipaddress, $type, $cid)
+{
+    global $_CONF, $_TABLES, $LANG03, $LANG08, $LANG09;
+
+    // we have to undo the addslashes() call from savecomment()
+    $title = stripslashes ($title);
+    $comment = stripslashes ($comment);
+
+    // strip HTML if posted in HTML mode
+    if (preg_match ('/<.*>/', $comment) != 0) {
+        $comment = strip_tags ($comment);
+    }
+
+    $author = DB_getItem ($_TABLES['users'], 'username', "uid = '$uid'");
+    if (($uid <= 1) && !empty ($ipaddress)) {
+        // add IP address for anonymous posters
+        $author .= ' (' . $ipaddress . ')';
+    }
+
+    $mailbody = "$LANG03[16]: $title\n"
+              . "$LANG03[5]: $author\n";
+
+    if (($type != 'article') && ($type != 'poll')) {
+        $mailbody .= "$LANG09[5]: $type\n";
+    }
+
+    if ($_CONF['emailstorieslength'] > 0) {
+        if ($_CONF['emailstorieslength'] > 1) {
+            $comment = substr ($comment, 0, $_CONF['emailstorieslength'])
+                     . '...';
+        }
+        $mailbody .= $comment . "\n\n";
+    }
+
+    $mailbody .= $LANG08[33] . ' <' . $_CONF['site_url']
+              . '/comment.php?mode=view&cid=' . $cid . ">\n\n";
+
+    $mailbody .= "\n------------------------------\n";
+    $mailbody .= "\n$LANG08[34]\n";
+    $mailbody .= "\n------------------------------\n";
+
+    $mailsubject = $_CONF['site_name'] . ' ' . $LANG03[9];
+
+    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
+}
+
+/**
+ * Deletes a given comment
+ *
+ * The function expects the calling function to check to make sure the 
+ * requesting user has the correct permissions and that the comment exits
+ * for the specified $type and $sid.
+ *
+ * @author  Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param   string      $type   article, poll, or plugin identifier 
+ * @param   string      $sid    id of object comment belongs to
+ * @param   int         $cid    Comment ID
+ * @return  string      0 indicates success, >0 identifies problem
+ */
+function CMT_deleteComment ($cid, $sid, $type) {
+    global $_TABLES, $_CONF, $_USER;
+
+    $ret = 0;  // Assume good status unless reported otherwise
+
+    // Sanity check, note we return immediately here and no DB operations 
+    // are performed
+    if (!is_numeric ($cid) || ($cid < 0) || empty ($sid) || empty ($type)) {
+        COM_errorLog("CMT_deleteComment: {$_USER['uid']} from {$_SERVER['REMOTE_ADDR']} tried "
+                   . 'to delete a comment with one or more missing/bad values.');
+        return $ret = 1;
+    }
+
+    // Delete the comment from the DB and update the other comments to 
+    // maintain the tree structure
+    // A lock is needed here to prevent other additions and/or deletions
+    // from happening at the same time. A transaction would work better, 
+    // but aren't supported with MyISAM tables.
+    DB_query("LOCK TABLES {$_TABLES['comments']} WRITE");
+    $result = DB_query("SELECT pid, lft, rht FROM {$_TABLES['comments']} "
+                     . "WHERE cid = $cid AND sid = '$sid' AND type = '$type'");
+    if ( DB_numRows($result) == 1 ) {
+        list($pid,$lft,$rht) = DB_fetchArray($result); 
+        DB_change ($_TABLES['comments'], 'pid', $pid, 'pid', $cid);
+        DB_delete ($_TABLES['comments'], 'cid', $cid);
+        DB_query("UPDATE {$_TABLES['comments']} SET indent = indent - 1 "
+           . "WHERE sid = '$sid' AND type = '$type' AND lft BETWEEN $lft AND $rht");
+        DB_query("UPDATE {$_TABLES['comments']} SET lft = lft - 2 "
+           . "WHERE sid = '$sid' AND type = '$type'  AND lft >= $rht");
+        DB_query("UPDATE {$_TABLES['comments']} SET rht = rht - 2 "
+           . "WHERE sid = '$sid' AND type = '$type'  AND rht >= $rht");
+    } else {
+        COM_errorLog("CMT_deleteComment: {$_USER['uid']} from {$_SERVER['REMOTE_ADDR']} tried "
+                   . 'to delete a comment that doesn\'t exist as described.');
+        return $ret = 2;
+    }
+
+    DB_query('UNLOCK TABLES');
+    
+    return $ret;
+}
+
+/**
+* Display form to report abusive comment.
+*
+* @param    string  $cid    comment id
+* @param    string  $type   type of comment ('article', 'poll', ...)
+* @return   string          HTML for the form (or error message)
+*
+*/
+function CMT_reportAbusiveComment ($cid, $type)
+{
+    global $_CONF, $_TABLES, $_USER, $LANG03, $LANG12, $LANG_LOGIN;
+
+    $retval = '';
+
+    if (empty ($_USER['username'])) {
+        $retval .= COM_startBlock ($LANG_LOGIN[1], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'));     
+        $loginreq = new Template ($_CONF['path_layout'] . 'submit');            
+        $loginreq->set_file ('loginreq', 'submitloginrequired.thtml');          
+        $loginreq->set_var ('login_message', $LANG_LOGIN[2]);
+        $loginreq->set_var ('site_url', $_CONF['site_url']);                    
+        $loginreq->set_var ('lang_login', $LANG_LOGIN[3]);
+        $loginreq->set_var ('lang_newuser', $LANG_LOGIN[4]);
+        $loginreq->parse ('errormsg', 'loginreq');
+        $retval .= $loginreq->finish ($loginreq->get_var ('errormsg'));
+        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+
+        return $retval;
+    }
+
+    COM_clearSpeedlimit ($_CONF['speedlimit'], 'mail');
+    $last = COM_checkSpeedlimit ('mail');
+    if ($last > 0) {
+        $retval .= COM_startBlock ($LANG12[26], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'))
+                . $LANG12[30] . $last . $LANG12[31]
+                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+
+        return $retval;
+    }
+
+    $start = new Template ($_CONF['path_layout'] . 'comment');
+    $start->set_file (array ('report' => 'reportcomment.thtml'));
+    $start->set_var ('site_url', $_CONF['site_url']);
+    $start->set_var ('layout_url', $_CONF['layout_url']);
+    $start->set_var ('lang_report_this', $LANG03[25]);
+    $start->set_var ('lang_send_report', $LANG03[10]);
+    $start->set_var ('cid', $cid);
+    $start->set_var ('type', $type);
+
+    $result = DB_query ("SELECT uid,sid,pid,title,comment,UNIX_TIMESTAMP(date) AS nice_date FROM {$_TABLES['comments']} WHERE cid = $cid AND type = '$type'");
+    $A = DB_fetchArray ($result);
+
+    $result = DB_query ("SELECT username,fullname,photo FROM {$_TABLES['users']} WHERE uid = {$A['uid']}");
+    $B = DB_fetchArray ($result);
+
+    // prepare data for comment preview
+    $A['cid'] = $cid;
+    $A['type'] = $type;
+    $A['username'] = $B['username'];
+    $A['fullname'] = $B['fullname'];
+    $A['photo'] = $B['photo'];
+    $A['indent'] = 0;
+    $A['pindent'] = 0;
+
+    $thecomment = CMT_getComment ($A, 'flat', $type, 'ASC', false, true);
+    $start->set_var ('comment', $thecomment);
+    $retval .= COM_startBlock ($LANG03[15])
+            . $start->finish ($start->parse ('output', 'report'))
+            . COM_endBlock ();
+
+    return $retval;
+}
+
+/**
+* Send report about abusive comment
+*
+* @param    string  $cid    comment id
+* @param    string  $type   type of comment ('article', 'poll', ...)
+* @return   string          Meta refresh or HTML for error message
+*
+*/
+function CMT_sendReport ($cid, $type)
+{
+    global $_CONF, $_TABLES, $_USER, $LANG03, $LANG08, $LANG_LOGIN;
+
+    if (empty ($_USER['username'])) {
+        $retval = COM_siteHeader ('menu');
+        $retval .= COM_startBlock ($LANG_LOGIN[1], '',
+                           COM_getBlockTemplate ('_msg_block', 'header'));     
+        $loginreq = new Template ($_CONF['path_layout'] . 'submit');            
+        $loginreq->set_file ('loginreq', 'submitloginrequired.thtml');          
+        $loginreq->set_var ('login_message', $LANG_LOGIN[2]);
+        $loginreq->set_var ('site_url', $_CONF['site_url']);                    
+        $loginreq->set_var ('lang_login', $LANG_LOGIN[3]);
+        $loginreq->set_var ('lang_newuser', $LANG_LOGIN[4]);
+        $loginreq->parse ('errormsg', 'loginreq');
+        $retval .= $loginreq->finish ($loginreq->get_var ('errormsg'));
+        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+        $retval .= COM_siteFooter ();
+
+        return $retval;
+    }
+
+    COM_clearSpeedlimit ($_CONF['speedlimit'], 'mail');
+    if (COM_checkSpeedlimit ('mail') > 0) {
+        return COM_refresh ($_CONF['site_url'] . '/index.php');
+    }
+
+    $username = DB_getItem ($_TABLES['users'], 'username',
+                            "uid = {$_USER['uid']}");
+    $result = DB_query ("SELECT uid,title,comment,sid,ipaddress FROM {$_TABLES['comments']} WHERE cid = $cid AND type = '$type'");
+    $A = DB_fetchArray ($result);
+
+    $title = stripslashes ($A['title']);
+    $comment = stripslashes ($A['comment']);
+
+    // strip HTML if posted in HTML mode
+    if (preg_match ('/<.*>/', $comment) != 0) {
+        $comment = strip_tags ($comment);
+    }
+
+    $author = DB_getItem ($_TABLES['users'], 'username', "uid = {$A['uid']}");
+    if (($A['uid'] <= 1) && !empty ($A['ipaddress'])) {
+        // add IP address for anonymous posters
+        $author .= ' (' . $A['ipaddress'] . ')';
+    }
+
+    $mailbody = sprintf ($LANG03[26], $username);
+    $mailbody .= "\n\n"
+              . "$LANG03[16]: $title\n"
+              . "$LANG03[5]: $author\n";
+    
+    if (($type != 'article') && ($type != 'poll')) {
+        $mailbody .= "$LANG09[5]: $type\n";
+    }
+
+    if ($_CONF['emailstorieslength'] > 0) {
+        if ($_CONF['emailstorieslength'] > 1) {
+            $comment = substr ($comment, 0, $_CONF['emailstorieslength'])
+                     . '...';
+        }
+        $mailbody .= $comment . "\n\n";
+    }
+
+    $mailbody .= $LANG08[33] . ' <' . $_CONF['site_url']
+              . '/comment.php?mode=view&cid=' . $cid . ">\n\n";
+
+    $mailbody .= "\n------------------------------\n";
+    $mailbody .= "\n$LANG08[34]\n";
+    $mailbody .= "\n------------------------------\n";
+
+    $mailsubject = $_CONF['site_name'] . ' ' . $LANG03[27];
+
+    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
+    COM_updateSpeedlimit ('mail');
+
+    return COM_refresh ($_CONF['site_url'] . '/index.php?msg=27');
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-custom.php 1.4.0sr5-1/cpanel-glprivate/system/lib-custom.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-custom.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-custom.php	2006-08-08 02:39:06.000000000 -0500
@@ -17,11 +17,11 @@
 // | follows then that you should not include lib-common.php in this file      |
 // |                                                                           |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
-// |          Blaine Lang      - blaine@portalparts.com                        |
-// |          Dirk Haun        - dirk@haun-online.de                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Blaine Lang      - blaine AT portalparts DOT com                 |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -40,7 +40,11 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-custom.php,v 1.11 2004/11/03 14:54:43 blaine Exp $
+// $Id: lib-custom.php,v 1.18.2.1 2006/06/30 12:20:48 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'lib-custom.php') !== false) {               
+    die ('This file can not be used on its own!');
+}
 
 // You can use this global variable to print useful messages to the errorlog
 // using COM_errorLog().  To see an example of how to do this, look in
@@ -54,7 +58,8 @@
 * a user has in the "What you have access to" block.
 *
 */
-function phpblock_showrights() {
+function phpblock_showrights()
+{
     global $_RIGHTS, $_CST_VERBOSE;
 
     if ($_CST_VERBOSE) {
@@ -80,11 +85,12 @@
 * Get Bent()
 *
 * Php function to tell you how if your site is grossly insecure
-* 
+*
 **/
 function phpblock_getBent()
 {
     global $_CONF, $_TABLES;
+
     $secure = true;
 
     $retval = '';
@@ -137,54 +143,81 @@
 }
 
 
-/*  Sample Custom Member Functions to create and update Custom Membership registration and profile 
+/**
+* Include any code in this function that will be called by the internal CRON API
+* The interval between runs is determined by $_CONF['cron_schedule_interval']
+*/
+function CUSTOM_runSheduledTask() {
+
+}
+
+
+/**
+* Include any code in this function that will be called by Plugin API to set template variables
+* Initially this API is only called in the COM_siteHeader function to set header.thtml variables
+*/
+function CUSTOM_templatesetvars($templatename, &$template) {
+
+    if ($templatename == 'header') {
+        if (isset($mycontent)) {
+            $template->set_var( 'myvar', $mycontent );
+        }
+    }
+}
+
+
+/*  Sample Custom Member Functions to create and update Custom Membership registration and profile
 
     Note1: Enable CustomRegistration Feature in config.php
     $_CONF['custom_registration'] = true;  // Set to true if you have custom code
 
     Note2: This example requries a template file called memberdetail.thtml to be
-    located under the theme_dir/custom directory. 
-    Sample is located in under /system with the distribution.
+    located under the theme_dir/custom directory.
+    Sample is provided under /system with the distribution.
 
     Functions have been provided that are called from the Core Geeklog user and admin functions
     - This works with User Moderation as well
     - Admin will see the new registration info when checking a members profile only
     - All other users will see the standard User profile with the optional extended custom information
-    - Customization requries changes to a few of the core template files to add {customfields} variable
-    - See notes below in the custom functuion about the template changes 
+    - Customization requires changes to a few of the core template files to add {customfields} variable
+    - See notes below in the custom function about the template changes
 */
 
 /* Create any new records in additional tables you may have added  */
 /* Update any fields in the core GL tables for this user as needed */
 /* Called when user is first created */
-function custom_usercreate($uid) {
-    global $_CONF,$_TABLES,$HTTP_POST_VARS;
+function custom_usercreate($uid)
+{
+    global $_CONF, $_TABLES;
 
     // Ensure all data is prepared correctly before inserts, quotes may need to be escaped with addslashes()
-    DB_query("UPDATE {$_TABLES['users']} SET email='{$HTTP_POST_VARS['email']}',homepage='{$HTTP_POST_VARS['homepage']}', fullname='{$HTTP_POST_VARS['fullname']}' WHERE uid=$uid");
-    return true;
+    DB_query("UPDATE {$_TABLES['users']} SET email='{$_POST['email']}',homepage='{$_POST['homepage']}', fullname='{$_POST['fullname']}' WHERE uid=$uid");
 
+    return true;
 }
 
 // Delete any records from custom tables you may have used
-function custom_userdelete($uid) {
+function custom_userdelete($uid)
+{
     return true;
-
 }
+
 /* Called from users.php - when user is displaying a member profile  */
 /* This function can now return any extra fields that need to be shown */
 /* Output is then replaced in {customfields) -- This variable needs to be added to your templates */
 /* Template: path_layout/users/profile/profile.thtml */
 
-function custom_userdisplay($uid) {
-    global $_CONF,$_TABLES;
+function custom_userdisplay($uid)
+{
+    global $_CONF, $_TABLES;
+
     $var = "Value from custom table";
     $retval .= '<tr>
         <td align="right"><b>Custom Fields:</b></td>
         <td>' . $var .'</td>
      </tr>';
-    return $retval;
 
+    return $retval;
 }
 
 
@@ -199,8 +232,10 @@
 /* As noted: You need to add the {customfields} template variable. */
 /* For the edituser.thtml - maybe it would be added about the {group_edit} variable. */
 
-function custom_useredit($uid) {
-    global $_TABLES,$_CONF;
+function custom_useredit($uid)
+{
+    global $_CONF, $_TABLES;
+
     $var = "Value from custom table";
     $cookietimeout = DB_getitem($_TABLES['users'], 'cookietimeout' ,$uid);
     $selection = '<select name="cooktime">' . LB;
@@ -215,47 +250,58 @@
         <td><input type="text" name="custom1" size="50" value="' . $var .'"></td>
      </tr>';
     $retval .= '<tr><td colspan="2"><hr></td></tr>';
-   return $retval;
+
+    return $retval;
 }
 
 /* Function called when saving the user profile. */
 /* This function can now update any extra fields  */
-function custom_usersave($uid) {
-    global $_TABLES,$_CONF, $HTTP_POST_VARS;
-    DB_query("UPDATE {$_TABLES['users']} SET cookietimeout='{$HTTP_POST_VARS["cooktime"]}'");
+function custom_usersave($uid)
+{
+    global $_CONF, $_TABLES;
+
+    DB_query("UPDATE {$_TABLES['users']} SET cookietimeout='{$_POST["cooktime"]}'");
 }
 
 
-/* Main Form used for Custom membership when member is registering */
-function custom_userform($uid="",$msg="") {
-    global $_CONF,$_TABLES, $LANG04;
-    if (!empty($msg)) {
+/**
+* Main Form used for Custom membership when member is registering
+*
+* Note: Requires a file custom/memberdetail.thtml in every theme that is
+*       installed on the site!
+*
+* @param    string  $msg    an error message to display or the word 'new'
+* @return   string          HTML for the registration form
+*
+*/
+function custom_userform ($msg = '')
+{
+    global $_CONF, $_TABLES, $LANG04;
+
+    if (!empty ($msg) && ($msg != 'new')) {
         $retval .= COM_startBlock($LANG04[21]) . $msg . COM_endBlock();
     }
 
     $post_url = $_CONF['site_url']."/users.php";
     $postmode = "create";
     $submitbutton = '<input type="submit" value="Register Now!">';
-    $passwd_input = "";
-    $message = "<br><font color=black><b>Please complete the application below. Once you have completed the application, click the Submit button and the application will be processed immediately.</b></font>";
-    $A=array();
+    $message = "<blockquote style=\"padding-top:10px;\"><font color=black><b>Please complete the application below. Once you have completed the application, click the Submit button and the application will be processed immediately.</b></font></blockquote>";
 
     $user_templates = new Template ($_CONF['path_layout'] . 'custom');
     $user_templates->set_file('memberdetail', 'memberdetail.thtml');
     $user_templates->set_var('layout_url', $_CONF['layout_url']);
     $user_templates->set_var('post_url', $post_url);
     $user_templates->set_var('startblock', COM_startBlock("Custom Registration Example"));
-    $user_templates->set_var('message', $message);    
+    $user_templates->set_var('message', $message);
     $user_templates->set_var('USERNAME', "Username");
     $user_templates->set_var('USERNAME_HELP', "Name to be used when accessing this site");
-    $user_templates->set_var('username', $A['username']);
-    $user_templates->set_var('passwd_input', $passwd_input);
+    $user_templates->set_var('username', '');
     $user_templates->set_var('EMAIL', "Email Address");
     $user_templates->set_var('EMAIL_HELP', "");
-    $user_templates->set_var('email', $A['email']);
+    $user_templates->set_var('email', '');
     $user_templates->set_var('FULLNAME', "Full Name");
     $user_templates->set_var('FULLNAME_HELP', "");
-    $user_templates->set_var('fullname', $A['fullname']);
+    $user_templates->set_var('fullname', '');
     $user_templates->set_var('user_id', $user);
     $user_templates->set_var('postmode', $postmode);
     $user_templates->set_var('submitbutton', $submitbutton);
@@ -266,13 +312,36 @@
     return $retval;
 }
 
+/**
+* Check if it's okay to create a new user.
+*
+* Geeklog is about to create a new user with the given username and email
+* address. This is the custom code's last chance to prevent that,
+* e.g. to check if all required data has been entered.
+*
+* @param    string  $username   username that Geeklog would use for the new user* @param    string  $email      email address of that user
+* @return   string              an error message or an empty string for "OK"
+*
+*/
+function custom_usercheck ($username, $email)
+{
+    $msg = '';
+
+    // Example, check that the full name has been entered
+    // and complain if it's missing
+    if (empty ($_POST['fullname'])) {
+        $msg = 'Please enter your full name!';
+    }
+
+    return $msg;
+}
 
 
 /**
 * Custom function to retrieve and return a formatted list of blocks
 * Can be used when calling COM_siteHeader or COM_SiteFooter
 
-* Example: 
+* Example:
 * 1: Setup an array of blocks to display
 * 2: Call COM_siteHeader or COM_siteFooter
 *
@@ -284,8 +353,10 @@
 * @param   array   $showblocks    An array of block names to retrieve and format
 * @return  string                 Formated HTML containing site footer and optionally right blocks
 */
-function custom_showBlocks($showblocks) {
+function custom_showBlocks($showblocks)
+{
     global $_CONF, $_TABLES;
+
     $retval = '';
     foreach($showblocks as $block) {
         $sql = "SELECT bid, name,type,title,content,rdfurl,phpblockfn,help FROM {$_TABLES['blocks']} WHERE name='$block'";
@@ -295,6 +366,7 @@
             $retval .= COM_formatBlock($A);
         }
     }
+
     return $retval;
 }
 
@@ -372,4 +444,4 @@
 }
 */
 
-?>
\ No newline at end of file
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-database.php 1.4.0sr5-1/cpanel-glprivate/system/lib-database.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-database.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-database.php	2006-08-08 02:39:06.000000000 -0500
@@ -8,9 +8,9 @@
 // |                                                                           |
 // | Geeklog database library.                                                 |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs, tony@tonybibbs.com                                   |
+// | Authors: Tony Bibbs, tony AT tonybibbs DOT com                            |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -29,7 +29,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-database.php,v 1.33 2004/11/20 17:55:07 dhaun Exp $
+// $Id: lib-database.php,v 1.39.2.1 2006/06/30 12:20:48 dhaun Exp $
 
 /**
 * This is the high-level database layer for Geeklog (for the low-level stuff,
@@ -65,6 +65,7 @@
 $_TABLES['linksubmission']      = $_DB_table_prefix . 'linksubmission';
 $_TABLES['maillist']            = $_DB_table_prefix . 'maillist';
 $_TABLES['personal_events']     = $_DB_table_prefix . 'personal_events';
+$_TABLES['pingservice']         = $_DB_table_prefix . 'pingservice';
 $_TABLES['plugins']             = $_DB_table_prefix . 'plugins';
 $_TABLES['pollanswers']         = $_DB_table_prefix . 'pollanswers';
 $_TABLES['pollquestions']       = $_DB_table_prefix . 'pollquestions';
@@ -78,6 +79,8 @@
 $_TABLES['storysubmission']     = $_DB_table_prefix . 'storysubmission';
 $_TABLES['syndication']         = $_DB_table_prefix . 'syndication';
 $_TABLES['topics']              = $_DB_table_prefix . 'topics';
+$_TABLES['trackback']           = $_DB_table_prefix . 'trackback';
+$_TABLES['trackbackcodes']      = $_DB_table_prefix . 'trackbackcodes';
 $_TABLES['tzcodes']             = $_DB_table_prefix . 'tzcodes';
 $_TABLES['usercomment']         = $_DB_table_prefix . 'usercomment';
 $_TABLES['userindex']           = $_DB_table_prefix . 'userindex';
@@ -103,8 +106,8 @@
 // | DO NOT TOUCH ANYTHING BELOW HERE                                          |
 // +---------------------------------------------------------------------------+
 
-if (eregi ('lib-database.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-database.php') !== false) {             
+    die ('This file can not be used on its own!');
 }
 
 /**
@@ -143,6 +146,19 @@
     $_DB->setVerbose($flag);
 }
 
+/** Setting this on will return the SQL error message. 
+* Default is to not display or return the SQL error but
+* to record it in the error.log file
+*
+* @param        boolean     $flag       true or false
+*/
+function DB_displayError($flag)
+{
+    global $_DB;
+
+    $_DB->setDisplayError($flag);
+}
+
 /**
 * Executes a query on the db server 
 *
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-pingback.php 1.4.0sr5-1/cpanel-glprivate/system/lib-pingback.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-pingback.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-pingback.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,197 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | lib-pingback.php                                                          |
+// |                                                                           |
+// | Functions needed to handle pingbacks.                                     |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2005 by the following authors:                              |
+// |                                                                           |
+// | Author: Dirk Haun - dirk AT haun-online DOT de                            |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: lib-pingback.php,v 1.6.2.1 2006/06/30 12:20:48 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'lib-pingback.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+// PEAR class to handle XML-RPC
+require_once ('XML/RPC.php');
+
+/**
+* Get the Pingback URL for a given URL
+*
+* Note: Only checks for the 'X-Pingback:' header.
+*
+* @param    string  $url    URL to get the Pingback URL for
+* @return   string          Pingback URL or empty string
+*
+*/
+function PNB_getPingbackUrl ($url)
+{
+    require_once ('HTTP/Request.php');
+
+    $retval = '';
+
+    $req =& new HTTP_Request ($url);
+    $req->setMethod (HTTP_REQUEST_METHOD_HEAD);
+    $req->addHeader ('User-Agent', 'GeekLog/' . VERSION);
+
+    $response = $req->sendRequest ();
+    if (PEAR::isError ($response)) {
+        COM_errorLog ('Pingback: ' . $response->getMessage());
+        return false;
+    } else {
+        $retval = $req->getResponseHeader ('X-Pingback');
+    }
+
+    return $retval;
+}
+
+/**
+* Send a Pingback
+*
+* @param    string  $sourceURI  URL of an entry on our site
+* @param    string  $targetURI  an entry on someone else's site
+* @return   string              empty string on success or error message
+*
+*/
+function PNB_sendPingback ($sourceURI, $targetURI)
+{
+    global $LANG_TRB;
+
+    $retval = '';
+
+    $pingback = PNB_getPingbackUrl ($targetURI);
+    if (empty ($pingback)) {
+        return $LANG_TRB['no_pingback_url'];
+    }
+
+    $parts = parse_url ($pingback);
+    if (empty ($parts['port'])) {
+        if (strcasecmp ($parts['scheme'], 'https') == 0) {
+            $parts['port'] = 443;
+        } else {
+            $parts['port'] = 80;
+        }
+    }
+    $client = new XML_RPC_Client ($parts['path'], $parts['host'], $parts['port']);
+    //$client->setDebug (1);
+
+    $msg = new XML_RPC_Message ('pingback.ping',
+            array (new XML_RPC_Value ($sourceURI, 'string'),
+                   new XML_RPC_Value ($targetURI, 'string')));
+
+    $response = $client->send ($msg, 0, $parts['scheme']);
+    if ($response == 0) {
+        $retval = $client->errstring;
+    } else if ($response->faultCode () != 0) {
+        $retval = $response->faultString ();
+    }
+
+    return $retval;
+}
+
+/**
+* Send a standard ping to a weblog directory service
+*
+* The "classic" ping, originally invented for weblogs.com
+*
+* @param    string  $url            URL to ping
+* @param    string  $blogname       name of our site
+* @param    string  $blogurl        URL of our site
+* @param    string  $changedurl     URL of the changed / new entry
+* @return   string                  empty string on success of error message
+*
+*/
+function PNB_sendPing ($url, $blogname, $blogurl, $changedurl)
+{
+    $parts = parse_url ($url);
+    if (empty ($parts['port'])) {
+        if (strcasecmp ($parts['scheme'], 'https') == 0) {
+            $parts['port'] = 443;
+        } else {
+            $parts['port'] = 80;
+        }
+    }
+    $client = new XML_RPC_Client ($parts['path'], $parts['host'], $parts['port']);
+    //$client->setDebug (1);
+
+    $msg = new XML_RPC_Message ('weblogUpdates.ping',
+            array (new XML_RPC_Value ($blogname, 'string'),
+                   new XML_RPC_Value ($blogurl, 'string'),
+                   new XML_RPC_Value ($changedurl, 'string')));
+
+    $response = $client->send ($msg, 0, $parts['scheme']);
+    if ($response == 0) {
+        $retval = $client->errstring;
+    } else if ($response->faultCode () != 0) {
+        $retval = $response->faultString ();
+    }
+
+    return $retval;
+}
+
+/**
+* Send an extended ping to a weblog directory service
+*
+* Supported e.g. by blo.gs
+*
+* @param    string  $url            URL to ping
+* @param    string  $blogname       name of our site
+* @param    string  $blogurl        URL of our site
+* @param    string  $changedurl     URL of the changed / new entry
+* @param    string  $feedurl        URL of a feed for our site
+* @return   string                  empty string on success of error message
+*
+*/
+function PNB_sendExtendedPing ($url, $blogname, $blogurl, $changedurl, $feedurl)
+{
+    $parts = parse_url ($url);
+    if (empty ($parts['port'])) {
+        if (strcasecmp ($parts['scheme'], 'https') == 0) {
+            $parts['port'] = 443;
+        } else {
+            $parts['port'] = 80;
+        }
+    }
+    $client = new XML_RPC_Client ($parts['path'], $parts['host'], $parts['port']);
+    //$client->setDebug (1);
+
+    $msg = new XML_RPC_Message ('weblogUpdates.extendedPing',
+            array (new XML_RPC_Value ($blogname, 'string'),
+                   new XML_RPC_Value ($blogurl, 'string'),
+                   new XML_RPC_Value ($changedurl, 'string'),
+                   new XML_RPC_Value ($feedurl, 'string')));
+
+    $response = $client->send ($msg, 0, $parts['scheme']);
+    if ($response == 0) {
+        $retval = $client->errstring;
+    } else if ($response->faultCode () != 0) {
+        $retval = $response->faultString ();
+    }
+
+    return $retval;
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-plugins.php 1.4.0sr5-1/cpanel-glprivate/system/lib-plugins.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-plugins.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-plugins.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,17 +2,17 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | lib-plugins.php                                                           |
 // |                                                                           |
 // | This file implements plugin support in Geeklog.                           |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
-// |          Blaine Lang      - blaine@portalparts.com                        |
-// |          Dirk Haun        - dirk@haun-online.de                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Blaine Lang      - blaine AT portalparts DOT com                 |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,7 +31,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-plugins.php,v 1.52 2004/12/29 10:51:25 dhaun Exp $
+// $Id: lib-plugins.php,v 1.90.2.1 2006/06/30 12:20:48 dhaun Exp $
 
 /**
 * This is the plugin library for Geeklog.  This is the API that plugins can
@@ -40,8 +40,8 @@
 *
 */
 
-if (eregi ('lib-plugins.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-plugins.php') !== false) {
+    die ('This file can not be used on its own!');
 }
 
 require_once($_CONF['path_system'] . 'classes/plugin.class.php');
@@ -63,7 +63,7 @@
 * @param     string     $function_name      holds name of function to call
 *
 */
-function PLG_callFunctionForAllPlugins($function_name) 
+function PLG_callFunctionForAllPlugins($function_name)
 {
     global $_PLUGINS;
 
@@ -88,7 +88,7 @@
 * @return       mixed       returns result of function call, otherwise false
 *
 */
-function PLG_callFunctionForOnePlugin($function, $args='') 
+function PLG_callFunctionForOnePlugin($function, $args='')
 {
     if (function_exists($function)) {
         // great, function exists, run it
@@ -99,7 +99,7 @@
         case 1:
             return $function($args[1]);
             break;
-        case 2: 
+        case 2:
             return $function($args[1], $args[2]);
             break;
         case 3:
@@ -111,6 +111,12 @@
         case 5:
             return $function($args[1], $args[2], $args[3], $args[4], $args[5]);
             break;
+        case 6:
+            return $function($args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
+            break;
+        case 7:
+            return $function($args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
+            break;
         default:
             return $function($args);
             break;
@@ -143,8 +149,9 @@
 {
     return PLG_callFunctionForOnePlugin('plugin_upgrade_' . $type);
 }
+
 /**
-* Calls the plugin function to return the current version of code. 
+* Calls the plugin function to return the current version of code.
 * Used to indicate to admin if an update or upgrade is requied.
 *
 * @param        string      $type       Plugin name
@@ -156,7 +163,6 @@
     return PLG_callFunctionForOnePlugin('plugin_chkVersion_' . $type);
 }
 
-
 /**
 * Tells a plugin to uninstall itself.
 *
@@ -166,12 +172,15 @@
 */
 function PLG_uninstall($type)
 {
-    if (empty($type)) return false;
+    if (empty($type)) {
+        return false;
+    }
+
     $retval = PLG_callFunctionForOnePlugin('plugin_uninstall_' . $type);
 
     if (empty($retval)) {
         return false;
-    } else { 
+    } else {
         return $retval;
     }
 }
@@ -184,7 +193,7 @@
 * @return   boolean     True if current user is moderator of plugin otherwise false
 *
 */
-function PLG_isModerator() 
+function PLG_isModerator()
 {
     return PLG_callFunctionForAllPlugins('plugin_ismoderator_');
 }
@@ -200,7 +209,7 @@
 * @return   array   Returns menu options for plugin
 *
 */
-function PLG_getMenuItems() 
+function PLG_getMenuItems()
 {
     global $_PLUGINS;
 
@@ -214,39 +223,101 @@
             }
         }
     }
-    return $menu;
-}
 
-/**
-* Returns if a specific plugin supports user comments
-*
-* @param        string      $type       Plugin to check comment support for
-* @return       boolean     True if plugin uses comments otherwise false
-*
-*/
-function PLG_supportsComments($type) 
-{
-    return PLG_callFunctionForOnePlugin('plugin_commentsupport_' . $type);
+    return $menu;
 }
 
 /**
-* Plugin should perform an operation on one of its comments.
-*
-* @param        string      $type       Plugin to have handle the comment
-* @param        string      $id         Comment ID
-* @param        string      $operation  "save" or "delete"
-* @return       string      COM_refresh() string to redirect to the proper URL
-*/
-function PLG_handlePluginComment ($type, $id, $operation='') 
+ * Get view URL and name of unique identifier
+ *
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param   string  $type   Plugin to delete comment
+ * @return  array   string of URL of view page, name of unique identifier
+ */
+function PLG_getCommentUrlId($type)
+{
+    global $_CONF;
+
+    $ret = PLG_callFunctionForOnePlugin('plugin_getcommenturlid_' . $type);
+    if (empty($ret[0])) {
+        $ret[0] = $_CONF['site_url'] . "/$type/index.php";
+    }
+    if (empty($ret[1])) {
+        $ret[1] = 'id';
+    }
+
+    return $ret;
+}
+
+/**
+ * Plugin should delete a comment
+ *
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param   string  $type   Plugin to delete comment
+ * @param   int     $cid    Comment to be deleted
+ * @param   string  $id     Item id to which $cid belongs
+ * @return  mixed   false for failure, HTML string (redirect?) for success
+ */
+function PLG_commentDelete($type, $cid, $id)
+{
+    $args[1] = $cid;
+    $args[2] = $id;
+
+    return PLG_callFunctionForOnePlugin('plugin_deletecomment_' . $type, $args);
+}
+
+/**
+ * Plugin should save a comment
+ *
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param   string  $type   Plugin to delete comment
+ * @param   string  $title  comment title
+ * @param   string  $comment comment text
+ * @param   string  $id     Item id to which $cid belongs
+ * @param   int     $pid    comment parent
+ * @param   string  $postmode 'html' or 'text'
+ * @return  mixed   false for failure, HTML string (redirect?) for success
+ */
+function PLG_commentSave($type, $title, $comment, $id, $pid, $postmode)
+{
+    $args[1] = $title;
+    $args[2] = $comment;
+    $args[3] = $id;
+    $args[4] = $pid;
+    $args[5] = $postmode;
+
+    return PLG_callFunctionForOnePlugin('plugin_savecomment_' . $type, $args);
+}
+
+/**
+ * Plugin should display [a] comment[s]
+ *
+ * @author Vincent Furia <vinny01 AT users DOT sourceforge DOT net>
+ * @param   string  $type   Plugin to display comment
+ * @param   string  $id     Unique idenifier for item comment belongs to
+ * @param   int     $cid    Comment id to display (possibly including sub-comments)
+ * @param   string  $title  Page/comment title
+ * @param   string  $order  'ASC' or 'DSC' or blank
+ * @param   string  $format 'threaded', 'nested', or 'flat'
+ * @param   int     $page   Page number of comments to display
+ * @param   boolean $view   True to view comment (by cid), false to display (by $pid)
+ * @return  mixed   results of calling the plugin_displaycomment_ function
+ */
+function PLG_displayComment($type, $id, $cid, $title, $order, $format, $page, $view)
 {
     $args[1] = $id;
-    $args[2] = $operation;
+    $args[2] = $cid;
+    $args[3] = $title;
+    $args[4] = $order;
+    $args[5] = $format;
+    $args[6] = $page;
+    $args[7] = $view;
 
-    return PLG_callFunctionForOnePlugin('plugin_handlecomment_' . $type, $args);
+    return PLG_callFunctionForOnePlugin('plugin_displaycomment_' . $type, $args);
 }
 
 /**
-* Allows plugins a chance to handle a comment before GL does.  
+* Allows plugins a chance to handle a comment before GL does.
 
 * This is a first-come-first-serve affair so if a plugin returns an error, other
 * plugins wishing to handle comment preprocessing won't get called
@@ -262,7 +333,7 @@
 * @return an error otherwise false if no errors were encountered
 *
 */
-function PLG_commentPreSave($uid, $title, $comment, $sid, $pid, $type, $postmode)
+function PLG_commentPreSave($uid, &$title, &$comment, $sid, $pid, $type, &$postmode)
 {
 	global $_PLUGINS;
 
@@ -276,57 +347,77 @@
             }
         }
     }
-    return false;
-}
-
-/**
-* User has requested to create a comment for the plugin
-* Redirects user to comment form if initial comment for plugin record or returns
-* formated HTML including the Site footer and the comments 
-*
-* @param        string   $type            Plugin to have handle the comment
-* @param        int      $id      GL Comment table primary key. 
-* @param        string   $mode     Has user selected a new comment preview mode (Flat, Nested, Threaded, None)
-* @param        string   $order           Has the user selected a different comment first (Newest or Oldest comment first)
-* @param        string   $reply           Has the user used the reply button on the Comment Bar 
-* @return       string   Formated HTML containing site footer and the comments with the comment command bar 
-*                        or redirect user to create top level comment
-*/
-function PLG_callCommentForm($type,$id,$mode="",$order="",$reply="")
-{
-    $args[1] = $id;
-    $args[2] = $mode;
-    $args[3] = $order;
-    $args[4] = $reply;
 
-    return PLG_callFunctionForOnePlugin('plugin_commentform_' . $type, $args);
+    return false;
 }
 
 
 /**
-* The way this function works is very specific to how Geeklog shows it's
+* The way this function works is very specific to how Geeklog shows its
 * statistics.  On stats.php, there is the top box which gives overall
 * statistics for Geeklog and then there are blocks below it that give
-* more specific statistics for various components of Geeklog.  If 
-* $showsitestats is 1 then the plugins is to return the overall stats
-* for the plugin.  If $showsitestats is 0 then it will return the plugin
-* specific stats
+* more specific statistics for various components of Geeklog.
+*
+* This plugin API function suffers from a variety of bugs and bad design
+* decisions for which we have to provide backward compatibility, so please
+* bear with us ...
 *
-* @param        boolean     $showsitestats      flag indicated type of stats to return 
+* The only parameter to this function, $showsitestats, was documented as being
+* 1 for the site stats and 0 for the plugin-specific stats. However, the latter
+* was always called with a value of 2, so plugins only did a check for 1 and
+* "else", which makes extensions somewhat tricky.
+* Furthermore, due to the original templates for the site stats, it has
+* become standard practice to hard-code a <table> in the plugins as the return
+* value for $showsitestats == 1. This table, however, didn't align properly
+* with the built-in site stats entries.
+*
+* Because of all this, the new mode, 3, works differently:
+* - for $showsitestats == 3, we call a new plugin API function,
+*   plugin_statssummary_<plugin-name>, which is supposed to return the plugin's
+*   entry for the site stats in an array which stats.php will then properly
+*   format, alongside the entries for the built-in items.
+* - for $showsitestats == 1, we only call those plugins that do NOT have a
+*   plugin_statssummary_<plugin-name> function, thus providing backward
+*   compatibility
+* - for $showsitestats == 2, nothing has changed
+*
+* @param    int     $showsitestats      value indicating type of stats to return
+* @return   mixed                       array (for mode 3) or string
 *
 */
-function PLG_getPluginStats($showsitestats) 
+function PLG_getPluginStats ($showsitestats)
 {
     global $_PLUGINS;
 
-    $retval = '';
+    if ($showsitestats == 3) {
+        $retval = array ();
+    } else {
+        $retval = '';
+    }
 
     foreach ($_PLUGINS as $pi_name) {
-        $function = 'plugin_showstats_' . $pi_name;
-        if (function_exists($function)) {
-            //great, stats function is there, call it
-            $retval .= $function($showsitestats);
-        } // no else because this is not a required API function
+        if ($showsitestats == 3) {
+            $function = 'plugin_statssummary_' . $pi_name;
+            if (function_exists ($function)) {
+                $summary = $function ();
+                if (is_array ($summary)) {
+                    $retval[$pi_name] = $summary;
+                }
+            }
+        } else if ($showsitestats == 1) {
+            $function1 = 'plugin_showstats_' . $pi_name;
+            $function2 = 'plugin_statssummary_' . $pi_name;
+            if (!function_exists ($function2)) {
+                if (function_exists ($function1)) {
+                    $retval .= $function1 ($showsitestats);
+                }
+            }
+        } else if ($showsitestats == 2) {
+            $function = 'plugin_showstats_' . $pi_name;
+            if (function_exists ($function)) {
+                $retval .= $function ($showsitestats);
+            }
+        }
     }
 
     return $retval;
@@ -340,26 +431,28 @@
 * @return   array   String array of search types for plugin(s)
 *
 */
-function PLG_getSearchTypes() 
+function PLG_getSearchTypes()
 {
     global $_PLUGINS;
 
     $types = array();
     $cur_types = array();
- 
+
     foreach ($_PLUGINS as $pi_name) {
         $function = 'plugin_searchtypes_' . $pi_name;
-        if (function_exists($function)) {
-            //great, stats function is there, call it
-            $cur_types = $function();
-            $types = array_merge($types, $cur_types);
+        if (function_exists ($function)) {
+            $cur_types = $function ();
+            if (is_array ($cur_types) && (count ($cur_types) > 0)) {
+                $types = array_merge ($types, $cur_types);
+            }
         } // no else because this is not a required API function
     }
+
     return $types;
 }
 
 /**
-* Determines if s specific plugin supports Geeklog's
+* Determines if a specific plugin supports Geeklog's
 * expanded search results feature
 *
 * @author Tony Bibbs <tony AT geeklog DOT net>
@@ -367,6 +460,8 @@
 * @param string $type Plugin name
 * @return boolean True if it is supported, otherwise false
 *
+* NOTE: This function is not currently used
+*
 */
 function PLG_supportsExpandedSearch($type)
 {
@@ -378,25 +473,28 @@
     if (empty($retval) OR !is_bool($retval)) {
         $retval = false;
     }
+
     return $retval;
 }
 
 /**
 * This function gives each plugin the opportunity to do their search
-* and return their results.  Results comeback in an array of HTML 
-* formatted table rows that can be quickly printed by search.php 
+* and return their results.  Results comeback in an array of HTML
+* formatted table rows that can be quickly printed by search.php
 *
 * @param    string  $query      What the user searched for
 * @param    date    $datestart  beginning of date range to search for
 * @param    date    $dateend    ending date range to search for
-* @param    string  $topic      the topic the user searched within 
+* @param    string  $topic      the topic the user searched within
 * @param    string  $type       Type of items they are searching, or 'all'
 * @param    int     $author     UID...only return results for this person
 * @param    string  $keyType    search key type: 'all', 'phrase', 'any'
+* @param    int     $page       page number of current search
+* @param    int     $perpage    number of results per page
 * @return   array               Returns search results
 *
 */
-function PLG_doSearch($query, $datestart, $dateend, $topic, $type, $author, $keyType = 'all') 
+function PLG_doSearch($query, $datestart, $dateend, $topic, $type, $author, $keyType = 'all', $page = 1, $perpage = 10)
 {
     global $_PLUGINS;
 
@@ -407,12 +505,13 @@
     foreach ($_PLUGINS as $pi_name) {
         $function = 'plugin_dopluginsearch_' . $pi_name;
         if (function_exists($function)) {
-            $plugin_result = $function($query, $datestart, $dateend, $topic, $type, $author, $keyType);
+            $plugin_result = $function($query, $datestart, $dateend, $topic, $type, $author, $keyType, $page, $perpage);
             $nrows_plugins = $nrows_plugins + $plugin_result->num_searchresults;
             $total_plugins = $total_plugins + $plugin_result->num_itemssearched;
             $search_results[] = $plugin_result;
         } // no else because implementation of this API function not required
     }
+
     return array($nrows_plugins, $total_plugins, $search_results);
 }
 
@@ -423,7 +522,7 @@
 * @return   int     Number of submissions in queue for plugins
 *
 */
-function PLG_getSubmissionCount() 
+function PLG_getSubmissionCount()
 {
     global $_PLUGINS;
 
@@ -434,18 +533,36 @@
             $num = $num + $function();
         }
     }
+
     return $num;
 }
 
 /**
-* This function will show any plugin user options in the
-* user block on every page
-* NOTE: the plugin is responsible for it's own security.
-*
-* @return   array   Returns options to add to user menu
+* This function will get & check user or admin options from plugins and check
+* required ones for availability. This function is called by several other
+* functions and is not to be called from the plugin directly. The function which
+* call this here follow below.
+*
+* NOTE for plugin developers:
+* The plugin is responsible for its own security.
+* This supports a plugin having either a single menuitem or multiple menuitems.
+* The plugin has to provide an array for the menuitem of the format:
+* array (menuitem_title, item_url, submission_count)
+* Plugin function can return a single record array or multiple records
+*
+*
+* @param    array $var_names    An array of the variables that are retrieved.
+*                               This has to match the named array that is used
+*                               in the function returning the values
+* @param    array $required_names An array of true/false-values, describing
+*                                 which of the above listed values is required
+*                                 to give a valid set of data.
+* @param    string $function_name A string that gives the name of the function
+*                                 at the plugin that will return the values.
+* @return   array Returns options to add to the given menu that is calling this
 *
 */
-function PLG_getUserOptions() 
+function PLGINT_getOptionsforMenus($var_names, $required_names, $function_name)
 {
     global $_PLUGINS;
 
@@ -453,14 +570,35 @@
 
     $counter = 0;
     foreach ($_PLUGINS as $pi_name) {
-        $plugin = new Plugin();
-        $function = 'plugin_getuseroption_' . $pi_name;
-        if (function_exists($function)) {
-            // I know this uses the adminlabel, adminurl but who cares?
-            list($plugin->adminlabel, $plugin->adminurl, $plugin->numsubmissions) = $function();
-            if (!empty ($plugin->adminlabel) && !empty ($plugin->adminurl)) {
-                $counter++;
-                $plgresults[$counter] = $plugin;
+        $function = $function_name . $pi_name;
+        if (function_exists ($function)) {
+            $plg_array = $function();
+            if ($plg_array !== false) {
+                // Check if plugin is returning a single record array or multiple records
+                $entries = count ($plg_array[0]);
+                if ($entries == 0) {
+                    $sets_array = array ();
+                } else if ($entries == 1) {
+                    // Single record - so we need to prepare the sets_array;
+                    $sets_array[0] = $plg_array;
+                } else {
+                    // Multiple menuitem records - in required format
+                    $sets_array = $plg_array;
+                }
+                foreach ($sets_array as $val) {
+                    $plugin = new Plugin();
+                    $good_array = true;
+                    for ($n = 0; $n < count($var_names); $n++) {
+                        $plugin -> $var_names[$n] = $val[$n];
+                        if (empty ($plugin -> $var_names[$n]) && $required_names[$n]) {
+                            $good_array = false;
+                        }
+                    }
+                    $counter++;
+                    if ($good_array) {
+                        $plgresults[$counter] = $plugin;
+                    }
+                }
             }
         }
     }
@@ -468,31 +606,79 @@
     return $plgresults;
 }
 
-/** 
+/**
+* This function shows the option for all plugins at the top of the
+* command and control center.
+*
+* This supports that a plugin can have several lines in the CC menu.
+* The plugin has to provide simply a set of 3 x n sets of variables in order to
+* get n lines in the menu such as
+* array(    "first line", "url1", "1",
+*            "second line", "url2", "44",
+*            etc, etc)
+*
+* @return   array   Returns Command and Control options for moderation.php
+*
+*/
+function PLG_getCCOptions()
+{
+    $var_names = array('adminlabel', 'adminurl', 'plugin_image');
+    $required_names = array(true, true, true);
+    $function_name = 'plugin_cclabel_';
+    $plgresults = PLGINT_getOptionsforMenus($var_names, $required_names, $function_name);
+
+    return $plgresults;
+}
+
+/**
 * This function will show any plugin adminstrative options in the
 * admin functions block on every page (assuming the user is an admin
 * and is logged in).
-* NOTE: the plugin is responsible for it's own security. 
+*
+* NOTE: the plugin is responsible for its own security.
+* This supports that a plugin can have several lines in the Admin menu.
+* The plugin has to provide simply a set of 3 x n sets of variables in order to
+* get n lines in the menu such as
+* array(    "first line", "url1", "1",
+*            "second line", "url2", "44",
+*            etc, etc)
 *
 * @return   array   Returns options to put in admin menu
 *
 */
-function PLG_getAdminOptions() 
+function PLG_getAdminOptions()
 {
-    global $_PLUGINS;
+    $var_names = array('adminlabel', 'adminurl', 'numsubmissions');
+    $required_names = array(true, true, false);
+    $function_name = 'plugin_getadminoption_';
+    $plgresults = PLGINT_getOptionsforMenus($var_names, $required_names, $function_name);
+
+    return $plgresults;
+}
+
+/**
+* This function will show any plugin user options in the
+* user block on every page
+*
+* This supports that a plugin can have several lines in the User menu.
+* The plugin has to provide simply a set of 3 x n sets of variables in order to
+* get n lines in the menu such as
+* array(    "first line", "url1", "1",
+*            "second line", "url2", "44",
+*            etc, etc)
+* NOTE: the plugin is responsible for its own security.
+*
+* @return   array   Returns options to add to user menu
+*
+*/
+function PLG_getUserOptions()
+{
+    // I know this uses the adminlabel, adminurl but who cares?
+    $var_names = array('adminlabel', 'adminurl', 'numsubmissions');
+    $required_names = array(true, true, false);
+    $function_name = 'plugin_getuseroption_';
+    $plgresults = PLGINT_getOptionsforMenus($var_names, $required_names, $function_name);
 
-    $counter = 0;
-    foreach ($_PLUGINS as $pi_name) {
-        $plugin = new Plugin();
-        $function = 'plugin_getadminoption_' . $pi_name;
-        if (function_exists($function)) {
-            list($plugin->adminlabel, $plugin->adminurl, $plugin->numsubmissions) = $function();
-            if (!empty ($plugin->adminlabel) && !empty ($plugin->adminurl)) {
-                $counter++;
-                $plgresults[$counter] = $plugin;
-            }
-        }
-    }
     return $plgresults;
 }
 
@@ -506,25 +692,27 @@
 * @return       boolean     Returns true on success otherwise false
 *
 */
-function PLG_approveSubmission($type, $id) 
+function PLG_approveSubmission($type, $id)
 {
     $args[1] = $id;
+
     return PLG_callFunctionForOnePlugin('plugin_moderationapprove_' . $type, $args);
 }
 
 /**
-* This function is responsible for calling 
+* This function is responsible for calling
 * plugin_moderationdelete_<pluginname> which deletes an item from the
-* submission queue for a plugin.  
+* submission queue for a plugin.
 *
 * @param        string      $type       Plugin to do submission deletion for
 * @param        string      $id         used to identify the record for which to delete
 * @return       boolean     Returns true on success otherwise false
 *
 */
-function PLG_deleteSubmission($type, $id) 
+function PLG_deleteSubmission($type, $id)
 {
     $args[1] = $id;
+
     return PLG_callFunctionForOnePlugin('plugin_moderationdelete_' . $type, $args);
 }
 
@@ -537,40 +725,11 @@
 * @return       boolean     Returns true on success otherwise false
 *
 */
-function PLG_saveSubmission($type, $A) 
+function PLG_saveSubmission($type, $A)
 {
     $args[1] = $A;
-    return PLG_callFunctionForOnePlugin('plugin_savesubmission_' . $type, $args);
-}
-
-/**
-* This function shows the option for all plugins at the top of the 
-* command and control center.
-*
-* @return   array   Returns Command and Control options for moderation.php
-*
-*/
-function PLG_getCCOptions() 
-{
-    global $_PLUGINS;
 
-    $plugins = array();
-    foreach ($_PLUGINS as $pi_name) {
-        $cur_plugin = new Plugin();
-        $function = 'plugin_cclabel_' . $pi_name;
-        if (function_exists($function)) {
-            $cclabel = $function ();
-            if ($cclabel !== false) {
-                list($cur_plugin->adminlabel, $cur_plugin->adminurl, $cur_plugin->plugin_image) = $cclabel;
-                if (!empty ($cur_plugin->adminlabel) &&
-                    !empty ($cur_plugin->adminurl) &&
-                    !empty ($cur_plugin->plugin_image)) {
-                    $plugins[] = $cur_plugin; 
-                }
-            }
-        }
-    }
-    return $plugins;
+    return PLG_callFunctionForOnePlugin('plugin_savesubmission_' . $type, $args);
 }
 
 /**
@@ -580,7 +739,7 @@
 * @return   string      returns list of items needing moderation for plugins
 *
 */
-function PLG_showModerationList() 
+function PLG_showModerationList()
 {
     global $_PLUGINS;
 
@@ -601,7 +760,7 @@
 * @return       string
 *
 */
-function PLG_getModerationValues($type) 
+function PLG_getModerationValues($type)
 {
     return PLG_callFunctionForOnePlugin('plugin_moderationvalues_' . $type);
 }
@@ -614,13 +773,13 @@
 * @return       string      HTML for submit form for plugin
 *
 */
-function PLG_showSubmitForm($type) 
+function PLG_showSubmitForm($type)
 {
     return PLG_callFunctionForOnePlugin('plugin_submit_' . $type);
 }
 
 /**
-* This function will show the centerblock for any plugin 
+* This function will show the centerblock for any plugin
 * It will be display before any news and after any defined staticpage content.
 * The plugin is responsible to format the output correctly.
 *
@@ -630,7 +789,7 @@
 * @return  Formatted center block content
 *
 */
-function PLG_showCenterblock($where = 1, $page = 1, $topic = '') 
+function PLG_showCenterblock($where = 1, $page = 1, $topic = '')
 {
     global $PLG_bufferCenterAPI, $PLG_buffered, $_PLUGINS;
 
@@ -868,7 +1027,7 @@
 * The user wants to save changes to his/her profile. Any plugin that added its
 * own variables or blocks to the profile input form will now have to extract
 * its data and save it.
-* Plugins will have to refer to the global $HTTP_POST_VARS array to get the
+* Plugins will have to refer to the global $_POST array to get the
 * actual data.
 *
 * @param   string   $plugin   name of a specific plugin or empty (all plugins)
@@ -884,9 +1043,11 @@
 }
 
 /**
-* This function can be called to check if an plugin wants to set a template variable
+* This function can be called to check if an plugin wants to set a template
+* variable
 * Example in COM_siteHeader, the API call is now added
-* A plugin can now check for templatename == 'header' and then set additional template variables
+* A plugin can now check for templatename == 'header' and then set additional 
+* template variables
 *
 * @param   string   $templatename     Name of calling template - used as test in plugin function
 * @param   ref      $template         reference for the Template
@@ -896,6 +1057,10 @@
 {
     global $_PLUGINS;
 
+    if (function_exists ('CUSTOM_templatesetvars')) {
+        CUSTOM_templatesetvars($templatename, $template);
+    }
+
     foreach ($_PLUGINS as $pi_name) {
         $function = 'plugin_templatesetvars_' . $pi_name;
         if (function_exists($function)) {
@@ -905,8 +1070,9 @@
 }
 
 /**
-* This function is called from COM_siteHeader and will return additional Header information
-* This can be Javascript functions required for the plugin or extra Metatags
+* This function is called from COM_siteHeader and will return additional header
+* information. This can be used for JavaScript functions required for the plugin
+* or extra Metatags
 *
 * @return   string      returns a concatenated string of all plugins extra header code
 */
@@ -973,11 +1139,12 @@
 * The autolink would be like:  [story:20040101093000103 here]
 *
 * @param   string   $content   Content that should be parsed for autolinks
+* @param   string   $plugin    Optional if you only want to parse using a specific plugin
 *
 */
-function PLG_replaceTags ($content)
+function PLG_replaceTags ($content, $plugin = '')
 {
-    global $_CONF, $_TABLES, $_PLUGINS, $LANG32;
+    global $_CONF, $_TABLES, $LANG32;
 
     if (isset ($_CONF['disable_autolinks']) && ($_CONF['disable_autolinks'] == 1)) {
         // autolinks are disabled - return $content unchanged
@@ -986,46 +1153,62 @@
 
     $autolinkModules = PLG_collectTags ();
 
-    // For each supported module - scan the content looking for any AutoLink tags
+    // For each supported module, scan the content looking for any AutoLink tags
     $tags = array ();
     foreach ($autolinkModules as $moduletag => $module) {
         $autotag_prefix = '['. $moduletag . ':';
-        $offset = $prev_offset = 0;
-        $strlen = strlen ($content);
-        while ($offset < $strlen) {
+        $offset = 0;
+        $prev_offset = 0;
+        $contentlen = strlen ($content);
+        while ($offset < $contentlen) {
             $start_pos = strpos (strtolower ($content), $autotag_prefix,
                                  $offset);
-            if ($start_pos !== FALSE) {
-               $end_pos = strpos (strtolower ($content), ']', $start_pos);
-               $next_tag = strpos (strtolower ($content), '[', $start_pos + 1);
-               if ($end_pos > $start_pos AND (($end_pos < $next_tag OR $next_tag == FALSE))) {
+            if ($start_pos === false) {
+                break;
+            } else {
+                $end_pos = strpos (strtolower ($content), ']', $start_pos);
+                $next_tag = strpos (strtolower ($content), '[', $start_pos + 1);
+                if (($end_pos > $start_pos) AND
+                        (($next_tag === false) OR ($end_pos < $next_tag))) {
                     $taglength = $end_pos - $start_pos + 1;
                     $tag = substr ($content, $start_pos, $taglength);
                     $parms = explode (' ', $tag);
-                    $label = str_replace (']', '',
-                             substr ($tag, strlen ($parms[0]) + 1));
-                    $parms = explode (':', $parms[0]);
+
+                    // Extra test to see if autotag was entered with a space
+                    // after the module name
+                    if (substr ($parms[0], -1) == ':') {
+                        $startpos = strlen ($parms[0]) + strlen ($parms[1]) + 2;
+                        $label = str_replace (']', '', substr ($tag, $startpos));
+                        $tagid = $parms[1];
+                    } else {
+                        $label = str_replace (']', '',
+                                 substr ($tag, strlen ($parms[0]) + 1));
+                        $parms = explode (':', $parms[0]);
+                        if (count ($parms) > 2) {
+                            // whoops, there was a ':' in the tag id ...
+                            array_shift ($parms);
+                            $tagid = implode (':', $parms);
+                        } else {
+                            $tagid = $parms[1];
+                        }
+                    }
+
                     $newtag = array (
                         'module'    => $module,
                         'tag'       => $moduletag,
                         'tagstr'    => $tag,
                         'startpos'  => $start_pos,
                         'length'    => $taglength,
-                        'parm1'     => str_replace (']', '', $parms[1]),
+                        'parm1'     => str_replace (']', '', $tagid),
                         'parm2'     => $label
                     );
                     $tags[] = $newtag;
-
                 } else {
-                    /* Error tags do not match - return with no changes */
-                    return $content . $LANG32['32'];
+                    // Error: tags do not match - return with no changes
+                    return $content . $LANG32[32];
                 }
                 $prev_offset = $offset;
                 $offset = $end_pos;
-            } else {
-                $prev_offset = $end_pos;
-                $end_pos = $strlen;
-                $offset = $strlen;
             }
         }
     }
@@ -1034,7 +1217,8 @@
     if (count ($tags) > 0) {       // Found the [tag] - Now process them all
         foreach ($tags as $autotag) {
             $function = 'plugin_autotags_' . $autotag['module'];
-            if ($autotag['module'] == 'geeklog') {
+            if (($autotag['module'] == 'geeklog') AND
+                    (empty ($plugin) OR ($plugin == 'geeklog'))) {
                 $url = '';
                 $linktext = $autotag['parm2'];
                 if ($autotag['tag'] == 'story') {
@@ -1057,7 +1241,8 @@
                     $content = str_replace ($autotag['tagstr'], $filelink,
                                             $content);
                 }
-            } else if (function_exists ($function)) {
+            } else if (function_exists ($function) AND
+                    (empty ($plugin) OR ($plugin == $autotag['module']))) {
                 $content = $function ('parse', $content, $autotag);
             }
         }
@@ -1130,10 +1315,12 @@
 * @param    int      feed          feed id
 * @param    string   link          link to content on the site
 * @param    string   update_data   information for later up-to-date checks
+* @param    string   feedType      The type of feed (RSS/Atom etc)
+* @param    string   feedVersion   The version info of the feed.
 * @return   array                  content of feed
 *
 */
-function PLG_getFeedContent ($plugin, $feed, &$link, &$update_data)
+function PLG_getFeedContent ($plugin, $feed, &$link, &$update_data, $feedType, $feedVersion)
 {
     global $_PLUGINS;
 
@@ -1142,7 +1329,7 @@
     if (in_array ($plugin, $_PLUGINS)) {
         $function = 'plugin_getfeedcontent_' . $plugin;
         if (function_exists ($function)) {
-            $content = $function ($feed, $link, $update_data);
+            $content = $function ($feed, $link, $update_data, $feedType, $feedVersion);
         }
     }
 
@@ -1150,18 +1337,100 @@
 }
 
 /**
+  * Get extension tags for a feed. For example, some plugins may extened the
+  * available elements for an RSS 2.0 feed for articles. For some reason. This
+  * function allows that.
+  *
+  * @param  string  contentType     Type of feed content, article, event or a plugin specific type
+  * @param  string  contentID       Unique identifier of content item to extend
+  * @param  string  feedType        Type of feed format (RSS/Atom/etc)
+  * @param  string  feedVersion     Type of feed version (RSS 1.0 etc)
+  */
+function PLG_getFeedElementExtensions($contentType, $contentID, $feedType, $feedVersion)
+{
+    global $_PLUGINS;
+
+    $extensions = array();
+    foreach( $_PLUGINS as $plugin )
+    {
+        $function = 'plugin_feedElementExtensions_'.$plugin;
+        if (function_exists($function))
+        {
+            $extensions = array_merge($extensions, $function($contentType, $contentID, $feedType, $feedVersion));
+        }
+    }
+    return $extensions;
+}
+
+/**
+  * Get namespaces extensions for a feed. If a plugin has added extended tags
+  * to a feed, then it may also need to insert some extensions to the name
+  * spaces.
+  * @param string contentType   Type of feed content, article, event or a plugin specific type
+  * @param  string  feedType        Type of feed format (RSS/Atom/etc)
+  * @param  string  feedVersion     Type of feed version (RSS 1.0 etc)
+  */
+function PLG_getFeedNSExtensions($contentType, $feedType, $feedVersion)
+{
+    global $_PLUGINS;
+
+    $namespaces = array();
+    foreach( $_PLUGINS as $plugin )
+    {
+        $function = 'plugin_feedNSExtensions_'.$plugin;
+        if (function_exists($function))
+        {
+            $namespaces = array_merge($namespaces, $function($contentType, $feedType, $feedVersion));
+        }
+    }
+
+    return $namespaces;
+}
+
+/**
+  * Get meta tag extensions for a feed. Add extended tags to the meta
+  * area of a feed.
+  * @param  string contentType      Type of feed content, article, event or a plugin specific type
+  * @param  string  feedType        Type of feed format (RSS/Atom/etc)
+  * @param  string  feedVersion     Type of feed version (RSS 1.0 etc)
+  */
+function PLG_getFeedExtensionTags($contentType, $feedType, $feedVersion)
+{
+    global $_PLUGINS;
+
+    $tags = array();
+    foreach( $_PLUGINS as $plugin )
+    {
+        $function = 'plugin_feedExtensionTags_'.$plugin;
+        if (function_exists($function))
+        {
+            $tags = array_merge($tags, $function($contentType, $feedType, $feedVersion));
+        }
+    }
+
+    return $tags;
+}
+
+/**
 * The plugin is expected to check if the feed content needs to be updated.
 * This is called from COM_rdfUpToDateCheck() every time Geeklog's index.php
 * is displayed - it should try to be as efficient as possible ...
 *
-* @param    string   plugin   plugin name
-* @param    int      feed     feed id
-* @param    string   topic    "topic" of the feed - plugin specific
-* @param    string   limit    number of entries or number of hours
-* @return   bool              false = feed has to be updated, true = ok
+* @param    string  plugin          plugin name
+* @param    int     feed            feed id
+* @param    string  topic           "topic" of the feed - plugin specific
+* @param    string  limit           number of entries or number of hours
+* @param    string  updated_type    (optional) type of feed to update
+* @param    string  updated_topic   (optional) topic to update
+* @param    string  updated_id      (optional) entry id to update
+* @return   bool                    false = feed has to be updated, true = ok
+*
+* @note The presence of non-empty $updated_XXX parameters indicates that an
+*       existing entry has been changed. The plugin may therefore apply a
+*       different method to check if its feed has to be updated.
 *
 */
-function PLG_feedUpdateCheck ($plugin, $feed, $topic, $update_data, $limit)
+function PLG_feedUpdateCheck ($plugin, $feed, $topic, $update_data, $limit, $updated_type = '', $updated_topic = '', $updated_id = '')
 {
     global $_PLUGINS;
 
@@ -1170,7 +1439,8 @@
     if (in_array ($plugin, $_PLUGINS)) {
         $function = 'plugin_feedupdatecheck_' . $plugin;
         if (function_exists ($function)) {
-            $is_current = $function ($feed, $topic, $update_data, $limit);
+            $is_current = $function ($feed, $topic, $update_data, $limit,
+                            $updated_type, $updated_topic, $updated_id);
         }
     }
 
@@ -1214,15 +1484,15 @@
 
 /**
 * Allows plugins and Core GL Components to filter out spam.
-* The SPAMX Plugin is now part of the Geeklog Distribution
-* This plugin API will call the main function in the SPAMX plugin
+* The Spam-X Plugin is now part of the Geeklog Distribution
+* This plugin API will call the main function in the Spam-X plugin
 * but can also be used to call other plugins or custom functions
 * if available for filtering spam or content.
 *
 * @param string $content   Text to be filtered or checked for spam
 * @param integer $action   what to do if comment found
 * @return an error or formatted action HTML to return to calling program
-* 
+*
 * Note: Examples for formatted action HTML are a redirect formatted by COM_refresh
 * The spamx DeleteComment.Action does this.
 *
@@ -1241,7 +1511,233 @@
             }
         }
     }
+
     return false;
 }
 
+/**
+* Ask plugin for information about one of its items
+*
+* @param    string  $type       plugin type
+* @param    string  $id         ID of an item under the plugin's control
+* @param    string  $what       comma-separated list of item properties
+* @return   mixed               string or array of strings with the information
+*
+* Item properties that can be requested:
+* 'url'         - URL of the item
+* 'title'       - title of the item
+* 'excerpt'     - short description of the item
+* 'description' - full description of the item
+*
+* 'excerpt' and 'description' may return the same value. Properties should be
+* returned in the order they are listed in $what. Properties that are not
+* available should return an empty string.
+* Return false for errors (e.g. access denied, item does not exist, etc.).
+*
+*/
+function PLG_getItemInfo ($type, $id, $what)
+{
+    $args[1] = $id;
+    $args[2] = $what;
+
+    $function = 'plugin_getiteminfo_' . $type;
+
+    return PLG_callFunctionForOnePlugin ($function, $args);
+}
+
+/**
+* Geeklog is about to perform an operation on a trackback or pingback comment
+* to one of the items under the plugin's control and asks for the plugin's
+* permission to continue.
+*
+* Geeklog handles receiving and deleting trackback comments and pingbacks
+* for the plugin but since it doesn't know about the plugin's access control,
+* it has to ask the plugin to approve / reject such an operation.
+*
+* @param    string  $type       plugin type
+* @param    string  $id         an ID or URL, depending on the operation
+* @param    string  $operation  operation to perform
+*
+* $operation can be one of the following:
+* 'acceptByID'  - accept a trackback comment on item with ID $id
+*                 returns: true for accept, false for reject
+* 'acceptByURI' - accept a pingback comment on item at URL $id
+*                 returns: the item's ID for accept, false for reject
+* 'delete'      - is the current user allowed to delete item with ID $id?
+*                 returns: true for accept, false for reject
+*
+*/
+function PLG_handlePingComment ($type, $id, $operation)
+{
+    $args[1] = $id;
+    $args[2] = $operation;
+
+    $function = 'plugin_handlepingoperation_' . $type;
+
+    return PLG_callFunctionForOnePlugin ($function, $args);
+}
+
+
+/**
+* Check if plugins have a scheduled task they want to run
+* The interval between runs is determined by $_CONF['cron_schedule_interval']
+*/
+function PLG_runScheduledTask ()
+{
+    global $_PLUGINS;
+
+    if (function_exists ('CUSTOM_runSheduledTask')) {
+        CUSTOM_runSheduledTask();
+    }
+    foreach ($_PLUGINS as $pi_name) {
+        $function = 'plugin_runScheduledTask_' . $pi_name;
+        if (function_exists ($function)) {
+            $function ();
+        }
+    }
+}
+
+/**
+* "Generic" plugin API: Save item
+*
+* To be called (eventually) whenever Geeklog saves an item into the database.
+* Plugins can hook into this and modify the item (which is already in the
+* database but not visible on the site yet).
+*
+* Plugins can signal an error by returning an error message (otherwise, they
+* should return 'false' to signal "no errors"). In case of an error, all the
+* plugins called up to that point will be invoked through an "abort" call to
+* undo their changes.
+*
+* @param    string  $id     unique ID of the item
+* @param    string  $type   type of the item, e.g. 'article'
+* @returns  mixed           Boolean false for "no error", or an error msg text
+*
+*/
+function PLG_itemSaved ($id, $type)
+{
+    global $_PLUGINS;
+
+    $error = false;
+
+    $plugins = count ($_PLUGINS);
+    for ($save = 0; $save < $plugins; $save++) {
+        $function = 'plugin_itemsaved_' . $_PLUGINS[$save];
+        if (function_exists ($function)) {
+            $error = $function ($id, $type);
+            if ($error !== false) {
+                // plugin reported a problem - abort
+
+                for ($abort = 0; $abort < $save; $abort++) {
+                    $function = 'plugin_abortsave_' . $_PLUGINS[$abort];
+                    if (function_exists ($function)) {
+                        $function ($id, $type);
+                    }
+                }
+                break; // out of for($save) loop
+            }
+        }
+    }
+
+    return $error;
+}
+
+/**
+* Gets Geeklog blocks from plugins
+*
+* Returns data for blocks on a given side and, potentially, for
+* a given topic.
+*
+* @param        string      $side       Side to get blocks for (right or left for now)
+* @param        string      $topic      Only get blocks for this topic
+* @return   array of block data
+*
+*/
+function PLG_getBlocks( $side, $topic='')
+{
+    global $_PLUGINS;
+
+    $ret = array();
+    foreach ($_PLUGINS as $pi_name)
+    {
+        $function = 'plugin_getBlocks_' . $pi_name;
+        if (function_exists($function))
+        {
+            $items = $function($side, $topic='');
+            if (is_array ($items))
+            {
+                $ret = array_merge ($ret, $items);
+            }
+        }
+    }
+
+    // future code to do a lib-custom function
+    /*
+    if (function_exists('CUSTOM_getBlocks')) {
+       $cust_items .= CUSTOM_getBlocks($side, $topic='');
+       if (is_array ($cust_items)) {
+          $ret = array_merge ($ret, $cust_items)
+       }
+    }
+    */
+
+    return $ret;
+}
+
+/**
+* Get the URL of a plugin's icon
+*
+* @param    string  $type   plugin name
+* @return   string          URL of the icon
+*
+*/
+function PLG_getIcon ($type)
+{
+    global $_CONF;
+
+    $retval = '';
+
+    // try the "geticon" function first
+    $function = 'plugin_geticon_' . $type;
+    if (function_exists ($function)) {
+        $retval = $function ();
+    }
+
+    // if that didn't work, try the "cclabel" function
+    if (empty ($retval)) {
+        $function = 'plugin_cclabel_' . $type;
+        if (function_exists ($function)) {
+            $cclabel = $function ();
+            if (is_array ($cclabel)) {
+                if (!empty ($cclabel[2])) {
+                    $retval = $cclabel[2];
+                }
+            }
+        }
+    }
+
+    // lastly, search for the icon (assuming it's a GIF)
+    if (empty ($retval)) {
+        $icon = $_CONF['site_url'] . '/' . $type . '/images/' . $type . '.gif';
+        $fh = @fopen ($icon, 'r');
+        if ($fh === false) {
+            $icon = $_CONF['site_admin_url'] . '/plugins/' . $type . '/images/'
+                  . $type . '.gif';
+            $fh = @fopen ($icon, 'r');
+            if ($fh === false) {
+                // give up and us a generic icon
+                $retval = $_CONF['site_url'] . '/images/icons/plugins.gif';
+            } else {
+                $retval = $icon;
+                fclose ($fh);
+            }
+        } else {
+            $retval = $icon;
+            fclose ($fh);
+        }
+    }
+
+    return $retval;
+}
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-security.php 1.4.0sr5-1/cpanel-glprivate/system/lib-security.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-security.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-security.php	2006-08-08 02:39:06.000000000 -0500
@@ -8,11 +8,12 @@
 // |                                                                           |
 // | Geeklog security library.                                                 |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
 // | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
 // |          Mark Limburg     - mlimburg@users.sourceforge.net                |
 // |          Vincent Furia    - vmf@abtech.org                                |
+// |          Michael Jervis   - mike@fuckingbrit.com                          |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,20 +32,20 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-security.php,v 1.24 2004/12/29 08:41:24 dhaun Exp $
+// $Id: lib-security.php,v 1.47.2.1 2006/06/30 12:20:48 dhaun Exp $
 
 /**
 * This is the security library for Geeklog.  This is used to implement Geeklog's
-* *nix-style security system.  
+* *nix-style security system.
 *
 * Programming notes:  For items you need security on you need the following for
 * each record in your database:
-* owner_id        | mediumint(8)          
-* group_id        | mediumint(8)          
-* perm_owner      | tinyint(1) unsigned   
-* perm_group      | tinyint(1) unsigned   
-* perm_members    | tinyint(1) unsigned  
-* perm_anon       | tinyint(1) unsigned  
+* owner_id        | mediumint(8)
+* group_id        | mediumint(8)
+* perm_owner      | tinyint(1) unsigned
+* perm_group      | tinyint(1) unsigned
+* perm_members    | tinyint(1) unsigned
+* perm_anon       | tinyint(1) unsigned
 *
 * For display one function can handle most needs:
 * function SEC_hasAccess($owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon)
@@ -54,7 +55,7 @@
 * function SEC_getPermissionsHTML($perm_owner,$perm_group,$perm_members,$perm_anon)
 * This function displays the permissions widget with arrays for each permission
 * function SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon)
-* This function takes the permissions from the previous function and converts them into 
+* This function takes the permissions from the previous function and converts them into
 * an integer for saving back to the database.
 *
 */
@@ -62,8 +63,8 @@
 // Turn this on go get various debug messages from the code in this library
 $_SEC_VERBOSE = false;
 
-if (eregi ('lib-security.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-security.php') !== false) {
+    die ('This file can not be used on its own!');
 }
 
 /**
@@ -73,7 +74,7 @@
 * all the groups a user belongs to.  This function is called recursively
 * as groups can belong to other groups
 *
-* Note: this is an expensive function -- if you are concerned about speed it should only 
+* Note: this is an expensive function -- if you are concerned about speed it should only
 *       be used once at the beginning of a page.  The resulting array $_GROUPS can then be
 *       used through out the page.
 *
@@ -90,7 +91,7 @@
     if ($_SEC_VERBOSE) {
         COM_errorLog("****************in getusergroups(uid=$uid,usergroups=$usergroups,cur_grp_id=$cur_grp_id)***************",1);
     }
-    
+
     $groups = array();
 
     if (empty($uid)) {
@@ -119,7 +120,7 @@
 
         for ($i = 1; $i <= $nrows; $i++) {
             $A = DB_fetchArray($result);
-    
+
             if ($_SEC_VERBOSE) {
                 COM_errorLog('user is in group ' . $A['grp_name'],1);
             }
@@ -149,6 +150,45 @@
 }
 
 /**
+  * Checks to see if a user has admin access to the "Remote Users" group
+  * Admin users will probably not be members, but, User Admin, Root, and
+  * group admin will have access to it. However, we can not be sure what
+  * the group id for "Remote User" group is, because it's a later static
+  * group, and upgraded systems could have it in any id slot.
+  *
+  * @param      groupid     int     The id of a group, which might be the remote users group
+  * @param      groups      array   Array of group ids the user has access to.
+  * @return     boolean
+  */
+function SEC_groupIsRemoteUserAndHaveAccess($groupid, $groups)
+{
+    global $_TABLES, $_CONF;
+    if(!isset($_CONF['remote_users_group_id']))
+    {
+        $result = DB_Query("SELECT grp_id FROM {$_TABLES['groups']} WHERE grp_name='Remote Users'");
+        if( $result )
+        {
+            $row = DB_fetchArray( $result );
+            $_CONF['remote_users_group_id'] = $row['grp_id'];
+        }
+    }
+    if( $groupid == $_CONF['remote_users_group_id'] )
+    {
+        if( in_array( 1, $groups ) || // root
+            in_array( 9, $groups ) || // user admin
+            in_array( 11, $groups ) // Group admin
+          )
+        {
+            return true;
+        } else {
+            return false;
+        }
+    } else {
+        return false;
+    }
+}
+
+/**
 * Determines if user belongs to specified group
 *
 * This is part of the Geeklog security implementation. This function
@@ -364,7 +404,7 @@
 * Shows security control for an object
 *
 * This will return the HTML needed to create the security control see on the admin
-* screen for GL objects (i.e. stories, links, etc)
+* screen for GL objects (i.e. stories, etc)
 *
 * @param        int     $perm_owner     Permissions the owner has 1 = edit 2 = read 3 = read/edit
 * @param        int     $perm_group     Permission the group has
@@ -485,7 +525,7 @@
             $retval .= ',';
         }
     }
-    
+
     return $retval;
 }
 
@@ -504,7 +544,7 @@
 * @see  SEC_getPermissionValue
 *
 */
-function SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon) 
+function SEC_getPermissionValues($perm_owner,$perm_group,$perm_members,$perm_anon)
 {
     global $_SEC_VERBOSE;
 
@@ -539,7 +579,7 @@
     if ($_SEC_VERBOSE) {
         COM_errorlog('perm_owner = ' . $perm_owner, 1);
         COM_errorlog('perm_group = ' . $perm_group, 1);
-        COM_errorlog('perm_member = ' . $perm_member, 1);
+        COM_errorlog('perm_member = ' . $perm_members, 1);
         COM_errorlog('perm_anon = ' . $perm_anon, 1);
         COM_errorLog('**** Leaving SEC_getPermissionValues ****', 1);
     }
@@ -551,7 +591,7 @@
 * Converts permission array into numeric value
 *
 * This function converts an array of permissions for either
-* the owner/group/members/anon and returns the numeric 
+* the owner/group/members/anon and returns the numeric
 * equivalent.  This is typically called by the admin screens
 * to prepare the permissions to be save to the database
 *
@@ -560,7 +600,7 @@
 * @see SEC_getPermissionValues
 *
 */
-function SEC_getPermissionValue($perm_x) 
+function SEC_getPermissionValue($perm_x)
 {
     global $_SEC_VERBOSE;
 
@@ -641,4 +681,242 @@
     return $group;
 }
 
+/**
+* Attempt to login a user.
+*
+* Checks a users username and password against the database. Returns
+* users status.
+*
+* @param    string  $username   who is logging in?
+* @param    string  $password   what they claim is their password
+* @param    int     $uid        This is an OUTPUT param, pass by ref,
+*                               sends back UID inside it.
+* @return   int                 user status, -1 for fail.
+*
+*/
+function SEC_authenticate($username, $password, &$uid)
+{
+    global $_TABLES, $LANG01, $_CONF;
+
+    $result = DB_query( "SELECT status, passwd, email, uid FROM {$_TABLES['users']} WHERE username='$username' AND ((remoteservice is null) or (remoteservice = ''))" );
+    $tmp = mysql_errno();
+    $nrows = DB_numRows( $result );
+
+    if(( $tmp == 0 ) && ( $nrows == 1 ))
+    {
+        $U = DB_fetchArray( $result );
+        $uid = $U['uid'];
+        if ($U['status'] == USER_ACCOUNT_DISABLED)
+        {
+            return USER_ACCOUNT_DISABLED; // banned, jump to here to save an md5 calc.
+        } elseif ($U['passwd'] != md5( $password )) {
+            return -1; // failed login
+        } elseif ($U['status'] == USER_ACCOUNT_AWAITING_APPROVAL) {
+            //awaiting approval, jump to msg.
+            echo COM_refresh($_CONF['site_url'] . '/users.php?msg=70');
+            exit;
+        } elseif ($U['status'] == USER_ACCOUNT_AWAITING_ACTIVATION) {
+            // Awaiting user activation, activate:
+            DB_change($_TABLES['users'],'status',USER_ACCOUNT_ACTIVE,'username',$username);
+            return USER_ACCOUNT_ACTIVE;
+        } else {
+            return $U['status']; // just return their status
+        }
+    }
+    else
+    {
+        $tmp = $LANG01[32] . ": '" . $username . "'";
+        COM_errorLog( $tmp, 1 );
+        return -1;
+    }
+}
+
+/**
+* Return the current user status for a user.
+*
+* @param    int  $userid   Valid uid value.
+* @return   int            user status, 0-3
+*
+*/
+function SEC_checkUserStatus($userid)
+{
+    global $_TABLES, $_CONF;
+    // Check user status
+    $status = DB_getItem($_TABLES['users'], 'status', "uid=$userid");
+    // only do redirects if we aren't on users.php in a valid mode (logout or
+    // default)
+    if (!(eregi('users.php', $_SERVER['PHP_SELF'])))
+    {
+        $redirect = true;
+    } else {
+        if (($_REQUEST['mode'] == 'logout') || ($_REQUEST['mode'] == ''))
+        {
+            $redirect = false;
+        } else {
+            $redirect = true;
+        }
+    }
+    if ($status == USER_ACCOUNT_AWAITING_ACTIVATION)
+    {
+        DB_change($_TABLES['users'], 'status', USER_ACCOUNT_ACTIVE, 'uid', $userid);
+    } elseif ($status == USER_ACCOUNT_AWAITING_APPROVAL) {
+        // If we aren't on users.php with a default action then go to it
+        if ($redirect)
+        {
+            COM_accessLog("SECURITY: Attempted Cookie Session login from user awaiting approval $userid.");
+            echo COM_refresh($_CONF['site_url'] . '/users.php?msg=70');
+            exit;
+        }
+    } elseif ($status == USER_ACCOUNT_DISABLED) {
+        if ($redirect)
+        {
+            COM_accessLog("SECURITY: Attempted Cookie Session login from banned user $userid.");
+            echo COM_refresh($_CONF['site_url'] . '/users.php?msg=69');
+            exit;
+        }
+    }
+}
+
+/**
+  * Check to see if we can authenticate this user with a remote server
+  *
+  * A user has not managed to login localy, but has an @ in their user
+  * name and we have enabled distributed authentication. Firstly, try to
+  * see if we have cached the module that we used to authenticate them
+  * when they signed up (i.e. they've actualy changed their password
+  * elsewhere and we need to synch.) If not, then try to authenticate
+  * them with /every/ authentication module. If this suceeds, create
+  * a user for them.
+  *
+  * @param  string  $loginname Their username
+  * @param  string  $passwd The password entered
+  * @param  string  $server The server portion of $username
+  * @param  string  $uid OUTPUT parameter, pass it by ref to get uid back.
+  * @return int     user status, -1 for fail.
+  */
+function SEC_remoteAuthentication(&$loginname, $passwd, $service, &$uid)
+{
+    global $_TABLES, $_CONF;
+
+    /* First try a local cached login */
+    $remoteusername = addslashes($loginname);
+    $result = DB_query("SELECT passwd, status, uid FROM {$_TABLES['users']} WHERE remoteusername='$remoteusername' AND remoteservice='$service'");
+    $tmp = mysql_errno();
+    $nrows = DB_numRows($result);
+    if (($tmp == 0) && ($nrows == 1))
+    {
+        $U = DB_fetchArray($result);
+        $uid = $U['uid'];
+        $mypass = $U['passwd']; // also used to see if the user existed later.
+        if ($mypass == md5($passwd))
+        {
+            /* Valid password for cached user, return status */
+            return $U['status'];
+        }
+    }
+
+
+    if (file_exists($_CONF['path_system'].'classes/authentication/'.$service.'.auth.class.php'))
+    {
+        require_once($_CONF['path_system'].'classes/authentication/'.$service.'.auth.class.php');
+        $authmodule = new $service();
+        if ($authmodule->authenticate($loginname, $passwd))
+        {
+            /* check to see if they have logged in before: */
+            if (empty($mypass))
+            {
+                // no such user, create them
+
+                //Check to see if their remoteusername is unique locally
+                $checkName = DB_getItem($_TABLES['users'],'username',"username='$remoteusername'");
+                if ($checkName != '')
+                {
+                    // no, call custom function.
+                    if (function_exists(custom_uniqueRemoteUsername))
+                    {
+                        $loginname = custom_uniqueRemoteUsername($loginname, $service);
+                    }
+                }
+                USER_createAccount($loginname, $authmodule->email, md5($passwd), '', '', $remoteusername, $service);
+                $uid = DB_getItem ($_TABLES['users'], 'uid', "remoteusername = '$remoteusername' AND remoteservice='$service'");
+                // Store full remote account name:
+                $service = addslashes($service);
+                DB_Query("UPDATE {$_TABLES['users']} SET remoteusername='$remoteusername', remoteservice='$service', status=3 WHERE uid='$uid'");
+                // Add to remote users:
+                $remote_grp = DB_getItem ($_TABLES['groups'], 'grp_id',
+                                              "grp_name='Remote Users'");
+                DB_query ("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id,ug_uid) VALUES ($remote_grp, $uid)");
+                return 3; // Remote auth precludes usersubmission,
+                          // and integrates user activation, see?
+            } else {
+                // user existed, update local password:
+                DB_Change($_TABLES['users'], 'passwd', md5($passwd), array('remoteusername','remoteservice'), array($remoteusername,$service));
+                // and return their status
+                return DB_getItem($_TABLES['users'], 'status', "remoteusername='$remoteusername' AND remoteservice='$service'");
+            }
+        } else {
+            return -1;
+        }
+    } else {
+        return -1;
+    }
+}
+
+/**
+  * Add user to a group
+  *
+  * work in progress
+  *
+  * Rather self explanitory shortcut function
+  * Is this the right place for this, Dirk?
+  *
+  * @author Trinity L Bays <trinity93@steubentech.com>
+  *
+  * @param  string  $uid Their user id
+  * @param  string  $gname The group name
+  * @return bool    status, true or false.
+  */
+function SEC_addUserToGroup($uid, $gname)
+{
+    global $_TABLES, $_CONF;
+
+    $remote_grp = DB_getItem ($_TABLES['groups'], 'grp_id', "grp_name='". $gname ."'");
+    DB_query ("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id,ug_uid) VALUES ($remote_grp, $uid)");
+}
+
+/**
+* Set default permissions for an object
+*
+* @param    array   $A                  target array
+* @param    array   $use_permissions    permissions to set
+*
+*/
+function SEC_setDefaultPermissions (&$A, $use_permissions = array ())
+{
+    if (!is_array ($use_permissions) || (count ($use_permissions) != 4)) {
+        $use_permissions = array (3, 2, 2, 2);
+    }
+
+    // sanity checks
+    if (($use_permissions[0] > 3) || ($use_permissions[0] < 0) ||
+            ($use_permissions[0] == 1)) {
+        $use_permissions[0] = 3;
+    }
+    if (($use_permissions[1] > 3) || ($use_permissions[1] < 0) ||
+            ($use_permissions[1] == 1)) {
+        $use_permissions[1] = 2;
+    }
+    if (($use_permissions[2] != 2) && ($use_permissions[2] != 0)) {
+        $use_permissions[2] = 2;
+    }
+    if (($use_permissions[3] != 2) && ($use_permissions[3] != 0)) {
+        $use_permissions[3] = 2;
+    }
+
+    $A['perm_owner']   = $use_permissions[0];
+    $A['perm_group']   = $use_permissions[1];
+    $A['perm_members'] = $use_permissions[2];
+    $A['perm_anon']    = $use_permissions[3];
+}
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-sessions.php 1.4.0sr5-1/cpanel-glprivate/system/lib-sessions.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-sessions.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-sessions.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,13 +2,13 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | lib-sessions.php                                                          |
 // |                                                                           |
 // | Geeklog session library.                                                  |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
 // | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
 // |          Mark Limburg     - mlimburg@users.sourceforge.net                |
@@ -30,7 +30,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-sessions.php,v 1.33 2004/09/29 08:04:43 dhaun Exp $
+// $Id: lib-sessions.php,v 1.39.2.2 2006/06/30 12:20:48 dhaun Exp $
 
 /**
 * This is the session management library for Geeklog.  Some of this code was
@@ -41,8 +41,8 @@
 // Turn this on if you want to see various debug messages from this library
 $_SESS_VERBOSE = false;
 
-if (eregi ('lib-sessions.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-sessions.php') !== false) {
+    die ('This file can not be used on its own!');
 }
 
 if (empty ($_CONF['cookiedomain'])) {
@@ -78,7 +78,7 @@
 */
 function SESS_sessionCheck()
 {
-    global $_CONF, $_TABLES, $_USER, $_SESS_VERBOSE, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS;
+    global $_CONF, $_TABLES, $_USER, $_SESS_VERBOSE;
 
     if ($_SESS_VERBOSE) {
         COM_errorLog("***Inside SESS_sessionCheck***",1);
@@ -94,19 +94,21 @@
     // Check for a cookie on the users's machine.  If the cookie exists, build
     // an array of the users info and setup the theme.
     
-    if (isset($HTTP_COOKIE_VARS[$_CONF['cookie_session']])) {
-        $sessid = $HTTP_COOKIE_VARS[$_CONF['cookie_session']];
+    if (isset ($_COOKIE[$_CONF['cookie_session']])) {
+        $sessid = COM_applyFilter ($_COOKIE[$_CONF['cookie_session']]);
         if ($_SESS_VERBOSE) {
             COM_errorLog("got $sessid as the session id from lib-sessions.php",1);
         }
 
-        $userid = SESS_getUserIdFromSession($sessid, $_CONF['session_cookie_timeout'], $HTTP_SERVER_VARS['REMOTE_ADDR'], $_CONF['cookie_ip']);
+        $userid = SESS_getUserIdFromSession($sessid, $_CONF['session_cookie_timeout'], $_SERVER['REMOTE_ADDR'], $_CONF['cookie_ip']);
 
         if ($_SESS_VERBOSE) {
             COM_errorLog("Got $userid as User ID from the session ID",1);
         }
-       
-        if ($userid) {
+        
+        if ($userid > 1) {
+            // Check user status
+            SEC_checkUserStatus($userid);
             $user_logged_in = 1;
             SESS_updateSessionTime($sessid, $_CONF['cookie_ip']);
             $userdata = SESS_getUserDataFromId($userid);
@@ -119,24 +121,30 @@
             $_USER['auto_login'] = false;
         } else {
             // Session probably expired, now check permanent cookie
-            if (isset($HTTP_COOKIE_VARS[$_CONF['cookie_name']])) {
-                $userid = $HTTP_COOKIE_VARS[$_CONF['cookie_name']];
-                if (empty ($userid) || !is_numeric ($userid)) {
+            if (isset ($_COOKIE[$_CONF['cookie_name']])) {
+                $userid = $_COOKIE[$_CONF['cookie_name']];
+                if (empty ($userid) || ($userid == 'deleted')) {
                     unset ($userid);
                 } else {
-                    $cookie_password = $HTTP_COOKIE_VARS[$_CONF['cookie_password']];
-                    $userpass = DB_getItem($_TABLES['users'],'passwd',"uid = $userid");
+                    $userid = COM_applyFilter ($userid, true);
+                    $cookie_password = '';
+                    $userpass = '';
+                    if ($userid > 1) {
+                        $cookie_password = $_COOKIE[$_CONF['cookie_password']];
+                        $userpass = DB_getItem ($_TABLES['users'], 'passwd',
+                                                "uid = $userid");
+                    }
                     if (empty ($cookie_password) || ($cookie_password <> $userpass)) {
-                        //User may have modified their UID in cookie, ignore them
-                    } else {
-                        if ($userid) {
-                            $user_logged_in = 1;
-                            $sessid = SESS_newSession($userid, $HTTP_SERVER_VARS['REMOTE_ADDR'], $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
-                            SESS_setSessionCookie($sessid, $_CONF['session_cookie_timeout'], $_CONF['cookie_session'], $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
-                            $userdata = SESS_getUserDataFromId($userid);
-                            $_USER = $userdata;
-                            $_USER['auto_login'] = true;
-                        }
+                        // User may have modified their UID in cookie, ignore them
+                    } else if ($userid > 1) {
+                        // Check user status
+                        SEC_checkUserStatus ($userid);
+                        $user_logged_in = 1;
+                        $sessid = SESS_newSession ($userid, $_SERVER['REMOTE_ADDR'], $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
+                        SESS_setSessionCookie ($sessid, $_CONF['session_cookie_timeout'], $_CONF['cookie_session'], $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
+                        $userdata = SESS_getUserDataFromId ($userid);
+                        $_USER = $userdata;
+                        $_USER['auto_login'] = true;
                     }
                 }
             }
@@ -148,57 +156,43 @@
 
         // Check if the persistent cookie exists
 
-        if (isset($HTTP_COOKIE_VARS[$_CONF['cookie_name']])) {
+        if (isset ($_COOKIE[$_CONF['cookie_name']])) {
             // Session cookie doesn't exist but a permanent cookie does.
             // Start a new session cookie;
             if ($_SESS_VERBOSE) {
                 COM_errorLog('perm cookie found from lib-sessions.php',1);
             }
 
-            $userid = $HTTP_COOKIE_VARS[$_CONF['cookie_name']];
-            if (!is_numeric ($userid)) {
+            $userid = $_COOKIE[$_CONF['cookie_name']];
+            if (empty ($userid) || ($userid == 'deleted')) {
                 unset ($userid);
             } else {
-                $userpass = DB_getItem($_TABLES['users'],'passwd',"uid = $userid");
-                $cookie_password = $HTTP_COOKIE_VARS[$_CONF['cookie_password']];
+                $userid = COM_applyFilter ($userid, true);
+                $cookie_password = '';
+                $userpass = '';
+                if ($userid > 1) {
+                    $userpass = DB_getItem ($_TABLES['users'], 'passwd',
+                                            "uid = $userid");
+                    $cookie_password = $_COOKIE[$_CONF['cookie_password']];
+                }
                 if (empty ($cookie_password) || ($cookie_password <> $userpass)) {
                     // User could have modified UID in cookie, don't do shit
-                } else {
-                    if ($userid) {
-                        $user_logged_in = 1;
-
-                        // Create new session and write cookie
-                        $sessid = SESS_newSession($userid, $HTTP_SERVER_VARS['REMOTE_ADDR'], $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
-                        SESS_setSessionCookie($sessid, $_CONF['session_cookie_timeout'], $_CONF['cookie_session'], $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
-                        $userdata = SESS_getUserDataFromId($userid);
-                        $_USER = $userdata;
-                        $_USER['auto_login'] = true;
-                    }
+                } else if ($userid > 1) {
+                    // Check user status
+                    SEC_checkUserStatus ($userid);
+                    $user_logged_in = 1;
+
+                    // Create new session and write cookie
+                    $sessid = SESS_newSession ($userid, $_SERVER['REMOTE_ADDR'], $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
+                    SESS_setSessionCookie ($sessid, $_CONF['session_cookie_timeout'], $_CONF['cookie_session'], $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
+                    $userdata = SESS_getUserDataFromId ($userid);
+                    $_USER = $userdata;
+                    $_USER['auto_login'] = true;
                 }
             }
         }
     }
 
-    // Set expire dates: one for a year, one for 10 minutes
-    $expiredate1 = time() + 3600 * 24 * 365;
-    $expiredate2 = time() + 600;
-
-    // Update the LastVisit cookie.
-    // This cookie is updated each time auth.inc.php runs
-    setcookie($_CONF['cookie_lastvisit'], time(), $expiredate1,  $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
-
-    // Set LastVisitTemp cookie, which only gets the time from the LastVisit
-    // cookie if it does not exist yet otherwise, it gets the time from the
-    // LastVisitTemp cookie
-    if (!isset($HTTP_COOKIE_VARS[$_CONF['cookie_lastvisittemp']])) {
-        $temptime = $HTTP_COOKIE_VARS[$_CONF['cookie_lastvisit']];
-    } else {
-        $temptime = $HTTP_COOKIE_VARS[$_CONF['cookie_lastvisittemp']];
-    }
-
-    // Set cookie.
-    setcookie($_CONF['cookie_lastvisittemp'], $temptime ,$expiredate2, $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
-
     if ($_SESS_VERBOSE) {
         COM_errorLog("***Leaving SESS_sessionCheck***",1);
     }
@@ -221,7 +215,7 @@
 */
 function SESS_newSession($userid, $remote_ip, $lifespan, $md5_based=0) 
 {
-    global $_TABLES, $_CONF, $_SESS_VERBOSE, $HTTP_COOKIE_VARS;
+    global $_TABLES, $_CONF, $_SESS_VERBOSE;
 
     if ($_SESS_VERBOSE) {
         COM_errorLog("*************inside new_session*****************",1);
@@ -243,7 +237,7 @@
 
     $currtime = (string) (time());
     $expirytime = (string) (time() - $lifespan);
-    if (!isset($HTTP_COOKIE_VARS[$_CONF['cookie_session']])) {
+    if (!isset($_COOKIE[$_CONF['cookie_session']])) {
         // ok, delete any old sessons for this user
         DB_query("DELETE FROM {$_TABLES['sessions']} WHERE uid = $userid");
     } else {
@@ -362,11 +356,7 @@
     }
 
     if (!$row) {
-        if (isset($HTTP_COOKIE_VARS[$_CONF['cookie_name']])) {
-            return $HTTP_COOKIE_VARS[$_CONF['cookie_name']];
-        } else {
-            return 0;
-        }
+        return 0;
     } else {
         return $row['uid'];
     }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-story.php 1.4.0sr5-1/cpanel-glprivate/system/lib-story.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-story.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-story.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,19 +2,19 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | lib-story.php                                                             |
 // |                                                                           |
 // | Story-related functions needed in more than one place.                    |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
-// |          Vincent Furia     - vinny01@users.sourceforge.net                |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -33,10 +33,16 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 // 
-// $Id: lib-story.php,v 1.15 2004/12/31 10:31:35 dhaun Exp $
+// $Id: lib-story.php,v 1.56.2.1 2006/06/30 12:20:48 dhaun Exp $
 
-if (eregi ('lib-story.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-story.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+if( $_CONF['allow_user_photo'] )
+{
+    // only needed for the USER_getPhoto function
+    require_once ($_CONF['path_system'] . 'lib-user.php');
 }
 
 
@@ -47,46 +53,82 @@
 * submit.php, and admin/story.php (when previewing)
 *
 * @param    array       $A      Data to display as an article (associative array from record from gl_stories)
-* @param    string      $index  whether or not this is the index page if 'n' then compact display for index page else display full article
+* @param    string      $index  whether or not this is the index page if 'n' then compact display for index page else display full article, also: 'p' = preview
 * @return   string      Article as formated HTML
 *
 * Note: Formerly named COM_article
 *
 */
-function STORY_renderArticle( $A, $index='', $storytpl='storytext.thtml' )
+function STORY_renderArticle( $A, $index='', $storytpl='storytext.thtml', $query='' )
 {
-    global $_CONF, $_TABLES, $_USER, $LANG01, $LANG05, $LANG11, $_THEME_URL, $mode;
+    global $_CONF, $_TABLES, $_USER, $LANG01, $LANG05, $LANG11, $LANG_TRB,
+           $_IMAGE_TYPE, $mode;
+
+    if( empty( $storytpl ))
+    {
+        $storytpl = 'storytext.thtml';
+    }
 
     $curtime = COM_getUserDateTimeFormat( $A['day'] );
     $A['day'] = $curtime[0];
 
+    $introtext = stripslashes( $A['introtext'] );
+    $bodytext = '';
+    if( !empty( $A['bodytext'] ))
+    {
+        $bodytext  = stripslashes( $A['bodytext'] );
+    }
+
     // If plain text then replace newlines with <br> tags
     if( $A['postmode'] == 'plaintext' )
     {
-        $A['introtext'] = nl2br( $A['introtext'] );
-        $A['bodytext'] = nl2br( $A['bodytext'] );
+        $introtext = nl2br( $introtext );
+        if( !empty( $bodytext )) {
+            $bodytext  = nl2br( $bodytext );
+        }
     }
 
-    $A['introtext'] = str_replace( '{', '&#123;', $A['introtext'] );
-    $A['introtext'] = str_replace( '}', '&#125;', $A['introtext'] );
-    $A['bodytext'] = str_replace( '{', '&#123;', $A['bodytext'] );
-    $A['bodytext'] = str_replace( '}', '&#125;', $A['bodytext'] );
+    $introtext = str_replace( '$', '&#36;', $introtext );
+    $introtext = str_replace( '{', '&#123;', $introtext );
+    $introtext = str_replace( '}', '&#125;', $introtext );
+
+   // Replace any plugin autolink tags
+    $introtext = PLG_replaceTags( $introtext );
+
+    if( !empty( $bodytext ))
+    {
+        $bodytext = str_replace( '$', '&#36;', $bodytext );
+        $bodytext = str_replace( '{', '&#123;', $bodytext );
+        $bodytext = str_replace( '}', '&#125;', $bodytext );
+
+        $bodytext = PLG_replaceTags( $bodytext );
+    }
+
+    if( !empty( $query ))
+    {
+        $introtext = COM_highlightQuery( $introtext, $query );
+        $bodytext  = COM_highlightQuery( $bodytext, $query );
+    }
+
+    $A['title'] = str_replace( '$', '&#36;', $A['title'] );
 
     $article = new Template( $_CONF['path_layout'] );
     $article->set_file( array(
             'article'          => $storytpl,
             'bodytext'         => 'storybodytext.thtml',
             'featuredarticle'  => 'featuredstorytext.thtml',
-            'featuredbodytext'=>'featuredstorybodytext.thtml',
-            'archivearticle'=>'archivestorytext.thtml',
-            'archivebodytext'=>'archivestorybodytext.thtml'
+            'featuredbodytext' => 'featuredstorybodytext.thtml',
+            'archivearticle'   => 'archivestorytext.thtml',
+            'archivebodytext'  => 'archivestorybodytext.thtml'
             ));
 
     $article->set_var( 'layout_url', $_CONF['layout_url'] );
     $article->set_var( 'site_url', $_CONF['site_url'] );
     $article->set_var( 'story_date', $A['day'] );
-    $article->set_var( 'lang_views', $LANG01[106] );
-    $article->set_var( 'story_hits', $A['hits'] );
+    if( $_CONF['hideviewscount'] != 1 ) {
+        $article->set_var( 'lang_views', $LANG01[106] );
+        $article->set_var( 'story_hits', COM_NumberFormat( $A['hits'] ));
+    }
     $article->set_var( 'story_id', $A['sid'] );
 
     if( $_CONF['contributedbyline'] == 1 )
@@ -114,32 +156,21 @@
             $article->set_var( 'end_contributedby_anchortag', '</a>' );
             $article->set_var( 'contributedby_url', $_CONF['site_url']
                     . '/users.php?mode=profile&amp;uid=' . $A['uid'] );
+        }
 
-            $photo = $A['photo'];
-            if( !empty( $photo ))
-            {
-                if( empty( $fullname ))
-                {
-                    $altname = $username;
-                }
-                else
-                {
-                    $altname = $fullname;
-                }
-                $article->set_var( 'contributedby_photo', '<img src="'
-                        . $_CONF['site_url'] . '/images/userphotos/' . $photo
-                        . '" alt="' . $altname . '">' );
-                $article->set_var( 'camera_icon', '<a href="'
-                        . $_CONF['site_url']
-                        . '/users.php?mode=profile&amp;uid=' . $A['uid']
-                        . '"><img src="' . $_CONF['layout_url']
-                        . '/images/smallcamera.gif" border="0" alt=""></a>' );
-            }
-            else
-            {
-                $article->set_var( 'contributedby_photo', '' );
-                $article->set_var( 'camera_icon', '' );
-            }
+        $photo = '';
+        if( $_CONF['allow_user_photo'] )
+        {
+            $photo = USER_getPhoto( $A['uid'], $A['photo'] );
+        }
+        if( !empty( $photo ))
+        {
+            $article->set_var( 'contributedby_photo', $photo );
+            $article->set_var( 'camera_icon', '<a href="' . $_CONF['site_url']
+                    . '/users.php?mode=profile&amp;uid=' . $A['uid']
+                    . '"><img src="' . $_CONF['layout_url']
+                    . '/images/smallcamera.' . $_IMAGE_TYPE
+                    . '" border="0" alt=""></a>' );
         }
         else
         {
@@ -152,67 +183,111 @@
     $article->set_var( 'story_topic_id', $A['tid'] );
     $article->set_var( 'story_topic_name', $topicname );
 
-    if( $_USER['noicons'] != 1 AND $A['show_topic_icon'] == 1 )
+    $topicurl = $_CONF['site_url'] . '/index.php?topic=' . $A['tid'];
+    if(( !isset( $_USER['noicons'] ) OR ( $_USER['noicons'] != 1 )) AND
+            $A['show_topic_icon'] == 1 )
     {
-        $topicurl = $_CONF['site_url'] . '/index.php?topic=' . $A['tid'];
         if( !empty( $A['imageurl'] ))
         {
-            if( isset( $_THEME_URL ))
-            {
-                $imagebase = $_THEME_URL;
-            }
-            else
-            {
-                $imagebase = $_CONF['site_url'];
-            }
+            $imageurl = COM_getTopicImageUrl( $A['imageurl'] );
             $topicimage = '<img align="' . $_CONF['article_image_align']
-                    . '" src="' . $imagebase . $A['imageurl'] . '" alt="'
-                    . $topicname . '" title="' . $topicname . '" border="0">';
+                        . '" src="' . $imageurl . '" alt="' . $topicname
+                        . '" title="' . $topicname . '" border="0">';
             $article->set_var( 'story_anchortag_and_image', '<a href="'
-                    . $topicurl . '">' . $topicimage . '</a>' );
+                        . $topicurl . '" rel="category tag">' . $topicimage
+                        . '</a>' );
             $article->set_var( 'story_topic_image', $topicimage );
         }
-        $article->set_var( 'story_topic_url', $topicurl );
     }
-
-    $A['title'] = str_replace( '$', '&#36;', $A['title'] );
-    $A['introtext'] = str_replace( '$', '&#36;', $A['introtext'] );
-    $A['bodytext'] = str_replace( '$', '&#36;', $A['bodytext'] );
+    $article->set_var( 'story_topic_url', $topicurl );
 
     $recent_post_anchortag = '';
     $articleUrl = COM_buildUrl( $_CONF['site_url'] . '/article.php?story='
                                 . $A['sid'] );
-    $introtext = stripslashes( $A['introtext'] );
-    $introtext = PLG_replacetags($introtext);   // Replace any plugin autolink tags
+    $article->set_var( 'story_title', stripslashes( $A['title'] ));
 
-    if( $index == 'n' )
+    $show_comments = true;
+    if(( $index == 'n' ) || ( $index == 'p' ))
     {
-        $article->set_var( 'story_title', stripslashes( $A['title'] ));
-        if( empty( $A['bodytext'] ))
+        if( empty( $bodytext ))
         {
             $article->set_var( 'story_introtext', $introtext );
             $article->set_var( 'story_text_no_br', $introtext );
         }
         else
         {
-            $bodytext = stripslashes( $A['bodytext'] );
-            $bodytext = PLG_replacetags($bodytext);   // Replace any plugin autolink tags
+            if(( $_CONF['allow_page_breaks'] == 1 ) and ( $index == 'n' ))
+            {
+                $story_page = 1;
+
+                // page selector
+                if( is_numeric( $mode ))
+                {
+                    $story_page = $mode;
+                    if( $story_page <= 0 )
+                    {
+                        $story_page = 1;
+                        $mode = 0;
+                    }
+                    elseif( $story_page > 1 )
+                    {
+                        $introtext = '';
+                    }
+                }
+                $article_array = explode( '[page_break]', $bodytext );
+                $pagelinks = COM_printPageNavigation( $articleUrl, $story_page,
+                                                      count( $article_array ),
+                                                      'mode=',
+                                                      $_CONF['url_rewrite'],
+                                                      $LANG01[118]
+                                                      );
+                if( count( $article_array ) > 1 )
+                {
+                    $bodytext = $article_array[$story_page - 1];
+                }
+                $article->set_var( 'page_selector', $pagelinks );
+
+                if (
+                     ( ($_CONF['page_break_comments'] == 'last')  and
+                       ($story_page < count($article_array)) )
+                    or
+                     ( ($_CONF['page_break_comments'] == 'first')  and
+                       ($story_page!=1) )
+                   )
+                {
+                    $show_comments = false;
+                }
+            }
+            
             $article->set_var( 'story_introtext', $introtext . '<br><br>'
                                . $bodytext );
             $article->set_var( 'story_text_no_br', $introtext . $bodytext );
         }
+        $article->set_var( 'story_introtext_only', $introtext );
+        $article->set_var( 'story_bodytext_only', $bodytext );
+
+        if(( $_CONF['trackback_enabled'] || $_CONF['pingback_enabled'] ) && 
+                SEC_hasRights( 'story.ping' ))
+        {
+            $url = $_CONF['site_admin_url']
+                 . '/trackback.php?mode=sendall&amp;id=' . $A['sid'];
+            $article->set_var( 'send_trackback_link', '<a href="' . $url . '">'
+                 . $LANG_TRB['send_trackback'] . '</a>' );
+            $article->set_var( 'send_trackback_url', $url );
+            $article->set_var( 'lang_send_trackback_text',
+                               $LANG_TRB['send_trackback'] );
+        }
     }
     else
     {
-        $article->set_var( 'story_title', stripslashes( $A['title'] ));
         $article->set_var( 'story_introtext', $introtext );
         $article->set_var( 'story_text_no_br', $introtext );
 
-        if( !empty( $A['bodytext'] ))
+        if( !empty( $bodytext ))
         {
             $article->set_var( 'lang_readmore', $LANG01[2] );
             $article->set_var( 'lang_readmore_words', $LANG01[62] );
-            $numwords = sizeof( explode( ' ', strip_tags( $A['bodytext'] )));
+            $numwords = COM_NumberFormat (sizeof( explode( ' ', strip_tags( $bodytext ))));
             $article->set_var( 'readmore_words', $numwords );
 
             $article->set_var( 'readmore_link', '<a href="' . $articleUrl . '">'
@@ -222,16 +297,22 @@
                     . $articleUrl . '">' );
             $article->set_var( 'end_readmore_anchortag', '</a>' );
         }
+        $article->set_var( 'start_storylink_anchortag', '<a href="'
+                . $articleUrl . '" class="non-ul">' );
+        $article->set_var( 'end_storylink_anchortag', '</a>' );
 
-        if( $A['commentcode'] >= 0 )
+        if(( $A['commentcode'] >= 0 ) and ( $show_comments ))
         {
             $commentsUrl = COM_buildUrl( $_CONF['site_url']
                     . '/article.php?story=' . $A['sid'] ) . '#comments';
             $article->set_var( 'comments_url', $commentsUrl );
-            $article->set_var( 'comments_text', $A['comments'] . ' '
-                                                . $LANG01[3] );
-            $article->set_var( 'comments_count', $A['comments'] );
+            $article->set_var( 'comments_text',
+                    COM_numberFormat( $A['comments'] ) . ' ' . $LANG01[3] );
+            $article->set_var( 'comments_count',
+                    COM_numberFormat ( $A['comments'] ));
             $article->set_var( 'lang_comments', $LANG01[3] );
+            $article->set_var( 'comments_with_count',
+                    sprintf( $LANG01[121], COM_numberFormat( $A['comments'] )));
 
             if( $A['comments'] > 0 )
             {
@@ -254,15 +335,40 @@
             }
             $postCommentUrl = $_CONF['site_url'] . '/comment.php?sid='
                             . $A['sid'] . '&amp;pid=0&amp;type=article';
-            $article->set_var( 'post_comment_link',' <a href="'
+            $article->set_var( 'post_comment_link','<a href="'
                     . $postCommentUrl . '">' . $LANG01[60] . '</a>' );
             $article->set_var( 'lang_post_comment', $LANG01[60] );
             $article->set_var( 'start_post_comment_anchortag',
-                               ' <a href="' . $postCommentUrl . '">' );
+                               '<a href="' . $postCommentUrl . '">' );
             $article->set_var( 'end_post_comment_anchortag', '</a>' );
         }
 
-        if( $_CONF['hideemailicon'] == 1 )
+        if(( $_CONF['trackback_enabled'] || $_CONF['pingback_enabled'] ) &&
+                ( $A['trackbackcode'] >= 0 ) && ( $show_comments ))
+        {
+            $num_trackbacks = COM_numberFormat( $A['trackbacks'] );
+            $trackbacksUrl = COM_buildUrl( $_CONF['site_url']
+                    . '/article.php?story=' . $A['sid'] ) . '#trackback';
+            $article->set_var( 'trackbacks_url', $trackbacksUrl );
+            $article->set_var( 'trackbacks_text', $num_trackbacks . ' '
+                                                  . $LANG_TRB['trackbacks'] );
+            $article->set_var( 'trackbacks_count', $num_trackbacks );
+            $article->set_var( 'lang_trackbacks', $LANG_TRB['trackbacks'] );
+            $article->set_var( 'trackbacks_with_count',
+                               sprintf( $LANG01[122], $num_trackbacks ));
+
+            if( $A['trackbacks'] > 0 )
+            {
+                $article->set_var( 'start_trackbacks_anchortag', '<a href="'
+                        . $trackbacksUrl . '">' );
+                $article->set_var( 'end_trackbacks_anchortag', '</a>' );
+            }
+        }
+
+        if(( $_CONF['hideemailicon'] == 1 ) ||
+           ( empty( $_USER['username'] ) &&
+                (( $_CONF['loginrequired'] == 1 ) ||
+                 ( $_CONF['emailstoryloginrequired'] == 1 ))))
         {
             $article->set_var( 'email_icon', '' );
         }
@@ -271,9 +377,9 @@
             $emailUrl = $_CONF['site_url'] . '/profiles.php?sid=' . $A['sid']
                       . '&amp;what=emailstory';
             $article->set_var( 'email_icon', '<a href="' . $emailUrl . '">'
-                . '<img src="' . $_CONF['layout_url']
-                . '/images/mail.gif" alt="' . $LANG01[64]
-                . '" title="' . $LANG11[2] . '" border="0"></a>' );
+                . '<img src="' . $_CONF['layout_url'] . '/images/mail.'
+                . $_IMAGE_TYPE . '" alt="' . $LANG01[64] . '" title="'
+                . $LANG11[2] . '" border="0"></a>' );
             $article->set_var( 'email_story_url', $emailUrl );
             $article->set_var( 'lang_email_story', $LANG11[2] );
             $article->set_var( 'lang_email_story_alt', $LANG01[64] );
@@ -288,8 +394,8 @@
         {
             $article->set_var( 'print_icon', '<a href="' . $printUrl . '">'
                 . '<img border="0" src="' . $_CONF['layout_url']
-                . '/images/print.gif" alt="' . $LANG01[65] . '" title="'
-                . $LANG11[3] . '"></a>' );
+                . '/images/print.' . $_IMAGE_TYPE . '" alt="' . $LANG01[65]
+                . '" title="' . $LANG11[3] . '"></a>' );
             $article->set_var( 'print_story_url', $printUrl );
             $article->set_var( 'lang_print_story', $LANG11[3] );
             $article->set_var( 'lang_print_story_alt', $LANG01[65] );
@@ -299,7 +405,9 @@
             $pdfUrl = $_CONF['site_url'] . '/pdfgenerator.php?pageType=2&amp;'
                     . 'pageData=' . urlencode( $printUrl );
             $article->set_var( 'pdf_icon',
-                sprintf( '<a href="%s"><img border="0" src="%s/images/pdf.gif" alt="%s" title="%s"></a>', $pdfUrl, $_CONF['layout_url'], $LANG01[111], $LANG11[5] ));
+                sprintf( '<a href="%s"><img border="0" src="%s/images/pdf.'
+                         . $_IMAGE_TYPE . '" alt="%s" title="%s"></a>',
+                         $pdfUrl, $_CONF['layout_url'], $LANG01[111], $LANG11[5] ));
             $article->set_var( 'pdf_story_url', $pdfUrl );
             $article->set_var( 'lang_pdf_story', $LANG11[5] );
             $article->set_var( 'lang_pdf_story_alt', $LANG01[111] );
@@ -312,7 +420,7 @@
     $article->set_var( 'article_url', $articleUrl );
     $article->set_var( 'recent_post_anchortag', $recent_post_anchortag );
 
-    if( SEC_hasAccess( $A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon'] ) == 3 AND SEC_hasrights( 'story.edit' ))
+    if( SEC_hasAccess( $A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon'] ) == 3 AND SEC_hasrights( 'story.edit' ) AND ( $index != 'p' ))
     {
         $article->set_var( 'edit_link', '<a href="' . $_CONF['site_admin_url']
                 . '/story.php?mode=edit&amp;sid=' . $A['sid'] . '">'
@@ -320,24 +428,25 @@
         $article->set_var( 'edit_url', $_CONF['site_admin_url']
                 . '/story.php?mode=edit&amp;sid=' . $A['sid'] );
         $article->set_var( 'lang_edit_text',  $LANG01[4] );
+        $editicon = $_CONF['layout_url'] . '/images/edit.' . $_IMAGE_TYPE;
         $article->set_var( 'edit_icon', '<a href="' . $_CONF['site_admin_url']
                 . '/story.php?mode=edit&amp;sid=' . $A['sid'] . '"><img src="'
-                . $_CONF['layout_url'] . '/images/edit.gif" alt="' . $LANG01[4]
-                . '" title="' . $LANG01[4] . '" border="0"></a>' );
-        $article->set_var( 'edit_image',  '<img src="' . $_CONF['layout_url']
-                . '/images/edit.gif" alt="' . $LANG01[4] . '" title="'
-                . $LANG01[4] . '" border="0">' );
+                . $editicon . '" alt="' . $LANG01[4] . '" title="' . $LANG01[4]
+                . '" border="0"></a>' );
+        $article->set_var( 'edit_image',  '<img src="' . $editicon . '" alt="'
+                . $LANG01[4] . '" title="' . $LANG01[4] . '" border="0">' );
     }
 
-    $t = explode(' ',$A['expire']);     // Need to convert text date/time to a timestamp
-    $archiveDateTime = COM_convertDate2Timestamp($t[0],$t[1]);
+    // Need to convert text date/time to a timestamp
+    $t = explode( ' ', $A['expire'] );
+    $archiveDateTime = COM_convertDate2Timestamp( $t[0], $t[1] );
     if( $A['featured'] == 1 )
     {
         $article->set_var( 'lang_todays_featured_article', $LANG05[4] );
         $article->parse( 'story_bodyhtml', 'featuredbodytext', true );
         $article->parse( 'finalstory', 'featuredarticle' );
     }
-    elseif ($A['statuscode'] == 10 AND $archiveDateTime <= time() )
+    elseif( $A['statuscode'] == 10 AND $archiveDateTime <= time() )
     {
         $article->parse( 'story_bodyhtml', 'archivestorybodytext', true );
         $article->parse( 'finalstory', 'archivearticle' );
@@ -493,4 +602,332 @@
     DB_delete ($_TABLES['article_images'], 'ai_sid', $sid);
 }
 
+/**
+* Return information for a story
+*
+* This is the story equivalent of PLG_getItemInfo. See lib-plugins.php for
+* details.
+*
+* @param    string  $sid    story ID
+* @param    string  $what   comma-separated list of story properties
+* @return   mixed           string or array of strings with the information
+*
+*/
+function STORY_getItemInfo ($sid, $what)
+{
+    global $_CONF, $_TABLES;
+
+    $properties = explode (',', $what);
+    $fields = array ();
+    foreach ($properties as $p) {
+        switch ($p) {
+            case 'description':
+                $fields[] = 'introtext';
+                $fields[] = 'bodytext';
+                break;
+            case 'excerpt':
+                $fields[] = 'introtext';
+                break;
+            case 'feed':
+                $fields[] = 'tid';
+                break;
+            case 'title':
+                $fields[] = 'title';
+                break;
+            default: // including 'url'
+                // nothing to do
+                break;
+        }
+    }
+
+    if (count ($fields) > 0) {
+        $result = DB_query ("SELECT " . implode (',', $fields)
+                    . " FROM {$_TABLES['stories']} WHERE sid = '$sid'"
+                    . COM_getPermSql ('AND') . COM_getTopicSql ('AND'));
+        $A = DB_fetchArray ($result);
+    } else {
+        $A = array ();
+    }
+
+    $retval = array ();
+    foreach ($properties as $p) {
+        switch ($p) {
+            case 'description':
+                $retval[] = trim (PLG_replaceTags (stripslashes ($A['introtext']) . ' ' . stripslashes ($A['bodytext'])));
+                break;
+            case 'excerpt':
+                $retval[] = trim (PLG_replaceTags (stripslashes ($A['introtext']) . "\n\n" . stripslashes ($A['bodytext'])));
+                break;
+            case 'feed':
+                $feedfile = DB_getItem ($_TABLES['syndication'], 'filename',
+                                        "topic = '::all'");
+                if (empty ($feedfile)) {
+                    $feedfile = DB_getItem ($_TABLES['syndication'], 'filename',
+                                            "topic = '{$A['tid']}'");
+                }
+                if (empty ($feedfile)) {
+                    $retval[] = '';
+                } else {
+                    $retval[] = SYND_getFeedUrl ($feedfile);
+                }
+                break;
+            case 'title':
+                $retval[] = stripslashes ($A['title']);
+                break;
+            case 'url':
+                $retval[] = COM_buildUrl ($_CONF['site_url']
+                                          . '/article.php?story=' . $sid);
+                break;
+            default:
+                $retval[] = ''; // return empty string for unknown properties
+                break;
+        }
+    }
+
+    if (count ($retval) == 1) {
+        $retval = $retval[0];
+    }
+
+    return $retval;
+}
+
+/**
+* This replaces all article image HTML in intro and body with
+* GL special syntax
+*
+* @param    string      $sid    ID for story to parse
+* @param    string      $intro  Intro text
+* @param    string      $body   Body text
+* @return   string      processed text
+*
+*/
+function STORY_replace_images($sid, $intro, $body)
+{
+    global $_CONF, $_TABLES, $LANG24;
+
+    $stdImageLoc = true;
+    if (!strstr($_CONF['path_images'], $_CONF['path_html'])) {
+        $stdImageLoc = false;
+    }
+    $result = DB_query("SELECT ai_filename FROM {$_TABLES['article_images']} WHERE ai_sid = '$sid' ORDER BY ai_img_num");
+    $nrows = DB_numRows($result);
+    for ($i = 1; $i <= $nrows; $i++) {
+        $A = DB_fetchArray($result);
+
+        $imageX       = '[image' . $i . ']';
+        $imageX_left  = '[image' . $i . '_left]';
+        $imageX_right = '[image' . $i . '_right]';
+
+        $sizeattributes = COM_getImgSizeAttributes ($_CONF['path_images'] . 'articles/' . $A['ai_filename']);
+
+        $lLinkPrefix = '';
+        $lLinkSuffix = '';
+        if ($_CONF['keep_unscaled_image'] == 1) {
+            $lFilename_large = substr_replace ($A['ai_filename'], '_original.',
+                    strrpos ($A['ai_filename'], '.'), 1);
+            $lFilename_large_complete = $_CONF['path_images'] . 'articles/'
+                                      . $lFilename_large;
+            if ($stdImageLoc) {
+                $imgpath = substr ($_CONF['path_images'],
+                                   strlen ($_CONF['path_html']));
+                $lFilename_large_URL = $_CONF['site_url'] . '/' . $imgpath
+                                     . 'articles/' . $lFilename_large;
+            } else {
+                $lFilename_large_URL = $_CONF['site_url']
+                    . '/getimage.php?mode=show&amp;image=' . $lFilename_large;
+            }
+            if (file_exists ($lFilename_large_complete)) {
+                $lLinkPrefix = '<a href="' . $lFilename_large_URL
+                             . '" title="' . $LANG24[57] . '">';
+                $lLinkSuffix = '</a>';
+            }
+        }
+
+        if ($stdImageLoc) {
+            $imgpath = substr ($_CONF['path_images'],
+                               strlen ($_CONF['path_html']));
+            $imgSrc = $_CONF['site_url'] . '/' . $imgpath . 'articles/'
+                    . $A['ai_filename'];
+        } else {
+            $imgSrc = $_CONF['site_url']
+                . '/getimage.php?mode=articles&amp;image=' . $A['ai_filename'];
+        }
+        $norm = $lLinkPrefix . '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">' . $lLinkSuffix;
+        $left = $lLinkPrefix . '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">' . $lLinkSuffix;
+        $right = $lLinkPrefix . '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">' . $lLinkSuffix;
+
+        $fulltext = $intro . ' ' . $body;
+        $intro = str_replace ($norm,  $imageX,       $intro);
+        $body  = str_replace ($norm,  $imageX,       $body);
+        $intro = str_replace ($left,  $imageX_left,  $intro);
+        $body  = str_replace ($left,  $imageX_left,  $body);
+        $intro = str_replace ($right, $imageX_right, $intro);
+        $body  = str_replace ($right, $imageX_right, $body);
+
+        if (($_CONF['allow_user_scaling'] == 1) and
+            ($_CONF['keep_unscaled_image'] == 1)){
+
+            $unscaledX       = '[unscaled' . $i . ']';
+            $unscaledX_left  = '[unscaled' . $i . '_left]';
+            $unscaledX_right = '[unscaled' . $i . '_right]';
+
+            if (file_exists ($lFilename_large_complete)) {
+                    $sizeattributes = COM_getImgSizeAttributes($lFilename_large_complete);
+                    $norm = '<img ' . $sizeattributes . 'src="' . $lFilename_large_URL . '" alt="">';
+                    $left = '<img ' . $sizeattributes . 'align="left" src="' . $lFilename_large_URL . '" alt="">';
+                    $right = '<img ' . $sizeattributes . 'align="right" src="' . $lFilename_large_URL . '" alt="">';
+                }
+            $intro = str_replace ($norm,  $unscaledX,       $intro);
+            $body  = str_replace ($norm,  $unscaledX,       $body);
+            $intro = str_replace ($left,  $unscaledX_left,  $intro);
+            $body  = str_replace ($left,  $unscaledX_left,  $body);
+            $intro = str_replace ($right, $unscaledX_right, $intro);
+            $body  = str_replace ($right, $unscaledX_right, $body);
+        }
+    }
+
+    return array($intro, $body);
+}
+
+/**
+* Replaces simple image syntax with actual HTML in the intro and body.
+* If errors occur it will return all errors in $error
+*
+* @param    string      $sid    ID for story to parse
+* @param    string      $intro  Intro text
+* @param    string      $body   Body text
+* @param    string      $usage  'html' for normal use, 'email' for email use
+* @return   string      Processed text
+*
+*/
+function STORY_insert_images($sid, $intro, $body, $usage='html')
+{
+    global $_CONF, $_TABLES, $LANG24;
+
+    $result = DB_query("SELECT ai_filename FROM {$_TABLES['article_images']} WHERE ai_sid = '$sid' ORDER BY ai_img_num");
+    $nrows = DB_numRows($result);
+    $errors = array();
+    $stdImageLoc = true;
+    if (!strstr($_CONF['path_images'], $_CONF['path_html'])) {
+        $stdImageLoc = false;
+    }
+    for ($i = 1; $i <= $nrows; $i++) {
+        $A = DB_fetchArray($result);
+
+        $lLinkPrefix = '';
+        $lLinkSuffix = '';
+        if ($_CONF['keep_unscaled_image'] == 1) {
+            $lFilename_large = substr_replace ($A['ai_filename'], '_original.',
+                    strrpos ($A['ai_filename'], '.'), 1);
+            $lFilename_large_complete = $_CONF['path_images'] . 'articles/'
+                                      . $lFilename_large;
+            if ($stdImageLoc) {
+                $imgpath = substr ($_CONF['path_images'],
+                                   strlen ($_CONF['path_html']));
+                $lFilename_large_URL = $_CONF['site_url'] . '/' . $imgpath
+                                     . 'articles/' . $lFilename_large;
+            } else {
+                $lFilename_large_URL = $_CONF['site_url']
+                    . '/getimage.php?mode=show&amp;image=' . $lFilename_large;
+            }
+            if (file_exists ($lFilename_large_complete)) {
+                $lLinkPrefix = '<a href="' . $lFilename_large_URL
+                             . '" title="' . $LANG24[57] . '">';
+                $lLinkSuffix = '</a>';
+            }
+        }
+
+        $sizeattributes = COM_getImgSizeAttributes ($_CONF['path_images'] . 'articles/' . $A['ai_filename']);
+
+        $norm  = '[image' . $i . ']';
+        $left  = '[image' . $i . '_left]';
+        $right = '[image' . $i . '_right]';
+
+        $unscalednorm  = '[unscaled' . $i . ']';
+        $unscaledleft  = '[unscaled' . $i . '_left]';
+        $unscaledright = '[unscaled' . $i . '_right]';
+
+        $fulltext = $intro . ' ' . $body;
+        $icount = substr_count($fulltext, $norm) + substr_count($fulltext, $left) + substr_count($fulltext, $right);
+        $icount = $icount + substr_count($fulltext, $unscalednorm) + substr_count($fulltext, $unscaledleft) + substr_count($fulltext, $unscaledright);
+        if ($icount == 0) {
+            // There is an image that wasn't used, create an error
+            $errors[] = $LANG24[48] . " #$i, {$A['ai_filename']}, " . $LANG24[53];
+        } else {
+            // Only parse if we haven't encountered any error to this point
+            if (count($errors) == 0) {
+                if ($usage=='email') {  // image will be attached, no path necessary
+                    $imgSrc = $A['ai_filename'];
+                } elseif ($stdImageLoc) {
+                    $imgpath = substr ($_CONF['path_images'],
+                                       strlen ($_CONF['path_html']));
+                    $imgSrc = $_CONF['site_url'] . '/' . $imgpath . 'articles/'
+                            . $A['ai_filename'];
+                } else {
+                    $imgSrc = $_CONF['site_url'] . '/getimage.php?mode=articles&amp;image=' . $A['ai_filename'];
+                }
+                $intro = str_replace($norm, $lLinkPrefix . '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $intro);
+                $body = str_replace($norm, $lLinkPrefix . '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $body);
+                $intro = str_replace($left, $lLinkPrefix . '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $intro);
+                $body = str_replace($left, $lLinkPrefix . '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $body);
+                $intro = str_replace($right, $lLinkPrefix . '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $intro);
+                $body = str_replace($right, $lLinkPrefix . '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">' . $lLinkSuffix, $body);
+
+                if (($_CONF['allow_user_scaling'] == 1) and
+                    ($_CONF['keep_unscaled_image'] == 1)) {
+
+                    if (file_exists ($lFilename_large_complete)) {
+                        $imgSrc = $lFilename_large_URL;
+                        $sizeattributes = COM_getImgSizeAttributes ($lFilename_large_complete);
+                    }
+                    $intro = str_replace($unscalednorm, '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">', $intro);
+                    $body = str_replace($unscalednorm, '<img ' . $sizeattributes . 'src="' . $imgSrc . '" alt="">', $body);
+                    $intro = str_replace($unscaledleft, '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">', $intro);
+                    $body = str_replace($unscaledleft, '<img ' . $sizeattributes . 'align="left" src="' . $imgSrc . '" alt="">', $body);
+                    $intro = str_replace($unscaledright, '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">', $intro);
+                    $body = str_replace($unscaledright, '<img ' . $sizeattributes . 'align="right" src="' . $imgSrc . '" alt="">', $body);
+                }
+
+            }
+        }
+    }
+
+    return array($errors, $intro, $body);
+}
+
+/**
+* Delete a story.
+*
+* This is used to delete a story from the list of stories with the 'draft' flag
+* set (see function draftlist() above).
+*
+* @sid      string      ID of the story to delete
+*
+*/
+function STORY_deleteStory($sid)
+{
+    global $_CONF, $_TABLES, $_USER;
+
+    $result = DB_query ("SELECT tid,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['stories']} WHERE sid = '$sid'");
+    $A = DB_fetchArray ($result);
+    $access = SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'],
+            $A['perm_group'], $A['perm_members'], $A['perm_anon']);
+    $access = min ($access, SEC_hasTopicAccess ($A['tid']));
+    if ($access < 3) {
+        COM_accessLog ("User {$_USER['username']} tried to illegally delete story $sid.");
+        return COM_refresh ($_CONF['site_admin_url'] . '/story.php');
+    }
+
+    STORY_deleteImages ($sid);
+    DB_query("DELETE FROM {$_TABLES['comments']} WHERE sid = '$sid' AND type = 'article'");
+    DB_delete ($_TABLES['stories'], 'sid', $sid);
+
+    // update RSS feed and Older Stories block
+    COM_rdfUpToDateCheck ();
+    COM_olderStuff ();
+
+    return COM_refresh ($_CONF['site_admin_url'] . '/story.php?msg=10');
+}
+
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-syndication.php 1.4.0sr5-1/cpanel-glprivate/system/lib-syndication.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-syndication.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-syndication.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,16 +1,17 @@
-<?php 
+<?php
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | lib-syndication.php                                                       |
 // |                                                                           |
 // | Geeklog syndication library.                                              |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2003 by the following authors:                              |
+// | Copyright (C) 2003-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Dirk Haun        - dirk@haun-online.de                           |
+// | Authors: Dirk Haun        - dirk AT haun-online DOT de                    |
+// |          Michael Jervis   - mike AT fuckingbrit DOT com                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -29,24 +30,30 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-syndication.php,v 1.9 2004/08/23 19:36:35 dhaun Exp $
+// $Id: lib-syndication.php,v 1.30.2.1 2006/06/30 12:20:48 dhaun Exp $
 
 // set to true to enable debug output in error.log
 $_SYND_DEBUG = false;
 
-if (eregi ('lib-syndication.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-syndication.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+if ($_CONF['trackback_enabled']) {
+    require_once ($_CONF['path_system'] . 'lib-trackback.php');
 }
 
 /**
 * Check if a feed for all stories needs to be updated.
 *
-* @param    string   $update_info   list of story ids
-* @param    string   $limit         number of entries or number of hours
+* @param    string  $update_info    list of story ids
+* @param    string  $limit          number of entries or number of hours
+* @param    string  $updated_topic  (optional) topic to be updated
+* @param    string  $updated_id     (optional) entry id to be updated
 * @return   bool                    false = feed needs to be updated
 *
 */
-function SYND_feedUpdateCheckAll( $update_info, $limit )
+function SYND_feedUpdateCheckAll( $update_info, $limit, $updated_topic = '', $updated_id = '' )
 {
     global $_CONF, $_TABLES, $_SYND_DEBUG;
 
@@ -73,18 +80,15 @@
     $tresult = DB_query( "SELECT tid FROM {$_TABLES['topics']}"
                          . COM_getPermSQL( 'WHERE', 1 ));
     $tnumrows = DB_numRows( $tresult );
-    $tlist = '';
-    for( $i = 1; $i <= $tnumrows; $i++ )
+    $topiclist = array();
+    for( $i = 0; $i < $tnumrows; $i++ )
     {
         $T = DB_fetchArray( $tresult );
-        $tlist .= "'" . $T['tid'] . "'";
-        if( $i < $tnumrows )
-        {
-            $tlist .= ',';
-        }
+        $topiclist[] = $T['tid'];
     }
-    if( !empty( $tlist ))
+    if( count( $topiclist ) > 0 )
     {
+        $tlist = "'" . implode( "','", $topiclist ) . "'";
         $where .= " AND (tid IN ($tlist))";
     }
 
@@ -95,6 +99,13 @@
     for( $i = 0; $i < $nrows; $i++ )
     {
         $A = DB_fetchArray( $result );
+
+        if( $A['sid'] == $updated_id )
+        {
+            // no need to look any further - this feed has to be updated
+            return false;
+        }
+
         $sids[] = $A['sid'];
     }
     $current = implode( ',', $sids );
@@ -109,13 +120,15 @@
 /**
 * Check if a feed for stories from a topic needs to be updated.
 *
-* @param    string   $tid           topic id
-* @param    string   $update_info   list of story ids
-* @param    string   $limit         number of entries or number of hours
+* @param    string  $tid            topic id
+* @param    string  $update_info    list of story ids
+* @param    string  $limit          number of entries or number of hours
+* @param    string  $updated_topic  (optional) topic to be updated
+* @param    string  $updated_id     (optional) entry id to be updated
 * @return   bool                    false = feed needs to be updated
 *
 */
-function SYND_feedUpdateCheckTopic( $tid, $update_info, $limit )
+function SYND_feedUpdateCheckTopic( $tid, $update_info, $limit, $updated_topic = '', $updated_id = '' )
 {
     global $_CONF, $_TABLES, $_SYND_DEBUG;
 
@@ -145,61 +158,19 @@
     for( $i = 0; $i < $nrows; $i++ )
     {
         $A = DB_fetchArray( $result );
-        $sids[] = $A['sid'];
-    }
-    $current = implode( ',', $sids );
-
-    if ($_SYND_DEBUG) {
-        COM_errorLog ("Update check for topic $tid: comparing new list ($current) with old list ($update_info)", 1);
-    }
-
-    return ( $current != $update_info ) ? false : true;
-}
-
-/**
-* Check if a feed for the links needs to be updated.
-*
-* @param    string   $update_info   list of link ids
-* @param    string   $limit         number of entries or number of hours
-* @return   bool                    false = feed needs to be updated
-*
-*/
-function SYND_feedUpdateCheckLinks( $update_info, $limit )
-{
-    global $_CONF, $_TABLES, $_SYND_DEBUG;
 
-    $where = '';
-    if( !empty( $limit ))
-    {
-        if( substr( $limit, -1 ) == 'h' ) // last xx hours
+        if( $A['sid'] == $updated_id )
         {
-            $limitsql = '';
-            $hours = substr( $limit, 0, -1 );
-            $where = " AND date >= DATE_SUB(NOW(),INTERVAL $hours HOUR)";
+            // no need to look any further - this feed has to be updated
+            return false;
         }
-        else
-        {
-            $limitsql = ' LIMIT ' . $limit;
-        }
-    }
-    else
-    {
-        $limitsql = ' LIMIT 10';
-    }
-
-    $result = DB_query( "SELECT lid FROM {$_TABLES['links']} WHERE perm_anon > 0 $where ORDER BY date DESC $limitsql" );
-    $nrows = DB_numRows( $result );
 
-    $lids = array();
-    for( $i = 0; $i < $nrows; $i++ )
-    {
-        $A = DB_fetchArray( $result );
-        $lids[] = $A['lid'];
+        $sids[] = $A['sid'];
     }
-    $current = implode( ',', $lids );
+    $current = implode( ',', $sids );
 
     if ($_SYND_DEBUG) {
-        COM_errorLog ("Update check for links: comparing new list ($current) with old list ($update_info)", 1);
+        COM_errorLog ("Update check for topic $tid: comparing new list ($current) with old list ($update_info)", 1);
     }
 
     return ( $current != $update_info ) ? false : true;
@@ -208,12 +179,13 @@
 /**
 * Check if a feed for the events needs to be updated.
 *
-* @param    string   $update_info   list of event ids
-* @param    string   $limit         number of entries or number of hours
+* @param    string  $update_info    list of event ids
+* @param    string  $limit          number of entries or number of hours
+* @param    string  $updated_id     (optional) entry id to be updated
 * @return   bool                    false = feed needs to be updated
 *
 */
-function SYND_feedUpdateCheckEvents( $update_info, $limit )
+function SYND_feedUpdateCheckEvents( $update_info, $limit, $updated_id = '' )
 {
     global $_CONF, $_TABLES, $_SYND_DEBUG;
 
@@ -243,6 +215,13 @@
     for( $i = 0; $i < $nrows; $i++ )
     {
         $A = DB_fetchArray( $result );
+
+        if( $A['eid'] == $updated_id )
+        {
+            // no need to look any further - this feed has to be updated
+            return false;
+        }
+
         $eids[] = $A['eid'];
     }
     $current = implode( ',', $eids );
@@ -255,43 +234,56 @@
 }
 
 /**
-* Check if the feed contents need to be updated.
+* Check if the contents of Geeklog's built-in feeds need to be updated.
 *
-* @param    string   plugin   plugin name
-* @param    int      feed     feed id
-* @param    string   topic    "topic" of the feed - plugin specific
-* @param    string   limit    number of entries or number of hours
-* @return   bool              false = feed has to be updated, true = ok
+* @param    string  topic           indicator of the feed's "topic"
+* @param    string  limit           number of entries or number of hours
+* @param    string  updated_topic   (optional) specific topic to update
+* @param    string  updated_id      (optional) specific id to update
+* @return   bool                    false = feed has to be updated, true = ok
 *
 */
-function SYND_feedUpdateCheck( $plugin, $feed, $topic, $update_data, $limit )
+function SYND_feedUpdateCheck( $topic, $update_data, $limit, $updated_topic = '', $updated_id = '' )
 {
     $is_current = true;
 
-    switch( $topic )
+    if( $topic == '::events' )
     {
-        case '::all':
+        if( $updated_topic != '::events' )
         {
-            $is_current = SYND_feedUpdateCheckAll( $update_data, $limit );
+            $updated_topic = '';
+            $updated_id = '';
         }
-        break;
+    }
+    else
+    {
+        if( $updated_topic == '::events' )
+        {
+            $updated_topic = '';
+            $updated_id = '';
+        }
+    }
 
-        case '::links':
+    switch( $topic )
+    {
+        case '::all':
         {
-            $is_current = SYND_feedUpdateCheckLinks( $update_data, $limit );
+            $is_current = SYND_feedUpdateCheckAll( $update_data, $limit,
+                            $updated_topic, $updated_id );
         }
         break;
 
         case '::events':
         {
-            $is_current = SYND_feedUpdateCheckEvents( $update_data, $limit );
+            $is_current = SYND_feedUpdateCheckEvents( $update_data, $limit,
+                            $updated_id );
         }
         break;
 
         default:
         {
-            $is_current = SYND_feedUpdateChecktopic( $topic, $update_data,
-                                                     $limit );
+            $is_current = SYND_feedUpdateCheckTopic( $topic, $update_data,
+                            $limit, $updated_topic, $updated_id );
         }
         break;
     }
@@ -309,11 +301,12 @@
 * @return   array              content of the feed
 *
 */
-function SYND_getFeedContentPerTopic( $tid, $limit, &$link, &$update )
+function SYND_getFeedContentPerTopic( $tid, $limit, &$link, &$update, $contentLength, $feedType, $feedVersion )
 {
     global $_TABLES, $_CONF, $LANG01;
 
     $content = array ();
+    $sids = array();
 
     if( DB_getItem( $_TABLES['topics'], 'perm_anon', "tid = '$tid'") >= 2)
     {
@@ -336,9 +329,11 @@
             $limitsql = ' LIMIT 10';
         }
 
-        $result = DB_query( "SELECT sid,uid,title,introtext,postmode,UNIX_TIMESTAMP(date) AS modified FROM {$_TABLES['stories']} WHERE draft_flag = 0 AND date <= NOW() AND tid = '$tid' AND perm_anon > 0 ORDER BY date DESC $limitsql" );
+        $topic = stripslashes( DB_getItem( $_TABLES['topics'], 'topic',
+                               "tid = '$tid'" ));
+
+        $result = DB_query( "SELECT sid,uid,title,introtext,bodytext,postmode,UNIX_TIMESTAMP(date) AS modified FROM {$_TABLES['stories']} WHERE draft_flag = 0 AND date <= NOW() AND tid = '$tid' AND perm_anon > 0 ORDER BY date DESC $limitsql" );
 
-        $sids = array();
         $nrows = DB_numRows( $result );
 
         for( $i = 1; $i <= $nrows; $i++ )
@@ -347,20 +342,32 @@
             $sids[] = $row['sid'];
 
             $storytitle = stripslashes( $row['title'] );
+            $fulltext = stripslashes( $row['introtext']."\n".$row['bodytext'] );
+            $fulltext = PLG_replaceTags( $fulltext );
+            $storytext = SYND_truncateSummary( $fulltext, $contentLength );
 
-            $storytext = stripslashes( $row['introtext'] );
-            $storytext = trim( $storytext );
-            $storytext = preg_replace( "/(\015)/", "", $storytext );
+            $fulltext = trim( $fulltext );
+            $fulltext = preg_replace( "/(\015)/", "", $fulltext );
 
             $storylink = COM_buildUrl( $_CONF['site_url']
                                        . '/article.php?story=' . $row['sid'] );
-
-            $content[] = array( 'title'  => $storytitle,
-                                'text'   => $storytext,
-                                'link'   => $storylink,
-                                'uid'    => $row['uid'],
-                                'date'   => $row['modified'],
-                                'format' => $row['postmode']
+            $extensionTags = PLG_getFeedElementExtensions('article', $row['sid'], $feedType, $feedVersion);
+            if( $_CONF['trackback_enabled'] && ($feedType == 'RSS'))
+            {
+                $trbUrl = TRB_makeTrackbackUrl( $row['sid'] );
+                $extensionTags[] = '<trackback:ping>'.htmlspecialchars($trbUrl).'</trackback:ping>';
+            }
+            $content[] = array( 'title'      => $storytitle,
+                                'summary'    => $storytext,
+                                'text'       => $fulltext,
+                                'link'       => $storylink,
+                                'uid'        => $row['uid'],
+                                'author'     => COM_getDisplayName( $row['uid'] ),
+                                'date'       => $row['modified'],
+                                'format'     => $row['postmode'],
+                                'commenturl' => $storylink . '#comments',
+                                'topic'      => $topic,
+                                'extensions' => $extensionTags,
                               );
         }
     }
@@ -377,10 +384,11 @@
 * @param    string   $limit    number of entries or number of stories
 * @param    string   $link     link to homepage
 * @param    string   $update   list of story ids
+* @param    int      $contentLength Length of summary to allow.
 * @return   array              content of the feed
 *
 */
-function SYND_getFeedContentAll( $limit, &$link, &$update )
+function SYND_getFeedContentAll( $limit, &$link, &$update, $contentLength, $feedType, $feedVersion )
 {
     global $_TABLES, $_CONF, $LANG01;
 
@@ -404,7 +412,8 @@
     }
 
     // get list of topics that anonymous users have access to
-    $tresult = DB_query( "SELECT tid FROM {$_TABLES['topics']}"
+    $topics = array();
+    $tresult = DB_query( "SELECT tid,topic FROM {$_TABLES['topics']}"
                          . COM_getPermSQL( 'WHERE', 1 ));
     $tnumrows = DB_numRows( $tresult );
     $tlist = '';
@@ -416,13 +425,14 @@
         {
             $tlist .= ',';
         }
+        $topics[$T['tid']] = stripslashes( $T['topic'] );
     }
     if( !empty( $tlist ))
     {
         $where .= " AND (tid IN ($tlist))";
     }
 
-    $result = DB_query( "SELECT sid,uid,title,introtext,postmode,UNIX_TIMESTAMP(date) AS modified FROM {$_TABLES['stories']} WHERE draft_flag = 0 AND date <= NOW() $where AND perm_anon > 0 ORDER BY date DESC $limitsql" );
+    $result = DB_query( "SELECT sid,tid,uid,title,introtext,bodytext,postmode,UNIX_TIMESTAMP(date) AS modified FROM {$_TABLES['stories']} WHERE draft_flag = 0 AND date <= NOW() $where AND perm_anon > 0 ORDER BY date DESC $limitsql" );
 
     $content = array();
     $sids = array();
@@ -435,96 +445,44 @@
 
         $storytitle = stripslashes( $row['title'] );
 
-        $storytext = stripslashes( $row['introtext'] );
-        $storytext = trim( $storytext );
-        $storytext = preg_replace( "/(\015)/", "", $storytext );
+        $fulltext = stripslashes( $row['introtext']."\n".$row['bodytext'] );
+        $fulltext = PLG_replaceTags( $fulltext );
+        $storytext = SYND_truncateSummary( $fulltext, $contentLength );
+        $fulltext = trim( $fulltext );
+        $fulltext = preg_replace( "/(\015)/", "", $fulltext );
 
         $storylink = COM_buildUrl( $_CONF['site_url'] . '/article.php?story='
                                    . $row['sid'] );
-
-        $content[] = array( 'title'  => $storytitle,
-                            'text'   => $storytext,
-                            'link'   => $storylink,
-                            'uid'    => $row['uid'],
-                            'date'   => $row['modified'],
-                            'format' => $row['postmode']
-                          );
-    }
-
-    $link = $_CONF['site_url'];
-    $update = implode( ',', $sids );
-
-    return $content;
-}
-
-/**
-* Get content for a feed that holds all links.
-*
-* @param    string   $limit    number of entries or number of stories
-* @param    string   $link     link to homepage
-* @param    string   $update   list of story ids
-* @return   array              content of the feed
-*
-*/
-function SYND_getFeedContentLinks( $limit, &$link, &$update )
-{
-    global $_TABLES, $_CONF, $LANG01;
-
-    $where = '';
-    if( !empty( $limit ))
-    {
-        if( substr( $limit, -1 ) == 'h' ) // last xx hours
+        $extensionTags = PLG_getFeedElementExtensions('article', $row['sid'], $feedType, $feedVersion);
+        if( $_CONF['trackback_enabled'] && ($feedType == 'RSS'))
         {
-            $limitsql = '';
-            $hours = substr( $limit, 0, -1 );
-            $where = " AND date >= DATE_SUB(NOW(),INTERVAL $hours HOUR) ORDER BY date DESC";
-        }
-        else
-        {
-            $limitsql = ' LIMIT ' . $limit;
-            $where = ' ORDER BY lid DESC';
+            $trbUrl = TRB_makeTrackbackUrl( $row['sid'] );
+            $extensionTags[] = '<trackback:ping>'.htmlspecialchars($trbUrl).'</trackback:ping>';
         }
-    }
-    else
-    {
-        $limitsql = ' LIMIT 10';
-        $where = ' ORDER BY lid DESC';
-    }
-
-    $result = DB_query( "SELECT lid,owner_id,title,description,UNIX_TIMESTAMP(date) AS modified FROM {$_TABLES['links']} WHERE perm_anon > 0 $where $limitsql" );
-
-    $content = array();
-    $lids = array();
-    $nrows = DB_numRows( $result );
-
-    for( $i = 1; $i <= $nrows; $i++ )
-    {
-        $row = DB_fetchArray( $result );
-        $lids[] = $row['lid'];
-
-        $linktitle = stripslashes( $row['title'] );
-        $linkdesc = stripslashes( $row['description'] );
+        $content[] = array( 'title'      => $storytitle,
+                            'summary'    => $storytext,
+                            'text'       => $fulltext,
+                            'link'       => $storylink,
+                            'uid'        => $row['uid'],
+                            'author'     => COM_getDisplayName( $row['uid'] ),
+                            'date'       => $row['modified'],
+                            'format'     => $row['postmode'],
+                            'commenturl' => $storylink . '#comments',
+                            'topic'      => $topics[$row['tid']],
+                            'extensions' => $extensionTags
+                          );
 
-        $linklink = COM_buildUrl( $_CONF['site_url']
-                  . '/portal.php?what=link&item=' . $row['lid'] );
 
-        $content[] = array( 'title'  => $linktitle,
-                            'text'   => $linkdesc,
-                            'link'   => $linklink,
-                            'uid'    => $row['owner_id'],
-                            'date'   => $row['modified'],
-                            'format' => 'plaintext'
-                          );
     }
 
-    $link = $_CONF['site_url'] . '/links.php';
-    $update = implode( ',', $lids );
+    $link = $_CONF['site_url'];
+    $update = implode( ',', $sids );
 
     return $content;
 }
 
 /**
-* Get content for a feed that holds all links.
+* Get content for a feed that holds all events.
 *
 * @param    string   $limit    number of entries or number of stories
 * @param    string   $link     link to homepage
@@ -532,7 +490,7 @@
 * @return   array              content of the feed
 *
 */
-function SYND_getFeedContentEvents( $limit, &$link, &$update )
+function SYND_getFeedContentEvents( $limit, &$link, &$update, $contentLength, $feedType, $feedVersion )
 {
     global $_TABLES, $_CONF, $LANG01;
 
@@ -567,7 +525,7 @@
         $eids[] = $row['eid'];
 
         $eventtitle = stripslashes( $row['title'] );
-        $eventtext  = stripslashes( $row['description'] );
+        $eventtext = SYND_truncateSummary( $row['description'], $contentLength);
         $eventlink  = $_CONF['site_url'] . '/calendar_event.php?eid='
                     . $row['eid'];
 
@@ -580,13 +538,15 @@
         $mysec = substr( $row['eid'], 12, 2 );
         $newtime = "{$mymonth}/{$myday}/{$myyear} {$myhour}:{$mymin}:{$mysec}";
         $creationtime = strtotime( $newtime );
-
+        $extensionTags = PLG_getFeedElementExtensions('event', $row['eid'], $feedType, $feedVersion);
         $content[] = array( 'title'  => $eventtitle,
-                            'text'   => $eventtext,
+                            'summary'   => $eventtext,
                             'link'   => $eventlink,
                             'uid'    => $row['owner_id'],
+                            'author' => COM_getDisplayName( $row['owner_id'] ),
                             'date'   => $creationtime,
-                            'format' => 'plaintext'
+                            'format' => 'plaintext',
+                            'extensions' => $extensionTags
                           );
     }
 
@@ -598,6 +558,8 @@
 
 /**
 * Update a feed.
+* Re-written by Michael Jervis (mike AT fuckingbrit DOT com)
+* to use the new architecture
 *
 * @param   int   $fid   feed id
 *
@@ -610,47 +572,105 @@
     $A = DB_fetchArray( $result );
     if( $A['is_enabled'] == 1 )
     {
-        require_once( $_CONF['path_system'] . 'classes/' . $A['format']
-                      . '.feed.class.php' );
-        $feed = new $A['format']();
-        $feed->setFeedfile( $A['filename'] );
-        $feed->setFeedformats( $A['content_length'], $A['language'],
-                               $A['charset'] );
+        // Import the feed handling classes:
+        require_once( $_CONF['path_system']
+                      . '/classes/syndication/parserfactory.class.php' );
+        require_once( $_CONF['path_system']
+                      . '/classes/syndication/feedparserbase.class.php' );
+
+        // Load the actual feed handlers:
+        $factory = new FeedParserFactory( $_CONF['path_system']
+                                          . '/classes/syndication/' );
+        $format = explode( '-', $A['format'] );
+        $feed = $factory->writer( $format[0], $format[1] );
 
-        $link = '';
-        $data = '';
-        if( $A['type'] == 'geeklog' )
+        if( $feed )
         {
-            if( $A['topic'] == '::all')
+            $feed->encoding = $A['charset'];
+            $feed->lang = $A['language'];
+
+            if( $A['type'] == 'geeklog' )
             {
-                $content = SYND_getFeedContentAll( $A['limits'], $link, $data );
+                if( $A['topic'] == '::all')
+                {
+                    $content = SYND_getFeedContentAll( $A['limits'], $link,
+                                                       $data, $A['content_length'],
+                                                       $format[0], $format[1] );
+                }
+                elseif( $A['topic'] == '::events')
+                {
+                    $content = SYND_getFeedContentEvents( $A['limits'], $link,
+                                                          $data, $A['content_length'],
+                                                          $format[0], $format[1] );
+                }
+                else // feed for a single topic only
+                {
+                    $content = SYND_getFeedContentPerTopic( $A['topic'],
+                            $A['limits'], $link, $data, $A['content_length'],
+                            $format[0], $format[1] );
+                }
             }
-            elseif( $A['topic'] == '::links')
+            else
             {
-                $content = SYND_getFeedContentLinks( $A['limits'], $link,
-                                                     $data );
+                $content = PLG_getFeedContent( $A['type'], $fid, $link, $data, $format[0], $format[1] );
+                // can't randomly change the api to send a max length, so
+                // fix it here:
+                if ($A['content_length'] != 1)
+                {
+                    $count = count( $content );
+                    for( $i = 0; $i < $count; $i++ )
+                    {
+                        $content[i]['summary'] = SYND_truncateSummary(
+                                    $content[i]['text'], $A['content_length'] );
+                    }
+                }
             }
-            elseif( $A['topic'] == '::events')
+            if( empty( $link ))
             {
-                $content = SYND_getFeedContentEvents( $A['limits'], $link,
-                                                      $data );
+                $link = $_CONF['site_url'];
             }
-            else // feed for a single topic only
+
+            $feed->title = $A['title'];
+            $feed->description = $A['description'];
+            if( empty( $A['feedlogo'] ))
             {
-                $content = SYND_getFeedContentPerTopic( $A['topic'],
-                        $A['limits'], $link, $data );
+                $feed->feedlogo = '';
             }
+            else
+            {
+                $feed->feedlogo = $_CONF['site_url'] . $A['feedlogo'];
+            }
+            $feed->sitelink = $link;
+            $feed->copyright = 'Copyright ' . strftime( '%Y' ) . ' '
+                             . $_CONF['site_name'];
+            $feed->sitecontact = $_CONF['site_mail'];
+            $feed->system = 'GeekLog';
+
+            /* Gather any other stuff */
+            $feed->namespaces = PLG_getFeedNSExtensions($A['type'], $format[0], $format[1]);
+            if( $_CONF['trackback_enabled'] && ($format[0] == 'RSS') )
+            {
+                $feed->namespaces[] = 'xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"';
+            }
+            $feed->extensions = PLG_getFeedExtensionTags($A['type'], $format[0], $format[1]);
+            $feed->articles = $content;
+
+            if( !empty( $A['filename'] ))
+            {
+                $filename = $A['filename'];
+            }
+            else
+            {
+                $pos = strrpos( $_CONF['rdf_file'], '/' );
+                $filename = substr( $_CONF['rdf_file'], $pos + 1 );
+            }
+            $feed->url = SYND_getFeedUrl( $filename );
+            $feed->createFeed( SYND_getFeedPath( $filename ));
         }
         else
         {
-            $content = PLG_getFeedContent( $A['type'], $fid, $link, $data );
-        }
-        if( empty( $link ))
-        {
-            $link = $_CONF['site_url'];
+            COM_errorLog( "Unable to get a feed writer for {$format[0]} version {$format[1]}.", 1);
         }
-        $feed->setFeedinfo( $link, $A['title'], $A['description'] );
-        $feed->write( $content );
 
         if( empty( $data ))
         {
@@ -661,7 +681,8 @@
             $data = "'" . $data . "'";
         }
 
-        if ($_SYND_DEBUG) {
+        if ($_SYND_DEBUG)
+        {
             COM_errorLog ("update_info for feed $fid is $data", 1);
         }
 
@@ -669,4 +690,79 @@
     }
 }
 
+/**
+* Truncate a feed item's text to a given max. length of characters
+*
+* @param    string  $text       the item's text
+* @param    int     $length     max. length
+* @return   string              truncated text
+*
+*/
+function SYND_truncateSummary( $text, $length )
+{
+    if( $length == 0 )
+    {
+        return '';
+    }
+    else
+    {
+        $text = stripslashes( $text );
+        $text = trim( $text );
+        $text = preg_replace( "/(\015)/", "", $text );
+        if(( $length > 3 ) && ( strlen( $text ) > $length ))
+        {
+            $text = substr( $text, 0, $length - 3 ) . '...';
+        }
+
+        // Check if we broke html tag and storytext is now something
+        // like "blah blah <a href= ...". Delete "<*" if so.
+        if( strrpos( $text, '<' ) > strrpos( $text, '>' ))
+        {
+            $text = substr( $text, 0, strrpos( $text, '<' ) - 1 )
+                  . ' ...';
+        }
+
+        return $text;
+    }
+}
+
+
+/**
+* Get the path of the feed directory or a specific feed file
+*
+* @param    string  $feedfile   (option) feed file name
+* @return   string              path of feed directory or file
+*
+*/
+function SYND_getFeedPath( $feedfile = '' )
+{
+    global $_CONF;
+
+    $feedpath = $_CONF['rdf_file'];
+    $pos = strrpos( $feedpath, '/' );
+    $feed = substr( $feedpath, 0, $pos + 1 );
+    $feed .= $feedfile;
+
+    return $feed;
+}
+
+/**
+* Get the URL of the feed directory or a specific feed file
+*
+* @param    string  $feedfile   (option) feed file name
+* @return   string              URL of feed directory or file
+*
+*/
+function SYND_getFeedUrl( $feedfile = '' )
+{
+    global $_CONF;
+
+    $feedpath = SYND_getFeedPath();
+    $url = substr_replace ($feedpath, $_CONF['site_url'], 0,
+                           strlen ($_CONF['path_html']) - 1);
+    $url .= $feedfile;
+
+    return $url;
+}
+
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-trackback.php 1.4.0sr5-1/cpanel-glprivate/system/lib-trackback.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-trackback.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-trackback.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,892 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | lib-trackback.php                                                         |
+// |                                                                           |
+// | Functions needed to handle trackback comments.                            |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2005-2006 by the following authors:                         |
+// |                                                                           |
+// | Author: Dirk Haun - dirk AT haun-online DOT de                            |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// 
+// $Id: lib-trackback.php,v 1.23.2.3 2006/07/23 07:35:33 dhaun Exp $
+
+if (strpos ($_SERVER['PHP_SELF'], 'lib-trackback.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+// result codes for TRB_saveTrackbackComment
+define ('TRB_SAVE_OK',      0);
+define ('TRB_SAVE_SPAM',   -1);
+define ('TRB_SAVE_REJECT', -2);
+
+// set to true to log rejected Trackbacks
+$_TRB_LOG_REJECTS = false;
+
+
+/**
+* Send a trackback response message
+*
+* @param    int     $error          0 = OK, 1 = an error occured
+* @param    string  $errormsg       the error message (ignored for $error == 0)
+* @param    int     $http_status    optional HTTP status code
+* @param    string  $http_text      optional HTTP status code text
+* @return   void
+*
+*/
+function TRB_sendTrackbackResponse ($error, $errormsg = '', $http_status = 200, $http_text = "OK")
+{
+    $display = '<?xml version="1.0" encoding="iso-8859-1"?>' . LB
+             . '<response>' . LB
+             . '<error>' . $error . '</error>' . LB;
+    if (($error != 0) && !empty ($errormsg)) {
+        // we're creating XML, so encode these ...
+        $errormsg = str_replace (array ('<',    '>',    "'"),
+                                 array ('&lt;', '&gt;', '&apos;'), $errormsg);
+        $display .= '<message>' . $errormsg . '</message>' . LB;
+    }
+    $display .= '</response>';
+
+    if ($http_status != 200)
+    {
+        header ("HTTP/1.1 $http_status $http_text");
+        header ("Status: $http_status $http_text");
+    }
+    header ('Content-Type: text/xml');
+    echo $display;
+}
+
+/**
+* Helper function for the curious: Log rejected trackbacks
+*
+* @param    string  $logmsg     Message to log
+* @return   void
+*
+*/
+function TRB_logRejected ($reason, $url = '')
+{
+    global $_TRB_LOG_REJECTS;
+
+    if ($_TRB_LOG_REJECTS) {
+
+        $logmsg = 'Trackback from IP ' . $_SERVER['REMOTE_ADDR']
+                . ' rejected for ' . $reason . ', URL: ' . $url;
+
+        if (function_exists ('SPAMX_log')) {
+            SPAMX_log ($logmsg);
+        } else {
+            COM_errorLog ($logmsg);
+        }
+    }
+}
+
+/**
+* Creates a piece of RDF pointing out the trackback URL
+*
+* Note: When putting this in an HTML page, it may be advisable to enclose it
+*       in HTML comments, i.e. <!-- ... -->
+*
+* @param    string  $article_url    URL of our entry
+* @param    string  $title          title of that entry
+* @param    string  $trackback_url  trackback URL for our entry
+* @return   string                  RDF code with our information embedded
+*
+*/
+function TRB_trackbackRdf ($article_url, $title, $trackback_url)
+{
+    // we're creating XML, so encode these ...
+    $title = str_replace (array ('<',    '>',    "'"),
+                          array ('&lt;', '&gt;', '&apos;'), $title);
+
+    $retval = '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"' . LB
+            . '         xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' . LB
+            . '         xmlns:dc="http://purl.org/dc/elements/1.1/">' . LB;
+    $retval .= '<rdf:Description' . LB
+            .  '    rdf:about="' . $article_url . '"' . LB
+            .  '    trackback:ping="' . $trackback_url . '"' .LB
+            .  '    dc:title="' . $title . '"' . LB
+            .  '    dc:identifier="' . $article_url . '" />' . LB;
+    $retval .= '</rdf:RDF>';
+
+    return $retval;
+}
+
+/**
+* Returns the trackback URL for an entry
+*
+* Note: Trackback pings default to stories, so we leave off the type if it
+*       is 'article' to create shorter URLs.
+*
+* @param    string  $id     the entry's ID
+* @param    string  $type   type of the entry ('article' = story, etc.)
+* @return   string          trackback URL for that entry
+*
+*/
+function TRB_makeTrackbackUrl ($id, $type = 'article')
+{
+    global $_CONF;
+
+    $url = $_CONF['site_url'] . '/trackback.php?id=' . $id;
+    if (!empty ($type) && ($type != 'article')) {
+        $url .= '&amp;type=' . $type;
+    }
+
+    return COM_buildUrl ($url);
+}
+
+/**
+* Filter the title for a trackback comment we've received
+*
+* @param    string  $title  title of the comment
+* @return   string          filtered title
+*
+*/
+function TRB_filterTitle ($title)
+{
+    return htmlspecialchars (COM_checkWords (strip_tags (COM_stripslashes ($title))));
+}
+
+/**
+* Filter the blog name for a trackback comment we've received
+*
+* @param    string  $blogname   blog name for the comment
+* @return   string              filtered blog name
+*
+*/
+function TRB_filterBlogname ($blogname)
+{
+    return htmlspecialchars (COM_checkWords (strip_tags (COM_stripslashes ($blogname))));
+}
+
+/**
+* Filter the excerpt of a trackback comment we've received
+*
+* Note: Does not truncate the excerpt.
+*
+* @param    string  $excerpt    excerpt of the trackback comment
+* @return   string              filtered excerpt
+*
+*/
+function TRB_filterExcerpt ($excerpt)
+{
+    return COM_checkWords (strip_tags (COM_stripslashes ($excerpt)));
+}
+
+/**
+* Check if the current user is allowed to delete trackback comments.
+*
+* @param    string  $sid    ID of the parent object of the comment
+* @param    string  $type   type of the parent object ('article' = story, etc.)
+* @return   bool            true = user can delete the comment, false = nope
+*
+*/
+function TRB_allowDelete ($sid, $type)
+{
+    global $_TABLES;
+
+    $allowed = false;
+
+    if ($type == 'article') {
+        $sid = addslashes ($sid);
+        $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['stories']} WHERE sid = '$sid'" . COM_getPermSql ('AND', 0, 3) . COM_getTopicSql ('AND'));
+        $A = DB_fetchArray ($result);
+
+        if (SEC_hasRights ('story.edit') && (SEC_hasAccess ($A['owner_id'],
+                    $A['group_id'], $A['perm_owner'], $A['perm_group'],
+                    $A['perm_members'], $A['perm_anon']) == 3)) {
+            $allowed = true;
+        } else {
+            $allowed = false;
+        }
+    } else {
+        $allowed = PLG_handlePingComment ($type, $sid, 'delete');
+    }
+
+    return $allowed;
+}
+
+/**
+* Check a trackback / pingback for spam
+*
+* @param    string  $url        URL of the trackback comment
+* @param    string  $title      title of the comment (set to $url if empty)
+* @param    string  $blog       name of the blog that sent the comment
+* @param    string  $excerpt    excerpt from the comment
+* @return   int                 TRB_SAVE_OK or TRB_SAVE_SPAM
+*
+*/
+function TRB_checkForSpam ($url, $title = '', $blog = '', $excerpt = '')
+{
+    global $_CONF;
+
+    $comment = TRB_formatComment ($url, $title, $blog, $excerpt);
+    $result = PLG_checkforSpam ($comment, $_CONF['spamx']);
+
+    if ($result > 0) {
+        return TRB_SAVE_SPAM;
+    }
+
+    return TRB_SAVE_OK;
+}
+
+/**
+* Save a trackback (or pingback) comment.
+*
+* Also filters parameters and handles multiple trackbacks from the same source.
+*
+* Note: Spam check should have been done before calling this function.
+*
+* @param    string  $sid        entry id
+* @param    string  $type       type of entry ('article' = story, etc.)
+* @param    string  $url        URL of the trackback comment
+* @param    string  $title      title of the comment (set to $url if empty)
+* @param    string  $blog       name of the blog that sent the comment
+* @param    string  $excerpt    excerpt from the comment
+* @return   int                 < 0: error, > 0: ID of the trackback comment
+*
+*/
+function TRB_saveTrackbackComment ($sid, $type, $url, $title = '', $blog = '', $excerpt = '')
+{
+    global $_CONF, $_TABLES;
+
+    $url = COM_applyFilter ($url);
+    $title = TRB_filterTitle ($title);
+    $blog = TRB_filterBlogname ($blog);
+    $excerpt = TRB_filterExcerpt ($excerpt);
+
+    // MT does that, so follow its example ...
+    if (strlen ($excerpt) > 255) {
+        $excerpt = substr ($excerpt, 0, 252) . '...';
+    }
+
+    $title   = str_replace (array ('$',     '{',      '}'),
+                            array ('&#36;', '&#123;', '&#126;'), $title);
+    $excerpt = str_replace (array ('$',     '{',      '}'),
+                            array ('&#36;', '&#123;', '&#126;'), $excerpt);
+    $blog    = str_replace (array ('$',     '{',      '}'),
+                            array ('&#36;', '&#123;', '&#126;'), $blog);
+
+    $url     = addslashes ($url);
+    $title   = addslashes ($title);
+    $blog    = addslashes ($blog);
+    $excerpt = addslashes ($excerpt);
+
+    if ($_CONF['multiple_trackbacks'] == 0) {
+        // multiple trackbacks not allowed - check if we have this one already
+        if (DB_count ($_TABLES['trackback'], array ('url', 'sid', 'type'),
+                      array ($url, $sid, $type)) >= 1) {
+            return TRB_SAVE_REJECT;
+        }
+    } else if ($_CONF['multiple_trackbacks'] == 1) {
+        // delete any earlier trackbacks from the same URL
+        DB_delete ($_TABLES['trackback'], array ('url', 'sid', 'type'),
+                   array ($url, $sid, $type));
+    } // else: multiple trackbacks allowed
+
+    DB_save ($_TABLES['trackback'], 'sid,url,title,blog,excerpt,date,type,ipaddress',
+             "'$sid','$url','$title','$blog','$excerpt',NOW(),'$type','{$_SERVER['REMOTE_ADDR']}'");
+
+    $comment_id = DB_insertId ();
+
+    if ($type == 'article') {
+        DB_query ("UPDATE {$_TABLES['stories']} SET trackbacks = trackbacks + 1 WHERE (sid = '$sid')");
+    }
+
+    return $comment_id;
+}
+
+/**
+* Delete a trackback comment
+*
+* Note: Permission checks have to be done by the caller.
+*
+* @param    int     $cid    ID of the trackback comment
+* @return   void
+*
+*/
+function TRB_deleteTrackbackComment ($cid)
+{
+    global $_TABLES;
+
+    $cid = addslashes ($cid);
+    DB_delete ($_TABLES['trackback'], 'cid', $cid);
+}
+
+/**
+* Format one trackback comment for display
+*
+* Note: $excerpt is not truncated - this should have been done elsewhere
+*
+* @param    string      $url        URL of the trackback comment
+* @param    string      $title      title of the comment (set to $url if empty)
+* @param    string      $blog       name of the blog that sent the comment
+* @param    string      $excerpt    excerpt from the comment
+* @param    timestamp   $date       date and time when the comment was sent
+* @param    bool        $delete_option  whether to display a link to delete the trackback comment
+* @param    string      $cid        id of this trackback comment
+* @param    string      $ipaddress  IP address the comment was sent from
+* @return   string                  HTML of the formatted trackback comment
+*
+*/
+function TRB_formatComment ($url, $title = '', $blog = '', $excerpt = '', $date = 0, $delete_option = false, $cid = '', $ipaddress = '')
+{
+    global $_CONF, $LANG01, $LANG_TRB, $MESSAGE;
+
+    if (empty ($title)) {
+        $title = $url;
+    }
+
+    if ($date == 0) {
+        $date = time ();
+    }
+    $curtime = COM_getUserDateTimeFormat ($date);
+
+    $template = new Template ($_CONF['path_layout'] . 'trackback');
+    $template->set_file (array ('comment' => 'formattedcomment.thtml'));
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+
+    $template->set_var ('lang_from', $LANG_TRB['from']);
+    $template->set_var ('lang_tracked_on', $LANG_TRB['tracked_on']);
+    $template->set_var ('lang_readmore', $LANG_TRB['read_more']);
+
+    $anchor = '<a href="' . $url . '">';
+    $readmore = $anchor . $LANG_TRB['read_more'] . '</a>';
+
+    $template->set_var ('readmore_link', $readmore);
+    $template->set_var ('start_readmore_anchortag', $anchor);
+    $template->set_var ('end_readmore_anchortag', '</a>');
+
+    $template->set_var ('trackback_url', $url);
+    $template->set_var ('trackback_title', $title);
+    $template->set_var ('trackback_blog_name', $blog);
+    $template->set_var ('trackback_date', $curtime[0]);
+
+    if (empty ($blog)) {
+        $template->set_var ('trackback_from_blog_name', '');
+    } else {
+        $template->set_var ('trackback_from_blog_name', $LANG_TRB['from'] . ' '
+                                                        . $blog);
+    }
+    if (empty ($excerpt)) {
+        $template->set_var ('trackback_excerpt', '');
+        $template->set_var ('trackback_excerpt_readmore', '');
+        $template->set_var ('excerpt_br', '');
+    } else {
+        $template->set_var ('trackback_excerpt', $excerpt);
+        $template->set_var ('trackback_excerpt_readmore',
+                            $excerpt . ' ' . $readmore);
+        $template->set_var ('excerpt_br', '<br>');
+    }
+
+    $deloption = '';
+    if ($delete_option) {
+        $deloption .= '[ ';
+        $deloption .= '<a href="' . $_CONF['site_admin_url']
+                   . '/trackback.php?mode=delete&amp;cid=' . $cid . '">'
+                   . $LANG01[28] . '</a>';
+        if (!empty ($ipaddress)) {
+            if (empty ($_CONF['ip_lookup'])) {
+                $deloption .= ' | ' . $ipaddress;
+            } else {
+                $iplookup = str_replace ('*', $ipaddress, $_CONF['ip_lookup']);
+                $deloption .= ' | <a href="' . $iplookup . '">' . $ipaddress
+                           . '</a>';
+            }
+        }
+        $deloption .= ' ]';
+    }
+    $template->set_var ('delete_option', $deloption);
+
+    $template->parse ('output', 'comment');
+    return $template->finish ($template->get_var ('output'));
+}
+
+/**
+* Check if a given web page links to us
+*
+* @param    string  $sid        ID of entry that got pinged
+* @param    string  $type       type of that entry ('article' for stories, etc.)
+* @para     string  $urlToGet   URL of the page that supposedly links to us
+* @return   bool                true = links to us, false = doesn't
+*
+*/
+function TRB_linksToUs ($sid, $type, $urlToGet)
+{
+    global $_CONF;
+
+    if (!isset ($_CONF['check_trackback_link']) ||
+            ($_CONF['check_trackback_link'] == 0)) {
+        // we shouldn't be here - don't do anything
+        return true;
+    }
+
+    require_once ('HTTP/Request.php');
+
+    $retval = false;
+
+    if ($_CONF['check_trackback_link'] == 2) {
+        // build the URL of the pinged page on our site
+        if ($type == 'article') {
+            $urlToCheck = COM_buildUrl ($_CONF['site_url']
+                                        . '/article.php?story=' . $sid);
+        } else {
+            $urlToCheck = PLG_getItemInfo ($type, $sid, 'url');
+        }
+    } else {
+        // check only against the site_url
+        $urlToCheck = $_CONF['site_url'];
+    }
+
+    $req = new HTTP_Request ($urlToGet);
+    $req->addHeader ('User-Agent', 'GeekLog/' . VERSION);
+    if (PEAR::isError ($req->sendRequest ())) {
+        COM_errorLog ("Trackback verification: " . $req->getMessage()
+                      . " when requesting $urlToGet");
+    } else {
+        if ($req->getResponseCode () == 200) {
+            $body = $req->getResponseBody ();
+
+            preg_match_all ("/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>/i",
+                            $body, $matches);
+            for ($i = 0; $i < count ($matches[0]); $i++) {
+                if ($_CONF['check_trackback_link'] == 1) {
+                    if (strpos ($matches[1][$i], $urlToCheck) === 0) {
+                        // found it!
+                        $retval = true;
+                        break;
+                    }
+                } else {
+                    if ($matches[1][$i] == $urlToCheck) {
+                        // found it!
+                        $retval = true;
+                        break;
+                    }
+                }
+            }
+        } else {
+            COM_errorLog ("Trackback verification: Got HTTP response code "
+                          . $req->getResponseCode ()
+                          . " when requesting $urlToGet");
+        }
+    }
+
+    return $retval;
+}
+
+/**
+* Handles a trackback ping for an entry.
+*
+* Also takes care of the speedlimit and spam. Assumes that the caller of this
+* function has already checked permissions!
+*
+* Note: Error messages are XML-formatted and echo'd out directly, as they
+*       are supposed to be processed by some sort of software.
+*
+* @param    string  $sid    ID of entry that got pinged
+* @param    string  $type   type of that entry ('article' for stories, etc.)
+* @return   bool            true = success, false = an error occured
+*
+* P.S. "Critical" errors are rejected with a HTTP 403 Forbidden status code.
+*      According to RFC2616, this status code means
+*      "The server understood the request, but is refusing to fulfill it.
+*       Authorization will not help and the request SHOULD NOT be repeated."
+*      See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4
+*
+*/
+function TRB_handleTrackbackPing ($sid, $type = 'article')
+{
+    global $_CONF, $_TABLES;
+
+    // Note: Error messages are hard-coded in English since there is no way of
+    // knowing which language the sender of the trackback ping may prefer.
+    $TRB_ERROR = array (
+        'no_url'     => 'No URL given.',
+        'rejected'   => 'Multiple posts not allowed.',
+        'spam'       => 'Spam detected.',
+        'speedlimit' => 'Your last trackback comment was %d seconds ago. This site requires at least %d seconds between trackback comments.',
+        'no_link'    => 'Trackback rejected as you do not seem to link to us.'
+    );
+
+    // the speed limit applies to trackback comments, too
+    if (isset ($_CONF['trackbackspeedlimit'])) {
+        $speedlimit = $_CONF['trackbackspeedlimit'];
+    } else {
+        $speedlimit = $_CONF['commentspeedlimit'];
+    }
+    COM_clearSpeedlimit ($speedlimit, 'trackback');
+    $last = COM_checkSpeedlimit ('trackback');
+    if ($last > 0) {
+        TRB_sendTrackbackResponse (1, sprintf ($TRB_ERROR['speedlimit'],
+                                   $last, $speedlimit), 403, 'Forbidden');
+        TRB_logRejected ('Speedlimit', $_POST['url']);
+
+        return false;
+    }
+
+    // update speed limit now in any case
+    COM_updateSpeedlimit ('trackback');
+
+    if (isset ($_POST['url'])) { // a URL is mandatory ...
+
+        if (substr ($_POST['url'], 0, 4) != 'http') {
+            TRB_sendTrackbackResponse (1, $TRB_ERROR['no_url'],
+                                       403, 'Forbidden');
+            TRB_logRejected ('No valid URL', $_POST['url']);
+
+            return false;
+        }
+
+        // do spam check on the unfiltered post
+        $result = TRB_checkForSpam ($_POST['url'], $_POST['title'],
+                                    $_POST['blog_name'], $_POST['excerpt']);
+
+        if ($result == TRB_SAVE_SPAM) {
+            TRB_sendTrackbackResponse (1, $TRB_ERROR['spam'], 403, 'Forbidden');
+            TRB_logRejected ('Spam detected', $_POST['url']);
+
+            return false;
+        }
+
+        if (isset ($_CONF['check_trackback_link']) &&
+                ($_CONF['check_trackback_link'] > 0)) {
+            if (!TRB_linksToUs ($sid, $type, $_POST['url'])) {
+                TRB_sendTrackbackResponse (1, $TRB_ERROR['no_link'],
+                                           403, 'Forbidden');
+                TRB_logRejected ('No link to us', $_POST['url']);
+
+                return false;
+            }
+        }
+
+        $saved = TRB_saveTrackbackComment ($sid, $type, $_POST['url'],
+                    $_POST['title'], $_POST['blog_name'], $_POST['excerpt']);
+
+        if ($saved == TRB_SAVE_REJECT) {
+            TRB_sendTrackbackResponse (1, $TRB_ERROR['rejected'],
+                                       403, 'Forbidden');
+            TRB_logRejected ('Multiple Trackbacks', $_POST['url']);
+
+            return false;
+        }
+
+        if (isset ($_CONF['notification']) &&
+                in_array ('trackback', $_CONF['notification'])) {
+            TRB_sendNotificationEmail ($saved, 'trackback');
+        }
+
+        TRB_sendTrackbackResponse (0);
+
+        return true;
+    } else {
+        TRB_sendTrackbackResponse (1, $TRB_ERROR['no_url']);
+        TRB_logRejected ('No URL', $_POST['url']);
+    }
+
+    return false;
+}
+
+/**
+* Render all the trackback comments for a specific entry
+*
+* @param    string  $sid            entry id
+* @param    string  $type           type of entry ('article' = story, etc.)
+* @param    string  $title          the entry's title
+* @param    string  $permalink      link to the entry
+* @param    string  trackback_url   trackback URL for this entry
+* @return   string                  HTML (formatted list of trackback comments)
+*
+*/
+function TRB_renderTrackbackComments ($sid, $type, $title, $permalink, $trackback_url = '')
+{
+    global $_CONF, $_TABLES, $LANG_TRB;
+
+    $link_and_title = '<a href="' . $permalink . '">' . $title . '</a>';
+    if (empty ($trackback_url)) {
+        $trackback_url = TRB_makeTrackbackUrl ($sid, $type);
+    }
+
+    $template = new Template ($_CONF['path_layout'] . 'trackback');
+    $template->set_file (array ('trackback' => 'trackback.thtml',
+                                'comment'   => 'trackbackcomment.thtml'));
+    $template->set_var ('site_url', $_CONF['site_url']);
+    $template->set_var ('layout_url', $_CONF['layout_url']);
+
+    $template->set_var ('lang_trackback', $LANG_TRB['trackback']);
+    $template->set_var ('lang_trackback_url', $LANG_TRB['this_trackback_url']);
+
+    $template->set_var ('permalink', $permalink);
+    $template->set_var ('permalink_and_title', $link_and_title);
+    $template->set_var ('trackback_url', $trackback_url);
+
+    $result = DB_query ("SELECT cid,url,title,blog,excerpt,ipaddress,UNIX_TIMESTAMP(date) AS day FROM {$_TABLES['trackback']} WHERE sid = '$sid' AND type = '$type' ORDER BY date");
+    $numrows = DB_numRows ($result);
+
+    $template->set_var ('trackback_comment_count', $numrows);
+    $num_comments = sprintf ($LANG_TRB['num_comments'], $numrows);
+    $template->set_var ('trackback_comment_text', $num_comments);
+    if ($numrows == 0) {
+        $template->set_var ('lang_trackback_comments',
+                            $LANG_TRB['no_comments']);
+        $template->set_var ('lang_trackback_comments_no_link',
+                            $LANG_TRB['no_comments']);
+    } else {
+        $template->set_var ('lang_trackback_comments',
+                            sprintf ($LANG_TRB['intro_text'], $link_and_title));
+        $template->set_var ('lang_trackback_comments_no_link',
+                            sprintf ($LANG_TRB['intro_text'], $title));
+    }
+
+    $delete_option = TRB_allowDelete ($sid, $type);
+
+    for ($i = 0; $i < $numrows; $i++) {
+        $A = DB_fetchArray ($result);
+        $comment = TRB_formatComment ($A['url'], $A['title'], $A['blog'],
+                        $A['excerpt'], $A['day'], $delete_option, $A['cid'],
+                        $A['ipaddress']);
+        $template->set_var ('formatted_comment', $comment);
+        $template->parse ('trackback_comments', 'comment', true);
+    }
+    $template->parse ('output', 'trackback');
+
+    return $template->finish ($template->get_var ('output'));
+}
+
+/**
+* Send a trackback ping
+*
+* Based on a code snippet by Jannis Hermanns,
+* http://www.jannis.to/programming/trackback.html
+*
+* @param    string  $targeturl  URL to ping
+* @param    string  $url        URL of our entry
+* @param    string  $title      title of our entry
+* @param    string  $excerpt    text excerpt from our entry
+* @param    string  $blog       name of our Geeklog site
+* @return   mixed               true = success, otherwise: error message
+*
+*/
+function TRB_sendTrackbackPing ($targeturl, $url, $title, $excerpt, $blog = '')
+{
+    global $_CONF, $LANG_TRB, $LANG_CHARSET;
+
+    if (empty ($blog)) {
+        $blog = $_CONF['site_name'];
+    }
+
+    $target = parse_url ($targeturl);
+    if (!isset ($target['query'])) {
+        $target['query'] = '';
+    } else if (!empty ($target['query'])) {
+        $target['query'] = '?' . $target['query'];
+    }
+    if (!isset ($target['port']) || !is_numeric ($target['port'])) {
+        $target['port'] = 80;
+    }
+
+    $sock = fsockopen ($target['host'], $target['port']);
+    if (!is_resource ($sock)) {
+        COM_errorLog ('Trackback: Could not connect to ' . $targeturl);
+
+        return $LANG_TRB['error_socket'];
+    }
+
+    $toSend = 'url=' . rawurlencode ($url) . '&title=' . rawurlencode ($title)
+            . '&blog_name=' . rawurlencode ($blog) . '&excerpt='
+            . rawurlencode ($excerpt);
+
+    if (empty ($LANG_CHARSET)) {
+        $charset = $_CONF['default_charset'];
+
+        if (empty ($charset)) {
+            $charset = 'iso-8859-1';
+        }
+    } else {
+        $charset = $LANG_CHARSET;
+    }
+
+    fputs ($sock, 'POST ' . $target['path'] . $target['query'] . " HTTP/1.0\r\n");
+    fputs ($sock, 'Host: ' . $target['host'] . "\r\n");
+    fputs ($sock, 'Content-type: application/x-www-form-urlencoded; charset='
+                  . $charset . "\r\n");
+    fputs ($sock, 'Content-length: ' . strlen ($toSend) . "\r\n");
+    fputs ($sock, 'User-Agent: GeekLog/' . VERSION . "\r\n");
+    fputs ($sock, "Connection: close\r\n\r\n");
+    fputs ($sock, $toSend);
+
+    $res = '';
+    while (!feof ($sock)) {
+        $res .= fgets ($sock, 128);
+    }
+
+    fclose($sock);
+
+    // firing up the XML parser for this would be overkill ...
+    $r1 = strpos ($res, '<error>');
+    $r2 = strpos ($res, '</error>');
+    if (($r1 === false) || ($r2 === false)) {
+        return $LANG_TRB['error_response'];
+    }
+    $r1 += strlen ('<error>');
+    $e = trim (substr ($res, $r1, $r2 - $r1));
+
+    if ($e != 0) {
+        $r1 = strpos ($res, '<message>');
+        $r2 = strpos ($res, '</message>');
+        $r1 += strlen ('<message>');
+        if (($r1 === false) || ($r2 === false)) {
+            return $LANG_TRB['error_unspecified'];
+        }
+        $m = trim (substr ($res, $r1, $r2 - $r1));
+
+        return $m;
+    }
+
+    return true;
+}
+
+/**
+* Attempt to auto-detect the Trackback URL of a post.
+*
+* @param    string  $url    URL of post with embedded RDF for the Trackback URL
+* @return   mixed           Trackback URL, or false on error
+*
+* Note: The RDF, if found, is only parsed using a regular expression. Using
+*       the XML parser may be more successful on some occassions ...
+*
+*/
+function TRB_detectTrackbackUrl ($url)
+{
+    require_once ('HTTP/Request.php');
+
+    $retval = false;
+
+    $req = new HTTP_Request ($url);
+    $req->setMethod (HTTP_REQUEST_METHOD_GET);
+    $req->addHeader ('User-Agent', 'GeekLog/' . VERSION);
+
+    $response = $req->sendRequest ();
+    if (PEAR::isError ($response)) {
+        COM_errorLog ('TRB_detectTrackbackUrl: ' . $response->getMessage());
+
+        return false;
+    }
+
+    $page = $req->getResponseBody ();
+
+    // search for the RDF first
+    $startpos = strpos ($page, '<rdf:RDF ');
+    if ($startpos !== false) {
+        $endpos = strpos ($page, '</rdf:RDF>', $startpos);
+
+        $endpos += strlen ('</rdf:RDF>');
+        $rdf = substr ($page, $startpos, $endpos - $startpos);
+
+        // Okay, we COULD fire up the XML parser now. But then again ...
+        if (preg_match ('/trackback:ping="(.*)"/', $rdf, $matches) == 1) {
+            if (!empty ($matches[1])) {
+                $retval = $matches[1];
+            }
+        }
+    }
+
+    // no luck with the RDF? try searching for a rel="trackback" link
+    if ($retval === false) {
+        // remove all linefeeds first to help the regexp below
+        $page = preg_replace( "/(\015\012)|(\015)|(\012)/", '', $page);
+
+        preg_match_all( "/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $page, $matches );
+        for ($i = 0; $i < count ($matches[0]); $i++) {
+            $link = $matches[0][$i];
+            if (strpos ($link, 'rel="trackback"') !== false) {
+                $retval = $matches[1][$i];
+                break;
+            }
+        }
+    }
+
+    return $retval;
+}
+
+/**
+* Send a notification email when a new trackback comment has been posted
+*
+* @param    int     $cid    ID of the trackback comment
+* @param    string  $what   type of notification: 'trackback' or 'pingback'
+* @return   void
+*
+*/
+function TRB_sendNotificationEmail ($cid, $what = 'trackback')
+{
+    global $_CONF, $_TABLES, $LANG03, $LANG08, $LANG09, $LANG29, $LANG_TRB;
+
+    $cid = addslashes ($cid);
+    $result = DB_query ("SELECT sid,type,title,excerpt,url,blog,ipaddress FROM {$_TABLES['trackback']} WHERE (cid = '$cid')");
+    $A = DB_fetchArray ($result);
+    $type = $A['type'];
+    $id = $A['sid'];
+
+    $mailbody = '';
+    if (!empty ($A['title'])) {
+        $mailbody .= $LANG03[16] . ': ' . $A['title'] . "\n";
+    }
+    $mailbody .= $LANG_TRB['blog_name'] . ': ';
+    if (!empty ($A['blog'])) {
+        $mailbody .= $A['blog'] . ' ';
+    }
+    $mailbody .= '(' . $A['ipaddress'] . ")\n";
+    $mailbody .= $LANG29[12] . ': ' . $A['url'] . "\n";
+
+    if ($type != 'article') {
+        $mailbody .= $LANG09[5] . ': ' . $type . "\n";
+    }
+
+    if (!empty ($A['excerpt'])) {
+        // the excerpt is max. 255 characters long anyway, so we add it
+        // in its entirety
+        $mailbody .= $A['excerpt'] . "\n\n";
+    }
+
+    if ($type == 'article') {
+        $commenturl = COM_buildUrl ($_CONF['site_url'] . '/article.php?story='
+                                    . $id) . '#trackback';
+    } else {
+        $commenturl = PLG_getItemInfo ($type, $id, 'url');
+    }
+
+    $mailbody .= $LANG08[33] . ' <' . $commenturl . ">\n\n";
+
+    $mailbody .= "\n------------------------------\n";
+    $mailbody .= "\n$LANG08[34]\n";
+    $mailbody .= "\n------------------------------\n";
+
+    if ($what == 'pingback') {
+        $mailsubject = $_CONF['site_name'] . ' ' . $LANG_TRB['pingback'];
+    } else {
+        $mailsubject = $_CONF['site_name'] . ' ' . $LANG_TRB['trackback'];
+    }
+
+    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/lib-user.php 1.4.0sr5-1/cpanel-glprivate/system/lib-user.php
--- 1.3.11sr1/cpanel-glprivate/system/lib-user.php	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/lib-user.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,13 +2,13 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | lib-user.php                                                              |
 // |                                                                           |
 // | User-related functions needed in more than one place.                     |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
 // | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
 // |          Mark Limburg      - mlimburg@users.sourceforge.net               |
@@ -32,12 +32,18 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-user.php,v 1.7 2004/10/05 19:52:45 dhaun Exp $
+// $Id: lib-user.php,v 1.23.2.1 2006/06/30 12:20:48 dhaun Exp $
 
-if (eregi ('lib-user.php', $HTTP_SERVER_VARS['PHP_SELF'])) {
-    die ('This file can not be used on its own.');
+if (strpos ($_SERVER['PHP_SELF'], 'lib-user.php') !== false) {
+    die ('This file can not be used on its own!');
 }
 
+/* Constants for acount stats */
+define('USER_ACCOUNT_DISABLED', 0); // Account is banned/disabled
+define('USER_ACCOUNT_AWAITING_ACTIVATION', 1); // Account awaiting user to login.
+define('USER_ACCOUNT_AWAITING_APPROVAL', 2); // Account awaiting moderator approval
+define('USER_ACCOUNT_ACTIVE', 3); // active account
+
 
 /**
 * Delete a user account
@@ -106,8 +112,7 @@
     DB_query ("UPDATE {$_TABLES['stories']} SET uid = 1 WHERE uid = $uid");
     DB_query ("UPDATE {$_TABLES['stories']} SET owner_id = 1 WHERE owner_id = $uid");
 
-    // same for links and events
-    DB_query ("UPDATE {$_TABLES['links']} SET owner_id = 1 WHERE owner_id = $uid");
+    // same for events
     DB_query ("UPDATE {$_TABLES['events']} SET owner_id = 1 WHERE owner_id = $uid");
 
     // delete personal events
@@ -136,7 +141,6 @@
     $rootuser = $A['ug_uid'];
 
     DB_query ("UPDATE {$_TABLES['blocks']} SET owner_id = $rootuser WHERE owner_id = $uid");
-    DB_query ("UPDATE {$_TABLES['pollquestions']} SET owner_id = $rootuser WHERE owner_id = $uid");
     DB_query ("UPDATE {$_TABLES['topics']} SET owner_id = $rootuser WHERE owner_id = $uid");
 
     // now delete the user itself
@@ -153,7 +157,7 @@
 * @return   bool                true = success, false = an error occured
 *
 */
-function USER_createAndSendPassword ($username, $useremail)
+function USER_createAndSendPassword ($username, $useremail, $uid)
 {
     global $_CONF, $_TABLES, $LANG04;
 
@@ -162,7 +166,7 @@
     $passwd = md5 ($passwd);
     $passwd = substr ($passwd, 1, 8);
     $passwd2 = md5 ($passwd);
-    DB_change ($_TABLES['users'], 'passwd', "$passwd2", 'username', $username);
+    DB_change ($_TABLES['users'], 'passwd', "$passwd2", 'uid', $uid);
 
     if (file_exists ($_CONF['path_data'] . 'welcome_email.txt')) {
         $template = new Template ($_CONF['path_data']);
@@ -194,9 +198,43 @@
 }
 
 /**
+* Inform a user their account has been activated.
+*
+* @param    string  $username   user's login name
+* @param    string  $useremail  user's email address
+* @return   bool                true = success, false = an error occured
+*
+*/
+function USER_sendActivationEmail ($username, $useremail)
+{
+    global $_CONF, $_TABLES, $LANG04;
+
+    if (file_exists ($_CONF['path_data'] . 'activation_email.txt')) {
+        $template = new Template ($_CONF['path_data']);
+        $template->set_file (array ('mail' => 'activation_email.txt'));
+        $template->set_var ('site_url', $_CONF['site_url']);
+        $template->set_var ('site_name', $_CONF['site_name']);
+        $template->set_var ('site_slogan', $_CONF['site_slogan']);
+        $template->set_var ('lang_text1', $LANG04[15]);
+        $template->set_var ('lang_text2', $LANG04[14]);
+        $template->parse ('output', 'mail');
+        $mailtext = $template->get_var ('output');
+    } else {
+        $mailtext = str_replace("<username>", $username, $LANG04[118]) . "\n\n";
+        $mailtext .= $_CONF['site_url'] ."\n\n";
+        $mailtext .= $LANG04[119] . "\n\n";
+        $mailtext .= $_CONF['site_url'] ."/users.php?mode=getpassword\n\n";
+        $mailtext .= $_CONF['site_name'] . "\n";
+        $mailtext .= $_CONF['site_url'] . "\n";
+    }
+    $subject = $_CONF['site_name'] . ': ' . $LANG04[120];
+
+    return COM_mail ($useremail, $subject, $mailtext);
+}
+
+/**
 * Create a new user
 *
-* This also handles adding the user to the user submission queue, if enabled.
 * Also calls the custom user registration (if enabled) and plugin functions.
 *
 * NOTE: Does NOT send out password emails.
@@ -209,7 +247,7 @@
 * @return   int                 new user's ID
 *
 */
-function USER_createAccount ($username, $email, $passwd = '', $fullname = '', $homepage = '')
+function USER_createAccount ($username, $email, $passwd = '', $fullname = '', $homepage = '', $remoteusername = '', $service = '')
 {
     global $_CONF, $_TABLES;
 
@@ -235,10 +273,29 @@
         $fields .= ',homepage';
         $values .= ",'$homepage'";
     }
+    if ($_CONF['usersubmission'] == 1)
+    {
+        $fields .= ',status';
+        $values .= ','.USER_ACCOUNT_AWAITING_APPROVAL;
+    } else {
+        if (!empty($remoteusername)) {
+            $fields .= ',remoteusername';
+            $values .= ",'$remoteusername'";
+        }
+        if (!empty($service)) {
+            $fields .= ',remoteservice';
+            $values .= ",'$service'";
+        }
+    }
 
     DB_query ("INSERT INTO {$_TABLES['users']} ($fields) VALUES ($values)");
-
-    $uid = DB_getItem ($_TABLES['users'], 'uid', "username = '$username'");
+    // Get the uid of the user, possibly given a service:
+    if ($remoteusername != '')
+    {
+        $uid = DB_getItem ($_TABLES['users'], 'uid', "remoteusername = '$remoteusername' AND remoteservice='$service'");
+    } else {
+        $uid = DB_getItem ($_TABLES['users'], 'uid', "username = '$username' AND remoteservice IS NULL");
+    }
 
     // Add user to Logged-in group (i.e. members) and the All Users group
     $normal_grp = DB_getItem ($_TABLES['groups'], 'grp_id',
@@ -258,52 +315,215 @@
     DB_query ("INSERT INTO {$_TABLES['usercomment']} (uid,commentmode,commentlimit) VALUES ($uid,'{$_CONF['comment_mode']}','{$_CONF['comment_limit']}')");
     DB_query ("INSERT INTO {$_TABLES['userinfo']} (uid) VALUES ($uid)");
 
-    // if user submission queue is active and the current user is not a
-    // User Admin, then we may have to add the new user to the submission queue
-    if (($_CONF['usersubmission'] == 1) && !SEC_hasRights ('user.edit')) {
-        $queueUser = true;
-        if (!empty ($_CONF['allow_domains'])) {
-            $allowed = explode (',', $_CONF['allow_domains']);
-            // Note: We already made sure $email is a valid address
-            $domain = substr ($email, strpos ($email, '@') + 1);
-            if (in_array ($domain, $allowed)) {
-                $queueUser = false;
-            }
-        }
-        if ($queueUser) {
-            $passwd = addslashes (md5 (''));
-            DB_change ($_TABLES['users'], 'passwd', "$passwd", 'uid', $uid);
-        }
-    }
-
     // call custom registration function and plugins
     if ($_CONF['custom_registration'] && (function_exists ('custom_usercreate'))) {
         custom_usercreate ($uid);
     }
     PLG_createUser ($uid);
 
+    // Notify the admin?
+    if (isset ($_CONF['notification']) &&
+        in_array ('user', $_CONF['notification'])) {
+        if ($_CONF['usersubmission'] == 1)
+        {
+            $mode = 'inactive';
+        } else {
+            $mode = 'active';
+        }
+        USER_sendNotification ($username, $email, $uid, $mode);
+    }
+
     return $uid;
 }
 
 /**
-* Check if a user is in the user submission queue
+* Send an email notification when a new user registers with the site.
 *
-* @param    int     $uid    User ID to check
-* @return   boolean         true = user in queue, false = not in queue
+* @param username string      User name of the new user
+* @param email    string      Email address of the new user
+* @param uid      int         User id of the new user
+* @param mode     string      Mode user was added at.
 *
 */
-function USER_isQueued ($uid)
+function USER_sendNotification ($username, $email, $uid, $mode='inactive')
 {
-    global $_TABLES;
+    global $_CONF, $_TABLES, $LANG01, $LANG04, $LANG08, $LANG28, $LANG29;
+
+    $mailbody = "$LANG04[2]: $username\n"
+              . "$LANG04[5]: $email\n"
+              . "$LANG28[14]: " . strftime ($_CONF['date']) . "\n\n";
+
+    if ($mode == 'inactive') {
+        // user needs admin approval
+        $mailbody .= "$LANG01[10] <{$_CONF['site_admin_url']}/moderation.php>\n\n";
+    } else {
+        // user has been created, or has activated themselves:
+        $mailbody .= "$LANG29[4] <{$_CONF['site_url']}/users.php?mode=profile&uid={$uid}>\n\n";
+    }
+    $mailbody .= "\n------------------------------\n";
+    $mailbody .= "\n$LANG08[34]\n";
+    $mailbody .= "\n------------------------------\n";
 
-    $queued = false;
+    $mailsubject = $_CONF['site_name'] . ' ' . $LANG29[40];
+    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
+}
+
+/**
+* Get a user's photo, either uploaded or from an external service
+*
+* @param    int     $uid    User ID
+* @param    string  $photo  name of the user's uploaded image
+* @param    string  $email  user's email address (for gravatar.com)
+* @param    int     $width  preferred image width
+* @return   string          <img> tag or empty string if no image available
+*
+* @note     All parameters are optional and can be passed as 0 / empty string.
+*
+*/
+function USER_getPhoto ($uid = 0, $photo = '', $email = '', $width = 0)
+{
+    global $_CONF, $_TABLES, $_USER;
 
-    $passwd = md5 ('');
-    if (DB_getItem ($_TABLES['users'], 'passwd', "uid = $uid") == $passwd) {
-        $queued = true;
+    $photo = '';
+    if ($_CONF['allow_user_photo'] == 1) {
+
+        if (($width == 0) && !empty ($_CONF['force_photo_width'])) {
+            $width = $_CONF['force_photo_width'];
+        }
+
+        // collect user's information with as few SQL requests as possible
+        if ($uid == 0) {
+            $uid = $_USER['uid'];
+            if (empty ($email)) {
+                $email = $_USER['email'];
+            }
+            if (empty ($photo)) {
+                $photo = $_USER['photo'];
+            }
+        }
+        if (empty ($photo) || empty ($email)) {
+            $result = DB_query ("SELECT email,photo FROM {$_TABLES['users']} WHERE uid = '$uid'");
+            list($newemail, $newphoto) = DB_fetchArray ($result);
+            if (empty ($photo)) {
+                $photo = $newphoto;
+            }
+            if (empty ($email)) {
+                $email = $newemail;
+            }
+        }
+
+        $img = '';
+        if (empty ($photo)) {
+            // no photo - try gravatar.com, if allowed
+            if ($_CONF['use_gravatar']) {
+                $img = 'http://www.gravatar.com/avatar.php?gravatar_id='
+                     . md5 ($email);
+                if ($width > 0) {
+                    $img .= '&amp;size=' . $width;
+                }
+                if (!empty ($_CONF['gravatar_rating'])) {
+                    $img .= '&amp;rating=' . $_CONF['gravatar_rating'];
+                }
+                if (!empty ($_CONF['default_photo'])) {
+                    $img .= '&amp;default='
+                         . urlencode ($_CONF['default_photo']);
+                }
+            }
+        } else {
+            // check if images are inside or outside the document root
+            if (strstr ($_CONF['path_images'], $_CONF['path_html'])) {
+                $imgpath = substr ($_CONF['path_images'],
+                                   strlen ($_CONF['path_html']));
+                $img = $_CONF['site_url'] . '/' . $imgpath . 'userphotos/'
+                     . $photo;
+            } else {
+                $img = $_CONF['site_url']
+                     . '/getimage.php?mode=userphotos&amp;image=' . $photo;
+            }
+        }
+
+        if (empty ($img) && !empty ($_CONF['default_photo'])) {
+            $img = $_CONF['default_photo'];
+        }
+        if (!empty ($img)) {
+            $photo = '<img src="' . $img . '"';
+            if ($width > 0) {
+                $photo .= ' width="' . $width . '"';
+            }
+            $photo .= ' alt="" class="userphoto">';
+        }
     }
 
-    return $queued;
+    return $photo;
 }
 
+/**
+* Add user to group if user does not belong to specified group
+*
+* This is part of the Geeklog user implementation. This function
+* looks up whether a user belongs to a specified group and if not
+* adds them to the group
+*
+* @param        int      $groupid     Group we want to see if user belongs to and if not add to group
+* @param        int         $uid        ID for user to check if in group and if not add user. If empty current user.
+* @return       boolean     true if user is added to group, otherwise false
+*
+*/
+function USER_addGroup ($groupid, $uid = '')
+{
+    global $_CONF, $_TABLES, $_USER;
+
+     // set $uid if $uid is empty
+    if (empty ($uid)) {
+        // bail for anonymous users
+        if (empty ($_USER['uid']) || ($_USER['uid'] == 1)) {
+            return false;
+        } else {
+            // If logged in set to current uid
+            $uid = $_USER['uid'];
+        }
+    }
+
+    if (($groupid < 1) || SEC_inGroup ($groupid, $uid)) {
+        return false;
+    } else {
+        DB_query ("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ('$groupid', $uid)");
+        return true;
+    }
+}
+
+/**
+* Delete from group if user belongs to specified group
+*
+* This is part of the Geeklog user implementation. This function
+* looks up whether a user belongs to a specified group and if so
+* removes them from the group
+*
+* @param        int      $groupid      Group we want to see if user belongs to and if so delete user from group
+* @param        int         $uid          ID for user to delete. If empty current user.
+* @return       boolean     true if user is removed from group, otherwise false
+*
+*/
+function  USER_delGroup ($groupid, $uid = '')
+{
+    global $_CONF, $_TABLES, $_USER;
+
+    // set $uid if $uid is empty
+    if (empty ($uid)) {
+        // bail for anonymous users
+        if (empty ($_USER['uid']) || ($_USER['uid'] == 1)) {
+            return false;
+        } else {
+            // If logged in set to current uid
+            $uid = $_USER['uid'];
+        }
+    }
+
+    if (($groupid > 0) && SEC_inGroup ($groupid, $uid)) {
+        DB_query ("DELETE FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $groupid AND ug_uid = $uid");
+        return true;
+    } else {
+        return false;
+    }
+}
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Archive/Tar.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Archive/Tar.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Archive/Tar.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Archive/Tar.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1762 @@
+<?php
+/* vim: set ts=4 sw=4: */
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available through the world-wide-web at the following url:           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Author: Vincent Blavet <vincent@phpconcept.net>                      |
+// +----------------------------------------------------------------------+
+//
+// $Id: Tar.php,v 1.29 2005/03/17 21:02:31 vblavet Exp $
+
+require_once 'PEAR.php';
+
+
+define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001);
+
+/**
+* Creates a (compressed) Tar archive
+*
+* @author   Vincent Blavet <vincent@phpconcept.net>
+* @version  $Revision: 1.29 $
+* @package  Archive
+*/
+class Archive_Tar extends PEAR
+{
+    /**
+    * @var string Name of the Tar
+    */
+    var $_tarname='';
+
+    /**
+    * @var boolean if true, the Tar file will be gzipped
+    */
+    var $_compress=false;
+
+    /**
+    * @var string Type of compression : 'none', 'gz' or 'bz2'
+    */
+    var $_compress_type='none';
+
+    /**
+    * @var string Explode separator
+    */
+    var $_separator=' ';
+
+    /**
+    * @var file descriptor
+    */
+    var $_file=0;
+
+    /**
+    * @var string Local Tar name of a remote Tar (http:// or ftp://)
+    */
+    var $_temp_tarname='';
+
+    // {{{ constructor
+    /**
+    * Archive_Tar Class constructor. This flavour of the constructor only
+    * declare a new Archive_Tar object, identifying it by the name of the
+    * tar file.
+    * If the compress argument is set the tar will be read or created as a
+    * gzip or bz2 compressed TAR file.
+    *
+    * @param    string  $p_tarname  The name of the tar archive to create
+    * @param    string  $p_compress can be null, 'gz' or 'bz2'. This
+    *                   parameter indicates if gzip or bz2 compression
+    *                   is required.  For compatibility reason the
+    *                   boolean value 'true' means 'gz'.
+    * @access public
+    */
+    function Archive_Tar($p_tarname, $p_compress = null)
+    {
+        $this->PEAR();
+        $this->_compress = false;
+        $this->_compress_type = 'none';
+        if (($p_compress === null) || ($p_compress == '')) {
+            if (@file_exists($p_tarname)) {
+                if ($fp = @fopen($p_tarname, "rb")) {
+                    // look for gzip magic cookie
+                    $data = fread($fp, 2);
+                    fclose($fp);
+                    if ($data == "\37\213") {
+                        $this->_compress = true;
+                        $this->_compress_type = 'gz';
+                    // No sure it's enought for a magic code ....
+                    } elseif ($data == "BZ") {
+                        $this->_compress = true;
+                        $this->_compress_type = 'bz2';
+                    }
+                }
+            } else {
+                // probably a remote file or some file accessible
+                // through a stream interface
+                if (substr($p_tarname, -2) == 'gz') {
+                    $this->_compress = true;
+                    $this->_compress_type = 'gz';
+                } elseif ((substr($p_tarname, -3) == 'bz2') ||
+                          (substr($p_tarname, -2) == 'bz')) {
+                    $this->_compress = true;
+                    $this->_compress_type = 'bz2';
+                }
+            }
+        } else {
+            if (($p_compress === true) || ($p_compress == 'gz')) {
+                $this->_compress = true;
+                $this->_compress_type = 'gz';
+            } else if ($p_compress == 'bz2') {
+                $this->_compress = true;
+                $this->_compress_type = 'bz2';
+            } else {
+                die("Unsupported compression type '$p_compress'\n".
+                    "Supported types are 'gz' and 'bz2'.\n");
+                return false;
+            }
+        }
+        $this->_tarname = $p_tarname;
+        if ($this->_compress) { // assert zlib or bz2 extension support
+            if ($this->_compress_type == 'gz')
+                $extname = 'zlib';
+            else if ($this->_compress_type == 'bz2')
+                $extname = 'bz2';
+
+            if (!extension_loaded($extname)) {
+                PEAR::loadExtension($extname);
+            }
+            if (!extension_loaded($extname)) {
+                die("The extension '$extname' couldn't be found.\n".
+                    "Please make sure your version of PHP was built ".
+                    "with '$extname' support.\n");
+                return false;
+            }
+        }
+    }
+    // }}}
+
+    // {{{ destructor
+    function _Archive_Tar()
+    {
+        $this->_close();
+        // ----- Look for a local copy to delete
+        if ($this->_temp_tarname != '')
+            @unlink($this->_temp_tarname);
+        $this->_PEAR();
+    }
+    // }}}
+
+    // {{{ create()
+    /**
+    * This method creates the archive file and add the files / directories
+    * that are listed in $p_filelist.
+    * If a file with the same name exist and is writable, it is replaced
+    * by the new tar.
+    * The method return false and a PEAR error text.
+    * The $p_filelist parameter can be an array of string, each string
+    * representing a filename or a directory name with their path if
+    * needed. It can also be a single string with names separated by a
+    * single blank.
+    * For each directory added in the archive, the files and
+    * sub-directories are also added.
+    * See also createModify() method for more details.
+    *
+    * @param array  $p_filelist An array of filenames and directory names, or a
+	*                           single string with names separated by a single
+	*                           blank space.
+    * @return                   true on success, false on error.
+    * @see createModify()
+    * @access public
+    */
+    function create($p_filelist)
+    {
+        return $this->createModify($p_filelist, '', '');
+    }
+    // }}}
+
+    // {{{ add()
+    /**
+    * This method add the files / directories that are listed in $p_filelist in
+    * the archive. If the archive does not exist it is created.
+    * The method return false and a PEAR error text.
+    * The files and directories listed are only added at the end of the archive,
+    * even if a file with the same name is already archived.
+    * See also createModify() method for more details.
+    *
+    * @param array  $p_filelist An array of filenames and directory names, or a
+	*                           single string with names separated by a single
+	*                           blank space.
+    * @return                   true on success, false on error.
+    * @see createModify()
+    * @access public
+    */
+    function add($p_filelist)
+    {
+        return $this->addModify($p_filelist, '', '');
+    }
+    // }}}
+
+    // {{{ extract()
+    function extract($p_path='')
+    {
+        return $this->extractModify($p_path, '');
+    }
+    // }}}
+
+    // {{{ listContent()
+    function listContent()
+    {
+        $v_list_detail = array();
+
+        if ($this->_openRead()) {
+            if (!$this->_extractList('', $v_list_detail, "list", '', '')) {
+                unset($v_list_detail);
+                $v_list_detail = 0;
+            }
+            $this->_close();
+        }
+
+        return $v_list_detail;
+    }
+    // }}}
+
+    // {{{ createModify()
+    /**
+    * This method creates the archive file and add the files / directories
+    * that are listed in $p_filelist.
+    * If the file already exists and is writable, it is replaced by the
+    * new tar. It is a create and not an add. If the file exists and is
+    * read-only or is a directory it is not replaced. The method return
+    * false and a PEAR error text.
+    * The $p_filelist parameter can be an array of string, each string
+    * representing a filename or a directory name with their path if
+    * needed. It can also be a single string with names separated by a
+    * single blank.
+    * The path indicated in $p_remove_dir will be removed from the
+    * memorized path of each file / directory listed when this path
+    * exists. By default nothing is removed (empty path '')
+    * The path indicated in $p_add_dir will be added at the beginning of
+    * the memorized path of each file / directory listed. However it can
+    * be set to empty ''. The adding of a path is done after the removing
+    * of path.
+    * The path add/remove ability enables the user to prepare an archive
+    * for extraction in a different path than the origin files are.
+    * See also addModify() method for file adding properties.
+    *
+    * @param array  $p_filelist     An array of filenames and directory names,
+	*                               or a single string with names separated by
+	*                               a single blank space.
+    * @param string $p_add_dir      A string which contains a path to be added
+	*                               to the memorized path of each element in
+	*                               the list.
+    * @param string $p_remove_dir   A string which contains a path to be
+	*                               removed from the memorized path of each
+	*                               element in the list, when relevant.
+    * @return boolean               true on success, false on error.
+    * @access public
+    * @see addModify()
+    */
+    function createModify($p_filelist, $p_add_dir, $p_remove_dir='')
+    {
+        $v_result = true;
+
+        if (!$this->_openWrite())
+            return false;
+
+        if ($p_filelist != '') {
+            if (is_array($p_filelist))
+                $v_list = $p_filelist;
+            elseif (is_string($p_filelist))
+                $v_list = explode($this->_separator, $p_filelist);
+            else {
+                $this->_cleanFile();
+                $this->_error('Invalid file list');
+                return false;
+            }
+
+            $v_result = $this->_addList($v_list, $p_add_dir, $p_remove_dir);
+        }
+
+        if ($v_result) {
+            $this->_writeFooter();
+            $this->_close();
+        } else
+            $this->_cleanFile();
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ addModify()
+    /**
+    * This method add the files / directories listed in $p_filelist at the
+    * end of the existing archive. If the archive does not yet exists it
+    * is created.
+    * The $p_filelist parameter can be an array of string, each string
+    * representing a filename or a directory name with their path if
+    * needed. It can also be a single string with names separated by a
+    * single blank.
+    * The path indicated in $p_remove_dir will be removed from the
+    * memorized path of each file / directory listed when this path
+    * exists. By default nothing is removed (empty path '')
+    * The path indicated in $p_add_dir will be added at the beginning of
+    * the memorized path of each file / directory listed. However it can
+    * be set to empty ''. The adding of a path is done after the removing
+    * of path.
+    * The path add/remove ability enables the user to prepare an archive
+    * for extraction in a different path than the origin files are.
+    * If a file/dir is already in the archive it will only be added at the
+    * end of the archive. There is no update of the existing archived
+    * file/dir. However while extracting the archive, the last file will
+    * replace the first one. This results in a none optimization of the
+    * archive size.
+    * If a file/dir does not exist the file/dir is ignored. However an
+    * error text is send to PEAR error.
+    * If a file/dir is not readable the file/dir is ignored. However an
+    * error text is send to PEAR error.
+    *
+    * @param array      $p_filelist     An array of filenames and directory
+	*                                   names, or a single string with names
+	*                                   separated by a single blank space.
+    * @param string     $p_add_dir      A string which contains a path to be
+	*                                   added to the memorized path of each
+	*                                   element in the list.
+    * @param string     $p_remove_dir   A string which contains a path to be
+	*                                   removed from the memorized path of
+	*                                   each element in the list, when
+    *                                   relevant.
+    * @return                           true on success, false on error.
+    * @access public
+    */
+    function addModify($p_filelist, $p_add_dir, $p_remove_dir='')
+    {
+        $v_result = true;
+
+        if (!$this->_isArchive())
+            $v_result = $this->createModify($p_filelist, $p_add_dir,
+			                                $p_remove_dir);
+        else {
+            if (is_array($p_filelist))
+                $v_list = $p_filelist;
+            elseif (is_string($p_filelist))
+                $v_list = explode($this->_separator, $p_filelist);
+            else {
+                $this->_error('Invalid file list');
+                return false;
+            }
+
+            $v_result = $this->_append($v_list, $p_add_dir, $p_remove_dir);
+        }
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ addString()
+    /**
+    * This method add a single string as a file at the
+    * end of the existing archive. If the archive does not yet exists it
+    * is created.
+    *
+    * @param string     $p_filename     A string which contains the full
+	*                                   filename path that will be associated
+	*                                   with the string.
+    * @param string     $p_string       The content of the file added in
+	*                                   the archive.
+    * @return                           true on success, false on error.
+    * @access public
+    */
+    function addString($p_filename, $p_string)
+    {
+        $v_result = true;
+        
+        if (!$this->_isArchive()) {
+            if (!$this->_openWrite()) {
+                return false;
+            }
+            $this->_close();
+        }
+        
+        if (!$this->_openAppend())
+            return false;
+
+        // Need to check the get back to the temporary file ? ....
+        $v_result = $this->_addString($p_filename, $p_string);
+
+        $this->_writeFooter();
+
+        $this->_close();
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ extractModify()
+    /**
+    * This method extract all the content of the archive in the directory
+    * indicated by $p_path. When relevant the memorized path of the
+    * files/dir can be modified by removing the $p_remove_path path at the
+    * beginning of the file/dir path.
+    * While extracting a file, if the directory path does not exists it is
+    * created.
+    * While extracting a file, if the file already exists it is replaced
+    * without looking for last modification date.
+    * While extracting a file, if the file already exists and is write
+    * protected, the extraction is aborted.
+    * While extracting a file, if a directory with the same name already
+    * exists, the extraction is aborted.
+    * While extracting a directory, if a file with the same name already
+    * exists, the extraction is aborted.
+    * While extracting a file/directory if the destination directory exist
+    * and is write protected, or does not exist but can not be created,
+    * the extraction is aborted.
+    * If after extraction an extracted file does not show the correct
+    * stored file size, the extraction is aborted.
+    * When the extraction is aborted, a PEAR error text is set and false
+    * is returned. However the result can be a partial extraction that may
+    * need to be manually cleaned.
+    *
+    * @param string $p_path         The path of the directory where the
+	*                               files/dir need to by extracted.
+    * @param string $p_remove_path  Part of the memorized path that can be
+	*                               removed if present at the beginning of
+	*                               the file/dir path.
+    * @return boolean               true on success, false on error.
+    * @access public
+    * @see extractList()
+    */
+    function extractModify($p_path, $p_remove_path)
+    {
+        $v_result = true;
+        $v_list_detail = array();
+
+        if ($v_result = $this->_openRead()) {
+            $v_result = $this->_extractList($p_path, $v_list_detail,
+			                                "complete", 0, $p_remove_path);
+            $this->_close();
+        }
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ extractInString()
+    /**
+    * This method extract from the archive one file identified by $p_filename.
+    * The return value is a string with the file content, or NULL on error.
+    * @param string $p_filename     The path of the file to extract in a string.
+    * @return                       a string with the file content or NULL.
+    * @access public
+    */
+    function extractInString($p_filename)
+    {
+        if ($this->_openRead()) {
+            $v_result = $this->_extractInString($p_filename);
+            $this->_close();
+        } else {
+            $v_result = NULL;
+        }
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ extractList()
+    /**
+    * This method extract from the archive only the files indicated in the
+    * $p_filelist. These files are extracted in the current directory or
+    * in the directory indicated by the optional $p_path parameter.
+    * If indicated the $p_remove_path can be used in the same way as it is
+    * used in extractModify() method.
+    * @param array  $p_filelist     An array of filenames and directory names,
+	*                               or a single string with names separated
+	*                               by a single blank space.
+    * @param string $p_path         The path of the directory where the
+	*                               files/dir need to by extracted.
+    * @param string $p_remove_path  Part of the memorized path that can be
+	*                               removed if present at the beginning of
+	*                               the file/dir path.
+    * @return                       true on success, false on error.
+    * @access public
+    * @see extractModify()
+    */
+    function extractList($p_filelist, $p_path='', $p_remove_path='')
+    {
+        $v_result = true;
+        $v_list_detail = array();
+
+        if (is_array($p_filelist))
+            $v_list = $p_filelist;
+        elseif (is_string($p_filelist))
+            $v_list = explode($this->_separator, $p_filelist);
+        else {
+            $this->_error('Invalid string list');
+            return false;
+        }
+
+        if ($v_result = $this->_openRead()) {
+            $v_result = $this->_extractList($p_path, $v_list_detail, "partial",
+			                                $v_list, $p_remove_path);
+            $this->_close();
+        }
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ setAttribute()
+    /**
+    * This method set specific attributes of the archive. It uses a variable
+    * list of parameters, in the format attribute code + attribute values :
+    * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ',');
+    * @param mixed $argv            variable list of attributes and values
+    * @return                       true on success, false on error.
+    * @access public
+    */
+    function setAttribute()
+    {
+        $v_result = true;
+        
+        // ----- Get the number of variable list of arguments
+        if (($v_size = func_num_args()) == 0) {
+            return true;
+        }
+        
+        // ----- Get the arguments
+        $v_att_list = &func_get_args();
+
+        // ----- Read the attributes
+        $i=0;
+        while ($i<$v_size) {
+
+            // ----- Look for next option
+            switch ($v_att_list[$i]) {
+                // ----- Look for options that request a string value
+                case ARCHIVE_TAR_ATT_SEPARATOR :
+                    // ----- Check the number of parameters
+                    if (($i+1) >= $v_size) {
+                        $this->_error('Invalid number of parameters for '
+						              .'attribute ARCHIVE_TAR_ATT_SEPARATOR');
+                        return false;
+                    }
+
+                    // ----- Get the value
+                    $this->_separator = $v_att_list[$i+1];
+                    $i++;
+                break;
+
+                default :
+                    $this->_error('Unknow attribute code '.$v_att_list[$i].'');
+                    return false;
+            }
+
+            // ----- Next attribute
+            $i++;
+        }
+
+        return $v_result;
+    }
+    // }}}
+
+    // {{{ _error()
+    function _error($p_message)
+    {
+        // ----- To be completed
+        $this->raiseError($p_message);
+    }
+    // }}}
+
+    // {{{ _warning()
+    function _warning($p_message)
+    {
+        // ----- To be completed
+        $this->raiseError($p_message);
+    }
+    // }}}
+
+    // {{{ _isArchive()
+    function _isArchive($p_filename=NULL)
+    {
+        if ($p_filename == NULL) {
+            $p_filename = $this->_tarname;
+        }
+        clearstatcache();
+        return @is_file($p_filename);
+    }
+    // }}}
+
+    // {{{ _openWrite()
+    function _openWrite()
+    {
+        if ($this->_compress_type == 'gz')
+            $this->_file = @gzopen($this->_tarname, "wb9");
+        else if ($this->_compress_type == 'bz2')
+            $this->_file = @bzopen($this->_tarname, "wb");
+        else if ($this->_compress_type == 'none')
+            $this->_file = @fopen($this->_tarname, "wb");
+        else
+            $this->_error('Unknown or missing compression type ('
+			              .$this->_compress_type.')');
+
+        if ($this->_file == 0) {
+            $this->_error('Unable to open in write mode \''
+			              .$this->_tarname.'\'');
+            return false;
+        }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _openRead()
+    function _openRead()
+    {
+        if (strtolower(substr($this->_tarname, 0, 7)) == 'http://') {
+
+          // ----- Look if a local copy need to be done
+          if ($this->_temp_tarname == '') {
+              $this->_temp_tarname = uniqid('tar').'.tmp';
+              if (!$v_file_from = @fopen($this->_tarname, 'rb')) {
+                $this->_error('Unable to open in read mode \''
+				              .$this->_tarname.'\'');
+                $this->_temp_tarname = '';
+                return false;
+              }
+              if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) {
+                $this->_error('Unable to open in write mode \''
+				              .$this->_temp_tarname.'\'');
+                $this->_temp_tarname = '';
+                return false;
+              }
+              while ($v_data = @fread($v_file_from, 1024))
+                  @fwrite($v_file_to, $v_data);
+              @fclose($v_file_from);
+              @fclose($v_file_to);
+          }
+
+          // ----- File to open if the local copy
+          $v_filename = $this->_temp_tarname;
+
+        } else
+          // ----- File to open if the normal Tar file
+          $v_filename = $this->_tarname;
+
+        if ($this->_compress_type == 'gz')
+            $this->_file = @gzopen($v_filename, "rb");
+        else if ($this->_compress_type == 'bz2')
+            $this->_file = @bzopen($v_filename, "rb");
+        else if ($this->_compress_type == 'none')
+            $this->_file = @fopen($v_filename, "rb");
+        else
+            $this->_error('Unknown or missing compression type ('
+			              .$this->_compress_type.')');
+
+        if ($this->_file == 0) {
+            $this->_error('Unable to open in read mode \''.$v_filename.'\'');
+            return false;
+        }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _openReadWrite()
+    function _openReadWrite()
+    {
+        if ($this->_compress_type == 'gz')
+            $this->_file = @gzopen($this->_tarname, "r+b");
+        else if ($this->_compress_type == 'bz2')
+            $this->_file = @bzopen($this->_tarname, "r+b");
+        else if ($this->_compress_type == 'none')
+            $this->_file = @fopen($this->_tarname, "r+b");
+        else
+            $this->_error('Unknown or missing compression type ('
+			              .$this->_compress_type.')');
+
+        if ($this->_file == 0) {
+            $this->_error('Unable to open in read/write mode \''
+			              .$this->_tarname.'\'');
+            return false;
+        }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _close()
+    function _close()
+    {
+        //if (isset($this->_file)) {
+        if (is_resource($this->_file)) {
+            if ($this->_compress_type == 'gz')
+                @gzclose($this->_file);
+            else if ($this->_compress_type == 'bz2')
+                @bzclose($this->_file);
+            else if ($this->_compress_type == 'none')
+                @fclose($this->_file);
+            else
+                $this->_error('Unknown or missing compression type ('
+				              .$this->_compress_type.')');
+
+            $this->_file = 0;
+        }
+
+        // ----- Look if a local copy need to be erase
+        // Note that it might be interesting to keep the url for a time : ToDo
+        if ($this->_temp_tarname != '') {
+            @unlink($this->_temp_tarname);
+            $this->_temp_tarname = '';
+        }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _cleanFile()
+    function _cleanFile()
+    {
+        $this->_close();
+
+        // ----- Look for a local copy
+        if ($this->_temp_tarname != '') {
+            // ----- Remove the local copy but not the remote tarname
+            @unlink($this->_temp_tarname);
+            $this->_temp_tarname = '';
+        } else {
+            // ----- Remove the local tarname file
+            @unlink($this->_tarname);
+        }
+        $this->_tarname = '';
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _writeBlock()
+    function _writeBlock($p_binary_data, $p_len=null)
+    {
+      if (is_resource($this->_file)) {
+          if ($p_len === null) {
+              if ($this->_compress_type == 'gz')
+                  @gzputs($this->_file, $p_binary_data);
+              else if ($this->_compress_type == 'bz2')
+                  @bzwrite($this->_file, $p_binary_data);
+              else if ($this->_compress_type == 'none')
+                  @fputs($this->_file, $p_binary_data);
+              else
+                  $this->_error('Unknown or missing compression type ('
+				                .$this->_compress_type.')');
+          } else {
+              if ($this->_compress_type == 'gz')
+                  @gzputs($this->_file, $p_binary_data, $p_len);
+              else if ($this->_compress_type == 'bz2')
+                  @bzwrite($this->_file, $p_binary_data, $p_len);
+              else if ($this->_compress_type == 'none')
+                  @fputs($this->_file, $p_binary_data, $p_len);
+              else
+                  $this->_error('Unknown or missing compression type ('
+				                .$this->_compress_type.')');
+
+          }
+      }
+      return true;
+    }
+    // }}}
+
+    // {{{ _readBlock()
+    function _readBlock()
+    {
+      $v_block = null;
+      if (is_resource($this->_file)) {
+          if ($this->_compress_type == 'gz')
+              $v_block = @gzread($this->_file, 512);
+          else if ($this->_compress_type == 'bz2')
+              $v_block = @bzread($this->_file, 512);
+          else if ($this->_compress_type == 'none')
+              $v_block = @fread($this->_file, 512);
+          else
+              $this->_error('Unknown or missing compression type ('
+			                .$this->_compress_type.')');
+      }
+      return $v_block;
+    }
+    // }}}
+
+    // {{{ _jumpBlock()
+    function _jumpBlock($p_len=null)
+    {
+      if (is_resource($this->_file)) {
+          if ($p_len === null)
+              $p_len = 1;
+
+          if ($this->_compress_type == 'gz') {
+              @gzseek($this->_file, @gztell($this->_file)+($p_len*512));
+          }
+          else if ($this->_compress_type == 'bz2') {
+              // ----- Replace missing bztell() and bzseek()
+              for ($i=0; $i<$p_len; $i++)
+                  $this->_readBlock();
+          } else if ($this->_compress_type == 'none')
+              @fseek($this->_file, @ftell($this->_file)+($p_len*512));
+          else
+              $this->_error('Unknown or missing compression type ('
+			                .$this->_compress_type.')');
+
+      }
+      return true;
+    }
+    // }}}
+
+    // {{{ _writeFooter()
+    function _writeFooter()
+    {
+      if (is_resource($this->_file)) {
+          // ----- Write the last 0 filled block for end of archive
+          $v_binary_data = pack("a512", '');
+          $this->_writeBlock($v_binary_data);
+      }
+      return true;
+    }
+    // }}}
+
+    // {{{ _addList()
+    function _addList($p_list, $p_add_dir, $p_remove_dir)
+    {
+      $v_result=true;
+      $v_header = array();
+
+      // ----- Remove potential windows directory separator
+      $p_add_dir = $this->_translateWinPath($p_add_dir);
+      $p_remove_dir = $this->_translateWinPath($p_remove_dir, false);
+
+      if (!$this->_file) {
+          $this->_error('Invalid file descriptor');
+          return false;
+      }
+
+      if (sizeof($p_list) == 0)
+          return true;
+
+      foreach ($p_list as $v_filename) {
+          if (!$v_result) {
+              break;
+          }
+
+        // ----- Skip the current tar name
+        if ($v_filename == $this->_tarname)
+            continue;
+
+        if ($v_filename == '')
+            continue;
+
+        if (!file_exists($v_filename)) {
+            $this->_warning("File '$v_filename' does not exist");
+            continue;
+        }
+
+        // ----- Add the file or directory header
+        if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir))
+            return false;
+
+        if (@is_dir($v_filename)) {
+            if (!($p_hdir = opendir($v_filename))) {
+                $this->_warning("Directory '$v_filename' can not be read");
+                continue;
+            }
+            while (false !== ($p_hitem = readdir($p_hdir))) {
+                if (($p_hitem != '.') && ($p_hitem != '..')) {
+                    if ($v_filename != ".")
+                        $p_temp_list[0] = $v_filename.'/'.$p_hitem;
+                    else
+                        $p_temp_list[0] = $p_hitem;
+
+                    $v_result = $this->_addList($p_temp_list,
+					                            $p_add_dir,
+												$p_remove_dir);
+                }
+            }
+
+            unset($p_temp_list);
+            unset($p_hdir);
+            unset($p_hitem);
+        }
+      }
+
+      return $v_result;
+    }
+    // }}}
+
+    // {{{ _addFile()
+    function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir)
+    {
+      if (!$this->_file) {
+          $this->_error('Invalid file descriptor');
+          return false;
+      }
+
+      if ($p_filename == '') {
+          $this->_error('Invalid file name');
+          return false;
+      }
+
+      // ----- Calculate the stored filename
+      $p_filename = $this->_translateWinPath($p_filename, false);;
+      $v_stored_filename = $p_filename;
+      if (strcmp($p_filename, $p_remove_dir) == 0) {
+          return true;
+      }
+      if ($p_remove_dir != '') {
+          if (substr($p_remove_dir, -1) != '/')
+              $p_remove_dir .= '/';
+
+          if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)
+              $v_stored_filename = substr($p_filename, strlen($p_remove_dir));
+      }
+      $v_stored_filename = $this->_translateWinPath($v_stored_filename);
+      if ($p_add_dir != '') {
+          if (substr($p_add_dir, -1) == '/')
+              $v_stored_filename = $p_add_dir.$v_stored_filename;
+          else
+              $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;
+      }
+
+      $v_stored_filename = $this->_pathReduction($v_stored_filename);
+
+      if ($this->_isArchive($p_filename)) {
+          if (($v_file = @fopen($p_filename, "rb")) == 0) {
+              $this->_warning("Unable to open file '".$p_filename
+			                  ."' in binary read mode");
+              return true;
+          }
+
+          if (!$this->_writeHeader($p_filename, $v_stored_filename))
+              return false;
+
+          while (($v_buffer = fread($v_file, 512)) != '') {
+              $v_binary_data = pack("a512", "$v_buffer");
+              $this->_writeBlock($v_binary_data);
+          }
+
+          fclose($v_file);
+
+      } else {
+          // ----- Only header for dir
+          if (!$this->_writeHeader($p_filename, $v_stored_filename))
+              return false;
+      }
+
+      return true;
+    }
+    // }}}
+
+    // {{{ _addString()
+    function _addString($p_filename, $p_string)
+    {
+      if (!$this->_file) {
+          $this->_error('Invalid file descriptor');
+          return false;
+      }
+
+      if ($p_filename == '') {
+          $this->_error('Invalid file name');
+          return false;
+      }
+
+      // ----- Calculate the stored filename
+      $p_filename = $this->_translateWinPath($p_filename, false);;
+
+      if (!$this->_writeHeaderBlock($p_filename, strlen($p_string),
+	                                0, 0, "", 0, 0))
+          return false;
+
+      $i=0;
+      while (($v_buffer = substr($p_string, (($i++)*512), 512)) != '') {
+          $v_binary_data = pack("a512", $v_buffer);
+          $this->_writeBlock($v_binary_data);
+      }
+
+      return true;
+    }
+    // }}}
+
+    // {{{ _writeHeader()
+    function _writeHeader($p_filename, $p_stored_filename)
+    {
+        if ($p_stored_filename == '')
+            $p_stored_filename = $p_filename;
+        $v_reduce_filename = $this->_pathReduction($p_stored_filename);
+
+        if (strlen($v_reduce_filename) > 99) {
+          if (!$this->_writeLongHeader($v_reduce_filename))
+            return false;
+        }
+
+        $v_info = stat($p_filename);
+        $v_uid = sprintf("%6s ", DecOct($v_info[4]));
+        $v_gid = sprintf("%6s ", DecOct($v_info[5]));
+        $v_perms = sprintf("%6s ", DecOct(fileperms($p_filename)));
+
+        $v_mtime = sprintf("%11s", DecOct(filemtime($p_filename)));
+
+        if (@is_dir($p_filename)) {
+          $v_typeflag = "5";
+          $v_size = sprintf("%11s ", DecOct(0));
+        } else {
+          $v_typeflag = '';
+          clearstatcache();
+          $v_size = sprintf("%11s ", DecOct(filesize($p_filename)));
+        }
+
+        $v_linkname = '';
+
+        $v_magic = '';
+
+        $v_version = '';
+
+        $v_uname = '';
+
+        $v_gname = '';
+
+        $v_devmajor = '';
+
+        $v_devminor = '';
+
+        $v_prefix = '';
+
+        $v_binary_data_first = pack("a100a8a8a8a12A12",
+		                            $v_reduce_filename, $v_perms, $v_uid,
+									$v_gid, $v_size, $v_mtime);
+        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
+		                           $v_typeflag, $v_linkname, $v_magic,
+								   $v_version, $v_uname, $v_gname,
+								   $v_devmajor, $v_devminor, $v_prefix, '');
+
+        // ----- Calculate the checksum
+        $v_checksum = 0;
+        // ..... First part of the header
+        for ($i=0; $i<148; $i++)
+            $v_checksum += ord(substr($v_binary_data_first,$i,1));
+        // ..... Ignore the checksum value and replace it by ' ' (space)
+        for ($i=148; $i<156; $i++)
+            $v_checksum += ord(' ');
+        // ..... Last part of the header
+        for ($i=156, $j=0; $i<512; $i++, $j++)
+            $v_checksum += ord(substr($v_binary_data_last,$j,1));
+
+        // ----- Write the first 148 bytes of the header in the archive
+        $this->_writeBlock($v_binary_data_first, 148);
+
+        // ----- Write the calculated checksum
+        $v_checksum = sprintf("%6s ", DecOct($v_checksum));
+        $v_binary_data = pack("a8", $v_checksum);
+        $this->_writeBlock($v_binary_data, 8);
+
+        // ----- Write the last 356 bytes of the header in the archive
+        $this->_writeBlock($v_binary_data_last, 356);
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _writeHeaderBlock()
+    function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0,
+	                           $p_type='', $p_uid=0, $p_gid=0)
+    {
+        $p_filename = $this->_pathReduction($p_filename);
+
+        if (strlen($p_filename) > 99) {
+          if (!$this->_writeLongHeader($p_filename))
+            return false;
+        }
+
+        if ($p_type == "5") {
+          $v_size = sprintf("%11s ", DecOct(0));
+        } else {
+          $v_size = sprintf("%11s ", DecOct($p_size));
+        }
+
+        $v_uid = sprintf("%6s ", DecOct($p_uid));
+        $v_gid = sprintf("%6s ", DecOct($p_gid));
+        $v_perms = sprintf("%6s ", DecOct($p_perms));
+
+        $v_mtime = sprintf("%11s", DecOct($p_mtime));
+
+        $v_linkname = '';
+
+        $v_magic = '';
+
+        $v_version = '';
+
+        $v_uname = '';
+
+        $v_gname = '';
+
+        $v_devmajor = '';
+
+        $v_devminor = '';
+
+        $v_prefix = '';
+
+        $v_binary_data_first = pack("a100a8a8a8a12A12",
+		                            $p_filename, $v_perms, $v_uid, $v_gid,
+									$v_size, $v_mtime);
+        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
+		                           $p_type, $v_linkname, $v_magic,
+								   $v_version, $v_uname, $v_gname,
+								   $v_devmajor, $v_devminor, $v_prefix, '');
+
+        // ----- Calculate the checksum
+        $v_checksum = 0;
+        // ..... First part of the header
+        for ($i=0; $i<148; $i++)
+            $v_checksum += ord(substr($v_binary_data_first,$i,1));
+        // ..... Ignore the checksum value and replace it by ' ' (space)
+        for ($i=148; $i<156; $i++)
+            $v_checksum += ord(' ');
+        // ..... Last part of the header
+        for ($i=156, $j=0; $i<512; $i++, $j++)
+            $v_checksum += ord(substr($v_binary_data_last,$j,1));
+
+        // ----- Write the first 148 bytes of the header in the archive
+        $this->_writeBlock($v_binary_data_first, 148);
+
+        // ----- Write the calculated checksum
+        $v_checksum = sprintf("%6s ", DecOct($v_checksum));
+        $v_binary_data = pack("a8", $v_checksum);
+        $this->_writeBlock($v_binary_data, 8);
+
+        // ----- Write the last 356 bytes of the header in the archive
+        $this->_writeBlock($v_binary_data_last, 356);
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _writeLongHeader()
+    function _writeLongHeader($p_filename)
+    {
+        $v_size = sprintf("%11s ", DecOct(strlen($p_filename)));
+
+        $v_typeflag = 'L';
+
+        $v_linkname = '';
+
+        $v_magic = '';
+
+        $v_version = '';
+
+        $v_uname = '';
+
+        $v_gname = '';
+
+        $v_devmajor = '';
+
+        $v_devminor = '';
+
+        $v_prefix = '';
+
+        $v_binary_data_first = pack("a100a8a8a8a12A12",
+		                            '././@LongLink', 0, 0, 0, $v_size, 0);
+        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
+		                           $v_typeflag, $v_linkname, $v_magic,
+								   $v_version, $v_uname, $v_gname,
+								   $v_devmajor, $v_devminor, $v_prefix, '');
+
+        // ----- Calculate the checksum
+        $v_checksum = 0;
+        // ..... First part of the header
+        for ($i=0; $i<148; $i++)
+            $v_checksum += ord(substr($v_binary_data_first,$i,1));
+        // ..... Ignore the checksum value and replace it by ' ' (space)
+        for ($i=148; $i<156; $i++)
+            $v_checksum += ord(' ');
+        // ..... Last part of the header
+        for ($i=156, $j=0; $i<512; $i++, $j++)
+            $v_checksum += ord(substr($v_binary_data_last,$j,1));
+
+        // ----- Write the first 148 bytes of the header in the archive
+        $this->_writeBlock($v_binary_data_first, 148);
+
+        // ----- Write the calculated checksum
+        $v_checksum = sprintf("%6s ", DecOct($v_checksum));
+        $v_binary_data = pack("a8", $v_checksum);
+        $this->_writeBlock($v_binary_data, 8);
+
+        // ----- Write the last 356 bytes of the header in the archive
+        $this->_writeBlock($v_binary_data_last, 356);
+
+        // ----- Write the filename as content of the block
+        $i=0;
+        while (($v_buffer = substr($p_filename, (($i++)*512), 512)) != '') {
+            $v_binary_data = pack("a512", "$v_buffer");
+            $this->_writeBlock($v_binary_data);
+        }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _readHeader()
+    function _readHeader($v_binary_data, &$v_header)
+    {
+        if (strlen($v_binary_data)==0) {
+            $v_header['filename'] = '';
+            return true;
+        }
+
+        if (strlen($v_binary_data) != 512) {
+            $v_header['filename'] = '';
+            $this->_error('Invalid block size : '.strlen($v_binary_data));
+            return false;
+        }
+
+        // ----- Calculate the checksum
+        $v_checksum = 0;
+        // ..... First part of the header
+        for ($i=0; $i<148; $i++)
+            $v_checksum+=ord(substr($v_binary_data,$i,1));
+        // ..... Ignore the checksum value and replace it by ' ' (space)
+        for ($i=148; $i<156; $i++)
+            $v_checksum += ord(' ');
+        // ..... Last part of the header
+        for ($i=156; $i<512; $i++)
+           $v_checksum+=ord(substr($v_binary_data,$i,1));
+
+        $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/"
+		                 ."a8checksum/a1typeflag/a100link/a6magic/a2version/"
+						 ."a32uname/a32gname/a8devmajor/a8devminor",
+						 $v_binary_data);
+
+        // ----- Extract the checksum
+        $v_header['checksum'] = OctDec(trim($v_data['checksum']));
+        if ($v_header['checksum'] != $v_checksum) {
+            $v_header['filename'] = '';
+
+            // ----- Look for last block (empty block)
+            if (($v_checksum == 256) && ($v_header['checksum'] == 0))
+                return true;
+
+            $this->_error('Invalid checksum for file "'.$v_data['filename']
+			              .'" : '.$v_checksum.' calculated, '
+						  .$v_header['checksum'].' expected');
+            return false;
+        }
+
+        // ----- Extract the properties
+        $v_header['filename'] = trim($v_data['filename']);
+        $v_header['mode'] = OctDec(trim($v_data['mode']));
+        $v_header['uid'] = OctDec(trim($v_data['uid']));
+        $v_header['gid'] = OctDec(trim($v_data['gid']));
+        $v_header['size'] = OctDec(trim($v_data['size']));
+        $v_header['mtime'] = OctDec(trim($v_data['mtime']));
+        if (($v_header['typeflag'] = $v_data['typeflag']) == "5") {
+          $v_header['size'] = 0;
+        }
+        /* ----- All these fields are removed form the header because
+		they do not carry interesting info
+        $v_header[link] = trim($v_data[link]);
+        $v_header[magic] = trim($v_data[magic]);
+        $v_header[version] = trim($v_data[version]);
+        $v_header[uname] = trim($v_data[uname]);
+        $v_header[gname] = trim($v_data[gname]);
+        $v_header[devmajor] = trim($v_data[devmajor]);
+        $v_header[devminor] = trim($v_data[devminor]);
+        */
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _readLongHeader()
+    function _readLongHeader(&$v_header)
+    {
+      $v_filename = '';
+      $n = floor($v_header['size']/512);
+      for ($i=0; $i<$n; $i++) {
+        $v_content = $this->_readBlock();
+        $v_filename .= $v_content;
+      }
+      if (($v_header['size'] % 512) != 0) {
+        $v_content = $this->_readBlock();
+        $v_filename .= $v_content;
+      }
+
+      // ----- Read the next header
+      $v_binary_data = $this->_readBlock();
+
+      if (!$this->_readHeader($v_binary_data, $v_header))
+        return false;
+
+      $v_header['filename'] = $v_filename;
+
+      return true;
+    }
+    // }}}
+
+    // {{{ _extractInString()
+    /**
+    * This method extract from the archive one file identified by $p_filename.
+    * The return value is a string with the file content, or NULL on error.
+    * @param string $p_filename     The path of the file to extract in a string.
+    * @return                       a string with the file content or NULL.
+    * @access private
+    */
+    function _extractInString($p_filename)
+    {
+        $v_result_str = "";
+
+        While (strlen($v_binary_data = $this->_readBlock()) != 0)
+        {
+          if (!$this->_readHeader($v_binary_data, $v_header))
+            return NULL;
+
+          if ($v_header['filename'] == '')
+            continue;
+
+          // ----- Look for long filename
+          if ($v_header['typeflag'] == 'L') {
+            if (!$this->_readLongHeader($v_header))
+              return NULL;
+          }
+
+          if ($v_header['filename'] == $p_filename) {
+              if ($v_header['typeflag'] == "5") {
+                  $this->_error('Unable to extract in string a directory '
+				                .'entry {'.$v_header['filename'].'}');
+                  return NULL;
+              } else {
+                  $n = floor($v_header['size']/512);
+                  for ($i=0; $i<$n; $i++) {
+                      $v_result_str .= $this->_readBlock();
+                  }
+                  if (($v_header['size'] % 512) != 0) {
+                      $v_content = $this->_readBlock();
+                      $v_result_str .= substr($v_content, 0,
+					                          ($v_header['size'] % 512));
+                  }
+                  return $v_result_str;
+              }
+          } else {
+              $this->_jumpBlock(ceil(($v_header['size']/512)));
+          }
+        }
+
+        return NULL;
+    }
+    // }}}
+
+    // {{{ _extractList()
+    function _extractList($p_path, &$p_list_detail, $p_mode,
+	                      $p_file_list, $p_remove_path)
+    {
+    $v_result=true;
+    $v_nb = 0;
+    $v_extract_all = true;
+    $v_listing = false;
+
+    $p_path = $this->_translateWinPath($p_path, false);
+    if ($p_path == '' || (substr($p_path, 0, 1) != '/'
+	    && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) {
+      $p_path = "./".$p_path;
+    }
+    $p_remove_path = $this->_translateWinPath($p_remove_path);
+
+    // ----- Look for path to remove format (should end by /)
+    if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/'))
+      $p_remove_path .= '/';
+    $p_remove_path_size = strlen($p_remove_path);
+
+    switch ($p_mode) {
+      case "complete" :
+        $v_extract_all = TRUE;
+        $v_listing = FALSE;
+      break;
+      case "partial" :
+          $v_extract_all = FALSE;
+          $v_listing = FALSE;
+      break;
+      case "list" :
+          $v_extract_all = FALSE;
+          $v_listing = TRUE;
+      break;
+      default :
+        $this->_error('Invalid extract mode ('.$p_mode.')');
+        return false;
+    }
+
+    clearstatcache();
+
+    while (strlen($v_binary_data = $this->_readBlock()) != 0)
+    {
+      $v_extract_file = FALSE;
+      $v_extraction_stopped = 0;
+
+      if (!$this->_readHeader($v_binary_data, $v_header))
+        return false;
+
+      if ($v_header['filename'] == '') {
+        continue;
+      }
+
+      // ----- Look for long filename
+      if ($v_header['typeflag'] == 'L') {
+        if (!$this->_readLongHeader($v_header))
+          return false;
+      }
+
+      if ((!$v_extract_all) && (is_array($p_file_list))) {
+        // ----- By default no unzip if the file is not found
+        $v_extract_file = false;
+
+        for ($i=0; $i<sizeof($p_file_list); $i++) {
+          // ----- Look if it is a directory
+          if (substr($p_file_list[$i], -1) == '/') {
+            // ----- Look if the directory is in the filename path
+            if ((strlen($v_header['filename']) > strlen($p_file_list[$i]))
+			    && (substr($v_header['filename'], 0, strlen($p_file_list[$i]))
+				    == $p_file_list[$i])) {
+              $v_extract_file = TRUE;
+              break;
+            }
+          }
+
+          // ----- It is a file, so compare the file names
+          elseif ($p_file_list[$i] == $v_header['filename']) {
+            $v_extract_file = TRUE;
+            break;
+          }
+        }
+      } else {
+        $v_extract_file = TRUE;
+      }
+
+      // ----- Look if this file need to be extracted
+      if (($v_extract_file) && (!$v_listing))
+      {
+        if (($p_remove_path != '')
+            && (substr($v_header['filename'], 0, $p_remove_path_size)
+			    == $p_remove_path))
+          $v_header['filename'] = substr($v_header['filename'],
+		                                 $p_remove_path_size);
+        if (($p_path != './') && ($p_path != '/')) {
+          while (substr($p_path, -1) == '/')
+            $p_path = substr($p_path, 0, strlen($p_path)-1);
+
+          if (substr($v_header['filename'], 0, 1) == '/')
+              $v_header['filename'] = $p_path.$v_header['filename'];
+          else
+            $v_header['filename'] = $p_path.'/'.$v_header['filename'];
+        }
+        if (file_exists($v_header['filename'])) {
+          if (   (@is_dir($v_header['filename']))
+		      && ($v_header['typeflag'] == '')) {
+            $this->_error('File '.$v_header['filename']
+			              .' already exists as a directory');
+            return false;
+          }
+          if (   ($this->_isArchive($v_header['filename']))
+		      && ($v_header['typeflag'] == "5")) {
+            $this->_error('Directory '.$v_header['filename']
+			              .' already exists as a file');
+            return false;
+          }
+          if (!is_writeable($v_header['filename'])) {
+            $this->_error('File '.$v_header['filename']
+			              .' already exists and is write protected');
+            return false;
+          }
+          if (filemtime($v_header['filename']) > $v_header['mtime']) {
+            // To be completed : An error or silent no replace ?
+          }
+        }
+
+        // ----- Check the directory availability and create it if necessary
+        elseif (($v_result
+		         = $this->_dirCheck(($v_header['typeflag'] == "5"
+				                    ?$v_header['filename']
+									:dirname($v_header['filename'])))) != 1) {
+            $this->_error('Unable to create path for '.$v_header['filename']);
+            return false;
+        }
+
+        if ($v_extract_file) {
+          if ($v_header['typeflag'] == "5") {
+            if (!@file_exists($v_header['filename'])) {
+                if (!@mkdir($v_header['filename'], 0777)) {
+                    $this->_error('Unable to create directory {'
+					              .$v_header['filename'].'}');
+                    return false;
+                }
+            }
+          } else {
+              if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) {
+                  $this->_error('Error while opening {'.$v_header['filename']
+				                .'} in write binary mode');
+                  return false;
+              } else {
+                  $n = floor($v_header['size']/512);
+                  for ($i=0; $i<$n; $i++) {
+                      $v_content = $this->_readBlock();
+                      fwrite($v_dest_file, $v_content, 512);
+                  }
+            if (($v_header['size'] % 512) != 0) {
+              $v_content = $this->_readBlock();
+              fwrite($v_dest_file, $v_content, ($v_header['size'] % 512));
+            }
+
+            @fclose($v_dest_file);
+
+            // ----- Change the file mode, mtime
+            @touch($v_header['filename'], $v_header['mtime']);
+            // To be completed
+            //chmod($v_header[filename], DecOct($v_header[mode]));
+          }
+
+          // ----- Check the file size
+          clearstatcache();
+          if (filesize($v_header['filename']) != $v_header['size']) {
+              $this->_error('Extracted file '.$v_header['filename']
+			                .' does not have the correct file size \''
+							.filesize($v_header['filename'])
+							.'\' ('.$v_header['size']
+							.' expected). Archive may be corrupted.');
+              return false;
+          }
+          }
+        } else {
+          $this->_jumpBlock(ceil(($v_header['size']/512)));
+        }
+      } else {
+          $this->_jumpBlock(ceil(($v_header['size']/512)));
+      }
+
+      /* TBC : Seems to be unused ...
+      if ($this->_compress)
+        $v_end_of_file = @gzeof($this->_file);
+      else
+        $v_end_of_file = @feof($this->_file);
+        */
+
+      if ($v_listing || $v_extract_file || $v_extraction_stopped) {
+        // ----- Log extracted files
+        if (($v_file_dir = dirname($v_header['filename']))
+		    == $v_header['filename'])
+          $v_file_dir = '';
+        if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == ''))
+          $v_file_dir = '/';
+
+        $p_list_detail[$v_nb++] = $v_header;
+      }
+    }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _openAppend()
+    function _openAppend()
+    {
+        if (filesize($this->_tarname) == 0)
+          return $this->_openWrite();
+          
+        if ($this->_compress) {
+            $this->_close();
+
+            if (!@rename($this->_tarname, $this->_tarname.".tmp")) {
+                $this->_error('Error while renaming \''.$this->_tarname
+				              .'\' to temporary file \''.$this->_tarname
+							  .'.tmp\'');
+                return false;
+            }
+
+            if ($this->_compress_type == 'gz')
+                $v_temp_tar = @gzopen($this->_tarname.".tmp", "rb");
+            elseif ($this->_compress_type == 'bz2')
+                $v_temp_tar = @bzopen($this->_tarname.".tmp", "rb");
+                
+            if ($v_temp_tar == 0) {
+                $this->_error('Unable to open file \''.$this->_tarname
+				              .'.tmp\' in binary read mode');
+                @rename($this->_tarname.".tmp", $this->_tarname);
+                return false;
+            }
+
+            if (!$this->_openWrite()) {
+                @rename($this->_tarname.".tmp", $this->_tarname);
+                return false;
+            }
+
+            if ($this->_compress_type == 'gz') {
+                $v_buffer = @gzread($v_temp_tar, 512);
+
+                // ----- Read the following blocks but not the last one
+                if (!@gzeof($v_temp_tar)) {
+                    do{
+                        $v_binary_data = pack("a512", $v_buffer);
+                        $this->_writeBlock($v_binary_data);
+                        $v_buffer = @gzread($v_temp_tar, 512);
+
+                    } while (!@gzeof($v_temp_tar));
+                }
+
+                @gzclose($v_temp_tar);
+            }
+            elseif ($this->_compress_type == 'bz2') {
+                $v_buffered_lines   = array();
+                $v_buffered_lines[] = @bzread($v_temp_tar, 512);
+
+                // ----- Read the following blocks but not the last one
+                while (strlen($v_buffered_lines[]
+				              = @bzread($v_temp_tar, 512)) > 0) {
+                    $v_binary_data = pack("a512",
+					                      array_shift($v_buffered_lines));
+                    $this->_writeBlock($v_binary_data);
+                }
+
+                @bzclose($v_temp_tar);
+            }
+
+            if (!@unlink($this->_tarname.".tmp")) {
+                $this->_error('Error while deleting temporary file \''
+				              .$this->_tarname.'.tmp\'');
+            }
+
+        } else {
+            // ----- For not compressed tar, just add files before the last
+			//       512 bytes block
+            if (!$this->_openReadWrite())
+               return false;
+
+            clearstatcache();
+            $v_size = filesize($this->_tarname);
+            fseek($this->_file, $v_size-512);
+        }
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _append()
+    function _append($p_filelist, $p_add_dir='', $p_remove_dir='')
+    {
+        if (!$this->_openAppend())
+            return false;
+            
+        if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir))
+           $this->_writeFooter();
+
+        $this->_close();
+
+        return true;
+    }
+    // }}}
+
+    // {{{ _dirCheck()
+
+    /**
+     * Check if a directory exists and create it (including parent
+     * dirs) if not.
+     *
+     * @param string $p_dir directory to check
+     *
+     * @return bool TRUE if the directory exists or was created
+     */
+    function _dirCheck($p_dir)
+    {
+        if ((@is_dir($p_dir)) || ($p_dir == ''))
+            return true;
+
+        $p_parent_dir = dirname($p_dir);
+
+        if (($p_parent_dir != $p_dir) &&
+            ($p_parent_dir != '') &&
+            (!$this->_dirCheck($p_parent_dir)))
+             return false;
+
+        if (!@mkdir($p_dir, 0777)) {
+            $this->_error("Unable to create directory '$p_dir'");
+            return false;
+        }
+
+        return true;
+    }
+
+    // }}}
+
+    // {{{ _pathReduction()
+
+    /**
+     * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", 
+     * rand emove double slashes.
+     *
+     * @param string $p_dir path to reduce
+     *
+     * @return string reduced path
+     *
+     * @access private
+     *
+     */
+    function _pathReduction($p_dir)
+    {
+        $v_result = '';
+
+        // ----- Look for not empty path
+        if ($p_dir != '') {
+            // ----- Explode path by directory names
+            $v_list = explode('/', $p_dir);
+
+            // ----- Study directories from last to first
+            for ($i=sizeof($v_list)-1; $i>=0; $i--) {
+                // ----- Look for current path
+                if ($v_list[$i] == ".") {
+                    // ----- Ignore this directory
+                    // Should be the first $i=0, but no check is done
+                }
+                else if ($v_list[$i] == "..") {
+                    // ----- Ignore it and ignore the $i-1
+                    $i--;
+                }
+                else if (   ($v_list[$i] == '')
+				         && ($i!=(sizeof($v_list)-1))
+						 && ($i!=0)) {
+                    // ----- Ignore only the double '//' in path,
+                    // but not the first and last /
+                } else {
+                    $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'
+					            .$v_result:'');
+                }
+            }
+        }
+        $v_result = strtr($v_result, '\\', '/');
+        return $v_result;
+    }
+
+    // }}}
+
+    // {{{ _translateWinPath()
+    function _translateWinPath($p_path, $p_remove_disk_letter=true)
+    {
+      if (OS_WINDOWS) {
+          // ----- Look for potential disk letter
+          if (   ($p_remove_disk_letter)
+		      && (($v_position = strpos($p_path, ':')) != false)) {
+              $p_path = substr($p_path, $v_position+1);
+          }
+          // ----- Change potential windows directory separator
+          if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
+              $p_path = strtr($p_path, '\\', '/');
+          }
+      }
+      return $p_path;
+    }
+    // }}}
+
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Console/Getopt.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Console/Getopt.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Console/Getopt.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Console/Getopt.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,251 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available through the world-wide-web at the following url:           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Author: Andrei Zmievski <andrei@php.net>                             |
+// +----------------------------------------------------------------------+
+//
+// $Id: Getopt.php,v 1.21.4.7 2003/12/05 21:57:01 andrei Exp $
+
+require_once 'PEAR.php';
+
+/**
+ * Command-line options parsing class.
+ *
+ * @author Andrei Zmievski <andrei@php.net>
+ *
+ */
+class Console_Getopt {
+    /**
+     * Parses the command-line options.
+     *
+     * The first parameter to this function should be the list of command-line
+     * arguments without the leading reference to the running program.
+     *
+     * The second parameter is a string of allowed short options. Each of the
+     * option letters can be followed by a colon ':' to specify that the option
+     * requires an argument, or a double colon '::' to specify that the option
+     * takes an optional argument.
+     *
+     * The third argument is an optional array of allowed long options. The
+     * leading '--' should not be included in the option name. Options that
+     * require an argument should be followed by '=', and options that take an
+     * option argument should be followed by '=='.
+     *
+     * The return value is an array of two elements: the list of parsed
+     * options and the list of non-option command-line arguments. Each entry in
+     * the list of parsed options is a pair of elements - the first one
+     * specifies the option, and the second one specifies the option argument,
+     * if there was one.
+     *
+     * Long and short options can be mixed.
+     *
+     * Most of the semantics of this function are based on GNU getopt_long().
+     *
+     * @param array  $args           an array of command-line arguments
+     * @param string $short_options  specifies the list of allowed short options
+     * @param array  $long_options   specifies the list of allowed long options
+     *
+     * @return array two-element array containing the list of parsed options and
+     * the non-option arguments
+     *
+     * @access public
+     *
+     */
+    function getopt2($args, $short_options, $long_options = null)
+    {
+        return Console_Getopt::doGetopt(2, $args, $short_options, $long_options);
+    }
+
+    /**
+     * This function expects $args to start with the script name (POSIX-style).
+     * Preserved for backwards compatibility.
+     * @see getopt2()
+     */    
+    function getopt($args, $short_options, $long_options = null)
+    {
+        return Console_Getopt::doGetopt(1, $args, $short_options, $long_options);
+    }
+
+    /**
+     * The actual implementation of the argument parsing code.
+     */
+    function doGetopt($version, $args, $short_options, $long_options = null)
+    {
+        // in case you pass directly readPHPArgv() as the first arg
+        if (PEAR::isError($args)) {
+            return $args;
+        }
+        if (empty($args)) {
+            return array(array(), array());
+        }
+        $opts     = array();
+        $non_opts = array();
+
+        settype($args, 'array');
+
+        if ($long_options) {
+            sort($long_options);
+        }
+
+        /*
+         * Preserve backwards compatibility with callers that relied on
+         * erroneous POSIX fix.
+         */
+        if ($version < 2) {
+            if (isset($args[0]{0}) && $args[0]{0} != '-') {
+                array_shift($args);
+            }
+        }
+
+        reset($args);
+        while (list($i, $arg) = each($args)) {
+
+            /* The special element '--' means explicit end of
+               options. Treat the rest of the arguments as non-options
+               and end the loop. */
+            if ($arg == '--') {
+                $non_opts = array_merge($non_opts, array_slice($args, $i + 1));
+                break;
+            }
+
+            if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
+                $non_opts = array_merge($non_opts, array_slice($args, $i));
+                break;
+            } elseif (strlen($arg) > 1 && $arg{1} == '-') {
+                $error = Console_Getopt::_parseLongOption(substr($arg, 2), $long_options, $opts, $args);
+                if (PEAR::isError($error))
+                    return $error;
+            } else {
+                $error = Console_Getopt::_parseShortOption(substr($arg, 1), $short_options, $opts, $args);
+                if (PEAR::isError($error))
+                    return $error;
+            }
+        }
+
+        return array($opts, $non_opts);
+    }
+
+    /**
+     * @access private
+     *
+     */
+    function _parseShortOption($arg, $short_options, &$opts, &$args)
+    {
+        for ($i = 0; $i < strlen($arg); $i++) {
+            $opt = $arg{$i};
+            $opt_arg = null;
+
+            /* Try to find the short option in the specifier string. */
+            if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':')
+            {
+                return PEAR::raiseError("Console_Getopt: unrecognized option -- $opt");
+            }
+
+            if (strlen($spec) > 1 && $spec{1} == ':') {
+                if (strlen($spec) > 2 && $spec{2} == ':') {
+                    if ($i + 1 < strlen($arg)) {
+                        /* Option takes an optional argument. Use the remainder of
+                           the arg string if there is anything left. */
+                        $opts[] = array($opt, substr($arg, $i + 1));
+                        break;
+                    }
+                } else {
+                    /* Option requires an argument. Use the remainder of the arg
+                       string if there is anything left. */
+                    if ($i + 1 < strlen($arg)) {
+                        $opts[] = array($opt,  substr($arg, $i + 1));
+                        break;
+                    } else if (list(, $opt_arg) = each($args))
+                        /* Else use the next argument. */;
+                    else
+                        return PEAR::raiseError("Console_Getopt: option requires an argument -- $opt");
+                }
+            }
+
+            $opts[] = array($opt, $opt_arg);
+        }
+    }
+
+    /**
+     * @access private
+     *
+     */
+    function _parseLongOption($arg, $long_options, &$opts, &$args)
+    {
+        @list($opt, $opt_arg) = explode('=', $arg);
+        $opt_len = strlen($opt);
+
+        for ($i = 0; $i < count($long_options); $i++) {
+            $long_opt  = $long_options[$i];
+            $opt_start = substr($long_opt, 0, $opt_len);
+
+            /* Option doesn't match. Go on to the next one. */
+            if ($opt_start != $opt)
+                continue;
+
+            $opt_rest  = substr($long_opt, $opt_len);
+
+            /* Check that the options uniquely matches one of the allowed
+               options. */
+            if ($opt_rest != '' && $opt{0} != '=' &&
+                $i + 1 < count($long_options) &&
+                $opt == substr($long_options[$i+1], 0, $opt_len)) {
+                return PEAR::raiseError("Console_Getopt: option --$opt is ambiguous");
+            }
+
+            if (substr($long_opt, -1) == '=') {
+                if (substr($long_opt, -2) != '==') {
+                    /* Long option requires an argument.
+                       Take the next argument if one wasn't specified. */;
+                    if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
+                        return PEAR::raiseError("Console_Getopt: option --$opt requires an argument");
+                    }
+                }
+            } else if ($opt_arg) {
+                return PEAR::raiseError("Console_Getopt: option --$opt doesn't allow an argument");
+            }
+
+            $opts[] = array('--' . $opt, $opt_arg);
+            return;
+        }
+
+        return PEAR::raiseError("Console_Getopt: unrecognized option --$opt");
+    }
+
+    /**
+    * Safely read the $argv PHP array across different PHP configurations.
+    * Will take care on register_globals and register_argc_argv ini directives
+    *
+    * @access public
+    * @return mixed the $argv PHP array or PEAR error if not registered
+    */
+    function readPHPArgv()
+    {
+        global $argv;
+        if (!is_array($argv)) {
+            if (!@is_array($_SERVER['argv'])) {
+                if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
+                    return PEAR::raiseError("Console_Getopt: Could not read cmd args (register_argc_argv=Off?)");
+                }
+                return $GLOBALS['HTTP_SERVER_VARS']['argv'];
+            }
+            return $_SERVER['argv'];
+        }
+        return $argv;
+    }
+
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/HTTP/Request/Listener.php 1.4.0sr5-1/cpanel-glprivate/system/pear/HTTP/Request/Listener.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/HTTP/Request/Listener.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/HTTP/Request/Listener.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,96 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2002-2003, Richard Heyes                                |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o Redistributions in binary form must reproduce the above copyright   |
+// |   notice, this list of conditions and the following disclaimer in the |
+// |   documentation and/or other materials provided with the distribution.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Alexey Borzov <avb@php.net>                                  |
+// +-----------------------------------------------------------------------+
+//
+// $Id: Listener.php,v 1.2 2003/10/26 10:28:29 avb Exp $
+//
+
+/**
+ * This class implements the Observer part of a Subject-Observer
+ * design pattern. It listens to the events sent by a 
+ * HTTP_Request or HTTP_Response instance.
+ *
+ * @package HTTP_Request
+ * @author  Alexey Borzov <avb@php.net>
+ * @version $Revision: 1.2 $
+ */
+class HTTP_Request_Listener 
+{
+   /**
+    * A listener's identifier
+    * @var string
+    */
+    var $_id;
+
+   /**
+    * Constructor, sets the object's identifier
+    *
+    * @access public
+    */
+    function HTTP_Request_Listener()
+    {
+        $this->_id = md5(uniqid('http_request_', 1));
+    }
+
+
+   /**
+    * Returns the listener's identifier
+    *
+    * @access public
+    * @return string
+    */
+    function getId()
+    {
+        return $this->_id;
+    }
+
+
+   /**
+    * This method is called when Listener is notified of an event
+    *
+    * @access   public
+    * @param    object  an object the listener is attached to
+    * @param    string  Event name
+    * @param    mixed   Additional data
+    * @abstract
+    */
+    function update(&$subject, $event, $data = null)
+    {
+        echo "Notified of event: '$event'\n";
+        if (null !== $data) {
+            echo "Additional data: ";
+            var_dump($data);
+        }
+    }
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/HTTP/Request.php 1.4.0sr5-1/cpanel-glprivate/system/pear/HTTP/Request.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/HTTP/Request.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/HTTP/Request.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1191 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2002-2003, Richard Heyes                                |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o Redistributions in binary form must reproduce the above copyright   |
+// |   notice, this list of conditions and the following disclaimer in the |
+// |   documentation and/or other materials provided with the distribution.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Richard Heyes <richard@phpguru.org>                           |
+// +-----------------------------------------------------------------------+
+//
+// $Id: Request.php,v 1.43 2005/11/06 18:29:14 avb Exp $
+//
+// HTTP_Request Class
+//
+// Simple example, (Fetches yahoo.com and displays it):
+//
+// $a = &new HTTP_Request('http://www.yahoo.com/');
+// $a->sendRequest();
+// echo $a->getResponseBody();
+//
+
+require_once 'PEAR.php';
+require_once 'Net/Socket.php';
+require_once 'Net/URL.php';
+
+define('HTTP_REQUEST_METHOD_GET',     'GET',     true);
+define('HTTP_REQUEST_METHOD_HEAD',    'HEAD',    true);
+define('HTTP_REQUEST_METHOD_POST',    'POST',    true);
+define('HTTP_REQUEST_METHOD_PUT',     'PUT',     true);
+define('HTTP_REQUEST_METHOD_DELETE',  'DELETE',  true);
+define('HTTP_REQUEST_METHOD_OPTIONS', 'OPTIONS', true);
+define('HTTP_REQUEST_METHOD_TRACE',   'TRACE',   true);
+
+define('HTTP_REQUEST_HTTP_VER_1_0', '1.0', true);
+define('HTTP_REQUEST_HTTP_VER_1_1', '1.1', true);
+
+class HTTP_Request {
+
+    /**
+    * Instance of Net_URL
+    * @var object Net_URL
+    */
+    var $_url;
+
+    /**
+    * Type of request
+    * @var string
+    */
+    var $_method;
+
+    /**
+    * HTTP Version
+    * @var string
+    */
+    var $_http;
+
+    /**
+    * Request headers
+    * @var array
+    */
+    var $_requestHeaders;
+
+    /**
+    * Basic Auth Username
+    * @var string
+    */
+    var $_user;
+    
+    /**
+    * Basic Auth Password
+    * @var string
+    */
+    var $_pass;
+
+    /**
+    * Socket object
+    * @var object Net_Socket
+    */
+    var $_sock;
+    
+    /**
+    * Proxy server
+    * @var string
+    */
+    var $_proxy_host;
+    
+    /**
+    * Proxy port
+    * @var integer
+    */
+    var $_proxy_port;
+    
+    /**
+    * Proxy username
+    * @var string
+    */
+    var $_proxy_user;
+    
+    /**
+    * Proxy password
+    * @var string
+    */
+    var $_proxy_pass;
+
+    /**
+    * Post data
+    * @var array
+    */
+    var $_postData;
+
+   /**
+    * Request body  
+    * @var string
+    */
+    var $_body;
+
+   /**
+    * A list of methods that MUST NOT have a request body, per RFC 2616
+    * @var array
+    */
+    var $_bodyDisallowed = array('TRACE');
+
+   /**
+    * Files to post 
+    * @var array
+    */
+    var $_postFiles = array();
+
+    /**
+    * Connection timeout.
+    * @var float
+    */
+    var $_timeout;
+    
+    /**
+    * HTTP_Response object
+    * @var object HTTP_Response
+    */
+    var $_response;
+    
+    /**
+    * Whether to allow redirects
+    * @var boolean
+    */
+    var $_allowRedirects;
+    
+    /**
+    * Maximum redirects allowed
+    * @var integer
+    */
+    var $_maxRedirects;
+    
+    /**
+    * Current number of redirects
+    * @var integer
+    */
+    var $_redirects;
+
+   /**
+    * Whether to append brackets [] to array variables
+    * @var bool
+    */
+    var $_useBrackets = true;
+
+   /**
+    * Attached listeners
+    * @var array
+    */
+    var $_listeners = array();
+
+   /**
+    * Whether to save response body in response object property  
+    * @var bool
+    */
+    var $_saveBody = true;
+
+   /**
+    * Timeout for reading from socket (array(seconds, microseconds))
+    * @var array
+    */
+    var $_readTimeout = null;
+
+   /**
+    * Options to pass to Net_Socket::connect. See stream_context_create
+    * @var array
+    */
+    var $_socketOptions = null;
+
+    /**
+    * Constructor
+    *
+    * Sets up the object
+    * @param    string  The url to fetch/access
+    * @param    array   Associative array of parameters which can have the following keys:
+    * <ul>
+    *   <li>method         - Method to use, GET, POST etc (string)</li>
+    *   <li>http           - HTTP Version to use, 1.0 or 1.1 (string)</li>
+    *   <li>user           - Basic Auth username (string)</li>
+    *   <li>pass           - Basic Auth password (string)</li>
+    *   <li>proxy_host     - Proxy server host (string)</li>
+    *   <li>proxy_port     - Proxy server port (integer)</li>
+    *   <li>proxy_user     - Proxy auth username (string)</li>
+    *   <li>proxy_pass     - Proxy auth password (string)</li>
+    *   <li>timeout        - Connection timeout in seconds (float)</li>
+    *   <li>allowRedirects - Whether to follow redirects or not (bool)</li>
+    *   <li>maxRedirects   - Max number of redirects to follow (integer)</li>
+    *   <li>useBrackets    - Whether to append [] to array variable names (bool)</li>
+    *   <li>saveBody       - Whether to save response body in response object property (bool)</li>
+    *   <li>readTimeout    - Timeout for reading / writing data over the socket (array (seconds, microseconds))</li>
+    *   <li>socketOptions  - Options to pass to Net_Socket object (array)</li>
+    * </ul>
+    * @access public
+    */
+    function HTTP_Request($url = '', $params = array())
+    {
+        $this->_sock           = &new Net_Socket();
+        $this->_method         =  HTTP_REQUEST_METHOD_GET;
+        $this->_http           =  HTTP_REQUEST_HTTP_VER_1_1;
+        $this->_requestHeaders = array();
+        $this->_postData       = array();
+        $this->_body           = null;
+
+        $this->_user = null;
+        $this->_pass = null;
+
+        $this->_proxy_host = null;
+        $this->_proxy_port = null;
+        $this->_proxy_user = null;
+        $this->_proxy_pass = null;
+
+        $this->_allowRedirects = false;
+        $this->_maxRedirects   = 3;
+        $this->_redirects      = 0;
+
+        $this->_timeout  = null;
+        $this->_response = null;
+
+        foreach ($params as $key => $value) {
+            $this->{'_' . $key} = $value;
+        }
+
+        if (!empty($url)) {
+            $this->setURL($url);
+        }
+
+        // Default useragent
+        $this->addHeader('User-Agent', 'PEAR HTTP_Request class ( http://pear.php.net/ )');
+
+        // Make sure keepalives dont knobble us
+        $this->addHeader('Connection', 'close');
+
+        // Basic authentication
+        if (!empty($this->_user)) {
+            $this->addHeader('Authorization', 'Basic ' . base64_encode($this->_user . ':' . $this->_pass));
+        }
+
+        // Use gzip encoding if possible
+        // Avoid gzip encoding if using multibyte functions (see #1781)
+        if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && extension_loaded('zlib') &&
+            0 == (2 & ini_get('mbstring.func_overload'))) {
+
+            $this->addHeader('Accept-Encoding', 'gzip');
+        }
+    }
+    
+    /**
+    * Generates a Host header for HTTP/1.1 requests
+    *
+    * @access private
+    * @return string
+    */
+    function _generateHostHeader()
+    {
+        if ($this->_url->port != 80 AND strcasecmp($this->_url->protocol, 'http') == 0) {
+            $host = $this->_url->host . ':' . $this->_url->port;
+
+        } elseif ($this->_url->port != 443 AND strcasecmp($this->_url->protocol, 'https') == 0) {
+            $host = $this->_url->host . ':' . $this->_url->port;
+
+        } elseif ($this->_url->port == 443 AND strcasecmp($this->_url->protocol, 'https') == 0 AND strpos($this->_url->url, ':443') !== false) {
+            $host = $this->_url->host . ':' . $this->_url->port;
+        
+        } else {
+            $host = $this->_url->host;
+        }
+
+        return $host;
+    }
+    
+    /**
+    * Resets the object to its initial state (DEPRECATED).
+    * Takes the same parameters as the constructor.
+    *
+    * @param  string $url    The url to be requested
+    * @param  array  $params Associative array of parameters
+    *                        (see constructor for details)
+    * @access public
+    * @deprecated deprecated since 1.2, call the constructor if this is necessary
+    */
+    function reset($url, $params = array())
+    {
+        $this->HTTP_Request($url, $params);
+    }
+
+    /**
+    * Sets the URL to be requested
+    *
+    * @param  string The url to be requested
+    * @access public
+    */
+    function setURL($url)
+    {
+        $this->_url = &new Net_URL($url, $this->_useBrackets);
+
+        if (!empty($this->_url->user) || !empty($this->_url->pass)) {
+            $this->setBasicAuth($this->_url->user, $this->_url->pass);
+        }
+
+        if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http) {
+            $this->addHeader('Host', $this->_generateHostHeader());
+        }
+    }
+    
+    /**
+    * Sets a proxy to be used
+    *
+    * @param string     Proxy host
+    * @param int        Proxy port
+    * @param string     Proxy username
+    * @param string     Proxy password
+    * @access public
+    */
+    function setProxy($host, $port = 8080, $user = null, $pass = null)
+    {
+        $this->_proxy_host = $host;
+        $this->_proxy_port = $port;
+        $this->_proxy_user = $user;
+        $this->_proxy_pass = $pass;
+
+        if (!empty($user)) {
+            $this->addHeader('Proxy-Authorization', 'Basic ' . base64_encode($user . ':' . $pass));
+        }
+    }
+
+    /**
+    * Sets basic authentication parameters
+    *
+    * @param string     Username
+    * @param string     Password
+    */
+    function setBasicAuth($user, $pass)
+    {
+        $this->_user = $user;
+        $this->_pass = $pass;
+
+        $this->addHeader('Authorization', 'Basic ' . base64_encode($user . ':' . $pass));
+    }
+
+    /**
+    * Sets the method to be used, GET, POST etc.
+    *
+    * @param string     Method to use. Use the defined constants for this
+    * @access public
+    */
+    function setMethod($method)
+    {
+        $this->_method = $method;
+    }
+
+    /**
+    * Sets the HTTP version to use, 1.0 or 1.1
+    *
+    * @param string     Version to use. Use the defined constants for this
+    * @access public
+    */
+    function setHttpVer($http)
+    {
+        $this->_http = $http;
+    }
+
+    /**
+    * Adds a request header
+    *
+    * @param string     Header name
+    * @param string     Header value
+    * @access public
+    */
+    function addHeader($name, $value)
+    {
+        $this->_requestHeaders[strtolower($name)] = $value;
+    }
+
+    /**
+    * Removes a request header
+    *
+    * @param string     Header name to remove
+    * @access public
+    */
+    function removeHeader($name)
+    {
+        if (isset($this->_requestHeaders[strtolower($name)])) {
+            unset($this->_requestHeaders[strtolower($name)]);
+        }
+    }
+
+    /**
+    * Adds a querystring parameter
+    *
+    * @param string     Querystring parameter name
+    * @param string     Querystring parameter value
+    * @param bool       Whether the value is already urlencoded or not, default = not
+    * @access public
+    */
+    function addQueryString($name, $value, $preencoded = false)
+    {
+        $this->_url->addQueryString($name, $value, $preencoded);
+    }    
+    
+    /**
+    * Sets the querystring to literally what you supply
+    *
+    * @param string     The querystring data. Should be of the format foo=bar&x=y etc
+    * @param bool       Whether data is already urlencoded or not, default = already encoded
+    * @access public
+    */
+    function addRawQueryString($querystring, $preencoded = true)
+    {
+        $this->_url->addRawQueryString($querystring, $preencoded);
+    }
+
+    /**
+    * Adds postdata items
+    *
+    * @param string     Post data name
+    * @param string     Post data value
+    * @param bool       Whether data is already urlencoded or not, default = not
+    * @access public
+    */
+    function addPostData($name, $value, $preencoded = false)
+    {
+        if ($preencoded) {
+            $this->_postData[$name] = $value;
+        } else {
+            $this->_postData[$name] = $this->_arrayMapRecursive('urlencode', $value);
+        }
+    }
+
+   /**
+    * Recursively applies the callback function to the value
+    * 
+    * @param    mixed   Callback function
+    * @param    mixed   Value to process
+    * @access   private
+    * @return   mixed   Processed value
+    */
+    function _arrayMapRecursive($callback, $value)
+    {
+        if (!is_array($value)) {
+            return call_user_func($callback, $value);
+        } else {
+            $map = array();
+            foreach ($value as $k => $v) {
+                $map[$k] = $this->_arrayMapRecursive($callback, $v);
+            }
+            return $map;
+        }
+    }
+
+   /**
+    * Adds a file to upload
+    * 
+    * This also changes content-type to 'multipart/form-data' for proper upload
+    * 
+    * @access public
+    * @param  string    name of file-upload field
+    * @param  mixed     file name(s)
+    * @param  mixed     content-type(s) of file(s) being uploaded
+    * @return bool      true on success
+    * @throws PEAR_Error
+    */
+    function addFile($inputName, $fileName, $contentType = 'application/octet-stream')
+    {
+        if (!is_array($fileName) && !is_readable($fileName)) {
+            return PEAR::raiseError("File '{$fileName}' is not readable");
+        } elseif (is_array($fileName)) {
+            foreach ($fileName as $name) {
+                if (!is_readable($name)) {
+                    return PEAR::raiseError("File '{$name}' is not readable");
+                }
+            }
+        }
+        $this->addHeader('Content-Type', 'multipart/form-data');
+        $this->_postFiles[$inputName] = array(
+            'name' => $fileName,
+            'type' => $contentType
+        );
+        return true;
+    }
+
+    /**
+    * Adds raw postdata (DEPRECATED)
+    *
+    * @param string     The data
+    * @param bool       Whether data is preencoded or not, default = already encoded
+    * @access public
+    * @deprecated       deprecated since 1.3.0, method addBody() should be used instead
+    */
+    function addRawPostData($postdata, $preencoded = true)
+    {
+        $this->_body = $preencoded ? $postdata : urlencode($postdata);
+    }
+
+   /**
+    * Sets the request body (for POST, PUT and similar requests)
+    *
+    * @param    string  Request body
+    * @access   public
+    */
+    function setBody($body)
+    {
+        $this->_body = $body;
+    }
+
+    /**
+    * Clears any postdata that has been added (DEPRECATED). 
+    * 
+    * Useful for multiple request scenarios.
+    *
+    * @access public
+    * @deprecated deprecated since 1.2
+    */
+    function clearPostData()
+    {
+        $this->_postData = null;
+    }
+
+    /**
+    * Appends a cookie to "Cookie:" header
+    * 
+    * @param string $name cookie name
+    * @param string $value cookie value
+    * @access public
+    */
+    function addCookie($name, $value)
+    {
+        $cookies = isset($this->_requestHeaders['cookie']) ? $this->_requestHeaders['cookie']. '; ' : '';
+        $this->addHeader('Cookie', $cookies . $name . '=' . $value);
+    }
+    
+    /**
+    * Clears any cookies that have been added (DEPRECATED). 
+    * 
+    * Useful for multiple request scenarios
+    *
+    * @access public
+    * @deprecated deprecated since 1.2
+    */
+    function clearCookies()
+    {
+        $this->removeHeader('Cookie');
+    }
+
+    /**
+    * Sends the request
+    *
+    * @access public
+    * @param  bool   Whether to store response body in Response object property,
+    *                set this to false if downloading a LARGE file and using a Listener
+    * @return mixed  PEAR error on error, true otherwise
+    */
+    function sendRequest($saveBody = true)
+    {
+        if (!is_a($this->_url, 'Net_URL')) {
+            return PEAR::raiseError('No URL given.');
+        }
+
+        $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host;
+        $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port;
+
+        // 4.3.0 supports SSL connections using OpenSSL. The function test determines
+        // we running on at least 4.3.0
+        if (strcasecmp($this->_url->protocol, 'https') == 0 AND function_exists('file_get_contents') AND extension_loaded('openssl')) {
+            if (isset($this->_proxy_host)) {
+                return PEAR::raiseError('HTTPS proxies are not supported.');
+            }
+            $host = 'ssl://' . $host;
+        }
+
+        // magic quotes may fuck up file uploads and chunked response processing
+        $magicQuotes = ini_get('magic_quotes_runtime');
+        ini_set('magic_quotes_runtime', false);
+
+        // If this is a second request, we may get away without
+        // re-connecting if they're on the same server
+        $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions);
+        PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest());
+
+        if (!PEAR::isError($err)) {
+            if (!empty($this->_readTimeout)) {
+                $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]);
+            }
+
+            $this->_notify('sentRequest');
+
+            // Read the response
+            $this->_response = &new HTTP_Response($this->_sock, $this->_listeners);
+            $err = $this->_response->process($this->_saveBody && $saveBody);
+        }
+
+        ini_set('magic_quotes_runtime', $magicQuotes);
+
+        if (PEAR::isError($err)) {
+            return $err;
+        }
+
+
+        // Check for redirection
+        if (    $this->_allowRedirects
+            AND $this->_redirects <= $this->_maxRedirects
+            AND $this->getResponseCode() > 300
+            AND $this->getResponseCode() < 399
+            AND !empty($this->_response->_headers['location'])) {
+
+            
+            $redirect = $this->_response->_headers['location'];
+
+            // Absolute URL
+            if (preg_match('/^https?:\/\//i', $redirect)) {
+                $this->_url = &new Net_URL($redirect);
+                $this->addHeader('Host', $this->_generateHostHeader());
+            // Absolute path
+            } elseif ($redirect{0} == '/') {
+                $this->_url->path = $redirect;
+            
+            // Relative path
+            } elseif (substr($redirect, 0, 3) == '../' OR substr($redirect, 0, 2) == './') {
+                if (substr($this->_url->path, -1) == '/') {
+                    $redirect = $this->_url->path . $redirect;
+                } else {
+                    $redirect = dirname($this->_url->path) . '/' . $redirect;
+                }
+                $redirect = Net_URL::resolvePath($redirect);
+                $this->_url->path = $redirect;
+                
+            // Filename, no path
+            } else {
+                if (substr($this->_url->path, -1) == '/') {
+                    $redirect = $this->_url->path . $redirect;
+                } else {
+                    $redirect = dirname($this->_url->path) . '/' . $redirect;
+                }
+                $this->_url->path = $redirect;
+            }
+
+            $this->_redirects++;
+            return $this->sendRequest($saveBody);
+
+        // Too many redirects
+        } elseif ($this->_allowRedirects AND $this->_redirects > $this->_maxRedirects) {
+            return PEAR::raiseError('Too many redirects');
+        }
+
+        $this->_sock->disconnect();
+
+        return true;
+    }
+
+    /**
+    * Returns the response code
+    *
+    * @access public
+    * @return mixed     Response code, false if not set
+    */
+    function getResponseCode()
+    {
+        return isset($this->_response->_code) ? $this->_response->_code : false;
+    }
+
+    /**
+    * Returns either the named header or all if no name given
+    *
+    * @access public
+    * @param string     The header name to return, do not set to get all headers
+    * @return mixed     either the value of $headername (false if header is not present)
+    *                   or an array of all headers
+    */
+    function getResponseHeader($headername = null)
+    {
+        if (!isset($headername)) {
+            return isset($this->_response->_headers)? $this->_response->_headers: array();
+        } else {
+            $headername = strtolower($headername);
+            return isset($this->_response->_headers[$headername]) ? $this->_response->_headers[$headername] : false;
+        }
+    }
+
+    /**
+    * Returns the body of the response
+    *
+    * @access public
+    * @return mixed     response body, false if not set
+    */
+    function getResponseBody()
+    {
+        return isset($this->_response->_body) ? $this->_response->_body : false;
+    }
+
+    /**
+    * Returns cookies set in response
+    * 
+    * @access public
+    * @return mixed     array of response cookies, false if none are present
+    */
+    function getResponseCookies()
+    {
+        return isset($this->_response->_cookies) ? $this->_response->_cookies : false;
+    }
+
+    /**
+    * Builds the request string
+    *
+    * @access private
+    * @return string The request string
+    */
+    function _buildRequest()
+    {
+        $separator = ini_get('arg_separator.output');
+        ini_set('arg_separator.output', '&');
+        $querystring = ($querystring = $this->_url->getQueryString()) ? '?' . $querystring : '';
+        ini_set('arg_separator.output', $separator);
+
+        $host = isset($this->_proxy_host) ? $this->_url->protocol . '://' . $this->_url->host : '';
+        $port = (isset($this->_proxy_host) AND $this->_url->port != 80) ? ':' . $this->_url->port : '';
+        $path = (empty($this->_url->path)? '/': $this->_url->path) . $querystring;
+        $url  = $host . $port . $path;
+
+        $request = $this->_method . ' ' . $url . ' HTTP/' . $this->_http . "\r\n";
+
+        if (in_array($this->_method, $this->_bodyDisallowed) ||
+            (HTTP_REQUEST_METHOD_POST != $this->_method && empty($this->_body)) ||
+            (HTTP_REQUEST_METHOD_POST != $this->_method && empty($this->_postData) && empty($this->_postFiles))) {
+
+            $this->removeHeader('Content-Type');
+        } else {
+            if (empty($this->_requestHeaders['content-type'])) {
+                // Add default content-type
+                $this->addHeader('Content-Type', 'application/x-www-form-urlencoded');
+            } elseif ('multipart/form-data' == $this->_requestHeaders['content-type']) {
+                $boundary = 'HTTP_Request_' . md5(uniqid('request') . microtime());
+                $this->addHeader('Content-Type', 'multipart/form-data; boundary=' . $boundary);
+            }
+        }
+
+        // Request Headers
+        if (!empty($this->_requestHeaders)) {
+            foreach ($this->_requestHeaders as $name => $value) {
+                $canonicalName = implode('-', array_map('ucfirst', explode('-', $name)));
+                $request      .= $canonicalName . ': ' . $value . "\r\n";
+            }
+        }
+
+        // No post data or wrong method, so simply add a final CRLF
+        if (in_array($this->_method, $this->_bodyDisallowed) || 
+            (HTTP_REQUEST_METHOD_POST != $this->_method && empty($this->_body))) {
+
+            $request .= "\r\n";
+
+        // Post data if it's an array
+        } elseif (HTTP_REQUEST_METHOD_POST == $this->_method && 
+                  (!empty($this->_postData) || !empty($this->_postFiles))) {
+
+            // "normal" POST request
+            if (!isset($boundary)) {
+                $postdata = implode('&', array_map(
+                    create_function('$a', 'return $a[0] . \'=\' . $a[1];'), 
+                    $this->_flattenArray('', $this->_postData)
+                ));
+
+            // multipart request, probably with file uploads
+            } else {
+                $postdata = '';
+                if (!empty($this->_postData)) {
+                    $flatData = $this->_flattenArray('', $this->_postData);
+                    foreach ($flatData as $item) {
+                        $postdata .= '--' . $boundary . "\r\n";
+                        $postdata .= 'Content-Disposition: form-data; name="' . $item[0] . '"';
+                        $postdata .= "\r\n\r\n" . urldecode($item[1]) . "\r\n";
+                    }
+                }
+                foreach ($this->_postFiles as $name => $value) {
+                    if (is_array($value['name'])) {
+                        $varname       = $name . ($this->_useBrackets? '[]': '');
+                    } else {
+                        $varname       = $name;
+                        $value['name'] = array($value['name']);
+                    }
+                    foreach ($value['name'] as $key => $filename) {
+                        $fp   = fopen($filename, 'r');
+                        $data = fread($fp, filesize($filename));
+                        fclose($fp);
+                        $basename = basename($filename);
+                        $type     = is_array($value['type'])? @$value['type'][$key]: $value['type'];
+
+                        $postdata .= '--' . $boundary . "\r\n";
+                        $postdata .= 'Content-Disposition: form-data; name="' . $varname . '"; filename="' . $basename . '"';
+                        $postdata .= "\r\nContent-Type: " . $type;
+                        $postdata .= "\r\n\r\n" . $data . "\r\n";
+                    }
+                }
+                $postdata .= '--' . $boundary . "--\r\n";
+            }
+            $request .= 'Content-Length: ' . strlen($postdata) . "\r\n\r\n";
+            $request .= $postdata;
+
+        // Explicitly set request body
+        } elseif (!empty($this->_body)) {
+
+            $request .= 'Content-Length: ' . strlen($this->_body) . "\r\n\r\n";
+            $request .= $this->_body;
+        }
+        
+        return $request;
+    }
+
+   /**
+    * Helper function to change the (probably multidimensional) associative array
+    * into the simple one.
+    *
+    * @param    string  name for item
+    * @param    mixed   item's values
+    * @return   array   array with the following items: array('item name', 'item value');
+    */
+    function _flattenArray($name, $values)
+    {
+        if (!is_array($values)) {
+            return array(array($name, $values));
+        } else {
+            $ret = array();
+            foreach ($values as $k => $v) {
+                if (empty($name)) {
+                    $newName = $k;
+                } elseif ($this->_useBrackets) {
+                    $newName = $name . '[' . $k . ']';
+                } else {
+                    $newName = $name;
+                }
+                $ret = array_merge($ret, $this->_flattenArray($newName, $v));
+            }
+            return $ret;
+        }
+    }
+
+
+   /**
+    * Adds a Listener to the list of listeners that are notified of
+    * the object's events
+    * 
+    * @param    object   HTTP_Request_Listener instance to attach
+    * @return   boolean  whether the listener was successfully attached
+    * @access   public
+    */
+    function attach(&$listener)
+    {
+        if (!is_a($listener, 'HTTP_Request_Listener')) {
+            return false;
+        }
+        $this->_listeners[$listener->getId()] =& $listener;
+        return true;
+    }
+
+
+   /**
+    * Removes a Listener from the list of listeners 
+    * 
+    * @param    object   HTTP_Request_Listener instance to detach
+    * @return   boolean  whether the listener was successfully detached
+    * @access   public
+    */
+    function detach(&$listener)
+    {
+        if (!is_a($listener, 'HTTP_Request_Listener') || 
+            !isset($this->_listeners[$listener->getId()])) {
+            return false;
+        }
+        unset($this->_listeners[$listener->getId()]);
+        return true;
+    }
+
+
+   /**
+    * Notifies all registered listeners of an event.
+    * 
+    * Events sent by HTTP_Request object
+    * 'sentRequest': after the request was sent
+    * Events sent by HTTP_Response object
+    * 'gotHeaders': after receiving response headers (headers are passed in $data)
+    * 'tick': on receiving a part of response body (the part is passed in $data)
+    * 'gzTick': on receiving a gzip-encoded part of response body (ditto)
+    * 'gotBody': after receiving the response body (passes the decoded body in $data if it was gzipped)
+    * 
+    * @param    string  Event name
+    * @param    mixed   Additional data
+    * @access   private
+    */
+    function _notify($event, $data = null)
+    {
+        foreach (array_keys($this->_listeners) as $id) {
+            $this->_listeners[$id]->update($this, $event, $data);
+        }
+    }
+}
+
+
+/**
+* Response class to complement the Request class
+*/
+class HTTP_Response
+{
+    /**
+    * Socket object
+    * @var object
+    */
+    var $_sock;
+
+    /**
+    * Protocol
+    * @var string
+    */
+    var $_protocol;
+    
+    /**
+    * Return code
+    * @var string
+    */
+    var $_code;
+    
+    /**
+    * Response headers
+    * @var array
+    */
+    var $_headers;
+
+    /**
+    * Cookies set in response  
+    * @var array
+    */
+    var $_cookies;
+
+    /**
+    * Response body
+    * @var string
+    */
+    var $_body = '';
+
+   /**
+    * Used by _readChunked(): remaining length of the current chunk
+    * @var string
+    */
+    var $_chunkLength = 0;
+
+   /**
+    * Attached listeners
+    * @var array
+    */
+    var $_listeners = array();
+
+    /**
+    * Constructor
+    *
+    * @param  object Net_Socket     socket to read the response from
+    * @param  array                 listeners attached to request
+    * @return mixed PEAR Error on error, true otherwise
+    */
+    function HTTP_Response(&$sock, &$listeners)
+    {
+        $this->_sock      =& $sock;
+        $this->_listeners =& $listeners;
+    }
+
+
+   /**
+    * Processes a HTTP response
+    * 
+    * This extracts response code, headers, cookies and decodes body if it 
+    * was encoded in some way
+    *
+    * @access public
+    * @param  bool      Whether to store response body in object property, set
+    *                   this to false if downloading a LARGE file and using a Listener.
+    *                   This is assumed to be true if body is gzip-encoded.
+    * @throws PEAR_Error
+    * @return mixed     true on success, PEAR_Error in case of malformed response
+    */
+    function process($saveBody = true)
+    {
+        do {
+            $line = $this->_sock->readLine();
+            if (sscanf($line, 'HTTP/%s %s', $http_version, $returncode) != 2) {
+                return PEAR::raiseError('Malformed response.');
+            } else {
+                $this->_protocol = 'HTTP/' . $http_version;
+                $this->_code     = intval($returncode);
+            }
+            while ('' !== ($header = $this->_sock->readLine())) {
+                $this->_processHeader($header);
+            }
+        } while (100 == $this->_code);
+
+        $this->_notify('gotHeaders', $this->_headers);
+
+        // If response body is present, read it and decode
+        $chunked = isset($this->_headers['transfer-encoding']) && ('chunked' == $this->_headers['transfer-encoding']);
+        $gzipped = isset($this->_headers['content-encoding']) && ('gzip' == $this->_headers['content-encoding']);
+        $hasBody = false;
+        if (!isset($this->_headers['content-length']) || 0 != $this->_headers['content-length']) {
+            while (!$this->_sock->eof()) {
+                if ($chunked) {
+                    $data = $this->_readChunked();
+                } else {
+                    $data = $this->_sock->read(4096);
+                }
+                if ('' == $data) {
+                    break;
+                } else {
+                    $hasBody = true;
+                    if ($saveBody || $gzipped) {
+                        $this->_body .= $data;
+                    }
+                    $this->_notify($gzipped? 'gzTick': 'tick', $data);
+                }
+            }
+        }
+        if ($hasBody) {
+            // Uncompress the body if needed
+            if ($gzipped) {
+                $this->_body = gzinflate(substr($this->_body, 10));
+                $this->_notify('gotBody', $this->_body);
+            } else {
+                $this->_notify('gotBody');
+            }
+        }
+        return true;
+    }
+
+
+   /**
+    * Processes the response header
+    *
+    * @access private
+    * @param  string    HTTP header
+    */
+    function _processHeader($header)
+    {
+        list($headername, $headervalue) = explode(':', $header, 2);
+        $headername  = strtolower($headername);
+        $headervalue = ltrim($headervalue);
+        
+        if ('set-cookie' != $headername) {
+            if (isset($this->_headers[$headername])) {
+                $this->_headers[$headername] .= ',' . $headervalue;
+            } else {
+                $this->_headers[$headername]  = $headervalue;
+            }
+        } else {
+            $this->_parseCookie($headervalue);
+        }
+    }
+
+
+   /**
+    * Parse a Set-Cookie header to fill $_cookies array
+    *
+    * @access private
+    * @param  string    value of Set-Cookie header
+    */
+    function _parseCookie($headervalue)
+    {
+        $cookie = array(
+            'expires' => null,
+            'domain'  => null,
+            'path'    => null,
+            'secure'  => false
+        );
+
+        // Only a name=value pair
+        if (!strpos($headervalue, ';')) {
+            $pos = strpos($headervalue, '=');
+            $cookie['name']  = trim(substr($headervalue, 0, $pos));
+            $cookie['value'] = trim(substr($headervalue, $pos + 1));
+
+        // Some optional parameters are supplied
+        } else {
+            $elements = explode(';', $headervalue);
+            $pos = strpos($elements[0], '=');
+            $cookie['name']  = trim(substr($elements[0], 0, $pos));
+            $cookie['value'] = trim(substr($elements[0], $pos + 1));
+
+            for ($i = 1; $i < count($elements); $i++) {
+                if (false === strpos($elements[$i], '=')) {
+                    $elName  = trim($elements[$i]);
+                    $elValue = null;
+                } else {
+                    list ($elName, $elValue) = array_map('trim', explode('=', $elements[$i]));
+                }
+                $elName = strtolower($elName);
+                if ('secure' == $elName) {
+                    $cookie['secure'] = true;
+                } elseif ('expires' == $elName) {
+                    $cookie['expires'] = str_replace('"', '', $elValue);
+                } elseif ('path' == $elName || 'domain' == $elName) {
+                    $cookie[$elName] = urldecode($elValue);
+                } else {
+                    $cookie[$elName] = $elValue;
+                }
+            }
+        }
+        $this->_cookies[] = $cookie;
+    }
+
+
+   /**
+    * Read a part of response body encoded with chunked Transfer-Encoding
+    * 
+    * @access private
+    * @return string
+    */
+    function _readChunked()
+    {
+        // at start of the next chunk?
+        if (0 == $this->_chunkLength) {
+            $line = $this->_sock->readLine();
+            if (preg_match('/^([0-9a-f]+)/i', $line, $matches)) {
+                $this->_chunkLength = hexdec($matches[1]); 
+                // Chunk with zero length indicates the end
+                if (0 == $this->_chunkLength) {
+                    $this->_sock->readLine(); // make this an eof()
+                    return '';
+                }
+            } else {
+                return '';
+            }
+        }
+        $data = $this->_sock->read($this->_chunkLength);
+        $this->_chunkLength -= strlen($data);
+        if (0 == $this->_chunkLength) {
+            $this->_sock->readLine(); // Trailing CRLF
+        }
+        return $data;
+    }
+
+
+   /**
+    * Notifies all registered listeners of an event.
+    * 
+    * @param    string  Event name
+    * @param    mixed   Additional data
+    * @access   private
+    * @see HTTP_Request::_notify()
+    */
+    function _notify($event, $data = null)
+    {
+        foreach (array_keys($this->_listeners) as $id) {
+            $this->_listeners[$id]->update($this, $event, $data);
+        }
+    }
+} // End class HTTP_Response
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Mail/mail.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/mail.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Mail/mail.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/mail.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,12 +16,12 @@
 // | Author: Chuck Hagenbuch <chuck@horde.org>                            |
 // +----------------------------------------------------------------------+
 //
-// $Id: mail.php,v 1.13 2004/09/09 02:08:55 jon Exp $
+// $Id: mail.php,v 1.14 2005/08/09 04:54:37 jon Exp $
 
 /**
  * internal PHP-mail() implementation of the PEAR Mail:: interface.
  * @package Mail
- * @version $Revision: 1.13 $
+ * @version $Revision: 1.14 $
  */
 class Mail_mail extends Mail {
 
@@ -54,7 +54,7 @@
          * line arguments, we can't guarantee the use of the standard
          * "\r\n" separator.  Instead, we use the system's native line
          * separator. */
-        $this->sep = (strstr(PHP_OS, 'WIN')) ? "\r\n" : "\n";
+        $this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n";
     }
 
 	/**
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Mail/RFC822.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/RFC822.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Mail/RFC822.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/RFC822.php	2006-08-08 02:39:06.000000000 -0500
@@ -52,7 +52,7 @@
  *
  * @author  Richard Heyes <richard@phpguru.org>
  * @author  Chuck Hagenbuch <chuck@horde.org>
- * @version $Revision: 1.18 $
+ * @version $Revision: 1.22 $
  * @license BSD
  * @package Mail
  */
@@ -177,9 +177,11 @@
         $this->error      = null;
         $this->index      = null;
 
-        while ($this->address = $this->_splitAddresses($this->address)) {
-            continue;
-        }
+        // Unfold any long lines in $this->address.
+        $this->address = preg_replace('/\r?\n/', "\r\n", $this->address);
+        $this->address = preg_replace('/\r\n(\t| )+/', ' ', $this->address);
+
+        while ($this->address = $this->_splitAddresses($this->address));
 
         if ($this->address === false || isset($this->error)) {
             require_once 'PEAR.php';
@@ -472,7 +474,7 @@
         for ($i = 0; $i < count($addresses); $i++) {
             if (!$this->validateMailbox($addresses[$i])) {
                 if (empty($this->error)) {
-                    $this->error = 'Validation failed for "' . $addresses[$i] . '"';
+                    $this->error = 'Validation failed for: ' . $addresses[$i];
                 }
                 return false;
             }
@@ -584,8 +586,8 @@
         // Leading and trailing "
         $qstring = substr($qstring, 1, -1);
 
-        // Perform check.
-        return !(preg_match('/(.)[\x0D\\\\"]/', $qstring, $matches) && $matches[1] != '\\');
+        // Perform check, removing quoted characters first.
+        return !preg_match('/[\x0D\\\\"]/', preg_replace('/\\\\./', '', $qstring));
     }
 
     /**
@@ -910,7 +912,7 @@
      */
     function isValidInetAddress($data, $strict = false)
     {
-        $regex = $strict ? '/^([.0-9a-z_-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i' : '/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i';
+        $regex = $strict ? '/^([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i' : '/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i';
         if (preg_match($regex, trim($data), $matches)) {
             return array($matches[1], $matches[2]);
         } else {
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Mail/sendmail.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/sendmail.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Mail/sendmail.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/sendmail.php	2006-08-08 02:39:06.000000000 -0500
@@ -20,7 +20,7 @@
  * Sendmail implementation of the PEAR Mail:: interface.
  * @access public
  * @package Mail
- * @version $Revision: 1.8 $
+ * @version $Revision: 1.11 $
  */
 class Mail_sendmail extends Mail {
 
@@ -66,7 +66,7 @@
          * the commandline, we can't guarantee the use of the standard "\r\n"
          * separator.  Instead, we use the system's native line separator.
          */
-        $this->sep = (strstr(PHP_OS, 'WIN')) ? "\r\n" : "\n";
+        $this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n";
     }
 
 	/**
@@ -110,10 +110,10 @@
 
         if (!isset($from)) {
             return PEAR::raiseError('No from address given.');
-        } elseif (strstr($from, ' ') ||
-                  strstr($from, ';') ||
-                  strstr($from, '&') ||
-                  strstr($from, '`')) {
+        } elseif (strpos($from, ' ') !== false ||
+                  strpos($from, ';') !== false ||
+                  strpos($from, '&') !== false ||
+                  strpos($from, '`') !== false) {
             return PEAR::raiseError('From address specified with dangerous characters.');
         }
 
@@ -124,13 +124,19 @@
             fputs($mail, $text_headers);
             fputs($mail, $this->sep);  // newline to end the headers section
             fputs($mail, $body);
-            $result = pclose($mail) >> 8 & 0xFF; // need to shift the pclose result to get the exit code
+            $result = pclose($mail);
+            if (version_compare(phpversion(), '4.2.3') == -1) {
+                // With older php versions, we need to shift the
+                // pclose result to get the exit code.
+                $result = $result >> 8 & 0xFF;
+            }
         } else {
             return PEAR::raiseError('sendmail [' . $this->sendmail_path . '] is not a valid file');
         }
 
         if ($result != 0) {
-            return PEAR::raiseError('sendmail returned error code ' . $result);
+            return PEAR::raiseError('sendmail returned error code ' . $result,
+                                    $result);
         }
 
         return true;
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Mail/smtp.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/smtp.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Mail/smtp.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail/smtp.php	2006-08-08 02:39:06.000000000 -0500
@@ -18,15 +18,22 @@
 // +----------------------------------------------------------------------+
 
 /**
- * SMTP implementation of the PEAR Mail:: interface. Requires the PEAR
- * Net_SMTP:: class.
+ * SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class.
  * @access public
  * @package Mail
- * @version $Revision: 1.18 $
+ * @version $Revision: 1.25 $
  */
 class Mail_smtp extends Mail {
 
     /**
+     * SMTP connection object.
+     *
+     * @var object
+     * @access private
+     */
+    var $_smtp = null;
+
+    /**
      * The SMTP host to connect to.
      * @var string
      */
@@ -72,6 +79,13 @@
     var $localhost = 'localhost';
 
     /**
+     * SMTP connection timeout value.  NULL indicates no timeout.
+     *
+     * @var integer
+     */
+    var $timeout = null;
+
+    /**
      * Whether to use VERP or not. If not a boolean, the string value
      * will be used as the VERP separators.
      *
@@ -87,6 +101,14 @@
     var $debug = false;
 
     /**
+     * Indicates whether or not the SMTP connection should persist over
+     * multiple calls to the send() method.
+     *
+     * @var boolean
+     */
+    var $persist = false;
+
+    /**
      * Constructor.
      *
      * Instantiates a new Mail_smtp:: object based on the parameters
@@ -97,8 +119,10 @@
      *     username    The username to use for SMTP auth. No default.
      *     password    The password to use for SMTP auth. No default.
      *     localhost   The local hostname / domain. Defaults to localhost.
+     *     timeout     The SMTP connection timeout. Defaults to none.
      *     verp        Whether to use VERP or not. Defaults to false.
      *     debug       Activate SMTP debug mode? Defaults to false.
+     *     persist     Should the SMTP connection persist?
      *
      * If a parameter is present in the $params array, it replaces the
      * default.
@@ -115,8 +139,21 @@
         if (isset($params['username'])) $this->username = $params['username'];
         if (isset($params['password'])) $this->password = $params['password'];
         if (isset($params['localhost'])) $this->localhost = $params['localhost'];
+        if (isset($params['timeout'])) $this->timeout = $params['timeout'];
         if (isset($params['verp'])) $this->verp = $params['verp'];
         if (isset($params['debug'])) $this->debug = (boolean)$params['debug'];
+        if (isset($params['persist'])) $this->persist = (boolean)$params['persist'];
+
+        register_shutdown_function(array(&$this, '_Mail_smtp'));
+    }
+
+    /**
+     * Destructor implementation to ensure that we disconnect from any
+     * potentially-alive persistent SMTP connections.
+     */
+    function _Mail_smtp()
+    {
+        $this->disconnect();
     }
 
     /**
@@ -147,33 +184,50 @@
     {
         include_once 'Net/SMTP.php';
 
-        if (!($smtp = &new Net_SMTP($this->host, $this->port, $this->localhost))) {
-            return PEAR::raiseError('unable to instantiate Net_SMTP object');
-        }
-
-        if ($this->debug) {
-            $smtp->setDebug(true);
-        }
+        /* If we don't already have an SMTP object, create one. */
+        if (is_object($this->_smtp) === false) {
+            $this->_smtp =& new Net_SMTP($this->host, $this->port,
+                                         $this->localhost);
+
+            /* If we still don't have an SMTP object at this point, fail. */
+            if (is_object($this->_smtp) === false) {
+                return PEAR::raiseError('Failed to create a Net_SMTP object');
+            }
 
-        if (PEAR::isError($smtp->connect())) {
-            return PEAR::raiseError('unable to connect to smtp server ' .
-                                    $this->host . ':' . $this->port);
-        }
+            /* Configure the SMTP connection. */
+            if ($this->debug) {
+                $this->_smtp->setDebug(true);
+            }
 
-        if ($this->auth) {
-            $method = is_string($this->auth) ? $this->auth : '';
+            /* Attempt to connect to the configured SMTP server. */
+            if (PEAR::isError($res = $this->_smtp->connect($this->timeout))) {
+                $error = $this->_error('Failed to connect to ' .
+                                       $this->host . ':' . $this->port,
+                                       $res);
+                return PEAR::raiseError($error);
+            }
 
-            if (PEAR::isError($smtp->auth($this->username, $this->password,
-                              $method))) {
-                return PEAR::raiseError('unable to authenticate to smtp server');
+            /* Attempt to authenticate if authentication has been enabled. */
+            if ($this->auth) {
+                $method = is_string($this->auth) ? $this->auth : '';
+
+                if (PEAR::isError($res = $this->_smtp->auth($this->username,
+                                                            $this->password,
+                                                            $method))) {
+                    $error = $this->_error("$method authentication failure",
+                                           $res);
+                    $this->_smtp->rset();
+                    return PEAR::raiseError($error);
+                }
             }
         }
 
         $headerElements = $this->prepareHeaders($headers);
         if (PEAR::isError($headerElements)) {
+            $this->_smtp->rset();
             return $headerElements;
         }
-        list($from, $text_headers) = $headerElements;
+        list($from, $textHeaders) = $headerElements;
 
         /* Since few MTAs are going to allow this header to be forged
          * unless it's in the MAIL FROM: exchange, we'll use
@@ -183,32 +237,87 @@
         }
 
         if (!isset($from)) {
-            return PEAR::raiseError('No from address given');
+            $this->_smtp->rset();
+            return PEAR::raiseError('No From: address has been provided');
         }
 
         $args['verp'] = $this->verp;
-        if (PEAR::isError($smtp->mailFrom($from, $args))) {
-            return PEAR::raiseError('unable to set sender to [' . $from . ']');
+        if (PEAR::isError($res = $this->_smtp->mailFrom($from, $args))) {
+            $error = $this->_error("Failed to set sender: $from", $res);
+            $this->_smtp->rset();
+            return PEAR::raiseError($error);
         }
 
         $recipients = $this->parseRecipients($recipients);
         if (PEAR::isError($recipients)) {
+            $this->_smtp->rset();
             return $recipients;
         }
 
         foreach ($recipients as $recipient) {
-            if (PEAR::isError($res = $smtp->rcptTo($recipient))) {
-                return PEAR::raiseError('unable to add recipient [' .
-                                        $recipient . ']: ' . $res->getMessage());
+            if (PEAR::isError($res = $this->_smtp->rcptTo($recipient))) {
+                $error = $this->_error("Failed to add recipient: $recipient",
+                                       $res);
+                $this->_smtp->rset();
+                return PEAR::raiseError($error);
             }
         }
 
-        if (PEAR::isError($smtp->data($text_headers . "\r\n" . $body))) {
-            return PEAR::raiseError('unable to send data');
+        /* Send the message's headers and the body as SMTP data. */
+        if (PEAR::isError($res = $this->_smtp->data("$textHeaders\r\n$body"))) {
+            $error = $this->_error('Failed to send data', $res);
+            $this->_smtp->rset();
+            return PEAR::raiseError($error);
+        }
+
+        /* If persistent connections are disabled, destroy our SMTP object. */
+        if ($this->persist === false) {
+            $this->disconnect();
         }
 
-        $smtp->disconnect();
         return true;
     }
 
+    /**
+     * Disconnect and destroy the current SMTP connection.
+     *
+     * @return boolean True if the SMTP connection no longer exists.
+     *
+     * @since  1.1.9
+     * @access public
+     */
+    function disconnect()
+    {
+        /* If we have an SMTP object, disconnect and destroy it. */
+        if (is_object($this->_smtp) && $this->_smtp->disconnect()) {
+            $this->_smtp = null;
+        }
+
+        /* We are disconnected if we no longer have an SMTP object. */
+        return ($this->_smtp === null);
+    }
+
+    /**
+     * Build a standardized string describing the current SMTP error.
+     *
+     * @param string $text  Custom string describing the error context.
+     * @param object $error Reference to the current PEAR_Error object.
+     *
+     * @return string       A string describing the current SMTP error.
+     *
+     * @since  1.1.7
+     * @access private
+     */
+    function _error($text, &$error)
+    {
+        /* Split the SMTP response into a code and a response string. */
+        list($code, $response) = $this->_smtp->getResponse();
+
+        /* Build our standardized error string. */
+        $msg = $text;
+        $msg .= ' [SMTP: ' . $error->getMessage();
+        $msg .= " (code: $code, response: $response)]";
+
+        return $msg;
+    }
 }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Mail.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Mail.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Mail.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // | Author: Chuck Hagenbuch <chuck@horde.org>                            |
 // +----------------------------------------------------------------------+
 //
-// $Id: Mail.php,v 1.9 2004/09/03 20:32:50 chagenbu Exp $
+// $Id: Mail.php,v 1.12 2005/08/22 01:19:27 jon Exp $
 
 require_once 'PEAR.php';
 
@@ -26,7 +26,7 @@
  * useful in multiple mailer backends.
  *
  * @access public
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.12 $
  * @package Mail
  */
 class Mail
@@ -46,13 +46,14 @@
      * @return object Mail a instance of the driver class or if fails a PEAR Error
      * @access public
      */
-    function factory($driver, $params = array())
+    function &factory($driver, $params = array())
     {
         $driver = strtolower($driver);
         @include_once 'Mail/' . $driver . '.php';
         $class = 'Mail_' . $driver;
         if (class_exists($class)) {
-            return new $class($params);
+            $mailer = new $class($params);
+            return $mailer;
         } else {
             return PEAR::raiseError('Unable to find class for driver ' . $driver);
         }
@@ -145,10 +146,19 @@
 
                 $lines[] = $key . ': ' . $value;
             } elseif (strcasecmp($key, 'Received') === 0) {
+                $received = array();
+                if (is_array($value)) {
+                    foreach ($value as $line) {
+                        $received[] = $key . ': ' . $line;
+                    }
+                }
+                else {
+                    $received[] = $key . ': ' . $value;
+                }
                 // Put Received: headers at the top.  Spam detectors often
                 // flag messages with Received: headers after the Subject:
                 // as spam.
-                array_unshift($lines, $key . ': ' . $value);
+                $lines = array_merge($received, $lines);
             } else {
                 // If $value is an array (i.e., a list of addresses), convert
                 // it to a comma-delimited string of its elements (addresses).
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/docs/examples/basic.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/docs/examples/basic.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/docs/examples/basic.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/docs/examples/basic.php	1969-12-31 18:00:00.000000000 -0600
@@ -1,39 +0,0 @@
-<?php
-
-require 'Net/SMTP.php';
-
-$host = 'mail.example.com';
-$from = 'user@example.com';
-$rcpt = array('recipient1@example.com', 'recipient2@example.com');
-$subj = "Subject: Test Message\n";
-$body = "Body Line 1\nBody Line 2";
-
-/* Create a new Net_SMTP object. */
-if (! ($smtp = new Net_SMTP($host))) {
-    die("Unable to instantiate Net_SMTP object\n");
-}
-
-/* Connect to the SMTP server. */
-if (PEAR::isError($e = $smtp->connect())) {
-    die($e->getMessage() . "\n");
-}
-
-/* Send the 'MAIL FROM:' SMTP command. */
-if (PEAR::isError($smtp->mailFrom($from))) {
-    die("Unable to set sender to <$from>\n");
-}
-
-/* Address the message to each of the recipients. */
-foreach ($rcpt as $to) {
-    if (PEAR::isError($res = $smtp->rcptTo($to))) {
-        die("Unable to add recipient <$to>: " . $res->getMessage() . "\n");
-    }
-}
-
-/* Set the body of the message. */
-if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) {
-    die("Unable to send data\n");
-}
-
-/* Disconnect from the SMTP server. */
-$smtp->disconnect();
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/docs/guide.txt 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/docs/guide.txt
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/docs/guide.txt	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/docs/guide.txt	1969-12-31 18:00:00.000000000 -0600
@@ -1,198 +0,0 @@
-======================
- The Net_SMTP Package
-======================
-
---------------------
- User Documentation
---------------------
-
-:Author:    Jon Parise
-:Contact:   jon@php.net
-:Date:      $Date: 2004/03/11 08:15:46 $
-:Revision:  $Revision: 1.4 $
-
-.. contents:: Table of Contents
-.. section-numbering::
-
-Dependencies
-============
-
-The `PEAR_Error` Class
-----------------------
-
-The Net_SMTP package uses the `PEAR_Error`_ class for all of its `error
-handling`_.
-
-The `Net_Socket` Package
-------------------------
-
-The Net_Socket_ package is used as the basis for all network communications.
-
-The `Auth_SASL` Package
------------------------
-
-The `Auth_SASL`_ package is an optional dependency.  If it is available, the
-Net_SMTP package will be able to support the DIGEST-MD5_ and CRAM-MD5_ SMTP
-authentication methods.  Otherwise, only the LOGIN_ and PLAIN_ methods will
-be available.
-
-Error Handling
-==============
-
-All of the Net_SMTP class's public methods return a PEAR_Error_ object if an
-error occurs.  The standard way to check for a PEAR_Error object is by using
-`PEAR::isError()`_::
-
-    if (PEAR::isError($error = $smtp->connect())) {
-        die($error->getMessage());
-    }
-
-.. _PEAR::isError(): http://pear.php.net/manual/en/core.pear.pear.iserror.php
-
-SMTP Authentication
-===================
-
-The Net_SMTP package supports the SMTP authentication standard (as defined
-by RFC-2554_).  The Net_SMTP package supports the following authentication
-methods, in order of preference:
-
-.. _RFC-2554: http://www.ietf.org/rfc/rfc2554.txt
-
-DIGEST-MD5
-----------
-
-The DIGEST-MD5 authentication method uses `RSA Data Security Inc.`_'s MD5
-Message Digest algorithm.  It is considered the most secure method of SMTP
-authentication.
-
-**Note:** The DIGEST-MD5 authentication method is only supported if the
-AUTH_SASL_ package is available.
-
-.. _RSA Data Security Inc.: http://www.rsasecurity.com/
-
-CRAM-MD5
---------
-
-The CRAM-MD5 authentication method has been superseded by the DIGEST-MD5_
-method in terms of security.  It is provided here for compatibility with
-older SMTP servers that may not support the newer DIGEST-MD5 algorithm.
-
-**Note:** The CRAM-MD5 authentication method is only supported if the
-AUTH_SASL_ package is available.
-
-LOGIN
------
-
-The LOGIN authentication method encrypts the user's password using the
-Base64_ encoding scheme.  Because decrypting a Base64-encoded string is
-trivial, LOGIN is not considered a secure authentication method and should
-be avoided.
-
-.. _Base64: http://www.php.net/manual/en/function.base64-encode.php
-
-PLAIN
------
-
-The PLAIN authentication method sends the user's password in plain text.
-This method of authentication is not secure and should be avoided.
-
-Data Quoting
-============
-
-By default, all outbound string data is quoted in accordance with SMTP
-standards.  This means that all native Unix (`\\n`) and Mac (`\\r`) line
-endings are converted to Internet-standard CRLF (`\\r\\n`) line endings.
-Also, because the SMTP protocol uses a single leading period (`.`) to signal
-an end to the message data, single leading periods in the original data
-string are "doubled" (e.g. "`..`").
-
-These string transformation can be expensive when large blocks of data are
-involved.  For example, the Net_SMTP package is not aware of MIME parts (it
-just sees the MIME message as one big string of characters), so it is not
-able to skip non-text attachments when searching for characters that may
-need to be quoted.
-
-Because of this, it is possible to extend the Net_SMTP class in order to
-implement your own custom quoting routine.  Just create a new class based on
-the Net_SMTP class and reimplement the `quotedata()` method::
-
-    require 'Net_SMTP.php';
-
-    class Net_SMTP_custom extends Net_SMTP
-    {
-        function quotedata($data)
-        {
-            /* Perform custom data quoting */
-        }
-    }
-
-Note that the `$data` parameter will be passed to the `quotedata()` function
-`by reference`_.  This means that you can operate directly on `$data`.  It
-also the overhead of copying a large `$data` string to and from the
-`quotedata()` method.
-
-.. _by reference: http://www.php.net/manual/en/language.references.pass.php
-
-Debugging
-=========
-
-The Net_SMTP package contains built-in debugging output routines (disabled
-by default).  Debugging output must be explicitly enabled via the setDebug()
-method::
-
-    $smtp->setDebug(true);
-
-The debugging messages will be sent to the standard output stream.
-
-Examples
-========
-
-Basic Use
----------
-
-The following script demonstrates how a simple email message can be sent
-using the Net_SMTP package::
-
-    require 'Net/SMTP.php';
-
-    $host = 'mail.example.com';
-    $from = 'user@example.com';
-    $rcpt = array('recipient1@example.com', 'recipient2@example.com');
-    $subj = "Subject: Test Message\n";
-    $body = "Body Line 1\nBody Line 2";
-
-    /* Create a new Net_SMTP object. */
-    if (! ($smtp = new Net_SMTP($host))) {
-        die("Unable to instantiate Net_SMTP object\n");
-    }
-
-    /* Connect to the SMTP server. */
-    if (PEAR::isError($e = $smtp->connect())) {
-        die($e->getMessage() . "\n");
-    }
-
-    /* Send the 'MAIL FROM:' SMTP command. */
-    if (PEAR::isError($smtp->mailFrom($from))) {
-        die("Unable to set sender to <$from>\n");
-    }
-
-    /* Address the message to each of the recipients. */
-    foreach ($rcpt as $to) {
-        if (PEAR::isError($res = $smtp->rcptTo($to))) {
-            die("Unable to add recipient <$to>: " . $res->getMessage() . "\n");
-        }
-    }
-
-    /* Set the body of the message. */
-    if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) {
-        die("Unable to send data\n");
-    }
-
-    /* Disconnect from the SMTP server. */
-    $smtp->disconnect();
-
-.. _PEAR_Error: http://pear.php.net/manual/en/core.pear.pear-error.php
-.. _Net_Socket: http://pear.php.net/package/Net_Socket
-.. _Auth_SASL: http://pear.php.net/package/Auth_SASL
-
-.. vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=76:
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/SMTP.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/SMTP.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/SMTP.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/SMTP.php	2006-08-08 02:39:06.000000000 -0500
@@ -17,6 +17,8 @@
 // |          Jon Parise <jon@php.net>                                    |
 // |          Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar>      |
 // +----------------------------------------------------------------------+
+//
+// $Id: SMTP.php,v 1.55 2006/02/06 06:00:22 jon Exp $
 
 require_once 'PEAR.php';
 require_once 'Net/Socket.php';
@@ -101,9 +103,16 @@
      * Instantiates a new Net_SMTP object, overriding any defaults
      * with parameters that are passed in.
      *
-     * @param string The server to connect to.
-     * @param int The port to connect to.
-     * @param string The value to give when sending EHLO or HELO.
+     * If you have SSL support in PHP, you can connect to a server
+     * over SSL using an 'ssl://' prefix:
+     *
+     *   // 465 is a common smtps port.
+     *   $smtp = new Net_SMTP('ssl://mail.host.com', 465);
+     *   $smtp->connect();
+     *
+     * @param string  $host       The server to connect to.
+     * @param integer $port       The port to connect to.
+     * @param string  $localhost  The value to give when sending EHLO or HELO.
      *
      * @access  public
      * @since   1.0
@@ -114,7 +123,7 @@
         if (isset($port)) $this->port = $port;
         if (isset($localhost)) $this->localhost = $localhost;
 
-        $this->_socket = new Net_Socket();
+        $this->_socket = &new Net_Socket();
 
         /*
          * Include the Auth_SASL package.  If the package is not available,
@@ -158,17 +167,20 @@
         }
 
         if (PEAR::isError($error = $this->_socket->write($data))) {
-            return new PEAR_Error('Failed to write to socket: ' .
-                                  $error->getMessage());
+            return PEAR::raiseError('Failed to write to socket: ' .
+                                    $error->getMessage());
         }
 
         return true;
     }
 
     /**
-     * Send a command to the server with an optional string of arguments.
-     * A carriage return / linefeed (CRLF) sequence will be appended to each
-     * command string before it is sent to the SMTP server.
+     * Send a command to the server with an optional string of
+     * arguments.  A carriage return / linefeed (CRLF) sequence will
+     * be appended to each command string before it is sent to the
+     * SMTP server - an error will be thrown if the command string
+     * already contains any newline characters. Use _send() for
+     * commands that must contain newlines.
      *
      * @param   string  $command    The SMTP command to send to the server.
      * @param   string  $args       A string of optional arguments to append
@@ -182,7 +194,11 @@
     function _put($command, $args = '')
     {
         if (!empty($args)) {
-            return $this->_send($command . ' ' . $args . "\r\n");
+            $command .= ' ' . $args;
+        }
+
+        if (strcspn($command, "\r\n") !== strlen($command)) {
+            return PEAR::raiseError('Commands cannot contain newlines');
         }
 
         return $this->_send($command . "\r\n");
@@ -217,7 +233,7 @@
             /* If we receive an empty line, the connection has been closed. */
             if (empty($line)) {
                 $this->disconnect();
-                return new PEAR_Error("Connection was unexpectedly closed");
+                return PEAR::raiseError('Connection was unexpectedly closed');
             }
 
             /* Read the code and store the rest in the arguments array. */
@@ -252,7 +268,7 @@
             }
         }
 
-        return new PEAR_Error("Invalid response code received from server");
+        return PEAR::raiseError('Invalid response code received from server');
     }
 
     /**
@@ -288,8 +304,8 @@
         $result = $this->_socket->connect($this->host, $this->port,
                                           $persistent, $timeout);
         if (PEAR::isError($result)) {
-            return new PEAR_Error('Failed to connect socket: ' .
-                                  $result->getMessage());
+            return PEAR::raiseError('Failed to connect socket: ' .
+                                    $result->getMessage());
         }
 
         if (PEAR::isError($error = $this->_parseResponse(220))) {
@@ -319,8 +335,8 @@
             return $error;
         }
         if (PEAR::isError($error = $this->_socket->disconnect())) {
-            return new PEAR_Error('Failed to disconnect socket: ' .
-                                  $error->getMessage());
+            return PEAR::raiseError('Failed to disconnect socket: ' .
+                                    $error->getMessage());
         }
 
         return true;
@@ -353,7 +369,7 @@
                 return $error;
             }
             if (PEAR::isError($this->_parseResponse(250))) {
-                return new PEAR_Error('HELO was not accepted: ', $this->_code);
+                return PEAR::raiseError('HELO was not accepted: ', $this->_code);
             }
 
             return true;
@@ -389,7 +405,7 @@
             }
         }
 
-        return new PEAR_Error('No supported authentication methods');
+        return PEAR::raiseError('No supported authentication methods');
     }
 
     /**
@@ -408,13 +424,11 @@
     function auth($uid, $pwd , $method = '')
     {
         if (empty($this->_esmtp['AUTH'])) {
-            return new PEAR_Error('SMTP server does no support authentication');
+            return PEAR::raiseError('SMTP server does no support authentication');
         }
 
-        /*
-         * If no method has been specified, get the name of the best supported
-         * method advertised by the SMTP server.
-         */
+        /* If no method has been specified, get the name of the best
+         * supported method advertised by the SMTP server. */
         if (empty($method)) {
             if (PEAR::isError($method = $this->_getBestAuthMethod())) {
                 /* Return the PEAR_Error object from _getBestAuthMethod(). */
@@ -423,7 +437,7 @@
         } else {
             $method = strtoupper($method);
             if (!in_array($method, $this->auth_methods)) {
-                return new PEAR_Error("$method is not a supported authentication method");
+                return PEAR::raiseError("$method is not a supported authentication method");
             }
         }
 
@@ -441,7 +455,7 @@
                 $result = $this->_authPlain($uid, $pwd);
                 break;
             default:
-                $result = new PEAR_Error("$method is not a supported authentication method");
+                $result = PEAR::raiseError("$method is not a supported authentication method");
                 break;
         }
 
@@ -450,11 +464,6 @@
             return $result;
         }
 
-        /* RFC-2554 requires us to re-negotiate ESMTP after an AUTH. */
-        if (PEAR::isError($error = $this->_negotiate())) {
-            return $error;
-        }
-
         return true;
     }
 
@@ -496,10 +505,9 @@
             return $error;
         }
 
-        /*
-         * We don't use the protocol's third step because SMTP doesn't allow
-         * subsequent authentication, so we just silently ignore it.
-         */
+        /* We don't use the protocol's third step because SMTP doesn't
+         * allow subsequent authentication, so we just silently ignore
+         * it. */
         if (PEAR::isError($error = $this->_put(' '))) {
             return $error;
         }
@@ -561,7 +569,7 @@
      */
     function _authLogin($uid, $pwd)
     {
-        if (PEAR::isError($error = $this->_put('AUTH', 'LOGIN'))) { 
+        if (PEAR::isError($error = $this->_put('AUTH', 'LOGIN'))) {
             return $error;
         }
         /* 334: Continue authentication request */
@@ -657,16 +665,41 @@
     /**
      * Send the MAIL FROM: command.
      *
-     * @param string The sender (reverse path) to set.
+     * @param string $sender    The sender (reverse path) to set.
+     * @param string $params    String containing additional MAIL parameters,
+     *                          such as the NOTIFY flags defined by RFC 1891
+     *                          or the VERP protocol.
+     *
+     *                          If $params is an array, only the 'verp' option
+     *                          is supported.  If 'verp' is true, the XVERP
+     *                          parameter is appended to the MAIL command.  If
+     *                          the 'verp' value is a string, the full
+     *                          XVERP=value parameter is appended.
      *
      * @return mixed Returns a PEAR_Error with an error message on any
      *               kind of failure, or true on success.
      * @access public
      * @since  1.0
      */
-    function mailFrom($sender)
+    function mailFrom($sender, $params = null)
     {
-        if (PEAR::isError($error = $this->_put('MAIL', "FROM:<$sender>"))) {
+        $args = "FROM:<$sender>";
+
+        /* Support the deprecated array form of $params. */
+        if (is_array($params) && isset($params['verp'])) {
+            /* XVERP */
+            if ($params['verp'] === true) {
+                $args .= ' XVERP';
+
+            /* XVERP=something */
+            } elseif (trim($params['verp'])) {
+                $args .= ' XVERP=' . $params['verp'];
+            }
+        } elseif (is_string($params)) {
+            $args .= ' ' . $params;
+        }
+
+        if (PEAR::isError($error = $this->_put('MAIL', $args))) {
             return $error;
         }
         if (PEAR::isError($error = $this->_parseResponse(250))) {
@@ -679,16 +712,24 @@
     /**
      * Send the RCPT TO: command.
      *
-     * @param string The recipient (forward path) to add.
+     * @param string $recipient The recipient (forward path) to add.
+     * @param string $params    String containing additional RCPT parameters,
+     *                          such as the NOTIFY flags defined by RFC 1891.
      *
      * @return mixed Returns a PEAR_Error with an error message on any
      *               kind of failure, or true on success.
+     *
      * @access public
      * @since  1.0
      */
-    function rcptTo($recipient)
+    function rcptTo($recipient, $params = null)
     {
-        if (PEAR::isError($error = $this->_put('RCPT', "TO:<$recipient>"))) {
+        $args = "TO:<$recipient>";
+        if (is_string($params)) {
+            $args .= ' ' . $params;
+        }
+
+        if (PEAR::isError($error = $this->_put('RCPT', $args))) {
             return $error;
         }
         if (PEAR::isError($error = $this->_parseResponse(array(250, 251)))) {
@@ -701,36 +742,32 @@
     /**
      * Quote the data so that it meets SMTP standards.
      *
-     * This is provided as a separate public function to facilitate easier
-     * overloading for the cases where it is desirable to customize the
-     * quoting behavior.
+     * This is provided as a separate public function to facilitate
+     * easier overloading for the cases where it is desirable to
+     * customize the quoting behavior.
      *
-     * @param string The message text to quote.  The string must be passed
-     *               by reference, and the text will be modified in place.
+     * @param string $data  The message text to quote. The string must be passed
+     *                      by reference, and the text will be modified in place.
      *
      * @access public
      * @since  1.2
      */
     function quotedata(&$data)
     {
-        /*
-         * Change Unix (\n) and Mac (\r) linefeeds into Internet-standard CRLF
-         * (\r\n) linefeeds.
-         */
-        $data = preg_replace("/([^\r]{1})\n/", "\\1\r\n", $data);
-        $data = preg_replace("/\n\n/", "\n\r\n", $data);
-
-        /*
-         * Because a single leading period (.) signifies an end to the data,
-         * legitimate leading periods need to be "doubled" (e.g. '..').
-         */
-        $data = preg_replace("/\n\./", "\n..", $data);
+        /* Change Unix (\n) and Mac (\r) linefeeds into
+         * Internet-standard CRLF (\r\n) linefeeds. */
+        $data = preg_replace(array('/(?<!\r)\n/','/\r(?!\n)/'), "\r\n", $data);
+
+        /* Because a single leading period (.) signifies an end to the
+         * data, legitimate leading periods need to be "doubled"
+         * (e.g. '..'). */
+        $data = str_replace("\n.", "\n..", $data);
     }
 
     /**
      * Send the DATA command.
      *
-     * @param string The message body to send.
+     * @param string $data  The message body to send.
      *
      * @return mixed Returns a PEAR_Error with an error message on any
      *               kind of failure, or true on success.
@@ -739,16 +776,15 @@
      */
     function data($data)
     {
-        /*
-         * RFC 1870, section 3, subsection 3 states "a value of zero indicates
-         * that no fixed maximum message size is in force".  Furthermore, it
-         * says that if "the parameter is omitted no information is conveyed
-         * about the server's fixed maximum message size".
-         */
+        /* RFC 1870, section 3, subsection 3 states "a value of zero
+         * indicates that no fixed maximum message size is in force".
+         * Furthermore, it says that if "the parameter is omitted no
+         * information is conveyed about the server's fixed maximum
+         * message size". */
         if (isset($this->_esmtp['SIZE']) && ($this->_esmtp['SIZE'] > 0)) {
             if (strlen($data) >= $this->_esmtp['SIZE']) {
                 $this->disconnect();
-                return new PEAR_Error('Message size excedes the server limit');
+                return PEAR::raiseError('Message size excedes the server limit');
             }
         }
 
@@ -762,8 +798,8 @@
             return $error;
         }
 
-        if (PEAR::isError($this->_send($data . "\r\n.\r\n"))) {
-            return new PEAR_Error('write to socket failed');
+        if (PEAR::isError($result = $this->_send($data . "\r\n.\r\n"))) {
+            return $result;
         }
         if (PEAR::isError($error = $this->_parseResponse(250))) {
             return $error;
@@ -925,7 +961,7 @@
         if (PEAR::isError($error = $this->_put('VRFY', $string))) {
             return $error;
         }
-        if (PEAR::isError($error = $this->_parseResponse(250))) {
+        if (PEAR::isError($error = $this->_parseResponse(array(250, 252)))) {
             return $error;
         }
 
@@ -965,6 +1001,5 @@
     {
         return true;
     }
-}
 
-?>
+}
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/Socket.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/Socket.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/Socket.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/Socket.php	2006-08-08 02:39:06.000000000 -0500
@@ -17,90 +17,109 @@
 // |          Chuck Hagenbuch <chuck@horde.org>                           |
 // +----------------------------------------------------------------------+
 //
-// $Id: Socket.php,v 1.9 2004/04/26 23:02:41 chagenbu Exp $
-//
+// $Id: Socket.php,v 1.24 2005/02/03 20:40:16 chagenbu Exp $
 
 require_once 'PEAR.php';
 
+define('NET_SOCKET_READ',  1);
+define('NET_SOCKET_WRITE', 2);
+define('NET_SOCKET_ERROR', 3);
+
 /**
- * Generalized Socket class. More docs to be written.
+ * Generalized Socket class.
  *
- * @version 1.0
+ * @version 1.1
  * @author Stig Bakken <ssb@php.net>
  * @author Chuck Hagenbuch <chuck@horde.org>
  */
 class Net_Socket extends PEAR {
-    // {{{ properties
 
-    /** Socket file pointer. */
+    /**
+     * Socket file pointer.
+     * @var resource $fp
+     */
     var $fp = null;
 
-    /** Whether the socket is blocking. */
+    /**
+     * Whether the socket is blocking. Defaults to true.
+     * @var boolean $blocking
+     */
     var $blocking = true;
 
-    /** Whether the socket is persistent. */
+    /**
+     * Whether the socket is persistent. Defaults to false.
+     * @var boolean $persistent
+     */
     var $persistent = false;
 
-    /** The IP address to connect to. */
+    /**
+     * The IP address to connect to.
+     * @var string $addr
+     */
     var $addr = '';
 
-    /** The port number to connect to. */
+    /**
+     * The port number to connect to.
+     * @var integer $port
+     */
     var $port = 0;
 
-    /** Number of seconds to wait on socket connections before
-        assuming there's no more data. */
+    /**
+     * Number of seconds to wait on socket connections before assuming
+     * there's no more data. Defaults to no timeout.
+     * @var integer $timeout
+     */
     var $timeout = false;
 
-    /** Number of bytes to read at a time in readLine() and
-        readAll(). */
-    var $lineLength = 2048;
-    // }}}
-
-    // {{{ constructor
     /**
-     * Constructs a new Net_Socket object.
-     *
-     * @access public
+     * Number of bytes to read at a time in readLine() and
+     * readAll(). Defaults to 2048.
+     * @var integer $lineLength
      */
-    function Net_Socket()
-    {
-        $this->PEAR();
-    }
-    // }}}
+    var $lineLength = 2048;
 
-    // {{{ connect()
     /**
      * Connect to the specified port. If called when the socket is
      * already connected, it disconnects and connects again.
      *
-     * @param $addr string IP address or host name
-     * @param $port int TCP port number
-     * @param $persistent bool (optional) whether the connection is
-     *        persistent (kept open between requests by the web server)
-     * @param $timeout int (optional) how long to wait for data
-     * @param $options array see options for stream_context_create
+     * @param string  $addr        IP address or host name.
+     * @param integer $port        TCP port number.
+     * @param boolean $persistent  (optional) Whether the connection is
+     *                             persistent (kept open between requests
+     *                             by the web server).
+     * @param integer $timeout     (optional) How long to wait for data.
+     * @param array   $options     See options for stream_context_create.
+     *
      * @access public
-     * @return mixed true on success or error object
+     *
+     * @return boolean | PEAR_Error  True on success or a PEAR_Error on failure.
      */
-    function connect($addr, $port, $persistent = null, $timeout = null, $options = null)
+    function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)
     {
         if (is_resource($this->fp)) {
             @fclose($this->fp);
             $this->fp = null;
         }
 
-        if (strspn($addr, '.0123456789') == strlen($addr)) {
+        if (!$addr) {
+            return $this->raiseError('$addr cannot be empty');
+        } elseif (strspn($addr, '.0123456789') == strlen($addr) ||
+                  strstr($addr, '/') !== false) {
             $this->addr = $addr;
         } else {
-            $this->addr = gethostbyname($addr);
+            $this->addr = @gethostbyname($addr);
         }
+
         $this->port = $port % 65536;
+
         if ($persistent !== null) {
             $this->persistent = $persistent;
         }
+
         if ($timeout !== null) {
             $this->timeout = $timeout;
         }
+
         $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
         $errno = 0;
         $errstr = '';
@@ -111,7 +130,7 @@
                 $timeout = 0;
             }
             $context = stream_context_create($options);
-            $fp = $openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);
+            $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);
         } else {
             if ($this->timeout) {
                 $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);
@@ -128,9 +147,7 @@
 
         return $this->setBlocking($this->blocking);
     }
-    // }}}
 
-    // {{{ disconnect()
     /**
      * Disconnects from the peer, closes the socket.
      *
@@ -139,71 +156,65 @@
      */
     function disconnect()
     {
-        if (is_resource($this->fp)) {
-            fclose($this->fp);
-            $this->fp = null;
-            return true;
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        @fclose($this->fp);
+        $this->fp = null;
+        return true;
     }
-    // }}}
 
-    // {{{ isBlocking()
     /**
      * Find out if the socket is in blocking mode.
      *
      * @access public
-     * @return bool the current blocking mode.
+     * @return boolean  The current blocking mode.
      */
     function isBlocking()
     {
         return $this->blocking;
     }
-    // }}}
 
-    // {{{ setBlocking()
     /**
      * Sets whether the socket connection should be blocking or
      * not. A read call to a non-blocking socket will return immediately
      * if there is no data available, whereas it will block until there
      * is data for blocking sockets.
      *
-     * @param $mode bool true for blocking sockets, false for nonblocking
+     * @param boolean $mode  True for blocking sockets, false for nonblocking.
      * @access public
      * @return mixed true on success or an error object otherwise
      */
     function setBlocking($mode)
     {
-        if (is_resource($this->fp)) {
-            $this->blocking = $mode;
-            socket_set_blocking($this->fp, $this->blocking);
-            return true;
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        $this->blocking = $mode;
+        socket_set_blocking($this->fp, $this->blocking);
+        return true;
     }
-    // }}}
 
-    // {{{ setTimeout()
     /**
      * Sets the timeout value on socket descriptor,
      * expressed in the sum of seconds and microseconds
      *
-     * @param $seconds int seconds
-     * @param $microseconds int microseconds
+     * @param integer $seconds  Seconds.
+     * @param integer $microseconds  Microseconds.
      * @access public
      * @return mixed true on success or an error object otherwise
      */
     function setTimeout($seconds, $microseconds)
     {
-        if (is_resource($this->fp)) {
-            socket_set_timeout($this->fp, $seconds, $microseconds);
-            return true;
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        return socket_set_timeout($this->fp, $seconds, $microseconds);
     }
-    // }}}
 
-    // {{{ getStatus()
     /**
      * Returns information about an existing socket resource.
      * Currently returns four entries in the result array:
@@ -220,14 +231,13 @@
      */
     function getStatus()
     {
-        if (is_resource($this->fp)) {
-            return socket_get_status($this->fp);
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        return socket_get_status($this->fp);
     }
-    // }}}
 
-    // {{{ gets()
     /**
      * Get a specified line of data
      *
@@ -237,69 +247,87 @@
      */
     function gets($size)
     {
-        if (is_resource($this->fp)) {
-            return fgets($this->fp, $size);
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        return @fgets($this->fp, $size);
     }
-    // }}}
 
-    // {{{ read()
     /**
      * Read a specified amount of data. This is guaranteed to return,
      * and has the added benefit of getting everything in one fread()
      * chunk; if you know the size of the data you're getting
      * beforehand, this is definitely the way to go.
      *
-     * @param $size The number of bytes to read from the socket.
+     * @param integer $size  The number of bytes to read from the socket.
      * @access public
      * @return $size bytes of data from the socket, or a PEAR_Error if
      *         not connected.
      */
     function read($size)
     {
-        if (is_resource($this->fp)) {
-            return fread($this->fp, $size);
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        return @fread($this->fp, $size);
     }
-    // }}}
 
-    // {{{ write()
     /**
      * Write a specified amount of data.
      *
+     * @param string  $data       Data to write.
+     * @param integer $blocksize  Amount of data to write at once.
+     *                            NULL means all at once.
+     *
      * @access public
      * @return mixed true on success or an error object otherwise
      */
-    function write($data)
+    function write($data, $blocksize = null)
     {
-        if (is_resource($this->fp)) {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        if (is_null($blocksize) && !OS_WINDOWS) {
             return fwrite($this->fp, $data);
+        } else {
+            if (is_null($blocksize)) {
+                $blocksize = 1024;
+            }
+
+            $pos = 0;
+            $size = strlen($data);
+            while ($pos < $size) {
+                $written = @fwrite($this->fp, substr($data, $pos, $blocksize));
+                if ($written === false) {
+                    return false;
+                }
+                $pos += $written;
+            }
+
+            return $pos;
         }
-        return $this->raiseError("not connected");
     }
-    // }}}
 
-    // {{{ writeLine()
     /**
      * Write a line of data to the socket, followed by a trailing "\r\n".
      *
      * @access public
      * @return mixed fputs result, or an error
      */
-    function writeLine ($data)
+    function writeLine($data)
     {
-        if (is_resource($this->fp)) {
-            return $this->write($data . "\r\n");
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        return fwrite($this->fp, $data . "\r\n");
     }
-    // }}}
 
-    // {{{ eof()
     /**
-     * Tests for end-of-file on a socket descriptor
+     * Tests for end-of-file on a socket descriptor.
      *
      * @access public
      * @return bool
@@ -308,9 +336,7 @@
     {
         return (is_resource($this->fp) && feof($this->fp));
     }
-    // }}}
 
-    // {{{ readByte()
     /**
      * Reads a byte of data
      *
@@ -320,14 +346,13 @@
      */
     function readByte()
     {
-        if (is_resource($this->fp)) {
-            return ord($this->read(1));
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        return ord(@fread($this->fp, 1));
     }
-    // }}}
 
-    // {{{ readWord()
     /**
      * Reads a word of data
      *
@@ -337,36 +362,34 @@
      */
     function readWord()
     {
-        if (is_resource($this->fp)) {
-            $buf = $this->read(2);
-            return (ord($buf[0]) + (ord($buf[1]) << 8));
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        $buf = @fread($this->fp, 2);
+        return (ord($buf[0]) + (ord($buf[1]) << 8));
     }
-    // }}}
 
-    // {{{ readInt()
     /**
      * Reads an int of data
      *
      * @access public
-     * @return 1 int of data from the socket, or a PEAR_Error if
-     *         not connected.
+     * @return integer  1 int of data from the socket, or a PEAR_Error if
+     *                  not connected.
      */
     function readInt()
     {
-        if (is_resource($this->fp)) {
-            $buf = $this->read(4);
-            return (ord($buf[0]) + (ord($buf[1]) << 8) +
-                    (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        $buf = @fread($this->fp, 4);
+        return (ord($buf[0]) + (ord($buf[1]) << 8) +
+                (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
     }
-    // }}}
 
-    // {{{ readString()
     /**
-     * Reads a zeroterminated string of data
+     * Reads a zero-terminated string of data
      *
      * @access public
      * @return string, or a PEAR_Error if
@@ -374,18 +397,17 @@
      */
     function readString()
     {
-        if (is_resource($this->fp)) {
-            $string = '';
-            while (($char = $this->read(1)) != "\x00")  {
-                $string .= $char;
-            }
-            return $string;
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        $string = '';
+        while (($char = @fread($this->fp, 1)) != "\x00")  {
+            $string .= $char;
+        }
+        return $string;
     }
-    // }}}
 
-    // {{{ readIPAddress()
     /**
      * Reads an IP Address and returns it in a dot formated string
      *
@@ -395,16 +417,15 @@
      */
     function readIPAddress()
     {
-        if (is_resource($this->fp)) {
-            $buf = $this->read(4);
-            return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]),
-                           ord($buf[2]), ord($buf[3]));
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
         }
-        return $this->raiseError("not connected");
+
+        $buf = @fread($this->fp, 4);
+        return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]),
+                       ord($buf[2]), ord($buf[3]));
     }
-    // }}}
 
-    // {{{ readLine()
     /**
      * Read until either the end of the socket or a newline, whichever
      * comes first. Strips the trailing newline from the returned data.
@@ -416,41 +437,92 @@
      */
     function readLine()
     {
-        if (is_resource($this->fp)) {
-            $line = '';
-            $timeout = time() + $this->timeout;
-            while (!$this->eof() && (!$this->timeout || time() < $timeout)) {
-                $line .= $this->gets($this->lineLength);
-                if (substr($line, -2) == "\r\n" ||
-                    substr($line, -1) == "\n") {
-                    return rtrim($line, "\r\n");
-                }
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $line = '';
+        $timeout = time() + $this->timeout;
+        while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
+            $line .= @fgets($this->fp, $this->lineLength);
+            if (substr($line, -1) == "\n") {
+                return rtrim($line, "\r\n");
             }
-            return $line;
         }
-        return $this->raiseError("not connected");
+        return $line;
     }
-    // }}}
 
-    // {{{ readAll()
     /**
-     * Read until the socket closes. THIS FUNCTION WILL NOT EXIT if the
-     * socket is in blocking mode until the socket closes.
+     * Read until the socket closes, or until there is no more data in
+     * the inner PHP buffer. If the inner buffer is empty, in blocking
+     * mode we wait for at least 1 byte of data. Therefore, in
+     * blocking mode, if there is no data at all to be read, this
+     * function will never exit (unless the socket is closed on the
+     * remote end).
      *
      * @access public
-     * @return All data until the socket closes, or a PEAR_Error if
-     *         not connected.
+     *
+     * @return string  All data until the socket closes, or a PEAR_Error if
+     *                 not connected.
      */
     function readAll()
     {
-        if (is_resource($this->fp)) {
-            $data = '';
-            while (!$this->eof())
-                $data .= $this->read($this->lineLength);
-            return $data;
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $data = '';
+        while (!feof($this->fp)) {
+            $data .= @fread($this->fp, $this->lineLength);
+        }
+        return $data;
+    }
+
+    /**
+     * Runs the equivalent of the select() system call on the socket
+     * with a timeout specified by tv_sec and tv_usec.
+     *
+     * @param integer $state    Which of read/write/error to check for.
+     * @param integer $tv_sec   Number of seconds for timeout.
+     * @param integer $tv_usec  Number of microseconds for timeout.
+     *
+     * @access public
+     * @return False if select fails, integer describing which of read/write/error
+     *         are ready, or PEAR_Error if not connected.
+     */
+    function select($state, $tv_sec, $tv_usec = 0)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $read = null;
+        $write = null;
+        $except = null;
+        if ($state & NET_SOCKET_READ) {
+            $read[] = $this->fp;
+        }
+        if ($state & NET_SOCKET_WRITE) {
+            $write[] = $this->fp;
+        }
+        if ($state & NET_SOCKET_ERROR) {
+            $except[] = $this->fp;
+        }
+        if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) {
+            return false;
+        }
+
+        $result = 0;
+        if (count($read)) {
+            $result |= NET_SOCKET_READ;
+        }
+        if (count($write)) {
+            $result |= NET_SOCKET_WRITE;
+        }
+        if (count($except)) {
+            $result |= NET_SOCKET_ERROR;
         }
-        return $this->raiseError("not connected");
+        return $result;
     }
-    // }}}
 
 }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/tests/auth.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/tests/auth.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/tests/auth.phpt	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/tests/auth.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,38 +0,0 @@
---TEST--
-Net_SMTP: SMTP Authentication
---FILE--
-<?php
-
-require_once 'SMTP.php';
-require_once 'config.php';
-
-if (! ($smtp = new Net_SMTP(TEST_HOSTNAME, TEST_PORT, TEST_LOCALHOST))) {
-	die("Unable to instantiate Net_SMTP object\n");
-}
-
-if (PEAR::isError($e = $smtp->connect())) {
-	die($e->getMessage() . "\n");
-}
-
-if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) {
-}
-
-if (PEAR::isError($smtp->mailFrom(TEST_FROM))) {
-	die('Unable to set sender to <' . TEST_FROM . ">\n");
-}
-
-if (PEAR::isError($res = $smtp->rcptTo(TEST_TO))) {
-	die('Unable to add recipient <' . TEST_TO . '>: ' .
-		$res->getMessage() . "\n");
-}
-
-if (PEAR::isError($smtp->data(TEST_SUBJECT . "\r\n" . TEST_BODY))) {
-	die("Unable to send data\n");
-}
-
-$smtp->disconnect();
-
-echo 'Success!';
-
---EXPECT--
-Success!
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/tests/basic.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/tests/basic.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/tests/basic.phpt	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/tests/basic.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,35 +0,0 @@
---TEST--
-Net_SMTP: Basic Functionality
---FILE--
-<?php
-
-require_once 'SMTP.php';
-require_once 'config.php';
-
-if (! ($smtp = new Net_SMTP(TEST_HOSTNAME, TEST_PORT, TEST_LOCALHOST))) {
-	die("Unable to instantiate Net_SMTP object\n");
-}
-
-if (PEAR::isError($e = $smtp->connect())) {
-	die($e->getMessage() . "\n");
-}
-
-if (PEAR::isError($smtp->mailFrom(TEST_FROM))) {
-	die('Unable to set sender to <' . TEST_FROM . ">\n");
-}
-
-if (PEAR::isError($res = $smtp->rcptTo(TEST_TO))) {
-	die('Unable to add recipient <' . TEST_TO . '>: ' .
-		$res->getMessage() . "\n");
-}
-
-if (PEAR::isError($smtp->data(TEST_SUBJECT . "\r\n" . TEST_BODY))) {
-	die("Unable to send data\n");
-}
-
-$smtp->disconnect();
-
-echo 'Success!';
-
---EXPECT--
-Success!
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/tests/config.php.dist 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/tests/config.php.dist
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/tests/config.php.dist	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/tests/config.php.dist	1969-12-31 18:00:00.000000000 -0600
@@ -1,15 +0,0 @@
-<?php
-/*
- * Copy this file to config.php and customize the following values to suit
- * your configuration.
- */
-
-define('TEST_HOSTNAME',     'localhost');
-define('TEST_PORT',         25);
-define('TEST_LOCALHOST',    'localhost');
-define('TEST_AUTH_USER',    'jon');
-define('TEST_AUTH_PASS',    'secret');
-define('TEST_FROM',         'from@example.com');
-define('TEST_TO',           'to@example.com');
-define('TEST_SUBJECT',      'Test Subject');
-define('TEST_BODY',         'Test Body');
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/Net/URL.php 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/URL.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/Net/URL.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/Net/URL.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,410 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2002-2004, Richard Heyes                                |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o Redistributions in binary form must reproduce the above copyright   |
+// |   notice, this list of conditions and the following disclaimer in the |
+// |   documentation and/or other materials provided with the distribution.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
+// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
+// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
+// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
+// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Richard Heyes <richard at php net>                            |
+// +-----------------------------------------------------------------------+
+//
+// $Id: URL.php,v 1.36 2004/06/19 18:58:50 richard Exp $
+//
+// Net_URL Class
+
+class Net_URL
+{
+    /**
+    * Full url
+    * @var string
+    */
+    var $url;
+
+    /**
+    * Protocol
+    * @var string
+    */
+    var $protocol;
+
+    /**
+    * Username
+    * @var string
+    */
+    var $username;
+
+    /**
+    * Password
+    * @var string
+    */
+    var $password;
+
+    /**
+    * Host
+    * @var string
+    */
+    var $host;
+
+    /**
+    * Port
+    * @var integer
+    */
+    var $port;
+
+    /**
+    * Path
+    * @var string
+    */
+    var $path;
+
+    /**
+    * Query string
+    * @var array
+    */
+    var $querystring;
+
+    /**
+    * Anchor
+    * @var string
+    */
+    var $anchor;
+
+    /**
+    * Whether to use []
+    * @var bool
+    */
+    var $useBrackets;
+
+    /**
+    * PHP4 Constructor
+    *
+    * @see __construct()
+    */
+    function Net_URL($url = null, $useBrackets = true)
+    {
+        $this->__construct($url, $useBrackets);
+    }
+
+    /**
+    * PHP5 Constructor
+    *
+    * Parses the given url and stores the various parts
+    * Defaults are used in certain cases
+    *
+    * @param string $url         Optional URL
+    * @param bool   $useBrackets Whether to use square brackets when
+    *                            multiple querystrings with the same name
+    *                            exist
+    */
+    function __construct($url = null, $useBrackets = true)
+    {
+        $HTTP_SERVER_VARS  = !empty($_SERVER) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS'];
+
+        $this->useBrackets = $useBrackets;
+        $this->url         = $url;
+        $this->user        = '';
+        $this->pass        = '';
+        $this->host        = '';
+        $this->port        = 80;
+        $this->path        = '';
+        $this->querystring = array();
+        $this->anchor      = '';
+
+        // Only use defaults if not an absolute URL given
+        if (!preg_match('/^[a-z0-9]+:\/\//i', $url)) {
+
+            $this->protocol    = (@$HTTP_SERVER_VARS['HTTPS'] == 'on' ? 'https' : 'http');
+
+            /**
+            * Figure out host/port
+            */
+            if (!empty($HTTP_SERVER_VARS['HTTP_HOST']) AND preg_match('/^(.*)(:([0-9]+))?$/U', $HTTP_SERVER_VARS['HTTP_HOST'], $matches)) {
+                $host = $matches[1];
+                if (!empty($matches[3])) {
+                    $port = $matches[3];
+                } else {
+                    $port = $this->getStandardPort($this->protocol);
+                }
+            }
+
+            $this->user        = '';
+            $this->pass        = '';
+            $this->host        = !empty($host) ? $host : (isset($HTTP_SERVER_VARS['SERVER_NAME']) ? $HTTP_SERVER_VARS['SERVER_NAME'] : 'localhost');
+            $this->port        = !empty($port) ? $port : (isset($HTTP_SERVER_VARS['SERVER_PORT']) ? $HTTP_SERVER_VARS['SERVER_PORT'] : $this->getStandardPort($this->protocol));
+            $this->path        = !empty($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : '/';
+            $this->querystring = isset($HTTP_SERVER_VARS['QUERY_STRING']) ? $this->_parseRawQuerystring($HTTP_SERVER_VARS['QUERY_STRING']) : null;
+            $this->anchor      = '';
+        }
+
+        // Parse the url and store the various parts
+        if (!empty($url)) {
+            $urlinfo = parse_url($url);
+
+            // Default querystring
+            $this->querystring = array();
+
+            foreach ($urlinfo as $key => $value) {
+                switch ($key) {
+                    case 'scheme':
+                        $this->protocol = $value;
+                        $this->port     = $this->getStandardPort($value);
+                        break;
+
+                    case 'user':
+                    case 'pass':
+                    case 'host':
+                    case 'port':
+                        $this->$key = $value;
+                        break;
+
+                    case 'path':
+                        if ($value{0} == '/') {
+                            $this->path = $value;
+                        } else {
+                            $path = dirname($this->path) == DIRECTORY_SEPARATOR ? '' : dirname($this->path);
+                            $this->path = sprintf('%s/%s', $path, $value);
+                        }
+                        break;
+
+                    case 'query':
+                        $this->querystring = $this->_parseRawQueryString($value);
+                        break;
+
+                    case 'fragment':
+                        $this->anchor = $value;
+                        break;
+                }
+            }
+        }
+    }
+
+    /**
+    * Returns full url
+    *
+    * @return string Full url
+    * @access public
+    */
+    function getURL()
+    {
+        $querystring = $this->getQueryString();
+
+        $this->url = $this->protocol . '://'
+                   . $this->user . (!empty($this->pass) ? ':' : '')
+                   . $this->pass . (!empty($this->user) ? '@' : '')
+                   . $this->host . ($this->port == $this->getStandardPort($this->protocol) ? '' : ':' . $this->port)
+                   . $this->path
+                   . (!empty($querystring) ? '?' . $querystring : '')
+                   . (!empty($this->anchor) ? '#' . $this->anchor : '');
+
+        return $this->url;
+    }
+
+    /**
+    * Adds a querystring item
+    *
+    * @param  string $name       Name of item
+    * @param  string $value      Value of item
+    * @param  bool   $preencoded Whether value is urlencoded or not, default = not
+    * @access public
+    */
+    function addQueryString($name, $value, $preencoded = false)
+    {
+        if ($preencoded) {
+            $this->querystring[$name] = $value;
+        } else {
+            $this->querystring[$name] = is_array($value) ? array_map('rawurlencode', $value): rawurlencode($value);
+        }
+    }
+
+    /**
+    * Removes a querystring item
+    *
+    * @param  string $name Name of item
+    * @access public
+    */
+    function removeQueryString($name)
+    {
+        if (isset($this->querystring[$name])) {
+            unset($this->querystring[$name]);
+        }
+    }
+
+    /**
+    * Sets the querystring to literally what you supply
+    *
+    * @param  string $querystring The querystring data. Should be of the format foo=bar&x=y etc
+    * @access public
+    */
+    function addRawQueryString($querystring)
+    {
+        $this->querystring = $this->_parseRawQueryString($querystring);
+    }
+
+    /**
+    * Returns flat querystring
+    *
+    * @return string Querystring
+    * @access public
+    */
+    function getQueryString()
+    {
+        if (!empty($this->querystring)) {
+            foreach ($this->querystring as $name => $value) {
+                if (is_array($value)) {
+                    foreach ($value as $k => $v) {
+                        $querystring[] = $this->useBrackets ? sprintf('%s[%s]=%s', $name, $k, $v) : ($name . '=' . $v);
+                    }
+                } elseif (!is_null($value)) {
+                    $querystring[] = $name . '=' . $value;
+                } else {
+                    $querystring[] = $name;
+                }
+            }
+            $querystring = implode(ini_get('arg_separator.output'), $querystring);
+        } else {
+            $querystring = '';
+        }
+
+        return $querystring;
+    }
+
+    /**
+    * Parses raw querystring and returns an array of it
+    *
+    * @param  string  $querystring The querystring to parse
+    * @return array                An array of the querystring data
+    * @access private
+    */
+    function _parseRawQuerystring($querystring)
+    {
+        $parts  = preg_split('/[' . preg_quote(ini_get('arg_separator.input'), '/') . ']/', $querystring, -1, PREG_SPLIT_NO_EMPTY);
+        $return = array();
+
+        foreach ($parts as $part) {
+            if (strpos($part, '=') !== false) {
+                $value = substr($part, strpos($part, '=') + 1);
+                $key   = substr($part, 0, strpos($part, '='));
+            } else {
+                $value = null;
+                $key   = $part;
+            }
+            if (substr($key, -2) == '[]') {
+                $key = substr($key, 0, -2);
+                if (@!is_array($return[$key])) {
+                    $return[$key]   = array();
+                    $return[$key][] = $value;
+                } else {
+                    $return[$key][] = $value;
+                }
+            } elseif (!$this->useBrackets AND !empty($return[$key])) {
+                $return[$key]   = (array)$return[$key];
+                $return[$key][] = $value;
+            } else {
+                $return[$key] = $value;
+            }
+        }
+
+        return $return;
+    }
+
+    /**
+    * Resolves //, ../ and ./ from a path and returns
+    * the result. Eg:
+    *
+    * /foo/bar/../boo.php    => /foo/boo.php
+    * /foo/bar/../../boo.php => /boo.php
+    * /foo/bar/.././/boo.php => /foo/boo.php
+    *
+    * This method can also be called statically.
+    *
+    * @param  string $url URL path to resolve
+    * @return string      The result
+    */
+    function resolvePath($path)
+    {
+        $path = explode('/', str_replace('//', '/', $path));
+
+        for ($i=0; $i<count($path); $i++) {
+            if ($path[$i] == '.') {
+                unset($path[$i]);
+                $path = array_values($path);
+                $i--;
+
+            } elseif ($path[$i] == '..' AND ($i > 1 OR ($i == 1 AND $path[0] != '') ) ) {
+                unset($path[$i]);
+                unset($path[$i-1]);
+                $path = array_values($path);
+                $i -= 2;
+
+            } elseif ($path[$i] == '..' AND $i == 1 AND $path[0] == '') {
+                unset($path[$i]);
+                $path = array_values($path);
+                $i--;
+
+            } else {
+                continue;
+            }
+        }
+
+        return implode('/', $path);
+    }
+
+    /**
+    * Returns the standard port number for a protocol
+    *
+    * @param  string  $scheme The protocol to lookup
+    * @return integer         Port number or NULL if no scheme matches
+    *
+    * @author Philippe Jausions <Philippe.Jausions@11abacus.com>
+    */
+    function getStandardPort($scheme)
+    {
+        switch (strtolower($scheme)) {
+            case 'http':    return 80;
+            case 'https':   return 443;
+            case 'ftp':     return 21;
+            case 'imap':    return 143;
+            case 'imaps':   return 993;
+            case 'pop3':    return 110;
+            case 'pop3s':   return 995;
+            default:        return null;
+       }
+    }
+
+    /**
+    * Forces the URL to a particular protocol
+    *
+    * @param string  $protocol Protocol to force the URL to
+    * @param integer $port     Optional port (standard port is used by default)
+    */
+    function setProtocol($protocol, $port = null)
+    {
+        $this->protocol = $protocol;
+        $this->port = is_null($port) ? $this->getStandardPort() : $port;
+    }
+
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/OS/Guess.php 1.4.0sr5-1/cpanel-glprivate/system/pear/OS/Guess.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/OS/Guess.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/OS/Guess.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,23 +1,25 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Guess.php,v 1.13.4.1 2004/10/19 04:15:56 cellog Exp $
+/**
+ * The OS_Guess class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Guess.php,v 1.20 2005/10/26 19:33:03 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since PEAR 0.1
+ */
 
 // {{{ uname examples
 
@@ -80,6 +82,21 @@
  * - define endianness, to allow matchSignature("bigend") etc.
  */
 
+/**
+ * Retrieves information about the current operating system
+ *
+ * This class uses php_uname() to grok information about the current OS
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
 class OS_Guess
 {
     var $sysname;
@@ -124,10 +141,10 @@
         }
 
         switch ($sysname) {
-            case 'AIX':
+            case 'AIX' :
                 $release = "$parts[3].$parts[2]";
                 break;
-            case 'Windows':
+            case 'Windows' :
                 switch ($parts[1]) {
                     case '95/98':
                         $release = '9x';
@@ -138,7 +155,7 @@
                 }
                 $cpu = 'i386';
                 break;
-            case 'Linux':
+            case 'Linux' :
                 $extra = $this->_detectGlibcVersion();
                 // use only the first two digits from the kernel version
                 $release = ereg_replace('^([[:digit:]]+\.[[:digit:]]+).*', '\1', $parts[2]);
@@ -180,9 +197,48 @@
 
     function _detectGlibcVersion()
     {
-        // Use glibc's <features.h> header file to
-        // get major and minor version number:
+        static $glibc = false;
+        if ($glibc !== false) {
+            return $glibc; // no need to run this multiple times
+        }
         include_once "System.php";
+        if (!file_exists('/usr/bin/cpp') || !is_executable('/usr/bin/cpp')) {
+            // Use glibc's <features.h> header file to
+            // get major and minor version number:
+            if ($features_file = @fopen('/usr/include/features.h', 'rb') ) {
+                while (!feof($features_file)) {
+                    $line = fgets($features_file, 8192);
+                    if (!$line || (strpos($line, '#define') === false)) {
+                        continue;
+                    }
+                    if (strpos($line, '__GLIBC__')) {
+                        // major version number #define __GLIBC__ version
+                        $line = preg_split('/\s+/', $line);
+                        $glibc_major = trim($line[2]);
+                        if (isset($glibc_minor)) {
+                            break;
+                        }
+                        continue;
+                    }
+                    if (strpos($line, '__GLIBC_MINOR__'))  {
+                        // got the minor version number
+                        // #define __GLIBC_MINOR__ version
+                        $line = preg_split('/\s+/', $line);
+                        $glibc_minor = trim($line[2]);
+                        if (isset($glibc_major)) {
+                            break;
+                        }
+                        continue;
+                    }
+                }
+                fclose($features_file);
+                if (!isset($glibc_major) || !isset($glibc_minor)) {
+                    return $glibc = '';
+                }
+                return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ;
+            }
+            return $glibc = '';
+        }
         $tmpfile = System::mktemp("glibctest");
         $fp = fopen($tmpfile, "w");
         fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
@@ -206,9 +262,9 @@
             }
         }
         if (!($major && $minor)) {
-            return '';
+            return $glibc = '';
         }
-        return "glibc{$major}.{$minor}";
+        return $glibc = "glibc{$major}.{$minor}";
     }
 
     function getSignature()
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/package.dtd 1.4.0sr5-1/cpanel-glprivate/system/pear/package.dtd
--- 1.3.11sr1/cpanel-glprivate/system/pear/package.dtd	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/package.dtd	2006-08-08 02:39:06.000000000 -0500
@@ -1,14 +1,14 @@
 <!--
-     $Id: package.dtd,v 1.35 2004/01/25 23:36:28 pajoye Exp $
+     $Id: package.dtd,v 1.38 2005/11/12 02:23:07 cellog Exp $
 
      This is the PEAR package description, version 1.0.
      It should be used with the informal public identifier:
 
          "-//PHP Group//DTD PEAR Package 1.0//EN//XML"
 
-     Copyright (c) 1997-2004 The PHP Group
+     Copyright (c) 1997-2005 The PHP Group             
 
-     This source file is subject to version 3.0 of the PHP license, 
+     This source file is subject to version 3.00 of the PHP license,
      that is bundled with this package in the file LICENSE, and is
      available at through the world-wide-web at
      http://www.php.net/license/3_0.txt. 
@@ -17,22 +17,24 @@
      license@php.net so we can mail you a copy immediately.
 
      Authors:
-         Stig S. Bakken <ssb@php.net>
+         Stig S. Bakken <ssb@fast.no>
+         Gregory Beaver <cellog@php.net>
 
   -->
-
-<!ELEMENT package (name|summary|description|license|maintainers|release|changelog)+>
+<!ENTITY % NUMBER "CDATA">
+<!ELEMENT package (name,summary,description,license?,maintainers,release,changelog?)>
 <!ATTLIST package type    (source|binary|empty) "empty"
-                  version CDATA                 #REQUIRED>
+                  version CDATA                 #REQUIRED
+                  packagerversion CDATA         #IMPLIED>
 
 <!ELEMENT name (#PCDATA)>
 
 <!ELEMENT summary (#PCDATA)>
 
-<!ELEMENT description (#PCDATA)>
-
 <!ELEMENT license (#PCDATA)>
 
+<!ELEMENT description (#PCDATA)>
+
 <!ELEMENT maintainers (maintainer)+>
 
 <!ELEMENT maintainer (user|role|name|email)+>
@@ -45,28 +47,47 @@
 
 <!ELEMENT changelog (release)+>
 
-<!ELEMENT release (version|license|state|date|notes|filelist|deps|provides|script|configureoptions)+>
+<!ELEMENT release (version,date,license,state,notes,warnings?,provides*,deps?,configureoptions?,filelist?)>
 
 <!ELEMENT version (#PCDATA)>
 
-<!ELEMENT state (#PCDATA)>
-
 <!ELEMENT date (#PCDATA)>
 
+<!ELEMENT state (#PCDATA)>
+
 <!ELEMENT notes (#PCDATA)>
 
+<!ELEMENT warnings (#PCDATA)>
+
+<!ELEMENT deps (dep*)>
+
+<!ELEMENT dep (#PCDATA)>
+<!ATTLIST dep type    (pkg|ext|php) #REQUIRED
+	                       rel     (has|eq|lt|le|gt|ge)                          #IMPLIED
+	                       version CDATA                                     #IMPLIED
+	                       optional (yes|no)     'no'>
+
+<!ELEMENT configureoptions (configureoption)+>
+
+<!ELEMENT configureoption EMPTY>
+<!ATTLIST configureoption name CDATA #REQUIRED
+                                           default CDATA #IMPLIED
+                                           prompt CDATA #REQUIRED>
+
+<!ELEMENT provides EMPTY>
+<!ATTLIST provides type (ext|prog|class|function|feature|api) #REQUIRED
+                                name CDATA #REQUIRED
+                                extends CDATA #IMPLIED>
 <!ELEMENT filelist (dir|file)+>
 
 <!ELEMENT dir (dir|file)+>
 <!ATTLIST dir name           CDATA #REQUIRED
+              role           (php|ext|src|test|doc|data|script) 'php'
               baseinstalldir CDATA #IMPLIED>
 
 <!ELEMENT file (replace*)>
 <!ATTLIST file role           (php|ext|src|test|doc|data|script) 'php'
                debug          (na|on|off)        'na'
-               zts            (na|on|off)        'na'
-               phpapi         NUMBER             #IMPLIED
-               zendapi        NUMBER             #IMPLIED
                format         CDATA              #IMPLIED
                baseinstalldir CDATA              #IMPLIED
                platform       CDATA              #IMPLIED
@@ -75,36 +96,8 @@
                install-as     CDATA              #IMPLIED>
 
 <!ELEMENT replace EMPTY>
-<!ATTLIST replace from        CDATA              #REQUIRED
-                  to          CDATA              #REQUIRED
-                  type        CDATA              #REQUIRED>
+<!ATTLIST replace type (php-const|pear-config|package-info) #REQUIRED
+                              from CDATA #REQUIRED
+                              to CDATA #REQUIRED>
 
-<!ELEMENT deps (dep)+>
 
-<!ELEMENT dep (#PCDATA)>
-<!ATTLIST dep
-	optional    (yes|no)    'no'
-	type        (pkg|ext|php|prog|ldlib|rtlib|os|websrv|sapi|zend) #REQUIRED
-	rel         (has|eq|lt|le|gt|ge) 'has'
-	version     CDATA                #IMPLIED>
-
-<!ELEMENT provides (#PCDATA)>
-<!ATTLIST provides
-	type    (ext|prog|class|function|feature|api)  #REQUIRED
-	name    CDATA                                  #REQUIRED
-	extends CDATA                                  #IMPLIED>
-
-<!ELEMENT script (#PCDATA)>
-<!ATTLIST script
-        phase   (pre-install  |post-install  |
-                 pre-uninstall|post-uninstall|
-                 pre-build    |post-build    |
-                 pre-setup    |post-setup    )         #REQUIRED>
-
-<!ELEMENT configureoptions (configureoption*)>
-
-<!ELEMENT configureoption EMPTY>
-<!ATTLIST configureoption
-        name     CDATA      #REQUIRED
-        default  CDATA      #IMPLIED
-        prompt   CDATA      #REQUIRED>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/package.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/package.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/package.xml	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/package.xml	1969-12-31 18:00:00.000000000 -0600
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
-<package version="1.0">
-  <name>Mail</name>
-  <summary>Class that provides multiple interfaces for sending emails</summary>
-  <description>PEAR's Mail:: package defines the interface for implementing mailers under the PEAR hierarchy, and provides supporting functions useful in multiple mailer backends. Currently supported are native PHP mail() function, sendmail and SMTP. This package also provides a RFC 822 Email address list validation utility class.</description>
-  <maintainers>
-    <maintainer>
-      <user>chagenbu</user>
-      <name>Chuck Hagenbuch</name>
-      <email>chuck@horde.org</email>
-      <role>lead</role>
-    </maintainer>
-    <maintainer>
-      <user>richard</user>
-      <name>Richard Heyes</name>
-      <email>richard@phpguru.org</email>
-      <role>developer</role>
-    </maintainer>
-    <maintainer>
-      <user>jon</user>
-      <name>Jon Parise</name>
-      <email>jon@php.net</email>
-      <role>lead</role>
-    </maintainer>
-  </maintainers>
-  <release>
-    <version>1.1.4</version>
-    <date>2004-09-08</date>
-    <license>PHP/BSD</license>
-    <state>stable</state>
-    <notes>- Header key comparisons are now case-insensitive. (Colin Viebrock)
-- Header fields (e.g., 'Cc', 'Bcc') may now be specified as arrays of addresses. (Colin Viebrock)
-- PHP5 compatibility fix (Bug #1563).
-- PHP4 / Win32 compatibility fix for the 'sendmail' driver (Bug 1881).
-- Stricter &quot;local part&quot; parsing for Mail_RFC822 (in accordance with Section 6.2.4 of RFC 822) (Bug 1869).
-- The various send() implementations now properly escalate the PEAR_Error object returned by Mail::prepareHeaders() in the event of an invalid header.</notes>
-    <deps>
-      <dep type="pkg" rel="ge" version="1.1.0" optional="yes">Net_SMTP</dep>
-    </deps>
-    <filelist>
-      <file role="php" name="Mail.php"/>
-      <file role="php" name="Mail/mail.php"/>
-      <file role="php" name="Mail/null.php"/>
-      <file role="php" name="Mail/sendmail.php"/>
-      <file role="php" name="Mail/smtp.php"/>
-      <file role="php" name="Mail/RFC822.php"/>
-      <file role="test" name="tests/rfc822.phpt"/>
-    </filelist>
-  </release>
-  <changelog>
-    <release>
-      <version>1.1.3</version>
-      <date>2004-04-08</date>
-      <state>stable</state>
-      <notes>- The 'mail' driver now returns a PEAR_Error object on failure.
-- The individual drivers no longer include the 'Mail.php' file.  If you want to instantiate a driver directly, you'll need to explicitly include the 'Mail.php' file yourself.
-      
-</notes>
-    </release>
-    <release>
-      <version>1.1.2</version>
-      <date>2003-09-04</date>
-      <state>stable</state>
-      <notes>The 'localhost' value can now be set in the SMTP driver.
-</notes>
-    </release>
-    <release>
-      <version>1.1.1</version>
-      <date>2003-06-26</date>
-      <state>stable</state>
-      <notes>Minor fixes with newlines in headers.
-</notes>
-    </release>
-    <release>
-      <version>1.1.0</version>
-      <date>2003-06-21</date>
-      <state>stable</state>
-      <notes>The Mail package now depends on Net_SMTP 1.1.0 or greater for its SMTP authentication capabilities.
-</notes>
-    </release>
-    <release>
-      <version>1.0.2</version>
-      <date>2002-07-27</date>
-      <state>stable</state>
-      <notes>Minor additions and changes to RFC822.php. Fixed line terminator issue for smtp.php and set smtp.php to use Return-Path header in place of From header for MAIL FROM: (if supplied)
-</notes>
-    </release>
-    <release>
-      <version>1.0.1</version>
-      <date>2002-07-27</date>
-      <state>stable</state>
-      <notes>License change for RFC822.php
-</notes>
-    </release>
-    <release>
-      <version>1.0</version>
-      <date>2002-06-06</date>
-      <state>stable</state>
-      <notes>Initial release as PEAR package
-</notes>
-    </release>
-  </changelog>
-</package>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Autoloader.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Autoloader.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Autoloader.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Autoloader.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,29 +1,36 @@
 <?php
+/**
+ * Class auto-loader
+ *
+ * PHP versions 4
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Autoloader.php,v 1.13 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
+ * @since      File available since Release 0.1
+ * @deprecated File deprecated in Release 1.4.0a1
+ */
+
 // /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Autoloader.php,v 1.11 2004/02/27 02:21:29 cellog Exp $
 
 if (!extension_loaded("overload")) {
     // die hard without ext/overload
     die("Rebuild PHP with the `overload' extension to use PEAR_Autoloader");
 }
 
+/**
+ * Include for PEAR_Error and PEAR classes
+ */
 require_once "PEAR.php";
 
 /**
@@ -38,7 +45,15 @@
  * methods, an instance of each class providing separated methods is
  * stored and called every time the aggregated method is called.
  *
- * @author Stig Sther Bakken <ssb@php.net>
+ * @category   pear
+ * @package    PEAR
+ * @author Stig Bakken <ssb@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
+ * @since      File available since Release 0.1
+ * @deprecated File deprecated in Release 1.4.0a1
  */
 class PEAR_Autoloader extends PEAR
 {
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Builder.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Builder.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Builder.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Builder.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,29 +1,44 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Sther Bakken <ssb@php.net>                            |
-// +----------------------------------------------------------------------+
-//
-// $Id: Builder.php,v 1.16.2.1 2004/10/19 04:27:53 cellog Exp $
+/**
+ * PEAR_Builder for building PHP extensions (PECL packages)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Builder.php,v 1.27 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**
+ * Needed for extending PEAR_Builder
+ */
 require_once 'PEAR/Common.php';
-
+require_once 'PEAR/PackageFile.php';
 /**
  * Class to handle building (compiling) extensions.
  *
- * @author Stig Sther Bakken <ssb@php.net>
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since PHP 4.0.2
+ * @see        http://pear.php.net/manual/en/core.ppm.pear-builder.php
  */
 class PEAR_Builder extends PEAR_Common
 {
@@ -66,10 +81,16 @@
      */
     function _build_win32($descfile, $callback = null)
     {
-        if (PEAR::isError($info = $this->infoFromDescriptionFile($descfile))) {
-            return $info;
+        if (is_object($descfile)) {
+            $pkg = $descfile;
+        } else {
+            $pf = &new PEAR_PackageFile($this->config, $this->debug);
+            $pkg = &$pf->fromPackageFile($descfile, PEAR_VALIDATE_NORMAL);
+            if (PEAR::isError($pkg)) {
+                return $pkg;
+            }
         }
-        $dir = dirname($descfile);
+        $dir = dirname($pkg->getArchiveFile());
         $old_cwd = getcwd();
 
         if (!@chdir($dir)) {
@@ -77,7 +98,7 @@
         }
         $this->log(2, "building in $dir");
 
-        $dsp = $info['package'].'.dsp';
+        $dsp = $pkg->getPackage().'.dsp';
         if (!@is_file("$dir/$dsp")) {
             return $this->raiseError("The DSP $dsp does not exist.");
         }
@@ -93,7 +114,7 @@
         // figure out the build platform and type
         $platform = 'Win32';
         $buildtype = 'Release';
-        if (preg_match('/.*?'.$info['package'].'\s-\s(\w+)\s(.*?)-+/i',$this->_firstline,$matches)) {
+        if (preg_match('/.*?'.$pkg->getPackage().'\s-\s(\w+)\s(.*?)-+/i',$this->_firstline,$matches)) {
             $platform = $matches[1];
             $buildtype = $matches[2];
         }
@@ -115,7 +136,7 @@
         // this regex depends on the build platform and type having been
         // correctly identified above.
         $regex ='/.*?!IF\s+"\$\(CFG\)"\s+==\s+("'.
-                    $info['package'].'\s-\s'.
+                    $pkg->getPackage().'\s-\s'.
                     $platform.'\s'.
                     $buildtype.'").*?'.
                     '\/out:"(.*?)"/is';
@@ -150,6 +171,49 @@
     }
     // }}}
 
+    // {{{ _harventInstDir
+    /**
+     * @param string
+     * @param string
+     * @param array
+     * @access private
+     */
+    function _harvestInstDir($dest_prefix, $dirname, &$built_files)
+    {
+        $d = opendir($dirname);
+        if (!$d)
+            return false;
+
+        $ret = true;
+        while (($ent = readdir($d)) !== false) {
+            if ($ent{0} == '.')
+                continue;
+
+            $full = $dirname . DIRECTORY_SEPARATOR . $ent;
+            if (is_dir($full)) {
+                if (!$this->_harvestInstDir(
+                        $dest_prefix . DIRECTORY_SEPARATOR . $ent,
+                        $full, $built_files)) {
+                    $ret = false;
+                    break;
+                }
+            } else {
+                $dest = $dest_prefix . DIRECTORY_SEPARATOR . $ent;
+                $built_files[] = array(
+                        'file' => $full,
+                        'dest' => $dest,
+                        'php_api' => $this->php_api_version,
+                        'zend_mod_api' => $this->zend_module_api_no,
+                        'zend_ext_api' => $this->zend_extension_api_no,
+                        );
+            }
+        }
+        closedir($d);
+        return $ret;
+    }
+
+    // }}}
+
     // {{{ build()
 
     /**
@@ -157,7 +221,8 @@
      * directory, but compiles in a temporary directory
      * (/var/tmp/pear-build-USER/PACKAGE-VERSION).
      *
-     * @param string $descfile path to XML package description file
+     * @param string|PEAR_PackageFile_v* $descfile path to XML package description file, or
+     *               a PEAR_PackageFile object
      *
      * @param mixed $callback callback function used to report output,
      * see PEAR_Builder::_runCommand for details
@@ -173,7 +238,6 @@
      * @access public
      *
      * @see PEAR_Builder::_runCommand
-     * @see PEAR_Common::infoFromDescriptionFile
      */
     function build($descfile, $callback = null)
     {
@@ -183,15 +247,22 @@
         if (PEAR_OS != 'Unix') {
             return $this->raiseError("building extensions not supported on this platform");
         }
-        if (PEAR::isError($info = $this->infoFromDescriptionFile($descfile))) {
-            return $info;
+        if (is_object($descfile)) {
+            $pkg = $descfile;
+            $descfile = $pkg->getPackageFile();
+        } else {
+            $pf = &new PEAR_PackageFile($this->config);
+            $pkg = &$pf->fromPackageFile($descfile, PEAR_VALIDATE_NORMAL);
+            if (PEAR::isError($pkg)) {
+                return $pkg;
+            }
         }
         $dir = dirname($descfile);
         $old_cwd = getcwd();
         if (!@chdir($dir)) {
             return $this->raiseError("could not chdir to $dir");
         }
-        $vdir = "$info[package]-$info[version]";
+        $vdir = $pkg->getPackage() . '-' . $pkg->getVersion();
         if (is_dir($vdir)) {
             chdir($vdir);
         }
@@ -209,8 +280,9 @@
 
         // {{{ start of interactive part
         $configure_command = "$dir/configure";
-        if (isset($info['configure_options'])) {
-            foreach ($info['configure_options'] as $o) {
+        $configure_options = $pkg->getConfigureOptions();
+        if ($configure_options) {
+            foreach ($configure_options as $o) {
                 list($r) = $this->ui->userDialog('build',
                                                  array($o['prompt']),
                                                  array('text'),
@@ -230,15 +302,21 @@
             $user='defaultuser';
         }
         $build_basedir = "/var/tmp/pear-build-$user";
-        $build_dir = "$build_basedir/$info[package]-$info[version]";
+        $build_dir = "$build_basedir/$vdir";
+        $inst_dir = "$build_basedir/install-$vdir";
         $this->log(1, "building in $build_dir");
         if (is_dir($build_dir)) {
-            System::rm("-rf $build_dir");
+            System::rm(array('-rf', $build_dir));
         }
-        if (!System::mkDir("-p $build_dir")) {
+        if (!System::mkDir(array('-p', $build_dir))) {
             return $this->raiseError("could not create build dir: $build_dir");
         }
         $this->addTempFile($build_dir);
+        if (!System::mkDir(array('-p', $inst_dir))) {
+            return $this->raiseError("could not create temporary install dir: $inst_dir");
+        }
+        $this->addTempFile($inst_dir);
+
         if (getenv('MAKE')) {
             $make_command = getenv('MAKE');
         } else {
@@ -247,10 +325,13 @@
         $to_run = array(
             $configure_command,
             $make_command,
+            "$make_command INSTALL_ROOT=\"$inst_dir\" install",
+            "find \"$inst_dir\" -ls"
             );
         if (!@chdir($build_dir)) {
             return $this->raiseError("could not chdir to $build_dir");
         }
+        putenv('PHP_PEAR_VERSION=1.4.6');
         foreach ($to_run as $cmd) {
             $err = $this->_runCommand($cmd, $callback);
             if (PEAR::isError($err)) {
@@ -267,26 +348,8 @@
             return $this->raiseError("no `modules' directory found");
         }
         $built_files = array();
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -3) == '.la') {
-                continue;
-            }
-            // harvest!
-            if (@copy("modules/$ent", "$dir/$ent")) {
-                $built_files[] = array(
-                    'file' => "$dir/$ent",
-                    'php_api' => $this->php_api_version,
-                    'zend_mod_api' => $this->zend_module_api_no,
-                    'zend_ext_api' => $this->zend_extension_api_no,
-                    );
-
-                $this->log(1, "$ent copied to $dir/$ent");
-            } else {
-                chdir($old_cwd);
-                return $this->raiseError("failed copying $ent to $dir");
-            }
-        }
-        closedir($dp);
+        $prefix = exec("php-config --prefix");
+        $this->_harvestInstDir($prefix, $inst_dir . DIRECTORY_SEPARATOR . $prefix, $built_files);
         chdir($old_cwd);
         return $built_files;
     }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/ChannelFile/Parser.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/ChannelFile/Parser.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/ChannelFile/Parser.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/ChannelFile/Parser.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,73 @@
+<?php
+/**
+ * PEAR_ChannelFile_Parser for parsing channel.xml
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Parser.php,v 1.4 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * base xml parser class
+ */
+require_once 'PEAR/XMLParser.php';
+require_once 'PEAR/ChannelFile.php';
+/**
+ * Parser for channel.xml
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_ChannelFile_Parser extends PEAR_XMLParser
+{
+    var $_config;
+    var $_logger;
+    var $_registry;
+
+    function setConfig(&$c)
+    {
+        $this->_config = &$c;
+        $this->_registry = &$c->getRegistry();
+    }
+
+    function setLogger(&$l)
+    {
+        $this->_logger = &$l;
+    }
+
+    function parse($data, $file)
+    {
+        if (PEAR::isError($err = parent::parse($data, $file))) {
+            return $err;
+        }
+        $ret = new PEAR_ChannelFile;
+        $ret->setConfig($this->_config);
+        if (isset($this->_logger)) {
+            $ret->setLogger($this->_logger);
+        }
+        $ret->fromArray($this->_unserializedData);
+        // make sure the filelist is in the easy to read format needed
+        $ret->flattenFilelist();
+        $ret->setPackagefile($file, $archive);
+        return $ret;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/ChannelFile.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/ChannelFile.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/ChannelFile.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/ChannelFile.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1601 @@
+<?php
+/**
+ * PEAR_ChannelFile, the channel handling class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: ChannelFile.php,v 1.74 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Needed for error handling
+ */
+require_once 'PEAR/ErrorStack.php';
+require_once 'PEAR/XMLParser.php';
+require_once 'PEAR/Common.php';
+
+/**
+ * Error code if the channel.xml <channel> tag does not contain a valid version
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_VERSION', 1);
+/**
+ * Error code if the channel.xml <channel> tag version is not supported (version 1.0 is the only supported version,
+ * currently
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_VERSION', 2);
+
+/**
+ * Error code if parsing is attempted with no xml extension
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_XML_EXT', 3);
+
+/**
+ * Error code if creating the xml parser resource fails
+ */
+define('PEAR_CHANNELFILE_ERROR_CANT_MAKE_PARSER', 4);
+
+/**
+ * Error code used for all sax xml parsing errors
+ */
+define('PEAR_CHANNELFILE_ERROR_PARSER_ERROR', 5);
+
+/**#@+
+ * Validation errors
+ */
+/**
+ * Error code when channel name is missing
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_NAME', 6);
+/**
+ * Error code when channel name is invalid
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_NAME', 7);
+/**
+ * Error code when channel summary is missing
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_SUMMARY', 8);
+/**
+ * Error code when channel summary is multi-line
+ */
+define('PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY', 9);
+/**
+ * Error code when channel server is missing for xmlrpc or soap protocol
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_HOST', 10);
+/**
+ * Error code when channel server is invalid for xmlrpc or soap protocol
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_HOST', 11);
+/**
+ * Error code when a mirror name is invalid
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_MIRROR', 21);
+/**
+ * Error code when a mirror type is invalid
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_MIRRORTYPE', 22);
+/**
+ * Error code when an attempt is made to generate xml, but the parsed content is invalid
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID', 23);
+/**
+ * Error code when an empty package name validate regex is passed in
+ */
+define('PEAR_CHANNELFILE_ERROR_EMPTY_REGEX', 24);
+/**
+ * Error code when a <function> tag has no version
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_FUNCTIONVERSION', 25);
+/**
+ * Error code when a <function> tag has no name
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_FUNCTIONNAME', 26);
+/**
+ * Error code when a <validatepackage> tag has no name
+ */
+define('PEAR_CHANNELFILE_ERROR_NOVALIDATE_NAME', 27);
+/**
+ * Error code when a <validatepackage> tag has no version attribute
+ */
+define('PEAR_CHANNELFILE_ERROR_NOVALIDATE_VERSION', 28);
+/**
+ * Error code when a mirror does not exist but is called for in one of the set*
+ * methods.
+ */
+define('PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND', 32);
+/**
+ * Error code when a server port is not numeric
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_PORT', 33);
+/**
+ * Error code when <static> contains no version attribute
+ */
+define('PEAR_CHANNELFILE_ERROR_NO_STATICVERSION', 34);
+/**
+ * Error code when <baseurl> contains no type attribute in a <rest> protocol definition
+ */
+define('PEAR_CHANNELFILE_ERROR_NOBASEURLTYPE', 35);
+/** 
+ * Error code when a mirror is defined and the channel.xml represents the __uri pseudo-channel
+ */
+define('PEAR_CHANNELFILE_URI_CANT_MIRROR', 36);
+/** 
+ * Error code when ssl attribute is present and is not "yes"
+ */
+define('PEAR_CHANNELFILE_ERROR_INVALID_SSL', 37);
+/**#@-*/
+
+/**
+ * Mirror types allowed.  Currently only internet servers are recognized.
+ */
+$GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] =  array('server');
+
+
+/**
+ * The Channel handling class
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_ChannelFile {
+    /**
+     * @access private
+     * @var PEAR_ErrorStack
+     * @access private
+     */
+    var $_stack;
+    
+    /**
+     * Supported channel.xml versions, for parsing
+     * @var array
+     * @access private
+     */
+    var $_supportedVersions = array('1.0');
+
+    /**
+     * Parsed channel information
+     * @var array
+     * @access private
+     */
+    var $_channelInfo;
+
+    /**
+     * index into the subchannels array, used for parsing xml
+     * @var int
+     * @access private
+     */
+    var $_subchannelIndex;
+
+    /**
+     * index into the mirrors array, used for parsing xml
+     * @var int
+     * @access private
+     */
+    var $_mirrorIndex;
+    
+    /**
+     * Flag used to determine the validity of parsed content
+     * @var boolean
+     * @access private
+     */
+    var $_isValid = false;
+
+    function PEAR_ChannelFile()
+    {
+        $this->_stack = &new PEAR_ErrorStack('PEAR_ChannelFile');
+        $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
+        $this->_isValid = false;
+    }
+    
+    /**
+     * @return array
+     * @access protected
+     */
+    function _getErrorMessage()
+    {
+        return
+            array(
+                PEAR_CHANNELFILE_ERROR_INVALID_VERSION =>
+                    'While parsing channel.xml, an invalid version number "%version% was passed in, expecting one of %versions%',
+                PEAR_CHANNELFILE_ERROR_NO_VERSION =>
+                    'No version number found in <channel> tag',
+                PEAR_CHANNELFILE_ERROR_NO_XML_EXT =>
+                    '%error%',
+                PEAR_CHANNELFILE_ERROR_CANT_MAKE_PARSER =>
+                    'Unable to create XML parser',
+                PEAR_CHANNELFILE_ERROR_PARSER_ERROR =>
+                    '%error%',
+                PEAR_CHANNELFILE_ERROR_NO_NAME =>
+                    'Missing channel name',
+                PEAR_CHANNELFILE_ERROR_INVALID_NAME =>
+                    'Invalid channel %tag% "%name%"',
+                PEAR_CHANNELFILE_ERROR_NO_SUMMARY =>
+                    'Missing channel summary',
+                PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY =>
+                    'Channel summary should be on one line, but is multi-line',
+                PEAR_CHANNELFILE_ERROR_NO_HOST =>
+                    'Missing channel server for %type% server',
+                PEAR_CHANNELFILE_ERROR_INVALID_HOST =>
+                    'Server name "%server%" is invalid for %type% server',
+                PEAR_CHANNELFILE_ERROR_INVALID_MIRROR =>
+                    'Invalid mirror name "%name%", mirror type %type%',
+                PEAR_CHANNELFILE_ERROR_INVALID_MIRRORTYPE =>
+                    'Invalid mirror type "%type%"',
+                PEAR_CHANNELFILE_ERROR_INVALID =>
+                    'Cannot generate xml, contents are invalid',
+                PEAR_CHANNELFILE_ERROR_EMPTY_REGEX =>
+                    'packagenameregex cannot be empty',
+                PEAR_CHANNELFILE_ERROR_NO_FUNCTIONVERSION =>
+                    '%parent% %protocol% function has no version',
+                PEAR_CHANNELFILE_ERROR_NO_FUNCTIONNAME =>
+                    '%parent% %protocol% function has no name',
+                PEAR_CHANNELFILE_ERROR_NOBASEURLTYPE =>
+                    '%parent% rest baseurl has no type',
+                PEAR_CHANNELFILE_ERROR_NOVALIDATE_NAME =>
+                    'Validation package has no name in <validatepackage> tag',
+                PEAR_CHANNELFILE_ERROR_NOVALIDATE_VERSION =>
+                    'Validation package "%package%" has no version',
+                PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND =>
+                    'Mirror "%mirror%" does not exist',
+                PEAR_CHANNELFILE_ERROR_INVALID_PORT =>
+                    'Port "%port%" must be numeric',
+                PEAR_CHANNELFILE_ERROR_NO_STATICVERSION =>
+                    '<static> tag must contain version attribute',
+                PEAR_CHANNELFILE_URI_CANT_MIRROR =>
+                    'The __uri pseudo-channel cannot have mirrors',
+                PEAR_CHANNELFILE_ERROR_INVALID_SSL =>
+                    '%server% has invalid ssl attribute "%ssl%" can only be yes or not present',
+            );
+    }
+
+    /**
+     * @param string contents of package.xml file
+     * @return bool success of parsing
+     */
+    function fromXmlString($data)
+    {
+        if (preg_match('/<channel\s+version="([0-9]+\.[0-9]+)"/', $data, $channelversion)) {
+            if (!in_array($channelversion[1], $this->_supportedVersions)) {
+                $this->_stack->push(PEAR_CHANNELFILE_ERROR_INVALID_VERSION, 'error',
+                    array('version' => $channelversion[1]));
+                return false;
+            }
+            $parser = new PEAR_XMLParser;
+            $result = $parser->parse($data);
+            if ($result !== true) {
+                if ($result->getCode() == 1) {
+                    $this->_stack->push(PEAR_CHANNELFILE_ERROR_NO_XML_EXT, 'error',
+                        array('error' => $error));
+                } else {
+                    $this->_stack->push(PEAR_CHANNELFILE_ERROR_CANT_MAKE_PARSER, 'error');
+                }
+                return false;
+            }
+            $this->_channelInfo = $parser->getData();
+            return true;
+        } else {
+            $this->_stack->push(PEAR_CHANNELFILE_ERROR_NO_VERSION, 'error', array('xml' => $data));
+            return false;
+        }
+    }
+    
+    /**
+     * @return array
+     */
+    function toArray()
+    {
+        if (!$this->_isValid && !$this->validate()) {
+            return false;
+        }
+        return $this->_channelInfo;
+    }
+    
+    /**
+     * @param array
+     * @static
+     * @return PEAR_ChannelFile|false false if invalid
+     */
+    function &fromArray($data, $compatibility = false, $stackClass = 'PEAR_ErrorStack')
+    {
+        $a = new PEAR_ChannelFile($compatibility, $stackClass);
+        $a->_fromArray($data);
+        if (!$a->validate()) {
+            $a = false;
+            return $a;
+        }
+        return $a;
+    }
+    
+    /**
+     * @param array
+     * @access private
+     */
+    function _fromArray($data)
+    {
+        $this->_channelInfo = $data;
+    }
+    
+    /**
+     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
+     * @param boolean determines whether to purge the error stack after retrieving
+     * @return array
+     */
+    function getErrors($purge = false)
+    {
+        return $this->_stack->getErrors($purge);
+    }
+
+    /**
+     * Unindent given string (?)
+     *
+     * @param string $str The string that has to be unindented.
+     * @return string
+     * @access private
+     */
+    function _unIndent($str)
+    {
+        // remove leading newlines
+        $str = preg_replace('/^[\r\n]+/', '', $str);
+        // find whitespace at the beginning of the first line
+        $indent_len = strspn($str, " \t");
+        $indent = substr($str, 0, $indent_len);
+        $data = '';
+        // remove the same amount of whitespace from following lines
+        foreach (explode("\n", $str) as $line) {
+            if (substr($line, 0, $indent_len) == $indent) {
+                $data .= substr($line, $indent_len) . "\n";
+            }
+        }
+        return $data;
+    }
+
+    /**
+     * Parse a channel.xml file.  Expects the name of
+     * a channel xml file as input.
+     *
+     * @param string  $descfile  name of channel xml file
+     * @return bool success of parsing
+     */
+    function fromXmlFile($descfile)
+    {
+        if (!@is_file($descfile) || !is_readable($descfile) ||
+             (!$fp = @fopen($descfile, 'r'))) {
+            require_once 'PEAR.php';
+            return PEAR::raiseError("Unable to open $descfile");
+        }
+
+        // read the whole thing so we only get one cdata callback
+        // for each block of cdata
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $data = file_get_contents($descfile);
+        } else {
+            $data = fread($fp, filesize($descfile));
+            fclose($fp);
+        }
+        return $this->fromXmlString($data);
+    }
+
+    /**
+     * Parse channel information from different sources
+     *
+     * This method is able to extract information about a channel
+     * from an .xml file or a string
+     *
+     * @access public
+     * @param  string Filename of the source or the source itself
+     * @return bool
+     */
+    function fromAny($info)
+    {
+        if (is_string($info) && file_exists($info) && strlen($info) < 255) {
+            $tmp = substr($info, -4);
+            if ($tmp == '.xml') {
+                $info = $this->fromXmlFile($info);
+            } else {
+                $fp = fopen($info, "r");
+                $test = fread($fp, 5);
+                fclose($fp);
+                if ($test == "<?xml") {
+                    $info = $this->fromXmlFile($info);
+                }
+            }
+            if (PEAR::isError($info)) {
+                require_once 'PEAR.php';
+                return PEAR::raiseError($info);
+            }
+        }
+        if (is_string($info)) {
+            $info = $this->fromXmlString($info);
+        }
+        return $info;
+    }
+
+    /**
+     * Return an XML document based on previous parsing and modifications
+     *
+     * @return string XML data
+     *
+     * @access public
+     */
+    function toXml()
+    {
+        if (!$this->_isValid && !$this->validate()) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID);
+            return false;
+        }
+        if (!isset($this->_channelInfo['attribs']['version'])) {
+            $this->_channelInfo['attribs']['version'] = '1.0';
+        }
+        $channelInfo = $this->_channelInfo;
+        $ret = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
+        $ret .= "<channel version=\"" .
+            $channelInfo['attribs']['version'] . "\" xmlns=\"http://pear.php.net/channel-1.0\"
+  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
+  xsi:schemaLocation=\"http://pear.php.net/dtd/channel-"
+            . $channelInfo['attribs']['version'] . " http://pear.php.net/dtd/channel-" .
+            $channelInfo['attribs']['version'] . ".xsd\">
+ <name>$channelInfo[name]</name>
+ <summary>" . htmlspecialchars($channelInfo['summary'])."</summary>
+";
+        if (isset($channelInfo['suggestedalias'])) {
+            $ret .= ' <suggestedalias>' . $channelInfo['suggestedalias'] . "</suggestedalias>\n";
+        }
+        if (isset($channelInfo['validatepackage'])) {
+            $ret .= ' <validatepackage version="' .
+                $channelInfo['validatepackage']['attribs']['version']. '">' .
+                htmlspecialchars($channelInfo['validatepackage']['_content']) .
+                "</validatepackage>\n";
+        }
+        $ret .= " <servers>\n";
+        $ret .= '  <primary';
+        if (isset($channelInfo['servers']['primary']['attribs']['ssl'])) {
+            $ret .= ' ssl="' . $channelInfo['servers']['primary']['attribs']['ssl'] . '"';
+        }
+        if (isset($channelInfo['servers']['primary']['attribs']['port'])) {
+            $ret .= ' port="' . $channelInfo['servers']['primary']['attribs']['port'] . '"';
+        }
+        $ret .= ">\n";
+        if (isset($channelInfo['servers']['primary']['xmlrpc'])) {
+            $ret .= $this->_makeXmlrpcXml($channelInfo['servers']['primary']['xmlrpc'], '   ');
+        }
+        if (isset($channelInfo['servers']['primary']['rest'])) {
+            $ret .= $this->_makeRestXml($channelInfo['servers']['primary']['rest'], '   ');
+        }
+        if (isset($channelInfo['servers']['primary']['soap'])) {
+            $ret .= $this->_makeSoapXml($channelInfo['servers']['primary']['soap'], '   ');
+        }
+        $ret .= "  </primary>\n";
+        if (isset($channelInfo['servers']['mirror'])) {
+            $ret .= $this->_makeMirrorsXml($channelInfo);
+        }
+        $ret .= " </servers>\n";
+        $ret .= "</channel>";
+        return str_replace("\r", "\n", str_replace("\r\n", "\n", $ret));
+    }
+
+    /**
+     * Generate the <xmlrpc> tag
+     * @access private
+     */
+    function _makeXmlrpcXml($info, $indent)
+    {
+        $ret = $indent . "<xmlrpc";
+        if (isset($info['attribs']['path'])) {
+            $ret .= ' path="' . htmlspecialchars($info['attribs']['path']) . '"';
+        }
+        $ret .= ">\n";
+        $ret .= $this->_makeFunctionsXml($info['function'], "$indent ");
+        $ret .= $indent . "</xmlrpc>\n";
+        return $ret;
+    }
+
+    /**
+     * Generate the <soap> tag
+     * @access private
+     */
+    function _makeSoapXml($info, $indent)
+    {
+        $ret = $indent . "<soap";
+        if (isset($info['attribs']['path'])) {
+            $ret .= ' path="' . htmlspecialchars($info['attribs']['path']) . '"';
+        }
+        $ret .= ">\n";
+        $ret .= $this->_makeFunctionsXml($info['function'], "$indent ");
+        $ret .= $indent . "</soap>\n";
+        return $ret;
+    }
+
+    /**
+     * Generate the <rest> tag
+     * @access private
+     */
+    function _makeRestXml($info, $indent)
+    {
+        $ret = $indent . "<rest>\n";
+        if (!isset($info['baseurl'][0])) {
+            $info['baseurl'] = array($info['baseurl']);
+        }
+        foreach ($info['baseurl'] as $url) {
+            $ret .= "$indent <baseurl type=\"" . $url['attribs']['type'] . "\"";
+            $ret .= ">" . $url['_content'] . "</baseurl>\n";
+        }
+        $ret .= $indent . "</rest>\n";
+        return $ret;
+    }
+
+    /**
+     * Generate the <mirrors> tag
+     * @access private
+     */
+    function _makeMirrorsXml($channelInfo)
+    {
+        $ret = "";
+        if (!isset($channelInfo['servers']['mirror'][0])) {
+            $channelInfo['servers']['mirror'] = array($channelInfo['servers']['mirror']);
+        }
+        foreach ($channelInfo['servers']['mirror'] as $mirror) {
+            $ret .= '  <mirror host="' . $mirror['attribs']['host'] . '"';
+            if (isset($mirror['attribs']['port'])) {
+                $ret .= ' port="' . $mirror['attribs']['port'] . '"';
+            }
+            if (isset($mirror['attribs']['ssl'])) {
+                $ret .= ' ssl="' . $mirror['attribs']['ssl'] . '"';
+            }
+            $ret .= ">\n";
+            if (isset($mirror['xmlrpc']) || isset($mirror['soap'])) {
+                if (isset($mirror['xmlrpc'])) {
+                    $ret .= $this->_makeXmlrpcXml($mirror['xmlrpc'], '   ');
+                }
+                if (isset($mirror['rest'])) {
+                    $ret .= $this->_makeRestXml($mirror['rest'], '   ');
+                }
+                if (isset($mirror['soap'])) {
+                    $ret .= $this->_makeSoapXml($mirror['soap'], '   ');
+                }
+                $ret .= "  </mirror>\n";
+            } else {
+                $ret .= "/>\n";
+            }
+        }
+        return $ret;
+    }
+
+    /**
+     * Generate the <functions> tag
+     * @access private
+     */
+    function _makeFunctionsXml($functions, $indent, $rest = false)
+    {
+        $ret = '';
+        if (!isset($functions[0])) {
+            $functions = array($functions);
+        }
+        foreach ($functions as $function) {
+            $ret .= "$indent<function version=\"" . $function['attribs']['version'] . "\"";
+            if ($rest) {
+                $ret .= ' uri="' . $function['attribs']['uri'] . '"';
+            }
+            $ret .= ">" . $function['_content'] . "</function>\n";
+        }
+        return $ret;
+    }
+
+    /**
+     * Validation error.  Also marks the object contents as invalid
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateError($code, $params = array())
+    {
+        $this->_stack->push($code, 'error', $params);
+        $this->_isValid = false;
+    }
+
+    /**
+     * Validation warning.  Does not mark the object contents invalid.
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateWarning($code, $params = array())
+    {
+        $this->_stack->push($code, 'warning', $params);
+    }
+
+    /**
+     * Validate parsed file.
+     *
+     * @access public
+     * @return boolean
+     */
+    function validate()
+    {
+        $this->_isValid = true;
+        $info = $this->_channelInfo;
+        if (empty($info['name'])) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_NAME);
+        } elseif (!$this->validChannelServer($info['name'])) {
+            if ($info['name'] != '__uri') {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_NAME, array('tag' => 'name',
+                    'name' => $info['name']));
+            }
+        }
+        if (empty($info['summary'])) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_SUMMARY);
+        } elseif (strpos(trim($info['summary']), "\n") !== false) {
+            $this->_validateWarning(PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY,
+                array('summary' => $info['summary']));
+        }
+        if (isset($info['suggestedalias'])) {
+            if (!$this->validChannelServer($info['suggestedalias'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_NAME,
+                    array('tag' => 'suggestedalias', 'name' =>$info['suggestedalias']));
+            }
+        }
+        if (isset($info['localalias'])) {
+            if (!$this->validChannelServer($info['localalias'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_NAME,
+                    array('tag' => 'localalias', 'name' =>$info['localalias']));
+            }
+        }
+        if (isset($info['validatepackage'])) {
+            if (!isset($info['validatepackage']['_content'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_NOVALIDATE_NAME);
+            }
+            if (!isset($info['validatepackage']['attribs']['version'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_NOVALIDATE_VERSION,
+                    array('package' => @$info['validatepackage']['_content']));
+            }
+        }
+        if (isset($info['servers']['primary']['attribs']['port']) &&
+              !is_numeric($info['servers']['primary']['attribs']['port'])) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_PORT,
+                array('port' => $info['servers']['primary']['attribs']['port']));
+        }
+        if (isset($info['servers']['primary']['attribs']['ssl']) &&
+              $info['servers']['primary']['attribs']['ssl'] != 'yes') {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_SSL,
+                array('ssl' => $info['servers']['primary']['attribs']['ssl'],
+                    'server' => $info['name']));
+        }
+
+        if (isset($info['servers']['primary']['xmlrpc']) &&
+              isset($info['servers']['primary']['xmlrpc']['function'])) {
+            $this->_validateFunctions('xmlrpc', $info['servers']['primary']['xmlrpc']['function']);
+        }
+        if (isset($info['servers']['primary']['soap']) &&
+              isset($info['servers']['primary']['soap']['function'])) {
+            $this->_validateFunctions('soap', $info['servers']['primary']['soap']['function']);
+        }
+        if (isset($info['servers']['primary']['rest']) &&
+              isset($info['servers']['primary']['rest']['baseurl'])) {
+            $this->_validateFunctions('rest', $info['servers']['primary']['rest']['baseurl']);
+        }
+        if (isset($info['servers']['mirror'])) {
+            if ($this->_channelInfo['name'] == '__uri') {
+                $this->_validateError(PEAR_CHANNELFILE_URI_CANT_MIRROR);
+            }
+            if (!isset($info['servers']['mirror'][0])) {
+                $info['servers']['mirror'] = array($info['servers']['mirror']);
+            }
+            $i = 0;
+            foreach ($info['servers']['mirror'] as $mirror) {
+                if (!isset($mirror['attribs']['host'])) {
+                    $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_HOST,
+                      array('type' => 'mirror'));
+                } elseif (!$this->validChannelServer($mirror['attribs']['host'])) {
+                    $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_HOST,
+                        array('server' => $mirror['attribs']['host'], 'type' => 'mirror'));
+                }
+                if (isset($mirror['attribs']['ssl']) && $mirror['attribs']['ssl'] != 'yes') {
+                    $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_SSL,
+                        array('ssl' => $info['ssl'], 'server' => $mirror['attribs']['host']));
+                }
+                if (isset($mirror['xmlrpc'])) {
+                    $this->_validateFunctions('xmlrpc',
+                        $mirror['xmlrpc']['function'], $mirror['attribs']['host']);
+                }
+                if (isset($mirror['soap'])) {
+                    $this->_validateFunctions('soap', $mirror['soap']['function'],
+                        $mirror['attribs']['host']);
+                }
+                if (isset($mirror['rest'])) {
+                    $this->_validateFunctions('rest', $mirror['rest']['baseurl'],
+                        $mirror['attribs']['host']);
+                }
+            }
+        }
+        return $this->_isValid;
+    }
+
+    /**
+     * @param string xmlrpc or soap - protocol name this function applies to
+     * @param array the functions
+     * @param string the name of the parent element (mirror name, for instance)
+     */
+    function _validateFunctions($protocol, $functions, $parent = '')
+    {
+        if (!isset($functions[0])) {
+            $functions = array($functions);
+        }
+        foreach ($functions as $function) {
+            if (!isset($function['_content']) || empty($function['_content'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_FUNCTIONNAME,
+                    array('parent' => $parent, 'protocol' => $protocol));
+            }
+            if ($protocol == 'rest') {
+                if (!isset($function['attribs']['type']) ||
+                      empty($function['attribs']['type'])) {
+                    $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_BASEURLTYPE,
+                        array('parent' => $parent, 'protocol' => $protocol));
+                }
+            } else {
+                if (!isset($function['attribs']['version']) ||
+                      empty($function['attribs']['version'])) {
+                    $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_FUNCTIONVERSION,
+                        array('parent' => $parent, 'protocol' => $protocol));
+                }
+            }
+        }
+    }
+
+    /**
+     * Test whether a string contains a valid channel server.
+     * @param string $ver the package version to test
+     * @return bool
+     */
+    function validChannelServer($server)
+    {
+        if ($server == '__uri') {
+            return true;
+        }
+        return (bool) preg_match(PEAR_CHANNELS_SERVER_PREG, $server);
+    }
+
+    /**
+     * @return string|false
+     */
+    function getName()
+    {
+        if (isset($this->_channelInfo['name'])) {
+            return $this->_channelInfo['name'];
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @return string|false
+     */
+    function getServer()
+    {
+        if (isset($this->_channelInfo['name'])) {
+            return $this->_channelInfo['name'];
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @return int|80 port number to connect to
+     */
+    function getPort($mirror = false)
+    {
+        if ($mirror) {
+            if ($mir = $this->getMirror($mirror)) {
+                if (isset($mir['attribs']['port'])) {
+                    return $mir['attribs']['port'];
+                } else {
+                    if ($this->getSSL($mirror)) {
+                        return 443;
+                    }
+                    return 80;
+                }
+            }
+            return false;
+        }
+        if (isset($this->_channelInfo['servers']['primary']['attribs']['port'])) {
+            return $this->_channelInfo['servers']['primary']['attribs']['port'];
+        }
+        if ($this->getSSL()) {
+            return 443;
+        }
+        return 80;
+    }
+
+    /**
+     * @return bool Determines whether secure sockets layer (SSL) is used to connect to this channel
+     */
+    function getSSL($mirror = false)
+    {
+        if ($mirror) {
+            if ($mir = $this->getMirror($mirror)) {
+                if (isset($mir['attribs']['ssl'])) {
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+            return false;
+        }
+        if (isset($this->_channelInfo['servers']['primary']['attribs']['ssl'])) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @return string|false
+     */
+    function getSummary()
+    {
+        if (isset($this->_channelInfo['summary'])) {
+            return $this->_channelInfo['summary'];
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param string xmlrpc or soap
+     * @param string|false mirror name or false for primary server
+     */
+    function getPath($protocol, $mirror = false)
+    {   
+        if (!in_array($protocol, array('xmlrpc', 'soap'))) {
+            return false;
+        }
+        if ($mirror) {
+            if (!($mir = $this->getMirror($mirror))) {
+                return false;
+            }
+            if (isset($mir[$protocol]['attribs']['path'])) {
+                return $mir[$protocol]['attribs']['path'];
+            } else {
+                return $protocol . '.php';
+            }
+        } elseif (isset($this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'])) {
+            return $this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'];
+        }
+        return $protocol . '.php';
+    }
+
+    /**
+     * @param string protocol type (xmlrpc, soap)
+     * @param string Mirror name
+     * @return array|false
+     */
+    function getFunctions($protocol, $mirror = false)
+    {
+        if ($this->getName() == '__uri') {
+            return false;
+        }
+        if ($protocol == 'rest') {
+            $function = 'baseurl';
+        } else {
+            $function = 'function';
+        }
+        if ($mirror) {
+            if ($mir = $this->getMirror($mirror)) {
+                if (isset($mir[$protocol][$function])) {
+                    return $mir[$protocol][$function];
+                }
+            }
+            return false;
+        }
+        if (isset($this->_channelInfo['servers']['primary'][$protocol][$function])) {
+            return $this->_channelInfo['servers']['primary'][$protocol][$function];
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param string Protocol type
+     * @param string Function name (null to return the
+     *               first protocol of the type requested)
+     * @param string Mirror name, if any
+     * @return array
+     */
+     function getFunction($type, $name = null, $mirror = false)
+     {
+        $protocols = $this->getFunctions($type, $mirror);
+        if (!$protocols) {
+            return false;
+        }
+        foreach ($protocols as $protocol) {
+            if ($name === null) {
+                return $protocol;
+            }
+            if ($protocol['_content'] != $name) {
+                continue;
+            }
+            return $protocol;
+        }
+        return false;
+     }
+
+    /**
+     * @param string protocol type
+     * @param string protocol name
+     * @param string version
+     * @param string mirror name
+     * @return boolean
+     */
+    function supports($type, $name = null, $mirror = false, $version = '1.0')
+    {
+        $protocols = $this->getFunctions($type, $mirror);
+        if (!$protocols) {
+            return false;
+        }
+        foreach ($protocols as $protocol) {
+            if ($protocol['attribs']['version'] != $version) {
+                continue;
+            }
+            if ($name === null) {
+                return true;
+            }
+            if ($protocol['_content'] != $name) {
+                continue;
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Determines whether a channel supports Representational State Transfer (REST) protocols
+     * for retrieving channel information
+     * @param string
+     * @return bool
+     */
+    function supportsREST($mirror = false)
+    {
+        if ($mirror == $this->_channelInfo['name']) {
+            $mirror = false;
+        }
+        if ($mirror) {
+            if ($mir = $this->getMirror($mirror)) {
+                return isset($mir['rest']);
+            }
+            return false;
+        }
+        return isset($this->_channelInfo['servers']['primary']['rest']);
+    }
+
+    /**
+     * Get the URL to access a base resource.
+     *
+     * Hyperlinks in the returned xml will be used to retrieve the proper information
+     * needed.  This allows extreme extensibility and flexibility in implementation
+     * @param string Resource Type to retrieve
+     */
+    function getBaseURL($resourceType, $mirror = false)
+    {
+        if ($mirror == $this->_channelInfo['name']) {
+            $mirror = false;
+        }
+        if ($mirror) {
+            if ($mir = $this->getMirror($mirror)) {
+                $rest = $mir['rest'];
+            } else {
+                return false;
+            }
+            $server = $mirror;
+        } else {
+            $rest = $this->_channelInfo['servers']['primary']['rest'];
+            $server = $this->getServer();
+        }
+        if (!isset($rest['baseurl'][0])) {
+            $rest['baseurl'] = array($rest['baseurl']);
+        }
+        foreach ($rest['baseurl'] as $baseurl) {
+            if (strtolower($baseurl['attribs']['type']) == strtolower($resourceType)) {
+                return $baseurl['_content'];
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Since REST does not implement RPC, provide this as a logical wrapper around
+     * resetFunctions for REST
+     * @param string|false mirror name, if any
+     */
+    function resetREST($mirror = false)
+    {
+        return $this->resetFunctions('rest', $mirror);
+    }
+
+    /**
+     * Empty all protocol definitions
+     * @param string protocol type (xmlrpc, soap)
+     * @param string|false mirror name, if any
+     */
+    function resetFunctions($type, $mirror = false)
+    {
+        if ($mirror) {
+            if (isset($this->_channelInfo['servers']['mirror'])) {
+                $mirrors = $this->_channelInfo['servers']['mirror'];
+                if (!isset($mirrors[0])) {
+                    $mirrors = array($mirrors);
+                }
+                foreach ($mirrors as $i => $mir) {
+                    if ($mir['attribs']['host'] == $mirror) {
+                        if (isset($this->_channelInfo['servers']['mirror'][$i][$type])) {
+                            unset($this->_channelInfo['servers']['mirror'][$i][$type]);
+                        }
+                        return true;
+                    }
+                }
+                return false;
+            } else {
+                return false;
+            }
+        } else {
+            if (isset($this->_channelInfo['servers']['primary'][$type])) {
+                unset($this->_channelInfo['servers']['primary'][$type]);
+            }
+            return true;
+        }
+    }
+
+    /**
+     * Set a channel's protocols to the protocols supported by pearweb
+     */
+    function setDefaultPEARProtocols($version = '1.0', $mirror = false)
+    {
+        switch ($version) {
+            case '1.0' :
+                $this->resetFunctions('xmlrpc', $mirror);
+                $this->resetFunctions('soap', $mirror);
+                $this->resetREST($mirror);
+                $this->addFunction('xmlrpc', '1.0', 'logintest', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'package.listLatestReleases', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'package.listAll', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'package.info', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'package.getDownloadURL', $mirror);
+                $this->addFunction('xmlrpc', '1.1', 'package.getDownloadURL', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'package.getDepDownloadURL', $mirror);
+                $this->addFunction('xmlrpc', '1.1', 'package.getDepDownloadURL', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'package.search', $mirror);
+                $this->addFunction('xmlrpc', '1.0', 'channel.listAll', $mirror);
+                return true;
+            break;
+            default :
+                return false;
+            break;
+        }
+    }
+    
+    /**
+     * @return array
+     */
+    function getMirrors()
+    {
+        if (isset($this->_channelInfo['servers']['mirror'])) {
+            $mirrors = $this->_channelInfo['servers']['mirror'];
+            if (!isset($mirrors[0])) {
+                $mirrors = array($mirrors);
+            }
+            return $mirrors;
+        } else {
+            return array();
+        }
+    }
+
+    /**
+     * Get the unserialized XML representing a mirror
+     * @return array|false
+     */
+    function getMirror($server)
+    {
+        foreach ($this->getMirrors() as $mirror) {
+            if ($mirror['attribs']['host'] == $server) {
+                return $mirror;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param string
+     * @return string|false
+     * @error PEAR_CHANNELFILE_ERROR_NO_NAME
+     * @error PEAR_CHANNELFILE_ERROR_INVALID_NAME
+     */
+    function setName($name)
+    {
+        return $this->setServer($name);
+    }
+
+    /**
+     * Set the socket number (port) that is used to connect to this channel
+     * @param integer
+     * @param string|false name of the mirror server, or false for the primary
+     */
+    function setPort($port, $mirror = false)
+    {
+        if ($mirror) {
+            if (!isset($this->_channelInfo['servers']['mirror'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                    array('mirror' => $mirror));
+                return false;
+            }
+            $setmirror = false;
+            if (isset($this->_channelInfo['servers']['mirror'][0])) {
+                foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
+                    if ($mirror == $mir['attribs']['host']) {
+                        $this->_channelInfo['servers']['mirror'][$i]['attribs']['port'] = $port;
+                        return true;
+                    }
+                }
+                return false;
+            } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
+                $this->_channelInfo['servers']['mirror']['attribs']['port'] = $port;
+                $this->_isValid = false;
+                return true;
+            }
+        }
+        $this->_channelInfo['servers']['primary']['attribs']['port'] = $port;
+        $this->_isValid = false;
+        return true;
+    }
+
+    /**
+     * Set the socket number (port) that is used to connect to this channel
+     * @param bool Determines whether to turn on SSL support or turn it off
+     * @param string|false name of the mirror server, or false for the primary
+     */
+    function setSSL($ssl = true, $mirror = false)
+    {
+        if ($mirror) {
+            if (!isset($this->_channelInfo['servers']['mirror'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                    array('mirror' => $mirror));
+                return false;
+            }
+            $setmirror = false;
+            if (isset($this->_channelInfo['servers']['mirror'][0])) {
+                foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
+                    if ($mirror == $mir['attribs']['host']) {
+                        if (!$ssl) {
+                            if (isset($this->_channelInfo['servers']['mirror'][$i]
+                                  ['attribs']['ssl'])) {
+                                unset($this->_channelInfo['servers']['mirror'][$i]['attribs']['ssl']);
+                            }
+                        } else {
+                            $this->_channelInfo['servers']['mirror'][$i]['attribs']['ssl'] = 'yes';
+                        }
+                        return true;
+                    }
+                }
+                return false;
+            } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
+                if (!$ssl) {
+                    if (isset($this->_channelInfo['servers']['mirror']['attribs']['ssl'])) {
+                        unset($this->_channelInfo['servers']['mirror']['attribs']['ssl']);
+                    }
+                } else {
+                    $this->_channelInfo['servers']['mirror']['attribs']['ssl'] = 'yes';
+                }
+                $this->_isValid = false;
+                return true;
+            }
+        }
+        if ($ssl) {
+            $this->_channelInfo['servers']['primary']['attribs']['ssl'] = 'yes';
+        } else {
+            if (isset($this->_channelInfo['servers']['primary']['attribs']['ssl'])) {
+                unset($this->_channelInfo['servers']['primary']['attribs']['ssl']);
+            }
+        }
+        $this->_isValid = false;
+        return true;
+    }
+
+    /**
+     * Set the socket number (port) that is used to connect to this channel
+     * @param integer
+     * @param string|false name of the mirror server, or false for the primary
+     */
+    function setPath($protocol, $path, $mirror = false)
+    {
+        if (!in_array($protocol, array('xmlrpc', 'soap'))) {
+            return false;
+        }
+        if ($mirror) {
+            if (!isset($this->_channelInfo['servers']['mirror'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                    array('mirror' => $mirror));
+                return false;
+            }
+            $setmirror = false;
+            if (isset($this->_channelInfo['servers']['mirror'][0])) {
+                foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
+                    if ($mirror == $mir['attribs']['host']) {
+                        $this->_channelInfo['servers']['mirror'][$i][$protocol]['attribs']['path'] =
+                            $path;
+                        return true;
+                    }
+                }
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                    array('mirror' => $mirror));
+                return false;
+            } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
+                $this->_channelInfo['servers']['mirror'][$protocol]['attribs']['path'] = $path;
+                $this->_isValid = false;
+                return true;
+            }
+        }
+        $this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'] = $path;
+        $this->_isValid = false;
+        return true;
+    }
+
+    /**
+     * @param string
+     * @return string|false
+     * @error PEAR_CHANNELFILE_ERROR_NO_SERVER
+     * @error PEAR_CHANNELFILE_ERROR_INVALID_SERVER
+     */
+    function setServer($server, $mirror = false)
+    {
+        if (empty($server)) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_SERVER);
+            return false;
+        } elseif (!$this->validChannelServer($server)) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_NAME,
+                array('tag' => 'name', 'name' => $server));
+            return false;
+        }
+        if ($mirror) {
+            $found = false;
+            foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
+                if ($mirror == $mir['attribs']['host']) {
+                    $found = true;
+                    break;
+                }
+            }
+            if (!$found) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                    array('mirror' => $mirror));
+                return false;
+            }
+            $this->_channelInfo['mirror'][$i]['attribs']['host'] = $server;
+            return true;
+        }
+        $this->_channelInfo['name'] = $server;
+        return true;
+    }
+
+    /**
+     * @param string
+     * @return boolean success
+     * @error PEAR_CHANNELFILE_ERROR_NO_SUMMARY
+     * @warning PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY
+     */
+    function setSummary($summary)
+    {
+        if (empty($summary)) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_NO_SUMMARY);
+            return false;
+        } elseif (strpos(trim($summary), "\n") !== false) {
+            $this->_validateWarning(PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY,
+                array('summary' => $summary));
+        }
+        $this->_channelInfo['summary'] = $summary;
+        return true;
+    }
+
+    /**
+     * @param string
+     * @param boolean determines whether the alias is in channel.xml or local
+     * @return boolean success
+     */
+    function setAlias($alias, $local = false)
+    {
+        if (!$this->validChannelServer($alias)) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_NAME,
+                array('tag' => 'suggestedalias', 'name' => $alias));
+            return false;
+        }
+        if ($local) {
+            $this->_channelInfo['localalias'] = $alias;
+        } else {
+            $this->_channelInfo['suggestedalias'] = $alias;
+        }
+        return true;
+    }
+
+    /**
+     * @return string
+     */
+    function getAlias()
+    {
+        if (isset($this->_channelInfo['localalias'])) {
+            return $this->_channelInfo['localalias'];
+        }
+        if (isset($this->_channelInfo['suggestedalias'])) {
+            return $this->_channelInfo['suggestedalias'];
+        }
+        if (isset($this->_channelInfo['name'])) {
+            return $this->_channelInfo['name'];
+        }
+    }
+
+    /**
+     * Set the package validation object if it differs from PEAR's default
+     * The class must be includeable via changing _ in the classname to path separator,
+     * but no checking of this is made.
+     * @param string|false pass in false to reset to the default packagename regex
+     * @return boolean success
+     */
+    function setValidationPackage($validateclass, $version)
+    {
+        if (empty($validateclass)) {
+            unset($this->_channelInfo['validatepackage']);
+        }
+        $this->_channelInfo['validatepackage'] = array('_content' => $validateclass);
+        $this->_channelInfo['validatepackage']['attribs'] = array('version' => $version);
+    }
+
+    /**
+     * Add a protocol to the provides section
+     * @param string protocol type
+     * @param string protocol version
+     * @param string protocol name, if any
+     * @param string mirror name, if this is a mirror's protocol
+     * @return bool
+     */
+    function addFunction($type, $version, $name = '', $mirror = false)
+    {
+        if ($mirror) {
+            return $this->addMirrorFunction($mirror, $type, $version, $name);
+        }
+        $set = array('attribs' => array('version' => $version), '_content' => $name);
+        if (!isset($this->_channelInfo['servers']['primary'][$type]['function'])) {
+            $this->_channelInfo['servers']['primary'][$type]['function'] = $set;
+            $this->_isValid = false;
+            return true;
+        } elseif (!isset($this->_channelInfo['servers']['primary'][$type]['function'][0])) {
+            $this->_channelInfo['servers']['primary'][$type]['function'] = array(
+                $this->_channelInfo['servers']['primary'][$type]['function']);
+        }
+        $this->_channelInfo['servers']['primary'][$type]['function'][] = $set;
+        return true;
+    }
+    /**
+     * Add a protocol to a mirror's provides section
+     * @param string mirror name (server)
+     * @param string protocol type
+     * @param string protocol version
+     * @param string protocol name, if any
+     */
+    function addMirrorFunction($mirror, $type, $version, $name = '')
+    {
+        $found = false;
+        if (!isset($this->_channelInfo['servers']['mirror'])) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                array('mirror' => $mirror));
+            return false;
+        }
+        $setmirror = false;
+        if (isset($this->_channelInfo['servers']['mirror'][0])) {
+            foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
+                if ($mirror == $mir['attribs']['host']) {
+                    $setmirror = &$this->_channelInfo['servers']['mirror'][$i];
+                    break;
+                }
+            }
+        } else {
+            if ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
+                $setmirror = &$this->_channelInfo['servers']['mirror'];
+            }
+        }
+        if (!$setmirror) {
+            $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                array('mirror' => $mirror));
+            return false;
+        }
+        $set = array('attribs' => array('version' => $version), '_content' => $name);
+        if (!isset($setmirror[$type]['function'])) {
+            $setmirror[$type]['function'] = $set;
+            $this->_isValid = false;
+            return true;
+        } elseif (!isset($setmirror[$type]['function'][0])) {
+            $setmirror[$type]['function'] = array($setmirror[$type]['function']);
+        }
+        $setmirror[$type]['function'][] = $set;
+        $this->_isValid = false;
+        return true;
+    }
+
+    /**
+     * @param string Resource Type this url links to
+     * @param string URL
+     * @param string|false mirror name, if this is not a primary server REST base URL
+     */
+    function setBaseURL($resourceType, $url, $mirror = false)
+    {
+        if ($mirror) {
+            $found = false;
+            if (!isset($this->_channelInfo['servers']['mirror'])) {
+                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
+                    array('mirror' => $mirror));
+                return false;
+            }
+            $setmirror = false;
+            if (isset($this->_channelInfo['servers']['mirror'][0])) {
+                foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
+                    if ($mirror == $mir['attribs']['host']) {
+                        $setmirror = &$this->_channelInfo['servers']['mirror'][$i];
+                        break;
+                    }
+                }
+            } else {
+                if ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
+                    $setmirror = &$this->_channelInfo['servers']['mirror'];
+                }
+            }
+        } else {
+            $setmirror = &$this->_channelInfo['servers']['primary'];
+        }
+        $set = array('attribs' => array('type' => $resourceType), '_content' => $url);
+        if (!isset($setmirror['rest']['baseurl'])) {
+            $setmirror['rest']['baseurl'] = $set;
+            $this->_isValid = false;
+            return true;
+        } elseif (!isset($setmirror['rest']['baseurl'][0])) {
+            $setmirror['rest']['baseurl'] = array($setmirror['rest']['baseurl']);
+        }
+        foreach ($setmirror['rest']['baseurl'] as $i => $url) {
+            if ($url['attribs']['type'] == $resourceType) {
+                $this->_isValid = false;
+                $setmirror['rest']['baseurl'][$i] = $set;
+                return true;
+            }
+        }
+        $setmirror['rest']['baseurl'][] = $set;
+        $this->_isValid = false;
+        return true;
+    }
+
+    /**
+     * @param string mirror server
+     * @param int mirror http port
+     * @return boolean
+     */
+    function addMirror($server, $port = null)
+    {
+        if ($this->_channelInfo['name'] == '__uri') {
+            return false; // the __uri channel cannot have mirrors by definition
+        }
+        $set = array('attribs' => array('host' => $server));
+        if (is_numeric($port)) {
+            $set['attribs']['port'] = $port;
+        }
+        if (!isset($this->_channelInfo['servers']['mirror'])) {
+            $this->_channelInfo['servers']['mirror'] = $set;
+            return true;
+        } else {
+            if (!isset($this->_channelInfo['servers']['mirror'][0])) {
+                $this->_channelInfo['servers']['mirror'] =
+                    array($this->_channelInfo['servers']['mirror']);
+            }
+        }
+        $this->_channelInfo['servers']['mirror'][] = $set;
+        return true;
+    }
+
+    /**
+     * Retrieve the name of the validation package for this channel
+     * @return string|false
+     */
+    function getValidationPackage()
+    {
+        if (!$this->_isValid && !$this->validate()) {
+            return false;
+        }
+        if (!isset($this->_channelInfo['validatepackage'])) {
+            return array('attribs' => array('version' => 'default'),
+                '_content' => 'PEAR_Validate');
+        }
+        return $this->_channelInfo['validatepackage'];
+    }
+
+    /**
+     * Retrieve the object that can be used for custom validation
+     * @param string|false the name of the package to validate.  If the package is
+     *                     the channel validation package, PEAR_Validate is returned
+     * @return PEAR_Validate|false false is returned if the validation package
+     *         cannot be located
+     */
+    function &getValidationObject($package = false)
+    {
+        if (!class_exists('PEAR_Validate')) {
+            require_once 'PEAR/Validate.php';
+        }
+        if (!$this->_isValid) {
+            if (!$this->validate()) {
+                $a = false;
+                return $a;
+            }
+        }
+        if (isset($this->_channelInfo['validatepackage'])) {
+            if ($package == $this->_channelInfo['validatepackage']) {
+                // channel validation packages are always validated by PEAR_Validate
+                $val = &new PEAR_Validate;
+                return $val;
+            }
+            if (!class_exists(str_replace('.', '_',
+                  $this->_channelInfo['validatepackage']['_content']))) {
+                if ($this->isIncludeable(str_replace('_', '/',
+                      $this->_channelInfo['validatepackage']['_content']) . '.php')) {
+                    include_once str_replace('_', '/',
+                        $this->_channelInfo['validatepackage']['_content']) . '.php';
+                    $vclass = str_replace('.', '_',
+                        $this->_channelInfo['validatepackage']['_content']);
+                    $val = &new $vclass;
+                } else {
+                    $a = false;
+                    return $a;
+                }
+            } else {
+                $vclass = str_replace('.', '_',
+                    $this->_channelInfo['validatepackage']['_content']);
+                $val = &new $vclass;
+            }
+        } else {
+            $val = &new PEAR_Validate;
+        }
+        return $val;
+    }
+
+    function isIncludeable($path)
+    {
+        $possibilities = explode(PATH_SEPARATOR, ini_get('include_path'));
+        foreach ($possibilities as $dir) {
+            if (file_exists($dir . DIRECTORY_SEPARATOR . $path)
+                  && is_readable($dir . DIRECTORY_SEPARATOR . $path)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * This function is used by the channel updater and retrieves a value set by
+     * the registry, or the current time if it has not been set
+     * @return string
+     */
+    function lastModified()
+    {
+        if (isset($this->_channelInfo['_lastmodified'])) {
+            return $this->_channelInfo['_lastmodified'];
+        }
+        return time();
+    }
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Auth.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Auth.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Auth.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Auth.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,30 +1,44 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// +----------------------------------------------------------------------+
-//
-// $Id: Auth.php,v 1.15 2004/01/08 17:33:13 sniper Exp $
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Remote.php";
-require_once "PEAR/Config.php";
+/**
+ * PEAR_Command_Auth (login, logout commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Auth.php,v 1.22 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
 /**
- * PEAR commands for managing configuration data.
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+require_once 'PEAR/Config.php';
+
+/**
+ * PEAR commands for login/logout
  *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Command_Auth extends PEAR_Command_Common
 {
@@ -84,15 +98,18 @@
      *
      * @param array $params list of additional parameters
      *
-     * @return bool TRUE on success, FALSE for unknown commands, or
+     * @return bool TRUE on success or
      * a PEAR error on failure
      *
      * @access public
      */
     function doLogin($command, $options, $params)
     {
-        $server = $this->config->get('master_server');
-        $remote = new PEAR_Remote($this->config);
+        $reg = &$this->config->getRegistry();
+        $channel = $this->config->get('default_channel');
+        $chan = $reg->getChannel($channel);
+        $server = $this->config->get('preferred_mirror');
+        $remote = &$this->config->getRemote();
         $username = $this->config->get('username');
         if (empty($username)) {
             $username = @$_ENV['USER'];
@@ -110,17 +127,21 @@
         
         $this->config->set('username', $username);
         $this->config->set('password', $password);
-        
-        $remote->expectError(401);
-        $ok = $remote->call('logintest');
-        $remote->popExpect();
+
+        if ($chan->supportsREST()) {
+            $ok = true;
+        } else {
+            $remote->expectError(401);
+            $ok = $remote->call('logintest');
+            $remote->popExpect();
+        }
         if ($ok === true) {
             $this->ui->outputData("Logged in.", $command);
             $this->config->store();
         } else {
             return $this->raiseError("Login failed!");
         }
-
+        return true;
     }
 
     // }}}
@@ -135,18 +156,22 @@
      *
      * @param array $params list of additional parameters
      *
-     * @return bool TRUE on success, FALSE for unknown commands, or
+     * @return bool TRUE on success or
      * a PEAR error on failure
      *
      * @access public
      */
     function doLogout($command, $options, $params)
     {
-        $server = $this->config->get('master_server');
+        $reg = &$this->config->getRegistry();
+        $channel = $this->config->get('default_channel');
+        $chan = $reg->getChannel($channel);
+        $server = $this->config->get('preferred_mirror');
         $this->ui->outputData("Logging out from $server.", $command);
         $this->config->remove('username');
         $this->config->remove('password');
         $this->config->store();
+        return true;
     }
 
     // }}}
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Auth.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Auth.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Auth.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Auth.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,25 @@
+<commands version="1.0">
+ <login>
+  <summary>Connects and authenticates to remote server</summary>
+  <shortcut>li</shortcut>
+  <function>doLogin</function>
+  <options />
+  <doc>
+Log in to the remote server.  To use remote functions in the installer
+that require any kind of privileges, you need to log in first.  The
+username and password you enter here will be stored in your per-user
+PEAR configuration (~/.pearrc on Unix-like systems).  After logging
+in, your username and password will be sent along in subsequent
+operations on the remote server.</doc>
+ </login>
+ <logout>
+  <summary>Logs out from the remote server</summary>
+  <shortcut>lo</shortcut>
+  <function>doLogout</function>
+  <options />
+  <doc>
+Logs out from the remote server.  This command does not actually
+connect to the remote server, it only deletes the stored username and
+password from your user configuration.</doc>
+ </logout>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Build.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Build.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Build.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Build.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,31 +1,45 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// |         Tomas V.V.Cox <cox@idecnet.com>                              |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Build.php,v 1.9 2004/01/08 17:33:13 sniper Exp $
+/**
+ * PEAR_Command_Auth (build command)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Build.php,v 1.13 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Builder.php";
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
 
 /**
  * PEAR commands for building extensions.
  *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Command_Build extends PEAR_Command_Common
 {
@@ -62,6 +76,7 @@
 
     function doBuild($command, $options, $params)
     {
+        require_once 'PEAR/Builder.php';
         if (sizeof($params) < 1) {
             $params[0] = 'package.xml';
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Build.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Build.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Build.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Build.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,10 @@
+<commands version="1.0">
+ <build>
+  <summary>Build an Extension From C Source</summary>
+  <function>doBuild</function>
+  <shortcut>b</shortcut>
+  <options />
+  <doc>[package.xml]
+Builds one or more extensions contained in a package.</doc>
+ </build>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Channels.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Channels.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Channels.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Channels.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,770 @@
+<?php
+// /* vim: set expandtab tabstop=4 shiftwidth=4: */
+/**
+ * PEAR_Command_Channels (list-channels, update-channels, channel-delete, channel-add,
+ * channel-update, channel-info, channel-alias, channel-discover commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Channels.php,v 1.43 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+
+/**
+ * PEAR commands for managing channels.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Command_Channels extends PEAR_Command_Common
+{
+    // {{{ properties
+
+    var $commands = array(
+        'list-channels' => array(
+            'summary' => 'List Available Channels',
+            'function' => 'doList',
+            'shortcut' => 'lc',
+            'options' => array(),
+            'doc' => '
+List all available channels for installation.
+',
+            ),
+        'update-channels' => array(
+            'summary' => 'Update the Channel List',
+            'function' => 'doUpdateAll',
+            'shortcut' => 'uc',
+            'options' => array(),
+            'doc' => '
+List all installed packages in all channels.
+'
+            ),
+        'channel-delete' => array(
+            'summary' => 'Remove a Channel From the List',
+            'function' => 'doDelete',
+            'shortcut' => 'cde',
+            'options' => array(),
+            'doc' => '<channel name>
+Delete a channel from the registry.  You may not
+remove any channel that has installed packages.
+'
+            ),
+        'channel-add' => array(
+            'summary' => 'Add a Channel',
+            'function' => 'doAdd',
+            'shortcut' => 'ca',
+            'options' => array(),
+            'doc' => '<channel.xml>
+Add a private channel to the channel list.  Note that all
+public channels should be synced using "update-channels".
+Parameter may be either a local file or remote URL to a
+channel.xml.
+'
+            ),
+        'channel-update' => array(
+            'summary' => 'Update an Existing Channel',
+            'function' => 'doUpdate',
+            'shortcut' => 'cu',
+            'options' => array(
+                'force' => array(
+                    'shortopt' => 'f',
+                    'doc' => 'will force download of new channel.xml if an existing channel name is used',
+                    ),
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'arg' => 'CHANNEL',
+                    'doc' => 'will force download of new channel.xml if an existing channel name is used',
+                    ),
+),
+            'doc' => '[<channel.xml>|<channel name>]
+Update a channel in the channel list directly.  Note that all
+public channels can be synced using "update-channels".
+Parameter may be a local or remote channel.xml, or the name of
+an existing channel.
+'
+            ),
+        'channel-info' => array(
+            'summary' => 'Retrieve Information on a Channel',
+            'function' => 'doInfo',
+            'shortcut' => 'ci',
+            'options' => array(),
+            'doc' => '<package>
+List the files in an installed package.
+'
+            ),
+        'channel-alias' => array(
+            'summary' => 'Specify an alias to a channel name',
+            'function' => 'doAlias',
+            'shortcut' => 'cha',
+            'options' => array(),
+            'doc' => '<channel> <alias>
+Specify a specific alias to use for a channel name.
+The alias may not be an existing channel name or
+alias.
+'
+            ),
+        'channel-discover' => array(
+            'summary' => 'Initialize a Channel from its server',
+            'function' => 'doDiscover',
+            'shortcut' => 'di',
+            'options' => array(),
+            'doc' => '<package>
+List the files in an installed package.
+'
+            ),
+        );
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * PEAR_Command_Registry constructor.
+     *
+     * @access public
+     */
+    function PEAR_Command_Channels(&$ui, &$config)
+    {
+        parent::PEAR_Command_Common($ui, $config);
+    }
+
+    // }}}
+
+    // {{{ doList()
+    
+    function _sortChannels($a, $b)
+    {
+        return strnatcasecmp($a->getName(), $b->getName());
+    }
+
+    function doList($command, $options, $params)
+    {
+        $reg = &$this->config->getRegistry();
+        $registered = $reg->getChannels();
+        usort($registered, array(&$this, '_sortchannels'));
+        $i = $j = 0;
+        $data = array(
+            'caption' => 'Registered Channels:',
+            'border' => true,
+            'headline' => array('Channel', 'Summary')
+            );
+        foreach ($registered as $channel) {
+            $data['data'][] = array($channel->getName(),
+                                      $channel->getSummary());
+        }
+        if (count($registered)==0) {
+            $data = '(no registered channels)';
+        }
+        $this->ui->outputData($data, $command);
+        return true;
+    }
+    
+    function doUpdateAll($command, $options, $params)
+    {
+        $reg = &$this->config->getRegistry();
+        $savechannel = $this->config->get('default_channel');
+        if (isset($options['channel'])) {
+            if (!$reg->channelExists($options['channel'])) {
+                return $this->raiseError('Unknown channel "' . $options['channel'] . '"');
+            }
+            $this->config->set('default_channel', $options['channel']);
+        } else {
+            $this->config->set('default_channel', 'pear.php.net');
+        }
+        $remote = &$this->config->getRemote();
+        $channels = $remote->call('channel.listAll');
+        if (PEAR::isError($channels)) {
+            $this->config->set('default_channel', $savechannel);
+            return $channels;
+        }
+        if (!is_array($channels) || isset($channels['faultCode'])) {
+            $this->config->set('default_channel', $savechannel);
+            return $this->raiseError("Incorrect channel listing returned from channel '$chan'");
+        }
+        if (!count($channels)) {
+            $data = 'no updates available';
+        }
+        $dl = &$this->getDownloader();
+        if (!class_exists('System')) {
+            require_once 'System.php';
+        }
+        $tmpdir = System::mktemp(array('-d'));
+        foreach ($channels as $channel) {
+            $channel = $channel[0];
+            $save = $channel;
+            if ($reg->channelExists($channel, true)) {
+                $this->ui->outputData("Updating channel \"$channel\"", $command);
+                $test = $reg->getChannel($channel, true);
+                if (!$test) {
+                    $this->ui->outputData("Channel '$channel' is corrupt in registry!", $command);
+                    $lastmodified = false;
+                } else {
+                    $lastmodified = $test->lastModified();
+                    
+                }
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                $contents = $dl->downloadHttp('http://' . $test->getName() . '/channel.xml',
+                    $this->ui, $tmpdir, null, $lastmodified);
+                PEAR::staticPopErrorHandling();
+                if (PEAR::isError($contents)) {
+                    $this->ui->outputData('ERROR: Cannot retrieve channel.xml for channel "' .
+                        $test->getName() . '"', $command);
+                    continue;
+                }
+                if (!$contents) {
+                    $this->ui->outputData("Channel \"$channel\" is up-to-date", $command);
+                    continue;
+                }
+                list($contents, $lastmodified) = $contents;
+                $info = implode('', file($contents));
+                if (!$info) {
+                    $this->ui->outputData("Channel \"$channel\" is up-to-date", $command);
+                    continue;
+                }
+                if (!class_exists('PEAR_ChannelFile')) {
+                    require_once 'PEAR/ChannelFile.php';
+                }
+                $channelinfo = new PEAR_ChannelFile;
+                $channelinfo->fromXmlString($info);
+                if ($channelinfo->getErrors()) {
+                    $this->ui->outputData("Downloaded channel data from channel \"$channel\" " . 
+                        'is corrupt, skipping', $command);
+                    continue;
+                }
+                $channel = $channelinfo;
+                if ($channel->getName() != $save) {
+                    $this->ui->outputData('ERROR: Security risk - downloaded channel ' .
+                        'definition file for channel "'
+                        . $channel->getName() . ' from channel "' . $save .
+                        '".  To use anyway, use channel-update', $command);
+                    continue;
+                }
+                $reg->updateChannel($channel, $lastmodified);
+            } else {
+                if ($reg->isAlias($channel)) {
+                    $temp = &$reg->getChannel($channel);
+                    $temp->setAlias($temp->getName(), true); // set the alias to the channel name
+                    if ($reg->channelExists($temp->getName())) {
+                        $this->ui->outputData('ERROR: existing channel "' . $temp->getName() .
+                            '" is aliased to "' . $channel . '" already and cannot be ' .
+                            're-aliased to "' . $temp->getName() . '" because a channel with ' .
+                            'that name or alias already exists!  Please re-alias and try ' .
+                            'again.', $command);
+                        continue;
+                    }
+                }
+                $this->ui->outputData("Adding new channel \"$channel\"", $command);
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                $contents = $dl->downloadHttp('http://' . $channel . '/channel.xml',
+                    $this->ui, $tmpdir, null, false);
+                PEAR::staticPopErrorHandling();
+                if (PEAR::isError($contents)) {
+                    $this->ui->outputData('ERROR: Cannot retrieve channel.xml for channel "' .
+                        $channel . '"', $command);
+                    continue;
+                }
+                list($contents, $lastmodified) = $contents;
+                $info = implode('', file($contents));
+                if (!class_exists('PEAR_ChannelFile')) {
+                    require_once 'PEAR/ChannelFile.php';
+                }
+                $channelinfo = new PEAR_Channelfile;
+                $channelinfo->fromXmlString($info);
+                if ($channelinfo->getErrors()) {
+                    $this->ui->outputData("Downloaded channel data from channel \"$channel\"" .
+                        ' is corrupt, skipping', $command);
+                    continue;
+                }
+                $channel = $channelinfo;
+                if ($channel->getName() != $save) {
+                    $this->ui->outputData('ERROR: Security risk - downloaded channel ' .
+                        'definition file for channel "'
+                        . $channel->getName() . '" from channel "' . $save .
+                        '".  To use anyway, use channel-update', $command);
+                    continue;
+                }
+                $reg->addChannel($channel, $lastmodified);
+            }
+        }
+        $this->config->set('default_channel', $savechannel);
+        $this->ui->outputData('update-channels complete', $command);
+        return true;
+    }
+    
+    function doInfo($command, $options, $params)
+    {
+        if (sizeof($params) != 1) {
+            return $this->raiseError("No channel specified");
+        }
+        $reg = &$this->config->getRegistry();
+        $channel = strtolower($params[0]);
+        if ($reg->channelExists($channel)) {
+            $chan = $reg->getChannel($channel);
+        } else {
+            if (strpos($channel, '://')) {
+                $downloader = &$this->getDownloader();
+                if (!class_exists('System')) {
+                    require_once 'System.php';
+                }
+                $tmpdir = System::mktemp(array('-d'));
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                $loc = $downloader->downloadHttp($channel, $this->ui, $tmpdir);
+                PEAR::staticPopErrorHandling();
+                if (PEAR::isError($loc)) {
+                    return $this->raiseError('Cannot open "' . $channel . '"');
+                } else {
+                    $contents = implode('', file($loc));
+                }
+            } else {
+                $fp = @fopen($params[0], 'r');
+                if (!$fp) {
+                    if (@file_exists($params[0])) {
+                        return $this->raiseError('Cannot open "' . $params[0] . '"');
+                    } else {
+                        return $this->raiseError('Unknown channel "' . $channel . '"');
+                    }
+                }
+                $contents = '';
+                while (!feof($fp)) {
+                    $contents .= fread($fp, 1024);
+                }
+                fclose($fp);
+            }
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $chan = new PEAR_ChannelFile;
+            $chan->fromXmlString($contents);
+            $chan->validate();
+            if ($errs = $chan->getErrors(true)) {
+                foreach ($errs as $err) {
+                    $this->ui->outputData($err['level'] . ': ' . $err['message']);
+                }
+                return $this->raiseError('Channel file "' . $params[0] . '" is not valid');
+            }
+        }
+        if ($chan) {
+            $channel = $chan->getName();
+            $caption = 'Channel ' . $channel . ' Information:';
+            $data1 = array(
+                'caption' => $caption,
+                'border' => true);
+            $data1['data']['server'] = array('Name and Server', $chan->getName());
+            if ($chan->getAlias() != $chan->getName()) {
+                $data1['data']['alias'] = array('Alias', $chan->getAlias());
+            }
+            $data1['data']['summary'] = array('Summary', $chan->getSummary());
+            $validate = $chan->getValidationPackage();
+            $data1['data']['vpackage'] = array('Validation Package Name', $validate['_content']);
+            $data1['data']['vpackageversion'] =
+                array('Validation Package Version', $validate['attribs']['version']);
+            $d = array();
+            $d['main'] = $data1;
+
+            $data['data'] = array();
+            $data['caption'] = 'Server Capabilities';
+            $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
+            $capabilities = $chan->getFunctions('xmlrpc');
+            $soaps = $chan->getFunctions('soap');
+            if ($capabilities || $soaps || $chan->supportsREST()) {
+                if ($capabilities) {
+                    if (!isset($capabilities[0])) {
+                        $capabilities = array($capabilities);
+                    }
+                    foreach ($capabilities as $protocol) {
+                        $data['data'][] = array('xmlrpc', $protocol['attribs']['version'],
+                            $protocol['_content']);
+                    }
+                }
+                if ($soaps) {
+                    if (!isset($soaps[0])) {
+                        $soaps = array($soaps);
+                    }
+                    foreach ($soaps as $protocol) {
+                        $data['data'][] = array('soap', $protocol['attribs']['version'],
+                            $protocol['_content']);
+                    }
+                }
+                if ($chan->supportsREST()) {
+                    $funcs = $chan->getFunctions('rest');
+                    if (!isset($funcs[0])) {
+                        $funcs = array($funcs);
+                    }
+                    foreach ($funcs as $protocol) {
+                        $data['data'][] = array('rest', $protocol['attribs']['type'],
+                            $protocol['_content']); 
+                    }
+                }
+            } else {
+                $data['data'][] = array('No supported protocols');
+            }
+            $d['protocols'] = $data;
+            $data['data'] = array();
+            $mirrors = $chan->getMirrors();
+            if ($mirrors) {
+                $data['caption'] = 'Channel ' . $channel . ' Mirrors:';
+                unset($data['headline']);
+                foreach ($mirrors as $mirror) {
+                    $data['data'][] = array($mirror['attribs']['host']);
+                    $d['mirrors'] = $data;
+                }
+                foreach ($mirrors as $mirror) {
+                    $data['data'] = array();
+                    $data['caption'] = 'Mirror ' . $mirror['attribs']['host'] . ' Capabilities';
+                    $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
+                    $capabilities = $chan->getFunctions('xmlrpc', $mirror['attribs']['host']);
+                    $soaps = $chan->getFunctions('soap', $mirror['attribs']['host']);
+                    if ($capabilities || $soaps || $chan->supportsREST($mirror['attribs']['host'])) {
+                        if ($capabilities) {
+                            if (!isset($capabilities[0])) {
+                                $capabilities = array($capabilities);
+                            }
+                            foreach ($capabilities as $protocol) {
+                                $data['data'][] = array('xmlrpc', $protocol['attribs']['version'],
+                                    $protocol['_content']);
+                            }
+                        }
+                        if ($soaps) {
+                            if (!isset($soaps[0])) {
+                                $soaps = array($soaps);
+                            }
+                            foreach ($soaps as $protocol) {
+                                $data['data'][] = array('soap', $protocol['attribs']['version'],
+                                    $protocol['_content']);
+                            }
+                        }
+                        if ($chan->supportsREST($mirror['attribs']['host'])) {
+                            $funcs = $chan->getFunctions('rest', $mirror['attribs']['host']);
+                            if (!isset($funcs[0])) {
+                                $funcs = array($funcs);
+                            }
+                            foreach ($funcs as $protocol) {
+                                $data['data'][] = array('rest', $protocol['attribs']['type'],
+                                    $protocol['_content']); 
+                            }
+                        }
+                    } else {
+                        $data['data'][] = array('No supported protocols');
+                    }
+                    $d['mirrorprotocols'] = $data;
+                }
+            }
+            $this->ui->outputData($d, 'channel-info');
+        } else {
+            return $this->raiseError('Serious error: Channel "' . $params[0] .
+                '" has a corrupted registry entry');
+        }
+    }
+
+    // }}}
+    
+    function doDelete($command, $options, $params)
+    {
+        if (sizeof($params) != 1) {
+            return $this->raiseError('channel-delete: no channel specified');
+        }
+        $reg = &$this->config->getRegistry();
+        if (!$reg->channelExists($params[0])) {
+            return $this->raiseError('channel-delete: channel "' . $params[0] . '" does not exist');
+        }
+        $channel = $reg->channelName($params[0]);
+        if ($channel == 'pear.php.net') {
+            return $this->raiseError('Cannot delete the pear.php.net channel');
+        }
+        if ($channel == 'pecl.php.net') {
+            return $this->raiseError('Cannot delete the pecl.php.net channel');
+        }
+        if ($channel == '__uri') {
+            return $this->raiseError('Cannot delete the __uri pseudo-channel');
+        }
+        if (PEAR::isError($err = $reg->listPackages($channel))) {
+            return $err;
+        }
+        if (count($err)) {
+            return $this->raiseError('Channel "' . $channel .
+                '" has installed packages, cannot delete');
+        }
+        if (!$reg->deleteChannel($channel)) {
+            return $this->raiseError('Channel "' . $channel . '" deletion failed');
+        } else {
+            $this->config->deleteChannel($channel);
+            $this->ui->outputData('Channel "' . $channel . '" deleted', $command);
+        }
+    }
+
+    function doAdd($command, $options, $params)
+    {
+        if (sizeof($params) != 1) {
+            return $this->raiseError('channel-add: no channel file specified');
+        }
+        if (strpos($params[0], '://')) {
+            $downloader = &$this->getDownloader();
+            if (!class_exists('System')) {
+                require_once 'System.php';
+            }
+            $tmpdir = System::mktemp(array('-d'));
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $loc = $downloader->downloadHttp($params[0], $this->ui, $tmpdir, null, false);
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($loc)) {
+                return $this->raiseError('channel-add: Cannot open "' . $params[0] . '"');
+            } else {
+                list($loc, $lastmodified) = $loc;
+                $contents = implode('', file($loc));
+            }
+        } else {
+            $lastmodified = false;
+            $fp = @fopen($params[0], 'r');
+            if (!$fp) {
+                return $this->raiseError('channel-add: cannot open "' . $params[0] . '"');
+            }
+            $contents = '';
+            while (!feof($fp)) {
+                $contents .= fread($fp, 1024);
+            }
+            fclose($fp);
+        }
+        if (!class_exists('PEAR_ChannelFile')) {
+            require_once 'PEAR/ChannelFile.php';
+        }
+        $channel = new PEAR_ChannelFile;
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $result = $channel->fromXmlString($contents);
+        PEAR::staticPopErrorHandling();
+        if (!$result) {
+            $exit = false;
+            if (count($errors = $channel->getErrors(true))) {
+                foreach ($errors as $error) {
+                    $this->ui->outputData(ucfirst($error['level'] . ': ' . $error['message']));
+                    if (!$exit) {
+                        $exit = $error['level'] == 'error' ? true : false;
+                    }
+                }
+                if ($exit) {
+                    return $this->raiseError('channel-add: invalid channel.xml file');
+                }
+            }
+        }
+        $reg = &$this->config->getRegistry();
+        if ($reg->channelExists($channel->getName())) {
+            return $this->raiseError('channel-add: Channel "' . $channel->getName() .
+                '" exists, use channel-update to update entry');
+        }
+        $ret = $reg->addChannel($channel, $lastmodified);
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+        if (!$ret) {
+            return $this->raiseError('channel-add: adding Channel "' . $channel->getName() .
+                '" to registry failed');
+        }
+        $this->config->setChannels($reg->listChannels());
+        $this->config->writeConfigFile();
+        $this->ui->outputData('Adding Channel "' . $channel->getName() . '" succeeded', $command);
+    }
+
+    function doUpdate($command, $options, $params)
+    {
+        if (!class_exists('System')) {
+            require_once 'System.php';
+        }
+        $tmpdir = System::mktemp(array('-d'));
+        $reg = &$this->config->getRegistry();
+        if (sizeof($params) != 1) {
+            return $this->raiseError("No channel file specified");
+        }
+        $lastmodified = false;
+        if ((!file_exists($params[0]) || is_dir($params[0]))
+              && $reg->channelExists(strtolower($params[0]))) {
+            $c = $reg->getChannel(strtolower($params[0]));
+            $this->ui->outputData('Retrieving channel.xml from remote server');
+            $dl = &$this->getDownloader(array());
+            // if force is specified, use a timestamp of "1" to force retrieval
+            $lastmodified = isset($options['force']) ? false : $c->lastModified();
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $contents = $dl->downloadHttp('http://' . $c->getName() . '/channel.xml',
+                $this->ui, $tmpdir, null, $lastmodified);
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($contents)) {
+                return $this->raiseError('Cannot retrieve channel.xml for channel "' .
+                    $c->getName() . '"');
+            }
+            list($contents, $lastmodified) = $contents;
+            if (!$contents) {
+                $this->ui->outputData("Channel $params[0] channel.xml is up to date");
+                return;
+            }
+            $contents = implode('', file($contents));
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $channel = new PEAR_ChannelFile;
+            $channel->fromXmlString($contents);
+            if (!$channel->getErrors()) {
+                // security check: is the downloaded file for the channel we got it from?
+                if (strtolower($channel->getName()) != strtolower($c->getName())) {
+                    if (isset($options['force'])) {
+                        $this->ui->log(0, 'WARNING: downloaded channel definition file' .
+                            ' for channel "' . $channel->getName() . '" from channel "' .
+                            strtolower($c->getName()) . '"');
+                    } else {
+                        return $this->raiseError('ERROR: downloaded channel definition file' .
+                            ' for channel "' . $channel->getName() . '" from channel "' .
+                            strtolower($c->getName()) . '"');
+                    }
+                }
+            }
+        } else {
+            if (strpos($params[0], '://')) {
+                $dl = &$this->getDownloader();
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                $loc = $dl->downloadHttp($params[0],
+                    $this->ui, $tmpdir, null, $lastmodified);
+                PEAR::staticPopErrorHandling();
+                if (PEAR::isError($loc)) {
+                    return $this->raiseError("Cannot open " . $params[0]);
+                } else {
+                    list($loc, $lastmodified) = $loc;
+                    $contents = implode('', file($loc));
+                }
+            } else {
+                $fp = @fopen($params[0], 'r');
+                if (!$fp) {
+                    return $this->raiseError("Cannot open " . $params[0]);
+                }
+                $contents = '';
+                while (!feof($fp)) {
+                    $contents .= fread($fp, 1024);
+                }
+                fclose($fp);
+            }
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $channel = new PEAR_ChannelFile;
+            $channel->fromXmlString($contents);
+        }
+        $exit = false;
+        if (count($errors = $channel->getErrors(true))) {
+            foreach ($errors as $error) {
+                $this->ui->outputData(ucfirst($error['level'] . ': ' . $error['message']));
+                if (!$exit) {
+                    $exit = $error['level'] == 'error' ? true : false;
+                }
+            }
+            if ($exit) {
+                return $this->raiseError('Invalid channel.xml file');
+            }
+        }
+        if (!$reg->channelExists($channel->getName())) {
+            return $this->raiseError('Error: Channel "' . $channel->getName() .
+                '" does not exist, use channel-add to add an entry');
+        }
+        $ret = $reg->updateChannel($channel, $lastmodified);
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+        if (!$ret) {
+            return $this->raiseError('Updating Channel "' . $channel->getName() .
+                '" in registry failed');
+        }
+        $this->config->setChannels($reg->listChannels());
+        $this->config->writeConfigFile();
+        $this->ui->outputData('Update of Channel "' . $channel->getName() . '" succeeded');
+    }
+
+    function &getDownloader()
+    {
+        if (!class_exists('PEAR_Downloader')) {
+            require_once 'PEAR/Downloader.php';
+        }
+        $a = new PEAR_Downloader($this->ui, array(), $this->config);
+        return $a;
+    }
+
+    function doAlias($command, $options, $params)
+    {
+        $reg = &$this->config->getRegistry();
+        if (sizeof($params) == 1) {
+            return $this->raiseError('No channel alias specified');
+        }
+        if (sizeof($params) != 2) {
+            return $this->raiseError(
+                'Invalid format, correct is: channel-alias channel alias');
+        }
+        if (!$reg->channelExists($params[0], true)) {
+            if ($reg->isAlias($params[0])) {
+                $extra = ' (use "channel-alias ' . $reg->channelName($params[0]) . ' ' .
+                    strtolower($params[1]) . '")';
+            } else {
+                $extra = '';
+            }
+            return $this->raiseError('"' . $params[0] . '" is not a valid channel' . $extra);
+        }
+        if ($reg->isAlias($params[1])) {
+            return $this->raiseError('Channel "' . $reg->channelName($params[1]) . '" is ' .
+                'already aliased to "' . strtolower($params[1]) . '", cannot re-alias');
+        }
+        $chan = &$reg->getChannel($params[0]);
+        if (!$chan) {
+            return $this->raiseError('Corrupt registry?  Error retrieving channel "' . $params[0] .
+                '" information');
+        }
+        // make it a local alias
+        if (!$chan->setAlias(strtolower($params[1]), true)) {
+            return $this->raiseError('Alias "' . strtolower($params[1]) .
+                '" is not a valid channel alias');
+        }
+        $reg->updateChannel($chan);
+        $this->ui->outputData('Channel "' . $chan->getName() . '" aliased successfully to "' .
+            strtolower($params[1]) . '"');
+    }
+
+    function doDiscover($command, $options, $params)
+    {
+        $reg = &$this->config->getRegistry();
+        if (sizeof($params) != 1) {
+            return $this->raiseError("No channel server specified");
+        }
+        if ($reg->channelExists($params[0])) {
+            if ($reg->isAlias($params[0])) {
+                return $this->raiseError("A channel alias named \"$params[0]\" " .
+                    'already exists, aliasing channel "' . $reg->channelName($params[0])
+                    . '"');
+            } else {
+                return $this->raiseError("Channel \"$params[0]\" is already initialized");
+            }
+        }
+        $this->pushErrorHandling(PEAR_ERROR_RETURN);
+        $err = $this->doAdd($command, $options, array('http://' . $params[0] . '/channel.xml'));
+        $this->popErrorHandling();
+        if (PEAR::isError($err)) {
+            return $this->raiseError("Discovery of channel \"$params[0]\" failed");
+        }
+        $this->ui->outputData("Discovery of channel \"$params[0]\" succeeded", $command);
+    }
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Channels.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Channels.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Channels.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Channels.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,93 @@
+<commands version="1.0">
+ <list-channels>
+  <summary>List Available Channels</summary>
+  <function>doList</function>
+  <shortcut>lc</shortcut>
+  <options />
+  <doc>
+List all available channels for installation.
+</doc>
+ </list-channels>
+ <update-channels>
+  <summary>Update the Channel List</summary>
+  <function>doUpdateAll</function>
+  <shortcut>uc</shortcut>
+  <options />
+  <doc>
+List all installed packages in all channels.
+</doc>
+ </update-channels>
+ <channel-delete>
+  <summary>Remove a Channel From the List</summary>
+  <function>doDelete</function>
+  <shortcut>cde</shortcut>
+  <options />
+  <doc>&lt;channel name&gt;
+Delete a channel from the registry.  You may not
+remove any channel that has installed packages.
+</doc>
+ </channel-delete>
+ <channel-add>
+  <summary>Add a Channel</summary>
+  <function>doAdd</function>
+  <shortcut>ca</shortcut>
+  <options />
+  <doc>&lt;channel.xml&gt;
+Add a private channel to the channel list.  Note that all
+public channels should be synced using &quot;update-channels&quot;.
+Parameter may be either a local file or remote URL to a
+channel.xml.
+</doc>
+ </channel-add>
+ <channel-update>
+  <summary>Update an Existing Channel</summary>
+  <function>doUpdate</function>
+  <shortcut>cu</shortcut>
+  <options>
+   <force>
+    <shortopt>f</shortopt>
+    <doc>will force download of new channel.xml if an existing channel name is used</doc>
+   </force>
+   <channel>
+    <shortopt>c</shortopt>
+    <arg>CHANNEL</arg>
+    <doc>will force download of new channel.xml if an existing channel name is used</doc>
+   </channel>
+  </options>
+  <doc>[&lt;channel.xml&gt;|&lt;channel name&gt;]
+Update a channel in the channel list directly.  Note that all
+public channels can be synced using &quot;update-channels&quot;.
+Parameter may be a local or remote channel.xml, or the name of
+an existing channel.
+</doc>
+ </channel-update>
+ <channel-info>
+  <summary>Retrieve Information on a Channel</summary>
+  <function>doInfo</function>
+  <shortcut>ci</shortcut>
+  <options />
+  <doc>&lt;package&gt;
+List the files in an installed package.
+</doc>
+ </channel-info>
+ <channel-alias>
+  <summary>Specify an alias to a channel name</summary>
+  <function>doAlias</function>
+  <shortcut>cha</shortcut>
+  <options />
+  <doc>&lt;channel&gt; &lt;alias&gt;
+Specify a specific alias to use for a channel name.
+The alias may not be an existing channel name or
+alias.
+</doc>
+ </channel-alias>
+ <channel-discover>
+  <summary>Initialize a Channel from its server</summary>
+  <function>doDiscover</function>
+  <shortcut>di</shortcut>
+  <options />
+  <doc>&lt;package&gt;
+List the files in an installed package.
+</doc>
+ </channel-discover>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Common.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Common.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Common.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Common.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,25 +1,44 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Sther Bakken <ssb@php.net>                             |
-// +----------------------------------------------------------------------+
-//
-// $Id: Common.php,v 1.24 2004/01/08 17:33:13 sniper Exp $
-
-require_once "PEAR.php";
-
+/**
+ * PEAR_Command_Common base class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Common.php,v 1.30 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR.php';
+
+/**
+ * PEAR commands base class
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
 class PEAR_Command_Common extends PEAR
 {
     // {{{ properties
@@ -28,9 +47,14 @@
      * PEAR_Config object used to pass user system and configuration
      * on when executing commands
      *
-     * @var object
+     * @var PEAR_Config
      */
     var $config;
+    /**
+     * @var PEAR_Registry
+     * @access protected
+     */
+    var $_registry;
 
     /**
      * User Interface object, for all interaction with the user.
@@ -117,6 +141,10 @@
 
     function getOptions($command)
     {
+        $shortcuts = $this->getShortcuts();
+        if (isset($shortcuts[$command])) {
+            $command = $shortcuts[$command];
+        }
         return @$this->commands[$command]['options'];
     }
 
@@ -127,10 +155,10 @@
     {
         $short_args = "";
         $long_args = array();
-        if (empty($this->commands[$command])) {
+        if (empty($this->commands[$command]) || empty($this->commands[$command]['options'])) {
             return;
         }
-        reset($this->commands[$command]);
+        reset($this->commands[$command]['options']);
         while (list($option, $info) = each($this->commands[$command]['options'])) {
             $larg = $sarg = '';
             if (isset($info['arg'])) {
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Config.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Config.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Config.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Config.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,31 +1,43 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// |         Tomas V.V.Cox <cox@idecnet.com>                              |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Config.php,v 1.27 2004/06/15 16:48:49 pajoye Exp $
+/**
+ * PEAR_Command_Config (config-show, config-get, config-set, config-help, config-create commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Config.php,v 1.49 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Config.php";
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
 
 /**
  * PEAR commands for managing configuration data.
  *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Command_Config extends PEAR_Command_Common
 {
@@ -36,39 +48,62 @@
             'summary' => 'Show All Settings',
             'function' => 'doConfigShow',
             'shortcut' => 'csh',
-            'options' => array(),
-            'doc' => '
+            'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'show configuration variables for another channel',
+                    'arg' => 'CHAN',
+                    ),
+),
+            'doc' => '[layer]
 Displays all configuration values.  An optional argument
 may be used to tell which configuration layer to display.  Valid
-configuration layers are "user", "system" and "default".
+configuration layers are "user", "system" and "default". To display
+configurations for different channels, set the default_channel
+configuration variable and run config-show again.
 ',
             ),
         'config-get' => array(
             'summary' => 'Show One Setting',
             'function' => 'doConfigGet',
             'shortcut' => 'cg',
-            'options' => array(),
+            'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'show configuration variables for another channel',
+                    'arg' => 'CHAN',
+                    ),
+),
             'doc' => '<parameter> [layer]
 Displays the value of one configuration parameter.  The
 first argument is the name of the parameter, an optional second argument
 may be used to tell which configuration layer to look in.  Valid configuration
 layers are "user", "system" and "default".  If no layer is specified, a value
 will be picked from the first layer that defines the parameter, in the order
-just specified.
+just specified.  The configuration value will be retrieved for the channel
+specified by the default_channel configuration variable.
 ',
             ),
         'config-set' => array(
             'summary' => 'Change Setting',
             'function' => 'doConfigSet',
             'shortcut' => 'cs',
-            'options' => array(),
+            'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'show configuration variables for another channel',
+                    'arg' => 'CHAN',
+                    ),
+),
             'doc' => '<parameter> <value> [layer]
 Sets the value of one configuration parameter.  The first argument is
 the name of the parameter, the second argument is the new value.  Some
 parameters are subject to validation, and the command will fail with
 an error message if the new value does not make sense.  An optional
 third argument may be used to specify in which layer to set the
-configuration parameter.  The default layer is "user".
+configuration parameter.  The default layer is "user".  The
+configuration value will be set for the current channel, which
+is controlled by the default_channel configuration variable.
 ',
             ),
         'config-help' => array(
@@ -81,6 +116,24 @@
 displays help for all configuration parameters.
 ',
            ),
+        'config-create' => array(
+            'summary' => 'Create a Default configuration file',
+            'function' => 'doConfigCreate',
+            'shortcut' => 'coc',
+            'options' => array(
+                'windows' => array(
+                    'shortopt' => 'w',
+                    'doc' => 'create a config file for a windows install',
+                    ),
+            ),
+            'doc' => '<root path> <filename>
+Create a default configuration file with all directory configuration
+variables set to subdirectories of <root path>, and save it as <filename>.
+This is useful especially for creating a configuration file for a remote
+PEAR installation (using the --remoteconfig option of install, upgrade,
+and uninstall).
+',
+            ),
         );
 
     // }}}
@@ -104,14 +157,20 @@
     {
         // $params[0] -> the layer
         if ($error = $this->_checkLayer(@$params[0])) {
-            return $this->raiseError($error);
+            return $this->raiseError("config-show:$error");
         }
         $keys = $this->config->getKeys();
         sort($keys);
-        $data = array('caption' => 'Configuration:');
+        $channel = isset($options['channel']) ? $options['channel'] :
+            $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        if (!$reg->channelExists($channel)) {
+            return $this->raiseError('Channel "' . $channel . '" does not exist');
+        }
+        $data = array('caption' => 'Configuration (channel ' . $channel . '):');
         foreach ($keys as $key) {
             $type = $this->config->getType($key);
-            $value = $this->config->get($key, @$params[0]);
+            $value = $this->config->get($key, @$params[0], $channel);
             if ($type == 'password' && $value) {
                 $value = '********';
             }
@@ -122,6 +181,10 @@
             }
             $data['data'][$this->config->getGroup($key)][] = array($this->config->getPrompt($key) , $key, $value);
         }
+        foreach ($this->config->getLayers() as $layer) {
+            $data['data']['Config Files'][] = array(ucfirst($layer) . ' Configuration File', 'Filename' , $this->config->getConfFile($layer));
+        }
+        
         $this->ui->outputData($data, $command);
         return true;
     }
@@ -134,15 +197,23 @@
         // $params[0] -> the parameter
         // $params[1] -> the layer
         if ($error = $this->_checkLayer(@$params[1])) {
-            return $this->raiseError($error);
+            return $this->raiseError("config-get:$error");
+        }
+        $channel = isset($options['channel']) ? $options['channel'] :
+            $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        if (!$reg->channelExists($channel)) {
+            return $this->raiseError('Channel "' . $channel . '" does not exist');
         }
         if (sizeof($params) < 1 || sizeof($params) > 2) {
             return $this->raiseError("config-get expects 1 or 2 parameters");
-        } elseif (sizeof($params) == 1) {
-            $this->ui->outputData($this->config->get($params[0]), $command);
         } else {
-            $data = $this->config->get($params[0], $params[1]);
-            $this->ui->outputData($data, $command);
+            if (count($params) == 1) {
+                $layer = null;
+            } else {
+                $layer = $params[1];
+            }
+            $this->ui->outputData($this->config->get($params[0], $layer, $channel), $command);
         }
         return true;
     }
@@ -162,17 +233,37 @@
         }
         if ($error = $this->_checkLayer(@$params[2])) {
             $failmsg .= $error;
-            return PEAR::raiseError($failmsg);
+            return PEAR::raiseError("config-set:$failmsg");
         }
+        $channel = isset($options['channel']) ? $options['channel'] :
+            $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        if (!$reg->channelExists($channel)) {
+            return $this->raiseError('Channel "' . $channel . '" does not exist');
+        }
+        if ($params[0] == 'default_channel') {
+            if (!$reg->channelExists($params[1])) {
+                return $this->raiseError('Channel "' . $params[1] . '" does not exist');
+            }
+        }
+        if (count($params) == 2) {
+            array_push($params, 'user');
+            $layer = 'user';
+        } else {
+            $layer = $params[2];
+        }
+        array_push($params, $channel);
         if (!call_user_func_array(array(&$this->config, 'set'), $params))
         {
-            $failmsg = "config-set (" . implode(", ", $params) . ") failed";
+            array_pop($params);
+            $failmsg = "config-set (" . implode(", ", $params) . ") failed, channel $channel";
         } else {
-            $this->config->store();
+            $this->config->store($layer);
         }
         if ($failmsg) {
             return $this->raiseError($failmsg);
         }
+        $this->ui->outputData('config-set succeeded', $command);
         return true;
     }
 
@@ -200,6 +291,91 @@
     }
 
     // }}}
+    // {{{ doConfigCreate()
+
+    function doConfigCreate($command, $options, $params)
+    {
+        if (count($params) != 2) {
+            return PEAR::raiseError('config-create: must have 2 parameters, root path and ' .
+                'filename to save as');
+        }
+        $root = $params[0];
+        // Clean up the DIRECTORY_SEPARATOR mess
+        $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
+        $root = preg_replace(array('!\\\\+!', '!/+!', "!$ds2+!"),
+                             array('/', '/', '/'),
+                            $root);
+        if ($root{0} != '/') {
+            if (isset($options['windows'])) {
+                if (!preg_match('/^[A-Za-z]:/', $root)) {
+                    return PEAR::raiseError('Root directory must be an absolute path beginning ' .
+                        'with "\\" or "C:\\", was: "' . $root . '"');
+                }
+            } else {
+                return PEAR::raiseError('Root directory must be an absolute path beginning ' .
+                    'with "/", was: "' . $root . '"');
+            }
+        }
+        $windows = isset($options['windows']);
+        if ($windows) {
+            $root = str_replace('/', '\\', $root);
+        }
+        if (!file_exists($params[1])) {
+            if (!@touch($params[1])) {
+                return PEAR::raiseError('Could not create "' . $params[1] . '"');
+            }
+        }
+        $params[1] = realpath($params[1]);
+        $config = &new PEAR_Config($params[1], '#no#system#config#', false, false);
+        if ($root{strlen($root) - 1} == '/') {
+            $root = substr($root, 0, strlen($root) - 1);
+        }
+        $config->noRegistry();
+        $config->set('php_dir', $windows ? "$root\\pear\\php" : "$root/pear/php", 'user');
+        $config->set('data_dir', $windows ? "$root\\pear\\data" : "$root/pear/data");
+        $config->set('ext_dir', $windows ? "$root\\pear\\ext" : "$root/pear/ext");
+        $config->set('doc_dir', $windows ? "$root\\pear\\docs" : "$root/pear/docs");
+        $config->set('test_dir', $windows ? "$root\\pear\\tests" : "$root/pear/tests");
+        $config->set('cache_dir', $windows ? "$root\\pear\\cache" : "$root/pear/cache");
+        $config->set('bin_dir', $windows ? "$root\\pear" : "$root/pear");
+        $config->writeConfigFile();
+        $this->_showConfig($config);
+        $this->ui->outputData('Successfully created default configuration file "' . $params[1] . '"',
+            $command);
+    }
+
+    // }}}
+
+    function _showConfig(&$config)
+    {
+        $params = array('user');
+        $keys = $config->getKeys();
+        sort($keys);
+        $channel = 'pear.php.net';
+        $data = array('caption' => 'Configuration (channel ' . $channel . '):');
+        foreach ($keys as $key) {
+            $type = $config->getType($key);
+            $value = $config->get($key, 'user', $channel);
+            if ($type == 'password' && $value) {
+                $value = '********';
+            }
+            if ($value === false) {
+                $value = 'false';
+            } elseif ($value === true) {
+                $value = 'true';
+            }
+            $data['data'][$config->getGroup($key)][] =
+                array($config->getPrompt($key) , $key, $value);
+        }
+        foreach ($config->getLayers() as $layer) {
+            $data['data']['Config Files'][] =
+                array(ucfirst($layer) . ' Configuration File', 'Filename' ,
+                    $config->getConfFile($layer));
+        }
+        
+        $this->ui->outputData($data, 'config-show');
+        return true;
+    }
     // {{{ _checkLayer()
 
     /**
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Config.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Config.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Config.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Config.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+<commands version="1.0">
+ <config-show>
+  <summary>Show All Settings</summary>
+  <function>doConfigShow</function>
+  <shortcut>csh</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>show configuration variables for another channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>[layer]
+Displays all configuration values.  An optional argument
+may be used to tell which configuration layer to display.  Valid
+configuration layers are &quot;user&quot;, &quot;system&quot; and &quot;default&quot;. To display
+configurations for different channels, set the default_channel
+configuration variable and run config-show again.
+</doc>
+ </config-show>
+ <config-get>
+  <summary>Show One Setting</summary>
+  <function>doConfigGet</function>
+  <shortcut>cg</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>show configuration variables for another channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>&lt;parameter&gt; [layer]
+Displays the value of one configuration parameter.  The
+first argument is the name of the parameter, an optional second argument
+may be used to tell which configuration layer to look in.  Valid configuration
+layers are &quot;user&quot;, &quot;system&quot; and &quot;default&quot;.  If no layer is specified, a value
+will be picked from the first layer that defines the parameter, in the order
+just specified.  The configuration value will be retrieved for the channel
+specified by the default_channel configuration variable.
+</doc>
+ </config-get>
+ <config-set>
+  <summary>Change Setting</summary>
+  <function>doConfigSet</function>
+  <shortcut>cs</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>show configuration variables for another channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>&lt;parameter&gt; &lt;value&gt; [layer]
+Sets the value of one configuration parameter.  The first argument is
+the name of the parameter, the second argument is the new value.  Some
+parameters are subject to validation, and the command will fail with
+an error message if the new value does not make sense.  An optional
+third argument may be used to specify in which layer to set the
+configuration parameter.  The default layer is &quot;user&quot;.  The
+configuration value will be set for the current channel, which
+is controlled by the default_channel configuration variable.
+</doc>
+ </config-set>
+ <config-help>
+  <summary>Show Information About Setting</summary>
+  <function>doConfigHelp</function>
+  <shortcut>ch</shortcut>
+  <options />
+  <doc>[parameter]
+Displays help for a configuration parameter.  Without arguments it
+displays help for all configuration parameters.
+</doc>
+ </config-help>
+ <config-create>
+  <summary>Create a Default configuration file</summary>
+  <function>doConfigCreate</function>
+  <shortcut>coc</shortcut>
+  <options>
+   <windows>
+    <shortopt>w</shortopt>
+    <doc>create a config file for a windows install</doc>
+   </windows>
+  </options>
+  <doc>&lt;root path&gt; &lt;filename&gt;
+Create a default configuration file with all directory configuration
+variables set to subdirectories of &lt;root path&gt;, and save it as &lt;filename&gt;.
+This is useful especially for creating a configuration file for a remote
+PEAR installation (using the --remoteconfig option of install, upgrade,
+and uninstall).
+</doc>
+ </config-create>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Install.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Install.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Install.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Install.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,30 +1,44 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Sther Bakken <ssb@php.net>                             |
-// +----------------------------------------------------------------------+
-//
-// $Id: Install.php,v 1.53.2.1 2004/10/19 04:08:42 cellog Exp $
+/**
+ * PEAR_Command_Install (install, upgrade, upgrade-all, uninstall, bundle, run-scripts commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Install.php,v 1.112 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Installer.php";
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
 
 /**
  * PEAR commands for installation or deinstallation/upgrading of
  * packages.
  *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Command_Install extends PEAR_Command_Common
 {
@@ -40,6 +54,10 @@
                     'shortopt' => 'f',
                     'doc' => 'will overwrite newer installed packages',
                     ),
+                'loose' => array(
+                    'shortopt' => 'l',
+                    'doc' => 'do not check for recommended dependency version',
+                    ),
                 'nodeps' => array(
                     'shortopt' => 'n',
                     'doc' => 'ignore dependencies, install anyway',
@@ -63,7 +81,12 @@
                 'installroot' => array(
                     'shortopt' => 'R',
                     'arg' => 'DIR',
-                    'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
+                    'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT), use packagingroot for RPM',
+                    ),
+                'packagingroot' => array(
+                    'shortopt' => 'P',
+                    'arg' => 'DIR',
+                    'doc' => 'root directory used when packaging files, like RPM packaging',
                     ),
                 'ignore-errors' => array(
                     'doc' => 'force install even if there were errors',
@@ -76,8 +99,16 @@
                     'shortopt' => 'o',
                     'doc' => 'install all required dependencies',
                     ),
+                'offline' => array(
+                    'shortopt' => 'O',
+                    'doc' => 'do not attempt to download any urls or contact channels',
+                    ),
+                'pretend' => array(
+                    'shortopt' => 'p',
+                    'doc' => 'Only list the packages that would be downloaded',
+                    ),
                 ),
-            'doc' => '<package> ...
+            'doc' => '[channel/]<package> ...
 Installs one or more PEAR packages.  You can specify a package to
 install in four ways:
 
@@ -90,10 +121,17 @@
 package.xml.  Useful for testing, or for wrapping a PEAR package in
 another package manager such as RPM.
 
-"Package" : queries your configured server
+"Package[-version/state][.tar]" : queries your default channel\'s server
 ({config master_server}) and downloads the newest package with
 the preferred quality/state ({config preferred_state}).
 
+To retrieve Package version 1.1, use "Package-1.1," to retrieve
+Package state beta, use "Package-beta."  To retrieve an uncompressed
+file, append .tar (make sure there is no file by the same name first)
+
+To download a package from another channel, prefix with the channel name like
+"channel/Package"
+
 More than one package may be specified at once.  It is ok to mix these
 four ways of specifying packages.
 '),
@@ -106,6 +144,10 @@
                     'shortopt' => 'f',
                     'doc' => 'overwrite newer installed packages',
                     ),
+                'loose' => array(
+                    'shortopt' => 'l',
+                    'doc' => 'do not check for recommended dependency version',
+                    ),
                 'nodeps' => array(
                     'shortopt' => 'n',
                     'doc' => 'ignore dependencies, upgrade anyway',
@@ -125,7 +167,12 @@
                 'installroot' => array(
                     'shortopt' => 'R',
                     'arg' => 'DIR',
-                    'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
+                    'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT), use packagingroot for RPM',
+                    ),
+                'packagingroot' => array(
+                    'shortopt' => 'P',
+                    'arg' => 'DIR',
+                    'doc' => 'root directory used when packaging files, like RPM packaging',
                     ),
                 'ignore-errors' => array(
                     'doc' => 'force install even if there were errors',
@@ -138,6 +185,14 @@
                     'shortopt' => 'o',
                     'doc' => 'install all required dependencies',
                     ),
+                'offline' => array(
+                    'shortopt' => 'O',
+                    'doc' => 'do not attempt to download any urls or contact channels',
+                    ),
+                'pretend' => array(
+                    'shortopt' => 'p',
+                    'doc' => 'Only list the packages that would be downloaded',
+                    ),
                 ),
             'doc' => '<package> ...
 Upgrades one or more PEAR packages.  See documentation for the
@@ -173,11 +228,14 @@
                 'installroot' => array(
                     'shortopt' => 'R',
                     'arg' => 'DIR',
-                    'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
+                    'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT), use packagingroot for RPM',
                     ),
                 'ignore-errors' => array(
                     'doc' => 'force install even if there were errors',
                     ),
+                'loose' => array(
+                    'doc' => 'do not check for recommended dependency version',
+                    ),
                 ),
             'doc' => '
 Upgrades all packages that have a newer release available.  Upgrades are
@@ -206,10 +264,15 @@
                 'ignore-errors' => array(
                     'doc' => 'force install even if there were errors',
                     ),
+                'offline' => array(
+                    'shortopt' => 'O',
+                    'doc' => 'do not attempt to uninstall remotely',
+                    ),
                 ),
-            'doc' => '<package> ...
+            'doc' => '[channel/]<package> ...
 Uninstalls one or more PEAR packages.  More than one package may be
-specified at once.
+specified at once.  Prefix with channel name to uninstall from a
+channel not in your default channel ({config default_channel})
 '),
         'bundle' => array(
             'summary' => 'Unpacks a Pecl Package',
@@ -230,6 +293,15 @@
 Unpacks a Pecl Package into the selected location. It will download the
 package if needed.
 '),
+        'run-scripts' => array(
+            'summary' => 'Run Post-Install Scripts bundled with a package',
+            'function' => 'doRunScripts',
+            'shortcut' => 'rs',
+            'options' => array(
+            ),
+            'doc' => '<package>
+Run post-installation scripts in package <package>, if any exist.
+'),
     );
 
     // }}}
@@ -247,82 +319,250 @@
 
     // }}}
 
+    /**
+     * For unit testing purposes
+     */
+    function &getDownloader(&$ui, $options, &$config)
+    {
+        if (!class_exists('PEAR_Downloader')) {
+            require_once 'PEAR/Downloader.php';
+        }
+        $a = &new PEAR_Downloader($ui, $options, $config);
+        return $a;
+    }
+
+    /**
+     * For unit testing purposes
+     */
+    function &getInstaller(&$ui)
+    {
+        if (!class_exists('PEAR_Installer')) {
+            require_once 'PEAR/Installer.php';
+        }
+        $a = &new PEAR_Installer($ui);
+        return $a;
+    }
+
     // {{{ doInstall()
 
     function doInstall($command, $options, $params)
     {
-        require_once 'PEAR/Downloader.php';
         if (empty($this->installer)) {
-            $this->installer = &new PEAR_Installer($this->ui);
+            $this->installer = &$this->getInstaller($this->ui);
         }
         if ($command == 'upgrade') {
             $options['upgrade'] = true;
         }
+        if (isset($options['installroot']) && isset($options['packagingroot'])) {
+            return $this->raiseError('ERROR: cannot use both --installroot and --packagingroot');
+        }
+        if (isset($options['packagingroot']) && $this->config->get('verbose') > 2) {
+            $this->ui->outputData('using package root: ' . $options['packagingroot']);
+        }
+        $reg = &$this->config->getRegistry();
         if ($command == 'upgrade-all') {
-            include_once "PEAR/Remote.php";
             $options['upgrade'] = true;
-            $remote = &new PEAR_Remote($this->config);
-            $state = $this->config->get('preferred_state');
-            if (empty($state) || $state == 'any') {
-                $latest = $remote->call("package.listLatestReleases");
-            } else {
-                $latest = $remote->call("package.listLatestReleases", $state);
-            }
-            if (PEAR::isError($latest)) {
-                return $latest;
-            }
-            $reg = new PEAR_Registry($this->config->get('php_dir'));
-            $installed = array_flip($reg->listPackages());
+            $reg = &$this->config->getRegistry();
+            $savechannel = $this->config->get('default_channel');
             $params = array();
-            foreach ($latest as $package => $info) {
-                $package = strtolower($package);
-                if (!isset($installed[$package])) {
-                    // skip packages we don't have installed
+            foreach ($reg->listChannels() as $channel) {
+                if ($channel == '__uri') {
                     continue;
                 }
-                $inst_version = $reg->packageInfo($package, 'version');
-                if (version_compare("$info[version]", "$inst_version", "le")) {
-                    // installed version is up-to-date
+                $this->config->set('default_channel', $channel);
+                $chan = &$reg->getChannel($channel);
+                if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+                      $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+                    $dorest = true;
+                    unset($remote);
+                } else {
+                    $dorest = false;
+                    $remote = &$this->config->getRemote($this->config);
+                }
+                $state = $this->config->get('preferred_state');
+                $installed = array_flip($reg->listPackages($channel));
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                if ($dorest) {
+                    $rest = &$this->config->getREST('1.0', array());
+                    $latest = $rest->listLatestUpgrades($base, $state, $installed, $channel, $reg);
+                } else {
+                    if (empty($state) || $state == 'any') {
+                        $latest = $remote->call("package.listLatestReleases");
+                    } else {
+                        $latest = $remote->call("package.listLatestReleases", $state);
+                    }
+                }
+                PEAR::staticPopErrorHandling();
+                if (PEAR::isError($latest) || !is_array($latest)) {
                     continue;
                 }
-                $params[] = $package;
-                $this->ui->outputData(array('data' => "Will upgrade $package"), $command);
+                foreach ($latest as $package => $info) {
+                    $package = strtolower($package);
+                    if (!isset($installed[$package])) {
+                        // skip packages we don't have installed
+                        continue;
+                    }
+                    $inst_version = $reg->packageInfo($package, 'version', $channel);
+                    if (version_compare("$info[version]", "$inst_version", "le")) {
+                        // installed version is up-to-date
+                        continue;
+                    }
+                    $params[] = $reg->parsedPackageNameToString(array('package' => $package,
+                        'channel' => $channel));
+                    $this->ui->outputData(array('data' => "Will upgrade $package"), $command);
+                }
             }
+            $this->config->set('default_channel', $savechannel);
         }
-        $this->downloader = &new PEAR_Downloader($this->ui, $options, $this->config);
+        $this->downloader = &$this->getDownloader($this->ui, $options, $this->config);
         $errors = array();
         $downloaded = array();
-        $this->downloader->download($params);
+        $downloaded = &$this->downloader->download($params);
         $errors = $this->downloader->getErrorMsgs();
         if (count($errors)) {
-            $err['data'] = array($errors);
+            foreach ($errors as $error) {
+                $err['data'][] = array($error);
+            }
             $err['headline'] = 'Install Errors';
             $this->ui->outputData($err);
-            return $this->raiseError("$command failed");
+            if (!count($downloaded)) {
+                return $this->raiseError("$command failed");
+            }
         }
-        $downloaded = $this->downloader->getDownloadedPackages();
-        $this->installer->sortPkgDeps($downloaded);
-        foreach ($downloaded as $pkg) {
-            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-            $info = $this->installer->install($pkg['file'], $options, $this->config);
-            PEAR::popErrorHandling();
+        $data = array(
+            'headline' => 'Packages that would be Installed'
+        );
+        if (isset($options['pretend'])) {
+            foreach ($downloaded as $package) {
+                $data['data'][] = array($reg->parsedPackageNameToString($package->getParsedPackage()));
+            }
+            $this->ui->outputData($data, 'pretend');
+            return true;
+        }
+        $this->installer->setOptions($options);
+        $this->installer->sortPackagesForInstall($downloaded);
+        if (PEAR::isError($err = $this->installer->setDownloadedPackages($downloaded))) {
+            $this->raiseError($err->getMessage());
+            return true;
+        }
+        $extrainfo = array();
+        foreach ($downloaded as $param) {
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $info = $this->installer->install($param, $options);
+            PEAR::staticPopErrorHandling();
             if (PEAR::isError($info)) {
-                $this->ui->outputData('ERROR: ' .$info->getMessage());
-                continue;
+                $oldinfo = $info;
+                $pkg = &$param->getPackageFile();
+                if ($info->getCode() != PEAR_INSTALLER_NOBINARY) {
+                    if (!($info = $pkg->installBinary($this->installer))) {
+                        $this->ui->outputData('ERROR: ' .$oldinfo->getMessage());
+                        continue;
+                    }
+                    // we just installed a different package than requested,
+                    // let's change the param and info so that the rest of this works
+                    $param = $info[0];
+                    $info = $info[1];
+                }
             }
             if (is_array($info)) {
+                if ($param->getPackageType() == 'extsrc' ||
+                      $param->getPackageType() == 'extbin') {
+                    $pkg = &$param->getPackageFile();
+                    if ($instbin = $pkg->getInstalledBinary()) {
+                        $instpkg = &$reg->getPackage($instbin, $pkg->getChannel());
+                    } else {
+                        $instpkg = &$reg->getPackage($pkg->getPackage(), $pkg->getChannel());
+                    }
+                    foreach ($instpkg->getFilelist() as $name => $atts) {
+                        $pinfo = pathinfo($atts['installed_as']);
+                        if (!isset($pinfo['extension']) ||
+                              in_array($pinfo['extension'], array('c', 'h'))) {
+                            continue; // make sure we don't match php_blah.h
+                        }
+                        if ((strpos($pinfo['basename'], 'php_') === 0 &&
+                              $pinfo['extension'] == 'dll') ||
+                              // most unices
+                              $pinfo['extension'] == 'so' ||
+                              // hp-ux
+                              $pinfo['extension'] == 'sl') {
+                            $extrainfo[] = 'You should add "extension=' . $pinfo['basename']
+                                . '" to php.ini';
+                            break;
+                        }
+                    }
+                }
                 if ($this->config->get('verbose') > 0) {
-                    $label = "$info[package] $info[version]";
+                    $channel = $param->getChannel();
+                    $label = $reg->parsedPackageNameToString(
+                        array(
+                            'channel' => $channel,
+                            'package' => $param->getPackage(),
+                            'version' => $param->getVersion(),
+                        ));
                     $out = array('data' => "$command ok: $label");
                     if (isset($info['release_warnings'])) {
                         $out['release_warnings'] = $info['release_warnings'];
                     }
                     $this->ui->outputData($out, $command);
+                    if (!isset($options['register-only']) && !isset($options['offline'])) {
+                        if ($this->config->isDefinedLayer('ftp')) {
+                            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                            $info = $this->installer->ftpInstall($param);
+                            PEAR::staticPopErrorHandling();
+                            if (PEAR::isError($info)) {
+                                $this->ui->outputData($info->getMessage());
+                                $this->ui->outputData("remote install failed: $label");
+                            } else {
+                                $this->ui->outputData("remote install ok: $label");
+                            }
+                        }
+                    }
+                }
+                $deps = $param->getDeps();
+                if ($deps) {
+                    if (isset($deps['group'])) {
+                        $groups = $deps['group'];
+                        if (!isset($groups[0])) {
+                            $groups = array($groups);
+                        }
+                        foreach ($groups as $group) {
+                            if ($group['attribs']['name'] == 'default') {
+                                // default group is always installed, unless the user
+                                // explicitly chooses to install another group
+                                continue;
+                            }
+                            $this->ui->outputData($param->getPackage() . ': Optional feature ' .
+                                $group['attribs']['name'] . ' available (' .
+                                $group['attribs']['hint'] . ')');
+                        }
+                        $extrainfo[] = 'To install use "pear install ' .
+                            $param->getPackage() . '#featurename"';
+                    }
+                }
+                if (isset($options['installroot'])) {
+                    $reg = &$this->config->getRegistry();
+                }
+                $pkg = &$reg->getPackage($param->getPackage(), $param->getChannel());
+                $pkg->setConfig($this->config);
+                if ($list = $pkg->listPostinstallScripts()) {
+                    $pn = $reg->parsedPackageNameToString(array('channel' =>
+                        $param->getChannel(), 'package' => $param->getPackage()), true);
+                    $extrainfo[] = $pn . ' has post-install scripts:';
+                    foreach ($list as $file) {
+                        $extrainfo[] = $file;
+                    }
+                    $extrainfo[] = 'Use "pear run-scripts ' . $pn . '" to run';
+                    $extrainfo[] = 'DO NOT RUN SCRIPTS FROM UNTRUSTED SOURCES';
                 }
             } else {
                 return $this->raiseError("$command failed");
             }
         }
+        if (count($extrainfo)) {
+            foreach ($extrainfo as $info) {
+                $this->ui->outputData($info);
+            }
+        }
         return true;
     }
 
@@ -332,35 +572,111 @@
     function doUninstall($command, $options, $params)
     {
         if (empty($this->installer)) {
-            $this->installer = &new PEAR_Installer($this->ui);
+            $this->installer = &$this->getInstaller($this->ui);
+        }
+        if (isset($options['remoteconfig'])) {
+            $e = $this->config->readFTPConfigFile($options['remoteconfig']);
+            if (!PEAR::isError($e)) {
+                $this->installer->setConfig($this->config);
+            }
         }
         if (sizeof($params) < 1) {
             return $this->raiseError("Please supply the package(s) you want to uninstall");
         }
-        include_once 'PEAR/Registry.php';
-        $reg = new PEAR_Registry($this->config->get('php_dir'));
+        $reg = &$this->config->getRegistry();
         $newparams = array();
         $badparams = array();
         foreach ($params as $pkg) {
-            $info = $reg->packageInfo($pkg);
+            $channel = $this->config->get('default_channel');
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $parsed = $reg->parsePackageName($pkg, $channel);
+            PEAR::staticPopErrorHandling();
+            if (!$parsed || PEAR::isError($parsed)) {
+                $badparams[] = $pkg;
+                continue;
+            }
+            $package = $parsed['package'];
+            $channel = $parsed['channel'];
+            $info = &$reg->getPackage($package, $channel);
+            if ($info === null &&
+                 ($channel == 'pear.php.net' || $channel == 'pecl.php.net')) {
+                // make sure this isn't a package that has flipped from pear to pecl but
+                // used a package.xml 1.0
+                $testc = ($channel == 'pear.php.net') ? 'pecl.php.net' : 'pear.php.net';
+                $info = &$reg->getPackage($package, $testc);
+                if ($info !== null) {
+                    $channel = $testc;
+                }
+            }
             if ($info === null) {
                 $badparams[] = $pkg;
             } else {
-                $newparams[] = $info;
+                $newparams[] = &$info;
+                // check for binary packages (this is an alias for those packages if so)
+                if ($installedbinary = $info->getInstalledBinary()) {
+                    $this->ui->log('adding binary package ' .
+                        $reg->parsedPackageNameToString(array('channel' => $channel,
+                            'package' => $installedbinary), true));
+                    $newparams[] = &$reg->getPackage($installedbinary, $channel);
+                }
+                // add the contents of a dependency group to the list of installed packages
+                if (isset($parsed['group'])) {
+                    $group = $info->getDependencyGroup($parsed['group']);
+                    if ($group) {
+                        $installed = &$reg->getInstalledGroup($group);
+                        if ($installed) {
+                            foreach ($installed as $i => $p) {
+                                $newparams[] = &$installed[$i];
+                            }
+                        }
+                    }
+                }
             }
         }
-        $this->installer->sortPkgDeps($newparams, true);
-        $params = array();
-        foreach($newparams as $info) {
-            $params[] = $info['info']['package'];
-        }
+        $err = $this->installer->sortPackagesForUninstall($newparams);
+        if (PEAR::isError($err)) {
+            $this->ui->outputData($err->getMessage(), $command);
+            return true;
+        }
+        $params = $newparams;
+        // twist this to use it to check on whether dependent packages are also being uninstalled
+        // for circular dependencies like subpackages
+        $this->installer->setUninstallPackages($newparams);
         $params = array_merge($params, $badparams);
         foreach ($params as $pkg) {
-            if ($this->installer->uninstall($pkg, $options)) {
+            $this->installer->pushErrorHandling(PEAR_ERROR_RETURN);
+            if ($err = $this->installer->uninstall($pkg, $options)) {
+                $this->installer->popErrorHandling();
+                if (PEAR::isError($err)) {
+                    $this->ui->outputData($err->getMessage(), $command);
+                    continue;
+                }
+                $savepkg = $pkg;
                 if ($this->config->get('verbose') > 0) {
+                    if (is_object($pkg)) {
+                        $pkg = $reg->parsedPackageNameToString($pkg);
+                    }
                     $this->ui->outputData("uninstall ok: $pkg", $command);
                 }
+                if (!isset($options['offline']) && is_object($savepkg) &&
+                      defined('PEAR_REMOTEINSTALL_OK')) {
+                    if ($this->config->isDefinedLayer('ftp')) {
+                        $this->installer->pushErrorHandling(PEAR_ERROR_RETURN);
+                        $info = $this->installer->ftpUninstall($savepkg);
+                        $this->installer->popErrorHandling();
+                        if (PEAR::isError($info)) {
+                            $this->ui->outputData($info->getMessage());
+                            $this->ui->outputData("remote uninstall failed: $pkg");
+                        } else {
+                            $this->ui->outputData("remote uninstall ok: $pkg");
+                        }
+                    }
+                }
             } else {
+                $this->installer->popErrorHandling();
+                if (is_object($pkg)) {
+                    $pkg = $reg->parsedPackageNameToString($pkg);
+                }
                 return $this->raiseError("uninstall failed: $pkg");
             }
         }
@@ -379,66 +695,12 @@
 
     function doBundle($command, $options, $params)
     {
-        if (empty($this->installer)) {
-            $this->installer = &new PEAR_Downloader($this->ui);
-        }
-        $installer = &$this->installer;
+        $downloader = &$this->getDownloader($this->ui, array('force' => true, 'nodeps' => true,
+            'soft' => true), $this->config);
+        $reg = &$this->config->getRegistry();
         if (sizeof($params) < 1) {
             return $this->raiseError("Please supply the package you want to bundle");
         }
-        $pkgfile = $params[0];
-        $need_download = false;
-        if (preg_match('#^(http|ftp)://#', $pkgfile)) {
-            $need_download = true;
-        } elseif (!@is_file($pkgfile)) {
-            if ($installer->validPackageName($pkgfile)) {
-                $pkgfile = $installer->getPackageDownloadUrl($pkgfile);
-                $need_download = true;
-            } else {
-                if (strlen($pkgfile)) {
-                    return $this->raiseError("Could not open the package file: $pkgfile");
-                } else {
-                    return $this->raiseError("No package file given");
-                }
-            }
-        }
-
-        // Download package -----------------------------------------------
-        if ($need_download) {
-            $downloaddir = $installer->config->get('download_dir');
-            if (empty($downloaddir)) {
-                if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
-                    return $downloaddir;
-                }
-                $installer->log(2, '+ tmp dir created at ' . $downloaddir);
-            }
-            $callback = $this->ui ? array(&$installer, '_downloadCallback') : null;
-            $file = $installer->downloadHttp($pkgfile, $this->ui, $downloaddir, $callback);
-            if (PEAR::isError($file)) {
-                return $this->raiseError($file);
-            }
-            $pkgfile = $file;
-        }
-
-       // Parse xml file -----------------------------------------------
-        $pkginfo = $installer->infoFromTgzFile($pkgfile);
-        if (PEAR::isError($pkginfo)) {
-            return $this->raiseError($pkginfo);
-        }
-        $installer->validatePackageInfo($pkginfo, $errors, $warnings);
-        // XXX We allow warnings, do we have to do it?
-        if (count($errors)) {
-             if (empty($options['force'])) {
-                return $this->raiseError("The following errors where found:\n".
-                                                 implode("\n", $errors));
-            } else {
-                $this->log(0, "warning : the following errors were found:\n".
-                           implode("\n", $errors));
-            }
-        }
-        $pkgname = $pkginfo['package'];
-
-        // Unpacking -------------------------------------------------
 
         if (isset($options['destination'])) {
             if (!is_dir($options['destination'])) {
@@ -453,12 +715,22 @@
                 $dest = $pwd;
             }
         }
+        $downloader->setDownloadDir($dest);
+        $result = &$downloader->download(array($params[0]));
+        if (PEAR::isError($result)) {
+            return $result;
+        }
+        $pkgfile = &$result[0]->getPackageFile();
+        $pkgname = $pkgfile->getName();
+        $pkgversion = $pkgfile->getVersion();
+
+        // Unpacking -------------------------------------------------
         $dest .= DIRECTORY_SEPARATOR . $pkgname;
-        $orig = $pkgname . '-' . $pkginfo['version'];
+        $orig = $pkgname . '-' . $pkgversion;
 
-        $tar = new Archive_Tar($pkgfile);
+        $tar = &new Archive_Tar($pkgfile->getArchiveFile());
         if (!@$tar->extractModify($dest, $orig)) {
-            return $this->raiseError("unable to unpack $pkgfile");
+            return $this->raiseError('unable to unpack ' . $pkgfile->getArchiveFile());
         }
         $this->ui->outputData("Package ready at '$dest'");
     // }}}
@@ -466,5 +738,27 @@
 
     // }}}
 
+    function doRunScripts($command, $options, $params)
+    {
+        if (!isset($params[0])) {
+            return $this->raiseError('run-scripts expects 1 parameter: a package name');
+        }
+        $reg = &$this->config->getRegistry();
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $parsed = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($parsed)) {
+            return $this->raiseError($parsed);
+        }
+        $package = &$reg->getPackage($parsed['package'], $parsed['channel']);
+        if (is_object($package)) {
+            $package->setConfig($this->config);
+            $package->runPostinstallScripts();
+        } else {
+            return $this->raiseError('Could not retrieve package "' . $params[0] . '" from registry');
+        }
+        $this->ui->outputData('Install scripts complete', $command);
+        return true;
+    }
 }
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Install.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Install.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Install.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Install.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,254 @@
+<commands version="1.0">
+ <install>
+  <summary>Install Package</summary>
+  <function>doInstall</function>
+  <shortcut>i</shortcut>
+  <options>
+   <force>
+    <shortopt>f</shortopt>
+    <doc>will overwrite newer installed packages</doc>
+   </force>
+   <loose>
+    <shortopt>l</shortopt>
+    <doc>do not check for recommended dependency version</doc>
+   </loose>
+   <nodeps>
+    <shortopt>n</shortopt>
+    <doc>ignore dependencies, install anyway</doc>
+   </nodeps>
+   <register-only>
+    <shortopt>r</shortopt>
+    <doc>do not install files, only register the package as installed</doc>
+   </register-only>
+   <soft>
+    <shortopt>s</shortopt>
+    <doc>soft install, fail silently, or upgrade if already installed</doc>
+   </soft>
+   <nobuild>
+    <shortopt>B</shortopt>
+    <doc>don&apos;t build C extensions</doc>
+   </nobuild>
+   <nocompress>
+    <shortopt>Z</shortopt>
+    <doc>request uncompressed files when downloading</doc>
+   </nocompress>
+   <installroot>
+    <shortopt>R</shortopt>
+    <arg>DIR</arg>
+    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
+   </installroot>
+   <ignore-errors>
+    <doc>force install even if there were errors</doc>
+   </ignore-errors>
+   <alldeps>
+    <shortopt>a</shortopt>
+    <doc>install all required and optional dependencies</doc>
+   </alldeps>
+   <onlyreqdeps>
+    <shortopt>o</shortopt>
+    <doc>install all required dependencies</doc>
+   </onlyreqdeps>
+   <offline>
+    <shortopt>O</shortopt>
+    <doc>do not attempt to download any urls or contact channels</doc>
+   </offline>
+   <pretend>
+    <shortopt>p</shortopt>
+    <doc>Only list the packages that would be downloaded</doc>
+   </pretend>
+  </options>
+  <doc>[channel/]&lt;package&gt; ...
+Installs one or more PEAR packages.  You can specify a package to
+install in four ways:
+
+&quot;Package-1.0.tgz&quot; : installs from a local file
+
+&quot;http://example.com/Package-1.0.tgz&quot; : installs from
+anywhere on the net.
+
+&quot;package.xml&quot; : installs the package described in
+package.xml.  Useful for testing, or for wrapping a PEAR package in
+another package manager such as RPM.
+
+&quot;Package[-version/state][.tar]&quot; : queries your default channel&apos;s server
+({config master_server}) and downloads the newest package with
+the preferred quality/state ({config preferred_state}).
+
+To retrieve Package version 1.1, use &quot;Package-1.1,&quot; to retrieve
+Package state beta, use &quot;Package-beta.&quot;  To retrieve an uncompressed
+file, append .tar (make sure there is no file by the same name first)
+
+To download a package from another channel, prefix with the channel name like
+&quot;channel/Package&quot;
+
+More than one package may be specified at once.  It is ok to mix these
+four ways of specifying packages.
+</doc>
+ </install>
+ <upgrade>
+  <summary>Upgrade Package</summary>
+  <function>doInstall</function>
+  <shortcut>up</shortcut>
+  <options>
+   <force>
+    <shortopt>f</shortopt>
+    <doc>overwrite newer installed packages</doc>
+   </force>
+   <loose>
+    <shortopt>l</shortopt>
+    <doc>do not check for recommended dependency version</doc>
+   </loose>
+   <nodeps>
+    <shortopt>n</shortopt>
+    <doc>ignore dependencies, upgrade anyway</doc>
+   </nodeps>
+   <register-only>
+    <shortopt>r</shortopt>
+    <doc>do not install files, only register the package as upgraded</doc>
+   </register-only>
+   <nobuild>
+    <shortopt>B</shortopt>
+    <doc>don&apos;t build C extensions</doc>
+   </nobuild>
+   <nocompress>
+    <shortopt>Z</shortopt>
+    <doc>request uncompressed files when downloading</doc>
+   </nocompress>
+   <installroot>
+    <shortopt>R</shortopt>
+    <arg>DIR</arg>
+    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
+   </installroot>
+   <ignore-errors>
+    <doc>force install even if there were errors</doc>
+   </ignore-errors>
+   <alldeps>
+    <shortopt>a</shortopt>
+    <doc>install all required and optional dependencies</doc>
+   </alldeps>
+   <onlyreqdeps>
+    <shortopt>o</shortopt>
+    <doc>install all required dependencies</doc>
+   </onlyreqdeps>
+   <offline>
+    <shortopt>O</shortopt>
+    <doc>do not attempt to download any urls or contact channels</doc>
+   </offline>
+   <pretend>
+    <shortopt>p</shortopt>
+    <doc>Only list the packages that would be downloaded</doc>
+   </pretend>
+  </options>
+  <doc>&lt;package&gt; ...
+Upgrades one or more PEAR packages.  See documentation for the
+&quot;install&quot; command for ways to specify a package.
+
+When upgrading, your package will be updated if the provided new
+package has a higher version number (use the -f option if you need to
+upgrade anyway).
+
+More than one package may be specified at once.
+</doc>
+ </upgrade>
+ <upgrade-all>
+  <summary>Upgrade All Packages</summary>
+  <function>doInstall</function>
+  <shortcut>ua</shortcut>
+  <options>
+   <nodeps>
+    <shortopt>n</shortopt>
+    <doc>ignore dependencies, upgrade anyway</doc>
+   </nodeps>
+   <register-only>
+    <shortopt>r</shortopt>
+    <doc>do not install files, only register the package as upgraded</doc>
+   </register-only>
+   <nobuild>
+    <shortopt>B</shortopt>
+    <doc>don&apos;t build C extensions</doc>
+   </nobuild>
+   <nocompress>
+    <shortopt>Z</shortopt>
+    <doc>request uncompressed files when downloading</doc>
+   </nocompress>
+   <installroot>
+    <shortopt>R</shortopt>
+    <arg>DIR</arg>
+    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
+   </installroot>
+   <ignore-errors>
+    <doc>force install even if there were errors</doc>
+   </ignore-errors>
+   <loose>
+    <doc>do not check for recommended dependency version</doc>
+   </loose>
+  </options>
+  <doc>
+Upgrades all packages that have a newer release available.  Upgrades are
+done only if there is a release available of the state specified in
+&quot;preferred_state&quot; (currently {config preferred_state}), or a state considered
+more stable.
+</doc>
+ </upgrade-all>
+ <uninstall>
+  <summary>Un-install Package</summary>
+  <function>doUninstall</function>
+  <shortcut>un</shortcut>
+  <options>
+   <nodeps>
+    <shortopt>n</shortopt>
+    <doc>ignore dependencies, uninstall anyway</doc>
+   </nodeps>
+   <register-only>
+    <shortopt>r</shortopt>
+    <doc>do not remove files, only register the packages as not installed</doc>
+   </register-only>
+   <installroot>
+    <shortopt>R</shortopt>
+    <arg>DIR</arg>
+    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
+   </installroot>
+   <ignore-errors>
+    <doc>force install even if there were errors</doc>
+   </ignore-errors>
+   <offline>
+    <shortopt>O</shortopt>
+    <doc>do not attempt to uninstall remotely</doc>
+   </offline>
+  </options>
+  <doc>[channel/]&lt;package&gt; ...
+Uninstalls one or more PEAR packages.  More than one package may be
+specified at once.  Prefix with channel name to uninstall from a
+channel not in your default channel ({config default_channel})
+</doc>
+ </uninstall>
+ <bundle>
+  <summary>Unpacks a Pecl Package</summary>
+  <function>doBundle</function>
+  <shortcut>bun</shortcut>
+  <options>
+   <destination>
+    <shortopt>d</shortopt>
+    <arg>DIR</arg>
+    <doc>Optional destination directory for unpacking (defaults to current path or &quot;ext&quot; if exists)</doc>
+   </destination>
+   <force>
+    <shortopt>f</shortopt>
+    <doc>Force the unpacking even if there were errors in the package</doc>
+   </force>
+  </options>
+  <doc>&lt;package&gt;
+Unpacks a Pecl Package into the selected location. It will download the
+package if needed.
+</doc>
+ </bundle>
+ <run-scripts>
+  <summary>Run Post-Install Scripts bundled with a package</summary>
+  <function>doRunScripts</function>
+  <shortcut>rs</shortcut>
+  <options />
+  <doc>&lt;package&gt;
+Run post-installation scripts in package &lt;package&gt;, if any exist.
+</doc>
+ </run-scripts>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,32 +1,41 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Alexander Merz <alexmerz@php.net>                            |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Mirror.php,v 1.5 2004/03/18 12:23:57 mj Exp $
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Command.php";
-require_once "PEAR/Remote.php";
-require_once "PEAR.php";
+/**
+ * PEAR_Command_Mirror (download-all command)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Alexander Merz <alexmerz@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Mirror.php,v 1.16 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.2.0
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
 
 /**
  * PEAR commands for providing file mirrors
  *
+ * @category   pear
+ * @package    PEAR
+ * @author     Alexander Merz <alexmerz@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.2.0
  */
 class PEAR_Command_Mirror extends PEAR_Command_Common
 {
@@ -34,13 +43,21 @@
 
     var $commands = array(
         'download-all' => array(
-            'summary' => 'Downloads each available package from master_server',
+            'summary' => 'Downloads each available package from the default channel',
             'function' => 'doDownloadAll',
             'shortcut' => 'da',
-            'options' => array(),
+            'options' => array(
+                'channel' =>
+                    array(
+                    'shortopt' => 'c',
+                    'doc' => 'specify a channel other than the default channel',
+                    'arg' => 'CHAN',
+                    ),
+                ),
             'doc' => '
-	    Requests a list of available packages from the package server
-	    (master_server) and downloads them to current working directory'
+Requests a list of available packages from the default channel ({config default_channel})
+and downloads them to current working directory.  Note: only
+packages within preferred_state ({config preferred_state}) will be downloaded'
             ),
         );
 
@@ -62,6 +79,15 @@
 
     // }}}
 
+    /**
+     * For unit-testing
+     */
+    function &factory($a)
+    {
+        $a = &PEAR_Command::factory($a, $this->config);
+        return $a;
+    }
+
     // {{{ doDownloadAll()
     /**
     * retrieves a list of avaible Packages from master server
@@ -76,24 +102,44 @@
     */
     function doDownloadAll($command, $options, $params)
     {
-        $this->config->set("php_dir", "."); 
-        $remote = &new PEAR_Remote($this->config);
-        $remoteInfo = $remote->call("package.listAll");
+        $savechannel = $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        $channel = isset($options['channel']) ? $options['channel'] :
+            $this->config->get('default_channel');
+        if (!$reg->channelExists($channel)) {
+            $this->config->set('default_channel', $savechannel);
+            return $this->raiseError('Channel "' . $channel . '" does not exist');
+        }
+        $this->config->set('default_channel', $channel);
+        $this->ui->outputData('Using Channel ' . $this->config->get('default_channel'));
+        $chan = $reg->getChannel($channel);
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', array());
+            $remoteInfo = array_flip($rest->listPackages($base));
+        } else {
+            $remote = &$this->config->getRemote();
+            $stable = ($this->config->get('preferred_state') == 'stable');
+            $remoteInfo = $remote->call("package.listAll", true, $stable, false);
+        }
         if (PEAR::isError($remoteInfo)) {
             return $remoteInfo;
         }
-        $cmd = &PEAR_Command::factory("download", $this->config);
+        $cmd = &$this->factory("download");
         if (PEAR::isError($cmd)) {
             return $cmd;
         }
-        foreach ($remoteInfo as $pkgn => $pkg) {
-            /**
-             * Error handling not neccesary, because already done by 
-             * the download command
-             */
-            $cmd->run("download", array(), array($pkgn));
+        /**
+         * Error handling not necessary, because already done by 
+         * the download command
+         */
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $err = $cmd->run('download', array('downloadonly' => true), array_keys($remoteInfo));
+        PEAR::staticPopErrorHandling();
+        $this->config->set('default_channel', $savechannel);
+        if (PEAR::isError($err)) {
+            $this->ui->outputData($err->getMessage());
         }
-
         return true;
     }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Mirror.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,18 @@
+<commands version="1.0">
+ <download-all>
+  <summary>Downloads each available package from the default channel</summary>
+  <function>doDownloadAll</function>
+  <shortcut>da</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>specify a channel other than the default channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>
+Requests a list of available packages from the default channel ({config default_channel})
+and downloads them to current working directory.  Note: only
+packages within preferred_state ({config preferred_state}) will be downloaded</doc>
+ </download-all>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Package.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Package.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Package.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Package.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,28 +1,48 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |          Martin Jansen <mj@php.net>                                  |
-// |          Greg Beaver <cellog@php.net>                                |
-// +----------------------------------------------------------------------+
-//
-// $Id: Package.php,v 1.61.2.5 2004/11/09 19:56:57 cellog Exp $
-
-require_once 'PEAR/Common.php';
+/**
+ * PEAR_Command_Package (package, package-validate, cvsdiff, cvstag, package-dependencies,
+ * sign, makerpm, convert commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Package.php,v 1.115 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
 require_once 'PEAR/Command/Common.php';
 
+/**
+ * PEAR commands for login/logout
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+
 class PEAR_Command_Package extends PEAR_Command_Common
 {
     // {{{ properties
@@ -42,9 +62,13 @@
                     'doc' => 'Print the name of the packaged file.',
                     ),
                 ),
-            'doc' => '[descfile]
+            'doc' => '[descfile] [descfile2]
 Creates a PEAR package from its description file (usually called
-package.xml).
+package.xml).  If a second packagefile is passed in, then
+the packager will check to make sure that one is a package.xml
+version 1.0, and the other is a package.xml version 2.0.  The
+package.xml version 1.0 will be saved as "package.xml" in the archive,
+and the other as "package2.xml" in the archive"
 '
             ),
         'package-validate' => array(
@@ -144,27 +168,17 @@
                     'doc' => 'Don\'t do anything, just pretend',
                     ),
                 ),
-            'doc' => '<package.xml>
+            'doc' => '<package.xml> [files...]
 Sets a CVS tag on all files in a package.  Use this command after you have
 packaged a distribution tarball with the "package" command to tag what
 revisions of what files were in that release.  If need to fix something
 after running cvstag once, but before the tarball is released to the public,
 use the "slide" option to move the release tag.
+
+to include files (such as a second package.xml, or tests not included in the
+release), pass them as additional parameters.
 ',
             ),
-        'run-tests' => array(
-            'summary' => 'Run Regression Tests',
-            'function' => 'doRunTests',
-            'shortcut' => 'rt',
-            'options' => array(
-                'recur' => array(
-                    'shortopt' => 'r',
-                    'doc' => 'Run tests in child directories, recursively.  4 dirs deep maximum',
-                )
-            ),
-            'doc' => '[testfile|dir ...]
-Run regression tests with PHP\'s regression testing script (run-tests.php).',
-            ),
         'package-dependencies' => array(
             'summary' => 'Show package dependencies',
             'function' => 'doPackageDependencies',
@@ -211,6 +225,24 @@
 Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
 ',
             ),
+        'convert' => array(
+            'summary' => 'Convert a package.xml 1.0 to package.xml 2.0 format',
+            'function' => 'doConvert',
+            'shortcut' => 'c2',
+            'options' => array(
+                'flat' => array(
+                    'shortopt' => 'f',
+                    'doc' => 'do not beautify the filelist.',
+                    ),
+                ),
+            'doc' => '[descfile] [descfile2]
+Converts a package.xml in 1.0 format into a package.xml
+in 2.0 format.  The new file will be named package2.xml by default,
+and package.xml will be used as the old file by default.
+This is not the most intelligent conversion, and should only be
+used for automated conversion or learning the format.
+'
+            ),
         );
 
     var $output;
@@ -250,33 +282,54 @@
     }
 
     // }}}
+    function &getPackager()
+    {
+        if (!class_exists('PEAR_Packager')) {
+            require_once 'PEAR/Packager.php';
+        }
+        $a = &new PEAR_Packager;
+        return $a;
+    }
+
+    function &getPackageFile($config, $debug = false, $tmpdir = null)
+    {
+        if (!class_exists('PEAR_Common')) {
+            require_once 'PEAR/Common.php';
+        }
+        if (!class_exists('PEAR/PackageFile.php')) {
+            require_once 'PEAR/PackageFile.php';
+        }
+        $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
+        $common = new PEAR_Common;
+        $common->ui = $this->ui;
+        $a->setLogger($common);
+        return $a;
+    }
     // {{{ doPackage()
 
     function doPackage($command, $options, $params)
     {
         $this->output = '';
-        include_once 'PEAR/Packager.php';
-        if (sizeof($params) < 1) {
-            $params[0] = "package.xml";
-        }
         $pkginfofile = isset($params[0]) ? $params[0] : 'package.xml';
-        $packager =& new PEAR_Packager();
-        $err = $warn = array();
-        $dir = dirname($pkginfofile);
+        $pkg2 = isset($params[1]) ? $params[1] : null;
+        if (!$pkg2 && !isset($params[0])) {
+            if (file_exists('package2.xml')) {
+                $pkg2 = 'package2.xml';
+            }
+        }
+        $packager = &$this->getPackager();
         $compress = empty($options['nocompress']) ? true : false;
-        $result = $packager->package($pkginfofile, $compress);
+        $result = $packager->package($pkginfofile, $compress, $pkg2);
         if (PEAR::isError($result)) {
-            $this->ui->outputData($this->output, $command);
             return $this->raiseError($result);
         }
         // Don't want output, only the package file name just created
         if (isset($options['showname'])) {
             $this->output = $result;
         }
-        if (PEAR::isError($result)) {
-            $this->output .= "Package failed: ".$result->getMessage();
+        if ($this->output) {
+            $this->ui->outputData($this->output, $command);
         }
-        $this->ui->outputData($this->output, $command);
         return true;
     }
 
@@ -289,22 +342,44 @@
         if (sizeof($params) < 1) {
             $params[0] = "package.xml";
         }
-        $obj = new PEAR_Common;
-        $info = null;
-        if ($fp = @fopen($params[0], "r")) {
-            $test = fread($fp, 5);
-            fclose($fp);
-            if ($test == "<?xml") {
-                $info = $obj->infoFromDescriptionFile($params[0]);
-            }
-        }
-        if (empty($info)) {
-            $info = $obj->infoFromTgzFile($params[0]);
+        $obj = &$this->getPackageFile($this->config, $this->_debug);
+        $obj->rawReturn();
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $info = $obj->fromTgzFile($params[0], PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
+            $info = $obj->fromPackageFile($params[0], PEAR_VALIDATE_NORMAL);
+        } else {
+            $archive = $info->getArchiveFile();
+            $tar = &new Archive_Tar($archive);
+            $tar->extract(dirname($info->getPackageFile()));
+            $info->setPackageFile(dirname($info->getPackageFile()) . DIRECTORY_SEPARATOR .
+                $info->getPackage() . '-' . $info->getVersion() . DIRECTORY_SEPARATOR .
+                basename($info->getPackageFile()));
         }
+        PEAR::staticPopErrorHandling();
         if (PEAR::isError($info)) {
             return $this->raiseError($info);
         }
-        $obj->validatePackageInfo($info, $err, $warn);
+        $valid = false;
+        if ($info->getPackagexmlVersion() == '2.0') {
+            if ($valid = $info->validate(PEAR_VALIDATE_NORMAL)) {
+                $info->flattenFileList();
+                $valid = $info->validate(PEAR_VALIDATE_PACKAGING);
+            }
+        } else {
+            $valid = $info->validate(PEAR_VALIDATE_PACKAGING);
+        }
+        $err = array();
+        $warn = array();
+        if (!$valid) {
+            foreach ($info->getValidationWarnings() as $error) {
+                if ($error['level'] == 'warning') {
+                    $warn[] = $error['message'];
+                } else {
+                    $err[] = $error['message'];
+                }
+            }
+        }
         $this->_displayValidationResults($err, $warn);
         $this->ui->outputData($this->output, $command);
         return true;
@@ -321,21 +396,29 @@
             $help = $this->getHelp($command);
             return $this->raiseError("$command: missing parameter: $help[0]");
         }
-        $obj = new PEAR_Common;
-        $info = $obj->infoFromDescriptionFile($params[0]);
+        $obj = &$this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
         if (PEAR::isError($info)) {
             return $this->raiseError($info);
         }
         $err = $warn = array();
-        $obj->validatePackageInfo($info, $err, $warn);
+        if (!$info->validate()) {
+            foreach ($info->getValidationWarnings() as $error) {
+                if ($error['level'] == 'warning') {
+                    $warn[] = $error['message'];
+                } else {
+                    $err[] = $error['message'];
+                }
+            }
+        }
         if (!$this->_displayValidationResults($err, $warn, true)) {
             $this->ui->outputData($this->output, $command);
-            break;
+            return $this->raiseError('CVS tag failed');
         }
-        $version = $info['version'];
+        $version = $info->getVersion();
         $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $version);
         $cvstag = "RELEASE_$cvsversion";
-        $files = array_keys($info['filelist']);
+        $files = array_keys($info->getFilelist());
         $command = "cvs";
         if (isset($options['quiet'])) {
             $command .= ' -q';
@@ -351,6 +434,11 @@
             $command .= ' -d';
         }
         $command .= ' ' . $cvstag . ' ' . escapeshellarg($params[0]);
+        array_shift($params);
+        if (count($params)) {
+            // add in additional files to be tagged
+            $files = array_merge($files, $params);
+        }
         foreach ($files as $file) {
             $command .= ' ' . escapeshellarg($file);
         }
@@ -379,12 +467,27 @@
             $help = $this->getHelp($command);
             return $this->raiseError("$command: missing parameter: $help[0]");
         }
-        $obj = new PEAR_Common;
-        $info = $obj->infoFromDescriptionFile($params[0]);
+        $obj = &$this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
         if (PEAR::isError($info)) {
             return $this->raiseError($info);
         }
-        $files = array_keys($info['filelist']);
+        $err = $warn = array();
+        if (!$info->validate()) {
+            foreach ($info->getValidationWarnings() as $error) {
+                if ($error['level'] == 'warning') {
+                    $warn[] = $error['message'];
+                } else {
+                    $err[] = $error['message'];
+                }
+            }
+        }
+        if (!$this->_displayValidationResults($err, $warn, true)) {
+            $this->ui->outputData($this->output, $command);
+            return $this->raiseError('CVS diff failed');
+        }
+        $info1 = $info->getFilelist();
+        $files = $info1;
         $cmd = "cvs";
         if (isset($options['quiet'])) {
             $cmd .= ' -q';
@@ -416,7 +519,7 @@
             }
         }
         foreach ($files as $file) {
-            $cmd .= ' ' . escapeshellarg($file);
+            $cmd .= ' ' . escapeshellarg($file['name']);
         }
         if ($this->config->get('verbose') > 1) {
             $this->output .= "+ $cmd\n";
@@ -433,81 +536,6 @@
     }
 
     // }}}
-    // {{{ doRunTests()
-
-    function doRunTests($command, $options, $params)
-    {
-        include_once 'PEAR/RunTest.php';
-        $log = new PEAR_Common;
-        $log->ui = &$this->ui; // slightly hacky, but it will work
-        $run = new PEAR_RunTest($log);
-        $tests = array();
-        if (isset($options['recur'])) {
-            $depth = 4;
-        } else {
-            $depth = 1;
-        }
-        foreach ($params as $p) {
-            if (is_dir($p)) {
-                $dir = System::find(array($p, '-type', 'f',
-                                            '-maxdepth', $depth,
-                                            '-name', '*.phpt'));
-                $tests = array_merge($tests, $dir);
-            } else {
-                $tests[] = $p;
-            }
-        }
-        foreach ($tests as $t) {
-            $run->run($t);
-        }
-        $failed = array();
-        foreach ($tests as $t) {
-            if ($run->run($t) == 'FAILED') {
-            	$failed[] = $t;
-            }
-        }
-        if (count($failed)) {
-    		$this->ui->outputData('FAILED TESTS:');
-        	foreach ($failed as $failure) {
-        		$this->ui->outputData($failure);
-        	}
-        }
-
-        return true;
-        /*
-        $cwd = getcwd();
-        $php = $this->config->get('php_bin');
-        putenv("TEST_PHP_EXECUTABLE=$php");
-        // all core PEAR tests use this constant to determine whether they should be run or not
-        putenv("PHP_PEAR_RUNTESTS=1");
-        $ip = ini_get("include_path");
-        $ps = OS_WINDOWS ? ';' : ':';
-        $run_tests = $rtsts = $this->config->get('php_dir') . DIRECTORY_SEPARATOR . 'run-tests.php';
-        if (!file_exists($run_tests)) {
-            $run_tests = PEAR_INSTALL_DIR . DIRECTORY_SEPARATOR . 'run-tests.php';
-            if (!file_exists($run_tests)) {
-                return $this->raiseError("No run-tests.php file found. Please copy this ".
-                                                "file from the sources of your PHP distribution to $rtsts");
-            }
-        }
-        if (OS_WINDOWS) {
-            // note, this requires a slightly modified version of run-tests.php
-            // for some setups
-            // unofficial download location is in the pear-dev archives
-            $argv = $params;
-            array_unshift($argv, $run_tests);
-            $argc = count($argv);
-            include $run_tests;
-        } else {
-            $plist = implode(' ', $params);
-            $cmd = "$php -d include_path=$cwd$ps$ip -f $run_tests -- $plist";
-            system($cmd);
-        }
-        return true;
-        */
-    }
-
-    // }}}
     // {{{ doPackageDependencies()
 
     function doPackageDependencies($command, $options, $params)
@@ -516,46 +544,119 @@
         if (sizeof($params) != 1) {
             return $this->raiseError("bad parameter(s), try \"help $command\"");
         }
-
-        $obj = new PEAR_Common();
-        if (PEAR::isError($info = $obj->infoFromAny($params[0]))) {
+        $obj = &$this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
             return $this->raiseError($info);
         }
+        $deps = $info->getDeps();
+        if (is_array($deps)) {
+            if ($info->getPackagexmlVersion() == '1.0') {
+                $data = array(
+                    'caption' => 'Dependencies for pear/' . $info->getPackage(),
+                    'border' => true,
+                    'headline' => array("Required?", "Type", "Name", "Relation", "Version"),
+                    );
+
+                foreach ($deps as $d) {
+                    if (isset($d['optional'])) {
+                        if ($d['optional'] == 'yes') {
+                            $req = 'No';
+                        } else {
+                            $req = 'Yes';
+                        }
+                    } else {
+                        $req = 'Yes';
+                    }
+                    if (isset($this->_deps_rel_trans[$d['rel']])) {
+                        $rel = $this->_deps_rel_trans[$d['rel']];
+                    } else {
+                        $rel = $d['rel'];
+                    }
+
+                    if (isset($this->_deps_type_trans[$d['type']])) {
+                        $type = ucfirst($this->_deps_type_trans[$d['type']]);
+                    } else {
+                        $type = $d['type'];
+                    }
+
+                    if (isset($d['name'])) {
+                        $name = $d['name'];
+                    } else {
+                        $name = '';
+                    }
+
+                    if (isset($d['version'])) {
+                        $version = $d['version'];
+                    } else {
+                        $version = '';
+                    }
 
-        if (is_array($info['release_deps'])) {
-            $data = array(
-                'caption' => 'Dependencies for ' . $info['package'],
-                'border' => true,
-                'headline' => array("Type", "Name", "Relation", "Version"),
-                );
-
-            foreach ($info['release_deps'] as $d) {
-
-                if (isset($this->_deps_rel_trans[$d['rel']])) {
-                    $rel = $this->_deps_rel_trans[$d['rel']];
-                } else {
-                    $rel = $d['rel'];
-                }
-
-                if (isset($this->_deps_type_trans[$d['type']])) {
-                    $type = ucfirst($this->_deps_type_trans[$d['type']]);
-                } else {
-                    $type = $d['type'];
-                }
-
-                if (isset($d['name'])) {
-                    $name = $d['name'];
-                } else {
-                    $name = '';
+                    $data['data'][] = array($req, $type, $name, $rel, $version);
                 }
-
-                if (isset($d['version'])) {
-                    $version = $d['version'];
-                } else {
-                    $version = '';
+            } else { // package.xml 2.0 dependencies display
+                require_once 'PEAR/Dependency2.php';
+                $deps = $info->getDependencies();
+                $reg = &$this->config->getRegistry();
+                if (is_array($deps)) {
+                    $d = new PEAR_Dependency2($this->config, array(), '');
+                    $data = array(
+                        'caption' => 'Dependencies for ' . $info->getPackage(),
+                        'border' => true,
+                        'headline' => array("Required?", "Type", "Name", 'Versioning', 'Group'),
+                        );
+                    foreach ($deps as $type => $subd) {
+                        $req = ($type == 'required') ? 'Yes' : 'No';
+                        if ($type == 'group') {
+                            $group = $subd['attribs']['name'];
+                        } else {
+                            $group = '';
+                        }
+                        if (!isset($subd[0])) {
+                            $subd = array($subd);
+                        }
+                        foreach ($subd as $groupa) {
+                            foreach ($groupa as $deptype => $depinfo) {
+                                if ($deptype == 'attribs') {
+                                    continue;
+                                }
+                                if ($deptype == 'pearinstaller') {
+                                    $deptype = 'pear Installer';
+                                }
+                                if (!isset($depinfo[0])) {
+                                    $depinfo = array($depinfo);
+                                }
+                                foreach ($depinfo as $inf) {
+                                    $name = '';
+                                    if (isset($inf['channel'])) {
+                                        $alias = $reg->channelAlias($inf['channel']);
+                                        if (!$alias) {
+                                            $alias = '(channel?) ' .$inf['channel'];
+                                        }
+                                        $name = $alias . '/';
+                                    }
+                                    if (isset($inf['name'])) {
+                                        $name .= $inf['name'];
+                                    } elseif (isset($inf['pattern'])) {
+                                        $name .= $inf['pattern'];
+                                    } else {
+                                        $name .= '';
+                                    }
+                                    if (isset($inf['uri'])) {
+                                        $name .= ' [' . $inf['uri'] .  ']';
+                                    }
+                                    if (isset($inf['conflicts'])) {
+                                        $ver = 'conflicts';
+                                    } else {
+                                        $ver = $d->_getExtraString($inf);
+                                    }
+                                    $data['data'][] = array($req, ucfirst($deptype), $name,
+                                        $ver, $group);
+                                }
+                            }
+                        }
+                    }
                 }
-
-                $data['data'][] = array($type, $name, $rel, $version);
             }
 
             $this->ui->outputData($data, $command);
@@ -571,6 +672,8 @@
 
     function doSign($command, $options, $params)
     {
+        require_once 'System.php';
+        require_once 'Archive/Tar.php';
         // should move most of this code into PEAR_Packager
         // so it'll be easy to implement "pear package --sign"
         if (sizeof($params) != 1) {
@@ -579,30 +682,34 @@
         if (!file_exists($params[0])) {
             return $this->raiseError("file does not exist: $params[0]");
         }
-        $obj = new PEAR_Common;
-        $info = $obj->infoFromTgzFile($params[0]);
+        $obj = $this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromTgzFile($params[0], PEAR_VALIDATE_NORMAL);
         if (PEAR::isError($info)) {
             return $this->raiseError($info);
         }
-        include_once "Archive/Tar.php";
-        include_once "System.php";
         $tar = new Archive_Tar($params[0]);
         $tmpdir = System::mktemp('-d pearsign');
-        if (!$tar->extractList('package.xml package.sig', $tmpdir)) {
-            return $this->raiseError("failed to extract tar file");
+        if (!$tar->extractList('package2.xml package.sig', $tmpdir)) {
+            if (!$tar->extractList('package.xml package.sig', $tmpdir)) {
+                return $this->raiseError("failed to extract tar file");
+            }
         }
         if (file_exists("$tmpdir/package.sig")) {
             return $this->raiseError("package already signed");
         }
+        $packagexml = 'package.xml';
+        if (file_exists("$tmpdir/package2.xml")) {
+            $packagexml = 'package2.xml';
+        }
         @unlink("$tmpdir/package.sig");
         $input = $this->ui->userDialog($command,
                                        array('GnuPG Passphrase'),
                                        array('password'));
-        $gpg = popen("gpg --batch --passphrase-fd 0 --armor --detach-sign --output $tmpdir/package.sig $tmpdir/package.xml 2>/dev/null", "w");
+        $gpg = popen("gpg --batch --passphrase-fd 0 --armor --detach-sign --output $tmpdir/package.sig $tmpdir/$packagexml 2>/dev/null", "w");
         if (!$gpg) {
             return $this->raiseError("gpg command failed");
         }
-        fwrite($gpg, "$input[0]\r");
+        fwrite($gpg, "$input[0]\n");
         if (pclose($gpg) || !file_exists("$tmpdir/package.sig")) {
             return $this->raiseError("gpg sign failed");
         }
@@ -611,6 +718,19 @@
     }
 
     // }}}
+
+    /**
+     * For unit testing purposes
+     */
+    function &getInstaller(&$ui)
+    {
+        if (!class_exists('PEAR_Installer')) {
+            require_once 'PEAR/Installer.php';
+        }
+        $a = &new PEAR_Installer($ui);
+        return $a;
+    }
+
     // {{{ doMakeRPM()
 
     /*
@@ -618,118 +738,131 @@
     (cox)
 
     TODO:
-
         - Fill the rpm dependencies in the template file.
 
     IDEAS:
-
         - Instead of mapping the role to rpm vars, perhaps it's better
-
           to use directly the pear cmd to install the files by itself
-
           in %postrun so:
-
           pear -d php_dir=%{_libdir}/php/pear -d test_dir=.. <package>
-
     */
 
     function doMakeRPM($command, $options, $params)
     {
+        require_once 'System.php';
+        require_once 'Archive/Tar.php';
         if (sizeof($params) != 1) {
             return $this->raiseError("bad parameter(s), try \"help $command\"");
         }
         if (!file_exists($params[0])) {
             return $this->raiseError("file does not exist: $params[0]");
         }
-        include_once "Archive/Tar.php";
-        include_once "PEAR/Installer.php";
-        include_once "System.php";
-        $tar = new Archive_Tar($params[0]);
-        $tmpdir = System::mktemp('-d pear2rpm');
-        $instroot = System::mktemp('-d pear2rpm');
+        $reg = &$this->config->getRegistry();
+        $pkg = &$this->getPackageFile($this->config, $this->_debug);
+        $pf = &$pkg->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($pf)) {
+            $u = $pf->getUserinfo();
+            if (is_array($u)) {
+                foreach ($u as $err) {
+                    if (is_array($err)) {
+                        $err = $err['message'];
+                    }
+                    $this->ui->outputData($err);
+                }
+            }
+            return $this->raiseError("$params[0] is not a valid package");
+        }
+        $tmpdir = System::mktemp(array('-d', 'pear2rpm'));
+        $instroot = System::mktemp(array('-d', 'pear2rpm'));
         $tmp = $this->config->get('verbose');
         $this->config->set('verbose', 0);
-        $installer = new PEAR_Installer($this->ui);
+        $installer = $this->getInstaller($this->ui);
+        require_once 'PEAR/Downloader/Package.php';
+        $pack = new PEAR_Downloader_Package($installer);
+        $pack->setPackageFile($pf);
+        $params[0] = &$pack;
+        $installer->setOptions(array('installroot' => $instroot,
+                                          'nodeps' => true, 'soft' => true));
+        $installer->setDownloadedPackages($params);
         $info = $installer->install($params[0],
                                     array('installroot' => $instroot,
-                                          'nodeps' => true));
-        $pkgdir = "$info[package]-$info[version]";
+                                          'nodeps' => true, 'soft' => true));
+        $pkgdir = $pf->getPackage() . '-' . $pf->getVersion();
         $info['rpm_xml_dir'] = '/var/lib/pear';
         $this->config->set('verbose', $tmp);
-        if (!$tar->extractList("package.xml", $tmpdir, $pkgdir)) {
-            return $this->raiseError("failed to extract $params[0]");
-        }
-        if (!file_exists("$tmpdir/package.xml")) {
-            return $this->raiseError("no package.xml found in $params[0]");
-        }
         if (isset($options['spec-template'])) {
             $spec_template = $options['spec-template'];
         } else {
-            $spec_template = $this->config->get('data_dir') .
-                '/PEAR/template.spec';
+            $spec_template = '@DATA-DIR@/PEAR/template.spec';
         }
+        $info['possible_channel'] = '';
+        $info['extra_config'] = '';
         if (isset($options['rpm-pkgname'])) {
             $rpm_pkgname_format = $options['rpm-pkgname'];
         } else {
-            $rpm_pkgname_format = "PEAR::%s";
+            if ($pf->getChannel() == 'pear.php.net' || $pf->getChannel() == 'pecl.php.net') {
+                $alias = 'PEAR';
+            } else {
+                $chan = &$reg->getChannel($pf->getChannel());
+                $alias = $chan->getAlias();
+                $alias = strtoupper($alias);
+                $info['possible_channel'] = $pf->getChannel() . '/';
+            }
+            $rpm_pkgname_format = $alias . '::%s';
         }
 
         $info['extra_headers'] = '';
         $info['doc_files'] = '';
         $info['files'] = '';
-        $info['rpm_package'] = sprintf($rpm_pkgname_format, $info['package']);
+        $info['package2xml'] = '';
+        $info['rpm_package'] = sprintf($rpm_pkgname_format, $pf->getPackage());
         $srcfiles = 0;
         foreach ($info['filelist'] as $name => $attr) {
-
             if (!isset($attr['role'])) {
                 continue;
             }
             $name = preg_replace('![/:\\\\]!', '/', $name);
             if ($attr['role'] == 'doc') {
                 $info['doc_files'] .= " $name";
-
             // Map role to the rpm vars
             } else {
-
                 $c_prefix = '%{_libdir}/php/pear';
-
                 switch ($attr['role']) {
-
                     case 'php':
-
-                        $prefix = $c_prefix; break;
-
+                        $prefix = $c_prefix;
+                    break;
                     case 'ext':
-
-                        $prefix = '%{_libdir}/php'; break; // XXX good place?
-
+                        $prefix = '%{_libdir}/php';
+                    break; // XXX good place?
                     case 'src':
-
                         $srcfiles++;
-
-                        $prefix = '%{_includedir}/php'; break; // XXX good place?
-
+                        $prefix = '%{_includedir}/php';
+                    break; // XXX good place?
                     case 'test':
-
-                        $prefix = "$c_prefix/tests/" . $info['package']; break;
-
+                        $prefix = "$c_prefix/tests/" . $pf->getPackage();
+                    break;
                     case 'data':
-
-                        $prefix = "$c_prefix/data/" . $info['package']; break;
-
+                        $prefix = "$c_prefix/data/" . $pf->getPackage();
+                    break;
                     case 'script':
-
-                        $prefix = '%{_bindir}'; break;
-
+                        $prefix = '%{_bindir}';
+                    break;
+                    default: // non-standard roles
+                        $prefix = "$c_prefix/$attr[role]/" . $pf->getPackage();
+                        $info['extra_config'] .=
+                        "\n        -d {$attr[role]}_dir=$c_prefix/{$attr[role]} \\";
+                        $this->ui->outputData('WARNING: role "' . $attr['role'] . '" used, ' .
+                            'and will be installed in "' . $c_prefix . '/' . $attr['role'] .
+                            '/' . $pf->getPackage() .
+                            ' - hand-edit the final .spec if this is wrong', $command);
+                    break;
                 }
-
                 $name = str_replace('\\', '/', $name);
                 $info['files'] .= "$prefix/$name\n";
-
             }
         }
         if ($srcfiles > 0) {
-            include_once "OS/Guess.php";
+            require_once 'OS/Guess.php';
             $os = new OS_Guess;
             $arch = $os->getCpu();
         } else {
@@ -738,6 +871,11 @@
         $cfg = array('master_server', 'php_dir', 'ext_dir', 'doc_dir',
                      'bin_dir', 'data_dir', 'test_dir');
         foreach ($cfg as $k) {
+            if ($k == 'master_server') {
+                $chan = $reg->getChannel($pf->getChannel());
+                $info[$k] = $chan->getServer();
+                continue;
+            }
             $info[$k] = $this->config->get($k);
         }
         $info['arch'] = $arch;
@@ -745,8 +883,194 @@
         if (!$fp) {
             return $this->raiseError("could not open RPM spec file template $spec_template: $php_errormsg");
         }
-        $spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]', fread($fp, filesize($spec_template)));
-        fclose($fp);
+        $info['package'] = $pf->getPackage();
+        $info['version'] = $pf->getVersion();
+        $info['release_license'] = $pf->getLicense();
+        if ($pf->getDeps()) {
+            if ($pf->getPackagexmlVersion() == '1.0') {
+                $requires = $conflicts = array();
+                foreach ($pf->getDeps() as $dep) {
+                    if (isset($dep['optional']) && $dep['optional'] == 'yes') {
+                        continue;
+                    }
+                    if ($dep['type'] != 'pkg') {
+                        continue;
+                    }
+                    if (isset($dep['channel']) && $dep['channel'] != 'pear.php.net' &&
+                          $dep['channel'] != 'pecl.php.net') {
+                        $chan = &$reg->getChannel($dep['channel']);
+                        $package = strtoupper($chan->getAlias()) . '::' . $dep['name'];
+                    } else {
+                        $package = 'PEAR::' . $dep['name'];
+                    }
+                    $trans = array(
+                        '>' => '>',
+                        '<' => '<',
+                        '>=' => '>=',
+                        '<=' => '<=',
+                        '=' => '=',
+                        'gt' => '>',
+                        'lt' => '<',
+                        'ge' => '>=',
+                        'le' => '<=',
+                        'eq' => '=',
+                    );
+                    if ($dep['rel'] == 'has') {
+                        $requires[] = $package;
+                    } elseif ($dep['rel'] == 'not') {
+                        $conflicts[] = $package;
+                    } elseif ($dep['rel'] == 'ne') {
+                        $conflicts[] = $package . ' = ' . $dep['version'];
+                    } elseif (isset($trans[$dep['rel']])) {
+                        $requires[] = $package . ' ' . $trans[$dep['rel']] . ' ' . $dep['version'];
+                    }
+                }
+                if (count($requires)) {
+                    $info['extra_headers'] .= 'Requires: ' . implode(', ', $requires) . "\n";
+                }
+                if (count($conflicts)) {
+                    $info['extra_headers'] .= 'Conflicts: ' . implode(', ', $conflicts) . "\n";
+                }
+            } else {
+                $info['package2xml'] = '2'; // tell the spec to use package2.xml
+                $requires = $conflicts = array();
+                $deps = $pf->getDeps(true);
+                if (isset($deps['required']['package'])) {
+                    if (!isset($deps['required']['package'][0])) {
+                        $deps['required']['package'] = array($deps['required']['package']);
+                    }
+                    foreach ($deps['required']['package'] as $dep) {
+                        if ($dep['channel'] != 'pear.php.net' &&  $dep['channel'] != 'pecl.php.net') {
+                            $chan = &$reg->getChannel($dep['channel']);
+                            $package = strtoupper($chan->getAlias()) . '::' . $dep['name'];
+                        } else {
+                            $package = 'PEAR::' . $dep['name'];
+                        }
+                        if (isset($dep['conflicts']) && (isset($dep['min']) ||
+                              isset($dep['max']))) {
+                            $deprange = array();
+                            if (isset($dep['min'])) {
+                                $deprange[] = array($dep['min'],'>=');
+                            }
+                            if (isset($dep['max'])) {
+                                $deprange[] = array($dep['max'], '<=');
+                            }
+                            if (isset($dep['exclude'])) {
+                                if (!is_array($dep['exclude']) ||
+                                      !isset($dep['exclude'][0])) {
+                                    $dep['exclude'] = array($dep['exclude']);
+                                }
+                                if (count($deprange)) {
+                                    $excl = $dep['exclude'];
+                                    // change >= to > if excluding the min version
+                                    // change <= to < if excluding the max version
+                                    for($i = 0; $i < count($excl); $i++) {
+                                        if (isset($deprange[0]) &&
+                                              $excl[$i] == $deprange[0][0]) {
+                                            $deprange[0][1] = '<';
+                                            unset($dep['exclude'][$i]);
+                                        }
+                                        if (isset($deprange[1]) &&
+                                              $excl[$i] == $deprange[1][0]) {
+                                            $deprange[1][1] = '>';
+                                            unset($dep['exclude'][$i]);
+                                        }
+                                    }
+                                }
+                                if (count($dep['exclude'])) {
+                                    $dep['exclude'] = array_values($dep['exclude']);
+                                    $newdeprange = array();
+                                    // remove excludes that are outside the existing range
+                                    for ($i = 0; $i < count($dep['exclude']); $i++) {
+                                        if ($dep['exclude'][$i] < $dep['min'] ||
+                                              $dep['exclude'][$i] > $dep['max']) {
+                                            unset($dep['exclude'][$i]);
+                                        }
+                                    }
+                                    $dep['exclude'] = array_values($dep['exclude']);
+                                    usort($dep['exclude'], 'version_compare');
+                                    // take the remaining excludes and
+                                    // split the dependency into sub-ranges
+                                    $lastmin = $deprange[0];
+                                    for ($i = 0; $i < count($dep['exclude']) - 1; $i++) {
+                                        $newdeprange[] = '(' .
+                                            $package . " {$lastmin[1]} {$lastmin[0]} and " .
+                                            $package . ' < ' . $dep['exclude'][$i] . ')';
+                                        $lastmin = array($dep['exclude'][$i], '>');
+                                    }
+                                    if (isset($dep['max'])) {
+                                        $newdeprange[] = '(' . $package .
+                                            " {$lastmin[1]} {$lastmin[0]} and " .
+                                            $package . ' < ' . $dep['max'] . ')';
+                                    }
+                                    $conflicts[] = implode(' or ', $deprange);
+                                } else {
+                                    $conflicts[] = $package .
+                                        " {$deprange[0][1]} {$deprange[0][0]}" .
+                                        (isset($deprange[1]) ? 
+                                        " and $package {$deprange[1][1]} {$deprange[1][0]}"
+                                        : '');
+                                }
+                            }
+                            continue;
+                        }
+                        if (!isset($dep['min']) && !isset($dep['max']) &&
+                              !isset($dep['exclude'])) {
+                            if (isset($dep['conflicts'])) {
+                                $conflicts[] = $package;
+                            } else {
+                                $requires[] = $package;
+                            }
+                        } else {
+                            if (isset($dep['min'])) {
+                                $requires[] = $package . ' >= ' . $dep['min'];
+                            }
+                            if (isset($dep['max'])) {
+                                $requires[] = $package . ' <= ' . $dep['max'];
+                            }
+                            if (isset($dep['exclude'])) {
+                                $ex = $dep['exclude'];
+                                if (!is_array($ex)) {
+                                    $ex = array($ex);
+                                }
+                                foreach ($ex as $ver) {
+                                    $conflicts[] = $package . ' = ' . $ver;
+                                }
+                            }
+                        }
+                    }
+                    require_once 'Archive/Tar.php';
+                    $tar = new Archive_Tar($pf->getArchiveFile());
+                    $tar->pushErrorHandling(PEAR_ERROR_RETURN);
+                    $a = $tar->extractInString('package2.xml');
+                    $tar->popErrorHandling();
+                    if ($a === null || PEAR::isError($a)) {
+                        $info['package2xml'] = '';
+                        // this doesn't have a package.xml version 1.0
+                        $requires[] = 'PEAR::PEAR >= ' .
+                            $deps['required']['pearinstaller']['min'];
+                    }
+                    if (count($requires)) {
+                        $info['extra_headers'] .= 'Requires: ' . implode(', ', $requires) . "\n";
+                    }
+                    if (count($conflicts)) {
+                        $info['extra_headers'] .= 'Conflicts: ' . implode(', ', $conflicts) . "\n";
+                    }
+                }
+            }
+        }
+
+        // remove the trailing newline
+        $info['extra_headers'] = trim($info['extra_headers']);
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]',
+                file_get_contents($spec_template));
+        } else {
+            $spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]',
+                fread($fp, filesize($spec_template)));
+            fclose($fp);
+        }
         $spec_file = "$info[rpm_package]-$info[version].spec";
         $wp = fopen($spec_file, "wb");
         if (!$wp) {
@@ -759,6 +1083,50 @@
         return true;
     }
 
+    function doConvert($command, $options, $params)
+    {
+        $packagexml = isset($params[0]) ? $params[0] : 'package.xml';
+        $newpackagexml = isset($params[1]) ? $params[1] : dirname($packagexml) .
+            DIRECTORY_SEPARATOR . 'package2.xml';
+        $pkg = &$this->getPackageFile($this->config, $this->_debug);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $pf = $pkg->fromPackageFile($packagexml, PEAR_VALIDATE_NORMAL);
+        PEAR::staticPopErrorHandling();
+        if (!PEAR::isError($pf)) {
+            if (is_a($pf, 'PEAR_PackageFile_v2')) {
+                $this->ui->outputData($packagexml . ' is already a package.xml version 2.0');
+                return true;
+            }
+            $gen = &$pf->getDefaultGenerator();
+            $newpf = &$gen->toV2();
+            $newpf->setPackagefile($newpackagexml);
+            $gen = &$newpf->getDefaultGenerator();
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $state = (isset($options['flat']) ? PEAR_VALIDATE_PACKAGING : PEAR_VALIDATE_NORMAL);
+            $saved = $gen->toPackageFile(dirname($newpackagexml), $state,
+                basename($newpackagexml));
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($saved)) {
+                if (is_array($saved->getUserInfo())) {
+                    foreach ($saved->getUserInfo() as $warning) {
+                        $this->ui->outputData($warning['message']);
+                    }
+                }
+                $this->ui->outputData($saved->getMessage());
+                return true;
+            }
+            $this->ui->outputData('Wrote new version 2.0 package.xml to "' . $saved . '"');
+            return true;
+        } else {
+            if (is_array($pf->getUserInfo())) {
+                foreach ($pf->getUserInfo() as $warning) {
+                    $this->ui->outputData($warning['message']);
+                }
+            }
+            return $this->raiseError($pf);
+        }
+    }
+
     // }}}
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Package.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Package.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Package.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Package.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,194 @@
+<commands version="1.0">
+ <package>
+  <summary>Build Package</summary>
+  <function>doPackage</function>
+  <shortcut>p</shortcut>
+  <options>
+   <nocompress>
+    <shortopt>Z</shortopt>
+    <doc>Do not gzip the package file</doc>
+   </nocompress>
+   <showname>
+    <shortopt>n</shortopt>
+    <doc>Print the name of the packaged file.</doc>
+   </showname>
+  </options>
+  <doc>[descfile] [descfile2]
+Creates a PEAR package from its description file (usually called
+package.xml).  If a second packagefile is passed in, then
+the packager will check to make sure that one is a package.xml
+version 1.0, and the other is a package.xml version 2.0.  The
+package.xml version 1.0 will be saved as &quot;package.xml&quot; in the archive,
+and the other as &quot;package2.xml&quot; in the archive&quot;
+</doc>
+ </package>
+ <package-validate>
+  <summary>Validate Package Consistency</summary>
+  <function>doPackageValidate</function>
+  <shortcut>pv</shortcut>
+  <options />
+  <doc>
+</doc>
+ </package-validate>
+ <cvsdiff>
+  <summary>Run a &quot;cvs diff&quot; for all files in a package</summary>
+  <function>doCvsDiff</function>
+  <shortcut>cd</shortcut>
+  <options>
+   <quiet>
+    <shortopt>q</shortopt>
+    <doc>Be quiet</doc>
+   </quiet>
+   <reallyquiet>
+    <shortopt>Q</shortopt>
+    <doc>Be really quiet</doc>
+   </reallyquiet>
+   <date>
+    <shortopt>D</shortopt>
+    <doc>Diff against revision of DATE</doc>
+    <arg>DATE</arg>
+   </date>
+   <release>
+    <shortopt>R</shortopt>
+    <doc>Diff against tag for package release REL</doc>
+    <arg>REL</arg>
+   </release>
+   <revision>
+    <shortopt>r</shortopt>
+    <doc>Diff against revision REV</doc>
+    <arg>REV</arg>
+   </revision>
+   <context>
+    <shortopt>c</shortopt>
+    <doc>Generate context diff</doc>
+   </context>
+   <unified>
+    <shortopt>u</shortopt>
+    <doc>Generate unified diff</doc>
+   </unified>
+   <ignore-case>
+    <shortopt>i</shortopt>
+    <doc>Ignore case, consider upper- and lower-case letters equivalent</doc>
+   </ignore-case>
+   <ignore-whitespace>
+    <shortopt>b</shortopt>
+    <doc>Ignore changes in amount of white space</doc>
+   </ignore-whitespace>
+   <ignore-blank-lines>
+    <shortopt>B</shortopt>
+    <doc>Ignore changes that insert or delete blank lines</doc>
+   </ignore-blank-lines>
+   <brief>
+    <doc>Report only whether the files differ, no details</doc>
+   </brief>
+   <dry-run>
+    <shortopt>n</shortopt>
+    <doc>Don&apos;t do anything, just pretend</doc>
+   </dry-run>
+  </options>
+  <doc>&lt;package.xml&gt;
+Compares all the files in a package.  Without any options, this
+command will compare the current code with the last checked-in code.
+Using the -r or -R option you may compare the current code with that
+of a specific release.
+</doc>
+ </cvsdiff>
+ <cvstag>
+  <summary>Set CVS Release Tag</summary>
+  <function>doCvsTag</function>
+  <shortcut>ct</shortcut>
+  <options>
+   <quiet>
+    <shortopt>q</shortopt>
+    <doc>Be quiet</doc>
+   </quiet>
+   <reallyquiet>
+    <shortopt>Q</shortopt>
+    <doc>Be really quiet</doc>
+   </reallyquiet>
+   <slide>
+    <shortopt>F</shortopt>
+    <doc>Move (slide) tag if it exists</doc>
+   </slide>
+   <delete>
+    <shortopt>d</shortopt>
+    <doc>Remove tag</doc>
+   </delete>
+   <dry-run>
+    <shortopt>n</shortopt>
+    <doc>Don&apos;t do anything, just pretend</doc>
+   </dry-run>
+  </options>
+  <doc>&lt;package.xml&gt;
+Sets a CVS tag on all files in a package.  Use this command after you have
+packaged a distribution tarball with the &quot;package&quot; command to tag what
+revisions of what files were in that release.  If need to fix something
+after running cvstag once, but before the tarball is released to the public,
+use the &quot;slide&quot; option to move the release tag.
+</doc>
+ </cvstag>
+ <package-dependencies>
+  <summary>Show package dependencies</summary>
+  <function>doPackageDependencies</function>
+  <shortcut>pd</shortcut>
+  <options />
+  <doc>
+List all depencies the package has.</doc>
+ </package-dependencies>
+ <sign>
+  <summary>Sign a package distribution file</summary>
+  <function>doSign</function>
+  <shortcut>si</shortcut>
+  <options />
+  <doc>&lt;package-file&gt;
+Signs a package distribution (.tar or .tgz) file with GnuPG.</doc>
+ </sign>
+ <makerpm>
+  <summary>Builds an RPM spec file from a PEAR package</summary>
+  <function>doMakeRPM</function>
+  <shortcut>rpm</shortcut>
+  <options>
+   <spec-template>
+    <shortopt>t</shortopt>
+    <arg>FILE</arg>
+    <doc>Use FILE as RPM spec file template</doc>
+   </spec-template>
+   <rpm-pkgname>
+    <shortopt>p</shortopt>
+    <arg>FORMAT</arg>
+    <doc>Use FORMAT as format string for RPM package name, %s is replaced
+by the PEAR package name, defaults to &quot;PEAR::%s&quot;.</doc>
+   </rpm-pkgname>
+  </options>
+  <doc>&lt;package-file&gt;
+
+Creates an RPM .spec file for wrapping a PEAR package inside an RPM
+package.  Intended to be used from the SPECS directory, with the PEAR
+package tarball in the SOURCES directory:
+
+$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
+Wrote RPM spec file PEAR::Net_Geo-1.0.spec
+$ rpm -bb PEAR::Net_Socket-1.0.spec
+...
+Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
+</doc>
+ </makerpm>
+ <convert>
+  <summary>Convert a package.xml 1.0 to package.xml 2.0 format</summary>
+  <function>doConvert</function>
+  <shortcut>c2</shortcut>
+  <options>
+   <flat>
+    <shortopt>f</shortopt>
+    <doc>do not beautify the filelist.</doc>
+   </flat>
+  </options>
+  <doc>[descfile] [descfile2]
+Converts a package.xml in 1.0 format into a package.xml
+in 2.0 format.  The new file will be named package2.xml by default,
+and package.xml will be used as the old file by default.
+This is not the most intelligent conversion, and should only be
+used for automated conversion or learning the format.
+</doc>
+ </convert>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,376 @@
+<?php
+/**
+ * PEAR_Command_Pickle (pickle command)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  2005-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Pickle.php,v 1.5 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+
+/**
+ * PEAR commands for login/logout
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  2005-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.1
+ */
+
+class PEAR_Command_Pickle extends PEAR_Command_Common
+{
+    var $commands = array(
+        'pickle' => array(
+            'summary' => 'Build PECL Package',
+            'function' => 'doPackage',
+            'shortcut' => 'pi',
+            'options' => array(
+                'nocompress' => array(
+                    'shortopt' => 'Z',
+                    'doc' => 'Do not gzip the package file'
+                    ),
+                'showname' => array(
+                    'shortopt' => 'n',
+                    'doc' => 'Print the name of the packaged file.',
+                    ),
+                ),
+            'doc' => '[descfile]
+Creates a PECL package from its package2.xml file.
+
+An automatic conversion will be made to a package.xml 1.0 and written out to
+disk in the current directory as "package.xml".  Note that
+only simple package.xml 2.0 will be converted.  package.xml 2.0 with:
+
+ - dependency types other than required/optional PECL package/ext/php/pearinstaller
+ - more than one extsrcrelease
+ - extbinrelease, phprelease, or bundle release type
+ - dependency groups
+ - ignore tags in release filelist
+ - tasks other than replace
+ - custom roles
+
+will cause pickle to fail, and output an error message.  If your package2.xml
+uses any of these features, you are best off using PEAR_PackageFileManager to
+generate both package.xml.
+'
+            ),
+        );
+
+    /**
+     * PEAR_Command_Package constructor.
+     *
+     * @access public
+     */
+    function PEAR_Command_Pickle(&$ui, &$config)
+    {
+        parent::PEAR_Command_Common($ui, $config);
+    }
+
+
+    /**
+     * For unit-testing ease
+     *
+     * @return PEAR_Packager
+     */
+    function &getPackager()
+    {
+        if (!class_exists('PEAR_Packager')) {
+            require_once 'PEAR/Packager.php';
+        }
+        $a = &new PEAR_Packager;
+        return $a;
+    }
+
+    /**
+     * For unit-testing ease
+     *
+     * @param PEAR_Config $config
+     * @param bool $debug
+     * @param string|null $tmpdir
+     * @return PEAR_PackageFile
+     */
+    function &getPackageFile($config, $debug = false, $tmpdir = null)
+    {
+        if (!class_exists('PEAR_Common')) {
+            require_once 'PEAR/Common.php';
+        }
+        if (!class_exists('PEAR/PackageFile.php')) {
+            require_once 'PEAR/PackageFile.php';
+        }
+        $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
+        $common = new PEAR_Common;
+        $common->ui = $this->ui;
+        $a->setLogger($common);
+        return $a;
+    }
+
+    function doPackage($command, $options, $params)
+    {
+        $this->output = '';
+        $pkginfofile = isset($params[0]) ? $params[0] : 'package2.xml';
+        $packager = &$this->getPackager();
+        if (PEAR::isError($err = $this->_convertPackage($pkginfofile))) {
+            return $err;
+        }
+        $compress = empty($options['nocompress']) ? true : false;
+        $result = $packager->package($pkginfofile, $compress, 'package.xml');
+        if (PEAR::isError($result)) {
+            return $this->raiseError($result);
+        }
+        // Don't want output, only the package file name just created
+        if (isset($options['showname'])) {
+            $this->ui->outputData($result, $command);
+        }
+        return true;
+    }
+
+    function _convertPackage($packagexml)
+    {
+        $pkg = &$this->getPackageFile($this->config);
+        $pf2 = &$pkg->fromPackageFile($packagexml, PEAR_VALIDATE_NORMAL);
+        if (!is_a($pf2, 'PEAR_PackageFile_v2')) {
+            return $this->raiseError('Cannot process "' .
+                $packagexml . '", is not a package.xml 2.0');
+        }
+        require_once 'PEAR/PackageFile/v1.php';
+        $pf = new PEAR_PackageFile_v1;
+        $pf->setConfig($this->config);
+        if (is_array($pf2->getPackageType() != 'extsrc')) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", is not an extension source package.  Using a PEAR_PackageFileManager-based ' .
+            'script is an option');
+        }
+        if (is_array($pf2->getUsesRole())) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", contains custom roles.  Using a PEAR_PackageFileManager-based script or ' .
+            'the convert command is an option');
+        }
+        if (is_array($pf2->getUsesTask())) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", contains custom tasks.  Using a PEAR_PackageFileManager-based script or ' .
+            'the convert command is an option');
+        }
+        $deps = $pf2->getDependencies();
+        if (isset($deps['group'])) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", contains dependency groups.  Using a PEAR_PackageFileManager-based script ' .
+            'or the convert command is an option');
+        }
+        if (isset($deps['required']['subpackage']) ||
+              isset($deps['optional']['subpackage'])) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", contains subpackage dependencies.  Using a PEAR_PackageFileManager-based  '.
+            'script is an option');
+        }
+        if (isset($deps['required']['os'])) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", contains os dependencies.  Using a PEAR_PackageFileManager-based  '.
+            'script is an option');
+        }
+        if (isset($deps['required']['arch'])) {
+            return $this->raiseError('Cannot safely convert "' . $packagexml .
+            '", contains arch dependencies.  Using a PEAR_PackageFileManager-based  '.
+            'script is an option');
+        }
+        $pf->setPackage($pf2->getPackage());
+        $pf->setSummary($pf2->getSummary());
+        $pf->setDescription($pf2->getDescription());
+        foreach ($pf2->getMaintainers() as $maintainer) {
+            $pf->addMaintainer($maintainer['role'], $maintainer['handle'],
+                $maintainer['name'], $maintainer['email']);
+        }
+        $pf->setVersion($pf2->getVersion());
+        $pf->setDate($pf2->getDate());
+        $pf->setLicense($pf2->getLicense());
+        $pf->setState($pf2->getState());
+        $pf->setNotes($pf2->getNotes());
+        $pf->addPhpDep($deps['required']['php']['min'], 'ge');
+        if (isset($deps['required']['php']['max'])) {
+            $pf->addPhpDep($deps['required']['php']['max'], 'le');
+        }
+        if (isset($deps['required']['package'])) {
+            if (!isset($deps['required']['package'][0])) {
+                $deps['required']['package'] = array($deps['required']['package']);
+            }
+            foreach ($deps['required']['package'] as $dep) {
+                if (!isset($dep['channel'])) {
+                    return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
+                    ' contains uri-based dependency on a package.  Using a ' .
+                    'PEAR_PackageFileManager-based script is an option');
+                }
+                if ($dep['channel'] != 'pear.php.net' && $dep['channel'] != 'pecl.php.net') {
+                    return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
+                    ' contains dependency on a non-standard channel package.  Using a ' .
+                    'PEAR_PackageFileManager-based script is an option');
+                }
+                if (isset($dep['conflicts'])) {
+                    return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
+                    ' contains conflicts dependency.  Using a ' .
+                    'PEAR_PackageFileManager-based script is an option');
+                }
+                if (isset($dep['exclude'])) {
+                    $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
+                }
+                if (isset($dep['min'])) {
+                    $pf->addPackageDep($dep['name'], $dep['min'], 'ge');
+                }
+                if (isset($dep['max'])) {
+                    $pf->addPackageDep($dep['name'], $dep['max'], 'le');
+                }
+            }
+        }
+        if (isset($deps['required']['extension'])) {
+            if (!isset($deps['required']['extension'][0])) {
+                $deps['required']['extension'] = array($deps['required']['extension']);
+            }
+            foreach ($deps['required']['extension'] as $dep) {
+                if (isset($dep['conflicts'])) {
+                    return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
+                    ' contains conflicts dependency.  Using a ' .
+                    'PEAR_PackageFileManager-based script is an option');
+                }
+                if (isset($dep['exclude'])) {
+                    $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
+                }
+                if (isset($dep['min'])) {
+                    $pf->addExtensionDep($dep['name'], $dep['min'], 'ge');
+                }
+                if (isset($dep['max'])) {
+                    $pf->addExtensionDep($dep['name'], $dep['max'], 'le');
+                }
+            }
+        }
+        if (isset($deps['optional']['package'])) {
+            if (!isset($deps['optional']['package'][0])) {
+                $deps['optional']['package'] = array($deps['optional']['package']);
+            }
+            foreach ($deps['optional']['package'] as $dep) {
+                if (!isset($dep['channel'])) {
+                    return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
+                    ' contains uri-based dependency on a package.  Using a ' .
+                    'PEAR_PackageFileManager-based script is an option');
+                }
+                if ($dep['channel'] != 'pear.php.net' && $dep['channel'] != 'pecl.php.net') {
+                    return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
+                    ' contains dependency on a non-standard channel package.  Using a ' .
+                    'PEAR_PackageFileManager-based script is an option');
+                }
+                if (isset($dep['exclude'])) {
+                    $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
+                }
+                if (isset($dep['min'])) {
+                    $pf->addPackageDep($dep['name'], $dep['min'], 'ge', 'yes');
+                }
+                if (isset($dep['max'])) {
+                    $pf->addPackageDep($dep['name'], $dep['max'], 'le', 'yes');
+                }
+            }
+        }
+        if (isset($deps['optional']['extension'])) {
+            if (!isset($deps['optional']['extension'][0])) {
+                $deps['optional']['extension'] = array($deps['optional']['extension']);
+            }
+            foreach ($deps['optional']['extension'] as $dep) {
+                if (isset($dep['exclude'])) {
+                    $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
+                }
+                if (isset($dep['min'])) {
+                    $pf->addExtensionDep($dep['name'], $dep['min'], 'ge', 'yes');
+                }
+                if (isset($dep['max'])) {
+                    $pf->addExtensionDep($dep['name'], $dep['max'], 'le', 'yes');
+                }
+            }
+        }
+        $contents = $pf2->getContents();
+        $release = $pf2->getReleases();
+        if (isset($releases[0])) {
+            return $this->raiseError('Cannot safely process "' . $packagexml . '" contains ' 
+            . 'multiple extsrcrelease tags.  Using a PEAR_PackageFileManager-based script ' .
+            'or the convert command is an option');
+        }
+        if ($configoptions = $pf2->getConfigureOptions()) {
+            foreach ($configoptions as $option) {
+                $pf->addConfigureOption($option['name'], $option['prompt'],
+                    isset($option['default']) ? $option['default'] : false);
+            }
+        }
+        if (isset($release['filelist']['ignore'])) {
+            return $this->raiseError('Cannot safely process "' . $packagexml . '" contains ' 
+            . 'ignore tags.  Using a PEAR_PackageFileManager-based script or the convert' .
+            ' command is an option');
+        }
+        if (isset($release['filelist']['install']) &&
+              !isset($release['filelist']['install'][0])) {
+            $release['filelist']['install'] = array($release['filelist']['install']);
+        }
+        if (isset($contents['dir']['attribs']['baseinstalldir'])) {
+            $baseinstalldir = $contents['dir']['attribs']['baseinstalldir'];
+        } else {
+            $baseinstalldir = false;
+        }
+        if (!isset($contents['dir']['file'][0])) {
+            $contents['dir']['file'] = array($contents['dir']['file']);
+        }
+        foreach ($contents['dir']['file'] as $file) {
+            if ($baseinstalldir && !isset($file['attribs']['baseinstalldir'])) {
+                $file['attribs']['baseinstalldir'] = $baseinstalldir;
+            }
+            $processFile = $file;
+            unset($processFile['attribs']);
+            if (count($processFile)) {
+                foreach ($processFile as $name => $task) {
+                    if ($name != $pf2->getTasksNs() . ':replace') {
+                        return $this->raiseError('Cannot safely process "' . $packagexml .
+                        '" contains tasks other than replace.  Using a ' .
+                        'PEAR_PackageFileManager-based script is an option.');
+                    }
+                    $file['attribs']['replace'][] = $task;
+                }
+            }
+            if (!in_array($file['attribs']['role'], PEAR_Common::getFileRoles())) {
+                return $this->raiseError('Cannot safely convert "' . $packagexml .
+                '", contains custom roles.  Using a PEAR_PackageFileManager-based script ' .
+                'or the convert command is an option');
+            }
+            if (isset($release['filelist']['install'])) {
+                foreach ($release['filelist']['install'] as $installas) {
+                    if ($installas['attribs']['name'] == $file['attribs']['name']) {
+                        $file['attribs']['install-as'] = $installas['attribs']['as'];
+                    }
+                }
+            }
+            $pf->addFile('/', $file['attribs']['name'], $file['attribs']);
+        }
+        if ($pf2->getChangeLog()) {
+            $this->ui->outputData('WARNING: changelog is not translated to package.xml ' .
+                '1.0, use PEAR_PackageFileManager-based script if you need changelog-' .
+                'translation for package.xml 1.0');
+        }
+        $gen = &$pf->getDefaultGenerator();
+        $gen->toPackageFile('.');
+    }
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Pickle.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,40 @@
+<commands version="1.0">
+ <pickle>
+  <summary>Build PECL Package</summary>
+  <function>doPackage</function>
+  <shortcut>pi</shortcut>
+  <options>
+   <nocompress>
+    <shortopt>Z</shortopt>
+    <doc>Do not gzip the package file</doc>
+   </nocompress>
+   <showname>
+    <shortopt>n</shortopt>
+    <doc>Print the name of the packaged file.</doc>
+   </showname>
+  </options>
+  <doc>[descfile] [descfile2]
+Creates a PECL package from its description file (usually called
+package.xml).  If a second packagefile is passed in, then
+the packager will check to make sure that one is a package.xml
+version 1.0, and the other is a package.xml version 2.0.  The
+package.xml version 1.0 will be saved as &quot;package.xml&quot; in the archive,
+and the other as &quot;package2.xml&quot; in the archive&quot;
+
+If no second file is passed in, and [descfile] is a package.xml 2.0,
+an automatic conversion will be made to a package.xml 1.0.  Note that
+only simple package.xml 2.0 will be converted.  package.xml 2.0 with:
+
+ - dependency types other than required/optional PECL package/ext/php/pearinstaller
+ - more than one extsrcrelease
+ - extbinrelease, phprelease, or bundle release type
+ - dependency groups
+ - ignore tags in release filelist
+ - tasks other than replace
+ - custom roles
+
+will cause pickle to fail, and output an error message.  If your package2.xml
+uses any of these features, you are best off using PEAR_PackageFileManager to
+generate both package.xml.</doc>
+ </pickle>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Registry.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Registry.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Registry.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Registry.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,44 +1,79 @@
 <?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Registry.php,v 1.36 2004/01/08 17:33:13 sniper Exp $
-
+/**
+ * PEAR_Command_Registry (list, list-files, shell-test, info commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Registry.php,v 1.70 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
 require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Config.php';
 
+/**
+ * PEAR commands for registry manipulation
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
 class PEAR_Command_Registry extends PEAR_Command_Common
 {
     // {{{ properties
 
     var $commands = array(
         'list' => array(
-            'summary' => 'List Installed Packages',
+            'summary' => 'List Installed Packages In The Default Channel',
             'function' => 'doList',
             'shortcut' => 'l',
-            'options' => array(),
-            'doc' => '[package]
+            'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'list installed packages from this channel',
+                    'arg' => 'CHAN',
+                    ),
+                'allchannels' => array(
+                    'shortopt' => 'a',
+                    'doc' => 'list installed packages from all channels',
+                    ),
+                ),
+            'doc' => '<package>
 If invoked without parameters, this command lists the PEAR packages
-installed in your php_dir ({config php_dir)).  With a parameter, it
-lists the files in that package.
+installed in your php_dir ({config php_dir}).  With a parameter, it
+lists the files in a package.
 ',
             ),
+        'list-files' => array(
+            'summary' => 'List Files In Installed Package',
+            'function' => 'doFileList',
+            'shortcut' => 'fl',
+            'options' => array(),
+            'doc' => '<package>
+List the files in an installed package.
+'
+            ),
         'shell-test' => array(
             'summary' => 'Shell Script Test',
             'function' => 'doShellTest',
@@ -81,58 +116,128 @@
 
     function _sortinfo($a, $b)
     {
-        return strcmp($a['package'], $b['package']);
+        $apackage = isset($a['package']) ? $a['package'] : $a['name'];
+        $bpackage = isset($b['package']) ? $b['package'] : $b['name'];
+        return strcmp($apackage, $bpackage);
     }
 
     function doList($command, $options, $params)
     {
-        $reg = new PEAR_Registry($this->config->get('php_dir'));
-        if (sizeof($params) == 0) {
-            $installed = $reg->packageInfo();
-            usort($installed, array(&$this, '_sortinfo'));
+        if (isset($options['allchannels'])) {
+            return $this->doListAll($command, array(), $params);
+        }
+        $reg = &$this->config->getRegistry();
+        if (count($params) == 1) {
+            return $this->doFileList($command, $options, $params);
+        }
+        if (isset($options['channel'])) {
+            if ($reg->channelExists($options['channel'])) {
+                $channel = $reg->channelName($options['channel']);
+            } else {
+                return $this->raiseError('Channel "' . $options['channel'] .'" does not exist');
+            }
+        } else {
+            $channel = $this->config->get('default_channel');
+        }
+        $installed = $reg->packageInfo(null, null, $channel);
+        usort($installed, array(&$this, '_sortinfo'));
+        $i = $j = 0;
+        $data = array(
+            'caption' => 'Installed packages, channel ' .
+                $channel . ':',
+            'border' => true,
+            'headline' => array('Package', 'Version', 'State')
+            );
+        foreach ($installed as $package) {
+            $pobj = $reg->getPackage(isset($package['package']) ?
+                                        $package['package'] : $package['name'], $channel);
+            $data['data'][] = array($pobj->getPackage(), $pobj->getVersion(),
+                                    $pobj->getState() ? $pobj->getState() : null);
+        }
+        if (count($installed)==0) {
+            $data = '(no packages installed from channel ' . $channel . ')';
+        }
+        $this->ui->outputData($data, $command);
+        return true;
+    }
+    
+    function doListAll($command, $options, $params)
+    {
+        $reg = &$this->config->getRegistry();
+        $installed = $reg->packageInfo(null, null, null);
+        foreach ($installed as $channel => $packages) {
+            usort($packages, array($this, '_sortinfo'));
             $i = $j = 0;
             $data = array(
-                'caption' => 'Installed packages:',
+                'caption' => 'Installed packages, channel ' . $channel . ':',
                 'border' => true,
                 'headline' => array('Package', 'Version', 'State')
                 );
-            foreach ($installed as $package) {
-                $data['data'][] = array($package['package'],
-                                          $package['version'],
-                                          @$package['release_state']);
-            }
-            if (count($installed)==0) {
-                $data = '(no packages installed)';
+            foreach ($packages as $package) {
+                $pobj = $reg->getPackage(isset($package['package']) ?
+                                            $package['package'] : $package['name'], $channel);
+                $data['data'][] = array($pobj->getPackage(), $pobj->getVersion(),
+                                        $pobj->getState() ? $pobj->getState() : null);
+            }
+            if (count($packages)==0) {
+                $data = array(
+                    'caption' => 'Installed packages, channel ' . $channel . ':',
+                    'border' => true,
+                    'data' => array(array('(no packages installed)')),
+                    );
             }
             $this->ui->outputData($data, $command);
+        }
+        return true;
+    }
+    
+    function doFileList($command, $options, $params)
+    {
+        if (count($params) != 1) {
+            return $this->raiseError('list-files expects 1 parameter');
+        }
+        $reg = &$this->config->getRegistry();
+        if (!is_dir($params[0]) && (file_exists($params[0]) || $fp = @fopen($params[0],
+              'r'))) {
+            @fclose($fp);
+            if (!class_exists('PEAR_PackageFile')) {
+                require_once 'PEAR/PackageFile.php';
+            }
+            $pkg = &new PEAR_PackageFile($this->config, $this->_debug);
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $info = &$pkg->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
+            PEAR::staticPopErrorHandling();
+            $headings = array('Package File', 'Install Path');
+            $installed = false;
         } else {
-            if (file_exists($params[0]) && !is_dir($params[0])) {
-                include_once "PEAR/Common.php";
-                $obj = &new PEAR_Common;
-                $info = $obj->infoFromAny($params[0]);
-                $headings = array('Package File', 'Install Path');
-                $installed = false;
-            } else {
-                $info = $reg->packageInfo($params[0]);
-                $headings = array('Type', 'Install Path');
-                $installed = true;
-            }
-            if (PEAR::isError($info)) {
-                return $this->raiseError($info);
-            }
-            if ($info === null) {
-                return $this->raiseError("`$params[0]' not installed");
-            }
-            $list = $info['filelist'];
-            if ($installed) {
-                $caption = 'Installed Files For ' . $params[0];
-            } else {
-                $caption = 'Contents of ' . basename($params[0]);
-            }
-            $data = array(
-                'caption' => $caption,
-                'border' => true,
-                'headline' => $headings);
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $parsed = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($parsed)) {
+                return $this->raiseError($parsed);
+            }
+            $info = &$reg->getPackage($parsed['package'], $parsed['channel']);
+            $headings = array('Type', 'Install Path');
+            $installed = true;
+        }
+        if (PEAR::isError($info)) {
+            return $this->raiseError($info);
+        }
+        if ($info === null) {
+            return $this->raiseError("`$params[0]' not installed");
+        }
+        $list = ($info->getPackagexmlVersion() == '1.0' || $installed) ?
+            $info->getFilelist() : $info->getContents();
+        if ($installed) {
+            $caption = 'Installed Files For ' . $params[0];
+        } else {
+            $caption = 'Contents of ' . basename($params[0]);
+        }
+        $data = array(
+            'caption' => $caption,
+            'border' => true,
+            'headline' => $headings);
+        if ($info->getPackagexmlVersion() == '1.0' || $installed) {
             foreach ($list as $file => $att) {
                 if ($installed) {
                     if (empty($att['installed_as'])) {
@@ -140,7 +245,8 @@
                     }
                     $data['data'][] = array($att['role'], $att['installed_as']);
                 } else {
-                    if (isset($att['baseinstalldir'])) {
+                    if (isset($att['baseinstalldir']) && !in_array($att['role'],
+                          array('test', 'data', 'doc'))) {
                         $dest = $att['baseinstalldir'] . DIRECTORY_SEPARATOR .
                             $file;
                     } else {
@@ -149,29 +255,52 @@
                     switch ($att['role']) {
                         case 'test':
                         case 'data':
-                            if ($installed) {
-                                break 2;
-                            }
-                            $dest = '-- will not be installed --';
-                            break;
                         case 'doc':
-                            $dest = $this->config->get('doc_dir') . DIRECTORY_SEPARATOR .
-                                $dest;
+                            $role = $att['role'];
+                            if ($role == 'test') {
+                                $role .= 's';
+                            }
+                            $dest = $this->config->get($role . '_dir') . DIRECTORY_SEPARATOR .
+                                $info->getPackage() . DIRECTORY_SEPARATOR . $dest;
                             break;
                         case 'php':
                         default:
                             $dest = $this->config->get('php_dir') . DIRECTORY_SEPARATOR .
                                 $dest;
                     }
-                    $dest = preg_replace('!/+!', '/', $dest);
+                    $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
+                    $dest = preg_replace(array('!\\\\+!', '!/!', "!$ds2+!"),
+                                                    array(DIRECTORY_SEPARATOR,
+                                                          DIRECTORY_SEPARATOR,
+                                                          DIRECTORY_SEPARATOR),
+                                                    $dest);
                     $file = preg_replace('!/+!', '/', $file);
                     $data['data'][] = array($file, $dest);
                 }
             }
-            $this->ui->outputData($data, $command);
-
-
+        } else { // package.xml 2.0, not installed
+            if (!isset($list['dir']['file'][0])) {
+                $list['dir']['file'] = array($list['dir']['file']);
+            }
+            foreach ($list['dir']['file'] as $att) {
+                $att = $att['attribs'];
+                $file = $att['name'];
+                $role = &PEAR_Installer_Role::factory($info, $att['role'], $this->config);
+                $role->setup($this, $info, $att, $file);
+                if (!$role->isInstallable()) {
+                    $dest = '(not installable)';
+                } else {
+                    $dest = $role->processInstallation($info, $att, $file, '');
+                    if (PEAR::isError($dest)) {
+                        $dest = '(Unknown role "' . $att['role'] . ')';
+                    } else {
+                        list(,, $dest) = $dest;
+                    }
+                }
+                $data['data'][] = array($file, $dest);
+            }
         }
+        $this->ui->outputData($data, $command);
         return true;
     }
 
@@ -181,21 +310,34 @@
     function doShellTest($command, $options, $params)
     {
         $this->pushErrorHandling(PEAR_ERROR_RETURN);
-        $reg = &new PEAR_Registry($this->config->get('php_dir'));
+        $reg = &$this->config->getRegistry();
+        $info = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
+        if (PEAR::isError($info)) {
+            exit(1); // invalid package name
+        }
+        $package = $info['package'];
+        $channel = $info['channel'];
         // "pear shell-test Foo"
+        if (!$reg->packageExists($package, $channel)) {
+            if ($channel == 'pecl.php.net') {
+                if ($reg->packageExists($package, 'pear.php.net')) {
+                    $channel = 'pear.php.net'; // magically change channels for extensions
+                }
+            }
+        }
         if (sizeof($params) == 1) {
-            if (!$reg->packageExists($params[0])) {
+            if (!$reg->packageExists($package, $channel)) {
                 exit(1);
             }
             // "pear shell-test Foo 1.0"
         } elseif (sizeof($params) == 2) {
-            $v = $reg->packageInfo($params[0], 'version');
+            $v = $reg->packageInfo($package, 'version', $channel);
             if (!$v || !version_compare("$v", "{$params[1]}", "ge")) {
                 exit(1);
             }
             // "pear shell-test Foo ge 1.0"
         } elseif (sizeof($params) == 3) {
-            $v = $reg->packageInfo($params[0], 'version');
+            $v = $reg->packageInfo($package, 'version', $channel);
             if (!$v || !version_compare("$v", "{$params[2]}", $params[1])) {
                 exit(1);
             }
@@ -211,27 +353,68 @@
 
     function doInfo($command, $options, $params)
     {
-        // $params[0] The package for showing info
-        if (sizeof($params) != 1) {
-            return $this->raiseError("This command only accepts one param: ".
-                                     "the package you want information");
-        }
-        if (@is_file($params[0])) {
-            $obj  = &new PEAR_Common();
-            $info = $obj->infoFromAny($params[0]);
+        if (count($params) != 1) {
+            return $this->raiseError('pear info expects 1 parameter');
+        }
+        $info = false;
+        $reg = &$this->config->getRegistry();
+        if ((@is_file($params[0]) && !is_dir($params[0])) || $fp = @fopen($params[0], 'r')) {
+            @fclose($fp);
+            if (!class_exists('PEAR_PackageFile')) {
+                require_once 'PEAR/PackageFile.php';
+            }
+            $pkg = &new PEAR_PackageFile($this->config, $this->_debug);
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $obj = &$pkg->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($obj)) {
+                $uinfo = $obj->getUserInfo();
+                if (is_array($uinfo)) {
+                    foreach ($uinfo as $message) {
+                        if (is_array($message)) {
+                            $message = $message['message'];
+                        }
+                        $this->ui->outputData($message);
+                    }
+                }
+                return $this->raiseError($obj);
+            }
+            if ($obj->getPackagexmlVersion() == '1.0') {
+                $info = $obj->toArray();
+            } else {
+                return $this->_doInfo2($command, $options, $params, $obj, false);
+            }
         } else {
-            $reg = &new PEAR_Registry($this->config->get('php_dir'));
-            $info = $reg->packageInfo($params[0]);
+            $parsed = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
+            if (PEAR::isError($parsed)) {
+                return $this->raiseError($parsed);
+            }
+            $package = $parsed['package'];
+            $channel = $parsed['channel'];
+            $info = $reg->packageInfo($package, null, $channel);
+            if (isset($info['old'])) {
+                $obj = $reg->getPackage($package, $channel);
+                return $this->_doInfo2($command, $options, $params, $obj, true);
+            }
         }
         if (PEAR::isError($info)) {
             return $info;
         }
         if (empty($info)) {
-            $this->raiseError("Nothing found for `$params[0]'");
+            $this->raiseError("No information found for `$params[0]'");
             return;
         }
         unset($info['filelist']);
+        unset($info['dirtree']);
         unset($info['changelog']);
+        if (isset($info['xsdversion'])) {
+            $info['package.xml version'] = $info['xsdversion'];
+            unset($info['xsdversion']);
+        }
+        if (isset($info['packagerversion'])) {
+            $info['packaged with PEAR version'] = $info['packagerversion'];
+            unset($info['packagerversion']);
+        }
         $keys = array_keys($info);
         $longtext = array('description', 'summary');
         foreach ($keys as $key) {
@@ -279,7 +462,12 @@
                             } else {
                                 $version = '';
                             }
-                            $dstr .= "$type $name$rel $version\n";
+                            if (isset($d['optional']) && $d['optional'] == 'yes') {
+                                $optional = ' (optional)';
+                            } else {
+                                $optional = '';
+                            }
+                            $dstr .= "$type $name$rel $version$optional\n";
                         }
                         $info[$key] = $dstr;
                         break;
@@ -315,6 +503,16 @@
                         $info[$key] = $pstr;
                         break;
                     }
+                    case 'configure_options' : {
+                        foreach ($info[$key] as $i => $p) {
+                            $info[$key][$i] = array_map(null, array_keys($p), array_values($p));
+                            $info[$key][$i] = array_map(create_function('$a',
+                                'return join(" = ",$a);'), $info[$key][$i]);
+                            $info[$key][$i] = implode(', ', $info[$key][$i]);
+                        }
+                        $info[$key] = implode("\n", $info[$key]);
+                        break;
+                    }
                     default: {
                         $info[$key] = implode(", ", $info[$key]);
                         break;
@@ -325,6 +523,9 @@
                 $hdate = date('Y-m-d', $info[$key]);
                 unset($info[$key]);
                 $info['Last Modified'] = $hdate;
+            } elseif ($key == '_lastversion') {
+                $info['Last Installed Version'] = $info[$key] ? $info[$key] : '- None -';
+                unset($info[$key]);
             } else {
                 $info[$key] = trim($info[$key]);
                 if (in_array($key, $longtext)) {
@@ -346,6 +547,451 @@
     }
 
     // }}}
+
+    /**
+     * @access private
+     */
+    function _doInfo2($command, $options, $params, &$obj, $installed)
+    {
+        $reg = &$this->config->getRegistry();
+        $caption = 'About ' . $obj->getChannel() . '/' .$obj->getPackage() . '-' .
+            $obj->getVersion();
+        $data = array(
+            'caption' => $caption,
+            'border' => true);
+        switch ($obj->getPackageType()) {
+            case 'php' :
+                $release = 'PEAR-style PHP-based Package';
+            break;
+            case 'extsrc' :
+                $release = 'PECL-style PHP extension (source code)';
+            break;
+            case 'extbin' :
+                $release = 'PECL-style PHP extension (binary)';
+            break;
+            case 'bundle' :
+                $release = 'Package bundle (collection of packages)';
+            break;
+        }
+        $extends = $obj->getExtends();
+        $extends = $extends ?
+            $obj->getPackage() . ' (extends ' . $extends . ')' : $obj->getPackage();
+        if ($src = $obj->getSourcePackage()) {
+            $extends .= ' (source package ' . $src['channel'] . '/' . $src['package'] . ')';
+        }
+        $info = array(
+            'Release Type' => $release,
+            'Name' => $extends,
+            'Channel' => $obj->getChannel(),
+            'Summary' => preg_replace('/  +/', ' ', $obj->getSummary()),
+            'Description' => preg_replace('/  +/', ' ', $obj->getDescription()),
+            );
+        $info['Maintainers'] = '';
+        foreach (array('lead', 'developer', 'contributor', 'helper') as $role) {
+            $leads = $obj->{"get{$role}s"}();
+            if (!$leads) {
+                continue;
+            }
+            if (isset($leads['active'])) {
+                $leads = array($leads);
+            }
+            foreach ($leads as $lead) {
+                if (!empty($info['Maintainers'])) {
+                    $info['Maintainers'] .= "\n";
+                }
+                $info['Maintainers'] .= $lead['name'] . ' <';
+                $info['Maintainers'] .= $lead['email'] . "> ($role)";
+            }
+        }
+        $info['Release Date'] = $obj->getDate();
+        if ($time = $obj->getTime()) {
+            $info['Release Date'] .= ' ' . $time;
+        }
+        $info['Release Version'] = $obj->getVersion() . ' (' . $obj->getState() . ')';
+        $info['API Version'] = $obj->getVersion('api') . ' (' . $obj->getState('api') . ')';
+        $info['License'] = $obj->getLicense();
+        $uri = $obj->getLicenseLocation();
+        if ($uri) {
+            if (isset($uri['uri'])) {
+                $info['License'] .= ' (' . $uri['uri'] . ')';
+            } else {
+                $extra = $obj->getInstalledLocation($info['filesource']);
+                if ($extra) {
+                    $info['License'] .= ' (' . $uri['filesource'] . ')';
+                }
+            }
+        }
+        $info['Release Notes'] = $obj->getNotes();
+        if ($compat = $obj->getCompatible()) {
+            $info['Compatible with'] = '';
+            foreach ($compat as $package) {
+                $info['Compatible with'] .= $package['channel'] . '/' . $package['package'] .
+                    "\nVersions >= " . $package['min'] . ', <= ' . $package['max'];
+                if (isset($package['exclude'])) {
+                    if (is_array($package['exclude'])) {
+                        $package['exclude'] = implode(', ', $package['exclude']);
+                    }
+                    if (!isset($info['Not Compatible with'])) {
+                        $info['Not Compatible with'] = '';
+                    } else {
+                        $info['Not Compatible with'] .= "\n";
+                    }
+                    $info['Not Compatible with'] .= $package['channel'] . '/' .
+                        $package['package'] . "\nVersions " . $package['exclude'];
+                }
+            }
+        }
+        $usesrole = $obj->getUsesrole();
+        if ($usesrole) {
+            if (!isset($usesrole[0])) {
+                $usesrole = array($usesrole);
+            }
+            foreach ($usesrole as $roledata) {
+                if (isset($info['Uses Custom Roles'])) {
+                    $info['Uses Custom Roles'] .= "\n";
+                } else {
+                    $info['Uses Custom Roles'] = '';
+                }
+                if (isset($roledata['package'])) {
+                    $rolepackage = $reg->parsedPackageNameToString($roledata, true);
+                } else {
+                    $rolepackage = $roledata['uri'];
+                }
+                $info['Uses Custom Roles'] .= $roledata['role'] . ' (' . $rolepackage . ')';
+            }
+        }
+        $usestask = $obj->getUsestask();
+        if ($usestask) {
+            if (!isset($usestask[0])) {
+                $usestask = array($usestask);
+            }
+            foreach ($usestask as $taskdata) {
+                if (isset($info['Uses Custom Tasks'])) {
+                    $info['Uses Custom Tasks'] .= "\n";
+                } else {
+                    $info['Uses Custom Tasks'] = '';
+                }
+                if (isset($taskdata['package'])) {
+                    $taskpackage = $reg->parsedPackageNameToString($taskdata, true);
+                } else {
+                    $taskpackage = $taskdata['uri'];
+                }
+                $info['Uses Custom Tasks'] .= $taskdata['task'] . ' (' . $taskpackage . ')';
+            }
+        }
+        $deps = $obj->getDependencies();
+        $info['Required Dependencies'] = 'PHP version ' . $deps['required']['php']['min'];
+        if (isset($deps['required']['php']['max'])) {
+            $info['Required Dependencies'] .= '-' . $deps['required']['php']['max'] . "\n";
+        } else {
+            $info['Required Dependencies'] .= "\n";
+        }
+        if (isset($deps['required']['php']['exclude'])) {
+            if (!isset($info['Not Compatible with'])) {
+                $info['Not Compatible with'] = '';
+            } else {
+                $info['Not Compatible with'] .= "\n";
+            }
+            if (is_array($deps['required']['php']['exclude'])) {
+                $deps['required']['php']['exclude'] =
+                    implode(', ', $deps['required']['php']['exclude']);
+            }
+            $info['Not Compatible with'] .= "PHP versions\n  " .
+                $deps['required']['php']['exclude'];
+        }
+        $info['Required Dependencies'] .= 'PEAR installer version';
+        if (isset($deps['required']['pearinstaller']['max'])) {
+            $info['Required Dependencies'] .= 's ' .
+                $deps['required']['pearinstaller']['min'] . '-' .
+                $deps['required']['pearinstaller']['max'];
+        } else {
+            $info['Required Dependencies'] .= ' ' .
+                $deps['required']['pearinstaller']['min'] . ' or newer';
+        }
+        if (isset($deps['required']['pearinstaller']['exclude'])) {
+            if (!isset($info['Not Compatible with'])) {
+                $info['Not Compatible with'] = '';
+            } else {
+                $info['Not Compatible with'] .= "\n";
+            }
+            if (is_array($deps['required']['pearinstaller']['exclude'])) {
+                $deps['required']['pearinstaller']['exclude'] =
+                    implode(', ', $deps['required']['pearinstaller']['exclude']);
+            }
+            $info['Not Compatible with'] .= "PEAR installer\n  Versions " .
+                $deps['required']['pearinstaller']['exclude'];
+        }
+        foreach (array('Package', 'Extension') as $type) {
+            $index = strtolower($type);
+            if (isset($deps['required'][$index])) {
+                if (isset($deps['required'][$index]['name'])) {
+                    $deps['required'][$index] = array($deps['required'][$index]);
+                }
+                foreach ($deps['required'][$index] as $package) {
+                    if (isset($package['conflicts'])) {
+                        $infoindex = 'Not Compatible with';
+                        if (!isset($info['Not Compatible with'])) {
+                            $info['Not Compatible with'] = '';
+                        } else {
+                            $info['Not Compatible with'] .= "\n";
+                        }
+                    } else {
+                        $infoindex = 'Required Dependencies';
+                        $info[$infoindex] .= "\n";
+                    }
+                    if ($index == 'extension') {
+                        $name = $package['name'];
+                    } else {
+                        if (isset($package['channel'])) {
+                            $name = $package['channel'] . '/' . $package['name'];
+                        } else {
+                            $name = '__uri/' . $package['name'] . ' (static URI)';
+                        }
+                    }
+                    $info[$infoindex] .= "$type $name";
+                    if (isset($package['uri'])) {
+                        $info[$infoindex] .= "\n  Download URI: $package[uri]";
+                        continue;
+                    }
+                    if (isset($package['max']) && isset($package['min'])) {
+                        $info[$infoindex] .= " \n  Versions " .
+                            $package['min'] . '-' . $package['max'];
+                    } elseif (isset($package['min'])) {
+                        $info[$infoindex] .= " \n  Version " .
+                            $package['min'] . ' or newer';
+                    } elseif (isset($package['max'])) {
+                        $info[$infoindex] .= " \n  Version " .
+                            $package['max'] . ' or older';
+                    }
+                    if (isset($package['recommended'])) {
+                        $info[$infoindex] .= "\n  Recommended version: $package[recommended]";
+                    }
+                    if (isset($package['exclude'])) {
+                        if (!isset($info['Not Compatible with'])) {
+                            $info['Not Compatible with'] = '';
+                        } else {
+                            $info['Not Compatible with'] .= "\n";
+                        }
+                        if (is_array($package['exclude'])) {
+                            $package['exclude'] = implode(', ', $package['exclude']);
+                        }
+                        $package['package'] = $package['name']; // for parsedPackageNameToString
+                         if (isset($package['conflicts'])) {
+                            $info['Not Compatible with'] .= '=> except ';
+                        }
+                       $info['Not Compatible with'] .= 'Package ' .
+                            $reg->parsedPackageNameToString($package, true);
+                        $info['Not Compatible with'] .= "\n  Versions " . $package['exclude'];
+                    }
+                }
+            }
+        }
+        if (isset($deps['required']['os'])) {
+            if (isset($deps['required']['os']['name'])) {
+                $dep['required']['os']['name'] = array($dep['required']['os']['name']);
+            }
+            foreach ($dep['required']['os'] as $os) {
+                if (isset($os['conflicts']) && $os['conflicts'] == 'yes') {
+                    if (!isset($info['Not Compatible with'])) {
+                        $info['Not Compatible with'] = '';
+                    } else {
+                        $info['Not Compatible with'] .= "\n";
+                    }
+                    $info['Not Compatible with'] .= "$os[name] Operating System";
+                } else {
+                    $info['Required Dependencies'] .= "\n";
+                    $info['Required Dependencies'] .= "$os[name] Operating System";
+                }
+            }
+        }
+        if (isset($deps['required']['arch'])) {
+            if (isset($deps['required']['arch']['pattern'])) {
+                $dep['required']['arch']['pattern'] = array($dep['required']['os']['pattern']);
+            }
+            foreach ($dep['required']['arch'] as $os) {
+                if (isset($os['conflicts']) && $os['conflicts'] == 'yes') {
+                    if (!isset($info['Not Compatible with'])) {
+                        $info['Not Compatible with'] = '';
+                    } else {
+                        $info['Not Compatible with'] .= "\n";
+                    }
+                    $info['Not Compatible with'] .= "OS/Arch matching pattern '/$os[pattern]/'";
+                } else {
+                    $info['Required Dependencies'] .= "\n";
+                    $info['Required Dependencies'] .= "OS/Arch matching pattern '/$os[pattern]/'";
+                }
+            }
+        }
+        if (isset($deps['optional'])) {
+            foreach (array('Package', 'Extension') as $type) {
+                $index = strtolower($type);
+                if (isset($deps['optional'][$index])) {
+                    if (isset($deps['optional'][$index]['name'])) {
+                        $deps['optional'][$index] = array($deps['optional'][$index]);
+                    }
+                    foreach ($deps['optional'][$index] as $package) {
+                        if (isset($package['conflicts']) && $package['conflicts'] == 'yes') {
+                            $infoindex = 'Not Compatible with';
+                            if (!isset($info['Not Compatible with'])) {
+                                $info['Not Compatible with'] = '';
+                            } else {
+                                $info['Not Compatible with'] .= "\n";
+                            }
+                        } else {
+                            $infoindex = 'Optional Dependencies';
+                            if (!isset($info['Optional Dependencies'])) {
+                                $info['Optional Dependencies'] = '';
+                            } else {
+                                $info['Optional Dependencies'] .= "\n";
+                            }
+                        }
+                        if ($index == 'extension') {
+                            $name = $package['name'];
+                        } else {
+                            if (isset($package['channel'])) {
+                                $name = $package['channel'] . '/' . $package['name'];
+                            } else {
+                                $name = '__uri/' . $package['name'] . ' (static URI)';
+                            }
+                        }
+                        $info[$infoindex] .= "$type $name";
+                        if (isset($package['uri'])) {
+                            $info[$infoindex] .= "\n  Download URI: $package[uri]";
+                            continue;
+                        }
+                        if ($infoindex == 'Not Compatible with') {
+                            // conflicts is only used to say that all versions conflict
+                            continue;
+                        }
+                        if (isset($package['max']) && isset($package['min'])) {
+                            $info[$infoindex] .= " \n  Versions " .
+                                $package['min'] . '-' . $package['max'];
+                        } elseif (isset($package['min'])) {
+                            $info[$infoindex] .= " \n  Version " .
+                                $package['min'] . ' or newer';
+                        } elseif (isset($package['max'])) {
+                            $info[$infoindex] .= " \n  Version " .
+                                $package['min'] . ' or older';
+                        }
+                        if (isset($package['recommended'])) {
+                            $info[$infoindex] .= "\n  Recommended version: $package[recommended]";
+                        }
+                        if (isset($package['exclude'])) {
+                            if (!isset($info['Not Compatible with'])) {
+                                $info['Not Compatible with'] = '';
+                            } else {
+                                $info['Not Compatible with'] .= "\n";
+                            }
+                            if (is_array($package['exclude'])) {
+                                $package['exclude'] = implode(', ', $package['exclude']);
+                            }
+                            $info['Not Compatible with'] .= "Package $package\n  Versions " .
+                                $package['exclude'];
+                        }
+                    }
+                }
+            }
+        }
+        if (isset($deps['group'])) {
+            if (!isset($deps['group'][0])) {
+                $deps['group'] = array($deps['group']);
+            }
+            foreach ($deps['group'] as $group) {
+                $info['Dependency Group ' . $group['attribs']['name']] = $group['attribs']['hint'];
+                $groupindex = $group['attribs']['name'] . ' Contents';
+                $info[$groupindex] = '';
+                foreach (array('Package', 'Extension') as $type) {
+                    $index = strtolower($type);
+                    if (isset($group[$index])) {
+                        if (isset($group[$index]['name'])) {
+                            $group[$index] = array($group[$index]);
+                        }
+                        foreach ($group[$index] as $package) {
+                            if (!empty($info[$groupindex])) {
+                                $info[$groupindex] .= "\n";
+                            }
+                            if ($index == 'extension') {
+                                $name = $package['name'];
+                            } else {
+                                if (isset($package['channel'])) {
+                                    $name = $package['channel'] . '/' . $package['name'];
+                                } else {
+                                    $name = '__uri/' . $package['name'] . ' (static URI)';
+                                }
+                            }
+                            if (isset($package['uri'])) {
+                                if (isset($package['conflicts']) && $package['conflicts'] == 'yes') {
+                                    $info[$groupindex] .= "Not Compatible with $type $name";
+                                } else {
+                                    $info[$groupindex] .= "$type $name";
+                                }
+                                $info[$groupindex] .= "\n  Download URI: $package[uri]";
+                                continue;
+                            }
+                            if (isset($package['conflicts']) && $package['conflicts'] == 'yes') {
+                                $info[$groupindex] .= "Not Compatible with $type $name";
+                                continue;
+                            }
+                            $info[$groupindex] .= "$type $name";
+                            if (isset($package['max']) && isset($package['min'])) {
+                                $info[$groupindex] .= " \n  Versions " .
+                                    $package['min'] . '-' . $package['max'];
+                            } elseif (isset($package['min'])) {
+                                $info[$groupindex] .= " \n  Version " .
+                                    $package['min'] . ' or newer';
+                            } elseif (isset($package['max'])) {
+                                $info[$groupindex] .= " \n  Version " .
+                                    $package['min'] . ' or older';
+                            }
+                            if (isset($package['recommended'])) {
+                                $info[$groupindex] .= "\n  Recommended version: $package[recommended]";
+                            }
+                            if (isset($package['exclude'])) {
+                                if (!isset($info['Not Compatible with'])) {
+                                    $info['Not Compatible with'] = '';
+                                } else {
+                                    $info[$groupindex] .= "Not Compatible with\n";
+                                }
+                                if (is_array($package['exclude'])) {
+                                    $package['exclude'] = implode(', ', $package['exclude']);
+                                }
+                                $info[$groupindex] .= "  Package $package\n  Versions " .
+                                    $package['exclude'];
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if ($obj->getPackageType() == 'bundle') {
+            $info['Bundled Packages'] = '';
+            foreach ($obj->getBundledPackages() as $package) {
+                if (!empty($info['Bundled Packages'])) {
+                    $info['Bundled Packages'] .= "\n";
+                }
+                if (isset($package['uri'])) {
+                    $info['Bundled Packages'] .= '__uri/' . $package['name'];
+                    $info['Bundled Packages'] .= "\n  (URI: $package[uri]";
+                } else {
+                    $info['Bundled Packages'] .= $package['channel'] . '/' . $package['name'];
+                }
+            }
+        }
+        $info['package.xml version'] = '2.0';
+        if ($installed) {
+            if ($obj->getLastModified()) {
+                $info['Last Modified'] = date('Y-m-d H:i', $obj->getLastModified());
+            }
+            $v = $obj->getLastInstalledVersion();
+            $info['Last Installed Version'] = $v ? $v : '- None -';
+        }
+        foreach ($info as $key => $value) {
+            $data['data'][] = array($key, $value);
+        }
+        $data['raw'] = $obj->getArray(); // no validation needed
+
+        $this->ui->outputData($data, 'package-info');
+    }
 }
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Registry.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Registry.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Registry.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Registry.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,54 @@
+<commands version="1.0">
+ <list>
+  <summary>List Installed Packages In The Default Channel</summary>
+  <function>doList</function>
+  <shortcut>l</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>list installed packages from this channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+   <allchannels>
+    <shortopt>a</shortopt>
+    <doc>list installed packages from all channels</doc>
+   </allchannels>
+  </options>
+  <doc>&lt;package&gt;
+If invoked without parameters, this command lists the PEAR packages
+installed in your php_dir ({config php_dir}).  With a parameter, it
+lists the files in a package.
+</doc>
+ </list>
+ <list-files>
+  <summary>List Files In Installed Package</summary>
+  <function>doFileList</function>
+  <shortcut>fl</shortcut>
+  <options />
+  <doc>&lt;package&gt;
+List the files in an installed package.
+</doc>
+ </list-files>
+ <shell-test>
+  <summary>Shell Script Test</summary>
+  <function>doShellTest</function>
+  <shortcut>st</shortcut>
+  <options />
+  <doc>&lt;package&gt; [[relation] version]
+Tests if a package is installed in the system. Will exit(1) if it is not.
+   &lt;relation&gt;   The version comparison operator. One of:
+                &lt;, lt, &lt;=, le, &gt;, gt, &gt;=, ge, ==, =, eq, !=, &lt;&gt;, ne
+   &lt;version&gt;    The version to compare with
+</doc>
+ </shell-test>
+ <info>
+  <summary>Display information about a package</summary>
+  <function>doInfo</function>
+  <shortcut>in</shortcut>
+  <options />
+  <doc>&lt;package&gt;
+Displays information about a package. The package argument may be a
+local package file, an URL to a package file, or the name of an
+installed package.</doc>
+ </info>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Remote.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Remote.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Remote.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Remote.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,29 +1,46 @@
 <?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Remote.php,v 1.39 2004/04/03 15:56:00 cellog Exp $
-
+/**
+ * PEAR_Command_Remote (remote-info, list-upgrades, remote-list, search, list-all, download,
+ * clear-cache commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Remote.php,v 1.87 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
 require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Remote.php';
-require_once 'PEAR/Registry.php';
+require_once 'PEAR/REST.php';
 
+/**
+ * PEAR commands for remote server querying
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
 class PEAR_Command_Remote extends PEAR_Command_Common
 {
     // {{{ command definitions
@@ -42,15 +59,23 @@
             'function' => 'doListUpgrades',
             'shortcut' => 'lu',
             'options' => array(),
-            'doc' => '
+            'doc' => '[preferred_state]
 List releases on the server of packages you have installed where
-a newer version is available with the same release state (stable etc.).'
+a newer version is available with the same release state (stable etc.)
+or the state passed as the second parameter.'
             ),
         'remote-list' => array(
             'summary' => 'List Remote Packages',
             'function' => 'doRemoteList',
             'shortcut' => 'rl',
-            'options' => array(),
+            'options' => array(
+                'channel' =>
+                    array(
+                    'shortopt' => 'c',
+                    'doc' => 'specify a channel other than the default channel',
+                    'arg' => 'CHAN',
+                    )
+                ),
             'doc' => '
 Lists the packages available on the configured server along with the
 latest stable release of each package.',
@@ -59,16 +84,32 @@
             'summary' => 'Search remote package database',
             'function' => 'doSearch',
             'shortcut' => 'sp',
-            'options' => array(),
-            'doc' => '
-Lists all packages which match the search parameters (first param
-is package name, second package info)',
+            'options' => array(
+                'channel' =>
+                    array(
+                    'shortopt' => 'c',
+                    'doc' => 'specify a channel other than the default channel',
+                    'arg' => 'CHAN',
+                    )
+                ),
+            'doc' => '[packagename] [packageinfo]
+Lists all packages which match the search parameters.  The first
+parameter is a fragment of a packagename.  The default channel
+will be used unless explicitly overridden.  The second parameter
+will be used to match any portion of the summary/description',
             ),
         'list-all' => array(
             'summary' => 'List All Packages',
             'function' => 'doListAll',
             'shortcut' => 'la',
-            'options' => array(),
+            'options' => array(
+                'channel' =>
+                    array(
+                    'shortopt' => 'c',
+                    'doc' => 'specify a channel other than the default channel',
+                    'arg' => 'CHAN',
+                    )
+                ),
             'doc' => '
 Lists the packages available on the configured server along with the
 latest stable release of each package.',
@@ -83,18 +124,18 @@
                     'doc' => 'download an uncompressed (.tar) file',
                     ),
                 ),
-            'doc' => '{package|package-version}
-Download a package tarball.  The file will be named as suggested by the
+            'doc' => '<package>...
+Download package tarballs.  The files will be named as suggested by the
 server, for example if you download the DB package and the latest stable
-version of DB is 1.2, the downloaded file will be DB-1.2.tgz.',
+version of DB is 1.6.5, the downloaded file will be DB-1.6.5.tgz.',
             ),
         'clear-cache' => array(
-            'summary' => 'Clear XML-RPC Cache',
+            'summary' => 'Clear Web Services Cache',
             'function' => 'doClearCache',
             'shortcut' => 'cc',
             'options' => array(),
             'doc' => '
-Clear the XML-RPC cache.  See also the cache_ttl configuration
+Clear the XML-RPC/REST cache.  See also the cache_ttl configuration
 parameter.
 ',
             ),
@@ -115,6 +156,20 @@
 
     // }}}
 
+    function _checkChannelForStatus($channel, $chan)
+    {
+        $rest = new PEAR_REST($this->config);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $a = $rest->downloadHttp('http://' . $channel .
+            '/channel.xml', $chan->lastModified());
+        PEAR::staticPopErrorHandling();
+        if (!PEAR::isError($a) && $a) {
+            $this->ui->outputData('WARNING: channel "' . $channel . '" has ' .
+                'updated its protocols, use "channel-update ' . $channel .
+                '" to update');
+        }
+    }
+
     // {{{ doRemoteInfo()
 
     function doRemoteInfo($command, $options, $params)
@@ -122,17 +177,42 @@
         if (sizeof($params) != 1) {
             return $this->raiseError("$command expects one param: the remote package name");
         }
-        $r = new PEAR_Remote($this->config);
-        $info = $r->call('package.info', $params[0]);
+        $savechannel = $channel = $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        $package = $params[0];
+        $parsed = $reg->parsePackageName($package, $channel);
+        if (PEAR::isError($parsed)) {
+            return $this->raiseError('Invalid package name "' . $package . '"');
+        }
+        
+        $channel = $parsed['channel'];
+        $this->config->set('default_channel', $channel);
+        $chan = $reg->getChannel($channel);
+        $this->_checkChannelForStatus($channel, $chan);
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', array());
+            $info = $rest->packageInfo($base, $parsed['package']);
+        } else {
+            $r = &$this->config->getRemote();
+            $info = $r->call('package.info', $parsed['package']);
+        }
         if (PEAR::isError($info)) {
+            $this->config->set('default_channel', $savechannel);
             return $this->raiseError($info);
         }
+        if (!isset($info['name'])) {
+            return $this->raiseError('No remote package "' . $package . '" was found');
+        }
 
-        $reg = new PEAR_Registry($this->config->get('php_dir'));
-        $installed = $reg->packageInfo($info['name']);
+        $installed = $reg->packageInfo($info['name'], null, $channel);
         $info['installed'] = $installed['version'] ? $installed['version'] : '- no -';
+        if (is_array($info['installed'])) {
+            $info['installed'] = $info['installed']['release'];
+        }
 
         $this->ui->outputData($info, $command);
+        $this->config->set('default_channel', $savechannel);
 
         return true;
     }
@@ -142,27 +222,60 @@
 
     function doRemoteList($command, $options, $params)
     {
-        $r = new PEAR_Remote($this->config);
+        $savechannel = $channel = $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        if (isset($options['channel'])) {
+            $channel = $options['channel'];
+            if ($reg->channelExists($channel)) {
+                $this->config->set('default_channel', $channel);
+            } else {
+                return $this->raiseError('Channel "' . $channel . '" does not exist');
+            }
+        }
+        $chan = $reg->getChannel($channel);
+        $this->_checkChannelForStatus($channel, $chan);
         $list_options = false;
-        if ($this->config->get('preferred_state') == 'stable')
+        if ($this->config->get('preferred_state') == 'stable') {
             $list_options = true;
-        $available = $r->call('package.listAll', $list_options);
+        }
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) {
+            // use faster list-all if available
+            $rest = &$this->config->getREST('1.1', array());
+            $available = $rest->listAll($base, $list_options);
+        } elseif ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', array());
+            $available = $rest->listAll($base, $list_options);
+        } else {
+            $r = &$this->config->getRemote();
+            if ($channel == 'pear.php.net') {
+                // hack because of poor pearweb design
+                $available = $r->call('package.listAll', true, $list_options, false);
+            } else {
+                $available = $r->call('package.listAll', true, $list_options);
+            }
+        }
         if (PEAR::isError($available)) {
+            $this->config->set('default_channel', $savechannel);
             return $this->raiseError($available);
         }
         $i = $j = 0;
         $data = array(
-            'caption' => 'Available packages:',
+            'caption' => 'Channel ' . $channel . ' Available packages:',
             'border' => true,
             'headline' => array('Package', 'Version'),
             );
-        foreach ($available as $name => $info) {
-            $data['data'][] = array($name, isset($info['stable']) ? $info['stable'] : '-n/a-');
-        }
         if (count($available)==0) {
-            $data = '(no packages installed yet)';
+            $data = '(no packages available yet)';
+        } else {
+            foreach ($available as $name => $info) {
+                $data['data'][] = array($name, (isset($info['stable']) && $info['stable'])
+                    ? $info['stable'] : '-n/a-');
+            }
         }
         $this->ui->outputData($data, $command);
+        $this->config->set('default_channel', $savechannel);
         return true;
     }
 
@@ -171,40 +284,71 @@
 
     function doListAll($command, $options, $params)
     {
-        $r = new PEAR_Remote($this->config);
-        $reg = new PEAR_Registry($this->config->get('php_dir'));
+        $savechannel = $channel = $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        if (isset($options['channel'])) {
+            $channel = $options['channel'];
+            if ($reg->channelExists($channel)) {
+                $this->config->set('default_channel', $channel);
+            } else {
+                return $this->raiseError("Channel \"$channel\" does not exist");
+            }
+        }
         $list_options = false;
-        if ($this->config->get('preferred_state') == 'stable')
+        if ($this->config->get('preferred_state') == 'stable') {
             $list_options = true;
-        $available = $r->call('package.listAll', $list_options);
-        if (PEAR::isError($available)) {
-            return $this->raiseError($available);
         }
-        if (!is_array($available)) {
-            return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "'.$available.'")');
+        $chan = $reg->getChannel($channel);
+        $this->_checkChannelForStatus($channel, $chan);
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) {
+            // use faster list-all if available
+            $rest = &$this->config->getREST('1.1', array());
+            $available = $rest->listAll($base, $list_options, false);
+        } elseif ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', array());
+            $available = $rest->listAll($base, $list_options, false);
+        } else {
+            $r = &$this->config->getRemote();
+            if ($channel == 'pear.php.net') {
+                // hack because of poor pearweb design
+                $available = $r->call('package.listAll', true, $list_options, false);
+            } else {
+                $available = $r->call('package.listAll', true, $list_options);
+            }
+        }
+        if (PEAR::isError($available)) {
+            $this->config->set('default_channel', $savechannel);
+            return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "' . $available->getMessage() . '")');
         }
         $data = array(
             'caption' => 'All packages:',
             'border' => true,
             'headline' => array('Package', 'Latest', 'Local'),
             );
-        $local_pkgs = $reg->listPackages();
-        
+        $local_pkgs = $reg->listPackages($channel);
+
         foreach ($available as $name => $info) {
-            $installed = $reg->packageInfo($name);
+            $installed = $reg->packageInfo($name, null, $channel);
+            if (is_array($installed['version'])) {
+                $installed['version'] = $installed['version']['release'];
+            }
             $desc = $info['summary'];
-            if (isset($params[$name]))
+            if (isset($params[$name])) {
                 $desc .= "\n\n".$info['description'];
-
+            }
             if (isset($options['mode']))
             {
-                if ($options['mode'] == 'installed' && !isset($installed['version']))
+                if ($options['mode'] == 'installed' && !isset($installed['version'])) {
                     continue;
-                if ($options['mode'] == 'notinstalled' && isset($installed['version']))
+                }
+                if ($options['mode'] == 'notinstalled' && isset($installed['version'])) {
                     continue;
+                }
                 if ($options['mode'] == 'upgrades'
-                    && (!isset($installed['version']) || $installed['version'] == $info['stable']))
-                {
+                      && (!isset($installed['version']) || version_compare($installed['version'],
+                      $info['stable'], '>='))) {
                     continue;
                 }
             }
@@ -213,26 +357,35 @@
                 unset($local_pkgs[$pos]);
             }
 
+            if (isset($info['stable']) && !$info['stable']) {
+                $info['stable'] = null;
+            }
             $data['data'][$info['category']][] = array(
-                $name,
+                $reg->channelAlias($channel) . '/' . $name,
                 @$info['stable'],
                 @$installed['version'],
                 @$desc,
                 @$info['deps'],
                 );
         }
-        
+
+        if (isset($options['mode']) && in_array($options['mode'], array('notinstalled', 'upgrades'))) {
+            $this->config->set('default_channel', $savechannel);
+            $this->ui->outputData($data, $command);
+            return true;
+        }
         foreach ($local_pkgs as $name) {
-            $info = $reg->packageInfo($name);
+            $info = &$reg->getPackage($name, $channel);
             $data['data']['Local'][] = array(
-                $info['package'], 
+                $reg->channelAlias($channel) . '/' . $info->getPackage(),
                 '',
-                $info['version'],
-                $info['summary'],
-                @$info['release_deps']
+                $info->getVersion(),
+                $info->getSummary(),
+                $info->getDeps()
                 );
         }
 
+        $this->config->set('default_channel', $savechannel);
         $this->ui->outputData($data, $command);
         return true;
     }
@@ -248,77 +401,105 @@
             return $this->raiseError('no valid search string supplied');
         };
 
-        $r = new PEAR_Remote($this->config);
-        $reg = new PEAR_Registry($this->config->get('php_dir'));
-        $available = $r->call('package.listAll', true, false);
+        $savechannel = $channel = $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        $package = $params[0];
+        $summary = isset($params[1]) ? $params[1] : false;
+        if (isset($options['channel'])) {
+            $reg = &$this->config->getRegistry();
+            $channel = $options['channel'];
+            if ($reg->channelExists($channel)) {
+                $this->config->set('default_channel', $channel);
+            } else {
+                return $this->raiseError('Channel "' . $channel . '" does not exist');
+            }
+        }
+        $chan = $reg->getChannel($channel);
+        $this->_checkChannelForStatus($channel, $chan);
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', array());
+            $available = $rest->listAll($base, false, false, $package, $summary);
+        } else {
+            $r = &$this->config->getRemote();
+            $available = $r->call('package.search', $package, $summary, true, 
+                $this->config->get('preferred_state') == 'stable', true);
+        }
         if (PEAR::isError($available)) {
+            $this->config->set('default_channel', $savechannel);
             return $this->raiseError($available);
         }
+        if (!$available) {
+            return $this->raiseError('no packages found that match pattern "' . $package . '"');
+        }
         $data = array(
-            'caption' => 'Matched packages:',
+            'caption' => 'Matched packages, channel ' . $channel . ':',
             'border' => true,
             'headline' => array('Package', 'Stable/(Latest)', 'Local'),
             );
 
         foreach ($available as $name => $info) {
-            $found = (!empty($params[0]) && stristr($name, $params[0]) !== false);
-            if (!$found && !(isset($params[1]) && !empty($params[1])
-                && (stristr($info['summary'], $params[1]) !== false
-                    || stristr($info['description'], $params[1]) !== false)))
-            {
-                continue;
-            };
-
-            $installed = $reg->packageInfo($name);
+            $installed = $reg->packageInfo($name, null, $channel);
             $desc = $info['summary'];
             if (isset($params[$name]))
                 $desc .= "\n\n".$info['description'];
 
             $unstable = '';
             if ($info['unstable']) {
-                $unstable = '/(' . $info['unstable'] . $info['state'] . ')';
+                $unstable = '/(' . $info['unstable'] . ' ' . $info['state'] . ')';
             }
             if (!isset($info['stable']) || !$info['stable']) {
                 $info['stable'] = 'none';
             }
+            $version = is_array($installed['version']) ? $installed['version']['release'] :
+                $installed['version'];
             $data['data'][$info['category']][] = array(
                 $name,
                 $info['stable'] . $unstable,
-                $installed['version'],
+                $version,
                 $desc,
                 );
         }
-        if (!isset($data['data'])) {
-            return $this->raiseError('no packages found');
-        }
         $this->ui->outputData($data, $command);
+        $this->config->set('default_channel', $channel);
         return true;
     }
 
     // }}}
+    function &getDownloader($options)
+    {
+        if (!class_exists('PEAR_Downloader')) {
+            require_once 'PEAR/Downloader.php';
+        }
+        $a = &new PEAR_Downloader($this->ui, $options, $this->config);
+        return $a;
+    }
     // {{{ doDownload()
 
     function doDownload($command, $options, $params)
     {
-        //$params[0] -> The package to download
-        if (count($params) != 1) {
-            return PEAR::raiseError("download expects one argument: the package to download");
-        }
-        $server = $this->config->get('master_server');
-        if (!ereg('^http://', $params[0])) {
-            $getoption = isset($options['nocompress'])&&$options['nocompress']==1?'?uncompress=on':'';
-            $pkgfile = "http://$server/get/$params[0]".$getoption;
-        } else {
-            $pkgfile = $params[0];
+        // make certain that dependencies are ignored
+        $options['downloadonly'] = 1;
+        $downloader = &$this->getDownloader($options);
+        $downloader->setDownloadDir(getcwd());
+        $errors = array();
+        $downloaded = array();
+        $err = $downloader->download($params);
+        if (PEAR::isError($err)) {
+            return $err;
+        }
+        $errors = $downloader->getErrorMsgs();
+        if (count($errors)) {
+            $errinfo = array();
+            $errinfo['data'] = array($errors);
+            $errinfo['headline'] = 'Download Errors';
+            $this->ui->outputData($errinfo);
+            return $this->raiseError("$command failed");
+        }
+        $downloaded = $downloader->getDownloadedPackages();
+        foreach ($downloaded as $pkg) {
+            $this->ui->outputData("File $pkg[file] downloaded", $command);
         }
-        $this->bytes_downloaded = 0;
-        $saved = PEAR_Common::downloadHttp($pkgfile, $this->ui, '.',
-                                           array(&$this, 'downloadCallback'));
-        if (PEAR::isError($saved)) {
-            return $this->raiseError($saved);
-        }
-        $fname = basename($saved);
-        $this->ui->outputData("File $fname downloaded ($this->bytes_downloaded bytes)", $command);
         return true;
     }
 
@@ -334,61 +515,93 @@
 
     function doListUpgrades($command, $options, $params)
     {
-        include_once "PEAR/Registry.php";
-        $remote = new PEAR_Remote($this->config);
-        if (empty($params[0])) {
-            $state = $this->config->get('preferred_state');
-        } else {
-            $state = $params[0];
-        }
-        $caption = 'Available Upgrades';
-        if (empty($state) || $state == 'any') {
-            $latest = $remote->call("package.listLatestReleases");
-        } else {
-            $latest = $remote->call("package.listLatestReleases", $state);
-            $caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
-        }
-        $caption .= ':';
-        if (PEAR::isError($latest)) {
-            return $latest;
-        }
-        $reg = new PEAR_Registry($this->config->get('php_dir'));
-        $inst = array_flip($reg->listPackages());
-        $data = array(
-            'caption' => $caption,
-            'border' => 1,
-            'headline' => array('Package', 'Local', 'Remote', 'Size'),
-            );
-        foreach ((array)$latest as $pkg => $info) {
-            $package = strtolower($pkg);
-            if (!isset($inst[$package])) {
-                // skip packages we don't have installed
+        require_once 'PEAR/Common.php';
+        $savechannel = $channel = $this->config->get('default_channel');
+        $reg = &$this->config->getRegistry();
+        foreach ($reg->listChannels() as $channel) {
+            $inst = array_flip($reg->listPackages($channel));
+            if (!count($inst)) {
                 continue;
             }
-            extract($info);
-            $pkginfo = $reg->packageInfo($package);
-            $inst_version = $pkginfo['version'];
-            $inst_state   = $pkginfo['release_state'];
-            if (version_compare("$version", "$inst_version", "le")) {
-                // installed version is up-to-date
+            if ($channel == '__uri') {
                 continue;
             }
-            if ($filesize >= 20480) {
-                $filesize += 1024 - ($filesize % 1024);
-                $fs = sprintf("%dkB", $filesize / 1024);
-            } elseif ($filesize > 0) {
-                $filesize += 103 - ($filesize % 103);
-                $fs = sprintf("%.1fkB", $filesize / 1024.0);
+            $this->config->set('default_channel', $channel);
+            if (empty($params[0])) {
+                $state = $this->config->get('preferred_state');
             } else {
-                $fs = "  -"; // XXX center instead
+                $state = $params[0];
+            }
+            $caption = $channel . ' Available Upgrades';
+            $chan = $reg->getChannel($channel);
+            $this->_checkChannelForStatus($channel, $chan);
+            if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+                  $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+                $rest = &$this->config->getREST('1.0', array());
+                if (empty($state) || $state == 'any') {
+                    $state = false;
+                } else {
+                    $caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
+                }
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                $latest = $rest->listLatestUpgrades($base, $state, $inst, $channel, $reg);
+                PEAR::staticPopErrorHandling();
+            } else {
+                $remote = &$this->config->getRemote();
+                $remote->pushErrorHandling(PEAR_ERROR_RETURN);
+                if (empty($state) || $state == 'any') {
+                    $latest = $remote->call("package.listLatestReleases");
+                } else {
+                    $latest = $remote->call("package.listLatestReleases", $state);
+                    $caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
+                }
+                $remote->popErrorHandling();
+            }
+            if (PEAR::isError($latest)) {
+                $this->ui->outputData($latest->getMessage());
+                continue;
+            }
+            $caption .= ':';
+            if (PEAR::isError($latest)) {
+                $this->config->set('default_channel', $savechannel);
+                return $latest;
+            }
+            $data = array(
+                'caption' => $caption,
+                'border' => 1,
+                'headline' => array('Channel', 'Package', 'Local', 'Remote', 'Size'),
+                );
+            foreach ((array)$latest as $pkg => $info) {
+                $package = strtolower($pkg);
+                if (!isset($inst[$package])) {
+                    // skip packages we don't have installed
+                    continue;
+                }
+                extract($info);
+                $inst_version = $reg->packageInfo($package, 'version', $channel);
+                $inst_state   = $reg->packageInfo($package, 'release_state', $channel);
+                if (version_compare("$version", "$inst_version", "le")) {
+                    // installed version is up-to-date
+                    continue;
+                }
+                if ($filesize >= 20480) {
+                    $filesize += 1024 - ($filesize % 1024);
+                    $fs = sprintf("%dkB", $filesize / 1024);
+                } elseif ($filesize > 0) {
+                    $filesize += 103 - ($filesize % 103);
+                    $fs = sprintf("%.1fkB", $filesize / 1024.0);
+                } else {
+                    $fs = "  -"; // XXX center instead
+                }
+                $data['data'][] = array($channel, $pkg, "$inst_version ($inst_state)", "$version ($state)", $fs);
+            }
+            if (empty($data['data'])) {
+                $this->ui->outputData('Channel ' . $channel . ': No upgrades available');
+            } else {
+                $this->ui->outputData($data, $command);
             }
-            $data['data'][] = array($pkg, "$inst_version ($inst_state)", "$version ($state)", $fs);
-        }
-        if (empty($data['data'])) {
-            $this->ui->outputData('No upgrades available');
-        } else {
-            $this->ui->outputData($data, $command);
         }
+        $this->config->set('default_channel', $savechannel);
         return true;
     }
 
@@ -408,7 +621,8 @@
         }
         $num = 0;
         while ($ent = readdir($dp)) {
-            if (preg_match('/^xmlrpc_cache_[a-z0-9]{32}$/', $ent)) {
+            if (preg_match('/^xmlrpc_cache_[a-z0-9]{32}$/', $ent) ||
+                  preg_match('/rest.cache(file|id)$/', $ent)) {
                 $path = $cache_dir . DIRECTORY_SEPARATOR . $ent;
                 $ok = @unlink($path);
                 if ($ok) {
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Remote.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Remote.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Remote.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Remote.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+<commands version="1.0">
+ <remote-info>
+  <summary>Information About Remote Packages</summary>
+  <function>doRemoteInfo</function>
+  <shortcut>ri</shortcut>
+  <options />
+  <doc>&lt;package&gt;
+Get details on a package from the server.</doc>
+ </remote-info>
+ <list-upgrades>
+  <summary>List Available Upgrades</summary>
+  <function>doListUpgrades</function>
+  <shortcut>lu</shortcut>
+  <options />
+  <doc>[preferred_state]
+List releases on the server of packages you have installed where
+a newer version is available with the same release state (stable etc.)
+or the state passed as the second parameter.</doc>
+ </list-upgrades>
+ <remote-list>
+  <summary>List Remote Packages</summary>
+  <function>doRemoteList</function>
+  <shortcut>rl</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>specify a channel other than the default channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>
+Lists the packages available on the configured server along with the
+latest stable release of each package.</doc>
+ </remote-list>
+ <search>
+  <summary>Search remote package database</summary>
+  <function>doSearch</function>
+  <shortcut>sp</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>specify a channel other than the default channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>[packagename] [packageinfo]
+Lists all packages which match the search parameters.  The first
+parameter is a fragment of a packagename.  The default channel
+will be used unless explicitly overridden.  The second parameter
+will be used to match any portion of the summary/description</doc>
+ </search>
+ <list-all>
+  <summary>List All Packages</summary>
+  <function>doListAll</function>
+  <shortcut>la</shortcut>
+  <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>specify a channel other than the default channel</doc>
+    <arg>CHAN</arg>
+   </channel>
+  </options>
+  <doc>
+Lists the packages available on the configured server along with the
+latest stable release of each package.</doc>
+ </list-all>
+ <download>
+  <summary>Download Package</summary>
+  <function>doDownload</function>
+  <shortcut>d</shortcut>
+  <options>
+   <nocompress>
+    <shortopt>Z</shortopt>
+    <doc>download an uncompressed (.tar) file</doc>
+   </nocompress>
+  </options>
+  <doc>&lt;package&gt;...
+Download package tarballs.  The files will be named as suggested by the
+server, for example if you download the DB package and the latest stable
+version of DB is 1.6.5, the downloaded file will be DB-1.6.5.tgz.</doc>
+ </download>
+ <clear-cache>
+  <summary>Clear Web Services Cache</summary>
+  <function>doClearCache</function>
+  <shortcut>cc</shortcut>
+  <options />
+  <doc>
+Clear the XML-RPC/REST cache.  See also the cache_ttl configuration
+parameter.
+</doc>
+ </clear-cache>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Test.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Test.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Test.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Test.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,257 @@
+<?php
+/**
+ * PEAR_Command_Test (run-tests)
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Test.php,v 1.6 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+
+/**
+ * PEAR commands for login/logout
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+
+class PEAR_Command_Test extends PEAR_Command_Common
+{
+    // {{{ properties
+
+    var $commands = array(
+        'run-tests' => array(
+            'summary' => 'Run Regression Tests',
+            'function' => 'doRunTests',
+            'shortcut' => 'rt',
+            'options' => array(
+                'recur' => array(
+                    'shortopt' => 'r',
+                    'doc' => 'Run tests in child directories, recursively.  4 dirs deep maximum',
+                ),
+                'ini' => array(
+                    'shortopt' => 'i',
+                    'doc' => 'actual string of settings to pass to php in format " -d setting=blah"',
+                    'arg' => 'SETTINGS'
+                ),
+                'realtimelog' => array(
+                    'shortopt' => 'l',
+                    'doc' => 'Log test runs/results as they are run',
+                ),
+                'quiet' => array(
+                    'shortopt' => 'q',
+                    'doc' => 'Only display detail for failed tests',
+                ),
+                'simple' => array(
+                    'shortopt' => 's',
+                    'doc' => 'Display simple output for all tests',
+                ),
+                'package' => array(
+                    'shortopt' => 'p',
+                    'doc' => 'Treat parameters as installed packages from which to run tests',
+                ),
+            ),
+            'doc' => '[testfile|dir ...]
+Run regression tests with PHP\'s regression testing script (run-tests.php).',
+            ),
+        );
+
+    var $output;
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * PEAR_Command_Test constructor.
+     *
+     * @access public
+     */
+    function PEAR_Command_Test(&$ui, &$config)
+    {
+        parent::PEAR_Command_Common($ui, $config);
+    }
+
+    // }}}
+    // {{{ doRunTests()
+
+    function doRunTests($command, $options, $params)
+    {
+        require_once 'PEAR/Common.php';
+        require_once 'PEAR/RunTest.php';
+        require_once 'System.php';
+        $log = new PEAR_Common;
+        $log->ui = &$this->ui; // slightly hacky, but it will work
+        $run = new PEAR_RunTest($log, $options);
+        $tests = array();
+        if (isset($options['recur'])) {
+            $depth = 4;
+        } else {
+            $depth = 1;
+        }
+        if (!count($params)) {
+            $params[] = '.';
+        }
+        if (isset($options['package'])) {
+            $oldparams = $params;
+            $params = array();
+            $reg = &$this->config->getRegistry();
+            foreach ($oldparams as $param) {
+                $pname = $reg->parsePackageName($param, $this->config->get('default_channel'));
+                if (PEAR::isError($pname)) {
+                    return $this->raiseError($pname);
+                }
+                $package = &$reg->getPackage($pname['package'], $pname['channel']);
+                if (!$package) {
+                    return PEAR::raiseError('Unknown package "' .
+                        $reg->parsedPackageNameToString($pname) . '"');
+                }
+                $filelist = $package->getFilelist();
+                foreach ($filelist as $name => $atts) {
+                    if (isset($atts['role']) && $atts['role'] != 'test') {
+                        continue;
+                    }
+                    if (!preg_match('/\.phpt$/', $name)) {
+                        continue;
+                    }
+                    $params[] = $atts['installed_as'];
+                }
+            }
+        }
+        foreach ($params as $p) {
+            if (is_dir($p)) {
+                $dir = System::find(array($p, '-type', 'f',
+                                            '-maxdepth', $depth,
+                                            '-name', '*.phpt'));
+                $tests = array_merge($tests, $dir);
+            } else {
+                if (!@file_exists($p)) {
+                    if (!preg_match('/\.phpt$/', $p)) {
+                        $p .= '.phpt';
+                    }
+                    $dir = System::find(array(dirname($p), '-type', 'f',
+                                                '-maxdepth', $depth,
+                                                '-name', $p));
+                    $tests = array_merge($tests, $dir);
+                } else {
+                    $tests[] = $p;
+                }
+            }
+        }
+        $ini_settings = '';
+        if (isset($options['ini'])) {
+            $ini_settings .= $options['ini'];
+        }
+        if (isset($_ENV['TEST_PHP_INCLUDE_PATH'])) {
+            $ini_settings .= " -d include_path={$_ENV['TEST_PHP_INCLUDE_PATH']}";
+        }
+        if ($ini_settings) {
+            $this->ui->outputData('Using INI settings: "' . $ini_settings . '"');
+        }
+        $skipped = $passed = $failed = array();
+        $this->ui->outputData('Running ' . count($tests) . ' tests', $command);
+        $start = time();
+        if (isset($options['realtimelog'])) {
+            @unlink('run-tests.log');
+        }
+        foreach ($tests as $t) {
+            if (isset($options['realtimelog'])) {
+                $fp = @fopen('run-tests.log', 'a');
+                if ($fp) {
+                    fwrite($fp, "Running test $t...");
+                    fclose($fp);
+                }
+            }
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $result = $run->run($t, $ini_settings);
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($result)) {
+                $this->ui->log(0, $result->getMessage());
+                continue;
+            }
+            if (OS_WINDOWS) {
+                for($i=0;$i<2000;$i++) {
+                    $i = $i; // delay - race conditions on windows
+                }
+            }
+            if (isset($options['realtimelog'])) {
+                $fp = @fopen('run-tests.log', 'a');
+                if ($fp) {
+                    fwrite($fp, "$result\n");
+                    fclose($fp);
+                }
+            }
+            if ($result == 'FAILED') {
+            	$failed[] = $t;
+            }
+            if ($result == 'PASSED') {
+            	$passed[] = $t;
+            }
+            if ($result == 'SKIPPED') {
+            	$skipped[] = $t;
+            }
+        }
+        $total = date('i:s', time() - $start);
+        if (count($failed)) {
+            $output = "TOTAL TIME: $total\n";
+            $output .= count($passed) . " PASSED TESTS\n";
+            $output .= count($skipped) . " SKIPPED TESTS\n";
+    		$output .= count($failed) . " FAILED TESTS:\n";
+        	foreach ($failed as $failure) {
+        		$output .= $failure . "\n";
+        	}
+            if (isset($options['realtimelog'])) {
+                $fp = @fopen('run-tests.log', 'a');
+            } else {
+                $fp = @fopen('run-tests.log', 'w');
+            }
+            if ($fp) {
+                fwrite($fp, $output, strlen($output));
+                fclose($fp);
+                $this->ui->outputData('wrote log to "' . realpath('run-tests.log') . '"', $command);
+            }
+        } elseif (@file_exists('run-tests.log') && !@is_dir('run-tests.log')) {
+            @unlink('run-tests.log');
+        }
+        $this->ui->outputData('TOTAL TIME: ' . $total);
+        $this->ui->outputData(count($passed) . ' PASSED TESTS', $command);
+        $this->ui->outputData(count($skipped) . ' SKIPPED TESTS', $command);
+        if (count($failed)) {
+    		$this->ui->outputData(count($failed) . ' FAILED TESTS:', $command);
+        	foreach ($failed as $failure) {
+        		$this->ui->outputData($failure, $command);
+        	}
+        }
+
+        return true;
+    }
+    // }}}
+}
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Test.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Test.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command/Test.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command/Test.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,36 @@
+<commands version="1.0">
+ <run-tests>
+  <summary>Run Regression Tests</summary>
+  <function>doRunTests</function>
+  <shortcut>rt</shortcut>
+  <options>
+   <recur>
+    <shortopt>r</shortopt>
+    <doc>Run tests in child directories, recursively.  4 dirs deep maximum</doc>
+   </recur>
+   <ini>
+    <shortopt>i</shortopt>
+    <doc>actual string of settings to pass to php in format &quot; -d setting=blah&quot;</doc>
+    <arg>SETTINGS</arg>
+   </ini>
+   <realtimelog>
+    <shortopt>l</shortopt>
+    <doc>Log test runs/results as they are run</doc>
+   </realtimelog>
+   <quiet>
+    <shortopt>q</shortopt>
+    <doc>Only display detail for failed tests</doc>
+   </quiet>
+   <simple>
+    <shortopt>s</shortopt>
+    <doc>Display simple output for all tests</doc>
+   </simple>
+   <package>
+    <shortopt>p</shortopt>
+    <doc>Treat parameters as installed packages from which to run tests</doc>
+   </package>
+  </options>
+  <doc>[testfile|dir ...]
+Run regression tests with PHP&apos;s regression testing script (run-tests.php).</doc>
+ </run-tests>
+</commands>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Command.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Command.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,25 +1,32 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// +----------------------------------------------------------------------+
-//
-// $Id: Command.php,v 1.24 2004/05/16 15:43:30 pajoye Exp $
-
+/**
+ * PEAR_Command, command pattern class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Command.php,v 1.36 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
-require_once "PEAR.php";
+/**
+ * Needed for error handling
+ */
+require_once 'PEAR.php';
+require_once 'PEAR/Frontend.php';
+require_once 'PEAR/XMLParser.php';
 
 /**
  * List of commands and what classes they are implemented in.
@@ -40,18 +47,6 @@
 $GLOBALS['_PEAR_Command_objects'] = array();
 
 /**
- * Which user interface class is being used.
- * @var string class name
- */
-$GLOBALS['_PEAR_Command_uiclass'] = 'PEAR_Frontend_CLI';
-
-/**
- * Instance of $_PEAR_Command_uiclass.
- * @var object
- */
-$GLOBALS['_PEAR_Command_uiobject'] = null;
-
-/**
  * PEAR command class, a simple factory class for administrative
  * commands.
  *
@@ -93,6 +88,15 @@
  * - DON'T USE EXIT OR DIE! Always use pear errors.  From static
  *   classes do PEAR::raiseError(), from other classes do
  *   $this->raiseError().
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Command
 {
@@ -109,7 +113,7 @@
      * @access public
      * @static
      */
-    function factory($command, &$config)
+    function &factory($command, &$config)
     {
         if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
             PEAR_Command::registerCommands();
@@ -118,13 +122,35 @@
             $command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
         }
         if (!isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
-            return PEAR::raiseError("unknown command `$command'");
+            $a = PEAR::raiseError("unknown command `$command'");
+            return $a;
         }
         $class = $GLOBALS['_PEAR_Command_commandlist'][$command];
         if (!class_exists($class)) {
+            require_once $GLOBALS['_PEAR_Command_objects'][$class];
+        }
+        if (!class_exists($class)) {
+            $a = PEAR::raiseError("unknown command `$command'");
+            return $a;
+        }
+        $ui =& PEAR_Command::getFrontendObject();
+        $obj = &new $class($ui, $config);
+        return $obj;
+    }
+
+    // }}}
+    // {{{ & getObject()
+    function &getObject($command)
+    {
+        $class = $GLOBALS['_PEAR_Command_commandlist'][$command];
+        if (!class_exists($class)) {
+            require_once $GLOBALS['_PEAR_Command_objects'][$class];
+        }
+        if (!class_exists($class)) {
             return PEAR::raiseError("unknown command `$command'");
         }
         $ui =& PEAR_Command::getFrontendObject();
+        $config = &PEAR_Config::singleton();
         $obj = &new $class($ui, $config);
         return $obj;
     }
@@ -135,15 +161,13 @@
     /**
      * Get instance of frontend object.
      *
-     * @return object
+     * @return object|PEAR_Error
      * @static
      */
     function &getFrontendObject()
     {
-        if (empty($GLOBALS['_PEAR_Command_uiobject'])) {
-            $GLOBALS['_PEAR_Command_uiobject'] = &new $GLOBALS['_PEAR_Command_uiclass'];
-        }
-        return $GLOBALS['_PEAR_Command_uiobject'];
+        $a = &PEAR_Frontend::singleton();
+        return $a;
     }
 
     // }}}
@@ -159,59 +183,13 @@
      */
     function &setFrontendClass($uiclass)
     {
-        if (is_object($GLOBALS['_PEAR_Command_uiobject']) &&
-              is_a($GLOBALS['_PEAR_Command_uiobject'], $uiclass)) {
-            return $GLOBALS['_PEAR_Command_uiobject'];
-        }
-        if (!class_exists($uiclass)) {
-            $file = str_replace('_', '/', $uiclass) . '.php';
-            if (PEAR_Command::isIncludeable($file)) {
-                include_once $file;
-            }
-        }
-        if (class_exists($uiclass)) {
-            $obj = &new $uiclass;
-            // quick test to see if this class implements a few of the most
-            // important frontend methods
-            if (method_exists($obj, 'userConfirm')) {
-                $GLOBALS['_PEAR_Command_uiobject'] = &$obj;
-                $GLOBALS['_PEAR_Command_uiclass'] = $uiclass;
-                return $obj;
-            } else {
-                $err = PEAR::raiseError("not a frontend class: $uiclass");
-                return $err;
-            }
-        }
-        $err = PEAR::raiseError("no such class: $uiclass");
-        return $err;
+        $a = &PEAR_Frontend::setFrontendClass($uiclass);
+        return $a;
     }
 
     // }}}
     // {{{ setFrontendType()
 
-    // }}}
-    // {{{ isIncludeable()
-
-    /**
-     * @param string $path relative or absolute include path
-     * @return boolean
-     * @static
-     */
-    function isIncludeable($path)
-    {
-        if (file_exists($path) && is_readable($path)) {
-            return true;
-        }
-        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
-        foreach ($ipath as $include) {
-            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
-            if (file_exists($test) && is_readable($test)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     /**
      * Set current frontend.
      *
@@ -249,6 +227,7 @@
      */
     function registerCommands($merge = false, $dir = null)
     {
+        $parser = new PEAR_XMLParser;
         if ($dir === null) {
             $dir = dirname(__FILE__) . '/Command';
         }
@@ -260,26 +239,51 @@
             $GLOBALS['_PEAR_Command_commandlist'] = array();
         }
         while ($entry = readdir($dp)) {
-            if ($entry{0} == '.' || substr($entry, -4) != '.php' || $entry == 'Common.php') {
+            if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
                 continue;
             }
             $class = "PEAR_Command_".substr($entry, 0, -4);
             $file = "$dir/$entry";
-            include_once $file;
+            $parser->parse(file_get_contents($file));
+            $implements = $parser->getData();
             // List of commands
             if (empty($GLOBALS['_PEAR_Command_objects'][$class])) {
-                $GLOBALS['_PEAR_Command_objects'][$class] = &new $class($ui, $config);
+                $GLOBALS['_PEAR_Command_objects'][$class] = "$dir/" . substr($entry, 0, -4) .
+                    '.php';
             }
-            $implements = $GLOBALS['_PEAR_Command_objects'][$class]->getCommands();
             foreach ($implements as $command => $desc) {
+                if ($command == 'attribs') {
+                    continue;
+                }
+                if (isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
+                    return PEAR::raiseError('Command "' . $command . '" already registered in ' .
+                        'class "' . $GLOBALS['_PEAR_Command_commandlist'][$command] . '"');
+                }
                 $GLOBALS['_PEAR_Command_commandlist'][$command] = $class;
-                $GLOBALS['_PEAR_Command_commanddesc'][$command] = $desc;
-            }
-            $shortcuts = $GLOBALS['_PEAR_Command_objects'][$class]->getShortcuts();
-            foreach ($shortcuts as $shortcut => $command) {
-                $GLOBALS['_PEAR_Command_shortcuts'][$shortcut] = $command;
+                $GLOBALS['_PEAR_Command_commanddesc'][$command] = $desc['summary'];
+                if (isset($desc['shortcut'])) {
+                    $shortcut = $desc['shortcut'];
+                    if (isset($GLOBALS['_PEAR_Command_shortcuts'][$shortcut])) {
+                        return PEAR::raiseError('Command shortcut "' . $shortcut . '" already ' .
+                            'registered to command "' . $command . '" in class "' .
+                            $GLOBALS['_PEAR_Command_commandlist'][$command] . '"');
+                    }
+                    $GLOBALS['_PEAR_Command_shortcuts'][$shortcut] = $command;
+                }
+                if (isset($desc['options']) && $desc['options']) {
+                    foreach ($desc['options'] as $oname => $option) {
+                        if (isset($option['shortopt']) && strlen($option['shortopt']) > 1) {
+                            return PEAR::raiseError('Option "' . $oname . '" short option "' .
+                                $option['shortopt'] . '" must be ' .
+                                'only 1 character in Command "' . $command . '" in class "' .
+                                $class . '"');
+                        }
+                    }
+                }
             }
         }
+        ksort($GLOBALS['_PEAR_Command_shortcuts']);
+        ksort($GLOBALS['_PEAR_Command_commandlist']);
         @closedir($dp);
         return true;
     }
@@ -343,11 +347,13 @@
         if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
             PEAR_Command::registerCommands();
         }
+        if (isset($GLOBALS['_PEAR_Command_shortcuts'][$command])) {
+            $command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
+        }
         if (!isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
             return null;
         }
-        $class = $GLOBALS['_PEAR_Command_commandlist'][$command];
-        $obj = &$GLOBALS['_PEAR_Command_objects'][$class];
+        $obj = &PEAR_Command::getObject($command);
         return $obj->getGetoptArgs($command, $short_args, $long_args);
     }
 
@@ -386,9 +392,12 @@
     function getHelp($command)
     {
         $cmds = PEAR_Command::getCommands();
+        if (isset($GLOBALS['_PEAR_Command_shortcuts'][$command])) {
+            $command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
+        }
         if (isset($cmds[$command])) {
-            $class = $cmds[$command];
-            return $GLOBALS['_PEAR_Command_objects'][$class]->getHelp($command);
+            $obj = &PEAR_Command::getObject($command);
+            return $obj->getHelp($command);
         }
         return false;
     }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Common.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Common.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Common.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Common.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,28 +1,32 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |          Tomas V.V.Cox <cox@idecnet.com>                             |
-// +----------------------------------------------------------------------+
-//
-// $Id: Common.php,v 1.126.2.1 2004/10/19 04:20:58 cellog Exp $
+/**
+ * PEAR_Common, the base class for the PEAR Installer
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Common.php,v 1.153 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1.0
+ * @deprecated File deprecated since Release 1.4.0a1
+ */
 
+/**
+ * Include error handling
+ */
 require_once 'PEAR.php';
-require_once 'Archive/Tar.php';
-require_once 'System.php';
-require_once 'PEAR/Config.php';
 
 // {{{ constants and globals
 
@@ -38,7 +42,25 @@
 define('PEAR_COMMON_PACKAGE_VERSION_PREG', '/^' . _PEAR_COMMON_PACKAGE_VERSION_PREG . '$/i');
 
 // XXX far from perfect :-)
-define('PEAR_COMMON_PACKAGE_DOWNLOAD_PREG', '/^(' . _PEAR_COMMON_PACKAGE_NAME_PREG . ')(-([.0-9a-zA-Z]+))?$/');
+define('_PEAR_COMMON_PACKAGE_DOWNLOAD_PREG', '(' . _PEAR_COMMON_PACKAGE_NAME_PREG .
+    ')(-([.0-9a-zA-Z]+))?');
+define('PEAR_COMMON_PACKAGE_DOWNLOAD_PREG', '/^' . _PEAR_COMMON_PACKAGE_DOWNLOAD_PREG .
+    '$/');
+
+define('_PEAR_CHANNELS_NAME_PREG', '[A-Za-z][a-zA-Z0-9_\.]+');
+define('PEAR_CHANNELS_NAME_PREG', '/^' . _PEAR_CHANNELS_NAME_PREG . '$/');
+
+// this should allow any dns or IP address, plus a path - NO UNDERSCORES ALLOWED
+define('_PEAR_CHANNELS_SERVER_PREG', '[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*(\/[a-zA-Z0-9-]+)*');
+define('PEAR_CHANNELS_SERVER_PREG', '/^' . _PEAR_CHANNELS_SERVER_PREG . '$/i');
+
+define('_PEAR_CHANNELS_PACKAGE_PREG',  '(' ._PEAR_CHANNELS_SERVER_PREG . ')\/('
+         . _PEAR_COMMON_PACKAGE_NAME_PREG . ')');
+define('PEAR_CHANNELS_PACKAGE_PREG', '/^' . _PEAR_CHANNELS_PACKAGE_PREG . '$/i');
+
+define('_PEAR_COMMON_CHANNEL_DOWNLOAD_PREG', '(' . _PEAR_CHANNELS_NAME_PREG . ')::('
+    . _PEAR_COMMON_PACKAGE_NAME_PREG . ')(-([.0-9a-zA-Z]+))?');
+define('PEAR_COMMON_CHANNEL_DOWNLOAD_PREG', '/^' . _PEAR_COMMON_CHANNEL_DOWNLOAD_PREG . '$/');
 
 /**
  * List of temporary files and directories registered by
@@ -69,7 +91,7 @@
  * Valid dependency relations
  * @var array
  */
-$GLOBALS['_PEAR_Common_dependency_relations'] = array('has','eq','lt','le','gt','ge','not');
+$GLOBALS['_PEAR_Common_dependency_relations'] = array('has','eq','lt','le','gt','ge','not', 'ne');
 
 /**
  * Valid file roles
@@ -99,8 +121,18 @@
 
 /**
  * Class providing common functionality for PEAR administration classes.
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
  * @deprecated This class will disappear, and its components will be spread
- *             into smaller classes, like the AT&T breakup
+ *             into smaller classes, like the AT&T breakup, as of Release 1.4.0a1
  */
 class PEAR_Common extends PEAR
 {
@@ -176,6 +208,9 @@
         $tempfiles =& $GLOBALS['_PEAR_Common_tempfiles'];
         while ($file = array_shift($tempfiles)) {
             if (@is_dir($file)) {
+                if (!class_exists('System')) {
+                    require_once 'System.php';
+                }
                 System::rm(array('-rf', $file));
             } elseif (file_exists($file)) {
                 unlink($file);
@@ -199,7 +234,10 @@
      */
     function addTempFile($file)
     {
-        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
+        if (!class_exists('PEAR_Frontend')) {
+            require_once 'PEAR/Frontend.php';
+        }
+        PEAR_Frontend::addTempFile($file);
     }
 
     // }}}
@@ -218,6 +256,9 @@
     function mkDirHier($dir)
     {
         $this->log(2, "+ create dir $dir");
+        if (!class_exists('System')) {
+            require_once 'System.php';
+        }
         return System::mkDir(array('-p', $dir));
     }
 
@@ -233,12 +274,17 @@
      * @return void
      *
      * @access public
+     * @static
      */
     function log($level, $msg, $append_crlf = true)
     {
         if ($this->debug >= $level) {
-            if (is_object($this->ui)) {
-                $this->ui->log($msg, $append_crlf);
+            if (!class_exists('PEAR_Frontend')) {
+                require_once 'PEAR/Frontend.php';
+            }
+            $ui = &PEAR_Frontend::singleton();
+            if (is_a($ui, 'PEAR_Frontend')) {
+                $ui->log($msg, $append_crlf);
             } else {
                 print "$msg\n";
             }
@@ -267,6 +313,9 @@
             $topt = array();
         }
         $topt = array_merge($topt, array('-d', 'pear'));
+        if (!class_exists('System')) {
+            require_once 'System.php';
+        }
         if (!$tmpdir = System::mktemp($topt)) {
             return false;
         }
@@ -291,396 +340,6 @@
 
     // }}}
 
-    // {{{ _unIndent()
-
-    /**
-     * Unindent given string (?)
-     *
-     * @param string $str The string that has to be unindented.
-     * @return string
-     * @access private
-     */
-    function _unIndent($str)
-    {
-        // remove leading newlines
-        $str = preg_replace('/^[\r\n]+/', '', $str);
-        // find whitespace at the beginning of the first line
-        $indent_len = strspn($str, " \t");
-        $indent = substr($str, 0, $indent_len);
-        $data = '';
-        // remove the same amount of whitespace from following lines
-        foreach (explode("\n", $str) as $line) {
-            if (substr($line, 0, $indent_len) == $indent) {
-                $data .= substr($line, $indent_len) . "\n";
-            }
-        }
-        return $data;
-    }
-
-    // }}}
-    // {{{ _element_start()
-
-    /**
-     * XML parser callback for starting elements.  Used while package
-     * format version is not yet known.
-     *
-     * @param resource  $xp       XML parser resource
-     * @param string    $name     name of starting element
-     * @param array     $attribs  element attributes, name => value
-     *
-     * @return void
-     *
-     * @access private
-     */
-    function _element_start($xp, $name, $attribs)
-    {
-        array_push($this->element_stack, $name);
-        $this->current_element = $name;
-        $spos = sizeof($this->element_stack) - 2;
-        $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
-        $this->current_attributes = $attribs;
-        switch ($name) {
-            case 'package': {
-                $this->_validPackageFile = true;
-                if (isset($attribs['version'])) {
-                    $vs = preg_replace('/[^0-9a-z]/', '_', $attribs['version']);
-                } else {
-                    $vs = '1_0';
-                }
-                $elem_start = '_element_start_'. $vs;
-                $elem_end = '_element_end_'. $vs;
-                $cdata = '_pkginfo_cdata_'. $vs;
-                if (!method_exists($this, $elem_start) ||
-                      !method_exists($this, $elem_end) ||
-                      !method_exists($this, $cdata)) {
-                    $this->raiseError("No handlers for package.xml version $attribs[version]");
-                    return;
-                }
-                xml_set_element_handler($xp, $elem_start, $elem_end);
-                xml_set_character_data_handler($xp, $cdata);
-                break;
-            }
-        }
-    }
-
-    // }}}
-    // {{{ _element_end()
-
-    /**
-     * XML parser callback for ending elements.  Used while package
-     * format version is not yet known.
-     *
-     * @param resource  $xp    XML parser resource
-     * @param string    $name  name of ending element
-     *
-     * @return void
-     *
-     * @access private
-     */
-    function _element_end($xp, $name)
-    {
-    }
-
-    // }}}
-
-    // Support for package DTD v1.0:
-    // {{{ _element_start_1_0()
-
-    /**
-     * XML parser callback for ending elements.  Used for version 1.0
-     * packages.
-     *
-     * @param resource  $xp    XML parser resource
-     * @param string    $name  name of ending element
-     *
-     * @return void
-     *
-     * @access private
-     */
-    function _element_start_1_0($xp, $name, $attribs)
-    {
-        array_push($this->element_stack, $name);
-        $this->current_element = $name;
-        $spos = sizeof($this->element_stack) - 2;
-        $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
-        $this->current_attributes = $attribs;
-        $this->cdata = '';
-        switch ($name) {
-            case 'dir':
-                if ($this->in_changelog) {
-                    break;
-                }
-                if ($attribs['name'] != '/') {
-                    $this->dir_names[] = $attribs['name'];
-                }
-                if (isset($attribs['baseinstalldir'])) {
-                    $this->dir_install = $attribs['baseinstalldir'];
-                }
-                if (isset($attribs['role'])) {
-                    $this->dir_role = $attribs['role'];
-                }
-                break;
-            case 'file':
-                if ($this->in_changelog) {
-                    break;
-                }
-                if (isset($attribs['name'])) {
-                    $path = '';
-                    if (count($this->dir_names)) {
-                        foreach ($this->dir_names as $dir) {
-                            $path .= $dir . DIRECTORY_SEPARATOR;
-                        }
-                    }
-                    $path .= $attribs['name'];
-                    unset($attribs['name']);
-                    $this->current_path = $path;
-                    $this->filelist[$path] = $attribs;
-                    // Set the baseinstalldir only if the file don't have this attrib
-                    if (!isset($this->filelist[$path]['baseinstalldir']) &&
-                        isset($this->dir_install))
-                    {
-                        $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
-                    }
-                    // Set the Role
-                    if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
-                        $this->filelist[$path]['role'] = $this->dir_role;
-                    }
-                }
-                break;
-            case 'replace':
-                if (!$this->in_changelog) {
-                    $this->filelist[$this->current_path]['replacements'][] = $attribs;
-                }
-                break;
-            case 'maintainers':
-                $this->pkginfo['maintainers'] = array();
-                $this->m_i = 0; // maintainers array index
-                break;
-            case 'maintainer':
-                // compatibility check
-                if (!isset($this->pkginfo['maintainers'])) {
-                    $this->pkginfo['maintainers'] = array();
-                    $this->m_i = 0;
-                }
-                $this->pkginfo['maintainers'][$this->m_i] = array();
-                $this->current_maintainer =& $this->pkginfo['maintainers'][$this->m_i];
-                break;
-            case 'changelog':
-                $this->pkginfo['changelog'] = array();
-                $this->c_i = 0; // changelog array index
-                $this->in_changelog = true;
-                break;
-            case 'release':
-                if ($this->in_changelog) {
-                    $this->pkginfo['changelog'][$this->c_i] = array();
-                    $this->current_release = &$this->pkginfo['changelog'][$this->c_i];
-                } else {
-                    $this->current_release = &$this->pkginfo;
-                }
-                break;
-            case 'deps':
-                if (!$this->in_changelog) {
-                    $this->pkginfo['release_deps'] = array();
-                }
-                break;
-            case 'dep':
-                // dependencies array index
-                if (!$this->in_changelog) {
-                    $this->d_i++;
-                    $this->pkginfo['release_deps'][$this->d_i] = $attribs;
-                }
-                break;
-            case 'configureoptions':
-                if (!$this->in_changelog) {
-                    $this->pkginfo['configure_options'] = array();
-                }
-                break;
-            case 'configureoption':
-                if (!$this->in_changelog) {
-                    $this->pkginfo['configure_options'][] = $attribs;
-                }
-                break;
-            case 'provides':
-                if (empty($attribs['type']) || empty($attribs['name'])) {
-                    break;
-                }
-                $attribs['explicit'] = true;
-                $this->pkginfo['provides']["$attribs[type];$attribs[name]"] = $attribs;
-                break;
-        }
-    }
-
-    // }}}
-    // {{{ _element_end_1_0()
-
-    /**
-     * XML parser callback for ending elements.  Used for version 1.0
-     * packages.
-     *
-     * @param resource  $xp    XML parser resource
-     * @param string    $name  name of ending element
-     *
-     * @return void
-     *
-     * @access private
-     */
-    function _element_end_1_0($xp, $name)
-    {
-        $data = trim($this->cdata);
-        switch ($name) {
-            case 'name':
-                switch ($this->prev_element) {
-                    case 'package':
-                        // XXX should we check the package name here?
-                        $this->pkginfo['package'] = ereg_replace('[^a-zA-Z0-9._]', '_', $data);
-                        break;
-                    case 'maintainer':
-                        $this->current_maintainer['name'] = $data;
-                        break;
-                }
-                break;
-            case 'summary':
-                $this->pkginfo['summary'] = $data;
-                break;
-            case 'description':
-                $data = $this->_unIndent($this->cdata);
-                $this->pkginfo['description'] = $data;
-                break;
-            case 'user':
-                $this->current_maintainer['handle'] = $data;
-                break;
-            case 'email':
-                $this->current_maintainer['email'] = $data;
-                break;
-            case 'role':
-                $this->current_maintainer['role'] = $data;
-                break;
-            case 'version':
-                $data = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $data);
-                if ($this->in_changelog) {
-                    $this->current_release['version'] = $data;
-                } else {
-                    $this->pkginfo['version'] = $data;
-                }
-                break;
-            case 'date':
-                if ($this->in_changelog) {
-                    $this->current_release['release_date'] = $data;
-                } else {
-                    $this->pkginfo['release_date'] = $data;
-                }
-                break;
-            case 'notes':
-                // try to "de-indent" release notes in case someone
-                // has been over-indenting their xml ;-)
-                $data = $this->_unIndent($this->cdata);
-                if ($this->in_changelog) {
-                    $this->current_release['release_notes'] = $data;
-                } else {
-                    $this->pkginfo['release_notes'] = $data;
-                }
-                break;
-            case 'warnings':
-                if ($this->in_changelog) {
-                    $this->current_release['release_warnings'] = $data;
-                } else {
-                    $this->pkginfo['release_warnings'] = $data;
-                }
-                break;
-            case 'state':
-                if ($this->in_changelog) {
-                    $this->current_release['release_state'] = $data;
-                } else {
-                    $this->pkginfo['release_state'] = $data;
-                }
-                break;
-            case 'license':
-                if ($this->in_changelog) {
-                    $this->current_release['release_license'] = $data;
-                } else {
-                    $this->pkginfo['release_license'] = $data;
-                }
-                break;
-            case 'dep':
-                if ($data && !$this->in_changelog) {
-                    $this->pkginfo['release_deps'][$this->d_i]['name'] = $data;
-                }
-                break;
-            case 'dir':
-                if ($this->in_changelog) {
-                    break;
-                }
-                array_pop($this->dir_names);
-                break;
-            case 'file':
-                if ($this->in_changelog) {
-                    break;
-                }
-                if ($data) {
-                    $path = '';
-                    if (count($this->dir_names)) {
-                        foreach ($this->dir_names as $dir) {
-                            $path .= $dir . DIRECTORY_SEPARATOR;
-                        }
-                    }
-                    $path .= $data;
-                    $this->filelist[$path] = $this->current_attributes;
-                    // Set the baseinstalldir only if the file don't have this attrib
-                    if (!isset($this->filelist[$path]['baseinstalldir']) &&
-                        isset($this->dir_install))
-                    {
-                        $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
-                    }
-                    // Set the Role
-                    if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
-                        $this->filelist[$path]['role'] = $this->dir_role;
-                    }
-                }
-                break;
-            case 'maintainer':
-                if (empty($this->pkginfo['maintainers'][$this->m_i]['role'])) {
-                    $this->pkginfo['maintainers'][$this->m_i]['role'] = 'lead';
-                }
-                $this->m_i++;
-                break;
-            case 'release':
-                if ($this->in_changelog) {
-                    $this->c_i++;
-                }
-                break;
-            case 'changelog':
-                $this->in_changelog = false;
-                break;
-        }
-        array_pop($this->element_stack);
-        $spos = sizeof($this->element_stack) - 1;
-        $this->current_element = ($spos > 0) ? $this->element_stack[$spos] : '';
-        $this->cdata = '';
-    }
-
-    // }}}
-    // {{{ _pkginfo_cdata_1_0()
-
-    /**
-     * XML parser callback for character data.  Used for version 1.0
-     * packages.
-     *
-     * @param resource  $xp    XML parser resource
-     * @param string    $name  character data
-     *
-     * @return void
-     *
-     * @access private
-     */
-    function _pkginfo_cdata_1_0($xp, $data)
-    {
-        if (isset($this->cdata)) {
-            $this->cdata .= $data;
-        }
-    }
-
-    // }}}
-
     // {{{ infoFromTgzFile()
 
     /**
@@ -692,43 +351,23 @@
      * @return array  array with package information
      *
      * @access public
+     * @deprecated use PEAR_PackageFile->fromTgzFile() instead
      *
      */
     function infoFromTgzFile($file)
     {
-        if (!@is_file($file)) {
-            return $this->raiseError("could not open file \"$file\"");
-        }
-        $tar = new Archive_Tar($file);
-        if ($this->debug <= 1) {
-            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
-        }
-        $content = $tar->listContent();
-        if ($this->debug <= 1) {
-            $tar->popErrorHandling();
-        }
-        if (!is_array($content)) {
-            $file = realpath($file);
-            return $this->raiseError("Could not get contents of package \"$file\"".
-                                     '. Invalid tgz file.');
-        }
-        $xml = null;
-        foreach ($content as $file) {
-            $name = $file['filename'];
-            if ($name == 'package.xml') {
-                $xml = $name;
-                break;
-            } elseif (ereg('package.xml$', $name, $match)) {
-                $xml = $match[0];
-                break;
+        $packagefile = &new PEAR_PackageFile($this->config);
+        $pf = &$packagefile->fromTgzFile($file, PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($pf)) {
+            $errs = $pf->getUserinfo();
+            if (is_array($errs)) {
+                foreach ($errs as $error) {
+                    $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
+                }
             }
+            return $pf;
         }
-        $tmpdir = System::mkTemp(array('-d', 'pear'));
-        $this->addTempFile($tmpdir);
-        if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
-            return $this->raiseError('could not extract the package.xml file');
-        }
-        return $this->infoFromDescriptionFile("$tmpdir/$xml");
+        return $this->_postProcessValidPackagexml($pf);
     }
 
     // }}}
@@ -743,19 +382,23 @@
      * @return array  array with package information
      *
      * @access public
+     * @deprecated use PEAR_PackageFile->fromPackageFile() instead
      *
      */
     function infoFromDescriptionFile($descfile)
     {
-        if (!@is_file($descfile) || !is_readable($descfile) ||
-             (!$fp = @fopen($descfile, 'r'))) {
-            return $this->raiseError("Unable to open $descfile");
+        $packagefile = &new PEAR_PackageFile($this->config);
+        $pf = &$packagefile->fromPackageFile($descfile, PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($pf)) {
+            $errs = $pf->getUserinfo();
+            if (is_array($errs)) {
+                foreach ($errs as $error) {
+                    $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
+                }
+            }
+            return $pf;
         }
-
-        // read the whole thing so we only get one cdata callback
-        // for each block of cdata
-        $data = fread($fp, filesize($descfile));
-        return $this->infoFromString($data);
+        return $this->_postProcessValidPackagexml($pf);
     }
 
     // }}}
@@ -765,62 +408,65 @@
      * Returns information about a package file.  Expects the contents
      * of a package xml file as input.
      *
-     * @param string  $data  name of package xml file
+     * @param string  $data  contents of package.xml file
      *
      * @return array   array with package information
      *
      * @access public
+     * @deprecated use PEAR_PackageFile->fromXmlstring() instead
      *
      */
     function infoFromString($data)
     {
-        require_once('PEAR/Dependency.php');
-        if (PEAR_Dependency::checkExtension($error, 'xml')) {
-            return $this->raiseError($error);
-        }
-        $xp = @xml_parser_create();
-        if (!$xp) {
-            return $this->raiseError('Unable to create XML parser');
-        }
-        xml_set_object($xp, $this);
-        xml_set_element_handler($xp, '_element_start', '_element_end');
-        xml_set_character_data_handler($xp, '_pkginfo_cdata');
-        xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
-
-        $this->element_stack = array();
-        $this->pkginfo = array('provides' => array());
-        $this->current_element = false;
-        unset($this->dir_install);
-        $this->pkginfo['filelist'] = array();
-        $this->filelist =& $this->pkginfo['filelist'];
-        $this->dir_names = array();
-        $this->in_changelog = false;
-        $this->d_i = 0;
-        $this->cdata = '';
-        $this->_validPackageFile = false;
-
-        if (!xml_parse($xp, $data, 1)) {
-            $code = xml_get_error_code($xp);
-            $msg = sprintf("XML error: %s at line %d",
-                           xml_error_string($code),
-                           xml_get_current_line_number($xp));
-            xml_parser_free($xp);
-            return $this->raiseError($msg, $code);
-        }
-
-        xml_parser_free($xp);
-
-        if (!$this->_validPackageFile) {
-            return $this->raiseError('Invalid Package File, no <package> tag');
-        }
-        foreach ($this->pkginfo as $k => $v) {
-            if (!is_array($v)) {
-                $this->pkginfo[$k] = trim($v);
+        $packagefile = &new PEAR_PackageFile($this->config);
+        $pf = &$packagefile->fromXmlString($data, PEAR_VALIDATE_NORMAL, false);
+        if (PEAR::isError($pf)) {
+            $errs = $pf->getUserinfo();
+            if (is_array($errs)) {
+                foreach ($errs as $error) {
+                    $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
+                }
             }
+            return $pf;
         }
-        return $this->pkginfo;
+        return $this->_postProcessValidPackagexml($pf);
     }
     // }}}
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return array
+     */
+    function _postProcessValidPackagexml(&$pf)
+    {
+        if (is_a($pf, 'PEAR_PackageFile_v2')) {
+            // sort of make this into a package.xml 1.0-style array
+            // changelog is not converted to old format.
+            $arr = $pf->toArray(true);
+            $arr = array_merge($arr, $arr['old']);
+            unset($arr['old']);
+            unset($arr['xsdversion']);
+            unset($arr['contents']);
+            unset($arr['compatible']);
+            unset($arr['channel']);
+            unset($arr['uri']);
+            unset($arr['dependencies']);
+            unset($arr['phprelease']);
+            unset($arr['extsrcrelease']);
+            unset($arr['extbinrelease']);
+            unset($arr['bundle']);
+            unset($arr['lead']);
+            unset($arr['developer']);
+            unset($arr['helper']);
+            unset($arr['contributor']);
+            $arr['filelist'] = $pf->getFilelist();
+            $this->pkginfo = $arr;
+            return $arr;
+        } else {
+            $this->pkginfo = $pf->toArray();
+            return $this->pkginfo;
+        }
+    }
     // {{{ infoFromAny()
 
     /**
@@ -832,28 +478,23 @@
      * @access public
      * @param  string Filename of the source ('package.xml', '<package>.tgz')
      * @return string
+     * @deprecated use PEAR_PackageFile->fromAnyFile() instead
      */
     function infoFromAny($info)
     {
         if (is_string($info) && file_exists($info)) {
-            $tmp = substr($info, -4);
-            if ($tmp == '.xml') {
-                $info = $this->infoFromDescriptionFile($info);
-            } elseif ($tmp == '.tar' || $tmp == '.tgz') {
-                $info = $this->infoFromTgzFile($info);
-            } else {
-                $fp = fopen($info, "r");
-                $test = fread($fp, 5);
-                fclose($fp);
-                if ($test == "<?xml") {
-                    $info = $this->infoFromDescriptionFile($info);
-                } else {
-                    $info = $this->infoFromTgzFile($info);
+            $packagefile = &new PEAR_PackageFile($this->config);
+            $pf = &$packagefile->fromAnyFile($info, PEAR_VALIDATE_NORMAL);
+            if (PEAR::isError($pf)) {
+                $errs = $pf->getUserinfo();
+                if (is_array($errs)) {
+                    foreach ($errs as $error) {
+                        $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
+                    }
                 }
+                return $pf;
             }
-            if (PEAR::isError($info)) {
-                return $this->raiseError($info);
-            }
+            return $this->_postProcessValidPackagexml($pf);
         }
         return $info;
     }
@@ -870,159 +511,15 @@
      * @return string XML data
      *
      * @access public
+     * @deprecated use a PEAR_PackageFile_v* object's generator instead
      */
     function xmlFromInfo($pkginfo)
     {
-        static $maint_map = array(
-            "handle" => "user",
-            "name" => "name",
-            "email" => "email",
-            "role" => "role",
-            );
-        $ret = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
-        $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
-        $ret .= "<package version=\"1.0\">
-  <name>$pkginfo[package]</name>
-  <summary>".htmlspecialchars($pkginfo['summary'])."</summary>
-  <description>".htmlspecialchars($pkginfo['description'])."</description>
-  <maintainers>
-";
-        foreach ($pkginfo['maintainers'] as $maint) {
-            $ret .= "    <maintainer>\n";
-            foreach ($maint_map as $idx => $elm) {
-                $ret .= "      <$elm>";
-                $ret .= htmlspecialchars($maint[$idx]);
-                $ret .= "</$elm>\n";
-            }
-            $ret .= "    </maintainer>\n";
-        }
-        $ret .= "  </maintainers>\n";
-        $ret .= $this->_makeReleaseXml($pkginfo);
-        if (@sizeof($pkginfo['changelog']) > 0) {
-            $ret .= "  <changelog>\n";
-            foreach ($pkginfo['changelog'] as $oldrelease) {
-                $ret .= $this->_makeReleaseXml($oldrelease, true);
-            }
-            $ret .= "  </changelog>\n";
-        }
-        $ret .= "</package>\n";
-        return $ret;
-    }
-
-    // }}}
-    // {{{ _makeReleaseXml()
-
-    /**
-     * Generate part of an XML description with release information.
-     *
-     * @param array  $pkginfo    array with release information
-     * @param bool   $changelog  whether the result will be in a changelog element
-     *
-     * @return string XML data
-     *
-     * @access private
-     */
-    function _makeReleaseXml($pkginfo, $changelog = false)
-    {
-        // XXX QUOTE ENTITIES IN PCDATA, OR EMBED IN CDATA BLOCKS!!
-        $indent = $changelog ? "  " : "";
-        $ret = "$indent  <release>\n";
-        if (!empty($pkginfo['version'])) {
-            $ret .= "$indent    <version>$pkginfo[version]</version>\n";
-        }
-        if (!empty($pkginfo['release_date'])) {
-            $ret .= "$indent    <date>$pkginfo[release_date]</date>\n";
-        }
-        if (!empty($pkginfo['release_license'])) {
-            $ret .= "$indent    <license>$pkginfo[release_license]</license>\n";
-        }
-        if (!empty($pkginfo['release_state'])) {
-            $ret .= "$indent    <state>$pkginfo[release_state]</state>\n";
-        }
-        if (!empty($pkginfo['release_notes'])) {
-            $ret .= "$indent    <notes>".htmlspecialchars($pkginfo['release_notes'])."</notes>\n";
-        }
-        if (!empty($pkginfo['release_warnings'])) {
-            $ret .= "$indent    <warnings>".htmlspecialchars($pkginfo['release_warnings'])."</warnings>\n";
-        }
-        if (isset($pkginfo['release_deps']) && sizeof($pkginfo['release_deps']) > 0) {
-            $ret .= "$indent    <deps>\n";
-            foreach ($pkginfo['release_deps'] as $dep) {
-                $ret .= "$indent      <dep type=\"$dep[type]\" rel=\"$dep[rel]\"";
-                if (isset($dep['version'])) {
-                    $ret .= " version=\"$dep[version]\"";
-                }
-                if (isset($dep['optional'])) {
-                    $ret .= " optional=\"$dep[optional]\"";
-                }
-                if (isset($dep['name'])) {
-                    $ret .= ">$dep[name]</dep>\n";
-                } else {
-                    $ret .= "/>\n";
-                }
-            }
-            $ret .= "$indent    </deps>\n";
-        }
-        if (isset($pkginfo['configure_options'])) {
-            $ret .= "$indent    <configureoptions>\n";
-            foreach ($pkginfo['configure_options'] as $c) {
-                $ret .= "$indent      <configureoption name=\"".
-                    htmlspecialchars($c['name']) . "\"";
-                if (isset($c['default'])) {
-                    $ret .= " default=\"" . htmlspecialchars($c['default']) . "\"";
-                }
-                $ret .= " prompt=\"" . htmlspecialchars($c['prompt']) . "\"";
-                $ret .= "/>\n";
-            }
-            $ret .= "$indent    </configureoptions>\n";
-        }
-        if (isset($pkginfo['provides'])) {
-            foreach ($pkginfo['provides'] as $key => $what) {
-                $ret .= "$indent    <provides type=\"$what[type]\" ";
-                $ret .= "name=\"$what[name]\" ";
-                if (isset($what['extends'])) {
-                    $ret .= "extends=\"$what[extends]\" ";
-                }
-                $ret .= "/>\n";
-            }
-        }
-        if (isset($pkginfo['filelist'])) {
-            $ret .= "$indent    <filelist>\n";
-            foreach ($pkginfo['filelist'] as $file => $fa) {
-                @$ret .= "$indent      <file role=\"$fa[role]\"";
-                if (isset($fa['baseinstalldir'])) {
-                    $ret .= ' baseinstalldir="' .
-                        htmlspecialchars($fa['baseinstalldir']) . '"';
-                }
-                if (isset($fa['md5sum'])) {
-                    $ret .= " md5sum=\"$fa[md5sum]\"";
-                }
-                if (isset($fa['platform'])) {
-                    $ret .= " platform=\"$fa[platform]\"";
-                }
-                if (!empty($fa['install-as'])) {
-                    $ret .= ' install-as="' .
-                        htmlspecialchars($fa['install-as']) . '"';
-                }
-                $ret .= ' name="' . htmlspecialchars($file) . '"';
-                if (empty($fa['replacements'])) {
-                    $ret .= "/>\n";
-                } else {
-                    $ret .= ">\n";
-                    foreach ($fa['replacements'] as $r) {
-                        $ret .= "$indent        <replace";
-                        foreach ($r as $k => $v) {
-                            $ret .= " $k=\"" . htmlspecialchars($v) .'"';
-                        }
-                        $ret .= "/>\n";
-                    }
-                    @$ret .= "$indent      </file>\n";
-                }
-            }
-            $ret .= "$indent    </filelist>\n";
-        }
-        $ret .= "$indent  </release>\n";
-        return $ret;
+        $config = &PEAR_Config::singleton();
+        $packagefile = &new PEAR_PackageFile($config);
+        $pf = &$packagefile->fromArray($pkginfo);
+        $gen = &$pf->getDefaultGenerator();
+        return $gen->toXml(PEAR_VALIDATE_PACKAGING);
     }
 
     // }}}
@@ -1039,170 +536,32 @@
      *                may be found, or empty if they are not available
      * @access public
      * @return boolean
+     * @deprecated use the validation of PEAR_PackageFile objects
      */
     function validatePackageInfo($info, &$errors, &$warnings, $dir_prefix = '')
     {
-        if (PEAR::isError($info = $this->infoFromAny($info))) {
-            return $this->raiseError($info);
-        }
-        if (!is_array($info)) {
-            return false;
-        }
-
-        $errors = array();
-        $warnings = array();
-        if (!isset($info['package'])) {
-            $errors[] = 'missing package name';
-        } elseif (!$this->validPackageName($info['package'])) {
-            $errors[] = 'invalid package name';
-        }
-        $this->_packageName = $pn = $info['package'];
-
-        if (empty($info['summary'])) {
-            $errors[] = 'missing summary';
-        } elseif (strpos(trim($info['summary']), "\n") !== false) {
-            $warnings[] = 'summary should be on a single line';
-        }
-        if (empty($info['description'])) {
-            $errors[] = 'missing description';
-        }
-        if (empty($info['release_license'])) {
-            $errors[] = 'missing license';
-        }
-        if (!isset($info['version'])) {
-            $errors[] = 'missing version';
-        } elseif (!$this->validPackageVersion($info['version'])) {
-            $errors[] = 'invalid package release version';
-        }
-        if (empty($info['release_state'])) {
-            $errors[] = 'missing release state';
-        } elseif (!in_array($info['release_state'], PEAR_Common::getReleaseStates())) {
-            $errors[] = "invalid release state `$info[release_state]', should be one of: "
-                . implode(' ', PEAR_Common::getReleaseStates());
-        }
-        if (empty($info['release_date'])) {
-            $errors[] = 'missing release date';
-        } elseif (!preg_match('/^\d{4}-\d\d-\d\d$/', $info['release_date'])) {
-            $errors[] = "invalid release date `$info[release_date]', format is YYYY-MM-DD";
-        }
-        if (empty($info['release_notes'])) {
-            $errors[] = "missing release notes";
-        }
-        if (empty($info['maintainers'])) {
-            $errors[] = 'no maintainer(s)';
+        $config = &PEAR_Config::singleton();
+        $packagefile = &new PEAR_PackageFile($config);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        if (strpos($info, '<?xml') !== false) {
+            $pf = &$packagefile->fromXmlString($info, PEAR_VALIDATE_NORMAL, '');
         } else {
-            $i = 1;
-            foreach ($info['maintainers'] as $m) {
-                if (empty($m['handle'])) {
-                    $errors[] = "maintainer $i: missing handle";
-                }
-                if (empty($m['role'])) {
-                    $errors[] = "maintainer $i: missing role";
-                } elseif (!in_array($m['role'], PEAR_Common::getUserRoles())) {
-                    $errors[] = "maintainer $i: invalid role `$m[role]', should be one of: "
-                        . implode(' ', PEAR_Common::getUserRoles());
-                }
-                if (empty($m['name'])) {
-                    $errors[] = "maintainer $i: missing name";
-                }
-                if (empty($m['email'])) {
-                    $errors[] = "maintainer $i: missing email";
-                }
-                $i++;
-            }
+            $pf = &$packagefile->fromAnyFile($info, PEAR_VALIDATE_NORMAL);
         }
-        if (!empty($info['release_deps'])) {
-            $i = 1;
-            foreach ($info['release_deps'] as $d) {
-                if (empty($d['type'])) {
-                    $errors[] = "dependency $i: missing type";
-                } elseif (!in_array($d['type'], PEAR_Common::getDependencyTypes())) {
-                    $errors[] = "dependency $i: invalid type '$d[type]', should be one of: " .
-                        implode(' ', PEAR_Common::getDependencyTypes());
-                }
-                if (empty($d['rel'])) {
-                    $errors[] = "dependency $i: missing relation";
-                } elseif (!in_array($d['rel'], PEAR_Common::getDependencyRelations())) {
-                    $errors[] = "dependency $i: invalid relation '$d[rel]', should be one of: "
-                        . implode(' ', PEAR_Common::getDependencyRelations());
-                }
-                if (!empty($d['optional'])) {
-                    if (!in_array($d['optional'], array('yes', 'no'))) {
-                        $errors[] = "dependency $i: invalid relation optional attribute '$d[optional]', should be one of: yes no";
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($pf)) {
+            $errs = $pf->getUserinfo();
+            if (is_array($errs)) {
+                foreach ($errs as $error) {
+                    if ($error['level'] == 'error') {
+                        $errors[] = $error['message'];
+                    } else {
+                        $warnings[] = $error['message'];
                     }
                 }
-                if ($d['rel'] != 'has' && empty($d['version'])) {
-                    $warnings[] = "dependency $i: missing version";
-                } elseif ($d['rel'] == 'has' && !empty($d['version'])) {
-                    $warnings[] = "dependency $i: version ignored for `has' dependencies";
-                }
-                if ($d['type'] == 'php' && !empty($d['name'])) {
-                    $warnings[] = "dependency $i: name ignored for php type dependencies";
-                } elseif ($d['type'] != 'php' && empty($d['name'])) {
-                    $errors[] = "dependency $i: missing name";
-                }
-                $i++;
-            }
-        }
-        if (!empty($info['configure_options'])) {
-            $i = 1;
-            foreach ($info['configure_options'] as $c) {
-                if (empty($c['name'])) {
-                    $errors[] = "configure option $i: missing name";
-                }
-                if (empty($c['prompt'])) {
-                    $errors[] = "configure option $i: missing prompt";
-                }
-                $i++;
-            }
-        }
-        if (empty($info['filelist'])) {
-            $errors[] = 'no files';
-        } else {
-            foreach ($info['filelist'] as $file => $fa) {
-                if (empty($fa['role'])) {
-                    $errors[] = "file $file: missing role";
-                    continue;
-                } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
-                    $errors[] = "file $file: invalid role, should be one of: "
-                        . implode(' ', PEAR_Common::getFileRoles());
-                }
-                if ($fa['role'] == 'php' && $dir_prefix) {
-                    $this->log(1, "Analyzing $file");
-                    $srcinfo = $this->analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
-                    if ($srcinfo) {
-                        $this->buildProvidesArray($srcinfo);
-                    }
-                }
-
-                // (ssb) Any checks we can do for baseinstalldir?
-                // (cox) Perhaps checks that either the target dir and
-                //       baseInstall doesn't cointain "../../"
-            }
-        }
-        $this->_packageName = $pn = $info['package'];
-        $pnl = strlen($pn);
-        foreach ((array)$this->pkginfo['provides'] as $key => $what) {
-            if (isset($what['explicit'])) {
-                // skip conformance checks if the provides entry is
-                // specified in the package.xml file
-                continue;
-            }
-            extract($what);
-            if ($type == 'class') {
-                if (!strncasecmp($name, $pn, $pnl)) {
-                    continue;
-                }
-                $warnings[] = "in $file: class \"$name\" not prefixed with package name \"$pn\"";
-            } elseif ($type == 'function') {
-                if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
-                    continue;
-                }
-                $warnings[] = "in $file: function \"$name\" not prefixed with package name \"$pn\"";
             }
+            return false;
         }
-
-
         return true;
     }
 
@@ -1301,7 +660,13 @@
         if (!$fp = @fopen($file, "r")) {
             return false;
         }
-        $contents = fread($fp, filesize($file));
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $contents = file_get_contents($file);
+        } else {
+            $contents = fread($fp, filesize($file));
+            fclose($fp);
+        }
         $tokens = token_get_all($contents);
 /*
         for ($i = 0; $i < sizeof($tokens); $i++) {
@@ -1347,6 +712,7 @@
                     continue;
                 } else {
                     $inquote = false;
+                    continue;
                 }
             }
             switch ($token) {
@@ -1383,7 +749,7 @@
                     $interface = true;
                 case T_CLASS:
                     if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        PEAR::raiseError("Parser error: Invalid PHP file $file",
+                        PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
                             PEAR_COMMON_ERROR_INVALIDPHP);
                         return false;
                     }
@@ -1397,9 +763,10 @@
                     if (version_compare(zend_version(), '2.0', '<')) {
                         if (in_array(strtolower($data),
                             array('public', 'private', 'protected', 'abstract',
-                                  'interface', 'implements', 'clone', 'throw') 
+                                  'interface', 'implements', 'throw') 
                                  )) {
-                            PEAR::raiseError('Error: PHP5 packages must be packaged by php 5 PEAR');
+                            PEAR::raiseError('Error: PHP5 token encountered in ' . $file . 
+                            'packaging should be done in PHP 5');
                             return false;
                         }
                     }
@@ -1447,7 +814,7 @@
                     continue 2;
                 case T_DOUBLE_COLON:
                     if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        PEAR::raiseError("Parser error: Invalid PHP file $file",
+                        PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
                             PEAR_COMMON_ERROR_INVALIDPHP);
                         return false;
                     }
@@ -1725,357 +1092,38 @@
      *                 getCode().
      *
      * @access public
+     * @deprecated in favor of PEAR_Downloader::downloadHttp()
      */
     function downloadHttp($url, &$ui, $save_dir = '.', $callback = null)
     {
-        if ($callback) {
-            call_user_func($callback, 'setup', array(&$ui));
-        }
-        if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
-            list(,$host,,$port,$path) = $matches;
-        }
-        if (isset($this)) {
-            $config = &$this->config;
-        } else {
-            $config = &PEAR_Config::singleton();
-        }
-        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-        if ($proxy = parse_url($config->get('http_proxy'))) {
-            $proxy_host = @$proxy['host'];
-            $proxy_port = @$proxy['port'];
-            $proxy_user = @$proxy['user'];
-            $proxy_pass = @$proxy['pass'];
-
-            if ($proxy_port == '') {
-                $proxy_port = 8080;
-            }
-            if ($callback) {
-                call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
-            }
-        }
-        if (empty($port)) {
-            $port = 80;
-        }
-        if ($proxy_host != '') {
-            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
-            if (!$fp) {
-                if ($callback) {
-                    call_user_func($callback, 'connfailed', array($proxy_host, $proxy_port,
-                                                                  $errno, $errstr));
-                }
-                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
-            }
-            $request = "GET $url HTTP/1.0\r\n";
-        } else {
-            $fp = @fsockopen($host, $port, $errno, $errstr);
-            if (!$fp) {
-                if ($callback) {
-                    call_user_func($callback, 'connfailed', array($host, $port,
-                                                                  $errno, $errstr));
-                }
-                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
-            }
-            $request = "GET $path HTTP/1.0\r\n";
-        }
-        $request .= "Host: $host:$port\r\n".
-            "User-Agent: PHP/".PHP_VERSION."\r\n";
-        if ($proxy_host != '' && $proxy_user != '') {
-            $request .= 'Proxy-Authorization: Basic ' .
-                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
-        }
-        $request .= "\r\n";
-        fwrite($fp, $request);
-        $headers = array();
-        while (trim($line = fgets($fp, 1024))) {
-            if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
-                $headers[strtolower($matches[1])] = trim($matches[2]);
-            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
-                if ($matches[1] != 200) {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
-                }
-            }
+        if (!class_exists('PEAR_Downloader')) {
+            require_once 'PEAR/Downloader.php';
         }
-        if (isset($headers['content-disposition']) &&
-            preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
-            $save_as = basename($matches[1]);
-        } else {
-            $save_as = basename($url);
-        }
-        if ($callback) {
-            $tmp = call_user_func($callback, 'saveas', $save_as);
-            if ($tmp) {
-                $save_as = $tmp;
-            }
-        }
-        $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
-        if (!$wp = @fopen($dest_file, 'wb')) {
-            fclose($fp);
-            if ($callback) {
-                call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
-            }
-            return PEAR::raiseError("could not open $dest_file for writing");
-        }
-        if (isset($headers['content-length'])) {
-            $length = $headers['content-length'];
-        } else {
-            $length = -1;
-        }
-        $bytes = 0;
-        if ($callback) {
-            call_user_func($callback, 'start', array(basename($dest_file), $length));
-        }
-        while ($data = @fread($fp, 1024)) {
-            $bytes += strlen($data);
-            if ($callback) {
-                call_user_func($callback, 'bytesread', $bytes);
-            }
-            if (!@fwrite($wp, $data)) {
-                fclose($fp);
-                if ($callback) {
-                    call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
-                }
-                return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
-            }
-        }
-        fclose($fp);
-        fclose($wp);
-        if ($callback) {
-            call_user_func($callback, 'done', $bytes);
-        }
-        return $dest_file;
+        return PEAR_Downloader::downloadHttp($url, $ui, $save_dir, $callback);
     }
 
     // }}}
-    // {{{ sortPkgDeps()
 
     /**
-     * Sort a list of arrays of array(downloaded packagefilename) by dependency.
-     *
-     * It also removes duplicate dependencies
-     * @param array
-     * @param boolean Sort packages in reverse order if true
-     * @return array array of array(packagefilename, package.xml contents)
-     */
-    function sortPkgDeps(&$packages, $uninstall = false)
-    {
-        $ret = array();
-        if ($uninstall) {
-            foreach($packages as $packageinfo) {
-                $ret[] = array('info' => $packageinfo);
-            }
-        } else {
-            foreach($packages as $packagefile) {
-                if (!is_array($packagefile)) {
-                    $ret[] = array('file' => $packagefile,
-                                   'info' => $a = $this->infoFromAny($packagefile),
-                                   'pkg' => $a['package']);
-                } else {
-                    $ret[] = $packagefile;
-                }
-            }
-        }
-        $checkdupes = array();
-        $newret = array();
-        foreach($ret as $i => $p) {
-            if (!isset($checkdupes[$p['info']['package']])) {
-                $checkdupes[$p['info']['package']][] = $i;
-                $newret[] = $p;
-            }
-        }
-        $this->_packageSortTree = $this->_getPkgDepTree($newret);
-
-        $func = $uninstall ? '_sortPkgDepsRev' : '_sortPkgDeps';
-        usort($newret, array(&$this, $func));
-        $this->_packageSortTree = null;
-        $packages = $newret;
-    }
-
-    // }}}
-    // {{{ _sortPkgDeps()
-
-    /**
-     * Compare two package's package.xml, and sort
-     * so that dependencies are installed first
-     *
-     * This is a crude compare, real dependency checking is done on install.
-     * The only purpose this serves is to make the command-line
-     * order-independent (you can list a dependent package first, and
-     * installation occurs in the order required)
-     * @access private
-     */
-    function _sortPkgDeps($p1, $p2)
-    {
-        $p1name = $p1['info']['package'];
-        $p2name = $p2['info']['package'];
-        $p1deps = $this->_getPkgDeps($p1);
-        $p2deps = $this->_getPkgDeps($p2);
-        if (!count($p1deps) && !count($p2deps)) {
-            return 0; // order makes no difference
-        }
-        if (!count($p1deps)) {
-            return -1; // package 2 has dependencies, package 1 doesn't
-        }
-        if (!count($p2deps)) {
-            return 1; // package 1 has dependencies, package 2 doesn't
-        }
-        // both have dependencies
-        if (in_array($p1name, $p2deps)) {
-            return -1; // put package 1 first: package 2 depends on package 1
-        }
-        if (in_array($p2name, $p1deps)) {
-            return 1; // put package 2 first: package 1 depends on package 2
-        }
-        if ($this->_removedDependency($p1name, $p2name)) {
-            return -1; // put package 1 first: package 2 depends on packages that depend on package 1
-        }
-        if ($this->_removedDependency($p2name, $p1name)) {
-            return 1; // put package 2 first: package 1 depends on packages that depend on package 2
-        }
-        // doesn't really matter if neither depends on the other
-        return 0;
-    }
-
-    // }}}
-    // {{{ _sortPkgDepsRev()
-
-    /**
-     * Compare two package's package.xml, and sort
-     * so that dependencies are uninstalled last
-     *
-     * This is a crude compare, real dependency checking is done on uninstall.
-     * The only purpose this serves is to make the command-line
-     * order-independent (you can list a dependency first, and
-     * uninstallation occurs in the order required)
-     * @access private
-     */
-    function _sortPkgDepsRev($p1, $p2)
-    {
-        $p1name = $p1['info']['package'];
-        $p2name = $p2['info']['package'];
-        $p1deps = $this->_getRevPkgDeps($p1);
-        $p2deps = $this->_getRevPkgDeps($p2);
-        if (!count($p1deps) && !count($p2deps)) {
-            return 0; // order makes no difference
-        }
-        if (!count($p1deps)) {
-            return 1; // package 2 has dependencies, package 1 doesn't
-        }
-        if (!count($p2deps)) {
-            return -1; // package 2 has dependencies, package 1 doesn't
-        }
-        // both have dependencies
-        if (in_array($p1name, $p2deps)) {
-            return 1; // put package 1 last
-        }
-        if (in_array($p2name, $p1deps)) {
-            return -1; // put package 2 last
-        }
-        if ($this->_removedDependency($p1name, $p2name)) {
-            return 1; // put package 1 last: package 2 depends on packages that depend on package 1
-        }
-        if ($this->_removedDependency($p2name, $p1name)) {
-            return -1; // put package 2 last: package 1 depends on packages that depend on package 2
-        }
-        // doesn't really matter if neither depends on the other
-        return 0;
-    }
-
-    // }}}
-    // {{{ _getPkgDeps()
-
-    /**
-     * get an array of package dependency names
-     * @param array
-     * @return array
-     * @access private
-     */
-    function _getPkgDeps($p)
-    {
-        if (!isset($p['info']['releases'])) {
-            return $this->_getRevPkgDeps($p);
-        }
-        $rel = array_shift($p['info']['releases']);
-        if (!isset($rel['deps'])) {
-            return array();
-        }
-        $ret = array();
-        foreach($rel['deps'] as $dep) {
-            if ($dep['type'] == 'pkg') {
-                $ret[] = $dep['name'];
-            }
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ _getPkgDeps()
-
-    /**
-     * get an array representation of the package dependency tree
-     * @return array
-     * @access private
-     */
-    function _getPkgDepTree($packages)
-    {
-        $tree = array();
-        foreach ($packages as $p) {
-            $package = $p['info']['package'];
-            $deps = $this->_getPkgDeps($p);
-            $tree[$package] = $deps;
-        }
-        return $tree;
-    }
-
-    // }}}
-    // {{{ _removedDependency($p1, $p2)
-
-    /**
-     * get an array of package dependency names for uninstall
-     * @param string package 1 name
-     * @param string package 2 name
-     * @return bool
-     * @access private
-     */
-    function _removedDependency($p1, $p2)
-    {
-        if (empty($this->_packageSortTree[$p2])) {
-            return false;
-        }
-        if (!in_array($p1, $this->_packageSortTree[$p2])) {
-            foreach ($this->_packageSortTree[$p2] as $potential) {
-                if ($this->_removedDependency($p1, $potential)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-        return true;
-    }
-
-    // }}}
-    // {{{ _getRevPkgDeps()
-
-    /**
-     * get an array of package dependency names for uninstall
-     * @param array
-     * @return array
-     * @access private
+     * @param string $path relative or absolute include path
+     * @return boolean
+     * @static
      */
-    function _getRevPkgDeps($p)
+    function isIncludeable($path)
     {
-        if (!isset($p['info']['release_deps'])) {
-            return array();
+        if (file_exists($path) && is_readable($path)) {
+            return true;
         }
-        $ret = array();
-        foreach($p['info']['release_deps'] as $dep) {
-            if ($dep['type'] == 'pkg') {
-                $ret[] = $dep['name'];
+        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
+        foreach ($ipath as $include) {
+            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
+            if (file_exists($test) && is_readable($test)) {
+                return true;
             }
         }
-        return $ret;
+        return false;
     }
-
-    // }}}
 }
-
-?>
+require_once 'PEAR/Config.php';
+require_once 'PEAR/PackageFile.php';
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Config.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Config.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Config.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Config.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,25 +1,34 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// +----------------------------------------------------------------------+
-//
-// $Id: Config.php,v 1.52 2004/01/08 17:33:12 sniper Exp $
+/**
+ * PEAR_Config, customized configuration handling for the PEAR Installer
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Config.php,v 1.123 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**
+ * Required for error handling
+ */
 require_once 'PEAR.php';
+require_once 'PEAR/Registry.php';
+require_once 'PEAR/Installer/Role.php';
 require_once 'System.php';
+require_once 'PEAR/Remote.php';
 
 /**
  * Last created PEAR_Config instance.
@@ -38,6 +47,15 @@
 // PHP_ prefix is for some security, PHP protects environment
 // variables starting with PHP_*.
 
+// default channel and preferred mirror is based on whether we are invoked through
+// the "pear" or the "pecl" command
+
+if (!defined('PEAR_RUNTYPE') || PEAR_RUNTYPE == 'pear') {
+    define('PEAR_CONFIG_DEFAULT_CHANNEL', 'pear.php.net');
+} else {
+    define('PEAR_CONFIG_DEFAULT_CHANNEL', 'pecl.php.net');
+}
+
 if (getenv('PHP_PEAR_SYSCONF_DIR')) {
     define('PEAR_CONFIG_SYSCONFDIR', getenv('PHP_PEAR_SYSCONF_DIR'));
 } elseif (getenv('SystemRoot')) {
@@ -192,6 +210,15 @@
 /**
  * This is a class for storing configuration data, keeping track of
  * which are system-defined, user-defined or defaulted.
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Config extends PEAR
 {
@@ -208,7 +235,7 @@
         );
 
     var $layers = array();
-
+    
     /**
      * Configuration data, two-dimensional array where the first
      * dimension is the config layer ('user', 'system' and 'default'),
@@ -226,6 +253,62 @@
         'system' => array(),
         'default' => array(),
         );
+    
+    /**
+     * Configuration values that can be set for a channel
+     *
+     * All other configuration values can only have a global value
+     * @var array
+     * @access private
+     */
+    var $_channelConfigInfo = array(
+        'php_dir', 'ext_dir', 'doc_dir', 'bin_dir', 'data_dir',
+        'test_dir', 'php_bin', 'username', 'password', 'verbose',
+        'preferred_state', 'umask', 'preferred_mirror',
+        );
+
+    /**
+     * Channels that can be accessed
+     * @see setChannels()
+     * @var array
+     * @access private
+     */
+    var $_channels = array('pear.php.net', 'pecl.php.net', '__uri');
+
+    /**
+     * This variable is used to control the directory values returned
+     * @see setInstallRoot();
+     * @var string|false
+     * @access private
+     */
+    var $_installRoot = false;
+
+    /**
+     * If requested, this will always refer to the registry
+     * contained in php_dir
+     * @var PEAR_Registry
+     */
+    var $_registry = array();
+
+    /**
+     * @var array
+     * @access private
+     */
+    var $_regInitialized = array();
+
+    /**
+     * @var bool
+     * @access private
+     */
+    var $_noRegistry = false;
+
+    /**
+     * amount of errors found while parsing config
+     * @var integer
+     * @access private
+     */
+    var $_errorsFound = 0;
+    var $_lastError = null;
 
     /**
      * Information about the configuration data.  Stores the type,
@@ -235,12 +318,41 @@
      * @var array layer => array(infotype => value, ...)
      */
     var $configuration_info = array(
+        // Channels/Internet Access
+        'default_channel' => array(
+            'type' => 'string',
+            'default' => PEAR_CONFIG_DEFAULT_CHANNEL,
+            'doc' => 'the default channel to use for all non explicit commands',
+            'prompt' => 'Default Channel',
+            'group' => 'Internet Access',
+            ),
+        'preferred_mirror' => array(
+            'type' => 'string',
+            'default' => PEAR_CONFIG_DEFAULT_CHANNEL,
+            'doc' => 'the default server or mirror to use for channel actions',
+            'prompt' => 'Default Channel Mirror',
+            'group' => 'Internet Access',
+            ),
+        'remote_config' => array(
+            'type' => 'password',
+            'default' => '',
+            'doc' => 'ftp url of remote configuration file to use for synchronized install',
+            'prompt' => 'Remote Configuration File',
+            'group' => 'Internet Access',
+            ),
+        'auto_discover' => array(
+            'type' => 'integer',
+            'default' => 0,
+            'doc' => 'whether to automatically discover new channels',
+            'prompt' => 'Auto-discover new Channels',
+            'group' => 'Internet Access',
+            ),
         // Internet Access
         'master_server' => array(
             'type' => 'string',
             'default' => 'pear.php.net',
-            'doc' => 'name of the main PEAR server',
-            'prompt' => 'PEAR server',
+            'doc' => 'name of the main PEAR server [NOT USED IN THIS VERSION]',
+            'prompt' => 'PEAR server [DEPRECATED]',
             'group' => 'Internet Access',
             ),
         'http_proxy' => array(
@@ -380,12 +492,13 @@
             'group' => 'Maintainers',
             ),
         'sig_keydir' => array(
-            'type' => 'string',
+            'type' => 'directory',
             'default' => PEAR_CONFIG_DEFAULT_SIG_KEYDIR,
-            'doc' => 'which package signature mechanism to use',
+            'doc' => 'directory where signature keys are located',
             'prompt' => 'Signature Key Directory',
             'group' => 'Maintainers',
             ),
+        // __channels is reserved - used for channel-specific configuration
         );
 
     // }}}
@@ -395,16 +508,22 @@
     /**
      * Constructor.
      *
-     * @param string (optional) file to read user-defined options from
-     * @param string (optional) file to read system-wide defaults from
+     * @param string file to read user-defined options from
+     * @param string file to read system-wide defaults from
+     * @param bool   determines whether a registry object "follows"
+     *               the value of php_dir (is automatically created
+     *               and moved when php_dir is changed)
+     * @param bool   if true, fails if configuration files cannot be loaded
      *
      * @access public
      *
      * @see PEAR_Config::singleton
      */
-    function PEAR_Config($user_file = '', $system_file = '')
+    function PEAR_Config($user_file = '', $system_file = '', $ftp_file = false,
+                         $strict = true)
     {
         $this->PEAR();
+        PEAR_Installer_Role::initializeConfig($this);
         $sl = DIRECTORY_SEPARATOR;
         if (empty($user_file)) {
             if (OS_WINDOWS) {
@@ -420,18 +539,42 @@
                 $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf';
             }
         }
+
         $this->layers = array_keys($this->configuration);
         $this->files['user'] = $user_file;
         $this->files['system'] = $system_file;
-        if ($user_file && file_exists($user_file)) {
-            $this->readConfigFile($user_file);
+        if ($user_file && @file_exists($user_file)) {
+            $this->pushErrorHandling(PEAR_ERROR_RETURN);
+            $this->readConfigFile($user_file, 'user', $strict);
+            $this->popErrorHandling();
+            if ($this->_errorsFound > 0) {
+                return;
+            }
+        }
+
+        if ($system_file && @file_exists($system_file)) {
+            $this->mergeConfigFile($system_file, false, 'system', $strict);
+            if ($this->_errorsFound > 0) {
+                return;
+            }
+
         }
-        if ($system_file && file_exists($system_file)) {
-            $this->mergeConfigFile($system_file, false, 'system');
+
+        if (!$ftp_file) {
+            $ftp_file = $this->get('remote_config');
+        }
+
+        if ($ftp_file && defined('PEAR_REMOTEINSTALL_OK')) {
+            $this->readFTPConfigFile($ftp_file);
         }
+
         foreach ($this->configuration_info as $key => $info) {
             $this->configuration['default'][$key] = $info['default'];
         }
+
+        $this->_registry['default'] = &new PEAR_Registry($this->configuration['default']['php_dir']);
+        $this->_registry['default']->setConfig($this);
+        $this->_regInitialized['default'] = false;
         //$GLOBALS['_PEAR_Config_instance'] = &$this;
     }
 
@@ -453,113 +596,293 @@
      *
      * @see PEAR_Config::PEAR_Config
      */
-    function &singleton($user_file = '', $system_file = '')
+    function &singleton($user_file = '', $system_file = '', $strict = true)
     {
         if (is_object($GLOBALS['_PEAR_Config_instance'])) {
             return $GLOBALS['_PEAR_Config_instance'];
         }
-        $GLOBALS['_PEAR_Config_instance'] =
-             &new PEAR_Config($user_file, $system_file);
+
+        $t_conf = &new PEAR_Config($user_file, $system_file, false, $strict);
+        if ($t_conf->_errorsFound > 0) {
+             return $t_conf->lastError;
+        }
+
+        $GLOBALS['_PEAR_Config_instance'] = &$t_conf;
         return $GLOBALS['_PEAR_Config_instance'];
     }
 
     // }}}
+    // {{{ validConfiguration()
+
+    /**
+     * Determine whether any configuration files have been detected, and whether a
+     * registry object can be retrieved from this configuration.
+     * @return bool
+     * @since PEAR 1.4.0a1
+     */
+    function validConfiguration()
+    {
+        if ($this->isDefinedLayer('user') || $this->isDefinedLayer('system')) {
+            return true;
+        }
+        return false;
+    }
+
+    // }}}
     // {{{ readConfigFile([file], [layer])
 
     /**
      * Reads configuration data from a file.  All existing values in
      * the config layer are discarded and replaced with data from the
      * file.
-     *
-     * @param string (optional) file to read from, if NULL or not
-     * specified, the last-used file for the same layer (second param)
-     * is used
-     *
-     * @param string (optional) config layer to insert data into
-     * ('user' or 'system')
-     *
+     * @param string file to read from, if NULL or not specified, the
+     *               last-used file for the same layer (second param) is used
+     * @param string config layer to insert data into ('user' or 'system')
      * @return bool TRUE on success or a PEAR error on failure
-     *
-     * @access public
      */
-    function readConfigFile($file = null, $layer = 'user')
+    function readConfigFile($file = null, $layer = 'user', $strict = true)
     {
         if (empty($this->files[$layer])) {
-            return $this->raiseError("unknown config file type `$layer'");
+            return $this->raiseError("unknown config layer `$layer'");
         }
+
         if ($file === null) {
             $file = $this->files[$layer];
         }
+
         $data = $this->_readConfigDataFrom($file);
+
         if (PEAR::isError($data)) {
-            return $data;
+            if ($strict) {
+                $this->_errorsFound++;
+                $this->lastError = $data;
+
+                return $data;
+            } else {
+                return true;
+            }
+        } else {
+            $this->files[$layer] = $file;
         }
+
         $this->_decodeInput($data);
         $this->configuration[$layer] = $data;
+        $this->_setupChannels();
+        if (!$this->_noRegistry && ($phpdir = $this->get('php_dir', $layer, 'pear.php.net'))) {
+            $this->_registry[$layer] = &new PEAR_Registry($phpdir);
+            $this->_registry[$layer]->setConfig($this);
+            $this->_regInitialized[$layer] = false;
+        } else {
+            unset($this->_registry[$layer]);
+        }
         return true;
     }
 
     // }}}
+
+    /**
+     * @param string url to the remote config file, like ftp://www.example.com/pear/config.ini
+     * @return true|PEAR_Error
+     */
+    function readFTPConfigFile($path)
+    {
+        do { // poor man's try
+            if (!class_exists('Net_FTP')) {
+                if (!class_exists('PEAR_Common')) {
+                    require_once 'PEAR/Common.php';
+                }
+                if (PEAR_Common::isIncludeable('Net/FTP.php')) {
+                    include_once 'Net/FTP.php';
+                }
+            }
+            if (class_exists('Net_FTP') &&
+                  (class_exists('PEAR_FTP') || PEAR_Common::isIncludeable('PEAR/FTP.php'))) {
+                require_once 'PEAR/FTP.php';
+                $this->_ftp = &new PEAR_FTP;
+                $this->_ftp->pushErrorHandling(PEAR_ERROR_RETURN);
+                $e = $this->_ftp->init($path);
+                if (PEAR::isError($e)) {
+                    $this->_ftp->popErrorHandling();
+                    return $e;
+                }
+                $tmp = System::mktemp('-d');
+                PEAR_Common::addTempFile($tmp);
+                $e = $this->_ftp->get(basename($path), $tmp . DIRECTORY_SEPARATOR .
+                    'pear.ini', false, FTP_BINARY);
+                if (PEAR::isError($e)) {
+                    $this->_ftp->popErrorHandling();
+                    return $e;
+                }
+                PEAR_Common::addTempFile($tmp . DIRECTORY_SEPARATOR . 'pear.ini');
+                $this->_ftp->disconnect();
+                $this->_ftp->popErrorHandling();
+                $this->files['ftp'] = $tmp . DIRECTORY_SEPARATOR . 'pear.ini';
+                $e = $this->readConfigFile(null, 'ftp');
+                if (PEAR::isError($e)) {
+                    return $e;
+                }
+                $fail = array();
+                foreach ($this->configuration_info as $key => $val) {
+                    if (in_array($this->getGroup($key),
+                          array('File Locations', 'File Locations (Advanced)')) &&
+                          $this->getType($key) == 'directory') {
+                        // any directory configs must be set for this to work
+                        if (!isset($this->configuration['ftp'][$key])) {
+                            $fail[] = $key;
+                        }
+                    }
+                }
+                if (count($fail)) {
+                    $fail = '"' . implode('", "', $fail) . '"';
+                    unset($this->files['ftp']);
+                    unset($this->configuration['ftp']);
+                    return PEAR::raiseError('ERROR: Ftp configuration file must set all ' .
+                        'directory configuration variables.  These variables were not set: ' .
+                        $fail);
+                } else {
+                    return true;
+                }
+            } else {
+                return PEAR::raiseError('Net_FTP must be installed to use remote config');
+            }
+        } while (false); // poor man's catch
+        unset($this->files['ftp']);
+        return PEAR::raiseError('no remote host specified');
+    }
+
+    // {{{ _setupChannels()
+    
+    /**
+     * Reads the existing configurations and creates the _channels array from it
+     */
+    function _setupChannels()
+    {
+        $set = array_flip(array_values($this->_channels));
+        foreach ($this->configuration as $layer => $data) {
+            $i = 1000;
+            if (isset($data['__channels'])) {
+                foreach ($data['__channels'] as $channel => $info) {
+                    $set[$channel] = $i++;
+                }
+            }
+        }
+        $this->_channels = array_values(array_flip($set));
+        $this->setChannels($this->_channels);
+    }
+
+    // }}}
+    // {{{ deleteChannel(channel)
+
+    function deleteChannel($channel)
+    {
+        foreach ($this->configuration as $layer => $data) {
+            if (isset($data['__channels'])) {
+                if (isset($data['__channels'][strtolower($channel)])) {
+                    unset($this->configuration[$layer]['__channels'][strtolower($channel)]);
+                }
+            }
+        }
+        $this->_channels = array_flip($this->_channels);
+        unset($this->_channels[strtolower($channel)]);
+        $this->_channels = array_flip($this->_channels);
+    }
+
+    // }}}
     // {{{ mergeConfigFile(file, [override], [layer])
 
     /**
      * Merges data into a config layer from a file.  Does the same
      * thing as readConfigFile, except it does not replace all
      * existing values in the config layer.
-     *
      * @param string file to read from
-     *
-     * @param bool (optional) whether to overwrite existing data
-     * (default TRUE)
-     *
-     * @param string config layer to insert data into ('user' or
-     * 'system')
-     *
+     * @param bool whether to overwrite existing data (default TRUE)
+     * @param string config layer to insert data into ('user' or 'system')
+     * @param string if true, errors are returned if file opening fails
      * @return bool TRUE on success or a PEAR error on failure
-     *
-     * @access public.
      */
-    function mergeConfigFile($file, $override = true, $layer = 'user')
+    function mergeConfigFile($file, $override = true, $layer = 'user', $strict = true)
     {
         if (empty($this->files[$layer])) {
-            return $this->raiseError("unknown config file type `$layer'");
+            return $this->raiseError("unknown config layer `$layer'");
         }
         if ($file === null) {
             $file = $this->files[$layer];
         }
         $data = $this->_readConfigDataFrom($file);
         if (PEAR::isError($data)) {
-            return $data;
+            if ($strict) {
+                $this->_errorsFound++;
+                $this->lastError = $data;
+
+                return $data;
+            } else {
+                return true;
+            }
         }
         $this->_decodeInput($data);
         if ($override) {
-            $this->configuration[$layer] = array_merge($this->configuration[$layer], $data);
+            $this->configuration[$layer] =
+                PEAR_Config::arrayMergeRecursive($this->configuration[$layer], $data);
         } else {
-            $this->configuration[$layer] = array_merge($data, $this->configuration[$layer]);
+            $this->configuration[$layer] =
+                PEAR_Config::arrayMergeRecursive($data, $this->configuration[$layer]);
+        }
+        $this->_setupChannels();
+        if (!$this->_noRegistry && ($phpdir = $this->get('php_dir', $layer, 'pear.php.net'))) {
+            $this->_registry[$layer] = &new PEAR_Registry($phpdir);
+            $this->_registry[$layer]->setConfig($this);
+            $this->_regInitialized[$layer] = false;
+        } else {
+            unset($this->_registry[$layer]);
         }
         return true;
     }
 
     // }}}
+    // {{{ arrayMergeRecursive($arr2, $arr1)
+    /**
+     * @param array
+     * @param array
+     * @return array
+     * @static
+     */
+    function arrayMergeRecursive($arr2, $arr1)
+    {
+        $ret = array();
+        foreach ($arr2 as $key => $data) {
+            if (!isset($arr1[$key])) {
+                $ret[$key] = $data;
+                unset($arr1[$key]);
+                continue;
+            }
+            if (is_array($data)) {
+                if (!is_array($arr1[$key])) {
+                    $ret[$key] = $arr1[$key];
+                    unset($arr1[$key]);
+                    continue;
+                }
+                $ret[$key] = PEAR_Config::arrayMergeRecursive($arr1[$key], $arr2[$key]);
+                unset($arr1[$key]);
+            }
+        }
+        return array_merge($ret, $arr1);
+    }
+
+    // }}}
     // {{{ writeConfigFile([file], [layer])
 
     /**
      * Writes data into a config layer from a file.
      *
-     * @param string file to read from
-     *
-     * @param bool (optional) whether to overwrite existing data
-     * (default TRUE)
-     *
+     * @param string|null file to read from, or null for default
      * @param string config layer to insert data into ('user' or
-     * 'system')
-     *
+     *               'system')
+     * @param string|null data to write to config file or null for internal data [DEPRECATED]
      * @return bool TRUE on success or a PEAR error on failure
-     *
-     * @access public.
      */
     function writeConfigFile($file = null, $layer = 'user', $data = null)
     {
+        $this->_lazyChannelSetup($layer);
         if ($layer == 'both' || $layer == 'all') {
             foreach ($this->files as $type => $file) {
                 $err = $this->writeConfigFile($file, $type, $data);
@@ -617,30 +940,57 @@
         $size = filesize($file);
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
-        $contents = fread($fp, $size);
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $contents = file_get_contents($file);
+        } else {
+            $contents = @fread($fp, $size);
+            fclose($fp);
+        }
+        if (empty($contents)) {
+            return $this->raiseError('Configuration file "' . $file . '" is empty');
+        }
+        
         set_magic_quotes_runtime($rt);
-        fclose($fp);
-        $version = '0.1';
+
+        $version = false;
         if (preg_match('/^#PEAR_Config\s+(\S+)\s+/si', $contents, $matches)) {
             $version = $matches[1];
             $contents = substr($contents, strlen($matches[0]));
+        } else {
+            // Museum config file
+            if (substr($contents,0,2) == 'a:') {
+                $version = '0.1';
+            }
         }
-        if (version_compare("$version", '1', '<')) {
+        if ($version && version_compare("$version", '1', '<')) {
+
+            // no '@', it is possible that unserialize
+            // raises a notice but it seems to block IO to
+            // STDOUT if a '@' is used and a notice is raise
             $data = unserialize($contents);
+
+            if (!is_array($data) && !$data) {
+                if ($contents == serialize(false)) {
+                    $data = array();
+                } else {
+                    $err = $this->raiseError("PEAR_Config: bad data in $file");
+                    return $err;
+                }
+            }
             if (!is_array($data)) {
                 if (strlen(trim($contents)) > 0) {
                     $error = "PEAR_Config: bad data in $file";
-//                if (isset($this)) {
-                    return $this->raiseError($error);
-//                } else {
-//                    return PEAR::raiseError($error);
+                    $err = $this->raiseError($error);
+                    return $err;
                 } else {
                     $data = array();
                 }
             }
         // add parsing of newer formats here...
         } else {
-            return $this->raiseError("$file: unknown version `$version'");
+            $err = $this->raiseError("$file: unknown version `$version'");
+            return $err; 
         }
         return $data;
     }
@@ -659,6 +1009,86 @@
     }
 
     // }}}
+
+    /**
+     * @param array information on a role as parsed from its xml file
+     * @return true|PEAR_Error
+     * @access private
+     */
+    function _addConfigVars($vars)
+    {
+        if (count($vars) > 3) {
+            return $this->raiseError('Roles can only define 3 new config variables or less');
+        }
+        foreach ($vars as $name => $var) {
+            if (!is_array($var)) {
+                return $this->raiseError('Configuration information must be an array');
+            }
+            if (!isset($var['type'])) {
+                return $this->raiseError('Configuration information must contain a type');
+            } else {
+                if (!in_array($var['type'],
+                      array('string', 'mask', 'password', 'directory', 'file', 'set'))) {
+                    return $this->raiseError(
+                        'Configuration type must be one of directory, file, string, ' .
+                        'mask, set, or password');
+                }
+            }
+            if (!isset($var['default'])) {
+                return $this->raiseError(
+                    'Configuration information must contain a default value ("default" index)');
+            } else {
+                if (is_array($var['default'])) {
+                    $real_default = '';
+                    foreach ($var['default'] as $config_var => $val) {
+                        if (strpos($config_var, 'text') === 0) {
+                            $real_default .= $val;
+                        } elseif (strpos($config_var, 'constant') === 0) {
+                            if (defined($val)) {
+                                $real_default .= constant($val);
+                            } else {
+                                return $this->raiseError(
+                                    'Unknown constant "' . $val . '" requested in ' .
+                                    'default value for configuration variable "' .
+                                    $name . '"');
+                            }
+                        } elseif (isset($this->configuration_info[$config_var])) {
+                            $real_default .=
+                                $this->configuration_info[$config_var]['default'];
+                        } else {
+                            return $this->raiseError(
+                                'Unknown request for "' . $config_var . '" value in ' .
+                                'default value for configuration variable "' .
+                                $name . '"');
+                        }
+                    }
+                    $var['default'] = $real_default;
+                }
+                if ($var['type'] == 'integer') {
+                    $var['default'] = (integer) $var['default'];
+                }
+            }
+            if (!isset($var['doc'])) {
+                return $this->raiseError(
+                    'Configuration information must contain a summary ("doc" index)');
+            }
+            if (!isset($var['prompt'])) {
+                return $this->raiseError(
+                    'Configuration information must contain a simple prompt ("prompt" index)');
+            }
+            if (!isset($var['group'])) {
+                return $this->raiseError(
+                    'Configuration information must contain a simple group ("group" index)');
+            }
+            if (isset($this->configuration_info[$name])) {
+                return $this->raiseError('Configuration variable "' . $name .
+                    '" already exists');
+            }
+            $this->configuration_info[$name] = $var;
+        }
+        return true;
+    }
+
     // {{{ _encodeOutput(&data)
 
     /**
@@ -675,6 +1105,11 @@
     function _encodeOutput(&$data)
     {
         foreach ($data as $key => $value) {
+            if ($key == '__channels') {
+                foreach ($data['__channels'] as $channel => $blah) {
+                    $this->_encodeOutput($data['__channels'][$channel]);
+                }
+            }
             if (!isset($this->configuration_info[$key])) {
                 continue;
             }
@@ -715,6 +1150,11 @@
             return true;
         }
         foreach ($data as $key => $value) {
+            if ($key == '__channels') {
+                foreach ($data['__channels'] as $channel => $blah) {
+                    $this->_decodeInput($data['__channels'][$channel]);
+                }
+            }
             if (!isset($this->configuration_info[$key])) {
                 continue;
             }
@@ -734,8 +1174,41 @@
     }
 
     // }}}
-    // {{{ get(key, [layer])
+    // {{{ getDefaultChannel([layer])
+    /**
+     * Retrieve the default channel.
+     *
+     * On startup, channels are not initialized, so if the default channel is not
+     * pear.php.net, then initialize the config.
+     * @param string registry layer
+     * @return string|false
+     */
+    function getDefaultChannel($layer = null)
+    {
+        $ret = false;
+        if ($layer === null) {
+            foreach ($this->layers as $layer) {
+                if (isset($this->configuration[$layer]['default_channel'])) {
+                    $ret = $this->configuration[$layer]['default_channel'];
+                    break;
+                }
+            }
+        } elseif (isset($this->configuration[$layer]['default_channel'])) {
+            $ret = $this->configuration[$layer]['default_channel'];
+        }
+        if ($ret == 'pear.php.net' && defined('PEAR_RUNTYPE') && PEAR_RUNTYPE == 'pecl') {
+            $ret = 'pecl.php.net';
+        }
+        if ($ret) {
+            if ($ret != 'pear.php.net') {
+                $this->_lazyChannelSetup();
+            }
+            return $ret;
+        }
+        return PEAR_CONFIG_DEFAULT_CHANNEL;
+    }
 
+    // {{{ get(key, [layer])
     /**
      * Returns a configuration value, prioritizing layers as per the
      * layers property.
@@ -746,21 +1219,134 @@
      *
      * @access public
      */
-    function get($key, $layer = null)
+    function get($key, $layer = null, $channel = false)
     {
+        if (!isset($this->configuration_info[$key])) {
+            return null;
+        }
+        if ($key == '__channels') {
+            return null;
+        }
+        if ($key == 'default_channel') {
+            return $this->getDefaultChannel($layer);
+        }
+        if (!$channel) {
+            $channel = $this->getDefaultChannel();
+        } elseif ($channel != 'pear.php.net') {
+            $this->_lazyChannelSetup();
+        }
+        $channel = strtolower($channel);
+        
+        $test = (in_array($key, $this->_channelConfigInfo)) ?
+            $this->_getChannelValue($key, $layer, $channel) :
+            null;
+        if ($test !== null) {
+            if ($this->_installRoot) {
+                if (in_array($this->getGroup($key),
+                      array('File Locations', 'File Locations (Advanced)')) &&
+                      $this->getType($key) == 'directory') {
+                    return $this->_prependPath($test, $this->_installRoot);
+                }
+            }
+            return $test;
+        }
         if ($layer === null) {
             foreach ($this->layers as $layer) {
                 if (isset($this->configuration[$layer][$key])) {
-                    return $this->configuration[$layer][$key];
+                    $test = $this->configuration[$layer][$key];
+                    if ($this->_installRoot) {
+                        if (in_array($this->getGroup($key),
+                              array('File Locations', 'File Locations (Advanced)')) &&
+                              $this->getType($key) == 'directory') {
+                            return $this->_prependPath($test, $this->_installRoot);
+                        }
+                    }
+                    if ($key == 'preferred_mirror') {
+                        $reg = &$this->getRegistry();
+                        if (is_object($reg)) {
+                            $chan = &$reg->getChannel($channel);
+                            if (!$chan->getMirror($test) && $chan->getName() != $test) {
+                                return $channel; // mirror does not exist
+                            }
+                        }
+                    }
+                    return $test;
                 }
             }
         } elseif (isset($this->configuration[$layer][$key])) {
-            return $this->configuration[$layer][$key];
+            $test = $this->configuration[$layer][$key];
+            if ($this->_installRoot) {
+                if (in_array($this->getGroup($key),
+                      array('File Locations', 'File Locations (Advanced)')) &&
+                      $this->getType($key) == 'directory') {
+                    return $this->_prependPath($test, $this->_installRoot);
+                }
+            }
+            if ($key == 'preferred_mirror') {
+                $reg = &$this->getRegistry();
+                if (is_object($reg)) {
+                    $chan = &$reg->getChannel($channel);
+                    if (!$chan->getMirror($test) && $chan->getName() != $test) {
+                        return $channel; // mirror does not exist
+                    }
+                }
+            }
+            return $test;
         }
         return null;
     }
 
     // }}}
+    // {{{ _getChannelValue(key, value, [layer])
+    /**
+     * Returns a channel-specific configuration value, prioritizing layers as per the
+     * layers property.
+     *
+     * @param string config key
+     *
+     * @return mixed the config value, or NULL if not found
+     *
+     * @access private
+     */
+    function _getChannelValue($key, $layer, $channel)
+    {
+        if ($key == '__channels' || $channel == 'pear.php.net') {
+            return null;
+        }
+        $ret = null;
+        if ($layer === null) {
+            foreach ($this->layers as $ilayer) {
+                if (isset($this->configuration[$ilayer]['__channels'][$channel][$key])) {
+                    $ret = $this->configuration[$ilayer]['__channels'][$channel][$key];
+                    break;
+                }
+            }
+        } elseif (isset($this->configuration[$layer]['__channels'][$channel][$key])) {
+            $ret = $this->configuration[$layer]['__channels'][$channel][$key];
+        }
+        if ($key == 'preferred_mirror') {
+            if ($ret !== null) {
+                $reg = &$this->getRegistry($layer);
+                if (is_object($reg)) {
+                    $chan = &$reg->getChannel($channel);
+                    if (!$chan->getMirror($ret) && $chan->getName() != $ret) {
+                        return $channel; // mirror does not exist
+                    }
+                }
+                return $ret;
+            }
+            if ($channel == $this->getDefaultChannel($layer)) {
+                return $channel; // we must use the channel name as the preferred mirror
+                                 // if the user has not chosen an alternate
+            } else {
+                return $this->getDefaultChannel($layer);
+            }
+        }
+        return $ret;
+    }
+
+
+    // }}}
     // {{{ set(key, value, [layer])
 
     /**
@@ -770,17 +1356,38 @@
      * variable will be validated against its legal values.
      *
      * @param string config key
-     *
      * @param string config value
-     *
      * @param string (optional) config layer
-     *
+     * @param string channel to set this value for, or null for global value
      * @return bool TRUE on success, FALSE on failure
-     *
-     * @access public
      */
-    function set($key, $value, $layer = 'user')
+    function set($key, $value, $layer = 'user', $channel = false)
     {
+        if ($key == '__channels') {
+            return false;
+        }
+        if (!isset($this->configuration[$layer])) {
+            return false;
+        }
+        if ($key == 'default_channel') {
+            // can only set this value globally
+            $channel = 'pear.php.net';
+            if ($value != 'pear.php.net') {
+                $this->_lazyChannelSetup($layer);
+            }
+        }
+        if ($key == 'preferred_mirror') {
+            if ($channel == '__uri') {
+                return false; // can't set the __uri pseudo-channel's mirror
+            }
+            $reg = &$this->getRegistry($layer);
+            if (is_object($reg)) {
+                $chan = &$reg->getChannel($channel ? $channel : 'pear.php.net');
+                if (!$chan->getMirror($value) && $chan->getName() != $value) {
+                    return false; // mirror does not exist
+                }
+            }
+        }
         if (empty($this->configuration_info[$key])) {
             return false;
         }
@@ -804,7 +1411,119 @@
                 break;
             }
         }
+        if (!$channel) {
+            $channel = $this->get('default_channel', null, 'pear.php.net');
+        }
+        if (!in_array($channel, $this->_channels)) {
+            $this->_lazyChannelSetup($layer);
+            $reg = &$this->getRegistry($layer);
+            if ($reg) {
+                $channel = $reg->channelName($channel);
+            }
+            if (!in_array($channel, $this->_channels)) {
+                return false;
+            }
+        }
+        if ($channel != 'pear.php.net') {
+            if (in_array($key, $this->_channelConfigInfo)) {
+                $this->configuration[$layer]['__channels'][$channel][$key] = $value;
+                return true;
+            } else {
+                return false;
+            }
+        } else {
+            if ($key == 'default_channel') {
+                if (!isset($reg)) {
+                    $reg = &$this->getRegistry($layer);
+                    if (!$reg) {
+                        $reg = &$this->getRegistry();
+                    }
+                }
+                if ($reg) {
+                    $value = $reg->channelName($value);
+                }
+                if (!$value) {
+                    return false;
+                }
+            }
+        }
         $this->configuration[$layer][$key] = $value;
+        if ($key == 'php_dir' && !$this->_noRegistry) {
+            if (!isset($this->_registry[$layer]) ||
+                  $value != $this->_registry[$layer]->install_dir) {
+                $this->_registry[$layer] = &new PEAR_Registry($value);
+                $this->_regInitialized[$layer] = false;
+                $this->_registry[$layer]->setConfig($this);
+            }
+        }
+        return true;
+    }
+
+    // }}}
+    function _lazyChannelSetup($uselayer = false)
+    {
+        if ($this->_noRegistry) {
+            return;
+        }
+        $merge = false;
+        foreach ($this->_registry as $layer => $p) {
+            if ($uselayer && $uselayer != $layer) {
+                continue;
+            }
+            if (!$this->_regInitialized[$layer]) {
+                if ($layer == 'default' && isset($this->_registry['user']) ||
+                      isset($this->_registry['system'])) {
+                    // only use the default registry if there are no alternatives
+                    continue;
+                }
+                if (!is_object($this->_registry[$layer])) {
+                    if ($phpdir = $this->get('php_dir', $layer, 'pear.php.net')) {
+                        $this->_registry[$layer] = &new PEAR_Registry($phpdir);
+                        $this->_registry[$layer]->setConfig($this);
+                        $this->_regInitialized[$layer] = false;
+                    } else {
+                        unset($this->_registry[$layer]);
+                        return;
+                    }
+                }
+                $this->setChannels($this->_registry[$layer]->listChannels(), $merge);
+                $this->_regInitialized[$layer] = true;
+                $merge = true;
+            }
+        }
+    }
+    // {{{ setChannels()
+    
+    /**
+     * Set the list of channels.
+     *
+     * This should be set via a call to {@link PEAR_Registry::listChannels()}
+     * @param array
+     * @param bool
+     * @return bool success of operation
+     */
+    function setChannels($channels, $merge = false)
+    {
+        if (!is_array($channels)) {
+            return false;
+        }
+        if ($merge) {
+            $this->_channels = array_merge($this->_channels, $channels);
+        } else {
+            $this->_channels = $channels;
+        }
+        foreach ($channels as $channel) {
+            $channel = strtolower($channel);
+            if ($channel == 'pear.php.net') {
+                continue;
+            }
+            foreach ($this->layers as $layer) {
+                if (!isset($this->configuration[$layer]['__channels'][$channel])
+                      || !is_array($this->configuration[$layer]['__channels'][$channel])) {
+                    $this->configuration[$layer]['__channels'][$channel] = array();
+                }
+            }
+        }
         return true;
     }
 
@@ -963,7 +1682,7 @@
             }
             return array_keys($valid_set);
         }
-        return false;
+        return null;
     }
 
     // }}}
@@ -980,7 +1699,14 @@
     {
         $keys = array();
         foreach ($this->layers as $layer) {
-            $keys = array_merge($keys, $this->configuration[$layer]);
+            $test = $this->configuration[$layer];
+            if (isset($test['__channels'])) {
+                foreach ($test['__channels'] as $channel => $configs) {
+                    $keys = array_merge($keys, $configs);
+                }
+            }
+            unset($test['__channels']);
+            $keys = array_merge($keys, $test);
         }
         return array_keys($keys);
     }
@@ -1001,6 +1727,13 @@
      */
     function remove($key, $layer = 'user')
     {
+        $channel = $this->getDefaultChannel();
+        if ($channel !== 'pear.php.net') {
+            if (isset($this->configuration[$layer]['__channels'][$channel][$key])) {
+                unset($this->configuration[$layer]['__channels'][$channel][$key]);
+                return true;
+            }
+        }
         if (isset($this->configuration[$layer][$key])) {
             unset($this->configuration[$layer][$key]);
             return true;
@@ -1074,15 +1807,31 @@
      * Tells what config layer that gets to define a key.
      *
      * @param string config key
+     * @param boolean return the defining channel
+     *
+     * @return string|array the config layer, or an empty string if not found.
      *
-     * @return string the config layer, or an empty string if not found
+     *         if $returnchannel, the return is an array array('layer' => layername,
+     *         'channel' => channelname), or an empty string if not found
      *
      * @access public
      */
-    function definedBy($key)
+    function definedBy($key, $returnchannel = false)
     {
         foreach ($this->layers as $layer) {
+            $channel = $this->getDefaultChannel();
+            if ($channel !== 'pear.php.net') {
+                if (isset($this->configuration[$layer]['__channels'][$channel][$key])) {
+                    if ($returnchannel) {
+                        return array('layer' => $layer, 'channel' => $channel);
+                    }
+                    return $layer;
+                }
+            }
             if (isset($this->configuration[$layer][$key])) {
+                if ($returnchannel) {
+                    return array('layer' => $layer, 'channel' => 'pear.php.net');
+                }
                 return $layer;
             }
         }
@@ -1164,6 +1913,142 @@
     }
 
     // }}}
+    // {{{ apiVersion()
+    function apiVersion()
+    {
+        return '1.1';
+    }
+    // }}}
+
+    /**
+     * @return PEAR_Registry
+     */
+    function &getRegistry($use = null)
+    {
+        if ($use === null) {
+            $layer = 'user';
+        } else {
+            $layer = $use;
+        }
+        if (isset($this->_registry[$layer])) {
+            return $this->_registry[$layer];
+        } elseif ($use === null && isset($this->_registry['system'])) {
+            return $this->_registry['system'];
+        } elseif ($use === null && isset($this->_registry['default'])) {
+            return $this->_registry['default'];
+        } elseif ($use) {
+            $a = false;
+            return $a;
+        } else {
+            // only go here if null was passed in
+            die("CRITICAL ERROR: Registry could not be initialized from any value");
+        }
+    }
+    /**
+     * This is to allow customization like the use of installroot
+     * @param PEAR_Registry
+     * @return bool
+     */
+    function setRegistry(&$reg, $layer = 'user')
+    {
+        if ($this->_noRegistry) {
+            return false;
+        }
+        if (!in_array($layer, array('user', 'system'))) {
+            return false;
+        }
+        $this->_registry[$layer] = &$reg;
+        if (is_object($reg)) {
+            $this->_registry[$layer]->setConfig($this);
+        }
+        return true;
+    }
+
+    function noRegistry()
+    {
+        $this->_noRegistry = true;
+    }
+
+    /**
+     * @return PEAR_Remote
+     */
+    function &getRemote()
+    {
+        $remote = &new PEAR_Remote($this);
+        return $remote;
+    }
+
+    /**
+     * @return PEAR_REST
+     */
+    function &getREST($version, $options = array())
+    {
+        $version = str_replace('.', '', $version);
+        if (!class_exists($class = 'PEAR_REST_' . $version)) {
+            require_once 'PEAR/REST/' . $version . '.php';
+        }
+        $remote = &new $class($this, $options);
+        return $remote;
+    }
+
+    /**
+     * The ftp server is set in {@link readFTPConfigFile()}.  It exists only if a
+     * remote configuration file has been specified
+     * @return PEAR_FTP|false
+     */
+    function &getFTP()
+    {
+        if (isset($this->_ftp)) {
+            return $this->_ftp;
+        } else {
+            $a = false;
+            return $a;
+        }
+    }
+
+    // {{{ _prependPath($path, $prepend)
+
+    function _prependPath($path, $prepend)
+    {
+        if (strlen($prepend) > 0) {
+            if (OS_WINDOWS && preg_match('/^[a-z]:/i', $path)) {
+                if (preg_match('/^[a-z]:/i', $prepend)) {
+                    $prepend = substr($prepend, 2);
+                } elseif ($prepend{0} != '\\') {
+                    $prepend = "\\$prepend";
+                }
+                $path = substr($path, 0, 2) . $prepend . substr($path, 2);
+            } else {
+                $path = $prepend . $path;
+            }
+        }
+        return $path;
+    }
+    // }}}
+
+    /**
+     * @param string|false installation directory to prepend to all _dir variables, or false to
+     *                     disable
+     */
+    function setInstallRoot($root)
+    {
+        if (substr($root, -1) == DIRECTORY_SEPARATOR) {
+            $root = substr($root, 0, -1);
+        }
+        $old = $this->_installRoot;
+        $this->_installRoot = $root;
+        if (($old != $root) && !$this->_noRegistry) {
+            foreach (array_keys($this->_registry) as $layer) {
+                if ($layer == 'ftp' || !isset($this->_registry[$layer])) {
+                    continue;
+                }
+                $this->_registry[$layer] =
+                    &new PEAR_Registry($this->get('php_dir', $layer, 'pear.php.net'));
+                $this->_registry[$layer]->setConfig($this);
+                $this->_regInitialized[$layer] = false;
+            }
+        }
+    }
 }
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Dependency2.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Dependency2.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Dependency2.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Dependency2.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1202 @@
+<?php
+/**
+ * PEAR_Dependency2, advanced dependency validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Dependency2.php,v 1.50 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Required for the PEAR_VALIDATE_* constants
+ */
+require_once 'PEAR/Validate.php';
+
+/**
+ * Dependency check for PEAR packages
+ *
+ * This class handles both version 1.0 and 2.0 dependencies
+ * WARNING: *any* changes to this class must be duplicated in the
+ * test_PEAR_Dependency2 class found in tests/PEAR_Dependency2/setup.php.inc,
+ * or unit tests will not actually validate the changes
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Dependency2
+{
+    /**
+     * One of the PEAR_VALIDATE_* states
+     * @see PEAR_VALIDATE_NORMAL
+     * @var integer
+     */
+    var $_state;
+    /**
+     * Command-line options to install/upgrade/uninstall commands
+     * @param array
+     */
+    var $_options;
+    /**
+     * @var OS_Guess
+     */
+    var $_os;
+    /**
+     * @var PEAR_Registry
+     */
+    var $_registry;
+    /**
+     * @var PEAR_Config
+     */
+    var $_config;
+    /**
+     * @var PEAR_DependencyDB
+     */
+    var $_dependencydb;
+    /**
+     * Output of PEAR_Registry::parsedPackageName()
+     * @var array
+     */
+    var $_currentPackage;
+    /**
+     * @param PEAR_Config
+     * @param array installation options
+     * @param array format of PEAR_Registry::parsedPackageName()
+     * @param int installation state (one of PEAR_VALIDATE_*)
+     */
+    function PEAR_Dependency2(&$config, $installoptions, $package,
+                              $state = PEAR_VALIDATE_INSTALLING)
+    {
+        $this->_config = &$config;
+        if (!class_exists('PEAR_DependencyDB')) {
+            require_once 'PEAR/DependencyDB.php';
+        }
+        if (isset($installoptions['packagingroot'])) {
+            // make sure depdb is in the right location
+            $config->setInstallRoot($installoptions['packagingroot']);
+        }
+        $this->_registry = &$config->getRegistry();
+        $this->_dependencydb = &PEAR_DependencyDB::singleton($config);
+        if (isset($installoptions['packagingroot'])) {
+            $config->setInstallRoot(false);
+        }
+        $this->_options = $installoptions;
+        $this->_state = $state;
+        if (!class_exists('OS_Guess')) {
+            require_once 'OS/Guess.php';
+        }
+        $this->_os = new OS_Guess;
+        $this->_currentPackage = $package;
+    }
+
+    function _getExtraString($dep)
+    {
+        $extra = ' (';
+        if (isset($dep['uri'])) {
+            return '';
+        }
+        if (isset($dep['recommended'])) {
+            $extra .= 'recommended version ' . $dep['recommended'];
+        } else {
+            if (isset($dep['min'])) {
+                $extra .= 'version >= ' . $dep['min'];
+            }
+            if (isset($dep['max'])) {
+                if ($extra != ' (') {
+                    $extra .= ', ';
+                }
+                $extra .= 'version <= ' . $dep['max'];
+            }
+            if (isset($dep['exclude'])) {
+                if (!is_array($dep['exclude'])) {
+                    $dep['exclude'] = array($dep['exclude']);
+                }
+                if ($extra != ' (') {
+                    $extra .= ', ';
+                }
+                $extra .= 'excluded versions: ';
+                foreach ($dep['exclude'] as $i => $exclude) {
+                    if ($i) {
+                        $extra .= ', ';
+                    }
+                    $extra .= $exclude;
+                }
+            }
+        }
+        $extra .= ')';
+        if ($extra == ' ()') {
+            $extra = '';
+        }
+        return $extra;
+    }
+
+    /**
+     * This makes unit-testing a heck of a lot easier
+     */
+    function getPHP_OS()
+    {
+        return PHP_OS;
+    }
+
+    /**
+     * This makes unit-testing a heck of a lot easier
+     */
+    function getsysname()
+    {
+        return $this->_os->getSysname();
+    }
+
+    /**
+     * Specify a dependency on an OS.  Use arch for detailed os/processor information
+     *
+     * There are two generic OS dependencies that will be the most common, unix and windows.
+     * Other options are linux, freebsd, darwin (OS X), sunos, irix, hpux, aix
+     */
+    function validateOsDependency($dep)
+    {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING &&
+              $this->_state != PEAR_VALIDATE_DOWNLOADING) {
+            return true;
+        }
+        if (isset($dep['conflicts'])) {
+            $not = true;
+        } else {
+            $not = false;
+        }
+        if ($dep['name'] == '*') {
+            return true;
+        }
+        switch (strtolower($dep['name'])) {
+            case 'windows' :
+                if ($not) {
+                    if (strtolower(substr($this->getPHP_OS(), 0, 3)) == 'win') {
+                        if (!isset($this->_options['nodeps']) &&
+                              !isset($this->_options['force'])) {
+                            return $this->raiseError("Cannot install %s on Windows");
+                        } else {
+                            return $this->warning("warning: Cannot install %s on Windows");
+                        }
+                    }
+                } else {
+                    if (strtolower(substr($this->getPHP_OS(), 0, 3)) != 'win') {
+                        if (!isset($this->_options['nodeps']) &&
+                              !isset($this->_options['force'])) {
+                            return $this->raiseError("Can only install %s on Windows");
+                        } else {
+                            return $this->warning("warning: Can only install %s on Windows");
+                        }
+                    }
+                }
+            break;
+            case 'unix' :
+                $unices = array('linux', 'freebsd', 'darwin', 'sunos', 'irix', 'hpux', 'aix');
+                if ($not) {
+                    if (in_array($this->getSysname(), $unices)) {
+                        if (!isset($this->_options['nodeps']) &&
+                              !isset($this->_options['force'])) {
+                            return $this->raiseError("Cannot install %s on any Unix system");
+                        } else {
+                            return $this->warning(
+                                "warning: Cannot install %s on any Unix system");
+                        }
+                    }
+                } else {
+                    if (!in_array($this->getSysname(), $unices)) {
+                        if (!isset($this->_options['nodeps']) &&
+                              !isset($this->_options['force'])) {
+                            return $this->raiseError("Can only install %s on a Unix system");
+                        } else {
+                            return $this->warning(
+                                "warning: Can only install %s on a Unix system");
+                        }
+                    }
+                }
+            break;
+            default :
+                if ($not) {
+                    if (strtolower($dep['name']) == strtolower($this->getSysname())) {
+                        if (!isset($this->_options['nodeps']) &&
+                              !isset($this->_options['force'])) {
+                            return $this->raiseError('Cannot install %s on ' . $dep['name'] .
+                                ' operating system');
+                        } else {
+                            return $this->warning('warning: Cannot install %s on ' .
+                                $dep['name'] . ' operating system');
+                        }
+                    }
+                } else {
+                    if (strtolower($dep['name']) != strtolower($this->getSysname())) {
+                        if (!isset($this->_options['nodeps']) &&
+                              !isset($this->_options['force'])) {
+                            return $this->raiseError('Cannot install %s on ' .
+                                $this->getSysname() .
+                                ' operating system, can only install on ' . $dep['name']);
+                        } else {
+                            return $this->warning('warning: Cannot install %s on ' .
+                                $this->getSysname() .
+                                ' operating system, can only install on ' . $dep['name']);
+                        }
+                    }
+                }
+        }
+        return true;
+    }
+
+    /**
+     * This makes unit-testing a heck of a lot easier
+     */
+    function matchSignature($pattern)
+    {
+        return $this->_os->matchSignature($pattern);
+    }
+
+    /**
+     * Specify a complex dependency on an OS/processor/kernel version,
+     * Use OS for simple operating system dependency.
+     *
+     * This is the only dependency that accepts an eregable pattern.  The pattern
+     * will be matched against the php_uname() output parsed by OS_Guess
+     */
+    function validateArchDependency($dep)
+    {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING) {
+            return true;
+        }
+        if (isset($dep['conflicts'])) {
+            $not = true;
+        } else {
+            $not = false;
+        }
+        if (!$this->matchSignature($dep['pattern'])) {
+            if (!$not) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s Architecture dependency failed, does not ' .
+                        'match "' . $dep['pattern'] . '"');
+                } else {
+                    return $this->warning('warning: %s Architecture dependency failed, does ' .
+                        'not match "' . $dep['pattern'] . '"');
+                }
+            }
+            return true;
+        } else {
+            if ($not) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s Architecture dependency failed, required "' .
+                        $dep['pattern'] . '"');
+                } else {
+                    return $this->warning('warning: %s Architecture dependency failed, ' .
+                        'required "' . $dep['pattern'] . '"');
+                }
+            }
+            return true;
+        }
+    }
+
+    /**
+     * This makes unit-testing a heck of a lot easier
+     */
+    function extension_loaded($name)
+    {
+        return extension_loaded($name);
+    }
+
+    /**
+     * This makes unit-testing a heck of a lot easier
+     */
+    function phpversion($name = null)
+    {
+        if ($name !== null) {
+            return phpversion($name);
+        } else {
+            return phpversion();
+        }
+    }
+
+    function validateExtensionDependency($dep, $required = true)
+    {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING &&
+              $this->_state != PEAR_VALIDATE_DOWNLOADING) {
+            return true;
+        }
+        $loaded = $this->extension_loaded($dep['name']);
+        $extra = $this->_getExtraString($dep);
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+        }
+        if (!isset($dep['min']) && !isset($dep['max']) &&
+              !isset($dep['recommended']) && !isset($dep['exclude'])) {
+            if ($loaded) {
+                if (isset($dep['conflicts'])) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s conflicts with PHP extension "' .
+                            $dep['name'] . '"' . $extra);
+                    } else {
+                        return $this->warning('warning: %s conflicts with PHP extension "' .
+                            $dep['name'] . '"' . $extra);
+                    }
+                }
+                return true;
+            } else {
+                if (isset($dep['conflicts'])) {
+                    return true;
+                }
+                if ($required) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s requires PHP extension "' .
+                            $dep['name'] . '"' . $extra);
+                    } else {
+                        return $this->warning('warning: %s requires PHP extension "' .
+                            $dep['name'] . '"' . $extra);
+                    }
+                } else {
+                    return $this->warning('%s can optionally use PHP extension "' .
+                        $dep['name'] . '"' . $extra);
+                }
+            }
+        }
+        if (!$loaded) {
+            if (isset($dep['conflicts'])) {
+                return true;
+            }
+            if (!$required) {
+                return $this->warning('%s can optionally use PHP extension "' .
+                    $dep['name'] . '"' . $extra);
+            } else {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
+                        '"' . $extra);
+                }
+                    return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
+                        '"' . $extra);
+            }
+        }
+        $version = (string) $this->phpversion($dep['name']);
+        if (empty($version)) {
+            $version = '0';
+        }
+        $fail = false;
+        if (isset($dep['min'])) {
+            if (!version_compare($version, $dep['min'], '>=')) {
+                $fail = true;
+            }
+        }
+        if (isset($dep['max'])) {
+            if (!version_compare($version, $dep['max'], '<=')) {
+                $fail = true;
+            }
+        }
+        if ($fail && !isset($dep['conflicts'])) {
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
+                    '"' . $extra . ', installed version is ' . $version);
+            } else {
+                return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
+                    '"' . $extra . ', installed version is ' . $version);
+            }
+        } elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail && isset($dep['conflicts'])) {
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s conflicts with PHP extension "' .
+                    $dep['name'] . '"' . $extra . ', installed version is ' . $version);
+            } else {
+                return $this->warning('warning: %s conflicts with PHP extension "' .
+                    $dep['name'] . '"' . $extra . ', installed version is ' . $version);
+            }
+        }
+        if (isset($dep['exclude'])) {
+            foreach ($dep['exclude'] as $exclude) {
+                if (version_compare($version, $exclude, '==')) {
+                    if (isset($dep['conflicts'])) {
+                        continue;
+                    }
+                    if (!isset($this->_options['nodeps']) &&
+                          !isset($this->_options['force'])) {
+                        return $this->raiseError('%s is not compatible with PHP extension "' .
+                            $dep['name'] . '" version ' .
+                            $exclude);
+                    } else {
+                        return $this->warning('warning: %s is not compatible with PHP extension "' .
+                            $dep['name'] . '" version ' .
+                            $exclude);
+                    }
+                } elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s conflicts with PHP extension "' .
+                            $dep['name'] . '"' . $extra . ', installed version is ' . $version);
+                    } else {
+                        return $this->warning('warning: %s conflicts with PHP extension "' .
+                            $dep['name'] . '"' . $extra . ', installed version is ' . $version);
+                    }
+                }
+            }
+        }
+        if (isset($dep['recommended'])) {
+            if (version_compare($version, $dep['recommended'], '==')) {
+                return true;
+            } else {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
+                        ' version "' . $version . '"' .
+                        ' is not the recommended version "' . $dep['recommended'] .
+                        '", but may be compatible, use --force to install');
+                } else {
+                    return $this->warning('warning: %s dependency: PHP extension ' .
+                        $dep['name'] . ' version "' . $version . '"' .
+                        ' is not the recommended version "' . $dep['recommended'].'"');
+                }
+            }
+        }
+        return true;
+    }
+
+    function validatePhpDependency($dep)
+    {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING &&
+              $this->_state != PEAR_VALIDATE_DOWNLOADING) {
+            return true;
+        }
+        $version = $this->phpversion();
+        $extra = $this->_getExtraString($dep);
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+        }
+        if (isset($dep['min'])) {
+            if (!version_compare($version, $dep['min'], '>=')) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires PHP' .
+                        $extra . ', installed version is ' . $version);
+                } else {
+                    return $this->warning('warning: %s requires PHP' .
+                        $extra . ', installed version is ' . $version);
+                }
+            }
+        }
+        if (isset($dep['max'])) {
+            if (!version_compare($version, $dep['max'], '<=')) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires PHP' .
+                        $extra . ', installed version is ' . $version);
+                } else {
+                    return $this->warning('warning: %s requires PHP' .
+                        $extra . ', installed version is ' . $version);
+                }
+            }
+        }
+        if (isset($dep['exclude'])) {
+            foreach ($dep['exclude'] as $exclude) {
+                if (version_compare($version, $exclude, '==')) {
+                    if (!isset($this->_options['nodeps']) &&
+                          !isset($this->_options['force'])) {
+                        return $this->raiseError('%s is not compatible with PHP version ' .
+                            $exclude);
+                    } else {
+                        return $this->warning(
+                            'warning: %s is not compatible with PHP version ' .
+                            $exclude);
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This makes unit-testing a heck of a lot easier
+     */
+    function getPEARVersion()
+    {
+        return '1.4.6';
+    }
+
+    function validatePearinstallerDependency($dep)
+    {
+        $pearversion = $this->getPEARVersion();
+        $extra = $this->_getExtraString($dep);
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+        }
+        if (version_compare($pearversion, $dep['min'], '<')) {
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s requires PEAR Installer' . $extra .
+                    ', installed version is ' . $pearversion);
+            } else {
+                return $this->warning('warning: %s requires PEAR Installer' . $extra .
+                    ', installed version is ' . $pearversion);
+            }
+        }
+        if (isset($dep['max'])) {
+            if (version_compare($pearversion, $dep['max'], '>')) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires PEAR Installer' . $extra .
+                        ', installed version is ' . $pearversion);
+                } else {
+                    return $this->warning('warning: %s requires PEAR Installer' . $extra .
+                        ', installed version is ' . $pearversion);
+                }
+            }
+        }
+        if (isset($dep['exclude'])) {
+            if (!isset($dep['exclude'][0])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+            foreach ($dep['exclude'] as $exclude) {
+                if (version_compare($exclude, $pearversion, '==')) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s is not compatible with PEAR Installer ' .
+                            'version ' . $exclude);
+                    } else {
+                        return $this->warning('warning: %s is not compatible with PEAR ' .
+                            'Installer version ' . $exclude);
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    function validateSubpackageDependency($dep, $required, $params)
+    {
+        return $this->validatePackageDependency($dep, $required, $params);
+    }
+
+    /**
+     * @param array dependency information (2.0 format)
+     * @param boolean whether this is a required dependency
+     * @param array a list of downloaded packages to be installed, if any
+     * @param boolean if true, then deps on pear.php.net that fail will also check
+     *                against pecl.php.net packages to accomodate extensions that have
+     *                moved to pecl.php.net from pear.php.net
+     */
+    function validatePackageDependency($dep, $required, $params, $depv1 = false)
+    {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING &&
+              $this->_state != PEAR_VALIDATE_DOWNLOADING) {
+            return true;
+        }
+        if (isset($dep['providesextension'])) {
+            if ($this->extension_loaded($dep['providesextension'])) {
+                $save = $dep;
+                $subdep = $dep;
+                $subdep['name'] = $subdep['providesextension'];
+                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                $ret = $this->validateExtensionDependency($subdep, $required);
+                PEAR::popErrorHandling();
+                if (!PEAR::isError($ret)) {
+                    return true;
+                }
+            }
+        }
+        if ($this->_state == PEAR_VALIDATE_INSTALLING) {
+            return $this->_validatePackageInstall($dep, $required, $depv1);
+        }
+        if ($this->_state == PEAR_VALIDATE_DOWNLOADING) {
+            return $this->_validatePackageDownload($dep, $required, $params, $depv1);
+        }
+    }
+
+    function _validatePackageDownload($dep, $required, $params, $depv1 = false)
+    {
+        $dep['package'] = $dep['name'];
+        if (isset($dep['uri'])) {
+            $dep['channel'] = '__uri';
+        }
+        $depname = $this->_registry->parsedPackageNameToString($dep, true);
+        $found = false;
+        foreach ($params as $param) {
+            if ($param->isEqual(
+                  array('package' => $dep['name'],
+                        'channel' => $dep['channel']))) {
+                $found = true;
+                break;
+            }
+            if ($depv1 && $dep['channel'] == 'pear.php.net') {
+                if ($param->isEqual(
+                  array('package' => $dep['name'],
+                        'channel' => 'pecl.php.net'))) {
+                    $found = true;
+                    break;
+                }
+            }
+        }
+        if (!$found && isset($dep['providesextension'])) {
+            foreach ($params as $param) {
+                if ($param->isExtension($dep['providesextension'])) {
+                    $found = true;
+                    break;
+                }
+            }
+        }
+        if ($found) {
+            $version = $param->getVersion();
+            $installed = false;
+            $downloaded = true;
+        } else {
+            if ($this->_registry->packageExists($dep['name'], $dep['channel'])) {
+                $installed = true;
+                $downloaded = false;
+                $version = $this->_registry->packageinfo($dep['name'], 'version',
+                    $dep['channel']);
+            } else {
+                if ($dep['channel'] == 'pecl.php.net' && $this->_registry->packageExists($dep['name'],
+                      'pear.php.net')) {
+                    $installed = true;
+                    $downloaded = false;
+                    $version = $this->_registry->packageinfo($dep['name'], 'version',
+                        'pear.php.net');
+                } else {
+                    $version = 'not installed or downloaded';
+                    $installed = false;
+                    $downloaded = false;
+                }
+            }
+        }
+        $extra = $this->_getExtraString($dep);
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+        }
+        if (!isset($dep['min']) && !isset($dep['max']) &&
+              !isset($dep['recommended']) && !isset($dep['exclude'])) {
+            if ($installed || $downloaded) {
+                $installed = $installed ? 'installed' : 'downloaded';
+                if (isset($dep['conflicts'])) {
+                    if ($version) {
+                        $rest = ", $installed version is " . $version;
+                    } else {
+                        $rest = '';
+                    }
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s conflicts with package "' . $depname . '"' .
+                            $extra . $rest);
+                    } else {
+                        return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                            $extra . $rest);
+                    }
+                }
+                return true;
+            } else {
+                if (isset($dep['conflicts'])) {
+                    return true;
+                }
+                if ($required) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s requires package "' . $depname . '"' .
+                            $extra);
+                    } else {
+                        return $this->warning('warning: %s requires package "' . $depname . '"' .
+                            $extra);
+                    }
+                } else {
+                    return $this->warning('%s can optionally use package "' . $depname . '"' .
+                        $extra);
+                }
+            }
+        }
+        if (!$installed && !$downloaded) {
+            if (isset($dep['conflicts'])) {
+                return true;
+            }
+            if ($required) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires package "' . $depname . '"' .
+                        $extra);
+                } else {
+                    return $this->warning('warning: %s requires package "' . $depname . '"' .
+                        $extra);
+                }
+            } else {
+                return $this->warning('%s can optionally use package "' . $depname . '"' .
+                    $extra);
+            }
+        }
+        $fail = false;
+        if (isset($dep['min'])) {
+            if (version_compare($version, $dep['min'], '<')) {
+                $fail = true;
+            }
+        }
+        if (isset($dep['max'])) {
+            if (version_compare($version, $dep['max'], '>')) {
+                $fail = true;
+            }
+        }
+        if ($fail && !isset($dep['conflicts'])) {
+            $installed = $installed ? 'installed' : 'downloaded';
+            $dep['package'] = $dep['name'];
+            $dep = $this->_registry->parsedPackageNameToString($dep, true);
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s requires package "' . $depname . '"' .
+                    $extra . ", $installed version is " . $version);
+            } else {
+                return $this->warning('warning: %s requires package "' . $depname . '"' .
+                    $extra . ", $installed version is " . $version);
+            }
+        } elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail &&
+              isset($dep['conflicts']) && !isset($dep['exclude'])) {
+            $installed = $installed ? 'installed' : 'downloaded';
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra .
+                    ", $installed version is " . $version);
+            } else {
+                return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                    $extra . ", $installed version is " . $version);
+            }
+        }
+        if (isset($dep['exclude'])) {
+            $installed = $installed ? 'installed' : 'downloaded';
+            foreach ($dep['exclude'] as $exclude) {
+                if (version_compare($version, $exclude, '==') && !isset($dep['conflicts'])) {
+                    if (!isset($this->_options['nodeps']) &&
+                          !isset($this->_options['force'])) {
+                        return $this->raiseError('%s is not compatible with ' .
+                            $installed . ' package "' .
+                            $depname . '" version ' .
+                            $exclude);
+                    } else {
+                        return $this->warning('warning: %s is not compatible with ' .
+                            $installed . ' package "' .
+                            $depname . '" version ' .
+                            $exclude);
+                    }
+                } elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
+                    $installed = $installed ? 'installed' : 'downloaded';
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                        return $this->raiseError('%s conflicts with package "' . $depname . '"' .
+                            $extra . ", $installed version is " . $version);
+                    } else {
+                        return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                            $extra . ", $installed version is " . $version);
+                    }
+                }
+            }
+        }
+        if (isset($dep['recommended'])) {
+            $installed = $installed ? 'installed' : 'downloaded';
+            if (version_compare($version, $dep['recommended'], '==')) {
+                return true;
+            } else {
+                if (!$found && $installed) {
+                    $param = $this->_registry->getPackage($dep['name'], $dep['channel']);
+                }
+                if ($param) {
+                    $found = false;
+                    foreach ($params as $parent) {
+                        if ($parent->isEqual($this->_currentPackage)) {
+                            $found = true;
+                            break;
+                        }
+                    }
+                    if ($found) {
+                        if ($param->isCompatible($parent)) {
+                            return true;
+                        }
+                    } else { // this is for validPackage() calls
+                        $parent = $this->_registry->getPackage($this->_currentPackage['package'],
+                            $this->_currentPackage['channel']);
+                        if ($parent !== null) {
+                            if ($param->isCompatible($parent)) {
+                                return true;
+                            }
+                        }
+                    }
+                }
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
+                      !isset($this->_options['loose'])) {
+                    return $this->raiseError('%s dependency package "' . $depname .
+                        '" ' . $installed . ' version ' . $version . 
+                        ' is not the recommended version ' . $dep['recommended'] .
+                        ', but may be compatible, use --force to install');
+                } else {
+                    return $this->warning('warning: %s dependency package "' . $depname .
+                        '" ' . $installed . ' version ' . $version .
+                        ' is not the recommended version ' . $dep['recommended']);
+                }
+            }
+        }
+        return true;
+    }
+
+    function _validatePackageInstall($dep, $required, $depv1 = false)
+    {
+        return $this->_validatePackageDownload($dep, $required, array(), $depv1);
+    }
+
+    /**
+     * Verify that uninstalling packages passed in to command line is OK.
+     *
+     * @param PEAR_Installer $dl
+     * @return PEAR_Error|true
+     */
+    function validatePackageUninstall(&$dl)
+    {
+        if (PEAR::isError($this->_dependencydb)) {
+            return $this->_dependencydb;
+        }
+        $params = array();
+        // construct an array of "downloaded" packages to fool the package dependency checker
+        // into using these to validate uninstalls of circular dependencies
+        $downloaded = &$dl->getUninstallPackages();
+        foreach ($downloaded as $i => $pf) {
+            if (!class_exists('PEAR_Downloader_Package')) {
+                require_once 'PEAR/Downloader/Package.php';
+            }
+            $dp = &new PEAR_Downloader_Package($dl);
+            $dp->setPackageFile($downloaded[$i]);
+            $params[$i] = &$dp;
+        }
+        $deps = $this->_dependencydb->getDependentPackageDependencies($this->_currentPackage);
+        $fail = false;
+        if ($deps) {
+            foreach ($deps as $channel => $info) {
+                foreach ($info as $package => $ds) {
+                    foreach ($ds as $d) {
+                        $d['dep']['package'] = $d['dep']['name'];
+                        $checker = &new PEAR_Dependency2($this->_config, $this->_options,
+                            array('channel' => $channel, 'package' => $package), $this->_state);
+                        $dep = $d['dep'];
+                        $required = $d['type'] == 'required';
+                        $ret = $checker->_validatePackageUninstall($dep, $required, $params, $dl);
+                        if (is_array($ret)) {
+                            $dl->log(0, $ret[0]);
+                        } elseif (PEAR::isError($ret)) {
+                            $dl->log(0, $ret->getMessage());
+                            $fail = true;
+                        }
+                    }
+                }
+            }
+        }
+        if ($fail) {
+            if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
+                return $this->warning(
+                    'warning: %s should not be uninstalled, other installed packages depend ' .
+                    'on this package');
+            } else {
+                return $this->raiseError(
+                    '%s cannot be uninstalled, other installed packages depend on this package');
+            }
+        }
+        return true;
+    }
+
+    function _validatePackageUninstall($dep, $required, $params, &$dl)
+    {
+        $dep['package'] = $dep['name'];
+        $depname = $this->_registry->parsedPackageNameToString($dep, true);
+        $found = false;
+        foreach ($params as $param) {
+            if ($param->isEqual($this->_currentPackage)) {
+                $found = true;
+                break;
+            }
+        }
+        $version = $this->_registry->packageinfo($dep['name'], 'version',
+            $dep['channel']);
+        if (!$version) {
+            return true;
+        }
+        $extra = $this->_getExtraString($dep);
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+        }
+        if (isset($dep['conflicts'])) {
+            return true; // uninstall OK - these packages conflict (probably installed with --force)
+        }
+        if (!isset($dep['min']) && !isset($dep['max'])) {
+            if ($required) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s' . $extra . ' is required by installed package "' .
+                        $depname . '"');
+                } else {
+                    return $this->warning('warning: %s' . $extra .
+                        ' is required by installed package "' . $depname . '"');
+                }
+            } else {
+                return $this->warning('%s' . $extra .
+                    ' can be optionally used by installed package "' . $depname . '"');
+            }
+        }
+        $fail = false;
+        if (isset($dep['min'])) {
+            if (version_compare($version, $dep['min'], '>=')) {
+                $fail = true;
+            }
+        }
+        if (isset($dep['max'])) {
+            if (version_compare($version, $dep['max'], '<=')) {
+                $fail = true;
+            }
+        }
+        if ($fail) {
+            if ($found) {
+                if (!isset($dl->___checked[$this->_currentPackage['channel']]
+                      [$this->_currentPackage['package']])) {
+                    $dl->___checked[$this->_currentPackage['channel']]
+                      [$this->_currentPackage['package']] = true;
+                    $deps = $this->_dependencydb->getDependentPackageDependencies(
+                        $this->_currentPackage);
+                    if ($deps) {
+                        foreach ($deps as $channel => $info) {
+                            foreach ($info as $package => $ds) {
+                                foreach ($ds as $d) {
+                                    $d['dep']['package'] = $d['dep']['name'];
+                                    $checker = &new PEAR_Dependency2($this->_config, $this->_options,
+                                        array('channel' => $channel, 'package' => $package),
+                                        $this->_state);
+                                    $dep = $d['dep'];
+                                    $required = $d['type'] == 'required';
+                                    $ret = $checker->_validatePackageUninstall($dep, $required, $params,
+                                        $dl);
+                                    if (PEAR::isError($ret)) {
+                                        $fail = true;
+                                        break 3;
+                                    }
+                                }
+                            }
+                            $fail = false;
+                        }
+                    }
+                } else {
+                    return true;
+                }
+            }
+            if (!$fail) {
+                return true;
+            }
+            if ($required) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError($depname . $extra . ' is required by installed package' .
+                        ' "%s"');
+                } else {
+                    return $this->warning('warning: ' . $depname . $extra .
+                        ' is required by installed package "%s"');
+                }
+            } else {
+                return $this->warning($depname . $extra . ' can be optionally used by installed package' .
+                        ' "%s"');
+            }
+        }
+        return true;
+    }
+
+    /**
+     * validate a downloaded package against installed packages
+     * 
+     * As of PEAR 1.4.3, this will only validate
+     *
+     * @param array|PEAR_Downloader_Package|PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     *              $pkg package identifier (either
+     *                   array('package' => blah, 'channel' => blah) or an array with
+     *                   index 'info' referencing an object)
+     * @param PEAR_Downloader $dl
+     * @param array $params full list of packages to install
+     * @return true|PEAR_Error
+     */
+    function validatePackage($pkg, &$dl, $params = array())
+    {
+        if (is_array($pkg) && isset($pkg['info'])) {
+            $deps = $this->_dependencydb->getDependentPackageDependencies($pkg['info']);
+        } else {
+            $deps = $this->_dependencydb->getDependentPackageDependencies($pkg);
+        }
+        $fail = false;
+        if ($deps) {
+            if (!class_exists('PEAR_Downloader_Package')) {
+                require_once 'PEAR/Downloader/Package.php';
+            }
+            $dp = &new PEAR_Downloader_Package($dl);
+            if (is_object($pkg)) {
+                $dp->setPackageFile($pkg);
+            } else {
+                $dp->setDownloadURL($pkg);
+            }
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            foreach ($deps as $channel => $info) {
+                foreach ($info as $package => $ds) {
+                    foreach ($params as $packd) {
+                        if (strtolower($packd->getPackage()) == strtolower($package) &&
+                              $packd->getChannel() == $channel) {
+                            $dl->log(3, 'skipping installed package check of "' .
+                                        $this->_registry->parsedPackageNameToString(
+                                            array('channel' => $channel, 'package' => $package),
+                                            true) .
+                                        '", version "' . $packd->getVersion() . '" will be ' .
+                                        'downloaded and installed');
+                            continue 2; // jump to next package
+                        }
+                    }
+                    foreach ($ds as $d) {
+                        $checker = &new PEAR_Dependency2($this->_config, $this->_options,
+                            array('channel' => $channel, 'package' => $package), $this->_state);
+                        $dep = $d['dep'];
+                        $required = $d['type'] == 'required';
+                        $ret = $checker->_validatePackageDownload($dep, $required, array(&$dp));
+                        if (is_array($ret)) {
+                            $dl->log(0, $ret[0]);
+                        } elseif (PEAR::isError($ret)) {
+                            $dl->log(0, $ret->getMessage());
+                            $fail = true;
+                        }
+                    }
+                }
+            }
+            PEAR::popErrorHandling();
+        }
+        if ($fail) {
+            return $this->raiseError(
+                '%s cannot be installed, conflicts with installed packages');
+        }
+        return true;
+    }
+
+    /**
+     * validate a package.xml 1.0 dependency
+     */
+    function validateDependency1($dep, $params = array())
+    {
+        if (!isset($dep['optional'])) {
+            $dep['optional'] = 'no';
+        }
+        list($newdep, $type) = $this->normalizeDep($dep);
+        if (!$newdep) {
+            return $this->raiseError("Invalid Dependency");
+        }
+        if (method_exists($this, "validate{$type}Dependency")) {
+            return $this->{"validate{$type}Dependency"}($newdep, $dep['optional'] == 'no',
+                $params, true);
+        }
+    }
+
+    /**
+     * Convert a 1.0 dep into a 2.0 dep
+     */
+    function normalizeDep($dep)
+    {
+        $types = array(
+            'pkg' => 'Package',
+            'ext' => 'Extension',
+            'os' => 'Os',
+            'php' => 'Php'
+        );
+        if (isset($types[$dep['type']])) {
+            $type = $types[$dep['type']];
+        } else {
+            return array(false, false);
+        }
+        $newdep = array();
+        switch ($type) {
+            case 'Package' :
+                $newdep['channel'] = 'pear.php.net';
+            case 'Extension' :
+            case 'Os' :
+                $newdep['name'] = $dep['name'];
+            break;
+        }
+        $dep['rel'] = PEAR_Dependency2::signOperator($dep['rel']);
+        switch ($dep['rel']) {
+            case 'has' :
+                return array($newdep, $type);
+            break;
+            case 'not' :
+                $newdep['conflicts'] = true;
+            break;
+            case '>=' :
+            case '>' :
+                $newdep['min'] = $dep['version'];
+                if ($dep['rel'] == '>') {
+                    $newdep['exclude'] = $dep['version'];
+                }
+            break;
+            case '<=' :
+            case '<' :
+                $newdep['max'] = $dep['version'];
+                if ($dep['rel'] == '<') {
+                    $newdep['exclude'] = $dep['version'];
+                }
+            break;
+            case 'ne' :
+            case '!=' :
+                $newdep['min'] = '0';
+                $newdep['max'] = '100000';
+                $newdep['exclude'] = $dep['version'];
+            break;
+            case '==' :
+                $newdep['min'] = $dep['version'];
+                $newdep['max'] = $dep['version'];
+            break;
+        }
+        if ($type == 'Php') {
+            if (!isset($newdep['min'])) {
+                $newdep['min'] = '4.2.0';
+            }
+            if (!isset($newdep['max'])) {
+                $newdep['max'] = '6.0.0';
+            }
+        }
+        return array($newdep, $type);
+    }
+
+    /**
+     * Converts text comparing operators to them sign equivalents
+     *
+     * Example: 'ge' to '>='
+     *
+     * @access public
+     * @param  string Operator
+     * @return string Sign equivalent
+     */
+    function signOperator($operator)
+    {
+        switch($operator) {
+            case 'lt': return '<';
+            case 'le': return '<=';
+            case 'gt': return '>';
+            case 'ge': return '>=';
+            case 'eq': return '==';
+            case 'ne': return '!=';
+            default:
+                return $operator;
+        }
+    }
+
+    function raiseError($msg)
+    {
+        if (isset($this->_options['ignore-errors'])) {
+            return $this->warning($msg);
+        }
+        return PEAR::raiseError(sprintf($msg, $this->_registry->parsedPackageNameToString(
+            $this->_currentPackage, true)));
+    }
+
+    function warning($msg)
+    {
+        return array(sprintf($msg, $this->_registry->parsedPackageNameToString(
+            $this->_currentPackage, true)));
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/DependencyDB.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/DependencyDB.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/DependencyDB.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/DependencyDB.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,655 @@
+<?php
+/**
+ * PEAR_DependencyDB, advanced installed packages dependency database
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: DependencyDB.php,v 1.30 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Needed for error handling
+ */
+require_once 'PEAR.php';
+require_once 'PEAR/Config.php';
+
+/**
+ * Track dependency relationships between installed packages
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Tomas V.V.Cox <cox@idec.net.com>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_DependencyDB
+{
+    // {{{ properties
+
+    /**
+     * This is initialized by {@link setConfig()}
+     * @var PEAR_Config
+     * @access private
+     */
+    var $_config;
+    /**
+     * This is initialized by {@link setConfig()}
+     * @var PEAR_Registry
+     * @access private
+     */
+    var $_registry;
+    /**
+     * Filename of the dependency DB (usually .depdb)
+     * @var string
+     * @access private
+     */
+    var $_depdb = false;
+    /**
+     * File name of the lockfile (usually .depdblock)
+     * @var string
+     * @access private
+     */
+    var $_lockfile = false;
+    /**
+     * Open file resource for locking the lockfile
+     * @var resource|false
+     * @access private
+     */
+    var $_lockFp = false;
+    /**
+     * API version of this class, used to validate a file on-disk
+     * @var string
+     * @access private
+     */
+    var $_version = '1.0';
+    /**
+     * Cached dependency database file
+     * @var array|null
+     * @access private
+     */
+    var $_cache;
+
+    // }}}
+    // {{{ & singleton()
+
+    /**
+     * Get a raw dependency database.  Calls setConfig() and assertDepsDB()
+     * @param PEAR_Config
+     * @param string|false full path to the dependency database, or false to use default
+     * @return PEAR_DependencyDB|PEAR_Error
+     * @static
+     */
+    function &singleton(&$config, $depdb = false)
+    {
+        if (!isset($GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
+              [$config->get('php_dir', null, 'pear.php.net')])) {
+            $a = new PEAR_DependencyDB;
+            $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
+              [$config->get('php_dir', null, 'pear.php.net')] = &$a;
+            $a->setConfig($config, $depdb);
+            if (PEAR::isError($e = $a->assertDepsDB())) {
+                return $e;
+            }
+        }
+        return $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
+              [$config->get('php_dir', null, 'pear.php.net')];
+    }
+
+    /**
+     * Set up the registry/location of dependency DB
+     * @param PEAR_Config|false
+     * @param string|false full path to the dependency database, or false to use default
+     */
+    function setConfig(&$config, $depdb = false)
+    {
+        if (!$config) {
+            $this->_config = &PEAR_Config::singleton();
+        } else {
+            $this->_config = &$config;
+        }
+        $this->_registry = &$this->_config->getRegistry();
+        if (!$depdb) {
+            $this->_depdb = $this->_config->get('php_dir', null, 'pear.php.net') .
+                DIRECTORY_SEPARATOR . '.depdb';
+        } else {
+            $this->_depdb = $depdb;
+        }
+        $this->_lockfile = dirname($this->_depdb) . DIRECTORY_SEPARATOR . '.depdblock';
+    }
+    // }}}
+
+    function hasWriteAccess()
+    {
+        if (!@file_exists($this->_depdb)) {
+            $dir = $this->_depdb;
+            while ($dir && $dir != '.') {
+                $dir = dirname($dir); // cd ..
+                if ($dir != '.' && @file_exists($dir)) {
+                    if (@is_writeable($dir)) {
+                        return true;
+                    } else {
+                        return false;
+                    }
+                }
+            }
+            return false;
+        }
+        return @is_writeable($this->_depdb);
+    }
+
+    // {{{ assertDepsDB()
+
+    /**
+     * Create the dependency database, if it doesn't exist.  Error if the database is
+     * newer than the code reading it.
+     * @return void|PEAR_Error
+     */
+    function assertDepsDB()
+    {
+        if (!is_file($this->_depdb)) {
+            $this->rebuildDB();
+        } else {
+            $depdb = $this->_getDepDB();
+            // Datatype format has been changed, rebuild the Deps DB
+            if ($depdb['_version'] < $this->_version) {
+                $this->rebuildDB();
+            }
+            if ($depdb['_version']{0} > $this->_version{0}) {
+                return PEAR::raiseError('Dependency database is version ' .
+                    $depdb['_version'] . ', and we are version ' .
+                    $this->_version . ', cannot continue');
+            }
+        }
+    }
+
+    /**
+     * Get a list of installed packages that depend on this package
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array
+     * @return array|false
+     */
+    function getDependentPackages(&$pkg)
+    {
+        $data = $this->_getDepDB();
+        if (is_object($pkg)) {
+            $channel = strtolower($pkg->getChannel());
+            $package = strtolower($pkg->getPackage());
+        } else {
+            $channel = strtolower($pkg['channel']);
+            $package = strtolower($pkg['package']);
+        }
+        if (isset($data['packages'][$channel][$package])) {
+            return $data['packages'][$channel][$package];
+        }
+        return false;
+    }
+
+    /**
+     * Get a list of the actual dependencies of installed packages that depend on
+     * a package.
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array
+     * @return array|false
+     */
+    function getDependentPackageDependencies(&$pkg)
+    {
+        $data = $this->_getDepDB();
+        if (is_object($pkg)) {
+            $channel = strtolower($pkg->getChannel());
+            $package = strtolower($pkg->getPackage());
+        } else {
+            $channel = strtolower($pkg['channel']);
+            $package = strtolower($pkg['package']);
+        }
+        $depend = $this->getDependentPackages($pkg);
+        if (!$depend) {
+            return false;
+        }
+        $dependencies = array();
+        foreach ($depend as $info) {
+            $temp = $this->getDependencies($info);
+            foreach ($temp as $dep) {
+                if (strtolower($dep['dep']['channel']) == strtolower($channel) &&
+                      strtolower($dep['dep']['name']) == strtolower($package)) {
+                    $dependencies[$info['channel']][$info['package']][] = $dep;
+                }
+            }
+        }
+        return $dependencies;
+    }
+
+    /**
+     * Get a list of dependencies of this installed package
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array
+     * @return array|false
+     */
+    function getDependencies(&$pkg)
+    {
+        if (is_object($pkg)) {
+            $channel = strtolower($pkg->getChannel());
+            $package = strtolower($pkg->getPackage());
+        } else {
+            $channel = strtolower($pkg['channel']);
+            $package = strtolower($pkg['package']);
+        }
+        $data = $this->_getDepDB();
+        if (isset($data['dependencies'][$channel][$package])) {
+            return $data['dependencies'][$channel][$package];
+        }
+        return false;
+    }
+
+    /**
+     * Determine whether $parent depends on $child, near or deep
+     * @param array|PEAR_PackageFile_v2|PEAR_PackageFile_v2
+     * @param array|PEAR_PackageFile_v2|PEAR_PackageFile_v2
+     */
+    function dependsOn($parent, $child)
+    {
+        $c = array();
+        $this->_getDepDB();
+        return $this->_dependsOn($parent, $child, $c);
+    }
+    
+    function _dependsOn($parent, $child, &$checked)
+    {
+        if (is_object($parent)) {
+            $channel = strtolower($parent->getChannel());
+            $package = strtolower($parent->getPackage());
+        } else {
+            $channel = strtolower($parent['channel']);
+            $package = strtolower($parent['package']);
+        }
+        if (is_object($child)) {
+            $depchannel = strtolower($child->getChannel());
+            $deppackage = strtolower($child->getPackage());
+        } else {
+            $depchannel = strtolower($child['channel']);
+            $deppackage = strtolower($child['package']);
+        }
+        if (isset($checked[$channel][$package][$depchannel][$deppackage])) {
+            return false; // avoid endless recursion
+        }
+        $checked[$channel][$package][$depchannel][$deppackage] = true;
+        if (!isset($this->_cache['dependencies'][$channel][$package])) {
+            return false;
+        }
+        foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
+            if (strtolower($info['dep']['channel']) == strtolower($depchannel) &&
+                  strtolower($info['dep']['name']) == strtolower($deppackage)) {
+                return true;
+            }
+        }
+        foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
+            if ($this->_dependsOn(array(
+                    'channel' => $info['dep']['channel'],
+                    'package' => $info['dep']['name']), $child, $checked)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Register dependencies of a package that is being installed or upgraded
+     * @param PEAR_PackageFile_v2|PEAR_PackageFile_v2
+     */
+    function installPackage(&$package)
+    {
+        $data = $this->_getDepDB();
+        unset($this->_cache);
+        $this->_setPackageDeps($data, $package);
+        $this->_writeDepDB($data);
+    }
+
+    /**
+     * Remove dependencies of a package that is being uninstalled, or upgraded.
+     *
+     * Upgraded packages first uninstall, then install
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array If an array, then it must have
+     *        indices 'channel' and 'package'
+     */
+    function uninstallPackage(&$pkg)
+    {
+        $data = $this->_getDepDB();
+        unset($this->_cache);
+        if (is_object($pkg)) {
+            $channel = strtolower($pkg->getChannel());
+            $package = strtolower($pkg->getPackage());
+        } else {
+            $channel = strtolower($pkg['channel']);
+            $package = strtolower($pkg['package']);
+        }
+        if (!isset($data['dependencies'][$channel][$package])) {
+            return true;
+        }
+        foreach ($data['dependencies'][$channel][$package] as $dep) {
+            $found = false;
+            if (isset($dep['dep']['uri'])) {
+                $depchannel = '__uri';
+            } else {
+                $depchannel = strtolower($dep['dep']['channel']);
+            }
+            if (isset($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {
+                foreach ($data['packages'][$depchannel][strtolower($dep['dep']['name'])] as
+                      $i => $info) {
+                    if ($info['channel'] == $channel &&
+                          $info['package'] == $package) {
+                        $found = true;
+                        break;
+                    }
+                }
+            }
+            if ($found) {
+                unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])][$i]);
+                if (!count($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {
+                    unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])]);
+                    if (!count($data['packages'][$depchannel])) {
+                        unset($data['packages'][$depchannel]);
+                    }
+                } else {
+                    $data['packages'][$depchannel][strtolower($dep['dep']['name'])] =
+                        array_values(
+                            $data['packages'][$depchannel][strtolower($dep['dep']['name'])]);
+                }
+            }
+        }
+        unset($data['dependencies'][$channel][$package]);
+        if (!count($data['dependencies'][$channel])) {
+            unset($data['dependencies'][$channel]);
+        }
+        if (!count($data['dependencies'])) {
+            unset($data['dependencies']);
+        }
+        if (!count($data['packages'])) {
+            unset($data['packages']);
+        }
+        $this->_writeDepDB($data);
+    }
+
+    /**
+     * Rebuild the dependency DB by reading registry entries.
+     * @return true|PEAR_Error
+     */
+    function rebuildDB()
+    {
+        $depdb = array('_version' => $this->_version);
+        if (!$this->hasWriteAccess()) {
+            // allow startup for read-only with older Registry
+            return $depdb;
+        }
+        $packages = $this->_registry->listAllPackages();
+        foreach ($packages as $channel => $ps) {
+            foreach ($ps as $package) {
+                $package = $this->_registry->getPackage($package, $channel);
+                $this->_setPackageDeps($depdb, $package);
+            }
+        }
+        $error = $this->_writeDepDB($depdb);
+        if (PEAR::isError($error)) {
+            return $error;
+        }
+        $this->_cache = $depdb;
+        return true;
+    }
+
+    /**
+     * Register usage of the dependency DB to prevent race conditions
+     * @param int one of the LOCK_* constants
+     * @return true|PEAR_Error
+     * @access private
+     */
+    function _lock($mode = LOCK_EX)
+    {
+        if (!eregi('Windows 9', php_uname())) {
+            if ($mode != LOCK_UN && is_resource($this->_lockFp)) {
+                // XXX does not check type of lock (LOCK_SH/LOCK_EX)
+                return true;
+            }
+            $open_mode = 'w';
+            // XXX People reported problems with LOCK_SH and 'w'
+            if ($mode === LOCK_SH) {
+                if (@!is_file($this->_lockfile)) {
+                    touch($this->_lockfile);
+                }
+                $open_mode = 'r';
+            }
+
+            if (!is_resource($this->_lockFp)) {
+                $this->_lockFp = @fopen($this->_lockfile, $open_mode);
+            }
+            if (!is_resource($this->_lockFp)) {
+                return PEAR::raiseError("could not create Dependency lock file" .
+                                         (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+            }
+            if (!(int)flock($this->_lockFp, $mode)) {
+                switch ($mode) {
+                    case LOCK_SH: $str = 'shared';    break;
+                    case LOCK_EX: $str = 'exclusive'; break;
+                    case LOCK_UN: $str = 'unlock';    break;
+                    default:      $str = 'unknown';   break;
+                }
+                return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Release usage of dependency DB
+     * @return true|PEAR_Error
+     * @access private
+     */
+    function _unlock()
+    {
+        $ret = $this->_lock(LOCK_UN);
+        if (is_resource($this->_lockFp)) {
+            fclose($this->_lockFp);
+        }
+        $this->_lockFp = null;
+        return $ret;
+    }
+
+    /**
+     * Load the dependency database from disk, or return the cache
+     * @return array|PEAR_Error
+     */
+    function _getDepDB()
+    {
+        if (!$this->hasWriteAccess()) {
+            return array('_version' => $this->_version);
+        }
+        if (isset($this->_cache)) {
+            return $this->_cache;
+        }
+        if (!$fp = fopen($this->_depdb, 'r')) {
+            $err = PEAR::raiseError("Could not open dependencies file `".$this->_depdb."'");
+            return $err;
+        }
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $data = unserialize(file_get_contents($this->_depdb));
+        } else {
+            $data = unserialize(fread($fp, filesize($this->_depdb)));
+            fclose($fp);
+        }
+        set_magic_quotes_runtime($rt);
+        $this->_cache = $data;
+        return $data;
+    }
+
+    /**
+     * Write out the dependency database to disk
+     * @param array the database
+     * @return true|PEAR_Error
+     * @access private
+     */
+    function _writeDepDB(&$deps)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        if (!$fp = fopen($this->_depdb, 'wb')) {
+            $this->_unlock();
+            return PEAR::raiseError("Could not open dependencies file `".$this->_depdb."' for writing");
+        }
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        fwrite($fp, serialize($deps));
+        set_magic_quotes_runtime($rt);
+        fclose($fp);
+        $this->_unlock();
+        $this->_cache = $deps;
+        return true;
+    }
+
+    /**
+     * Register all dependencies from a package in the dependencies database, in essence
+     * "installing" the package's dependency information
+     * @param array the database
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @access private
+     */
+    function _setPackageDeps(&$data, &$pkg)
+    {
+        $pkg->setConfig($this->_config);
+        if ($pkg->getPackagexmlVersion() == '1.0') {
+            $gen = &$pkg->getDefaultGenerator();
+            $deps = $gen->dependenciesToV2();
+        } else {
+            $deps = $pkg->getDeps(true);
+        }
+        if (!$deps) {
+            return;
+        }
+        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())]
+            = array();
+        if (isset($deps['required']['package'])) {
+            if (!isset($deps['required']['package'][0])) {
+                $deps['required']['package'] = array($deps['required']['package']);
+            }
+            foreach ($deps['required']['package'] as $dep) {
+                $this->_registerDep($data, $pkg, $dep, 'required');
+            }
+        }
+        if (isset($deps['optional']['package'])) {
+            if (!isset($deps['optional']['package'][0])) {
+                $deps['optional']['package'] = array($deps['optional']['package']);
+            }
+            foreach ($deps['optional']['package'] as $dep) {
+                $this->_registerDep($data, $pkg, $dep, 'optional');
+            }
+        }
+        if (isset($deps['required']['subpackage'])) {
+            if (!isset($deps['required']['subpackage'][0])) {
+                $deps['required']['subpackage'] = array($deps['required']['subpackage']);
+            }
+            foreach ($deps['required']['subpackage'] as $dep) {
+                $this->_registerDep($data, $pkg, $dep, 'required');
+            }
+        }
+        if (isset($deps['optional']['subpackage'])) {
+            if (!isset($deps['optional']['subpackage'][0])) {
+                $deps['optional']['subpackage'] = array($deps['optional']['subpackage']);
+            }
+            foreach ($deps['optional']['subpackage'] as $dep) {
+                $this->_registerDep($data, $pkg, $dep, 'optional');
+            }
+        }
+        if (isset($deps['group'])) {
+            if (!isset($deps['group'][0])) {
+                $deps['group'] = array($deps['group']);
+            }
+            foreach ($deps['group'] as $group) {
+                if (isset($group['package'])) {
+                    if (!isset($group['package'][0])) {
+                        $group['package'] = array($group['package']);
+                    }
+                    foreach ($group['package'] as $dep) {
+                        $this->_registerDep($data, $pkg, $dep, 'optional',
+                            $group['attribs']['name']);
+                    }
+                }
+                if (isset($group['subpackage'])) {
+                    if (!isset($group['subpackage'][0])) {
+                        $group['subpackage'] = array($group['subpackage']);
+                    }
+                    foreach ($group['subpackage'] as $dep) {
+                        $this->_registerDep($data, $pkg, $dep, 'optional',
+                            $group['attribs']['name']);
+                    }
+                }
+            }
+        }
+        if ($data['dependencies'][strtolower($pkg->getChannel())]
+              [strtolower($pkg->getPackage())] == array()) {
+            unset($data['dependencies'][strtolower($pkg->getChannel())]
+              [strtolower($pkg->getPackage())]);
+            if (!count($data['dependencies'][strtolower($pkg->getChannel())])) {
+                unset($data['dependencies'][strtolower($pkg->getChannel())]);
+            }
+        }
+    }
+
+    /**
+     * @param array the database
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param array the specific dependency
+     * @param required|optional whether this is a required or an optional dep
+     * @param string|false dependency group this dependency is from, or false for ordinary dep
+     */
+    function _registerDep(&$data, &$pkg, $dep, $type, $group = false)
+    {
+        $info = array(
+            'dep' => $dep,
+            'type' => $type,
+            'group' => $group);
+
+        if (isset($dep['channel'])) {
+            $depchannel = $dep['channel'];
+        } else {
+            $depchannel = '__uri';
+        }
+        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())][]
+            = $info;
+        if (isset($data['packages'][strtolower($depchannel)][strtolower($dep['name'])])) {
+            $found = false;
+            foreach ($data['packages'][strtolower($depchannel)][strtolower($dep['name'])]
+                  as $i => $p) {
+                if ($p['channel'] == strtolower($pkg->getChannel()) &&
+                      $p['package'] == strtolower($pkg->getPackage())) {
+                    $found = true;
+                    break;
+                }
+            }
+            if (!$found) {
+                $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]
+                    = array('channel' => strtolower($pkg->getChannel()),
+                            'package' => strtolower($pkg->getPackage()));
+            }
+        } else {
+            $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]
+                = array('channel' => strtolower($pkg->getChannel()),
+                        'package' => strtolower($pkg->getPackage()));
+        }
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Dependency.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Dependency.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Dependency.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Dependency.php	2006-08-08 02:39:06.000000000 -0500
@@ -17,9 +17,11 @@
 // |          Stig Bakken <ssb@php.net>                                   |
 // +----------------------------------------------------------------------+
 //
-// $Id: Dependency.php,v 1.36 2004/01/08 17:33:12 sniper Exp $
+// THIS FILE IS DEPRECATED IN FAVOR OF DEPENDENCY2.PHP, AND IS NOT USED IN THE INSTALLER
+// $Id: Dependency.php,v 1.41 2006/01/06 04:47:36 cellog Exp $
 
 require_once "PEAR.php";
+require_once "OS/Guess.php";
 
 define('PEAR_DEPENDENCY_MISSING',        -1);
 define('PEAR_DEPENDENCY_CONFLICT',       -2);
@@ -82,12 +84,13 @@
         $rel = isset($opts['rel']) ? $opts['rel'] : 'has';
         $req = isset($opts['version']) ? $opts['version'] : null;
         $name = isset($opts['name']) ? $opts['name'] : null;
+        $channel = isset($opts['channel']) ? $opts['channel'] : 'pear.php.net';
         $opt = (isset($opts['optional']) && $opts['optional'] == 'yes') ?
             $opts['optional'] : null;
         $errmsg = '';
         switch ($opts['type']) {
             case 'pkg':
-                return $this->checkPackage($errmsg, $name, $req, $rel, $opt);
+                return $this->checkPackage($errmsg, $name, $req, $rel, $opt, $channel);
                 break;
             case 'ext':
                 return $this->checkExtension($errmsg, $name, $req, $rel, $opt);
@@ -123,29 +126,30 @@
      * @param string $req       The package version required
      * @param string $relation  How to compare versions with each other
      * @param bool   $opt       Whether the relationship is optional
+     * @param string $channel   Channel name
      *
      * @return mixed bool false if no error or the error string
      */
     function checkPackage(&$errmsg, $name, $req = null, $relation = 'has',
-                          $opt = false)
+                          $opt = false, $channel = 'pear.php.net')
     {
         if (is_string($req) && substr($req, 0, 2) == 'v.') {
             $req = substr($req, 2);
         }
         switch ($relation) {
             case 'has':
-                if (!$this->registry->packageExists($name)) {
+                if (!$this->registry->packageExists($name, $channel)) {
                     if ($opt) {
-                        $errmsg = "package `$name' is recommended to utilize some features.";
+                        $errmsg = "package `$channel/$name' is recommended to utilize some features.";
                         return PEAR_DEPENDENCY_MISSING_OPTIONAL;
                     }
-                    $errmsg = "requires package `$name'";
+                    $errmsg = "requires package `$channel/$name'";
                     return PEAR_DEPENDENCY_MISSING;
                 }
                 return false;
             case 'not':
-                if ($this->registry->packageExists($name)) {
-                    $errmsg = "conflicts with package `$name'";
+                if ($this->registry->packageExists($name, $channel)) {
+                    $errmsg = "conflicts with package `$channel/$name'";
                     return PEAR_DEPENDENCY_CONFLICT;
                 }
                 return false;
@@ -155,26 +159,26 @@
             case 'ne':
             case 'ge':
             case 'gt':
-                $version = $this->registry->packageInfo($name, 'version');
-                if (!$this->registry->packageExists($name)
+                $version = $this->registry->packageInfo($name, 'version', $channel);
+                if (!$this->registry->packageExists($name, $channel)
                     || !version_compare("$version", "$req", $relation))
                 {
                     $code = $this->codeFromRelation($relation, $version, $req, $opt);
                     if ($opt) {
-                        $errmsg = "package `$name' version " . $this->signOperator($relation) .
+                        $errmsg = "package `$channel/$name' version " . $this->signOperator($relation) .
                             " $req is recommended to utilize some features.";
                         if ($version) {
                             $errmsg .= "  Installed version is $version";
                         }
                         return $code;
                     }
-                    $errmsg = "requires package `$name' " .
+                    $errmsg = "requires package `$channel/$name' " .
                         $this->signOperator($relation) . " $req";
                     return $code;
                 }
                 return false;
         }
-        $errmsg = "relation '$relation' with requirement '$req' is not supported (name=$name)";
+        $errmsg = "relation '$relation' with requirement '$req' is not supported (name=$channel/$name)";
         return PEAR_DEPENDENCY_BAD_DEPENDENCY;
     }
 
@@ -187,30 +191,36 @@
      * @param string $error     The resultant error string
      * @param string $warning   The resultant warning string
      * @param string $name      Name of the package to test
+     * @param string $channel   Channel name of the package
      *
      * @return bool true if there were errors
      */
-    function checkPackageUninstall(&$error, &$warning, $package)
+    function checkPackageUninstall(&$error, &$warning, $package, $channel = 'pear.php.net')
     {
+        $channel = strtolower($channel);
         $error = null;
-        $packages = $this->registry->listPackages();
-        foreach ($packages as $pkg) {
-            if ($pkg == $package) {
-                continue;
-            }
-            $deps = $this->registry->packageInfo($pkg, 'release_deps');
-            if (empty($deps)) {
-                continue;
-            }
-            foreach ($deps as $dep) {
-                if ($dep['type'] == 'pkg' && strcasecmp($dep['name'], $package) == 0) {
-                    if ($dep['rel'] == 'ne') {
-                        continue;
-                    }
-                    if (isset($dep['optional']) && $dep['optional'] == 'yes') {
-                        $warning .= "\nWarning: Package '$pkg' optionally depends on '$package'";
-                    } else {
-                        $error .= "Package '$pkg' depends on '$package'\n";
+        $channels = $this->registry->listAllPackages();
+        foreach ($channels as $channelname => $packages) {
+            foreach ($packages as $pkg) {
+                if ($pkg == $package && $channel == $channelname) {
+                    continue;
+                }
+                $deps = $this->registry->packageInfo($pkg, 'release_deps', $channel);
+                if (empty($deps)) {
+                    continue;
+                }
+                foreach ($deps as $dep) {
+                    $depchannel = isset($dep['channel']) ? $dep['channel'] : 'pear.php.net';
+                    if ($dep['type'] == 'pkg' && (strcasecmp($dep['name'], $package) == 0) &&
+                          ($depchannel == $channel)) {
+                        if ($dep['rel'] == 'ne') {
+                            continue;
+                        }
+                        if (isset($dep['optional']) && $dep['optional'] == 'yes') {
+                            $warning .= "\nWarning: Package '$depchannel/$pkg' optionally depends on '$channel:/package'";
+                        } else {
+                            $error .= "Package '$depchannel/$pkg' depends on '$channel/$package'\n";
+                        }
                     }
                 }
             }
@@ -293,7 +303,6 @@
         // comma separated values or something similar to PEAR_OS
         static $myos;
         if (empty($myos)) {
-            include_once "OS/Guess.php";
             $myos = new OS_Guess();
         }
         // only 'has' relation is currently supported
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Downloader/Package.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Downloader/Package.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Downloader/Package.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Downloader/Package.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1691 @@
+<?php
+/**
+ * PEAR_Downloader_Package
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Package.php,v 1.90 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * Coordinates download parameters and manages their dependencies
+ * prior to downloading them.
+ *
+ * Input can come from three sources:
+ *
+ * - local files (archives or package.xml)
+ * - remote files (downloadable urls)
+ * - abstract package names
+ *
+ * The first two elements are handled cleanly by PEAR_PackageFile, but the third requires
+ * accessing pearweb's xml-rpc interface to determine necessary dependencies, and the
+ * format returned of dependencies is slightly different from that used in package.xml.
+ *
+ * This class hides the differences between these elements, and makes automatic
+ * dependency resolution a piece of cake.  It also manages conflicts when
+ * two classes depend on incompatible dependencies, or differing versions of the same
+ * package dependency.  In addition, download will not be attempted if the php version is
+ * not supported, PEAR installer version is not supported, or non-PECL extensions are not
+ * installed.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Downloader_Package
+{
+    /**
+     * @var PEAR_Downloader
+     */
+    var $_downloader;
+    /**
+     * @var PEAR_Config
+     */
+    var $_config;
+    /**
+     * @var PEAR_Registry
+     */
+    var $_registry;
+    /**
+     * Used to implement packagingroot properly
+     * @var PEAR_Registry
+     */
+    var $_installRegistry;
+    /**
+     * @var PEAR_PackageFile_v1|PEAR_PackageFile|v2
+     */
+    var $_packagefile;
+    /**
+     * @var array
+     */
+    var $_parsedname;
+    /**
+     * @var array
+     */
+    var $_downloadURL;
+    /**
+     * @var array
+     */
+    var $_downloadDeps = array();
+    /**
+     * @var boolean
+     */
+    var $_valid = false;
+    /**
+     * @var boolean
+     */
+    var $_analyzed = false;
+    /**
+     * if this or a parent package was invoked with Package-state, this is set to the
+     * state variable.
+     *
+     * This allows temporary reassignment of preferred_state for a parent package and all of
+     * its dependencies.
+     * @var string|false
+     */
+    var $_explicitState = false;
+    /**
+     * If this package is invoked with Package#group, this variable will be true
+     */
+    var $_explicitGroup = false;
+    /**
+     * Package type local|url|xmlrpc
+     * @var string
+     */
+    var $_type;
+    /**
+     * Contents of package.xml, if downloaded from a remote channel
+     * @var string|false
+     * @access private
+     */
+    var $_rawpackagefile;
+    /**
+     * @var boolean
+     * @access private
+     */
+    var $_validated = false;
+
+    /**
+     * @param PEAR_Downloader
+     */
+    function PEAR_Downloader_Package(&$downloader)
+    {
+        $this->_downloader = &$downloader;
+        $this->_config = &$this->_downloader->config;
+        $this->_registry = &$this->_config->getRegistry();
+        $options = $downloader->getOptions();
+        if (isset($options['packagingroot'])) {
+            $this->_config->setInstallRoot($options['packagingroot']);
+            $this->_installRegistry = &$this->_config->getRegistry();
+            $this->_config->setInstallRoot(false);
+        } else {
+            $this->_installRegistry = &$this->_registry;
+        }
+        $this->_valid = $this->_analyzed = false;
+    }
+
+    /**
+     * Parse the input and determine whether this is a local file, a remote uri, or an
+     * abstract package name.
+     *
+     * This is the heart of the PEAR_Downloader_Package(), and is used in
+     * {@link PEAR_Downloader::download()}
+     * @param string
+     * @return void|PEAR_Error
+     */
+    function initialize($param)
+    {
+        $origErr = $this->_fromFile($param);
+        if (!$this->_valid) {
+            $options = $this->_downloader->getOptions();
+            if (isset($options['offline'])) {
+                if (PEAR::isError($origErr)) {
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(0, $origErr->getMessage());
+                    }
+                }
+                return PEAR::raiseError('Cannot download non-local package "' . $param . '"');
+            }
+            $err = $this->_fromUrl($param);
+            if (PEAR::isError($err) || !$this->_valid) {
+                if ($this->_type == 'url') {
+                    if (PEAR::isError($err)) {
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(0, $err->getMessage());
+                        }
+                    }
+                    return PEAR::raiseError("Invalid or missing remote package file");
+                }
+                $err = $this->_fromString($param);
+                if (PEAR::isError($err) || !$this->_valid) {
+                    if (isset($this->_type) && $this->_type == 'local' &&
+                          PEAR::isError($origErr)) {
+                        if (is_array($origErr->getUserInfo())) {
+                            foreach ($origErr->getUserInfo() as $err) {
+                                if (is_array($err)) {
+                                    $err = $err['message'];
+                                }
+                                if (!isset($options['soft'])) {
+                                    $this->_downloader->log(0, $err);
+                                }
+                            }
+                        }
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(0, $origErr->getMessage());
+                        }
+                        if (is_array($param)) {
+                            $param = $this->_registry->parsedPackageNameToString($param,
+                                true);
+                        }
+                        return PEAR::raiseError(
+                            "Cannot initialize '$param', invalid or missing package file");
+                    }
+                    if (PEAR::isError($err)) {
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(0, $err->getMessage());
+                        }
+                    }
+                    if (is_array($param)) {
+                        $param = $this->_registry->parsedPackageNameToString($param, true);
+                    }
+                    return PEAR::raiseError(
+                        "Cannot initialize '$param', invalid or missing package file");
+                }
+            }
+        }
+    }
+
+    /**
+     * Retrieve any non-local packages
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|PEAR_Error
+     */
+    function &download()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile;
+        }
+        if (isset($this->_downloadURL['url'])) {
+            $this->_isvalid = false;
+            $info = $this->getParsedPackage();
+            foreach ($info as $i => $p) {
+                $info[$i] = strtolower($p);
+            }
+            $err = $this->_fromUrl($this->_downloadURL['url'],
+                $this->_registry->parsedPackageNameToString($this->_parsedname, true));
+            $newinfo = $this->getParsedPackage();
+            foreach ($newinfo as $i => $p) {
+                $newinfo[$i] = strtolower($p);
+            }
+            if ($info != $newinfo) {
+                do {
+                    if ($info['package'] == 'pecl.php.net' && $newinfo['package'] == 'pear.php.net') {
+                        $info['package'] = 'pear.php.net';
+                        if ($info == $newinfo) {
+                            // skip the channel check if a pecl package says it's a PEAR package
+                            break;
+                        }
+                    }
+                    return PEAR::raiseError('CRITICAL ERROR: We are ' .
+                        $this->_registry->parsedPackageNameToString($info) . ', but the file ' .
+                        'downloaded claims to be ' .
+                        $this->_registry->parsedPackageNameToString($this->getParsedPackage()));
+                } while (false);
+            }
+            if (PEAR::isError($err) || !$this->_valid) {
+                return $err;
+            }
+        }
+        $this->_type = 'local';
+        return $this->_packagefile;
+    }
+
+    function &getPackageFile()
+    {
+        return $this->_packagefile;
+    }
+
+    function &getDownloader()
+    {
+        return $this->_downloader;
+    }
+
+    function getType() 
+    {
+        return $this->_type;
+    }
+
+    /**
+     * Like {@link initialize()}, but operates on a dependency
+     */
+    function fromDepURL($dep)
+    {
+        $this->_downloadURL = $dep;
+        if (isset($dep['uri'])) {
+            $options = $this->_downloader->getOptions();
+            if (!extension_loaded("zlib") || isset($options['nocompress'])) {
+                $ext = '.tar';
+            } else {
+                $ext = '.tgz';
+            }
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $err = $this->_fromUrl($dep['uri'] . $ext);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($err)) {
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(0, $err->getMessage());
+                }
+                return PEAR::raiseError('Invalid uri dependency "' . $dep['uri'] . $ext . '", ' .
+                    'cannot download');
+            }
+        } else {
+            $this->_parsedname =
+                array(
+                    'package' => $dep['info']->getPackage(),
+                    'channel' => $dep['info']->getChannel(),
+                    'version' => $dep['version']
+                );
+            if (!isset($dep['nodefault'])) {
+                $this->_parsedname['group'] = 'default'; // download the default dependency group
+                $this->_explicitGroup = false;
+            }
+            $this->_rawpackagefile = $dep['raw'];
+        }
+    }
+
+    function detectDependencies($params)
+    {
+        $options = $this->_downloader->getOptions();
+        if (isset($options['downloadonly'])) {
+            return;
+        }
+        if (isset($options['offline'])) {
+            $this->_downloader->log(3, 'Skipping dependency download check, --offline specified');
+            return;
+        }
+        $pname = $this->getParsedPackage();
+        if (!$pname) {
+            return;
+        }
+        $deps = $this->getDeps();
+        if (!$deps) {
+            return;
+        }
+        if (isset($deps['required'])) { // package.xml 2.0
+            return $this->_detect2($deps, $pname, $options, $params);
+        } else {
+            return $this->_detect1($deps, $pname, $options, $params);
+        }
+    }
+
+    function setValidated()
+    {
+        $this->_validated = true;
+    }
+
+    function alreadyValidated()
+    {
+        return $this->_validated;
+    }
+
+    /**
+     * Remove packages to be downloaded that are already installed
+     * @param array of PEAR_Downloader_Package objects
+     * @static
+     */
+    function removeInstalled(&$params)
+    {
+        if (!isset($params[0])) {
+            return;
+        }
+        $options = $params[0]->_downloader->getOptions();
+        if (!isset($options['downloadonly'])) {
+            foreach ($params as $i => $param) {
+                // remove self if already installed with this version
+                // this does not need any pecl magic - we only remove exact matches
+                if ($param->_installRegistry->packageExists($param->getPackage(), $param->getChannel())) {
+                    if (version_compare($param->_installRegistry->packageInfo($param->getPackage(), 'version',
+                          $param->getChannel()), $param->getVersion(), '==')) {
+                        if (!isset($options['force'])) {
+                            $info = $param->getParsedPackage();
+                            unset($info['version']);
+                            unset($info['state']);
+                            if (!isset($options['soft'])) {
+                                $param->_downloader->log(1, 'Skipping package "' .
+                                    $param->getShortName() .
+                                    '", already installed as version ' .
+                                    $param->_installRegistry->packageInfo($param->getPackage(),
+                                        'version', $param->getChannel()));
+                            }
+                            $params[$i] = false;
+                        }
+                    } elseif (!isset($options['force']) && !isset($options['upgrade']) &&
+                          !isset($options['soft'])) {
+                        $info = $param->getParsedPackage();
+                        $param->_downloader->log(1, 'Skipping package "' .
+                            $param->getShortName() .
+                            '", already installed as version ' .
+                            $param->_installRegistry->packageInfo($param->getPackage(), 'version',
+                                $param->getChannel()));
+                        $params[$i] = false;
+                    }
+                }
+            }
+        }
+        PEAR_Downloader_Package::removeDuplicates($params);
+    }
+
+    function _detect2($deps, $pname, $options, $params)
+    {
+        $this->_downloadDeps = array();
+        $groupnotfound = false;
+        foreach (array('package', 'subpackage') as $packagetype) {
+            // get required dependency group
+            if (isset($deps['required'][$packagetype])) {
+                if (isset($deps['required'][$packagetype][0])) {
+                    foreach ($deps['required'][$packagetype] as $dep) {
+                        if (isset($dep['conflicts'])) {
+                            // skip any package that this package conflicts with
+                            continue;
+                        }
+                        $ret = $this->_detect2Dep($dep, $pname, 'required', $params);
+                        if (is_array($ret)) {
+                            $this->_downloadDeps[] = $ret;
+                        }
+                    }
+                } else {
+                    $dep = $deps['required'][$packagetype];
+                    if (!isset($dep['conflicts'])) {
+                        // skip any package that this package conflicts with
+                        $ret = $this->_detect2Dep($dep, $pname, 'required', $params);
+                        if (is_array($ret)) {
+                            $this->_downloadDeps[] = $ret;
+                        }
+                    }
+                }
+            }
+            // get optional dependency group, if any
+            if (isset($deps['optional'][$packagetype])) {
+                $skipnames = array();
+                if (!isset($deps['optional'][$packagetype][0])) {
+                    $deps['optional'][$packagetype] = array($deps['optional'][$packagetype]);
+                }
+                foreach ($deps['optional'][$packagetype] as $dep) {
+                    $skip = false;
+                    if (!isset($options['alldeps'])) {
+                        $dep['package'] = $dep['name'];
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(3, 'Notice: package "' .
+                              $this->_registry->parsedPackageNameToString($this->getParsedPackage(),
+                                    true) . '" optional dependency "' .
+                                $this->_registry->parsedPackageNameToString(array('package' =>
+                                    $dep['name'], 'channel' => 'pear.php.net'), true) .
+                                '" will not be automatically downloaded');
+                        }
+                        $skipnames[] = $this->_registry->parsedPackageNameToString($dep, true);
+                        $skip = true;
+                        unset($dep['package']);
+                    }
+                    if (!($ret = $this->_detect2Dep($dep, $pname, 'optional', $params))) {
+                        $dep['package'] = $dep['name'];
+                        if (@$skipnames[count($skipnames) - 1] ==
+                              $this->_registry->parsedPackageNameToString($dep, true)) {
+                            array_pop($skipnames);
+                        }
+                    }
+                    if (!$skip && is_array($ret)) {
+                        $this->_downloadDeps[] = $ret;
+                    }
+                }
+                if (count($skipnames)) {
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(1, 'Did not download optional dependencies: ' .
+                            implode(', ', $skipnames) .
+                            ', use --alldeps to download automatically');
+                    }
+                }
+            }
+            // get requested dependency group, if any
+            $groupname = $this->getGroup();
+            $explicit = $this->_explicitGroup;
+            if (!$groupname) {
+                if ($this->canDefault()) {
+                    $groupname = 'default'; // try the default dependency group
+                } else {
+                    continue;
+                }
+            }
+            if ($groupnotfound) {
+                continue;
+            }
+            if (isset($deps['group'])) {
+                if (isset($deps['group']['attribs'])) {
+                    if (strtolower($deps['group']['attribs']['name']) == strtolower($groupname)) {
+                        $group = $deps['group'];
+                    } elseif ($explicit) {
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(0, 'Warning: package "' .
+                                $this->_registry->parsedPackageNameToString($pname, true) .
+                                '" has no dependency ' . 'group named "' . $groupname . '"');
+                        }
+                        $groupnotfound = true;
+                        continue;
+                    }
+                } else {
+                    $found = false;
+                    foreach ($deps['group'] as $group) {
+                        if (strtolower($group['attribs']['name']) == strtolower($groupname)) {
+                            $found = true;
+                            break;
+                        }
+                    }
+                    if (!$found) {
+                        if ($explicit) {
+                            if (!isset($options['soft'])) {
+                                $this->_downloader->log(0, 'Warning: package "' .
+                                    $this->_registry->parsedPackageNameToString($pname, true) .
+                                    '" has no dependency ' . 'group named "' . $groupname . '"');
+                            }
+                        }
+                        $groupnotfound = true;
+                        continue;
+                    }
+                }
+            }
+            if (isset($group)) {
+                if (isset($group[$packagetype])) {
+                    if (isset($group[$packagetype][0])) {
+                        foreach ($group[$packagetype] as $dep) {
+                            $ret = $this->_detect2Dep($dep, $pname, 'dependency group "' .
+                                $group['attribs']['name'] . '"', $params);
+                            if (is_array($ret)) {
+                                $this->_downloadDeps[] = $ret;
+                            }
+                        }
+                    } else {
+                        $ret = $this->_detect2Dep($group[$packagetype], $pname,
+                            'dependency group "' .
+                            $group['attribs']['name'] . '"', $params);
+                        if (is_array($ret)) {
+                            $this->_downloadDeps[] = $ret;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    function _detect2Dep($dep, $pname, $group, $params)
+    {
+        if (isset($dep['conflicts'])) {
+            return true;
+        }
+        $options = $this->_downloader->getOptions();
+        if (isset($dep['uri'])) {
+            return array('uri' => $dep['uri'], 'dep' => $dep);;
+        }
+        $testdep = $dep;
+        $testdep['package'] = $dep['name'];
+        if (PEAR_Downloader_Package::willDownload($testdep, $params)) {
+            $dep['package'] = $dep['name'];
+            if (!isset($options['soft'])) {
+                $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group .
+                    ' dependency "' .
+                    $this->_registry->parsedPackageNameToString($dep, true) .
+                    '", will be installed');
+            }
+            return false;
+        }
+        $options = $this->_downloader->getOptions();
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        if ($this->_explicitState) {
+            $pname['state'] = $this->_explicitState;
+        }
+        $url =
+            $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
+        if (PEAR::isError($url)) {
+            PEAR::popErrorHandling();
+            return $url;
+        }
+        $dep['package'] = $dep['name'];
+        $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params, $group == 'optional' &&
+            !isset($options['alldeps']));
+        PEAR::popErrorHandling();
+        if (PEAR::isError($ret)) {
+            if (!isset($options['soft'])) {
+                $this->_downloader->log(0, $ret->getMessage());
+            }
+            return false;
+        } else {
+            // check to see if a dep is already installed and is the same or newer
+            if (!isset($dep['min']) && !isset($dep['max']) && !isset($dep['recommended'])) {
+                $oper = 'has';
+            } else {
+                $oper = 'gt';
+            }
+            // do not try to move this before getDepPackageDownloadURL
+            // we can't determine whether upgrade is necessary until we know what
+            // version would be downloaded
+            if (!isset($options['force']) && $this->isInstalled($ret, $oper)) {
+                $version = $this->_installRegistry->packageInfo($dep['name'], 'version',
+                    $dep['channel']);
+                $dep['package'] = $dep['name'];
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
+                        ' dependency "' .
+                    $this->_registry->parsedPackageNameToString($dep, true) .
+                        '" version ' . $url['version'] . ', already installed as version ' .
+                        $version);
+                }
+                return false;
+            }
+        }
+        if (isset($dep['nodefault'])) {
+            $ret['nodefault'] = true;
+        }
+        return $ret;
+    }
+
+    function _detect1($deps, $pname, $options, $params)
+    {
+        $this->_downloadDeps = array();
+        $skipnames = array();
+        foreach ($deps as $dep) {
+            $nodownload = false;
+            if ($dep['type'] == 'pkg') {
+                $dep['channel'] = 'pear.php.net';
+                $dep['package'] = $dep['name'];
+                switch ($dep['rel']) {
+                    case 'not' :
+                        continue 2;
+                    case 'ge' :
+                    case 'eq' :
+                    case 'gt' :
+                    case 'has' :
+                        $group = (!isset($dep['optional']) || $dep['optional'] == 'no') ?
+                            'required' :
+                            'optional';
+                        if (PEAR_Downloader_Package::willDownload($dep, $params)) {
+                            $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group
+                                . ' dependency "' .
+                                $this->_registry->parsedPackageNameToString($dep, true) .
+                                '", will be installed');
+                            continue 2;
+                        }
+                        $fakedp = new PEAR_PackageFile_v1;
+                        $fakedp->setPackage($dep['name']);
+                        // skip internet check if we are not upgrading (bug #5810)
+                        if (!isset($options['upgrade']) && $this->isInstalled(
+                              $fakedp, $dep['rel'])) {
+                            $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group
+                                . ' dependency "' .
+                                $this->_registry->parsedPackageNameToString($dep, true) .
+                                '", is already installed');
+                            continue 2;
+                        }
+                }
+                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                if ($this->_explicitState) {
+                    $pname['state'] = $this->_explicitState;
+                }
+                $url =
+                    $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
+                $chan = 'pear.php.net';
+                if (PEAR::isError($url)) {
+                    // check to see if this is a pecl package that has jumped
+                    // from pear.php.net to pecl.php.net channel
+                    if (!class_exists('PEAR_Dependency2')) {
+                        require_once 'PEAR/Dependency2.php';
+                    }
+                    $newdep = PEAR_Dependency2::normalizeDep($dep);
+                    $newdep = $newdep[0];
+                    $newdep['channel'] = 'pecl.php.net';
+                    $chan = 'pecl.php.net';
+                    $url =
+                        $this->_downloader->_getDepPackageDownloadUrl($newdep, $pname);
+                    $obj = &$this->_installRegistry->getPackage($dep['name']);
+                    if (PEAR::isError($url)) {
+                        PEAR::popErrorHandling();
+                        if ($obj !== null && $this->isInstalled($obj, $dep['rel'])) {
+                            $group = (!isset($dep['optional']) || $dep['optional'] == 'no') ?
+                                'required' :
+                                'optional';
+                            $dep['package'] = $dep['name'];
+                            if (!isset($options['soft'])) {
+                                $this->_downloader->log(3, $this->getShortName() .
+                                    ': Skipping ' . $group . ' dependency "' .
+                                    $this->_registry->parsedPackageNameToString($dep, true) .
+                                    '", already installed as version ' . $obj->getVersion());
+                            }
+                            if (@$skipnames[count($skipnames) - 1] ==
+                                  $this->_registry->parsedPackageNameToString($dep, true)) {
+                                array_pop($skipnames);
+                            }
+                            continue;
+                        } else {
+                            if (isset($dep['optional']) && $dep['optional'] == 'yes') {
+                                $this->_downloader->log(2, $this->getShortName() .
+                                    ': Skipping ' . $group
+                                    . ' dependency "' .
+                                    $this->_registry->parsedPackageNameToString($dep, true) .
+                                    '", no releases exist');
+                                continue;
+                            } else {
+                                return $url;
+                            }
+                        }
+                    }
+                }
+                PEAR::popErrorHandling();
+                if (!isset($options['alldeps'])) {
+                    if (isset($dep['optional']) && $dep['optional'] == 'yes') {
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(3, 'Notice: package "' .
+                                $this->getShortName() .
+                                '" optional dependency "' .
+                                $this->_registry->parsedPackageNameToString(
+                                    array('channel' => $chan, 'package' =>
+                                    $dep['name']), true) .
+                                '" will not be automatically downloaded');
+                        }
+                        $skipnames[] = $this->_registry->parsedPackageNameToString(
+                                array('channel' => $chan, 'package' =>
+                                $dep['name']), true);
+                        $nodownload = true;
+                    }
+                }
+                if (!isset($options['alldeps']) && !isset($options['onlyreqdeps'])) {
+                    if (!isset($dep['optional']) || $dep['optional'] == 'no') {
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(3, 'Notice: package "' .
+                                $this->getShortName() .
+                                '" required dependency "' .
+                                $this->_registry->parsedPackageNameToString(
+                                    array('channel' => $chan, 'package' =>
+                                    $dep['name']), true) .
+                                '" will not be automatically downloaded');
+                        }
+                        $skipnames[] = $this->_registry->parsedPackageNameToString(
+                                array('channel' => $chan, 'package' =>
+                                $dep['name']), true);
+                        $nodownload = true;
+                    }
+                }
+                // check to see if a dep is already installed
+                // do not try to move this before getDepPackageDownloadURL
+                // we can't determine whether upgrade is necessary until we know what
+                // version would be downloaded
+                if (!isset($options['force']) && $this->isInstalled(
+                        $url, $dep['rel'])) {
+                    $group = (!isset($dep['optional']) || $dep['optional'] == 'no') ?
+                        'required' :
+                        'optional';
+                    $dep['package'] = $dep['name'];
+                    if (isset($newdep)) {
+                        $version = $this->_installRegistry->packageInfo($newdep['name'], 'version',
+                            $newdep['channel']);
+                    } else {
+                        $version = $this->_installRegistry->packageInfo($dep['name'], 'version');
+                    }
+                    $dep['version'] = $url['version'];
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
+                            ' dependency "' .
+                            $this->_registry->parsedPackageNameToString($dep, true) .
+                            '", already installed as version ' . $version);
+                    }
+                    if (@$skipnames[count($skipnames) - 1] ==
+                          $this->_registry->parsedPackageNameToString($dep, true)) {
+                        array_pop($skipnames);
+                    }
+                    continue;
+                }
+                if ($nodownload) {
+                    continue;
+                }
+                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                if (isset($newdep)) {
+                    $dep = $newdep;
+                }
+                $dep['package'] = $dep['name'];
+                $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params,
+                    isset($dep['optional']) && $dep['optional'] == 'yes' &&
+                    !isset($options['alldeps']));
+                PEAR::popErrorHandling();
+                if (PEAR::isError($ret)) {
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(0, $ret->getMessage());
+                    }
+                    continue;
+                }
+                $this->_downloadDeps[] = $ret;
+            }
+        }
+        if (count($skipnames)) {
+            if (!isset($options['soft'])) {
+                $this->_downloader->log(1, 'Did not download dependencies: ' .
+                    implode(', ', $skipnames) .
+                    ', use --alldeps or --onlyreqdeps to download automatically');
+            }
+        }
+    }
+
+    function setDownloadURL($pkg)
+    {
+        $this->_downloadURL = $pkg;
+    }
+
+    /**
+     * Set the package.xml object for this downloaded package
+     *
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2 $pkg
+     */
+    function setPackageFile(&$pkg)
+    {
+        $this->_packagefile = &$pkg;
+    }
+
+    function getShortName()
+    {
+        return $this->_registry->parsedPackageNameToString(array('channel' => $this->getChannel(),
+            'package' => $this->getPackage()), true);
+    }
+
+    function getParsedPackage()
+    {   
+        if (isset($this->_packagefile) || isset($this->_parsedname)) {
+            return array('channel' => $this->getChannel(),
+                'package' => $this->getPackage(),
+                'version' => $this->getVersion());
+        }
+        return false;
+    }
+
+    function getDownloadURL()
+    {
+        return $this->_downloadURL;
+    }
+
+    function canDefault()
+    {
+        if (isset($this->_downloadURL)) {
+            if (isset($this->_downloadURL['nodefault'])) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    function getPackage()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getPackage();
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->getPackage();
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     */
+    function isSubpackage(&$pf)
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->isSubpackage($pf);
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->isSubpackage($pf);
+        } else {
+            return false;
+        }
+    }
+
+    function getPackageType()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getPackageType();
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->getPackageType();
+        } else {
+            return false;
+        }
+    }
+
+    function isBundle()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getPackageType() == 'bundle';
+        } else {
+            return false;
+        }
+    }
+
+    function getPackageXmlVersion()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getPackagexmlVersion();
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->getPackagexmlVersion();
+        } else {
+            return '1.0';
+        }
+    }
+
+    function getChannel()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getChannel();
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->getChannel();
+        } else {
+            return false;
+        }
+    }
+
+    function getURI()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getURI();
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->getURI();
+        } else {
+            return false;
+        }
+    }
+
+    function getVersion()
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->getVersion();
+        } elseif (isset($this->_downloadURL['version'])) {
+            return $this->_downloadURL['version'];
+        } else {
+            return false;
+        }
+    }
+
+    function isCompatible($pf)
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->isCompatible($pf);
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->isCompatible($pf);
+        } else {
+            return true;
+        }
+    }
+
+    function setGroup($group)
+    {
+        $this->_parsedname['group'] = $group;
+    }
+
+    function getGroup()
+    {
+        if (isset($this->_parsedname['group'])) {
+            return $this->_parsedname['group'];
+        } else {
+            return '';
+        }
+    }
+
+    function isExtension($name)
+    {
+        if (isset($this->_packagefile)) {
+            return $this->_packagefile->isExtension($name);
+        } elseif (isset($this->_downloadURL['info'])) {
+            return $this->_downloadURL['info']->getProvidesExtension() == $name;
+        } else {
+            return false;
+        }
+    }
+
+    function getDeps()
+    {
+        if (isset($this->_packagefile)) {
+            if ($this->_packagefile->getPackagexmlVersion() == '2.0') {
+                return $this->_packagefile->getDeps(true);
+            } else {
+                return $this->_packagefile->getDeps();
+            }
+        } elseif (isset($this->_downloadURL['info'])) {
+            if ($this->_downloadURL['info']->getPackagexmlVersion() == '2.0') {
+                return $this->_downloadURL['info']->getDeps(true);
+            } else {
+                return $this->_downloadURL['info']->getDeps();
+            }
+        } else {
+            return array();
+        }
+    }
+
+    /**
+     * @param array Parsed array from {@link PEAR_Registry::parsePackageName()} or a dependency
+     *                     returned from getDepDownloadURL()
+     */
+    function isEqual($param)
+    {
+        if (is_object($param)) {
+            $channel = $param->getChannel();
+            $package = $param->getPackage();
+            if ($param->getURI()) {
+                $param = array(
+                    'channel' => $param->getChannel(),
+                    'package' => $param->getPackage(),
+                    'version' => $param->getVersion(),
+                    'uri' => $param->getURI(),
+                );
+            } else {
+                $param = array(
+                    'channel' => $param->getChannel(),
+                    'package' => $param->getPackage(),
+                    'version' => $param->getVersion(),
+                );
+            }
+        } else {
+            if (isset($param['uri'])) {
+                $param['channel'] = '__uri';
+                $param['package'] = $param['dep']['name'];
+            }
+            $package = isset($param['package']) ? $param['package'] :
+                $param['info']->getPackage();
+            $channel = isset($param['channel']) ? $param['channel'] :
+                $param['info']->getChannel();
+            if (isset($param['rel'])) {
+                if (!class_exists('PEAR_Dependency2')) {
+                    require_once 'PEAR/Dependency2.php';
+                }
+                $newdep = PEAR_Dependency2::normalizeDep($param);
+                $newdep = $newdep[0];
+            } elseif (isset($param['min'])) {
+                $newdep = $param;
+            }
+        }
+        if (isset($newdep)) {
+            if (!isset($newdep['min'])) {
+                $newdep['min'] = '0';
+            }
+            if (!isset($newdep['max'])) {
+                $newdep['max'] = '100000000000000000000';
+            }
+            // use magic to support pecl packages suddenly jumping to the pecl channel
+            // we need to support both dependency possibilities
+            if ($channel == 'pear.php.net' && $this->getChannel() == 'pecl.php.net') {
+                if ($package == $this->getPackage()) {
+                    $channel = 'pecl.php.net';
+                }
+            }
+            if ($channel == 'pecl.php.net' && $this->getChannel() == 'pear.php.net') {
+                if ($package == $this->getPackage()) {
+                    $channel = 'pear.php.net';
+                }
+            }
+            return (strtolower($package) == strtolower($this->getPackage()) &&
+                $channel == $this->getChannel() &&
+                version_compare($newdep['min'], $this->getVersion(), '<=') &&
+                version_compare($newdep['max'], $this->getVersion(), '>='));
+        }
+        // use magic to support pecl packages suddenly jumping to the pecl channel
+        if ($channel == 'pecl.php.net' && $this->getChannel() == 'pear.php.net') {
+            if (strtolower($package) == strtolower($this->getPackage())) {
+                $channel = 'pear.php.net';
+            }
+        }
+        if (isset($param['version'])) {
+            return (strtolower($package) == strtolower($this->getPackage()) &&
+                $channel == $this->getChannel() &&
+                $param['version'] == $this->getVersion());
+        } else {
+            return strtolower($package) == strtolower($this->getPackage()) &&
+                $channel == $this->getChannel();
+        }
+    }
+
+    function isInstalled($dep, $oper = '==')
+    {
+        if (!$dep) {
+            return false;
+        }
+        if ($oper != 'ge' && $oper != 'gt' && $oper != 'has' && $oper != '==') {
+            return false;
+        }
+        if (is_object($dep)) {
+            $package = $dep->getPackage();
+            $channel = $dep->getChannel();
+            if ($dep->getURI()) {
+                $dep = array(
+                    'uri' => $dep->getURI(),
+                    'version' => $dep->getVersion(),
+                );
+            } else {
+                $dep = array(
+                    'version' => $dep->getVersion(),
+                );
+            }
+        } else {
+            if (isset($dep['uri'])) {
+                $channel = '__uri';
+                $package = $dep['dep']['name'];
+            } else {
+                $channel = $dep['info']->getChannel();
+                $package = $dep['info']->getPackage();
+            }
+        }
+        $options = $this->_downloader->getOptions();
+        $test = $this->_installRegistry->packageExists($package, $channel);
+        if (!$test && $channel == 'pecl.php.net') {
+            // do magic to allow upgrading from old pecl packages to new ones
+            $test = $this->_installRegistry->packageExists($package, 'pear.php.net');
+            $channel = 'pear.php.net';
+        }
+        if ($test) {
+            if (isset($dep['uri'])) {
+                if ($this->_installRegistry->packageInfo($package, 'uri', '__uri') == $dep['uri']) {
+                    return true;
+                }
+            }
+            if (isset($options['upgrade'])) {
+                if ($oper == 'has') {
+                    if (version_compare($this->_installRegistry->packageInfo(
+                          $package, 'version', $channel),
+                          $dep['version'], '>=')) {
+                        return true;
+                    } else {
+                        return false;
+                    }
+                } else {
+                    if (version_compare($this->_installRegistry->packageInfo(
+                          $package, 'version', $channel),
+                          $dep['version'], '>=')) {
+                        return true;
+                    }
+                    return false;
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @param array
+     * @static
+     */
+    function removeDuplicates(&$params)
+    {
+        $pnames = array();
+        foreach ($params as $i => $param) {
+            if (!$param) {
+                continue;
+            }
+            if ($param->getPackage()) {
+                $pnames[$i] = $param->getChannel() . '/' .
+                    $param->getPackage() . '-' . $param->getVersion() . '#' . $param->getGroup();
+            }
+        }
+        $pnames = array_unique($pnames);
+        $unset = array_diff(array_keys($params), array_keys($pnames));
+        $testp = array_flip($pnames);
+        foreach ($params as $i => $param) {
+            if (!$param) {
+                $unset[] = $i;
+                continue;
+            }
+            if (!is_a($param, 'PEAR_Downloader_Package')) {
+                $unset[] = $i;
+                continue;
+            }
+            if (!isset($testp[$param->getChannel() . '/' . $param->getPackage() . '-' .
+                  $param->getVersion() . '#' . $param->getGroup()])) {
+                $unset[] = $i;
+            }
+        }
+        foreach ($unset as $i) {
+            unset($params[$i]);
+        }
+        $ret = array();
+        foreach ($params as $i => $param) {
+            $ret[] = &$params[$i];
+        }
+        $params = array();
+        foreach ($ret as $i => $param) {
+            $params[] = &$ret[$i];
+        }
+    }
+
+    function explicitState()
+    {
+        return $this->_explicitState;
+    }
+
+    function setExplicitState($s)
+    {
+        $this->_explicitState = $s;
+    }
+
+    /**
+     * @static
+     */
+    function mergeDependencies(&$params)
+    {
+        $newparams = array();
+        $bundles = array();
+        foreach ($params as $i => $param) {
+            if (!$param->isBundle()) {
+                continue;
+            }
+            $bundles[] = $i;
+            $pf = &$param->getPackageFile();
+            $newdeps = array();
+            $contents = $pf->getBundledPackages();
+            if (!is_array($contents)) {
+                $contents = array($contents);
+            }
+            foreach ($contents as $file) {
+                $filecontents = $pf->getFileContents($file);
+                $dl = &$param->getDownloader();
+                $options = $dl->getOptions();
+                $fp = @fopen($dl->getDownloadDir() . DIRECTORY_SEPARATOR . $file, 'wb');
+                if (!$fp) {
+                    continue;
+                }
+                fwrite($fp, $filecontents, strlen($filecontents));
+                fclose($fp);
+                if ($s = $params[$i]->explicitState()) {
+                    $obj->setExplicitState($s);
+                }
+                $obj = &new PEAR_Downloader_Package($params[$i]->getDownloader());
+                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                $e = $obj->_fromFile($a = $dl->getDownloadDir() . DIRECTORY_SEPARATOR . $file);
+                PEAR::popErrorHandling();
+                if (PEAR::isError($e)) {
+                    if (!isset($options['soft'])) {
+                        $dl->log(0, $e->getMessage());
+                    }
+                    continue;
+                }
+                $j = &$obj;
+                if (!PEAR_Downloader_Package::willDownload($j,
+                      array_merge($params, $newparams)) && !$param->isInstalled($j)) {
+                    $newparams[] = &$j;
+                }
+            }
+        }
+        foreach ($bundles as $i) {
+            unset($params[$i]); // remove bundles - only their contents matter for installation
+        }
+        PEAR_Downloader_Package::removeDuplicates($params); // strip any unset indices
+        if (count($newparams)) { // add in bundled packages for install
+            foreach ($newparams as $i => $unused) {
+                $params[] = &$newparams[$i];
+            }
+            $newparams = array();
+        }
+        foreach ($params as $i => $param) {
+            $newdeps = array();
+            foreach ($param->_downloadDeps as $dep) {
+                if (!PEAR_Downloader_Package::willDownload($dep,
+                      array_merge($params, $newparams)) && !$param->isInstalled($dep)) {
+                    $newdeps[] = $dep;
+                } else {
+                    // detect versioning conflicts here
+                }
+            }
+            // convert the dependencies into PEAR_Downloader_Package objects for the next time
+            // around
+            $params[$i]->_downloadDeps = array();
+            foreach ($newdeps as $dep) {
+                $obj = &new PEAR_Downloader_Package($params[$i]->getDownloader());
+                if ($s = $params[$i]->explicitState()) {
+                    $obj->setExplicitState($s);
+                }
+                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                $e = $obj->fromDepURL($dep);
+                PEAR::popErrorHandling();
+                if (PEAR::isError($e)) {
+                    if (!isset($options['soft'])) {
+                        $obj->_downloader->log(0, $e->getMessage());
+                    }
+                    continue;
+                }
+                $e = $obj->detectDependencies($params);
+                if (PEAR::isError($e)) {
+                    if (!isset($options['soft'])) {
+                        $obj->_downloader->log(0, $e->getMessage());
+                    }
+                }
+                $j = &$obj;
+                $newparams[] = &$j;
+            }
+        }
+        if (count($newparams)) {
+            foreach ($newparams as $i => $unused) {
+                $params[] = &$newparams[$i];
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+
+    /**
+     * @static
+     */
+    function willDownload($param, $params)
+    {
+        if (!is_array($params)) {
+            return false;
+        }
+        foreach ($params as $obj) {
+            if ($obj->isEqual($param)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * For simpler unit-testing
+     * @param PEAR_Config
+     * @param int
+     * @param string
+     */
+    function &getPackagefileObject(&$c, $d, $t = false)
+    {
+        $a = &new PEAR_PackageFile($c, $d, $t);
+        return $a;
+    }
+
+
+    /**
+     * This will retrieve from a local file if possible, and parse out
+     * a group name as well.  The original parameter will be modified to reflect this.
+     * @param string|array can be a parsed package name as well
+     * @access private
+     */
+    function _fromFile(&$param)
+    {
+        if (is_string($param) && !@is_file($param)) {
+            $test = explode('#', $param);
+            $group = array_pop($test);
+            if (@is_file(implode('#', $test))) {
+                $this->setGroup($group);
+                $param = implode('#', $test);
+                $this->_explicitGroup = true;
+            }
+        }
+        if (@is_file($param)) {
+            $this->_type = 'local';
+            $options = $this->_downloader->getOptions();
+            if (isset($options['downloadonly'])) {
+                $pkg = &$this->getPackagefileObject($this->_config,
+                    $this->_downloader->_debug);
+            } else {
+                $pkg = &$this->getPackagefileObject($this->_config,
+                    $this->_downloader->_debug, $this->_downloader->getDownloadDir());
+            }
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $pf = &$pkg->fromAnyFile($param, PEAR_VALIDATE_INSTALLING);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($pf)) {
+                $this->_valid = false;
+                return $pf;
+            }
+            $this->_packagefile = &$pf;
+            if (!$this->getGroup()) {
+                $this->setGroup('default'); // install the default dependency group
+            }
+            return $this->_valid = true;
+        }
+        return $this->_valid = false;
+    }
+
+    function _fromUrl($param, $saveparam = '')
+    {
+        if (!is_array($param) &&
+              (preg_match('#^(http|ftp)://#', $param))) {
+            $options = $this->_downloader->getOptions();
+            $this->_type = 'url';
+            $callback = $this->_downloader->ui ?
+                array(&$this->_downloader, '_downloadCallback') : null;
+            $this->_downloader->pushErrorHandling(PEAR_ERROR_RETURN);
+            $file = $this->_downloader->downloadHttp($param, $this->_downloader->ui,
+                $this->_downloader->getDownloadDir(), $callback);
+            $this->_downloader->popErrorHandling();
+            if (PEAR::isError($file)) {
+                if (!empty($saveparam)) {
+                    $saveparam = ", cannot download \"$saveparam\"";
+                }
+                $err = PEAR::raiseError('Could not download from "' . $param .
+                    '"' . $saveparam);
+                    return $err;
+            }
+            if ($this->_rawpackagefile) {
+                require_once 'Archive/Tar.php';
+                $tar = &new Archive_Tar($file);
+                $packagexml = $tar->extractInString('package2.xml');
+                if (!$packagexml) {
+                    $packagexml = $tar->extractInString('package.xml');
+                }
+                if (str_replace(array("\n", "\r"), array('',''), $packagexml) !=
+                      str_replace(array("\n", "\r"), array('',''), $this->_rawpackagefile)) {
+                    if ($this->getChannel() == 'pear.php.net') {
+                        // be more lax for the existing PEAR packages that have not-ok
+                        // characters in their package.xml
+                        $this->_downloader->log(0, 'CRITICAL WARNING: The "' .
+                            $this->getPackage() . '" package has invalid characters in its ' .
+                            'package.xml.  The next version of PEAR may not be able to install ' .
+                            'this package for security reasons.  Please open a bug report at ' .
+                            'http://pear.php.net/package/' . $this->getPackage() . '/bugs');
+                    } else {
+                        return PEAR::raiseError('CRITICAL ERROR: package.xml downloaded does ' .
+                            'not match value returned from xml-rpc');
+                    }
+                }
+            }
+            // whew, download worked!
+            if (isset($options['downloadonly'])) {
+                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
+            } else {
+                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug,
+                    $this->_downloader->getDownloadDir());
+            }
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $pf = &$pkg->fromAnyFile($file, PEAR_VALIDATE_INSTALLING);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($pf)) {
+                if (is_array($pf->getUserInfo())) {
+                    foreach ($pf->getUserInfo() as $err) {
+                        if (is_array($err)) {
+                            $err = $err['message'];
+                        }
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(0, "Validation Error: $err");
+                        }
+                    }
+                }
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(0, $pf->getMessage());
+                }
+                $err = PEAR::raiseError('Download of "' . ($saveparam ? $saveparam :
+                    $param) . '" succeeded, but it is not a valid package archive');
+                $this->_valid = false;
+                return $err;
+            }
+            $this->_packagefile = &$pf;
+            $this->setGroup('default'); // install the default dependency group
+            return $this->_valid = true;
+        }
+        return $this->_valid = false;
+    }
+
+    /**
+     *
+     * @param string|array pass in an array of format
+     *                     array(
+     *                      'package' => 'pname',
+     *                     ['channel' => 'channame',]
+     *                     ['version' => 'version',]
+     *                     ['state' => 'state',])
+     *                     or a string of format [channame/]pname[-version|-state]
+     */
+    function _fromString($param)
+    {
+        $options = $this->_downloader->getOptions();
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $pname = $this->_registry->parsePackageName($param,
+            $this->_config->get('default_channel'));
+        PEAR::popErrorHandling();
+        if (PEAR::isError($pname)) {
+            if ($pname->getCode() == 'invalid') {
+                $this->_valid = false;
+                return false;
+            }
+            if ($pname->getCode() == 'channel') {
+                $parsed = $pname->getUserInfo();
+                if ($this->_downloader->discover($parsed['channel'])) {
+                    if ($this->_config->get('auto_discover')) {
+                        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                        $pname = $this->_registry->parsePackageName($param,
+                            $this->_config->get('default_channel'));
+                        PEAR::popErrorHandling();
+                    } else {
+                        if (!isset($options['soft'])) {
+                            $this->_downloader->log(0, 'Channel "' . $parsed['channel'] .
+                                '" is not initialized, use ' .
+                                '"pear channel-discover ' . $parsed['channel'] . '" to initialize' .
+                                'or pear config-set auto_discover 1');
+                        }
+                    }
+                }
+                if (PEAR::isError($pname)) {
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(0, $pname->getMessage());
+                    }
+                    if (is_array($param)) {
+                        $param = $this->_registry->parsedPackageNameToString($param);
+                    }
+                    $err = PEAR::raiseError('invalid package name/package file "' .
+                        $param . '"');
+                    $this->_valid = false;
+                    return $err;
+                }
+            } else {
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(0, $pname->getMessage());
+                }
+                $err = PEAR::raiseError('invalid package name/package file "' .
+                    $param . '"');
+                $this->_valid = false;
+                return $err;
+            }
+        }
+        if (!isset($this->_type)) {
+            $this->_type = 'xmlrpc';
+        }
+        $this->_parsedname = $pname;
+        if (isset($pname['state'])) {
+            $this->_explicitState = $pname['state'];
+        } else {
+            $this->_explicitState = false;
+        }
+        if (isset($pname['group'])) {
+            $this->_explicitGroup = true;
+        } else {
+            $this->_explicitGroup = false;
+        }
+        $info = $this->_downloader->_getPackageDownloadUrl($pname);
+        if (PEAR::isError($info)) {
+            if ($pname['channel'] == 'pear.php.net') {
+                // try pecl
+                $pname['channel'] = 'pecl.php.net';
+                if ($test = $this->_downloader->_getPackageDownloadUrl($pname)) {
+                    if (!PEAR::isError($test)) {
+                        $info = PEAR::raiseError($info->getMessage() . ' - package ' .
+                            $this->_registry->parsedPackageNameToString($pname, true) .
+                            ' can be installed with "pecl install ' . $pname['package'] .
+                            '"');
+                    }
+                }
+            }
+            return $info;
+        }
+        $this->_rawpackagefile = $info['raw'];
+        $ret = $this->_analyzeDownloadURL($info, $param, $pname);
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+        if ($ret) {
+            $this->_downloadURL = $ret;
+            return $this->_valid = (bool) $ret;
+        }
+    }
+
+    /**
+     * @param array output of package.getDownloadURL
+     * @param string|array|object information for detecting packages to be downloaded, and
+     *                            for errors
+     * @param array name information of the package
+     * @param array|null packages to be downloaded
+     * @param bool is this an optional dependency?
+     * @access private
+     */
+    function _analyzeDownloadURL($info, $param, $pname, $params = null, $optional = false)
+    {
+        if (!is_string($param) && PEAR_Downloader_Package::willDownload($param, $params)) {
+            return false;
+        }
+        if (!$info) {
+            if (!is_string($param)) {
+                $saveparam = ", cannot download \"$param\"";
+            } else {
+                $saveparam = '';
+            }
+            // no releases exist
+            return PEAR::raiseError('No releases for package "' .
+                $this->_registry->parsedPackageNameToString($pname, true) . '" exist' . $saveparam);
+        }
+        if (strtolower($info['info']->getChannel()) != strtolower($pname['channel'])) {
+            $err = false;
+            if ($pname['channel'] == 'pecl.php.net') {
+                if ($info['info']->getChannel() != 'pear.php.net') {
+                    $err = true;
+                }
+            } elseif ($info['info']->getChannel() == 'pecl.php.net') {
+                if ($pname['channel'] != 'pear.php.net') {
+                    $err = true;
+                }
+            } else {
+                $err = true;
+            }
+            if ($err) {
+                return PEAR::raiseError('SECURITY ERROR: package in channel "' . $pname['channel'] .
+                    '" retrieved another channel\'s name for download! ("' .
+                    $info['info']->getChannel() . '")');
+            }
+        }
+        if (!isset($info['url'])) {
+            $instead =  ', will instead download version ' . $info['version'] .
+                        ', stability "' . $info['info']->getState() . '"';
+            // releases exist, but we failed to get any
+            if (isset($this->_downloader->_options['force'])) {
+                if (isset($pname['version'])) {
+                    $vs = ', version "' . $pname['version'] . '"';
+                } elseif (isset($pname['state'])) {
+                    $vs = ', stability "' . $pname['state'] . '"';
+                } elseif ($param == 'dependency') {
+                    if (!class_exists('PEAR_Common')) {
+                        require_once 'PEAR/Common.php';
+                    }
+                    if (!in_array($info['info']->getState(),
+                          PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
+                        if ($optional) {
+                            // don't spit out confusing error message
+                            return $this->_downloader->_getPackageDownloadUrl(
+                                array('package' => $pname['package'],
+                                      'channel' => $pname['channel'],
+                                      'version' => $info['version']));
+                        }
+                        $vs = ' within preferred state "' . $this->_config->get('preferred_state') .
+                            '"';
+                    } else {
+                        if (!class_exists('PEAR_Dependency2')) {
+                            require_once 'PEAR/Dependency2.php';
+                        }
+                        if ($optional) {
+                            // don't spit out confusing error message
+                            return $this->_downloader->_getPackageDownloadUrl(
+                                array('package' => $pname['package'],
+                                      'channel' => $pname['channel'],
+                                      'version' => $info['version']));
+                        }
+                        $vs = PEAR_Dependency2::_getExtraString($pname);
+                        $instead = '';
+                    }
+                } else {
+                    $vs = ' within preferred state "' . $this->_config->get(
+                        'preferred_state') . '"';
+                }
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
+                        '/' . $pname['package'] . $vs . $instead);
+                }
+                // download the latest release
+                return $this->_downloader->_getPackageDownloadUrl(
+                    array('package' => $pname['package'],
+                          'channel' => $pname['channel'],
+                          'version' => $info['version']));
+            } else {
+                // construct helpful error message
+                if (isset($pname['version'])) {
+                    $vs = ', version "' . $pname['version'] . '"';
+                } elseif (isset($pname['state'])) {
+                    $vs = ', stability "' . $pname['state'] . '"';
+                } elseif ($param == 'dependency') {
+                    if (!class_exists('PEAR_Common')) {
+                        require_once 'PEAR/Common.php';
+                    }
+                    if (!in_array($info['info']->getState(),
+                          PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
+                        if ($optional) {
+                            // don't spit out confusing error message, and don't die on
+                            // optional dep failure!
+                            return $this->_downloader->_getPackageDownloadUrl(
+                                array('package' => $pname['package'],
+                                      'channel' => $pname['channel'],
+                                      'version' => $info['version']));
+                        }
+                        $vs = ' within preferred state "' . $this->_config->get('preferred_state') .
+                            '"';
+                    } else {
+                        if (!class_exists('PEAR_Dependency2')) {
+                            require_once 'PEAR/Dependency2.php';
+                        }
+                        if ($optional) {
+                            // don't spit out confusing error message, and don't die on
+                            // optional dep failure!
+                            return $this->_downloader->_getPackageDownloadUrl(
+                                array('package' => $pname['package'],
+                                      'channel' => $pname['channel'],
+                                      'version' => $info['version']));
+                        }
+                        $vs = PEAR_Dependency2::_getExtraString($pname);
+                    }
+                } else {
+                    $vs = ' within preferred state "' . $this->_downloader->config->get(
+                        'preferred_state') . '"';
+                }
+                $err = PEAR::raiseError(
+                    'Failed to download ' . $this->_registry->parsedPackageNameToString(
+                        array('channel' => $pname['channel'], 'package' => $pname['package']),
+                            true)
+                     . $vs .
+                    ', latest release is version ' . $info['version'] .
+                    ', stability "' . $info['info']->getState() . '", use "' .
+                    $this->_registry->parsedPackageNameToString(
+                        array('channel' => $pname['channel'], 'package' => $pname['package'],
+                        'version' => $info['version'])) . '" to install');
+                return $err;
+            }
+        }
+        return $info;
+    }
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Downloader.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Downloader.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Downloader.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Downloader.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,31 +1,32 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |          Tomas V.V.Cox <cox@idecnet.com>                             |
-// |          Martin Jansen <mj@php.net>                                  |
-// +----------------------------------------------------------------------+
-//
-// $Id: Downloader.php,v 1.17.2.1 2004/10/22 22:54:03 cellog Exp $
+/**
+ * PEAR_Downloader, the PEAR Installer's download utility class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Martin Jansen <mj@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Downloader.php,v 1.96 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.3.0
+ */
 
+/**
+ * Needed for constants, extending
+ */
 require_once 'PEAR/Common.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Dependency.php';
-require_once 'PEAR/Remote.php';
-require_once 'System.php';
-
 
 define('PEAR_INSTALLER_OK',       1);
 define('PEAR_INSTALLER_FAILED',   0);
@@ -33,21 +34,24 @@
 define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
 
 /**
- * Administration class used to download PEAR packages and maintain the
- * installed package database.
+ * Administration class used to download anything from the internet (PEAR Packages,
+ * static URLs, xml files)
  *
- * @since PEAR 1.4
- * @author Greg Beaver <cellog@php.net>
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Martin Jansen <mj@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.3.0
  */
 class PEAR_Downloader extends PEAR_Common
 {
     /**
-     * @var PEAR_Config
-     * @access private
-     */
-    var $_config;
-
-    /**
      * @var PEAR_Registry
      * @access private
      */
@@ -74,6 +78,7 @@
      *  - alldeps       : install all dependencies, including optional
      *  - installroot   : base relative path to install files in
      *  - force         : force a download even if warnings would prevent it
+     *  - nocompress    : download uncompressed tarballs
      * @see PEAR_Command_Install
      * @access private
      * @var array
@@ -127,480 +132,848 @@
      * @access private
      */
     var $_errorStack = array();
+    
+    /**
+     * @var boolean
+     * @access private
+     */
+    var $_internalDownload = false;
+
+    /**
+     * Temporary variable used in sorting packages by dependency in {@link sortPkgDeps()}
+     * @var array
+     * @access private
+     */
+    var $_packageSortTree;
 
+    /**
+     * Temporary directory, or configuration value where downloads will occur
+     * @var string
+     */
+    var $_downloadDir;
     // {{{ PEAR_Downloader()
 
+    /**
+     * @param PEAR_Frontend_*
+     * @param array
+     * @param PEAR_Config
+     */
     function PEAR_Downloader(&$ui, $options, &$config)
     {
+        parent::PEAR_Common();
         $this->_options = $options;
-        $this->_config = &$config;
-        $this->_preferredState = $this->_config->get('preferred_state');
+        $this->config = &$config;
+        $this->_preferredState = $this->config->get('preferred_state');
         $this->ui = &$ui;
         if (!$this->_preferredState) {
             // don't inadvertantly use a non-set preferred_state
             $this->_preferredState = null;
         }
 
-        $php_dir = $this->_config->get('php_dir');
         if (isset($this->_options['installroot'])) {
-            if (substr($this->_options['installroot'], -1) == DIRECTORY_SEPARATOR) {
-                $this->_options['installroot'] = substr($this->_options['installroot'], 0, -1);
-            }
-            $php_dir = $this->_prependPath($php_dir, $this->_options['installroot']);
+            $this->config->setInstallRoot($this->_options['installroot']);
         }
-        $this->_registry = &new PEAR_Registry($php_dir);
-        $this->_remote = &new PEAR_Remote($config);
+        $this->_registry = &$config->getRegistry();
+        $this->_remote = &$config->getRemote();
 
         if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
-            $this->_installed = $this->_registry->listPackages();
-            array_walk($this->_installed, create_function('&$v,$k','$v = strtolower($v);'));
-            $this->_installed = array_flip($this->_installed);
+            $this->_installed = $this->_registry->listAllPackages();
+            foreach ($this->_installed as $key => $unused) {
+                if (!count($unused)) {
+                    continue;
+                }
+                @array_walk($this->_installed[$key], 'strtolower');
+            }
         }
-        parent::PEAR_Common();
     }
 
-    // }}}
-    // {{{ configSet()
-    function configSet($key, $value, $layer = 'user')
+    /**
+     * Attempt to discover a channel's remote capabilities from
+     * its server name
+     * @param string
+     * @return boolean
+     */
+    function discover($channel)
     {
-        $this->_config->set($key, $value, $layer);
-        $this->_preferredState = $this->_config->get('preferred_state');
-        if (!$this->_preferredState) {
-            // don't inadvertantly use a non-set preferred_state
-            $this->_preferredState = null;
+        $this->log(1, 'Attempting to discover channel "' . $channel . '"...');
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $callback = $this->ui ? array(&$this, '_downloadCallback') : null;
+        if (!class_exists('System')) {
+            require_once 'System.php';
+        }
+        $a = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui,
+            System::mktemp(array('-d')), $callback, false);
+        PEAR::popErrorHandling();
+        if (PEAR::isError($a)) {
+            return false;
+        }
+        list($a, $lastmodified) = $a;
+        if (!class_exists('PEAR/ChannelFile.php')) {
+            require_once 'PEAR/ChannelFile.php';
+        }
+        $b = new PEAR_ChannelFile;
+        if ($b->fromXmlFile($a)) {
+            @unlink($a);
+            if ($this->config->get('auto_discover')) {
+                $this->_registry->addChannel($b, $lastmodified);
+                $alias = $b->getName();
+                if ($b->getName() == $this->_registry->channelName($b->getAlias())) {
+                    $alias = $b->getAlias();
+                }
+                $this->log(1, 'Auto-discovered channel "' . $channel .
+                    '", alias "' . $alias . '", adding to registry');
+            }
+            return true;
         }
+        @unlink($a);
+        return false;
     }
 
-    // }}}
-    // {{{ setOptions()
-    function setOptions($options)
+    /**
+     * For simpler unit-testing
+     * @param PEAR_Downloader
+     * @return PEAR_Downloader_Package
+     */
+    function &newDownloaderPackage(&$t)
     {
-        $this->_options = $options;
+        if (!class_exists('PEAR_Downloader_Package')) {
+            require_once 'PEAR/Downloader/Package.php';
+        }
+        $a = &new PEAR_Downloader_Package($t);
+        return $a;
     }
 
-    // }}}
-    // {{{ _downloadFile()
     /**
-     * @param string filename to download
-     * @param string version/state
-     * @param string original value passed to command-line
-     * @param string|null preferred state (snapshot/devel/alpha/beta/stable)
-     *                    Defaults to configuration preferred state
-     * @return null|PEAR_Error|string
-     * @access private
-     */
-    function _downloadFile($pkgfile, $version, $origpkgfile, $state = null)
-    {
-        if (is_null($state)) {
-            $state = $this->_preferredState;
-        }
-        // {{{ check the package filename, and whether it's already installed
-        $need_download = false;
-        if (preg_match('#^(http|ftp)://#', $pkgfile)) {
-            $need_download = true;
-        } elseif (!@is_file($pkgfile)) {
-            if ($this->validPackageName($pkgfile)) {
-                if ($this->_registry->packageExists($pkgfile)) {
-                    if (empty($this->_options['upgrade']) && empty($this->_options['force'])) {
-                        $errors[] = "$pkgfile already installed";
-                        return;
-                    }
+     * For simpler unit-testing
+     * @param PEAR_Config
+     * @param array
+     * @param array
+     * @param int
+     */
+    function &getDependency2Object(&$c, $i, $p, $s)
+    {
+        if (!class_exists('PEAR/Dependency2.php')) {
+            require_once 'PEAR/Dependency2.php';
+        }
+        $z = &new PEAR_Dependency2($c, $i, $p, $s);
+        return $z;
+    }
+
+    function &download($params)
+    {
+        if (!count($params)) {
+            $a = array();
+            return $a;
+        }
+        if (!isset($this->_registry)) {
+            $this->_registry = &$this->config->getRegistry();
+        }
+        if (!isset($this->_remote)) {
+            $this->_remote = &$this->config->getRemote();
+        }
+        $channelschecked = array();
+        // convert all parameters into PEAR_Downloader_Package objects
+        foreach ($params as $i => $param) {
+            $params[$i] = &$this->newDownloaderPackage($this);
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $err = $params[$i]->initialize($param);
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($err)) {
+                if (!isset($this->_options['soft'])) {
+                    $this->log(0, $err->getMessage());
+                }
+                $params[$i] = false;
+                if (is_object($param)) {
+                    $param = $param->getChannel() . '/' . $param->getPackage();
                 }
-                $pkgfile = $this->getPackageDownloadUrl($pkgfile, $version);
-                $need_download = true;
+                $this->pushError('Package "' . $param . '" is not valid',
+                    PEAR_INSTALLER_SKIPPED);
             } else {
-                if (strlen($pkgfile)) {
-                    $errors[] = "Could not open the package file: $pkgfile";
-                } else {
-                    $errors[] = "No package file given";
+                if ($params[$i] && !isset($channelschecked[$params[$i]->getChannel()]) &&
+                      !isset($this->_options['offline'])) {
+                    $channelschecked[$params[$i]->getChannel()] = true;
+                    PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                    if (!class_exists('System')) {
+                        require_once 'System.php';
+                    }
+                    $curchannel = &$this->_registry->getChannel($params[$i]->getChannel());
+                    $a = $this->downloadHttp('http://' . $params[$i]->getChannel() .
+                        '/channel.xml', $this->ui,
+                        System::mktemp(array('-d')), null, $curchannel->lastModified());
+                    PEAR::staticPopErrorHandling();
+                    if (PEAR::isError($a) || !$a) {
+                        continue;
+                    }
+                    $this->log(0, 'WARNING: channel "' . $params[$i]->getChannel() . '" has ' .
+                        'updated its protocols, use "channel-update ' . $params[$i]->getChannel() .
+                        '" to update');
+                }
+                if ($params[$i] && !isset($this->_options['downloadonly'])) {
+                    $checkdir = $this->config->get('php_dir', null, $params[$i]->getChannel());
+                    while ($checkdir && $checkdir != '/' && !file_exists($checkdir)) {
+                        $checkdir = dirname($checkdir);
+                    }
+                    if ($checkdir == '.') {
+                        $checkdir = '/';
+                    }
+                    if (!@is_writeable($checkdir)) {
+                        return PEAR::raiseError('Cannot install, php_dir for channel "' .
+                            $params[$i]->getChannel() . '" is not writeable by the current user');
+                    }
+                }
+            }
+        }
+        unset($channelschecked);
+        PEAR_Downloader_Package::removeDuplicates($params);
+        if (!count($params)) {
+            $a = array();
+            return $a;
+        }
+        if (!isset($this->_options['nodeps']) && !isset($this->_options['offline'])) {
+            $reverify = true;
+            while ($reverify) {
+                $reverify = false;
+                foreach ($params as $i => $param) {
+                    $ret = $params[$i]->detectDependencies($params);
+                    if (PEAR::isError($ret)) {
+                        $reverify = true;
+                        $params[$i] = false;
+                        PEAR_Downloader_Package::removeDuplicates($params);
+                        if (!isset($this->_options['soft'])) {
+                            $this->log(0, $ret->getMessage());
+                        }
+                        continue 2;
+                    }
                 }
-                return;
             }
         }
-        // }}}
+        if (isset($this->_options['offline'])) {
+            $this->log(3, 'Skipping dependency download check, --offline specified');
+        }
+        if (!count($params)) {
+            $a = array();
+            return $a;
+        }
+        while (PEAR_Downloader_Package::mergeDependencies($params));
+        PEAR_Downloader_Package::removeInstalled($params);
+        if (!count($params)) {
+            $this->pushError('No valid packages found', PEAR_INSTALLER_FAILED);
+            $a = array();
+            return $a;
+        }
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $err = $this->analyzeDependencies($params);
+        PEAR::popErrorHandling();
+        if (!count($params)) {
+            $this->pushError('No valid packages found', PEAR_INSTALLER_FAILED);
+            $a = array();
+            return $a;
+        }
+        $ret = array();
+        $newparams = array();
+        if (isset($this->_options['pretend'])) {
+            return $params;
+        }
+        foreach ($params as $i => $package) {
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $pf = &$params[$i]->download();
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($pf)) {
+                if (!isset($this->_options['soft'])) {
+                    $this->log(1, $pf->getMessage());
+                    $this->log(0, 'Error: cannot download "' .
+                        $this->_registry->parsedPackageNameToString($package->getParsedPackage(),
+                            true) .
+                        '"');
+                }
+                continue;
+            }
+            $newparams[] = &$params[$i];
+            $ret[] = array('file' => $pf->getArchiveFile(),
+                                   'info' => &$pf,
+                                   'pkg' => $pf->getPackage());
+        }
+        $this->_downloadedPackages = $ret;
+        return $newparams;
+    }
 
-        // {{{ Download package -----------------------------------------------
-        if ($need_download) {
-            $downloaddir = $this->_config->get('download_dir');
-            if (empty($downloaddir)) {
-                if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
-                    return $downloaddir;
-                }
-                $this->log(3, '+ tmp dir created at ' . $downloaddir);
-            }
-            $callback = $this->ui ? array(&$this, '_downloadCallback') : null;
-            $this->pushErrorHandling(PEAR_ERROR_RETURN);
-            $file = $this->downloadHttp($pkgfile, $this->ui, $downloaddir, $callback);
-            $this->popErrorHandling();
-            if (PEAR::isError($file)) {
-                if ($this->validPackageName($origpkgfile)) {
-                    if (!PEAR::isError($info = $this->_remote->call('package.info',
-                          $origpkgfile))) {
-                        if (!count($info['releases'])) {
-                            return $this->raiseError('Package ' . $origpkgfile .
-                            ' has no releases');
-                        } else {
-                            return $this->raiseError('No releases of preferred state "'
-                            . $state . '" exist for package ' . $origpkgfile .
-                            '.  Use ' . $origpkgfile . '-state to install another' .
-                            ' state (like ' . $origpkgfile .'-beta)',
-                            PEAR_INSTALLER_ERROR_NO_PREF_STATE);
+    /**
+     * @param array all packages to be installed
+     */
+    function analyzeDependencies(&$params)
+    {
+        $hasfailed = $failed = false;
+        if (isset($this->_options['downloadonly'])) {
+            return;
+        }
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $redo = true;
+        $reset = false;
+        while ($redo) {
+            $redo = false;
+            foreach ($params as $i => $param) {
+                $deps = $param->getDeps();
+                if (!$deps) {
+                    $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),
+                        $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);
+                    if ($param->getType() == 'xmlrpc') {
+                        $send = $param->getDownloadURL();
+                    } else {
+                        $send = $param->getPackageFile();
+                    }
+                    $installcheck = $depchecker->validatePackage($send, $this, $params);
+                    if (PEAR::isError($installcheck)) {
+                        if (!isset($this->_options['soft'])) {
+                            $this->log(0, $installcheck->getMessage());
+                        }
+                        $hasfailed = true;
+                        $params[$i] = false;
+                        $reset = true;
+                        $redo = true;
+                        $failed = false;
+                        PEAR_Downloader_Package::removeDuplicates($params);
+                        continue 2;
+                    }
+                    continue;
+                }
+                if (!$reset && $param->alreadyValidated()) {
+                    continue;
+                }
+                if (count($deps)) {
+                    $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),
+                        $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);
+                    if ($param->getType() == 'xmlrpc') {
+                        $send = $param->getDownloadURL();
+                    } else {
+                        $send = $param->getPackageFile();
+                    }
+                    $installcheck = $depchecker->validatePackage($send, $this, $params);
+                    if (PEAR::isError($installcheck)) {
+                        if (!isset($this->_options['soft'])) {
+                            $this->log(0, $installcheck->getMessage());
+                        }
+                        $hasfailed = true;
+                        $params[$i] = false;
+                        $reset = true;
+                        $redo = true;
+                        $failed = false;
+                        PEAR_Downloader_Package::removeDuplicates($params);
+                        continue 2;
+                    }
+                    $failed = false;
+                    if (isset($deps['required'])) {
+                        foreach ($deps['required'] as $type => $dep) {
+                            // note: Dependency2 will never return a PEAR_Error if ignore-errors
+                            // is specified, so soft is needed to turn off logging
+                            if (!isset($dep[0])) {
+                                if (PEAR::isError($e = $depchecker->{"validate{$type}Dependency"}($dep,
+                                      true, $params))) {
+                                    $failed = true;
+                                    if (!isset($this->_options['soft'])) {
+                                        $this->log(0, $e->getMessage());
+                                    }
+                                } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                    if (!isset($this->_options['soft'])) {
+                                        $this->log(0, $e[0]);
+                                    }
+                                }
+                            } else {
+                                foreach ($dep as $d) {
+                                    if (PEAR::isError($e =
+                                          $depchecker->{"validate{$type}Dependency"}($d,
+                                          true, $params))) {
+                                        $failed = true;
+                                        if (!isset($this->_options['soft'])) {
+                                            $this->log(0, $e->getMessage());
+                                        }
+                                    } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                        if (!isset($this->_options['soft'])) {
+                                            $this->log(0, $e[0]);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        if (isset($deps['optional'])) {
+                            foreach ($deps['optional'] as $type => $dep) {
+                                if (!isset($dep[0])) {
+                                    if (PEAR::isError($e =
+                                          $depchecker->{"validate{$type}Dependency"}($dep,
+                                          false, $params))) {
+                                        $failed = true;
+                                        if (!isset($this->_options['soft'])) {
+                                            $this->log(0, $e->getMessage());
+                                        }
+                                    } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                        if (!isset($this->_options['soft'])) {
+                                            $this->log(0, $e[0]);
+                                        }
+                                    }
+                                } else {
+                                    foreach ($dep as $d) {
+                                        if (PEAR::isError($e =
+                                              $depchecker->{"validate{$type}Dependency"}($d,
+                                              false, $params))) {
+                                            $failed = true;
+                                            if (!isset($this->_options['soft'])) {
+                                                $this->log(0, $e->getMessage());
+                                            }
+                                        } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                            if (!isset($this->_options['soft'])) {
+                                                $this->log(0, $e[0]);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        $groupname = $param->getGroup();
+                        if (isset($deps['group']) && $groupname) {
+                            if (!isset($deps['group'][0])) {
+                                $deps['group'] = array($deps['group']);
+                            }
+                            $found = false;
+                            foreach ($deps['group'] as $group) {
+                                if ($group['attribs']['name'] == $groupname) {
+                                    $found = true;
+                                    break;
+                                }
+                            }
+                            if ($found) {
+                                unset($group['attribs']);
+                                foreach ($group as $type => $dep) {
+                                    if (!isset($dep[0])) {
+                                        if (PEAR::isError($e =
+                                              $depchecker->{"validate{$type}Dependency"}($dep,
+                                              false, $params))) {
+                                            $failed = true;
+                                            if (!isset($this->_options['soft'])) {
+                                                $this->log(0, $e->getMessage());
+                                            }
+                                        } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                            if (!isset($this->_options['soft'])) {
+                                                $this->log(0, $e[0]);
+                                            }
+                                        }
+                                    } else {
+                                        foreach ($dep as $d) {
+                                            if (PEAR::isError($e =
+                                                  $depchecker->{"validate{$type}Dependency"}($d,
+                                                  false, $params))) {
+                                                $failed = true;
+                                                if (!isset($this->_options['soft'])) {
+                                                    $this->log(0, $e->getMessage());
+                                                }
+                                            } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                                if (!isset($this->_options['soft'])) {
+                                                    $this->log(0, $e[0]);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
                         }
                     } else {
-                        return $pkgfile;
+                        foreach ($deps as $dep) {
+                            if (PEAR::isError($e = $depchecker->validateDependency1($dep, $params))) {
+                                $failed = true;
+                                if (!isset($this->_options['soft'])) {
+                                    $this->log(0, $e->getMessage());
+                                }
+                            } elseif (is_array($e) && !$param->alreadyValidated()) {
+                                if (!isset($this->_options['soft'])) {
+                                    $this->log(0, $e[0]);
+                                }
+                            }
+                        }
                     }
-                } else {
-                    return $this->raiseError($file);
+                    $params[$i]->setValidated();
+                }
+                if ($failed) {
+                    $hasfailed = true;
+                    $params[$i] = false;
+                    $reset = true;
+                    $redo = true;
+                    $failed = false;
+                    PEAR_Downloader_Package::removeDuplicates($params);
+                    continue 2;
                 }
             }
-            $pkgfile = $file;
         }
-        // }}}
-        return $pkgfile;
+        PEAR::staticPopErrorHandling();
+        if ($hasfailed && (isset($this->_options['ignore-errors']) ||
+              isset($this->_options['nodeps']))) {
+            // this is probably not needed, but just in case
+            if (!isset($this->_options['soft'])) {
+                $this->log(0, 'WARNING: dependencies failed');
+            }
+        }
     }
-    // }}}
-    // {{{ getPackageDownloadUrl()
 
-    function getPackageDownloadUrl($package, $version = null)
+    /**
+     * Retrieve the directory that downloads will happen in
+     * @access private
+     * @return string
+     */
+    function getDownloadDir()
     {
-        if ($version) {
-            $package .= "-$version";
-        }
-        if ($this === null || $this->_config === null) {
-            $package = "http://pear.php.net/get/$package";
-        } else {
-            $package = "http://" . $this->_config->get('master_server') .
-                "/get/$package";
+        if (isset($this->_downloadDir)) {
+            return $this->_downloadDir;
         }
-        if (!extension_loaded("zlib")) {
-            $package .= '?uncompress=yes';
+        $downloaddir = $this->config->get('download_dir');
+        if (empty($downloaddir)) {
+            if (!class_exists('System')) {
+                require_once 'System.php';
+            }
+            if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
+                return $downloaddir;
+            }
+            $this->log(3, '+ tmp dir created at ' . $downloaddir);
         }
-        return $package;
+        return $this->_downloadDir = $downloaddir;
     }
 
-    // }}}
-    // {{{ extractDownloadFileName($pkgfile, &$version)
+    function setDownloadDir($dir)
+    {
+        $this->_downloadDir = $dir;
+    }
 
-    function extractDownloadFileName($pkgfile, &$version)
+    // }}}
+    // {{{ configSet()
+    function configSet($key, $value, $layer = 'user', $channel = false)
     {
-        if (@is_file($pkgfile)) {
-            return $pkgfile;
-        }
-        // regex defined in Common.php
-        if (preg_match(PEAR_COMMON_PACKAGE_DOWNLOAD_PREG, $pkgfile, $m)) {
-            $version = (isset($m[3])) ? $m[3] : null;
-            return $m[1];
+        $this->config->set($key, $value, $layer, $channel);
+        $this->_preferredState = $this->config->get('preferred_state', null, $channel);
+        if (!$this->_preferredState) {
+            // don't inadvertantly use a non-set preferred_state
+            $this->_preferredState = null;
         }
-        $version = null;
-        return $pkgfile;
     }
 
     // }}}
+    // {{{ setOptions()
+    function setOptions($options)
+    {
+        $this->_options = $options;
+    }
 
     // }}}
-    // {{{ getDownloadedPackages()
-
-    /**
-     * Retrieve a list of downloaded packages after a call to {@link download()}.
-     *
-     * Also resets the list of downloaded packages.
-     * @return array
-     */
-    function getDownloadedPackages()
+    // {{{ setOptions()
+    function getOptions()
     {
-        $ret = $this->_downloadedPackages;
-        $this->_downloadedPackages = array();
-        $this->_toDownload = array();
-        return $ret;
+        return $this->_options;
     }
 
     // }}}
-    // {{{ download()
 
     /**
-     * Download any files and their dependencies, if necessary
-     *
-     * BC-compatible method name
-     * @param array a mixed list of package names, local files, or package.xml
+     * For simpler unit-testing
+     * @param PEAR_Config
+     * @param int
+     * @param string
      */
-    function download($packages)
+    function &getPackagefileObject(&$c, $d, $t = false)
     {
-        return $this->doDownload($packages);
+        if (!class_exists('PEAR_PackageFile')) {
+            require_once 'PEAR/PackageFile.php';
+        }
+        $a = &new PEAR_PackageFile($c, $d, $t);
+        return $a;
     }
 
-    // }}}
-    // {{{ doDownload()
+    // {{{ _getPackageDownloadUrl()
 
     /**
-     * Download any files and their dependencies, if necessary
-     *
-     * @param array a mixed list of package names, local files, or package.xml
+     * @param array output of {@link parsePackageName()}
+     * @access private
      */
-    function doDownload($packages)
+    function _getPackageDownloadUrl($parr)
     {
-        $mywillinstall = array();
-        $state = $this->_preferredState;
-
-        // {{{ download files in this list if necessary
-        foreach($packages as $pkgfile) {
-            $need_download = false;
-            if (!is_file($pkgfile)) {
-                if (preg_match('#^(http|ftp)://#', $pkgfile)) {
-                    $need_download = true;
-                }
-                $pkgfile = $this->_downloadNonFile($pkgfile);
-                if (PEAR::isError($pkgfile)) {
-                    return $pkgfile;
-                }
-                if ($pkgfile === false) {
-                    continue;
+        $curchannel = $this->config->get('default_channel');
+        $this->configSet('default_channel', $parr['channel']);
+        // getDownloadURL returns an array.  On error, it only contains information
+        // on the latest release as array(version, info).  On success it contains
+        // array(version, info, download url string)
+        $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');
+        if (!$this->_registry->channelExists($parr['channel'])) {
+            do {
+                if ($this->config->get('auto_discover')) {
+                    if ($this->discover($parr['channel'])) {
+                        break;
+                    }
                 }
-            } // end is_file()
-
-            $tempinfo = $this->infoFromAny($pkgfile);
-            if ($need_download) {
-                $this->_toDownload[] = $tempinfo['package'];
+                return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);
+            } while (false);
+        }
+        $chan = &$this->_registry->getChannel($parr['channel']);
+        $version = $this->_registry->packageInfo($parr['package'], 'version',
+            $parr['channel']);
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', $this->_options);
+            if (!isset($parr['version']) && !isset($parr['state']) && $version
+                  && !isset($this->_options['downloadonly'])) {
+                $url = $rest->getDownloadURL($base, $parr, $state, $version);
+            } else {
+                $url = $rest->getDownloadURL($base, $parr, $state, false);
             }
-            if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
-                // ignore dependencies if there are any errors
-                if (!PEAR::isError($tempinfo)) {
-                    $mywillinstall[strtolower($tempinfo['package'])] = @$tempinfo['release_deps'];
-                }
+            if (PEAR::isError($url)) {
+                return $url;
             }
-            $this->_downloadedPackages[] = array('pkg' => $tempinfo['package'],
-                                       'file' => $pkgfile, 'info' => $tempinfo);
-        } // end foreach($packages)
-        // }}}
-
-        // {{{ extract dependencies from downloaded files and then download
-        // them if necessary
-        if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
-            $deppackages = array();
-            foreach ($mywillinstall as $package => $alldeps) {
-                if (!is_array($alldeps)) {
-                    // there are no dependencies
-                    continue;
+            if ($parr['channel'] != $curchannel) {
+                $this->configSet('default_channel', $curchannel);
+            }
+            if (!is_array($url)) {
+                return $url;
+            }
+            $url['raw'] = false; // no checking is necessary for REST
+            if (!is_array($url['info'])) {
+                return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
+                    'this should never happen');
+            }
+            if (isset($url['info']['required']) || $url['compatible']) {
+                require_once 'PEAR/PackageFile/v2.php';
+                $pf = new PEAR_PackageFile_v2;
+                $pf->setRawChannel($parr['channel']);
+                if ($url['compatible']) {
+                    $pf->setRawCompatible($url['compatible']);
                 }
-                $fail = false;
-                foreach ($alldeps as $info) {
-                    if ($info['type'] != 'pkg') {
-                        continue;
-                    }
-                    $ret = $this->_processDependency($package, $info, $mywillinstall);
-                    if ($ret === false) {
-                        continue;
-                    }
-                    if ($ret === 0) {
-                        $fail = true;
-                        continue;
-                    }
-                    if (PEAR::isError($ret)) {
-                        return $ret;
-                    }
-                    $deppackages[] = $ret;
-                } // foreach($alldeps
-                if ($fail) {
-                    $deppackages = array();
+            } else {
+                require_once 'PEAR/PackageFile/v1.php';
+                $pf = new PEAR_PackageFile_v1;
+            }
+            $pf->setRawPackage($url['package']);
+            $pf->setDeps($url['info']);
+            $pf->setRawState($url['stability']);
+            $url['info'] = &$pf;
+            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
+                $ext = '.tar';
+            } else {
+                $ext = '.tgz';
+            }
+            if (is_array($url)) {
+                if (isset($url['url'])) {
+                    $url['url'] .= $ext;
                 }
             }
-
-            if (count($deppackages)) {
-                $this->doDownload($deppackages);
+            return $url;
+        } elseif ($chan->supports('xmlrpc', 'package.getDownloadURL', false, '1.1')) {
+            // don't install with the old version information unless we're doing a plain
+            // vanilla simple installation.  If the user says to install a particular
+            // version or state, ignore the current installed version
+            if (!isset($parr['version']) && !isset($parr['state']) && $version
+                  && !isset($this->_options['downloadonly'])) {
+                $url = $this->_remote->call('package.getDownloadURL', $parr, $state, $version);
+            } else {
+                $url = $this->_remote->call('package.getDownloadURL', $parr, $state);
             }
-        } // }}} if --alldeps or --onlyreqdeps
-    }
-
-    // }}}
-    // {{{ _downloadNonFile($pkgfile)
-
-    /**
-     * @return false|PEAR_Error|string false if loop should be broken out of,
-     *                                 string if the file was downloaded,
-     *                                 PEAR_Error on exception
-     * @access private
-     */
-    function _downloadNonFile($pkgfile)
-    {
-        $origpkgfile = $pkgfile;
-        $state = null;
-        $pkgfile = $this->extractDownloadFileName($pkgfile, $version);
-        if (preg_match('#^(http|ftp)://#', $pkgfile)) {
-            return $this->_downloadFile($pkgfile, $version, $origpkgfile);
+        } else {
+            $url = $this->_remote->call('package.getDownloadURL', $parr, $state);
         }
-        if (!$this->validPackageName($pkgfile)) {
-            return $this->raiseError("Package name '$pkgfile' not valid");
+        if (PEAR::isError($url)) {
+            return $url;
         }
-        // ignore packages that are installed unless we are upgrading
-        $curinfo = $this->_registry->packageInfo($pkgfile);
-        if ($this->_registry->packageExists($pkgfile)
-              && empty($this->_options['upgrade']) && empty($this->_options['force'])) {
-            $this->log(0, "Package '{$curinfo['package']}' already installed, skipping");
-            return false;
+        if ($parr['channel'] != $curchannel) {
+            $this->configSet('default_channel', $curchannel);
         }
-        if (in_array($pkgfile, $this->_toDownload)) {
-            return false;
+        if (isset($url['__PEAR_ERROR_CLASS__'])) {
+            return PEAR::raiseError($url['message']);
         }
-        $releases = $this->_remote->call('package.info', $pkgfile, 'releases', true);
-        if (!count($releases)) {
-            return $this->raiseError("No releases found for package '$pkgfile'");
-        }
-        // Want a specific version/state
-        if ($version !== null) {
-            // Passed Foo-1.2
-            if ($this->validPackageVersion($version)) {
-                if (!isset($releases[$version])) {
-                    return $this->raiseError("No release with version '$version' found for '$pkgfile'");
-                }
-            // Passed Foo-alpha
-            } elseif (in_array($version, $this->getReleaseStates())) {
-                $state = $version;
-                $version = 0;
-                foreach ($releases as $ver => $inf) {
-                    if ($inf['state'] == $state && version_compare("$version", "$ver") < 0) {
-                        $version = $ver;
-                        break;
-                    }
-                }
-                if ($version == 0) {
-                    return $this->raiseError("No release with state '$state' found for '$pkgfile'");
-                }
-            // invalid suffix passed
-            } else {
-                return $this->raiseError("Invalid suffix '-$version', be sure to pass a valid PEAR ".
-                                         "version number or release state");
-            }
-        // Guess what to download
-        } else {
-            $states = $this->betterStates($this->_preferredState, true);
-            $possible = false;
-            $version = 0;
-            $higher_version = 0;
-            $prev_hi_ver = 0;
-            foreach ($releases as $ver => $inf) {
-                if (in_array($inf['state'], $states) && version_compare("$version", "$ver") < 0) {
-                    $version = $ver;
-                    break;
-                } else {
-                    $ver = (string)$ver;
-                    if (version_compare($prev_hi_ver, $ver) < 0) {
-                        $prev_hi_ver = $higher_version = $ver;
-                    }
-				}
-            }
-            if ($version === 0 && !isset($this->_options['force'])) {
-                return $this->raiseError('No release with state equal to: \'' . implode(', ', $states) .
-                                         "' found for '$pkgfile'");
-            } elseif ($version === 0) {
-                $this->log(0, "Warning: $pkgfile is state '" . $releases[$higher_version]['state'] . "' which is less stable " .
-                              "than state '$this->_preferredState'");
+        if (!is_array($url)) {
+            return $url;
+        }
+        $url['raw'] = $url['info'];
+        if (isset($this->_options['downloadonly'])) {
+            $pkg = &$this->getPackagefileObject($this->config, $this->debug);
+        } else {
+            $pkg = &$this->getPackagefileObject($this->config, $this->debug,
+                $this->getDownloadDir());
+        }
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $pinfo = &$pkg->fromXmlString($url['info'], PEAR_VALIDATE_DOWNLOADING, 'remote');
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($pinfo)) {
+            if (!isset($this->_options['soft'])) {
+                $this->log(0, $pinfo->getMessage());
             }
+            return PEAR::raiseError('Remote package.xml is not valid - this should never happen');
+        }
+        $url['info'] = &$pinfo;
+        if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
+            $ext = '.tar';
+        } else {
+            $ext = '.tgz';
         }
-        // Check if we haven't already the version
-        if (empty($this->_options['force']) && !is_null($curinfo)) {
-            if ($curinfo['version'] == $version) {
-                $this->log(0, "Package '{$curinfo['package']}-{$curinfo['version']}' already installed, skipping");
-                return false;
-            } elseif (version_compare("$version", "{$curinfo['version']}") < 0) {
-                $this->log(0, "Package '{$curinfo['package']}' version '{$curinfo['version']}' " .
-                              " is installed and {$curinfo['version']} is > requested '$version', skipping");
-                return false;
+        if (is_array($url)) {
+            if (isset($url['url'])) {
+                $url['url'] .= $ext;
             }
         }
-        $this->_toDownload[] = $pkgfile;
-        return $this->_downloadFile($pkgfile, $version, $origpkgfile, $state);
+        return $url;
     }
-
     // }}}
-    // {{{ _processDependency($package, $info, $mywillinstall)
+    // {{{ getDepPackageDownloadUrl()
 
     /**
-     * Process a dependency, download if necessary
-     * @param array dependency information from PEAR_Remote call
-     * @param array packages that will be installed in this iteration
-     * @return false|string|PEAR_Error
+     * @param array dependency array
      * @access private
-     * @todo Add test for relation 'lt'/'le' -> make sure that the dependency requested is
-     *       in fact lower than the required value.  This will be very important for BC dependencies
      */
-    function _processDependency($package, $info, $mywillinstall)
+    function _getDepPackageDownloadUrl($dep, $parr)
     {
-        $state = $this->_preferredState;
-        if (!isset($this->_options['alldeps']) && isset($info['optional']) &&
-              $info['optional'] == 'yes') {
-            // skip optional deps
-            $this->log(0, "skipping Package '$package' optional dependency '$info[name]'");
-            return false;
+        $xsdversion = isset($dep['rel']) ? '1.0' : '2.0';
+        $curchannel = $this->config->get('default_channel');
+        if (isset($dep['channel'])) {
+            $remotechannel = $dep['channel'];
+        } else {
+            $remotechannel = 'pear.php.net';
         }
-        // {{{ get releases
-        $releases = $this->_remote->call('package.info', $info['name'], 'releases', true);
-        if (PEAR::isError($releases)) {
-            return $releases;
-        }
-        if (!count($releases)) {
-            if (!isset($this->_installed[strtolower($info['name'])])) {
-                $this->pushError("Package '$package' dependency '$info[name]' ".
-                            "has no releases");
-            }
-            return false;
+        if (!$this->_registry->channelExists($remotechannel)) {
+            do {
+                if ($this->config->get('auto_discover')) {
+                    if ($this->discover($remotechannel)) {
+                        break;
+                    }
+                }
+                return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);
+            } while (false);
         }
-        $found = false;
-        $save = $releases;
-        while(count($releases) && !$found) {
-            if (!empty($state) && $state != 'any') {
-                list($release_version, $release) = each($releases);
-                if ($state != $release['state'] &&
-                    !in_array($release['state'], $this->betterStates($state)))
-                {
-                    // drop this release - it ain't stable enough
-                    array_shift($releases);
-                } else {
-                    $found = true;
+        $this->configSet('default_channel', $remotechannel);
+        $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');
+        if (isset($parr['state']) && isset($parr['version'])) {
+            unset($parr['state']);
+        }
+        $chan = &$this->_registry->getChannel($remotechannel);
+        $version = $this->_registry->packageInfo($dep['name'], 'version',
+            $remotechannel);
+        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
+              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+            $rest = &$this->config->getREST('1.0', $this->_options);
+            $url = $rest->getDepDownloadURL($base, $xsdversion, $dep, $parr,
+                    $state, $version);
+            if (PEAR::isError($url)) {
+                return $url;
+            }
+            if ($parr['channel'] != $curchannel) {
+                $this->configSet('default_channel', $curchannel);
+            }
+            if (!is_array($url)) {
+                return $url;
+            }
+            $url['raw'] = false; // no checking is necessary for REST
+            if (!is_array($url['info'])) {
+                return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
+                    'this should never happen');
+            }
+            if (isset($url['info']['required'])) {
+                if (!class_exists('PEAR_PackageFile_v2')) {
+                    require_once 'PEAR/PackageFile/v2.php';
                 }
+                $pf = new PEAR_PackageFile_v2;
+                $pf->setRawChannel($remotechannel);
             } else {
-                $found = true;
+                if (!class_exists('PEAR_PackageFile_v1')) {
+                    require_once 'PEAR/PackageFile/v1.php';
+                }
+                $pf = new PEAR_PackageFile_v1;
             }
-        }
-        if (!count($releases) && !$found) {
-            $get = array();
-            foreach($save as $release) {
-                $get = array_merge($get,
-                    $this->betterStates($release['state'], true));
+            $pf->setRawPackage($url['package']);
+            $pf->setDeps($url['info']);
+            $pf->setRawState($url['stability']);
+            $url['info'] = &$pf;
+            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
+                $ext = '.tar';
+            } else {
+                $ext = '.tgz';
+            }
+            if (is_array($url)) {
+                if (isset($url['url'])) {
+                    $url['url'] .= $ext;
+                }
             }
-            $savestate = array_shift($get);
-            $this->pushError( "Release for '$package' dependency '$info[name]' " .
-                "has state '$savestate', requires '$state'");
-            return 0;
+            return $url;
+        } elseif ($chan->supports('xmlrpc', 'package.getDepDownloadURL', false, '1.1')) {
+            if ($version) {
+                $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr,
+                    $state, $version);
+            } else {
+                $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr,
+                    $state);
+            }
+        } else {
+            $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr, $state);
         }
-        if (in_array(strtolower($info['name']), $this->_toDownload) ||
-              isset($mywillinstall[strtolower($info['name'])])) {
-            // skip upgrade check for packages we will install
-            return false;
+        if ($parr['channel'] != $curchannel) {
+            $this->configSet('default_channel', $curchannel);
+        }
+        if (!is_array($url)) {
+            return $url;
         }
-        if (!isset($this->_installed[strtolower($info['name'])])) {
-            // check to see if we can install the specific version required
-            if ($info['rel'] == 'eq') {
-                return $info['name'] . '-' . $info['version'];
+        if (isset($url['__PEAR_ERROR_CLASS__'])) {
+            return PEAR::raiseError($url['message']);
+        }
+        $url['raw'] = $url['info'];
+        $pkg = &$this->getPackagefileObject($this->config, $this->debug);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $pinfo = &$pkg->fromXmlString($url['info'], PEAR_VALIDATE_DOWNLOADING, 'remote');
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($pinfo)) {
+            if (!isset($this->_options['soft'])) {
+                $this->log(0, $pinfo->getMessage());
             }
-            // skip upgrade check for packages we don't have installed
-            return $info['name'];
+            return PEAR::raiseError('Remote package.xml is not valid - this should never happen');
         }
-        // }}}
-
-        // {{{ see if a dependency must be upgraded
-        $inst_version = $this->_registry->packageInfo($info['name'], 'version');
-        if (!isset($info['version'])) {
-            // this is a rel='has' dependency, check against latest
-            if (version_compare($release_version, $inst_version, 'le')) {
-                return false;
+        $url['info'] = &$pinfo;
+        if (is_array($url)) {
+            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
+                $ext = '.tar';
             } else {
-                return $info['name'];
+                $ext = '.tgz';
+            }
+            if (isset($url['url'])) {
+                $url['url'] .= $ext;
             }
         }
-        if (version_compare($info['version'], $inst_version, 'le')) {
-            // installed version is up-to-date
-            return false;
+        return $url;
+    }
+    // }}}
+    // {{{ getPackageDownloadUrl()
+
+    /**
+     * @deprecated in favor of _getPackageDownloadUrl
+     */
+    function getPackageDownloadUrl($package, $version = null, $channel = false)
+    {
+        if ($version) {
+            $package .= "-$version";
+        }
+        if ($this === null || $this->_registry === null) {
+            $package = "http://pear.php.net/get/$package";
+        } else {
+            $chan = $this->_registry->getChannel($channel);
+            $package = "http://" . $chan->getServer() . "/get/$package";
+        }
+        if (!extension_loaded("zlib")) {
+            $package .= '?uncompress=yes';
         }
-        return $info['name'];
+        return $package;
+    }
+
+    // }}}
+    // {{{ getDownloadedPackages()
+
+    /**
+     * Retrieve a list of downloaded packages after a call to {@link download()}.
+     *
+     * Also resets the list of downloaded packages.
+     * @return array
+     */
+    function getDownloadedPackages()
+    {
+        $ret = $this->_downloadedPackages;
+        $this->_downloadedPackages = array();
+        $this->_toDownload = array();
+        return $ret;
     }
 
     // }}}
@@ -640,7 +1013,12 @@
     {
         if (strlen($prepend) > 0) {
             if (OS_WINDOWS && preg_match('/^[a-z]:/i', $path)) {
-                $path = $prepend . substr($path, 2);
+                if (preg_match('/^[a-z]:/i', $prepend)) {
+                    $prepend = substr($prepend, 2);
+                } elseif ($prepend{0} != '\\') {
+                    $prepend = "\\$prepend";
+                }
+                $path = substr($path, 0, 2) . $prepend . substr($path, 2);
             } else {
                 $path = $prepend . $path;
             }
@@ -674,6 +1052,432 @@
     }
 
     // }}}
+
+    /**
+     * for BC
+     */
+    function sortPkgDeps(&$packages, $uninstall = false)
+    {
+        $uninstall ? 
+            $this->sortPackagesForUninstall($packages) :
+            $this->sortPackagesForInstall($packages);
+    }
+
+    function _getDepTreeDP($package, $packages, &$deps, &$checked)
+    {
+        $pf = $package->getPackageFile();
+        $checked[strtolower($package->getChannel())][strtolower($package->getPackage())]
+            = true;
+        $pdeps = $pf->getDeps(true);
+        if (!$pdeps) {
+            return;
+        }
+        if ($pf->getPackagexmlVersion() == '1.0') {
+            foreach ($pdeps as $dep) {
+                if ($dep['type'] != 'pkg') {
+                    continue;
+                }
+                $deps['pear.php.net'][strtolower($dep['name'])] = true;
+                foreach ($packages as $p) {
+                    $dep['channel'] = 'pear.php.net';
+                    $dep['package'] = $dep['name'];
+                    if ($p->isEqual($dep)) {
+                        if (!isset($checked[strtolower($p->getChannel())]
+                              [strtolower($p->getPackage())])) {
+                            // add the dependency's dependencies to the tree
+                            $this->_getDepTreeDP($p, $packages, $deps, $checked);
+                        }
+                    }
+                }
+            }
+        } else {
+            $tdeps = array();
+            if (isset($pdeps['required']['package'])) {
+                $t = $pdeps['required']['package'];
+                if (!isset($t[0])) {
+                    $t = array($t);
+                }
+                $tdeps = array_merge($tdeps, $t);
+            }
+            if (isset($pdeps['required']['subpackage'])) {
+                $t = $pdeps['required']['subpackage'];
+                if (!isset($t[0])) {
+                    $t = array($t);
+                }
+                $tdeps = array_merge($tdeps, $t);
+            }
+            if (isset($pdeps['optional']['package'])) {
+                $t = $pdeps['optional']['package'];
+                if (!isset($t[0])) {
+                    $t = array($t);
+                }
+                $tdeps = array_merge($tdeps, $t);
+            }
+            if (isset($pdeps['optional']['subpackage'])) {
+                $t = $pdeps['optional']['subpackage'];
+                if (!isset($t[0])) {
+                    $t = array($t);
+                }
+                $tdeps = array_merge($tdeps, $t);
+            }
+            if (isset($pdeps['group'])) {
+                if (!isset($pdeps['group'][0])) {
+                    $pdeps['group'] = array($pdeps['group']);
+                }
+                foreach ($pdeps['group'] as $group) {
+                    if (isset($group['package'])) {
+                        $t = $group['package'];
+                        if (!isset($t[0])) {
+                            $t = array($t);
+                        }
+                        $tdeps = array_merge($tdeps, $t);
+                    }
+                    if (isset($group['subpackage'])) {
+                        $t = $group['subpackage'];
+                        if (!isset($t[0])) {
+                            $t = array($t);
+                        }
+                        $tdeps = array_merge($tdeps, $t);
+                    }
+                }
+            }
+            foreach ($tdeps as $dep) {
+                if (!isset($dep['channel'])) {
+                    $depchannel = '__uri';
+                } else {
+                    $depchannel = $dep['channel'];
+                }
+                $deps[$depchannel][strtolower($dep['name'])] = true;
+                foreach ($packages as $p) {
+                    $dep['channel'] = $depchannel;
+                    $dep['package'] = $dep['name'];
+                    if ($p->isEqual($dep)) {
+                        if (!isset($checked[strtolower($p->getChannel())]
+                              [strtolower($p->getPackage())])) {
+                            // add the dependency's dependencies to the tree
+                            $this->_getDepTreeDP($p, $packages, $deps, $checked);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Sort a list of arrays of array(downloaded packagefilename) by dependency.
+     *
+     * It also removes duplicate dependencies
+     * @param array an array of downloaded PEAR_Downloader_Packages
+     * @return array array of array(packagefilename, package.xml contents)
+     */
+    function sortPackagesForInstall(&$packages)
+    {
+        foreach ($packages as $i => $package) {
+            $checked = $deps = array();
+            $this->_getDepTreeDP($packages[$i], $packages, $deps, $checked);
+            $this->_depTree[$package->getChannel()][$package->getPackage()] = $deps;
+        }
+        usort($packages, array(&$this, '_sortInstall'));
+    }
+
+    function _dependsOn($a, $b)
+    {
+        return $this->_checkDepTree(strtolower($a->getChannel()), strtolower($a->getPackage()),
+            $b);
+    }
+
+    function _checkDepTree($channel, $package, $b, $checked = array())
+    {
+        $checked[$channel][$package] = true;
+        if (!isset($this->_depTree[$channel][$package])) {
+            return false;
+        }
+        if (isset($this->_depTree[$channel][$package][strtolower($b->getChannel())]
+              [strtolower($b->getPackage())])) {
+            return true;
+        }
+        foreach ($this->_depTree[$channel][$package] as $ch => $packages) {
+            foreach ($packages as $pa => $true) {
+                if ($this->_checkDepTree($ch, $pa, $b, $checked)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    function _sortInstall($a, $b)
+    {
+        if (!$a->getDeps() && !$b->getDeps()) {
+            return 0; // neither package has dependencies, order is insignificant
+        }
+        if ($a->getDeps() && !$b->getDeps()) {
+            return 1; // $a must be installed after $b because $a has dependencies
+        }
+        if (!$a->getDeps() && $b->getDeps()) {
+            return -1; // $b must be installed after $a because $b has dependencies
+        }
+        // both packages have dependencies
+        if ($this->_dependsOn($a, $b)) {
+            return 1;
+        }
+        if ($this->_dependsOn($b, $a)) {
+            return -1;
+        }
+        return 0;
+    }
+
+    /**
+     * Download a file through HTTP.  Considers suggested file name in
+     * Content-disposition: header and can run a callback function for
+     * different events.  The callback will be called with two
+     * parameters: the callback type, and parameters.  The implemented
+     * callback types are:
+     *
+     *  'setup'       called at the very beginning, parameter is a UI object
+     *                that should be used for all output
+     *  'message'     the parameter is a string with an informational message
+     *  'saveas'      may be used to save with a different file name, the
+     *                parameter is the filename that is about to be used.
+     *                If a 'saveas' callback returns a non-empty string,
+     *                that file name will be used as the filename instead.
+     *                Note that $save_dir will not be affected by this, only
+     *                the basename of the file.
+     *  'start'       download is starting, parameter is number of bytes
+     *                that are expected, or -1 if unknown
+     *  'bytesread'   parameter is the number of bytes read so far
+     *  'done'        download is complete, parameter is the total number
+     *                of bytes read
+     *  'connfailed'  if the TCP/SSL connection fails, this callback is called
+     *                with array(host,port,errno,errmsg)
+     *  'writefailed' if writing to disk fails, this callback is called
+     *                with array(destfile,errmsg)
+     *
+     * If an HTTP proxy has been configured (http_proxy PEAR_Config
+     * setting), the proxy will be used.
+     *
+     * @param string  $url       the URL to download
+     * @param object  $ui        PEAR_Frontend_* instance
+     * @param object  $config    PEAR_Config instance
+     * @param string  $save_dir  directory to save file in
+     * @param mixed   $callback  function/method to call for status
+     *                           updates
+     * @param false|string|array $lastmodified header values to check against for caching
+     *                           use false to return the header values from this download
+     * @param false|array $accept Accept headers to send
+     * @return string|array  Returns the full path of the downloaded file or a PEAR
+     *                       error on failure.  If the error is caused by
+     *                       socket-related errors, the error object will
+     *                       have the fsockopen error code available through
+     *                       getCode().  If caching is requested, then return the header
+     *                       values.
+     *
+     * @access public
+     */
+    function downloadHttp($url, &$ui, $save_dir = '.', $callback = null, $lastmodified = null,
+                          $accept = false)
+    {
+        static $redirect = 0;
+        // allways reset , so we are clean case of error
+        $wasredirect = $redirect;
+        $redirect = 0;
+        if ($callback) {
+            call_user_func($callback, 'setup', array(&$ui));
+        }
+        $info = parse_url($url);
+        if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
+            return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
+        }
+        if (!isset($info['host'])) {
+            return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
+        } else {
+            $host = @$info['host'];
+            $port = @$info['port'];
+            $path = @$info['path'];
+        }
+        if (isset($this)) {
+            $config = &$this->config;
+        } else {
+            $config = &PEAR_Config::singleton();
+        }
+        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
+        if ($config->get('http_proxy')&& 
+              $proxy = parse_url($config->get('http_proxy'))) {
+            $proxy_host = @$proxy['host'];
+            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
+                $proxy_host = 'ssl://' . $proxy_host;
+            }
+            $proxy_port = @$proxy['port'];
+            $proxy_user = @$proxy['user'];
+            $proxy_pass = @$proxy['pass'];
+
+            if ($proxy_port == '') {
+                $proxy_port = 8080;
+            }
+            if ($callback) {
+                call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
+            }
+        }
+        if (empty($port)) {
+            if (isset($info['scheme']) && $info['scheme'] == 'https') {
+                $port = 443;
+            } else {
+                $port = 80;
+            }
+        }
+        if ($proxy_host != '') {
+            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
+            if (!$fp) {
+                if ($callback) {
+                    call_user_func($callback, 'connfailed', array($proxy_host, $proxy_port,
+                                                                  $errno, $errstr));
+                }
+                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
+            }
+            if ($lastmodified === false || $lastmodified) {
+                $request = "GET $url HTTP/1.1\r\n";
+            } else {
+                $request = "GET $url HTTP/1.0\r\n";
+            }
+        } else {
+            if (isset($info['scheme']) && $info['scheme'] == 'https') {
+                $host = 'ssl://' . $host;
+            }
+            $fp = @fsockopen($host, $port, $errno, $errstr);
+            if (!$fp) {
+                if ($callback) {
+                    call_user_func($callback, 'connfailed', array($host, $port,
+                                                                  $errno, $errstr));
+                }
+                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
+            }
+            if ($lastmodified === false || $lastmodified) {
+                $request = "GET $path HTTP/1.1\r\n";
+            } else {
+                $request = "GET $path HTTP/1.0\r\n";
+            }
+        }
+        $ifmodifiedsince = '';
+        if (is_array($lastmodified)) {
+            if (isset($lastmodified['Last-Modified'])) {
+                $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
+            }
+            if (isset($lastmodified['ETag'])) {
+                $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
+            }
+        } else {
+            $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
+        }
+        $request .= "Host: $host:$port\r\n" . $ifmodifiedsince .
+            "User-Agent: PEAR/1.4.6/PHP/" . PHP_VERSION . "\r\n";
+        if (isset($this)) { // only pass in authentication for non-static calls
+            $username = $config->get('username');
+            $password = $config->get('password');
+            if ($username && $password) {
+                $tmp = base64_encode("$username:$password");
+                $request .= "Authorization: Basic $tmp\r\n";
+            }
+        }
+        if ($proxy_host != '' && $proxy_user != '') {
+            $request .= 'Proxy-Authorization: Basic ' .
+                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
+        }
+        if ($accept) {
+            $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
+        }
+        $request .= "Connection: close\r\n";
+        $request .= "\r\n";
+        fwrite($fp, $request);
+        $headers = array();
+        $reply = 0;
+        while (trim($line = fgets($fp, 1024))) {
+            if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
+                $headers[strtolower($matches[1])] = trim($matches[2]);
+            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
+                $reply = (int) $matches[1];
+                if ($reply == 304 && ($lastmodified || ($lastmodified === false))) {
+                    return false;
+                }
+                if (! in_array($reply, array(200, 301, 302, 303, 305, 307))) {
+                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
+                }
+            }
+        }
+        if ($reply != 200) {
+            if (isset($headers['location'])) {
+                if ($wasredirect < 5) {
+                    $redirect = $wasredirect + 1;
+                    return $this->downloadHttp($headers['location'],
+                            $ui, $save_dir, $callback, $lastmodified, $accept);
+                } else {
+                    return PEAR::raiseError("File http://$host:$port$path not valid (redirection looped more than 5 times)");
+                }
+            } else {
+                return PEAR::raiseError("File http://$host:$port$path not valid (redirected but no location)");
+            }
+        }
+        if (isset($headers['content-disposition']) &&
+            preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
+            $save_as = basename($matches[1]);
+        } else {
+            $save_as = basename($url);
+        }
+        if ($callback) {
+            $tmp = call_user_func($callback, 'saveas', $save_as);
+            if ($tmp) {
+                $save_as = $tmp;
+            }
+        }
+        $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
+        if (!$wp = @fopen($dest_file, 'wb')) {
+            fclose($fp);
+            if ($callback) {
+                call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
+            }
+            return PEAR::raiseError("could not open $dest_file for writing");
+        }
+        if (isset($headers['content-length'])) {
+            $length = $headers['content-length'];
+        } else {
+            $length = -1;
+        }
+        $bytes = 0;
+        if ($callback) {
+            call_user_func($callback, 'start', array(basename($dest_file), $length));
+        }
+        while ($data = @fread($fp, 1024)) {
+            $bytes += strlen($data);
+            if ($callback) {
+                call_user_func($callback, 'bytesread', $bytes);
+            }
+            if (!@fwrite($wp, $data)) {
+                fclose($fp);
+                if ($callback) {
+                    call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
+                }
+                return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
+            }
+        }
+        fclose($fp);
+        fclose($wp);
+        if ($callback) {
+            call_user_func($callback, 'done', $bytes);
+        }
+        if ($lastmodified === false || $lastmodified) {
+            if (isset($headers['etag'])) {
+                $lastmodified = array('ETag' => $headers['etag']);
+            }
+            if (isset($headers['last-modified'])) {
+                if (is_array($lastmodified)) {
+                    $lastmodified['Last-Modified'] = $headers['last-modified'];
+                } else {
+                    $lastmodified = $headers['last-modified'];
+                }
+            }
+            return array($dest_file, $lastmodified, $headers);
+        }
+        return $dest_file;
+    }
 }
 // }}}
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/ErrorStack.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/ErrorStack.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/ErrorStack.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/ErrorStack.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,24 +1,4 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Gregory Beaver <cellog@php.net>                              |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: ErrorStack.php,v 1.7.2.4 2004/10/26 19:06:43 cellog Exp $
-
 /**
  * Error Stack Implementation
  * 
@@ -38,11 +18,13 @@
  *
  * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
  * still be done quite handily in an error callback or by manipulating the returned array
- * @author Greg Beaver <cellog@php.net>
- * @version PEAR1.3.2 (beta)
- * @package PEAR_ErrorStack
- * @category Debugging
- * @license http://www.php.net/license/3_0.txt PHP License v3.0
+ * @category   Debugging
+ * @package    PEAR_ErrorStack
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  2004-2006 Greg Beaver
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: ErrorStack.php,v 1.22 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
  */
 
 /**
@@ -122,6 +104,10 @@
  * If this is returned, then the error is completely ignored.
  */
 define('PEAR_ERRORSTACK_IGNORE', 4);
+/**
+ * If this is returned, then the error is logged and die() is called.
+ */
+define('PEAR_ERRORSTACK_DIE', 5);
 /**#@-*/
 
 /**
@@ -145,9 +131,14 @@
  * // local error stack
  * $local_stack = new PEAR_ErrorStack('MyPackage');
  * </code>
- * @copyright 2004 Gregory Beaver
- * @package PEAR_ErrorStack
- * @license http://www.php.net/license/3_0.txt PHP License
+ * @author     Greg Beaver <cellog@php.net>
+ * @version    1.4.6
+ * @package    PEAR_ErrorStack
+ * @category   Debugging
+ * @copyright  2004-2006 Greg Beaver
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: ErrorStack.php,v 1.22 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
  */
 class PEAR_ErrorStack {
     /**
@@ -277,8 +268,10 @@
                 'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
                 false, $trace);
         }
-        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
-            &new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
+        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
+            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
+
+        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
     }
 
     /**
@@ -308,7 +301,11 @@
      */
     function setDefaultLogger(&$log)
     {
-        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+        } elseif (is_callable($log)) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+	}
     }
     
     /**
@@ -317,7 +314,11 @@
      */
     function setLogger(&$log)
     {
-        $this->_logger = &$log;
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $this->_logger = &$log;
+        } elseif (is_callable($log)) {
+            $this->_logger = &$log;
+        }
     }
     
     /**
@@ -526,17 +527,18 @@
                 'message' => $msg,
                );
 
+        if ($repackage) {
+            $err['repackage'] = $repackage;
+        }
+
         // set up the error message, if necessary
         if ($this->_msgCallback) {
             $msg = call_user_func_array($this->_msgCallback,
                                         array(&$this, $err));
             $err['message'] = $msg;
         }        
-        
-        if ($repackage) {
-            $err['repackage'] = $repackage;
-        }
         $push = $log = true;
+        $die = false;
         // try the overriding callback first
         $callback = $this->staticPopCallback();
         if ($callback) {
@@ -565,6 +567,9 @@
             	case PEAR_ERRORSTACK_LOG: 
             		$push = false;
         		break;
+            	case PEAR_ERRORSTACK_DIE: 
+            		$die = true;
+        		break;
                 // anything else returned has the same effect as pushandlog
             }
         }
@@ -577,6 +582,9 @@
                 $this->_log($err);
             }
         }
+        if ($die) {
+            die();
+        }
         if ($this->_compat && $push) {
             return $this->raiseError($msg, $code, null, null, $err);
         }
@@ -627,7 +635,15 @@
      * @param array $levels Error level => Log constant map
      * @access protected
      */
-    function _log($err, $levels = array(
+    function _log($err)
+    {
+        if ($this->_logger) {
+            $logger = &$this->_logger;
+        } else {
+            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
+        }
+        if (is_a($logger, 'Log')) {
+            $levels = array(
                 'exception' => PEAR_LOG_CRIT,
                 'alert' => PEAR_LOG_ALERT,
                 'critical' => PEAR_LOG_CRIT,
@@ -635,17 +651,15 @@
                 'warning' => PEAR_LOG_WARNING,
                 'notice' => PEAR_LOG_NOTICE,
                 'info' => PEAR_LOG_INFO,
-                'debug' => PEAR_LOG_DEBUG))
-    {
-        if (isset($levels[$err['level']])) {
-            $level = $levels[$err['level']];
-        } else {
-            $level = PEAR_LOG_INFO;
-        }
-        if ($this->_logger) {
-            $this->_logger->log($err['message'], $level, $err);
-        } else {
-            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']->log($err['message'], $level, $err);
+                'debug' => PEAR_LOG_DEBUG);
+            if (isset($levels[$err['level']])) {
+                $level = $levels[$err['level']];
+            } else {
+                $level = PEAR_LOG_INFO;
+            }
+            $logger->log($err['message'], $level, $err);
+        } else { // support non-standard logs
+            call_user_func($logger, $err);
         }
     }
 
@@ -750,7 +764,8 @@
      * @static
      * @return array 
      */
-    function staticGetErrors($purge = false, $level = false, $merge = false, $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
+    function staticGetErrors($purge = false, $level = false, $merge = false,
+                             $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
     {
         $ret = array();
         if (!is_callable($sortfunc)) {
@@ -884,7 +899,7 @@
             $mainmsg = $stack->getErrorMessageTemplate($err['code']);
         }
         $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
-        if (count($err['params'])) {
+        if (is_array($err['params']) && count($err['params'])) {
             foreach ($err['params'] as $name => $val) {
                 if (is_array($val)) {
                     // @ is needed in case $val is a multi-dimensional array
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Exception.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Exception.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Exception.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Exception.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,34 +1,33 @@
 <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-// +----------------------------------------------------------------------+
-// | PEAR_Exception                                                       |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 2004 The PEAR Group                                    |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available at through the world-wide-web at                           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com>                             |
-// |          Hans Lellelid <hans@velum.net>                              |
-// |          Bertrand Mansion <bmansion@mamasam.com>                     |
-// |          Greg Beaver <cellog@php.net>                                |
-// +----------------------------------------------------------------------+
-//
-// $Id: Exception.php,v 1.4.2.1 2004/10/19 04:13:16 cellog Exp $
+/**
+ * PEAR_Exception
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Hans Lellelid <hans@velum.net>
+ * @author     Bertrand Mansion <bmansion@mamasam.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Exception.php,v 1.23 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.3.3
+ */
 
 
 /**
  * Base PEAR_Exception Class
  *
- * WARNING: This code should be considered stable, but the API is
- * subject to immediate and drastic change, so API stability is
- * at best alpha
- *
  * 1) Features:
  *
  * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
@@ -88,12 +87,17 @@
  *  }
  * </code>
  *
- * @since PHP 5
- * @package PEAR
- * @version $Revision: 1.4.2.1 $
- * @author Tomas V.V.Cox <cox@idecnet.com>
- * @author Hans Lellelid <hans@velum.net>
- * @author Bertrand Mansion <bmansion@mamasam.com>
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Hans Lellelid <hans@velum.net>
+ * @author     Bertrand Mansion <bmansion@mamasam.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.3.3
  *
  */
 class PEAR_Exception extends Exception
@@ -128,7 +132,7 @@
             }
             $this->cause = $p2;
         } else {
-        $code = null;
+            $code = null;
             $this->cause = null;
         }
         parent::__construct($message, $code);
@@ -224,17 +228,34 @@
     public function getCauseMessage(&$causes)
     {
         $trace = $this->getTraceSafe();
-        $causes[] = array('class'   => get_class($this),
-                          'message' => $this->message,
-                          'file'    => $trace[0]['file'],
-                          'line'    => $trace[0]['line']);
+        $cause = array('class'   => get_class($this),
+                       'message' => $this->message,
+                       'file' => 'unknown',
+                       'line' => 'unknown');
+        if (isset($trace[0])) {
+            if (isset($trace[0]['file'])) {
+                $cause['file'] = $trace[0]['file'];
+                $cause['line'] = $trace[0]['line'];
+            }
+        }
+        $causes[] = $cause;
         if ($this->cause instanceof PEAR_Exception) {
             $this->cause->getCauseMessage($causes);
-        }
-        if (is_array($this->cause)) {
+        } elseif ($this->cause instanceof Exception) {
+            $causes[] = array('class'   => get_class($cause),
+                           'message' => $cause->getMessage(),
+                           'file' => $cause->getFile(),
+                           'line' => $cause->getLine());
+
+        } elseif (is_array($this->cause)) {
             foreach ($this->cause as $cause) {
                 if ($cause instanceof PEAR_Exception) {
                     $cause->getCauseMessage($causes);
+                } elseif ($cause instanceof Exception) {
+                    $causes[] = array('class'   => get_class($cause),
+                                   'message' => $cause->getMessage(),
+                                   'file' => $cause->getFile(),
+                                   'line' => $cause->getLine());
                 } elseif (is_array($cause) && isset($cause['message'])) {
                     // PEAR_ErrorStack warning
                     $causes[] = array(
@@ -282,7 +303,7 @@
             return $this->toHtml();
         }
         return $this->toText();
-        }
+    }
 
     public function toHtml()
     {
@@ -327,7 +348,9 @@
             }
             $html .= '(' . implode(', ',$args) . ')'
                    . '</td>'
-                   . '<td>' . $v['file'] . ':' . $v['line'] . '</td></tr>' . "\n";
+                   . '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
+                   . ':' . (isset($v['line']) ? $v['line'] : 'unknown')
+                   . '</td></tr>' . "\n";
         }
         $html .= '<tr><td align="center">' . ($k+1) . '</td>'
                . '<td>{main}</td>'
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Frontend/CLI.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Frontend/CLI.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Frontend/CLI.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Frontend/CLI.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,27 +1,43 @@
 <?php
-/*
-  +----------------------------------------------------------------------+
-  | PHP Version 5                                                        |
-  +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2004 The PHP Group                                |
-  +----------------------------------------------------------------------+
-  | This source file is subject to version 3.0 of the PHP license,       |
-  | that is bundled with this package in the file LICENSE, and is        |
-  | available through the world-wide-web at the following url:           |
-  | http://www.php.net/license/3_0.txt.                                  |
-  | If you did not receive a copy of the PHP license and are unable to   |
-  | obtain it through the world-wide-web, please send a note to          |
-  | license@php.net so we can mail you a copy immediately.               |
-  +----------------------------------------------------------------------+
-  | Author: Stig Sther Bakken <ssb@php.net>                             |
-  +----------------------------------------------------------------------+
-
-  $Id: CLI.php,v 1.41 2004/02/17 05:49:16 ssb Exp $
-*/
-
-require_once "PEAR.php";
-
-class PEAR_Frontend_CLI extends PEAR
+/**
+ * PEAR_Frontend_CLI
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: CLI.php,v 1.57 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+/**
+ * base class
+ */
+require_once 'PEAR/Frontend.php';
+
+/**
+ * Command-line Frontend for the PEAR Installer
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+class PEAR_Frontend_CLI extends PEAR_Frontend
 {
     // {{{ properties
 
@@ -110,6 +126,28 @@
     function displayFatalError($eobj)
     {
         $this->displayError($eobj);
+        if (class_exists('PEAR_Config')) {
+            $config = &PEAR_Config::singleton();
+            if ($config->get('verbose') > 5) {
+                if (function_exists('debug_print_backtrace')) {
+                    debug_print_backtrace();
+                } elseif (function_exists('debug_backtrace')) {
+                    $trace = debug_backtrace();
+                    $raised = false;
+                    foreach ($trace as $i => $frame) {
+                        if (!$raised) {
+                            if (isset($frame['class']) && strtolower($frame['class']) ==
+                                  'pear' && strtolower($frame['function']) == 'raiseerror') {
+                                $raised = true;
+                            } else {
+                                continue;
+                            }
+                        }
+                        @$this->_displayLine("#$i: $frame[class]$frame[type]$frame[function] $frame[line]");
+                    }
+                }
+            }
+        }
         exit(1);
     }
 
@@ -128,13 +166,186 @@
     }
 
     // }}}
+
+    /**
+     * Instruct the runInstallScript method to skip a paramgroup that matches the
+     * id value passed in.
+     *
+     * This method is useful for dynamically configuring which sections of a post-install script
+     * will be run based on the user's setup, which is very useful for making flexible
+     * post-install scripts without losing the cross-Frontend ability to retrieve user input
+     * @param string
+     */
+    function skipParamgroup($id)
+    {
+        $this->_skipSections[$id] = true;
+    }
+
+    function runPostinstallScripts(&$scripts)
+    {
+        foreach ($scripts as $i => $script) {
+            $this->runInstallScript($scripts[$i]->_params, $scripts[$i]->_obj);
+        }
+    }
+
+    /**
+     * @param array $xml contents of postinstallscript tag
+     * @param object $script post-installation script
+     * @param string install|upgrade
+     */
+    function runInstallScript($xml, &$script)
+    {
+        $this->_skipSections = array();
+        if (!is_array($xml) || !isset($xml['paramgroup'])) {
+            $script->run(array(), '_default');
+        } else {
+            $completedPhases = array();
+            if (!isset($xml['paramgroup'][0])) {
+                $xml['paramgroup'] = array($xml['paramgroup']);
+            }
+            foreach ($xml['paramgroup'] as $group) {
+                if (isset($this->_skipSections[$group['id']])) {
+                    // the post-install script chose to skip this section dynamically
+                    continue;
+                }
+                if (isset($group['name'])) {
+                    $paramname = explode('::', $group['name']);
+                    if ($lastgroup['id'] != $paramname[0]) {
+                        continue;
+                    }
+                    $group['name'] = $paramname[1];
+                    if (isset($answers)) {
+                        if (isset($answers[$group['name']])) {
+                            switch ($group['conditiontype']) {
+                                case '=' :
+                                    if ($answers[$group['name']] != $group['value']) {
+                                        continue 2;
+                                    }
+                                break;
+                                case '!=' :
+                                    if ($answers[$group['name']] == $group['value']) {
+                                        continue 2;
+                                    }
+                                break;
+                                case 'preg_match' :
+                                    if (!@preg_match('/' . $group['value'] . '/',
+                                          $answers[$group['name']])) {
+                                        continue 2;
+                                    }
+                                break;
+                                default :
+                                return;
+                            }
+                        }
+                    } else {
+                        return;
+                    }
+                }
+                $lastgroup = $group;
+                if (isset($group['instructions'])) {
+                    $this->_display($group['instructions']);
+                }
+                if (!isset($group['param'][0])) {
+                    $group['param'] = array($group['param']);
+                }
+                if (isset($group['param'])) {
+                    if (method_exists($script, 'postProcessPrompts')) {
+                        $prompts = $script->postProcessPrompts($group['param'], $group['id']);
+                        if (!is_array($prompts) || count($prompts) != count($group['param'])) {
+                            $this->outputData('postinstall', 'Error: post-install script did not ' .
+                                'return proper post-processed prompts');
+                            $prompts = $group['param'];
+                        } else {
+                            foreach ($prompts as $i => $var) {
+                                if (!is_array($var) || !isset($var['prompt']) ||
+                                      !isset($var['name']) ||
+                                      ($var['name'] != $group['param'][$i]['name']) ||
+                                      ($var['type'] != $group['param'][$i]['type'])) {
+                                    $this->outputData('postinstall', 'Error: post-install script ' .
+                                        'modified the variables or prompts, severe security risk. ' .
+                                        'Will instead use the defaults from the package.xml');
+                                    $prompts = $group['param'];
+                                }
+                            }
+                        }
+                        $answers = $this->confirmDialog($prompts);
+                    } else {
+                        $answers = $this->confirmDialog($group['param']);
+                    }
+                }
+                if ((isset($answers) && $answers) || !isset($group['param'])) {
+                    if (!isset($answers)) {
+                        $answers = array();
+                    }
+                    array_unshift($completedPhases, $group['id']);
+                    if (!$script->run($answers, $group['id'])) {
+                        $script->run($completedPhases, '_undoOnError');
+                        return;
+                    }
+                } else {
+                    $script->run($completedPhases, '_undoOnError');
+                    return;
+                }
+            }
+        }
+    }
+
+    /**
+     * Ask for user input, confirm the answers and continue until the user is satisfied
+     * @param array an array of arrays, format array('name' => 'paramname', 'prompt' =>
+     *              'text to display', 'type' => 'string'[, default => 'default value'])
+     * @return array
+     */
+    function confirmDialog($params)
+    {
+        $answers = array();
+        $prompts = $types = array();
+        foreach ($params as $param) {
+            $prompts[$param['name']] = $param['prompt'];
+            $types[$param['name']] = $param['type'];
+            if (isset($param['default'])) {
+                $answers[$param['name']] = $param['default'];
+            } else {
+                $answers[$param['name']] = '';
+            }
+        }
+        do {
+            $ok = array('yesno' => 'no');
+            do {
+                $answers = $this->userDialog('', $prompts, $types, $answers);
+            } while (count(array_filter($answers)) != count($prompts));
+            $this->outputData('Your choices:');
+            foreach ($prompts as $name => $prompt) {
+                $this->outputData($prompt . ': ' . $answers[$name]);
+            }
+            $ok = $this->userDialog('',
+                array(
+                    'yesno' => 'These Choices OK? (use "abort" to halt)'
+                ),
+                array(
+                    'yesno' => 'string',
+                ),
+                array(
+                    'yesno' => 'yes'
+                )
+            );
+            if ($ok['yesno'] == 'abort') {
+                return false;
+            }
+        } while ($ok['yesno'] != 'yes');
+        return $answers;
+    }
     // {{{ userDialog(prompt, [type], [default])
 
     function userDialog($command, $prompts, $types = array(), $defaults = array())
     {
         $result = array();
         if (is_array($prompts)) {
-            $fp = fopen("php://stdin", "r");
+            // php 5.0.0 inexplicably breaks BC with this behavior
+            // now reading from STDIN is the intended syntax
+            if (version_compare(phpversion(), '5.0.0', '<')) {
+                $fp = fopen("php://stdin", "r");
+            }
             foreach ($prompts as $key => $prompt) {
                 $type = $types[$key];
                 $default = @$defaults[$key];
@@ -146,7 +357,14 @@
                     print "[$default] ";
                 }
                 print ": ";
-                $line = fgets($fp, 2048);
+                if (version_compare(phpversion(), '5.0.0', '<')) {
+                    $line = fgets($fp, 2048);
+                } else {
+                    if (!defined('STDIN')) {
+                        define('STDIN', fopen('php://stdin', 'r'));
+                    }
+                    $line = fgets(STDIN, 2048);
+                }
                 if ($type == 'password') {
                     system('stty echo');
                     print "\n";
@@ -154,10 +372,12 @@
                 if ($default && trim($line) == "") {
                     $result[$key] = $default;
                 } else {
-                    $result[$key] = $line;
+                    $result[$key] = trim($line);
                 }
             }
-            fclose($fp);
+            if (version_compare(phpversion(), '5.0.0', '<')) {
+                fclose($fp);
+            }
         }
         return $result;
     }
@@ -369,6 +589,14 @@
     function outputData($data, $command = '_default')
     {
         switch ($command) {
+            case 'channel-info':
+                foreach ($data as $type => $section) {
+                    if ($type == 'main') {
+                        $section['data'] = array_values($section['data']);
+                    }
+                    $this->outputData($section);
+                }
+                break;
             case 'install':
             case 'upgrade':
             case 'upgrade-all':
@@ -405,8 +633,8 @@
 
                 foreach($data['data'] as $category) {
                     foreach($category as $pkg) {
-                        unset($pkg[3]);
                         unset($pkg[4]);
+                        unset($pkg[5]);
                         $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
                     }
                 };
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Frontend.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Frontend.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Frontend.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Frontend.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,154 @@
+<?php
+/**
+ * PEAR_Frontend, the singleton-based frontend for user input/output
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Frontend.php,v 1.7 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Which user interface class is being used.
+ * @var string class name
+ */
+$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
+
+/**
+ * Instance of $_PEAR_Command_uiclass.
+ * @var object
+ */
+$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
+
+/**
+ * Singleton-based frontend for PEAR user input/output
+ * 
+ * Note that frontend classes must implement userConfirm(), and shoul implement
+ * displayFatalError() and outputData()
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Frontend extends PEAR
+{
+    /**
+     * Retrieve the frontend object
+     * @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
+     * @static
+     */
+    function &singleton($type = null)
+    {
+        if ($type === null) {
+            if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
+                $a = false;
+                return $a;
+            }
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        } else {
+            $a = PEAR_Frontend::setFrontendClass($type);
+            return $a;
+        }
+    }
+
+    /**
+     * Set the frontend class that will be used by calls to {@link singleton()}
+     *
+     * Frontends are expected to conform to the PEAR naming standard of
+     * _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
+     * @param string $uiclass full class name
+     * @return PEAR_Frontend
+     * @static
+     */
+    function &setFrontendClass($uiclass)
+    {
+        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
+              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+        if (!class_exists($uiclass)) {
+            $file = str_replace('_', '/', $uiclass) . '.php';
+            if (PEAR_Frontend::isIncludeable($file)) {
+                include_once $file;
+            }
+        }
+        if (class_exists($uiclass)) {
+            $obj = &new $uiclass;
+            // quick test to see if this class implements a few of the most
+            // important frontend methods
+            if (method_exists($obj, 'userConfirm')) {
+                $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
+                $GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
+                return $obj;
+            } else {
+                $err = PEAR::raiseError("not a frontend class: $uiclass");
+                return $err;
+            }
+        }
+        $err = PEAR::raiseError("no such class: $uiclass");
+        return $err;
+    }
+
+    /**
+     * @param string $path relative or absolute include path
+     * @return boolean
+     * @static
+     */
+    function isIncludeable($path)
+    {
+        if (file_exists($path) && is_readable($path)) {
+            return true;
+        }
+        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
+        foreach ($ipath as $include) {
+            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
+            if (!$test) { // support wrappers like phar (realpath just don't work with them)
+                $test = $include . DIRECTORY_SEPARATOR . $path;
+            }
+            if (file_exists($test) && is_readable($test)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param PEAR_Config
+     */
+    function setConfig(&$config)
+    {
+    }
+
+    /**
+     * This can be overridden to allow session-based temporary file management
+     *
+     * By default, all files are deleted at the end of a session.  The web installer
+     * needs to be able to sustain a list over many sessions in order to support
+     * user interaction with install scripts
+     */
+    function addTempFile($file)
+    {
+        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
+    }
+
+    function log($msg, $append_crlf = true)
+    {
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Common.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Common.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Common.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Common.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,180 @@
+<?php
+/**
+ * Base class for all installation roles.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Common.php,v 1.10 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * Base class for all installation roles.
+ *
+ * This class allows extensibility of file roles.  Packages with complex
+ * customization can now provide custom file roles along with the possibility of
+ * adding configuration values to match.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Common
+{
+    /**
+     * @var PEAR_Config
+     * @access protected
+     */
+    var $config;
+
+    /**
+     * @param PEAR_Config
+     */
+    function PEAR_Installer_Role_Common(&$config)
+    {
+        $this->config = $config;
+    }
+
+    /**
+     * Retrieve configuration information about a file role from its XML info
+     *
+     * @param string $role Role Classname, as in "PEAR_Installer_Role_Data"
+     * @return array
+     */
+    function getInfo($role)
+    {
+        if (empty($GLOBALS['_PEAR_INSTALLER_ROLES'][$role])) {
+            return PEAR::raiseError('Unknown Role class: "' . $role . '"');
+        }
+        return $GLOBALS['_PEAR_INSTALLER_ROLES'][$role];
+    }
+
+    /**
+     * This is called for each file to set up the directories and files
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param array attributes from the <file> tag
+     * @param string file name
+     * @return array an array consisting of:
+     *
+     *    1 the original, pre-baseinstalldir installation directory
+     *    2 the final installation directory
+     *    3 the full path to the final location of the file
+     *    4 the location of the pre-installation file
+     */
+    function processInstallation($pkg, $atts, $file, $tmp_path, $layer = null)
+    {
+        $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
+            ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
+        if (PEAR::isError($roleInfo)) {
+            return $roleInfo;
+        }
+        if (!$roleInfo['locationconfig']) {
+            return false;
+        }
+        if ($roleInfo['honorsbaseinstall']) {
+            $dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'], $layer,
+                $pkg->getChannel());
+            if (!empty($atts['baseinstalldir'])) {
+                $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
+            }
+        } elseif ($roleInfo['unusualbaseinstall']) {
+            $dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'],
+                    null, $pkg->getChannel()) . DIRECTORY_SEPARATOR . $pkg->getPackage();
+            if (!empty($atts['baseinstalldir'])) {
+                $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
+            }
+        } else {
+            $dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'],
+                    null, $pkg->getChannel()) . DIRECTORY_SEPARATOR . $pkg->getPackage();
+        }
+        if (dirname($file) != '.' && empty($atts['install-as'])) {
+            $dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
+        }
+        if (empty($atts['install-as'])) {
+            $dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
+        } else {
+            $dest_file = $dest_dir . DIRECTORY_SEPARATOR . $atts['install-as'];
+        }
+        $orig_file = $tmp_path . DIRECTORY_SEPARATOR . $file;
+
+        // Clean up the DIRECTORY_SEPARATOR mess
+        $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
+        
+        list($dest_dir, $dest_file, $orig_file) = preg_replace(array('!\\\\+!', '!/!', "!$ds2+!"),
+                                                    array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR,
+                                                          DIRECTORY_SEPARATOR),
+                                                    array($dest_dir, $dest_file, $orig_file));
+        return array($save_destdir, $dest_dir, $dest_file, $orig_file);
+    }
+
+    /**
+     * Get the name of the configuration variable that specifies the location of this file
+     * @return string|false
+     */
+    function getLocationConfig()
+    {
+        $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
+            ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
+        if (PEAR::isError($roleInfo)) {
+            return $roleInfo;
+        }
+        return $roleInfo['locationconfig'];
+    }
+
+    /**
+     * Do any unusual setup here
+     * @param PEAR_Installer
+     * @param PEAR_PackageFile_v2
+     * @param array file attributes
+     * @param string file name
+     */
+    function setup(&$installer, $pkg, $atts, $file)
+    {
+    }
+
+    function isExecutable()
+    {
+        $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
+            ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
+        if (PEAR::isError($roleInfo)) {
+            return $roleInfo;
+        }
+        return $roleInfo['executable'];
+    }
+
+    function isInstallable()
+    {
+        $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
+            ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
+        if (PEAR::isError($roleInfo)) {
+            return $roleInfo;
+        }
+        return $roleInfo['installable'];
+    }
+
+    function isExtension()
+    {
+        $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
+            ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
+        if (PEAR::isError($roleInfo)) {
+            return $roleInfo;
+        }
+        return $roleInfo['phpextension'];
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+<?php
+/**
+ * PEAR_Installer_Role_Data
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Data.php,v 1.6 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Data.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,13 @@
+<role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>data_dir</locationconfig>
+ <honorsbaseinstall />
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+<?php
+/**
+ * PEAR_Installer_Role_Doc
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Doc.php,v 1.6 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Doc.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,13 @@
+<role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>doc_dir</locationconfig>
+ <honorsbaseinstall />
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+<?php
+/**
+ * PEAR_Installer_Role_Ext
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Ext.php,v 1.6 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Ext.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,11 @@
+<role version="1.0">
+ <releasetypes>extbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>ext_dir</locationconfig>
+ <honorsbaseinstall>1</honorsbaseinstall>
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension>1</phpextension>
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+<?php
+/**
+ * PEAR_Installer_Role_Php
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Php.php,v 1.7 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Php.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,13 @@
+<role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>php_dir</locationconfig>
+ <honorsbaseinstall>1</honorsbaseinstall>
+ <unusualbaseinstall />
+ <phpfile>1</phpfile>
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+<?php
+/**
+ * PEAR_Installer_Role_Script
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Script.php,v 1.6 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Script.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,13 @@
+<role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>bin_dir</locationconfig>
+ <honorsbaseinstall>1</honorsbaseinstall>
+ <unusualbaseinstall />
+ <phpfile />
+ <executable>1</executable>
+ <phpextension />
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,40 @@
+<?php
+/**
+ * PEAR_Installer_Role_Src
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Src.php,v 1.6 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
+{
+    function setup(&$installer, $pkg, $atts, $file)
+    {
+        $installer->source_files++;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Src.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,11 @@
+<role version="1.0">
+ <releasetypes>extsrc</releasetypes>
+ <installable />
+ <locationconfig />
+ <honorsbaseinstall />
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+<?php
+/**
+ * PEAR_Installer_Role_Test
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Test.php,v 1.6 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.xml 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.xml
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role/Test.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,13 @@
+<role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>test_dir</locationconfig>
+ <honorsbaseinstall />
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer/Role.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer/Role.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,248 @@
+<?php
+/**
+ * PEAR_Installer_Role
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Role.php,v 1.13 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * base class for installer roles
+ */
+require_once 'PEAR/Installer/Role/Common.php';
+require_once 'PEAR/XMLParser.php';
+//$GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role
+{
+    /**
+     * Set up any additional configuration variables that file roles require
+     *
+     * Never call this directly, it is called by the PEAR_Config constructor
+     * @param PEAR_Config
+     * @access private
+     * @static
+     */
+    function initializeConfig(&$config)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $class => $info) {
+            if (!$info['config_vars']) {
+                continue;
+            }
+            $config->_addConfigVars($info['config_vars']);
+        }
+    }
+
+    /**
+     * @param PEAR_PackageFile_v2
+     * @param string role name
+     * @param PEAR_Config
+     * @return PEAR_Installer_Role_Common
+     * @static
+     */
+    function &factory($pkg, $role, &$config)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+        if (!in_array($role, PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
+            $a = false;
+            return $a;
+        }
+        $a = 'PEAR_Installer_Role_' . ucfirst($role);
+        if (!class_exists($a)) {
+            require_once str_replace('_', '/', $a) . '.php';
+        }
+        $b = new $a($config);
+        return $b;
+    }
+
+    /**
+     * Get a list of file roles that are valid for the particular release type.
+     *
+     * For instance, src files serve no purpose in regular php releases.  php files
+     * serve no purpose in extsrc or extbin releases
+     * @param string
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getValidRoles($release, $clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+        static $ret = array();
+        if ($clear) {
+            $ret = array();
+        }
+        if (isset($ret[$release])) {
+            return $ret[$release];
+        }
+        $ret[$release] = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if (in_array($release, $okreleases['releasetypes'])) {
+                $ret[$release][] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+        return $ret[$release];
+    }
+
+    /**
+     * Get a list of roles that require their files to be installed
+     *
+     * Most roles must be installed, but src and package roles, for instance
+     * are pseudo-roles.  src files are compiled into a new extension.  Package
+     * roles are actually fully bundled releases of a package
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getInstallableRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+        if (!isset($ret)) {
+            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+                if ($okreleases['installable']) {
+                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+                }
+            }
+        }
+        return $ret;
+    }
+
+    /**
+     * Return an array of roles that are affected by the baseinstalldir attribute
+     *
+     * Most roles ignore this attribute, and instead install directly into:
+     * PackageName/filepath
+     * so a tests file tests/file.phpt is installed into PackageName/tests/filepath.php
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getBaseinstallRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+        if (!isset($ret)) {
+            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+                if ($okreleases['honorsbaseinstall']) {
+                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+                }
+            }
+        }
+        return $ret;
+    }
+
+    /**
+     * Return an array of file roles that should be analyzed for PHP content at package time,
+     * like the "php" role.
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getPhpRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+        if (!isset($ret)) {
+            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+                if ($okreleases['phpfile']) {
+                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+                }
+            }
+        }
+        return $ret;
+    }
+
+    /**
+     * Scan through the Command directory looking for classes
+     * and see what commands they implement.
+     * @param string which directory to look for classes, defaults to
+     *               the Installer/Roles subdirectory of
+     *               the directory from where this file (__FILE__) is
+     *               included.
+     *
+     * @return bool TRUE on success, a PEAR error on failure
+     * @access public
+     * @static
+     */
+    function registerRoles($dir = null)
+    {
+        $parser = new PEAR_XMLParser;
+        if ($dir === null) {
+            $dir = dirname(__FILE__) . '/Role';
+        }
+        $dp = @opendir($dir);
+        if (empty($dp)) {
+            return PEAR::raiseError("registerRoles: opendir($dir) failed");
+        }
+        while ($entry = readdir($dp)) {
+            if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
+                continue;
+            }
+            $class = "PEAR_Installer_Role_".substr($entry, 0, -4);
+            // List of roles
+            if (empty($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
+                $file = "$dir/$entry";
+                $parser->parse(file_get_contents($file));
+                $data = $parser->getData();
+                if (!is_array($data['releasetypes'])) {
+                    $data['releasetypes'] = array($data['releasetypes']);
+                }
+                $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
+            }
+        }
+        @closedir($dp);
+        ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
+        PEAR_Installer_Role::getBaseinstallRoles(true);
+        PEAR_Installer_Role::getInstallableRoles(true);
+        PEAR_Installer_Role::getPhpRoles(true);
+        PEAR_Installer_Role::getValidRoles('****', true);
+        return true;
+    }
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Installer.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Installer.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,41 +1,50 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |          Tomas V.V.Cox <cox@idecnet.com>                             |
-// |          Martin Jansen <mj@php.net>                                  |
-// +----------------------------------------------------------------------+
-//
-// $Id: Installer.php,v 1.150.2.1 2004/10/22 23:03:53 cellog Exp $
+/**
+ * PEAR_Installer
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Installer.php,v 1.224 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**
+ * Used for installation groups in package.xml 2.0 and platform exceptions
+ */
+require_once 'OS/Guess.php';
 require_once 'PEAR/Downloader.php';
 
+define('PEAR_INSTALLER_NOBINARY', -240);
 /**
  * Administration class used to install PEAR packages and maintain the
  * installed package database.
  *
- * TODO:
- *   - Check dependencies break on package uninstall (when no force given)
- *   - add a guessInstallDest() method with the code from _installFile() and
- *     use that method in Registry::_rebuildFileMap() & Command_Registry::doList(),
- *     others..
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@php.net>
- * @author Martin Jansen <mj@php.net>
- * @author Greg Beaver <cellog@php.net>
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Installer extends PEAR_Downloader
 {
@@ -77,11 +86,18 @@
      */
     var $tmpdir;
 
-    /** PEAR_Registry object used by the installer
-     * @var object
+    /**
+     * PEAR_Registry object used by the installer
+     * @var PEAR_Registry
      */
     var $registry;
 
+    /**
+     * array of PEAR_Downloader_Packages
+     * @var array
+     */
+    var $_downloadedPackages;
+
     /** List of file transactions queued for an install/upgrade/uninstall.
      *
      *  Format:
@@ -111,38 +127,77 @@
         parent::PEAR_Common();
         $this->setFrontendObject($ui);
         $this->debug = $this->config->get('verbose');
-        //$this->registry = &new PEAR_Registry($this->config->get('php_dir'));
+    }
+
+    function setOptions($options)
+    {
+        $this->_options = $options;
+    }
+
+    function setConfig(&$config)
+    {
+        $this->config = &$config;
+        $this->_registry = &$config->getRegistry();
     }
 
     // }}}
 
+    function _removeBackups($files)
+    {
+        foreach ($files as $path) {
+            $this->addFileOperation('removebackup', array($path));
+        }
+    }
+
     // {{{ _deletePackageFiles()
 
     /**
      * Delete a package's installed files, does not remove empty directories.
      *
-     * @param string $package package name
-     *
+     * @param string package name
+     * @param string channel name
+     * @param bool if true, then files are backed up first
      * @return bool TRUE on success, or a PEAR error on failure
-     *
-     * @access private
+     * @access protected
      */
-    function _deletePackageFiles($package)
+    function _deletePackageFiles($package, $channel = false, $backup = false)
     {
+        if (!$channel) {
+            $channel = 'pear.php.net';
+        }
         if (!strlen($package)) {
             return $this->raiseError("No package to uninstall given");
         }
-        $filelist = $this->registry->packageInfo($package, 'filelist');
+        if (strtolower($package) == 'pear' && $channel == 'pear.php.net') {
+            // to avoid race conditions, include all possible needed files
+            require_once 'PEAR/Task/Common.php';
+            require_once 'PEAR/Task/Replace.php';
+            require_once 'PEAR/Task/Unixeol.php';
+            require_once 'PEAR/Task/Windowseol.php';
+            require_once 'PEAR/PackageFile/v1.php';
+            require_once 'PEAR/PackageFile/v2.php';
+            require_once 'PEAR/PackageFile/Generator/v1.php';
+            require_once 'PEAR/PackageFile/Generator/v2.php';
+        }
+        $filelist = $this->_registry->packageInfo($package, 'filelist', $channel);
         if ($filelist == null) {
-            return $this->raiseError("$package not installed");
+            return $this->raiseError("$channel/$package not installed");
         }
+        $ret = array();
         foreach ($filelist as $file => $props) {
             if (empty($props['installed_as'])) {
                 continue;
             }
-            $path = $this->_prependPath($props['installed_as'], $this->installroot);
+            $path = $props['installed_as'];
+            if ($backup) {
+                $this->addFileOperation('backup', array($path));
+                $ret[] = $path;
+            }
             $this->addFileOperation('delete', array($path));
         }
+        if ($backup) {
+            return $ret;
+        }
         return true;
     }
 
@@ -160,9 +215,11 @@
     {
         // {{{ return if this file is meant for another platform
         static $os;
+        if (!isset($this->_registry)) {
+            $this->_registry = &$this->config->getRegistry();
+        }
         if (isset($atts['platform'])) {
             if (empty($os)) {
-                include_once "OS/Guess.php";
                 $os = new OS_Guess();
             }
             if (strlen($atts['platform']) && $atts['platform']{0} == '!') {
@@ -179,21 +236,22 @@
         }
         // }}}
 
+        $channel = $this->pkginfo->getChannel();
         // {{{ assemble the destination paths
         switch ($atts['role']) {
             case 'doc':
             case 'data':
             case 'test':
-                $dest_dir = $this->config->get($atts['role'] . '_dir') .
-                            DIRECTORY_SEPARATOR . $this->pkginfo['package'];
+                $dest_dir = $this->config->get($atts['role'] . '_dir', null, $channel) .
+                            DIRECTORY_SEPARATOR . $this->pkginfo->getPackage();
                 unset($atts['baseinstalldir']);
                 break;
             case 'ext':
             case 'php':
-                $dest_dir = $this->config->get($atts['role'] . '_dir');
+                $dest_dir = $this->config->get($atts['role'] . '_dir', null, $channel);
                 break;
             case 'script':
-                $dest_dir = $this->config->get('bin_dir');
+                $dest_dir = $this->config->get('bin_dir', null, $channel);
                 break;
             case 'src':
             case 'extsrc':
@@ -219,10 +277,20 @@
         // Clean up the DIRECTORY_SEPARATOR mess
         $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
         list($dest_file, $orig_file) = preg_replace(array('!\\\\+!', '!/!', "!$ds2+!"),
-                                                    DIRECTORY_SEPARATOR,
+                                                    array(DIRECTORY_SEPARATOR,
+                                                          DIRECTORY_SEPARATOR,
+                                                          DIRECTORY_SEPARATOR),
                                                     array($dest_file, $orig_file));
-        $installed_as = $dest_file;
-        $final_dest_file = $this->_prependPath($dest_file, $this->installroot);
+        $final_dest_file = $installed_as = $dest_file;
+        if (isset($this->_options['packagingroot'])) {
+            $installedas_dest_dir = dirname($final_dest_file);
+            $installedas_dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
+            $final_dest_file = $this->_prependPath($final_dest_file,
+                $this->_options['packagingroot']);
+        } else {
+            $installedas_dest_dir = dirname($final_dest_file);
+            $installedas_dest_file = $installedas_dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
+        }
         $dest_dir = dirname($final_dest_file);
         $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         // }}}
@@ -236,7 +304,7 @@
         }
         if (empty($atts['replacements'])) {
             if (!file_exists($orig_file)) {
-                return $this->raiseError("file does not exist",
+                return $this->raiseError("file $orig_file does not exist",
                                          PEAR_INSTALLER_FAILED);
             }
             if (!@copy($orig_file, $dest_file)) {
@@ -253,9 +321,16 @@
                 return $this->raiseError("file does not exist",
                                          PEAR_INSTALLER_FAILED);
             }
-            $fp = fopen($orig_file, "r");
-            $contents = fread($fp, filesize($orig_file));
-            fclose($fp);
+            if (function_exists('file_get_contents')) {
+                $contents = file_get_contents($orig_file);
+            } else {
+                $fp = fopen($orig_file, "r");
+                $contents = @fread($fp, filesize($orig_file));
+                fclose($fp);
+            }
+            if ($contents === false) {
+                $contents = '';
+            }
             if (isset($atts['md5sum'])) {
                 $md5sum = md5($contents);
             }
@@ -266,20 +341,35 @@
                     if (preg_match('/^[a-z0-9_]+$/i', $a['to'])) {
                         eval("\$to = $a[to];");
                     } else {
-                        $this->log(0, "invalid php-const replacement: $a[to]");
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "invalid php-const replacement: $a[to]");
+                        }
                         continue;
                     }
                 } elseif ($a['type'] == 'pear-config') {
-                    $to = $this->config->get($a['to']);
+                    if ($a['to'] == 'master_server') {
+                        $chan = $this->_registry->getChannel($channel);
+                        if ($chan) {
+                            $to = $chan->getServer();
+                        } else {
+                            $to = $this->config->get($a['to'], null, $channel);
+                        }
+                    } else {
+                        $to = $this->config->get($a['to'], null, $channel);
+                    }
                     if (is_null($to)) {
-                        $this->log(0, "invalid pear-config replacement: $a[to]");
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "invalid pear-config replacement: $a[to]");
+                        }
                         continue;
                     }
                 } elseif ($a['type'] == 'package-info') {
-                    if (isset($this->pkginfo[$a['to']]) && is_string($this->pkginfo[$a['to']])) {
-                        $to = $this->pkginfo[$a['to']];
+                    if ($t = $this->pkginfo->packageInfo($a['to'])) {
+                        $to = $t;
                     } else {
-                        $this->log(0, "invalid package-info replacement: $a[to]");
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "invalid package-info replacement: $a[to]");
+                        }
                         continue;
                     }
                 }
@@ -297,7 +387,7 @@
                 return $this->raiseError("failed to create $dest_file: $php_errormsg",
                                          PEAR_INSTALLER_FAILED);
             }
-            if (!fwrite($wp, $contents)) {
+            if (fwrite($wp, $contents) === false) {
                 return $this->raiseError("failed writing to $dest_file: $php_errormsg",
                                          PEAR_INSTALLER_FAILED);
             }
@@ -312,10 +402,18 @@
                 if (empty($options['force'])) {
                     // delete the file
                     @unlink($dest_file);
-                    return $this->raiseError("bad md5sum for file $final_dest_file",
+                    if (!isset($options['ignore-errors'])) {
+                        return $this->raiseError("bad md5sum for file $final_dest_file",
                                              PEAR_INSTALLER_FAILED);
+                    } else {
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "warning : bad md5sum for file $final_dest_file");
+                        }
+                    }
                 } else {
-                    $this->log(0, "warning : bad md5sum for file $final_dest_file");
+                    if (!isset($options['soft'])) {
+                        $this->log(0, "warning : bad md5sum for file $final_dest_file");
+                    }
                 }
             }
         }
@@ -330,14 +428,180 @@
             }
             $this->addFileOperation("chmod", array($mode, $dest_file));
             if (!@chmod($dest_file, $mode)) {
-                $this->log(0, "failed to change mode of $dest_file");
+                if (!isset($options['soft'])) {
+                    $this->log(0, "failed to change mode of $dest_file");
+                }
             }
         }
         // }}}
-        $this->addFileOperation("rename", array($dest_file, $final_dest_file));
+        $this->addFileOperation("rename", array($dest_file, $final_dest_file,
+            $atts['role'] == 'ext'));
         // Store the full path where the file was installed for easy unistall
         $this->addFileOperation("installed_as", array($file, $installed_as,
-                                $save_destdir, dirname(substr($dest_file, strlen($save_destdir)))));
+                                $save_destdir, dirname(substr($installedas_dest_file, strlen($save_destdir)))));
+
+        //$this->log(2, "installed: $dest_file");
+        return PEAR_INSTALLER_OK;
+    }
+
+    // }}}
+    // {{{ _installFile2()
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param string filename
+     * @param array attributes from <file> tag in package.xml
+     * @param string path to install the file in
+     * @param array options from command-line
+     * @access private
+     */
+    function _installFile2(&$pkg, $file, $atts, $tmp_path, $options)
+    {
+        if (!isset($this->_registry)) {
+            $this->_registry = &$this->config->getRegistry();
+        }
+
+        $channel = $pkg->getChannel();
+        // {{{ assemble the destination paths
+        if (!in_array($atts['attribs']['role'],
+              PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
+            return $this->raiseError('Invalid role `' . $atts['attribs']['role'] .
+                    "' for file $file");
+        }
+        $role = &PEAR_Installer_Role::factory($pkg, $atts['attribs']['role'], $this->config);
+        $err = $role->setup($this, $pkg, $atts['attribs'], $file);
+        if (PEAR::isError($err)) {
+            return $err;
+        }
+        if (!$role->isInstallable()) {
+            return;
+        }
+        $info = $role->processInstallation($pkg, $atts['attribs'], $file, $tmp_path);
+        if (PEAR::isError($info)) {
+            return $info;
+        } else {
+            list($save_destdir, $dest_dir, $dest_file, $orig_file) = $info;
+        }
+        $final_dest_file = $installed_as = $dest_file;
+        if (isset($this->_options['packagingroot'])) {
+            $final_dest_file = $this->_prependPath($final_dest_file,
+                $this->_options['packagingroot']);
+        }
+        $dest_dir = dirname($final_dest_file);
+        $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
+        // }}}
+
+        if (!@is_dir($dest_dir)) {
+            if (!$this->mkDirHier($dest_dir)) {
+                return $this->raiseError("failed to mkdir $dest_dir",
+                                         PEAR_INSTALLER_FAILED);
+            }
+            $this->log(3, "+ mkdir $dest_dir");
+        }
+        $attribs = $atts['attribs'];
+        unset($atts['attribs']);
+        if (!count($atts)) { // no tasks
+            if (!file_exists($orig_file)) {
+                return $this->raiseError("file $orig_file does not exist",
+                                         PEAR_INSTALLER_FAILED);
+            }
+            if (!@copy($orig_file, $dest_file)) {
+                return $this->raiseError("failed to write $dest_file",
+                                         PEAR_INSTALLER_FAILED);
+            }
+            $this->log(3, "+ cp $orig_file $dest_file");
+            if (isset($attribs['md5sum'])) {
+                $md5sum = md5_file($dest_file);
+            }
+        } else { // file with tasks
+            if (!file_exists($orig_file)) {
+                return $this->raiseError("file $orig_file does not exist",
+                                         PEAR_INSTALLER_FAILED);
+            }
+            if (function_exists('file_get_contents')) {
+                $contents = file_get_contents($orig_file);
+            } else {
+                $fp = fopen($orig_file, "r");
+                $contents = @fread($fp, filesize($orig_file)); // filesize can be 0
+                fclose($fp);
+            }
+            if ($contents === false) {
+                $contents = '';
+            }
+            if (isset($attribs['md5sum'])) {
+                $md5sum = md5($contents);
+            }
+            foreach ($atts as $tag => $raw) {
+                $tag = str_replace($pkg->getTasksNs() . ':', '', $tag);
+                $task = "PEAR_Task_$tag";
+                $task = &new $task($this->config, $this, PEAR_TASK_INSTALL);
+                if (!$task->isScript()) { // scripts are only handled after installation
+                    $task->init($raw, $attribs, $pkg->getLastInstalledVersion());
+                    $res = $task->startSession($pkg, $contents, $final_dest_file);
+                    if ($res === false) {
+                        continue; // skip this file
+                    }
+                    if (PEAR::isError($res)) {
+                        return $res;
+                    }
+                    $contents = $res; // save changes
+                }
+                $wp = @fopen($dest_file, "wb");
+                if (!is_resource($wp)) {
+                    return $this->raiseError("failed to create $dest_file: $php_errormsg",
+                                             PEAR_INSTALLER_FAILED);
+                }
+                if (fwrite($wp, $contents) === false) {
+                    return $this->raiseError("failed writing to $dest_file: $php_errormsg",
+                                             PEAR_INSTALLER_FAILED);
+                }
+                fclose($wp);
+            }
+        }
+        // {{{ check the md5
+        if (isset($md5sum)) {
+            if (strtolower($md5sum) == strtolower($attribs['md5sum'])) {
+                $this->log(2, "md5sum ok: $final_dest_file");
+            } else {
+                if (empty($options['force'])) {
+                    // delete the file
+                    @unlink($dest_file);
+                    if (!isset($options['ignore-errors'])) {
+                        return $this->raiseError("bad md5sum for file $final_dest_file",
+                                                 PEAR_INSTALLER_FAILED);
+                    } else {
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "warning : bad md5sum for file $final_dest_file");
+                        }
+                    }
+                } else {
+                    if (!isset($options['soft'])) {
+                        $this->log(0, "warning : bad md5sum for file $final_dest_file");
+                    }
+                }
+            }
+        }
+        // }}}
+        // {{{ set file permissions
+        if (!OS_WINDOWS) {
+            if ($role->isExecutable()) {
+                $mode = 0777 & ~(int)octdec($this->config->get('umask'));
+                $this->log(3, "+ chmod +x $dest_file");
+            } else {
+                $mode = 0666 & ~(int)octdec($this->config->get('umask'));
+            }
+            $this->addFileOperation("chmod", array($mode, $dest_file));
+            if (!@chmod($dest_file, $mode)) {
+                if (!isset($options['soft'])) {
+                    $this->log(0, "failed to change mode of $dest_file");
+                }
+            }
+        }
+        // }}}
+        $this->addFileOperation("rename", array($dest_file, $final_dest_file, $role->isExtension()));
+        // Store the full path where the file was installed for easy uninstall
+        $this->addFileOperation("installed_as", array($file, $installed_as,
+                            $save_destdir, dirname(substr($dest_file, strlen($save_destdir)))));
 
         //$this->log(2, "installed: $dest_file");
         return PEAR_INSTALLER_OK;
@@ -350,16 +614,18 @@
      * Add a file operation to the current file transaction.
      *
      * @see startFileTransaction()
-     * @var string $type This can be one of:
-     *    - rename:  rename a file ($data has 2 values)
+     * @param string $type This can be one of:
+     *    - rename:  rename a file ($data has 3 values)
+     *    - backup:  backup an existing file ($data has 1 value)
+     *    - removebackup:  clean up backups created during install ($data has 1 value)
      *    - chmod:   change permissions on a file ($data has 2 values)
      *    - delete:  delete a file ($data has 1 value)
      *    - rmdir:   delete a directory if empty ($data has 1 value)
      *    - installed_as: mark a file as installed ($data has 4 values).
-     * @var array $data For all file operations, this array must contain the
+     * @param array $data For all file operations, this array must contain the
      *    full path to the file or directory that is being operated on.  For
      *    the rename command, the first parameter must be the file to rename,
-     *    the second its new name.
+     *    the second its new name, the third whether this is a PHP extension.
      *
      *    The installed_as operation contains 4 elements in this order:
      *    1. Filename as listed in the filelist element from package.xml
@@ -426,8 +692,18 @@
                         $this->log(2, "warning: file $data[0] doesn't exist, can't be deleted");
                     }
                     // check that directory is writable
-                    if (file_exists($data[0]) && !is_writable(dirname($data[0]))) {
-                        $errors[] = "permission denied ($type): $data[0]";
+                    if (file_exists($data[0])) {
+                        if (!is_writable(dirname($data[0]))) {
+                            $errors[] = "permission denied ($type): $data[0]";
+                        } else {
+                            // make sure the file to be deleted can be opened for writing
+                            $fp = false;
+                            if (!is_dir($data[0]) && !($fp = @fopen($data[0], 'a'))) {
+                                $errors[] = "permission denied ($type): $data[0]";
+                            } elseif ($fp) {
+                                fclose($fp);
+                            }
+                        }
                     }
                     break;
             }
@@ -437,16 +713,44 @@
         $m = sizeof($errors);
         if ($m > 0) {
             foreach ($errors as $error) {
-                $this->log(1, $error);
+                if (!isset($this->_options['soft'])) {
+                    $this->log(1, $error);
+                }
+            }
+            if (!isset($this->_options['ignore-errors'])) {
+                return false;
             }
-            return false;
         }
+        $this->_dirtree = array();
         // {{{ really commit the transaction
         foreach ($this->file_operations as $tr) {
             list($type, $data) = $tr;
             switch ($type) {
+                case 'backup':
+                    @copy($data[0], $data[0] . '.bak');
+                    $this->log(3, "+ backup $data[0] to $data[0].bak");
+                    break;
+                case 'removebackup':
+                    @unlink($data[0] . '.bak');
+                    $this->log(3, "+ rm backup of $data[0] ($data[0].bak)");
+                    break;
                 case 'rename':
-                    @unlink($data[1]);
+                    $test = @unlink($data[1]);
+                    if (!$test && file_exists($data[1])) {
+                        if ($data[2]) {
+                            $extra = ', this extension must be installed manually.  Rename to "' .
+                                basename($data[1]) . '"';
+                        } else {
+                            $extra = '';
+                        }
+                        if (!isset($this->_options['soft'])) {
+                            $this->log(1, 'Could not delete ' . $data[1] . ', cannot rename ' .
+                                $data[0] . $extra);
+                        }
+                        if (!isset($this->_options['ignore-errors'])) {
+                            return false;
+                        }
+                    }
                     @rename($data[0], $data[1]);
                     $this->log(3, "+ mv $data[0] $data[1]");
                     break;
@@ -464,13 +768,16 @@
                     $this->log(3, "+ rmdir $data[0]");
                     break;
                 case 'installed_as':
-                    $this->pkginfo['filelist'][$data[0]]['installed_as'] = $data[1];
-                    if (!isset($this->pkginfo['filelist']['dirtree'][dirname($data[1])])) {
-                        $this->pkginfo['filelist']['dirtree'][dirname($data[1])] = true;
+                    $this->pkginfo->setInstalledAs($data[0], $data[1]);
+                    if (!isset($this->_dirtree[dirname($data[1])])) {
+                        $this->_dirtree[dirname($data[1])] = true;
+                        $this->pkginfo->setDirtree(dirname($data[1]));
+
                         while(!empty($data[3]) && $data[3] != '/' && $data[3] != '\\'
                               && $data[3] != '.') {
-                            $this->pkginfo['filelist']['dirtree']
-                                [$this->_prependPath($data[3], $data[2])] = true;
+                            $this->pkginfo->setDirtree($pp =
+                                $this->_prependPath($data[3], $data[2]));
+                            $this->_dirtree[$pp] = true;
                             $data[3] = dirname($data[3]);
                         }
                     }
@@ -493,6 +800,13 @@
         foreach ($this->file_operations as $tr) {
             list($type, $data) = $tr;
             switch ($type) {
+                case 'backup':
+                    if (file_exists($data[0] . '.bak')) {
+                        @unlink($data[0]);
+                        @copy($data[0] . '.bak', $data[0]);
+                        $this->log(3, "+ restore $data[0] from $data[0].bak");
+                    }
+                    break;
                 case 'rename':
                     @unlink($data[0]);
                     $this->log(3, "+ rm $data[0]");
@@ -506,25 +820,11 @@
                 case 'delete':
                     break;
                 case 'installed_as':
-                    if (isset($this->pkginfo['filelist'])) {
-                        unset($this->pkginfo['filelist'][$data[0]]['installed_as']);
-                    }
-                    if (isset($this->pkginfo['filelist']['dirtree'][dirname($data[1])])) {
-                        unset($this->pkginfo['filelist']['dirtree'][dirname($data[1])]);
-                        while(!empty($data[3]) && $data[3] != '/' && $data[3] != '\\'
-                              && $data[3] != '.') {
-                            unset($this->pkginfo['filelist']['dirtree']
-                                [$this->_prependPath($data[3], $data[2])]);
-                            $data[3] = dirname($data[3]);
-                        }
-                    }
-                    if (isset($this->pkginfo['filelist']['dirtree'])
-                          && !count($this->pkginfo['filelist']['dirtree'])) {
-                        unset($this->pkginfo['filelist']['dirtree']);
-                    }
+                    $this->pkginfo->setInstalledAs($data[0], false);
                     break;
             }
         }
+        $this->pkginfo->resetDirtree();
         $this->file_operations = array();
     }
 
@@ -574,12 +874,84 @@
     }
 
     // }}}
+    // {{{ _parsePackageXml()
+
+    function _parsePackageXml(&$descfile, &$tmpdir)
+    {
+        if (substr($descfile, -4) == '.xml') {
+            $tmpdir = false;
+        } else {
+            // {{{ Decompress pack in tmp dir -------------------------------------
+
+            // To allow relative package file names
+            $descfile = realpath($descfile);
+
+            if (PEAR::isError($tmpdir = System::mktemp('-d'))) {
+                return $tmpdir;
+            }
+            $this->log(3, '+ tmp dir created at ' . $tmpdir);
+            // }}}
+        }
+        // Parse xml file -----------------------------------------------
+        $pkg = new PEAR_PackageFile($this->config, $this->debug, $tmpdir);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $p = &$pkg->fromAnyFile($descfile, PEAR_VALIDATE_INSTALLING);
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($p)) {
+            if (is_array($p->getUserInfo())) {
+                foreach ($p->getUserInfo() as $err) {
+                    $loglevel = $err['level'] == 'error' ? 0 : 1;
+                    if (!isset($this->_options['soft'])) {
+                        $this->log($loglevel, ucfirst($err['level']) . ': ' . $err['message']);
+                    }
+                }
+            }
+            return $this->raiseError('Installation failed: invalid package file');
+        } else {
+            $descfile = $p->getPackageFile();
+        }
+        return $p;
+    }
+
+    // }}}
+    /**
+     * Set the list of PEAR_Downloader_Package objects to allow more sane
+     * dependency validation
+     * @param array
+     */
+    function setDownloadedPackages(&$pkgs)
+    {
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $err = $this->analyzeDependencies($pkgs);
+        PEAR::popErrorHandling();
+        if (PEAR::isError($err)) {
+            return $err;
+        }
+        $this->_downloadedPackages = &$pkgs;
+    }
+
+    /**
+     * Set the list of PEAR_Downloader_Package objects to allow more sane
+     * dependency validation
+     * @param array
+     */
+    function setUninstallPackages(&$pkgs)
+    {
+        $this->_downloadedPackages = &$pkgs;
+    }
+
+    function getInstallPackages()
+    {
+        return $this->_downloadedPackages;
+    }
+
     // {{{ install()
 
     /**
      * Installs the files within the package file specified.
      *
-     * @param string $pkgfile path to the package file
+     * @param string|PEAR_Downloader_Package $pkgfile path to the package file,
+     *        or a pre-initialized packagefile object
      * @param array $options
      * recognized options:
      * - installroot   : optional prefix directory for installation
@@ -596,118 +968,130 @@
 
     function install($pkgfile, $options = array())
     {
-        $php_dir = $this->config->get('php_dir');
-        if (isset($options['installroot'])) {
-            if (substr($options['installroot'], -1) == DIRECTORY_SEPARATOR) {
-                $options['installroot'] = substr($options['installroot'], 0, -1);
-            }
-            $php_dir = $this->_prependPath($php_dir, $options['installroot']);
-            $this->installroot = $options['installroot'];
+        $this->_options = $options;
+        $this->_registry = &$this->config->getRegistry();
+        if (is_object($pkgfile)) {
+            $dlpkg = &$pkgfile;
+            $pkg = $pkgfile->getPackageFile();
+            $pkgfile = $pkg->getArchiveFile();
+            $descfile = $pkg->getPackageFile();
+            $tmpdir = dirname($descfile);
         } else {
-            $this->installroot = '';
-        }
-        $this->registry = &new PEAR_Registry($php_dir);
-        //  ==> XXX should be removed later on
-        $flag_old_format = false;
-
-        if (substr($pkgfile, -4) == '.xml') {
             $descfile = $pkgfile;
-        } else {
-            // {{{ Decompress pack in tmp dir -------------------------------------
-
-            // To allow relative package file names
-            $pkgfile = realpath($pkgfile);
-
-            if (PEAR::isError($tmpdir = System::mktemp('-d'))) {
-                return $tmpdir;
+            $tmpdir = '';
+            if (PEAR::isError($pkg = &$this->_parsePackageXml($descfile, $tmpdir))) {
+                return $pkg;
             }
-            $this->log(3, '+ tmp dir created at ' . $tmpdir);
+        }
 
+        if (realpath($descfile) != realpath($pkgfile)) {
             $tar = new Archive_Tar($pkgfile);
             if (!@$tar->extract($tmpdir)) {
                 return $this->raiseError("unable to unpack $pkgfile");
             }
-
-            // {{{ Look for existing package file
-            $descfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
-
-            if (!is_file($descfile)) {
-                // ----- Look for old package archive format
-                // In this format the package.xml file was inside the
-                // Package-n.n directory
-                $dp = opendir($tmpdir);
-                do {
-                    $pkgdir = readdir($dp);
-                } while ($pkgdir{0} == '.');
-
-                $descfile = $tmpdir . DIRECTORY_SEPARATOR . $pkgdir . DIRECTORY_SEPARATOR . 'package.xml';
-                $flag_old_format = true;
-                $this->log(0, "warning : you are using an archive with an old format");
-            }
-            // }}}
-            // <== XXX This part should be removed later on
-            // }}}
         }
 
-        if (!is_file($descfile)) {
-            return $this->raiseError("no package.xml file after extracting the archive");
+        $pkgname = $pkg->getName();
+        $channel = $pkg->getChannel();
+        if (isset($this->_options['packagingroot'])) {
+            $packrootphp_dir = $this->_prependPath(
+                $this->config->get('php_dir', null, 'pear.php.net'),
+                $this->_options['packagingroot']);
         }
 
-        // Parse xml file -----------------------------------------------
-        $pkginfo = $this->infoFromDescriptionFile($descfile);
-        if (PEAR::isError($pkginfo)) {
-            return $pkginfo;
-        }
-        $this->validatePackageInfo($pkginfo, $errors, $warnings);
-        // XXX We allow warnings, do we have to do it?
-        if (count($errors)) {
-            if (empty($options['force'])) {
-                return $this->raiseError("The following errors where found (use force option to install anyway):\n".
-                                         implode("\n", $errors));
+        if (isset($options['installroot'])) {
+            $this->config->setInstallRoot($options['installroot']);
+            $this->_registry = &$this->config->getRegistry();
+            $installregistry = &$this->_registry;
+            $this->installroot = ''; // all done automagically now
+        } else {
+            $this->config->setInstallRoot(false);
+            $this->_registry = &$this->config->getRegistry();
+            if (isset($this->_options['packagingroot'])) {
+                $installregistry = &new PEAR_Registry($packrootphp_dir);
+                $php_dir = $packrootphp_dir;
             } else {
-                $this->log(0, "warning : the following errors were found:\n".
-                           implode("\n", $errors));
-            }
-        }
-
-        $pkgname = $pkginfo['package'];
-
-        // {{{ Check dependencies -------------------------------------------
-        if (isset($pkginfo['release_deps']) && empty($options['nodeps'])) {
-            $dep_errors = '';
-            $error = $this->checkDeps($pkginfo, $dep_errors);
-            if ($error == true) {
-                if (empty($options['soft'])) {
-                    $this->log(0, substr($dep_errors, 1));
-                }
-                return $this->raiseError("$pkgname: Dependencies failed");
-            } else if (!empty($dep_errors)) {
-                // Print optional dependencies
-                if (empty($options['soft'])) {
-                    $this->log(0, $dep_errors);
-                }
+                $installregistry = &$this->_registry;
+                $php_dir = $this->config->get('php_dir', null, $channel);
             }
+            $this->installroot = '';
         }
-        // }}}
 
         // {{{ checks to do when not in "force" mode
-        if (empty($options['force'])) {
-            $test = $this->registry->checkFileMap($pkginfo);
+        if (empty($options['force']) && @is_dir($this->config->get('php_dir'))) {
+            $testp = $channel == 'pear.php.net' ? $pkgname : array($channel, $pkgname);
+            $instfilelist = $pkg->getInstallationFileList(true);
+            if (PEAR::isError($instfilelist)) {
+                return $instfilelist;
+            }
+            $test = $installregistry->checkFileMap($instfilelist, $testp, '1.1');
+            if (PEAR::isError($test)) {
+                return $test;
+            }
             if (sizeof($test)) {
-                $tmp = $test;
-                foreach ($tmp as $file => $pkg) {
-                    if ($pkg == $pkgname) {
-                        unset($test[$file]);
+                $pkgs = $this->getInstallPackages();
+                $found = false;
+                foreach ($pkgs as $param) {
+                    if ($pkg->isSubpackageOf($param)) {
+                        $found = true;
+                        break;
+                    }
+                }
+                if ($found) {
+                    // subpackages can conflict with earlier versions of parent packages
+                    $parentreg = $installregistry->packageInfo($param->getPackage(), null, $param->getChannel());
+                    $tmp = $test;
+                    foreach ($tmp as $file => $info) {
+                        if (is_array($info)) {
+                            if (strtolower($info[1]) == strtolower($param->getPackage()) &&
+                                  strtolower($info[0]) == strtolower($param->getChannel())) {
+                                unset($test[$file]);
+                                unset($parentreg['filelist'][$file]);
+                            }
+                        } else {
+                            if (strtolower($param->getChannel()) != 'pear.php.net') {
+                                continue;
+                            }
+                            if (strtolower($info) == strtolower($param->getPackage())) {
+                                unset($test[$file]);
+                                unset($parentreg['filelist'][$file]);
+                            }
+                        }
+                    }
+                    $pfk = &new PEAR_PackageFile($this->config);
+                    $parentpkg = &$pfk->fromArray($parentreg);
+                    $installregistry->updatePackage2($parentpkg);
+                }
+                if ($param->getChannel() == 'pecl.php.net' && isset($options['upgrade'])) {
+                    $tmp = $test;
+                    foreach ($tmp as $file => $info) {
+                        if (is_string($info)) {
+                            // pear.php.net packages are always stored as strings
+                            if (strtolower($info) == strtolower($param->getPackage())) {
+                                // upgrading existing package
+                                unset($test[$file]);
+                            }
+                        }
                     }
                 }
                 if (sizeof($test)) {
-                    $msg = "$pkgname: conflicting files found:\n";
+                    $msg = "$channel/$pkgname: conflicting files found:\n";
                     $longest = max(array_map("strlen", array_keys($test)));
                     $fmt = "%${longest}s (%s)\n";
-                    foreach ($test as $file => $pkg) {
-                        $msg .= sprintf($fmt, $file, $pkg);
+                    foreach ($test as $file => $info) {
+                        if (!is_array($info)) {
+                            $info = array('pear.php.net', $info);
+                        }
+                        $info = $info[0] . '/' . $info[1];
+                        $msg .= sprintf($fmt, $file, $info);
+                    }
+                    if (!isset($options['ignore-errors'])) {
+                        return $this->raiseError($msg);
+                    } else {
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "WARNING: $msg");
+                        }
                     }
-                    return $this->raiseError($msg);
                 }
             }
         }
@@ -715,23 +1099,50 @@
 
         $this->startFileTransaction();
 
-        if (empty($options['upgrade'])) {
+        if (empty($options['upgrade']) && empty($options['soft'])) {
             // checks to do only when installing new packages
-            if (empty($options['force']) && $this->registry->packageExists($pkgname)) {
-                return $this->raiseError("$pkgname already installed");
+            if ($channel == 'pecl.php.net') {
+                $test = $installregistry->packageExists($pkgname, $channel);
+                if (!$test) {
+                    $test = $installregistry->packageExists($pkgname, 'pear.php.net');
+                }
+            } else {
+                $test = $installregistry->packageExists($pkgname, $channel);
+            }
+            if (empty($options['force']) && $test) {
+                return $this->raiseError("$channel/$pkgname is already installed");
             }
         } else {
-            if ($this->registry->packageExists($pkgname)) {
-                $v1 = $this->registry->packageInfo($pkgname, 'version');
-                $v2 = $pkginfo['version'];
+            $usechannel = $channel;
+            if ($channel == 'pecl.php.net') {
+                $test = $installregistry->packageExists($pkgname, $channel);
+                if (!$test) {
+                    $test = $installregistry->packageExists($pkgname, 'pear.php.net');
+                    $usechannel = 'pear.php.net';
+                }
+            } else {
+                $test = $installregistry->packageExists($pkgname, $channel);
+            }
+            if ($test) {
+                $v1 = $installregistry->packageInfo($pkgname, 'version', $usechannel);
+                $v2 = $pkg->getVersion();
                 $cmp = version_compare("$v1", "$v2", 'gt');
                 if (empty($options['force']) && !version_compare("$v2", "$v1", 'gt')) {
                     return $this->raiseError("upgrade to a newer version ($v2 is not newer than $v1)");
                 }
                 if (empty($options['register-only'])) {
                     // when upgrading, remove old release's files first:
-                    if (PEAR::isError($err = $this->_deletePackageFiles($pkgname))) {
-                        return $this->raiseError($err);
+                    if (PEAR::isError($err = $this->_deletePackageFiles($pkgname, $usechannel,
+                          true))) {
+                        if (!isset($options['ignore-errors'])) {
+                            return $this->raiseError($err);
+                        } else {
+                            if (!isset($options['soft'])) {
+                                $this->log(0, 'WARNING: ' . $err->getMessage());
+                            }
+                        }
+                    } else {
+                        $backedup = $err;
                     }
                 }
             }
@@ -740,32 +1151,50 @@
         // {{{ Copy files to dest dir ---------------------------------------
 
         // info from the package it self we want to access from _installFile
-        $this->pkginfo = &$pkginfo;
+        $this->pkginfo = &$pkg;
         // used to determine whether we should build any C code
         $this->source_files = 0;
 
+        $savechannel = $this->config->get('default_channel');
         if (empty($options['register-only'])) {
             if (!is_dir($php_dir)) {
-                return $this->raiseError("no script destination directory\n",
-                                         null, PEAR_ERROR_DIE);
+                if (PEAR::isError(System::mkdir(array('-p'), $php_dir))) {
+                    return $this->raiseError("no installation destination directory '$php_dir'\n");
+                }
             }
 
             $tmp_path = dirname($descfile);
             if (substr($pkgfile, -4) != '.xml') {
-                $tmp_path .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkginfo['version'];
-            }
-
-            //  ==> XXX This part should be removed later on
-            if ($flag_old_format) {
-                $tmp_path = dirname($descfile);
+                $tmp_path .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkg->getVersion();
             }
-            // <== XXX This part should be removed later on
 
+            $this->configSet('default_channel', $channel);
             // {{{ install files
-            foreach ($pkginfo['filelist'] as $file => $atts) {
-                $this->expectError(PEAR_INSTALLER_FAILED);
-                $res = $this->_installFile($file, $atts, $tmp_path, $options);
-                $this->popExpect();
+            
+            if ($pkg->getPackagexmlVersion() == '2.0') {
+                $filelist = $pkg->getInstallationFilelist();
+                if (PEAR::isError($filelist)) {
+                    return $filelist;
+                }
+            } else {
+                $filelist = $pkg->getFileList();
+            }
+            if (PEAR::isError($filelist)) {
+                return $filelist;
+            }
+            $pkg->resetFilelist();
+            $pkg->setLastInstalledVersion($installregistry->packageInfo($pkg->getPackage(),
+                'version', $pkg->getChannel()));
+            foreach ($filelist as $file => $atts) {
+                if ($pkg->getPackagexmlVersion() == '1.0') {
+                    $this->expectError(PEAR_INSTALLER_FAILED);
+                    $res = $this->_installFile($file, $atts, $tmp_path, $options);
+                    $this->popExpect();
+                } else {
+                    $this->expectError(PEAR_INSTALLER_FAILED);
+                    $res = $this->_installFile2($pkg, $file, $atts, $tmp_path, $options);
+                    $this->popExpect();
+                }
                 if (PEAR::isError($res)) {
                     if (empty($options['ignore-errors'])) {
                         $this->rollbackFileTransaction();
@@ -774,91 +1203,181 @@
                         }
                         return $this->raiseError($res);
                     } else {
-                        $this->log(0, "Warning: " . $res->getMessage());
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "Warning: " . $res->getMessage());
+                        }
                     }
                 }
-                if ($res != PEAR_INSTALLER_OK) {
-                    // Do not register files that were not installed
-                    unset($pkginfo['filelist'][$file]);
+                if ($res == PEAR_INSTALLER_OK) {
+                    // Register files that were installed
+                    $pkg->installedFile($file, $atts);
                 }
             }
             // }}}
 
             // {{{ compile and install source files
             if ($this->source_files > 0 && empty($options['nobuild'])) {
-                $this->log(1, "$this->source_files source files, building");
-                $bob = &new PEAR_Builder($this->ui);
-                $bob->debug = $this->debug;
-                $built = $bob->build($descfile, array(&$this, '_buildCallback'));
-                if (PEAR::isError($built)) {
-                    $this->rollbackFileTransaction();
-                    return $built;
-                }
-                $this->log(1, "\nBuild process completed successfully");
-                foreach ($built as $ext) {
-                    $bn = basename($ext['file']);
-                    list($_ext_name, ) = explode('.', $bn);
-                    if (extension_loaded($_ext_name)) {
-                        $this->raiseError("Extension '$_ext_name' already loaded. Please unload it ".
-                                          "in your php.ini file prior to install or upgrade it.");
-                    }
-                    // extension dir must be created if it doesn't exist
-                    // patch by Tomas Cox (modified by Greg Beaver)
-                    $ext_dir = $this->config->get('ext_dir');
-                    if (!@is_dir($ext_dir) && !System::mkdir(array('-p', $ext_dir))) {
-                        $this->log(3, "+ mkdir -p $ext_dir");
-                        return $this->raiseError("failed to create extension dir '$ext_dir'");
-                    }
-                    $dest = $ext_dir . DIRECTORY_SEPARATOR . $bn;
-                    $this->log(1, "Installing '$bn' at ext_dir ($dest)");
-                    $this->log(3, "+ cp $ext[file] ext_dir ($dest)");
-                    $copyto = $this->_prependPath($dest, $this->installroot);
-                    if (!@copy($ext['file'], $copyto)) {
-                        $this->rollbackFileTransaction();
-                        return $this->raiseError("failed to copy $bn to $copyto");
-                    }
-                    $pkginfo['filelist'][$bn] = array(
-                        'role' => 'ext',
-                        'installed_as' => $dest,
-                        'php_api' => $ext['php_api'],
-                        'zend_mod_api' => $ext['zend_mod_api'],
-                        'zend_ext_api' => $ext['zend_ext_api'],
-                        );
+                if (PEAR::isError($err =
+                      $this->_compileSourceFiles($savechannel, $pkg))) {
+                    return $err;
                 }
             }
             // }}}
         }
 
+        if (isset($backedup)) {
+            $this->_removeBackups($backedup);
+        }
         if (!$this->commitFileTransaction()) {
             $this->rollbackFileTransaction();
+            $this->configSet('default_channel', $savechannel);
             return $this->raiseError("commit failed", PEAR_INSTALLER_FAILED);
         }
         // }}}
 
         $ret = false;
+        $installphase = 'install';
+        $oldversion = false;
         // {{{ Register that the package is installed -----------------------
         if (empty($options['upgrade'])) {
             // if 'force' is used, replace the info in registry
-            if (!empty($options['force']) && $this->registry->packageExists($pkgname)) {
-                $this->registry->deletePackage($pkgname);
+            $usechannel = $channel;
+            if ($channel == 'pecl.php.net') {
+                $test = $installregistry->packageExists($pkgname, $channel);
+                if (!$test) {
+                    $test = $installregistry->packageExists($pkgname, 'pear.php.net');
+                    $usechannel = 'pear.php.net';
+                }
+            } else {
+                $test = $installregistry->packageExists($pkgname, $channel);
+            }
+            if (!empty($options['force']) && $test) {
+                $oldversion = $installregistry->packageInfo($pkgname, 'version', $usechannel);
+                $installregistry->deletePackage($pkgname, $usechannel);
             }
-            $ret = $this->registry->addPackage($pkgname, $pkginfo);
+            $ret = $installregistry->addPackage2($pkg);
         } else {
+            $usechannel = $channel;
+            if ($channel == 'pecl.php.net') {
+                $test = $installregistry->packageExists($pkgname, $channel);
+                if (!$test) {
+                    $test = $installregistry->packageExists($pkgname, 'pear.php.net');
+                    $usechannel = 'pear.php.net';
+                }
+            } else {
+                $test = $installregistry->packageExists($pkgname, $channel);
+            }
             // new: upgrade installs a package if it isn't installed
-            if (!$this->registry->packageExists($pkgname)) {
-                $ret = $this->registry->addPackage($pkgname, $pkginfo);
+            if (!$test) {
+                $ret = $installregistry->addPackage2($pkg);
             } else {
-                $ret = $this->registry->updatePackage($pkgname, $pkginfo, false);
+                if ($usechannel != $channel) {
+                    $installregistry->deletePackage($pkgname, $usechannel);
+                    $ret = $installregistry->addPackage2($pkg);
+                } else {
+                    $ret = $installregistry->updatePackage2($pkg);
+                }
+                $installphase = 'upgrade';
             }
         }
         if (!$ret) {
-            return $this->raiseError("Adding package $pkgname to registry failed");
+            $this->configSet('default_channel', $savechannel);
+            return $this->raiseError("Adding package $channel/$pkgname to registry failed");
         }
         // }}}
-        return $pkginfo;
+        $this->configSet('default_channel', $savechannel);
+        if (class_exists('PEAR_Task_Common')) { // this is auto-included if any tasks exist
+            if (PEAR_Task_Common::hasPostinstallTasks()) {
+                PEAR_Task_Common::runPostinstallTasks($installphase);
+            }
+        }
+        return $pkg->toArray(true);
     }
 
     // }}}
+
+    // {{{ _compileSourceFiles()
+    /**
+     * @param string
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     */
+    function _compileSourceFiles($savechannel, &$filelist)
+    {
+        require_once 'PEAR/Builder.php';
+        $this->log(1, "$this->source_files source files, building");
+        $bob = &new PEAR_Builder($this->ui);
+        $bob->debug = $this->debug;
+        $built = $bob->build($filelist, array(&$this, '_buildCallback'));
+        if (PEAR::isError($built)) {
+            $this->rollbackFileTransaction();
+            $this->configSet('default_channel', $savechannel);
+            return $built;
+        }
+        $this->log(1, "\nBuild process completed successfully");
+        foreach ($built as $ext) {
+            $bn = basename($ext['file']);
+            list($_ext_name, $_ext_suff) = explode('.', $bn);
+            if ($_ext_suff == '.so' || $_ext_suff == '.dll') {
+                if (extension_loaded($_ext_name)) {
+                    $this->raiseError("Extension '$_ext_name' already loaded. " .
+                                      'Please unload it in your php.ini file ' .
+                                      'prior to install or upgrade');
+                }
+                $role = 'ext';
+            } else {
+                $role = 'src';
+            }
+            $dest = $ext['dest'];
+            $this->log(1, "Installing '$ext[file]'");
+            $copyto = $this->_prependPath($dest, $this->installroot);
+            $copydir = dirname($copyto);
+            if (!@is_dir($copydir)) {
+                if (!$this->mkDirHier($copydir)) {
+                    return $this->raiseError("failed to mkdir $copydir",
+                        PEAR_INSTALLER_FAILED);
+                }
+                $this->log(3, "+ mkdir $copydir");
+            }
+            if (!@copy($ext['file'], $copyto)) {
+                return $this->raiseError("failed to write $copyto", PEAR_INSTALLER_FAILED);
+            }
+            $this->log(3, "+ cp $ext[file] $copyto");
+            if (!OS_WINDOWS) {
+                $mode = 0666 & ~(int)octdec($this->config->get('umask'));
+                $this->addFileOperation('chmod', array($mode, $copyto));
+                if (!@chmod($copyto, $mode)) {
+                    $this->log(0, "failed to change mode of $copyto");
+                }
+            }
+            $this->addFileOperation('rename', array($ext['file'], $copyto));
+
+            if ($filelist->getPackageXmlVersion() == '1.0') {
+                $filelist->installedFile($bn, array(
+                    'role' => $role,
+                    'name' => $bn,
+                    'installed_as' => $dest,
+                    'php_api' => $ext['php_api'],
+                    'zend_mod_api' => $ext['zend_mod_api'],
+                    'zend_ext_api' => $ext['zend_ext_api'],
+                    ));
+            } else {
+                $filelist->installedFile($bn, array('attribs' => array(
+                    'role' => $role,
+                    'name' => $bn,
+                    'installed_as' => $dest,
+                    'php_api' => $ext['php_api'],
+                    'zend_mod_api' => $ext['zend_mod_api'],
+                    'zend_ext_api' => $ext['zend_ext_api'],
+                    )));
+            }
+        }
+    }
+
+    // }}}
+    function &getUninstallPackages()
+    {
+        return $this->_downloadedPackages;
+    }
     // {{{ uninstall()
 
     /**
@@ -875,49 +1394,100 @@
      */
     function uninstall($package, $options = array())
     {
-        $php_dir = $this->config->get('php_dir');
         if (isset($options['installroot'])) {
-            if (substr($options['installroot'], -1) == DIRECTORY_SEPARATOR) {
-                $options['installroot'] = substr($options['installroot'], 0, -1);
-            }
-            $this->installroot = $options['installroot'];
-            $php_dir = $this->_prependPath($php_dir, $this->installroot);
+            $this->config->setInstallRoot($options['installroot']);
+            $this->installroot = '';
         } else {
+            $this->config->setInstallRoot('');
             $this->installroot = '';
         }
-        $this->registry = &new PEAR_Registry($php_dir);
-        $filelist = $this->registry->packageInfo($package, 'filelist');
-        if ($filelist == null) {
-            return $this->raiseError("$package not installed");
-        }
-        if (empty($options['nodeps'])) {
-            $depchecker = &new PEAR_Dependency($this->registry);
-            $error = $depchecker->checkPackageUninstall($errors, $warning, $package);
-            if ($error) {
-                return $this->raiseError($errors . 'uninstall failed');
+        $this->_registry = &$this->config->getRegistry();
+        if (is_object($package)) {
+            $channel = $package->getChannel();
+            $pkg = $package;
+            $package = $pkg->getPackage();
+        } else {
+            $pkg = false;
+            $info = $this->_registry->parsePackageName($package,
+                $this->config->get('default_channel'));
+            $channel = $info['channel'];
+            $package = $info['package'];
+        }
+        $savechannel = $this->config->get('default_channel');
+        $this->configSet('default_channel', $channel);
+        if (!is_object($pkg)) {
+            $pkg = $this->_registry->getPackage($package, $channel);
+        }
+        if (!$pkg) {
+            $this->configSet('default_channel', $savechannel);
+            return $this->raiseError($this->_registry->parsedPackageNameToString(
+                array(
+                    'channel' => $channel,
+                    'package' => $package
+                ), true) . ' not installed');
+        }
+        if ($pkg->getInstalledBinary()) {
+            // this is just an alias for a binary package
+            return $this->_registry->deletePackage($package, $channel);
+        }
+        $filelist = $pkg->getFilelist();
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        if (!class_exists('PEAR_Dependency2')) {
+            require_once 'PEAR/Dependency2.php';
+        }
+        $depchecker = &new PEAR_Dependency2($this->config, $options, 
+            array('channel' => $channel, 'package' => $package),
+            PEAR_VALIDATE_UNINSTALLING);
+        $e = $depchecker->validatePackageUninstall($this);
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($e)) {
+            if (!isset($options['ignore-errors'])) {
+                return $this->raiseError($e);
+            } else {
+                if (!isset($options['soft'])) {
+                    $this->log(0, 'WARNING: ' . $e->getMessage());
+                }
             }
-            if ($warning) {
-                $this->log(0, $warning);
+        } elseif (is_array($e)) {
+            if (!isset($options['soft'])) {
+                $this->log(0, $e[0]);
             }
         }
         // {{{ Delete the files
         $this->startFileTransaction();
-        if (PEAR::isError($err = $this->_deletePackageFiles($package))) {
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        if (PEAR::isError($err = $this->_deletePackageFiles($package, $channel))) {
+            PEAR::popErrorHandling();
             $this->rollbackFileTransaction();
-            return $this->raiseError($err);
+            $this->configSet('default_channel', $savechannel);
+            if (!isset($options['ignore-errors'])) {
+                return $this->raiseError($err);
+            } else {
+                if (!isset($options['soft'])) {
+                    $this->log(0, 'WARNING: ' . $err->getMessage());
+                }
+            }
+        } else {
+            PEAR::popErrorHandling();
         }
         if (!$this->commitFileTransaction()) {
             $this->rollbackFileTransaction();
-            return $this->raiseError("uninstall failed");
+            if (!isset($options['ignore-errors'])) {
+                return $this->raiseError("uninstall failed");
+            } elseif (!isset($options['soft'])) {
+                $this->log(0, 'WARNING: uninstall failed');
+            }
         } else {
             $this->startFileTransaction();
-            if (!isset($filelist['dirtree']) || !count($filelist['dirtree'])) {
-                return $this->registry->deletePackage($package);
-            }
-            // attempt to delete empty directories
-            uksort($filelist['dirtree'], array($this, '_sortDirs'));
-            foreach($filelist['dirtree'] as $dir => $notused) {
-                $this->addFileOperation('rmdir', array($dir));
+            if ($dirtree = $pkg->getDirTree()) {
+                // attempt to delete empty directories
+                uksort($dirtree, array($this, '_sortDirs'));
+                foreach($dirtree as $dir => $notused) {
+                    $this->addFileOperation('rmdir', array($dir));
+                }
+            } else {
+                $this->configSet('default_channel', $savechannel);
+                return $this->_registry->deletePackage($package, $channel);
             }
             if (!$this->commitFileTransaction()) {
                 $this->rollbackFileTransaction();
@@ -925,8 +1495,46 @@
         }
         // }}}
 
+        $this->configSet('default_channel', $savechannel);
         // Register that the package is no longer installed
-        return $this->registry->deletePackage($package);
+        return $this->_registry->deletePackage($package, $channel);
+    }
+
+    /**
+     * Sort a list of arrays of array(downloaded packagefilename) by dependency.
+     *
+     * It also removes duplicate dependencies
+     * @param array an array of PEAR_PackageFile_v[1/2] objects
+     * @return array|PEAR_Error array of array(packagefilename, package.xml contents)
+     */
+    function sortPackagesForUninstall(&$packages)
+    {
+        $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->config);
+        if (PEAR::isError($this->_dependencyDB)) {
+            return $this->_dependencyDB;
+        }
+        usort($packages, array(&$this, '_sortUninstall'));
+    }
+
+    function _sortUninstall($a, $b)
+    {
+        if (!$a->getDeps() && !$b->getDeps()) {
+            return 0; // neither package has dependencies, order is insignificant
+        }
+        if ($a->getDeps() && !$b->getDeps()) {
+            return -1; // $a must be installed after $b because $a has dependencies
+        }
+        if (!$a->getDeps() && $b->getDeps()) {
+            return 1; // $b must be installed after $a because $b has dependencies
+        }
+        // both packages have dependencies
+        if ($this->_dependencyDB->dependsOn($a, $b)) {
+            return -1;
+        }
+        if ($this->_dependencyDB->dependsOn($b, $a)) {
+            return 1;
+        }
+        return 0;
     }
 
     // }}}
@@ -939,92 +1547,7 @@
     }
 
     // }}}
-    // {{{ checkDeps()
-
-    /**
-     * Check if the package meets all dependencies
-     *
-     * @param  array   Package information (passed by reference)
-     * @param  string  Error message (passed by reference)
-     * @return boolean False when no error occured, otherwise true
-     */
-    function checkDeps(&$pkginfo, &$errors)
-    {
-        if (empty($this->registry)) {
-            $this->registry = &new PEAR_Registry($this->config->get('php_dir'));
-        }
-        $depchecker = &new PEAR_Dependency($this->registry);
-        $error = $errors = '';
-        $failed_deps = $optional_deps = array();
-        if (is_array($pkginfo['release_deps'])) {
-            foreach($pkginfo['release_deps'] as $dep) {
-                $code = $depchecker->callCheckMethod($error, $dep);
-                if ($code) {
-                    if (isset($dep['optional']) && $dep['optional'] == 'yes') {
-                        $optional_deps[] = array($dep, $code, $error);
-                    } else {
-                        $failed_deps[] = array($dep, $code, $error);
-                    }
-                }
-            }
-            // {{{ failed dependencies
-            $n = count($failed_deps);
-            if ($n > 0) {
-                for ($i = 0; $i < $n; $i++) {
-                    if (isset($failed_deps[$i]['type'])) {
-                        $type = $failed_deps[$i]['type'];
-                    } else {
-                        $type = 'pkg';
-                    }
-                    switch ($failed_deps[$i][1]) {
-                        case PEAR_DEPENDENCY_MISSING:
-                            if ($type == 'pkg') {
-                                // install
-                            }
-                            $errors .= "\n" . $failed_deps[$i][2];
-                            break;
-                        case PEAR_DEPENDENCY_UPGRADE_MINOR:
-                            if ($type == 'pkg') {
-                                // upgrade
-                            }
-                            $errors .= "\n" . $failed_deps[$i][2];
-                            break;
-                        default:
-                            $errors .= "\n" . $failed_deps[$i][2];
-                            break;
-                    }
-                }
-                return true;
-            }
-            // }}}
-
-            // {{{ optional dependencies
-            $count_optional = count($optional_deps);
-            if ($count_optional > 0) {
-                $errors = "Optional dependencies:";
-
-                for ($i = 0; $i < $count_optional; $i++) {
-                    if (isset($optional_deps[$i]['type'])) {
-                        $type = $optional_deps[$i]['type'];
-                    } else {
-                        $type = 'pkg';
-                    }
-                    switch ($optional_deps[$i][1]) {
-                        case PEAR_DEPENDENCY_MISSING:
-                        case PEAR_DEPENDENCY_UPGRADE_MINOR:
-                        default:
-                            $errors .= "\n" . $optional_deps[$i][2];
-                            break;
-                    }
-                }
-                return false;
-            }
-            // }}}
-        }
-        return false;
-    }
 
-    // }}}
     // {{{ _buildCallback()
 
     function _buildCallback($what, $data)
@@ -1043,11 +1566,16 @@
     function md5_file($filename) {
         $fp = fopen($filename, "r");
         if (!$fp) return null;
-        $contents = fread($fp, filesize($filename));
-        fclose($fp);
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $contents = file_get_contents($filename);
+        } else {
+            $contents = fread($fp, filesize($filename));
+            fclose($fp);
+        }
         return md5($contents);
     }
 }
 // }}}
 
-?>
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v1.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v1.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v1.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v1.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1267 @@
+<?php
+/**
+ * package.xml generation class, package.xml version 1.0
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: v1.php,v 1.70 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * needed for PEAR_VALIDATE_* constants
+ */
+require_once 'PEAR/Validate.php';
+require_once 'System.php';
+require_once 'PEAR/PackageFile/v2.php';
+/**
+ * This class converts a PEAR_PackageFile_v1 object into any output format.
+ *
+ * Supported output formats include array, XML string, and a PEAR_PackageFile_v2
+ * object, for converting package.xml 1.0 into package.xml 2.0 with no sweat.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_Generator_v1
+{
+    /**
+     * @var PEAR_PackageFile_v1
+     */
+    var $_packagefile;
+    function PEAR_PackageFile_Generator_v1(&$packagefile)
+    {
+        $this->_packagefile = &$packagefile;
+    }
+
+    function getPackagerVersion()
+    {
+        return '1.4.6';
+    }
+
+    /**
+     * @param PEAR_Packager
+     * @param bool if true, a .tgz is written, otherwise a .tar is written
+     * @param string|null directory in which to save the .tgz
+     * @return string|PEAR_Error location of package or error object
+     */
+    function toTgz(&$packager, $compress = true, $where = null)
+    {
+        require_once 'Archive/Tar.php';
+        if ($where === null) {
+            if (!($where = System::mktemp(array('-d')))) {
+                return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: mktemp failed');
+            }
+        } elseif (!@System::mkDir(array('-p', $where))) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: "' . $where . '" could' .
+                ' not be created');
+        }
+        if (file_exists($where . DIRECTORY_SEPARATOR . 'package.xml') &&
+              !is_file($where . DIRECTORY_SEPARATOR . 'package.xml')) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: unable to save package.xml as' .
+                ' "' . $where . DIRECTORY_SEPARATOR . 'package.xml"');
+        }
+        if (!$this->_packagefile->validate(PEAR_VALIDATE_PACKAGING)) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: invalid package file');
+        }
+        $pkginfo = $this->_packagefile->getArray();
+        $ext = $compress ? '.tgz' : '.tar';
+        $pkgver = $pkginfo['package'] . '-' . $pkginfo['version'];
+        $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
+        if (file_exists(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext) &&
+              !is_file(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext)) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: cannot create tgz file "' .
+                getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext . '"');
+        }
+        if ($pkgfile = $this->_packagefile->getPackageFile()) {
+            $pkgdir = dirname(realpath($pkgfile));
+            $pkgfile = basename($pkgfile);
+        } else {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: package file object must ' .
+                'be created from a real file');
+        }
+        // {{{ Create the package file list
+        $filelist = array();
+        $i = 0;
+
+        foreach ($this->_packagefile->getFilelist() as $fname => $atts) {
+            $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
+            if (!file_exists($file)) {
+                return PEAR::raiseError("File does not exist: $fname");
+            } else {
+                $filelist[$i++] = $file;
+                if (!isset($atts['md5sum'])) {
+                    $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($file));
+                }
+                $packager->log(2, "Adding file $fname");
+            }
+        }
+        // }}}
+        $packagexml = $this->toPackageFile($where, PEAR_VALIDATE_PACKAGING, 'package.xml', true);
+        if ($packagexml) {
+            $tar =& new Archive_Tar($dest_package, $compress);
+            $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors
+            // ----- Creates with the package.xml file
+            $ok = $tar->createModify(array($packagexml), '', $where);
+            if (PEAR::isError($ok)) {
+                return $ok;
+            } elseif (!$ok) {
+                return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: tarball creation failed');
+            }
+            // ----- Add the content of the package
+            if (!$tar->addModify($filelist, $pkgver, $pkgdir)) {
+                return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: tarball creation failed');
+            }
+            return $dest_package;
+        }
+    }
+
+    /**
+     * @param string|null directory to place the package.xml in, or null for a temporary dir
+     * @param int one of the PEAR_VALIDATE_* constants
+     * @param string name of the generated file
+     * @param bool if true, then no analysis will be performed on role="php" files
+     * @return string|PEAR_Error path to the created file on success
+     */
+    function toPackageFile($where = null, $state = PEAR_VALIDATE_NORMAL, $name = 'package.xml',
+                           $nofilechecking = false)
+    {
+        if (!$this->_packagefile->validate($state, $nofilechecking)) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: invalid package.xml',
+                null, null, null, $this->_packagefile->getValidationWarnings());
+        }
+        if ($where === null) {
+            if (!($where = System::mktemp(array('-d')))) {
+                return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: mktemp failed');
+            }
+        } elseif (!@System::mkDir(array('-p', $where))) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: "' . $where . '" could' .
+                ' not be created');
+        }
+        $newpkgfile = $where . DIRECTORY_SEPARATOR . $name;
+        $np = @fopen($newpkgfile, 'wb');
+        if (!$np) {
+            return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: unable to save ' .
+               "$name as $newpkgfile");
+        }
+        fwrite($np, $this->toXml($state, true));
+        fclose($np);
+        return $newpkgfile;
+    }
+
+    /**
+     * fix both XML encoding to be UTF8, and replace standard XML entities < > " & '
+     *
+     * @param string $string
+     * @return string
+     * @access private
+     */
+    function _fixXmlEncoding($string)
+    {
+        if (version_compare(phpversion(), '5.0.0', 'lt')) {
+            $string = utf8_encode($string);
+        }
+        return strtr($string, array(
+                                          '&'  => '&amp;',
+                                          '>'  => '&gt;',
+                                          '<'  => '&lt;',
+                                          '"'  => '&quot;',
+                                          '\'' => '&apos;' ));
+    }
+
+    /**
+     * Return an XML document based on the package info (as returned
+     * by the PEAR_Common::infoFrom* methods).
+     *
+     * @return string XML data
+     */
+    function toXml($state = PEAR_VALIDATE_NORMAL, $nofilevalidation = false)
+    {
+        $this->_packagefile->setDate(date('Y-m-d'));
+        if (!$this->_packagefile->validate($state, $nofilevalidation)) {
+            return false;
+        }
+        $pkginfo = $this->_packagefile->getArray();
+        static $maint_map = array(
+            "handle" => "user",
+            "name" => "name",
+            "email" => "email",
+            "role" => "role",
+            );
+        $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
+        $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
+        $ret .= "<package version=\"1.0\" packagerversion=\"1.4.6\">\n" .
+" <name>$pkginfo[package]</name>";
+        if (isset($pkginfo['extends'])) {
+            $ret .= "\n<extends>$pkginfo[extends]</extends>";
+        }
+        $ret .=
+ "\n <summary>".$this->_fixXmlEncoding($pkginfo['summary'])."</summary>\n" .
+" <description>".trim($this->_fixXmlEncoding($pkginfo['description']))."\n </description>\n" .
+" <maintainers>\n";
+        foreach ($pkginfo['maintainers'] as $maint) {
+            $ret .= "  <maintainer>\n";
+            foreach ($maint_map as $idx => $elm) {
+                $ret .= "   <$elm>";
+                $ret .= $this->_fixXmlEncoding($maint[$idx]);
+                $ret .= "</$elm>\n";
+            }
+            $ret .= "  </maintainer>\n";
+        }
+        $ret .= "  </maintainers>\n";
+        $ret .= $this->_makeReleaseXml($pkginfo, false, $state);
+        if (isset($pkginfo['changelog']) && count($pkginfo['changelog']) > 0) {
+            $ret .= " <changelog>\n";
+            foreach ($pkginfo['changelog'] as $oldrelease) {
+                $ret .= $this->_makeReleaseXml($oldrelease, true);
+            }
+            $ret .= " </changelog>\n";
+        }
+        $ret .= "</package>\n";
+        return $ret;
+    }
+
+    // }}}
+    // {{{ _makeReleaseXml()
+
+    /**
+     * Generate part of an XML description with release information.
+     *
+     * @param array  $pkginfo    array with release information
+     * @param bool   $changelog  whether the result will be in a changelog element
+     *
+     * @return string XML data
+     *
+     * @access private
+     */
+    function _makeReleaseXml($pkginfo, $changelog = false, $state = PEAR_VALIDATE_NORMAL)
+    {
+        // XXX QUOTE ENTITIES IN PCDATA, OR EMBED IN CDATA BLOCKS!!
+        $indent = $changelog ? "  " : "";
+        $ret = "$indent <release>\n";
+        if (!empty($pkginfo['version'])) {
+            $ret .= "$indent  <version>$pkginfo[version]</version>\n";
+        }
+        if (!empty($pkginfo['release_date'])) {
+            $ret .= "$indent  <date>$pkginfo[release_date]</date>\n";
+        }
+        if (!empty($pkginfo['release_license'])) {
+            $ret .= "$indent  <license>$pkginfo[release_license]</license>\n";
+        }
+        if (!empty($pkginfo['release_state'])) {
+            $ret .= "$indent  <state>$pkginfo[release_state]</state>\n";
+        }
+        if (!empty($pkginfo['release_notes'])) {
+            $ret .= "$indent  <notes>".trim($this->_fixXmlEncoding($pkginfo['release_notes']))
+            ."\n$indent  </notes>\n";
+        }
+        if (!empty($pkginfo['release_warnings'])) {
+            $ret .= "$indent  <warnings>".$this->_fixXmlEncoding($pkginfo['release_warnings'])."</warnings>\n";
+        }
+        if (isset($pkginfo['release_deps']) && sizeof($pkginfo['release_deps']) > 0) {
+            $ret .= "$indent  <deps>\n";
+            foreach ($pkginfo['release_deps'] as $dep) {
+                $ret .= "$indent   <dep type=\"$dep[type]\" rel=\"$dep[rel]\"";
+                if (isset($dep['version'])) {
+                    $ret .= " version=\"$dep[version]\"";
+                }
+                if (isset($dep['optional'])) {
+                    $ret .= " optional=\"$dep[optional]\"";
+                }
+                if (isset($dep['name'])) {
+                    $ret .= ">$dep[name]</dep>\n";
+                } else {
+                    $ret .= "/>\n";
+                }
+            }
+            $ret .= "$indent  </deps>\n";
+        }
+        if (isset($pkginfo['configure_options'])) {
+            $ret .= "$indent  <configureoptions>\n";
+            foreach ($pkginfo['configure_options'] as $c) {
+                $ret .= "$indent   <configureoption name=\"".
+                    $this->_fixXmlEncoding($c['name']) . "\"";
+                if (isset($c['default'])) {
+                    $ret .= " default=\"" . $this->_fixXmlEncoding($c['default']) . "\"";
+                }
+                $ret .= " prompt=\"" . $this->_fixXmlEncoding($c['prompt']) . "\"";
+                $ret .= "/>\n";
+            }
+            $ret .= "$indent  </configureoptions>\n";
+        }
+        if (isset($pkginfo['provides'])) {
+            foreach ($pkginfo['provides'] as $key => $what) {
+                $ret .= "$indent  <provides type=\"$what[type]\" ";
+                $ret .= "name=\"$what[name]\" ";
+                if (isset($what['extends'])) {
+                    $ret .= "extends=\"$what[extends]\" ";
+                }
+                $ret .= "/>\n";
+            }
+        }
+        if (isset($pkginfo['filelist'])) {
+            $ret .= "$indent  <filelist>\n";
+            if ($state ^ PEAR_VALIDATE_PACKAGING) {
+                $ret .= $this->recursiveXmlFilelist($pkginfo['filelist']);
+            } else {
+                foreach ($pkginfo['filelist'] as $file => $fa) {
+                    @$ret .= "$indent   <file role=\"$fa[role]\"";
+                    if (isset($fa['baseinstalldir'])) {
+                        $ret .= ' baseinstalldir="' .
+                            $this->_fixXmlEncoding($fa['baseinstalldir']) . '"';
+                    }
+                    if (isset($fa['md5sum'])) {
+                        $ret .= " md5sum=\"$fa[md5sum]\"";
+                    }
+                    if (isset($fa['platform'])) {
+                        $ret .= " platform=\"$fa[platform]\"";
+                    }
+                    if (!empty($fa['install-as'])) {
+                        $ret .= ' install-as="' .
+                            $this->_fixXmlEncoding($fa['install-as']) . '"';
+                    }
+                    $ret .= ' name="' . $this->_fixXmlEncoding($file) . '"';
+                    if (empty($fa['replacements'])) {
+                        $ret .= "/>\n";
+                    } else {
+                        $ret .= ">\n";
+                        foreach ($fa['replacements'] as $r) {
+                            $ret .= "$indent    <replace";
+                            foreach ($r as $k => $v) {
+                                $ret .= " $k=\"" . $this->_fixXmlEncoding($v) .'"';
+                            }
+                            $ret .= "/>\n";
+                        }
+                        @$ret .= "$indent   </file>\n";
+                    }
+                }
+            }
+            $ret .= "$indent  </filelist>\n";
+        }
+        $ret .= "$indent </release>\n";
+        return $ret;
+    }
+
+    /**
+     * @param array
+     * @access protected
+     */
+    function recursiveXmlFilelist($list)
+    {
+        $this->_dirs = array();
+        foreach ($list as $file => $attributes) {
+            $this->_addDir($this->_dirs, explode('/', dirname($file)), $file, $attributes);
+        }
+        return $this->_formatDir($this->_dirs);
+    }
+
+    /**
+     * @param array
+     * @param array
+     * @param string|null
+     * @param array|null
+     * @access private
+     */
+    function _addDir(&$dirs, $dir, $file = null, $attributes = null)
+    {
+        if ($dir == array() || $dir == array('.')) {
+            $dirs['files'][basename($file)] = $attributes;
+            return;
+        }
+        $curdir = array_shift($dir);
+        if (!isset($dirs['dirs'][$curdir])) {
+            $dirs['dirs'][$curdir] = array();
+        }
+        $this->_addDir($dirs['dirs'][$curdir], $dir, $file, $attributes);
+    }
+
+    /**
+     * @param array
+     * @param string
+     * @param string
+     * @access private
+     */
+    function _formatDir($dirs, $indent = '', $curdir = '')
+    {
+        $ret = '';
+        if (!count($dirs)) {
+            return '';
+        }
+        if (isset($dirs['dirs'])) {
+            uksort($dirs['dirs'], 'strnatcasecmp');
+            foreach ($dirs['dirs'] as $dir => $contents) {
+                $usedir = "$curdir/$dir";
+                $ret .= "$indent   <dir name=\"$dir\">\n";
+                $ret .= $this->_formatDir($contents, "$indent ", $usedir);
+                $ret .= "$indent   </dir> <!-- $usedir -->\n";
+            }
+        }
+        if (isset($dirs['files'])) {
+            uksort($dirs['files'], 'strnatcasecmp');
+            foreach ($dirs['files'] as $file => $attribs) {
+                $ret .= $this->_formatFile($file, $attribs, $indent);
+            }
+        }
+        return $ret;
+    }
+
+    /**
+     * @param string
+     * @param array
+     * @param string
+     * @access private
+     */
+    function _formatFile($file, $attributes, $indent)
+    {
+        $ret = "$indent   <file role=\"$attributes[role]\"";
+        if (isset($attributes['baseinstalldir'])) {
+            $ret .= ' baseinstalldir="' .
+                $this->_fixXmlEncoding($attributes['baseinstalldir']) . '"';
+        }
+        if (isset($attributes['md5sum'])) {
+            $ret .= " md5sum=\"$attributes[md5sum]\"";
+        }
+        if (isset($attributes['platform'])) {
+            $ret .= " platform=\"$attributes[platform]\"";
+        }
+        if (!empty($attributes['install-as'])) {
+            $ret .= ' install-as="' .
+                $this->_fixXmlEncoding($attributes['install-as']) . '"';
+        }
+        $ret .= ' name="' . $this->_fixXmlEncoding($file) . '"';
+        if (empty($attributes['replacements'])) {
+            $ret .= "/>\n";
+        } else {
+            $ret .= ">\n";
+            foreach ($attributes['replacements'] as $r) {
+                $ret .= "$indent    <replace";
+                foreach ($r as $k => $v) {
+                    $ret .= " $k=\"" . $this->_fixXmlEncoding($v) .'"';
+                }
+                $ret .= "/>\n";
+            }
+            $ret .= "$indent   </file>\n";
+        }
+        return $ret;
+    }
+
+    // {{{ _unIndent()
+
+    /**
+     * Unindent given string (?)
+     *
+     * @param string $str The string that has to be unindented.
+     * @return string
+     * @access private
+     */
+    function _unIndent($str)
+    {
+        // remove leading newlines
+        $str = preg_replace('/^[\r\n]+/', '', $str);
+        // find whitespace at the beginning of the first line
+        $indent_len = strspn($str, " \t");
+        $indent = substr($str, 0, $indent_len);
+        $data = '';
+        // remove the same amount of whitespace from following lines
+        foreach (explode("\n", $str) as $line) {
+            if (substr($line, 0, $indent_len) == $indent) {
+                $data .= substr($line, $indent_len) . "\n";
+            }
+        }
+        return $data;
+    }
+
+    /**
+     * @return array
+     */
+    function dependenciesToV2()
+    {
+        $arr = array();
+        $this->_convertDependencies2_0($arr);
+        return $arr['dependencies'];
+    }
+
+    /**
+     * Convert a package.xml version 1.0 into version 2.0
+     *
+     * Note that this does a basic conversion, to allow more advanced
+     * features like bundles and multiple releases
+     * @param string the classname to instantiate and return.  This must be
+     *               PEAR_PackageFile_v2 or a descendant
+     * @param boolean if true, only valid, deterministic package.xml 1.0 as defined by the
+     *                strictest parameters will be converted
+     * @return PEAR_PackageFile_v2|PEAR_Error
+     */
+    function &toV2($class = 'PEAR_PackageFile_v2', $strict = false)
+    {
+        if ($strict) {
+            if (!$this->_packagefile->validate()) {
+                $a = PEAR::raiseError('invalid package.xml version 1.0 cannot be converted' .
+                    ' to version 2.0', null, null, null,
+                    $this->_packagefile->getValidationWarnings(true));
+                return $a;
+            }
+        }
+        $arr = array(
+            'attribs' => array(
+                             'version' => '2.0',
+                             'xmlns' => 'http://pear.php.net/dtd/package-2.0',
+                             'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
+                             'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
+                             'xsi:schemaLocation' => "http://pear.php.net/dtd/tasks-1.0\n" .
+"http://pear.php.net/dtd/tasks-1.0.xsd\n" .
+"http://pear.php.net/dtd/package-2.0\n" .
+'http://pear.php.net/dtd/package-2.0.xsd',
+                         ),
+            'name' => $this->_packagefile->getPackage(),
+            'channel' => 'pear.php.net',
+        );
+        $arr['summary'] = $this->_packagefile->getSummary();
+        $arr['description'] = $this->_packagefile->getDescription();
+        $maintainers = $this->_packagefile->getMaintainers();
+        foreach ($maintainers as $maintainer) {
+            if ($maintainer['role'] != 'lead') {
+                continue;
+            }
+            $new = array(
+                'name' => $maintainer['name'],
+                'user' => $maintainer['handle'],
+                'email' => $maintainer['email'],
+                'active' => 'yes',
+            );
+            $arr['lead'][] = $new;
+        }
+        if (!isset($arr['lead'])) { // some people... you know?
+            $arr['lead'] = array(
+                'name' => 'unknown',
+                'user' => 'unknown',
+                'email' => 'noleadmaintainer@example.com',
+                'active' => 'no',
+            );
+        }
+        if (count($arr['lead']) == 1) {
+            $arr['lead'] = $arr['lead'][0];
+        }
+        foreach ($maintainers as $maintainer) {
+            if ($maintainer['role'] == 'lead') {
+                continue;
+            }
+            $new = array(
+                'name' => $maintainer['name'],
+                'user' => $maintainer['handle'],
+                'email' => $maintainer['email'],
+                'active' => 'yes',
+            );
+            $arr[$maintainer['role']][] = $new;
+        }
+        if (isset($arr['developer']) && count($arr['developer']) == 1) {
+            $arr['developer'] = $arr['developer'][0];
+        }
+        if (isset($arr['contributor']) && count($arr['contributor']) == 1) {
+            $arr['contributor'] = $arr['contributor'][0];
+        }
+        if (isset($arr['helper']) && count($arr['helper']) == 1) {
+            $arr['helper'] = $arr['helper'][0];
+        }
+        $arr['date'] = $this->_packagefile->getDate();
+        $arr['version'] =
+            array(
+                'release' => $this->_packagefile->getVersion(),
+                'api' => $this->_packagefile->getVersion(),
+            );
+        $arr['stability'] =
+            array(
+                'release' => $this->_packagefile->getState(),
+                'api' => $this->_packagefile->getState(),
+            );
+        $licensemap =
+            array(
+                'php' => 'http://www.php.net/license',
+                'php license' => 'http://www.php.net/license',
+                'lgpl' => 'http://www.gnu.org/copyleft/lesser.html',
+                'bsd' => 'http://www.opensource.org/licenses/bsd-license.php',
+                'bsd style' => 'http://www.opensource.org/licenses/bsd-license.php',
+                'bsd-style' => 'http://www.opensource.org/licenses/bsd-license.php',
+                'mit' => 'http://www.opensource.org/licenses/mit-license.php',
+                'gpl' => 'http://www.gnu.org/copyleft/gpl.html',
+                'apache' => 'http://www.opensource.org/licenses/apache2.0.php'
+            );
+        if (isset($licensemap[strtolower($this->_packagefile->getLicense())])) {
+            $arr['license'] = array(
+                'attribs' => array('uri' =>
+                    $licensemap[strtolower($this->_packagefile->getLicense())]),
+                '_content' => $this->_packagefile->getLicense()
+                );
+        } else {
+            // don't use bogus uri
+            $arr['license'] = $this->_packagefile->getLicense();
+        }
+        $arr['notes'] = $this->_packagefile->getNotes();
+        $temp = array();
+        $arr['contents'] = $this->_convertFilelist2_0($temp);
+        $this->_convertDependencies2_0($arr);
+        $release = ($this->_packagefile->getConfigureOptions() || $this->_isExtension) ?
+            'extsrcrelease' : 'phprelease';
+        if ($release == 'extsrcrelease') {
+            $arr['channel'] = 'pecl.php.net';
+            $arr['providesextension'] = $arr['name']; // assumption
+        }
+        $arr[$release] = array();
+        if ($this->_packagefile->getConfigureOptions()) {
+            $arr[$release]['configureoption'] = $this->_packagefile->getConfigureOptions();
+            foreach ($arr[$release]['configureoption'] as $i => $opt) {
+                $arr[$release]['configureoption'][$i] = array('attribs' => $opt);
+            }
+            if (count($arr[$release]['configureoption']) == 1) {
+                $arr[$release]['configureoption'] = $arr[$release]['configureoption'][0];
+            }
+        }
+        $this->_convertRelease2_0($arr[$release], $temp);
+        if ($release == 'extsrcrelease' && count($arr[$release]) > 1) {
+            // multiple extsrcrelease tags added in PEAR 1.4.1
+            $arr['dependencies']['required']['pearinstaller']['min'] = '1.4.1';
+        }
+        if ($cl = $this->_packagefile->getChangelog()) {
+            foreach ($cl as $release) {
+                $rel = array();
+                $rel['version'] =
+                    array(
+                        'release' => $release['version'],
+                        'api' => $release['version'],
+                    );
+                if (!isset($release['release_state'])) {
+                    $release['release_state'] = 'stable';
+                }
+                $rel['stability'] =
+                    array(
+                        'release' => $release['release_state'],
+                        'api' => $release['release_state'],
+                    );
+                if (isset($release['release_date'])) {
+                    $rel['date'] = $release['release_date'];
+                } else {
+                    $rel['date'] = date('Y-m-d');
+                }
+                if (isset($release['release_license'])) {
+                    if (isset($licensemap[strtolower($release['release_license'])])) {
+                        $uri = $licensemap[strtolower($release['release_license'])];
+                    } else {
+                        $uri = 'http://www.example.com';
+                    }
+                    $rel['license'] = array(
+                            'attribs' => array('uri' => $uri),
+                            '_content' => $release['release_license']
+                        );
+                } else {
+                    $rel['license'] = $arr['license'];
+                }
+                if (!isset($release['release_notes'])) {
+                    $release['release_notes'] = 'no release notes';
+                }
+                $rel['notes'] = $release['release_notes'];
+                $arr['changelog']['release'][] = $rel;
+            }
+        }
+        $ret = new $class;
+        $ret->setConfig($this->_packagefile->_config);
+        $ret->setLogger($this->_packagefile->_logger);
+        $ret->fromArray($arr);
+        return $ret;
+    }
+
+    /**
+     * @param array
+     * @param bool
+     * @access private
+     */
+    function _convertDependencies2_0(&$release, $internal = false)
+    {
+        $peardep = array('pearinstaller' =>
+            array('min' => '1.4.0b1')); // this is a lot safer
+        $required = $optional = array();
+        $release['dependencies'] = array();
+        if ($this->_packagefile->hasDeps()) {
+            foreach ($this->_packagefile->getDeps() as $dep) {
+                if (!isset($dep['optional']) || $dep['optional'] == 'no') {
+                    $required[] = $dep;
+                } else {
+                    $optional[] = $dep;
+                }
+            }
+            foreach (array('required', 'optional') as $arr) {
+                $deps = array();
+                foreach ($$arr as $dep) {
+                    // organize deps by dependency type and name
+                    if (!isset($deps[$dep['type']])) {
+                        $deps[$dep['type']] = array();
+                    }
+                    if (isset($dep['name'])) {
+                        $deps[$dep['type']][$dep['name']][] = $dep;
+                    } else {
+                        $deps[$dep['type']][] = $dep;
+                    }
+                }
+                do {
+                    if (isset($deps['php'])) {
+                        $php = array();
+                        if (count($deps['php']) > 1) {
+                            $php = $this->_processPhpDeps($deps['php']);
+                        } else {
+                            if (!isset($deps['php'][0])) {
+                                list($key, $blah) = each ($deps['php']); // stupid buggy versions
+                                $deps['php'] = array($blah[0]);
+                            }
+                            $php = $this->_processDep($deps['php'][0]);
+                            if (!$php) {
+                                break; // poor mans throw
+                            }
+                        }
+                        $release['dependencies'][$arr]['php'] = $php;
+                    }
+                } while (false);
+                do {
+                    if (isset($deps['pkg'])) {
+                        $pkg = array();
+                        $pkg = $this->_processMultipleDepsName($deps['pkg']);
+                        if (!$pkg) {
+                            break; // poor mans throw
+                        }
+                        $release['dependencies'][$arr]['package'] = $pkg;
+                    }
+                } while (false);
+                do {
+                    if (isset($deps['ext'])) {
+                        $pkg = array();
+                        $pkg = $this->_processMultipleDepsName($deps['ext']);
+                        $release['dependencies'][$arr]['extension'] = $pkg;
+                    }
+                } while (false);
+                // skip sapi - it's not supported so nobody will have used it
+                // skip os - it's not supported in 1.0
+            }
+        }
+        if (isset($release['dependencies']['required'])) {
+            $release['dependencies']['required'] =
+                array_merge($peardep, $release['dependencies']['required']);
+        } else {
+            $release['dependencies']['required'] = $peardep;
+        }
+        if (!isset($release['dependencies']['required']['php'])) {
+            $release['dependencies']['required']['php'] =
+                array('min' => '4.0.0');
+        }
+        $order = array();
+        $bewm = $release['dependencies']['required'];
+        $order['php'] = $bewm['php'];
+        $order['pearinstaller'] = $bewm['pearinstaller'];
+        isset($bewm['package']) ? $order['package'] = $bewm['package'] :0;
+        isset($bewm['extension']) ? $order['extension'] = $bewm['extension'] :0;
+        $release['dependencies']['required'] = $order;
+    }
+
+    /**
+     * @param array
+     * @access private
+     */
+    function _convertFilelist2_0(&$package)
+    {
+        $ret = array('dir' =>
+                    array(
+                        'attribs' => array('name' => '/'),
+                        'file' => array()
+                        )
+                    );
+        $package['platform'] =
+        $package['install-as'] = array();
+        $this->_isExtension = false;
+        foreach ($this->_packagefile->getFilelist() as $name => $file) {
+            $file['name'] = $name;
+            if (isset($file['role']) && $file['role'] == 'src') {
+                $this->_isExtension = true;
+            }
+            if (isset($file['replacements'])) {
+                $repl = $file['replacements'];
+                unset($file['replacements']);
+            } else {
+                unset($repl);
+            }
+            if (isset($file['install-as'])) {
+                $package['install-as'][$name] = $file['install-as'];
+                unset($file['install-as']);
+            }
+            if (isset($file['platform'])) {
+                $package['platform'][$name] = $file['platform'];
+                unset($file['platform']);
+            }
+            $file = array('attribs' => $file);
+            if (isset($repl)) {
+                foreach ($repl as $replace ) {
+                    $file['tasks:replace'][] = array('attribs' => $replace);
+                }
+                if (count($repl) == 1) {
+                    $file['tasks:replace'] = $file['tasks:replace'][0];
+                }
+            }
+            $ret['dir']['file'][] = $file;
+        }
+        return $ret;
+    }
+
+    /**
+     * Post-process special files with install-as/platform attributes and
+     * make the release tag.
+     * 
+     * This complex method follows this work-flow to create the release tags:
+     * 
+     * <pre>
+     * - if any install-as/platform exist, create a generic release and fill it with
+     *   o <install as=..> tags for <file name=... install-as=...>
+     *   o <install as=..> tags for <file name=... platform=!... install-as=..>
+     *   o <ignore> tags for <file name=... platform=...>
+     *   o <ignore> tags for <file name=... platform=... install-as=..>
+     * - create a release for each platform encountered and fill with
+     *   o <install as..> tags for <file name=... install-as=...>
+     *   o <install as..> tags for <file name=... platform=this platform install-as=..>
+     *   o <install as..> tags for <file name=... platform=!other platform install-as=..>
+     *   o <ignore> tags for <file name=... platform=!this platform>
+     *   o <ignore> tags for <file name=... platform=other platform>
+     *   o <ignore> tags for <file name=... platform=other platform install-as=..>
+     *   o <ignore> tags for <file name=... platform=!this platform install-as=..>
+     * </pre>
+     * 
+     * It does this by accessing the $package parameter, which contains an array with
+     * indices:
+     * 
+     *  - platform: mapping of file => OS the file should be installed on
+     *  - install-as: mapping of file => installed name
+     *  - osmap: mapping of OS => list of files that should be installed
+     *    on that OS
+     *  - notosmap: mapping of OS => list of files that should not be
+     *    installed on that OS
+     *
+     * @param array
+     * @param array
+     * @access private
+     */
+    function _convertRelease2_0(&$release, $package)
+    {
+        //- if any install-as/platform exist, create a generic release and fill it with 
+        if (count($package['platform']) || count($package['install-as'])) {
+            $generic = array();
+            $genericIgnore = array();
+            foreach ($package['install-as'] as $file => $as) {
+                //o <install as=..> tags for <file name=... install-as=...>
+                if (!isset($package['platform'][$file])) {
+                    $generic[] = $file;
+                    continue;
+                }
+                //o <install as=..> tags for <file name=... platform=!... install-as=..>
+                if (isset($package['platform'][$file]) &&
+                      $package['platform'][$file]{0} == '!') {
+                    $generic[] = $file;
+                    continue;
+                }
+                //o <ignore> tags for <file name=... platform=... install-as=..>
+                if (isset($package['platform'][$file]) &&
+                      $package['platform'][$file]{0} != '!') {
+                    $genericIgnore[] = $file;
+                    continue;
+                }
+            }
+            foreach ($package['platform'] as $file => $platform) {
+                if (isset($package['install-as'][$file])) {
+                    continue;
+                }
+                if ($platform{0} != '!') {
+                    //o <ignore> tags for <file name=... platform=...>
+                    $genericIgnore[] = $file;
+                }
+            }
+            if (count($package['platform'])) {
+                $oses = $notplatform = $platform = array();
+                foreach ($package['platform'] as $file => $os) {
+                    // get a list of oses
+                    if ($os{0} == '!') {
+                        if (isset($oses[substr($os, 1)])) {
+                            continue;
+                        }
+                        $oses[substr($os, 1)] = count($oses);
+                    } else {
+                        if (isset($oses[$os])) {
+                            continue;
+                        }
+                        $oses[$os] = count($oses);
+                    }
+                }
+                //- create a release for each platform encountered and fill with
+                foreach ($oses as $os => $releaseNum) {
+                    $release[$releaseNum]['installconditions']['os']['name'] = $os;
+                    $release[$releaseNum]['filelist'] = array('install' => array(),
+                        'ignore' => array());
+                    foreach ($package['install-as'] as $file => $as) {
+                        //o <install as=..> tags for <file name=... install-as=...>
+                        if (!isset($package['platform'][$file])) {
+                            $release[$releaseNum]['filelist']['install'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                        'as' => $as,
+                                    ),
+                                );
+                            continue;
+                        }
+                        //o <install as..> tags for
+                        //  <file name=... platform=this platform install-as=..>
+                        if (isset($package['platform'][$file]) &&
+                              $package['platform'][$file] == $os) {
+                            $release[$releaseNum]['filelist']['install'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                        'as' => $as,
+                                    ),
+                                );
+                            continue;
+                        }
+                        //o <install as..> tags for
+                        //  <file name=... platform=!other platform install-as=..>
+                        if (isset($package['platform'][$file]) &&
+                              $package['platform'][$file] != "!$os" &&
+                              $package['platform'][$file]{0} == '!') {
+                            $release[$releaseNum]['filelist']['install'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                        'as' => $as,
+                                    ),
+                                );
+                            continue;
+                        }
+                        //o <ignore> tags for
+                        //  <file name=... platform=!this platform install-as=..>
+                        if (isset($package['platform'][$file]) &&
+                              $package['platform'][$file] == "!$os") {
+                            $release[$releaseNum]['filelist']['ignore'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                    ),
+                                );
+                            continue;
+                        }
+                        //o <ignore> tags for
+                        //  <file name=... platform=other platform install-as=..>
+                        if (isset($package['platform'][$file]) &&
+                              $package['platform'][$file]{0} != '!' &&
+                              $package['platform'][$file] != $os) {
+                            $release[$releaseNum]['filelist']['ignore'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                    ),
+                                );
+                            continue;
+                        }
+                    }
+                    foreach ($package['platform'] as $file => $platform) {
+                        if (isset($package['install-as'][$file])) {
+                            continue;
+                        }
+                        //o <ignore> tags for <file name=... platform=!this platform>
+                        if ($platform == "!$os") {
+                            $release[$releaseNum]['filelist']['ignore'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                    ),
+                                );
+                            continue;
+                        }
+                        //o <ignore> tags for <file name=... platform=other platform>
+                        if ($platform{0} != '!' && $platform != $os) {
+                            $release[$releaseNum]['filelist']['ignore'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                    ),
+                                );
+                        }
+                    }
+                    if (!count($release[$releaseNum]['filelist']['install'])) {
+                        unset($release[$releaseNum]['filelist']['install']);
+                    }
+                    if (!count($release[$releaseNum]['filelist']['ignore'])) {
+                        unset($release[$releaseNum]['filelist']['ignore']);
+                    }
+                }
+                if (count($generic) || count($genericIgnore)) {
+                    $release[count($oses)] = array();
+                    if (count($generic)) {
+                        foreach ($generic as $file) {
+                            if (isset($package['install-as'][$file])) {
+                                $installas = $package['install-as'][$file];
+                            } else {
+                                $installas = $file;
+                            }
+                            $release[count($oses)]['filelist']['install'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                        'as' => $installas,
+                                    )
+                                );
+                        }
+                    }
+                    if (count($genericIgnore)) {
+                        foreach ($genericIgnore as $file) {
+                            $release[count($oses)]['filelist']['ignore'][] =
+                                array(
+                                    'attribs' => array(
+                                        'name' => $file,
+                                    )
+                                );
+                        }
+                    }
+                }
+                // cleanup
+                foreach ($release as $i => $rel) {
+                    if (isset($rel['filelist']['install']) &&
+                          count($rel['filelist']['install']) == 1) {
+                        $release[$i]['filelist']['install'] =
+                            $release[$i]['filelist']['install'][0];
+                    }
+                    if (isset($rel['filelist']['ignore']) &&
+                          count($rel['filelist']['ignore']) == 1) {
+                        $release[$i]['filelist']['ignore'] =
+                            $release[$i]['filelist']['ignore'][0];
+                    }
+                }
+                if (count($release) == 1) {
+                    $release = $release[0];
+                }
+            } else {
+                // no platform atts, but some install-as atts
+                foreach ($package['install-as'] as $file => $value) {
+                    $release['filelist']['install'][] =
+                        array(
+                            'attribs' => array(
+                                'name' => $file,
+                                'as' => $value
+                            )
+                        );
+                }
+                if (count($release['filelist']['install']) == 1) {
+                    $release['filelist']['install'] = $release['filelist']['install'][0];
+                }
+            }
+        }
+    }
+
+    /**
+     * @param array
+     * @return array
+     * @access private
+     */
+    function _processDep($dep)
+    {
+        if ($dep['type'] == 'php') {
+            if ($dep['rel'] == 'has') {
+                // come on - everyone has php!
+                return false;
+            }
+        }
+        $php = array();
+        if ($dep['type'] != 'php') {
+            $php['name'] = $dep['name'];
+            if ($dep['type'] == 'pkg') {
+                $php['channel'] = 'pear.php.net';
+            }
+        }
+        switch ($dep['rel']) {
+            case 'gt' :
+                $php['min'] = $dep['version'];
+                $php['exclude'] = $dep['version'];
+            break;
+            case 'ge' :
+                if (!isset($dep['version'])) {
+                    if ($dep['type'] == 'php') {
+                        if (isset($dep['name'])) {
+                            $dep['version'] = $dep['name'];
+                        }
+                    }
+                }
+                $php['min'] = $dep['version'];
+            break;
+            case 'lt' :
+                $php['max'] = $dep['version'];
+                $php['exclude'] = $dep['version'];
+            break;
+            case 'le' :
+                $php['max'] = $dep['version'];
+            break;
+            case 'eq' :
+                $php['min'] = $dep['version'];
+                $php['max'] = $dep['version'];
+            break;
+            case 'ne' :
+                $php['exclude'] = $dep['version'];
+            break;
+            case 'not' :
+                $php['conflicts'] = 'yes';
+            break;
+        }
+        return $php;
+    }
+
+    /**
+     * @param array
+     * @return array
+     */
+    function _processPhpDeps($deps)
+    {
+        $test = array();
+        foreach ($deps as $dep) {
+            $test[] = $this->_processDep($dep);
+        }
+        $min = array();
+        $max = array();
+        foreach ($test as $dep) {
+            if (!$dep) {
+                continue;
+            }
+            if (isset($dep['min'])) {
+                $min[$dep['min']] = count($min);
+            }
+            if (isset($dep['max'])) {
+                $max[$dep['max']] = count($max);
+            }
+        }
+        if (count($min) > 0) {
+            uksort($min, 'version_compare');
+        }
+        if (count($max) > 0) {
+            uksort($max, 'version_compare');
+        }
+        if (count($min)) {
+            // get the highest minimum
+            $min = array_pop($a = array_flip($min));
+        } else {
+            $min = false;
+        }
+        if (count($max)) {
+            // get the lowest maximum
+            $max = array_shift($a = array_flip($max));
+        } else {
+            $max = false;
+        }
+        if ($min) {
+            $php['min'] = $min;
+        }
+        if ($max) {
+            $php['max'] = $max;
+        }
+        $exclude = array();
+        foreach ($test as $dep) {
+            if (!isset($dep['exclude'])) {
+                continue;
+            }
+            $exclude[] = $dep['exclude'];
+        }
+        if (count($exclude)) {
+            $php['exclude'] = $exclude;
+        }
+        return $php;
+    }
+
+    /**
+     * process multiple dependencies that have a name, like package deps
+     * @param array
+     * @return array
+     * @access private
+     */
+    function _processMultipleDepsName($deps)
+    {
+        $tests = array();
+        foreach ($deps as $name => $dep) {
+            foreach ($dep as $d) {
+                $tests[$name][] = $this->_processDep($d);
+            }
+        }
+        foreach ($tests as $name => $test) {
+            $php = array();
+            $min = array();
+            $max = array();
+            $php['name'] = $name;
+            foreach ($test as $dep) {
+                if (!$dep) {
+                    continue;
+                }
+                if (isset($dep['channel'])) {
+                    $php['channel'] = 'pear.php.net';
+                }
+                if (isset($dep['conflicts']) && $dep['conflicts'] == 'yes') {
+                    $php['conflicts'] = 'yes';
+                }
+                if (isset($dep['min'])) {
+                    $min[$dep['min']] = count($min);
+                }
+                if (isset($dep['max'])) {
+                    $max[$dep['max']] = count($max);
+                }
+            }
+            if (count($min) > 0) {
+                uksort($min, 'version_compare');
+            }
+            if (count($max) > 0) {
+                uksort($max, 'version_compare');
+            }
+            if (count($min)) {
+                // get the highest minimum
+                $min = array_pop($a = array_flip($min));
+            } else {
+                $min = false;
+            }
+            if (count($max)) {
+                // get the lowest maximum
+                $max = array_shift($a = array_flip($max));
+            } else {
+                $max = false;
+            }
+            if ($min) {
+                $php['min'] = $min;
+            }
+            if ($max) {
+                $php['max'] = $max;
+            }
+            $exclude = array();
+            foreach ($test as $dep) {
+                if (!isset($dep['exclude'])) {
+                    continue;
+                }
+                $exclude[] = $dep['exclude'];
+            }
+            if (count($exclude)) {
+                $php['exclude'] = $exclude;
+            }
+            $ret[] = $php;
+        }
+        return $ret;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v2.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v2.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v2.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Generator/v2.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1539 @@
+<?php
+/**
+ * package.xml generation class, package.xml version 2.0
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Stephan Schmidt (original XML_Serializer code)
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: v2.php,v 1.33 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * file/dir manipulation routines
+ */
+require_once 'System.php';
+/**
+ * This class converts a PEAR_PackageFile_v2 object into any output format.
+ *
+ * Supported output formats include array, XML string (using S. Schmidt's
+ * XML_Serializer, slightly customized)
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Stephan Schmidt (original XML_Serializer code)
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_Generator_v2
+{
+   /**
+    * default options for the serialization
+    * @access private
+    * @var array $_defaultOptions
+    */
+    var $_defaultOptions = array(
+                         'indent'             => ' ',                    // string used for indentation
+                         'linebreak'          => "\n",                  // string used for newlines
+                         'typeHints'          => false,                 // automatically add type hin attributes
+                         'addDecl'            => true,                 // add an XML declaration
+                         'defaultTagName'     => 'XML_Serializer_Tag',  // tag used for indexed arrays or invalid names
+                         'classAsTagName'     => false,                 // use classname for objects in indexed arrays
+                         'keyAttribute'       => '_originalKey',        // attribute where original key is stored
+                         'typeAttribute'      => '_type',               // attribute for type (only if typeHints => true)
+                         'classAttribute'     => '_class',              // attribute for class of objects (only if typeHints => true)
+                         'scalarAsAttributes' => false,                 // scalar values (strings, ints,..) will be serialized as attribute
+                         'prependAttributes'  => '',                    // prepend string for attributes
+                         'indentAttributes'   => false,                 // indent the attributes, if set to '_auto', it will indent attributes so they all start at the same column
+                         'mode'               => 'simplexml',             // use 'simplexml' to use parent name as tagname if transforming an indexed array
+                         'addDoctype'         => false,                 // add a doctype declaration
+                         'doctype'            => null,                  // supply a string or an array with id and uri ({@see XML_Util::getDoctypeDeclaration()}
+                         'rootName'           => 'package',                  // name of the root tag
+                         'rootAttributes'     => array(
+                             'version' => '2.0',
+                             'xmlns' => 'http://pear.php.net/dtd/package-2.0',
+                             'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
+                             'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
+                             'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0
+http://pear.php.net/dtd/tasks-1.0.xsd
+http://pear.php.net/dtd/package-2.0
+http://pear.php.net/dtd/package-2.0.xsd',
+                         ),               // attributes of the root tag
+                         'attributesArray'    => 'attribs',                  // all values in this key will be treated as attributes
+                         'contentName'        => '_content',                   // this value will be used directly as content, instead of creating a new tag, may only be used in conjuction with attributesArray
+                         'beautifyFilelist'   => false,
+                         'encoding' => 'UTF-8',
+                        );
+
+   /**
+    * options for the serialization
+    * @access private
+    * @var array $options
+    */
+    var $options = array();
+
+   /**
+    * current tag depth
+    * @var integer $_tagDepth
+    */
+    var $_tagDepth = 0;
+
+   /**
+    * serilialized representation of the data
+    * @var string $_serializedData
+    */
+    var $_serializedData = null;
+    /**
+     * @var PEAR_PackageFile_v2
+     */
+    var $_packagefile;
+    /**
+     * @param PEAR_PackageFile_v2
+     */
+    function PEAR_PackageFile_Generator_v2(&$packagefile)
+    {
+        $this->_packagefile = &$packagefile;
+    }
+
+    /**
+     * @return string
+     */
+    function getPackagerVersion()
+    {
+        return '1.4.6';
+    }
+
+    /**
+     * @param PEAR_Packager
+     * @param bool generate a .tgz or a .tar
+     * @param string|null temporary directory to package in
+     */
+    function toTgz(&$packager, $compress = true, $where = null)
+    {
+        $a = null;
+        return $this->toTgz2($packager, $a, $compress, $where);
+    }
+
+    /**
+     * Package up both a package.xml and package2.xml for the same release
+     * @param PEAR_Packager
+     * @param PEAR_PackageFile_v1
+     * @param bool generate a .tgz or a .tar
+     * @param string|null temporary directory to package in
+     */
+    function toTgz2(&$packager, &$pf1, $compress = true, $where = null)
+    {
+        require_once 'Archive/Tar.php';
+        if (!$this->_packagefile->isEquivalent($pf1)) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: "' .
+                basename($pf1->getPackageFile()) .
+                '" is not equivalent to "' . basename($this->_packagefile->getPackageFile())
+                . '"');
+        }
+        if ($where === null) {
+            if (!($where = System::mktemp(array('-d')))) {
+                return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: mktemp failed');
+            }
+        } elseif (!@System::mkDir(array('-p', $where))) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: "' . $where . '" could' .
+                ' not be created');
+        }
+        if (file_exists($where . DIRECTORY_SEPARATOR . 'package.xml') &&
+              !is_file($where . DIRECTORY_SEPARATOR . 'package.xml')) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: unable to save package.xml as' .
+                ' "' . $where . DIRECTORY_SEPARATOR . 'package.xml"');
+        }
+        if (!$this->_packagefile->validate(PEAR_VALIDATE_PACKAGING)) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: invalid package.xml');
+        }
+        $ext = $compress ? '.tgz' : '.tar';
+        $pkgver = $this->_packagefile->getPackage() . '-' . $this->_packagefile->getVersion();
+        $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
+        if (file_exists(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext) &&
+              !is_file(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext)) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: cannot create tgz file "' .
+                getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext . '"');
+        }
+        if ($pkgfile = $this->_packagefile->getPackageFile()) {
+            $pkgdir = dirname(realpath($pkgfile));
+            $pkgfile = basename($pkgfile);
+        } else {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: package file object must ' .
+                'be created from a real file');
+        }
+        // {{{ Create the package file list
+        $filelist = array();
+        $i = 0;
+        $this->_packagefile->flattenFilelist();
+        $contents = $this->_packagefile->getContents();
+        if (isset($contents['bundledpackage'])) { // bundles of packages
+            $contents = $contents['bundledpackage'];
+            if (!isset($contents[0])) {
+                $contents = array($contents);
+            }
+            $packageDir = $where;
+            foreach ($contents as $i => $package) {
+                $fname = $package;
+                $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
+                if (!file_exists($file)) {
+                    return $packager->raiseError("File does not exist: $fname");
+                }
+                $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
+                System::mkdir(array('-p', dirname($tfile)));
+                copy($file, $tfile);
+                $filelist[$i++] = $tfile;
+                $packager->log(2, "Adding package $fname");
+            }
+        } else { // normal packages
+            $contents = $contents['dir']['file'];
+            if (!isset($contents[0])) {
+                $contents = array($contents);
+            }
+    
+            $packageDir = $where;
+            foreach ($contents as $i => $file) {
+                $fname = $file['attribs']['name'];
+                $atts = $file['attribs'];
+                $orig = $file;
+                $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
+                if (!file_exists($file)) {
+                    return $packager->raiseError("File does not exist: $fname");
+                } else {
+                    $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
+                    unset($orig['attribs']);
+                    if (count($orig)) { // file with tasks
+                        // run any package-time tasks
+                        if (function_exists('file_get_contents')) {
+                            $contents = file_get_contents($file);
+                        } else {
+                            $fp = fopen($file, "r");
+                            $contents = @fread($fp, filesize($file));
+                            fclose($fp);
+                        }
+                        foreach ($orig as $tag => $raw) {
+                            $tag = str_replace($this->_packagefile->getTasksNs() . ':', '', $tag);
+                            $task = "PEAR_Task_$tag";
+                            $task = &new $task($this->_packagefile->_config,
+                                $this->_packagefile->_logger,
+                                PEAR_TASK_PACKAGE);
+                            $task->init($raw, $atts, null);
+                            $res = $task->startSession($this->_packagefile, $contents, $tfile);
+                            if (!$res) {
+                                continue; // skip this task
+                            }
+                            if (PEAR::isError($res)) {
+                                return $res;
+                            }
+                            $contents = $res; // save changes
+                            System::mkdir(array('-p', dirname($tfile)));
+                            $wp = fopen($tfile, "wb");
+                            fwrite($wp, $contents);
+                            fclose($wp);
+                        }
+                    }
+                    if (!file_exists($tfile)) {
+                        System::mkdir(array('-p', dirname($tfile)));
+                        copy($file, $tfile);
+                    }
+                    $filelist[$i++] = $tfile;
+                    $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($tfile), $i - 1);
+                    $packager->log(2, "Adding file $fname");
+                }
+            }
+        }
+            // }}}
+        if ($pf1 !== null) {
+            $name = 'package2.xml';
+        } else {
+            $name = 'package.xml';
+        }
+        $packagexml = $this->toPackageFile($where, PEAR_VALIDATE_PACKAGING, $name);
+        if ($packagexml) {
+            $tar =& new Archive_Tar($dest_package, $compress);
+            $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors
+            // ----- Creates with the package.xml file
+            $ok = $tar->createModify(array($packagexml), '', $where);
+            if (PEAR::isError($ok)) {
+                return $packager->raiseError($ok);
+            } elseif (!$ok) {
+                return $packager->raiseError('PEAR_Packagefile_v2::toTgz(): adding ' . $name .
+                    ' failed');
+            }
+            // ----- Add the content of the package
+            if (!$tar->addModify($filelist, $pkgver, $where)) {
+                return $packager->raiseError(
+                    'PEAR_Packagefile_v2::toTgz(): tarball creation failed');
+            }
+            // add the package.xml version 1.0
+            if ($pf1 !== null) {
+                $pfgen = &$pf1->getDefaultGenerator();
+                $packagexml1 = $pfgen->toPackageFile($where, PEAR_VALIDATE_PACKAGING,
+                    'package.xml', true);
+                if (!$tar->addModify(array($packagexml1), '', $where)) {
+                    return $packager->raiseError(
+                        'PEAR_Packagefile_v2::toTgz(): adding package.xml failed');
+                }
+            }
+            return $dest_package;
+        }
+    }
+
+    function toPackageFile($where = null, $state = PEAR_VALIDATE_NORMAL, $name = 'package.xml')
+    {
+        if (!$this->_packagefile->validate($state)) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: invalid package.xml',
+                null, null, null, $this->_packagefile->getValidationWarnings());
+        }
+        if ($where === null) {
+            if (!($where = System::mktemp(array('-d')))) {
+                return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: mktemp failed');
+            }
+        } elseif (!@System::mkDir(array('-p', $where))) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: "' . $where . '" could' .
+                ' not be created');
+        }
+        $newpkgfile = $where . DIRECTORY_SEPARATOR . $name;
+        $np = @fopen($newpkgfile, 'wb');
+        if (!$np) {
+            return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: unable to save ' .
+               "$name as $newpkgfile");
+        }
+        fwrite($np, $this->toXml($state));
+        fclose($np);
+        return $newpkgfile;
+    }
+
+    function &toV2()
+    {
+        return $this->_packagefile;
+    }
+
+    /**
+     * Return an XML document based on the package info (as returned
+     * by the PEAR_Common::infoFrom* methods).
+     *
+     * @return string XML data
+     */
+    function toXml($state = PEAR_VALIDATE_NORMAL, $options = array())
+    {
+        $this->_packagefile->setDate(date('Y-m-d'));
+        $this->_packagefile->setTime(date('H:i:s'));
+        if (!$this->_packagefile->validate($state)) {
+            return false;
+        }
+        if (is_array($options)) {
+            $this->options = array_merge($this->_defaultOptions, $options);
+        } else {
+            $this->options = $this->_defaultOptions;
+        }
+        $arr = $this->_packagefile->getArray();
+        if (isset($arr['filelist'])) {
+            unset($arr['filelist']);
+        }
+        if (isset($arr['_lastversion'])) {
+            unset($arr['_lastversion']);
+        }
+        if ($state ^ PEAR_VALIDATE_PACKAGING && !isset($arr['bundle'])) {
+            $use = $this->_recursiveXmlFilelist($arr['contents']['dir']['file']);
+            unset($arr['contents']['dir']['file']);
+            if (isset($use['dir'])) {
+                $arr['contents']['dir']['dir'] = $use['dir'];
+            }
+            if (isset($use['file'])) {
+                $arr['contents']['dir']['file'] = $use['file'];
+            }
+            $this->options['beautifyFilelist'] = true;
+        }
+        $arr['attribs']['packagerversion'] = '1.4.6';
+        if ($this->serialize($arr, $options)) {
+            return $this->_serializedData . "\n";
+        }
+        return false;
+    }
+
+
+    function _recursiveXmlFilelist($list)
+    {
+        $dirs = array();
+        if (isset($list['attribs'])) {
+            $file = $list['attribs']['name'];
+            unset($list['attribs']['name']);
+            $attributes = $list['attribs'];
+            $this->_addDir($dirs, explode('/', dirname($file)), $file, $attributes);
+        } else {
+            foreach ($list as $a) {
+                $file = $a['attribs']['name'];
+                $attributes = $a['attribs'];
+                unset($a['attribs']);
+                $this->_addDir($dirs, explode('/', dirname($file)), $file, $attributes, $a);
+            }
+        }
+        $this->_formatDir($dirs);
+        $this->_deFormat($dirs);
+        return $dirs;
+    }
+
+    function _addDir(&$dirs, $dir, $file = null, $attributes = null, $tasks = null)
+    {
+        if (!$tasks) {
+            $tasks = array();
+        }
+        if ($dir == array() || $dir == array('.')) {
+            $dirs['file'][basename($file)] = $tasks;
+            $attributes['name'] = basename($file);
+            $dirs['file'][basename($file)]['attribs'] = $attributes;
+            return;
+        }
+        $curdir = array_shift($dir);
+        if (!isset($dirs['dir'][$curdir])) {
+            $dirs['dir'][$curdir] = array();
+        }
+        $this->_addDir($dirs['dir'][$curdir], $dir, $file, $attributes, $tasks);
+    }
+
+    function _formatDir(&$dirs)
+    {
+        if (!count($dirs)) {
+            return array();
+        }
+        $newdirs = array();
+        if (isset($dirs['dir'])) {
+            $newdirs['dir'] = $dirs['dir'];
+        }
+        if (isset($dirs['file'])) {
+            $newdirs['file'] = $dirs['file'];
+        }
+        $dirs = $newdirs;
+        if (isset($dirs['dir'])) {
+            uksort($dirs['dir'], 'strnatcasecmp');
+            foreach ($dirs['dir'] as $dir => $contents) {
+                $this->_formatDir($dirs['dir'][$dir]);
+            }
+        }
+        if (isset($dirs['file'])) {
+            uksort($dirs['file'], 'strnatcasecmp');
+        };
+    }
+
+    function _deFormat(&$dirs)
+    {
+        if (!count($dirs)) {
+            return array();
+        }
+        $newdirs = array();
+        if (isset($dirs['dir'])) {
+            foreach ($dirs['dir'] as $dir => $contents) {
+                $newdir = array();
+                $newdir['attribs']['name'] = $dir;
+                $this->_deFormat($contents);
+                foreach ($contents as $tag => $val) {
+                    $newdir[$tag] = $val;
+                }
+                $newdirs['dir'][] = $newdir;
+            }
+            if (count($newdirs['dir']) == 1) {
+                $newdirs['dir'] = $newdirs['dir'][0];
+            }
+        }
+        if (isset($dirs['file'])) {
+            foreach ($dirs['file'] as $name => $file) {
+                $newdirs['file'][] = $file;
+            }
+            if (count($newdirs['file']) == 1) {
+                $newdirs['file'] = $newdirs['file'][0];
+            }
+        }
+        $dirs = $newdirs;
+    }
+
+    /**
+    * reset all options to default options
+    *
+    * @access   public
+    * @see      setOption(), XML_Unserializer()
+    */
+    function resetOptions()
+    {
+        $this->options = $this->_defaultOptions;
+    }
+
+   /**
+    * set an option
+    *
+    * You can use this method if you do not want to set all options in the constructor
+    *
+    * @access   public
+    * @see      resetOption(), XML_Serializer()
+    */
+    function setOption($name, $value)
+    {
+        $this->options[$name] = $value;
+    }
+    
+   /**
+    * sets several options at once
+    *
+    * You can use this method if you do not want to set all options in the constructor
+    *
+    * @access   public
+    * @see      resetOption(), XML_Unserializer(), setOption()
+    */
+    function setOptions($options)
+    {
+        $this->options = array_merge($this->options, $options);
+    }
+
+   /**
+    * serialize data
+    *
+    * @access   public
+    * @param    mixed    $data data to serialize
+    * @return   boolean  true on success, pear error on failure
+    */
+    function serialize($data, $options = null)
+    {
+        // if options have been specified, use them instead
+        // of the previously defined ones
+        if (is_array($options)) {
+            $optionsBak = $this->options;
+            if (isset($options['overrideOptions']) && $options['overrideOptions'] == true) {
+                $this->options = array_merge($this->_defaultOptions, $options);
+            } else {
+                $this->options = array_merge($this->options, $options);
+            }
+        }
+        else {
+            $optionsBak = null;
+        }
+        
+        //  start depth is zero
+        $this->_tagDepth = 0;
+
+        $this->_serializedData = '';
+        // serialize an array
+        if (is_array($data)) {
+            if (isset($this->options['rootName'])) {
+                $tagName = $this->options['rootName'];
+            } else {
+                $tagName = 'array';
+            }
+
+            $this->_serializedData .= $this->_serializeArray($data, $tagName, $this->options['rootAttributes']);
+        }
+        
+        // add doctype declaration
+        if ($this->options['addDoctype'] === true) {
+            $this->_serializedData = XML_Util::getDoctypeDeclaration($tagName, $this->options['doctype'])
+                                   . $this->options['linebreak']
+                                   . $this->_serializedData;
+        }
+
+        //  build xml declaration
+        if ($this->options['addDecl']) {
+            $atts = array();
+            if (isset($this->options['encoding']) ) {
+                $encoding = $this->options['encoding'];
+            } else {
+                $encoding = null;
+            }
+            $this->_serializedData = XML_Util::getXMLDeclaration('1.0', $encoding)
+                                   . $this->options['linebreak']
+                                   . $this->_serializedData;
+        }
+        
+        
+		if ($optionsBak !== null) {
+			$this->options = $optionsBak;
+		}
+		
+        return  true;
+    }
+
+   /**
+    * get the result of the serialization
+    *
+    * @access public
+    * @return string serialized XML
+    */
+    function getSerializedData()
+    {
+        if ($this->_serializedData == null ) {
+            return  $this->raiseError('No serialized data available. Use XML_Serializer::serialize() first.', XML_SERIALIZER_ERROR_NO_SERIALIZATION);
+        }
+        return $this->_serializedData;
+    }
+    
+   /**
+    * serialize any value
+    *
+    * This method checks for the type of the value and calls the appropriate method
+    *
+    * @access private
+    * @param  mixed     $value
+    * @param  string    $tagName
+    * @param  array     $attributes
+    * @return string
+    */
+    function _serializeValue($value, $tagName = null, $attributes = array())
+    {
+        if (is_array($value)) {
+            $xml = $this->_serializeArray($value, $tagName, $attributes);
+        } elseif (is_object($value)) {
+            $xml = $this->_serializeObject($value, $tagName);
+        } else {
+            $tag = array(
+                          'qname'      => $tagName,
+                          'attributes' => $attributes,
+                          'content'    => $value
+                        );
+            $xml = $this->_createXMLTag($tag);
+        }
+        return $xml;
+    }
+    
+   /**
+    * serialize an array
+    *
+    * @access   private
+    * @param    array   $array       array to serialize
+    * @param    string  $tagName     name of the root tag
+    * @param    array   $attributes  attributes for the root tag
+    * @return   string  $string      serialized data
+    * @uses     XML_Util::isValidName() to check, whether key has to be substituted
+    */
+    function _serializeArray(&$array, $tagName = null, $attributes = array())
+    {
+        $_content = null;
+        
+        /**
+         * check for special attributes
+         */
+        if ($this->options['attributesArray'] !== null) {
+            if (isset($array[$this->options['attributesArray']])) {
+                $attributes = $array[$this->options['attributesArray']];
+                unset($array[$this->options['attributesArray']]);
+            }
+            /**
+             * check for special content
+             */
+            if ($this->options['contentName'] !== null) {
+                if (isset($array[$this->options['contentName']])) {
+                    $_content = $array[$this->options['contentName']];
+                    unset($array[$this->options['contentName']]);
+                }
+            }
+        }
+
+        /*
+        * if mode is set to simpleXML, check whether
+        * the array is associative or indexed
+        */
+        if (is_array($array) && $this->options['mode'] == 'simplexml') {
+            $indexed = true;
+            if (!count($array)) {
+                $indexed = false;
+            }
+            foreach ($array as $key => $val) {
+                if (!is_int($key)) {
+                    $indexed = false;
+                    break;
+                }
+            }
+
+            if ($indexed && $this->options['mode'] == 'simplexml') {
+                $string = '';
+                foreach ($array as $key => $val) {
+                    if ($this->options['beautifyFilelist'] && $tagName == 'dir') {
+                        if (!isset($this->_curdir)) {
+                            $this->_curdir = '';
+                        }
+                        $savedir = $this->_curdir;
+                        if (isset($val['attribs'])) {
+                            if ($val['attribs']['name'] == '/') {
+                                $this->_curdir = '/';
+                            } else {
+                                if ($this->_curdir == '/') {
+                                    $this->_curdir = '';
+                                }
+                                $this->_curdir .= '/' . $val['attribs']['name'];
+                            }
+                        }
+                    }
+                    $string .= $this->_serializeValue( $val, $tagName, $attributes);
+                    if ($this->options['beautifyFilelist'] && $tagName == 'dir') {
+                        $string .= ' <!-- ' . $this->_curdir . ' -->';
+                        if (empty($savedir)) {
+                            unset($this->_curdir);
+                        } else {
+                            $this->_curdir = $savedir;
+                        }
+                    }
+                    
+                    $string .= $this->options['linebreak'];
+        			//	do indentation
+                    if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                        $string .= str_repeat($this->options['indent'], $this->_tagDepth);
+                    }
+                }
+                return rtrim($string);
+            }
+        }
+        
+		if ($this->options['scalarAsAttributes'] === true) {
+	        foreach ($array as $key => $value) {
+				if (is_scalar($value) && (XML_Util::isValidName($key) === true)) {
+					unset($array[$key]);
+					$attributes[$this->options['prependAttributes'].$key] = $value;
+				}
+			}
+		}
+
+        // check for empty array => create empty tag
+        if (empty($array)) {
+            $tag = array(
+                            'qname'      => $tagName,
+                            'content'    => $_content,
+                            'attributes' => $attributes
+                        );
+
+        } else {
+            $this->_tagDepth++;
+            $tmp = $this->options['linebreak'];
+            foreach ($array as $key => $value) {
+    			//	do indentation
+                if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                    $tmp .= str_repeat($this->options['indent'], $this->_tagDepth);
+                }
+    
+    			//	copy key
+    			$origKey	=	$key;
+    			//	key cannot be used as tagname => use default tag
+                $valid = XML_Util::isValidName($key);
+    	        if (PEAR::isError($valid)) {
+    	            if ($this->options['classAsTagName'] && is_object($value)) {
+    	                $key = get_class($value);
+    	            } else {
+            	        $key = $this->options['defaultTagName'];
+    	            }
+           	 	}
+                $atts = array();
+                if ($this->options['typeHints'] === true) {
+                    $atts[$this->options['typeAttribute']] = gettype($value);
+    				if ($key !== $origKey) {
+    					$atts[$this->options['keyAttribute']] = (string)$origKey;
+    				}
+    
+                }
+                if ($this->options['beautifyFilelist'] && $key == 'dir') {
+                    if (!isset($this->_curdir)) {
+                        $this->_curdir = '';
+                    }
+                    $savedir = $this->_curdir;
+                    if (isset($value['attribs'])) {
+                        if ($value['attribs']['name'] == '/') {
+                            $this->_curdir = '/';
+                        } else {
+                            $this->_curdir .= '/' . $value['attribs']['name'];
+                        }
+                    }
+                }
+
+                if (is_string($value) && $value && ($value{strlen($value) - 1} == "\n")) {
+                    $value .= str_repeat($this->options['indent'], $this->_tagDepth);
+                }
+                $tmp .= $this->_createXMLTag(array(
+                                                    'qname'      => $key,
+                                                    'attributes' => $atts,
+                                                    'content'    => $value )
+                                            );
+                if ($this->options['beautifyFilelist'] && $key == 'dir') {
+                    if (isset($value['attribs'])) {
+                        $tmp .= ' <!-- ' . $this->_curdir . ' -->';
+                        if (empty($savedir)) {
+                            unset($this->_curdir);
+                        } else {
+                            $this->_curdir = $savedir;
+                        }
+                    }
+                }
+                $tmp .= $this->options['linebreak'];
+            }
+            
+            $this->_tagDepth--;
+            if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                $tmp .= str_repeat($this->options['indent'], $this->_tagDepth);
+            }
+    
+    		if (trim($tmp) === '') {
+    			$tmp = null;
+    		}
+    		
+            $tag = array(
+                            'qname'      => $tagName,
+                            'content'    => $tmp,
+                            'attributes' => $attributes
+                        );
+        }
+        if ($this->options['typeHints'] === true) {
+            if (!isset($tag['attributes'][$this->options['typeAttribute']])) {
+                $tag['attributes'][$this->options['typeAttribute']] = 'array';
+            }
+        }
+
+        $string = $this->_createXMLTag($tag, false);
+        return $string;
+    }
+  
+   /**
+    * create a tag from an array
+    * this method awaits an array in the following format
+    * array(
+    *       'qname'        => $tagName,
+    *       'attributes'   => array(),
+    *       'content'      => $content,      // optional
+    *       'namespace'    => $namespace     // optional
+    *       'namespaceUri' => $namespaceUri  // optional
+    *   )
+    *
+    * @access   private
+    * @param    array   $tag tag definition
+    * @param    boolean $replaceEntities whether to replace XML entities in content or not
+    * @return   string  $string XML tag
+    */
+    function _createXMLTag( $tag, $replaceEntities = true )
+    {
+        if ($this->options['indentAttributes'] !== false) {
+            $multiline = true;
+            $indent    = str_repeat($this->options['indent'], $this->_tagDepth);
+
+            if ($this->options['indentAttributes'] == '_auto') {
+                $indent .= str_repeat(' ', (strlen($tag['qname'])+2));
+
+            } else {
+                $indent .= $this->options['indentAttributes'];
+            }
+        } else {
+            $multiline = false;
+            $indent    = false;
+        }
+    
+        if (is_array($tag['content'])) {
+            if (empty($tag['content'])) {
+                $tag['content'] =   '';
+            }
+        } elseif(is_scalar($tag['content']) && (string)$tag['content'] == '') {
+            $tag['content'] =   '';
+        }
+    
+        if (is_scalar($tag['content']) || is_null($tag['content'])) {
+            if ($this->options['encoding'] == 'UTF-8' &&
+                  version_compare(phpversion(), '5.0.0', 'lt')) {
+                $encoding = XML_UTIL_ENTITIES_UTF8_XML;
+            } else {
+                $encoding = XML_UTIL_ENTITIES_XML;
+            }
+            $tag = XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $this->options['linebreak'], $encoding);
+        } elseif (is_array($tag['content'])) {
+            $tag    =   $this->_serializeArray($tag['content'], $tag['qname'], $tag['attributes']);
+        } elseif (is_object($tag['content'])) {
+            $tag    =   $this->_serializeObject($tag['content'], $tag['qname'], $tag['attributes']);
+        } elseif (is_resource($tag['content'])) {
+            settype($tag['content'], 'string');
+            $tag    =   XML_Util::createTagFromArray($tag, $replaceEntities);
+        }
+        return  $tag;
+    }
+}
+
+//foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $path) {
+//    $t = $path . DIRECTORY_SEPARATOR . 'XML' . DIRECTORY_SEPARATOR .
+//          'Util';
+//    if (file_exists($t) && is_readable($t)) {
+//        include_once 'XML/Util';
+//    }
+//}
+//if (!class_exists('XML_Util')) {
+// well, it's one way to do things without extra deps ...
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2002 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/2_02.txt.                                 |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Stephan Schmidt <schst@php-tools.net>                       |
+// +----------------------------------------------------------------------+
+//
+//    $Id: v2.php,v 1.33 2006/01/06 04:47:37 cellog Exp $
+
+/**
+ * error code for invalid chars in XML name
+ */
+define("XML_UTIL_ERROR_INVALID_CHARS", 51);
+
+/**
+ * error code for invalid chars in XML name
+ */
+define("XML_UTIL_ERROR_INVALID_START", 52);
+
+/**
+ * error code for non-scalar tag content
+ */
+define("XML_UTIL_ERROR_NON_SCALAR_CONTENT", 60);
+    
+/**
+ * error code for missing tag name
+ */
+define("XML_UTIL_ERROR_NO_TAG_NAME", 61);
+    
+/**
+ * replace XML entities
+ */
+define("XML_UTIL_REPLACE_ENTITIES", 1);
+
+/**
+ * embedd content in a CData Section
+ */
+define("XML_UTIL_CDATA_SECTION", 2);
+
+/**
+ * do not replace entitites
+ */
+define("XML_UTIL_ENTITIES_NONE", 0);
+
+/**
+ * replace all XML entitites
+ * This setting will replace <, >, ", ' and &
+ */
+define("XML_UTIL_ENTITIES_XML", 1);
+
+/**
+ * replace only required XML entitites
+ * This setting will replace <, " and &
+ */
+define("XML_UTIL_ENTITIES_XML_REQUIRED", 2);
+
+/**
+ * replace HTML entitites
+ * @link    http://www.php.net/htmlentities
+ */
+define("XML_UTIL_ENTITIES_HTML", 3);
+
+/**
+ * replace all XML entitites, and encode from ISO-8859-1 to UTF-8
+ * This setting will replace <, >, ", ' and &
+ */
+define("XML_UTIL_ENTITIES_UTF8_XML", 4);
+
+/**
+ * utility class for working with XML documents
+ *
+ * @category XML
+ * @package  XML_Util
+ * @version  0.6.0
+ * @author   Stephan Schmidt <schst@php.net>
+ */
+class XML_Util {
+
+   /**
+    * return API version
+    *
+    * @access   public
+    * @static
+    * @return   string  $version API version
+    */
+    function apiVersion()
+    {
+        return "0.6";
+    }
+
+   /**
+    * replace XML entities
+    *
+    * With the optional second parameter, you may select, which
+    * entities should be replaced.
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // replace XML entites:
+    * $string = XML_Util::replaceEntities("This string contains < & >.");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  string where XML special chars should be replaced
+    * @param    integer setting for entities in attribute values (one of XML_UTIL_ENTITIES_XML, XML_UTIL_ENTITIES_XML_REQUIRED, XML_UTIL_ENTITIES_HTML)
+    * @return   string  string with replaced chars
+    */
+    function replaceEntities($string, $replaceEntities = XML_UTIL_ENTITIES_XML)
+    {
+        switch ($replaceEntities) {
+            case XML_UTIL_ENTITIES_UTF8_XML:
+                return strtr(utf8_encode($string),array(
+                                          '&'  => '&amp;',
+                                          '>'  => '&gt;',
+                                          '<'  => '&lt;',
+                                          '"'  => '&quot;',
+                                          '\'' => '&apos;' ));
+                break;
+            case XML_UTIL_ENTITIES_XML:
+                return strtr($string,array(
+                                          '&'  => '&amp;',
+                                          '>'  => '&gt;',
+                                          '<'  => '&lt;',
+                                          '"'  => '&quot;',
+                                          '\'' => '&apos;' ));
+                break;
+            case XML_UTIL_ENTITIES_XML_REQUIRED:
+                return strtr($string,array(
+                                          '&'  => '&amp;',
+                                          '<'  => '&lt;',
+                                          '"'  => '&quot;' ));
+                break;
+            case XML_UTIL_ENTITIES_HTML:
+                return htmlspecialchars($string);
+                break;
+        }
+        return $string;
+    }
+
+   /**
+    * build an xml declaration
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // get an XML declaration:
+    * $xmlDecl = XML_Util::getXMLDeclaration("1.0", "UTF-8", true);
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $version     xml version
+    * @param    string  $encoding    character encoding
+    * @param    boolean $standAlone  document is standalone (or not)
+    * @return   string  $decl xml declaration
+    * @uses     XML_Util::attributesToString() to serialize the attributes of the XML declaration
+    */
+    function getXMLDeclaration($version = "1.0", $encoding = null, $standalone = null)
+    {
+        $attributes = array(
+                            "version" => $version,
+                           );
+        // add encoding
+        if ($encoding !== null) {
+            $attributes["encoding"] = $encoding;
+        }
+        // add standalone, if specified
+        if ($standalone !== null) {
+            $attributes["standalone"] = $standalone ? "yes" : "no";
+        }
+        
+        return sprintf("<?xml%s?>", XML_Util::attributesToString($attributes, false));
+    }
+
+   /**
+    * build a document type declaration
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // get a doctype declaration:
+    * $xmlDecl = XML_Util::getDocTypeDeclaration("rootTag","myDocType.dtd");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $root         name of the root tag
+    * @param    string  $uri          uri of the doctype definition (or array with uri and public id)
+    * @param    string  $internalDtd  internal dtd entries   
+    * @return   string  $decl         doctype declaration
+    * @since    0.2
+    */
+    function getDocTypeDeclaration($root, $uri = null, $internalDtd = null)
+    {
+        if (is_array($uri)) {
+            $ref = sprintf( ' PUBLIC "%s" "%s"', $uri["id"], $uri["uri"] );
+        } elseif (!empty($uri)) {
+            $ref = sprintf( ' SYSTEM "%s"', $uri );
+        } else {
+            $ref = "";
+        }
+
+        if (empty($internalDtd)) {
+            return sprintf("<!DOCTYPE %s%s>", $root, $ref);
+        } else {
+            return sprintf("<!DOCTYPE %s%s [\n%s\n]>", $root, $ref, $internalDtd);
+        }
+    }
+
+   /**
+    * create string representation of an attribute list
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // build an attribute string
+    * $att = array(
+    *              "foo"   =>  "bar",
+    *              "argh"  =>  "tomato"
+    *            );
+    *
+    * $attList = XML_Util::attributesToString($att);    
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    array         $attributes        attribute array
+    * @param    boolean|array $sort              sort attribute list alphabetically, may also be an assoc array containing the keys 'sort', 'multiline', 'indent', 'linebreak' and 'entities'
+    * @param    boolean       $multiline         use linebreaks, if more than one attribute is given
+    * @param    string        $indent            string used for indentation of multiline attributes
+    * @param    string        $linebreak         string used for linebreaks of multiline attributes
+    * @param    integer       $entities          setting for entities in attribute values (one of XML_UTIL_ENTITIES_NONE, XML_UTIL_ENTITIES_XML, XML_UTIL_ENTITIES_XML_REQUIRED, XML_UTIL_ENTITIES_HTML)
+    * @return   string                           string representation of the attributes
+    * @uses     XML_Util::replaceEntities() to replace XML entities in attribute values
+    * @todo     allow sort also to be an options array
+    */
+    function attributesToString($attributes, $sort = true, $multiline = false, $indent = '    ', $linebreak = "\n", $entities = XML_UTIL_ENTITIES_XML)
+    {
+        /**
+         * second parameter may be an array
+         */
+        if (is_array($sort)) {
+            if (isset($sort['multiline'])) {
+                $multiline = $sort['multiline'];
+            }
+            if (isset($sort['indent'])) {
+                $indent = $sort['indent'];
+            }
+            if (isset($sort['linebreak'])) {
+                $multiline = $sort['linebreak'];
+            }
+            if (isset($sort['entities'])) {
+                $entities = $sort['entities'];
+            }
+            if (isset($sort['sort'])) {
+                $sort = $sort['sort'];
+            } else {
+                $sort = true;
+            }
+        }
+        $string = '';
+        if (is_array($attributes) && !empty($attributes)) {
+            if ($sort) {
+                ksort($attributes);
+            }
+            if( !$multiline || count($attributes) == 1) {
+                foreach ($attributes as $key => $value) {
+                    if ($entities != XML_UTIL_ENTITIES_NONE) {
+                        $value = XML_Util::replaceEntities($value, $entities);
+                    }
+                    $string .= ' '.$key.'="'.$value.'"';
+                }
+            } else {
+                $first = true;
+                foreach ($attributes as $key => $value) {
+                    if ($entities != XML_UTIL_ENTITIES_NONE) {
+                        $value = XML_Util::replaceEntities($value, $entities);
+                    }
+                    if ($first) {
+                        $string .= " ".$key.'="'.$value.'"';
+                        $first = false;
+                    } else {
+                        $string .= $linebreak.$indent.$key.'="'.$value.'"';
+                    }
+                }
+            }
+        }
+        return $string;
+    }
+
+   /**
+    * create a tag
+    *
+    * This method will call XML_Util::createTagFromArray(), which
+    * is more flexible.
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // create an XML tag:
+    * $tag = XML_Util::createTag("myNs:myTag", array("foo" => "bar"), "This is inside the tag", "http://www.w3c.org/myNs#");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $qname             qualified tagname (including namespace)
+    * @param    array   $attributes        array containg attributes
+    * @param    mixed   $content
+    * @param    string  $namespaceUri      URI of the namespace
+    * @param    integer $replaceEntities   whether to replace XML special chars in content, embedd it in a CData section or none of both
+    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
+    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
+    * @param    string  $linebreak         string used for linebreaks
+    * @param    string  $encoding          encoding that should be used to translate content
+    * @return   string  $string            XML tag
+    * @see      XML_Util::createTagFromArray()
+    * @uses     XML_Util::createTagFromArray() to create the tag
+    */
+    function createTag($qname, $attributes = array(), $content = null, $namespaceUri = null, $replaceEntities = XML_UTIL_REPLACE_ENTITIES, $multiline = false, $indent = "_auto", $linebreak = "\n", $encoding = XML_UTIL_ENTITIES_XML)
+    {
+        $tag = array(
+                     "qname"      => $qname,
+                     "attributes" => $attributes
+                    );
+
+        // add tag content
+        if ($content !== null) {
+            $tag["content"] = $content;
+        }
+        
+        // add namespace Uri
+        if ($namespaceUri !== null) {
+            $tag["namespaceUri"] = $namespaceUri;
+        }
+
+        return XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $linebreak, $encoding);
+    }
+
+   /**
+    * create a tag from an array
+    * this method awaits an array in the following format
+    * <pre>
+    * array(
+    *  "qname"        => $qname         // qualified name of the tag
+    *  "namespace"    => $namespace     // namespace prefix (optional, if qname is specified or no namespace)
+    *  "localpart"    => $localpart,    // local part of the tagname (optional, if qname is specified)
+    *  "attributes"   => array(),       // array containing all attributes (optional)
+    *  "content"      => $content,      // tag content (optional)
+    *  "namespaceUri" => $namespaceUri  // namespaceUri for the given namespace (optional)
+    *   )
+    * </pre>
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * $tag = array(
+    *           "qname"        => "foo:bar",
+    *           "namespaceUri" => "http://foo.com",
+    *           "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
+    *           "content"      => "I'm inside the tag",
+    *            );
+    * // creating a tag with qualified name and namespaceUri
+    * $string = XML_Util::createTagFromArray($tag);
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    array   $tag               tag definition
+    * @param    integer $replaceEntities   whether to replace XML special chars in content, embedd it in a CData section or none of both
+    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
+    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
+    * @param    string  $linebreak         string used for linebreaks
+    * @return   string  $string            XML tag
+    * @see      XML_Util::createTag()
+    * @uses     XML_Util::attributesToString() to serialize the attributes of the tag
+    * @uses     XML_Util::splitQualifiedName() to get local part and namespace of a qualified name
+    */
+    function createTagFromArray($tag, $replaceEntities = XML_UTIL_REPLACE_ENTITIES, $multiline = false, $indent = "_auto", $linebreak = "\n", $encoding = XML_UTIL_ENTITIES_XML)
+    {
+        if (isset($tag["content"]) && !is_scalar($tag["content"])) {
+            return XML_Util::raiseError( "Supplied non-scalar value as tag content", XML_UTIL_ERROR_NON_SCALAR_CONTENT );
+        }
+
+        if (!isset($tag['qname']) && !isset($tag['localPart'])) {
+            return XML_Util::raiseError( 'You must either supply a qualified name (qname) or local tag name (localPart).', XML_UTIL_ERROR_NO_TAG_NAME );
+        }
+
+        // if no attributes hav been set, use empty attributes
+        if (!isset($tag["attributes"]) || !is_array($tag["attributes"])) {
+            $tag["attributes"] = array();
+        }
+        
+        // qualified name is not given
+        if (!isset($tag["qname"])) {
+            // check for namespace
+            if (isset($tag["namespace"]) && !empty($tag["namespace"])) {
+                $tag["qname"] = $tag["namespace"].":".$tag["localPart"];
+            } else {
+                $tag["qname"] = $tag["localPart"];
+            }
+        // namespace URI is set, but no namespace
+        } elseif (isset($tag["namespaceUri"]) && !isset($tag["namespace"])) {
+            $parts = XML_Util::splitQualifiedName($tag["qname"]);
+            $tag["localPart"] = $parts["localPart"];
+            if (isset($parts["namespace"])) {
+                $tag["namespace"] = $parts["namespace"];
+            }
+        }
+
+        if (isset($tag["namespaceUri"]) && !empty($tag["namespaceUri"])) {
+            // is a namespace given
+            if (isset($tag["namespace"]) && !empty($tag["namespace"])) {
+                $tag["attributes"]["xmlns:".$tag["namespace"]] = $tag["namespaceUri"];
+            } else {
+                // define this Uri as the default namespace
+                $tag["attributes"]["xmlns"] = $tag["namespaceUri"];
+            }
+        }
+
+        // check for multiline attributes
+        if ($multiline === true) {
+            if ($indent === "_auto") {
+                $indent = str_repeat(" ", (strlen($tag["qname"])+2));
+            }
+        }
+        
+        // create attribute list
+        $attList    =   XML_Util::attributesToString($tag["attributes"], true, $multiline, $indent, $linebreak );
+        if (!isset($tag["content"]) || (string)$tag["content"] == '') {
+            $tag    =   sprintf("<%s%s />", $tag["qname"], $attList);
+        } else {
+            if ($replaceEntities == XML_UTIL_REPLACE_ENTITIES) {
+                $tag["content"] = XML_Util::replaceEntities($tag["content"], $encoding);
+            } elseif ($replaceEntities == XML_UTIL_CDATA_SECTION) {
+                $tag["content"] = XML_Util::createCDataSection($tag["content"]);
+            }
+            $tag    =   sprintf("<%s%s>%s</%s>", $tag["qname"], $attList, $tag["content"], $tag["qname"] );
+        }        
+        return  $tag;
+    }
+
+   /**
+    * create a start element
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // create an XML start element:
+    * $tag = XML_Util::createStartElement("myNs:myTag", array("foo" => "bar") ,"http://www.w3c.org/myNs#");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $qname             qualified tagname (including namespace)
+    * @param    array   $attributes        array containg attributes
+    * @param    string  $namespaceUri      URI of the namespace
+    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
+    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
+    * @param    string  $linebreak         string used for linebreaks
+    * @return   string  $string            XML start element
+    * @see      XML_Util::createEndElement(), XML_Util::createTag()
+    */
+    function createStartElement($qname, $attributes = array(), $namespaceUri = null, $multiline = false, $indent = '_auto', $linebreak = "\n")
+    {
+        // if no attributes hav been set, use empty attributes
+        if (!isset($attributes) || !is_array($attributes)) {
+            $attributes = array();
+        }
+        
+        if ($namespaceUri != null) {
+            $parts = XML_Util::splitQualifiedName($qname);
+        }
+
+        // check for multiline attributes
+        if ($multiline === true) {
+            if ($indent === "_auto") {
+                $indent = str_repeat(" ", (strlen($qname)+2));
+            }
+        }
+
+        if ($namespaceUri != null) {
+            // is a namespace given
+            if (isset($parts["namespace"]) && !empty($parts["namespace"])) {
+                $attributes["xmlns:".$parts["namespace"]] = $namespaceUri;
+            } else {
+                // define this Uri as the default namespace
+                $attributes["xmlns"] = $namespaceUri;
+            }
+        }
+
+        // create attribute list
+        $attList    =   XML_Util::attributesToString($attributes, true, $multiline, $indent, $linebreak);
+        $element    =   sprintf("<%s%s>", $qname, $attList);
+        return  $element;
+    }
+
+   /**
+    * create an end element
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // create an XML start element:
+    * $tag = XML_Util::createEndElement("myNs:myTag");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $qname             qualified tagname (including namespace)
+    * @return   string  $string            XML end element
+    * @see      XML_Util::createStartElement(), XML_Util::createTag()
+    */
+    function createEndElement($qname)
+    {
+        $element    =   sprintf("</%s>", $qname);
+        return  $element;
+    }
+    
+   /**
+    * create an XML comment
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // create an XML start element:
+    * $tag = XML_Util::createComment("I am a comment");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $content           content of the comment
+    * @return   string  $comment           XML comment
+    */
+    function createComment($content)
+    {
+        $comment    =   sprintf("<!-- %s -->", $content);
+        return  $comment;
+    }
+    
+   /**
+    * create a CData section
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // create a CData section
+    * $tag = XML_Util::createCDataSection("I am content.");
+    * </code>
+    *
+    * @access   public
+    * @static
+    * @param    string  $data              data of the CData section
+    * @return   string  $string            CData section with content
+    */
+    function createCDataSection($data)
+    {
+        return  sprintf("<![CDATA[%s]]>", $data);
+    }
+
+   /**
+    * split qualified name and return namespace and local part
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // split qualified tag
+    * $parts = XML_Util::splitQualifiedName("xslt:stylesheet");
+    * </code>
+    * the returned array will contain two elements:
+    * <pre>
+    * array(
+    *       "namespace" => "xslt",
+    *       "localPart" => "stylesheet"
+    *      );
+    * </pre>
+    *
+    * @access public
+    * @static
+    * @param  string    $qname      qualified tag name
+    * @param  string    $defaultNs  default namespace (optional)
+    * @return array     $parts      array containing namespace and local part
+    */
+    function splitQualifiedName($qname, $defaultNs = null)
+    {
+        if (strstr($qname, ':')) {
+            $tmp = explode(":", $qname);
+            return array(
+                          "namespace" => $tmp[0],
+                          "localPart" => $tmp[1]
+                        );
+        }
+        return array(
+                      "namespace" => $defaultNs,
+                      "localPart" => $qname
+                    );
+    }
+
+   /**
+    * check, whether string is valid XML name
+    *
+    * <p>XML names are used for tagname, attribute names and various
+    * other, lesser known entities.</p>
+    * <p>An XML name may only consist of alphanumeric characters,
+    * dashes, undescores and periods, and has to start with a letter
+    * or an underscore.
+    * </p>
+    *
+    * <code>
+    * require_once 'XML/Util.php';
+    * 
+    * // verify tag name
+    * $result = XML_Util::isValidName("invalidTag?");
+    * if (XML_Util::isError($result)) {
+    *    print "Invalid XML name: " . $result->getMessage();
+    * }
+    * </code>
+    *
+    * @access  public
+    * @static
+    * @param   string  $string string that should be checked
+    * @return  mixed   $valid  true, if string is a valid XML name, PEAR error otherwise
+    * @todo    support for other charsets
+    */
+    function isValidName($string)
+    {
+        // check for invalid chars
+        if (!preg_match("/^[[:alnum:]_\-.]$/", $string{0})) {
+            return XML_Util::raiseError( "XML names may only start with letter or underscore", XML_UTIL_ERROR_INVALID_START );
+        }
+        
+        // check for invalid chars
+        if (!preg_match("/^([a-zA-Z_]([a-zA-Z0-9_\-\.]*)?:)?[a-zA-Z_]([a-zA-Z0-9_\-\.]+)?$/", $string)) {
+            return XML_Util::raiseError( "XML names may only contain alphanumeric chars, period, hyphen, colon and underscores", XML_UTIL_ERROR_INVALID_CHARS );
+         }
+        // XML name is valid
+        return true;
+    }
+
+   /**
+    * replacement for XML_Util::raiseError
+    *
+    * Avoids the necessity to always require
+    * PEAR.php
+    *
+    * @access   public
+    * @param    string      error message
+    * @param    integer     error code
+    * @return   object PEAR_Error
+    */
+    function raiseError($msg, $code)
+    {
+        require_once 'PEAR.php';
+        return PEAR::raiseError($msg, $code);
+    }
+}
+//} // if (!class_exists('XML_Util'))
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v1.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v1.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v1.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v1.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,461 @@
+<?php
+/**
+ * package.xml parsing class, package.xml version 1.0
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: v1.php,v 1.21 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * package.xml abstraction class
+ */
+require_once 'PEAR/PackageFile/v1.php';
+/**
+ * Parser for package.xml version 1.0
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @PEAR-VER@
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_Parser_v1
+{
+    var $_registry;
+    var $_config;
+    var $_logger;
+    /**
+     * BC hack to allow PEAR_Common::infoFromString() to sort of
+     * work with the version 2.0 format - there's no filelist though
+     * @param PEAR_PackageFile_v2
+     */
+    function fromV2($packagefile)
+    {
+        $info = $packagefile->getArray(true);
+        $ret = new PEAR_PackageFile_v1;
+        $ret->fromArray($info['old']);
+    }
+
+    function setConfig(&$c)
+    {
+        $this->_config = &$c;
+        $this->_registry = &$c->getRegistry();
+    }
+
+    function setLogger(&$l)
+    {
+        $this->_logger = &$l;
+    }
+
+    /**
+     * @param string contents of package.xml file, version 1.0
+     * @return bool success of parsing
+     */
+    function parse($data, $file, $archive = false)
+    {
+        if (!extension_loaded('xml')) {
+            return PEAR::raiseError('Cannot create xml parser for parsing package.xml, no xml extension');
+        }
+        $xp = @xml_parser_create();
+        if (!$xp) {
+            return PEAR::raiseError('Cannot create xml parser for parsing package.xml');
+        }
+        xml_set_object($xp, $this);
+        xml_set_element_handler($xp, '_element_start_1_0', '_element_end_1_0');
+        xml_set_character_data_handler($xp, '_pkginfo_cdata_1_0');
+        xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
+
+        $this->element_stack = array();
+        $this->_packageInfo = array('provides' => array());
+        $this->current_element = false;
+        unset($this->dir_install);
+        $this->_packageInfo['filelist'] = array();
+        $this->filelist =& $this->_packageInfo['filelist'];
+        $this->dir_names = array();
+        $this->in_changelog = false;
+        $this->d_i = 0;
+        $this->cdata = '';
+        $this->_isValid = true;
+
+        if (!xml_parse($xp, $data, 1)) {
+            $code = xml_get_error_code($xp);
+            $line = xml_get_current_line_number($xp);
+            xml_parser_free($xp);
+            return PEAR::raiseError(sprintf("XML error: %s at line %d",
+                           $str = xml_error_string($code), $line), 2);
+        }
+
+        xml_parser_free($xp);
+
+        $pf = new PEAR_PackageFile_v1;
+        $pf->setConfig($this->_config);
+        if (isset($this->_logger)) {
+            $pf->setLogger($this->_logger);
+        }
+        $pf->setPackagefile($file, $archive);
+        $pf->fromArray($this->_packageInfo);
+        return $pf;
+    }
+    // {{{ _unIndent()
+
+    /**
+     * Unindent given string
+     *
+     * @param string $str The string that has to be unindented.
+     * @return string
+     * @access private
+     */
+    function _unIndent($str)
+    {
+        // remove leading newlines
+        $str = preg_replace('/^[\r\n]+/', '', $str);
+        // find whitespace at the beginning of the first line
+        $indent_len = strspn($str, " \t");
+        $indent = substr($str, 0, $indent_len);
+        $data = '';
+        // remove the same amount of whitespace from following lines
+        foreach (explode("\n", $str) as $line) {
+            if (substr($line, 0, $indent_len) == $indent) {
+                $data .= substr($line, $indent_len) . "\n";
+            }
+        }
+        return $data;
+    }
+
+    // Support for package DTD v1.0:
+    // {{{ _element_start_1_0()
+
+    /**
+     * XML parser callback for ending elements.  Used for version 1.0
+     * packages.
+     *
+     * @param resource  $xp    XML parser resource
+     * @param string    $name  name of ending element
+     *
+     * @return void
+     *
+     * @access private
+     */
+    function _element_start_1_0($xp, $name, $attribs)
+    {
+        array_push($this->element_stack, $name);
+        $this->current_element = $name;
+        $spos = sizeof($this->element_stack) - 2;
+        $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
+        $this->current_attributes = $attribs;
+        $this->cdata = '';
+        switch ($name) {
+            case 'dir':
+                if ($this->in_changelog) {
+                    break;
+                }
+                if (array_key_exists('name', $attribs) && $attribs['name'] != '/') {
+                    $attribs['name'] = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'),
+                        $attribs['name']);
+                    if (strrpos($attribs['name'], '/') == strlen($attribs['name']) - 1) {
+                        $attribs['name'] = substr($attribs['name'], 0,
+                            strlen($attribs['name']) - 1);
+                    }
+                    if (strpos($attribs['name'], '/') === 0) {
+                        $attribs['name'] = substr($attribs['name'], 1);
+                    }
+                    $this->dir_names[] = $attribs['name'];
+                }
+                if (isset($attribs['baseinstalldir'])) {
+                    $this->dir_install = $attribs['baseinstalldir'];
+                }
+                if (isset($attribs['role'])) {
+                    $this->dir_role = $attribs['role'];
+                }
+                break;
+            case 'file':
+                if ($this->in_changelog) {
+                    break;
+                }
+                if (isset($attribs['name'])) {
+                    $path = '';
+                    if (count($this->dir_names)) {
+                        foreach ($this->dir_names as $dir) {
+                            $path .= $dir . '/';
+                        }
+                    }
+                    $path .= preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'),
+                        $attribs['name']);
+                    unset($attribs['name']);
+                    $this->current_path = $path;
+                    $this->filelist[$path] = $attribs;
+                    // Set the baseinstalldir only if the file don't have this attrib
+                    if (!isset($this->filelist[$path]['baseinstalldir']) &&
+                        isset($this->dir_install))
+                    {
+                        $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
+                    }
+                    // Set the Role
+                    if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
+                        $this->filelist[$path]['role'] = $this->dir_role;
+                    }
+                }
+                break;
+            case 'replace':
+                if (!$this->in_changelog) {
+                    $this->filelist[$this->current_path]['replacements'][] = $attribs;
+                }
+                break;
+            case 'maintainers':
+                $this->_packageInfo['maintainers'] = array();
+                $this->m_i = 0; // maintainers array index
+                break;
+            case 'maintainer':
+                // compatibility check
+                if (!isset($this->_packageInfo['maintainers'])) {
+                    $this->_packageInfo['maintainers'] = array();
+                    $this->m_i = 0;
+                }
+                $this->_packageInfo['maintainers'][$this->m_i] = array();
+                $this->current_maintainer =& $this->_packageInfo['maintainers'][$this->m_i];
+                break;
+            case 'changelog':
+                $this->_packageInfo['changelog'] = array();
+                $this->c_i = 0; // changelog array index
+                $this->in_changelog = true;
+                break;
+            case 'release':
+                if ($this->in_changelog) {
+                    $this->_packageInfo['changelog'][$this->c_i] = array();
+                    $this->current_release = &$this->_packageInfo['changelog'][$this->c_i];
+                } else {
+                    $this->current_release = &$this->_packageInfo;
+                }
+                break;
+            case 'deps':
+                if (!$this->in_changelog) {
+                    $this->_packageInfo['release_deps'] = array();
+                }
+                break;
+            case 'dep':
+                // dependencies array index
+                if (!$this->in_changelog) {
+                    $this->d_i++;
+                    isset($attribs['type']) ? ($attribs['type'] = strtolower($attribs['type'])) : false;
+                    $this->_packageInfo['release_deps'][$this->d_i] = $attribs;
+                }
+                break;
+            case 'configureoptions':
+                if (!$this->in_changelog) {
+                    $this->_packageInfo['configure_options'] = array();
+                }
+                break;
+            case 'configureoption':
+                if (!$this->in_changelog) {
+                    $this->_packageInfo['configure_options'][] = $attribs;
+                }
+                break;
+            case 'provides':
+                if (empty($attribs['type']) || empty($attribs['name'])) {
+                    break;
+                }
+                $attribs['explicit'] = true;
+                $this->_packageInfo['provides']["$attribs[type];$attribs[name]"] = $attribs;
+                break;
+            case 'package' :
+                if (isset($attribs['version'])) {
+                    $this->_packageInfo['xsdversion'] = trim($attribs['version']);
+                } else {
+                    $this->_packageInfo['xsdversion'] = '1.0';
+                }
+                if (isset($attribs['packagerversion'])) {
+                    $this->_packageInfo['packagerversion'] = $attribs['packagerversion'];
+                }
+                break;
+        }
+    }
+
+    // }}}
+    // {{{ _element_end_1_0()
+
+    /**
+     * XML parser callback for ending elements.  Used for version 1.0
+     * packages.
+     *
+     * @param resource  $xp    XML parser resource
+     * @param string    $name  name of ending element
+     *
+     * @return void
+     *
+     * @access private
+     */
+    function _element_end_1_0($xp, $name)
+    {
+        $data = trim($this->cdata);
+        switch ($name) {
+            case 'name':
+                switch ($this->prev_element) {
+                    case 'package':
+                        $this->_packageInfo['package'] = $data;
+                        break;
+                    case 'maintainer':
+                        $this->current_maintainer['name'] = $data;
+                        break;
+                }
+                break;
+            case 'extends' :
+                $this->_packageInfo['extends'] = $data;
+                break;
+            case 'summary':
+                $this->_packageInfo['summary'] = $data;
+                break;
+            case 'description':
+                $data = $this->_unIndent($this->cdata);
+                $this->_packageInfo['description'] = $data;
+                break;
+            case 'user':
+                $this->current_maintainer['handle'] = $data;
+                break;
+            case 'email':
+                $this->current_maintainer['email'] = $data;
+                break;
+            case 'role':
+                $this->current_maintainer['role'] = $data;
+                break;
+            case 'version':
+                //$data = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $data);
+                if ($this->in_changelog) {
+                    $this->current_release['version'] = $data;
+                } else {
+                    $this->_packageInfo['version'] = $data;
+                }
+                break;
+            case 'date':
+                if ($this->in_changelog) {
+                    $this->current_release['release_date'] = $data;
+                } else {
+                    $this->_packageInfo['release_date'] = $data;
+                }
+                break;
+            case 'notes':
+                // try to "de-indent" release notes in case someone
+                // has been over-indenting their xml ;-)
+                $data = $this->_unIndent($this->cdata);
+                if ($this->in_changelog) {
+                    $this->current_release['release_notes'] = $data;
+                } else {
+                    $this->_packageInfo['release_notes'] = $data;
+                }
+                break;
+            case 'warnings':
+                if ($this->in_changelog) {
+                    $this->current_release['release_warnings'] = $data;
+                } else {
+                    $this->_packageInfo['release_warnings'] = $data;
+                }
+                break;
+            case 'state':
+                if ($this->in_changelog) {
+                    $this->current_release['release_state'] = $data;
+                } else {
+                    $this->_packageInfo['release_state'] = $data;
+                }
+                break;
+            case 'license':
+                if ($this->in_changelog) {
+                    $this->current_release['release_license'] = $data;
+                } else {
+                    $this->_packageInfo['release_license'] = $data;
+                }
+                break;
+            case 'dep':
+                if ($data && !$this->in_changelog) {
+                    $this->_packageInfo['release_deps'][$this->d_i]['name'] = $data;
+                }
+                break;
+            case 'dir':
+                if ($this->in_changelog) {
+                    break;
+                }
+                array_pop($this->dir_names);
+                break;
+            case 'file':
+                if ($this->in_changelog) {
+                    break;
+                }
+                if ($data) {
+                    $path = '';
+                    if (count($this->dir_names)) {
+                        foreach ($this->dir_names as $dir) {
+                            $path .= $dir . '/';
+                        }
+                    }
+                    $path .= $data;
+                    $this->filelist[$path] = $this->current_attributes;
+                    // Set the baseinstalldir only if the file don't have this attrib
+                    if (!isset($this->filelist[$path]['baseinstalldir']) &&
+                        isset($this->dir_install))
+                    {
+                        $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
+                    }
+                    // Set the Role
+                    if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
+                        $this->filelist[$path]['role'] = $this->dir_role;
+                    }
+                }
+                break;
+            case 'maintainer':
+                if (empty($this->_packageInfo['maintainers'][$this->m_i]['role'])) {
+                    $this->_packageInfo['maintainers'][$this->m_i]['role'] = 'lead';
+                }
+                $this->m_i++;
+                break;
+            case 'release':
+                if ($this->in_changelog) {
+                    $this->c_i++;
+                }
+                break;
+            case 'changelog':
+                $this->in_changelog = false;
+                break;
+        }
+        array_pop($this->element_stack);
+        $spos = sizeof($this->element_stack) - 1;
+        $this->current_element = ($spos > 0) ? $this->element_stack[$spos] : '';
+        $this->cdata = '';
+    }
+
+    // }}}
+    // {{{ _pkginfo_cdata_1_0()
+
+    /**
+     * XML parser callback for character data.  Used for version 1.0
+     * packages.
+     *
+     * @param resource  $xp    XML parser resource
+     * @param string    $name  character data
+     *
+     * @return void
+     *
+     * @access private
+     */
+    function _pkginfo_cdata_1_0($xp, $data)
+    {
+        if (isset($this->cdata)) {
+            $this->cdata .= $data;
+        }
+    }
+
+    // }}}
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v2.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v2.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v2.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/Parser/v2.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,115 @@
+<?php
+/**
+ * package.xml parsing class, package.xml version 2.0
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: v2.php,v 1.18 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * base xml parser class
+ */
+require_once 'PEAR/XMLParser.php';
+require_once 'PEAR/PackageFile/v2.php';
+/**
+ * Parser for package.xml version 2.0
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @PEAR-VER@
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_Parser_v2 extends PEAR_XMLParser
+{
+    var $_config;
+    var $_logger;
+    var $_registry;
+
+    function setConfig(&$c)
+    {
+        $this->_config = &$c;
+        $this->_registry = &$c->getRegistry();
+    }
+
+    function setLogger(&$l)
+    {
+        $this->_logger = &$l;
+    }
+    /**
+     * Unindent given string
+     *
+     * @param string $str The string that has to be unindented.
+     * @return string
+     * @access private
+     */
+    function _unIndent($str)
+    {
+        // remove leading newlines
+        $str = preg_replace('/^[\r\n]+/', '', $str);
+        // find whitespace at the beginning of the first line
+        $indent_len = strspn($str, " \t");
+        $indent = substr($str, 0, $indent_len);
+        $data = '';
+        // remove the same amount of whitespace from following lines
+        foreach (explode("\n", $str) as $line) {
+            if (substr($line, 0, $indent_len) == $indent) {
+                $data .= substr($line, $indent_len) . "\n";
+            }
+        }
+        return $data;
+    }
+
+    /**
+     * post-process data
+     *
+     * @param string $data
+     * @param string $element element name
+     */
+    function postProcess($data, $element)
+    {
+        if ($element == 'notes') {
+            return trim($this->_unIndent($data));
+        }
+        return trim($data);
+    }
+
+    /**
+     * @param string
+     * @param string file name of the package.xml
+     * @param string|false name of the archive this package.xml came from, if any
+     * @param string class name to instantiate and return.  This must be PEAR_PackageFile_v2 or
+     *               a subclass
+     * @return PEAR_PackageFile_v2
+     */
+    function parse($data, $file, $archive = false, $class = 'PEAR_PackageFile_v2')
+    {
+        if (PEAR::isError($err = parent::parse($data, $file))) {
+            return $err;
+        }
+        $ret = new $class;
+        $ret->setConfig($this->_config);
+        if (isset($this->_logger)) {
+            $ret->setLogger($this->_logger);
+        }
+        $ret->fromArray($this->_unserializedData);
+        $ret->setPackagefile($file, $archive);
+        return $ret;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v1.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v1.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v1.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v1.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1596 @@
+<?php
+/**
+ * PEAR_PackageFile_v1, package.xml version 1.0
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: v1.php,v 1.68 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * For error handling
+ */
+require_once 'PEAR/ErrorStack.php';
+
+/**
+ * Error code if parsing is attempted with no xml extension
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_XML_EXT', 3);
+
+/**
+ * Error code if creating the xml parser resource fails
+ */
+define('PEAR_PACKAGEFILE_ERROR_CANT_MAKE_PARSER', 4);
+
+/**
+ * Error code used for all sax xml parsing errors
+ */
+define('PEAR_PACKAGEFILE_ERROR_PARSER_ERROR', 5);
+
+/**
+ * Error code used when there is no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_NAME', 6);
+
+/**
+ * Error code when a package name is not valid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_NAME', 7);
+
+/**
+ * Error code used when no summary is parsed
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_SUMMARY', 8);
+
+/**
+ * Error code for summaries that are more than 1 line
+ */
+define('PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY', 9);
+
+/**
+ * Error code used when no description is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION', 10);
+
+/**
+ * Error code used when no license is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_LICENSE', 11);
+
+/**
+ * Error code used when a <version> version number is not present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_VERSION', 12);
+
+/**
+ * Error code used when a <version> version number is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_VERSION', 13);
+
+/**
+ * Error code when release state is missing
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_STATE', 14);
+
+/**
+ * Error code when release state is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_STATE', 15);
+
+/**
+ * Error code when release state is missing
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DATE', 16);
+
+/**
+ * Error code when release state is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DATE', 17);
+
+/**
+ * Error code when no release notes are found
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_NOTES', 18);
+
+/**
+ * Error code when no maintainers are found
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS', 19);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE', 20);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE', 21);
+
+/**
+ * Error code when a maintainer has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME', 22);
+
+/**
+ * Error code when a maintainer has no email
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL', 23);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_MAINTROLE', 24);
+
+/**
+ * Error code when a dependency is not a PHP dependency, but has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPNAME', 25);
+
+/**
+ * Error code when a dependency has no type (pkg, php, etc.)
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE', 26);
+
+/**
+ * Error code when a dependency has no relation (lt, ge, has, etc.)
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPREL', 27);
+
+/**
+ * Error code when a dependency is not a 'has' relation, but has no version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION', 28);
+
+/**
+ * Error code when a dependency has an invalid relation
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPREL', 29);
+
+/**
+ * Error code when a dependency has an invalid type
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPTYPE', 30);
+
+/**
+ * Error code when a dependency has an invalid optional option
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL', 31);
+
+/**
+ * Error code when a dependency is a pkg dependency, and has an invalid package name
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPNAME', 32);
+
+/**
+ * Error code when a dependency has a channel="foo" attribute, and foo is not a registered channel
+ */
+define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_DEPCHANNEL', 33);
+
+/**
+ * Error code when rel="has" and version attribute is present.
+ */
+define('PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED', 34);
+
+/**
+ * Error code when type="php" and dependency name is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED', 35);
+
+/**
+ * Error code when a configure option has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_CONFNAME', 36);
+
+/**
+ * Error code when a configure option has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT', 37);
+
+/**
+ * Error code when a file in the filelist has an invalid role
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE', 38);
+
+/**
+ * Error code when a file in the filelist has no role
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_FILEROLE', 39);
+
+/**
+ * Error code when analyzing a php source file that has parse errors
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE', 40);
+
+/**
+ * Error code when analyzing a php source file reveals a source element
+ * without a package name prefix
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX', 41);
+
+/**
+ * Error code when an unknown channel is specified
+ */
+define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_CHANNEL', 42);
+
+/**
+ * Error code when no files are found in the filelist
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_FILES', 43);
+
+/**
+ * Error code when a file is not valid php according to _analyzeSourceCode()
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILE', 44);
+
+/**
+ * Error code when the channel validator returns an error or warning
+ */
+define('PEAR_PACKAGEFILE_ERROR_CHANNELVAL', 45);
+
+/**
+ * Error code when a php5 package is packaged in php4 (analysis doesn't work)
+ */
+define('PEAR_PACKAGEFILE_ERROR_PHP5', 46);
+
+/**
+ * Error code when a file is listed in package.xml but does not exist
+ */
+define('PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND', 47);
+
+/**
+ * Error code when a <dep type="php" rel="not"... is encountered (use rel="ne")
+ */
+define('PEAR_PACKAGEFILE_PHP_NO_NOT', 48);
+
+/**
+ * Error code when a package.xml contains non-ISO-8859-1 characters
+ */
+define('PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS', 49);
+
+/**
+ * Error code when a dependency is not a 'has' relation, but has no version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION', 50);
+
+/**
+ * Error code when a package has no lead developer
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_LEAD', 51);
+
+/**
+ * Error code when a filename begins with "."
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
+/**
+ * package.xml encapsulator
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_v1
+{
+    /**
+     * @access private
+     * @var PEAR_ErrorStack
+     * @access private
+     */
+    var $_stack;
+
+    /**
+     * A registry object, used to access the package name validation regex for non-standard channels
+     * @var PEAR_Registry
+     * @access private
+     */
+    var $_registry;
+
+    /**
+     * An object that contains a log method that matches PEAR_Common::log's signature
+     * @var object
+     * @access private
+     */
+    var $_logger;
+
+    /**
+     * Parsed package information
+     * @var array
+     * @access private
+     */
+    var $_packageInfo;
+
+    /**
+     * path to package.xml
+     * @var string
+     * @access private
+     */
+    var $_packageFile;
+
+    /**
+     * path to package .tgz or false if this is a local/extracted package.xml
+     * @var string
+     * @access private
+     */
+    var $_archiveFile;
+
+    /**
+     * @var int
+     * @access private
+     */
+    var $_isValid = 0;
+
+    /**
+     * Determines whether this packagefile was initialized only with partial package info
+     *
+     * If this package file was constructed via parsing REST, it will only contain
+     *
+     * - package name
+     * - channel name
+     * - dependencies 
+     * @var boolean
+     * @access private
+     */
+    var $_incomplete = true;
+
+    /**
+     * @param bool determines whether to return a PEAR_Error object, or use the PEAR_ErrorStack
+     * @param string Name of Error Stack class to use.
+     */
+    function PEAR_PackageFile_v1()
+    {
+        $this->_stack = &new PEAR_ErrorStack('PEAR_PackageFile_v1');
+        $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
+        $this->_isValid = 0;
+    }
+
+    function installBinary($installer)
+    {
+        return false;
+    }
+
+    function isExtension($name)
+    {
+        return false;
+    }
+
+    function setConfig(&$config)
+    {
+        $this->_config = &$config;
+        $this->_registry = &$config->getRegistry();
+    }
+
+    function setRequestedGroup()
+    {
+        // placeholder
+    }
+
+    /**
+     * For saving in the registry.
+     *
+     * Set the last version that was installed
+     * @param string
+     */
+    function setLastInstalledVersion($version)
+    {
+        $this->_packageInfo['_lastversion'] = $version;
+    }
+
+    /**
+     * @return string|false
+     */
+    function getLastInstalledVersion()
+    {
+        if (isset($this->_packageInfo['_lastversion'])) {
+            return $this->_packageInfo['_lastversion'];
+        }
+        return false;
+    }
+
+    function getInstalledBinary()
+    {
+        return false;
+    }
+
+    function listPostinstallScripts()
+    {
+        return false;
+    }
+
+    function initPostinstallScripts()
+    {
+        return false;
+    }
+
+    function setLogger(&$logger)
+    {
+        if ($logger && (!is_object($logger) || !method_exists($logger, 'log'))) {
+            return PEAR::raiseError('Logger must be compatible with PEAR_Common::log');
+        }
+        $this->_logger = &$logger;
+    }
+
+    function setPackagefile($file, $archive = false)
+    {
+        $this->_packageFile = $file;
+        $this->_archiveFile = $archive ? $archive : $file;
+    }
+
+    function getPackageFile()
+    {
+        return isset($this->_packageFile) ? $this->_packageFile : false;
+    }
+
+    function getPackageType()
+    {
+        return 'php';
+    }
+
+    function getArchiveFile()
+    {
+        return $this->_archiveFile;
+    }
+
+    function packageInfo($field)
+    {
+        if (!is_string($field) || empty($field) ||
+            !isset($this->_packageInfo[$field])) {
+            return false;
+        }
+        return $this->_packageInfo[$field];
+    }
+
+    function setDirtree($path)
+    {
+        $this->_packageInfo['dirtree'][$path] = true;
+    }
+
+    function getDirtree()
+    {
+        if (isset($this->_packageInfo['dirtree']) && count($this->_packageInfo['dirtree'])) {
+            return $this->_packageInfo['dirtree'];
+        }
+        return false;
+    }
+
+    function resetDirtree()
+    {
+        unset($this->_packageInfo['dirtree']);
+    }
+
+    function fromArray($pinfo)
+    {
+        $this->_incomplete = false;
+        $this->_packageInfo = $pinfo;
+    }
+
+    function isIncomplete()
+    {
+        return $this->_incomplete;
+    }
+
+    function getChannel()
+    {
+        return 'pear.php.net';
+    }
+
+    function getUri()
+    {
+        return false;
+    }
+
+    function getTime()
+    {
+        return false;
+    }
+
+    function getExtends()
+    {
+        if (isset($this->_packageInfo['extends'])) {
+            return $this->_packageInfo['extends'];
+        }
+        return false;
+    }
+
+    /**
+     * @return array
+     */
+    function toArray()
+    {
+        if (!$this->validate(PEAR_VALIDATE_NORMAL)) {
+            return false;
+        }
+        return $this->getArray();
+    }
+
+    function getArray()
+    {
+        return $this->_packageInfo;
+    }
+
+    function getName()
+    {
+        return $this->getPackage();
+    }
+
+    function getPackage()
+    {
+        if (isset($this->_packageInfo['package'])) {
+            return $this->_packageInfo['package'];
+        }
+        return false;
+    }
+
+    /**
+     * WARNING - don't use this unless you know what you are doing
+     */
+    function setRawPackage($package)
+    {
+        $this->_packageInfo['package'] = $package;
+    }
+
+    function setPackage($package)
+    {
+        $this->_packageInfo['package'] = $package;
+        $this->_isValid = false;
+    }
+
+    function getVersion()
+    {
+        if (isset($this->_packageInfo['version'])) {
+            return $this->_packageInfo['version'];
+        }
+        return false;
+    }
+
+    function setVersion($version)
+    {
+        $this->_packageInfo['version'] = $version;
+        $this->_isValid = false;
+    }
+
+    function clearMaintainers()
+    {
+        unset($this->_packageInfo['maintainers']);
+    }
+
+    function getMaintainers()
+    {
+        if (isset($this->_packageInfo['maintainers'])) {
+            return $this->_packageInfo['maintainers'];
+        }
+        return false;
+    }
+
+    /**
+     * Adds a new maintainer - no checking of duplicates is performed, use
+     * updatemaintainer for that purpose.
+     */
+    function addMaintainer($role, $handle, $name, $email)
+    {
+        $this->_packageInfo['maintainers'][] =
+            array('handle' => $handle, 'role' => $role, 'email' => $email, 'name' => $name);
+        $this->_isValid = false;
+    }
+
+    function updateMaintainer($role, $handle, $name, $email)
+    {
+        $found = false;
+        if (!isset($this->_packageInfo['maintainers']) ||
+              !is_array($this->_packageInfo['maintainers'])) {
+            return $this->addMaintainer($role, $handle, $name, $email);
+        }
+        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
+            if ($maintainer['handle'] == $handle) {
+                $found = $i;
+                break;
+            }
+        }
+        if ($found !== false) {
+            unset($this->_packageInfo['maintainers'][$found]);
+            $this->_packageInfo['maintainers'] =
+                array_values($this->_packageInfo['maintainers']);
+        }
+        $this->addMaintainer($role, $handle, $name, $email);
+    }
+
+    function deleteMaintainer($handle)
+    {
+        $found = false;
+        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
+            if ($maintainer['handle'] == $handle) {
+                $found = $i;
+                break;
+            }
+        }
+        if ($found !== false) {
+            unset($this->_packageInfo['maintainers'][$found]);
+            $this->_packageInfo['maintainers'] =
+                array_values($this->_packageInfo['maintainers']);
+            return true;
+        }
+        return false;
+    }
+
+    function getState()
+    {
+        if (isset($this->_packageInfo['release_state'])) {
+            return $this->_packageInfo['release_state'];
+        }
+        return false;
+    }
+
+    function setRawState($state)
+    {
+        $this->_packageInfo['release_state'] = $state;
+    }
+
+    function setState($state)
+    {
+        $this->_packageInfo['release_state'] = $state;
+        $this->_isValid = false;
+    }
+
+    function getDate()
+    {
+        if (isset($this->_packageInfo['release_date'])) {
+            return $this->_packageInfo['release_date'];
+        }
+        return false;
+    }
+
+    function setDate($date)
+    {
+        $this->_packageInfo['release_date'] = $date;
+        $this->_isValid = false;
+    }
+
+    function getLicense()
+    {
+        if (isset($this->_packageInfo['release_license'])) {
+            return $this->_packageInfo['release_license'];
+        }
+        return false;
+    }
+
+    function setLicense($date)
+    {
+        $this->_packageInfo['release_license'] = $date;
+        $this->_isValid = false;
+    }
+
+    function getSummary()
+    {
+        if (isset($this->_packageInfo['summary'])) {
+            return $this->_packageInfo['summary'];
+        }
+        return false;
+    }
+
+    function setSummary($summary)
+    {
+        $this->_packageInfo['summary'] = $summary;
+        $this->_isValid = false;
+    }
+
+    function getDescription()
+    {
+        if (isset($this->_packageInfo['description'])) {
+            return $this->_packageInfo['description'];
+        }
+        return false;
+    }
+
+    function setDescription($desc)
+    {
+        $this->_packageInfo['description'] = $desc;
+        $this->_isValid = false;
+    }
+
+    function getNotes()
+    {
+        if (isset($this->_packageInfo['release_notes'])) {
+            return $this->_packageInfo['release_notes'];
+        }
+        return false;
+    }
+
+    function setNotes($notes)
+    {
+        $this->_packageInfo['release_notes'] = $notes;
+        $this->_isValid = false;
+    }
+
+    function getDeps()
+    {
+        if (isset($this->_packageInfo['release_deps'])) {
+            return $this->_packageInfo['release_deps'];
+        }
+        return false;
+    }
+
+    /**
+     * Reset dependencies prior to adding new ones
+     */
+    function clearDeps()
+    {
+        unset($this->_packageInfo['release_deps']);
+    }
+
+    function addPhpDep($version, $rel)
+    {
+        $this->_isValid = false;
+        $this->_packageInfo['release_deps'][] =
+            array('type' => 'php',
+                  'rel' => $rel,
+                  'version' => $version);
+    }
+
+    function addPackageDep($name, $version, $rel, $optional = 'no')
+    {
+        $this->_isValid = false;
+        $dep =
+            array('type' => 'pkg',
+                  'name' => $name,
+                  'rel' => $rel,
+                  'optional' => $optional);
+        if ($rel != 'has' && $rel != 'not') {
+            $dep['version'] = $version;
+        }
+        $this->_packageInfo['release_deps'][] = $dep;
+    }
+
+    function addExtensionDep($name, $version, $rel, $optional = 'no')
+    {
+        $this->_isValid = false;
+        $this->_packageInfo['release_deps'][] =
+            array('type' => 'ext',
+                  'name' => $name,
+                  'rel' => $rel,
+                  'version' => $version,
+                  'optional' => $optional);
+    }
+
+    /**
+     * WARNING - do not use this function directly unless you know what you're doing
+     */
+    function setDeps($deps)
+    {
+        $this->_packageInfo['release_deps'] = $deps;
+    }
+
+    function hasDeps()
+    {
+        return isset($this->_packageInfo['release_deps']) &&
+            count($this->_packageInfo['release_deps']);
+    }
+
+    function getDependencyGroup($group)
+    {
+        return false;
+    }
+
+    function isCompatible($pf)
+    {
+        return false;
+    }
+
+    function isSubpackageOf($p)
+    {
+        return $p->isSubpackage($this);
+    }
+
+    function isSubpackage($p)
+    {
+        return false;
+    }
+
+    function dependsOn($package, $channel)
+    {
+        if (strtolower($channel) != 'pear.php.net') {
+            return false;
+        }
+        if (!($deps = $this->getDeps())) {
+            return false;
+        }
+        foreach ($deps as $dep) {
+            if ($dep['type'] != 'pkg') {
+                continue;
+            }
+            if (strtolower($dep['name']) == strtolower($package)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    function getConfigureOptions()
+    {
+        if (isset($this->_packageInfo['configure_options'])) {
+            return $this->_packageInfo['configure_options'];
+        }
+        return false;
+    }
+
+    function hasConfigureOptions()
+    {
+        return isset($this->_packageInfo['configure_options']) &&
+            count($this->_packageInfo['configure_options']);
+    }
+
+    function addConfigureOption($name, $prompt, $default = false)
+    {
+        $o = array('name' => $name, 'prompt' => $prompt);
+        if ($default !== false) {
+            $o['default'] = $default;
+        }
+        if (!isset($this->_packageInfo['configure_options'])) {
+            $this->_packageInfo['configure_options'] = array();
+        }
+        $this->_packageInfo['configure_options'][] = $o;
+    }
+
+    function clearConfigureOptions()
+    {
+        unset($this->_packageInfo['configure_options']);
+    }
+
+    function getProvides()
+    {
+        if (isset($this->_packageInfo['provides'])) {
+            return $this->_packageInfo['provides'];
+        }
+        return false;
+    }
+
+    function addFile($dir, $file, $attrs)
+    {
+        $dir = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'), $dir);
+        if ($dir == '/' || $dir == '') {
+            $dir = '';
+        } else {
+            $dir .= '/';
+        }
+        $file = $dir . $file;
+        $file = preg_replace('![\\/]+!', '/', $file);
+        $this->_packageInfo['filelist'][$file] = $attrs;
+    }
+
+    function getInstallationFilelist()
+    {
+        return $this->getFilelist();
+    }
+
+    function getFilelist()
+    {
+        if (isset($this->_packageInfo['filelist'])) {
+            return $this->_packageInfo['filelist'];
+        }
+        return false;
+    }
+
+    function setFileAttribute($file, $attr, $value)
+    {
+        $this->_packageInfo['filelist'][$file][$attr] = $value;
+    }
+
+    function resetFilelist()
+    {
+        $this->_packageInfo['filelist'] = array();
+    }
+
+    function setInstalledAs($file, $path)
+    {
+        if ($path) {
+            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
+        }
+        unset($this->_packageInfo['filelist'][$file]['installed_as']);
+    }
+
+    function installedFile($file, $atts)
+    {
+        if (isset($this->_packageInfo['filelist'][$file])) {
+            $this->_packageInfo['filelist'][$file] =
+                array_merge($this->_packageInfo['filelist'][$file], $atts);
+        } else {
+            $this->_packageInfo['filelist'][$file] = $atts;
+        }
+    }
+
+    function getChangelog()
+    {
+        if (isset($this->_packageInfo['changelog'])) {
+            return $this->_packageInfo['changelog'];
+        }
+        return false;
+    }
+
+    function getPackagexmlVersion()
+    {
+        return '1.0';
+    }
+
+    /**
+     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
+     * @param boolean determines whether to purge the error stack after retrieving
+     * @return array
+     */
+    function getValidationWarnings($purge = true)
+    {
+        return $this->_stack->getErrors($purge);
+    }
+
+    // }}}
+    /**
+     * Validation error.  Also marks the object contents as invalid
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateError($code, $params = array())
+    {
+        $this->_stack->push($code, 'error', $params, false, false, debug_backtrace());
+        $this->_isValid = false;
+    }
+
+    /**
+     * Validation warning.  Does not mark the object contents invalid.
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateWarning($code, $params = array())
+    {
+        $this->_stack->push($code, 'warning', $params, false, false, debug_backtrace());
+    }
+
+    /**
+     * @param integer error code
+     * @access protected
+     */
+    function _getErrorMessage()
+    {
+        return array(
+                PEAR_PACKAGEFILE_ERROR_NO_NAME =>
+                    'Missing Package Name',
+                PEAR_PACKAGEFILE_ERROR_NO_SUMMARY =>
+                    'No summary found',
+                PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY =>
+                    'Summary should be on one line',
+                PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION =>
+                    'Missing description',
+                PEAR_PACKAGEFILE_ERROR_NO_LICENSE =>
+                    'Missing license',
+                PEAR_PACKAGEFILE_ERROR_NO_VERSION =>
+                    'No release version found',
+                PEAR_PACKAGEFILE_ERROR_NO_STATE =>
+                    'No release state found',
+                PEAR_PACKAGEFILE_ERROR_NO_DATE =>
+                    'No release date found',
+                PEAR_PACKAGEFILE_ERROR_NO_NOTES =>
+                    'No release notes found',
+                PEAR_PACKAGEFILE_ERROR_NO_LEAD =>
+                    'Package must have at least one lead maintainer',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS =>
+                    'No maintainers found, at least one must be defined',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE =>
+                    'Maintainer %index% has no handle (user ID at channel server)',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE =>
+                    'Maintainer %index% has no role',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME =>
+                    'Maintainer %index% has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL =>
+                    'Maintainer %index% has no email',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPNAME =>
+                    'Dependency %index% is not a php dependency, and has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPREL =>
+                    'Dependency %index% has no relation (rel)',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE =>
+                    'Dependency %index% has no type',
+                PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED =>
+                    'PHP Dependency %index% has a name attribute of "%name%" which will be' .
+                        ' ignored!',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION =>
+                    'Dependency %index% is not a rel="has" or rel="not" dependency, ' .
+                        'and has no version',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION =>
+                    'Dependency %index% is a type="php" dependency, ' .
+                        'and has no version',
+                PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED =>
+                    'Dependency %index% is a rel="%rel%" dependency, versioning is ignored',
+                PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL =>
+                    'Dependency %index% has invalid optional value "%opt%", should be yes or no',
+                PEAR_PACKAGEFILE_PHP_NO_NOT =>
+                    'Dependency %index%: php dependencies cannot use "not" rel, use "ne"' .
+                        ' to exclude specific versions',
+                PEAR_PACKAGEFILE_ERROR_NO_CONFNAME =>
+                    'Configure Option %index% has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT =>
+                    'Configure Option %index% has no prompt',
+                PEAR_PACKAGEFILE_ERROR_NO_FILES =>
+                    'No files in <filelist> section of package.xml',
+                PEAR_PACKAGEFILE_ERROR_NO_FILEROLE =>
+                    'File "%file%" has no role, expecting one of "%roles%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE =>
+                    'File "%file%" has invalid role "%role%", expecting one of "%roles%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME =>
+                    'File "%file%" cannot start with ".", cannot package or install',
+                PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE =>
+                    'Parser error: invalid PHP found in file "%file%"',
+                PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX =>
+                    'in %file%: %type% "%name%" not prefixed with package name "%package%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILE =>
+                    'Parser error: invalid PHP file "%file%"',
+                PEAR_PACKAGEFILE_ERROR_CHANNELVAL =>
+                    'Channel validator error: field "%field%" - %reason%',
+                PEAR_PACKAGEFILE_ERROR_PHP5 =>
+                    'Error, PHP5 token encountered in %file%, analysis should be in PHP5',
+                PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND =>
+                    'File "%file%" in package.xml does not exist',
+                PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS =>
+                    'Package.xml contains non-ISO-8859-1 characters, and may not validate',
+            );
+    }
+
+    /**
+     * Validate XML package definition file.
+     *
+     * @access public
+     * @return boolean
+     */
+    function validate($state = PEAR_VALIDATE_NORMAL, $nofilechecking = false)
+    {
+        if (($this->_isValid & $state) == $state) {
+            return true;
+        }
+        $this->_isValid = true;
+        $info = $this->_packageInfo;
+        if (empty($info['package'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NAME);
+            $this->_packageName = $pn = 'unknown';
+        } else {
+            $this->_packageName = $pn = $info['package'];
+        }
+
+        if (empty($info['summary'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_SUMMARY);
+        } elseif (strpos(trim($info['summary']), "\n") !== false) {
+            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY,
+                array('summary' => $info['summary']));
+        }
+        if (empty($info['description'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION);
+        }
+        if (empty($info['release_license'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LICENSE);
+        }
+        if (empty($info['version'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_VERSION);
+        }
+        if (empty($info['release_state'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_STATE);
+        }
+        if (empty($info['release_date'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DATE);
+        }
+        if (empty($info['release_notes'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NOTES);
+        }
+        if (empty($info['maintainers'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS);
+        } else {
+            $haslead = false;
+            $i = 1;
+            foreach ($info['maintainers'] as $m) {
+                if (empty($m['handle'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE,
+                        array('index' => $i));
+                }
+                if (empty($m['role'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE,
+                        array('index' => $i, 'roles' => PEAR_Common::getUserRoles()));
+                } elseif ($m['role'] == 'lead') {
+                    $haslead = true;
+                }
+                if (empty($m['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME,
+                        array('index' => $i));
+                }
+                if (empty($m['email'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+            if (!$haslead) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LEAD);
+            }
+        }
+        if (!empty($info['release_deps'])) {
+            $i = 1;
+            foreach ($info['release_deps'] as $d) {
+                if (!isset($d['type']) || empty($d['type'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE,
+                        array('index' => $i, 'types' => PEAR_Common::getDependencyTypes()));
+                    continue;
+                }
+                if (!isset($d['rel']) || empty($d['rel'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPREL,
+                        array('index' => $i, 'rels' => PEAR_Common::getDependencyRelations()));
+                    continue;
+                }
+                if (!empty($d['optional'])) {
+                    if (!in_array($d['optional'], array('yes', 'no'))) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL,
+                            array('index' => $i, 'opt' => $d['optional']));
+                    }
+                }
+                if ($d['rel'] != 'has' && $d['rel'] != 'not' && empty($d['version'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION,
+                        array('index' => $i));
+                } elseif (($d['rel'] == 'has' || $d['rel'] == 'not') && !empty($d['version'])) {
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED,
+                        array('index' => $i, 'rel' => $d['rel']));
+                }
+                if ($d['type'] == 'php' && !empty($d['name'])) {
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED,
+                        array('index' => $i, 'name' => $d['name']));
+                } elseif ($d['type'] != 'php' && empty($d['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPNAME,
+                        array('index' => $i));
+                }
+                if ($d['type'] == 'php' && empty($d['version'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION,
+                        array('index' => $i));
+                }
+                if (($d['rel'] == 'not') && ($d['type'] == 'php')) {
+                    $this->_validateError(PEAR_PACKAGEFILE_PHP_NO_NOT,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+        }
+        if (!empty($info['configure_options'])) {
+            $i = 1;
+            foreach ($info['configure_options'] as $c) {
+                if (empty($c['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFNAME,
+                        array('index' => $i));
+                }
+                if (empty($c['prompt'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+        }
+        if (empty($info['filelist'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILES);
+            $errors[] = 'no files';
+        } else {
+            foreach ($info['filelist'] as $file => $fa) {
+                if (empty($fa['role'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILEROLE,
+                        array('file' => $file, 'roles' => PEAR_Common::getFileRoles()));
+                    continue;
+                } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE,
+                        array('file' => $file, 'role' => $fa['role'], 'roles' => PEAR_Common::getFileRoles()));
+                }
+                if ($file{0} == '.' && $file{1} == '/') {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file));
+                }
+            }
+        }
+        if (isset($this->_registry) && $this->_isValid) {
+            $chan = $this->_registry->getChannel('pear.php.net');
+            $validator = $chan->getValidationObject();
+            $validator->setPackageFile($this);
+            $validator->validate($state);
+            $failures = $validator->getFailures();
+            foreach ($failures['errors'] as $error) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $error);
+            }
+            foreach ($failures['warnings'] as $warning) {
+                $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $warning);
+            }
+        }
+        if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$nofilechecking) {
+            if ($this->_analyzePhpFiles()) {
+                $this->_isValid = true;
+            }
+        }
+        if ($this->_isValid) {
+            return $this->_isValid = $state;
+        }
+        return $this->_isValid = 0;
+    }
+
+    function _analyzePhpFiles()
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        if (!isset($this->_packageFile)) {
+            return false;
+        }
+        $dir_prefix = dirname($this->_packageFile);
+        $common = new PEAR_Common;
+        $log = isset($this->_logger) ? array(&$this->_logger, 'log') :
+            array($common, 'log');
+        $info = $this->getFilelist();
+        foreach ($info as $file => $fa) {
+            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $file)) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND,
+                    array('file' => realpath($dir_prefix) . DIRECTORY_SEPARATOR . $file));
+                continue;
+            }
+            if ($fa['role'] == 'php' && $dir_prefix) {
+                call_user_func_array($log, array(1, "Analyzing $file"));
+                $srcinfo = $this->_analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
+                if ($srcinfo) {
+                    $this->_buildProvidesArray($srcinfo);
+                }
+            }
+        }
+        $this->_packageName = $pn = $this->getPackage();
+        $pnl = strlen($pn);
+        if (isset($this->_packageInfo['provides'])) {
+            foreach ((array) $this->_packageInfo['provides'] as $key => $what) {
+                if (isset($what['explicit'])) {
+                    // skip conformance checks if the provides entry is
+                    // specified in the package.xml file
+                    continue;
+                }
+                extract($what);
+                if ($type == 'class') {
+                    if (!strncasecmp($name, $pn, $pnl)) {
+                        continue;
+                    }
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
+                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
+                } elseif ($type == 'function') {
+                    if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
+                        continue;
+                    }
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
+                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
+                }
+            }
+        }
+        return $this->_isValid;
+    }
+
+    /**
+     * Get the default xml generator object
+     *
+     * @return PEAR_PackageFile_Generator_v1
+     */
+    function &getDefaultGenerator()
+    {
+        if (!class_exists('PEAR_PackageFile_Generator_v1')) {
+            require_once 'PEAR/PackageFile/Generator/v1.php';
+        }
+        $a = &new PEAR_PackageFile_Generator_v1($this);
+        return $a;
+    }
+
+    /**
+     * Get the contents of a file listed within the package.xml
+     * @param string
+     * @return string
+     */
+    function getFileContents($file)
+    {
+        if ($this->_archiveFile == $this->_packageFile) { // unpacked
+            $dir = dirname($this->_packageFile);
+            $file = $dir . DIRECTORY_SEPARATOR . $file;
+            $file = str_replace(array('/', '\\'),
+                array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
+            if (file_exists($file) && is_readable($file)) {
+                return implode('', file($file));
+            }
+        } else { // tgz
+            if (!class_exists('Archive_Tar')) {
+                require_once 'Archive/Tar.php';
+            }
+            $tar = &new Archive_Tar($this->_archiveFile);
+            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
+            if ($file != 'package.xml' && $file != 'package2.xml') {
+                $file = $this->getPackage() . '-' . $this->getVersion() . '/' . $file;
+            }
+            $file = $tar->extractInString($file);
+            $tar->popErrorHandling();
+            if (PEAR::isError($file)) {
+                return PEAR::raiseError("Cannot locate file '$file' in archive");
+            }
+            return $file;
+        }
+    }
+
+    // {{{ analyzeSourceCode()
+    /**
+     * Analyze the source code of the given PHP file
+     *
+     * @param  string Filename of the PHP file
+     * @return mixed
+     * @access private
+     */
+    function _analyzeSourceCode($file)
+    {
+        if (!function_exists("token_get_all")) {
+            return false;
+        }
+        if (!defined('T_DOC_COMMENT')) {
+            define('T_DOC_COMMENT', T_COMMENT);
+        }
+        if (!defined('T_INTERFACE')) {
+            define('T_INTERFACE', -1);
+        }
+        if (!defined('T_IMPLEMENTS')) {
+            define('T_IMPLEMENTS', -1);
+        }
+        if (!$fp = @fopen($file, "r")) {
+            return false;
+        }
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $contents = file_get_contents($file);
+        } else {
+            $contents = @fread($fp, filesize($file));
+            fclose($fp);
+        }
+        $tokens = token_get_all($contents);
+/*
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            @list($token, $data) = $tokens[$i];
+            if (is_string($token)) {
+                var_dump($token);
+            } else {
+                print token_name($token) . ' ';
+                var_dump(rtrim($data));
+            }
+        }
+*/
+        $look_for = 0;
+        $paren_level = 0;
+        $bracket_level = 0;
+        $brace_level = 0;
+        $lastphpdoc = '';
+        $current_class = '';
+        $current_interface = '';
+        $current_class_level = -1;
+        $current_function = '';
+        $current_function_level = -1;
+        $declared_classes = array();
+        $declared_interfaces = array();
+        $declared_functions = array();
+        $declared_methods = array();
+        $used_classes = array();
+        $used_functions = array();
+        $extends = array();
+        $implements = array();
+        $nodeps = array();
+        $inquote = false;
+        $interface = false;
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            if (is_array($tokens[$i])) {
+                list($token, $data) = $tokens[$i];
+            } else {
+                $token = $tokens[$i];
+                $data = '';
+            }
+            if ($inquote) {
+                if ($token != '"' && $token != T_END_HEREDOC) {
+                    continue;
+                } else {
+                    $inquote = false;
+                    continue;
+                }
+            }
+            switch ($token) {
+                case T_WHITESPACE :
+                    continue;
+                case ';':
+                    if ($interface) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    break;
+                case '"':
+                case T_START_HEREDOC:
+                    $inquote = true;
+                    break;
+                case T_CURLY_OPEN:
+                case T_DOLLAR_OPEN_CURLY_BRACES:
+                case '{': $brace_level++; continue 2;
+                case '}':
+                    $brace_level--;
+                    if ($current_class_level == $brace_level) {
+                        $current_class = '';
+                        $current_class_level = -1;
+                    }
+                    if ($current_function_level == $brace_level) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    continue 2;
+                case '[': $bracket_level++; continue 2;
+                case ']': $bracket_level--; continue 2;
+                case '(': $paren_level++;   continue 2;
+                case ')': $paren_level--;   continue 2;
+                case T_INTERFACE:
+                    $interface = true;
+                case T_CLASS:
+                    if (($current_class_level != -1) || ($current_function_level != -1)) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
+                            array('file' => $file));
+                        return false;
+                    }
+                case T_FUNCTION:
+                case T_NEW:
+                case T_EXTENDS:
+                case T_IMPLEMENTS:
+                    $look_for = $token;
+                    continue 2;
+                case T_STRING:
+                    if (version_compare(zend_version(), '2.0', '<')) {
+                        if (in_array(strtolower($data),
+                            array('public', 'private', 'protected', 'abstract',
+                                  'interface', 'implements', 'throw') 
+                                 )) {
+                            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_PHP5,
+                                array($file));
+                        }
+                    }
+                    if ($look_for == T_CLASS) {
+                        $current_class = $data;
+                        $current_class_level = $brace_level;
+                        $declared_classes[] = $current_class;
+                    } elseif ($look_for == T_INTERFACE) {
+                        $current_interface = $data;
+                        $current_class_level = $brace_level;
+                        $declared_interfaces[] = $current_interface;
+                    } elseif ($look_for == T_IMPLEMENTS) {
+                        $implements[$current_class] = $data;
+                    } elseif ($look_for == T_EXTENDS) {
+                        $extends[$current_class] = $data;
+                    } elseif ($look_for == T_FUNCTION) {
+                        if ($current_class) {
+                            $current_function = "$current_class::$data";
+                            $declared_methods[$current_class][] = $data;
+                        } elseif ($current_interface) {
+                            $current_function = "$current_interface::$data";
+                            $declared_methods[$current_interface][] = $data;
+                        } else {
+                            $current_function = $data;
+                            $declared_functions[] = $current_function;
+                        }
+                        $current_function_level = $brace_level;
+                        $m = array();
+                    } elseif ($look_for == T_NEW) {
+                        $used_classes[$data] = true;
+                    }
+                    $look_for = 0;
+                    continue 2;
+                case T_VARIABLE:
+                    $look_for = 0;
+                    continue 2;
+                case T_DOC_COMMENT:
+                case T_COMMENT:
+                    if (preg_match('!^/\*\*\s!', $data)) {
+                        $lastphpdoc = $data;
+                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
+                            $nodeps = array_merge($nodeps, $m[1]);
+                        }
+                    }
+                    continue 2;
+                case T_DOUBLE_COLON:
+                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
+                            array('file' => $file));
+                        return false;
+                    }
+                    $class = $tokens[$i - 1][1];
+                    if (strtolower($class) != 'parent') {
+                        $used_classes[$class] = true;
+                    }
+                    continue 2;
+            }
+        }
+        return array(
+            "source_file" => $file,
+            "declared_classes" => $declared_classes,
+            "declared_interfaces" => $declared_interfaces,
+            "declared_methods" => $declared_methods,
+            "declared_functions" => $declared_functions,
+            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
+            "inheritance" => $extends,
+            "implements" => $implements,
+            );
+    }
+
+    /**
+     * Build a "provides" array from data returned by
+     * analyzeSourceCode().  The format of the built array is like
+     * this:
+     *
+     *  array(
+     *    'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
+     *    ...
+     *  )
+     *
+     *
+     * @param array $srcinfo array with information about a source file
+     * as returned by the analyzeSourceCode() method.
+     *
+     * @return void
+     *
+     * @access private
+     *
+     */
+    function _buildProvidesArray($srcinfo)
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        $file = basename($srcinfo['source_file']);
+        $pn = $this->getPackage();
+        $pnl = strlen($pn);
+        foreach ($srcinfo['declared_classes'] as $class) {
+            $key = "class;$class";
+            if (isset($this->_packageInfo['provides'][$key])) {
+                continue;
+            }
+            $this->_packageInfo['provides'][$key] =
+                array('file'=> $file, 'type' => 'class', 'name' => $class);
+            if (isset($srcinfo['inheritance'][$class])) {
+                $this->_packageInfo['provides'][$key]['extends'] =
+                    $srcinfo['inheritance'][$class];
+            }
+        }
+        foreach ($srcinfo['declared_methods'] as $class => $methods) {
+            foreach ($methods as $method) {
+                $function = "$class::$method";
+                $key = "function;$function";
+                if ($method{0} == '_' || !strcasecmp($method, $class) ||
+                    isset($this->_packageInfo['provides'][$key])) {
+                    continue;
+                }
+                $this->_packageInfo['provides'][$key] =
+                    array('file'=> $file, 'type' => 'function', 'name' => $function);
+            }
+        }
+
+        foreach ($srcinfo['declared_functions'] as $function) {
+            $key = "function;$function";
+            if ($function{0} == '_' || isset($this->_packageInfo['provides'][$key])) {
+                continue;
+            }
+            if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
+                $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
+            }
+            $this->_packageInfo['provides'][$key] =
+                array('file'=> $file, 'type' => 'function', 'name' => $function);
+        }
+    }
+
+    // }}}
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/rw.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/rw.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/rw.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/rw.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1557 @@
+<?php
+/**
+ * PEAR_PackageFile_v2, package.xml version 2.0, read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: rw.php,v 1.13 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a8
+ */
+/**
+ * For base class
+ */
+require_once 'PEAR/PackageFile/v2.php';
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a8
+ */
+class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
+{
+    /**
+     * @param string Extension name
+     * @return bool success of operation
+     */
+    function setProvidesExtension($extension)
+    {
+        if (in_array($this->getPackageType(), array('extsrc', 'extbin'))) {
+            if (!isset($this->_packageInfo['providesextension'])) {
+                // ensure that the channel tag is set up in the right location
+                $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                    array('usesrole', 'usestask', 'srcpackage', 'srcuri', 'phprelease',
+                    'extsrcrelease', 'extbinrelease', 'bundle', 'changelog'),
+                    $extension, 'providesextension');
+            }
+            $this->_packageInfo['providesextension'] = $extension;
+            return true;
+        }
+        return false;
+    }
+
+    function setPackage($package)
+    {
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['attribs'])) {
+            $this->_packageInfo = array_merge(array('attribs' => array(
+                                 'version' => '2.0',
+                                 'xmlns' => 'http://pear.php.net/dtd/package-2.0',
+                                 'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
+                                 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
+                                 'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0
+    http://pear.php.net/dtd/tasks-1.0.xsd
+    http://pear.php.net/dtd/package-2.0
+    http://pear.php.net/dtd/package-2.0.xsd',
+                             )), $this->_packageInfo);
+        }
+        if (!isset($this->_packageInfo['name'])) {
+            return $this->_packageInfo = array_merge(array('name' => $package),
+                $this->_packageInfo);
+        }
+        $this->_packageInfo['name'] = $package;
+    }
+
+    function setUri($uri)
+    {
+        unset($this->_packageInfo['channel']);
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['uri'])) {
+            // ensure that the uri tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo, 
+                array('extends', 'summary', 'description', 'lead',
+                'developer', 'contributor', 'helper', 'date', 'time', 'version',
+                'stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), $uri, 'uri');
+        }
+        $this->_packageInfo['uri'] = $uri;
+    }
+
+    function setChannel($channel)
+    {
+        unset($this->_packageInfo['uri']);
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['channel'])) {
+            // ensure that the channel tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('extends', 'summary', 'description', 'lead',
+                'developer', 'contributor', 'helper', 'date', 'time', 'version',
+                'stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), $channel, 'channel');
+        }
+        $this->_packageInfo['channel'] = $channel;
+    }
+
+    function setExtends($extends)
+    {
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['extends'])) {
+            // ensure that the extends tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('summary', 'description', 'lead',
+                'developer', 'contributor', 'helper', 'date', 'time', 'version',
+                'stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), $extends, 'extends');
+        }
+        $this->_packageInfo['extends'] = $extends;
+    }
+
+    function setSummary($summary)
+    {
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['summary'])) {
+            // ensure that the summary tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('description', 'lead',
+                'developer', 'contributor', 'helper', 'date', 'time', 'version',
+                'stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), $summary, 'summary');
+        }
+        $this->_packageInfo['summary'] = $summary;
+    }
+
+    function setDescription($desc)
+    {
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['description'])) {
+            // ensure that the description tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('lead',
+                'developer', 'contributor', 'helper', 'date', 'time', 'version',
+                'stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), $desc, 'description');
+        }
+        $this->_packageInfo['description'] = $desc;
+    }
+
+    /**
+     * Adds a new maintainer - no checking of duplicates is performed, use
+     * updatemaintainer for that purpose.
+     */
+    function addMaintainer($role, $handle, $name, $email, $active = 'yes')
+    {
+        if (!in_array($role, array('lead', 'developer', 'contributor', 'helper'))) {
+            return false;
+        }
+        if (isset($this->_packageInfo[$role])) {
+            if (!isset($this->_packageInfo[$role][0])) {
+                $this->_packageInfo[$role] = array($this->_packageInfo[$role]);
+            }
+            $this->_packageInfo[$role][] =
+                array(
+                    'name' => $name,
+                    'user' => $handle,
+                    'email' => $email,
+                    'active' => $active,
+                );
+        } else {
+            $testarr = array('lead',
+                    'developer', 'contributor', 'helper', 'date', 'time', 'version',
+                    'stability', 'license', 'notes', 'contents', 'compatible',
+                    'dependencies', 'providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease',
+                    'extbinrelease', 'bundle', 'changelog');
+            foreach (array('lead', 'developer', 'contributor', 'helper') as $testrole) {
+                array_shift($testarr);
+                if ($role == $testrole) {
+                    break;
+                }
+            }
+            if (!isset($this->_packageInfo[$role])) {
+                // ensure that the extends tag is set up in the right location
+                $this->_packageInfo = $this->_insertBefore($this->_packageInfo, $testarr,
+                    array(), $role);
+            }
+            $this->_packageInfo[$role] =
+                array(
+                    'name' => $name,
+                    'user' => $handle,
+                    'email' => $email,
+                    'active' => $active,
+                );
+        }
+        $this->_isValid = 0;
+    }
+
+    function updateMaintainer($newrole, $handle, $name, $email, $active = 'yes')
+    {
+        $found = false;
+        foreach (array('lead', 'developer', 'contributor', 'helper') as $role) {
+            if (!isset($this->_packageInfo[$role])) {
+                continue;
+            }
+            $info = $this->_packageInfo[$role];
+            if (!isset($info[0])) {
+                if ($info['user'] == $handle) {
+                    $found = true;
+                    break;
+                }
+            }
+            foreach ($info as $i => $maintainer) {
+                if ($maintainer['user'] == $handle) {
+                    $found = $i;
+                    break 2;
+                }
+            }
+        }
+        if ($found === false) {
+            return $this->addMaintainer($newrole, $handle, $name, $email, $active);
+        }
+        if ($found !== false) {
+            if ($found === true) {
+                unset($this->_packageInfo[$role]);
+            } else {
+                unset($this->_packageInfo[$role][$found]);
+                $this->_packageInfo[$role] = array_values($this->_packageInfo[$role]);
+            }
+        }
+        $this->addMaintainer($newrole, $handle, $name, $email);
+        $this->_isValid = 0;
+    }
+
+    function deleteMaintainer($handle)
+    {
+        $found = false;
+        foreach (array('lead', 'developer', 'contributor', 'helper') as $role) {
+            if (!isset($this->_packageInfo[$role])) {
+                continue;
+            }
+            if (!isset($this->_packageInfo[$role][0])) {
+                $this->_packageInfo[$role] = array($this->_packageInfo[$role]);
+            }
+            foreach ($this->_packageInfo[$role] as $i => $maintainer) {
+                if ($maintainer['user'] == $handle) {
+                    $found = $i;
+                    break;
+                }
+            }
+            if ($found !== false) {
+                unset($this->_packageInfo[$role][$found]);
+                if (!count($this->_packageInfo[$role]) && $role == 'lead') {
+                    $this->_isValid = 0;
+                }
+                if (!count($this->_packageInfo[$role])) {
+                    unset($this->_packageInfo[$role]);
+                    return true;
+                }
+                $this->_packageInfo[$role] =
+                    array_values($this->_packageInfo[$role]);
+                if (count($this->_packageInfo[$role]) == 1) {
+                    $this->_packageInfo[$role] = $this->_packageInfo[$role][0];
+                }
+                return true;
+            }
+            if (count($this->_packageInfo[$role]) == 1) {
+                $this->_packageInfo[$role] = $this->_packageInfo[$role][0];
+            }
+        }
+        return false;
+    }
+
+    function setReleaseVersion($version)
+    {
+        if (isset($this->_packageInfo['version']) &&
+              isset($this->_packageInfo['version']['release'])) {
+            unset($this->_packageInfo['version']['release']);
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $version, array(
+            'version' => array('stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'),
+            'release' => array('api')));
+        $this->_isValid = 0;
+    }
+
+    function setAPIVersion($version)
+    {
+        if (isset($this->_packageInfo['version']) &&
+              isset($this->_packageInfo['version']['api'])) {
+            unset($this->_packageInfo['version']['api']);
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $version, array(
+            'version' => array('stability', 'license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'),
+            'api' => array()));
+        $this->_isValid = 0;
+    }
+
+    /**
+     * snapshot|devel|alpha|beta|stable
+     */
+    function setReleaseStability($state)
+    {
+        if (isset($this->_packageInfo['stability']) &&
+              isset($this->_packageInfo['stability']['release'])) {
+            unset($this->_packageInfo['stability']['release']);
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $state, array(
+            'stability' => array('license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'),
+            'release' => array('api')));
+        $this->_isValid = 0;
+    }
+
+    /**
+     * @param devel|alpha|beta|stable
+     */
+    function setAPIStability($state)
+    {
+        if (isset($this->_packageInfo['stability']) &&
+              isset($this->_packageInfo['stability']['api'])) {
+            unset($this->_packageInfo['stability']['api']);
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $state, array(
+            'stability' => array('license', 'notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'),
+            'api' => array()));
+        $this->_isValid = 0;
+    }
+
+    function setLicense($license, $uri = false, $filesource = false)
+    {
+        if (!isset($this->_packageInfo['license'])) {
+            // ensure that the license tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('notes', 'contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), 0, 'license');
+        }
+        if ($uri || $filesource) {
+            $attribs = array();
+            if ($uri) {
+                $attribs['uri'] = $uri;
+            }
+            $uri = true; // for test below
+            if ($filesource) {
+                $attribs['filesource'] = $filesource;
+            }
+        }
+        $license = $uri ? array('attribs' => $attribs, '_content' => $license) : $license;
+        $this->_packageInfo['license'] = $license;
+        $this->_isValid = 0;
+    }
+
+    function setNotes($notes)
+    {
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['notes'])) {
+            // ensure that the notes tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('contents', 'compatible',
+                'dependencies', 'providesextension', 'usesrole', 'usestask', 'srcpackage', 'srcuri',
+                'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), $notes, 'notes');
+        }
+        $this->_packageInfo['notes'] = $notes;
+    }
+
+    /**
+     * This is only used at install-time, after all serialization
+     * is over.
+     * @param string file name
+     * @param string installed path
+     */
+    function setInstalledAs($file, $path)
+    {
+        if ($path) {
+            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
+        }
+        unset($this->_packageInfo['filelist'][$file]['installed_as']);
+    }
+
+    /**
+     * This is only used at install-time, after all serialization
+     * is over.
+     */
+    function installedFile($file, $atts)
+    {
+        if (isset($this->_packageInfo['filelist'][$file])) {
+            $this->_packageInfo['filelist'][$file] =
+                array_merge($this->_packageInfo['filelist'][$file], $atts['attribs']);
+        } else {
+            $this->_packageInfo['filelist'][$file] = $atts['attribs'];
+        }
+    }
+
+    /**
+     * Reset the listing of package contents
+     * @param string base installation dir for the whole package, if any
+     */
+    function clearContents($baseinstall = false)
+    {
+        $this->_filesValid = false;
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['contents'])) {
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('compatible',
+                    'dependencies', 'providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease',
+                    'extbinrelease', 'bundle', 'changelog'), array(), 'contents');
+        }
+        if ($this->getPackageType() != 'bundle') {
+            $this->_packageInfo['contents'] = 
+                array('dir' => array('attribs' => array('name' => '/')));
+            if ($baseinstall) {
+                $this->_packageInfo['contents']['dir']['attribs']['baseinstalldir'] = $baseinstall;
+            }
+        }
+    }
+
+    /**
+     * @param string relative path of the bundled package.
+     */
+    function addBundledPackage($path)
+    {
+        if ($this->getPackageType() != 'bundle') {
+            return false;
+        }
+        $this->_filesValid = false;
+        $this->_isValid = 0;
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $path, array(
+                'contents' => array('compatible', 'dependencies', 'providesextension',
+                'usesrole', 'usestask', 'srcpackage', 'srcuri', 'phprelease',
+                'extsrcrelease', 'extbinrelease', 'bundle', 'changelog'),
+                'bundledpackage' => array()));
+    }
+
+    /**
+     * @param string file name
+     * @param PEAR_Task_Common a read/write task
+     */
+    function addTaskToFile($filename, $task)
+    {
+        if (!method_exists($task, 'getXml')) {
+            return false;
+        }
+        if (!method_exists($task, 'getName')) {
+            return false;
+        }
+        if (!method_exists($task, 'validate')) {
+            return false;
+        }
+        if (!$task->validate()) {
+            return false;
+        }
+        if (!isset($this->_packageInfo['contents']['dir']['file'])) {
+            return false;
+        }
+        $this->getTasksNs(); // discover the tasks namespace if not done already
+        $files = $this->_packageInfo['contents']['dir']['file'];
+        if (!isset($files[0])) {
+            $files = array($files);
+            $ind = false;
+        } else {
+            $ind = true;
+        }
+        foreach ($files as $i => $file) {
+            if (isset($file['attribs'])) {
+                if ($file['attribs']['name'] == $filename) {
+                    if ($ind) {
+                        $t = isset($this->_packageInfo['contents']['dir']['file'][$i]
+                              ['attribs'][$this->_tasksNs .
+                              ':' . $task->getName()]) ?
+                              $this->_packageInfo['contents']['dir']['file'][$i]
+                              ['attribs'][$this->_tasksNs .
+                              ':' . $task->getName()] : false;
+                        if ($t && !isset($t[0])) {
+                            $this->_packageInfo['contents']['dir']['file'][$i]
+                                [$this->_tasksNs . ':' . $task->getName()] = array($t);
+                        }
+                        $this->_packageInfo['contents']['dir']['file'][$i][$this->_tasksNs .
+                            ':' . $task->getName()][] = $task->getXml();
+                    } else {
+                        $t = isset($this->_packageInfo['contents']['dir']['file']
+                              ['attribs'][$this->_tasksNs .
+                              ':' . $task->getName()]) ? $this->_packageInfo['contents']['dir']['file']
+                              ['attribs'][$this->_tasksNs .
+                              ':' . $task->getName()] : false;
+                        if ($t && !isset($t[0])) {
+                            $this->_packageInfo['contents']['dir']['file']
+                                [$this->_tasksNs . ':' . $task->getName()] = array($t);
+                        }
+                        $this->_packageInfo['contents']['dir']['file'][$this->_tasksNs .
+                            ':' . $task->getName()][] = $task->getXml();
+                    }
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param string path to the file
+     * @param string filename
+     * @param array extra attributes
+     */
+    function addFile($dir, $file, $attrs)
+    {
+        if ($this->getPackageType() == 'bundle') {
+            return false;
+        }
+        $this->_filesValid = false;
+        $this->_isValid = 0;
+        $dir = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'), $dir);
+        if ($dir == '/' || $dir == '') {
+            $dir = '';
+        } else {
+            $dir .= '/';
+        }
+        $attrs['name'] = $dir . $file;
+        if (!isset($this->_packageInfo['contents'])) {
+            // ensure that the contents tag is set up
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('compatible', 'dependencies', 'providesextension', 'usesrole', 'usestask',
+                'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease',
+                'extbinrelease', 'bundle', 'changelog'), array(), 'contents');
+        }
+        if (isset($this->_packageInfo['contents']['dir']['file'])) {
+            if (!isset($this->_packageInfo['contents']['dir']['file'][0])) {
+                $this->_packageInfo['contents']['dir']['file'] =
+                    array($this->_packageInfo['contents']['dir']['file']);
+            }
+            $this->_packageInfo['contents']['dir']['file'][]['attribs'] = $attrs;
+        } else {
+            $this->_packageInfo['contents']['dir']['file']['attribs'] = $attrs;
+        }
+    }
+
+    /**
+     * @param string Dependent package name
+     * @param string Dependent package's channel name
+     * @param string minimum version of specified package that this release is guaranteed to be
+     *               compatible with
+     * @param string maximum version of specified package that this release is guaranteed to be
+     *               compatible with
+     * @param string versions of specified package that this release is not compatible with
+     */
+    function addCompatiblePackage($name, $channel, $min, $max, $exclude = false)
+    {
+        $this->_isValid = 0;
+        $set = array(
+            'name' => $name,
+            'channel' => $channel,
+            'min' => $min,
+            'max' => $max,
+        );
+        if ($exclude) {
+            $set['exclude'] = $exclude;
+        }
+        $this->_isValid = 0;
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $set, array(
+                'compatible' => array('dependencies', 'providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog')
+            ));
+    }
+
+    /**
+     * Removes the <usesrole> tag entirely
+     */
+    function resetUsesrole()
+    {
+        if (isset($this->_packageInfo['usesrole'])) {
+            unset($this->_packageInfo['usesrole']);
+        }
+    }
+
+    /**
+     * @param string
+     * @param string package name or uri
+     * @param string channel name if non-uri
+     */
+    function addUsesrole($role, $packageOrUri, $channel = false) {
+        $set = array('role' => $role);
+        if ($channel) {
+            $set['package'] = $packageOrUri;
+            $set['channel'] = $channel;
+        } else {
+            $set['uri'] = $packageOrUri;
+        }
+        $this->_isValid = 0;
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $set, array(
+                'usesrole' => array('usestask', 'srcpackage', 'srcuri',
+                    'phprelease', 'extsrcrelease', 'extbinrelease', 'bundle', 'changelog')
+            ));
+    }
+
+    /**
+     * Removes the <usestask> tag entirely
+     */
+    function resetUsestask()
+    {
+        if (isset($this->_packageInfo['usestask'])) {
+            unset($this->_packageInfo['usestask']);
+        }
+    }
+
+
+    /**
+     * @param string
+     * @param string package name or uri
+     * @param string channel name if non-uri
+     */
+    function addUsestask($task, $packageOrUri, $channel = false) {
+        $set = array('task' => $task);
+        if ($channel) {
+            $set['package'] = $packageOrUri;
+            $set['channel'] = $channel;
+        } else {
+            $set['uri'] = $packageOrUri;
+        }
+        $this->_isValid = 0;
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $set, array(
+                'usestask' => array('srcpackage', 'srcuri',
+                    'phprelease', 'extsrcrelease', 'extbinrelease', 'bundle', 'changelog')
+            ));
+    }
+
+    /**
+     * Remove all compatible tags
+     */
+    function clearCompatible()
+    {
+        unset($this->_packageInfo['compatible']);
+    }
+
+    /**
+     * Reset dependencies prior to adding new ones
+     */
+    function clearDeps()
+    {
+        if (!isset($this->_packageInfo['dependencies'])) {
+            $this->_packageInfo = $this->_mergeTag($this->_packageInfo, array(),
+                array(
+                    'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                        'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                        'bundle', 'changelog')));
+        }
+        $this->_packageInfo['dependencies'] = array();
+    }
+
+    /**
+     * @param string minimum PHP version allowed
+     * @param string maximum PHP version allowed
+     * @param array $exclude incompatible PHP versions
+     */
+    function setPhpDep($min, $max = false, $exclude = false)
+    {
+        $this->_isValid = 0;
+        $dep =
+            array(
+                'min' => $min,
+            );
+        if ($max) {
+            $dep['max'] = $max;
+        }
+        if ($exclude) {
+            if (count($exclude) == 1) {
+                $exclude = $exclude[0];
+            }
+            $dep['exclude'] = $exclude;
+        }
+        if (isset($this->_packageInfo['dependencies']['required']['php'])) {
+            $this->_stack->push(__FUNCTION__, 'warning', array('dep' =>
+            $this->_packageInfo['dependencies']['required']['php']),
+                'warning: PHP dependency already exists, overwriting');
+            unset($this->_packageInfo['dependencies']['required']['php']);
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'required' => array('optional', 'group'),
+                'php' => array('pearinstaller', 'package', 'subpackage', 'extension', 'os', 'arch')
+            ));
+        return true;
+    }
+
+    /**
+     * @param string minimum allowed PEAR installer version
+     * @param string maximum allowed PEAR installer version
+     * @param string recommended PEAR installer version
+     * @param array incompatible version of the PEAR installer
+     */
+    function setPearinstallerDep($min, $max = false, $recommended = false, $exclude = false)
+    {
+        $this->_isValid = 0;
+        $dep =
+            array(
+                'min' => $min,
+            );
+        if ($max) {
+            $dep['max'] = $max;
+        }
+        if ($recommended) {
+            $dep['recommended'] = $recommended;
+        }
+        if ($exclude) {
+            if (count($exclude) == 1) {
+                $exclude = $exclude[0];
+            }
+            $dep['exclude'] = $exclude;
+        }
+        if (isset($this->_packageInfo['dependencies']['required']['pearinstaller'])) {
+            $this->_stack->push(__FUNCTION__, 'warning', array('dep' =>
+            $this->_packageInfo['dependencies']['required']['pearinstaller']),
+                'warning: PEAR Installer dependency already exists, overwriting');
+            unset($this->_packageInfo['dependencies']['required']['pearinstaller']);
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'required' => array('optional', 'group'),
+                'pearinstaller' => array('package', 'subpackage', 'extension', 'os', 'arch')
+            ));
+    }
+
+    /**
+     * Mark a package as conflicting with this package
+     * @param string package name
+     * @param string package channel
+     * @param string extension this package provides, if any
+     */
+    function addConflictingPackageDepWithChannel($name, $channel, $providesextension = false)
+    {
+        $this->_isValid = 0;
+        $dep =
+            array(
+                'name' => $name,
+                'channel' => $channel,
+                'conflicts' => '',
+            );
+        if ($providesextension) {
+            $dep['providesextension'] = $providesextension;
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'required' => array('optional', 'group'),
+                'package' => array('subpackage', 'extension', 'os', 'arch')
+            ));
+    }
+
+    /**
+     * Mark a package as conflicting with this package
+     * @param string package name
+     * @param string package channel
+     * @param string extension this package provides, if any
+     */
+    function addConflictingPackageDepWithUri($name, $uri, $providesextension = false)
+    {
+        $this->_isValid = 0;
+        $dep =
+            array(
+                'name' => $name,
+                'uri' => $uri,
+                'conflicts' => '',
+            );
+        if ($providesextension) {
+            $dep['providesextension'] = $providesextension;
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'required' => array('optional', 'group'),
+                'package' => array('subpackage', 'extension', 'os', 'arch')
+            ));
+    }
+
+    function addDependencyGroup($name, $hint)
+    {
+        $this->_isValid = 0;
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo,
+            array('attribs' => array('name' => $name, 'hint' => $hint)),
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'group' => array(),
+            ));
+    }
+
+    /**
+     * @param string package name
+     * @param string|false channel name, false if this is a uri
+     * @param string|false uri name, false if this is a channel
+     * @param string|false minimum version required
+     * @param string|false maximum version allowed
+     * @param string|false recommended installation version
+     * @param array|false versions to exclude from installation
+     * @param string extension this package provides, if any
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     * @return array
+     * @access private
+     */
+    function _constructDep($name, $channel, $uri, $min, $max, $recommended, $exclude,
+                           $providesextension = false, $nodefault = false)
+    {
+        $dep =
+            array(
+                'name' => $name,
+            );
+        if ($channel) {
+            $dep['channel'] = $channel;
+        } elseif ($uri) {
+            $dep['uri'] = $uri;
+        }
+        if ($min) {
+            $dep['min'] = $min;
+        }
+        if ($max) {
+            $dep['max'] = $max;
+        }
+        if ($recommended) {
+            $dep['recommended'] = $recommended;
+        }
+        if ($exclude) {
+            if (is_array($exclude) && count($exclude) == 1) {
+                $exclude = $exclude[0];
+            }
+            $dep['exclude'] = $exclude;
+        }
+        if ($nodefault) {
+            $dep['nodefault'] = '';
+        }
+        if ($providesextension) {
+            $dep['providesextension'] = $providesextension;
+        }
+        return $dep;
+    }
+
+    /**
+     * @param package|subpackage
+     * @param string group name
+     * @param string package name
+     * @param string package channel
+     * @param string minimum version
+     * @param string maximum version
+     * @param string recommended version
+     * @param array|false optional excluded versions
+     * @param string extension this package provides, if any
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     * @return bool false if the dependency group has not been initialized with
+     *              {@link addDependencyGroup()}, or a subpackage is added with
+     *              a providesextension
+     */
+    function addGroupPackageDepWithChannel($type, $groupname, $name, $channel, $min = false,
+                                      $max = false, $recommended = false, $exclude = false,
+                                      $providesextension = false, $nodefault = false)
+    {
+        if ($type == 'subpackage' && $providesextension) {
+            return false; // subpackages must be php packages
+        }
+        $dep = $this->_constructDep($name, $channel, false, $min, $max, $recommended, $exclude,
+            $providesextension, $nodefault);
+        return $this->_addGroupDependency($type, $dep, $groupname);
+    }
+
+    /**
+     * @param package|subpackage
+     * @param string group name
+     * @param string package name
+     * @param string package uri
+     * @param string extension this package provides, if any
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     * @return bool false if the dependency group has not been initialized with
+     *              {@link addDependencyGroup()}
+     */
+    function addGroupPackageDepWithURI($type, $groupname, $name, $uri, $providesextension = false,
+                                       $nodefault = false)
+    {
+        if ($type == 'subpackage' && $providesextension) {
+            return false; // subpackages must be php packages
+        }
+        $dep = $this->_constructDep($name, false, $uri, false, false, false, false,
+            $providesextension, $nodefault);
+        return $this->_addGroupDependency($type, $dep, $groupname);
+    }
+
+    /**
+     * @param string group name (must be pre-existing)
+     * @param string extension name
+     * @param string minimum version allowed
+     * @param string maximum version allowed
+     * @param string recommended version
+     * @param array incompatible versions
+     */
+    function addGroupExtensionDep($groupname, $name, $min = false, $max = false,
+                                         $recommended = false, $exclude = false)
+    {
+        $this->_isValid = 0;
+        $dep = $this->_constructDep($name, false, false, $min, $max, $recommended, $exclude);
+        return $this->_addGroupDependency('extension', $dep, $groupname);
+    }
+
+    /**
+     * @param package|subpackage|extension
+     * @param array dependency contents
+     * @param string name of the dependency group to add this to
+     * @return boolean
+     * @access private
+     */
+    function _addGroupDependency($type, $dep, $groupname)
+    {
+        $arr = array('subpackage', 'extension');
+        if ($type != 'package') {
+            array_shift($arr);
+        }
+        if ($type == 'extension') {
+            array_shift($arr);
+        }
+        if (!isset($this->_packageInfo['dependencies']['group'])) {
+            return false;
+        } else {
+            if (!isset($this->_packageInfo['dependencies']['group'][0])) {
+                if ($this->_packageInfo['dependencies']['group']['attribs']['name'] == $groupname) {
+                    $this->_packageInfo['dependencies']['group'] = $this->_mergeTag(
+                        $this->_packageInfo['dependencies']['group'], $dep,
+                        array(
+                            $type => $arr
+                        ));
+                    $this->_isValid = 0;
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                foreach ($this->_packageInfo['dependencies']['group'] as $i => $group) {
+                    if ($group['attribs']['name'] == $groupname) {
+                    $this->_packageInfo['dependencies']['group'][$i] = $this->_mergeTag(
+                        $this->_packageInfo['dependencies']['group'][$i], $dep,
+                        array(
+                            $type => $arr
+                        ));
+                        $this->_isValid = 0;
+                        return true;
+                    }
+                }
+                return false;
+            }
+        }
+    }
+
+    /**
+     * @param optional|required
+     * @param string package name
+     * @param string package channel
+     * @param string minimum version
+     * @param string maximum version
+     * @param string recommended version
+     * @param string extension this package provides, if any
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     * @param array|false optional excluded versions
+     */
+    function addPackageDepWithChannel($type, $name, $channel, $min = false, $max = false,
+                                      $recommended = false, $exclude = false,
+                                      $providesextension = false, $nodefault = false)
+    {
+        $this->_isValid = 0;
+        $arr = array('optional', 'group');
+        if ($type != 'required') {
+            array_shift($arr);
+        }
+        $dep = $this->_constructDep($name, $channel, false, $min, $max, $recommended, $exclude,
+            $providesextension, $nodefault);
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                $type => $arr,
+                'package' => array('subpackage', 'extension', 'os', 'arch')
+            ));
+    }
+
+    /**
+     * @param optional|required
+     * @param string name of the package
+     * @param string uri of the package
+     * @param string extension this package provides, if any
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     */
+    function addPackageDepWithUri($type, $name, $uri, $providesextension = false,
+                                  $nodefault = false)
+    {
+        $this->_isValid = 0;
+        $arr = array('optional', 'group');
+        if ($type != 'required') {
+            array_shift($arr);
+        }
+        $dep = $this->_constructDep($name, false, $uri, false, false, false, false,
+            $providesextension, $nodefault);
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                $type => $arr,
+                'package' => array('subpackage', 'extension', 'os', 'arch')
+            ));
+    }
+
+    /**
+     * @param optional|required optional, required
+     * @param string package name
+     * @param string package channel
+     * @param string minimum version
+     * @param string maximum version
+     * @param string recommended version
+     * @param array incompatible versions
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     */
+    function addSubpackageDepWithChannel($type, $name, $channel, $min = false, $max = false,
+                                         $recommended = false, $exclude = false,
+                                         $nodefault = false)
+    {
+        $this->_isValid = 0;
+        $arr = array('optional', 'group');
+        if ($type != 'required') {
+            array_shift($arr);
+        }
+        $dep = $this->_constructDep($name, $channel, false, $min, $max, $recommended, $exclude,
+            $nodefault);
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                $type => $arr,
+                'subpackage' => array('extension', 'os', 'arch')
+            ));
+    }
+
+    /**
+     * @param optional|required optional, required
+     * @param string package name
+     * @param string package uri for download
+     * @param bool if true, tells the installer to ignore the default optional dependency group
+     *             when installing this package
+     */
+    function addSubpackageDepWithUri($type, $name, $uri, $nodefault = false)
+    {
+        $this->_isValid = 0;
+        $arr = array('optional', 'group');
+        if ($type != 'required') {
+            array_shift($arr);
+        }
+        $dep = $this->_constructDep($name, false, $uri, false, false, false, false, $nodefault);
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                $type => $arr,
+                'subpackage' => array('extension', 'os', 'arch')
+            ));
+    }
+
+    /**
+     * @param optional|required optional, required
+     * @param string extension name
+     * @param string minimum version
+     * @param string maximum version
+     * @param string recommended version
+     * @param array incompatible versions
+     */
+    function addExtensionDep($type, $name, $min = false, $max = false, $recommended = false,
+                             $exclude = false)
+    {
+        $this->_isValid = 0;
+        $arr = array('optional', 'group');
+        if ($type != 'required') {
+            array_shift($arr);
+        }
+        $dep = $this->_constructDep($name, false, false, $min, $max, $recommended, $exclude);
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                $type => $arr,
+                'extension' => array('os', 'arch')
+            ));
+    }
+
+    /**
+     * @param string Operating system name
+     * @param boolean true if this package cannot be installed on this OS
+     */
+    function addOsDep($name, $conflicts = false)
+    {
+        $this->_isValid = 0;
+        $dep = array('name' => $name);
+        if ($conflicts) {
+            $dep['conflicts'] = '';
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'required' => array('optional', 'group'),
+                'os' => array('arch')
+            ));
+    }
+
+    /**
+     * @param string Architecture matching pattern
+     * @param boolean true if this package cannot be installed on this architecture
+     */
+    function addArchDep($pattern, $conflicts = false)
+    {
+        $this->_isValid = 0;
+        $dep = array('pattern' => $pattern);
+        if ($conflicts) {
+            $dep['conflicts'] = '';
+        }
+        $this->_packageInfo = $this->_mergeTag($this->_packageInfo, $dep,
+            array(
+                'dependencies' => array('providesextension', 'usesrole', 'usestask',
+                    'srcpackage', 'srcuri', 'phprelease', 'extsrcrelease', 'extbinrelease',
+                    'bundle', 'changelog'),
+                'required' => array('optional', 'group'),
+                'arch' => array()
+            ));
+    }
+
+    /**
+     * Set the kind of package, and erase all release tags
+     *
+     * - a php package is a PEAR-style package
+     * - an extbin package is a PECL-style extension binary
+     * - an extsrc package is a PECL-style source for a binary
+     * - a bundle package is a collection of other pre-packaged packages
+     * @param php|extbin|extsrc|bundle
+     * @return bool success
+     */
+    function setPackageType($type)
+    {
+        $this->_isValid = 0;
+        if (!in_array($type, array('php', 'extbin', 'extsrc', 'bundle'))) {
+            return false;
+        }
+        if ($type != 'bundle') {
+            $type .= 'release';
+        }
+        foreach (array('phprelease', 'extbinrelease', 'extsrcrelease', 'bundle') as $test) {
+            unset($this->_packageInfo[$test]);
+        }
+        if (!isset($this->_packageInfo[$type])) {
+            // ensure that the release tag is set up
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo, array('changelog'),
+                array(), $type);
+        }
+        $this->_packageInfo[$type] = array();
+        return true;
+    }
+
+    /**
+     * @return bool true if package type is set up
+     */
+    function addRelease()
+    {
+        if ($type = $this->getPackageType()) {
+            if ($type != 'bundle') {
+                $type .= 'release';
+            }
+            $this->_packageInfo = $this->_mergeTag($this->_packageInfo, array(),
+                array($type => array('changelog')));
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Get the current release tag in order to add to it
+     * @param bool returns only releases that have installcondition if true
+     * @return array|null
+     */
+    function &_getCurrentRelease($strict = true)
+    {
+        if ($p = $this->getPackageType()) {
+            if ($strict) {
+                if ($p == 'extsrc') {
+                    $a = null;
+                    return $a;
+                }
+            }
+            if ($p != 'bundle') {
+                $p .= 'release';
+            }
+            if (isset($this->_packageInfo[$p][0])) {
+                return $this->_packageInfo[$p][count($this->_packageInfo[$p]) - 1];
+            } else {
+                return $this->_packageInfo[$p];
+            }
+        } else {
+            $a = null;
+            return $a;
+        }
+    }
+
+    /**
+     * Add a file to the current release that should be installed under a different name
+     * @param string <contents> path to file
+     * @param string name the file should be installed as
+     */
+    function addInstallAs($path, $as)
+    {
+        $r = &$this->_getCurrentRelease();
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        $r = $this->_mergeTag($r, array('attribs' => array('name' => $path, 'as' => $as)),
+            array(
+                'filelist' => array(),
+                'install' => array('ignore')
+            ));
+    }
+
+    /**
+     * Add a file to the current release that should be ignored
+     * @param string <contents> path to file
+     * @return bool success of operation
+     */
+    function addIgnore($path)
+    {
+        $r = &$this->_getCurrentRelease();
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        $r = $this->_mergeTag($r, array('attribs' => array('name' => $path)),
+            array(
+                'filelist' => array(),
+                'ignore' => array()
+            ));
+    }
+
+    /**
+     * Add an extension binary package for this extension source code release
+     *
+     * Note that the package must be from the same channel as the extension source package
+     * @param string
+     */
+    function addBinarypackage($package)
+    {
+        if ($this->getPackageType() != 'extsrc') {
+            return false;
+        }
+        $r = &$this->_getCurrentRelease(false);
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        $r = $this->_mergeTag($r, $package,
+            array(
+                'binarypackage' => array('filelist'),
+            ));
+    }
+
+    /**
+     * Add a configureoption to an extension source package
+     * @param string
+     * @param string
+     * @param string
+     */
+    function addConfigureOption($name, $prompt, $default = null)
+    {
+        if ($this->getPackageType() != 'extsrc') {
+            return false;
+        }
+        $r = &$this->_getCurrentRelease(false);
+        if ($r === null) {
+            return false;
+        }
+        $opt = array('attribs' => array('name' => $name, 'prompt' => $prompt));
+        if ($default !== null) {
+            $opt['default'] = $default;
+        }
+        $this->_isValid = 0;
+        $r = $this->_mergeTag($r, $opt,
+            array(
+                'configureoption' => array('binarypackage', 'filelist'),
+            ));
+    }
+
+    /**
+     * Set an installation condition based on php version for the current release set
+     * @param string minimum version
+     * @param string maximum version
+     * @param false|array incompatible versions of PHP
+     */
+    function setPhpInstallCondition($min, $max, $exclude = false)
+    {
+        $r = &$this->_getCurrentRelease();
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        if (isset($r['installconditions']['php'])) {
+            unset($r['installconditions']['php']);
+        }
+        $dep = array('min' => $min, 'max' => $max);
+        if ($exclude) {
+            if (is_array($exclude) && count($exclude) == 1) {
+                $exclude = $exclude[0];
+            }
+            $dep['exclude'] = $exclude;
+        }
+        if ($this->getPackageType() == 'extsrc') {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('configureoption', 'binarypackage',
+                        'filelist'),
+                    'php' => array('extension', 'os', 'arch')
+                ));
+        } else {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('filelist'),
+                    'php' => array('extension', 'os', 'arch')
+                ));
+        }
+    }
+
+    /**
+     * @param optional|required optional, required
+     * @param string extension name
+     * @param string minimum version
+     * @param string maximum version
+     * @param string recommended version
+     * @param array incompatible versions
+     */
+    function addExtensionInstallCondition($name, $min = false, $max = false, $recommended = false,
+                                          $exclude = false)
+    {
+        $r = &$this->_getCurrentRelease();
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        $dep = $this->_constructDep($name, false, false, $min, $max, $recommended, $exclude);
+        if ($this->getPackageType() == 'extsrc') {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('configureoption', 'binarypackage',
+                        'filelist'),
+                    'extension' => array('os', 'arch')
+                ));
+        } else {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('filelist'),
+                    'extension' => array('os', 'arch')
+                ));
+        }
+    }
+
+    /**
+     * Set an installation condition based on operating system for the current release set
+     * @param string OS name
+     * @param bool whether this OS is incompatible with the current release
+     */
+    function setOsInstallCondition($name, $conflicts = false)
+    {
+        $r = &$this->_getCurrentRelease();
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        if (isset($r['installconditions']['os'])) {
+            unset($r['installconditions']['os']);
+        }
+        $dep = array('name' => $name);
+        if ($conflicts) {
+            $dep['conflicts'] = '';
+        }
+        if ($this->getPackageType() == 'extsrc') {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('configureoption', 'binarypackage',
+                        'filelist'),
+                    'os' => array('arch')
+                ));
+        } else {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('filelist'),
+                    'os' => array('arch')
+                ));
+        }
+    }
+
+    /**
+     * Set an installation condition based on architecture for the current release set
+     * @param string architecture pattern
+     * @param bool whether this arch is incompatible with the current release
+     */
+    function setArchInstallCondition($pattern, $conflicts = false)
+    {
+        $r = &$this->_getCurrentRelease();
+        if ($r === null) {
+            return false;
+        }
+        $this->_isValid = 0;
+        if (isset($r['installconditions']['arch'])) {
+            unset($r['installconditions']['arch']);
+        }
+        $dep = array('pattern' => $pattern);
+        if ($conflicts) {
+            $dep['conflicts'] = '';
+        }
+        if ($this->getPackageType() == 'extsrc') {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('configureoption', 'binarypackage',
+                        'filelist'),
+                    'arch' => array()
+                ));
+        } else {
+            $r = $this->_mergeTag($r, $dep,
+                array(
+                    'installconditions' => array('filelist'),
+                    'arch' => array()
+                ));
+        }
+    }
+
+    /**
+     * For extension binary releases, this is used to specify either the
+     * static URI to a source package, or the package name and channel of the extsrc
+     * package it is based on.
+     * @param string Package name, or full URI to source package (extsrc type)
+     */
+    function setSourcePackage($packageOrUri)
+    {
+        $this->_isValid = 0;
+        if (isset($this->_packageInfo['channel'])) {
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo, array('phprelease',
+                'extsrcrelease', 'extbinrelease', 'bundle', 'changelog'),
+                $packageOrUri, 'srcpackage');
+        } else {
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo, array('phprelease',
+                'extsrcrelease', 'extbinrelease', 'bundle', 'changelog'), $packageOrUri, 'srcuri');
+        }
+    }
+
+    /**
+     * Generate a valid change log entry from the current package.xml
+     * @param string|false
+     */
+    function generateChangeLogEntry($notes = false)
+    {
+        return array(
+            'version' => 
+                array(
+                    'release' => $this->getVersion('release'),
+                    'api' => $this->getVersion('api'),
+                    ),
+            'stability' =>
+                $this->getStability(),
+            'date' => $this->getDate(),
+            'license' => $this->getLicense(),
+            'notes' => $notes ? $notes : $this->getNotes()
+            );
+    }
+
+    /**
+     * @param string release version to set change log notes for
+     * @param array output of {@link generateChangeLogEntry()}
+     */
+    function setChangelogEntry($releaseversion, $contents)
+    {
+        if (!isset($this->_packageInfo['changelog'])) {
+            $this->_packageInfo['changelog']['release'] = $contents;
+            return;
+        }
+        if (!isset($this->_packageInfo['changelog']['release'][0])) {
+            if ($this->_packageInfo['changelog']['release']['version']['release'] == $releaseversion) {
+                $this->_packageInfo['changelog']['release'] = array(
+                    $this->_packageInfo['changelog']['release']);
+            } else {
+                $this->_packageInfo['changelog']['release'] = array(
+                    $this->_packageInfo['changelog']['release']);
+                return $this->_packageInfo['changelog']['release'][] = $contents;
+            }
+        }
+        foreach($this->_packageInfo['changelog']['release'] as $index => $changelog) {
+            if (isset($changelog['version']) &&
+                  strnatcasecmp($changelog['version']['release'], $releaseversion) == 0) {
+                $curlog = $index;
+            }
+        }
+        if (isset($curlog)) {
+            $this->_packageInfo['changelog']['release'][$curlog] = $contents;
+        } else {
+            $this->_packageInfo['changelog']['release'][] = $contents;
+        }
+    }
+
+    /**
+     * Remove the changelog entirely
+     */
+    function clearChangeLog()
+    {
+        unset($this->_packageInfo['changelog']);
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/Validator.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/Validator.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/Validator.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2/Validator.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1976 @@
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 5                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available through the world-wide-web at the following url:           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Author: Greg Beaver <cellog@php.net>                                 |
+// |                                                                      |
+// +----------------------------------------------------------------------+
+//
+// $Id: Validator.php,v 1.83 2006/01/06 04:47:37 cellog Exp $
+/**
+ * Private validation class used by PEAR_PackageFile_v2 - do not use directly, its
+ * sole purpose is to split up the PEAR/PackageFile/v2.php file to make it smaller
+ * @author Greg Beaver <cellog@php.net>
+ * @access private
+ */
+class PEAR_PackageFile_v2_Validator
+{
+    /**
+     * @var array
+     */
+    var $_packageInfo;
+    /**
+     * @var PEAR_PackageFile_v2
+     */
+    var $_pf;
+    /**
+     * @var PEAR_ErrorStack
+     */
+    var $_stack;
+    /**
+     * @var int
+     */
+    var $_isValid = 0;
+    /**
+     * @var int
+     */
+    var $_curState = 0;
+    /**
+     * @param PEAR_PackageFile_v2
+     * @param int
+     */
+    function validate(&$pf, $state = PEAR_VALIDATE_NORMAL)
+    {
+        $this->_pf = &$pf;
+        $this->_curState = $state;
+        $this->_packageInfo = $this->_pf->getArray();
+        $this->_isValid = $this->_pf->_isValid;
+        $this->_filesValid = $this->_pf->_filesValid;
+        $this->_stack = &$pf->_stack;
+        $this->_stack->getErrors(true);
+        if (($this->_isValid & $state) == $state) {
+            return true;
+        }
+        if (!isset($this->_packageInfo) || !is_array($this->_packageInfo)) {
+            return false;
+        }
+        if (!isset($this->_packageInfo['attribs']['version']) ||
+              $this->_packageInfo['attribs']['version'] != '2.0') {
+            $this->_noPackageVersion();
+        }
+        $structure =
+        array(
+            'name',
+            'channel|uri',
+            '*extends', // can't be multiple, but this works fine
+            'summary',
+            'description',
+            '+lead', // these all need content checks
+            '*developer',
+            '*contributor',
+            '*helper',
+            'date',
+            '*time',
+            'version',
+            'stability',
+            'license->?uri->?filesource',
+            'notes',
+            'contents', //special validation needed
+            '*compatible',
+            'dependencies', //special validation needed
+            '*usesrole',
+            '*usestask', // reserve these for 1.4.0a1 to implement
+                         // this will allow a package.xml to gracefully say it
+                         // needs a certain package installed in order to implement a role or task
+            '*providesextension',
+            '*srcpackage|*srcuri',
+            '+phprelease|+extsrcrelease|+extbinrelease|bundle', //special validation needed
+            '*changelog',
+        );
+        $test = $this->_packageInfo;
+        // ignore post-installation array fields
+        if (array_key_exists('filelist', $test)) {
+            unset($test['filelist']);
+        }
+        if (array_key_exists('_lastmodified', $test)) {
+            unset($test['_lastmodified']);
+        }
+        if (array_key_exists('#binarypackage', $test)) {
+            unset($test['#binarypackage']);
+        }
+        if (array_key_exists('old', $test)) {
+            unset($test['old']);
+        }
+        if (array_key_exists('_lastversion', $test)) {
+            unset($test['_lastversion']);
+        }
+        if (!$this->_stupidSchemaValidate($structure,
+                                          $test, '<package>')) {
+            return false;
+        }
+        if (empty($this->_packageInfo['name'])) {
+            $this->_tagCannotBeEmpty('name');
+        }
+        if (isset($this->_packageInfo['uri'])) {
+            $test = 'uri';
+        } else {
+            $test = 'channel';
+        }
+        if (empty($this->_packageInfo[$test])) {
+            $this->_tagCannotBeEmpty($test);
+        }
+        if (is_array($this->_packageInfo['license']) &&
+              (!isset($this->_packageInfo['license']['_content']) ||
+              empty($this->_packageInfo['license']['_content']))) {
+            $this->_tagCannotBeEmpty('license');
+        } elseif (empty($this->_packageInfo['license'])) {
+            $this->_tagCannotBeEmpty('license');
+        }
+        if (empty($this->_packageInfo['summary'])) {
+            $this->_tagCannotBeEmpty('summary');
+        }
+        if (empty($this->_packageInfo['description'])) {
+            $this->_tagCannotBeEmpty('description');
+        }
+        if (empty($this->_packageInfo['date'])) {
+            $this->_tagCannotBeEmpty('date');
+        }
+        if (empty($this->_packageInfo['notes'])) {
+            $this->_tagCannotBeEmpty('notes');
+        }
+        if (isset($this->_packageInfo['time']) && empty($this->_packageInfo['time'])) {
+            $this->_tagCannotBeEmpty('time');
+        }
+        if (isset($this->_packageInfo['dependencies'])) {
+            $this->_validateDependencies();
+        }
+        if (isset($this->_packageInfo['compatible'])) {
+            $this->_validateCompatible();
+        }
+        if (!isset($this->_packageInfo['bundle'])) {
+            if (!isset($this->_packageInfo['contents']['dir'])) {
+                $this->_filelistMustContainDir('contents');
+                return false;
+            }
+            if (isset($this->_packageInfo['contents']['file'])) {
+                $this->_filelistCannotContainFile('contents');
+                return false;
+            }
+        }
+        $this->_validateMaintainers();
+        $this->_validateStabilityVersion();
+        $fail = false;
+        if (array_key_exists('usesrole', $this->_packageInfo)) {
+            $roles = $this->_packageInfo['usesrole'];
+            if (!is_array($roles) || !isset($roles[0])) {
+                $roles = array($roles);
+            }
+            foreach ($roles as $role) {
+                if (!isset($role['role'])) {
+                    $this->_usesroletaskMustHaveRoleTask('usesrole', 'role');
+                    $fail = true;
+                } else {
+                    if (!isset($role['channel'])) {
+                        if (!isset($role['uri'])) {
+                            $this->_usesroletaskMustHaveChannelOrUri($role['role'], 'usesrole');
+                            $fail = true;
+                        }
+                    } elseif (!isset($role['package'])) {
+                        $this->_usesroletaskMustHavePackage($role['role'], 'usesrole');
+                        $fail = true;
+                    }
+                }
+            }
+        }
+        if (array_key_exists('usestask', $this->_packageInfo)) {
+            $roles = $this->_packageInfo['usestask'];
+            if (!is_array($roles) || !isset($roles[0])) {
+                $roles = array($roles);
+            }
+            foreach ($roles as $role) {
+                if (!isset($role['task'])) {
+                    $this->_usesroletaskMustHaveRoleTask('usestask', 'task');
+                    $fail = true;
+                } else {
+                    if (!isset($role['channel'])) {
+                        if (!isset($role['uri'])) {
+                            $this->_usesroletaskMustHaveChannelOrUri($role['task'], 'usestask');
+                            $fail = true;
+                        }
+                    } elseif (!isset($role['package'])) {
+                        $this->_usesroletaskMustHavePackage($role['task'], 'usestask');
+                        $fail = true;
+                    }
+                }
+            }
+        }
+        if ($fail) {
+            return false;
+        }
+        $this->_validateFilelist();
+        $this->_validateRelease();
+        if (!$this->_stack->hasErrors()) {
+            $chan = $this->_pf->_registry->getChannel($this->_pf->getChannel(), true);
+            if (!$chan) {
+                $this->_unknownChannel($this->_pf->getChannel());
+            } else {
+                $valpack = $chan->getValidationPackage();
+                // for channel validator packages, always use the default PEAR validator.
+                // otherwise, they can't be installed or packaged
+                $validator = $chan->getValidationObject($this->_pf->getPackage());
+                if (!$validator) {
+                    $this->_stack->push(__FUNCTION__, 'error',
+                        array_merge(
+                            array('channel' => $chan->getName(),
+                                  'package' => $this->_pf->getPackage()),
+                              $valpack
+                            ),
+                        'package "%channel%/%package%" cannot be properly validated without ' .
+                        'validation package "%channel%/%name%-%version%"');
+                    return $this->_isValid = 0;
+                }
+                $validator->setPackageFile($this->_pf);
+                $validator->validate($state);
+                $failures = $validator->getFailures();
+                foreach ($failures['errors'] as $error) {
+                    $this->_stack->push(__FUNCTION__, 'error', $error,
+                        'Channel validator error: field "%field%" - %reason%');
+                }
+                foreach ($failures['warnings'] as $warning) {
+                    $this->_stack->push(__FUNCTION__, 'warning', $warning,
+                        'Channel validator warning: field "%field%" - %reason%');
+                }
+            }
+        }
+        $this->_pf->_isValid = $this->_isValid = !$this->_stack->hasErrors('error');
+        if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$this->_filesValid) {
+            if ($this->_pf->getPackageType() == 'bundle') {
+                if ($this->_analyzeBundledPackages()) {
+                    $this->_filesValid = $this->_pf->_filesValid = true;
+                } else {
+                    $this->_pf->_isValid = $this->_isValid = 0;
+                }
+            } else {
+                if (!$this->_analyzePhpFiles()) {
+                    $this->_pf->_isValid = $this->_isValid = 0;
+                } else {
+                    $this->_filesValid = $this->_pf->_filesValid = true;
+                }
+            }
+        }
+        if ($this->_isValid) {
+            return $this->_pf->_isValid = $this->_isValid = $state;
+        }
+        return $this->_pf->_isValid = $this->_isValid = 0;
+    }
+
+    function _stupidSchemaValidate($structure, $xml, $root)
+    {
+        if (!is_array($xml)) {
+            $xml = array();
+        }
+        $keys = array_keys($xml);
+        reset($keys);
+        $key = current($keys);
+        while ($key == 'attribs' || $key == '_contents') {
+            $key = next($keys);
+        }
+        $unfoundtags = $optionaltags = array();
+        $ret = true;
+        $mismatch = false;
+        foreach ($structure as $struc) {
+            if ($key) {
+                $tag = $xml[$key];
+            }
+            $test = $this->_processStructure($struc);
+            if (isset($test['choices'])) {
+                $loose = true;
+                foreach ($test['choices'] as $choice) {
+                    if ($key == $choice['tag']) {
+                        $key = next($keys);
+                        while ($key == 'attribs' || $key == '_contents') {
+                            $key = next($keys);
+                        }
+                        $unfoundtags = $optionaltags = array();
+                        $mismatch = false;
+                        if ($key && $key != $choice['tag'] && isset($choice['multiple'])) {
+                            $unfoundtags[] = $choice['tag'];
+                            $optionaltags[] = $choice['tag'];
+                            if ($key) {
+                                $mismatch = true;
+                            }
+                        }
+                        $ret &= $this->_processAttribs($choice, $tag, $root);
+                        continue 2;
+                    } else {
+                        $unfoundtags[] = $choice['tag'];
+                        $mismatch = true;
+                    }
+                    if (!isset($choice['multiple']) || $choice['multiple'] != '*') {
+                        $loose = false;
+                    } else {
+                        $optionaltags[] = $choice['tag'];
+                    }
+                }
+                if (!$loose) {
+                    $this->_invalidTagOrder($unfoundtags, $key, $root);
+                    return false;
+                }
+            } else {
+                if ($key != $test['tag']) {
+                    if (isset($test['multiple']) && $test['multiple'] != '*') {
+                        $unfoundtags[] = $test['tag'];
+                        $this->_invalidTagOrder($unfoundtags, $key, $root);
+                        return false;
+                    } else {
+                        if ($key) {
+                            $mismatch = true;
+                        }
+                        $unfoundtags[] = $test['tag'];
+                        $optionaltags[] = $test['tag'];
+                    }
+                    if (!isset($test['multiple'])) {
+                        $this->_invalidTagOrder($unfoundtags, $key, $root);
+                        return false;
+                    }
+                    continue;
+                } else {
+                    $unfoundtags = $optionaltags = array();
+                    $mismatch = false;
+                }
+                $key = next($keys);
+                while ($key == 'attribs' || $key == '_contents') {
+                    $key = next($keys);
+                }
+                if ($key && $key != $test['tag'] && isset($test['multiple'])) {
+                    $unfoundtags[] = $test['tag'];
+                    $optionaltags[] = $test['tag'];
+                    $mismatch = true;
+                }
+                $ret &= $this->_processAttribs($test, $tag, $root);
+                continue;
+            }
+        }
+        if (!$mismatch && count($optionaltags)) {
+            // don't error out on any optional tags
+            $unfoundtags = array_diff($unfoundtags, $optionaltags);
+        }
+        if (count($unfoundtags)) {
+            $this->_invalidTagOrder($unfoundtags, $key, $root);
+        } elseif ($key) {
+            // unknown tags
+            $this->_invalidTagOrder('*no tags allowed here*', $key, $root);
+            while ($key = next($keys)) {
+                $this->_invalidTagOrder('*no tags allowed here*', $key, $root);
+            }
+        }
+        return $ret;
+    }
+
+    function _processAttribs($choice, $tag, $context)
+    {
+        if (isset($choice['attribs'])) {
+            if (!is_array($tag)) {
+                $tag = array($tag);
+            }
+            $tags = $tag;
+            if (!isset($tags[0])) {
+                $tags = array($tags);
+            }
+            $ret = true;
+            foreach ($tags as $i => $tag) {
+                if (!is_array($tag) || !isset($tag['attribs'])) {
+                    foreach ($choice['attribs'] as $attrib) {
+                        if ($attrib{0} != '?') {
+                            $ret &= $this->_tagHasNoAttribs($choice['tag'],
+                                $context);
+                            continue 2;
+                        }
+                    }
+                }
+                foreach ($choice['attribs'] as $attrib) {
+                    if ($attrib{0} != '?') {
+                        if (!isset($tag['attribs'][$attrib])) {
+                            $ret &= $this->_tagMissingAttribute($choice['tag'],
+                                $attrib, $context);
+                        }
+                    }
+                }
+            }
+            return $ret;
+        }
+        return true;
+    }
+
+    function _processStructure($key)
+    {
+        $ret = array();
+        if (count($pieces = explode('|', $key)) > 1) {
+            foreach ($pieces as $piece) {
+                $ret['choices'][] = $this->_processStructure($piece);
+            }
+            return $ret;
+        }
+        $multi = $key{0};
+        if ($multi == '+' || $multi == '*') {
+            $ret['multiple'] = $key{0};
+            $key = substr($key, 1);
+        }
+        if (count($attrs = explode('->', $key)) > 1) {
+            $ret['tag'] = array_shift($attrs);
+            $ret['attribs'] = $attrs;
+        } else {
+            $ret['tag'] = $key;
+        }
+        return $ret;
+    }
+
+    function _validateStabilityVersion()
+    {
+        $structure = array('release', 'api');
+        $a = $this->_stupidSchemaValidate($structure, $this->_packageInfo['version'], '<version>');
+        $a &= $this->_stupidSchemaValidate($structure, $this->_packageInfo['stability'], '<stability>');
+        if ($a) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $this->_packageInfo['version']['release'])) {
+                $this->_invalidVersion('release', $this->_packageInfo['version']['release']);
+            }
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $this->_packageInfo['version']['api'])) {
+                $this->_invalidVersion('api', $this->_packageInfo['version']['api']);
+            }
+            if (!in_array($this->_packageInfo['stability']['release'],
+                  array('snapshot', 'devel', 'alpha', 'beta', 'stable'))) {
+                $this->_invalidState('release', $this->_packageinfo['stability']['release']);
+            }
+            if (!in_array($this->_packageInfo['stability']['api'],
+                  array('devel', 'alpha', 'beta', 'stable'))) {
+                $this->_invalidState('api', $this->_packageinfo['stability']['api']);
+            }
+        }
+    }
+
+    function _validateMaintainers()
+    {
+        $structure =
+            array(
+                'name',
+                'user',
+                'email',
+                'active',
+            );
+        foreach (array('lead', 'developer', 'contributor', 'helper') as $type) {
+            if (!isset($this->_packageInfo[$type])) {
+                continue;
+            }
+            if (isset($this->_packageInfo[$type][0])) {
+                foreach ($this->_packageInfo[$type] as $lead) {
+                    $this->_stupidSchemaValidate($structure, $lead, '<' . $type . '>');
+                }
+            } else {
+                $this->_stupidSchemaValidate($structure, $this->_packageInfo[$type],
+                    '<' . $type . '>');
+            }
+        }
+    }
+
+    function _validatePhpDep($dep, $installcondition = false)
+    {
+        $structure = array(
+            'min',
+            '*max',
+            '*exclude',
+        );
+        $type = $installcondition ? '<installcondition><php>' : '<dependencies><required><php>';
+        $this->_stupidSchemaValidate($structure, $dep, $type);
+        if (isset($dep['min'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?(?:-[a-zA-Z0-9]+)?$/',
+                  $dep['min'])) {
+                $this->_invalidVersion($type . '<min>', $dep['min']);
+            }
+        }
+        if (isset($dep['max'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?(?:-[a-zA-Z0-9]+)?$/',
+                  $dep['max'])) {
+                $this->_invalidVersion($type . '<max>', $dep['max']);
+            }
+        }
+    }
+
+    function _validatePearinstallerDep($dep)
+    {
+        $structure = array(
+            'min',
+            '*max',
+            '*recommended',
+            '*exclude',
+        );
+        $this->_stupidSchemaValidate($structure, $dep, '<dependencies><required><pearinstaller>');
+        if (isset($dep['min'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['min'])) {
+                $this->_invalidVersion('<dependencies><required><pearinstaller><min>',
+                    $dep['min']);
+            }
+        }
+        if (isset($dep['max'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['max'])) {
+                $this->_invalidVersion('<dependencies><required><pearinstaller><max>',
+                    $dep['max']);
+            }
+        }
+        if (isset($dep['recommended'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['recommended'])) {
+                $this->_invalidVersion('<dependencies><required><pearinstaller><recommended>',
+                    $dep['recommended']);
+            }
+        }
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+            foreach ($dep['exclude'] as $exclude) {
+                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                      $exclude)) {
+                    $this->_invalidVersion('<dependencies><required><pearinstaller><exclude>',
+                        $exclude);
+                }
+            }
+        }
+    }
+
+    function _validatePackageDep($dep, $group, $type = '<package>')
+    {
+        if (isset($dep['uri'])) {
+            if (isset($dep['conflicts'])) {
+                $structure = array(
+                    'name',
+                    'uri',
+                    'conflicts',
+                    '*providesextension',
+                );
+            } else {
+                $structure = array(
+                    'name',
+                    'uri',
+                    '*providesextension',
+                );
+            }
+        } else {
+            if (isset($dep['conflicts'])) {
+                $structure = array(
+                    'name',
+                    'channel',
+                    '*min',
+                    '*max',
+                    '*exclude',
+                    'conflicts',
+                    '*providesextension',
+                );
+            } else {
+                $structure = array(
+                    'name',
+                    'channel',
+                    '*min',
+                    '*max',
+                    '*recommended',
+                    '*exclude',
+                    '*nodefault',
+                    '*providesextension',
+                );
+            }
+        }
+        if (isset($dep['name'])) {
+            $type .= '<name>' . $dep['name'] . '</name>';
+        }
+        $this->_stupidSchemaValidate($structure, $dep, '<dependencies>' . $group . $type);
+        if (isset($dep['uri']) && (isset($dep['min']) || isset($dep['max']) ||
+              isset($dep['recommended']) || isset($dep['exclude']))) {
+            $this->_uriDepsCannotHaveVersioning('<dependencies>' . $group . $type);
+        }
+        if (isset($dep['channel']) && strtolower($dep['channel']) == '__uri') {
+            $this->_DepchannelCannotBeUri('<dependencies>' . $group . $type);
+        }
+        if (isset($dep['min'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['min'])) {
+                $this->_invalidVersion('<dependencies>' . $group . $type . '<min>', $dep['min']);
+            }
+        }
+        if (isset($dep['max'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['max'])) {
+                $this->_invalidVersion('<dependencies>' . $group . $type . '<max>', $dep['max']);
+            }
+        }
+        if (isset($dep['recommended'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['recommended'])) {
+                $this->_invalidVersion('<dependencies>' . $group . $type . '<recommended>',
+                    $dep['recommended']);
+            }
+        }
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+            foreach ($dep['exclude'] as $exclude) {
+                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                      $exclude)) {
+                    $this->_invalidVersion('<dependencies>' . $group . $type . '<exclude>',
+                        $exclude);
+                }
+            }
+        }
+    }
+
+    function _validateSubpackageDep($dep, $group)
+    {
+        $this->_validatePackageDep($dep, $group, '<subpackage>');
+        if (isset($dep['providesextension'])) {
+            $this->_subpackageCannotProvideExtension(@$dep['name']);
+        }
+        if (isset($dep['conflicts'])) {
+            $this->_subpackagesCannotConflict(@$dep['name']);
+        }
+    }
+
+    function _validateExtensionDep($dep, $group = false, $installcondition = false)
+    {
+        if (isset($dep['conflicts'])) {
+            $structure = array(
+                'name',
+                '*min',
+                '*max',
+                '*exclude',
+                'conflicts',
+            );
+        } else {
+            $structure = array(
+                'name',
+                '*min',
+                '*max',
+                '*recommended',
+                '*exclude',
+            );
+        }
+        if ($installcondition) {
+            $type = '<installcondition><extension>';
+        } else {
+            $type = '<dependencies>' . $group . '<extension>';
+        }
+        if (isset($dep['name'])) {
+            $type .= '<name>' . $dep['name'] . '</name>';
+        }
+        $this->_stupidSchemaValidate($structure, $dep, $type);
+        if (isset($dep['min'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['min'])) {
+                $this->_invalidVersion(substr($type, 1) . '<min', $dep['min']);
+            }
+        }
+        if (isset($dep['max'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['max'])) {
+                $this->_invalidVersion(substr($type, 1) . '<max', $dep['max']);
+            }
+        }
+        if (isset($dep['recommended'])) {
+            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                  $dep['recommended'])) {
+                $this->_invalidVersion(substr($type, 1) . '<recommended', $dep['recommended']);
+            }
+        }
+        if (isset($dep['exclude'])) {
+            if (!is_array($dep['exclude'])) {
+                $dep['exclude'] = array($dep['exclude']);
+            }
+            foreach ($dep['exclude'] as $exclude) {
+                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                      $exclude)) {
+                    $this->_invalidVersion(substr($type, 1) . '<exclude', $exclude);
+                }
+            }
+        }
+    }
+
+    function _validateOsDep($dep, $installcondition = false)
+    {
+        $structure = array(
+            'name',
+            '*conflicts',
+        );
+        $type = $installcondition ? '<installcondition><os>' : '<dependencies><required><os>';
+        if ($this->_stupidSchemaValidate($structure, $dep, $type)) {
+            if ($dep['name'] == '*') {
+                if (array_key_exists('conflicts', $dep)) {
+                    $this->_cannotConflictWithAllOs($type);
+                }
+            }
+        }
+    }
+
+    function _validateArchDep($dep, $installcondition = false)
+    {
+        $structure = array(
+            'pattern',
+            '*conflicts',
+        );
+        $type = $installcondition ? '<installcondition><arch>' : '<dependencies><required><arch>';
+        $this->_stupidSchemaValidate($structure, $dep, $type);
+    }
+
+    function _validateInstallConditions($cond, $release)
+    {
+        $structure = array(
+            '*php',
+            '*extension',
+            '*os',
+            '*arch',
+        );
+        if (!$this->_stupidSchemaValidate($structure,
+              $cond, $release)) {
+            return false;
+        }
+        foreach (array('php', 'extension', 'os', 'arch') as $type) {
+            if (isset($cond[$type])) {
+                $iter = $cond[$type];
+                if (!is_array($iter) || !isset($iter[0])) {
+                    $iter = array($iter);
+                }
+                foreach ($iter as $package) {
+                    if ($type == 'extension') {
+                        $this->{"_validate{$type}Dep"}($package, false, true);
+                    } else {
+                        $this->{"_validate{$type}Dep"}($package, true);
+                    }
+                }
+            }
+        }
+    }
+
+    function _validateDependencies()
+    {
+        $structure = array(
+            'required',
+            '*optional',
+            '*group->name->hint'
+        );
+        if (!$this->_stupidSchemaValidate($structure,
+              $this->_packageInfo['dependencies'], '<dependencies>')) {
+            return false;
+        }
+        foreach (array('required', 'optional') as $simpledep) {
+            if (isset($this->_packageInfo['dependencies'][$simpledep])) {
+                if ($simpledep == 'optional') {
+                    $structure = array(
+                        '*package',
+                        '*subpackage',
+                        '*extension',
+                    );
+                } else {
+                    $structure = array(
+                        'php',
+                        'pearinstaller',
+                        '*package',
+                        '*subpackage',
+                        '*extension',
+                        '*os',
+                        '*arch',
+                    );
+                }
+                if ($this->_stupidSchemaValidate($structure,
+                      $this->_packageInfo['dependencies'][$simpledep],
+                      "<dependencies><$simpledep>")) {
+                    foreach (array('package', 'subpackage', 'extension') as $type) {
+                        if (isset($this->_packageInfo['dependencies'][$simpledep][$type])) {
+                            $iter = $this->_packageInfo['dependencies'][$simpledep][$type];
+                            if (!isset($iter[0])) {
+                                $iter = array($iter);
+                            }
+                            foreach ($iter as $package) {
+                                if ($type != 'extension') {
+                                    if (isset($package['uri'])) {
+                                        if (isset($package['channel'])) {
+                                            $this->_UrlOrChannel($type,
+                                                $package['name']);
+                                        }
+                                    } else {
+                                        if (!isset($package['channel'])) {
+                                            $this->_NoChannel($type, $package['name']);
+                                        }
+                                    }
+                                }
+                                $this->{"_validate{$type}Dep"}($package, "<$simpledep>");
+                            }
+                        }
+                    }
+                    if ($simpledep == 'optional') {
+                        continue;
+                    }
+                    foreach (array('php', 'pearinstaller', 'os', 'arch') as $type) {
+                        if (isset($this->_packageInfo['dependencies'][$simpledep][$type])) {
+                            $iter = $this->_packageInfo['dependencies'][$simpledep][$type];
+                            if (!isset($iter[0])) {
+                                $iter = array($iter);
+                            }
+                            foreach ($iter as $package) {
+                                $this->{"_validate{$type}Dep"}($package);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (isset($this->_packageInfo['dependencies']['group'])) {
+            $groups = $this->_packageInfo['dependencies']['group'];
+            if (!isset($groups[0])) {
+                $groups = array($groups);
+            }
+            $structure = array(
+                '*package',
+                '*subpackage',
+                '*extension',
+            );
+            foreach ($groups as $group) {
+                if ($this->_stupidSchemaValidate($structure, $group, '<group>')) {
+                    if (!PEAR_Validate::validGroupName($group['attribs']['name'])) {
+                        $this->_invalidDepGroupName($group['attribs']['name']);
+                    }
+                    foreach (array('package', 'subpackage', 'extension') as $type) {
+                        if (isset($group[$type])) {
+                            $iter = $group[$type];
+                            if (!isset($iter[0])) {
+                                $iter = array($iter);
+                            }
+                            foreach ($iter as $package) {
+                                if ($type != 'extension') {
+                                    if (isset($package['uri'])) {
+                                        if (isset($package['channel'])) {
+                                            $this->_UrlOrChannelGroup($type,
+                                                $package['name'],
+                                                $group['name']);
+                                        }
+                                    } else {
+                                        if (!isset($package['channel'])) {
+                                            $this->_NoChannelGroup($type,
+                                                $package['name'],
+                                                $group['name']);
+                                        }
+                                    }
+                                }
+                                $this->{"_validate{$type}Dep"}($package, '<group name="' .
+                                    $group['attribs']['name'] . '">');
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    function _validateCompatible()
+    {
+        $compat = $this->_packageInfo['compatible'];
+        if (!isset($compat[0])) {
+            $compat = array($compat);
+        }
+        $required = array('name', 'channel', 'min', 'max', '*exclude');
+        foreach ($compat as $package) {
+            $type = '<compatible>';
+            if (is_array($package) && array_key_exists('name', $package)) {
+                $type .= '<name>' . $package['name'] . '</name>';
+            }
+            $this->_stupidSchemaValidate($required, $package, $type);
+            if (is_array($package) && array_key_exists('min', $package)) {
+                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                      $package['min'])) {
+                    $this->_invalidVersion(substr($type, 1) . '<min', $package['min']);
+                }
+            }
+            if (is_array($package) && array_key_exists('max', $package)) {
+                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                      $package['max'])) {
+                    $this->_invalidVersion(substr($type, 1) . '<max', $package['max']);
+                }
+            }
+            if (is_array($package) && array_key_exists('exclude', $package)) {
+                if (!is_array($package['exclude'])) {
+                    $package['exclude'] = array($package['exclude']);
+                }
+                foreach ($package['exclude'] as $exclude) {
+                    if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',
+                          $exclude)) {
+                        $this->_invalidVersion(substr($type, 1) . '<exclude', $exclude);
+                    }
+                }
+            }
+        }
+    }
+
+    function _validateBundle($list)
+    {
+        if (!is_array($list) || !isset($list['bundledpackage'])) {
+            return $this->_NoBundledPackages();
+        }
+        if (!is_array($list['bundledpackage']) || !isset($list['bundledpackage'][0])) {
+            return $this->_AtLeast2BundledPackages();
+        }
+        foreach ($list['bundledpackage'] as $package) {
+            if (!is_string($package)) {
+                $this->_bundledPackagesMustBeFilename();
+            }
+        }
+    }
+
+    function _validateFilelist($list = false, $allowignore = false, $dirs = '')
+    {
+        $iscontents = false;
+        if (!$list) {
+            $iscontents = true;
+            $list = $this->_packageInfo['contents'];
+            if (isset($this->_packageInfo['bundle'])) {
+                return $this->_validateBundle($list);
+            }
+        }
+        if ($allowignore) {
+            $struc = array(
+                '*install->name->as',
+                '*ignore->name'
+            );
+        } else {
+            $struc = array(
+                '*dir->name->?baseinstalldir',
+                '*file->name->role->?baseinstalldir->?md5sum'
+            );
+            if (isset($list['dir']) && isset($list['file'])) {
+                // stave off validation errors without requiring a set order.
+                $_old = $list;
+                if (isset($list['attribs'])) {
+                    $list = array('attribs' => $_old['attribs']);
+                }
+                $list['dir'] = $_old['dir'];
+                $list['file'] = $_old['file'];
+            }
+        }
+        if (!isset($list['attribs']) || !isset($list['attribs']['name'])) {
+            $unknown = $allowignore ? '<filelist>' : '<dir name="*unknown*">';
+            $dirname = $iscontents ? '<contents>' : $unknown;
+        } else {
+            $dirname = '<dir name="' . $list['attribs']['name'] . '">';
+        }
+        $res = $this->_stupidSchemaValidate($struc, $list, $dirname);
+        if ($allowignore && $res) {
+            $this->_pf->getFilelist();
+            $fcontents = $this->_pf->getContents();
+            $filelist = array();
+            if (!isset($fcontents['dir']['file'][0])) {
+                $fcontents['dir']['file'] = array($fcontents['dir']['file']);
+            }
+            foreach ($fcontents['dir']['file'] as $file) {
+                $filelist[$file['attribs']['name']] = true;
+            }
+            if (isset($list['install'])) {
+                if (!isset($list['install'][0])) {
+                    $list['install'] = array($list['install']);
+                }
+                foreach ($list['install'] as $file) {
+                    if (!isset($filelist[$file['attribs']['name']])) {
+                        $this->_notInContents($file['attribs']['name'], 'install');
+                    }
+                }
+            }
+            if (isset($list['ignore'])) {
+                if (!isset($list['ignore'][0])) {
+                    $list['ignore'] = array($list['ignore']);
+                }
+                foreach ($list['ignore'] as $file) {
+                    if (!isset($filelist[$file['attribs']['name']])) {
+                        $this->_notInContents($file['attribs']['name'], 'ignore');
+                    }
+                }
+            }
+        }
+        if (!$allowignore && isset($list['file'])) {
+            if (!isset($list['file'][0])) {
+                // single file
+                $list['file'] = array($list['file']);
+            }
+            foreach ($list['file'] as $i => $file)
+            {
+                if (isset($file['attribs']) && isset($file['attribs']['name']) &&
+                      $file['attribs']['name']{0} == '.' &&
+                        $file['attribs']['name']{1} == '/') {
+                    // name is something like "./doc/whatever.txt"
+                    $this->_invalidFileName($file['attribs']['name']);
+                }
+                if (isset($file['attribs']) && isset($file['attribs']['role'])) {
+                    if (!$this->_validateRole($file['attribs']['role'])) {
+                        if (isset($this->_packageInfo['usesrole'])) {
+                            $roles = $this->_packageInfo['usesrole'];
+                            if (!isset($roles[0])) {
+                                $roles = array($roles);
+                            }
+                            foreach ($roles as $role) {
+                                if ($role['role'] = $file['attribs']['role']) {
+                                    $msg = 'This package contains role "%role%" and requires ' .
+                                        'package "%package%" to be used';
+                                    if (isset($role['uri'])) {
+                                        $params = array('role' => $role['role'],
+                                            'package' => $role['uri']);
+                                    } else {
+                                        $params = array('role' => $role['role'],
+                                            'package' => $this->_pf->_registry->
+                                            parsedPackageNameToString(array('package' =>
+                                                $role['package'], 'channel' => $role['channel']),
+                                                true));
+                                    }
+                                    $this->_stack->push('_mustInstallRole', 'error', $params, $msg);
+                                }
+                            }
+                        }
+                        $this->_invalidFileRole($file['attribs']['name'],
+                            $dirname, $file['attribs']['role']);
+                    }
+                }
+                if (!isset($file['attribs'])) {
+                    continue;
+                }
+                $save = $file['attribs'];
+                if ($dirs) {
+                    $save['name'] = $dirs . '/' . $save['name'];
+                }
+                unset($file['attribs']);
+                if (count($file) && $this->_curState != PEAR_VALIDATE_DOWNLOADING) { // has tasks
+                    foreach ($file as $task => $value) {
+                        if ($tagClass = $this->_pf->getTask($task)) {
+                            if (!is_array($value) || !isset($value[0])) {
+                                $value = array($value);
+                            }
+                            foreach ($value as $v) {
+                                $ret = call_user_func(array($tagClass, 'validateXml'),
+                                    $this->_pf, $v, $this->_pf->_config, $save);
+                                if (is_array($ret)) {
+                                    $this->_invalidTask($task, $ret, @$save['name']);
+                                }
+                            }
+                        } else {
+                            if (isset($this->_packageInfo['usestask'])) {
+                                $roles = $this->_packageInfo['usestask'];
+                                if (!isset($roles[0])) {
+                                    $roles = array($roles);
+                                }
+                                foreach ($roles as $role) {
+                                    if ($role['task'] = $task) {
+                                        $msg = 'This package contains task "%task%" and requires ' .
+                                            'package "%package%" to be used';
+                                        if (isset($role['uri'])) {
+                                            $params = array('task' => $role['task'],
+                                                'package' => $role['uri']);
+                                        } else {
+                                            $params = array('task' => $role['task'],
+                                                'package' => $this->_pf->_registry->
+                                                parsedPackageNameToString(array('package' =>
+                                                    $role['package'], 'channel' => $role['channel']),
+                                                    true));
+                                        }
+                                        $this->_stack->push('_mustInstallTask', 'error',
+                                            $params, $msg);
+                                    }
+                                }
+                            }
+                            $this->_unknownTask($task, $save['name']);
+                        }
+                    }
+                }
+            }
+        }
+        if (isset($list['ignore'])) {
+            if (!$allowignore) {
+                $this->_ignoreNotAllowed('ignore');
+            }
+        }
+        if (isset($list['install'])) {
+            if (!$allowignore) {
+                $this->_ignoreNotAllowed('install');
+            }
+        }
+        if (isset($list['file'])) {
+            if ($allowignore) {
+                $this->_fileNotAllowed('file');
+            }
+        }
+        if (isset($list['dir'])) {
+            if ($allowignore) {
+                $this->_fileNotAllowed('dir');
+            } else {
+                if (!isset($list['dir'][0])) {
+                    $list['dir'] = array($list['dir']);
+                }
+                foreach ($list['dir'] as $dir) {
+                    if (isset($dir['attribs']) && isset($dir['attribs']['name'])) {
+                        if ($dir['attribs']['name'] == '/' ||
+                              !isset($this->_packageInfo['contents']['dir']['dir'])) {
+                            // always use nothing if the filelist has already been flattened
+                            $newdirs = '';
+                        } elseif ($dirs == '') {
+                            $newdirs = $dir['attribs']['name'];
+                        } else {
+                            $newdirs = $dirs . '/' . $dir['attribs']['name'];
+                        }
+                    } else {
+                        $newdirs = $dirs;
+                    }
+                    $this->_validateFilelist($dir, $allowignore, $newdirs);
+                }
+            }
+        }
+    }
+
+    function _validateRelease()
+    {
+        if (isset($this->_packageInfo['phprelease'])) {
+            $release = 'phprelease';
+            if (isset($this->_packageInfo['providesextension'])) {
+                $this->_cannotProvideExtension($release);
+            }
+            if (isset($this->_packageInfo['srcpackage']) || isset($this->_packageInfo['srcuri'])) {
+                $this->_cannotHaveSrcpackage($release);
+            }
+            $releases = $this->_packageInfo['phprelease'];
+            if (!is_array($releases)) {
+                return true;
+            }
+            if (!isset($releases[0])) {
+                $releases = array($releases);
+            }
+            foreach ($releases as $rel) {
+                $this->_stupidSchemaValidate(array(
+                    '*installconditions',
+                    '*filelist',
+                ), $rel, '<phprelease>');
+            }
+        }
+        if (isset($this->_packageInfo['extsrcrelease'])) {
+            $release = 'extsrcrelease';
+            if (!isset($this->_packageInfo['providesextension'])) {
+                $this->_mustProvideExtension($release);
+            }
+            if (isset($this->_packageInfo['srcpackage']) || isset($this->_packageInfo['srcuri'])) {
+                $this->_cannotHaveSrcpackage($release);
+            }
+            $releases = $this->_packageInfo['extsrcrelease'];
+            if (!is_array($releases)) {
+                return true;
+            }
+            if (!isset($releases[0])) {
+                $releases = array($releases);
+            }
+            foreach ($releases as $rel) {
+                $this->_stupidSchemaValidate(array(
+                    '*installconditions',
+                    '*configureoption->name->prompt->?default',
+                    '*binarypackage',
+                    '*filelist',
+                ), $rel, '<extsrcrelease>');
+                if (isset($rel['binarypackage'])) {
+                    if (!is_array($rel['binarypackage']) || !isset($rel['binarypackage'][0])) {
+                        $rel['binarypackage'] = array($rel['binarypackage']);
+                    }
+                    foreach ($rel['binarypackage'] as $bin) {
+                        if (!is_string($bin)) {
+                            $this->_binaryPackageMustBePackagename();
+                        }
+                    }
+                }
+            }
+        }
+        if (isset($this->_packageInfo['extbinrelease'])) {
+            $release = 'extbinrelease';
+            if (!isset($this->_packageInfo['providesextension'])) {
+                $this->_mustProvideExtension($release);
+            }
+            if (isset($this->_packageInfo['channel']) &&
+                  !isset($this->_packageInfo['srcpackage'])) {
+                $this->_mustSrcPackage($release);
+            }
+            if (isset($this->_packageInfo['uri']) && !isset($this->_packageInfo['srcuri'])) {
+                $this->_mustSrcuri($release);
+            }
+            $releases = $this->_packageInfo['extbinrelease'];
+            if (!is_array($releases)) {
+                return true;
+            }
+            if (!isset($releases[0])) {
+                $releases = array($releases);
+            }
+            foreach ($releases as $rel) {
+                $this->_stupidSchemaValidate(array(
+                    '*installconditions',
+                    '*filelist',
+                ), $rel, '<extbinrelease>');
+            }
+        }
+        if (isset($this->_packageInfo['bundle'])) {
+            $release = 'bundle';
+            if (isset($this->_packageInfo['providesextension'])) {
+                $this->_cannotProvideExtension($release);
+            }
+            if (isset($this->_packageInfo['srcpackage']) || isset($this->_packageInfo['srcuri'])) {
+                $this->_cannotHaveSrcpackage($release);
+            }
+            $releases = $this->_packageInfo['bundle'];
+            if (!is_array($releases) || !isset($releases[0])) {
+                $releases = array($releases);
+            }
+            foreach ($releases as $rel) {
+                $this->_stupidSchemaValidate(array(
+                    '*installconditions',
+                    '*filelist',
+                ), $rel, '<bundle>');
+            }
+        }
+        foreach ($releases as $rel) {
+            if (is_array($rel) && array_key_exists('installconditions', $rel)) {
+                $this->_validateInstallConditions($rel['installconditions'],
+                    "<$release><installconditions>");
+            }
+            if (is_array($rel) && array_key_exists('filelist', $rel)) {
+                if ($rel['filelist']) {
+                    
+                    $this->_validateFilelist($rel['filelist'], true);
+                }
+            }
+        }
+    }
+
+    /**
+     * This is here to allow role extension through plugins
+     * @param string
+     */
+    function _validateRole($role)
+    {
+        return in_array($role, PEAR_Installer_Role::getValidRoles($this->_pf->getPackageType()));
+    }
+
+    function _invalidTagOrder($oktags, $actual, $root)
+    {
+        $this->_stack->push(__FUNCTION__, 'error',
+            array('oktags' => $oktags, 'actual' => $actual, 'root' => $root),
+            'Invalid tag order in %root%, found <%actual%> expected one of "%oktags%"');
+    }
+
+    function _ignoreNotAllowed($type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),
+            '<%type%> is not allowed inside global <contents>, only inside ' .
+            '<phprelease>/<extbinrelease>, use <dir> and <file> only');
+    }
+
+    function _fileNotAllowed($type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),
+            '<%type%> is not allowed inside release <filelist>, only inside ' .
+            '<contents>, use <ignore> and <install> only');
+    }
+
+    function _tagMissingAttribute($tag, $attr, $context)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $tag,
+            'attribute' => $attr, 'context' => $context),
+            'tag <%tag%> in context "%context%" has no attribute "%attribute%"');
+    }
+
+    function _tagHasNoAttribs($tag, $context)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $tag,
+            'context' => $context),
+            'tag <%tag%> has no attributes in context "%context%"');
+    }
+
+    function _invalidInternalStructure()
+    {
+        $this->_stack->push(__FUNCTION__, 'exception', array(),
+            'internal array was not generated by compatible parser, or extreme parser error, cannot continue');
+    }
+
+    function _invalidFileRole($file, $dir, $role)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(
+            'file' => $file, 'dir' => $dir, 'role' => $role,
+            'roles' => PEAR_Installer_Role::getValidRoles($this->_pf->getPackageType())),
+            'File "%file%" in directory "%dir%" has invalid role "%role%", should be one of %roles%');
+    }
+
+    function _invalidFileName($file, $dir)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(
+            'file' => $file),
+            'File "%file%" cannot begin with "."');
+    }
+
+    function _filelistCannotContainFile($filelist)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $filelist),
+            '<%tag%> can only contain <dir>, contains <file>.  Use ' .
+            '<dir name="/"> as the first dir element');
+    }
+
+    function _filelistMustContainDir($filelist)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $filelist),
+            '<%tag%> must contain <dir>.  Use <dir name="/"> as the ' .
+            'first dir element');
+    }
+
+    function _tagCannotBeEmpty($tag)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $tag),
+            '<%tag%> cannot be empty (<%tag%/>)');
+    }
+
+    function _UrlOrChannel($type, $name)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type,
+            'name' => $name),
+            'Required dependency <%type%> "%name%" can have either url OR ' .
+            'channel attributes, and not both');
+    }
+
+    function _NoChannel($type, $name)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type,
+            'name' => $name),
+            'Required dependency <%type%> "%name%" must have either url OR ' .
+            'channel attributes');
+    }
+
+    function _UrlOrChannelGroup($type, $name, $group)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type,
+            'name' => $name, 'group' => $group),
+            'Group "%group%" dependency <%type%> "%name%" can have either url OR ' .
+            'channel attributes, and not both');
+    }
+
+    function _NoChannelGroup($type, $name, $group)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type,
+            'name' => $name, 'group' => $group),
+            'Group "%group%" dependency <%type%> "%name%" must have either url OR ' .
+            'channel attributes');
+    }
+
+    function _unknownChannel($channel)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('channel' => $channel),
+            'Unknown channel "%channel%"');
+    }
+
+    function _noPackageVersion()
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(),
+            'package.xml <package> tag has no version attribute, or version is not 2.0');
+    }
+
+    function _NoBundledPackages()
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(),
+            'No <bundledpackage> tag was found in <contents>, required for bundle packages');
+    }
+
+    function _AtLeast2BundledPackages()
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(),
+            'At least 2 packages must be bundled in a bundle package');
+    }
+
+    function _ChannelOrUri($name)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('name' => $name),
+            'Bundled package "%name%" can have either a uri or a channel, not both');
+    }
+
+    function _noChildTag($child, $tag)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('child' => $child, 'tag' => $tag),
+            'Tag <%tag%> is missing child tag <%child%>');
+    }
+
+    function _invalidVersion($type, $value)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type, 'value' => $value),
+            'Version type <%type%> is not a valid version (%value%)');
+    }
+
+    function _invalidState($type, $value)
+    {
+        $states = array('stable', 'beta', 'alpha', 'devel');
+        if ($type != 'api') {
+            $states[] = 'snapshot';
+        }
+        if (strtolower($value) == 'rc') {
+            $this->_stack->push(__FUNCTION__, 'error',
+                array('version' => $this->_packageInfo['version']['release']),
+                'RC is not a state, it is a version postfix, try %version%RC1, stability beta');
+        }
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type, 'value' => $value,
+            'types' => $states),
+            'Stability type <%type%> is not a valid stability (%value%), must be one of ' .
+            '%types%');
+    }
+
+    function _invalidTask($task, $ret, $file)
+    {
+        switch ($ret[0]) {
+            case PEAR_TASK_ERROR_MISSING_ATTRIB :
+                $info = array('attrib' => $ret[1], 'task' => $task, 'file' => $file);
+                $msg = 'task <%task%> is missing attribute "%attrib%" in file %file%';
+            break;
+            case PEAR_TASK_ERROR_NOATTRIBS :
+                $info = array('task' => $task, 'file' => $file);
+                $msg = 'task <%task%> has no attributes in file %file%';
+            break;
+            case PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE :
+                $info = array('attrib' => $ret[1], 'values' => $ret[3],
+                    'was' => $ret[2], 'task' => $task, 'file' => $file);
+                $msg = 'task <%task%> attribute "%attrib%" has the wrong value "%was%" '.
+                    'in file %file%, expecting one of "%values%"';
+            break;
+            case PEAR_TASK_ERROR_INVALID :
+                $info = array('reason' => $ret[1], 'task' => $task, 'file' => $file);
+                $msg = 'task <%task%> in file %file% is invalid because of "%reason%"';
+            break;
+        }
+        $this->_stack->push(__FUNCTION__, 'error', $info, $msg);
+    }
+
+    function _unknownTask($task, $file)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('task' => $task, 'file' => $file),
+            'Unknown task "%task%" passed in file <file name="%file%">');
+    }
+
+    function _subpackageCannotProvideExtension($name)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('name' => $name),
+            'Subpackage dependency "%name%" cannot use <providesextension>, ' .
+            'only package dependencies can use this tag');
+    }
+
+    function _subpackagesCannotConflict($name)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('name' => $name),
+            'Subpackage dependency "%name%" cannot use <conflicts/>, ' .
+            'only package dependencies can use this tag');
+    }
+
+    function _cannotProvideExtension($release)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('release' => $release),
+            '<%release%> packages cannot use <providesextension>, only extbinrelease and extsrcrelease can provide a PHP extension');
+    }
+
+    function _mustProvideExtension($release)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('release' => $release),
+            '<%release%> packages must use <providesextension> to indicate which PHP extension is provided');
+    }
+
+    function _cannotHaveSrcpackage($release)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('release' => $release),
+            '<%release%> packages cannot specify a source code package, only extension binaries may use the <srcpackage> tag');
+    }
+
+    function _mustSrcPackage($release)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('release' => $release),
+            '<extbinrelease> packages must specify a source code package with <srcpackage>');
+    }
+
+    function _mustSrcuri($release)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('release' => $release),
+            '<extbinrelease> packages must specify a source code package with <srcuri>');
+    }
+
+    function _uriDepsCannotHaveVersioning($type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),
+            '%type%: dependencies with a <uri> tag cannot have any versioning information');
+    }
+
+    function _conflictingDepsCannotHaveVersioning($type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),
+            '%type%: conflicting dependencies cannot have versioning info, use <exclude> to ' .
+            'exclude specific versions of a dependency');
+    }
+
+    function _DepchannelCannotBeUri($type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),
+            '%type%: channel cannot be __uri, this is a pseudo-channel reserved for uri ' .
+            'dependencies only');
+    }
+
+    function _bundledPackagesMustBeFilename()
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(),
+            '<bundledpackage> tags must contain only the filename of a package release ' .
+            'in the bundle');
+    }
+
+    function _binaryPackageMustBePackagename()
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(),
+            '<binarypackage> tags must contain the name of a package that is ' .
+            'a compiled version of this extsrc package');
+    }
+
+    function _fileNotFound($file)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
+            'File "%file%" in package.xml does not exist');
+    }
+
+    function _notInContents($file, $tag)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('file' => $file, 'tag' => $tag),
+            '<%tag% name="%file%"> is invalid, file is not in <contents>');
+    }
+
+    function _cannotValidateNoPathSet()
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array(),
+            'Cannot validate files, no path to package file is set (use setPackageFile())');
+    }
+
+    function _usesroletaskMustHaveChannelOrUri($role, $tag)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('role' => $role, 'tag' => $tag),
+            '<%tag%> must contain either <uri>, or <channel> and <package>');
+    }
+
+    function _usesroletaskMustHavePackage($role, $tag)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('role' => $role, 'tag' => $tag),
+            '<%tag%> must contain <package>');
+    }
+
+    function _usesroletaskMustHaveRoleTask($tag, $type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $tag, 'type' => $type),
+            '<%tag%> must contain <%type%> defining the %type% to be used');
+    }
+
+    function _cannotConflictWithAllOs($type)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('tag' => $tag),
+            '%tag% cannot conflict with all OSes');
+    }
+
+    function _invalidDepGroupName($name)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('group' => $name),
+            'Invalid dependency group name "%name%"');
+    }
+
+    function _analyzeBundledPackages()
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        if (!$this->_pf->getPackageType() == 'bundle') {
+            return false;
+        }
+        if (!isset($this->_pf->_packageFile)) {
+            return false;
+        }
+        $dir_prefix = dirname($this->_pf->_packageFile);
+        $log = isset($this->_pf->_logger) ? array(&$this->_pf->_logger, 'log') :
+            array('PEAR_Common', 'log');
+        $info = $this->_pf->getContents();
+        $info = $info['bundledpackage'];
+        if (!is_array($info)) {
+            $info = array($info);
+        }
+        $pkg = &new PEAR_PackageFile($this->_pf->_config);
+        foreach ($info as $package) {
+            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $package)) {
+                $this->_fileNotFound($dir_prefix . DIRECTORY_SEPARATOR . $package);
+                $this->_isValid = 0;
+                continue;
+            }
+            call_user_func_array($log, array(1, "Analyzing bundled package $package"));
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $ret = $pkg->fromAnyFile($dir_prefix . DIRECTORY_SEPARATOR . $package,
+                PEAR_VALIDATE_NORMAL);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($ret)) {
+                call_user_func_array($log, array(0, "ERROR: package $package is not a valid " .
+                    'package'));
+                $inf = $ret->getUserInfo();
+                if (is_array($inf)) {
+                    foreach ($inf as $err) {
+                        call_user_func_array($log, array(1, $err['message']));
+                    }
+                }
+                return false;
+            }
+        }
+        return true;
+    }
+
+    function _analyzePhpFiles()
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        if (!isset($this->_pf->_packageFile)) {
+            $this->_cannotValidateNoPathSet();
+            return false;
+        }
+        $dir_prefix = dirname($this->_pf->_packageFile);
+        $common = new PEAR_Common;
+        $log = isset($this->_pf->_logger) ? array(&$this->_pf->_logger, 'log') :
+            array(&$common, 'log');
+        $info = $this->_pf->getContents();
+        $info = $info['dir']['file'];
+        if (isset($info['attribs'])) {
+            $info = array($info);
+        }
+        $provides = array();
+        foreach ($info as $fa) {
+            $fa = $fa['attribs'];
+            $file = $fa['name'];
+            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $file)) {
+                $this->_fileNotFound($dir_prefix . DIRECTORY_SEPARATOR . $file);
+                $this->_isValid = 0;
+                continue;
+            }
+            if (in_array($fa['role'], PEAR_Installer_Role::getPhpRoles()) && $dir_prefix) {
+                call_user_func_array($log, array(1, "Analyzing $file"));
+                $srcinfo = $this->analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
+                if ($srcinfo) {
+                    $provides = array_merge($provides, $this->_buildProvidesArray($srcinfo));
+                }
+            }
+        }
+        $this->_packageName = $pn = $this->_pf->getPackage();
+        $pnl = strlen($pn);
+        foreach ($provides as $key => $what) {
+            if (isset($what['explicit']) || !$what) {
+                // skip conformance checks if the provides entry is
+                // specified in the package.xml file
+                continue;
+            }
+            extract($what);
+            if ($type == 'class') {
+                if (!strncasecmp($name, $pn, $pnl)) {
+                    continue;
+                }
+                $this->_stack->push(__FUNCTION__, 'warning',
+                    array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn),
+                    'in %file%: %type% "%name%" not prefixed with package name "%package%"');
+            } elseif ($type == 'function') {
+                if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
+                    continue;
+                }
+                $this->_stack->push(__FUNCTION__, 'warning',
+                    array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn),
+                    'in %file%: %type% "%name%" not prefixed with package name "%package%"');
+            }
+        }
+        return $this->_isValid;
+    }
+
+    /**
+     * Analyze the source code of the given PHP file
+     *
+     * @param  string Filename of the PHP file
+     * @param  boolean whether to analyze $file as the file contents
+     * @return mixed
+     */
+    function analyzeSourceCode($file, $string = false)
+    {
+        if (!function_exists("token_get_all")) {
+            return false;
+        }
+        if (!defined('T_DOC_COMMENT')) {
+            define('T_DOC_COMMENT', T_COMMENT);
+        }
+        if (!defined('T_INTERFACE')) {
+            define('T_INTERFACE', -1);
+        }
+        if (!defined('T_IMPLEMENTS')) {
+            define('T_IMPLEMENTS', -1);
+        }
+        if ($string) {
+            $contents = $file;
+        } else {
+            if (!$fp = @fopen($file, "r")) {
+                return false;
+            }
+            if (function_exists('file_get_contents')) {
+                fclose($fp);
+                $contents = file_get_contents($file);
+            } else {
+                $contents = @fread($fp, filesize($file));
+                fclose($fp);
+            }
+        }
+        $tokens = token_get_all($contents);
+/*
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            @list($token, $data) = $tokens[$i];
+            if (is_string($token)) {
+                var_dump($token);
+            } else {
+                print token_name($token) . ' ';
+                var_dump(rtrim($data));
+            }
+        }
+*/
+        $look_for = 0;
+        $paren_level = 0;
+        $bracket_level = 0;
+        $brace_level = 0;
+        $lastphpdoc = '';
+        $current_class = '';
+        $current_interface = '';
+        $current_class_level = -1;
+        $current_function = '';
+        $current_function_level = -1;
+        $declared_classes = array();
+        $declared_interfaces = array();
+        $declared_functions = array();
+        $declared_methods = array();
+        $used_classes = array();
+        $used_functions = array();
+        $extends = array();
+        $implements = array();
+        $nodeps = array();
+        $inquote = false;
+        $interface = false;
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            if (is_array($tokens[$i])) {
+                list($token, $data) = $tokens[$i];
+            } else {
+                $token = $tokens[$i];
+                $data = '';
+            }
+            if ($inquote) {
+                if ($token != '"' && $token != T_END_HEREDOC) {
+                    continue;
+                } else {
+                    $inquote = false;
+                    continue;
+                }
+            }
+            switch ($token) {
+                case T_WHITESPACE :
+                    continue;
+                case ';':
+                    if ($interface) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    break;
+                case '"':
+                case T_START_HEREDOC:
+                    $inquote = true;
+                    break;
+                case T_CURLY_OPEN:
+                case T_DOLLAR_OPEN_CURLY_BRACES:
+                case '{': $brace_level++; continue 2;
+                case '}':
+                    $brace_level--;
+                    if ($current_class_level == $brace_level) {
+                        $current_class = '';
+                        $current_class_level = -1;
+                    }
+                    if ($current_function_level == $brace_level) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    continue 2;
+                case '[': $bracket_level++; continue 2;
+                case ']': $bracket_level--; continue 2;
+                case '(': $paren_level++;   continue 2;
+                case ')': $paren_level--;   continue 2;
+                case T_INTERFACE:
+                    $interface = true;
+                case T_CLASS:
+                    if (($current_class_level != -1) || ($current_function_level != -1)) {
+                        $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
+                        'Parser error: invalid PHP found in file "%file%"');
+                        return false;
+                    }
+                case T_FUNCTION:
+                case T_NEW:
+                case T_EXTENDS:
+                case T_IMPLEMENTS:
+                    $look_for = $token;
+                    continue 2;
+                case T_STRING:
+                    if (version_compare(zend_version(), '2.0', '<')) {
+                        if (in_array(strtolower($data),
+                            array('public', 'private', 'protected', 'abstract',
+                                  'interface', 'implements', 'throw') 
+                                 )) {
+                            $this->_stack->push(__FUNCTION__, 'warning', array(
+                                'file' => $file),
+                                'Error, PHP5 token encountered in %file%,' .
+                                ' analysis should be in PHP5');
+                        }
+                    }
+                    if ($look_for == T_CLASS) {
+                        $current_class = $data;
+                        $current_class_level = $brace_level;
+                        $declared_classes[] = $current_class;
+                    } elseif ($look_for == T_INTERFACE) {
+                        $current_interface = $data;
+                        $current_class_level = $brace_level;
+                        $declared_interfaces[] = $current_interface;
+                    } elseif ($look_for == T_IMPLEMENTS) {
+                        $implements[$current_class] = $data;
+                    } elseif ($look_for == T_EXTENDS) {
+                        $extends[$current_class] = $data;
+                    } elseif ($look_for == T_FUNCTION) {
+                        if ($current_class) {
+                            $current_function = "$current_class::$data";
+                            $declared_methods[$current_class][] = $data;
+                        } elseif ($current_interface) {
+                            $current_function = "$current_interface::$data";
+                            $declared_methods[$current_interface][] = $data;
+                        } else {
+                            $current_function = $data;
+                            $declared_functions[] = $current_function;
+                        }
+                        $current_function_level = $brace_level;
+                        $m = array();
+                    } elseif ($look_for == T_NEW) {
+                        $used_classes[$data] = true;
+                    }
+                    $look_for = 0;
+                    continue 2;
+                case T_VARIABLE:
+                    $look_for = 0;
+                    continue 2;
+                case T_DOC_COMMENT:
+                case T_COMMENT:
+                    if (preg_match('!^/\*\*\s!', $data)) {
+                        $lastphpdoc = $data;
+                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
+                            $nodeps = array_merge($nodeps, $m[1]);
+                        }
+                    }
+                    continue 2;
+                case T_DOUBLE_COLON:
+                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                        $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
+                            'Parser error: invalid PHP found in file "%file%"');
+                        return false;
+                    }
+                    $class = $tokens[$i - 1][1];
+                    if (strtolower($class) != 'parent') {
+                        $used_classes[$class] = true;
+                    }
+                    continue 2;
+            }
+        }
+        return array(
+            "source_file" => $file,
+            "declared_classes" => $declared_classes,
+            "declared_interfaces" => $declared_interfaces,
+            "declared_methods" => $declared_methods,
+            "declared_functions" => $declared_functions,
+            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
+            "inheritance" => $extends,
+            "implements" => $implements,
+            );
+    }
+
+    /**
+     * Build a "provides" array from data returned by
+     * analyzeSourceCode().  The format of the built array is like
+     * this:
+     *
+     *  array(
+     *    'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
+     *    ...
+     *  )
+     *
+     *
+     * @param array $srcinfo array with information about a source file
+     * as returned by the analyzeSourceCode() method.
+     *
+     * @return void
+     *
+     * @access private
+     *
+     */
+    function _buildProvidesArray($srcinfo)
+    {
+        if (!$this->_isValid) {
+            return array();
+        }
+        $providesret = array();
+        $file = basename($srcinfo['source_file']);
+        $pn = $this->_pf->getPackage();
+        $pnl = strlen($pn);
+        foreach ($srcinfo['declared_classes'] as $class) {
+            $key = "class;$class";
+            if (isset($providesret[$key])) {
+                continue;
+            }
+            $providesret[$key] =
+                array('file'=> $file, 'type' => 'class', 'name' => $class);
+            if (isset($srcinfo['inheritance'][$class])) {
+                $providesret[$key]['extends'] =
+                    $srcinfo['inheritance'][$class];
+            }
+        }
+        foreach ($srcinfo['declared_methods'] as $class => $methods) {
+            foreach ($methods as $method) {
+                $function = "$class::$method";
+                $key = "function;$function";
+                if ($method{0} == '_' || !strcasecmp($method, $class) ||
+                    isset($providesret[$key])) {
+                    continue;
+                }
+                $providesret[$key] =
+                    array('file'=> $file, 'type' => 'function', 'name' => $function);
+            }
+        }
+
+        foreach ($srcinfo['declared_functions'] as $function) {
+            $key = "function;$function";
+            if ($function{0} == '_' || isset($providesret[$key])) {
+                continue;
+            }
+            if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
+                $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
+            }
+            $providesret[$key] =
+                array('file'=> $file, 'type' => 'function', 'name' => $function);
+        }
+        return $providesret;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile/v2.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1990 @@
+<?php
+/**
+ * PEAR_PackageFile_v2, package.xml version 2.0
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: v2.php,v 1.122 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * For error handling
+ */
+require_once 'PEAR/ErrorStack.php';
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_v2
+{
+
+    /**
+     * Parsed package information
+     * @var array
+     * @access private
+     */
+    var $_packageInfo = array();
+
+    /**
+     * path to package .tgz or false if this is a local/extracted package.xml
+     * @var string|false
+     * @access private
+     */
+    var $_archiveFile;
+
+    /**
+     * path to package .xml or false if this is an abstract parsed-from-string xml
+     * @var string|false
+     * @access private
+     */
+    var $_packageFile;
+
+    /**
+     * This is used by file analysis routines to log progress information
+     * @var PEAR_Common
+     * @access protected
+     */
+    var $_logger;
+
+    /**
+     * This is set to the highest validation level that has been validated
+     *
+     * If the package.xml is invalid or unknown, this is set to 0.  If
+     * normal validation has occurred, this is set to PEAR_VALIDATE_NORMAL.  If
+     * downloading/installation validation has occurred it is set to PEAR_VALIDATE_DOWNLOADING
+     * or INSTALLING, and so on up to PEAR_VALIDATE_PACKAGING.  This allows validation
+     * "caching" to occur, which is particularly important for package validation, so
+     * that PHP files are not validated twice
+     * @var int
+     * @access private
+     */
+    var $_isValid = 0;
+
+    /**
+     * True if the filelist has been validated
+     * @param bool
+     */
+    var $_filesValid = false;
+
+    /**
+     * @var PEAR_Registry
+     * @access protected
+     */
+    var $_registry;
+
+    /**
+     * @var PEAR_Config
+     * @access protected
+     */
+    var $_config;
+
+    /**
+     * Optional Dependency group requested for installation
+     * @var string
+     * @access private
+     */
+    var $_requestedGroup = false;
+
+    /**
+     * @var PEAR_ErrorStack
+     * @access protected
+     */
+    var $_stack;
+
+    /**
+     * Namespace prefix used for tasks in this package.xml - use tasks: whenever possible
+     */
+    var $_tasksNs;
+
+    /**
+     * Determines whether this packagefile was initialized only with partial package info
+     *
+     * If this package file was constructed via parsing REST, it will only contain
+     *
+     * - package name
+     * - channel name
+     * - dependencies 
+     * @var boolean
+     * @access private
+     */
+    var $_incomplete = true;
+
+    /**
+     * The constructor merely sets up the private error stack
+     */
+    function PEAR_PackageFile_v2()
+    {
+        $this->_stack = new PEAR_ErrorStack('PEAR_PackageFile_v2', false, null);
+        $this->_isValid = false;
+    }
+
+    /**
+     * To make unit-testing easier
+     * @param PEAR_Frontend_*
+     * @param array options
+     * @param PEAR_Config
+     * @return PEAR_Downloader
+     * @access protected
+     */
+    function &getPEARDownloader(&$i, $o, &$c)
+    {
+        $z = &new PEAR_Downloader($i, $o, $c);
+        return $z;
+    }
+
+    /**
+     * To make unit-testing easier
+     * @param PEAR_Config
+     * @param array options
+     * @param array package name as returned from {@link PEAR_Registry::parsePackageName()}
+     * @param int PEAR_VALIDATE_* constant
+     * @return PEAR_Dependency2
+     * @access protected
+     */
+    function &getPEARDependency2(&$c, $o, $p, $s = PEAR_VALIDATE_INSTALLING)
+    {
+        if (!class_exists('PEAR_Dependency2')) {
+            require_once 'PEAR/Dependency2.php';
+        }
+        $z = &new PEAR_Dependency2($c, $o, $p, $s);
+        return $z;
+    }
+
+    function getInstalledBinary()
+    {
+        return isset($this->_packageInfo['#binarypackage']) ? $this->_packageInfo['#binarypackage'] :
+            false;
+    }
+
+    /**
+     * Installation of source package has failed, attempt to download and install the
+     * binary version of this package.
+     * @param PEAR_Installer
+     * @return array|false
+     */
+    function installBinary(&$installer)
+    {
+        if (!OS_WINDOWS) {
+            $a = false;
+            return $a;
+        }
+        if ($this->getPackageType() == 'extsrc') {
+            if (!is_array($installer->getInstallPackages())) {
+                $a = false;
+                return $a;
+            }
+            foreach ($installer->getInstallPackages() as $p) {
+                if ($p->isExtension($this->_packageInfo['providesextension'])) {
+                    if ($p->getPackageType() != 'extsrc') {
+                        $a = false;
+                        return $a; // the user probably downloaded it separately
+                    }
+                }
+            }
+            if (isset($this->_packageInfo['extsrcrelease']['binarypackage'])) {
+                $installer->log(0, 'Attempting to download binary version of extension "' .
+                    $this->_packageInfo['providesextension'] . '"');
+                $params = $this->_packageInfo['extsrcrelease']['binarypackage'];
+                if (!is_array($params) || !isset($params[0])) {
+                    $params = array($params);
+                }
+                if (isset($this->_packageInfo['channel'])) {
+                    foreach ($params as $i => $param) {
+                        $params[$i] = array('channel' => $this->_packageInfo['channel'],
+                            'package' => $param, 'version' => $this->getVersion());
+                    }
+                }
+                $dl = &$this->getPEARDownloader($installer->ui, $installer->getOptions(),
+                    $installer->config);
+                $verbose = $dl->config->get('verbose');
+                $dl->config->set('verbose', -1);
+                foreach ($params as $param) {
+                    PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                    $ret = $dl->download(array($param));
+                    PEAR::popErrorHandling();
+                    if (is_array($ret) && count($ret)) {
+                        break;
+                    }
+                }
+                $dl->config->set('verbose', $verbose);
+                if (is_array($ret)) {
+                    if (count($ret) == 1) {
+                        $pf = $ret[0]->getPackageFile();
+                        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                        $err = $installer->install($ret[0]);
+                        PEAR::popErrorHandling();
+                        if (is_array($err)) {
+                            $this->_packageInfo['#binarypackage'] = $ret[0]->getPackage();
+                            // "install" self, so all dependencies will work transparently
+                            $this->_registry->addPackage2($this);
+                            $installer->log(0, 'Download and install of binary extension "' .
+                                $this->_registry->parsedPackageNameToString(
+                                    array('channel' => $pf->getChannel(),
+                                          'package' => $pf->getPackage()), true) . '" successful');
+                            $a = array($ret[0], $err);
+                            return $a;
+                        }
+                        $installer->log(0, 'Download and install of binary extension "' .
+                            $this->_registry->parsedPackageNameToString(
+                                    array('channel' => $pf->getChannel(),
+                                          'package' => $pf->getPackage()), true) . '" failed');
+                    }
+                }
+            }
+        }
+        $a = false;
+        return $a;
+    }
+
+    /**
+     * @return string|false Extension name
+     */
+    function getProvidesExtension()
+    {
+        if (in_array($this->getPackageType(), array('extsrc', 'extbin'))) {
+            if (isset($this->_packageInfo['providesextension'])) {
+                return $this->_packageInfo['providesextension'];
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param string Extension name
+     * @return bool
+     */
+    function isExtension($extension)
+    {
+        if (in_array($this->getPackageType(), array('extsrc', 'extbin'))) {
+            return $this->_packageInfo['providesextension'] == $extension;
+        }
+        return false;
+    }
+
+    /**
+     * Tests whether every part of the package.xml 1.0 is represented in
+     * this package.xml 2.0
+     * @param PEAR_PackageFile_v1
+     * @return bool
+     */
+    function isEquivalent($pf1)
+    {
+        if (!$pf1) {
+            return true;
+        }
+        if ($this->getPackageType() == 'bundle') {
+            return false;
+        }
+        $this->_stack->getErrors(true);
+        if (!$pf1->validate(PEAR_VALIDATE_NORMAL)) {
+            return false;
+        }
+        $pass = true;
+        if ($pf1->getPackage() != $this->getPackage()) {
+            $this->_differentPackage($pf1->getPackage());
+            $pass = false;
+        }
+        if ($pf1->getVersion() != $this->getVersion()) {
+            $this->_differentVersion($pf1->getVersion());
+            $pass = false;
+        }
+        if (trim($pf1->getSummary()) != $this->getSummary()) {
+            $this->_differentSummary($pf1->getSummary());
+            $pass = false;
+        }
+        if (preg_replace('/\s+/', '', $pf1->getDescription()) !=
+              preg_replace('/\s+/', '', $this->getDescription())) {
+            $this->_differentDescription($pf1->getDescription());
+            $pass = false;
+        }
+        if ($pf1->getState() != $this->getState()) {
+            $this->_differentState($pf1->getState());
+            $pass = false;
+        }
+        if (!strstr(preg_replace('/\s+/', '', $this->getNotes()),
+              preg_replace('/\s+/', '', $pf1->getNotes()))) {
+            $this->_differentNotes($pf1->getNotes());
+            $pass = false;
+        }
+        $mymaintainers = $this->getMaintainers();
+        $yourmaintainers = $pf1->getMaintainers();
+        for ($i1 = 0; $i1 < count($yourmaintainers); $i1++) {
+            $reset = false;
+            for ($i2 = 0; $i2 < count($mymaintainers); $i2++) {
+                if ($mymaintainers[$i2]['handle'] == $yourmaintainers[$i1]['handle']) {
+                    if ($mymaintainers[$i2]['role'] != $yourmaintainers[$i1]['role']) {
+                        $this->_differentRole($mymaintainers[$i2]['handle'],
+                            $yourmaintainers[$i1]['role'], $mymaintainers[$i2]['role']);
+                        $pass = false;
+                    }
+                    if ($mymaintainers[$i2]['email'] != $yourmaintainers[$i1]['email']) {
+                        $this->_differentEmail($mymaintainers[$i2]['handle'],
+                            $yourmaintainers[$i1]['email'], $mymaintainers[$i2]['email']);
+                        $pass = false;
+                    }
+                    if ($mymaintainers[$i2]['name'] != $yourmaintainers[$i1]['name']) {
+                        $this->_differentName($mymaintainers[$i2]['handle'],
+                            $yourmaintainers[$i1]['name'], $mymaintainers[$i2]['name']);
+                        $pass = false;
+                    }
+                    unset($mymaintainers[$i2]);
+                    $mymaintainers = array_values($mymaintainers);
+                    unset($yourmaintainers[$i1]);
+                    $yourmaintainers = array_values($yourmaintainers);
+                    $reset = true;
+                    break;
+                }
+            }
+            if ($reset) {
+                $i1 = -1;
+            }
+        }
+        $this->_unmatchedMaintainers($mymaintainers, $yourmaintainers);
+        $filelist = $this->getFilelist();
+        foreach ($pf1->getFilelist() as $file => $atts) {
+            if (!isset($filelist[$file])) {
+                $this->_missingFile($file);
+                $pass = false;
+            }
+        }
+        return $pass;
+    }
+
+    function _differentPackage($package)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('package' => $package,
+            'self' => $this->getPackage()),
+            'package.xml 1.0 package "%package%" does not match "%self%"');
+    }
+
+    function _differentVersion($version)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('version' => $version,
+            'self' => $this->getVersion()),
+            'package.xml 1.0 version "%version%" does not match "%self%"');
+    }
+
+    function _differentState($state)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('state' => $state,
+            'self' => $this->getState()),
+            'package.xml 1.0 state "%state%" does not match "%self%"');
+    }
+
+    function _differentRole($handle, $role, $selfrole)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('handle' => $handle,
+            'role' => $role, 'self' => $selfrole),
+            'package.xml 1.0 maintainer "%handle%" role "%role%" does not match "%self%"');
+    }
+
+    function _differentEmail($handle, $email, $selfemail)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('handle' => $handle,
+            'email' => $email, 'self' => $selfemail),
+            'package.xml 1.0 maintainer "%handle%" email "%email%" does not match "%self%"');
+    }
+
+    function _differentName($handle, $name, $selfname)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('handle' => $handle,
+            'name' => $name, 'self' => $selfname),
+            'package.xml 1.0 maintainer "%handle%" name "%name%" does not match "%self%"');
+    }
+
+    function _unmatchedMaintainers($my, $yours)
+    {
+        if ($my) {
+            array_walk($my, create_function('&$i, $k', '$i = $i["handle"];'));
+            $this->_stack->push(__FUNCTION__, 'error', array('handles' => $my),
+                'package.xml 2.0 has unmatched extra maintainers "%handles%"');
+        }
+        if ($yours) {
+            array_walk($yours, create_function('&$i, $k', '$i = $i["handle"];'));
+            $this->_stack->push(__FUNCTION__, 'error', array('handles' => $yours),
+                'package.xml 1.0 has unmatched extra maintainers "%handles%"');
+        }
+    }
+
+    function _differentNotes($notes)
+    {
+        $truncnotes = strlen($notes) < 25 ? $notes : substr($notes, 0, 24) . '...';
+        $truncmynotes = strlen($this->getNotes()) < 25 ? $this->getNotes() :
+            substr($this->getNotes(), 0, 24) . '...';
+        $this->_stack->push(__FUNCTION__, 'error', array('notes' => $truncnotes,
+            'self' => $truncmynotes),
+            'package.xml 1.0 release notes "%notes%" do not match "%self%"');
+    }
+
+    function _differentSummary($summary)
+    {
+        $truncsummary = strlen($summary) < 25 ? $summary : substr($summary, 0, 24) . '...';
+        $truncmysummary = strlen($this->getsummary()) < 25 ? $this->getSummary() :
+            substr($this->getsummary(), 0, 24) . '...';
+        $this->_stack->push(__FUNCTION__, 'error', array('summary' => $truncsummary,
+            'self' => $truncmysummary),
+            'package.xml 1.0 summary "%summary%" does not match "%self%"');
+    }
+
+    function _differentDescription($description)
+    {
+        $truncdescription = trim(strlen($description) < 25 ? $description : substr($description, 0, 24) . '...');
+        $truncmydescription = trim(strlen($this->getDescription()) < 25 ? $this->getDescription() :
+            substr($this->getdescription(), 0, 24) . '...');
+        $this->_stack->push(__FUNCTION__, 'error', array('description' => $truncdescription,
+            'self' => $truncmydescription),
+            'package.xml 1.0 description "%description%" does not match "%self%"');
+    }
+
+    function _missingFile($file)
+    {
+        $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
+            'package.xml 1.0 file "%file%" is not present in <contents>');
+    }
+
+    /**
+     * WARNING - do not use this function unless you know what you're doing
+     */
+    function setRawState($state)
+    {
+        $this->_packageInfo['stability']['release'] = $state;
+    }
+
+    /**
+     * WARNING - do not use this function unless you know what you're doing
+     */
+    function setRawCompatible($compatible)
+    {
+        $this->_packageInfo['compatible'] = $compatible;
+    }
+
+    /**
+     * WARNING - do not use this function unless you know what you're doing
+     */
+    function setRawPackage($package)
+    {
+        $this->_packageInfo['name'] = $package;
+    }
+
+    /**
+     * WARNING - do not use this function unless you know what you're doing
+     */
+    function setRawChannel($channel)
+    {
+        $this->_packageInfo['channel'] = $channel;
+    }
+
+    function setRequestedGroup($group)
+    {
+        $this->_requestedGroup = $group;
+    }
+
+    function getRequestedGroup()
+    {
+        if (isset($this->_requestedGroup)) {
+            return $this->_requestedGroup;
+        }
+        return false;
+    }
+
+    /**
+     * For saving in the registry.
+     *
+     * Set the last version that was installed
+     * @param string
+     */
+    function setLastInstalledVersion($version)
+    {
+        $this->_packageInfo['_lastversion'] = $version;
+    }
+
+    /**
+     * @return string|false
+     */
+    function getLastInstalledVersion()
+    {
+        if (isset($this->_packageInfo['_lastversion'])) {
+            return $this->_packageInfo['_lastversion'];
+        }
+        return false;
+    }
+
+    /**
+     * Determines whether this package.xml has post-install scripts or not
+     * @return array|false
+     */
+    function listPostinstallScripts()
+    {
+        $filelist = $this->getFilelist();
+        $contents = $this->getContents();
+        $contents = $contents['dir']['file'];
+        if (!is_array($contents) || !isset($contents[0])) {
+            $contents = array($contents);
+        }
+        $taskfiles = array();
+        foreach ($contents as $file) {
+            $atts = $file['attribs'];
+            unset($file['attribs']);
+            if (count($file)) {
+                $taskfiles[$atts['name']] = $file;
+            }
+        }
+        $common = new PEAR_Common;
+        $common->debug = $this->_config->get('verbose');
+        $this->_scripts = array();
+        $ret = array();
+        foreach ($taskfiles as $name => $tasks) {
+            if (!isset($filelist[$name])) {
+                // ignored files will not be in the filelist
+                continue;
+            }
+            $atts = $filelist[$name];
+            foreach ($tasks as $tag => $raw) {
+                $task = $this->getTask($tag);
+                $task = &new $task($this->_config, $common, PEAR_TASK_INSTALL);
+                if ($task->isScript()) {
+                    $ret[] = $filelist[$name]['installed_as'];
+                }
+            }
+        }
+        if (count($ret)) {
+            return $ret;
+        }
+        return false;
+    }
+
+    /**
+     * Initialize post-install scripts for running
+     *
+     * This method can be used to detect post-install scripts, as the return value
+     * indicates whether any exist
+     * @return bool
+     */
+    function initPostinstallScripts()
+    {
+        $filelist = $this->getFilelist();
+        $contents = $this->getContents();
+        $contents = $contents['dir']['file'];
+        if (!is_array($contents) || !isset($contents[0])) {
+            $contents = array($contents);
+        }
+        $taskfiles = array();
+        foreach ($contents as $file) {
+            $atts = $file['attribs'];
+            unset($file['attribs']);
+            if (count($file)) {
+                $taskfiles[$atts['name']] = $file;
+            }
+        }
+        $common = new PEAR_Common;
+        $common->debug = $this->_config->get('verbose');
+        $this->_scripts = array();
+        foreach ($taskfiles as $name => $tasks) {
+            $atts = $filelist[$name];
+            foreach ($tasks as $tag => $raw) {
+                $taskname = $this->getTask($tag);
+                $task = &new $taskname($this->_config, $common, PEAR_TASK_INSTALL);
+                if (!$task->isScript()) {
+                    continue; // scripts are only handled after installation
+                }
+                $lastversion = isset($this->_packageInfo['_lastversion']) ?
+                    $this->_packageInfo['_lastversion'] : null;
+                $task->init($raw, $atts, $lastversion);
+                $res = $task->startSession($this, $atts['installed_as']);
+                if (!$res) {
+                    continue; // skip this file
+                }
+                if (PEAR::isError($res)) {
+                    return $res;
+                }
+                $assign = &$task;
+                $this->_scripts[] = &$assign;
+            }
+        }
+        if (count($this->_scripts)) {
+            return true;
+        }
+        return false;
+    }
+
+    function runPostinstallScripts()
+    {
+        if ($this->initPostinstallScripts()) {
+            $ui = &PEAR_Frontend::singleton();
+            if ($ui) {
+                $ui->runPostinstallScripts($this->_scripts, $this);
+            }
+        }
+    }
+
+
+    /**
+     * Convert a recursive set of <dir> and <file> tags into a single <dir> tag with
+     * <file> tags.
+     */
+    function flattenFilelist()
+    {
+        if (isset($this->_packageInfo['bundle'])) {
+            return;
+        }
+        $filelist = array();
+        if (isset($this->_packageInfo['contents']['dir']['dir'])) {
+            $this->_getFlattenedFilelist($filelist, $this->_packageInfo['contents']['dir']);
+            if (!isset($filelist[1])) {
+                $filelist = $filelist[0];
+            }
+            $this->_packageInfo['contents']['dir']['file'] = $filelist;
+            unset($this->_packageInfo['contents']['dir']['dir']);
+        } else {
+            // else already flattened but check for baseinstalldir propagation
+            if (isset($this->_packageInfo['contents']['dir']['attribs']['baseinstalldir'])) {
+                if (isset($this->_packageInfo['contents']['dir']['file'][0])) {
+                    foreach ($this->_packageInfo['contents']['dir']['file'] as $i => $file) {
+                        if (isset($file['attribs']['baseinstalldir'])) {
+                            continue;
+                        }
+                        $this->_packageInfo['contents']['dir']['file'][$i]['attribs']['baseinstalldir']
+                            = $this->_packageInfo['contents']['dir']['attribs']['baseinstalldir'];
+                    }
+                } else {
+                    if (!isset($this->_packageInfo['contents']['dir']['file']['attribs']['baseinstalldir'])) {
+                       $this->_packageInfo['contents']['dir']['file']['attribs']['baseinstalldir']
+                            = $this->_packageInfo['contents']['dir']['attribs']['baseinstalldir'];
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * @param array the final flattened file list
+     * @param array the current directory being processed
+     * @param string|false any recursively inherited baeinstalldir attribute
+     * @param string private recursion variable
+     * @return array
+     * @access protected
+     */
+    function _getFlattenedFilelist(&$files, $dir, $baseinstall = false, $path = '')
+    {
+        if (isset($dir['attribs']) && isset($dir['attribs']['baseinstalldir'])) {
+            $baseinstall = $dir['attribs']['baseinstalldir'];
+        }
+        if (isset($dir['dir'])) {
+            if (!isset($dir['dir'][0])) {
+                $dir['dir'] = array($dir['dir']);
+            }
+            foreach ($dir['dir'] as $subdir) {
+                if (!isset($subdir['attribs']) || !isset($subdir['attribs']['name'])) {
+                    $name = '*unknown*';
+                } else {
+                    $name = $subdir['attribs']['name'];
+                }
+                $newpath = empty($path) ? $name :
+                    $path . '/' . $name;
+                $this->_getFlattenedFilelist($files, $subdir,
+                    $baseinstall, $newpath);
+            }
+        }
+        if (isset($dir['file'])) {
+            if (!isset($dir['file'][0])) {
+                $dir['file'] = array($dir['file']);
+            }
+            foreach ($dir['file'] as $file) {
+                $attrs = $file['attribs'];
+                $name = $attrs['name'];
+                if ($baseinstall && !isset($attrs['baseinstalldir'])) {
+                    $attrs['baseinstalldir'] = $baseinstall;
+                }
+                $attrs['name'] = empty($path) ? $name : $path . '/' . $name;
+                $attrs['name'] = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'),
+                    $attrs['name']);
+                $file['attribs'] = $attrs;
+                $files[] = $file;
+            }
+        }
+    }
+
+    function setConfig(&$config)
+    {
+        $this->_config = &$config;
+        $this->_registry = &$config->getRegistry();
+    }
+
+    function setLogger(&$logger)
+    {
+        if ($logger && (!is_object($logger) || !method_exists($logger, 'log'))) {
+            return PEAR::raiseError('Logger must be compatible with PEAR_Common::log');
+        }
+        $this->_logger = &$logger;
+    }
+
+    /**
+     * WARNING - do not use this function directly unless you know what you're doing
+     */
+    function setDeps($deps)
+    {
+        $this->_packageInfo['dependencies'] = $deps;
+    }
+
+    function setPackagefile($file, $archive = false)
+    {
+        $this->_packageFile = $file;
+        $this->_archiveFile = $archive ? $archive : $file;
+    }
+
+    /**
+     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
+     * @param boolean determines whether to purge the error stack after retrieving
+     * @return array
+     */
+    function getValidationWarnings($purge = true)
+    {
+        return $this->_stack->getErrors($purge);
+    }
+
+    function getPackageFile()
+    {
+        return $this->_packageFile;
+    }
+
+    function getArchiveFile()
+    {
+        return $this->_archiveFile;
+    }
+
+
+    /**
+     * Directly set the array that defines this packagefile
+     *
+     * WARNING: no validation.  This should only be performed by internal methods
+     * inside PEAR or by inputting an array saved from an existing PEAR_PackageFile_v2
+     * @param array
+     */
+    function fromArray($pinfo)
+    {
+        unset($pinfo['old']);
+        unset($pinfo['xsdversion']);
+        $this->_incomplete = false;
+        $this->_packageInfo = $pinfo;
+    }
+
+    function isIncomplete()
+    {
+        return $this->_incomplete;
+    }
+
+    /**
+     * @return array
+     */
+    function toArray($forreg = false)
+    {
+        if (!$this->validate(PEAR_VALIDATE_NORMAL)) {
+            return false;
+        }
+        return $this->getArray($forreg);
+    }
+
+    function getArray($forReg = false)
+    {
+        if ($forReg) {
+            $arr = $this->_packageInfo;
+            $arr['old'] = array();
+            $arr['old']['version'] = $this->getVersion();
+            $arr['old']['release_date'] = $this->getDate();
+            $arr['old']['release_state'] = $this->getState();
+            $arr['old']['release_license'] = $this->getLicense();
+            $arr['old']['release_notes'] = $this->getNotes();
+            $arr['old']['release_deps'] = $this->getDeps();
+            $arr['old']['maintainers'] = $this->getMaintainers();
+            $arr['xsdversion'] = '2.0';
+            return $arr;
+        } else {
+            $info = $this->_packageInfo;
+            unset($info['dirtree']);
+            if (isset($info['_lastversion'])) {
+                unset($info['_lastversion']);
+            }
+            if (isset($info['#binarypackage'])) {
+                unset($info['#binarypackage']);
+            }
+            return $info;
+        }
+    }
+
+    function packageInfo($field)
+    {
+        $arr = $this->getArray(true);
+        if ($field == 'state') {
+            return $arr['stability']['release'];
+        }
+        if ($field == 'api-version') {
+            return $arr['version']['api'];
+        }
+        if ($field == 'api-state') {
+            return $arr['stability']['api'];
+        }
+        if (isset($arr['old'][$field])) {
+            if (!is_string($arr['old'][$field])) {
+                return null;
+            }
+            return $arr['old'][$field];
+        }
+        if (isset($arr[$field])) {
+            if (!is_string($arr[$field])) {
+                return null;
+            }
+            return $arr[$field];
+        }
+        return null;
+    }
+
+    function getName()
+    {
+        return $this->getPackage();
+    }
+
+    function getPackage()
+    {
+        if (isset($this->_packageInfo['name'])) {
+            return $this->_packageInfo['name'];
+        }
+        return false;
+    }
+
+    function getChannel()
+    {
+        if (isset($this->_packageInfo['uri'])) {
+            return '__uri';
+        }
+        if (isset($this->_packageInfo['channel'])) {
+            return strtolower($this->_packageInfo['channel']);
+        }
+        return false;
+    }
+
+    function getUri()
+    {
+        if (isset($this->_packageInfo['uri'])) {
+            return $this->_packageInfo['uri'];
+        }
+        return false;
+    }
+
+    function getExtends()
+    {
+        if (isset($this->_packageInfo['extends'])) {
+            return $this->_packageInfo['extends'];
+        }
+        return false;
+    }
+
+    function getSummary()
+    {
+        if (isset($this->_packageInfo['summary'])) {
+            return $this->_packageInfo['summary'];
+        }
+        return false;
+    }
+
+    function getDescription()
+    {
+        if (isset($this->_packageInfo['description'])) {
+            return $this->_packageInfo['description'];
+        }
+        return false;
+    }
+
+    function getMaintainers($raw = false)
+    {
+        if (!$this->_isValid && !$this->validate()) {
+            return false;
+        }
+        if ($raw) {
+            $ret = array('lead' => $this->_packageInfo['lead']);
+            (isset($this->_packageInfo['developer'])) ?
+                $ret['developer'] = $this->_packageInfo['developer'] :null;
+            (isset($this->_packageInfo['contributor'])) ?
+                $ret['contributor'] = $this->_packageInfo['contributor'] :null;
+            (isset($this->_packageInfo['helper'])) ?
+                $ret['helper'] = $this->_packageInfo['helper'] :null;
+            return $ret;
+        } else {
+            $ret = array();
+            $leads = isset($this->_packageInfo['lead'][0]) ? $this->_packageInfo['lead'] :
+                array($this->_packageInfo['lead']);
+            foreach ($leads as $lead) {
+                $s = $lead;
+                $s['handle'] = $s['user'];
+                unset($s['user']);
+                $s['role'] = 'lead';
+                $ret[] = $s;
+            }
+            if (isset($this->_packageInfo['developer'])) {
+                $leads = isset($this->_packageInfo['developer'][0]) ?
+                    $this->_packageInfo['developer'] :
+                    array($this->_packageInfo['developer']);
+                foreach ($leads as $maintainer) {
+                    $s = $maintainer;
+                    $s['handle'] = $s['user'];
+                    unset($s['user']);
+                    $s['role'] = 'developer';
+                    $ret[] = $s;
+                }
+            }
+            if (isset($this->_packageInfo['contributor'])) {
+                $leads = isset($this->_packageInfo['contributor'][0]) ?
+                    $this->_packageInfo['contributor'] :
+                    array($this->_packageInfo['contributor']);
+                foreach ($leads as $maintainer) {
+                    $s = $maintainer;
+                    $s['handle'] = $s['user'];
+                    unset($s['user']);
+                    $s['role'] = 'contributor';
+                    $ret[] = $s;
+                }
+            }
+            if (isset($this->_packageInfo['helper'])) {
+                $leads = isset($this->_packageInfo['helper'][0]) ?
+                    $this->_packageInfo['helper'] :
+                    array($this->_packageInfo['helper']);
+                foreach ($leads as $maintainer) {
+                    $s = $maintainer;
+                    $s['handle'] = $s['user'];
+                    unset($s['user']);
+                    $s['role'] = 'helper';
+                    $ret[] = $s;
+                }
+            }
+            return $ret;
+        }
+        return false;
+    }
+
+    function getLeads()
+    {
+        if (isset($this->_packageInfo['lead'])) {
+            return $this->_packageInfo['lead'];
+        }
+        return false;
+    }
+
+    function getDevelopers()
+    {
+        if (isset($this->_packageInfo['developer'])) {
+            return $this->_packageInfo['developer'];
+        }
+        return false;
+    }
+
+    function getContributors()
+    {
+        if (isset($this->_packageInfo['contributor'])) {
+            return $this->_packageInfo['contributor'];
+        }
+        return false;
+    }
+
+    function getHelpers()
+    {
+        if (isset($this->_packageInfo['helper'])) {
+            return $this->_packageInfo['helper'];
+        }
+        return false;
+    }
+
+    function setDate($date)
+    {
+        if (!isset($this->_packageInfo['date'])) {
+            // ensure that the extends tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                array('time', 'version',
+                    'stability', 'license', 'notes', 'contents', 'compatible',
+                    'dependencies', 'providesextension', 'srcpackage', 'srcuri',
+                    'phprelease', 'extsrcrelease',
+                    'extbinrelease', 'bundle', 'changelog'), array(), 'date');
+        }
+        $this->_packageInfo['date'] = $date;
+        $this->_isValid = 0;
+    }
+
+    function setTime($time)
+    {
+        $this->_isValid = 0;
+        if (!isset($this->_packageInfo['time'])) {
+            // ensure that the time tag is set up in the right location
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
+                    array('version',
+                    'stability', 'license', 'notes', 'contents', 'compatible',
+                    'dependencies', 'providesextension', 'srcpackage', 'srcuri',
+                    'phprelease', 'extsrcrelease',
+                    'extbinrelease', 'bundle', 'changelog'), $time, 'time');
+        }
+        $this->_packageInfo['time'] = $time;
+    }
+
+    function getDate()
+    {
+        if (isset($this->_packageInfo['date'])) {
+            return $this->_packageInfo['date'];
+        }
+        return false;
+    }
+
+    function getTime()
+    {
+        if (isset($this->_packageInfo['time'])) {
+            return $this->_packageInfo['time'];
+        }
+        return false;
+    }
+
+    /**
+     * @param package|api version category to return
+     */
+    function getVersion($key = 'release')
+    {
+        if (isset($this->_packageInfo['version'][$key])) {
+            return $this->_packageInfo['version'][$key];
+        }
+        return false;
+    }
+
+    function getStability()
+    {
+        if (isset($this->_packageInfo['stability'])) {
+            return $this->_packageInfo['stability'];
+        }
+        return false;
+    }
+
+    function getState($key = 'release')
+    {
+        if (isset($this->_packageInfo['stability'][$key])) {
+            return $this->_packageInfo['stability'][$key];
+        }
+        return false;
+    }
+
+    function getLicense($raw = false)
+    {
+        if (isset($this->_packageInfo['license'])) {
+            if ($raw) {
+                return $this->_packageInfo['license'];
+            }
+            if (is_array($this->_packageInfo['license'])) {
+                return $this->_packageInfo['license']['_content'];
+            } else {
+                return $this->_packageInfo['license'];
+            }
+        }
+        return false;
+    }
+
+    function getLicenseLocation()
+    {
+        if (!isset($this->_packageInfo['license']) || !is_array($this->_packageInfo['license'])) {
+            return false;
+        }
+        return $this->_packageInfo['license']['attribs'];
+    }
+
+    function getNotes()
+    {
+        if (isset($this->_packageInfo['notes'])) {
+            return $this->_packageInfo['notes'];
+        }
+        return false;
+    }
+
+    /**
+     * Return the <usesrole> tag contents, if any
+     * @return array|false
+     */
+    function getUsesrole()
+    {
+        if (isset($this->_packageInfo['usesrole'])) {
+            return $this->_packageInfo['usesrole'];
+        }
+        return false;
+    }
+
+    /**
+     * Return the <usestask> tag contents, if any
+     * @return array|false
+     */
+    function getUsestask()
+    {
+        if (isset($this->_packageInfo['usestask'])) {
+            return $this->_packageInfo['usestask'];
+        }
+        return false;
+    }
+
+    /**
+     * This should only be used to retrieve filenames and install attributes
+     */
+    function getFilelist($preserve = false)
+    {
+        if (isset($this->_packageInfo['filelist']) && !$preserve) {
+            return $this->_packageInfo['filelist'];
+        }
+        $this->flattenFilelist();
+        if ($contents = $this->getContents()) {
+            $ret = array();
+            if (!isset($contents['dir']['file'][0])) {
+                $contents['dir']['file'] = array($contents['dir']['file']);
+            }
+            foreach ($contents['dir']['file'] as $file) {
+                $name = $file['attribs']['name'];
+                if (!$preserve) {
+                    $file = $file['attribs'];
+                }
+                $ret[$name] = $file;
+            }
+            if (!$preserve) {
+                $this->_packageInfo['filelist'] = $ret;
+            }
+            return $ret;
+        }
+        return false;
+    }
+
+    /**
+     * Return configure options array, if any
+     *
+     * @return array|false
+     */
+    function getConfigureOptions()
+    {
+        if ($this->getPackageType() != 'extsrc') {
+            return false;
+        }
+        $releases = $this->getReleases();
+        if (isset($releases[0])) {
+            $releases = $release[0];
+        }
+        if (isset($releases['configureoption'])) {
+            if (!isset($releases['configureoption'][0])) {
+                $releases['configureoption'] = array($releases['configureoption']);
+            }
+            for ($i = 0; $i < count($releases['configureoption']); $i++) {
+                $releases['configureoption'][$i] = $releases['configureoption'][$i]['attribs'];
+            }
+            return $releases['configureoption'];
+        }
+        return false;
+    }
+
+    /**
+     * This is only used at install-time, after all serialization
+     * is over.
+     */
+    function resetFilelist()
+    {
+        $this->_packageInfo['filelist'] = array();
+    }
+
+    /**
+     * Retrieve a list of files that should be installed on this computer
+     * @return array
+     */
+    function getInstallationFilelist($forfilecheck = false)
+    {
+        $contents = $this->getFilelist(true);
+        if (isset($contents['dir']['attribs']['baseinstalldir'])) {
+            $base = $contents['dir']['attribs']['baseinstalldir'];
+        }
+        if (isset($this->_packageInfo['bundle'])) {
+            return PEAR::raiseError(
+                'Exception: bundles should be handled in download code only');
+        }
+        $release = $this->getReleases();
+        if ($release) {
+            if (!isset($release[0])) {
+                if (!isset($release['installconditions']) && !isset($release['filelist'])) {
+                    if ($forfilecheck) {
+                        return $this->getFilelist();
+                    }
+                    return $contents;
+                }
+                $release = array($release);
+            }
+            $depchecker = &$this->getPEARDependency2($this->_config, array(),
+                array('channel' => $this->getChannel(), 'package' => $this->getPackage()),
+                PEAR_VALIDATE_INSTALLING);
+            foreach ($release as $instance) {
+                if (isset($instance['installconditions'])) {
+                    $installconditions = $instance['installconditions'];
+                    if (is_array($installconditions)) {
+                        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                        foreach ($installconditions as $type => $conditions) {
+                            if (!isset($conditions[0])) {
+                                $conditions = array($conditions);
+                            }
+                            foreach ($conditions as $condition) {
+                                $ret = $depchecker->{"validate{$type}Dependency"}($condition);
+                                if (PEAR::isError($ret)) {
+                                    PEAR::popErrorHandling();
+                                    continue 3; // skip this release
+                                }
+                            }
+                        }
+                        PEAR::popErrorHandling();
+                    }
+                }
+                // this is the release to use
+                if (isset($instance['filelist'])) {
+                    // ignore files
+                    if (isset($instance['filelist']['ignore'])) {
+                        $ignore = isset($instance['filelist']['ignore'][0]) ?
+                            $instance['filelist']['ignore'] :
+                            array($instance['filelist']['ignore']);
+                        foreach ($ignore as $ig) {
+                            unset ($contents[$ig['attribs']['name']]);
+                        }
+                    }
+                    // install files as this name
+                    if (isset($instance['filelist']['install'])) {
+                        $installas = isset($instance['filelist']['install'][0]) ?
+                            $instance['filelist']['install'] :
+                            array($instance['filelist']['install']);
+                        foreach ($installas as $as) {
+                            $contents[$as['attribs']['name']]['attribs']['install-as'] =
+                                $as['attribs']['as'];
+                        }
+                    }
+                }
+                if ($forfilecheck) {
+                    foreach ($contents as $file => $attrs) {
+                        $contents[$file] = $attrs['attribs'];
+                    }
+                }
+                return $contents;
+            }
+        } else { // simple release - no installconditions or install-as
+            if ($forfilecheck) {
+                return $this->getFilelist();
+            }
+            return $contents;
+        }
+        // no releases matched
+        return PEAR::raiseError('No releases in package.xml matched the existing operating ' .
+            'system, extensions installed, or architecture, cannot install');
+    }
+
+    /**
+     * This is only used at install-time, after all serialization
+     * is over.
+     * @param string file name
+     * @param string installed path
+     */
+    function setInstalledAs($file, $path)
+    {
+        if ($path) {
+            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
+        }
+        unset($this->_packageInfo['filelist'][$file]['installed_as']);
+    }
+
+    function getInstalledLocation($file)
+    {
+        if (isset($this->_packageInfo['filelist'][$file]['installed_as'])) {
+            return $this->_packageInfo['filelist'][$file]['installed_as'];
+        }
+        return false;
+    }
+
+    /**
+     * This is only used at install-time, after all serialization
+     * is over.
+     */
+    function installedFile($file, $atts)
+    {
+        if (isset($this->_packageInfo['filelist'][$file])) {
+            $this->_packageInfo['filelist'][$file] =
+                array_merge($this->_packageInfo['filelist'][$file], $atts['attribs']);
+        } else {
+            $this->_packageInfo['filelist'][$file] = $atts['attribs'];
+        }
+    }
+
+    /**
+     * Retrieve the contents tag
+     */
+    function getContents()
+    {
+        if (isset($this->_packageInfo['contents'])) {
+            return $this->_packageInfo['contents'];
+        }
+        return false;
+    }
+
+    /**
+     * @param string full path to file
+     * @param string attribute name
+     * @param string attribute value
+     * @param int risky but fast - use this to choose a file based on its position in the list
+     *            of files.  Index is zero-based like PHP arrays.
+     * @return bool success of operation
+     */
+    function setFileAttribute($filename, $attr, $value, $index = false)
+    {
+        $this->_isValid = 0;
+        if (in_array($attr, array('role', 'name', 'baseinstalldir'))) {
+            $this->_filesValid = false;
+        }
+        if ($index !== false &&
+              isset($this->_packageInfo['contents']['dir']['file'][$index]['attribs'])) {
+            $this->_packageInfo['contents']['dir']['file'][$index]['attribs'][$attr] = $value;
+            return true;
+        }
+        if (!isset($this->_packageInfo['contents']['dir']['file'])) {
+            return false;
+        }
+        $files = $this->_packageInfo['contents']['dir']['file'];
+        if (!isset($files[0])) {
+            $files = array($files);
+            $ind = false;
+        } else {
+            $ind = true;
+        }
+        foreach ($files as $i => $file) {
+            if (isset($file['attribs'])) {
+                if ($file['attribs']['name'] == $filename) {
+                    if ($ind) {
+                        $this->_packageInfo['contents']['dir']['file'][$i]['attribs'][$attr] = $value;
+                    } else {
+                        $this->_packageInfo['contents']['dir']['file']['attribs'][$attr] = $value;
+                    }
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    function setDirtree($path)
+    {
+        $this->_packageInfo['dirtree'][$path] = true;
+    }
+
+    function getDirtree()
+    {
+        if (isset($this->_packageInfo['dirtree']) && count($this->_packageInfo['dirtree'])) {
+            return $this->_packageInfo['dirtree'];
+        }
+        return false;
+    }
+
+    function resetDirtree()
+    {
+        unset($this->_packageInfo['dirtree']);
+    }
+
+    /**
+     * Determines whether this package claims it is compatible with the version of
+     * the package that has a recommended version dependency
+     * @param PEAR_PackageFile_v2|PEAR_PackageFile_v1|PEAR_Downloader_Package
+     * @return boolean
+     */
+    function isCompatible($pf)
+    {
+        if (!isset($this->_packageInfo['compatible'])) {
+            return false;
+        }
+        if (!isset($this->_packageInfo['channel'])) {
+            return false;
+        }
+        $me = $pf->getVersion();
+        $compatible = $this->_packageInfo['compatible'];
+        if (!isset($compatible[0])) {
+            $compatible = array($compatible);
+        }
+        $found = false;
+        foreach ($compatible as $info) {
+            if (strtolower($info['name']) == strtolower($pf->getPackage())) {
+                if (strtolower($info['channel']) == strtolower($pf->getChannel())) {
+                    $found = true;
+                    break;
+                }
+            }
+        }
+        if (!$found) {
+            return false;
+        }
+        if (isset($info['exclude'])) {
+            if (!isset($info['exclude'][0])) {
+                $info['exclude'] = array($info['exclude']);
+            }
+            foreach ($info['exclude'] as $exclude) {
+                if (version_compare($me, $exclude, '==')) {
+                    return false;
+                }
+            }
+        }
+        if (version_compare($me, $info['min'], '>=') && version_compare($me, $info['max'], '<=')) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @return array|false
+     */
+    function getCompatible()
+    {
+        if (isset($this->_packageInfo['compatible'])) {
+            return $this->_packageInfo['compatible'];
+        }
+        return false;
+    }
+
+    function getDependencies()
+    {
+        if (isset($this->_packageInfo['dependencies'])) {
+            return $this->_packageInfo['dependencies'];
+        }
+        return false;
+    }
+
+    function isSubpackageOf($p)
+    {
+        return $p->isSubpackage($this);
+    }
+
+    /**
+     * Determines whether the passed in package is a subpackage of this package.
+     *
+     * No version checking is done, only name verification.
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     */
+    function isSubpackage($p)
+    {
+        $sub = array();
+        if (isset($this->_packageInfo['dependencies']['required']['subpackage'])) {
+            $sub = $this->_packageInfo['dependencies']['required']['subpackage'];
+            if (!isset($sub[0])) {
+                $sub = array($sub);
+            }
+        }
+        if (isset($this->_packageInfo['dependencies']['optional']['subpackage'])) {
+            $sub1 = $this->_packageInfo['dependencies']['optional']['subpackage'];
+            if (!isset($sub1[0])) {
+                $sub1 = array($sub1);
+            }
+            $sub = array_merge($sub, $sub1);
+        }
+        if (isset($this->_packageInfo['dependencies']['group'])) {
+            $group = $this->_packageInfo['dependencies']['group'];
+            if (!isset($group[0])) {
+                $group = array($group);
+            }
+            foreach ($group as $deps) {
+                if (isset($deps['subpackage'])) {
+                    $sub2 = $deps['subpackage'];
+                    if (!isset($sub2[0])) {
+                        $sub2 = array($sub2);
+                    }
+                    $sub = array_merge($sub, $sub2);
+                }
+            }
+        }
+        foreach ($sub as $dep) {
+            if (strtolower($dep['name']) == strtolower($p->getPackage())) {
+                if (isset($dep['channel'])) {
+                    if (strtolower($dep['channel']) == strtolower($p->getChannel())) {
+                        return true;
+                    }
+                } else {
+                    if ($dep['uri'] == $p->getURI()) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    function dependsOn($package, $channel)
+    {
+        if (!($deps = $this->getDependencies())) {
+            return false;
+        }
+        foreach (array('package', 'subpackage') as $type) {
+            foreach (array('required', 'optional') as $needed) {
+                if (isset($deps[$needed][$type])) {
+                    if (!isset($deps[$needed][$type][0])) {
+                        $deps[$needed][$type] = array($deps[$needed][$type]);
+                    }
+                    foreach ($deps[$needed][$type] as $dep) {
+                        $depchannel = isset($dep['channel']) ? $dep['channel'] : '__uri';
+                        if (strtolower($dep['name']) == strtolower($package) &&
+                              $depchannel == $channel) {
+                            return true;
+                        }  
+                    }
+                }
+            }
+            if (isset($deps['group'])) {
+                if (!isset($deps['group'][0])) {
+                    $dep['group'] = array($deps['group']);
+                }
+                foreach ($deps['group'] as $group) {
+                    if (isset($group[$type])) {
+                        if (!is_array($group[$type])) {
+                            $group[$type] = array($group[$type]);
+                        }
+                        foreach ($group[$type] as $dep) {
+                            $depchannel = isset($dep['channel']) ? $dep['channel'] : '__uri';
+                            if (strtolower($dep['name']) == strtolower($package) &&
+                                  $depchannel == $channel) {
+                                return true;
+                            }  
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get the contents of a dependency group
+     * @param string
+     * @return array|false
+     */
+    function getDependencyGroup($name)
+    {
+        $name = strtolower($name);
+        if (!isset($this->_packageInfo['dependencies']['group'])) {
+            return false;
+        }
+        $groups = $this->_packageInfo['dependencies']['group'];
+        if (!isset($groups[0])) {
+            $groups = array($groups);
+        }
+        foreach ($groups as $group) {
+            if (strtolower($group['attribs']['name']) == $name) {
+                return $group;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Retrieve a partial package.xml 1.0 representation of dependencies
+     *
+     * a very limited representation of dependencies is returned by this method.
+     * The <exclude> tag for excluding certain versions of a dependency is
+     * completely ignored.  In addition, dependency groups are ignored, with the
+     * assumption that all dependencies in dependency groups are also listed in
+     * the optional group that work with all dependency groups
+     * @param boolean return package.xml 2.0 <dependencies> tag
+     * @return array|false
+     */
+    function getDeps($raw = false, $nopearinstaller = false)
+    {
+        if (isset($this->_packageInfo['dependencies'])) {
+            if ($raw) {
+                return $this->_packageInfo['dependencies'];
+            }
+            $ret = array();
+            $map = array(
+                'php' => 'php',
+                'package' => 'pkg',
+                'subpackage' => 'pkg',
+                'extension' => 'ext',
+                'os' => 'os',
+                'pearinstaller' => 'pkg',
+                );
+            foreach (array('required', 'optional') as $type) {
+                $optional = ($type == 'optional') ? 'yes' : 'no';
+                if (!isset($this->_packageInfo['dependencies'][$type])) {
+                    continue;
+                }
+                foreach ($this->_packageInfo['dependencies'][$type] as $dtype => $deps) {
+                    if ($dtype == 'pearinstaller' && $nopearinstaller) {
+                        continue;
+                    }
+                    if (!isset($deps[0])) {
+                        $deps = array($deps);
+                    }
+                    foreach ($deps as $dep) {
+                        if (!isset($map[$dtype])) {
+                            // no support for arch type
+                            continue;
+                        }
+                        if ($dtype == 'pearinstaller') {
+                            $dep['name'] = 'PEAR';
+                            $dep['channel'] = 'pear.php.net';
+                        }
+                        $s = array('type' => $map[$dtype]);
+                        if (isset($dep['channel'])) {
+                            $s['channel'] = $dep['channel'];
+                        }
+                        if (isset($dep['uri'])) {
+                            $s['uri'] = $dep['uri'];
+                        }
+                        if (isset($dep['name'])) {
+                            $s['name'] = $dep['name'];
+                        }
+                        if (isset($dep['conflicts'])) {
+                            $s['rel'] = 'not';
+                        } else {
+                            if (!isset($dep['min']) &&
+                                  !isset($dep['max'])) {
+                                $s['rel'] = 'has';
+                            } elseif (isset($dep['min']) &&
+                                  isset($dep['max'])) {
+                                $s['rel'] = 'ge';
+                                $s1 = $s;
+                                $s1['rel'] = 'le';
+                                $s['version'] = $dep['min'];
+                                $s1['version'] = $dep['max'];
+                                if (isset($dep['channel'])) {
+                                    $s1['channel'] = $dep['channel'];
+                                }
+                                if ($dtype != 'php') {
+                                    $s['name'] = $dep['name'];
+                                    $s1['name'] = $dep['name'];
+                                }
+                                $s['optional'] = $optional;
+                                $s1['optional'] = $optional;
+                                $ret[] = $s1;
+                            } elseif (isset($dep['min'])) {
+                                $s['rel'] = 'ge';
+                                $s['version'] = $dep['min'];
+                                $s['optional'] = $optional;
+                                if ($dtype != 'php') {
+                                    $s['name'] = $dep['name'];
+                                }
+                            } elseif (isset($dep['max'])) {
+                                $s['rel'] = 'le';
+                                $s['version'] = $dep['max'];
+                                $s['optional'] = $optional;
+                                if ($dtype != 'php') {
+                                    $s['name'] = $dep['name'];
+                                }
+                            }
+                        }
+                        $ret[] = $s;
+                    }
+                }
+            }
+            if (count($ret)) {
+                return $ret;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @return php|extsrc|extbin|bundle|false
+     */
+    function getPackageType()
+    {
+        if (isset($this->_packageInfo['phprelease'])) {
+            return 'php';
+        }
+        if (isset($this->_packageInfo['extsrcrelease'])) {
+            return 'extsrc';
+        }
+        if (isset($this->_packageInfo['extbinrelease'])) {
+            return 'extbin';
+        }
+        if (isset($this->_packageInfo['bundle'])) {
+            return 'bundle';
+        }
+        return false;
+    }
+
+    /**
+     * @return array|false
+     */
+    function getReleases()
+    {
+        $type = $this->getPackageType();
+        if ($type != 'bundle') {
+            $type .= 'release';
+        }
+        if ($this->getPackageType() && isset($this->_packageInfo[$type])) {
+            return $this->_packageInfo[$type];
+        }
+        return false;
+    }
+
+    /**
+     * @return array
+     */
+    function getChangelog()
+    {
+        if (isset($this->_packageInfo['changelog'])) {
+            return $this->_packageInfo['changelog'];
+        }
+        return false;
+    }
+
+    function hasDeps()
+    {
+        return isset($this->_packageInfo['dependencies']);
+    }
+
+    function getPackagexmlVersion()
+    {
+        return '2.0';
+    }
+
+    /**
+     * @return array|false
+     */
+    function getSourcePackage()
+    {
+        if (isset($this->_packageInfo['extbinrelease'])) {
+            return array('channel' => $this->_packageInfo['srcchannel'],
+                         'package' => $this->_packageInfo['srcpackage']);
+        }
+        return false;
+    }
+
+    function getBundledPackages()
+    {
+        if (isset($this->_packageInfo['bundle'])) {
+            return $this->_packageInfo['contents']['bundledpackage'];
+        }
+        return false;
+    }
+
+    function getLastModified()
+    {
+        if (isset($this->_packageInfo['_lastmodified'])) {
+            return $this->_packageInfo['_lastmodified'];
+        }
+        return false;
+    }
+
+    /**
+     * Get the contents of a file listed within the package.xml
+     * @param string
+     * @return string
+     */
+    function getFileContents($file)
+    {
+        if ($this->_archiveFile == $this->_packageFile) { // unpacked
+            $dir = dirname($this->_packageFile);
+            $file = $dir . DIRECTORY_SEPARATOR . $file;
+            $file = str_replace(array('/', '\\'),
+                array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
+            if (file_exists($file) && is_readable($file)) {
+                return implode('', file($file));
+            }
+        } else { // tgz
+            $tar = &new Archive_Tar($this->_archiveFile);
+            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
+            if ($file != 'package.xml' && $file != 'package2.xml') {
+                $file = $this->getPackage() . '-' . $this->getVersion() . '/' . $file;
+            }
+            $file = $tar->extractInString($file);
+            $tar->popErrorHandling();
+            if (PEAR::isError($file)) {
+                return PEAR::raiseError("Cannot locate file '$file' in archive");
+            }
+            return $file;
+        }
+    }
+
+    function &getRW()
+    {
+        if (!class_exists('PEAR_PackageFile_v2_rw')) {
+            require_once 'PEAR/PackageFile/v2/rw.php';
+        }
+        $a = new PEAR_PackageFile_v2_rw;
+        foreach (get_object_vars($this) as $name => $unused) {
+            if (!isset($this->$name)) {
+                continue;
+            }
+            if ($name == '_config' || $name == '_logger'|| $name == '_registry' ||
+                  $name == '_stack') {
+                $a->$name = &$this->$name;
+            } else {
+                $a->$name = $this->$name;
+            }
+        }
+        return $a;
+    }
+
+    function &getDefaultGenerator()
+    {
+        if (!class_exists('PEAR_PackageFile_Generator_v2')) {
+            require_once 'PEAR/PackageFile/Generator/v2.php';
+        }
+        $a = &new PEAR_PackageFile_Generator_v2($this);
+        return $a;
+    }
+
+    function analyzeSourceCode($file, $string = false)
+    {
+        if (!isset($this->_v2Validator)) {
+            if (!class_exists('PEAR_PackageFile_v2_Validator')) {
+                require_once 'PEAR/PackageFile/v2/Validator.php';
+            }
+            $this->_v2Validator = new PEAR_PackageFile_v2_Validator;
+        }
+        return $this->_v2Validator->analyzeSourceCode($file, $string);
+    }
+
+    function validate($state = PEAR_VALIDATE_NORMAL)
+    {
+        if (!isset($this->_packageInfo) || !is_array($this->_packageInfo)) {
+            return false;
+        }
+        if (!isset($this->_v2Validator)) {
+            if (!class_exists('PEAR_PackageFile_v2_Validator')) {
+                require_once 'PEAR/PackageFile/v2/Validator.php';
+            }
+            $this->_v2Validator = new PEAR_PackageFile_v2_Validator;
+        }
+        if (isset($this->_packageInfo['xsdversion'])) {
+            unset($this->_packageInfo['xsdversion']);
+        }
+        return $this->_v2Validator->validate($this, $state);
+    }
+
+    function getTasksNs()
+    {
+        if (!isset($this->_tasksNs)) {
+            if (isset($this->_packageInfo['attribs'])) {
+                foreach ($this->_packageInfo['attribs'] as $name => $value) {
+                    if ($value == 'http://pear.php.net/dtd/tasks-1.0') {
+                        $this->_tasksNs = str_replace('xmlns:', '', $name);
+                        break;
+                    }
+                }
+            }
+        }
+        return $this->_tasksNs;
+    }
+
+    /**
+     * Determine whether a task name is a valid task.  Custom tasks may be defined
+     * using subdirectories by putting a "-" in the name, as in <tasks:mycustom-task>
+     *
+     * Note that this method will auto-load the task class file and test for the existence
+     * of the name with "-" replaced by "_" as in PEAR/Task/mycustom/task.php makes class
+     * PEAR_Task_mycustom_task
+     * @param string
+     * @return boolean
+     */
+    function getTask($task)
+    {
+        $this->getTasksNs();
+        // transform all '-' to '/' and 'tasks:' to '' so tasks:replace becomes replace
+        $task = str_replace(array($this->_tasksNs . ':', '-'), array('', ' '), $task);
+        $task = str_replace(' ', '/', ucwords($task));
+        $ps = (strtolower(substr(PHP_OS, 0, 3)) == 'win') ? ';' : ':';
+        foreach (explode($ps, ini_get('include_path')) as $path) {
+            if (file_exists($path . "/PEAR/Task/$task.php")) {
+                include_once "PEAR/Task/$task.php";
+                $task = str_replace('/', '_', $task);
+                if (class_exists("PEAR_Task_$task")) {
+                    return "PEAR_Task_$task";
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Key-friendly array_splice
+     * @param tagname to splice a value in before
+     * @param mixed the value to splice in
+     * @param string the new tag name
+     */
+    function _ksplice($array, $key, $value, $newkey)
+    {
+        $offset = array_search($key, array_keys($array));
+        $after = array_slice($array, $offset);
+        $before = array_slice($array, 0, $offset);
+        $before[$newkey] = $value;
+        return array_merge($before, $after);
+    }
+
+    /**
+     * @param array a list of possible keys, in the order they may occur
+     * @param mixed contents of the new package.xml tag
+     * @param string tag name
+     * @access private
+     */
+    function _insertBefore($array, $keys, $contents, $newkey)
+    {
+        foreach ($keys as $key) {
+            if (isset($array[$key])) {
+                return $array = $this->_ksplice($array, $key, $contents, $newkey);
+            }
+        }
+        $array[$newkey] = $contents;
+        return $array;
+    }
+
+    /**
+     * @param subsection of {@link $_packageInfo}
+     * @param array|string tag contents
+     * @param array format:
+     * <pre>
+     * array(
+     *   tagname => array(list of tag names that follow this one),
+     *   childtagname => array(list of child tag names that follow this one),
+     * )
+     * </pre>
+     *
+     * This allows construction of nested tags
+     * @access private
+     */
+    function _mergeTag($manip, $contents, $order)
+    {
+        if (count($order)) {
+            foreach ($order as $tag => $curorder) {
+                if (!isset($manip[$tag])) {
+                    // ensure that the tag is set up
+                    $manip = $this->_insertBefore($manip, $curorder, array(), $tag);
+                }
+                if (count($order) > 1) {
+                    $manip[$tag] = $this->_mergeTag($manip[$tag], $contents, array_slice($order, 1));
+                    return $manip;
+                }
+            }
+        } else {
+            return $manip;
+        }
+        if (is_array($manip[$tag]) && !empty($manip[$tag]) && isset($manip[$tag][0])) {
+            $manip[$tag][] = $contents;
+        } else {
+            if (!count($manip[$tag])) {
+                $manip[$tag] = $contents;
+            } else {
+                $manip[$tag] = array($manip[$tag]);
+                $manip[$tag][] = $contents;
+            }
+        }
+        return $manip;
+    }
+}
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/PackageFile.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/PackageFile.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,436 @@
+<?php
+/**
+ * PEAR_PackageFile, package.xml parsing utility class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: PackageFile.php,v 1.32 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * needed for PEAR_VALIDATE_* constants
+ */
+require_once 'PEAR/Validate.php';
+/**
+ * Error code if the package.xml <package> tag does not contain a valid version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_PACKAGEVERSION', 1);
+/**
+ * Error code if the package.xml <package> tag version is not supported (version 1.0 and 1.1 are the only supported versions,
+ * currently
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2);
+/**
+ * Abstraction for the package.xml package description file
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile
+{
+    /**
+     * @var PEAR_Config
+     */
+    var $_config;
+    var $_debug;
+    /**
+     * Temp directory for uncompressing tgz files.
+     * @var string|false
+     */
+    var $_tmpdir;
+    var $_logger = false;
+    /**
+     * @var boolean
+     */
+    var $_rawReturn = false;
+
+    /**
+     *
+     * @param   PEAR_Config $config
+     * @param   ?   $debug
+     * @param   string @tmpdir Optional temporary directory for uncompressing
+     *          files
+     */
+    function PEAR_PackageFile(&$config, $debug = false, $tmpdir = false)
+    {
+        $this->_config = $config;
+        $this->_debug = $debug;
+        $this->_tmpdir = $tmpdir;
+    }
+
+    /**
+     * Turn off validation - return a parsed package.xml without checking it
+     *
+     * This is used by the package-validate command
+     */
+    function rawReturn()
+    {
+        $this->_rawReturn = true;
+    }
+
+    function setLogger(&$l)
+    {
+        $this->_logger = &$l;
+    }
+
+    /**
+     * Create a PEAR_PackageFile_Parser_v* of a given version.
+     * @param   int $version
+     * @return  PEAR_PackageFile_Parser_v1|PEAR_PackageFile_Parser_v1
+     */
+    function &parserFactory($version)
+    {
+        if (!in_array($version{0}, array('1', '2'))) {
+            $a = false;
+            return $a;
+        }
+        include_once 'PEAR/PackageFile/Parser/v' . $version{0} . '.php';
+        $version = $version{0};
+        $class = "PEAR_PackageFile_Parser_v$version";
+        $a = new $class;
+        return $a;
+    }
+
+    /**
+     * For simpler unit-testing
+     * @return string
+     */
+    function getClassPrefix()
+    {
+        return 'PEAR_PackageFile_v';
+    }
+
+    /**
+     * Create a PEAR_PackageFile_v* of a given version.
+     * @param   int $version
+     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v1
+     */
+    function &factory($version)
+    {
+        if (!in_array($version{0}, array('1', '2'))) {
+            $a = false;
+            return $a;
+        }
+        include_once 'PEAR/PackageFile/v' . $version{0} . '.php';
+        $version = $version{0};
+        $class = $this->getClassPrefix() . $version;
+        $a = new $class;
+        return $a;
+    }
+
+    /**
+     * Create a PEAR_PackageFile_v* from its toArray() method
+     *
+     * WARNING: no validation is performed, the array is assumed to be valid,
+     * always parse from xml if you want validation.
+     * @param   array $arr
+     * @return PEAR_PackageFileManager_v1|PEAR_PackageFileManager_v2
+     * @uses    factory() to construct the returned object.
+     */
+    function &fromArray($arr)
+    {
+        if (isset($arr['xsdversion'])) {
+            $obj = &$this->factory($arr['xsdversion']);
+            if ($this->_logger) {
+                $obj->setLogger($this->_logger);
+            }
+            $obj->setConfig($this->_config);
+            $obj->fromArray($arr);
+            return $obj;
+        } else {
+            if (isset($arr['package']['attribs']['version'])) {
+                $obj = &$this->factory($arr['package']['attribs']['version']);
+            } else {
+                $obj = &$this->factory('1.0');
+            }
+            if ($this->_logger) {
+                $obj->setLogger($this->_logger);
+            }
+            $obj->setConfig($this->_config);
+            $obj->fromArray($arr);
+            return $obj;
+        }
+    }
+
+    /**
+     * Create a PEAR_PackageFile_v* from an XML string.
+     * @access  public
+     * @param   string $data contents of package.xml file
+     * @param   int $state package state (one of PEAR_VALIDATE_* constants)
+     * @param   string $file full path to the package.xml file (and the files
+     *          it references)
+     * @param   string $archive optional name of the archive that the XML was
+     *          extracted from, if any
+     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @uses    parserFactory() to construct a parser to load the package.
+     */
+    function &fromXmlString($data, $state, $file, $archive = false)
+    {
+        if (preg_match('/<package[^>]+version="([0-9]+\.[0-9]+)"/', $data, $packageversion)) {
+            if (!in_array($packageversion[1], array('1.0', '2.0'))) {
+                return PEAR::raiseError('package.xml version "' . $packageversion[1] .
+                    '" is not supported, only 1.0 and 2.0 are supported.');
+            }
+            $object = &$this->parserFactory($packageversion[1]);
+            if ($this->_logger) {
+                $object->setLogger($this->_logger);
+            }
+            $object->setConfig($this->_config);
+            $pf = $object->parse($data, $file, $archive);
+            if (PEAR::isError($pf)) {
+                return $pf;
+            }
+            if ($this->_rawReturn) {
+                return $pf;
+            }
+            if ($pf->validate($state)) {
+                if ($this->_logger) {
+                    if ($pf->getValidationWarnings(false)) {
+                        foreach ($pf->getValidationWarnings() as $warning) {
+                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);
+                        }
+                    }
+                }
+                if (method_exists($pf, 'flattenFilelist')) {
+                    $pf->flattenFilelist(); // for v2
+                }
+                return $pf;
+            } else {
+                if ($this->_config->get('verbose') > 0) {
+                    if ($this->_logger) {
+                        if ($pf->getValidationWarnings(false)) {
+                            foreach ($pf->getValidationWarnings(false) as $warning) {
+                                $this->_logger->log(0, 'ERROR: ' . $warning['message']);
+                            }
+                        }
+                    }
+                }
+                $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',
+                    2, null, null, $pf->getValidationWarnings());
+                return $a;
+            }
+        } elseif (preg_match('/<package[^>]+version="([^"]+)"/', $data, $packageversion)) {
+            $a = PEAR::raiseError('package.xml file "' . $file .
+                '" has unsupported package.xml <package> version "' . $packageversion[1] . '"');
+            return $a;
+        } else {
+            if (!class_exists('PEAR_ErrorStack')) {
+                require_once 'PEAR/ErrorStack.php';
+            }
+            PEAR_ErrorStack::staticPush('PEAR_PackageFile',
+                PEAR_PACKAGEFILE_ERROR_NO_PACKAGEVERSION,
+                'warning', array('xml' => $data), 'package.xml "' . $file .
+                    '" has no package.xml <package> version');
+            $object = &$this->parserFactory('1.0');
+            $object->setConfig($this->_config);
+            $pf = $object->parse($data, $file, $archive);
+            if (PEAR::isError($pf)) {
+                return $pf;
+            }
+            if ($this->_rawReturn) {
+                return $pf;
+            }
+            if ($pf->validate($state)) {
+                if ($this->_logger) {
+                    if ($pf->getValidationWarnings(false)) {
+                        foreach ($pf->getValidationWarnings() as $warning) {
+                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);
+                        }
+                    }
+                }
+                if (method_exists($pf, 'flattenFilelist')) {
+                    $pf->flattenFilelist(); // for v2
+                }
+                return $pf;
+            } else {
+                $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',
+                    2, null, null, $pf->getValidationWarnings());
+                return $a;
+            }
+        }
+    }
+
+    /**
+     * Register a temporary file or directory.  When the destructor is
+     * executed, all registered temporary files and directories are
+     * removed.
+     *
+     * @param string  $file  name of file or directory
+     * @return  void
+     */
+    function addTempFile($file)
+    {
+        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
+    }
+
+    /**
+     * Create a PEAR_PackageFile_v* from a compresed Tar or Tgz file.
+     * @access  public
+     * @param string contents of package.xml file
+     * @param int package state (one of PEAR_VALIDATE_* constants)
+     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @using   Archive_Tar to extract the files
+     * @using   fromPackageFile() to load the package after the package.xml
+     *          file is extracted.
+     */
+    function &fromTgzFile($file, $state)
+    {
+        if (!class_exists('Archive_Tar')) {
+            require_once 'Archive/Tar.php';
+        }
+        $tar = new Archive_Tar($file);
+        if ($this->_debug <= 1) {
+            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
+        }
+        $content = $tar->listContent();
+        if ($this->_debug <= 1) {
+            $tar->popErrorHandling();
+        }
+        if (!is_array($content)) {
+            if (is_string($file) && strlen($file < 255) && !@is_file($file)) {
+                $ret = PEAR::raiseError("could not open file \"$file\"");
+                return $ret;
+            }
+            $file = realpath($file);
+            $ret = PEAR::raiseError("Could not get contents of package \"$file\"".
+                                     '. Invalid tgz file.');
+            return $ret;
+        } else {
+            if (!count($content) && !@is_file($file)) {
+                $ret = PEAR::raiseError("could not open file \"$file\"");
+                return $ret;
+            }
+        }
+        $xml = null;
+        $origfile = $file;
+        foreach ($content as $file) {
+            $name = $file['filename'];
+            if ($name == 'package2.xml') { // allow a .tgz to distribute both versions
+                $xml = $name;
+                break;
+            }
+            if ($name == 'package.xml') {
+                $xml = $name;
+                break;
+            } elseif (ereg('package.xml$', $name, $match)) {
+                $xml = $match[0];
+                break;
+            }
+        }
+        if ($this->_tmpdir) {
+            $tmpdir = $this->_tmpdir;
+        } else {
+            $tmpdir = System::mkTemp(array('-d', 'pear'));
+            PEAR_PackageFile::addTempFile($tmpdir);
+        }
+        if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
+            $ret = PEAR::raiseError('could not extract the package.xml file from "' .
+                $origfile . '"');
+            return $ret;
+        }
+        $ret = &PEAR_PackageFile::fromPackageFile("$tmpdir/$xml", $state, $origfile);
+        return $ret;
+    }
+
+    /**
+     * Create a PEAR_PackageFile_v* from a package.xml file.
+     *
+     * @access public
+     * @param   string  $descfile  name of package xml file
+     * @param   int     $state package state (one of PEAR_VALIDATE_* constants)
+     * @param   string|false $archive name of the archive this package.xml came
+     *          from, if any
+     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @uses    PEAR_PackageFile::fromXmlString to create the oject after the
+     *          XML is loaded from the package.xml file.
+     */
+    function &fromPackageFile($descfile, $state, $archive = false)
+    {
+        if (is_string($descfile) && strlen($descfile) < 255 &&
+             !@is_file($descfile) || !is_readable($descfile) ||
+             (!$fp = @fopen($descfile, 'r'))) {
+            $a = PEAR::raiseError("Unable to open $descfile");
+            return $a;
+        }
+
+        // read the whole thing so we only get one cdata callback
+        // for each block of cdata
+        if (function_exists('file_get_contents')) {
+            @fclose($fp);
+            $data = file_get_contents($descfile);
+        } else {
+            $data = '';
+            while (!feof($fp)) {
+                $data .= @fread($fp, 8192);
+            }
+            fclose($fp);
+        }
+        $ret = &PEAR_PackageFile::fromXmlString($data, $state, $descfile, $archive);
+        return $ret;
+    }
+
+
+    /**
+     * Create a PEAR_PackageFile_v* from a .tgz archive or package.xml file.
+     *
+     * This method is able to extract information about a package from a .tgz
+     * archive or from a XML package definition file.
+     *
+     * @access public
+     * @param   string  $info file name
+     * @param   int     $state package state (one of PEAR_VALIDATE_* constants)
+     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @uses    fromPackageFile() if the file appears to be XML
+     * @uses    fromTgzFile() to load all non-XML files
+     */
+    function &fromAnyFile($info, $state)
+    {
+        $fp = false;
+        if (is_string($info) && strlen($info) < 255 &&
+             (file_exists($info) || ($fp = @fopen($info, 'r')))) {
+            if ($fp) {
+                fclose($fp);
+            }
+            $tmp = substr($info, -4);
+            if ($tmp == '.xml') {
+                $info = &PEAR_PackageFile::fromPackageFile($info, $state);
+            } elseif ($tmp == '.tar' || $tmp == '.tgz') {
+                $info = &PEAR_PackageFile::fromTgzFile($info, $state);
+            } else {
+                $fp = fopen($info, "r");
+                $test = fread($fp, 5);
+                fclose($fp);
+                if ($test == "<?xml") {
+                    $info = &PEAR_PackageFile::fromPackageFile($info, $state);
+                } else {
+                    $info = &PEAR_PackageFile::fromTgzFile($info, $state);
+                }
+            }
+        } else {
+            $info = PEAR::raiseError("Cannot open '$info' for parsing");
+            return $info;
+        }
+        return $info;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Packager.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Packager.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Packager.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Packager.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,148 +1,180 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net>                                   |
-// |          Tomas V.V.Cox <cox@idecnet.com>                             |
-// +----------------------------------------------------------------------+
-//
-// $Id: Packager.php,v 1.53 2004/06/13 14:06:01 pajoye Exp $
+/**
+ * PEAR_Packager for generating releases
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Packager.php,v 1.68 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**
+ * base class
+ */
 require_once 'PEAR/Common.php';
+require_once 'PEAR/PackageFile.php';
 require_once 'System.php';
 
 /**
  * Administration class used to make a PEAR release tarball.
  *
- * TODO:
- *  - add an extra param the dir where to place the created package
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@php.net>
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Packager extends PEAR_Common
 {
-    // {{{ constructor
-
-    function PEAR_Packager()
-    {
-        parent::PEAR_Common();
-    }
-
-    // }}}
-    // {{{ destructor
-
-    function _PEAR_Packager()
-    {
-        parent::_PEAR_Common();
-    }
-
-    // }}}
-
+    /**
+     * @var PEAR_Registry
+     */
+    var $_registry;
     // {{{ package()
 
-    function package($pkgfile = null, $compress = true)
+    function package($pkgfile = null, $compress = true, $pkg2 = null)
     {
         // {{{ validate supplied package.xml file
         if (empty($pkgfile)) {
             $pkgfile = 'package.xml';
         }
-        // $this->pkginfo gets populated inside
-        $pkginfo = $this->infoFromDescriptionFile($pkgfile);
-        if (PEAR::isError($pkginfo)) {
-            return $this->raiseError($pkginfo);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $pkg = &new PEAR_PackageFile($this->config, $this->debug);
+        $pf = &$pkg->fromPackageFile($pkgfile, PEAR_VALIDATE_NORMAL);
+        $main = &$pf;
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($pf)) {
+            if (is_array($pf->getUserInfo())) {
+                foreach ($pf->getUserInfo() as $error) {
+                    $this->log(0, 'Error: ' . $error['message']);
+                }
+            }
+            $this->log(0, $pf->getMessage());
+            return $this->raiseError("Cannot package, errors in package file");
+        } else {
+            foreach ($pf->getValidationWarnings() as $warning) {
+                $this->log(1, 'Warning: ' . $warning['message']);
+            }
         }
 
-        $pkgdir = dirname(realpath($pkgfile));
-        $pkgfile = basename($pkgfile);
-
-        $errors = $warnings = array();
-        $this->validatePackageInfo($pkginfo, $errors, $warnings, $pkgdir);
-        foreach ($warnings as $w) {
-            $this->log(1, "Warning: $w");
-        }
-        foreach ($errors as $e) {
-            $this->log(0, "Error: $e");
-        }
-        if (sizeof($errors) > 0) {
-            return $this->raiseError('Errors in package');
-        }
         // }}}
-
-        $pkgver = $pkginfo['package'] . '-' . $pkginfo['version'];
-
-        // {{{ Create the package file list
-        $filelist = array();
-        $i = 0;
-
-        foreach ($pkginfo['filelist'] as $fname => $atts) {
-            $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
-            if (!file_exists($file)) {
-                return $this->raiseError("File does not exist: $fname");
+        if ($pkg2) {
+            $this->log(0, 'Attempting to process the second package file');
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            $pf2 = &$pkg->fromPackageFile($pkg2, PEAR_VALIDATE_NORMAL);
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($pf2)) {
+                if (is_array($pf2->getUserInfo())) {
+                    foreach ($pf2->getUserInfo() as $error) {
+                        $this->log(0, 'Error: ' . $error['message']);
+                    }
+                }
+                $this->log(0, $pf2->getMessage());
+                return $this->raiseError("Cannot package, errors in second package file");
             } else {
-                $filelist[$i++] = $file;
-                if (empty($pkginfo['filelist'][$fname]['md5sum'])) {
-                    $md5sum = md5_file($file);
-                    $pkginfo['filelist'][$fname]['md5sum'] = $md5sum;
+                foreach ($pf2->getValidationWarnings() as $warning) {
+                    $this->log(1, 'Warning: ' . $warning['message']);
                 }
-                $this->log(2, "Adding file $fname");
+            }
+            if ($pf2->getPackagexmlVersion() == '2.0') {
+                $main = &$pf2;
+                $other = &$pf;
+            } else {
+                $main = &$pf;
+                $other = &$pf2;
+            }
+            if ($main->getPackagexmlVersion() != '2.0') {
+                return PEAR::raiseError('Error: cannot package two package.xml version 1.0, can ' .
+                    'only package together a package.xml 1.0 and package.xml 2.0');
+            }
+            if ($other->getPackagexmlVersion() != '1.0') {
+                return PEAR::raiseError('Error: cannot package two package.xml version 2.0, can ' .
+                    'only package together a package.xml 1.0 and package.xml 2.0');
             }
         }
-        // }}}
-
-        // {{{ regenerate package.xml
-        $new_xml = $this->xmlFromInfo($pkginfo);
-        if (PEAR::isError($new_xml)) {
-            return $this->raiseError($new_xml);
-        }
-        if (!($tmpdir = System::mktemp(array('-d')))) {
-            return $this->raiseError("PEAR_Packager: mktemp failed");
-        }
-        $newpkgfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
-        $np = @fopen($newpkgfile, 'wb');
-        if (!$np) {
-            return $this->raiseError("PEAR_Packager: unable to rewrite $pkgfile as $newpkgfile");
+        $main->setLogger($this);
+        if (!$main->validate(PEAR_VALIDATE_PACKAGING)) {
+            foreach ($main->getValidationWarnings() as $warning) {
+                $this->log(0, 'Error: ' . $warning['message']);
+            }
+            return $this->raiseError("Cannot package, errors in package");
+        } else {
+            foreach ($main->getValidationWarnings() as $warning) {
+                $this->log(1, 'Warning: ' . $warning['message']);
+            }
         }
-        fwrite($np, $new_xml);
-        fclose($np);
-        // }}}
-
-        // {{{ TAR the Package -------------------------------------------
-        $ext = $compress ? '.tgz' : '.tar';
-        $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
-        $tar =& new Archive_Tar($dest_package, $compress);
-        $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors
-        // ----- Creates with the package.xml file
-        $ok = $tar->createModify(array($newpkgfile), '', $tmpdir);
-        if (PEAR::isError($ok)) {
-            return $this->raiseError($ok);
-        } elseif (!$ok) {
-            return $this->raiseError('PEAR_Packager: tarball creation failed');
-        }
-        // ----- Add the content of the package
-        if (!$tar->addModify($filelist, $pkgver, $pkgdir)) {
-            return $this->raiseError('PEAR_Packager: tarball creation failed');
-        }
-        $this->log(1, "Package $dest_package done");
-        if (file_exists("$pkgdir/CVS/Root")) {
-            $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pkginfo['version']);
-            $cvstag = "RELEASE_$cvsversion";
-            $this->log(1, "Tag the released code with `pear cvstag $pkgfile'");
-            $this->log(1, "(or set the CVS tag $cvstag by hand)");
+        if ($pkg2) {
+            $other->setLogger($this);
+            $a = false;
+            if (!$other->validate(PEAR_VALIDATE_NORMAL) || $a = !$main->isEquivalent($other)) {
+                foreach ($other->getValidationWarnings() as $warning) {
+                    $this->log(0, 'Error: ' . $warning['message']);
+                }
+                foreach ($main->getValidationWarnings() as $warning) {
+                    $this->log(0, 'Error: ' . $warning['message']);
+                }
+                if ($a) {
+                    return $this->raiseError('The two package.xml files are not equivalent!');
+                }
+                return $this->raiseError("Cannot package, errors in package");
+            } else {
+                foreach ($other->getValidationWarnings() as $warning) {
+                    $this->log(1, 'Warning: ' . $warning['message']);
+                }
+            }
+            $gen = &$main->getDefaultGenerator();
+            $tgzfile = $gen->toTgz2($this, $other, $compress);
+            if (PEAR::isError($tgzfile)) {
+                return $tgzfile;
+            }
+            $dest_package = basename($tgzfile);
+            $pkgdir = dirname($pkgfile);
+    
+            // TAR the Package -------------------------------------------
+            $this->log(1, "Package $dest_package done");
+            if (file_exists("$pkgdir/CVS/Root")) {
+                $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pf->getVersion());
+                $cvstag = "RELEASE_$cvsversion";
+                $this->log(1, 'Tag the released code with "pear cvstag ' .
+                    $main->getPackageFile() . '"');
+                $this->log(1, "(or set the CVS tag $cvstag by hand)");
+            }
+        } else { // this branch is executed for single packagefile packaging
+            $gen = &$pf->getDefaultGenerator();
+            $tgzfile = $gen->toTgz($this, $compress);
+            if (PEAR::isError($tgzfile)) {
+                $this->log(0, $tgzfile->getMessage());
+                return $this->raiseError("Cannot package, errors in package");
+            }
+            $dest_package = basename($tgzfile);
+            $pkgdir = dirname($pkgfile);
+    
+            // TAR the Package -------------------------------------------
+            $this->log(1, "Package $dest_package done");
+            if (file_exists("$pkgdir/CVS/Root")) {
+                $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pf->getVersion());
+                $cvstag = "RELEASE_$cvsversion";
+                $this->log(1, "Tag the released code with `pear cvstag $pkgfile'");
+                $this->log(1, "(or set the CVS tag $cvstag by hand)");
+            }
         }
-        // }}}
-
         return $dest_package;
     }
 
@@ -155,8 +187,13 @@
         if (!$fd = @fopen($file, 'r')) {
             return false;
         }
-        $md5 = md5(fread($fd, filesize($file)));
-        fclose($fd);
+        if (function_exists('file_get_contents')) {
+            fclose($fd);
+            $md5 = md5(file_get_contents($file));
+        } else {
+            $md5 = md5(fread($fd, filesize($file)));
+            fclose($fd);
+        }
         return $md5;
     }
 }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Registry.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Registry.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Registry.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Registry.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,45 +1,62 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// |         Tomas V.V.Cox <cox@idecnet.com>                              |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Registry.php,v 1.50.4.3 2004/10/26 19:19:56 cellog Exp $
-
-/*
-TODO:
-    - Transform into singleton()
-    - Add application level lock (avoid change the registry from the cmdline
-      while using the GTK interface, for ex.)
-*/
-require_once "System.php";
-require_once "PEAR.php";
+/**
+ * PEAR_Registry
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Registry.php,v 1.145 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * for PEAR_Error
+ */
+require_once 'PEAR.php';
+require_once 'PEAR/DependencyDB.php';
 
 define('PEAR_REGISTRY_ERROR_LOCK',   -2);
 define('PEAR_REGISTRY_ERROR_FORMAT', -3);
 define('PEAR_REGISTRY_ERROR_FILE',   -4);
+define('PEAR_REGISTRY_ERROR_CONFLICT', -5);
+define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
 
 /**
  * Administration class used to maintain the installed package database.
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V. V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Registry extends PEAR
 {
     // {{{ properties
 
+    /**
+     * File containing all channel information.
+     * @var string
+     */
+    var $channels = '';
+
     /** Directory where registry files are stored.
      * @var string
      */
@@ -50,6 +67,11 @@
      */
     var $filemap = '';
 
+    /** Directory where registry files for channels are stored.
+     * @var string
+     */
+    var $channelsdir = '';
+
     /** Name of file used for locking the registry
      * @var string
      */
@@ -79,6 +101,25 @@
      */
     var $filemap_cache = array();
 
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_pearChannel;
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_peclChannel;
+
+    /**
+     * @var PEAR_DependencyDB
+     */
+    var $_dependencyDB;
+
+    /**
+     * @var PEAR_Config
+     */
+    var $_config;
     // }}}
 
     // {{{ constructor
@@ -87,22 +128,130 @@
      * PEAR_Registry constructor.
      *
      * @param string (optional) PEAR install directory (for .php files)
+     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PEAR channel, if
+     *        default values are not desired.  Only used the very first time a PEAR
+     *        repository is initialized
+     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PECL channel, if
+     *        default values are not desired.  Only used the very first time a PEAR
+     *        repository is initialized
      *
      * @access public
      */
-    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR)
+    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,
+                           $pecl_channel = false)
     {
         parent::PEAR();
         $ds = DIRECTORY_SEPARATOR;
         $this->install_dir = $pear_install_dir;
+        $this->channelsdir = $pear_install_dir.$ds.'.channels';
         $this->statedir = $pear_install_dir.$ds.'.registry';
         $this->filemap  = $pear_install_dir.$ds.'.filemap';
         $this->lockfile = $pear_install_dir.$ds.'.lock';
+        $this->_pearChannel = $pear_channel;
+        $this->_peclChannel = $pecl_channel;
+        $this->_config = false;
+    }
+
+    function hasWriteAccess()
+    {
+        if (!@file_exists($this->install_dir)) {
+            $dir = $this->install_dir;
+            while ($dir && $dir != '.') {
+                $dir = dirname($dir); // cd ..
+                if ($dir != '.' && @file_exists($dir)) {
+                    if (@is_writeable($dir)) {
+                        return true;
+                    } else {
+                        return false;
+                    }
+                }
+            }
+            return false;
+        }
+        return @is_writeable($this->install_dir);
+    }
+
+    function setConfig(&$config)
+    {
+        $this->_config = &$config;
+    }
+
+    function _initializeChannelDirs()
+    {
+        static $running = false;
+        if (!$running) {
+            $running = true;
+            $ds = DIRECTORY_SEPARATOR;
+            if (!is_dir($this->channelsdir) ||
+                  !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+                    $pear_channel = $this->_pearChannel;
+                    if (!is_a($pear_channel, 'PEAR_ChannelFile') || !$pear_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'PEAR/ChannelFile.php';
+                        }
+                        $pear_channel = new PEAR_ChannelFile;
+                        $pear_channel->setName('pear.php.net');
+                        $pear_channel->setAlias('pear');
+                        $pear_channel->setServer('pear.php.net');
+                        $pear_channel->setSummary('PHP Extension and Application Repository');
+                        $pear_channel->setDefaultPEARProtocols();
+                        $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
+                        $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
+                    } else {
+                        $pear_channel->setName('pear.php.net');
+                        $pear_channel->setAlias('pear');
+                    }
+                    $pear_channel->validate();
+                    $this->_addChannel($pear_channel);
+                }
+                if (!file_exists($this->channelsdir . $ds . 'pecl.php.net.reg')) {
+                    $pecl_channel = $this->_peclChannel;
+                    if (!is_a($pecl_channel, 'PEAR_ChannelFile') || !$pecl_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'PEAR/ChannelFile.php';
+                        }
+                        $pecl_channel = new PEAR_ChannelFile;
+                        $pecl_channel->setName('pecl.php.net');
+                        $pecl_channel->setAlias('pecl');
+                        $pecl_channel->setServer('pecl.php.net');
+                        $pecl_channel->setSummary('PHP Extension Community Library');
+                        $pecl_channel->setDefaultPEARProtocols();
+                        $pecl_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
+                        $pecl_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
+                        $pecl_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
+                    } else {
+                        $pecl_channel->setName('pecl.php.net');
+                        $pecl_channel->setAlias('pecl');
+                    }
+                    $pecl_channel->validate();
+                    $this->_addChannel($pecl_channel);
+                }
+                if (!file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                    if (!class_exists('PEAR_ChannelFile')) {
+                        require_once 'PEAR/ChannelFile.php';
+                    }
+                    $private = new PEAR_ChannelFile;
+                    $private->setName('__uri');
+                    $private->addFunction('xmlrpc', '1.0', '****');
+                    $private->setSummary('Pseudo-channel for static packages');
+                    $this->_addChannel($private);
+                }
+                $this->_rebuildFileMap();
+            }
+            $running = false;
+        }
+    }
 
+    function _initializeDirs()
+    {
+        $ds = DIRECTORY_SEPARATOR;
         // XXX Compatibility code should be removed in the future
         // rename all registry files if any to lowercase
         if (!OS_WINDOWS && $handle = @opendir($this->statedir)) {
-            $dest = $this->statedir . DIRECTORY_SEPARATOR;
+            $dest = $this->statedir . $ds;
             while (false !== ($file = readdir($handle))) {
                 if (preg_match('/^.*[A-Z].*\.reg$/', $file)) {
                     rename($dest . $file, $dest . strtolower($file));
@@ -110,11 +259,45 @@
             }
             closedir($handle);
         }
+        $this->_initializeChannelDirs();
         if (!file_exists($this->filemap)) {
-            $this->rebuildFileMap();
+            $this->_rebuildFileMap();
         }
+        $this->_initializeDepDB();
     }
 
+    function _initializeDepDB()
+    {
+        if (!isset($this->_dependencyDB)) {
+            static $initializing = false;
+            if (!$initializing) {
+                $initializing = true;
+                if (!$this->_config) { // never used?
+                    if (OS_WINDOWS) {
+                        $file = 'pear.ini';
+                    } else {
+                        $file = '.pearrc';
+                    }
+                    $this->_config = &new PEAR_Config($this->statedir . DIRECTORY_SEPARATOR .
+                        $file);
+                    $this->_config->setRegistry($this);
+                    $this->_config->set('php_dir', $this->install_dir);
+                }
+                $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                if (PEAR::isError($this->_dependencyDB)) {
+                    // attempt to recover by removing the dep db
+                    @unlink($this->_config->get('php_dir', null, 'pear.php.net') .
+                        DIRECTORY_SEPARATOR . '.depdb');
+                    $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                    if (PEAR::isError($this->_dependencyDB)) {
+                        echo $this->_dependencyDB->getMessage();
+                        die('Unrecoverable error');
+                    }
+                }
+                $initializing = false;
+            }
+        }
+    }
     // }}}
     // {{{ destructor
 
@@ -143,12 +326,112 @@
      *
      * @access private
      */
-    function _assertStateDir()
+    function _assertStateDir($channel = false)
     {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_assertChannelStateDir($channel);
+        }
+        static $init = false;
         if (!@is_dir($this->statedir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+            require_once 'System.php';
             if (!System::mkdir(array('-p', $this->statedir))) {
                 return $this->raiseError("could not create directory '{$this->statedir}'");
             }
+            $init = true;
+        }
+        $ds = DIRECTORY_SEPARATOR;
+        if (!@is_dir($this->channelsdir) ||
+              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
+              !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
+              !file_exists($this->channelsdir . $ds . '__uri.reg')) {
+            $init = true;
+        }
+        if ($init) {
+            static $running = false;
+            if (!$running) {
+                $running = true;
+                $this->_initializeDirs();
+                $running = false;
+                $init = false;
+            }
+        } else {
+            $this->_initializeDepDB();
+        }
+        return true;
+    }
+
+    // }}}
+    // {{{ _assertChannelStateDir()
+
+    /**
+     * Make sure the directory where we keep registry files exists for a non-standard channel.
+     *
+     * @param string channel name
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertChannelStateDir($channel)
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+                $this->_initializeChannelDirs();
+            }
+            return $this->_assertStateDir($channel);
+        }
+        $channelDir = $this->_channelDirectoryName($channel);
+        if (!is_dir($this->channelsdir) ||
+              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+            $this->_initializeChannelDirs();
+        }
+        if (!@is_dir($channelDir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $channelDir))) {
+                return $this->raiseError("could not create directory '" . $channelDir .
+                    "'");
+            }
+        }
+        return true;
+    }
+
+    // }}}
+    // {{{ _assertChannelDir()
+
+    /**
+     * Make sure the directory where we keep registry files for channels exists
+     *
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertChannelDir()
+    {
+        if (!@is_dir($this->channelsdir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $this->channelsdir))) {
+                return $this->raiseError("could not create directory '{$this->channelsdir}'");
+            }
+        }
+        if (!@is_dir($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $this->channelsdir . DIRECTORY_SEPARATOR . '.alias'))) {
+                return $this->raiseError("could not create directory '{$this->channelsdir}/.alias'");
+            }
         }
         return true;
     }
@@ -159,24 +442,141 @@
     /**
      * Get the name of the file where data for a given package is stored.
      *
+     * @param string channel name, or false if this is a PEAR package
      * @param string package name
      *
      * @return string registry file name
      *
      * @access public
      */
-    function _packageFileName($package)
+    function _packageFileName($package, $channel = false)
     {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_channelDirectoryName($channel) . DIRECTORY_SEPARATOR .
+                strtolower($package) . '.reg';
+        }
         return $this->statedir . DIRECTORY_SEPARATOR . strtolower($package) . '.reg';
     }
 
     // }}}
+    // {{{ _channelFileName()
+
+    /**
+     * Get the name of the file where data for a given channel is stored.
+     * @param string channel name
+     * @return string registry file name
+     */
+    function _channelFileName($channel, $noaliases = false)
+    {
+        if (!$noaliases) {
+            if (@file_exists($this->_getChannelAliasFileName($channel))) {
+                $channel = implode('', file($this->_getChannelAliasFileName($channel)));
+            }
+        }
+        return $this->channelsdir . DIRECTORY_SEPARATOR . str_replace('/', '_',
+            strtolower($channel)) . '.reg';
+    }
+
+    // }}}
+    // {{{ getChannelAliasFileName()
+
+    /**
+     * @param string
+     * @return string
+     */
+    function _getChannelAliasFileName($alias)
+    {
+        return $this->channelsdir . DIRECTORY_SEPARATOR . '.alias' .
+              DIRECTORY_SEPARATOR . str_replace('/', '_', strtolower($alias)) . '.txt';
+    }
+
+    // }}}
+    // {{{ _getChannelFromAlias()
+
+    /**
+     * Get the name of a channel from its alias
+     */
+    function _getChannelFromAlias($channel)
+    {
+        if (!$this->_channelExists($channel)) {
+            if ($channel == 'pear.php.net') {
+                return 'pear.php.net';
+            }
+            if ($channel == 'pecl.php.net') {
+                return 'pecl.php.net';
+            }
+            if ($channel == '__uri') {
+                return '__uri';
+            }
+            return false;
+        }
+        $channel = strtolower($channel);
+        if (file_exists($this->_getChannelAliasFileName($channel))) {
+            // translate an alias to an actual channel
+            return implode('', file($this->_getChannelAliasFileName($channel)));
+        } else {
+            return $channel;
+        }
+    }    
+    // }}}
+    // {{{ _getChannelFromAlias()
+
+    /**
+     * Get the alias of a channel from its alias or its name
+     */
+    function _getAlias($channel)
+    {
+        if (!$this->_channelExists($channel)) {
+            if ($channel == 'pear.php.net') {
+                return 'pear';
+            }
+            if ($channel == 'pecl.php.net') {
+                return 'pecl';
+            }
+            return false;
+        }
+        $channel = $this->_getChannel($channel);
+        return $channel->getAlias();
+    }    
+    // }}}
+    // {{{ _channelDirectoryName()
+
+    /**
+     * Get the name of the file where data for a given package is stored.
+     *
+     * @param string channel name, or false if this is a PEAR package
+     * @param string package name
+     *
+     * @return string registry file name
+     *
+     * @access public
+     */
+    function _channelDirectoryName($channel)
+    {
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            return $this->statedir;
+        } else {
+            $ch = $this->_getChannelFromAlias($channel);
+            if (!$ch) {
+                $ch = $channel;
+            }
+            return $this->statedir . DIRECTORY_SEPARATOR . strtolower('.channel.' .
+                str_replace('/', '_', $ch));
+        }
+    }
+
+    // }}}
     // {{{ _openPackageFile()
 
-    function _openPackageFile($package, $mode)
+    function _openPackageFile($package, $mode, $channel = false)
     {
-        $this->_assertStateDir();
-        $file = $this->_packageFileName($package);
+        if (!$this->_assertStateDir($channel)) {
+            return null;
+        }
+        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
+            return null;
+        }
+        $file = $this->_packageFileName($package, $channel);
         $fp = @fopen($file, $mode);
         if (!$fp) {
             return null;
@@ -193,32 +593,86 @@
     }
 
     // }}}
-    // {{{ rebuildFileMap()
+    // {{{ _openPackageFile()
+
+    function _openChannelFile($channel, $mode)
+    {
+        if (!$this->_assertChannelDir()) {
+            return null;
+        }
+        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
+            return null;
+        }
+        $file = $this->_channelFileName($channel);
+        $fp = @fopen($file, $mode);
+        if (!$fp) {
+            return null;
+        }
+        return $fp;
+    }
+
+    // }}}
+    // {{{ _closePackageFile()
+
+    function _closeChannelFile($fp)
+    {
+        fclose($fp);
+    }
+
+    // }}}
+    // {{{ _rebuildFileMap()
 
-    function rebuildFileMap()
+    function _rebuildFileMap()
     {
-        $packages = $this->listPackages();
+        if (!class_exists('PEAR_Installer_Role')) {
+            require_once 'PEAR/Installer/Role.php';
+        }
+        $channels = $this->_listAllPackages();
         $files = array();
-        foreach ($packages as $package) {
-            $version = $this->packageInfo($package, 'version');
-            $filelist = $this->packageInfo($package, 'filelist');
-            if (!is_array($filelist)) {
-                continue;
-            }
-            foreach ($filelist as $name => $attrs) {
-                if (isset($attrs['role']) && $attrs['role'] != 'php') {
+        foreach ($channels as $channel => $packages) {
+            foreach ($packages as $package) {
+                $version = $this->_packageInfo($package, 'version', $channel);
+                $filelist = $this->_packageInfo($package, 'filelist', $channel);
+                if (!is_array($filelist)) {
                     continue;
                 }
-                if (isset($attrs['baseinstalldir'])) {
-                    $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
-                } else {
-                    $file = $name;
+                foreach ($filelist as $name => $attrs) {
+                    if (isset($attrs['attribs'])) {
+                        $attrs = $attrs['attribs'];
+                    }
+                    // it is possible for conflicting packages in different channels to
+                    // conflict with data files/doc files
+                    if ($name == 'dirtree') {
+                        continue;
+                    }
+                    if (isset($attrs['role']) && !in_array($attrs['role'],
+                          PEAR_Installer_Role::getInstallableRoles())) {
+                        // these are not installed
+                        continue;
+                    }
+                    if (isset($attrs['role']) && !in_array($attrs['role'],
+                          PEAR_Installer_Role::getBaseinstallRoles())) {
+                        $attrs['baseinstalldir'] = $package;
+                    }
+                    if (isset($attrs['baseinstalldir'])) {
+                        $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
+                    } else {
+                        $file = $name;
+                    }
+                    $file = preg_replace(',^/+,', '', $file);
+                    if ($channel != 'pear.php.net') {
+                        $files[$attrs['role']][$file] = array(strtolower($channel),
+                            strtolower($package));
+                    } else {
+                        $files[$attrs['role']][$file] = strtolower($package);
+                    }
                 }
-                $file = preg_replace(',^/+,', '', $file);
-                $files[$file] = $package;
             }
         }
         $this->_assertStateDir();
+        if (!$this->hasWriteAccess()) {
+            return false;
+        }
         $fp = @fopen($this->filemap, 'wb');
         if (!$fp) {
             return false;
@@ -230,20 +684,26 @@
     }
 
     // }}}
-    // {{{ readFileMap()
+    // {{{ _readFileMap()
 
-    function readFileMap()
+    function _readFileMap()
     {
         $fp = @fopen($this->filemap, 'r');
         if (!$fp) {
-            return $this->raiseError('PEAR_Registry: could not open filemap', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
+            return $this->raiseError('PEAR_Registry: could not open filemap "' . $this->filemap . '"', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
         }
-        $fsize = filesize($this->filemap);
+        clearstatcache();
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
-        $data = fread($fp, $fsize);
+        $fsize = filesize($this->filemap);
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $data = file_get_contents($this->filemap);
+        } else {
+            $data = fread($fp, $fsize);
+            fclose($fp);
+        }
         set_magic_quotes_runtime($rt);
-        fclose($fp);
         $tmp = unserialize($data);
         if (!$tmp && $fsize > 7) {
             return $this->raiseError('PEAR_Registry: invalid filemap data', PEAR_REGISTRY_ERROR_FORMAT, null, null, $data);
@@ -274,8 +734,12 @@
                 // XXX does not check type of lock (LOCK_SH/LOCK_EX)
                 return true;
             }
-            if (PEAR::isError($err = $this->_assertStateDir())) {
-                return $err;
+            if (!$this->_assertStateDir()) {
+                if ($mode == LOCK_EX) {
+                    return $this->raiseError('Registry directory is not writeable by the current user');
+                } else {
+                    return true;
+                }
             }
             $open_mode = 'w';
             // XXX People reported problems with LOCK_SH and 'w'
@@ -324,94 +788,717 @@
     // }}}
     // {{{ _packageExists()
 
-    function _packageExists($package)
+    function _packageExists($package, $channel = false)
     {
-        return file_exists($this->_packageFileName($package));
+        return file_exists($this->_packageFileName($package, $channel));
     }
 
     // }}}
-    // {{{ _packageInfo()
+    // {{{ _channelExists()
 
-    function _packageInfo($package = null, $key = null)
+    /**
+     * Determine whether a channel exists in the registry
+     * @param string Channel name
+     * @param bool if true, then aliases will be ignored
+     * @return boolean
+     */
+    function _channelExists($channel, $noaliases = false)
     {
-        if ($package === null) {
-            return array_map(array($this, '_packageInfo'),
-                             $this->_listPackages());
-        }
-        $fp = $this->_openPackageFile($package, 'r');
-        if ($fp === null) {
-            return null;
-        }
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        $data = fread($fp, filesize($this->_packageFileName($package)));
-        set_magic_quotes_runtime($rt);
-        $this->_closePackageFile($fp);
-        $data = unserialize($data);
-        if ($key === null) {
-            return $data;
+        $a = file_exists($this->_channelFileName($channel, $noaliases));
+        if (!$a && $channel == 'pear.php.net') {
+            return true;
         }
-        if (isset($data[$key])) {
-            return $data[$key];
+        if (!$a && $channel == 'pecl.php.net') {
+            return true;
         }
-        return null;
+        return $a;
     }
 
     // }}}
-    // {{{ _listPackages()
+    // {{{ _addChannel()
 
-    function _listPackages()
+    /**
+     * @param PEAR_ChannelFile Channel object
+     * @param donotuse
+     * @param string Last-Modified HTTP tag from remote request
+     * @return boolean|PEAR_Error True on creation, false if it already exists
+     */
+    function _addChannel($channel, $update = false, $lastmodified = false)
     {
-        $pkglist = array();
-        $dp = @opendir($this->statedir);
-        if (!$dp) {
-            return $pkglist;
+        if (!is_a($channel, 'PEAR_ChannelFile')) {
+            return false;
         }
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
-                continue;
+        if (!$channel->validate()) {
+            return false;
+        }
+        if (file_exists($this->_channelFileName($channel->getName()))) {
+            if (!$update) {
+                return false;
+            }
+            $checker = $this->_getChannel($channel->getName());
+            if ($channel->getAlias() != $checker->getAlias()) {
+                @unlink($this->_getChannelAliasFileName($checker->getAlias()));
+            }
+        } else {
+            if ($update && !in_array($channel->getName(), array('pear.php.net', 'pecl.php.net'))) {
+                return false;
             }
-            $pkglist[] = substr($ent, 0, -4);
         }
-        return $pkglist;
-    }
-
-    // }}}
-
-    // {{{ packageExists()
-
-    function packageExists($package)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        $ret = $this->_assertChannelDir();
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+        $ret = $this->_assertChannelStateDir($channel->getName());
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+        if ($channel->getAlias() != $channel->getName()) {
+            if (file_exists($this->_getChannelAliasFileName($channel->getAlias())) &&
+                  $this->_getChannelFromAlias($channel->getAlias()) != $channel->getName()) {
+                $channel->setAlias($channel->getName());
+            }
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+            $fp = @fopen($this->_getChannelAliasFileName($channel->getAlias()), 'w');
+            if (!$fp) {
+                return false;
+            }
+            fwrite($fp, $channel->getName());
+            fclose($fp);
         }
-        $ret = $this->_packageExists($package);
-        $this->_unlock();
-        return $ret;
+        if (!$this->hasWriteAccess()) {
+            return false;
+        }
+        $fp = @fopen($this->_channelFileName($channel->getName()), 'wb');
+        if (!$fp) {
+            return false;
+        }
+        $info = $channel->toArray();
+        if ($lastmodified) {
+            $info['_lastmodified'] = $lastmodified;
+        } else {
+            $info['_lastmodified'] = date('r');
+        }
+        fwrite($fp, serialize($info));
+        fclose($fp);
+        return true;
     }
 
     // }}}
-    // {{{ packageInfo()
+    // {{{ _deleteChannel()
 
-    function packageInfo($package = null, $key = null)
+    /**
+     * Deletion fails if there are any packages installed from the channel
+     * @param string|PEAR_ChannelFile channel name
+     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
+     */
+    function _deleteChannel($channel)
     {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if (!is_string($channel)) {
+            if (is_a($channel, 'PEAR_ChannelFile')) {
+                if (!$channel->validate()) {
+                    return false;
+                }
+                $channel = $channel->getName();
+            } else {
+                return false;
+            }
+        }
+        if ($this->_getChannelFromAlias($channel) == '__uri') {
+            return false;
+        }
+        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
+            return false;
+        }
+        if (!$this->_channelExists($channel)) {
+            return false;
+        }
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            return false;
+        }
+        $channel = $this->_getChannelFromAlias($channel);
+        if ($channel == 'pear.php.net') {
+            return false;
+        }
+        $test = $this->_listChannelPackages($channel);
+        if (count($test)) {
+            return false;
+        }
+        $test = @rmdir($this->_channelDirectoryName($channel));
+        if (!$test) {
+            return false;
+        }
+        $file = $this->_getChannelAliasFileName($this->_getAlias($channel));
+        if (@file_exists($file)) {
+            $test = @unlink($file);
+            if (!$test) {
+                return false;
+            }
+        }
+        $file = $this->_channelFileName($channel);
+        $ret = @unlink($file);
+        return $ret;
+    }
+
+    // }}}
+    // {{{ _isChannelAlias()
+
+    /**
+     * Determine whether a channel exists in the registry
+     * @param string Channel Alias
+     * @return boolean
+     */
+    function _isChannelAlias($alias)
+    {
+        return file_exists($this->_getChannelAliasFileName($alias));
+    }
+
+    // }}}
+    // {{{ _packageInfo()
+
+    /**
+     * @param string|null
+     * @param string|null
+     * @param string|null
+     * @return array|null
+     * @access private
+     */
+    function _packageInfo($package = null, $key = null, $channel = 'pear.php.net')
+    {
+        if ($package === null) {
+            if ($channel === null) {
+                $channels = $this->_listChannels();
+                $ret = array();
+                foreach ($channels as $channel) {
+                    $channel = strtolower($channel);
+                    $ret[$channel] = array();
+                    $packages = $this->_listPackages($channel);
+                    foreach ($packages as $package) {
+                        $ret[$channel][] = $this->_packageInfo($package, null, $channel);
+                    }
+                }
+                return $ret;
+            }
+            $ps = $this->_listPackages($channel);
+            if (!count($ps)) {
+                return array();
+            }
+            return array_map(array(&$this, '_packageInfo'),
+                             $ps, array_fill(0, count($ps), null),
+                             array_fill(0, count($ps), $channel));
+        }
+        $fp = $this->_openPackageFile($package, 'r', $channel);
+        if ($fp === null) {
+            return null;
+        }
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        if (function_exists('file_get_contents')) {
+            $this->_closePackageFile($fp);
+            $data = file_get_contents($this->_packageFileName($package, $channel));
+        } else {
+            $data = fread($fp, filesize($this->_packageFileName($package, $channel)));
+            $this->_closePackageFile($fp);
+        }
+        set_magic_quotes_runtime($rt);
+        $data = unserialize($data);
+        if ($key === null) {
+            return $data;
+        }
+        // compatibility for package.xml version 2.0
+        if (isset($data['old'][$key])) {
+            return $data['old'][$key];
+        }
+        if (isset($data[$key])) {
+            return $data[$key];
+        }
+        return null;
+    }
+
+    // }}}
+    // {{{ _channelInfo()
+
+    /**
+     * @param string Channel name
+     * @param bool whether to strictly retrieve info of channels, not just aliases
+     * @return array|null
+     */
+    function _channelInfo($channel, $noaliases = false)
+    {
+        if (!$this->_channelExists($channel, $noaliases)) {
+            return null;
+        }
+        $fp = $this->_openChannelFile($channel, 'r');
+        if ($fp === null) {
+            return null;
+        }
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        if (function_exists('file_get_contents')) {
+            $this->_closeChannelFile($fp);
+            $data = file_get_contents($this->_channelFileName($channel));
+        } else {
+            $data = fread($fp, filesize($this->_channelFileName($channel)));
+            $this->_closeChannelFile($fp);
+        }
+        set_magic_quotes_runtime($rt);
+        $data = unserialize($data);
+        return $data;
+    }
+
+    // }}}
+    // {{{ _listChannels()
+
+    function _listChannels()
+    {
+        $channellist = array();
+        $dp = @opendir($this->channelsdir);
+        if (!$dp  || !@is_dir($this->channelsdir)) {
+            return array('pear.php.net', 'pecl.php.net', '__uri');
+        }
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+            $channellist[] = substr($ent, 0, -4);
+        }
+        closedir($dp);
+        if (!in_array('pear.php.net', $channellist)) {
+            $channellist[] = 'pear.php.net';
+        }
+        if (!in_array('pecl.php.net', $channellist)) {
+            $channellist[] = 'pecl.php.net';
+        }
+        if (!in_array('__uri', $channellist)) {
+            $channellist[] = '__uri';
+        }
+        return $channellist;
+    }
+
+    // }}}
+    // {{{ _listPackages()
+
+    function _listPackages($channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_listChannelPackages($channel);
+        }
+        $pkglist = array();
+        $dp = @opendir($this->statedir);
+        if (!$dp) {
+            return $pkglist;
+        }
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+            $pkglist[] = substr($ent, 0, -4);
+        }
+        closedir($dp);
+        return $pkglist;
+    }
+
+    // }}}
+    // {{{ _listChannelPackages()
+
+    function _listChannelPackages($channel)
+    {
+        $pkglist = array();
+        $dp = @opendir($this->_channelDirectoryName($channel));
+        if (!$dp) {
+            return $pkglist;
+        }
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+            $pkglist[] = substr($ent, 0, -4);
+        }
+        closedir($dp);
+        return $pkglist;
+    }
+
+    // }}}
+    
+    function _listAllPackages()
+    {
+        $ret = array();
+        foreach ($this->_listChannels() as $channel) {
+            $ret[$channel] = $this->_listPackages($channel);
+        }
+        return $ret;
+    }
+
+    /**
+     * Add an installed package to the registry
+     * @param string package name
+     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
+     * @return bool success of saving
+     * @access private
+     */
+    function _addPackage($package, $info)
+    {
+        if ($this->_packageExists($package)) {
+            return false;
+        }
+        $fp = $this->_openPackageFile($package, 'wb');
+        if ($fp === null) {
+            return false;
+        }
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        if (isset($info['filelist'])) {
+            $this->_rebuildFileMap();
+        }
+        return true;
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     * @access private
+     */
+    function _addPackage2($info)
+    {
+        if (!$info->validate()) {
+            if (class_exists('PEAR_Common')) {
+                $ui = PEAR_Frontend::singleton();
+                if ($ui) {
+                    foreach ($info->getValidationWarnings() as $err) {
+                        $ui->log(2, $err['message']);
+                    }
+                }
+            }
+            return false;
+        }
+        $channel = $info->getChannel();
+        $package = $info->getPackage();
+        $save = $info;
+        if ($this->_packageExists($package, $channel)) {
+            return false;
+        }
+        if (!$this->_channelExists($channel, true)) {
+            return false;
+        }
+        $info = $info->toArray(true);
+        if (!$info) {
+            return false;
+        }
+        $fp = $this->_openPackageFile($package, 'wb', $channel);
+        if ($fp === null) {
+            return false;
+        }
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        $this->_rebuildFileMap();
+        return true;
+    }
+
+    /**
+     * @param string Package name
+     * @param array parsed package.xml 1.0
+     * @param bool this parameter is only here for BC.  Don't use it.
+     * @access private
+     */
+    function _updatePackage($package, $info, $merge = true)
+    {
+        $oldinfo = $this->_packageInfo($package);
+        if (empty($oldinfo)) {
+            return false;
+        }
+        $fp = $this->_openPackageFile($package, 'w');
+        if ($fp === null) {
+            return false;
+        }
+        if (is_object($info)) {
+            $info = $info->toArray();
+        }
+        $info['_lastmodified'] = time();
+        $newinfo = $info;
+        if ($merge) {
+            $info = array_merge($oldinfo, $info);
+        } else {
+            $diff = $info;
+        }
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        if (isset($newinfo['filelist'])) {
+            $this->_rebuildFileMap();
+        }
+        return true;
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     * @access private
+     */
+    function _updatePackage2($info)
+    {
+        if (!$this->_packageExists($info->getPackage(), $info->getChannel())) {
+            return false;
+        }
+        $fp = $this->_openPackageFile($info->getPackage(), 'w', $info->getChannel());
+        if ($fp === null) {
+            return false;
+        }
+        $save = $info;
+        $info = $save->getArray(true);
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        $this->_rebuildFileMap();
+        return true;
+    }
+
+    /**
+     * @param string Package name
+     * @param string Channel name
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
+     * @access private
+     */
+    function &_getPackage($package, $channel = 'pear.php.net')
+    {
+        $info = $this->_packageInfo($package, null, $channel);
+        if ($info === null) {
+            return $info;
+        }
+        $a = $this->_config;
+        if (!$a) {
+            $this->_config = &new PEAR_Config;
+            $this->_config->set('php_dir', $this->statedir);
+        }
+        if (!class_exists('PEAR_PackageFile')) {
+            require_once 'PEAR/PackageFile.php';
+        }
+        $pkg = &new PEAR_PackageFile($this->_config);
+        $pf = &$pkg->fromArray($info);
+        return $pf;
+    }
+
+    /**
+     * @param string channel name
+     * @param bool whether to strictly retrieve channel names
+     * @return PEAR_ChannelFile|false
+     * @access private
+     */
+    function &_getChannel($channel, $noaliases = false)
+    {
+        $ch = false;
+        if ($this->_channelExists($channel, $noaliases)) {
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $ch = &PEAR_ChannelFile::fromArray($this->_channelInfo($channel, $noaliases));
+        }
+        if ($ch) {
+            return $ch;
+        }
+        if ($this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $pear_channel = new PEAR_ChannelFile;
+            $pear_channel->setName('pear.php.net');
+            $pear_channel->setAlias('pear');
+            $pear_channel->setSummary('PHP Extension and Application Repository');
+            $pear_channel->setDefaultPEARProtocols();
+            $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
+            $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
+            return $pear_channel;
+        }
+        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $pear_channel = new PEAR_ChannelFile;
+            $pear_channel->setName('pecl.php.net');
+            $pear_channel->setAlias('pecl');
+            $pear_channel->setSummary('PHP Extension Community Library');
+            $pear_channel->setDefaultPEARProtocols();
+            $pear_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
+            $pear_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
+            $pear_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
+            return $pear_channel;
+        }
+        if ($this->_getChannelFromAlias($channel) == '__uri') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $private = new PEAR_ChannelFile;
+            $private->setName('__uri');
+            $private->addFunction('xmlrpc', '1.0', '****');
+            $private->setSummary('Pseudo-channel for static packages');
+            return $private;
+        }
+        return $ch;
+    }
+
+    // {{{ packageExists()
+
+    /**
+     * @param string Package name
+     * @param string Channel name
+     * @return bool
+     */
+    function packageExists($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_packageExists($package, $channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    // {{{ channelExists()
+
+    /**
+     * @param string channel name
+     * @param bool if true, then aliases will be ignored
+     * @return bool
+     */
+    function channelExists($channel, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_channelExists($channel, $noaliases);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    // {{{ isAlias()
+
+    /**
+     * Determines whether the parameter is an alias of a channel
+     * @param string
+     * @return bool
+     */
+    function isAlias($alias)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_isChannelAlias($alias);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ packageInfo()
+
+    /**
+     * @param string|null
+     * @param string|null
+     * @param string
+     * @return array|null
+     */
+    function packageInfo($package = null, $key = null, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_packageInfo($package, $key, $channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ channelInfo()
+
+    /**
+     * Retrieve a raw array of channel data.
+     *
+     * Do not use this, instead use {@link getChannel()} for normal
+     * operations.  Array structure is undefined in this method
+     * @param string channel name
+     * @param bool whether to strictly retrieve information only on non-aliases
+     * @return array|null|PEAR_Error
+     */
+    function channelInfo($channel = null, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
         }
-        $ret = $this->_packageInfo($package, $key);
+        $ret = $this->_channelInfo($channel, $noaliases);
         $this->_unlock();
         return $ret;
     }
 
     // }}}
+
+    /**
+     * @param string
+     */
+    function channelName($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_getChannelFromAlias($channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    /**
+     * @param string
+     */
+    function channelAlias($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_getAlias($channel);
+        $this->_unlock();
+        return $ret;
+    }
     // {{{ listPackages()
 
-    function listPackages()
+    function listPackages($channel = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listPackages($channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ listAllPackages()
+
+    function listAllPackages()
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listAllPackages();
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ listChannel()
+
+    function listChannels()
     {
         if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
             return $e;
         }
-        $ret = $this->_listPackages();
+        $ret = $this->_listChannels();
         $this->_unlock();
         return $ret;
     }
@@ -419,38 +1506,133 @@
     // }}}
     // {{{ addPackage()
 
+    /**
+     * Add an installed package to the registry
+     * @param string|PEAR_PackageFile_v1|PEAR_PackageFile_v2 package name or object
+     *               that will be passed to {@link addPackage2()}
+     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
+     * @return bool success of saving
+     */
     function addPackage($package, $info)
     {
-        if ($this->packageExists($package)) {
+        if (is_object($info)) {
+            return $this->addPackage2($info);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addPackage($package, $info);
+        $this->_unlock();
+        if ($ret) {
+            if (!class_exists('PEAR_PackageFile_v1')) {
+                require_once 'PEAR/PackageFile/v1.php';
+            }
+            $pf = new PEAR_PackageFile_v1;
+            $pf->setConfig($this->_config);
+            $pf->fromArray($info);
+            $this->_dependencyDB->uninstallPackage($pf);
+            $this->_dependencyDB->installPackage($pf);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addPackage2()
+
+    function addPackage2($info)
+    {
+        if (!is_object($info)) {
+            return $this->addPackage($info['package'], $info);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addPackage2($info);
+        $this->_unlock();
+        if ($ret) {
+            $this->_dependencyDB->uninstallPackage($info);
+            $this->_dependencyDB->installPackage($info);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updateChannel()
+
+    /**
+     * For future expandibility purposes, separate this
+     * @param PEAR_ChannelFile
+     */
+    function updateChannel($channel, $lastmodified = null)
+    {
+        if ($channel->getName() == '__uri') {
             return false;
         }
+        return $this->addChannel($channel, $lastmodified, true);
+    }
+
+    // }}}
+    // {{{ deleteChannel()
+
+    /**
+     * Deletion fails if there are any packages installed from the channel
+     * @param string|PEAR_ChannelFile channel name
+     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
+     */
+    function deleteChannel($channel)
+    {
         if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
             return $e;
         }
-        $fp = $this->_openPackageFile($package, 'wb');
-        if ($fp === null) {
-            $this->_unlock();
+        $ret = $this->_deleteChannel($channel);
+        $this->_unlock();
+        if ($ret && is_a($this->_config, 'PEAR_Config')) {
+            $this->_config->setChannels($this->listChannels());
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addChannel()
+
+    /**
+     * @param PEAR_ChannelFile Channel object
+     * @param string Last-Modified header from HTTP for caching
+     * @return boolean|PEAR_Error True on creation, false if it already exists
+     */
+    function addChannel($channel, $lastmodified = false, $update = false)
+    {
+        if (!is_a($channel, 'PEAR_ChannelFile')) {
             return false;
         }
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
+        if (!$channel->validate()) {
+            return false;
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addChannel($channel, $update, $lastmodified);
         $this->_unlock();
-        return true;
+        if (!$update && $ret && is_a($this->_config, 'PEAR_Config')) {
+            $this->_config->setChannels($this->listChannels());
+        }
+        return $ret;
     }
 
     // }}}
     // {{{ deletePackage()
 
-    function deletePackage($package)
+    function deletePackage($package, $channel = 'pear.php.net')
     {
         if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
             return $e;
         }
-        $file = $this->_packageFileName($package);
+        $file = $this->_packageFileName($package, $channel);
         $ret = @unlink($file);
-        $this->rebuildFileMap();
+        $this->_rebuildFileMap();
         $this->_unlock();
+        $p = array('channel' => $channel, 'package' => $package);
+        $this->_dependencyDB->uninstallPackage($p);
         return $ret;
     }
 
@@ -459,80 +1641,491 @@
 
     function updatePackage($package, $info, $merge = true)
     {
-        $oldinfo = $this->packageInfo($package);
-        if (empty($oldinfo)) {
+        if (is_object($info)) {
+            return $this->updatePackage2($info, $merge);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_updatePackage($package, $info, $merge);
+        $this->_unlock();
+        if ($ret) {
+            $pf = new PEAR_PackageFile_v1;
+            $pf->setConfig($this->_config);
+            $pf->fromArray($this->packageInfo($package));
+            $this->_dependencyDB->uninstallPackage($pf);
+            $this->_dependencyDB->installPackage($pf);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updatePackage2()
+
+    function updatePackage2($info)
+    {
+        if (!is_object($info)) {
+            return $this->updatePackage($info['package'], $info, $merge);
+        }
+        if (!$info->validate(PEAR_VALIDATE_DOWNLOADING)) {
             return false;
         }
         if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
             return $e;
         }
-        $fp = $this->_openPackageFile($package, 'w');
-        if ($fp === null) {
-            $this->_unlock();
+        $ret = $this->_updatePackage2($info);
+        $this->_unlock();
+        if ($ret) {
+            $this->_dependencyDB->uninstallPackage($info);
+            $this->_dependencyDB->installPackage($info);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getChannel()
+    /**
+     * @param string channel name
+     * @param bool whether to strictly return raw channels (no aliases)
+     * @return PEAR_ChannelFile|false
+     */
+    function &getChannel($channel, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = &$this->_getChannel($channel, $noaliases);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getPackage()
+    /**
+     * @param string package name
+     * @param string channel name
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
+     */
+    function &getPackage($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $pf = &$this->_getPackage($package, $channel);
+        $this->_unlock();
+        return $pf;
+    }
+
+    // }}}
+
+    /**
+     * Get PEAR_PackageFile_v[1/2] objects representing the contents of
+     * a dependency group that are installed.
+     *
+     * This is used at uninstall-time
+     * @param array
+     * @return array|false
+     */
+    function getInstalledGroup($group)
+    {
+        $ret = array();
+        if (isset($group['package'])) {
+            if (!isset($group['package'][0])) {
+                $group['package'] = array($group['package']);
+            }
+            foreach ($group['package'] as $package) {
+                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
+                $p = &$this->getPackage($package['name'], $depchannel);
+                if ($p) {
+                    $save = &$p;
+                    $ret[] = &$save;
+                }
+            }
+        }
+        if (isset($group['subpackage'])) {
+            if (!isset($group['subpackage'][0])) {
+                $group['subpackage'] = array($group['subpackage']);
+            }
+            foreach ($group['subpackage'] as $package) {
+                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
+                $p = &$this->getPackage($package['name'], $depchannel);
+                if ($p) {
+                    $save = &$p;
+                    $ret[] = &$save;
+                }
+            }
+        }
+        if (!count($ret)) {
             return false;
         }
-        $info['_lastmodified'] = time();
-        if ($merge) {
-            fwrite($fp, serialize(array_merge($oldinfo, $info)));
-        } else {
-            fwrite($fp, serialize($info));
+        return $ret;
+    }
+
+    // {{{ getChannelValidator()
+    /**
+     * @param string channel name
+     * @return PEAR_Validate|false
+     */
+    function &getChannelValidator($channel)
+    {
+        $chan = $this->getChannel($channel);
+        if (!$chan) {
+            return $chan;
         }
-        $this->_closePackageFile($fp);
-        if (isset($info['filelist'])) {
-            $this->rebuildFileMap();
+        $val = $chan->getValidationObject();
+        return $val;
+    }
+    // }}}
+    // {{{ getChannels()
+    /**
+     * @param string channel name
+     * @return array an array of PEAR_ChannelFile objects representing every installed channel
+     */
+    function &getChannels()
+    {
+        $ret = array();
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        foreach ($this->_listChannels() as $channel) {
+            $ret[] = &$this->_getChannel($channel);
         }
         $this->_unlock();
-        return true;
+        return $ret;
     }
 
     // }}}
     // {{{ checkFileMap()
 
     /**
-     * Test whether a file belongs to a package.
-     *
-     * @param string $path file path, absolute or relative to the pear
-     * install dir
-     *
-     * @return string which package the file belongs to, or an empty
-     * string if the file does not belong to an installed package
+     * Test whether a file or set of files belongs to a package.
      *
-     * @access public
+     * If an array is passed in
+     * @param string|array file path, absolute or relative to the pear
+     *                     install dir
+     * @param string|array name of PEAR package or array('package' => name, 'channel' =>
+     *                     channel) of a package that will be ignored
+     * @param string API version - 1.1 will exclude any files belonging to a package
+     * @param array private recursion variable
+     * @return array|false which package and channel the file belongs to, or an empty
+     *                     string if the file does not belong to an installed package,
+     *                     or belongs to the second parameter's package
      */
-    function checkFileMap($path)
+    function checkFileMap($path, $package = false, $api = '1.0', $attrs = false)
     {
         if (is_array($path)) {
             static $notempty;
             if (empty($notempty)) {
+                if (!class_exists('PEAR_Installer_Role')) {
+                    require_once 'PEAR/Installer/Role.php';
+                }
                 $notempty = create_function('$a','return !empty($a);');
             }
+            $package = is_array($package) ? array(strtolower($package[0]), strtolower($package[1]))
+                : strtolower($package);
             $pkgs = array();
             foreach ($path as $name => $attrs) {
-                if (is_array($attrs) && isset($attrs['baseinstalldir'])) {
-                    $name = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
+                if (is_array($attrs)) {
+                    if (isset($attrs['install-as'])) {
+                        $name = $attrs['install-as'];
+                    }
+                    if (!in_array($attrs['role'], PEAR_Installer_Role::getInstallableRoles())) {
+                        // these are not installed
+                        continue;
+                    }
+                    if (!in_array($attrs['role'], PEAR_Installer_Role::getBaseinstallRoles())) {
+                        $attrs['baseinstalldir'] = is_array($package) ? $package[1] : $package;
+                    }
+                    if (isset($attrs['baseinstalldir'])) {
+                        $name = $attrs['baseinstalldir'] . DIRECTORY_SEPARATOR . $name;
+                    }
+                }
+                $pkgs[$name] = $this->checkFileMap($name, $package, $api, $attrs);
+                if (PEAR::isError($pkgs[$name])) {
+                    return $pkgs[$name];
                 }
-                $pkgs[$name] = $this->checkFileMap($name);
             }
             return array_filter($pkgs, $notempty);
         }
-        if (empty($this->filemap_cache) && PEAR::isError($this->readFileMap())) {
-            return $err;
+        if (empty($this->filemap_cache)) {
+            if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+                return $e;
+            }
+            $err = $this->_readFileMap();
+            $this->_unlock();
+            if (PEAR::isError($err)) {
+                return $err;
+            }
+        }
+        if (!$attrs) {
+            $attrs = array('role' => 'php'); // any old call would be for PHP role only
         }
-        if (isset($this->filemap_cache[$path])) {
-            return $this->filemap_cache[$path];
+        if (isset($this->filemap_cache[$attrs['role']][$path])) {
+            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
+                return false;
+            }
+            return $this->filemap_cache[$attrs['role']][$path];
         }
         $l = strlen($this->install_dir);
         if (substr($path, 0, $l) == $this->install_dir) {
             $path = preg_replace('!^'.DIRECTORY_SEPARATOR.'+!', '', substr($path, $l));
         }
-        if (isset($this->filemap_cache[$path])) {
-            return $this->filemap_cache[$path];
+        if (isset($this->filemap_cache[$attrs['role']][$path])) {
+            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
+                return false;
+            }
+            return $this->filemap_cache[$attrs['role']][$path];
         }
-        return '';
+        return false;
     }
 
     // }}}
+    // {{{ apiVersion()
+    /**
+     * Get the expected API version.  Channels API is version 1.1, as it is backwards
+     * compatible with 1.0
+     * @return string
+     */
+    function apiVersion()
+    {
+        return '1.1';
+    }
+    // }}}
+
+
+    /**
+     * Parse a package name, or validate a parsed package name array
+     * @param string|array pass in an array of format
+     *                     array(
+     *                      'package' => 'pname',
+     *                     ['channel' => 'channame',]
+     *                     ['version' => 'version',]
+     *                     ['state' => 'state',]
+     *                     ['group' => 'groupname'])
+     *                     or a string of format
+     *                     [channel://][channame/]pname[-version|-state][/group=groupname]
+     * @return array|PEAR_Error
+     */
+    function parsePackageName($param, $defaultchannel = 'pear.php.net')
+    {
+        $saveparam = $param;
+        if (is_array($param)) {
+            // convert to string for error messages
+            $saveparam = $this->parsedPackageNameToString($param);
+            // process the array
+            if (!isset($param['package'])) {
+                return PEAR::raiseError('parsePackageName(): array $param ' .
+                    'must contain a valid package name in index "param"',
+                    'package', null, null, $param);
+            }
+            if (!isset($param['uri'])) {
+                if (!isset($param['channel'])) {
+                    $param['channel'] = $defaultchannel;
+                }
+            } else {
+                $param['channel'] = '__uri';
+            }
+        } else {
+            $components = @parse_url($param);
+            if (isset($components['scheme'])) {
+                if ($components['scheme'] == 'http') {
+                    // uri package
+                    $param = array('uri' => $param, 'channel' => '__uri');
+                } elseif($components['scheme'] != 'channel') {
+                    return PEAR::raiseError('parsePackageName(): only channel:// uris may ' .
+                        'be downloaded, not "' . $param . '"', 'invalid', null, null, $param);
+                }
+            }
+            if (!isset($components['path'])) {
+                return PEAR::raiseError('parsePackageName(): array $param ' .
+                    'must contain a valid package name in "' . $param . '"',
+                    'package', null, null, $param);
+            }
+            if (isset($components['host'])) {
+                // remove the leading "/"
+                $components['path'] = substr($components['path'], 1);
+            }
+            if (!isset($components['scheme'])) {
+                if (strpos($components['path'], '/') !== false) {
+                    if ($components['path']{0} == '/') {
+                        return PEAR::raiseError('parsePackageName(): this is not ' .
+                            'a package name, it begins with "/" in "' . $param . '"',
+                            'invalid', null, null, $param);
+                    }
+                    $parts = explode('/', $components['path']);
+                    $components['host'] = array_shift($parts);
+                    if (count($parts) > 1) {
+                        $components['path'] = array_pop($parts);
+                        $components['host'] .= '/' . implode('/', $parts);
+                    } else {
+                        $components['path'] = implode('/', $parts);
+                    }
+                } else {
+                    $components['host'] = $defaultchannel;
+                }
+            } else {
+                if (strpos($components['path'], '/')) {
+                    $parts = explode('/', $components['path']);
+                    $components['path'] = array_pop($parts);
+                    $components['host'] .= '/' . implode('/', $parts);
+                }
+            }
 
+            if (is_array($param)) {
+                $param['package'] = $components['path'];
+            } else {
+                $param = array(
+                    'package' => $components['path']
+                    );
+                if (isset($components['host'])) {
+                    $param['channel'] = $components['host'];
+                }
+            }
+            if (isset($components['fragment'])) {
+                $param['group'] = $components['fragment'];
+            }
+            if (isset($components['user'])) {
+                $param['user'] = $components['user'];
+            }
+            if (isset($components['pass'])) {
+                $param['pass'] = $components['pass'];
+            }
+            if (isset($components['query'])) {
+                parse_str($components['query'], $param['opts']);
+            }
+            // check for extension
+            $pathinfo = pathinfo($param['package']);
+            if (isset($pathinfo['extension']) &&
+                  in_array(strtolower($pathinfo['extension']), array('tgz', 'tar'))) {
+                $param['extension'] = $pathinfo['extension'];
+                $param['package'] = substr($pathinfo['basename'], 0,
+                    strlen($pathinfo['basename']) - 4);
+            }
+            // check for version
+            if (strpos($param['package'], '-')) {
+                $test = explode('-', $param['package']);
+                if (count($test) != 2) {
+                    return PEAR::raiseError('parsePackageName(): only one version/state ' .
+                        'delimiter "-" is allowed in "' . $saveparam . '"',
+                        'version', null, null, $param);
+                }
+                list($param['package'], $param['version']) = $test;
+            }
+        }
+        // validation
+        $info = $this->channelExists($param['channel']);
+        if (PEAR::isError($info)) {
+            return $info;
+        }
+        if (!$info) {
+            return PEAR::raiseError('unknown channel "' . $param['channel'] .
+                '" in "' . $saveparam . '"', 'channel', null, null, $param);
+        }
+        $chan = $this->getChannel($param['channel']);
+        if (PEAR::isError($chan)) {
+            return $chan;
+        }
+        if (!$chan) {
+            return PEAR::raiseError("Exception: corrupt registry, could not " .
+                "retrieve channel " . $param['channel'] . " information",
+                'registry', null, null, $param);
+        }
+        $param['channel'] = $chan->getName();
+        $validate = $chan->getValidationObject();
+        $vpackage = $chan->getValidationPackage();
+        // validate package name
+        if (!$validate->validPackageName($param['package'], $vpackage['_content'])) {
+            return PEAR::raiseError('parsePackageName(): invalid package name "' .
+                $param['package'] . '" in "' . $saveparam . '"',
+                'package', null, null, $param);
+        }
+        if (isset($param['group'])) {
+            if (!PEAR_Validate::validGroupName($param['group'])) {
+                return PEAR::raiseError('parsePackageName(): dependency group "' . $param['group'] .
+                    '" is not a valid group name in "' . $saveparam . '"', 'group', null, null,
+                    $param);
+            }
+        }
+        if (isset($param['state'])) {
+            if (!in_array(strtolower($param['state']), $validate->getValidStates())) {
+                return PEAR::raiseError('parsePackageName(): state "' . $param['state']
+                    . '" is not a valid state in "' . $saveparam . '"',
+                    'state', null, null, $param);
+            }
+        }
+        if (isset($param['version'])) {
+            if (isset($param['state'])) {
+                return PEAR::raiseError('parsePackageName(): cannot contain both ' .
+                    'a version and a stability (state) in "' . $saveparam . '"',
+                    'version/state', null, null, $param);
+            }
+            // check whether version is actually a state
+            if (in_array(strtolower($param['version']), $validate->getValidStates())) {
+                $param['state'] = strtolower($param['version']);
+                unset($param['version']);
+            } else {
+                if (!$validate->validVersion($param['version'])) {
+                    return PEAR::raiseError('parsePackageName(): "' . $param['version'] .
+                        '" is neither a valid version nor a valid state in "' .
+                        $saveparam . '"', 'version/state', null, null, $param);
+                }                    
+            }
+        }
+        return $param;
+    }
+
+    /**
+     * @param array
+     * @return string
+     */
+    function parsedPackageNameToString($parsed, $brief = false)
+    {
+        if (is_string($parsed)) {
+            return $parsed;
+        }
+        if (is_object($parsed)) {
+            $p = $parsed;
+            $parsed = array(
+                'package' => $p->getPackage(),
+                'channel' => $p->getChannel(),
+                'version' => $p->getVersion(),
+            );
+        }
+        if (isset($parsed['uri'])) {
+            return $parsed['uri'];
+        }
+        if ($brief) {
+            if ($channel = $this->channelAlias($parsed['channel'])) {
+                return $channel . '/' . $parsed['package'];
+            }
+        }
+        $upass = '';
+        if (isset($parsed['user'])) {
+            $upass = $parsed['user'];
+            if (isset($parsed['pass'])) {
+                $upass .= ':' . $parsed['pass'];
+            }
+            $upass = "$upass@";
+        }
+        $ret = 'channel://' . $upass . $parsed['channel'] . '/' . $parsed['package'];
+        if (isset($parsed['version']) || isset($parsed['state'])) {
+            $ret .= '-' . @$parsed['version'] . @$parsed['state'];
+        }
+        if (isset($parsed['extension'])) {
+            $ret .= '.' . $parsed['extension'];
+        }
+        if (isset($parsed['opts'])) {
+            $ret .= '?';
+            foreach ($parsed['opts'] as $name => $value) {
+                $parsed['opts'][$name] = "$name=$value";
+            }
+            $ret .= implode('&', $parsed['opts']);
+        }
+        if (isset($parsed['group'])) {
+            $ret .= '#' . $parsed['group'];
+        }
+        return $ret;
+    }
 }
 
 ?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Remote.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Remote.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Remote.php	2004-12-31 10:03:37.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Remote.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,23 +1,29 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@php.net>                                    |
-// +----------------------------------------------------------------------+
-//
-// $Id: Remote.php,v 1.50 2004/06/08 18:03:46 cellog Exp $
+/**
+ * PEAR_Remote
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Remote.php,v 1.75 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**
+ * needed for PEAR_Error
+ */
 require_once 'PEAR.php';
 require_once 'PEAR/Config.php';
 
@@ -28,6 +34,15 @@
  * @nodep XML_RPC_Value
  * @nodep XML_RPC_Message
  * @nodep XML_RPC_Client
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
  */
 class PEAR_Remote extends PEAR
 {
@@ -35,6 +50,11 @@
 
     var $config = null;
     var $cache  = null;
+    /**
+     * @var PEAR_Registry
+     * @access private
+     */
+    var $_registry;
 
     // }}}
 
@@ -44,10 +64,17 @@
     {
         $this->PEAR();
         $this->config = &$config;
+        $this->_registry = &$this->config->getRegistry();
     }
 
     // }}}
-
+    // {{{ setRegistry()
+    
+    function setRegistry(&$reg)
+    {
+        $this->_registry = &$reg;
+    }
+    // }}}
     // {{{ getCache()
 
 
@@ -58,14 +85,19 @@
         $filename = $cachedir . DIRECTORY_SEPARATOR . 'xmlrpc_cache_' . $id;
         if (!file_exists($filename)) {
             return null;
-        };
+        }
 
         $fp = fopen($filename, 'rb');
         if (!$fp) {
             return null;
         }
-        $content  = fread($fp, filesize($filename));
-        fclose($fp);
+        if (function_exists('file_get_contents')) {
+            fclose($fp);
+            $content = file_get_contents($filename);
+        } else {
+            $content  = fread($fp, filesize($filename));
+            fclose($fp);
+        }
         $result   = array(
             'age'        => time() - filemtime($filename),
             'lastChange' => filemtime($filename),
@@ -91,54 +123,105 @@
         if ($fp) {
             fwrite($fp, serialize($data));
             fclose($fp);
-        };
+        }
     }
 
     // }}}
 
+    // {{{ clearCache()
+
+    function clearCache($method, $args)
+    {
+        array_unshift($args, $method);
+        array_unshift($args, $this->config->get('default_channel')); // cache by channel
+        $id       = md5(serialize($args));
+        $cachedir = $this->config->get('cache_dir');
+        $filename = $cachedir.'/xmlrpc_cache_'.$id;
+        if (file_exists($filename)) {
+            @unlink($filename);
+        }
+    }
+
+    // }}}
     // {{{ call(method, [args...])
 
     function call($method)
     {
         $_args = $args = func_get_args();
 
-        $this->cache = $this->getCache($args);
+        $server_channel = $this->config->get('default_channel');
+        $channel = $this->_registry->getChannel($server_channel);
+        if ($channel) {
+            $mirror = $this->config->get('preferred_mirror');
+            if ($channel->getMirror($mirror)) {
+                if ($channel->supports('xmlrpc', $method, $mirror)) {
+                    $server_channel = $server_host = $mirror; // use the preferred mirror
+                    $server_port = $channel->getPort($mirror);
+                } elseif (!$channel->supports('xmlrpc', $method)) {
+                    return $this->raiseError("Channel $server_channel does not " .
+                        "support xml-rpc method $method");
+                }
+            }
+            if (!isset($server_host)) {
+                if (!$channel->supports('xmlrpc', $method)) {
+                    return $this->raiseError("Channel $server_channel does not support " .
+                        "xml-rpc method $method");
+                } else {
+                    $server_host = $server_channel;
+                    $server_port = $channel->getPort();
+                }
+            }
+        } else {
+            return $this->raiseError("Unknown channel '$server_channel'");
+        }
+
+        array_unshift($_args, $server_channel); // cache by channel
+        $this->cache = $this->getCache($_args);
         $cachettl = $this->config->get('cache_ttl');
         // If cache is newer than $cachettl seconds, we use the cache!
         if ($this->cache !== null && $this->cache['age'] < $cachettl) {
             return $this->cache['content'];
-        };
-
+        }
         if (extension_loaded("xmlrpc")) {
             $result = call_user_func_array(array(&$this, 'call_epi'), $args);
             if (!PEAR::isError($result)) {
                 $this->saveCache($_args, $result);
-            };
+            }
             return $result;
+        } elseif (!@include_once 'XML/RPC.php') {
+            return $this->raiseError("For this remote PEAR operation you need to load the xmlrpc extension or install XML_RPC");
         }
-        if (!@include_once("XML/RPC.php")) {
-            return $this->raiseError("For this remote PEAR operation you need to install the XML_RPC package");
-        }
+
         array_shift($args);
-        $server_host = $this->config->get('master_server');
         $username = $this->config->get('username');
         $password = $this->config->get('password');
         $eargs = array();
-        foreach($args as $arg) $eargs[] = $this->_encode($arg);
+        foreach($args as $arg) {
+            $eargs[] = $this->_encode($arg);
+        }
         $f = new XML_RPC_Message($method, $eargs);
         if ($this->cache !== null) {
             $maxAge = '?maxAge='.$this->cache['lastChange'];
         } else {
             $maxAge = '';
-        };
+        }
         $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
         if ($proxy = parse_url($this->config->get('http_proxy'))) {
             $proxy_host = @$proxy['host'];
+            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
+                $proxy_host = 'https://' . $proxy_host;
+            }
             $proxy_port = @$proxy['port'];
             $proxy_user = @urldecode(@$proxy['user']);
             $proxy_pass = @urldecode(@$proxy['pass']);
         }
-        $c = new XML_RPC_Client('/xmlrpc.php'.$maxAge, $server_host, 80, $proxy_host, $proxy_port, $proxy_user, $proxy_pass);
+        $shost = $server_host;
+        if ($channel->getSSL()) {
+            $shost = "https://$shost";
+        }
+        $c = new XML_RPC_Client('/' . $channel->getPath('xmlrpc')
+            . $maxAge, $shost, $server_port, $proxy_host, $proxy_port,
+            $proxy_user, $proxy_pass);
         if ($username && $password) {
             $c->setCredentials($username, $password);
         }
@@ -192,27 +275,57 @@
             }
             return $this->raiseError("unable to load xmlrpc extension");
         } while (false);
+        $server_channel = $this->config->get('default_channel');
+        $channel = $this->_registry->getChannel($server_channel);
+        if ($channel) {
+            $mirror = $this->config->get('preferred_mirror');
+            if ($channel->getMirror($mirror)) {
+                if ($channel->supports('xmlrpc', $method, $mirror)) {
+                    $server_channel = $server_host = $mirror; // use the preferred mirror
+                    $server_port = $channel->getPort($mirror);
+                } elseif (!$channel->supports('xmlrpc', $method)) {
+                    return $this->raiseError("Channel $server_channel does not " .
+                        "support xml-rpc method $method");
+                }
+            }
+            if (!isset($server_host)) {
+                if (!$channel->supports('xmlrpc', $method)) {
+                    return $this->raiseError("Channel $server_channel does not support " .
+                        "xml-rpc method $method");
+                } else {
+                    $server_host = $server_channel;
+                    $server_port = $channel->getPort();
+                }
+            }
+        } else {
+            return $this->raiseError("Unknown channel '$server_channel'");
+        }
         $params = func_get_args();
         array_shift($params);
         $method = str_replace("_", ".", $method);
         $request = xmlrpc_encode_request($method, $params);
-        $server_host = $this->config->get("master_server");
-        if (empty($server_host)) {
-            return $this->raiseError("PEAR_Remote::call: no master_server configured");
-        }
-        $server_port = 80;
         if ($http_proxy = $this->config->get('http_proxy')) {
             $proxy = parse_url($http_proxy);
             $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
             $proxy_host = @$proxy['host'];
+            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
+                $proxy_host = 'ssl://' . $proxy_host;
+            }
             $proxy_port = @$proxy['port'];
             $proxy_user = @urldecode(@$proxy['user']);
             $proxy_pass = @urldecode(@$proxy['pass']);
             $fp = @fsockopen($proxy_host, $proxy_port);
             $use_proxy = true;
+            if ($channel->getSSL()) {
+                $server_host = "https://$server_host";
+            }
         } else {
             $use_proxy = false;
-            $fp = @fsockopen($server_host, $server_port);
+            $ssl = $channel->getSSL();
+            $fp = @fsockopen(($ssl ? 'ssl://' : '') . $server_host, $server_port);
+            if (!$fp) {
+                $server_host = "$ssl$server_host"; // for error-reporting
+            }
         }
         if (!$fp && $http_proxy) {
             return $this->raiseError("PEAR_Remote::call: fsockopen(`$proxy_host', $proxy_port) failed");
@@ -234,7 +347,7 @@
             $maxAge = '?maxAge='.$this->cache['lastChange'];
         } else {
             $maxAge = '';
-        };
+        }
 
         if ($use_proxy && $proxy_host != '' && $proxy_user != '') {
             $req_headers .= 'Proxy-Authorization: Basic '
@@ -258,7 +371,8 @@
             $post_string = "POST ";
         }
 
-        fwrite($fp, ($post_string."/xmlrpc.php$maxAge HTTP/1.0\r\n$req_headers\r\n$request"));
+        $path = '/' . $channel->getPath('xmlrpc');
+        fwrite($fp, ($post_string . $path . "$maxAge HTTP/1.0\r\n$req_headers\r\n$request"));
         $response = '';
         $line1 = fgets($fp, 2048);
         if (!preg_match('!^HTTP/[0-9\.]+ (\d+) (.*)!', $line1, $matches)) {
@@ -271,12 +385,16 @@
                 return $this->cache['content'];
             case "401": // Unauthorized
                 if ($username && $password) {
-                    return $this->raiseError("PEAR_Remote: authorization failed", 401);
+                    return $this->raiseError("PEAR_Remote ($server_host:$server_port) " .
+                        ": authorization failed", 401);
                 } else {
-                    return $this->raiseError("PEAR_Remote: authorization required, please log in first", 401);
+                    return $this->raiseError("PEAR_Remote ($server_host:$server_port) " .
+                        ": authorization required, please log in first", 401);
                 }
             default:
-                return $this->raiseError("PEAR_Remote: unexpected HTTP response", (int)$matches[1], null, null, "$matches[1] $matches[2]");
+                return $this->raiseError("PEAR_Remote ($server_host:$server_port) : " .
+                    "unexpected HTTP response", (int)$matches[1], null, null,
+                    "$matches[1] $matches[2]");
         }
         while (trim(fgets($fp, 2048)) != ''); // skip rest of headers
         while ($chunk = fread($fp, 10240)) {
@@ -315,6 +433,12 @@
             $faultString = "XML-RPC Server Fault: " .
                  str_replace("\n", " ", $faultString);
             return $this->raiseError($faultString, $faultCode);
+        } elseif (is_array($ret) && sizeof($ret) == 2 && !empty($ret['faultString']) &&
+              !empty($ret['faultCode'])) {
+            extract($ret);
+            $faultString = "XML-RPC Server Fault: " .
+                 str_replace("\n", " ", $faultString);
+            return $this->raiseError($faultString, $faultCode);
         }
         return $ret;
     }
@@ -338,6 +462,7 @@
                 $firstkey = key($php_val);
                 end($php_val);
                 $lastkey = key($php_val);
+                reset($php_val);
                 if ($firstkey === 0 && is_int($lastkey) &&
                     ($lastkey + 1) == count($php_val)) {
                     $is_continuous = true;
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/REST/10.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/REST/10.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/REST/10.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/REST/10.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,624 @@
+<?php
+/**
+ * PEAR_REST_10
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: 10.php,v 1.40 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a12
+ */
+
+/**
+ * For downloading REST xml/txt files
+ */
+require_once 'PEAR/REST.php';
+
+/**
+ * Implement REST 1.0
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a12
+ */
+class PEAR_REST_10
+{
+    /**
+     * @var PEAR_REST
+     */
+    var $_rest;
+    function PEAR_REST_10($config, $options = array())
+    {
+        $this->_rest = &new PEAR_REST($config, $options);
+    }
+
+    function getDownloadURL($base, $packageinfo, $prefstate, $installed)
+    {
+        $channel = $packageinfo['channel'];
+        $package = $packageinfo['package'];
+        $states = $this->betterStates($prefstate, true);
+        if (!$states) {
+            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
+        }
+        $state = $version = null;
+        if (isset($packageinfo['state'])) {
+            $state = $packageinfo['state'];
+        }
+        if (isset($packageinfo['version'])) {
+            $version = $packageinfo['version'];
+        }
+        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml');
+        if (PEAR::isError($info)) {
+            return PEAR::raiseError('No releases available for package "' .
+                $channel . '/' . $package . '"');
+        }
+        if (!isset($info['r'])) {
+            return false;
+        }
+        $found = false;
+        $release = false;
+        if (!is_array($info['r']) || !isset($info['r'][0])) {
+            $info['r'] = array($info['r']);
+        }
+        foreach ($info['r'] as $release) {
+            if (!isset($this->_rest->_options['force']) && ($installed &&
+                  version_compare($release['v'], $installed, '<'))) {
+                continue;
+            }
+            if (isset($state)) {
+                if ($release['s'] == $state) {
+                    $found = true;
+                    break;
+                }
+            } elseif (isset($version)) {
+                if ($release['v'] == $version) {
+                    $found = true;
+                    break;
+                }
+            } else {
+                if (in_array($release['s'], $states)) {
+                    $found = true;
+                    break;
+                }
+            }
+        }
+        return $this->_returnDownloadURL($base, $package, $release, $info, $found);
+    }
+
+    function getDepDownloadURL($base, $xsdversion, $dependency, $deppackage,
+                               $prefstate = 'stable', $installed = false)
+    {
+        $channel = $dependency['channel'];
+        $package = $dependency['name'];
+        $states = $this->betterStates($prefstate, true);
+        if (!$states) {
+            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
+        }
+        $state = $version = null;
+        if (isset($packageinfo['state'])) {
+            $state = $packageinfo['state'];
+        }
+        if (isset($packageinfo['version'])) {
+            $version = $packageinfo['version'];
+        }
+        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml');
+        if (PEAR::isError($info)) {
+            return PEAR::raiseError('Package "' . $deppackage['channel'] . '/' . $deppackage['package']
+                . '" dependency "' . $channel . '/' . $package . '" has no releases');
+        }
+        if (!is_array($info) || !isset($info['r'])) {
+            return false;
+        }
+        $exclude = array();
+        $min = $max = $recommended = false;
+        if ($xsdversion == '1.0') {
+            $pinfo['package'] = $dependency['name'];
+            $pinfo['channel'] = 'pear.php.net'; // this is always true - don't change this
+            switch ($dependency['rel']) {
+                case 'ge' :
+                    $min = $dependency['version'];
+                break;
+                case 'gt' :
+                    $min = $dependency['version'];
+                    $exclude = array($dependency['version']);
+                break;
+                case 'eq' :
+                    $recommended = $dependency['version'];
+                break;
+                case 'lt' :
+                    $max = $dependency['version'];
+                    $exclude = array($dependency['version']);
+                break;
+                case 'le' :
+                    $max = $dependency['version'];
+                break;
+                case 'ne' :
+                    $exclude = array($dependency['version']);
+                break;
+            }
+        } else {
+            $pinfo['package'] = $dependency['name'];
+            $min = isset($dependency['min']) ? $dependency['min'] : false;
+            $max = isset($dependency['max']) ? $dependency['max'] : false;
+            $recommended = isset($dependency['recommended']) ?
+                $dependency['recommended'] : false;
+            if (isset($dependency['exclude'])) {
+                if (!isset($dependency['exclude'][0])) {
+                    $exclude = array($dependency['exclude']);
+                }
+            }
+        }
+        $found = false;
+        $release = false;
+        if (!is_array($info['r']) || !isset($info['r'][0])) {
+            $info['r'] = array($info['r']);
+        }
+        foreach ($info['r'] as $release) {
+            if (!isset($this->_rest->_options['force']) && ($installed &&
+                  version_compare($release['v'], $installed, '<'))) {
+                continue;
+            }
+            if (in_array($release['v'], $exclude)) { // skip excluded versions
+                continue;
+            }
+            // allow newer releases to say "I'm OK with the dependent package"
+            if ($xsdversion == '2.0' && isset($release['co'])) {
+                if (!is_array($release['co']) || !isset($release['co'][0])) {
+                    $release['co'] = array($release['co']);
+                }
+                foreach ($release['co'] as $entry) {
+                    if (isset($entry['x']) && !is_array($entry['x'])) {
+                        $entry['x'] = array($entry['x']);
+                    } elseif (!isset($entry['x'])) {
+                        $entry['x'] = array();
+                    }
+                    if ($entry['c'] == $deppackage['channel'] &&
+                          strtolower($entry['p']) == strtolower($deppackage['package']) &&
+                          version_compare($deppackage['version'], $entry['min'], '>=') &&
+                          version_compare($deppackage['version'], $entry['max'], '<=') &&
+                          !in_array($release['v'], $entry['x'])) {
+                        $recommended = $release['v'];
+                        break;
+                    }
+                }
+            }
+            if ($recommended) {
+                if ($release['v'] != $recommended) { // if we want a specific
+                    // version, then skip all others
+                    continue;
+                } else {
+                    if (!in_array($release['s'], $states)) {
+                        // the stability is too low, but we must return the
+                        // recommended version if possible
+                        return $this->_returnDownloadURL($base, $package, $release, $info, true);
+                    }
+                }
+            }
+            if ($min && version_compare($release['v'], $min, 'lt')) { // skip too old versions
+                continue;
+            }
+            if ($max && version_compare($release['v'], $max, 'gt')) { // skip too new versions
+                continue;
+            }
+            if ($installed && version_compare($release['v'], $installed, '<')) {
+                continue;
+            }
+            if (in_array($release['s'], $states)) { // if in the preferred state...
+                $found = true; // ... then use it
+                break;
+            }
+        }
+        return $this->_returnDownloadURL($base, $package, $release, $info, $found);
+    }
+
+    function _returnDownloadURL($base, $package, $release, $info, $found)
+    {
+        if (!$found) {
+            $release = $info['r'][0];
+        }
+        $releaseinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' . 
+            $release['v'] . '.xml');
+        if (PEAR::isError($releaseinfo)) {
+            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
+                '" does not have REST xml available');
+        }
+        $packagexml = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+            'deps.' . $release['v'] . '.txt', false, true);
+        if (PEAR::isError($packagexml)) {
+            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
+                '" does not have REST dependency information available');
+        }
+        $packagexml = unserialize($packagexml);
+        if (!$packagexml) {
+            $packagexml = array();
+        }
+        $allinfo = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+            '/allreleases.xml');
+        if (!is_array($allinfo['r']) || !isset($allinfo['r'][0])) {
+            $allinfo['r'] = array($allinfo['r']);
+        }
+        $compatible = false;
+        foreach ($allinfo['r'] as $release) {
+            if ($release['v'] != $releaseinfo['v']) {
+                continue;
+            }
+            if (!isset($release['co'])) {
+                break;
+            }
+            $compatible = array();
+            if (!is_array($release['co']) || !isset($release['co'][0])) {
+                $release['co'] = array($release['co']);
+            }
+            foreach ($release['co'] as $entry) {
+                $comp = array();
+                $comp['name'] = $entry['p'];
+                $comp['channel'] = $entry['c'];
+                $comp['min'] = $entry['min'];
+                $comp['max'] = $entry['max'];
+                if (isset($entry['x']) && !is_array($entry['x'])) {
+                    $comp['exclude'] = $entry['x'];
+                }
+                $compatible[] = $comp;
+            }
+            if (count($compatible) == 1) {
+                $compatible = $compatible[0];
+            }
+            break;
+        }
+        if ($found) {
+            return 
+                array('version' => $releaseinfo['v'],
+                      'info' => $packagexml,
+                      'package' => $releaseinfo['p']['_content'],
+                      'stability' => $releaseinfo['st'],
+                      'url' => $releaseinfo['g'],
+                      'compatible' => $compatible);
+        } else {
+            return
+                array('version' => $releaseinfo['v'],
+                      'package' => $releaseinfo['p']['_content'],
+                      'stability' => $releaseinfo['st'],
+                      'info' => $packagexml,
+                      'compatible' => $compatible);
+        }
+    }
+
+    function listPackages($base)
+    {
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml');
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return array();
+        }
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+        return $packagelist['p'];
+    }
+
+    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false)
+    {
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml');
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        if ($this->_rest->config->get('verbose') > 0) {
+            $ui = &PEAR_Frontend::singleton();
+            $ui->log('Retrieving data...0%', false);
+        }
+        $ret = array();
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return $ret;
+        }
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $next = .1;
+        foreach ($packagelist['p'] as $progress => $package) {
+            if ($this->_rest->config->get('verbose') > 0) {
+                if ($progress / count($packagelist['p']) >= $next) {
+                    if ($next == .5) {
+                        $ui->log('50%', false);
+                    } else {
+                        $ui->log('.', false);
+                    }
+                    $next += .1;
+                }
+            }
+            if ($basic) { // remote-list command
+                if ($dostable) {
+                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                        '/stable.txt');
+                } else {
+                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                        '/latest.txt');
+                }
+                if (PEAR::isError($latest)) {
+                    $latest = false;
+                }
+                $info = array('stable' => $latest);
+            } else { // list-all command
+                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml');
+                if (PEAR::isError($inf)) {
+                    PEAR::popErrorHandling();
+                    return $inf;
+                }
+                if ($searchpackage) {
+                    $found = (!empty($searchpackage) && stristr($package, $searchpackage) !== false);
+                    if (!$found && !(isset($searchsummary) && !empty($searchsummary)
+                        && (stristr($inf['s'], $searchsummary) !== false
+                            || stristr($inf['d'], $searchsummary) !== false)))
+                    {
+                        continue;
+                    };
+                }
+                $releases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                    '/allreleases.xml');
+                if (PEAR::isError($releases)) {
+                    continue;
+                }
+                if (!isset($releases['r'][0])) {
+                    $releases['r'] = array($releases['r']);
+                }
+                unset($latest);
+                unset($unstable);
+                unset($stable);
+                unset($state);
+                foreach ($releases['r'] as $release) {
+                    if (!isset($latest)) {
+                        if ($dostable && $release['s'] == 'stable') {
+                            $latest = $release['v'];
+                            $state = 'stable';
+                        }
+                        if (!$dostable) {
+                            $latest = $release['v'];
+                            $state = $release['s'];
+                        }
+                    }
+                    if (!isset($stable) && $release['s'] == 'stable') {
+                        $stable = $release['v'];
+                        if (!isset($unstable)) {
+                            $unstable = $stable;
+                        }
+                    }
+                    if (!isset($unstable) && $release['s'] != 'stable') {
+                        $latest = $unstable = $release['v'];
+                        $state = $release['s'];
+                    }
+                    if (isset($latest) && !isset($state)) {
+                        $state = $release['s'];
+                    }
+                    if (isset($latest) && isset($stable) && isset($unstable)) {
+                        break;
+                    }
+                }
+                $deps = array();
+                if (!isset($unstable)) {
+                    $unstable = false;
+                    $state = 'stable';
+                    if (isset($stable)) {
+                        $latest = $unstable = $stable;
+                    }
+                } else {
+                    $latest = $unstable;
+                }
+                if (!isset($latest)) {
+                    $latest = false;
+                }
+                if ($latest) {
+                    $d = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
+                        $latest . '.txt');
+                    if (!PEAR::isError($d)) {
+                        $d = unserialize($d);
+                        if ($d) {
+                            if (isset($d['required'])) {
+                                if (!class_exists('PEAR_PackageFile_v2')) {
+                                    require_once 'PEAR/PackageFile/v2.php';
+                                }
+                                if (!isset($pf)) {
+                                    $pf = new PEAR_PackageFile_v2;
+                                }
+                                $pf->setDeps($d);
+                                $tdeps = $pf->getDeps();
+                            } else {
+                                $tdeps = $d;
+                            }
+                            foreach ($tdeps as $dep) {
+                                if ($dep['type'] !== 'pkg') {
+                                    continue;
+                                }
+                                $deps[] = $dep;
+                            }
+                        }
+                    }
+                }
+                if (!isset($stable)) {
+                    $stable = '-n/a-';
+                }
+                if (!$searchpackage) {
+                    $info = array('stable' => $latest, 'summary' => $inf['s'], 'description' =>
+                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
+                        'unstable' => $unstable, 'state' => $state);
+                } else {
+                    $info = array('stable' => $stable, 'summary' => $inf['s'], 'description' =>
+                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
+                        'unstable' => $unstable, 'state' => $state);
+                }
+            }
+            $ret[$package] = $info;
+        }
+        PEAR::popErrorHandling();
+        return $ret;
+    }
+
+    function listLatestUpgrades($base, $state, $installed, $channel, &$reg)
+    {
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml');
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        $ret = array();
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return $ret;
+        }
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+        if ($state) {
+            $states = $this->betterStates($state, true);
+        }
+        foreach ($packagelist['p'] as $package) {
+            if (!isset($installed[strtolower($package)])) {
+                continue;
+            }
+            $inst_version = $reg->packageInfo($package, 'version', $channel);
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                '/allreleases.xml');
+            PEAR::popErrorHandling();
+            if (PEAR::isError($info)) {
+                continue; // no remote releases
+            }
+            if (!isset($info['r'])) {
+                continue;
+            }
+            $found = false;
+            $release = false;
+            if (!is_array($info['r']) || !isset($info['r'][0])) {
+                $info['r'] = array($info['r']);
+            }
+            foreach ($info['r'] as $release) {
+                if ($inst_version && version_compare($release['v'], $inst_version, '<=')) {
+                    continue;
+                }
+                if ($state) {
+                    if (in_array($release['s'], $states)) {
+                        $found = true;
+                        break;
+                    }
+                } else {
+                    $found = true;
+                    break;
+                }
+            }
+            if (!$found) {
+                continue;
+            }
+            $relinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' . 
+                $release['v'] . '.xml');
+            if (PEAR::isError($relinfo)) {
+                return $relinfo;
+            }
+            $ret[$package] = array(
+                    'version' => $release['v'],
+                    'state' => $release['s'],
+                    'filesize' => $relinfo['f'],
+                );
+        }
+        return $ret;
+    }
+
+    function packageInfo($base, $package)
+    {
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $pinfo = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml');
+        if (PEAR::isError($pinfo)) {
+            PEAR::popErrorHandling();
+            return PEAR::raiseError('Unknown package: "' . $package . '" (Debug: ' .
+                $pinfo->getMessage() . ')');
+        }
+        $releases = array();
+        $allreleases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+            '/allreleases.xml');
+        if (!PEAR::isError($allreleases)) {
+            if (!class_exists('PEAR_PackageFile_v2')) {
+                require_once 'PEAR/PackageFile/v2.php';
+            }
+            if (!is_array($allreleases['r'])) {
+                $allreleases['r'] = array($allreleases['r']);
+            }
+            $pf = new PEAR_PackageFile_v2;
+            foreach ($allreleases['r'] as $release) {
+                $ds = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
+                    $release['v'] . '.txt');
+                if (PEAR::isError($ds)) {
+                    continue;
+                }
+                if (!isset($latest)) {
+                    $latest = $release['v'];
+                }
+                $pf->setDeps(unserialize($ds));
+                $ds = $pf->getDeps();
+                $info = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package)
+                    . '/' . $release['v'] . '.xml');
+                if (PEAR::isError($info)) {
+                    continue;
+                }
+                $releases[$release['v']] = array(
+                    'doneby' => $info['m'],
+                    'license' => $info['l'],
+                    'summary' => $info['s'],
+                    'description' => $info['d'],
+                    'releasedate' => $info['da'],
+                    'releasenotes' => $info['n'],
+                    'state' => $release['s'],
+                    'deps' => $ds ? $ds : array(),
+                );
+            }
+        } else {
+            $latest = '';
+        }
+        PEAR::popErrorHandling();
+        return array(
+            'name' => $pinfo['n'],
+            'channel' => $pinfo['c'],
+            'category' => $pinfo['ca']['_content'],
+            'stable' => $latest,
+            'license' => $pinfo['l'],
+            'summary' => $pinfo['s'],
+            'description' => $pinfo['d'],
+            'releases' => $releases,
+            );
+    }
+
+    /**
+     * Return an array containing all of the states that are more stable than
+     * or equal to the passed in state
+     *
+     * @param string Release state
+     * @param boolean Determines whether to include $state in the list
+     * @return false|array False if $state is not a valid release state
+     */
+    function betterStates($state, $include = false)
+    {
+        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+        $i = array_search($state, $states);
+        if ($i === false) {
+            return false;
+        }
+        if ($include) {
+            $i--;
+        }
+        return array_slice($states, $i + 1);
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/REST/11.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/REST/11.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/REST/11.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/REST/11.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,207 @@
+<?php
+/**
+ * PEAR_REST_11 - implement faster list-all/remote-list command
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: 11.php,v 1.4 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.3
+ */
+
+/**
+ * For downloading REST xml/txt files
+ */
+require_once 'PEAR/REST.php';
+
+/**
+ * Implement REST 1.1
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.3
+ */
+class PEAR_REST_11
+{
+    /**
+     * @var PEAR_REST
+     */
+    var $_rest;
+
+    function PEAR_REST_11($config, $options = array())
+    {
+        $this->_rest = &new PEAR_REST($config, $options);
+    }
+
+    function listAll($base, $dostable, $basic = true)
+    {
+        $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml');
+        if (PEAR::isError($categorylist)) {
+            return $categorylist;
+        }
+        $ret = array();
+        if (!is_array($categorylist['c'])) {
+            $categorylist['c'] = array($categorylist['c']);
+        }
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        foreach ($categorylist['c'] as $progress => $category) {
+            $category = $category['_content'];
+            $packagesinfo = $this->_rest->retrieveData($base .
+                'c/' . urlencode($category) . '/packagesinfo.xml');
+            if (PEAR::isError($packagesinfo)) {
+                continue;
+            }
+            if (!is_array($packagesinfo) || !isset($packagesinfo['pi'])) {
+                continue;
+            }
+            if (!is_array($packagesinfo['pi']) || !isset($packagesinfo['pi'][0])) {
+                $packagesinfo['pi'] = array($packagesinfo['pi']);
+            }
+            foreach ($packagesinfo['pi'] as $packageinfo) {
+                $info = $packageinfo['p'];
+                $package = $info['n'];
+                $releases = isset($packageinfo['a']) ? $packageinfo['a'] : false;
+                unset($latest);
+                unset($unstable);
+                unset($stable);
+                unset($state);
+                if ($releases) {
+                    if (!isset($releases['r'][0])) {
+                        $releases['r'] = array($releases['r']);
+                    }
+                    foreach ($releases['r'] as $release) {
+                        if (!isset($latest)) {
+                            if ($dostable && $release['s'] == 'stable') {
+                                $latest = $release['v'];
+                                $state = 'stable';
+                            }
+                            if (!$dostable) {
+                                $latest = $release['v'];
+                                $state = $release['s'];
+                            }
+                        }
+                        if (!isset($stable) && $release['s'] == 'stable') {
+                            $stable = $release['v'];
+                            if (!isset($unstable)) {
+                                $unstable = $stable;
+                            }
+                        }
+                        if (!isset($unstable) && $release['s'] != 'stable') {
+                            $latest = $unstable = $release['v'];
+                            $state = $release['s'];
+                        }
+                        if (isset($latest) && !isset($state)) {
+                            $state = $release['s'];
+                        }
+                        if (isset($latest) && isset($stable) && isset($unstable)) {
+                            break;
+                        }
+                    }
+                }
+                if ($basic) { // remote-list command
+                    if (!isset($latest)) {
+                        $latest = false;
+                    }
+                    $ret[$package] = array('stable' => $latest);
+                    continue;
+                }
+                // list-all command
+                $deps = array();
+                if (!isset($unstable)) {
+                    $unstable = false;
+                    $state = 'stable';
+                    if (isset($stable)) {
+                        $latest = $unstable = $stable;
+                    }
+                } else {
+                    $latest = $unstable;
+                }
+                if (!isset($latest)) {
+                    $latest = false;
+                }
+                if ($latest) {
+                    if (isset($packageinfo['deps'])) {
+                        if (!is_array($packageinfo['deps']) ||
+                              !isset($packageinfo['deps'][0])) {
+                            $packageinfo['deps'] = array($packageinfo['deps']);
+                        }
+                    }
+                    $d = false;
+                    foreach ($packageinfo['deps'] as $dep) {
+                        if ($dep['v'] == $latest) {
+                            $d = unserialize($dep['d']);
+                        }
+                    }
+                    if ($d) {
+                        if (isset($d['required'])) {
+                            if (!class_exists('PEAR_PackageFile_v2')) {
+                                require_once 'PEAR/PackageFile/v2.php';
+                            }
+                            if (!isset($pf)) {
+                                $pf = new PEAR_PackageFile_v2;
+                            }
+                            $pf->setDeps($d);
+                            $tdeps = $pf->getDeps();
+                        } else {
+                            $tdeps = $d;
+                        }
+                        foreach ($tdeps as $dep) {
+                            if ($dep['type'] !== 'pkg') {
+                                continue;
+                            }
+                            $deps[] = $dep;
+                        }
+                    }
+                }
+                if (!isset($stable)) {
+                    $stable = '-n/a-';
+                }
+                $info = array('stable' => $latest, 'summary' => $info['s'],
+                    'description' =>
+                    $info['d'], 'deps' => $deps, 'category' => $info['ca']['_content'],
+                    'unstable' => $unstable, 'state' => $state);
+                $ret[$package] = $info;
+            }
+        }
+        PEAR::popErrorHandling();
+        return $ret;
+    }
+
+    /**
+     * Return an array containing all of the states that are more stable than
+     * or equal to the passed in state
+     *
+     * @param string Release state
+     * @param boolean Determines whether to include $state in the list
+     * @return false|array False if $state is not a valid release state
+     */
+    function betterStates($state, $include = false)
+    {
+        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+        $i = array_search($state, $states);
+        if ($i === false) {
+            return false;
+        }
+        if ($include) {
+            $i--;
+        }
+        return array_slice($states, $i + 1);
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/REST.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/REST.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/REST.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/REST.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,386 @@
+<?php
+/**
+ * PEAR_REST
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: REST.php,v 1.19 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * For downloading xml files
+ */
+require_once 'PEAR.php';
+require_once 'PEAR/XMLParser.php';
+
+/**
+ * Intelligently retrieve data, following hyperlinks if necessary, and re-directing
+ * as well
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_REST
+{
+    var $config;
+    var $_options;
+    function PEAR_REST(&$config, $options = array())
+    {
+        $this->config = &$config;
+        $this->_options = $options;
+    }
+
+    /**
+     * Retrieve REST data, but always retrieve the local cache if it is available.
+     *
+     * This is useful for elements that should never change, such as information on a particular
+     * release
+     * @param string full URL to this resource
+     * @param array|false contents of the accept-encoding header
+     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
+     *                    parsed using PEAR_XMLParser
+     * @return string|array
+     */
+    function retrieveCacheFirst($url, $accept = false, $forcestring = false)
+    {
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
+        if (@file_exists($cachefile)) {
+            return unserialize(implode('', file($cachefile)));
+        }
+        return $this->retrieveData($url, $accept, $forcestring);
+    }
+
+    /**
+     * Retrieve a remote REST resource
+     * @param string full URL to this resource
+     * @param array|false contents of the accept-encoding header
+     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
+     *                    parsed using PEAR_XMLParser
+     * @return string|array
+     */
+    function retrieveData($url, $accept = false, $forcestring = false)
+    {
+        $cacheId = $this->getCacheId($url);
+        if ($ret = $this->useLocalCache($url, $cacheId)) {
+            return $ret;
+        }
+        if (!isset($this->_options['offline'])) {
+            $trieddownload = true;
+            $file = $this->downloadHttp($url, $cacheId ? $cacheId['lastChange'] : false, $accept);
+        } else {
+            $trieddownload = false;
+            $file = false;
+        }
+        if (PEAR::isError($file)) {
+            if ($file->getCode() == -9276) {
+                $trieddownload = false;
+                $file = false; // use local copy if available on socket connect error
+            } else {
+                return $file;
+            }
+        }
+        if (!$file) {
+            $ret = $this->getCache($url);
+            if (!PEAR::isError($ret) && $trieddownload) {
+                // reset the age of the cache if the server says it was unmodified
+                $this->saveCache($url, $ret, null, true, $cacheId);
+            }
+            return $ret;
+        }
+        if (is_array($file)) {
+            $headers = $file[2];
+            $lastmodified = $file[1];
+            $content = $file[0];
+        } else {
+            $content = $file;
+            $lastmodified = false;
+            $headers = array();
+        }
+        if ($forcestring) {
+            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            return $content;
+        }
+        if (isset($headers['content-type'])) {
+            switch ($headers['content-type']) {
+                case 'text/xml' :
+                case 'application/xml' :
+                    $parser = new PEAR_XMLParser;
+                    PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                    $err = $parser->parse($content);
+                    PEAR::popErrorHandling();
+                    if (PEAR::isError($err)) {
+                        return PEAR::raiseError('Invalid xml downloaded from "' . $url . '": ' .
+                            $err->getMessage());
+                    }
+                    $content = $parser->getData();
+                case 'text/html' :
+                default :
+                    // use it as a string
+            }
+        } else {
+            // assume XML
+            $parser = new PEAR_XMLParser;
+            $parser->parse($content);
+            $content = $parser->getData();
+        }
+        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        return $content;
+    }
+
+    function useLocalCache($url, $cacheid = null)
+    {
+        if ($cacheid === null) {
+            $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+                md5($url) . 'rest.cacheid';
+            if (@file_exists($cacheidfile)) {
+                $cacheid = unserialize(implode('', file($cacheidfile)));
+            } else {
+                return false;
+            }
+        }
+        $cachettl = $this->config->get('cache_ttl');
+        // If cache is newer than $cachettl seconds, we use the cache!
+        if (time() - $cacheid['age'] < $cachettl) {
+            return $this->getCache($url);
+        }
+        return false;
+    }
+
+    function getCacheId($url)
+    {
+        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cacheid';
+        if (@file_exists($cacheidfile)) {
+            $ret = unserialize(implode('', file($cacheidfile)));
+            return $ret;
+        } else {
+            return false;
+        }
+    }
+
+    function getCache($url)
+    {
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
+        if (@file_exists($cachefile)) {
+            return unserialize(implode('', file($cachefile)));
+        } else {
+            return PEAR::raiseError('No cached content available for "' . $url . '"');
+        }
+    }
+
+    /**
+     * @param string full URL to REST resource
+     * @param string original contents of the REST resource
+     * @param array  HTTP Last-Modified and ETag headers
+     * @param bool   if true, then the cache id file should be regenerated to
+     *               trigger a new time-to-live value
+     */
+    function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
+    {
+        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cacheid';
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
+        if ($cacheid === null && $nochange) {
+            $cacheid = unserialize(implode('', file($cacheidfile)));
+        }
+        $fp = @fopen($cacheidfile, 'wb');
+        if (!$fp) {
+            return false;
+        }
+        if ($nochange) {
+            fwrite($fp, serialize(array(
+                'age'        => time(),
+                'lastChange' => $cacheid['lastChange'],
+                )));
+            fclose($fp);
+            return true;
+        } else {
+            fwrite($fp, serialize(array(
+                'age'        => time(),
+                'lastChange' => $lastmodified,
+                )));
+        }
+        fclose($fp);
+        $fp = @fopen($cachefile, 'wb');
+        if (!$fp) {
+            @unlink($cacheidfile);
+            return false;
+        }
+        fwrite($fp, serialize($contents));
+        fclose($fp);
+        return true;
+    }
+
+    /**
+     * Efficiently Download a file through HTTP.  Returns downloaded file as a string in-memory
+     * This is best used for small files
+     *
+     * If an HTTP proxy has been configured (http_proxy PEAR_Config
+     * setting), the proxy will be used.
+     *
+     * @param string  $url       the URL to download
+     * @param string  $save_dir  directory to save file in
+     * @param false|string|array $lastmodified header values to check against for caching
+     *                           use false to return the header values from this download
+     * @param false|array $accept Accept headers to send
+     * @return string|array  Returns the contents of the downloaded file or a PEAR
+     *                       error on failure.  If the error is caused by
+     *                       socket-related errors, the error object will
+     *                       have the fsockopen error code available through
+     *                       getCode().  If caching is requested, then return the header
+     *                       values.
+     *
+     * @access public
+     */
+    function downloadHttp($url, $lastmodified = null, $accept = false)
+    {
+        $info = parse_url($url);
+        if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
+            return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
+        }
+        if (!isset($info['host'])) {
+            return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
+        } else {
+            $host = $info['host'];
+            if (!array_key_exists('port', $info)) {
+                $info['port'] = null;
+            }
+            if (!array_key_exists('path', $info)) {
+                $info['path'] = null;
+            }
+            $port = $info['port'];
+            $path = $info['path'];
+        }
+        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
+        if ($this->config->get('http_proxy')&& 
+              $proxy = parse_url($this->config->get('http_proxy'))) {
+            $proxy_host = @$proxy['host'];
+            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
+                $proxy_host = 'ssl://' . $proxy_host;
+            }
+            $proxy_port = @$proxy['port'];
+            $proxy_user = @$proxy['user'];
+            $proxy_pass = @$proxy['pass'];
+
+            if ($proxy_port == '') {
+                $proxy_port = 8080;
+            }
+        }
+        if (empty($port)) {
+            if (isset($info['scheme']) && $info['scheme'] == 'https') {
+                $port = 443;
+            } else {
+                $port = 80;
+            }
+        }
+        If (isset($proxy['host'])) {
+            $request = "GET $url HTTP/1.1\r\n";
+        } else {
+            $request = "GET $path HTTP/1.1\r\n";
+        }
+
+        $ifmodifiedsince = '';
+        if (is_array($lastmodified)) {
+            if (isset($lastmodified['Last-Modified'])) {
+                $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
+            }
+            if (isset($lastmodified['ETag'])) {
+                $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
+            }
+        } else {
+            $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
+        }
+        $request .= "Host: $host:$port\r\n" . $ifmodifiedsince .
+            "User-Agent: PEAR/1.4.6/PHP/" . PHP_VERSION . "\r\n";
+        $username = $this->config->get('username');
+        $password = $this->config->get('password');
+        if ($username && $password) {
+            $tmp = base64_encode("$username:$password");
+            $request .= "Authorization: Basic $tmp\r\n";
+        }
+        if ($proxy_host != '' && $proxy_user != '') {
+            $request .= 'Proxy-Authorization: Basic ' .
+                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
+        }
+        if ($accept) {
+            $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
+        }
+        $request .= "Connection: close\r\n";
+        $request .= "\r\n";
+        if ($proxy_host != '') {
+            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr, 15);
+            if (!$fp) {
+                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr",
+                    -9276);
+            }
+        } else {
+            if (isset($info['scheme']) && $info['scheme'] == 'https') {
+                $host = 'ssl://' . $host;
+            }
+            $fp = @fsockopen($host, $port, $errno, $errstr);
+            if (!$fp) {
+                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
+            }
+        }
+        fwrite($fp, $request);
+        $headers = array();
+        while (trim($line = fgets($fp, 1024))) {
+            if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
+                $headers[strtolower($matches[1])] = trim($matches[2]);
+            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
+                if ($matches[1] == 304 && ($lastmodified || ($lastmodified === false))) {
+                    return false;
+                }
+                if ($matches[1] != 200) {
+                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)", (int) $matches[1]);
+                }
+            }
+        }
+        if (isset($headers['content-length'])) {
+            $length = $headers['content-length'];
+        } else {
+            $length = -1;
+        }
+        $data = '';
+        while ($chunk = @fread($fp, 8192)) {
+            $data .= $chunk;
+        }
+        fclose($fp);
+        if ($lastmodified === false || $lastmodified) {
+            if (isset($headers['etag'])) {
+                $lastmodified = array('ETag' => $headers['etag']);
+            }
+            if (isset($headers['last-modified'])) {
+                if (is_array($lastmodified)) {
+                    $lastmodified['Last-Modified'] = $headers['last-modified'];
+                } else {
+                    $lastmodified = $headers['last-modified'];
+                }
+            }
+            return array($data, $lastmodified, $headers);
+        }
+        return $data;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/RunTest.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/RunTest.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/RunTest.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/RunTest.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,65 +1,77 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com>                             |
-// |          Greg Beaver <cellog@php.net>                                |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: RunTest.php,v 1.3.2.2 2004/11/09 19:55:49 cellog Exp $
-//
-
 /**
- * Simplified version of PHP's test suite
- * -- EXPERIMENTAL --
-
- Try it with:
-
- $ php -r 'include "../PEAR/RunTest.php"; $t=new PEAR_RunTest; $o=$t->run("./pear_system.phpt");print_r($o);'
-
-
-TODO:
-
-Actually finish the development and testing
-
+ * PEAR_RunTest
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: RunTest.php,v 1.16 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.3.3
  */
 
+/**
+ * for error handling
+ */
 require_once 'PEAR.php';
 require_once 'PEAR/Config.php';
 
 define('DETAILED', 1);
 putenv("PHP_PEAR_RUNTESTS=1");
 
+/**
+ * Simplified version of PHP's test suite
+ *
+ * Try it with:
+ *
+ * $ php -r 'include "../PEAR/RunTest.php"; $t=new PEAR_RunTest; $o=$t->run("./pear_system.phpt");print_r($o);'
+ *
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.3.3
+ */
 class PEAR_RunTest
 {
     var $_logger;
+    var $_options;
 
     /**
      * An object that supports the PEAR_Common->log() signature, or null
      * @param PEAR_Common|null
      */
-    function PEAR_RunTest($logger = null)
+    function PEAR_RunTest($logger = null, $options = array())
     {
+        if (is_null($logger)) {
+            require_once 'PEAR/Common.php';
+            $logger = new PEAR_Common;
+        }
         $this->_logger = $logger;
+        $this->_options = $options;
     }
 
     //
     //  Run an individual test case.
     //
 
-    function run($file)
+    function run($file, $ini_settings = '')
     {
         $cwd = getcwd();
         $conf = &PEAR_Config::singleton();
@@ -72,12 +84,13 @@
 
         // Load the sections of the test file.
         $section_text = array(
-            'TEST'   => '(unnamed test)',
-            'SKIPIF' => '',
-            'GET'    => '',
-            'ARGS'   => '',
+            'TEST'    => '(unnamed test)',
+            'SKIPIF'  => '',
+            'GET'     => '',
+            'ARGS'    => '',
         );
 
+        $file = realpath($file);
         if (!is_file($file) || !$fp = fopen($file, "r")) {
             return PEAR::raiseError("Cannot open test file: $file");
         }
@@ -91,15 +104,22 @@
                 $section = $r[1];
                 $section_text[$section] = '';
                 continue;
-            }
+            } elseif (empty($section)) {
+                fclose($fp);
+                return PEAR::raiseError("Invalid sections formats in test file: $file");
+			}
 
             // Add to the section text.
             $section_text[$section] .= $line;
         }
         fclose($fp);
 
-        $shortname = str_replace($cwd.'/', '', $file);
-        $tested = trim($section_text['TEST'])." [$shortname]";
+        $shortname = str_replace($cwd . DIRECTORY_SEPARATOR, '', $file);
+        if (!isset($this->_options['simple'])) {
+            $tested = trim($section_text['TEST']) . "[$shortname]";
+        } else {
+            $tested = trim($section_text['TEST']) . ' ';
+        }
 
         $tmp = realpath(dirname($file));
         $tmp_skipif = $tmp . uniqid('/phpt.');
@@ -134,7 +154,9 @@
                     if ($reason) {
                         $skipreason .= " (reason: $reason)";
                     }
-                    $this->_logger->log(0, $skipreason);
+                    if (!isset($this->_options['quiet'])) {
+                        $this->_logger->log(0, $skipreason);
+                    }
                     if (isset($old_php)) {
                         $php = $old_php;
                     }
@@ -161,14 +183,25 @@
 
         $args = $section_text['ARGS'] ? ' -- '.$section_text['ARGS'] : '';
 
-        $ini_settings='';
         $cmd = "$php$ini_settings -f $tmp_file$args 2>&1";
         if (isset($this->_logger)) {
             $this->_logger->log(2, 'Running command "' . $cmd . '"');
         }
-        $out = `$cmd`;
-        @unlink($tmp_post);
 
+        $savedir = getcwd(); // in case the test moves us around
+        if (isset($section_text['RETURNS'])) {
+            ob_start();
+            system($cmd, $return_value);
+            $out = ob_get_contents();
+            ob_end_clean();
+            @unlink($tmp_post);
+            $section_text['RETURNS'] = (int) trim($section_text['RETURNS']);
+            $returnfail = ($return_value != $section_text['RETURNS']);
+        } else {
+            $out = `$cmd`;
+            $returnfail = false;
+        }
+        chdir($savedir);
         // Does the output match what is expected?
         $output = trim($out);
         $output = preg_replace('/\r\n/', "\n", $output);
@@ -196,9 +229,11 @@
             print(str_repeat('=', 80) . "\n");
             var_dump($output);
     */
-            if (preg_match("/^$wanted_re\$/s", $output)) {
+            if (!$returnfail && preg_match("/^$wanted_re\$/s", $output)) {
                 @unlink($tmp_file);
-                $this->_logger->log(0, "PASS $tested$info");
+                if (!isset($this->_options['quiet'])) {
+                    $this->_logger->log(0, "PASS $tested$info");
+                }
                 if (isset($old_php)) {
                     $php = $old_php;
                 }
@@ -210,9 +245,11 @@
             $wanted = preg_replace('/\r\n/',"\n",$wanted);
         // compare and leave on success
             $ok = (0 == strcmp($output,$wanted));
-            if ($ok) {
+            if (!$returnfail && $ok) {
                 @unlink($tmp_file);
-                $this->_logger->log(0, "PASS $tested$info");
+                if (!isset($this->_options['quiet'])) {
+                    $this->_logger->log(0, "PASS $tested$info");
+                }
                 if (isset($old_php)) {
                     $php = $old_php;
                 }
@@ -227,13 +264,24 @@
             $this->_logger->log(0, "FAIL $tested$info");
         }
 
-        $GLOBALS['__PHP_FAILED_TESTS__'][] = array(
+        if (isset($section_text['RETURNS'])) {
+            $GLOBALS['__PHP_FAILED_TESTS__'][] = array(
                             'name' => $file,
                             'test_name' => $tested,
                             'output' => ereg_replace('\.phpt$','.log', $file),
                             'diff'   => ereg_replace('\.phpt$','.diff', $file),
-                            'info'   => $info
+                            'info'   => $info,
+                            'return' => $return_value
                             );
+        } else {
+            $GLOBALS['__PHP_FAILED_TESTS__'][] = array(
+                            'name' => $file,
+                            'test_name' => $tested,
+                            'output' => ereg_replace('\.phpt$','.log', $file),
+                            'diff'   => ereg_replace('\.phpt$','.diff', $file),
+                            'info'   => $info,
+                            );
+        }
 
         // write .exp
         if (strpos($log_format,'E') !== FALSE) {
@@ -261,7 +309,9 @@
             if (!$log = fopen($logname,'w')) {
                 return PEAR::raiseError("Cannot create test log - $logname");
             }
-            fwrite($log, $this->generate_diff($wanted,$output));
+            fwrite($log, $this->generate_diff($wanted, $output,
+                isset($section_text['RETURNS']) ? array(trim($section_text['RETURNS']),
+                    $return_value) : null));
             fclose($log);
         }
 
@@ -278,6 +328,14 @@
 $output
 ---- FAILED
 ");
+            if ($returnfail) {
+                fwrite($log,"
+---- EXPECTED RETURN
+$section_text[RETURNS]
+---- ACTUAL RETURN
+$return_value
+");
+            }
             fclose($log);
             //error_report($file,$logname,$tested);
         }
@@ -289,7 +347,7 @@
         return $warn ? 'WARNED' : 'FAILED';
     }
 
-    function generate_diff($wanted,$output)
+    function generate_diff($wanted, $output, $return_value)
     {
         $w = explode("\n", $wanted);
         $o = explode("\n", $output);
@@ -301,7 +359,12 @@
         foreach($o1 as $idx => $val) $o2[sprintf("%03d>",$idx)] = sprintf("%03d+ ", $idx+1).$val;
         $diff = array_merge($w2, $o2);
         ksort($diff);
-        return implode("\r\n", $diff);
+        if ($return_value) {
+            $extra = "##EXPECTED: $return_value[0]\r\n##RETURNED: $return_value[1]";
+        } else {
+            $extra = '';
+        }
+        return implode("\r\n", $diff) . $extra;
     }
 
     //
@@ -323,4 +386,4 @@
     }
 
 }
-?>
\ No newline at end of file
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Common.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Common.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Common.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Common.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,208 @@
+<?php
+/**
+ * PEAR_Task_Common, base class for installer tasks
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Common.php,v 1.15 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**#@+
+ * Error codes for task validation routines
+ */
+define('PEAR_TASK_ERROR_NOATTRIBS', 1);
+define('PEAR_TASK_ERROR_MISSING_ATTRIB', 2);
+define('PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE', 3);
+define('PEAR_TASK_ERROR_INVALID', 4);
+/**#@-*/
+define('PEAR_TASK_PACKAGE', 1);
+define('PEAR_TASK_INSTALL', 2);
+define('PEAR_TASK_PACKAGEANDINSTALL', 3);
+/**
+ * A task is an operation that manipulates the contents of a file.
+ *
+ * Simple tasks operate on 1 file.  Multiple tasks are executed after all files have been
+ * processed and installed, and are designed to operate on all files containing the task.
+ * The Post-install script task simply takes advantage of the fact that it will be run
+ * after installation, replace is a simple task.
+ *
+ * Combining tasks is possible, but ordering is significant.
+ *
+ * <file name="test.php" role="php">
+ *  <tasks:replace from="@data-dir@" to="data_dir" type="pear-config"/>
+ *  <tasks:postinstallscript/>
+ * </file>
+ *
+ * This will first replace any instance of @data-dir@ in the test.php file
+ * with the path to the current data directory.  Then, it will include the
+ * test.php file and run the script it contains to configure the package post-installation.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ * @abstract
+ */
+class PEAR_Task_Common
+{
+    /**
+     * Valid types for this version are 'simple' and 'multiple'
+     *
+     * - simple tasks operate on the contents of a file and write out changes to disk
+     * - multiple tasks operate on the contents of many files and write out the
+     *   changes directly to disk
+     *
+     * Child task classes must override this property.
+     * @access protected
+     */
+    var $type = 'simple';
+    /**
+     * Determines which install phase this task is executed under
+     */
+    var $phase = PEAR_TASK_INSTALL;
+    /**
+     * @access protected
+     */
+    var $config;
+    /**
+     * @access protected
+     */
+    var $registry;
+    /**
+     * @access protected
+     */
+    var $logger;
+    /**
+     * @access protected
+     */
+    var $installphase;
+    /**
+     * @param PEAR_Config
+     * @param PEAR_Common
+     */
+    function PEAR_Task_Common(&$config, &$logger, $phase)
+    {
+        $this->config = &$config;
+        $this->registry = &$config->getRegistry();
+        $this->logger = &$logger;
+        $this->installphase = $phase;
+        if ($this->type == 'multiple') {
+            $GLOBALS['_PEAR_TASK_POSTINSTANCES'][get_class($this)][] = &$this;
+        }
+    }
+
+    /**
+     * Validate the basic contents of a task tag.
+     * @param PEAR_PackageFile_v2
+     * @param array
+     * @param PEAR_Config
+     * @param array the entire parsed <file> tag
+     * @return true|array On error, return an array in format:
+     *    array(PEAR_TASK_ERROR_???[, param1][, param2][, ...])
+     *
+     *    For PEAR_TASK_ERROR_MISSING_ATTRIB, pass the attribute name in
+     *    For PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, pass the attribute name and an array
+     *    of legal values in
+     * @static
+     * @abstract
+     */
+    function validXml($pkg, $xml, &$config, $fileXml)
+    {
+    }
+
+    /**
+     * Initialize a task instance with the parameters
+     * @param array raw, parsed xml
+     * @param array attributes from the <file> tag containing this task
+     * @param string|null last installed version of this package
+     * @abstract
+     */
+    function init($xml, $fileAttributes, $lastVersion)
+    {
+    }
+
+    /**
+     * Begin a task processing session.  All multiple tasks will be processed after each file
+     * has been successfully installed, all simple tasks should perform their task here and
+     * return any errors using the custom throwError() method to allow forward compatibility
+     *
+     * This method MUST NOT write out any changes to disk
+     * @param PEAR_PackageFile_v2
+     * @param string file contents
+     * @param string the eventual final file location (informational only)
+     * @return string|false|PEAR_Error false to skip this file, PEAR_Error to fail
+     *         (use $this->throwError), otherwise return the new contents
+     * @abstract
+     */
+    function startSession($pkg, $contents, $dest)
+    {
+    }
+
+    /**
+     * This method is used to process each of the tasks for a particular multiple class
+     * type.  Simple tasks need not implement this method.
+     * @param array an array of tasks
+     * @access protected
+     * @static
+     * @abstract
+     */
+    function run($tasks)
+    {
+    }
+
+    /**
+     * @static
+     * @final
+     */
+    function hasPostinstallTasks()
+    {
+        return isset($GLOBALS['_PEAR_TASK_POSTINSTANCES']);
+    }
+
+    /**
+     * @static
+     * @final
+     */
+     function runPostinstallTasks()
+     {
+         foreach ($GLOBALS['_PEAR_TASK_POSTINSTANCES'] as $class => $tasks) {
+             $err = call_user_func(array($class, 'run'),
+                  $GLOBALS['_PEAR_TASK_POSTINSTANCES'][$class]);
+             if ($err) {
+                 return PEAR_Task_Common::throwError($err);
+             }
+         }
+         unset($GLOBALS['_PEAR_TASK_POSTINSTANCES']);
+    }
+
+    /**
+     * Determines whether a role is a script
+     * @return bool
+     */
+    function isScript()
+    {
+        return $this->type == 'script';
+    }
+
+    function throwError($msg, $code = -1)
+    {
+        include_once 'PEAR.php';
+        return PEAR::raiseError($msg, $code);
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript/rw.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript/rw.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript/rw.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript/rw.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,176 @@
+<?php
+/**
+ * <tasks:postinstallscript> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: rw.php,v 1.11 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Postinstallscript.php';
+/**
+ * Abstracts the postinstallscript file task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
+{
+    /**
+     * parent package file object
+     *
+     * @var PEAR_PackageFile_v2_rw
+     */
+    var $_pkg;
+    /**
+     * Enter description here...
+     *
+     * @param PEAR_PackageFile_v2_rw $pkg
+     * @param PEAR_Config $config
+     * @param PEAR_Frontend $logger
+     * @param array $fileXml
+     * @return PEAR_Task_Postinstallscript_rw
+     */
+    function PEAR_Task_Postinstallscript_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents);
+    }
+
+    function getName()
+    {
+        return 'postinstallscript';
+    }
+
+    /**
+     * add a simple <paramgroup> to the post-install script
+     *
+     * Order is significant, so call this method in the same
+     * sequence the users should see the paramgroups.  The $params
+     * parameter should either be the result of a call to {@link getParam()}
+     * or an array of calls to getParam().
+     * 
+     * Use {@link addConditionTypeGroup()} to add a <paramgroup> containing
+     * a <conditiontype> tag
+     * @param string $id <paramgroup> id as seen by the script
+     * @param array|false $params array of getParam() calls, or false for no params
+     * @param string|false $instructions
+     */
+    function addParamGroup($id, $params = false, $instructions = false)
+    {
+        if ($params && isset($params[0]) && !isset($params[1])) {
+            $params = $params[0];
+        }
+        $stuff =
+            array(
+                $this->_pkg->getTasksNs() . ':id' => $id,
+            );
+        if ($instructions) {
+            $stuff[$this->_pkg->getTasksNs() . ':instructions'] = $instructions;
+        }
+        if ($params) {
+            $stuff[$this->_pkg->getTasksNs() . ':param'] = $params;
+        }
+        $this->_params[$this->_pkg->getTasksNs() . ':paramgroup'][] = $stuff;
+    }
+
+    /**
+     * add a complex <paramgroup> to the post-install script with conditions
+     *
+     * This inserts a <paramgroup> with
+     *
+     * Order is significant, so call this method in the same
+     * sequence the users should see the paramgroups.  The $params
+     * parameter should either be the result of a call to {@link getParam()}
+     * or an array of calls to getParam().
+     * 
+     * Use {@link addParamGroup()} to add a simple <paramgroup>
+     *
+     * @param string $id <paramgroup> id as seen by the script
+     * @param string $oldgroup <paramgroup> id of the section referenced by
+     *                         <conditiontype>
+     * @param string $param name of the <param> from the older section referenced
+     *                      by <contitiontype>
+     * @param string $value value to match of the parameter
+     * @param string $conditiontype one of '=', '!=', 'preg_match'
+     * @param array|false $params array of getParam() calls, or false for no params
+     * @param string|false $instructions
+     */
+    function addConditionTypeGroup($id, $oldgroup, $param, $value, $conditiontype = '=',
+                                   $params = false, $instructions = false)
+    {
+        if ($params && isset($params[0]) && !isset($params[1])) {
+            $params = $params[0];
+        }
+        $stuff =
+            array(
+                $this->_pkg->getTasksNs() . ':id' => $id,
+            );
+        if ($instructions) {
+            $stuff[$this->_pkg->getTasksNs() . ':instructions'] = $instructions;
+        }
+        $stuff[$this->_pkg->getTasksNs() . ':name'] = $oldgroup . '::' . $param;
+        $stuff[$this->_pkg->getTasksNs() . ':conditiontype'] = $conditiontype;
+        $stuff[$this->_pkg->getTasksNs() . ':value'] = $value;
+        if ($params) {
+            $stuff[$this->_pkg->getTasksNs() . ':param'] = $params;
+        }
+        $this->_params[$this->_pkg->getTasksNs() . ':paramgroup'][] = $stuff;
+    }
+
+    function getXml()
+    {
+        return $this->_params;
+    }
+
+    /**
+     * Use to set up a param tag for use in creating a paramgroup
+     * @static
+     */
+    function getParam($name, $prompt, $type = 'string', $default = null)
+    {
+        if ($default !== null) {
+            return 
+            array(
+                $this->_pkg->getTasksNs() . ':name' => $name,
+                $this->_pkg->getTasksNs() . ':prompt' => $prompt,
+                $this->_pkg->getTasksNs() . ':type' => $type,
+                $this->_pkg->getTasksNs() . ':default' => $default
+            );
+        }
+        return
+            array(
+                $this->_pkg->getTasksNs() . ':name' => $name,
+                $this->_pkg->getTasksNs() . ':prompt' => $prompt,
+                $this->_pkg->getTasksNs() . ':type' => $type,
+            );
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Postinstallscript.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,325 @@
+<?php
+/**
+ * <tasks:postinstallscript>
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Postinstallscript.php,v 1.17 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Common.php';
+/**
+ * Implements the postinstallscript file task.
+ *
+ * Note that post-install scripts are handled separately from installation, by the
+ * "pear run-scripts" command
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Task_Postinstallscript extends PEAR_Task_Common
+{
+    var $type = 'script';
+    var $_class;
+    var $_params;
+    var $_obj;
+    /**
+     *
+     * @var PEAR_PackageFile_v2
+     */
+    var $_pkg;
+    var $_contents;
+    var $phase = PEAR_TASK_INSTALL;
+
+    /**
+     * Validate the raw xml at parsing-time.
+     *
+     * This also attempts to validate the script to make sure it meets the criteria
+     * for a post-install script
+     * @param PEAR_PackageFile_v2
+     * @param array The XML contents of the <postinstallscript> tag
+     * @param PEAR_Config
+     * @param array the entire parsed <file> tag
+     * @static
+     */
+    function validateXml($pkg, $xml, &$config, $fileXml)
+    {
+        if ($fileXml['role'] != 'php') {
+            return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+            $fileXml['name'] . '" must be role="php"');
+        }
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $file = $pkg->getFileContents($fileXml['name']);
+        if (PEAR::isError($file)) {
+            PEAR::popErrorHandling();
+            return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                $fileXml['name'] . '" is not valid: ' .
+                $file->getMessage());
+        } elseif ($file === null) {
+            return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                $fileXml['name'] . '" could not be retrieved for processing!');
+        } else {
+            $analysis = $pkg->analyzeSourceCode($file, true);
+            if (PEAR::isError($analysis)) {
+                PEAR::popErrorHandling();
+                return array(PEAR_TASK_ERROR_INVALID, 'Analysis of post-install script "' .
+                    $fileXml['name'] . '" failed');
+            }
+            if (count($analysis['declared_classes']) != 1) {
+                PEAR::popErrorHandling();
+                return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                    $fileXml['name'] . '" must declare exactly 1 class');
+            }
+            $class = $analysis['declared_classes'][0];
+            if ($class != str_replace(array('/', '.php'), array('_', ''),
+                  $fileXml['name']) . '_postinstall') {
+                PEAR::popErrorHandling();
+                return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                    $fileXml['name'] . '" class "' . $class . '" must be named "' .
+                    str_replace(array('/', '.php'), array('_', ''),
+                    $fileXml['name']) . '_postinstall"');
+            }
+            if (!isset($analysis['declared_methods'][$class])) {
+                PEAR::popErrorHandling();
+                return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                    $fileXml['name'] . '" must declare methods init() and run()');
+            }
+            $methods = array('init' => 0, 'run' => 1);
+            foreach ($analysis['declared_methods'][$class] as $method) {
+                if (isset($methods[$method])) {
+                    unset($methods[$method]);
+                }
+            }
+            if (count($methods)) {
+                PEAR::popErrorHandling();
+                return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                    $fileXml['name'] . '" must declare methods init() and run()');
+            }
+        }
+        PEAR::popErrorHandling();
+        $definedparams = array();
+        $tasksNamespace = $pkg->getTasksNs() . ':';
+        if (!isset($xml[$tasksNamespace . 'paramgroup']) && isset($xml['paramgroup'])) {
+            // in order to support the older betas, which did not expect internal tags
+            // to also use the namespace
+            $tasksNamespace = '';
+        }
+        if (isset($xml[$tasksNamespace . 'paramgroup'])) {
+            $params = $xml[$tasksNamespace . 'paramgroup'];
+            if (!is_array($params) || !isset($params[0])) {
+                $params = array($params);
+            }
+            foreach ($params as $param) {
+                if (!isset($param[$tasksNamespace . 'id'])) {
+                    return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                        $fileXml['name'] . '" <paramgroup> must have ' .
+                        'an ' . $tasksNamespace . 'id> tag');
+                }
+                if (isset($param[$tasksNamespace . 'name'])) {
+                    if (!in_array($param[$tasksNamespace . 'name'], $definedparams)) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" ' . $tasksNamespace .
+                            'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
+                            '" parameter "' . $param[$tasksNamespace . 'name'] .
+                            '" has not been previously defined');
+                    }
+                    if (!isset($param[$tasksNamespace . 'conditiontype'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" ' . $tasksNamespace .
+                            'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
+                            '" must have a ' . $tasksNamespace . 
+                            'conditiontype> tag containing either "=", ' .
+                            '"!=", or "preg_match"');
+                    }
+                    if (!in_array($param[$tasksNamespace . 'conditiontype'],
+                          array('=', '!=', 'preg_match'))) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" ' . $tasksNamespace .
+                            'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
+                            '" must have a ' . $tasksNamespace .
+                            'conditiontype> tag containing either "=", ' .
+                            '"!=", or "preg_match"');
+                    }
+                    if (!isset($param[$tasksNamespace . 'value'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" ' . $tasksNamespace .
+                            'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
+                            '" must have a ' . $tasksNamespace .
+                            'value> tag containing expected parameter value');
+                    }
+                }
+                if (isset($param[$tasksNamespace . 'instructions'])) {
+                    if (!is_string($param[$tasksNamespace . 'instructions'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" ' . $tasksNamespace .
+                            'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
+                            '" ' . $tasksNamespace . 'instructions> must be simple text');
+                    }
+                }
+                if (!isset($param[$tasksNamespace . 'param'])) {
+                    continue; // <param> is no longer required
+                }
+                $subparams = $param[$tasksNamespace . 'param'];
+                if (!is_array($subparams) || !isset($subparams[0])) {
+                    $subparams = array($subparams);
+                }
+                foreach ($subparams as $subparam) {
+                    if (!isset($subparam[$tasksNamespace . 'name'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" parameter for ' .
+                            $tasksNamespace . 'paramgroup> id "' .
+                            $param[$tasksNamespace . 'id'] . '" must have ' .
+                            'a ' . $tasksNamespace . 'name> tag');
+                    }
+                    if (!preg_match('/[a-zA-Z0-9]+/',
+                          $subparam[$tasksNamespace . 'name'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" parameter "' .
+                            $subparam[$tasksNamespace . 'name'] .
+                            '" for ' . $tasksNamespace . 'paramgroup> id "' .
+                            $param[$tasksNamespace . 'id'] .
+                            '" is not a valid name.  Must contain only alphanumeric characters');
+                    }
+                    if (!isset($subparam[$tasksNamespace . 'prompt'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" parameter "' .
+                            $subparam[$tasksNamespace . 'name'] .
+                            '" for ' . $tasksNamespace . 'paramgroup> id "' .
+                            $param[$tasksNamespace . 'id'] .
+                            '" must have a ' . $tasksNamespace . 'prompt> tag');
+                    }
+                    if (!isset($subparam[$tasksNamespace . 'type'])) {
+                        return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
+                            $fileXml['name'] . '" parameter "' .
+                            $subparam[$tasksNamespace . 'name'] .
+                            '" for ' . $tasksNamespace . 'paramgroup> id "' .
+                            $param[$tasksNamespace . 'id'] .
+                            '" must have a ' . $tasksNamespace . 'type> tag');
+                    }
+                    $definedparams[] = $param[$tasksNamespace . 'id'] . '::' .
+                    $subparam[$tasksNamespace . 'name'];
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Initialize a task instance with the parameters
+     * @param array raw, parsed xml
+     * @param array attributes from the <file> tag containing this task
+     * @param string|null last installed version of this package, if any (useful for upgrades)
+     */
+    function init($xml, $fileattribs, $lastversion)
+    {
+        $this->_class = str_replace('/', '_', $fileattribs['name']);
+        $this->_filename = $fileattribs['name'];
+        $this->_class = str_replace ('.php', '', $this->_class) . '_postinstall';
+        $this->_params = $xml;
+        $this->_lastversion = $lastversion;
+    }
+
+    /**
+     * Strip the tasks: namespace from internal params
+     *
+     * @access private
+     */
+    function _stripNamespace($params = null)
+    {
+        if ($params === null) {
+            $params = array();
+            if (!is_array($this->_params)) {
+                return;
+            }
+            foreach ($this->_params as $i => $param) {
+                if (is_array($param)) {
+                    $param = $this->_stripNamespace($param);
+                }
+                $params[str_replace($this->_pkg->getTasksNs() . ':', '', $i)] = $param;
+            }
+            $this->_params = $params;
+        } else {
+            $newparams = array();
+            foreach ($params as $i => $param) {
+                if (is_array($param)) {
+                    $param = $this->_stripNamespace($param);
+                }
+                $newparams[str_replace($this->_pkg->getTasksNs() . ':', '', $i)] = $param;
+            }
+            return $newparams;
+        }
+    }
+
+    /**
+     * Unlike other tasks, the installed file name is passed in instead of the file contents,
+     * because this task is handled post-installation
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param string file name
+     * @return bool|PEAR_Error false to skip this file, PEAR_Error to fail
+     *         (use $this->throwError)
+     */
+    function startSession($pkg, $contents)
+    {
+        if ($this->installphase != PEAR_TASK_INSTALL) {
+            return false;
+        }
+        // remove the tasks: namespace if present
+        $this->_pkg = $pkg;
+        $this->_stripNamespace();
+        $this->logger->log(0, 'Including external post-installation script "' .
+            $contents . '" - any errors are in this script');
+        include_once $contents;
+        if (class_exists($this->_class)) {
+            $this->logger->log(0, 'Inclusion succeeded');
+        } else {
+            return $this->throwError('init of post-install script class "' . $this->_class
+                . '" failed');
+        }
+        $this->_obj = new $this->_class;
+        $this->logger->log(1, 'running post-install script "' . $this->_class . '->init()"');
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $res = $this->_obj->init($this->config, $pkg, $this->_lastversion);
+        PEAR::popErrorHandling();
+        if ($res) {
+            $this->logger->log(0, 'init succeeded');
+        } else {
+            return $this->throwError('init of post-install script "' . $this->_class .
+                '->init()" failed');
+        }
+        $this->_contents = $contents;
+        return true;
+    }
+
+    /**
+     * No longer used
+     * @see PEAR_PackageFile_v2::runPostinstallScripts()
+     * @param array an array of tasks
+     * @param string install or upgrade
+     * @access protected
+     * @static
+     */
+    function run()
+    {
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Replace/rw.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Replace/rw.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Replace/rw.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Replace/rw.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+<?php
+/**
+ * <tasks:replace> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: rw.php,v 1.3 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Replace.php';
+/**
+ * Abstracts the replace task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Replace_rw extends PEAR_Task_Replace
+{
+    function PEAR_Task_Replace_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents);
+    }
+
+    function setInfo($from, $to, $type)
+    {
+        $this->_params = array('attribs' => array('from' => $from, 'to' => $to, 'type' => $type));
+    }
+
+    function getName()
+    {
+        return 'replace';
+    }
+
+    function getXml()
+    {
+        return $this->_params;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Replace.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Replace.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Replace.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Replace.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,182 @@
+<?php
+/**
+ * <tasks:replace>
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Replace.php,v 1.13 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Common.php';
+/**
+ * Implements the replace file task.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Task_Replace extends PEAR_Task_Common
+{
+    var $type = 'simple';
+    var $phase = PEAR_TASK_PACKAGEANDINSTALL;
+    var $_replacements;
+
+    /**
+     * Validate the raw xml at parsing-time.
+     * @param PEAR_PackageFile_v2
+     * @param array raw, parsed xml
+     * @param PEAR_Config
+     * @static
+     */
+    function validateXml($pkg, $xml, &$config, $fileXml)
+    {
+        if (!isset($xml['attribs'])) {
+            return array(PEAR_TASK_ERROR_NOATTRIBS);
+        }
+        if (!isset($xml['attribs']['type'])) {
+            return array(PEAR_TASK_ERROR_MISSING_ATTRIB, 'type');
+        }
+        if (!isset($xml['attribs']['to'])) {
+            return array(PEAR_TASK_ERROR_MISSING_ATTRIB, 'to');
+        }
+        if (!isset($xml['attribs']['from'])) {
+            return array(PEAR_TASK_ERROR_MISSING_ATTRIB, 'from');
+        }
+        if ($xml['attribs']['type'] == 'pear-config') {
+            if (!in_array($xml['attribs']['to'], $config->getKeys())) {
+                return array(PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, 'to', $xml['attribs']['to'],
+                    $config->getKeys());
+            }
+        } elseif ($xml['attribs']['type'] == 'php-const') {
+            if (defined($xml['attribs']['to'])) {
+                return true;
+            } else {
+                return array(PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, 'to', $xml['attribs']['to'],
+                    array('valid PHP constant'));
+            }
+        } elseif ($xml['attribs']['type'] == 'package-info') {
+            if (in_array($xml['attribs']['to'],
+                array('name', 'summary', 'channel', 'notes', 'extends', 'description',
+                    'release_notes', 'license', 'release-license', 'license-uri',
+                    'version', 'api-version', 'state', 'api-state', 'release_date',
+                    'date', 'time'))) {
+                return true;
+            } else {
+                return array(PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, 'to', $xml['attribs']['to'],
+                    array('name', 'summary', 'channel', 'notes', 'extends', 'description',
+                    'release_notes', 'license', 'release-license', 'license-uri',
+                    'version', 'api-version', 'state', 'api-state', 'release_date',
+                    'date', 'time'));
+            }
+        } else {
+            return array(PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, 'type', $xml['attribs']['type'],
+                array('pear-config', 'package-info'));
+        }
+        return true;
+    }
+
+    /**
+     * Initialize a task instance with the parameters
+     * @param array raw, parsed xml
+     * @param unused
+     */
+    function init($xml, $attribs)
+    {
+        $this->_replacements = isset($xml['attribs']) ? array($xml) : $xml;
+    }
+
+    /**
+     * Do a package.xml 1.0 replacement, with additional package-info fields available
+     *
+     * See validateXml() source for the complete list of allowed fields
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param string file contents
+     * @param string the eventual final file location (informational only)
+     * @return string|false|PEAR_Error false to skip this file, PEAR_Error to fail
+     *         (use $this->throwError), otherwise return the new contents
+     */
+    function startSession($pkg, $contents, $dest)
+    {
+        $subst_from = $subst_to = array();
+        foreach ($this->_replacements as $a) {
+            $a = $a['attribs'];
+            $to = '';
+            if ($a['type'] == 'pear-config') {
+                if ($this->installphase == PEAR_TASK_PACKAGE) {
+                    return false;
+                }
+                if ($a['to'] == 'master_server') {
+                    $chan = $this->registry->getChannel($pkg->getChannel());
+                    if ($chan) {
+                        $to = $chan->getServer();
+                    } else {
+                        $this->logger->log(0, "$dest: invalid pear-config replacement: $a[to]");
+                        return false;
+                    }
+                } else {
+                    if ($this->config->isDefinedLayer('ftp')) {
+                        // try the remote config file first
+                        $to = $this->config->get($a['to'], 'ftp', $pkg->getChannel());
+                        if (is_null($to)) {
+                            // then default to local
+                            $to = $this->config->get($a['to'], null, $pkg->getChannel());
+                        }
+                    } else {
+                        $to = $this->config->get($a['to'], null, $pkg->getChannel());
+                    }
+                }
+                if (is_null($to)) {
+                    $this->logger->log(0, "$dest: invalid pear-config replacement: $a[to]");
+                    return false;
+                }
+            } elseif ($a['type'] == 'php-const') {
+                if ($this->installphase == PEAR_TASK_PACKAGE) {
+                    return false;
+                }
+                if (defined($a['to'])) {
+                    $to = constant($a['to']);
+                } else {
+                    $this->logger->log(0, "$dest: invalid php-const replacement: $a[to]");
+                    return false;
+                }
+            } else {
+                if ($t = $pkg->packageInfo($a['to'])) {
+                    $to = $t;
+                } else {
+                    $this->logger->log(0, "$dest: invalid package-info replacement: $a[to]");
+                    return false;
+                }
+            }
+            if (!is_null($to)) {
+                $subst_from[] = $a['from'];
+                $subst_to[] = $to;
+            }
+        }
+        $this->logger->log(3, "doing " . sizeof($subst_from) .
+            " substitution(s) for $dest");
+        if (sizeof($subst_from)) {
+            $contents = str_replace($subst_from, $subst_to, $contents);
+        }
+        return $contents;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol/rw.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol/rw.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol/rw.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol/rw.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,62 @@
+<?php
+/**
+ * <tasks:unixeol> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: rw.php,v 1.4 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Unixeol.php';
+/**
+ * Abstracts the unixeol task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
+{
+    function PEAR_Task_Unixeol_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return true;
+    }
+
+    function getName()
+    {
+        return 'unixeol';
+    }
+
+    function getXml()
+    {
+        return '';
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Unixeol.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,83 @@
+<?php
+/**
+ * <tasks:unixeol>
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Unixeol.php,v 1.8 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Common.php';
+/**
+ * Implements the unix line endings file task.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Task_Unixeol extends PEAR_Task_Common
+{
+    var $type = 'simple';
+    var $phase = PEAR_TASK_PACKAGE;
+    var $_replacements;
+
+    /**
+     * Validate the raw xml at parsing-time.
+     * @param PEAR_PackageFile_v2
+     * @param array raw, parsed xml
+     * @param PEAR_Config
+     * @static
+     */
+    function validateXml($pkg, $xml, &$config, $fileXml)
+    {
+        if ($xml != '') {
+            return array(PEAR_TASK_ERROR_INVALID, 'no attributes allowed');
+        }
+        return true;
+    }
+
+    /**
+     * Initialize a task instance with the parameters
+     * @param array raw, parsed xml
+     * @param unused
+     */
+    function init($xml, $attribs)
+    {
+    }
+
+    /**
+     * Replace all line endings with line endings customized for the current OS
+     *
+     * See validateXml() source for the complete list of allowed fields
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param string file contents
+     * @param string the eventual final file location (informational only)
+     * @return string|false|PEAR_Error false to skip this file, PEAR_Error to fail
+     *         (use $this->throwError), otherwise return the new contents
+     */
+    function startSession($pkg, $contents, $dest)
+    {
+        $this->logger->log(3, "replacing all line endings with \\n in $dest");
+        return preg_replace("/\r\n|\n\r|\r|\n/", "\n", $contents);
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol/rw.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol/rw.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol/rw.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol/rw.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,62 @@
+<?php
+/**
+ * <tasks:windowseol> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: rw.php,v 1.4 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Windowseol.php';
+/**
+ * Abstracts the windowseol task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
+{
+    function PEAR_Task_Windowseol_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return true;
+    }
+
+    function getName()
+    {
+        return 'windowseol';
+    }
+
+    function getXml()
+    {
+        return '';
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Task/Windowseol.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,83 @@
+<?php
+/**
+ * <tasks:windowseol>
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Windowseol.php,v 1.7 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Common.php';
+/**
+ * Implements the windows line endsings file task.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Task_Windowseol extends PEAR_Task_Common
+{
+    var $type = 'simple';
+    var $phase = PEAR_TASK_PACKAGE;
+    var $_replacements;
+
+    /**
+     * Validate the raw xml at parsing-time.
+     * @param PEAR_PackageFile_v2
+     * @param array raw, parsed xml
+     * @param PEAR_Config
+     * @static
+     */
+    function validateXml($pkg, $xml, &$config, $fileXml)
+    {
+        if ($xml != '') {
+            return array(PEAR_TASK_ERROR_INVALID, 'no attributes allowed');
+        }
+        return true;
+    }
+
+    /**
+     * Initialize a task instance with the parameters
+     * @param array raw, parsed xml
+     * @param unused
+     */
+    function init($xml, $attribs)
+    {
+    }
+
+    /**
+     * Replace all line endings with windows line endings
+     *
+     * See validateXml() source for the complete list of allowed fields
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @param string file contents
+     * @param string the eventual final file location (informational only)
+     * @return string|false|PEAR_Error false to skip this file, PEAR_Error to fail
+     *         (use $this->throwError), otherwise return the new contents
+     */
+    function startSession($pkg, $contents, $dest)
+    {
+        $this->logger->log(3, "replacing all line endings with \\r\\n in $dest");
+        return preg_replace("/\r\n|\n\r|\r|\n/", "\r\n", $contents);
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Validate.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Validate.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Validate.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Validate.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,624 @@
+<?php
+/**
+ * PEAR_Validate
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: Validate.php,v 1.45 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**#@+
+ * Constants for install stage
+ */
+define('PEAR_VALIDATE_INSTALLING', 1);
+define('PEAR_VALIDATE_UNINSTALLING', 2); // this is not bit-mapped like the others
+define('PEAR_VALIDATE_NORMAL', 3);
+define('PEAR_VALIDATE_DOWNLOADING', 4); // this is not bit-mapped like the others
+define('PEAR_VALIDATE_PACKAGING', 7);
+/**#@-*/
+require_once 'PEAR/Common.php';
+require_once 'PEAR/Validator/PECL.php';
+
+/**
+ * Validation class for package.xml - channel-level advanced validation
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Validate
+{
+    var $packageregex = _PEAR_COMMON_PACKAGE_NAME_PREG;
+    /**
+     * @var PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     */
+    var $_packagexml;
+    /**
+     * @var int one of the PEAR_VALIDATE_* constants
+     */
+    var $_state = PEAR_VALIDATE_NORMAL;
+    /**
+     * Format: ('error' => array('field' => name, 'reason' => reason), 'warning' => same)
+     * @var array
+     * @access private
+     */
+    var $_failures = array('error' => array(), 'warning' => array());
+
+    /**
+     * Override this method to handle validation of normal package names
+     * @param string
+     * @return bool
+     * @access protected
+     */
+    function _validPackageName($name)
+    {
+        return (bool) preg_match('/^' . $this->packageregex . '$/', $name);
+    }
+
+    /**
+     * @param string package name to validate
+     * @param string name of channel-specific validation package
+     * @final
+     */
+    function validPackageName($name, $validatepackagename = false)
+    {
+        if ($validatepackagename) {
+            if (strtolower($name) == strtolower($validatepackagename)) {
+                return (bool) preg_match('/^[a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+)*$/', $name);
+            }
+        }
+        return $this->_validPackageName($name);
+    }
+
+    /**
+     * This validates a bundle name, and bundle names must conform
+     * to the PEAR naming convention, so the method is final and static.
+     * @param string
+     * @final
+     * @static
+     */
+    function validGroupName($name)
+    {
+        return (bool) preg_match('/^' . _PEAR_COMMON_PACKAGE_NAME_PREG . '$/', $name);
+    }
+
+    /**
+     * Determine whether $state represents a valid stability level
+     * @param string
+     * @return bool
+     * @static
+     * @final
+     */
+    function validState($state)
+    {
+        return in_array($state, array('snapshot', 'devel', 'alpha', 'beta', 'stable'));
+    }
+
+    /**
+     * Get a list of valid stability levels
+     * @return array
+     * @static
+     * @final
+     */
+    function getValidStates()
+    {
+        return array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+    }
+
+    /**
+     * Determine whether a version is a properly formatted version number that can be used
+     * by version_compare
+     * @param string
+     * @return bool
+     * @static
+     * @final
+     */
+    function validVersion($ver)
+    {
+        return (bool) preg_match(PEAR_COMMON_PACKAGE_VERSION_PREG, $ver);
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     */
+    function setPackageFile(&$pf)
+    {
+        $this->_packagexml = &$pf;
+    }
+
+    /**
+     * @access private
+     */
+    function _addFailure($field, $reason)
+    {
+        $this->_failures['errors'][] = array('field' => $field, 'reason' => $reason);
+    }
+
+    /**
+     * @access private
+     */
+    function _addWarning($field, $reason)
+    {
+        $this->_failures['warnings'][] = array('field' => $field, 'reason' => $reason);
+    }
+
+    function getFailures()
+    {
+        $failures = $this->_failures;
+        $this->_failures = array('warnings' => array(), 'errors' => array());
+        return $failures;
+    }
+
+    /**
+     * @param int one of the PEAR_VALIDATE_* constants
+     */
+    function validate($state = null)
+    {
+        if (!isset($this->_packagexml)) {
+            return false;
+        }
+        if ($state !== null) {
+            $this->_state = $state;
+        }
+        $this->_failures = array('warnings' => array(), 'errors' => array());
+        $this->validatePackageName();
+        $this->validateVersion();
+        $this->validateMaintainers();
+        $this->validateDate();
+        $this->validateSummary();
+        $this->validateDescription();
+        $this->validateLicense();
+        $this->validateNotes();
+        if ($this->_packagexml->getPackagexmlVersion() == '1.0') {
+            $this->validateState();
+            $this->validateFilelist();
+        } elseif ($this->_packagexml->getPackagexmlVersion() == '2.0') {
+            $this->validateTime();
+            $this->validateStability();
+            $this->validateDeps();
+            $this->validateMainFilelist();
+            $this->validateReleaseFilelist();
+            //$this->validateGlobalTasks();
+            $this->validateChangelog();
+        }
+        return !((bool) count($this->_failures['errors']));
+    }
+
+    /**
+     * @access protected
+     */
+    function validatePackageName()
+    {
+        if ($this->_state == PEAR_VALIDATE_PACKAGING ||
+              $this->_state == PEAR_VALIDATE_NORMAL) {
+            if ($this->_packagexml->getPackagexmlVersion() == '2.0' &&
+                  $this->_packagexml->getExtends()) {
+                $version = $this->_packagexml->getVersion() . '';
+                $name = $this->_packagexml->getPackage();
+                $test = array_shift($a = explode('.', $version));
+                if ($test == '0') {
+                    return true;
+                }
+                $vlen = strlen($test);
+                $majver = substr($name, strlen($name) - $vlen);
+                while ($majver && !is_numeric($majver{0})) {
+                    $majver = substr($majver, 1);
+                }
+                if ($majver != $test) {
+                    $this->_addWarning('package', "package $name extends package " .
+                        $this->_packagexml->getExtends() . ' and so the name should ' .
+                        'have a postfix equal to the major version like "' .
+                        $this->_packagexml->getExtends() . $test . '"');
+                    return true;
+                } elseif (substr($name, 0, strlen($name) - $vlen) !=
+                            $this->_packagexml->getExtends()) {
+                    $this->_addWarning('package', "package $name extends package " .
+                        $this->_packagexml->getExtends() . ' and so the name must ' .
+                        'be an extension like "' . $this->_packagexml->getExtends() .
+                        $test . '"');
+                    return true;
+                }
+            }
+        }
+        if (!$this->validPackageName($this->_packagexml->getPackage())) {
+            $this->_addFailure('name', 'package name "' .
+                $this->_packagexml->getPackage() . '" is invalid');
+            return false;
+        }
+    }
+
+    /**
+     * @access protected
+     */
+    function validateVersion()
+    {
+        if ($this->_state != PEAR_VALIDATE_PACKAGING) {
+            if (!$this->validVersion($this->_packagexml->getVersion())) {
+                $this->_addFailure('version',
+                    'Invalid version number "' . $this->_packagexml->getVersion() . '"');
+            }
+            return false;
+        }
+        $version = $this->_packagexml->getVersion();
+        $versioncomponents = explode('.', $version);
+        if (count($versioncomponents) != 3) {
+            $this->_addWarning('version',
+                'A version number should have 3 decimals (x.y.z)');
+            return true;
+        }
+        $name = $this->_packagexml->getPackage();
+        // version must be based upon state
+        switch ($this->_packagexml->getState()) {
+            case 'snapshot' :
+                return true;
+            case 'devel' :
+                if ($versioncomponents[0] . 'a' == '0a') {
+                    return true;
+                }
+                if ($versioncomponents[0] == 0) {
+                    $versioncomponents[0] = '0';
+                    $this->_addWarning('version',
+                        'version "' . $version . '" should be "' .
+                        implode('.' ,$versioncomponents) . '"');
+                } else {
+                    $this->_addWarning('version',
+                        'packages with devel stability must be < version 1.0.0');
+                }
+                return true;
+            break;
+            case 'alpha' :
+            case 'beta' :
+                // check for a package that extends a package,
+                // like Foo and Foo2
+                if (!$this->_packagexml->getExtends()) {
+                    if ($versioncomponents[0] == '1') {
+                        if ($versioncomponents[2]{0} == '0') {
+                            if ($versioncomponents[2] == '0') {
+                                // version 1.*.0000
+                                $this->_addWarning('version',
+                                    'version 1.' . $versioncomponents[1] .
+                                        '.0 probably should not be alpha or beta');
+                                return true;
+                            } elseif (strlen($versioncomponents[2]) > 1) {
+                                // version 1.*.0RC1 or 1.*.0beta24 etc.
+                                return true;
+                            } else {
+                                // version 1.*.0
+                                $this->_addWarning('version',
+                                    'version 1.' . $versioncomponents[1] .
+                                        '.0 probably should not be alpha or beta');
+                                return true;
+                            }
+                        } else {
+                            $this->_addWarning('version',
+                                'bugfix versions (1.3.x where x > 0) probably should ' .
+                                'not be alpha or beta');
+                            return true;
+                        }
+                    } elseif ($versioncomponents[0] != '0') {
+                        $this->_addWarning('version',
+                            'major versions greater than 1 are not allowed for packages ' .
+                            'without an <extends> tag or an identical postfix (foo2 v2.0.0)');
+                        return true;
+                    }
+                    if ($versioncomponents[0] . 'a' == '0a') {
+                        return true;
+                    }
+                    if ($versioncomponents[0] == 0) {
+                        $versioncomponents[0] = '0';
+                        $this->_addWarning('version',
+                            'version "' . $version . '" should be "' .
+                            implode('.' ,$versioncomponents) . '"');
+                    }
+                } else {
+                    $vlen = strlen($versioncomponents[0] . '');
+                    $majver = substr($name, strlen($name) - $vlen);
+                    while ($majver && !is_numeric($majver{0})) {
+                        $majver = substr($majver, 1);
+                    }
+                    if (($versioncomponents[0] != 0) && $majver != $versioncomponents[0]) {
+                        $this->_addWarning('version', 'first version number "' .
+                            $versioncomponents[0] . '" must match the postfix of ' .
+                            'package name "' . $name . '" (' .
+                            $majver . ')');
+                        return true;
+                    }
+                    if ($versioncomponents[0] == $majver) {
+                        if ($versioncomponents[2]{0} == '0') {
+                            if ($versioncomponents[2] == '0') {
+                                // version 2.*.0000
+                                $this->_addWarning('version',
+                                    "version $majver." . $versioncomponents[1] .
+                                        '.0 probably should not be alpha or beta');
+                                return false;
+                            } elseif (strlen($versioncomponents[2]) > 1) {
+                                // version 2.*.0RC1 or 2.*.0beta24 etc.
+                                return true;
+                            } else {
+                                // version 2.*.0
+                                $this->_addWarning('version',
+                                    "version $majver." . $versioncomponents[1] .
+                                        '.0 cannot be alpha or beta');
+                                return true;
+                            }
+                        } else {
+                            $this->_addWarning('version',
+                                "bugfix versions ($majver.x.y where y > 0) should " .
+                                'not be alpha or beta');
+                            return true;
+                        }
+                    } elseif ($versioncomponents[0] != '0') {
+                        $this->_addWarning('version',
+                            "only versions 0.x.y and $majver.x.y are allowed for alpha/beta releases");
+                        return true;
+                    }
+                    if ($versioncomponents[0] . 'a' == '0a') {
+                        return true;
+                    }
+                    if ($versioncomponents[0] == 0) {
+                        $versioncomponents[0] = '0';
+                        $this->_addWarning('version',
+                            'version "' . $version . '" should be "' .
+                            implode('.' ,$versioncomponents) . '"');
+                    }
+                }
+                return true;
+            break;
+            case 'stable' :
+                if ($versioncomponents[0] == '0') {
+                    $this->_addWarning('version', 'versions less than 1.0.0 cannot ' .
+                    'be stable');
+                    return true;
+                }
+                if (!is_numeric($versioncomponents[2])) {
+                    if (preg_match('/\d+(rc|a|alpha|b|beta)\d*/i',
+                          $versioncomponents[2])) {
+                        $this->_addWarning('version', 'version "' . $version . '" or any ' .
+                            'RC/beta/alpha version cannot be stable');
+                        return true;
+                    }
+                }
+                // check for a package that extends a package,
+                // like Foo and Foo2
+                if ($this->_packagexml->getExtends()) {
+                    $vlen = strlen($versioncomponents[0] . '');
+                    $majver = substr($name, strlen($name) - $vlen);
+                    while ($majver && !is_numeric($majver{0})) {
+                        $majver = substr($majver, 1);
+                    }
+                    if (($versioncomponents[0] != 0) && $majver != $versioncomponents[0]) {
+                        $this->_addWarning('version', 'first version number "' .
+                            $versioncomponents[0] . '" must match the postfix of ' .
+                            'package name "' . $name . '" (' .
+                            $majver . ')');
+                        return true;
+                    }
+                } elseif ($versioncomponents[0] > 1) {
+                    $this->_addWarning('version', 'major version x in x.y.z may not be greater than ' .
+                        '1 for any package that does not have an <extends> tag');
+                }
+                return true;
+            break;
+            default :
+                return false;
+            break;
+        }
+    }
+
+    /**
+     * @access protected
+     */
+    function validateMaintainers()
+    {
+        // maintainers can only be truly validated server-side for most channels
+        // but allow this customization for those who wish it
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateDate()
+    {
+        if ($this->_state == PEAR_VALIDATE_NORMAL ||
+              $this->_state == PEAR_VALIDATE_PACKAGING) {
+            if (!preg_match('/\d\d\d\d\-\d\d\-\d\d/',
+                  $this->_packagexml->getDate())) {
+                $this->_addFailure('date', 'invalid release date "' .
+                    $this->_packagexml->getDate() . '"');
+                return false;
+            }
+            if (strtotime($this->_packagexml->getDate()) == -1) {
+                $this->_addFailure('date', 'invalid release date "' .
+                    $this->_packagexml->getDate() . '"');
+                return false;
+            }
+            if ($this->_state == PEAR_VALIDATE_PACKAGING &&
+                  $this->_packagexml->getDate() != date('Y-m-d')) {
+                $this->_addWarning('date', 'Release Date "' .
+                    $this->_packagexml->getDate() . '" is not today');
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateTime()
+    {
+        if (!$this->_packagexml->getTime()) {
+            // default of no time value set
+            return true;
+        }
+        // packager automatically sets time, so only validate if
+        // pear validate is called
+        if ($this->_state = PEAR_VALIDATE_NORMAL) {
+            if (!preg_match('/\d\d:\d\d:\d\d/',
+                  $this->_packagexml->getTime())) {
+                $this->_addFailure('time', 'invalid release time "' .
+                    $this->_packagexml->getTime() . '"');
+                return false;
+            }
+            if (strtotime($this->_packagexml->getTime()) == -1) {
+                $this->_addFailure('time', 'invalid release time "' .
+                    $this->_packagexml->getTime() . '"');
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateState()
+    {
+        // this is the closest to "final" php4 can get
+        if (!PEAR_Validate::validState($this->_packagexml->getState())) {
+            if (strtolower($this->_packagexml->getState() == 'rc')) {
+                $this->_addFailure('state', 'RC is not a state, it is a version ' .
+                    'postfix, use ' . $this->_packagexml->getVersion() . 'RC1, state beta');
+            }
+            $this->_addFailure('state', 'invalid release state "' .
+                $this->_packagexml->getState() . '", must be one of: ' .
+                implode(', ', PEAR_Validate::getValidStates()));
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateStability()
+    {
+        $ret = true;
+        $packagestability = $this->_packagexml->getState();
+        $apistability = $this->_packagexml->getState('api');
+        if (!PEAR_Validate::validState($packagestability)) {
+            $this->_addFailure('state', 'invalid release stability "' .
+                $this->_packagexml->getState() . '", must be one of: ' .
+                implode(', ', PEAR_Validate::getValidStates()));
+            $ret = false;
+        }
+        $apistates = PEAR_Validate::getValidStates();
+        array_shift($apistates); // snapshot is not allowed
+        if (!in_array($apistability, $apistates)) {
+            $this->_addFailure('state', 'invalid API stability "' .
+                $this->_packagexml->getState('api') . '", must be one of: ' .
+                implode(', ', $apistates));
+            $ret = false;
+        }
+        return $ret;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateSummary()
+    {
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateDescription()
+    {
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateLicense()
+    {
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateNotes()
+    {
+        return true;
+    }
+
+    /**
+     * for package.xml 2.0 only - channels can't use package.xml 1.0
+     * @access protected
+     */
+    function validateDependencies()
+    {
+        return true;
+    }
+
+    /**
+     * for package.xml 1.0 only
+     * @access private
+     */
+    function _validateFilelist()
+    {
+        return true; // placeholder for now
+    }
+
+    /**
+     * for package.xml 2.0 only
+     * @access protected
+     */
+    function validateMainFilelist()
+    {
+        return true; // placeholder for now
+    }
+
+    /**
+     * for package.xml 2.0 only
+     * @access protected
+     */
+    function validateReleaseFilelist()
+    {
+        return true; // placeholder for now
+    }
+
+    /**
+     * @access protected
+     */
+    function validateChangelog()
+    {
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateFilelist()
+    {
+        return true;
+    }
+
+    /**
+     * @access protected
+     */
+    function validateDeps()
+    {
+        return true;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Validator/PECL.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Validator/PECL.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/Validator/PECL.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/Validator/PECL.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Channel Validator for the pecl.php.net channel
+ *
+ * PHP 4 and PHP 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: PECL.php,v 1.5 2006/01/06 04:47:37 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a5
+ */
+/**
+ * This is the parent class for all validators
+ */
+require_once 'PEAR/Validate.php';
+/**
+ * Channel Validator for the pecl.php.net channel
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a5
+ */
+class PEAR_Validator_PECL extends PEAR_Validate
+{
+    function validateVersion()
+    {
+        return true;
+    }
+
+    function validatePackageName()
+    {
+        $ret = parent::validatePackageName();
+        if ($this->_packagexml->getPackageType() == 'extsrc') {
+            if (strtolower($this->_packagexml->getPackage()) !=
+                  strtolower($this->_packagexml->getProvidesExtension())) {
+                $this->_addWarning('providesextension', 'package name "' .
+                    $this->_packagexml->getPackage() . '" is different from extension name "' .
+                    $this->_packagexml->getProvidesExtension() . '"');
+            }
+        }
+        return $ret;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/XMLParser.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/XMLParser.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR/XMLParser.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR/XMLParser.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,261 @@
+<?php
+/**
+ * PEAR_FTP
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Stephan Schmidt (original XML_Unserializer code)
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: XMLParser.php,v 1.11 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Parser for any xml file
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog@php.net>
+ * @author     Stephan Schmidt (original XML_Unserializer code)
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_XMLParser
+{
+    /**
+     * unserilialized data
+     * @var string $_serializedData
+     */
+    var $_unserializedData = null;
+
+    /**
+     * name of the root tag
+     * @var string $_root
+     */
+    var $_root = null;
+
+    /**
+     * stack for all data that is found
+     * @var array    $_dataStack
+     */
+    var $_dataStack  =   array();
+
+    /**
+     * stack for all values that are generated
+     * @var array    $_valStack
+     */
+    var $_valStack  =   array();
+
+    /**
+     * current tag depth
+     * @var int    $_depth
+     */
+    var $_depth = 0;
+
+    /**
+     * @return array
+     */
+    function getData()
+    {
+        return $this->_unserializedData;
+    }
+
+    /**
+     * @param string xml content
+     * @return true|PEAR_Error
+     */
+    function parse($data)
+    {
+        if (!extension_loaded('xml')) {
+            include_once 'PEAR.php';
+            return PEAR::raiseError("XML Extension not found", 1);
+        }
+        $this->_valStack = array();
+        $this->_dataStack = array();
+        $this->_depth = 0;
+
+        if (version_compare(phpversion(), '5.0.0', 'lt')) {
+            if (strpos($data, 'encoding="UTF-8"')) {
+                $data = utf8_decode($data);
+            }
+            $xp = @xml_parser_create('ISO-8859-1');
+        } else {
+            if (strpos($data, 'encoding="UTF-8"')) {
+                $xp = @xml_parser_create('UTF-8');
+            } else {
+                $xp = @xml_parser_create('ISO-8859-1');
+            }
+        }
+        xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, 0);
+        xml_set_object($xp, $this);
+        xml_set_element_handler($xp, 'startHandler', 'endHandler');
+        xml_set_character_data_handler($xp, 'cdataHandler');
+        if (!xml_parse($xp, $data)) {
+            $msg = xml_error_string(xml_get_error_code($xp));
+            $line = xml_get_current_line_number($xp);
+            xml_parser_free($xp);
+            include_once 'PEAR.php';
+            return PEAR::raiseError("XML Error: '$msg' on line '$line'", 2);
+        }
+        xml_parser_free($xp);
+        return true;
+    }
+
+    /**
+     * Start element handler for XML parser
+     *
+     * @access private
+     * @param  object $parser  XML parser object
+     * @param  string $element XML element
+     * @param  array  $attribs attributes of XML tag
+     * @return void
+     */
+    function startHandler($parser, $element, $attribs)
+    {
+        $type = 'string';
+
+        $this->_depth++;
+        $this->_dataStack[$this->_depth] = null;
+
+        $val = array(
+                     'name'         => $element,
+                     'value'        => null,
+                     'type'         => $type,
+                     'childrenKeys' => array(),
+                     'aggregKeys'   => array()
+                    );
+
+        if (count($attribs) > 0) {
+            $val['children'] = array();
+            $val['type'] = 'array';
+
+            $val['children']['attribs'] = $attribs;
+
+        }
+
+        array_push($this->_valStack, $val);
+    }
+
+    /**
+     * post-process data
+     *
+     * @param string $data
+     * @param string $element element name
+     */
+    function postProcess($data, $element)
+    {
+        return trim($data);
+    }
+
+    /**
+     * End element handler for XML parser
+     *
+     * @access private
+     * @param  object XML parser object
+     * @param  string
+     * @return void
+     */
+    function endHandler($parser, $element)
+    {
+        $value = array_pop($this->_valStack);
+        $data  = $this->postProcess($this->_dataStack[$this->_depth], $element);
+
+        // adjust type of the value
+        switch(strtolower($value['type'])) {
+
+            /*
+             * unserialize an array
+             */
+            case 'array':
+                if ($data !== '') {
+                    $value['children']['_content'] = $data;
+                }
+                if (isset($value['children'])) {
+                    $value['value'] = $value['children'];
+                } else {
+                    $value['value'] = array();
+                }
+                break;
+
+            /*
+             * unserialize a null value
+             */
+            case 'null':
+                $data = null;
+                break;
+
+            /*
+             * unserialize any scalar value
+             */
+            default:
+                settype($data, $value['type']);
+                $value['value'] = $data;
+                break;
+        }
+        $parent = array_pop($this->_valStack);
+        if ($parent === null) {
+            $this->_unserializedData = &$value['value'];
+            $this->_root = &$value['name'];
+            return true;
+        } else {
+            // parent has to be an array
+            if (!isset($parent['children']) || !is_array($parent['children'])) {
+                $parent['children'] = array();
+                if ($parent['type'] != 'array') {
+                    $parent['type'] = 'array';
+                }
+            }
+
+            if (!empty($value['name'])) {
+                // there already has been a tag with this name
+                if (in_array($value['name'], $parent['childrenKeys'])) {
+                    // no aggregate has been created for this tag
+                    if (!in_array($value['name'], $parent['aggregKeys'])) {
+                        if (isset($parent['children'][$value['name']])) {
+                            $parent['children'][$value['name']] = array($parent['children'][$value['name']]);
+                        } else {
+                            $parent['children'][$value['name']] = array();
+                        }
+                        array_push($parent['aggregKeys'], $value['name']);
+                    }
+                    array_push($parent['children'][$value['name']], $value['value']);
+                } else {
+                    $parent['children'][$value['name']] = &$value['value'];
+                    array_push($parent['childrenKeys'], $value['name']);
+                }
+            } else {
+                array_push($parent['children'],$value['value']);
+            }
+            array_push($this->_valStack, $parent);
+        }
+
+        $this->_depth--;
+    }
+
+    /**
+     * Handler for character data
+     *
+     * @access private
+     * @param  object XML parser object
+     * @param  string CDATA
+     * @return void
+     */
+    function cdataHandler($parser, $cdata)
+    {
+        $this->_dataStack[$this->_depth] .= $cdata;
+    }
+}
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PEAR.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PEAR.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PEAR.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,26 +1,33 @@
 <?php
-//
-// +--------------------------------------------------------------------+
-// | PEAR, the PHP Extension and Application Repository                 |
-// +--------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                              |
-// +--------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,     |
-// | that is bundled with this package in the file LICENSE, and is      |
-// | available through the world-wide-web at the following url:         |
-// | http://www.php.net/license/3_0.txt.                                |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to        |
-// | license@php.net so we can mail you a copy immediately.             |
-// +--------------------------------------------------------------------+
-// | Authors: Sterling Hughes <sterling@php.net>                        |
-// |          Stig Bakken <ssb@php.net>                                 |
-// |          Tomas V.V.Cox <cox@idecnet.com>                           |
-// +--------------------------------------------------------------------+
-//
-// $Id: PEAR.php,v 1.82.2.4 2004/10/22 05:53:36 cellog Exp $
-//
+/**
+ * PEAR, the PHP Extension and Application Repository
+ *
+ * PEAR class and PEAR_Error class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Sterling Hughes <sterling@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: PEAR.php,v 1.97 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**#@+
+ * ERROR constants
+ */
 define('PEAR_ERROR_RETURN',     1);
 define('PEAR_ERROR_PRINT',      2);
 define('PEAR_ERROR_TRIGGER',    4);
@@ -31,6 +38,7 @@
  * @deprecated
  */
 define('PEAR_ERROR_EXCEPTION', 32);
+/**#@-*/
 define('PEAR_ZE2', (function_exists('version_compare') &&
                     version_compare(zend_version(), "2-dev", "ge")));
 
@@ -59,7 +67,7 @@
 $GLOBALS['_PEAR_shutdown_funcs']         = array();
 $GLOBALS['_PEAR_error_handler_stack']    = array();
 
-ini_set('track_errors', true);
+@ini_set('track_errors', true);
 
 /**
  * Base class for other PEAR classes.  Provides rudimentary
@@ -78,9 +86,18 @@
  * IMPORTANT! To use the emulated destructors you need to create the
  * objects by reference: $obj =& new PEAR_child;
  *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@php.net>
- * @see http://pear.php.net/manual/
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/package/PEAR
+ * @see        PEAR_Error
+ * @since      Class available since PHP 4.0.2
+ * @link        http://pear.php.net/manual/en/core.pear.php#core.pear.pear
  */
 class PEAR
 {
@@ -164,10 +181,9 @@
             if (method_exists($this, $destructor)) {
                 global $_PEAR_destructor_object_list;
                 $_PEAR_destructor_object_list[] = &$this;
-                static $registered = false;
-                if (!$registered) {
+                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
                     register_shutdown_function("_PEAR_call_destructors");
-                    $registered = true;
+                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
                 }
                 break;
             } else {
@@ -493,7 +509,7 @@
      * @see PEAR::setErrorHandling
      * @since PHP 4.0.5
      */
-    function raiseError($message = null,
+    function &raiseError($message = null,
                          $code = null,
                          $mode = null,
                          $options = null,
@@ -538,9 +554,11 @@
             $ec = 'PEAR_Error';
         }
         if ($skipmsg) {
-            return new $ec($code, $mode, $options, $userinfo);
+            $a = &new $ec($code, $mode, $options, $userinfo);
+            return $a;
         } else {
-            return new $ec($message, $code, $mode, $options, $userinfo);
+            $a = &new $ec($message, $code, $mode, $options, $userinfo);
+            return $a;
         }
     }
 
@@ -554,14 +572,16 @@
      * @param string $message
      *
      */
-    function throwError($message = null,
+    function &throwError($message = null,
                          $code = null,
                          $userinfo = null)
     {
         if (isset($this) && is_a($this, 'PEAR')) {
-            return $this->raiseError($message, $code, null, null, $userinfo);
+            $a = &$this->raiseError($message, $code, null, null, $userinfo);
+            return $a;
         } else {
-            return PEAR::raiseError($message, $code, null, null, $userinfo);
+            $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
+            return $a;
         }
     }
 
@@ -770,7 +790,23 @@
 }
 
 // }}}
-
+/**
+ * Standard PEAR error class for PHP 4
+ *
+ * This class is supserseded by {@link PEAR_Exception} in PHP 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.4.6
+ * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
+ * @see        PEAR::raiseError(), PEAR::throwError()
+ * @since      Class available since PHP 4.0.2
+ */
 class PEAR_Error
 {
     // {{{ properties
@@ -860,8 +896,8 @@
             }
         }
         if ($this->mode & PEAR_ERROR_EXCEPTION) {
-            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING);
-            eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);');
+            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
+            eval('$e = new Exception($this->message, $this->code);throw($e);');
         }
     }
 
@@ -976,6 +1012,9 @@
      */
     function getBacktrace($frame = null)
     {
+        if (defined('PEAR_IGNORE_BACKTRACE')) {
+            return null;
+        }
         if ($frame === null) {
             return $this->backtrace;
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Components.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Components.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Components.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Components.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: Components.php,v 1.2 2004/11/23 08:34:15 aidan Exp $
+// $Id: Components.php,v 1.10 2005/12/05 14:49:56 aidan Exp $
 
 
 // Functions
@@ -24,12 +24,14 @@
 $components['function']['array_combine']              = '5.0.0';
 $components['function']['array_diff_assoc']           = '4.3.0';
 $components['function']['array_diff_key']             = '5.0.2';
+$components['function']['array_diff_uassoc']          = '5.0.0';
 $components['function']['array_diff_ukey']            = '5.0.2';
 $components['function']['array_intersect_assoc']      = '5.0.0';
 $components['function']['array_intersect_key']        = '5.0.2';
 $components['function']['array_intersect_uassoc']     = '5.0.0';
 $components['function']['array_intersect_ukey']       = '5.0.2';
 $components['function']['array_key_exists']           = '4.1.0';
+$components['function']['array_product']              = '5.1.0';
 $components['function']['array_search']               = '4.0.5';
 $components['function']['array_udiff']                = '5.0.0';
 $components['function']['array_udiff_assoc']          = '5.0.0';
@@ -38,27 +40,44 @@
 $components['function']['array_uintersect_assoc']     = '5.0.0';
 $components['function']['array_uintersect_uassoc']    = '5.0.0';
 $components['function']['array_walk_recursive']       = '5.0.0';
+$components['function']['bcinvert']                   = '5.2.0';
+$components['function']['bcpowmod']                   = '5.0.0';
 $components['function']['call_user_func_array']       = '4.0.4';
 $components['function']['clone']                      = '5.0.0';
 $components['function']['constant']                   = '4.0.4';
 $components['function']['convert_uudecode']           = '5.0.0';
 $components['function']['convert_uuencode']           = '5.0.0';
+$components['function']['debug_print_backtrace']      = '5.0.0';
 $components['function']['file_get_contents']          = '4.3.0';
 $components['function']['file_put_contents']          = '5.0.0';
 $components['function']['floatval']                   = '4.2.0';
 $components['function']['fprintf']                    = '5.0.0';
+$components['function']['fputcsv']                    = '5.0.0';
+$components['function']['get_headers']                = '5.0.0';
 $components['function']['get_include_path']           = '4.3.0';
 $components['function']['html_entity_decode']         = '4.3.0';
+$components['function']['htmlspecialchars_decode']    = '5.1.0';
 $components['function']['http_build_query']           = '5.0.0';
+$components['function']['ibase_timefmt']              = '5.0.0';
+$components['function']['idate']                      = '5.1.0';
 $components['function']['image_type_to_mime_type']    = '4.3.0';
+$components['function']['inet_ntop']                  = '5.1.0';
+$components['function']['inet_pton']                  = '5.1.0';
 $components['function']['ini_get_all']                = '4.2.0';
 $components['function']['is_a']                       = '4.2.0';
+$components['function']['is_scalar']                  = '4.0.5';
 $components['function']['md5_file']                   = '4.2.0';
+$components['function']['mhash']                      = '4.0.0';
+$components['function']['mime_content_type']          = '4.3.0';
 $components['function']['ob_clean']                   = '4.2.0';
 $components['function']['ob_flush']                   = '4.2.0';
 $components['function']['ob_get_clean']               = '4.3.0';
 $components['function']['ob_get_flush']               = '4.3.0';
 $components['function']['php_strip_whitespace']       = '5.0.0';
+$components['function']['property_exists']            = '5.1.0';
+$components['function']['pg_affected_rows']           = '4.2.0';
+$components['function']['pg_escape_bytea']            = '4.2.0';
+$components['function']['pg_unescape_bytea']          = '4.2.0';
 $components['function']['restore_include_path']       = '4.3.0';
 $components['function']['scandir']                    = '5.0.0';
 $components['function']['set_include_path']           = '4.3.0';
@@ -71,15 +90,17 @@
 $components['function']['strpbrk']                    = '5.0.0';
 $components['function']['strripos']                   = '5.0.0';
 $components['function']['substr_compare']             = '5.0.0';
+$components['function']['time_sleep_until']           = '5.1.0';
 $components['function']['var_export']                 = '4.2.0';
 $components['function']['version_compare']            = '4.1.0';
 $components['function']['vprintf']                    = '4.1.0';
 $components['function']['vsprintf']                   = '4.1.0';
 
 // Constants
+$components['constant']['DIRECTORY_SEPARATOR']        = '4.0.6';
 $components['constant']['E_STRICT']                   = '5.0.0';
 $components['constant']['FILE']                       = '4.3.0';
-$components['constant']['PATH_SEPARATOR']             = '4.2.0';
+$components['constant']['PATH_SEPARATOR']             = '4.3.0';
 $components['constant']['PHP_EOL']                    = '5.0.1';
 $components['constant']['STD']                        = '4.3.0';
 $components['constant']['T']                          = '5.0.0';
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Constant/DIRECTORY_SEPARATOR.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Constant/DIRECTORY_SEPARATOR.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Constant/DIRECTORY_SEPARATOR.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Constant/DIRECTORY_SEPARATOR.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,37 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: DIRECTORY_SEPARATOR.php,v 1.1 2004/11/28 03:55:28 aidan Exp $
+
+
+/**
+ * Replace constant DIRECTORY_SEPARATOR
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/reserved.constants.standard
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.1 $
+ * @since       PHP 4.0.6
+ */
+if (!defined('DIRECTORY_SEPARATOR')) {
+    define('DIRECTORY_SEPARATOR',
+        strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/'
+    );
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_change_key_case.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_change_key_case.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_change_key_case.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_change_key_case.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_change_key_case.php,v 1.9 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_change_key_case.php,v 1.11 2005/12/07 21:08:57 aidan Exp $
 
 
 if (!defined('CASE_LOWER')) {
@@ -36,15 +36,16 @@
  * @link        http://php.net/function.array_change_key_case
  * @author      Stephan Schmidt <schst@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.9 $
+ * @version     $Revision: 1.11 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_change_key_case')) {
     function array_change_key_case($input, $case = CASE_LOWER)
     {
         if (!is_array($input)) {
-            trigger_error('array_change_key_case(): The argument should be an array', E_USER_WARNING);
+            user_error('array_change_key_case(): The argument should be an array',
+                E_USER_WARNING);
             return false;
         }
 
@@ -59,4 +60,5 @@
         return $output;
     }
 }
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_chunk.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_chunk.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_chunk.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_chunk.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_chunk.php,v 1.13 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_chunk.php,v 1.14 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,26 +26,29 @@
  * @link        http://php.net/function.array_chunk
  * @author      Aidan Lister <aidan@php.net>
  * @author      Thiemo Mttig (http://maettig.com)
- * @version     $Revision: 1.13 $
+ * @version     $Revision: 1.14 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_chunk')) {
     function array_chunk($input, $size, $preserve_keys = false)
     {
         if (!is_array($input)) {
-            trigger_error('array_chunk() expects parameter 1 to be array, ' . gettype($input) . ' given', E_USER_WARNING);
+            user_error('array_chunk() expects parameter 1 to be array, ' .
+                gettype($input) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_numeric($size)) {
-            trigger_error('array_chunk() expects parameter 2 to be long, ' . gettype($size) . ' given', E_USER_WARNING);
+            user_error('array_chunk() expects parameter 2 to be long, ' .
+                gettype($size) . ' given', E_USER_WARNING);
             return;
         }
 
         $size = (int)$size;
         if ($size <= 0) {
-            trigger_error('array_chunk() Size parameter expected to be greater than 0', E_USER_WARNING);
+            user_error('array_chunk() Size parameter expected to be greater than 0',
+                E_USER_WARNING);
             return;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_combine.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_combine.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_combine.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_combine.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_combine.php,v 1.19 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_combine.php,v 1.21 2005/01/28 02:27:52 aidan Exp $
 
 
 /**
@@ -25,39 +25,42 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_combine
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.19 $
+ * @version     $Revision: 1.21 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_combine')) {
     function array_combine($keys, $values)
     {
         if (!is_array($keys)) {
-            trigger_error('array_combine() expects parameter 1 to be array, ' . gettype($keys) . ' given', E_USER_WARNING);
+            user_error('array_combine() expects parameter 1 to be array, ' .
+                gettype($keys) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_array($values)) {
-            trigger_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING);
+            user_error('array_combine() expects parameter 2 to be array, ' .
+                gettype($values) . ' given', E_USER_WARNING);
             return;
         }
 
-        if (count($keys) !== count($values)) {
-            trigger_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
+        $key_count = count($keys);
+        $value_count = count($values);
+        if ($key_count !== $value_count) {
+            user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
             return false;
         }
 
-        if (count($keys) === 0 || count($values) === 0) {
-            trigger_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
+        if ($key_count === 0 || $value_count === 0) {
+            user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
             return false;
         }
 
         $keys    = array_values($keys);
         $values  = array_values($values);
 
-        $combined = array ();
-
-        for ($i = 0, $cnt = count($values); $i < $cnt; $i++) {
+        $combined = array();
+        for ($i = 0; $i < $key_count; $i++) {
             $combined[$keys[$i]] = $values[$i];
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_assoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_assoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_assoc.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_assoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_diff_assoc.php,v 1.10 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_diff_assoc.php,v 1.12 2005/12/07 21:08:57 aidan Exp $
 
 
 /**
@@ -25,9 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_diff_assoc
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.10 $
+ * @version     $Revision: 1.12 $
  * @since       PHP 4.3.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_diff_assoc')) {
     function array_diff_assoc()
@@ -36,14 +36,15 @@
         $args = func_get_args();
         $count = count($args);
         if (count($args) < 2) {
-            trigger_error('Wrong parameter count for array_diff_assoc()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_diff_assoc()', E_USER_WARNING);
             return;
         }
 
         // Check arrays
         for ($i = 0; $i < $count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_diff_assoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_diff_assoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
@@ -71,4 +72,5 @@
         return $array_comp;
     }
 }
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_key.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_key.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_key.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_key.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_diff_key.php,v 1.3 2004/11/21 17:36:53 aidan Exp $
+// $Id: array_diff_key.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,16 +25,16 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_diff_key
  * @author      Tom Buskens <ortega@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 5.0.2
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_diff_key')) {
     function array_diff_key()
     {
         $args = func_get_args();
         if (count($args) < 2) {
-            trigger_error('Wrong parameter count for array_diff_key()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_diff_key()', E_USER_WARNING);
             return;
         }
 
@@ -42,7 +42,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_diff_key() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_diff_key() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_uassoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_uassoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_uassoc.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_uassoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_diff_uassoc.php,v 1.1 2004/11/22 09:41:23 aidan Exp $
+// $Id: array_diff_uassoc.php,v 1.2 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -24,7 +24,7 @@
  * @category    PHP
  * @package     PHP_Compat
  * @link        http://php.net/function.array_diff_uassoc
- * @version     $Revision: 1.1 $
+ * @version     $Revision: 1.2 $
  * @since       PHP 5.0.0
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -34,7 +34,7 @@
         // Sanity check
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_diff_uassoc()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_diff_uassoc()', E_USER_WARNING);
             return;
         }
 
@@ -44,7 +44,8 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0] . '::' . $compare_func[1];
             }
-            trigger_error('array_diff_uassoc() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_diff_uassoc() Not a valid callback ' .
+                $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -52,7 +53,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_diff_uassoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_diff_uassoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_ukey.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_ukey.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_ukey.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_diff_ukey.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_diff_ukey.php,v 1.3 2004/11/21 17:36:53 aidan Exp $
+// $Id: array_diff_ukey.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_diff_ukey
  * @author      Tom Buskens <ortega@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 5.0.2
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -34,7 +34,7 @@
     {
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_diff_ukey()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_diff_ukey()', E_USER_WARNING);
             return;
         }
 
@@ -44,7 +44,8 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0].'::'.$compare_func[1];
             }
-            trigger_error('array_diff_ukey() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_diff_ukey() Not a valid callback ' .
+                $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -52,7 +53,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_diff_ukey() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_diff_ukey() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_assoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_assoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_assoc.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_assoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_intersect_assoc.php,v 1.3 2004/11/22 06:46:55 aidan Exp $
+// $Id: array_intersect_assoc.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,9 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_intersect_assoc
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 4.3.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_intersect_assoc')) {
     function array_intersect_assoc()
@@ -35,7 +35,7 @@
         // Sanity check
         $args = func_get_args();
         if (count($args) < 2) {
-            trigger_error('wrong parameter count for array_intersect_assoc()', E_USER_WARNING);
+            user_error('wrong parameter count for array_intersect_assoc()', E_USER_WARNING);
             return;
         }
 
@@ -43,7 +43,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_intersect_assoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_intersect_assoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_key.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_key.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_key.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_key.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_intersect_key.php,v 1.3 2004/11/21 17:36:53 aidan Exp $
+// $Id: array_intersect_key.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,16 +25,16 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_intersect_key
  * @author      Tom Buskens <ortega@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 5.0.2
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_intersect_key')) {
     function array_intersect_key()
     {
         $args = func_get_args();
         if (count($args) < 2) {
-            trigger_error('Wrong parameter count for array_intersect_key()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_intersect_key()', E_USER_WARNING);
             return;
         }
 
@@ -42,7 +42,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_intersect_key() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_intersect_key() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_uassoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_uassoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_uassoc.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_uassoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_intersect_uassoc.php,v 1.4 2004/11/22 09:11:43 aidan Exp $
+// $Id: array_intersect_uassoc.php,v 1.5 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_intersect_uassoc
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.4 $
+ * @version     $Revision: 1.5 $
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -35,7 +35,7 @@
         // Sanity check
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING);
             return;
         }
 
@@ -45,7 +45,8 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0] . '::' . $compare_func[1];
             }
-            trigger_error('array_intersect_uassoc() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_intersect_uassoc() Not a valid callback ' .
+                $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -53,7 +54,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_intersect_uassoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_intersect_uassoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_ukey.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_ukey.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_ukey.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_intersect_ukey.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_intersect_ukey.php,v 1.3 2004/11/21 17:36:53 aidan Exp $
+// $Id: array_intersect_ukey.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_intersect_ukey
  * @author      Tom Buskens <ortega@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 5.0.2
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -34,7 +34,7 @@
     {
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING);
             return;
         }
 
@@ -44,7 +44,8 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0].'::'.$compare_func[1];
             }
-            trigger_error('array_diff_ukey() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_diff_ukey() Not a valid callback ' .
+                $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -52,7 +53,8 @@
         $array_count = count($args);
         for ($i = 0; $i !== $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_intersect_ukey() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_intersect_ukey() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_key_exists.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_key_exists.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_key_exists.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_key_exists.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_key_exists.php,v 1.6 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_key_exists.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,15 +25,16 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_key_exists
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.6 $
+ * @version     $Revision: 1.7 $
  * @since       PHP 4.1.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_key_exists')) {
     function array_key_exists($key, $search)
     {
         if (!is_scalar($key)) {
-            trigger_error('array_key_exists() The first argument should be either a string or an integer', E_USER_WARNING);
+            user_error('array_key_exists() The first argument should be either a string or an integer',
+                E_USER_WARNING);
             return false;
         }
 
@@ -42,7 +43,8 @@
         }
 
         if (!is_array($search)) {
-            trigger_error('array_key_exists() The second argument should be either an array or an object', E_USER_WARNING);
+            user_error('array_key_exists() The second argument should be either an array or an object',
+                E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_product.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_product.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_product.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_product.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,53 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Arpad Ray <arpad@php.net>                                   |
+// +----------------------------------------------------------------------+
+//
+// $Id: array_product.php,v 1.1 2005/12/05 14:49:08 aidan Exp $
+
+
+/**
+ * Replace array_product()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/time_sleep_until
+ * @author      Arpad Ray <arpad@php.net>
+ * @version     $Revision: 1.1 $
+ * @since       PHP 5.1.0
+ * @require     PHP 4.0.1 (trigger_error)
+ */
+if (!function_exists('array_product')) {
+    function array_product($array)
+    {
+        if (!is_array($array)) {
+            trigger_error('The argument should be an array', E_USER_WARNING);
+            return;
+        }
+
+        if (empty($array)) {
+            return 0;
+        }
+
+        $r = 1;
+        foreach ($array as $v) {
+            $r *= $v;
+        }
+
+        return $r;
+    }
+}
+    
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_search.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_search.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_search.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_search.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_search.php,v 1.5 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_search.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,15 +26,15 @@
  * @link        http://php.net/function.array_search
  * @author      Aidan Lister <aidan@php.net>
  * @author      Thiemo Mttig (http://maettig.com/)
- * @version     $Revision: 1.5 $
+ * @version     $Revision: 1.6 $
  * @since       PHP 4.0.5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('array_search')) {
     function array_search($needle, $haystack, $strict = false)
     {
         if (!is_array($haystack)) {
-            trigger_error("array_search() Wrong datatype for second argument", E_USER_WARNING);
+            user_error('array_search() Wrong datatype for second argument', E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_assoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_assoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_assoc.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_assoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_udiff_assoc.php,v 1.13 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_udiff_assoc.php,v 1.14 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,7 +26,7 @@
  * @package     PHP_Compat
  * @author      Stephan Schmidt <schst@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.13 $
+ * @version     $Revision: 1.14 $
  * @link        http://php.net/function.array-udiff-assoc
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
@@ -36,7 +36,7 @@
     {
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_udiff_assoc()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_udiff_assoc()', E_USER_WARNING);
             return;
         }
 
@@ -46,7 +46,8 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0] . '::' . $compare_func[1];
             }
-            trigger_error('array_udiff_assoc() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_udiff_assoc() Not a valid callback ' . 
+                $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -54,7 +55,8 @@
         $count = count($args);
         for ($i = 0; $i < $count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_udiff_assoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_udiff_assoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_udiff.php,v 1.9 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_udiff.php,v 1.10 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -27,7 +27,7 @@
  * @link        http://php.net/function.array_udiff
  * @author      Stephan Schmidt <schst@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.9 $
+ * @version     $Revision: 1.10 $
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -37,7 +37,7 @@
         $args = func_get_args();
 
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_udiff()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_udiff()', E_USER_WARNING);
             return;
         }
 
@@ -47,7 +47,8 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0] . '::' . $compare_func[1];
             }
-            trigger_error('array_udiff() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_udiff() Not a valid callback ' .
+                $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -55,7 +56,8 @@
         $cnt = count($args);
         for ($i = 0; $i < $cnt; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_udiff() Argument #' . ($i + 1). ' is not an array', E_USER_WARNING);
+                user_error('array_udiff() Argument #' .
+                    ($i + 1). ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_uassoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_uassoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_uassoc.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_udiff_uassoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_udiff_uassoc.php,v 1.7 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_udiff_uassoc.php,v 1.8 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_udiff_uassoc
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.7 $
+ * @version     $Revision: 1.8 $
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -34,7 +34,7 @@
     {
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('Wrong parameter count for array_udiff_uassoc()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_udiff_uassoc()', E_USER_WARNING);
             return;
         }
 
@@ -44,7 +44,7 @@
             if (is_array($compare_func)) {
                 $compare_func = $compare_func[0] . '::' . $compare_func[1];
             }
-            trigger_error('array_udiff_uassoc() Not a valid callback ' . $compare_func, E_USER_WARNING);
+            user_error('array_udiff_uassoc() Not a valid callback ' . $compare_func, E_USER_WARNING);
             return;
         }
 
@@ -52,7 +52,8 @@
         $count = count($args);
         for ($i = 0; $i < $count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_udiff_uassoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_udiff_uassoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_assoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_assoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_assoc.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_assoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_uintersect_assoc.php,v 1.7 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_uintersect_assoc.php,v 1.9 2005/05/10 07:50:08 aidan Exp $
 
 
 /**
@@ -27,7 +27,7 @@
  * @link        http://php.net/function.array_uintersect_assoc
  * @author      Tom Buskens <ortega@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.7 $
+ * @version     $Revision: 1.9 $
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -36,7 +36,7 @@
     {
         $args = func_get_args();
         if (count($args) < 3) {
-            trigger_error('wrong parameter count for array_uintersect_assoc()', E_USER_WARNING);
+            user_error('wrong parameter count for array_uintersect_assoc()', E_USER_WARNING);
             return;
         }
 
@@ -46,15 +46,17 @@
             if (is_array($user_func)) {
                 $user_func = $user_func[0] . '::' . $user_func[1];
             }
-            trigger_error('array_uintersect_assoc() Not a valid callback ' . $user_func, E_USER_WARNING);
+            user_error('array_uintersect_assoc() Not a valid callback ' .
+                $user_func, E_USER_WARNING);
             return;
         }
 
         // Check arrays
         $array_count = count($args);
-        for ($i = 0; $i !== $array_count; $i++) {
+        for ($i = 0; $i < $array_count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_uintersect_assoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_uintersect_assoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
@@ -69,7 +71,6 @@
                          $output[$key] = $item;
                      }
                 }
-                
             }
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,82 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Tom Buskens <ortega@php.net>                                |
+// |          Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: array_uintersect.php,v 1.9 2005/05/10 12:05:48 aidan Exp $
+
+
+/**
+ * Replace array_uintersect()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.array_uintersect
+ * @author      Tom Buskens <ortega@php.net>
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.9 $
+ * @since       PHP 5
+ * @require     PHP 4.0.6 (is_callable)
+ */
+if (!function_exists('array_uintersect')) {
+    function array_uintersect()
+    {
+        $args = func_get_args();
+        if (count($args) < 3) {
+            user_error('wrong parameter count for array_uintersect()',
+                E_USER_WARNING);
+            return;
+        }
+
+        // Get compare function
+        $user_func = array_pop($args);
+        if (!is_callable($user_func)) {
+            if (is_array($user_func)) {
+                $user_func = $user_func[0] . '::' . $user_func[1];
+            }
+            user_error('array_uintersect() Not a valid callback ' .
+                $user_func, E_USER_WARNING);
+            return;
+        }
+
+        // Check arrays
+        $array_count = count($args);
+        for ($i = 0; $i < $array_count; $i++) {
+            if (!is_array($args[$i])) {
+                user_error('array_uintersect() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
+                return;
+            }
+        }
+
+        // Compare entries
+        $output = array();
+        foreach ($args[0] as $key => $item) {
+            for ($i = 1; $i !== $array_count; $i++) {
+                $array = $args[$i];
+                foreach($array as $key0 => $item0) {
+                    if (!call_user_func($user_func, $item, $item0)) {
+                        $output[$key] = $item;
+                    }
+                }
+            }            
+        }
+
+        return $output;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_uassoc.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_uassoc.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_uassoc.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_uintersect_uassoc.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_uintersect_uassoc.php,v 1.11 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_uintersect_uassoc.php,v 1.12 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.array_uintersect_uassoc
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.11 $
+ * @version     $Revision: 1.12 $
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -34,7 +34,8 @@
     {
         $args = func_get_args();
         if (count($args) < 4) {
-            trigger_error('Wrong parameter count for array_uintersect_uassoc()', E_USER_WARNING);
+            user_error('Wrong parameter count for array_uintersect_uassoc()',
+                E_USER_WARNING);
             return;
         }
 
@@ -44,7 +45,8 @@
             if (is_array($key_compare_func)) {
                 $key_compare_func = $key_compare_func[0] . '::' . $key_compare_func[1];
             }
-            trigger_error('array_uintersect_uassoc() Not a valid callback ' . $key_compare_func, E_USER_WARNING);
+            user_error('array_uintersect_uassoc() Not a valid callback ' .
+                $key_compare_func, E_USER_WARNING);
             return;
         }
 
@@ -54,7 +56,8 @@
             if (is_array($data_compare_func)) {
                 $data_compare_func = $data_compare_func[0] . '::' . $data_compare_func[1];
             }
-            trigger_error('array_uintersect_uassoc() Not a valid callback ' . $data_compare_func, E_USER_WARNING);
+            user_error('array_uintersect_uassoc() Not a valid callback '
+            . $data_compare_func, E_USER_WARNING);
             return;
         }
 
@@ -62,7 +65,8 @@
         $count = count($args);
         for ($i = 0; $i !== $count; $i++) {
             if (!is_array($args[$i])) {
-                trigger_error('array_uintersect_uassoc() Argument #' . ($i + 1) . ' is not an array', E_USER_WARNING);
+                user_error('array_uintersect_uassoc() Argument #' .
+                    ($i + 1) . ' is not an array', E_USER_WARNING);
                 return;
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_walk_recursive.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_walk_recursive.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_walk_recursive.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/array_walk_recursive.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: array_walk_recursive.php,v 1.6 2004/11/14 16:10:50 aidan Exp $
+// $Id: array_walk_recursive.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -27,7 +27,7 @@
  * @link        http://php.net/function.array_walk_recursive
  * @author      Tom Buskens <ortega@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.6 $
+ * @version     $Revision: 1.7 $
  * @since       PHP 5
  * @require     PHP 4.0.6 (is_callable)
  */
@@ -38,12 +38,14 @@
             if (is_array($funcname)) {
                 $funcname = $funcname[0] . '::' . $funcname[1];
             }
-            trigger_error('array_walk_recursive() Not a valid callback ' . $user_func, E_USER_WARNING);
+            user_error('array_walk_recursive() Not a valid callback ' . $user_func,
+                E_USER_WARNING);
             return;
         }
 
         if (!is_array($input)) {
-            trigger_error('array_walk_recursive() The argument should be an array', E_USER_WARNING);
+            user_error('array_walk_recursive() The argument should be an array',
+                E_USER_WARNING);
             return;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcinvert.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcinvert.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcinvert.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcinvert.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,76 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: bcinvert.php,v 1.2 2005/11/22 20:24:45 aidan Exp $
+
+
+/**
+ * Replace bcinvert()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.bcinvert
+ * @author      Sara Golemon <pollita@php.net>
+ * @version     $Revision: 1.2 $
+ * @since       PHP 5.2.0
+ * @require     PHP 4.0.4 (call_user_func_array)
+ */
+if (!function_exists('bcinvert')) {
+    function bcinvert($a, $n)
+    {
+        // Sanity check
+        if (!is_scalar($a)) {
+            user_error('bcinvert() expects parameter 1 to be string, ' .
+                gettype($a) . ' given', E_USER_WARNING);
+            return false;
+        }
+
+        if (!is_scalar($n)) {
+            user_error('bcinvert() expects parameter 2 to be string, ' .
+                gettype($n) . ' given', E_USER_WARNING);
+            return false;
+        }
+        
+        $u1 = $v2 = '1';
+        $u2 = $v1 = '0';
+        $u3 = $n;
+        $v3 = $a;
+
+        while (bccomp($v3, '0')) {
+            $q0 = bcdiv($u3, $v3);
+            $t1 = bcsub($u1, bcmul($q0, $v1));
+            $t2 = bcsub($u2, bcmul($q0, $v2));
+            $t3 = bcsub($u3, bcmul($q0, $v3));
+
+            $u1 = $v1;
+            $u2 = $v2;
+            $u3 = $v3;
+
+            $v1 = $t1;
+            $v2 = $t2;
+            $v3 = $t3;
+        }
+
+        if (bccomp($u2, '0') < 0) {
+            return bcadd($u2, $n);
+        } else {
+            return bcmod($u2, $n);
+        }
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcpowmod.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcpowmod.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcpowmod.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/bcpowmod.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,75 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: bcpowmod.php,v 1.2 2005/11/22 20:24:45 aidan Exp $
+
+
+/**
+ * Replace bcpowmod()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.bcpowmod
+ * @author      Sara Golemon <pollita@php.net>
+ * @version     $Revision: 1.2 $
+ * @since       PHP 5.0.0
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('bcpowmod')) {
+    function bcpowmod($x, $y, $modulus, $scale)
+    {
+        // Sanity check
+        if (!is_scalar($x)) {
+            user_error('bcpowmod() expects parameter 1 to be string, ' .
+                gettype($x) . ' given', E_USER_WARNING);
+            return false;
+        }
+
+        if (!is_scalar($y)) {
+            user_error('bcpowmod() expects parameter 2 to be string, ' .
+                gettype($y) . ' given', E_USER_WARNING);
+            return false;
+        }
+
+        if (!is_scalar($modulus)) {
+            user_error('bcpowmod() expects parameter 3 to be string, ' .
+                gettype($modulus) . ' given', E_USER_WARNING);
+            return false;
+        }
+
+        if (!is_scalar($scale)) {
+            user_error('bcpowmod() expects parameter 4 to be integer, ' .
+                gettype($scale) . ' given', E_USER_WARNING);
+            return false;
+        }
+
+        $t = '1';
+        while (bccomp($y, '0')) {
+            if (bccomp(bcmod($y, '2'), '0')) {
+                $t = bcmod(bcmul($t, $x), $modulus);
+                $y = bcsub($y, '1');
+            }
+
+            $x = bcmod(bcmul($x, $x), $modulus);
+            $y = bcdiv($y, '2');
+        }
+
+        return $t;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/call_user_func_array.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/call_user_func_array.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/call_user_func_array.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/call_user_func_array.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: call_user_func_array.php,v 1.12 2004/11/14 16:10:50 aidan Exp $
+// $Id: call_user_func_array.php,v 1.13 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,9 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.call_user_func_array
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.12 $
+ * @version     $Revision: 1.13 $
  * @since       PHP 4.0.4
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('call_user_func_array')) {
     function call_user_func_array($function, $param_arr)
@@ -39,8 +39,9 @@
             if (is_array($function) && count($function) > 2) {
                 $function = $function[0] . '::' . $function[1];
             }
-            $error = sprintf('call_user_func_array() First argument is expected to be a valid callback, \'%s\' was given', $function);
-            trigger_error($error, E_USER_WARNING);
+            $error = sprintf('call_user_func_array() First argument is expected ' .
+                'to be a valid callback, \'%s\' was given', $function);
+            user_error($error, E_USER_WARNING);
             return;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/clone.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/clone.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/clone.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/clone.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: clone.php,v 1.1 2004/11/21 13:06:55 aidan Exp $
+// $Id: clone.php,v 1.3 2005/05/01 10:40:59 aidan Exp $
 
 
 /**
@@ -25,19 +25,23 @@
  * @package     PHP_Compat
  * @link        http://php.net/language.oop5.cloning
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.1 $
+ * @version     $Revision: 1.3 $
  * @since       PHP 5.0.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (version_compare(phpversion(), '5.0') === -1) {
+    // Needs to be wrapped in eval as clone is a keyword in PHP5
     eval('
         function clone($object)
         {
             // Sanity check
             if (!is_object($object)) {
-                trigger_error(\'clone() __clone method called on non-object\', E_USER_WARNING);
+                user_error(\'clone() __clone method called on non-object\', E_USER_WARNING);
                 return;
             }
+    
+            // Use serialize/unserialize trick to deep copy the object
+            $object = unserialize(serialize($object));
 
             // If there is a __clone method call it on the "new" class
             if (method_exists($object, \'__clone\')) {
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/constant.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/constant.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/constant.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/constant.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: constant.php,v 1.6 2004/11/14 16:10:50 aidan Exp $
+// $Id: constant.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,16 +25,16 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.constant
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.6 $
+ * @version     $Revision: 1.7 $
  * @since       PHP 4.0.4
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('constant')) {
     function constant($constant)
     {
         if (!defined($constant)) {
             $error = sprintf('constant() Couldn\'t find constant %s', $constant);
-            trigger_error($error, E_USER_WARNING);
+            user_error($error, E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uudecode.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uudecode.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uudecode.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uudecode.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: convert_uudecode.php,v 1.7 2004/11/14 16:10:50 aidan Exp $
+// $Id: convert_uudecode.php,v 1.8 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -27,21 +27,22 @@
  * @link        http://php.net/function.convert_uudecode
  * @author      Michael Wallner <mike@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.7 $
+ * @version     $Revision: 1.8 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('convert_uudecode')) {
     function convert_uudecode($string)
     {
         // Sanity check
         if (!is_scalar($string)) {
-            trigger_error('convert_uuencode() expects parameter 1 to be string, ' . gettype($string) . ' given', E_USER_WARNING);
+            user_error('convert_uuencode() expects parameter 1 to be string, ' .
+                gettype($string) . ' given', E_USER_WARNING);
             return false;
         }
 
         if (strlen($string) < 8) {
-            trigger_error('convert_uuencode() The given parameter is not a valid uuencoded string', E_USER_WARNING);
+            user_error('convert_uuencode() The given parameter is not a valid uuencoded string', E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uuencode.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uuencode.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uuencode.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/convert_uuencode.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: convert_uuencode.php,v 1.6 2004/11/14 16:10:50 aidan Exp $
+// $Id: convert_uuencode.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -27,16 +27,17 @@
  * @link        http://php.net/function.convert_uuencode
  * @author      Michael Wallner <mike@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.6 $
+ * @version     $Revision: 1.7 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('convert_uuencode')) {
     function convert_uuencode($string)
     {
         // Sanity check
         if (!is_scalar($string)) {
-            trigger_error('convert_uuencode() expects parameter 1 to be string, ' . gettype($string) . ' given', E_USER_WARNING);
+            user_error('convert_uuencode() expects parameter 1 to be string, ' .
+                gettype($string) . ' given', E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/debug_print_backtrace.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/debug_print_backtrace.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/debug_print_backtrace.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/debug_print_backtrace.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Laurent Laville <pear@laurent-laville.org>                  |
+// |          Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: debug_print_backtrace.php,v 1.3 2005/08/17 02:58:09 aidan Exp $
+
+
+/**
+ * Replace debug_print_backtrace()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.debug_print_backtrace
+ * @author      Laurent Laville <pear@laurent-laville.org>
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.3 $
+ * @since       PHP 5
+ * @require     PHP 4.3.0 (debug_backtrace)
+ */
+if (!function_exists('debug_print_backtrace')) {
+    function debug_print_backtrace()
+    {
+        // Get backtrace
+        $backtrace = debug_backtrace();
+
+        // Unset call to debug_print_backtrace
+        array_shift($backtrace);
+        
+        // Iterate backtrace
+        $calls = array();
+        foreach ($backtrace as $i => $call) {
+            $location = $call['file'] . ':' . $call['line'];
+            $function = (isset($call['class'])) ?
+                $call['class'] . '.' . $call['function'] :
+                $call['function'];
+           
+            $params = '';
+            if (isset($call['args'])) {
+                $params = implode(', ', $call['args']);
+            }
+
+            $calls[] = sprintf('#%d  %s(%s) called at [%s]',
+                $i,
+                $function,
+                $params,
+                $location); 
+        }
+
+        echo implode("\n", $calls);
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_get_contents.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_get_contents.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_get_contents.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_get_contents.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: file_get_contents.php,v 1.20 2004/11/14 16:10:50 aidan Exp $
+// $Id: file_get_contents.php,v 1.21 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,16 +25,17 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.file_get_contents
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.20 $
+ * @version     $Revision: 1.21 $
  * @internal    resource_context is not supported
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('file_get_contents')) {
     function file_get_contents($filename, $incpath = false, $resource_context = null)
     {
         if (false === $fh = fopen($filename, 'rb', $incpath)) {
-            trigger_error('file_get_contents() failed to open stream: No such file or directory', E_USER_WARNING);
+            user_error('file_get_contents() failed to open stream: No such file or directory',
+                E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_put_contents.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_put_contents.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_put_contents.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/file_put_contents.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,13 +15,17 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: file_put_contents.php,v 1.22 2004/11/14 16:10:50 aidan Exp $
+// $Id: file_put_contents.php,v 1.25 2005/12/05 09:25:15 aidan Exp $
 
 
 if (!defined('FILE_USE_INCLUDE_PATH')) {
     define('FILE_USE_INCLUDE_PATH', 1);
 }
 
+if (!defined('LOCK_EX')) {
+    define('LOCK_EX', 2);
+}
+
 if (!defined('FILE_APPEND')) {
     define('FILE_APPEND', 8);
 }
@@ -34,10 +38,10 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.file_put_contents
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.22 $
+ * @version     $Revision: 1.25 $
  * @internal    resource_context is not supported
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('file_put_contents')) {
     function file_put_contents($filename, $content, $flags = null, $resource_context = null)
@@ -49,17 +53,18 @@
 
         // If we don't have a string, throw an error
         if (!is_scalar($content)) {
-            trigger_error('file_put_contents() The 2nd parameter should be either a string or an array', E_USER_WARNING);
+            user_error('file_put_contents() The 2nd parameter should be either a string or an array',
+                E_USER_WARNING);
             return false;
         }
 
-        // Get the length of date to write
+        // Get the length of data to write
         $length = strlen($content);
 
         // Check what mode we are using
         $mode = ($flags & FILE_APPEND) ?
-                    $mode = 'a' :
-                    $mode = 'w';
+                    'a' :
+                    'wb';
 
         // Check if we're using the include path
         $use_inc_path = ($flags & FILE_USE_INCLUDE_PATH) ?
@@ -68,17 +73,26 @@
 
         // Open the file for writing
         if (($fh = @fopen($filename, $mode, $use_inc_path)) === false) {
-            trigger_error('file_put_contents() failed to open stream: Permission denied', E_USER_WARNING);
+            user_error('file_put_contents() failed to open stream: Permission denied',
+                E_USER_WARNING);
             return false;
         }
 
+        // Attempt to get an exclusive lock
+        $use_lock = ($flags & LOCK_EX) ? true : false ;
+        if ($use_lock === true) {
+            if (!flock($fh, LOCK_EX)) {
+                return false;
+            }
+        }
+
         // Write to the file
         $bytes = 0;
         if (($bytes = @fwrite($fh, $content)) === false) {
             $errormsg = sprintf('file_put_contents() Failed to write %d bytes to %s',
                             $length,
                             $filename);
-            trigger_error($errormsg, E_USER_WARNING);
+            user_error($errormsg, E_USER_WARNING);
             return false;
         }
 
@@ -90,7 +104,7 @@
             $errormsg = sprintf('file_put_contents() Only %d of %d bytes written, possibly out of free disk space.',
                             $bytes,
                             $length);
-            trigger_error($errormsg, E_USER_WARNING);
+            user_error($errormsg, E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/floatval.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/floatval.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/floatval.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/floatval.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: floatval.php,v 1.1 2004/11/14 16:46:54 aidan Exp $
+// $Id: floatval.php,v 1.2 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,9 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.floatval
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.1 $
+ * @version     $Revision: 1.2 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.0 (Type Casting)
+ * @require     PHP 4.0.0 (user_error) (Type Casting)
  */
 if (!function_exists('floatval')) {
     function floatval($var)
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/fprintf.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/fprintf.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/fprintf.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/fprintf.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: fprintf.php,v 1.11 2004/11/14 16:10:50 aidan Exp $
+// $Id: fprintf.php,v 1.13 2005/05/28 17:25:25 aidan Exp $
 
 
 /**
@@ -25,16 +25,16 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.fprintf
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.11 $
+ * @version     $Revision: 1.13 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('fprintf')) {
    function fprintf() {
         $args = func_get_args();
 
         if (count($args) < 2) {
-            trigger_error ('Wrong parameter count for fprintf()', E_USER_WARNING);
+            user_error('Wrong parameter count for fprintf()', E_USER_WARNING);
             return;
         }
 
@@ -42,12 +42,13 @@
         $format = array_shift($args);
 
         if (!is_resource($resource_handle)) {
-            trigger_error ('fprintf(): supplied argument is not a valid stream resource', E_USER_WARNING);
+            user_error('fprintf() supplied argument is not a valid stream resource',
+                E_USER_WARNING);
             return false;
         }
 
         return fwrite($resource_handle, vsprintf($format, $args));
-   }
+    }
 }
 
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/fputcsv.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/fputcsv.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/fputcsv.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/fputcsv.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,64 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: fputcsv.php,v 1.2 2005/11/22 08:28:16 aidan Exp $
+
+
+/**
+ * Replace fprintf()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.fprintf
+ * @author      Twebb <twebb@boisecenter.com>
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.2 $
+ * @since       PHP 5
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('fputcsv')) {
+    function fputcsv($handle, $fields, $delimiter = ',', $enclosure = '"')
+    {
+        // Sanity Check
+        if (!is_resource($handle)) {
+            user_error('fputcsv() expects parameter 1 to be resource, ' .
+                gettype($handle) . ' given', E_USER_WARNING);
+            return false;
+        }
+
+        
+        $str = '';
+        foreach ($fields as $cell) {
+            $cell = str_replace($enclosure, $enclosure . $enclosure, $cell);
+
+            if (strchr($cell, $delimiter) !== false ||
+                strchr($cell, $enclosure) !== false ||
+                strchr($cell, "\n") !== false) {
+                
+                $str .= $enclosure . $cell . $enclosure . $delimiter;
+            } else {
+                $str .= $cell . $delimiter;
+            }
+        }
+
+        fputs($handle, substr($str, 0, -1) . "\n");
+
+        return strlen($str);
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_headers.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_headers.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_headers.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_headers.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,77 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: get_headers.php,v 1.1 2005/05/10 07:50:53 aidan Exp $
+
+
+/**
+ * Replace get_headers()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.get_headers
+ * @author      Aeontech <aeontech@gmail.com>
+ * @author      Cpurruc <cpurruc@fh-landshut.de>
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.1 $
+ * @since       PHP 5.0.0
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('get_headers')) {
+    function get_headers($url, $format = 0)
+    {
+        // Init
+        $urlinfo = parse_url($url);
+        $port    = isset($urlinfo['port']) ? $urlinfo['port'] : 80;
+
+        // Connect
+        $fp = fsockopen($urlinfo['host'], $port, $errno, $errstr, 30);
+        if ($fp === false) {
+            return false;
+        }
+              
+        // Send request
+        $head = 'HEAD ' . $urlinfo['path'] .
+            (isset($urlinfo['query']) ? '?' . $urlinfo['query'] : '') .
+            ' HTTP/1.0' . "\r\n" .
+            'Host: ' . $urlinfo['host'] . "\r\n\r\n";
+        fputs($fp, $head);
+
+        // Read
+        while (!feof($fp)) {
+            if ($header = trim(fgets($fp, 1024))) {
+                list($key) = explode(':', $header);
+
+                if ($format === 1) {
+                    // First element is the HTTP header type, such as HTTP 200 OK
+                    // It doesn't have a separate name, so check for it
+                    if ($key == $header) {
+                        $headers[] = $header;
+                    } else {
+                        $headers[$key] = substr($header, strlen($key)+2);
+                    }
+                } else {
+                    $headers[] = $header;
+                }
+            }
+        }
+
+        return $headers;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_include_path.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_include_path.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_include_path.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/get_include_path.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Stephan Schmidt <schst@php.net>                             |
 // +----------------------------------------------------------------------+
 //
-// $Id: get_include_path.php,v 1.3 2004/11/14 16:10:50 aidan Exp $
+// $Id: get_include_path.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,8 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.get_include_path
  * @author      Stephan Schmidt <schst@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 4.3.0
+ * @require     PHP 4.0.0
  */
 if (!function_exists('get_include_path')) {
     function get_include_path()
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/html_entity_decode.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/html_entity_decode.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/html_entity_decode.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/html_entity_decode.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: html_entity_decode.php,v 1.6 2004/11/14 16:10:50 aidan Exp $
+// $Id: html_entity_decode.php,v 1.8 2005/12/07 21:08:57 aidan Exp $
 
 
 if (!defined('ENT_NOQUOTES')) {
@@ -40,16 +40,17 @@
  * @link        http://php.net/function.html_entity_decode
  * @author      David Irvine <dave@codexweb.co.za>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.6 $
+ * @version     $Revision: 1.8 $
  * @since       PHP 4.3.0
  * @internal    Setting the charset will not do anything
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('html_entity_decode')) {
     function html_entity_decode($string, $quote_style = ENT_COMPAT, $charset = null)
     {
         if (!is_int($quote_style)) {
-            trigger_error('html_entity_decode() expects parameter 2 to be long, ' . gettype($quote_style) . ' given', E_USER_WARNING);
+            user_error('html_entity_decode() expects parameter 2 to be long, ' .
+                gettype($quote_style) . ' given', E_USER_WARNING);
             return;
         }
 
@@ -68,4 +69,5 @@
         return strtr($string, $trans_tbl);
     }
 }
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/htmlspecialchars_decode.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/htmlspecialchars_decode.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/htmlspecialchars_decode.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/htmlspecialchars_decode.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+<?PHP
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Stephan Schmidt <schst@php.net>                             |
+// |          Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: htmlspecialchars_decode.php,v 1.3 2005/06/18 14:02:09 aidan Exp $
+
+
+/**
+ * Replace function htmlspecialchars_decode()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.htmlspecialchars_decode
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.3 $
+ * @since       PHP 5.1.0
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('htmlspecialchars_decode')) {
+    function htmlspecialchars_decode($string, $quote_style = null)
+    {
+        // Sanity check
+        if (!is_scalar($string)) {
+            user_error('htmlspecialchars_decode() expects parameter 1 to be string, ' .
+                gettype($string) . ' given', E_USER_WARNING);
+            return;
+        }
+
+        if (!is_int($quote_style) && $quote_style !== null) {
+            user_error('htmlspecialchars_decode() expects parameter 2 to be integer, ' .
+                gettype($quote_style) . ' given', E_USER_WARNING);
+            return;
+        }
+
+        // Init
+        $from   = array('&amp;', '&lt;', '&gt;');
+        $to     = array('&', '<', '>');
+        
+        // The function does not behave as documented
+        // This matches the actual behaviour of the function
+        if ($quote_style & ENT_COMPAT || $quote_style & ENT_QUOTES) {
+            $from[] = '&quot;';
+            $to[]   = '"';
+            
+            $from[] = '&#039;';
+            $to[]   = "'";
+        }
+
+        return str_replace($from, $to, $string);
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/http_build_query.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/http_build_query.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/http_build_query.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/http_build_query.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: http_build_query.php,v 1.14 2004/11/14 16:10:50 aidan Exp $
+// $Id: http_build_query.php,v 1.16 2005/05/31 08:54:57 aidan Exp $
 
 
 /**
@@ -27,9 +27,9 @@
  * @link        http://php.net/function.http-build-query
  * @author      Stephan Schmidt <schst@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.14 $
+ * @version     $Revision: 1.16 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('http_build_query')) {
     function http_build_query($formdata, $numeric_prefix = null)
@@ -41,7 +41,8 @@
 
         // Check we have an array to work with
         if (!is_array($formdata)) {
-            trigger_error('http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given.', E_USER_WARNING);
+            user_error('http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given.',
+                E_USER_WARNING);
             return false;
         }
 
@@ -95,4 +96,5 @@
         return implode($separator, $tmp);
     }
 }
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ibase_timefmt.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ibase_timefmt.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ibase_timefmt.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ibase_timefmt.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,56 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: ibase_timefmt.php,v 1.1 2005/05/10 07:51:07 aidan Exp $
+
+
+/**
+ * Replace function ibase_timefmt()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.ibase_timefmt
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.1 $
+ * @since       PHP 5.0.0
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('ibase_timefmt')) {
+    function ibase_timefmt($format, $columntype = IBASE_TIMESTAMP)
+    {
+        switch ($columntype) {
+            case IBASE_TIMESTAMP:
+                ini_set('ibase.dateformat', $format);
+                break;
+
+            case IBASE_DATE:
+                ini_set('ibase.dateformat', $format);
+                break;
+
+            case IBASE_TIME:
+                ini_set('ibase.timeformat', $format);
+                break;
+
+            default:
+                return false;
+        }
+
+        return true;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/idate.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/idate.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/idate.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/idate.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,52 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Arpad Ray <arpad@php.net>                                   |
+// +----------------------------------------------------------------------+
+//
+// $Id: idate.php,v 1.2 2005/12/07 21:08:57 aidan Exp $
+
+
+/**
+ * Replace idate()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/idate
+ * @author      Arpad Ray <arpad@php.net>
+ * @version     $Revision: 1.2 $
+ * @since       PHP 5.0.0
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('idate')) {
+    function idate($format, $timestamp = false)
+    {
+        if (strlen($format) !== 1) {
+            user_error('idate format is one char', E_USER_WARNING);
+            return false;
+        }
+
+        if (strpos('BdhHiILmstUwWyYzZ', $format) === false) {
+            return 0;
+        }
+
+        if ($timestamp === false) {
+            $timestamp = time();
+        }
+
+        return intval(date($format, $timestamp));
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/image_type_to_mime_type.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/image_type_to_mime_type.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/image_type_to_mime_type.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/image_type_to_mime_type.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: image_type_to_mime_type.php,v 1.7 2004/11/14 16:10:50 aidan Exp $
+// $Id: image_type_to_mime_type.php,v 1.8 2005/01/26 04:55:13 aidan Exp $
 
 
 if (!defined('IMAGETYPE_GIF')) {
@@ -90,9 +90,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.image_type_to_mime_type
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.7 $
+ * @version     $Revision: 1.8 $
  * @since       PHP 4.3.0
- * @require     PHP 3
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('image_type_to_mime_type')) {
     function image_type_to_mime_type($imagetype)
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_ntop.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_ntop.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_ntop.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_ntop.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,53 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Arpad Ray <arpad@php.net>                                   |
+// +----------------------------------------------------------------------+
+//
+// $Id: inet_ntop.php,v 1.3 2005/12/05 14:49:40 aidan Exp $
+
+
+/**
+ * Replace inet_ntop()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/inet_ntop
+ * @author      Arpad Ray <arpad@php.net>
+ * @version     $Revision: 1.3 $
+ * @since       PHP 5.1.0
+ * @require     PHP 4.0.0 (long2ip)
+ */
+if (!function_exists('inet_ntop')) {
+    function inet_ntop($in_addr)
+    {
+        switch (strlen($in_addr)) {
+            case 4:
+                list(,$r) = unpack('N', $in_addr);
+                return long2ip($r);
+
+            case 16:
+                $r = substr(chunk_split(bin2hex($in_addr), 4, ':'), 0, -1);
+                $r = preg_replace(
+                    array('/(?::?\b0+\b:?){2,}/', '/\b0+([^0])/e'),
+                    array('::', '(int)"$1"?"$1":"0$1"'),
+                    $r);
+                return $r;
+        }
+
+        return false;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_pton.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_pton.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_pton.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/inet_pton.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,60 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Arpad Ray <arpad@php.net>                                   |
+// +----------------------------------------------------------------------+
+//
+// $Id: inet_pton.php,v 1.2 2005/12/05 14:49:40 aidan Exp $
+
+
+/**
+ * Replace inet_pton()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/inet_pton
+ * @author      Arpad Ray <arpad@php.net>
+ * @version     $Revision: 1.2 $
+ * @since       PHP 5.1.0
+ * @require     PHP 4.2.0 (array_fill)
+ */
+if (!function_exists('inet_pton')) {  
+    function inet_pton($address)
+    {
+        $r = ip2long($address);
+        if ($r !== false && $r != -1) {
+            return pack('N', $r);
+        }
+
+        $delim_count = substr_count($address, ':');
+        if ($delim_count < 1 || $delim_count > 7) {
+            return false;
+        }
+
+        $r = explode(':', $address);
+        $rcount = count($r);
+        if (($doub = array_search('', $r, 1)) !== false) {
+            $length = (!$doub || $doub == $rcount - 1 ? 2 : 1);
+            array_splice($r, $doub, $length, array_fill(0, 8 + $length - $rcount, 0));
+        }
+
+        $r = array_map('hexdec', $r);
+        array_unshift($r, 'n*');
+        $r = call_user_func_array('pack', $r);
+
+        return $r;
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ini_get_all.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ini_get_all.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ini_get_all.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ini_get_all.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: ini_get_all.php,v 1.2 2004/11/14 18:02:19 aidan Exp $
+// $Id: ini_get_all.php,v 1.3 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,16 +25,17 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.ini_get_all
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.2 $
+ * @version     $Revision: 1.3 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('ini_get_all')) {
     function ini_get_all($extension = null)
     {
         // Sanity check
         if (!is_scalar($extension)) {
-            trigger_error('ini_get_all() expects parameter 1 to be string, ' . gettype($extension) . ' given', E_USER_WARNING);
+            user_error('ini_get_all() expects parameter 1 to be string, ' .
+                gettype($extension) . ' given', E_USER_WARNING);
             return false;
         }
         
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/is_a.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/is_a.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/is_a.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/is_a.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: is_a.php,v 1.15 2004/11/14 16:10:50 aidan Exp $
+// $Id: is_a.php,v 1.16 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,9 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.is_a
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.15 $
+ * @version     $Revision: 1.16 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.0 (is_subclass_of)
+ * @require     PHP 4.0.0 (user_error) (is_subclass_of)
  */
 if (!function_exists('is_a')) {
     function is_a($object, $class)
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/md5_file.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/md5_file.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/md5_file.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/md5_file.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: md5_file.php,v 1.1 2004/11/14 18:21:17 aidan Exp $
+// $Id: md5_file.php,v 1.3 2005/11/22 08:29:19 aidan Exp $
 
 
 /**
@@ -25,32 +25,57 @@
  * @package     PHP_Compat
  * @link        http://php.net/md5_file
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.1 $
+ * @version     $Revision: 1.3 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
- * @internal    raw_output not implemented
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('md5_file')) {
     function md5_file($filename, $raw_output = false)
     {
         // Sanity check
         if (!is_scalar($filename)) {
-            trigger_error('md5_file() expects parameter 1 to be string, ' . gettype($filename) . ' given', E_USER_WARNING);
+            user_error('md5_file() expects parameter 1 to be string, ' .
+                gettype($filename) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_scalar($raw_output)) {
-            trigger_error('md5_file() expects parameter 2 to be bool, ' . gettype($raw_output) . ' given', E_USER_WARNING);
+            user_error('md5_file() expects parameter 2 to be bool, ' .
+                gettype($raw_output) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!file_exists($filename)) {
-            trigger_error('md5_file() Unable to open file', E_USER_WARNING);
+            user_error('md5_file() Unable to open file', E_USER_WARNING);
             return false;
         }
+        
+        // Read the file
+        if (false === $fh = fopen($filename, 'rb')) {
+            user_error('md5_file() failed to open stream: No such file or directory',
+                E_USER_WARNING);
+            return false;
+        }
+
+        clearstatcache();
+        if ($fsize = @filesize($filename)) {
+            $data = fread($fh, $fsize);
+        } else {
+            $data = '';
+            while (!feof($fh)) {
+                $data .= fread($fh, 8192);
+            }
+        }
+
+        fclose($fh);
+
+        // Return
+        $data = md5($data);
+        if ($raw_output === true) {
+            $data = pack('H*', $data);
+        }
 
-        $file = file_get_contents($filename);
-        return md5($file);
+        return $data;
     }
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/mhash.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/mhash.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/mhash.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/mhash.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,115 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Aidan Lister <aidan@php.net>                                |
+// +----------------------------------------------------------------------+
+//
+// $Id: mhash.php,v 1.1 2005/05/10 07:56:44 aidan Exp $
+
+
+if (!defined('MHASH_CRC32')) {
+    define('MHASH_CRC32', 0);
+}
+
+if (!defined('MHASH_MD5')) {
+    define('MHASH_MD5', 1);
+}
+
+if (!defined('MHASH_SHA1')) {
+    define('MHASH_SHA1', 2);
+}
+
+if (!defined('MHASH_HAVAL256')) {
+    define('MHASH_HAVAL256', 3);
+}
+
+if (!defined('MHASH_RIPEMD160')) {
+    define('MHASH_RIPEMD160', 5);
+}
+
+if (!defined('MHASH_TIGER')) {
+    define('MHASH_TIGER', 7);
+}
+
+if (!defined('MHASH_GOST')) {
+    define('MHASH_GOST', 8);
+}
+
+if (!defined('MHASH_CRC32B')) {
+    define('MHASH_CRC32B', 9);
+}
+
+if (!defined('MHASH_HAVAL192')) {
+    define('MHASH_HAVAL192', 11);
+}
+
+if (!defined('MHASH_HAVAL160')) {
+    define('MHASH_HAVAL160', 12);
+}
+
+if (!defined('MHASH_HAVAL128')) {
+    define('MHASH_HAVAL128', 13);
+}
+
+if (!defined('MHASH_TIGER128')) {
+    define('MHASH_TIGER128', 14);
+}
+
+if (!defined('MHASH_TIGER160')) {
+    define('MHASH_TIGER160', 15);
+}
+
+if (!defined('MHASH_MD4')) {
+    define('MHASH_MD4', 16);
+}
+
+if (!defined('MHASH_SHA256')) {
+    define('MHASH_SHA256', 17);
+}
+
+if (!defined('MHASH_ADLER32')) {
+    define('MHASH_ADLER32', 18);
+}
+
+
+/**
+ * Replace mhash()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.mhash
+ * @author      Aidan Lister <aidan@php.net>
+ * @version     $Revision: 1.1 $
+ * @since       PHP 4.1.0
+ * @require     PHP 4.0.0 (user_error)
+ */
+if (!function_exists('mhash')) {
+    function mhash($hashtype, $data, $key = '')    
+    {
+        switch ($hashtype) {
+            case MHASH_MD5:
+                $key = str_pad((strlen($key) > 64 ? pack("H*", md5($key)) : $key), 64, chr(0x00));
+                $k_opad = $key ^ (str_pad('', 64, chr(0x5c)));
+                $k_ipad = $key ^ (str_pad('', 64, chr(0x36)));
+                return pack("H*", md5($k_opad . pack("H*", md5($k_ipad .  $data))));
+
+            default:
+                return false;
+
+            break;
+        }
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/mime_content_type.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/mime_content_type.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/mime_content_type.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/mime_content_type.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,63 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Ian Eure <ieure@php.net>                                    |
+// +----------------------------------------------------------------------+
+//
+// $Id: mime_content_type.php,v 1.3 2005/12/07 21:08:57 aidan Exp $
+
+
+/**
+* Replace mime_content_type()
+*
+* You will need the `file` command installed and present in your $PATH. If
+* `file` is not available, the type 'application/octet-stream' is returned
+* for all files.
+*
+* @category   PHP
+* @package    PHP_Compat
+* @link       http://php.net/function.mime_content_type
+* @version    $Revision: 1.3 $
+* @author     Ian Eure <ieure@php.net>
+* @since      PHP 4.3.0
+* @require    PHP 4.0.3 (escapeshellarg)
+*/
+if (!function_exists('mime_content_type')) {
+    function mime_content_type($filename)
+    {
+        // Sanity check
+        if (!file_exists($filename)) {
+            return false;
+        }
+
+        $filename = escapeshellarg($filename);
+        $out = `file -iL $filename 2>/dev/null`;
+        if (empty($out)) {
+            return 'application/octet-stream';
+        }
+
+        // Strip off filename
+        $t = substr($out, strpos($out, ':') + 2);
+
+        if (strpos($t, ';') !== false) {
+            // Strip MIME parameters
+            $t = substr($t, 0, strpos($t, ';'));
+        }
+
+        // Strip any remaining whitespace
+        return trim($t);
+    }
+}
+
+?> 
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_clean.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_clean.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_clean.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_clean.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: ob_clean.php,v 1.5 2004/11/14 16:10:50 aidan Exp $
+// $Id: ob_clean.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,9 +26,9 @@
  * @link        http://php.net/function.ob_clean
  * @author      Aidan Lister <aidan@php.net>
  * @author      Thiemo Mttig (http://maettig.com/)
- * @version     $Revision: 1.5 $
+ * @version     $Revision: 1.6 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('ob_clean')) {
     function ob_clean()
@@ -37,7 +37,7 @@
             return ob_start();
         }
 
-        trigger_error("ob_clean() failed to delete buffer. No buffer to delete.", E_USER_NOTICE);
+        user_error("ob_clean() failed to delete buffer. No buffer to delete.", E_USER_NOTICE);
 
         return false;
     }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_flush.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_flush.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_flush.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_flush.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: ob_flush.php,v 1.5 2004/11/14 16:10:50 aidan Exp $
+// $Id: ob_flush.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,9 +26,9 @@
  * @link        http://php.net/function.ob_flush
  * @author      Aidan Lister <aidan@php.net>
  * @author      Thiemo Mttig (http://maettig.com/)
- * @version     $Revision: 1.5 $
+ * @version     $Revision: 1.6 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('ob_flush')) {
     function ob_flush()
@@ -37,7 +37,7 @@
             return ob_start();
         }
 
-        trigger_error("ob_flush() Failed to flush buffer. No buffer to flush.", E_USER_NOTICE);
+        user_error("ob_flush() Failed to flush buffer. No buffer to flush.", E_USER_NOTICE);
 
         return false;
     }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_clean.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_clean.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_clean.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_clean.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: ob_get_clean.php,v 1.5 2004/11/14 16:10:50 aidan Exp $
+// $Id: ob_get_clean.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,9 +26,9 @@
  * @link        http://php.net/function.ob_get_clean
  * @author      Aidan Lister <aidan@php.net>
  * @author      Thiemo Mttig (http://maettig.com/)
- * @version     $Revision: 1.5 $
+ * @version     $Revision: 1.6 $
  * @since       PHP 4.3.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('ob_get_clean')) {
     function ob_get_clean()
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_flush.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_flush.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_flush.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/ob_get_flush.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: ob_get_flush.php,v 1.5 2004/11/14 16:10:50 aidan Exp $
+// $Id: ob_get_flush.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -26,9 +26,9 @@
  * @link        http://php.net/function.ob_get_flush
  * @author      Aidan Lister <aidan@php.net>
  * @author      Thiemo Mttig (http://maettig.com/)
- * @version     $Revision: 1.5 $
+ * @version     $Revision: 1.6 $
  * @since       PHP 4.3.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('ob_get_flush')) {
     function ob_get_flush()
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_affected_rows.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_affected_rows.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_affected_rows.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_affected_rows.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,40 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Ian Eure <ieure@php.net>                                    |
+// |          Mocha (http://us4.php.net/pg_escape_bytea)                  |
+// +----------------------------------------------------------------------+
+//
+// $Id: pg_affected_rows.php,v 1.1 2005/05/10 07:56:51 aidan Exp $
+
+
+/**
+ * Replace pg_affected_rows()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.pg_affectd_rows
+ * @author      Ian Eure <ieure@php.net>
+ * @version     $Revision@
+ * @since       PHP 4.2.0
+ * @require     PHP 4.0.0
+ */
+if (!function_exists('pg_affected_rows')) {
+    function pg_affected_rows($resource)
+    {
+        return pg_cmdtuples($resource);
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_escape_bytea.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_escape_bytea.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_escape_bytea.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_escape_bytea.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,43 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Ian Eure <ieure@php.net>                                    |
+// |          Mocha (http://us4.php.net/pg_escape_bytea)                  |
+// +----------------------------------------------------------------------+
+//
+// $Id: pg_escape_bytea.php,v 1.1 2005/05/10 07:56:51 aidan Exp $
+
+
+/**
+ * Replace pg_escape_bytea()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.pg_escape_bytea
+ * @author      Ian Eure <ieure@php.net>
+ * @version     $Revision@
+ * @since       PHP 4.2.0
+ * @require     PHP 4.0.0
+ */
+if (!function_exists('pg_escape_bytea')) {
+    function pg_escape_bytea($data)
+    {
+        return str_replace(
+            array(chr(92),  chr(0),   chr(39)),
+            array('\\\134', '\\\000', '\\\047'),
+            $data);
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_unescape_bytea.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_unescape_bytea.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_unescape_bytea.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/pg_unescape_bytea.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,43 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Ian Eure <ieure@php.net>                                    |
+// |          Tobias <php@tobias.olsson.be>                               |
+// +----------------------------------------------------------------------+
+//
+// $Id: pg_unescape_bytea.php,v 1.2 2005/12/07 21:08:57 aidan Exp $
+
+
+/**
+ * Replace pg_unescape_bytea()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/function.pg_unescape_bytea
+ * @author      Ian Eure <ieure@php.net>
+ * @version     $Revision@
+ * @since       PHP 4.2.0
+ * @require     PHP 4.0.0
+ */
+if (!function_exists('pg_unescape_bytea')) {
+    function pg_unescape_bytea(&$data)
+    {
+        return str_replace(
+            array('$',   '"'),
+            array('\\$', '\\"'),
+            $data);
+    }
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/php_strip_whitespace.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/php_strip_whitespace.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/php_strip_whitespace.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/php_strip_whitespace.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: php_strip_whitespace.php,v 1.9 2004/11/14 16:10:50 aidan Exp $
+// $Id: php_strip_whitespace.php,v 1.10 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,16 +25,17 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.php_strip_whitespace
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.9 $
+ * @version     $Revision: 1.10 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error), Tokenizer extension
+ * @require     PHP 4.0.0 (user_error) + Tokenizer extension
  */
 if (!function_exists('php_strip_whitespace')) {
     function php_strip_whitespace($file)
     {
         // Sanity check
         if (!is_scalar($file)) {
-            trigger_error('php_strip_whitespace() expects parameter 1 to be string, ' . gettype($file) . ' given', E_USER_WARNING);
+            user_error('php_strip_whitespace() expects parameter 1 to be string, ' .
+                gettype($file) . ' given', E_USER_WARNING);
             return;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/restore_include_path.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/restore_include_path.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/restore_include_path.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/restore_include_path.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Stephan Schmidt <schst@php.net>                             |
 // +----------------------------------------------------------------------+
 //
-// $Id: restore_include_path.php,v 1.3 2004/11/14 16:10:50 aidan Exp $
+// $Id: restore_include_path.php,v 1.4 2005/12/07 21:08:57 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.restore_include_path
  * @author      Stephan Schmidt <schst@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 4.3.0
  */
 if (!function_exists('restore_include_path')) {
@@ -34,4 +34,5 @@
         return ini_restore('include_path');
     }
 }
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/scandir.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/scandir.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/scandir.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/scandir.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: scandir.php,v 1.17 2004/11/14 16:10:50 aidan Exp $
+// $Id: scandir.php,v 1.18 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,25 +25,27 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.scandir
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.17 $
+ * @version     $Revision: 1.18 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('scandir')) {
     function scandir($directory, $sorting_order = 0)
     {
         if (!is_string($directory)) {
-            trigger_error('scandir() expects parameter 1 to be string, ' . gettype($directory) . ' given', E_USER_WARNING);
+            user_error('scandir() expects parameter 1 to be string, ' .
+                gettype($directory) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_int($sorting_order) && !is_bool($sorting_order)) {
-            trigger_error('scandir() expects parameter 2 to be long, ' . gettype($sorting_order) . ' given', E_USER_WARNING);
+            user_error('scandir() expects parameter 2 to be long, ' .
+                gettype($sorting_order) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_dir($directory) || (false === $fh = @opendir($directory))) {
-            trigger_error('scandir() failed to open dir: Invalid argument', E_USER_WARNING);
+            user_error('scandir() failed to open dir: Invalid argument', E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/set_include_path.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/set_include_path.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/set_include_path.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/set_include_path.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Stephan Schmidt <schst@php.net>                             |
 // +----------------------------------------------------------------------+
 //
-// $Id: set_include_path.php,v 1.3 2004/11/14 16:10:50 aidan Exp $
+// $Id: set_include_path.php,v 1.4 2005/12/07 21:08:57 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.set_include_path
  * @author      Stephan Schmidt <schst@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 4.3.0
  */
 if (!function_exists('set_include_path')) {
@@ -34,4 +34,5 @@
         return ini_set('include_path', $new_include_path);
     }
 }
+
 ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/stripos.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/stripos.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/stripos.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/stripos.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: stripos.php,v 1.11 2004/11/21 17:00:48 aidan Exp $
+// $Id: stripos.php,v 1.13 2005/05/30 20:33:03 aidan Exp $
 
 
 /**
@@ -25,25 +25,27 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.stripos
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.11 $
+ * @version     $Revision: 1.13 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('stripos')) {
     function stripos($haystack, $needle, $offset = null)
     {
         if (!is_scalar($haystack)) {
-            trigger_error('stripos() expects parameter 1 to be string, ' . gettype($haystack) . ' given', E_USER_WARNING);
+            user_error('stripos() expects parameter 1 to be string, ' .
+                gettype($haystack) . ' given', E_USER_WARNING);
             return false;
         }
 
         if (!is_scalar($needle)) {
-            trigger_error('stripos() needle is not a string or an integer.', E_USER_WARNING);
+            user_error('stripos() needle is not a string or an integer.', E_USER_WARNING);
             return false;
         }
 
         if (!is_int($offset) && !is_bool($offset) && !is_null($offset)) {
-            trigger_error('stripos() expects parameter 3 to be long, ' . gettype($offset) . ' given', E_USER_WARNING);
+            user_error('stripos() expects parameter 3 to be long, ' .
+                gettype($offset) . ' given', E_USER_WARNING);
             return false;
         }
 
@@ -59,7 +61,7 @@
         $segments = explode(strtolower($needle), strtolower($haystack), 2);
 
         // Check there was a match
-        if (count($segments) == 1) {
+        if (count($segments) === 1) {
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_ireplace.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_ireplace.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_ireplace.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_ireplace.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: str_ireplace.php,v 1.17 2004/11/21 16:29:53 aidan Exp $
+// $Id: str_ireplace.php,v 1.18 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,9 +25,9 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.str_ireplace
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.17 $
+ * @version     $Revision: 1.18 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  * @note        count not by returned by reference, to enable
  *              change '$count = null' to '&$count'
  */
@@ -36,7 +36,7 @@
     {
         // Sanity check
         if (is_string($search) && is_array($replace)) {
-            trigger_error('Array to string conversion', E_USER_NOTICE);
+            user_error('Array to string conversion', E_USER_NOTICE);
             $replace = (string) $replace;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/strpbrk.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/strpbrk.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/strpbrk.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/strpbrk.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Stephan Schmidt <schst@php.net>                             |
 // +----------------------------------------------------------------------+
 //
-// $Id: strpbrk.php,v 1.3 2004/11/14 16:10:50 aidan Exp $
+// $Id: strpbrk.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,20 +25,22 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.strpbrk
  * @author      Stephan Schmidt <schst@php.net>
- * @version     $Revision: 1.3 $
+ * @version     $Revision: 1.4 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('strpbrk')) {
     function strpbrk($haystack, $char_list)
     {
         if (!is_scalar($haystack)) {
-            trigger_error('strpbrk() expects parameter 1 to be string, ' . gettype($haystack) . ' given', E_USER_WARNING);
+            user_error('strpbrk() expects parameter 1 to be string, ' .
+                gettype($haystack) . ' given', E_USER_WARNING);
             return false;
         }
 
         if (!is_scalar($char_list)) {
-            trigger_error('strpbrk() expects parameter 2 to be scalar, ' . gettype($needle) . ' given', E_USER_WARNING);
+            user_error('strpbrk() expects parameter 2 to be scalar, ' .
+                gettype($needle) . ' given', E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/strripos.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/strripos.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/strripos.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/strripos.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Stephan Schmidt <schst@php.net>                             |
 // +----------------------------------------------------------------------+
 //
-// $Id: strripos.php,v 1.20 2004/11/21 17:35:59 aidan Exp $
+// $Id: strripos.php,v 1.24 2005/08/10 10:19:59 aidan Exp $
 
 
 /**
@@ -26,53 +26,53 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.strripos
  * @author      Aidan Lister <aidan@php.net>
- * @author      Stephan Schmidt <schst@php.net>
- * @version     $Revision: 1.20 $
+ * @version     $Revision: 1.24 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('strripos')) {
     function strripos($haystack, $needle, $offset = null)
     {
+        // Sanity check
         if (!is_scalar($haystack)) {
-            trigger_error('strripos() expects parameter 1 to be scalar, ' . gettype($haystack) . ' given', E_USER_WARNING);
+            user_error('strripos() expects parameter 1 to be scalar, ' .
+                gettype($haystack) . ' given', E_USER_WARNING);
             return false;
         }
 
         if (!is_scalar($needle)) {
-            trigger_error('strripos() expects parameter 2 to be scalar, ' . gettype($needle) . ' given', E_USER_WARNING);
+            user_error('strripos() expects parameter 2 to be scalar, ' .
+                gettype($needle) . ' given', E_USER_WARNING);
             return false;
         }
 
         if (!is_int($offset) && !is_bool($offset) && !is_null($offset)) {
-            trigger_error('strripos() expects parameter 3 to be long, ' . gettype($offset) . ' given', E_USER_WARNING);
+            user_error('strripos() expects parameter 3 to be long, ' .
+                gettype($offset) . ' given', E_USER_WARNING);
             return false;
         }
 
-        // Manipulate the string if there is an offset
-        $fix = 0;
-        if (!is_null($offset)) {
-            // If the offset is larger than the haystack, return
-            if (abs($offset) >= strlen($haystack)) {
-                return false;
-            }
-
-            // Check whether offset is negative or positive
-            if ($offset > 0) {
-                $haystack = substr($haystack, $offset, strlen($haystack) - $offset);
-                // We need to add this to the position of the needle
-                $fix = $offset;
-            } else {
-                $haystack = substr($haystack, 0, strlen($haystack) + $offset);
+        // Initialise variables
+        $needle         = strtolower($needle);
+        $haystack       = strtolower($haystack);
+        $needle_fc      = $needle{0};
+        $needle_len     = strlen($needle);
+        $haystack_len   = strlen($haystack);
+        $offset         = (int) $offset;
+        $leftlimit      = ($offset >= 0) ? $offset : 0;
+        $p              = ($offset >= 0) ?
+                                $haystack_len :
+                                $haystack_len + $offset + 1;
+
+        // Reverse iterate haystack
+        while (--$p >= $leftlimit) {
+            if ($needle_fc === $haystack{$p} &&
+                substr($haystack, $p, $needle_len) === $needle) {
+                return $p;
             }
         }
 
-        $segments = explode(strtolower($needle), strtolower($haystack));
-
-        $last_seg = count($segments) - 1;
-        $position = strlen($haystack) + $fix - strlen($segments[$last_seg]) - strlen($needle);
-
-        return $position;
+        return false;
     }
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_rot13.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_rot13.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_rot13.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_rot13.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: str_rot13.php,v 1.3 2004/11/14 16:10:50 aidan Exp $
+// $Id: str_rot13.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -27,8 +27,8 @@
  * @link        http://php.net/function.str_rot13
  * @author      Alan Morey <alan@caint.com>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.3 $
- * @since       PHP 4.2.0
+ * @version     $Revision: 1.4 $
+ * @since       PHP 4.0.0
  */
 if (!function_exists('str_rot13')) {
     function str_rot13($str)
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_shuffle.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_shuffle.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_shuffle.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_shuffle.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: str_shuffle.php,v 1.4 2004/11/14 16:10:50 aidan Exp $
+// $Id: str_shuffle.php,v 1.6 2005/08/14 03:24:16 aidan Exp $
 
 
 /**
@@ -25,15 +25,14 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.str_shuffle
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.4 $
+ * @version     $Revision: 1.6 $
  * @since       PHP 4.3.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('str_shuffle')) {
     function str_shuffle($str)
     {
-        $newstr = '';
-        $strlen = strlen($str);
+        // Init
         $str = (string) $str;
 
         // Seed
@@ -42,11 +41,11 @@
         mt_srand($seed);
 
         // Shuffle
-        for ($i = 0; $strlen > $i; $i++) {
-            $newstr .= $str[mt_rand(0, $strlen - 1)];
+        for ($new = '', $len = strlen($str); $len > 0; $str{$p} = $str{$len}) { 
+            $new .= $str{$p = mt_rand(0, --$len)};
         }
 
-        return $newstr;
+        return $new;
     }
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_split.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_split.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_split.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_split.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: str_split.php,v 1.13 2004/11/21 14:21:17 aidan Exp $
+// $Id: str_split.php,v 1.15 2005/06/18 12:15:32 aidan Exp $
 
 
 /**
@@ -25,26 +25,46 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.str_split
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.13 $
+ * @version     $Revision: 1.15 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('str_split')) {
     function str_split($string, $split_length = 1)
     {
         if (!is_scalar($split_length)) {
-            trigger_error('str_split() expects parameter 2 to be long, ' . gettype($split_length) . ' given', E_USER_WARNING);
+            user_error('str_split() expects parameter 2 to be long, ' .
+                gettype($split_length) . ' given', E_USER_WARNING);
             return false;
         }
 
         $split_length = (int) $split_length;
         if ($split_length < 1) {
-            trigger_error('str_split() The length of each segment must be greater than zero', E_USER_WARNING);
+            user_error('str_split() The length of each segment must be greater than zero', E_USER_WARNING);
             return false;
         }
+        
+        // Select split method
+        if ($split_length < 65536) {
+            // Faster, but only works for less than 2^16
+            preg_match_all('/.{1,' . $split_length . '}/s', $string, $matches);
+            return $matches[0];
+        } else {
+            // Required due to preg limitations
+            $arr = array();
+            $idx = 0;
+            $pos = 0;
+            $len = strlen($string);
 
-        preg_match_all('/.{1,' . $split_length . '}/s', $string, $matches);
-        return $matches[0];
+            while ($len > 0) {
+                $blk = ($len < $split_length) ? $len : $split_length;
+                $arr[$idx++] = substr($string, $pos, $blk);
+                $pos += $blk;
+                $len -= $blk;
+            }
+
+            return $arr;
+        }
     }
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_word_count.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_word_count.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_word_count.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/str_word_count.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: str_word_count.php,v 1.7 2004/11/14 16:10:50 aidan Exp $
+// $Id: str_word_count.php,v 1.9 2005/02/28 11:45:28 aidan Exp $
 
 
 /**
@@ -25,15 +25,16 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.str_word_count
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.7 $
+ * @version     $Revision: 1.9 $
  * @since       PHP 4.3.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('str_word_count')) {
     function str_word_count($string, $format = null)
     {
-        if ($format != 1 && $format != 2 && $format !== null) {
-            trigger_error("str_word_count() The specified format parameter, '$format' is invalid", E_USER_WARNING);
+        if ($format !== 1 && $format !== 2 && $format !== null) {
+            user_error('str_word_count() The specified format parameter, "' . $format . '" is invalid',
+                E_USER_WARNING);
             return false;
         }
 
@@ -42,11 +43,11 @@
 
         switch ($format) {
             case null:
-                return count($word_array);
+                $result = count($word_array);
                 break;
 
             case 1:
-                return $word_array;
+                $result = $word_array;
                 break;
 
             case 2:
@@ -54,10 +55,13 @@
                 $word_assoc = array();
                 foreach ($word_array as $word) {
                     $word_assoc[$lastmatch = strpos($string, $word, $lastmatch)] = $word;
+                    $lastmatch += strlen($word);
                 }
-                return $word_assoc;
+                $result = $word_assoc;
                 break;
         }
+
+        return $result;
     }
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/substr_compare.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/substr_compare.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/substr_compare.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/substr_compare.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: substr_compare.php,v 1.4 2004/11/14 16:10:50 aidan Exp $
+// $Id: substr_compare.php,v 1.5 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -27,32 +27,36 @@
  * @link        http://php.net/function.substr_compare
  * @author      Tom Buskens <ortega@php.net>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.4 $
+ * @version     $Revision: 1.5 $
  * @since       PHP 5
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('substr_compare')) {
     function substr_compare($main_str, $str, $offset, $length = null, $case_insensitive = false)
     {
         if (!is_string($main_str)) {
-            trigger_error('substr_compare() expects parameter 1 to be string, ' . gettype($main_str) . ' given', E_USER_WARNING);
+            user_error('substr_compare() expects parameter 1 to be string, ' .
+                gettype($main_str) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_string($str)) {
-            trigger_error('substr_compare() expects parameter 2 to be string, ' . gettype($str) . ' given', E_USER_WARNING);
+            user_error('substr_compare() expects parameter 2 to be string, ' .
+                gettype($str) . ' given', E_USER_WARNING);
             return;
         }
         
         if (!is_int($offset)) {
-            trigger_error('substr_compare() expects parameter 3 to be long, ' . gettype($offset) . ' given', E_USER_WARNING);
+            user_error('substr_compare() expects parameter 3 to be long, ' .
+                gettype($offset) . ' given', E_USER_WARNING);
             return;
         }
         
         if (is_null($length)) {
             $length = strlen($main_str) - $offset;
         } elseif ($offset >= strlen($main_str)) {
-            trigger_error('substr_compare() The start position cannot exceed initial string length', E_USER_WARNING);
+            user_error('substr_compare() The start position cannot exceed initial string length',
+                E_USER_WARNING);
             return false;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/time_sleep_until.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/time_sleep_until.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/time_sleep_until.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/time_sleep_until.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,48 @@
+<?php
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Arpad Ray <arpad@php.net>                                   |
+// +----------------------------------------------------------------------+
+//
+// $Id: time_sleep_until.php,v 1.2 2005/12/07 21:08:57 aidan Exp $
+
+
+/**
+ * Replace time_sleep_until()
+ *
+ * @category    PHP
+ * @package     PHP_Compat
+ * @link        http://php.net/time_sleep_until
+ * @author      Arpad Ray <arpad@php.net>
+ * @version     $Revision: 1.2 $
+ * @since       PHP 5.1.0
+ * @require     PHP 4.0.1 (trigger_error)
+ */
+if (!function_exists('time_sleep_until')) {
+    function time_sleep_until($timestamp)
+    {
+	    list($usec, $sec) = explode(' ', microtime());
+        $now = $sec + $usec;
+        if ($timestamp <= $now) {
+            user_error('Specified timestamp is in the past', E_USER_WARNING);
+            return false;
+        }
+
+        $diff = $timestamp - $now;
+        usleep($diff * 1000000);
+        return true;
+    }
+}
+	
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/var_export.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/var_export.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/var_export.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/var_export.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: var_export.php,v 1.10 2004/11/14 16:10:50 aidan Exp $
+// $Id: var_export.php,v 1.15 2005/12/05 14:24:27 aidan Exp $
 
 
 /**
@@ -25,67 +25,110 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.var_export
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.10 $
+ * @version     $Revision: 1.15 $
  * @since       PHP 4.2.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.0 (user_error)
  */
 if (!function_exists('var_export')) {
-    function var_export($array, $return = false)
+    function var_export($var, $return = false, $level = 0)
     {
-        // Common output variables
-        $indent         = '  ';
-        $doublearrow    = ' => ';
-        $lineend        = ",\n";
-        $stringdelim    = '\'';
-        $newline        = "\n";
-
-        // Check the export isn't a simple string / int
-        if (is_string($array)) {
-            $out = $stringdelim . $array . $stringdelim;
-        } elseif (is_int($array)) {
-            $out = (string)$array;
-        } else {
-            // Begin the array export
-            // Start the string
-            $out = "array (\n";
-
-            // Loop through each value in array
-            foreach ($array as $key => $value) {
-                // If the key is a string, delimit it
-                if (is_string($key)) {
-                    $key = $stringdelim . addslashes($key) . $stringdelim;
-                }
+        // Init
+        $indent      = '  ';
+        $doublearrow = ' => ';
+        $lineend     = ",\n";
+        $stringdelim = '\'';
+        $newline     = "\n";
+        $find        = array(null, '\\', '\'');
+        $replace     = array('NULL', '\\\\', '\\\'');
+        $out         = '';
+        
+        // Indent
+        $level++;
+        for ($i = 1, $previndent = ''; $i < $level; $i++) {
+            $previndent .= $indent;
+        }
 
-                // If the value is a string, delimit it
-                if (is_string($value)) {
-                    $value = $stringdelim . addslashes($value) . $stringdelim;
-                } elseif (is_array($value)) {
-                    // We have an array, so do some recursion
-                    // Do some basic recursion while increasing the indent
-                    $recur_array = explode($newline, var_export($value, true));
-                    $recur_newarr = array ();
-                    foreach ($recur_array as $recur_line) {
-                        $recur_newarr[] = $indent . $recur_line;
+        // Handle each type
+        switch (gettype($var)) {
+            // Array
+            case 'array':
+                $out = 'array (' . $newline;
+                foreach ($var as $key => $value) {
+                    // Key
+                    if (is_string($key)) {
+                        // Make key safe
+                        for ($i = 0, $c = count($find); $i < $c; $i++) {
+                            $var = str_replace($find[$i], $replace[$i], $var);
+                        }
+                        $key = $stringdelim . $key . $stringdelim;
                     }
-                    $recur_array = implode($newline, $recur_newarr);
-                    $value = $newline . $recur_array;
+                    
+                    // Value
+                    if (is_array($value)) {
+                        $export = var_export($value, true, $level);
+                        $value = $newline . $previndent . $indent . $export;
+                    } else {
+                        $value = var_export($value, true, $level);
+                    }
+
+                    // Piece line together
+                    $out .= $previndent . $indent . $key . $doublearrow . $value . $lineend;
                 }
 
-                // Piece together the line
-                $out .= $indent . $key . $doublearrow . $value . $lineend;
-            }
+                // End string
+                $out .= $previndent . ')';
+                break;
+
+            // String
+            case 'string':
+                // Make the string safe
+                for ($i = 0, $c = count($find); $i < $c; $i++) {
+                    $var = str_replace($find[$i], $replace[$i], $var);
+                }
+                $out = $stringdelim . $var . $stringdelim;
+                break;
 
-            // End our string
-            $out .= ")";
+            // Number
+            case 'integer':
+            case 'double':
+                $out = (string) $var;
+                break;
+            
+            // Boolean
+            case 'boolean':
+                $out = $var ? 'true' : 'false';
+                break;
+
+            // NULLs
+            case 'NULL':
+            case 'resource':
+                $out = 'NULL';
+                break;
+
+            // Objects
+            case 'object':
+                // Start the object export
+                $out = $newline . $previndent . 'class ' . get_class($var) . ' {' . $newline;
+
+                // Export the object vars
+                foreach (get_object_vars($var) as $key => $val) {
+                    $out .= $previndent . '  var $' . $key . ' = ';
+                    if (is_array($val)) {
+                        $export = var_export($val, true, $level);
+                        $out .= $newline . $previndent . $indent .  $export  . ';' . $newline;
+                    } else {
+                        $out .= var_export($val, true, $level) . ';' . $newline;
+                    }
+                }
+                $out .= $previndent . '}';
+                break;
         }
 
-
-        // Decide method of output
+        // Method of output
         if ($return === true) {
             return $out;
         } else {
             echo $out;
-            return;
         }
     }
 }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/version_compare.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/version_compare.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/version_compare.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/version_compare.php	2006-08-08 02:39:06.000000000 -0500
@@ -16,7 +16,7 @@
 // |          Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: version_compare.php,v 1.10 2004/11/21 14:22:44 aidan Exp $
+// $Id: version_compare.php,v 1.13 2005/08/01 12:21:14 aidan Exp $
 
 
 /**
@@ -27,26 +27,29 @@
  * @link        http://php.net/function.version_compare
  * @author      Philippe Jausions <Philippe.Jausions@11abacus.com>
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.10 $
+ * @version     $Revision: 1.13 $
  * @since       PHP 4.1.0
- * @require     PHP 4.0.1 (trigger_error)
+ * @require     PHP 4.0.5 (user_error)
  */
 if (!function_exists('version_compare')) {
     function version_compare($version1, $version2, $operator = '<')
     {
         // Check input
         if (!is_scalar($version1)) {
-            trigger_error('version_compare() expects parameter 1 to be string, ' . gettype($version1) . ' given', E_USER_WARNING);
+            user_error('version_compare() expects parameter 1 to be string, ' .
+                gettype($version1) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_scalar($version2)) {
-            trigger_error('version_compare() expects parameter 2 to be string, ' . gettype($version2) . ' given', E_USER_WARNING);
+            user_error('version_compare() expects parameter 2 to be string, ' .
+                gettype($version2) . ' given', E_USER_WARNING);
             return;
         }
 
         if (!is_scalar($operator)) {
-            trigger_error('version_compare() expects parameter 3 to be string, ' . gettype($operator) . ' given', E_USER_WARNING);
+            user_error('version_compare() expects parameter 3 to be string, ' .
+                gettype($operator) . ' given', E_USER_WARNING);
             return;
         }
 
@@ -67,7 +70,8 @@
         while (empty($v1[0]) && array_shift($v1)) {}
         while (empty($v2[0]) && array_shift($v2)) {}
 
-        // Describe our release states
+        // Release state order
+        // '#' stands for any number
         $versions = array(
             'dev'   => 0,
             'alpha' => 1,
@@ -75,8 +79,9 @@
             'beta'  => 2,
             'b'     => 2,
             'RC'    => 3,
-            'p'     => 4,
-            'pl'    => 4);
+            '#'     => 4,
+            'p'     => 5,
+            'pl'    => 5);
 
         // Loop through each segment in the version string
         $compare = 0;
@@ -84,16 +89,35 @@
             if ($v1[$i] == $v2[$i]) {
                 continue;
             }
-            if (is_numeric($v1[$i]) && is_numeric($v2[$i])) {
-                $compare = ($v1[$i] < $v2[$i]) ? -1 : 1;
-            } elseif (is_numeric($v1[$i])) {
+            $i1 = $v1[$i];
+            $i2 = $v2[$i];
+            if (is_numeric($i1) && is_numeric($i2)) {
+                $compare = ($i1 < $i2) ? -1 : 1;
+                break;
+            }
+
+            // We use the position of '#' in the versions list
+            // for numbers... (so take care of # in original string)
+            if ($i1 == '#') {
+                $i1 = '';
+            } elseif (is_numeric($i1)) {
+                $i1 = '#';
+            }
+
+            if ($i2 == '#') {
+                $i2 = '';
+            } elseif (is_numeric($i2)) {
+                $i2 = '#';
+            }
+
+            if (isset($versions[$i1]) && isset($versions[$i2])) {
+                $compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1;
+            } elseif (isset($versions[$i1])) {
                 $compare = 1;
-            } elseif (is_numeric($v2[$i])) {
+            } elseif (isset($versions[$i2])) {
                 $compare = -1;
-            } elseif (isset($versions[$v1[$i]]) && isset($versions[$v2[$i]])) {
-                $compare = ($versions[$v1[$i]] < $versions[$v2[$i]]) ? -1 : 1;
             } else {
-                $compare = strcmp($v2[$i], $v1[$i]);
+                $compare = 0;
             }
 
             break;
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/vprintf.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/vprintf.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/vprintf.php	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/vprintf.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: vprintf.php,v 1.13 2004/11/14 16:10:51 aidan Exp $
+// $Id: vprintf.php,v 1.14 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.vprintf
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.13 $
+ * @version     $Revision: 1.14 $
  * @since       PHP 4.1.0
  * @require     PHP 4.0.4 (call_user_func_array)
  */
@@ -33,7 +33,7 @@
     function vprintf ($format, $args)
     {
         if (count($args) < 2) {
-            trigger_error('vprintf() Too few arguments', E_USER_WARNING);
+            user_error('vprintf() Too few arguments', E_USER_WARNING);
             return;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/vsprintf.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/vsprintf.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat/Function/vsprintf.php	2004-12-31 10:03:38.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat/Function/vsprintf.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: vsprintf.php,v 1.9 2004/11/14 16:10:51 aidan Exp $
+// $Id: vsprintf.php,v 1.10 2005/01/26 04:55:13 aidan Exp $
 
 
 /**
@@ -25,7 +25,7 @@
  * @package     PHP_Compat
  * @link        http://php.net/function.vsprintf
  * @author      Aidan Lister <aidan@php.net>
- * @version     $Revision: 1.9 $
+ * @version     $Revision: 1.10 $
  * @since       PHP 4.1.0
  * @require     PHP 4.0.4 (call_user_func_array)
  */
@@ -33,7 +33,7 @@
     function vsprintf ($format, $args)
     {
         if (count($args) < 2) {
-            trigger_error('vsprintf() Too few arguments', E_USER_WARNING);
+            user_error('vsprintf() Too few arguments', E_USER_WARNING);
             return;
         }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat.php 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/Compat.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/Compat.php	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 // | Authors: Aidan Lister <aidan@php.net>                                |
 // +----------------------------------------------------------------------+
 //
-// $Id: Compat.php,v 1.17 2004/11/23 09:25:40 aidan Exp $
+// $Id: Compat.php,v 1.19 2005/05/10 12:05:36 aidan Exp $
 
 
 /**
@@ -27,7 +27,7 @@
  *
  * @category    PHP
  * @package     PHP_Compat
- * @version     $Revision: 1.17 $
+ * @version     $Revision: 1.19 $
  * @author      Aidan Lister <aidan@php.net>
  * @static
  */
@@ -41,6 +41,7 @@
      */
     function loadFunction($function)
     {
+        // Recursiveness
         if (is_array($function)) {
             $res = array();
             foreach ($function as $singlefunc) {
@@ -50,6 +51,7 @@
             return $res;
         }
 
+        // Load function
         if (!function_exists($function)) {
             $file = sprintf('PHP/Compat/Function/%s.php', $function);
             if ((@include_once $file) !== false) {
@@ -69,6 +71,7 @@
      */
     function loadConstant($constant)
     {
+        // Recursiveness
         if (is_array($constant)) {
             $res = array();
             foreach ($constant as $singleconst) {
@@ -78,6 +81,7 @@
             return $res;
         }
 
+        // Load constant
         $file = sprintf('PHP/Compat/Constant/%s.php', $constant);
         if ((@include_once $file) !== false) {
             return true;
@@ -95,19 +99,29 @@
      */
     function loadVersion($version = null)
     {
-        require_once 'Compat/Components.php';
+        // Include list of components
+        require 'PHP/Compat/Components.php';
+
+        // Include version_compare to work with older versions
         PHP_Compat::loadFunction('version_compare');
-        $phpversion = phpversion();
 
+        // Init
+        $phpversion = phpversion();
+        $methods = array(
+            'function' => 'loadFunction',
+            'constant' => 'loadConstant');
         $res = array();
+
+        // Iterate each component
         foreach ($components as $type => $slice) {
-            $loadfunc = 'load' . $type;
             foreach ($slice as $component => $compversion) {
-                $vc = version_compare($version, $compversion);
-                $vp = version_compare($phpversion, $compversion);
-
-                if ($version === null || ($vc === 0 && $vp === -1)) {
-                    $res[$component] = PHP_Compat::$loadfunc($component);
+                if (($version === null &&
+                        1 === version_compare($compversion, $phpversion)) ||    // C > PHP
+                       (0 === version_compare($compversion, $version) ||        // C = S
+                        1 === version_compare($compversion, $phpversion))) {    // C > PHP
+                    
+                    $res[$type][$component] =
+                        call_user_func(array('PHP_Compat', $methods[$type]), $component);
                 }
             }
         }
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/e_strict.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/e_strict.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/e_strict.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/e_strict.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,13 +0,0 @@
---TEST--
-Constant -- E_STRICT
---SKIPIF--
-<?php if (defined('E_STRICT')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('E_STRICT');
-
-echo E_STRICT;
-?>
---EXPECT--
-2048
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/file.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/file.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/file.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/file.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
---TEST--
-Constant -- File System Constants
---SKIPIF--
-<?php if (defined('FILE_USE_INCLUDE_PATH')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('FILE');
-
-echo FILE_USE_INCLUDE_PATH, "\n";
-echo FILE_IGNORE_NEW_LINES, "\n";
-echo FILE_SKIP_EMPTY_LINES, "\n";
-echo FILE_APPEND, "\n";
-echo FILE_NO_DEFAULT_CONTEXT
-?>
---EXPECT--
-1
-2
-4
-8
-16
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/path_separator.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/path_separator.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/path_separator.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/path_separator.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,15 +0,0 @@
---TEST--
-Constant -- PATH_SEPARATOR
---SKIPIF--
-<?php if (defined('PATH_SEPARATOR')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('PATH_SEPARATOR');
-
-echo (PATH_SEPARATOR == ';' || PATH_SEPARATOR == ':') ?
-        'true' :
-        'false';
-?>
---EXPECT--
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/php_eol.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/php_eol.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/php_eol.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/php_eol.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,17 +0,0 @@
---TEST--
-Constant -- PHP_EOL
---SKIPIF--
-<?php if (defined('PHP_EOL')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('PHP_EOL');
-
-if (PHP_EOL == "\n" || PHP_EOL == "\r\n" || PHP_EOL == "\r") {
-    echo 'true';
-} else {
-    echo 'false';
-}
-?>
---EXPECT--
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/std.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/std.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/std.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/std.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,17 +0,0 @@
---TEST--
-Constant -- CLI Constants
---SKIPIF--
-<?php if (defined('STDIN')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('STD');
-
-echo (is_resource(STDIN)) ? 'true' : 'false', "\n";
-echo (is_resource(STDOUT)) ? 'true' : 'false', "\n";
-echo (is_resource(STDERR)) ? 'true' : 'false';
-?>
---EXPECT--
-true
-true
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/t.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/t.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/t.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/t.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,48 +0,0 @@
---TEST--
-Constant -- Tokenizer constants
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('T');
-
-$constants = array(
-    'T_ML_COMMENT',
-    'T_ML_COMMENT',
-    'T_DOC_COMMENT',
-    'T_OLD_FUNCTION',
-    'T_ABSTRACT',
-    'T_CATCH',
-    'T_FINAL',
-    'T_INSTANCEOF',
-    'T_PRIVATE',
-    'T_PROTECTED',
-    'T_PUBLIC',
-    'T_THROW',
-    'T_TRY',
-    'T_CLONE');
-
-foreach ($constants as $constant) {
-    if (defined($constant)) {
-        echo 'true';
-    } else {
-        echo 'false';
-    }
-    echo "\n";
-}
-
-?>
---EXPECT--
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/upload_err.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/upload_err.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/constant/upload_err.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/constant/upload_err.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Constant -- Upload error constants
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-PHP_Compat::loadConstant('UPLOAD_ERR');
-
-echo UPLOAD_ERR_OK, "\n";
-echo UPLOAD_ERR_INI_SIZE, "\n";
-echo UPLOAD_ERR_FORM_SIZE, "\n";
-echo UPLOAD_ERR_PARTIAL, "\n";
-echo UPLOAD_ERR_NO_FILE;
-
-?>
---EXPECT--
-0
-1
-2
-3
-4
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_change_key_case.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_change_key_case.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_change_key_case.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_change_key_case.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,100 +0,0 @@
---TEST--
-Function -- array_change_key_case
---SKIPIF--
-<?php if (function_exists('array_change_key_case')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_change_key_case');
-
-$in = array('FirSt' => 1, 'SecOnd' => 4);
-print_r(array_change_key_case($in));
-print_r(array_change_key_case($in, CASE_LOWER));
-print_r(array_change_key_case($in, CASE_UPPER));
-$in = array('FIRST' => 1, 'SECOND' => 4);
-print_r(array_change_key_case($in));
-print_r(array_change_key_case($in, CASE_LOWER));
-print_r(array_change_key_case($in, CASE_UPPER));
-$in = array('first' => 1, 'second' => 4);
-print_r(array_change_key_case($in));
-print_r(array_change_key_case($in, CASE_LOWER));
-print_r(array_change_key_case($in, CASE_UPPER));
-$in = array('foo', 'bar');
-print_r(array_change_key_case($in));
-print_r(array_change_key_case($in, CASE_LOWER));
-print_r(array_change_key_case($in, CASE_UPPER));
-$in = array();
-print_r(array_change_key_case($in));
-print_r(array_change_key_case($in, CASE_LOWER));
-print_r(array_change_key_case($in, CASE_UPPER));
-?>
---EXPECT--
-Array
-(
-    [first] => 1
-    [second] => 4
-)
-Array
-(
-    [first] => 1
-    [second] => 4
-)
-Array
-(
-    [FIRST] => 1
-    [SECOND] => 4
-)
-Array
-(
-    [first] => 1
-    [second] => 4
-)
-Array
-(
-    [first] => 1
-    [second] => 4
-)
-Array
-(
-    [FIRST] => 1
-    [SECOND] => 4
-)
-Array
-(
-    [first] => 1
-    [second] => 4
-)
-Array
-(
-    [first] => 1
-    [second] => 4
-)
-Array
-(
-    [FIRST] => 1
-    [SECOND] => 4
-)
-Array
-(
-    [0] => foo
-    [1] => bar
-)
-Array
-(
-    [0] => foo
-    [1] => bar
-)
-Array
-(
-    [0] => foo
-    [1] => bar
-)
-Array
-(
-)
-Array
-(
-)
-Array
-(
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_chunk.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_chunk.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_chunk.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_chunk.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,174 +0,0 @@
---TEST--
-Function -- array_chunk
---SKIPIF--
-<?php if (function_exists('array_chunk')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_chunk');
-
-$input_array = array(2 => 'a', 3 => 'b', 4 => 'c', 5 => 'd', 6 => 'e');
-print_r(array_chunk($input_array, 2));
-print_r(array_chunk($input_array, 2, true));
-print_r(array_chunk($input_array, 3));
-print_r(array_chunk($input_array, 3, true));
-print_r(array_chunk($input_array, 4));
-print_r(array_chunk($input_array, 4, true));
-print_r(array_chunk($input_array, 5));
-print_r(array_chunk($input_array, 5, true));
-print_r(array_chunk($input_array, 6));
-print_r(array_chunk($input_array, 6, true));
-?>
---EXPECT--
-Array
-(
-    [0] => Array
-        (
-            [0] => a
-            [1] => b
-        )
-
-    [1] => Array
-        (
-            [0] => c
-            [1] => d
-        )
-
-    [2] => Array
-        (
-            [0] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [2] => a
-            [3] => b
-        )
-
-    [1] => Array
-        (
-            [4] => c
-            [5] => d
-        )
-
-    [2] => Array
-        (
-            [6] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [0] => a
-            [1] => b
-            [2] => c
-        )
-
-    [1] => Array
-        (
-            [0] => d
-            [1] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [2] => a
-            [3] => b
-            [4] => c
-        )
-
-    [1] => Array
-        (
-            [5] => d
-            [6] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [0] => a
-            [1] => b
-            [2] => c
-            [3] => d
-        )
-
-    [1] => Array
-        (
-            [0] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [2] => a
-            [3] => b
-            [4] => c
-            [5] => d
-        )
-
-    [1] => Array
-        (
-            [6] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [0] => a
-            [1] => b
-            [2] => c
-            [3] => d
-            [4] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [2] => a
-            [3] => b
-            [4] => c
-            [5] => d
-            [6] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [0] => a
-            [1] => b
-            [2] => c
-            [3] => d
-            [4] => e
-        )
-
-)
-Array
-(
-    [0] => Array
-        (
-            [2] => a
-            [3] => b
-            [4] => c
-            [5] => d
-            [6] => e
-        )
-
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_combine.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_combine.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_combine.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_combine.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,22 +0,0 @@
---TEST--
-Function -- array_combine
---SKIPIF--
-<?php if (function_exists('array_combine')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_combine');
-
-$a = array('green', 'red', 'yellow');
-$b = array('avocado', 'apple', 'banana');
-$c = array_combine($a, $b);
-
-print_r($c);
-?>
---EXPECT--
-Array
-(
-    [green] => avocado
-    [red] => apple
-    [yellow] => banana
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_assoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_assoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_assoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_assoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
---TEST--
-Function -- array_diff_assoc
---SKIPIF--
-<?php if (function_exists('array_diff_assoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_diff_assoc');
-
-$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
-$array2 = array("a" => "green", "yellow", "red");
-$result = array_diff_assoc($array1, $array2);
-print_r($result);
-?>
---EXPECT--
-Array
-(
-    [b] => brown
-    [c] => blue
-    [0] => red
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_key.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_key.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_key.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_key.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
---TEST--
-Function -- array_diff_key
---SKIPIF--
-<?php if (function_exists('array_diff_key')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_diff_key');
-
-$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
-$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
-
-print_r(array_diff_key($array1, $array2));
-
-?>
---EXPECT--
-Array
-(
-    [red] => 2
-    [purple] => 4
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_uassoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_uassoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_uassoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_uassoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,31 +0,0 @@
---TEST--
-Function -- array_diff_uassoc
---SKIPIF--
-<?php if (function_exists('array_diff_uassoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_diff_uassoc');
-
-function key_compare_func($a, $b)
-{
-    if ($a === $b) {
-        return 0;
-    }
-
-    return ($a > $b) ? 1 : -1;
-}
-
-$array1 = array('a' => 'green', 'b' => 'brown', 'c' => 'blue', 'red');
-$array2 = array('a' => 'green', 'yellow', 'red');
-$result = array_diff_uassoc($array1, $array2, 'key_compare_func');
-print_r($result);
-
-?>
---EXPECT--
-Array
-(
-    [b] => brown
-    [c] => blue
-    [0] => red
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_ukey.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_ukey.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_ukey.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_diff_ukey.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,32 +0,0 @@
---TEST--
-Function -- array_diff_ukey
---SKIPIF--
-<?php if (function_exists('array_diff_ukey')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_diff_ukey');
-
-function key_compare_func($key1, $key2)
-{
-    if ($key1 == $key2) {
-        return 0;
-    } elseif ($key1 > $key2) {
-        return 1;
-    } else {
-        return -1;
-    }
-}
-
-$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
-$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
-
-print_r(array_diff_ukey($array1, $array2, 'key_compare_func'));
-
-?>
---EXPECT--
-Array
-(
-    [red] => 2
-    [purple] => 4
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_assoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_assoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_assoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_assoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- array_intersect_assoc
---SKIPIF--
-<?php if (function_exists('array_intersect_assoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_intersect_assoc');
-
-$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
-$array2 = array("a" => "green", "yellow", "red");
-$result = array_intersect_assoc($array1, $array2);
-print_r($result);
-
-?>
---EXPECT--
-Array
-(
-    [a] => green
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_key.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_key.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_key.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_key.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
---TEST--
-Function -- array_intersect_key
---SKIPIF--
-<?php if (function_exists('array_intersect_key')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_intersect_key');
-
-$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
-$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
-
-print_r(array_intersect_key($array1, $array2));
-
-?>
---EXPECT--
-Array
-(
-    [blue] => 1
-    [green] => 3
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_uassoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_uassoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_uassoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_uassoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- array_intersect_uassoc
---SKIPIF--
-<?php if (function_exists('array_intersect_uassoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_intersect_uassoc');
-
-$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
-$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
-
-print_r(array_intersect_uassoc($array1, $array2, "strcasecmp"));
-
-?>
---EXPECT--
-Array
-(
-    [b] => brown
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_ukey.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_ukey.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_ukey.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_intersect_ukey.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,32 +0,0 @@
---TEST--
-Function -- array_intersect_ukey
---SKIPIF--
-<?php if (function_exists('array_intersect_ukey')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_intersect_ukey');
-
-function key_compare_func($key1, $key2)
-{
-    if ($key1 == $key2) {
-        return 0;
-    } elseif ($key1 > $key2) {
-        return 1;
-    } else {
-        return -1;
-    }
-}
-
-$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
-$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
-
-print_r(array_intersect_ukey($array1, $array2, 'key_compare_func'));
-
-?>
---EXPECT--
-Array
-(
-    [blue] => 1
-    [green] => 3
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_key_exists.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_key_exists.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_key_exists.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_key_exists.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- array_key_exists
---SKIPIF--
-<?php if (function_exists('array_key_exists')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_key_exists');
-
-$search_array = array("first" => 1, "second" => 4);
-if (array_key_exists("first", $search_array)) {
-   echo "The 'first' element is in the array";
-}
-?>
---EXPECT--
-The 'first' element is in the array
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_search.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_search.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_search.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_search.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,17 +0,0 @@
---TEST--
-Function -- array_search
---SKIPIF--
-<?php if (function_exists('array_search')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_search');
-
-$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
-
-var_dump(array_search('green', $array));
-var_dump(array_search('red', $array));
-?>
---EXPECT--
-int(2)
-int(1)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_assoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_assoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_assoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_assoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,31 +0,0 @@
---TEST--
-Function -- array_udiff_assoc
---SKIPIF--
-<?php if (function_exists('array_udiff_assoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_udiff_assoc');
-
-class cr {
-    var $priv_member;
-    function cr($val)
-    {
-        $this->priv_member = $val;
-    }
-
-    function comp_func_cr($a, $b)
-    {
-        if ($a->priv_member === $b->priv_member) return 0;
-        return ($a->priv_member > $b->priv_member)? 1:-1;
-    }
-}
-
-$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
-$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
-
-$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
-echo serialize($result);
-?>
---EXPECT--
-a:3:{s:3:"0.1";O:2:"cr":1:{s:11:"priv_member";i:9;}s:3:"0.5";O:2:"cr":1:{s:11:"priv_member";i:12;}i:0;O:2:"cr":1:{s:11:"priv_member";i:23;}}
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,31 +0,0 @@
---TEST--
-Function -- array_udiff
---SKIPIF--
-<?php if (function_exists('array_udiff')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_udiff');
-
-class cr {
-    var $priv_member;
-    function cr($val)
-    {
-        $this->priv_member = $val;
-    }
-
-    function comp_func_cr($a, $b)
-    {
-        if ($a->priv_member === $b->priv_member) return 0;
-        return ($a->priv_member > $b->priv_member)? 1:-1;
-    }
-}
-
-$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
-$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
-
-$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
-echo serialize($result);
-?>
---EXPECT--
-a:2:{s:3:"0.5";O:2:"cr":1:{s:11:"priv_member";i:12;}i:0;O:2:"cr":1:{s:11:"priv_member";i:23;}}
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_uassoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_uassoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_uassoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_udiff_uassoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,56 +0,0 @@
---TEST--
-Function -- array_udiff_uassoc
---SKIPIF--
-<?php if (function_exists('array_udiff_uassoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_udiff_uassoc');
-
-class cr
-{
-    var $val;
-
-    function cr($val)
-    {
-        $this->val = $val;
-    }
-
-    function comp_func_cr($a, $b)
-    {
-        if ($a->val === $b->val) return 0;
-        return ($a->val > $b->val) ? 1 : -1;
-    }
-   
-    function comp_func_key($a, $b)
-    {
-        if ($a === $b) return 0;
-        return ($a > $b) ? 1 : -1;
-    }
-}
-
-$a = array('0.1' => new cr(9), '0.5' => new cr(12), 0 => new cr(23), 1 => new cr(4), 2 => new cr(-15));
-$b = array('0.2' => new cr(9), '0.5' => new cr(22), 0 => new cr(3), 1 => new cr(4), 2 => new cr(-15));
-
-$result = array_udiff_uassoc($a, $b, array('cr', 'comp_func_cr'), array('cr', 'comp_func_key'));
-print_r($result);
-?>
---EXPECT--
-Array
-(
-    [0.1] => cr Object
-        (
-            [val] => 9
-        )
-
-    [0.5] => cr Object
-        (
-            [val] => 12
-        )
-
-    [0] => cr Object
-        (
-            [val] => 23
-        )
-
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_assoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_assoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_assoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_assoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,19 +0,0 @@
---TEST--
-Function -- array_uintersect_assoc
---SKIPIF--
-<?php if (function_exists('array_uintersect_assoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_uintersect_assoc');
-
-$array1 = array('a' => 'green', 'b' => 'brown', 'c' => 'blue', 'red');
-$array2 = array('a' => 'GREEN', 'B' => 'brown', 'yellow', 'red');
-
-print_r(array_uintersect_assoc($array1, $array2, 'strcasecmp'));
-?>
---EXPECT--
-Array
-(
-    [a] => green
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
---TEST--
-Function -- array_uintersect
---SKIPIF--
-<?php if (function_exists('array_uintersect')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_uintersect');
-
-$array1 = array('a' => 'green', 'b' => 'brown', 'c' => 'blue', 'red');
-$array2 = array('a' => 'GREEN', 'B' => 'brown', 'yellow', 'red');
-
-print_r(array_uintersect($array1, $array2, 'strcasecmp'));
-?>
---EXPECT--
-Array
-(
-    [a] => green
-    [b] => brown
-    [0] => red
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_uassoc.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_uassoc.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_uassoc.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_uintersect_uassoc.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- array_uintersect_uassoc
---SKIPIF--
-<?php if (function_exists('array_uintersect_uassoc')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_uintersect_uassoc');
-
-$array1 = array('a' => 'green', 'b' => 'brown', 'c' => 'blue', 'red');
-$array2 = array('a' => 'GREEN', 'B' => 'brown', 'yellow', 'red');
-
-print_r(array_uintersect_uassoc($array1, $array2, 'strcasecmp', 'strcasecmp'));
-?>
---EXPECT--
-Array
-(
-    [a] => green
-    [b] => brown
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_walk_recursive.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_walk_recursive.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/array_walk_recursive.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/array_walk_recursive.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,23 +0,0 @@
---TEST--
-Function -- array_walk_recursive
---SKIPIF--
-<?php if (function_exists('array_walk_recursive')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('array_walk_recursive');
-
-$sweet = array('a' => 'apple', 'b' => 'banana');
-$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
-
-function test_print($item, $key)
-{
-   echo "$key holds $item\n";
-}
-
-array_walk_recursive($fruits, 'test_print');
-?>
---EXPECT--
-a holds apple
-b holds banana
-sour holds lemon
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/call_user_func_array.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/call_user_func_array.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/call_user_func_array.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/call_user_func_array.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- call_user_func_array
---SKIPIF--
-<?php if (function_exists('call_user_func_array')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('call_user_func_array');
-
-function somefunc ($param1, $param2, $param3) {
-	echo $param1, "\n", $param2, "\n", $param3;
-}
-
-$args = array ('foo', 'bar', 'meta');
-call_user_func_array('somefunc', $args);
-?>
---EXPECT--
-foo
-bar
-meta
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/clone.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/clone.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/clone.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/clone.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,45 +0,0 @@
---TEST--
-Function -- clone
---SKIPIF--
-<?php if (version_compare(phpversion(), '5.0') !== -1) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('clone');
-
-// Test classes
-class testclass
-{
-    var $foo = 'foo';
-}
-
-class testclass2
-{
-    var $foo = 'foo';
-
-    function __clone()    
-    {
-        $this->foo = 'bar';
-    }
-}
-
-// Test 1: Initial value
-$aa = new testclass;
-echo $aa->foo, "\n"; // foo
-
-// Test 2: Not referenced
-$bb = clone($aa);
-$bb->foo = 'baz';
-echo $aa->foo, "\n"; // foo
-
-// Test 3: __clone method
-$cc = new testclass2;
-echo $cc->foo, "\n"; // foo
-$dd = clone($cc);
-echo $dd->foo, "\n"; // bar
-?>
---EXPECT--
-foo
-foo
-foo
-bar
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/constant.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/constant.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/constant.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/constant.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,15 +0,0 @@
---TEST--
-Function -- constant
---SKIPIF--
-<?php if (function_exists('constant')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('constant');
-
-$constant = 'BAR';
-define($constant, 'foo');
-echo constant($constant);
-?>
---EXPECT--
-foo
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uudecode.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uudecode.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uudecode.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uudecode.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
---TEST--
-Function -- convert_uudecode
---SKIPIF--
-<?php if (function_exists('convert_uudecode')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('convert_uudecode');
-
-$string = base64_decode('NTUmQUk8UiFJPFIhQSgnLUk7NyFMOTIhVDk3LVQKYAo=');
-echo convert_uudecode($string);
-?>
---EXPECT--
-This is a simple test
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uuencode.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uuencode.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uuencode.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/convert_uuencode.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,23 +0,0 @@
---TEST--
-Function -- convert_uuencode
---SKIPIF--
-<?php if (function_exists('convert_uuencode')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('convert_uuencode');
-
-// Simple test
-echo md5(convert_uuencode('This is a simple test')), "\n";
-
-// Really messy test
-$string = '';
-for ($i = 0; 127 > $i; $i++) {
-    $string .= str_repeat(chr($i), 10);
-}
-echo md5(convert_uuencode($string));
-
-?>
---EXPECT--
-d7974131c8970783f70851c83fe17767
-19acf7157a8345307ea5e5ea6878abb4
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/file_get_contents.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/file_get_contents.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/file_get_contents.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/file_get_contents.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- file_get_contents
---SKIPIF--
-<?php if (function_exists('file_get_contents')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('file_get_contents');
-
-$tmpfname = tempnam('/tmp', 'php');
-$handle = fopen($tmpfname, 'w');
-fwrite($handle, "test test");
-fclose($handle);
-
-echo file_get_contents($tmpfname);
-
-unlink($tmpfname);
-?>
---EXPECT--
-test test
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/file_put_contents.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/file_put_contents.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/file_put_contents.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/file_put_contents.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,47 +0,0 @@
---TEST--
-Function -- file_put_contents
---SKIPIF--
-<?php if (function_exists('file_put_contents')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('file_put_contents');
-
-// Create a temp file
-$tmpfname = tempnam('/tmp', 'phpcompat');
-
-// With a string
-$string = "abcd";
-
-echo file_put_contents($tmpfname, $string), "\n";
-echo implode('', file($tmpfname)), "\n";
-
-// With an array
-$string = array('foo', 'bar');
-
-echo file_put_contents($tmpfname, $string), "\n";
-echo implode('', file($tmpfname)), "\n";
-
-// Test append
-$string = 'foobar';
-$string2 = 'testtest';
-$tmpfname = tempnam('/tmp', 'php');
-
-echo file_put_contents($tmpfname, $string), "\n";
-echo file_put_contents($tmpfname, $string2, FILE_APPEND), "\n";
-echo implode('', file($tmpfname)), "\n";
-echo file_put_contents($tmpfname, $string2), "\n";
-echo implode('', file($tmpfname));
-
-unlink($tmpfname);
-?>
---EXPECT--
-4
-abcd
-6
-foobar
-6
-8
-foobartesttest
-8
-testtest
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/floatval.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/floatval.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/floatval.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/floatval.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
---TEST--
-Function -- floatval
---SKIPIF--
-<?php if (function_exists('floatval')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('floatval');
-
-$var = '12312.123';
-var_dump(floatval($var));
-?>
---EXPECT--
-float(12312.123)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/fprintf.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/fprintf.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/fprintf.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/fprintf.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- fprintf
---SKIPIF--
-<?php if (function_exists('fprintf')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('fprintf');
-
-$tmpfname = tempnam('/tmp', 'php');
-$handle = fopen($tmpfname, 'w');
-fprintf($handle, 'The %s went to the %s for %d days', 'dog', 'park', 2);
-fclose($handle);
-$data = implode('', file($tmpfname));
-unlink($tmpfname);
-
-echo $data;
-?>
---EXPECT--
-The dog went to the park for 2 days
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/get_include_path.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/get_include_path.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/get_include_path.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/get_include_path.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,15 +0,0 @@
---TEST--
-Function -- get_include_path
---SKIPIF--
-<?php if (function_exists('get_include_path')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('get_include_path');
-
-if (get_include_path() == ini_get('include_path')) {
-    echo 'true';
-}
-?>
---EXPECT--
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/html_entity_decode.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/html_entity_decode.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/html_entity_decode.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/html_entity_decode.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- html_entity_decode
---SKIPIF--
-<?php if (function_exists('html_entity_decode')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('html_entity_decode');
-
-$string = "I&#039;ll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now";
-echo html_entity_decode($string), "\n";
-echo html_entity_decode($string, ENT_COMPAT), "\n";
-echo html_entity_decode($string, ENT_QUOTES), "\n";
-echo html_entity_decode($string, ENT_NOQUOTES), "\n";
-?>
---EXPECT--
-I'll "walk" the <b>dog</b> now
-I'll "walk" the <b>dog</b> now
-I'll "walk" the <b>dog</b> now
-I'll &quot;walk&quot; the <b>dog</b> now
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/http_build_query.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/http_build_query.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/http_build_query.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/http_build_query.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,70 +0,0 @@
---TEST--
-Function -- http_build_query
---SKIPIF--
-<?php if (function_exists('http_build_query')) { echo 'skip'; } ?>
---INI--
-arg_separator.output=QQQ
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('http_build_query');
-
-// Simple
-$data = array('foo'=>'bar',
-             'baz'=>'boom',
-             'cow'=>'milk',
-             'php'=>'hypertext processor');
-
-echo http_build_query($data), "\n";
-
-
-// With an object
-class myClass {
-    var $foo;
-    var $baz;
-
-    function myClass()
-    {
-        $this->foo = 'bar';
-        $this->baz = 'boom';
-    }
-}
-
-$data = new myClass();
-echo http_build_query($data), "\n";
-
-
-// With numerically indexed elements
-$data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');
-echo http_build_query($data), "\n";
-echo http_build_query($data, 'myvar_'), "\n";
-
-
-// With a complex array
-$data = array('user' => array(
-                    'name' => 'Bob Smith',
-                    'age' => 47,
-                    'sex' => 'M',
-                    'dob' => '5/12/1956'),
-             'pastimes' => array(
-                    'golf',
-                    'opera',
-                    'poker',
-                    'rap'),
-             'children' => array(
-                    'bobby' => array(
-                        'age' => 12,
-                        'sex' => 'M'),
-                     'sally' => array(
-                        'age' => 8,
-                        'sex'=>'F')),
-             'CEO');
-
-echo http_build_query($data, 'flags_');
-?>
---EXPECT--
-foo=barQQQbaz=boomQQQcow=milkQQQphp=hypertext+processor
-foo=barQQQbaz=boom
-0=fooQQQ1=barQQQ2=bazQQQ3=boomQQQcow=milkQQQphp=hypertext+processor
-myvar_0=fooQQQmyvar_1=barQQQmyvar_2=bazQQQmyvar_3=boomQQQcow=milkQQQphp=hypertext+processor
-user[name]=Bob+SmithQQQuser[age]=47QQQuser[sex]=MQQQuser[dob]=5%2F12%2F1956QQQpastimes[0]=golfQQQpastimes[1]=operaQQQpastimes[2]=pokerQQQpastimes[3]=rapQQQchildren[bobby][age]=12QQQchildren[bobby][sex]=MQQQchildren[sally][age]=8QQQchildren[sally][sex]=FQQQflags_0=CEO
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/image_type_to_mime_type.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/image_type_to_mime_type.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/image_type_to_mime_type.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/image_type_to_mime_type.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,49 +0,0 @@
---TEST--
-Function -- image_type_to_mime_type
---SKIPIF--
-<?php if (function_exists('image_type_to_mime_type')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('image_type_to_mime_type');
-
-$types = array (
-	IMAGETYPE_GIF,
-	IMAGETYPE_JPEG,
-	IMAGETYPE_PNG,
-	IMAGETYPE_SWF,
-	IMAGETYPE_PSD,
-	IMAGETYPE_BMP,
-	IMAGETYPE_TIFF_II,
-	IMAGETYPE_TIFF_MM,
-	IMAGETYPE_JPC,
-	IMAGETYPE_JP2,
-	IMAGETYPE_JPX,
-	IMAGETYPE_JB2,
-	IMAGETYPE_SWC,
-	IMAGETYPE_IFF,
-	IMAGETYPE_WBMP,
-	IMAGETYPE_XBM
-);
-
-foreach ($types as $type) {
-	echo image_type_to_mime_type($type), "\n";
-}
-?>
---EXPECT--
-image/gif
-image/jpeg
-image/png
-application/x-shockwave-flash
-image/psd
-image/bmp
-image/tiff
-image/tiff
-application/octet-stream
-image/jp2
-application/octet-stream
-application/octet-stream
-application/x-shockwave-flash
-image/iff
-image/vnd.wap.wbmp
-image/xbm
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ini_get_all.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ini_get_all.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ini_get_all.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ini_get_all.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- ini_get_all
---SKIPIF--
-<?php if (function_exists('ini_get_all')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('ini_get_all');
-
-if (is_array(ini_get_all())) {
-    echo "true\n";
-}
-
-if (is_array(ini_get_all('mysql'))) {
-    echo "true\n";
-}
-?>
---EXPECT--
-true
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/is_a.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/is_a.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/is_a.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/is_a.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,22 +0,0 @@
---TEST--
-Function -- is_a
---SKIPIF--
-<?php if (function_exists('is_a')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('is_a');
-
-class WidgetFactory
-{
-    var $oink = 'moo';
-}
-
-$wf = new WidgetFactory();
-
-if (is_a($wf, 'WidgetFactory')) {
-    echo 'true';
-}
-?>
---EXPECT--
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/md5_file.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/md5_file.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/md5_file.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/md5_file.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,13 +0,0 @@
---TEST--
-Function -- md5_file
---SKIPIF--
-<?php if (function_exists('md5_file')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('md5_file');
-
-echo md5_file(__FILE__);
-?>
---EXPECT--
-762a55bb01c6133a956599e6a51c49b0
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_clean.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_clean.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_clean.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_clean.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,17 +0,0 @@
---TEST--
-Function -- ob_clean
---SKIPIF--
-<?php if (function_exists('ob_clean')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('ob_clean');
-
-ob_start();
-echo 'foo';
-ob_clean();
-echo 'foo';
-ob_end_flush();
-?>
---EXPECT--
-foo
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_flush.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_flush.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_flush.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_flush.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- ob_flush
---SKIPIF--
-<?php if (function_exists('ob_flush')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('ob_flush');
-
-ob_start();
-echo 'foo';
-ob_flush();
-ob_end_clean();
-?>
---EXPECT--
-foo
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_clean.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_clean.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_clean.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_clean.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- ob_get_clean
---SKIPIF--
-<?php if (function_exists('ob_get_clean')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('ob_get_clean');
-
-ob_start();
-echo 'foo';
-$buffer = ob_get_clean();
-echo $buffer;
-?>
---EXPECT--
-foo
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_flush.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_flush.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_flush.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/ob_get_flush.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- ob_get_flush
---SKIPIF--
-<?php if (function_exists('ob_get_flush')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('ob_get_flush');
-
-ob_start();
-echo 'foo';
-$buffer = ob_get_flush();
-echo $buffer;
-?>
---EXPECT--
-foofoo
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/php_strip_whitespace.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/php_strip_whitespace.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/php_strip_whitespace.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/php_strip_whitespace.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,42 +0,0 @@
---TEST--
-Function -- php_strip_whitespace
---SKIPIF--
-<?php
-if (function_exists('php_strip_whitespace') ||
-    !extension_loaded('tokenizer')) {
-        
-    echo 'skip';
-}
-?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('php_strip_whitespace');
-
-// Here is some sample PHP code to write to the file
-$string = '<?php
-// PHP comment here
-
-/*
- * Another PHP comment
- */
-
-echo        php_strip_whitespace($_SERVER[\'PHP_SELF\']);
-// Newlines are considered whitespace, and are removed too:
-do_nothing();
-?>';
-
-// Create a temp file
-$tmpfname = tempnam('/tmp', 'phpcompat');
-$fh = fopen($tmpfname, 'w');
-fwrite($fh, $string);
-
-// Test
-echo php_strip_whitespace($tmpfname);
-
-// Close
-fclose($fh);
-?>
---EXPECT--
-<?php
- echo php_strip_whitespace($_SERVER['PHP_SELF']); do_nothing(); ?>
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/restore_include_path.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/restore_include_path.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/restore_include_path.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/restore_include_path.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,23 +0,0 @@
---TEST--
-Function -- restore_include_path
---SKIPIF--
-<?php if (function_exists('restore_include_path')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('restore_include_path');
-
-$orig = ini_get('include_path');
-ini_set('include_path', 'foo');
-echo ini_get('include_path'), "\n";
-
-restore_include_path();
-$new = ini_get('include_path');
-
-if ($orig == $new) {
-    echo 'true';
-}
-?>
---EXPECT--
-foo
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/scandir.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/scandir.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/scandir.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/scandir.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,45 +0,0 @@
---TEST--
-Function -- scandir
---SKIPIF--
-<?php if (function_exists('scandir')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('scandir');
-
-// Create a folder and fill it with files
-mkdir('tmp');
-touch('tmp/test1');
-touch('tmp/test2');
-
-// Scan it
-$dir    = 'tmp';
-// Not sorted
-$files = scandir($dir);
-// Sorted
-$files2 = scandir($dir, 1);
-
-// List the results
-print_r($files);
-print_r($files2);
-
-// Remove the files
-unlink('tmp/test1');
-unlink('tmp/test2');
-rmdir('tmp');
-?>
---EXPECT--
-Array
-(
-    [0] => .
-    [1] => ..
-    [2] => test1
-    [3] => test2
-)
-Array
-(
-    [0] => test2
-    [1] => test1
-    [2] => ..
-    [3] => .
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/set_include_path.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/set_include_path.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/set_include_path.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/set_include_path.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
---TEST--
-Function -- set_include_path
---SKIPIF--
-<?php if (function_exists('set_include_path')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('set_include_path');
-
-set_include_path('foo');
-echo ini_get('include_path');
-?>
---EXPECT--
-foo
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/stripos.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/stripos.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/stripos.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/stripos.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,27 +0,0 @@
---TEST--
-Function -- stripos
---SKIPIF--
-<?php if (function_exists('stripos')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('stripos');
-
-$haystack = 'Cat Dinner Dog Lion Mouse Sheep Wolf Cat Dog';
-$needle  = 'DOG';
-
-// Simple
-var_dump(stripos($haystack, $needle));
-
-// With offset
-var_dump(stripos($haystack, $needle, 4));
-var_dump(stripos($haystack, $needle, 10));
-var_dump(stripos($haystack, $needle, 15));
-var_dump(stripos($haystack, 'idontexist', 15));
-?>
---EXPECT--
-int(11)
-int(11)
-int(11)
-int(41)
-bool(false)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_ireplace.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_ireplace.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_ireplace.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_ireplace.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,113 +0,0 @@
---TEST--
-Function -- str_ireplace
---SKIPIF--
-<?php if (function_exists('str_ireplace')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('str_ireplace');
-
-//
-// Simple
-//
-
-$search = '{object}';
-$replace = 'fence';
-$subject = 'The dog jumped over the {object}';
-
-echo str_ireplace($search, $replace, $subject), "\n";
-
-//
-// Test 1: With subject as array
-//
-
-// As a full array
-$search = '{SUBJECT}';
-$replace = 'Lady';
-$subject = array('A {subject}', 'The {subject}', 'My {subject}');
-print_r(str_ireplace($search, $replace, $subject));
-
-// As a single array
-$search = '{SUBJECT}';
-$replace = 'Lady';
-$subject = array('The dog jumped over the {object}');
-print_r(str_ireplace($search, $replace, $subject));
-
-
-//
-// Test 2: Search as string, replace as array
-//
-
-$search = '{object}';
-$replace = array('cat', 'dog', 'tiger');
-$subject = 'The dog jumped over the {object}';
-// Supress the error, no way of knowing how it'll turn out on the users machine
-echo @str_ireplace($search, $replace, $subject), "\n";
-
-
-//
-// Test 3: Search as array, Replace as string
-//
-
-$search = array('{ANIMAL}', '{OBJECT}', '{THING}');
-$replace = 'frog';
-$subject = 'The {animal} jumped over the {object} and the {thing}...';
-echo str_ireplace($search, $replace, $subject), "\n";
-
-
-//
-// Test 4: Search and Replace as arrays
-//
-
-// Simple
-$search = array('{ANIMAL}', '{OBJECT}');
-$replace = array('frog', 'gate');
-$subject = 'The {animal} jumped over the {object}';
-echo str_ireplace($search, $replace, $subject), "\n";
-
-// More in search
-$search = array('{ANIMAL}', '{OBJECT}', '{THING}');
-$replace = array('frog', 'gate');
-$subject = 'The {animal} jumped over the {object} and the {thing}...';
-echo str_ireplace($search, $replace, $subject), "\n";
-
-// More in replace
-$search = array('{ANIMAL}', '{OBJECT}');
-$replace = array('frog', 'gate', 'door');
-$subject = 'The {animal} jumped over the {object} and the {thing}...';
-echo str_ireplace($search, $replace, $subject), "\n";
-
-
-//
-// Test 5: All arrays
-//
-
-$search = array('{ANIMAL}', '{OBJECT}', '{THING}');
-$replace = array('frog', 'gate', 'beer');
-$subject = array('A {animal}', 'The {object}', 'My {thing}');
-print_r(str_ireplace($search, $replace, $subject));
-
-?>
---EXPECT--
-The dog jumped over the fence
-Array
-(
-    [0] => A Lady
-    [1] => The Lady
-    [2] => My Lady
-)
-Array
-(
-    [0] => The dog jumped over the {object}
-)
-The dog jumped over the Array
-The frog jumped over the frog and the frog...
-The frog jumped over the gate
-The frog jumped over the gate and the ...
-The frog jumped over the gate and the {thing}...
-Array
-(
-    [0] => A frog
-    [1] => The gate
-    [2] => My beer
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/strpbrk.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/strpbrk.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/strpbrk.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/strpbrk.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- strpbrk
---SKIPIF--
-<?php if (function_exists('strpbrk')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('strpbrk');
-
-$haystack = 'To be or not to be';
-$char_list  = 'jhdn';
-
-var_dump(strpbrk($haystack, $char_list));
-?>
---EXPECT--
-string(9) "not to be"
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/strripos.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/strripos.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/strripos.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/strripos.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,33 +0,0 @@
---TEST--
-Function -- strripos
---SKIPIF--
-<?php if (function_exists('strripos')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('strripos');
-
-$haystack = 'Cat Dinner Dog Lion Mouse Sheep Wolf Cat Dog Donut';
-$needle  = 'DOG';
-
-// Simple
-var_dump(strripos($haystack, $needle));
-
-// With offset
-var_dump(strripos($haystack, $needle, 3));
-var_dump(strripos($haystack, $needle, 30));
-var_dump(strripos($haystack, $needle, 50));
-var_dump(strripos($haystack, $needle, -1));
-var_dump(strripos($haystack, $needle, -10));
-var_dump(strripos($haystack, $needle, -30));
-var_dump(strripos($haystack, $needle, -50));
-?>
---EXPECT--
-int(41)
-int(41)
-int(41)
-bool(false)
-int(41)
-int(11)
-int(11)
-bool(false)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_rot13.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_rot13.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_rot13.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_rot13.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
---TEST--
-Function -- str_rot13
---SKIPIF--
-<?php if (function_exists('str_rot13')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('str_rot13');
-
-$str = "The quick brown fox jumped over the lazy dog.";
-echo str_rot13($str);
-?>
---EXPECT--
-Gur dhvpx oebja sbk whzcrq bire gur ynml qbt.
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_shuffle.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_shuffle.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_shuffle.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_shuffle.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,20 +0,0 @@
---TEST--
-Function -- str_shuffle
---SKIPIF--
-<?php if (function_exists('str_shuffle')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('str_shuffle');
-
-$string = str_shuffle('ab');
-if ($string == 'ab' ||
-    $string == 'ba' ||
-    $string == 'aa' ||
-    $string == 'bb') {
-
-    echo "true";
-}
-?>
---EXPECT--
-true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_split.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_split.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_split.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_split.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,59 +0,0 @@
---TEST--
-Function -- str_split
---SKIPIF--
-<?php if (function_exists('str_split')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('str_split');
-
-$str = "Hello Friend";
-
-// Simple
-$arr = str_split($str);
-print_r($arr);
-
-// With a chunk size specified
-$arr = str_split($str, 3);
-print_r($arr);
-
-// With chunk size bigger than the string
-$arr = str_split($str, 60);
-print_r($arr);
-
-// String that has a remainder less than the chunk size
-$arr = str_split($str, 11);
-print_r($arr);
-?>
---EXPECT--
-Array
-(
-    [0] => H
-    [1] => e
-    [2] => l
-    [3] => l
-    [4] => o
-    [5] =>  
-    [6] => F
-    [7] => r
-    [8] => i
-    [9] => e
-    [10] => n
-    [11] => d
-)
-Array
-(
-    [0] => Hel
-    [1] => lo 
-    [2] => Fri
-    [3] => end
-)
-Array
-(
-    [0] => Hello Friend
-)
-Array
-(
-    [0] => Hello Frien
-    [1] => d
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_word_count.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_word_count.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/str_word_count.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/str_word_count.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,46 +0,0 @@
---TEST--
-Function -- str_word_count
---SKIPIF--
-<?php if (function_exists('str_word_count')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('str_word_count');
-
-$str = "Hello friend, you're \r\nsdf\tlooking    3865\t9879 good to\"day, yes \"sir\" you am!";
-var_dump(str_word_count($str));
-print_r(str_word_count($str, 1));
-print_r(str_word_count($str, 2));
-?>
---EXPECT--
-int(12)
-Array
-(
-    [0] => Hello
-    [1] => friend
-    [2] => you're
-    [3] => sdf
-    [4] => looking
-    [5] => good
-    [6] => to
-    [7] => day
-    [8] => yes
-    [9] => sir
-    [10] => you
-    [11] => am
-)
-Array
-(
-    [0] => Hello
-    [6] => friend
-    [14] => you're
-    [23] => sdf
-    [27] => looking
-    [48] => good
-    [53] => to
-    [56] => day
-    [61] => yes
-    [66] => sir
-    [71] => you
-    [75] => am
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/substr_compare.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/substr_compare.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/substr_compare.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/substr_compare.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
---TEST--
-Function -- substr_compare
---SKIPIF--
-<?php if (function_exists('substr_compare')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('substr_compare');
-
-echo substr_compare("abcde", "bc", 1, 2), "\n";
-echo substr_compare("abcde", "bcg", 1, 2), "\n";
-echo substr_compare("abcde", "BC", 1, 2, true), "\n"; 
-echo substr_compare("abcde", "bc", 1, 3), "\n";
-echo substr_compare("abcde", "cd", 1, 2);
-?>
---EXPECT--
-0
-0
-0
-1
--1
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/var_export.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/var_export.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/var_export.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/var_export.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,38 +0,0 @@
---TEST--
-Function -- var_export
---SKIPIF--
-<?php if (function_exists('var_export')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('var_export');
-
-// Simple
-$a = array (1, 2, array ("a", "b", "c"));
-var_export($a);
-echo "\n";
-
-// With return
-echo var_export($a, true);
-?>
---EXPECT--
-array (
-  0 => 1,
-  1 => 2,
-  2 =>
-  array (
-    0 => 'a',
-    1 => 'b',
-    2 => 'c',
-  ),
-)
-array (
-  0 => 1,
-  1 => 2,
-  2 =>
-  array (
-    0 => 'a',
-    1 => 'b',
-    2 => 'c',
-  ),
-)
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/version_compare.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/version_compare.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/version_compare.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/version_compare.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,615 +0,0 @@
---TEST--
-Function -- version_compare
---SKIPIF--
-<?php if (function_exists('version_compare')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('version_compare');
-
-// Basic
-print "testing basic\n";
-test('1', '2');
-test('10', '2');
-test('1.0', '1.1');
-test('1.2', '1.0.1');
-test('1.2.p3', '1.2.4');
-test('1.2.y', '1.2.z');
-
-// Comparisons
-print "testing compare\n";
-$special_forms = array("-dev", "a1", "b1", "RC1", "", "pl1");
-$operators = array(
-    "lt", "<",
-    "le", "<=",
-    "gt", ">",
-    "ge", ">=",
-    "eq", "=", "==",
-    "ne", "<>", "!="
-);
-
-foreach ($special_forms as $f1) {
-    foreach ($special_forms as $f2) {
-	test("1.0$f1", "1.0$f2");
-    }
-}
-
-// Operators
-print "testing operators\n";
-foreach ($special_forms as $f1) {
-    foreach ($special_forms as $f2) {
-        foreach ($operators as $op) {
-            $v1 = "1.0$f1";
-            $v2 = "1.0$f2";
-            $test = version_compare($v1, $v2, $op) ? "true" : "false";
-            printf("%7s %2s %-7s : %s\n", $v1, $op, $v2, $test);
-        }
-    }
-}
-
-function test($v1, $v2) {
-    $compare = version_compare($v1, $v2);
-    switch ($compare) {
-	case -1:
-	    print "$v1 < $v2\n";
-	    break;
-	case 1:
-	    print "$v1 > $v2\n";
-	    break;
-	case 0:
-	default:
-	    print "$v1 = $v2\n";
-	    break;
-    }
-}
-
-?>
-testing basic
-1 < 2
-10 > 2
-1.0 < 1.1
-1.2 > 1.0.1
-1.2.p3 > 1.2.4
-1.2.y = 1.2.z
-testing compare
-1.0-dev = 1.0-dev
-1.0-dev < 1.0a1
-1.0-dev < 1.0b1
-1.0-dev < 1.0RC1
-1.0-dev < 1.0
-1.0-dev < 1.0pl1
-1.0a1 > 1.0-dev
-1.0a1 = 1.0a1
-1.0a1 < 1.0b1
-1.0a1 < 1.0RC1
-1.0a1 < 1.0
-1.0a1 < 1.0pl1
-1.0b1 > 1.0-dev
-1.0b1 > 1.0a1
-1.0b1 = 1.0b1
-1.0b1 < 1.0RC1
-1.0b1 < 1.0
-1.0b1 < 1.0pl1
-1.0RC1 > 1.0-dev
-1.0RC1 > 1.0a1
-1.0RC1 > 1.0b1
-1.0RC1 = 1.0RC1
-1.0RC1 < 1.0
-1.0RC1 < 1.0pl1
-1.0 > 1.0-dev
-1.0 > 1.0a1
-1.0 > 1.0b1
-1.0 > 1.0RC1
-1.0 = 1.0
-1.0 < 1.0pl1
-1.0pl1 > 1.0-dev
-1.0pl1 > 1.0a1
-1.0pl1 > 1.0b1
-1.0pl1 > 1.0RC1
-1.0pl1 > 1.0
-1.0pl1 = 1.0pl1
-testing operators
-1.0-dev lt 1.0-dev : false
-1.0-dev  < 1.0-dev : false
-1.0-dev le 1.0-dev : true
-1.0-dev <= 1.0-dev : true
-1.0-dev gt 1.0-dev : false
-1.0-dev  > 1.0-dev : false
-1.0-dev ge 1.0-dev : true
-1.0-dev >= 1.0-dev : true
-1.0-dev eq 1.0-dev : true
-1.0-dev  = 1.0-dev : true
-1.0-dev == 1.0-dev : true
-1.0-dev ne 1.0-dev : false
-1.0-dev <> 1.0-dev : false
-1.0-dev != 1.0-dev : false
-1.0-dev lt 1.0a1   : true
-1.0-dev  < 1.0a1   : true
-1.0-dev le 1.0a1   : true
-1.0-dev <= 1.0a1   : true
-1.0-dev gt 1.0a1   : false
-1.0-dev  > 1.0a1   : false
-1.0-dev ge 1.0a1   : false
-1.0-dev >= 1.0a1   : false
-1.0-dev eq 1.0a1   : false
-1.0-dev  = 1.0a1   : false
-1.0-dev == 1.0a1   : false
-1.0-dev ne 1.0a1   : true
-1.0-dev <> 1.0a1   : true
-1.0-dev != 1.0a1   : true
-1.0-dev lt 1.0b1   : true
-1.0-dev  < 1.0b1   : true
-1.0-dev le 1.0b1   : true
-1.0-dev <= 1.0b1   : true
-1.0-dev gt 1.0b1   : false
-1.0-dev  > 1.0b1   : false
-1.0-dev ge 1.0b1   : false
-1.0-dev >= 1.0b1   : false
-1.0-dev eq 1.0b1   : false
-1.0-dev  = 1.0b1   : false
-1.0-dev == 1.0b1   : false
-1.0-dev ne 1.0b1   : true
-1.0-dev <> 1.0b1   : true
-1.0-dev != 1.0b1   : true
-1.0-dev lt 1.0RC1  : true
-1.0-dev  < 1.0RC1  : true
-1.0-dev le 1.0RC1  : true
-1.0-dev <= 1.0RC1  : true
-1.0-dev gt 1.0RC1  : false
-1.0-dev  > 1.0RC1  : false
-1.0-dev ge 1.0RC1  : false
-1.0-dev >= 1.0RC1  : false
-1.0-dev eq 1.0RC1  : false
-1.0-dev  = 1.0RC1  : false
-1.0-dev == 1.0RC1  : false
-1.0-dev ne 1.0RC1  : true
-1.0-dev <> 1.0RC1  : true
-1.0-dev != 1.0RC1  : true
-1.0-dev lt 1.0     : true
-1.0-dev  < 1.0     : true
-1.0-dev le 1.0     : true
-1.0-dev <= 1.0     : true
-1.0-dev gt 1.0     : false
-1.0-dev  > 1.0     : false
-1.0-dev ge 1.0     : false
-1.0-dev >= 1.0     : false
-1.0-dev eq 1.0     : false
-1.0-dev  = 1.0     : false
-1.0-dev == 1.0     : false
-1.0-dev ne 1.0     : true
-1.0-dev <> 1.0     : true
-1.0-dev != 1.0     : true
-1.0-dev lt 1.0pl1  : true
-1.0-dev  < 1.0pl1  : true
-1.0-dev le 1.0pl1  : true
-1.0-dev <= 1.0pl1  : true
-1.0-dev gt 1.0pl1  : false
-1.0-dev  > 1.0pl1  : false
-1.0-dev ge 1.0pl1  : false
-1.0-dev >= 1.0pl1  : false
-1.0-dev eq 1.0pl1  : false
-1.0-dev  = 1.0pl1  : false
-1.0-dev == 1.0pl1  : false
-1.0-dev ne 1.0pl1  : true
-1.0-dev <> 1.0pl1  : true
-1.0-dev != 1.0pl1  : true
-  1.0a1 lt 1.0-dev : false
-  1.0a1  < 1.0-dev : false
-  1.0a1 le 1.0-dev : false
-  1.0a1 <= 1.0-dev : false
-  1.0a1 gt 1.0-dev : true
-  1.0a1  > 1.0-dev : true
-  1.0a1 ge 1.0-dev : true
-  1.0a1 >= 1.0-dev : true
-  1.0a1 eq 1.0-dev : false
-  1.0a1  = 1.0-dev : false
-  1.0a1 == 1.0-dev : false
-  1.0a1 ne 1.0-dev : true
-  1.0a1 <> 1.0-dev : true
-  1.0a1 != 1.0-dev : true
-  1.0a1 lt 1.0a1   : false
-  1.0a1  < 1.0a1   : false
-  1.0a1 le 1.0a1   : true
-  1.0a1 <= 1.0a1   : true
-  1.0a1 gt 1.0a1   : false
-  1.0a1  > 1.0a1   : false
-  1.0a1 ge 1.0a1   : true
-  1.0a1 >= 1.0a1   : true
-  1.0a1 eq 1.0a1   : true
-  1.0a1  = 1.0a1   : true
-  1.0a1 == 1.0a1   : true
-  1.0a1 ne 1.0a1   : false
-  1.0a1 <> 1.0a1   : false
-  1.0a1 != 1.0a1   : false
-  1.0a1 lt 1.0b1   : true
-  1.0a1  < 1.0b1   : true
-  1.0a1 le 1.0b1   : true
-  1.0a1 <= 1.0b1   : true
-  1.0a1 gt 1.0b1   : false
-  1.0a1  > 1.0b1   : false
-  1.0a1 ge 1.0b1   : false
-  1.0a1 >= 1.0b1   : false
-  1.0a1 eq 1.0b1   : false
-  1.0a1  = 1.0b1   : false
-  1.0a1 == 1.0b1   : false
-  1.0a1 ne 1.0b1   : true
-  1.0a1 <> 1.0b1   : true
-  1.0a1 != 1.0b1   : true
-  1.0a1 lt 1.0RC1  : true
-  1.0a1  < 1.0RC1  : true
-  1.0a1 le 1.0RC1  : true
-  1.0a1 <= 1.0RC1  : true
-  1.0a1 gt 1.0RC1  : false
-  1.0a1  > 1.0RC1  : false
-  1.0a1 ge 1.0RC1  : false
-  1.0a1 >= 1.0RC1  : false
-  1.0a1 eq 1.0RC1  : false
-  1.0a1  = 1.0RC1  : false
-  1.0a1 == 1.0RC1  : false
-  1.0a1 ne 1.0RC1  : true
-  1.0a1 <> 1.0RC1  : true
-  1.0a1 != 1.0RC1  : true
-  1.0a1 lt 1.0     : true
-  1.0a1  < 1.0     : true
-  1.0a1 le 1.0     : true
-  1.0a1 <= 1.0     : true
-  1.0a1 gt 1.0     : false
-  1.0a1  > 1.0     : false
-  1.0a1 ge 1.0     : false
-  1.0a1 >= 1.0     : false
-  1.0a1 eq 1.0     : false
-  1.0a1  = 1.0     : false
-  1.0a1 == 1.0     : false
-  1.0a1 ne 1.0     : true
-  1.0a1 <> 1.0     : true
-  1.0a1 != 1.0     : true
-  1.0a1 lt 1.0pl1  : true
-  1.0a1  < 1.0pl1  : true
-  1.0a1 le 1.0pl1  : true
-  1.0a1 <= 1.0pl1  : true
-  1.0a1 gt 1.0pl1  : false
-  1.0a1  > 1.0pl1  : false
-  1.0a1 ge 1.0pl1  : false
-  1.0a1 >= 1.0pl1  : false
-  1.0a1 eq 1.0pl1  : false
-  1.0a1  = 1.0pl1  : false
-  1.0a1 == 1.0pl1  : false
-  1.0a1 ne 1.0pl1  : true
-  1.0a1 <> 1.0pl1  : true
-  1.0a1 != 1.0pl1  : true
-  1.0b1 lt 1.0-dev : false
-  1.0b1  < 1.0-dev : false
-  1.0b1 le 1.0-dev : false
-  1.0b1 <= 1.0-dev : false
-  1.0b1 gt 1.0-dev : true
-  1.0b1  > 1.0-dev : true
-  1.0b1 ge 1.0-dev : true
-  1.0b1 >= 1.0-dev : true
-  1.0b1 eq 1.0-dev : false
-  1.0b1  = 1.0-dev : false
-  1.0b1 == 1.0-dev : false
-  1.0b1 ne 1.0-dev : true
-  1.0b1 <> 1.0-dev : true
-  1.0b1 != 1.0-dev : true
-  1.0b1 lt 1.0a1   : false
-  1.0b1  < 1.0a1   : false
-  1.0b1 le 1.0a1   : false
-  1.0b1 <= 1.0a1   : false
-  1.0b1 gt 1.0a1   : true
-  1.0b1  > 1.0a1   : true
-  1.0b1 ge 1.0a1   : true
-  1.0b1 >= 1.0a1   : true
-  1.0b1 eq 1.0a1   : false
-  1.0b1  = 1.0a1   : false
-  1.0b1 == 1.0a1   : false
-  1.0b1 ne 1.0a1   : true
-  1.0b1 <> 1.0a1   : true
-  1.0b1 != 1.0a1   : true
-  1.0b1 lt 1.0b1   : false
-  1.0b1  < 1.0b1   : false
-  1.0b1 le 1.0b1   : true
-  1.0b1 <= 1.0b1   : true
-  1.0b1 gt 1.0b1   : false
-  1.0b1  > 1.0b1   : false
-  1.0b1 ge 1.0b1   : true
-  1.0b1 >= 1.0b1   : true
-  1.0b1 eq 1.0b1   : true
-  1.0b1  = 1.0b1   : true
-  1.0b1 == 1.0b1   : true
-  1.0b1 ne 1.0b1   : false
-  1.0b1 <> 1.0b1   : false
-  1.0b1 != 1.0b1   : false
-  1.0b1 lt 1.0RC1  : true
-  1.0b1  < 1.0RC1  : true
-  1.0b1 le 1.0RC1  : true
-  1.0b1 <= 1.0RC1  : true
-  1.0b1 gt 1.0RC1  : false
-  1.0b1  > 1.0RC1  : false
-  1.0b1 ge 1.0RC1  : false
-  1.0b1 >= 1.0RC1  : false
-  1.0b1 eq 1.0RC1  : false
-  1.0b1  = 1.0RC1  : false
-  1.0b1 == 1.0RC1  : false
-  1.0b1 ne 1.0RC1  : true
-  1.0b1 <> 1.0RC1  : true
-  1.0b1 != 1.0RC1  : true
-  1.0b1 lt 1.0     : true
-  1.0b1  < 1.0     : true
-  1.0b1 le 1.0     : true
-  1.0b1 <= 1.0     : true
-  1.0b1 gt 1.0     : false
-  1.0b1  > 1.0     : false
-  1.0b1 ge 1.0     : false
-  1.0b1 >= 1.0     : false
-  1.0b1 eq 1.0     : false
-  1.0b1  = 1.0     : false
-  1.0b1 == 1.0     : false
-  1.0b1 ne 1.0     : true
-  1.0b1 <> 1.0     : true
-  1.0b1 != 1.0     : true
-  1.0b1 lt 1.0pl1  : true
-  1.0b1  < 1.0pl1  : true
-  1.0b1 le 1.0pl1  : true
-  1.0b1 <= 1.0pl1  : true
-  1.0b1 gt 1.0pl1  : false
-  1.0b1  > 1.0pl1  : false
-  1.0b1 ge 1.0pl1  : false
-  1.0b1 >= 1.0pl1  : false
-  1.0b1 eq 1.0pl1  : false
-  1.0b1  = 1.0pl1  : false
-  1.0b1 == 1.0pl1  : false
-  1.0b1 ne 1.0pl1  : true
-  1.0b1 <> 1.0pl1  : true
-  1.0b1 != 1.0pl1  : true
- 1.0RC1 lt 1.0-dev : false
- 1.0RC1  < 1.0-dev : false
- 1.0RC1 le 1.0-dev : false
- 1.0RC1 <= 1.0-dev : false
- 1.0RC1 gt 1.0-dev : true
- 1.0RC1  > 1.0-dev : true
- 1.0RC1 ge 1.0-dev : true
- 1.0RC1 >= 1.0-dev : true
- 1.0RC1 eq 1.0-dev : false
- 1.0RC1  = 1.0-dev : false
- 1.0RC1 == 1.0-dev : false
- 1.0RC1 ne 1.0-dev : true
- 1.0RC1 <> 1.0-dev : true
- 1.0RC1 != 1.0-dev : true
- 1.0RC1 lt 1.0a1   : false
- 1.0RC1  < 1.0a1   : false
- 1.0RC1 le 1.0a1   : false
- 1.0RC1 <= 1.0a1   : false
- 1.0RC1 gt 1.0a1   : true
- 1.0RC1  > 1.0a1   : true
- 1.0RC1 ge 1.0a1   : true
- 1.0RC1 >= 1.0a1   : true
- 1.0RC1 eq 1.0a1   : false
- 1.0RC1  = 1.0a1   : false
- 1.0RC1 == 1.0a1   : false
- 1.0RC1 ne 1.0a1   : true
- 1.0RC1 <> 1.0a1   : true
- 1.0RC1 != 1.0a1   : true
- 1.0RC1 lt 1.0b1   : false
- 1.0RC1  < 1.0b1   : false
- 1.0RC1 le 1.0b1   : false
- 1.0RC1 <= 1.0b1   : false
- 1.0RC1 gt 1.0b1   : true
- 1.0RC1  > 1.0b1   : true
- 1.0RC1 ge 1.0b1   : true
- 1.0RC1 >= 1.0b1   : true
- 1.0RC1 eq 1.0b1   : false
- 1.0RC1  = 1.0b1   : false
- 1.0RC1 == 1.0b1   : false
- 1.0RC1 ne 1.0b1   : true
- 1.0RC1 <> 1.0b1   : true
- 1.0RC1 != 1.0b1   : true
- 1.0RC1 lt 1.0RC1  : false
- 1.0RC1  < 1.0RC1  : false
- 1.0RC1 le 1.0RC1  : true
- 1.0RC1 <= 1.0RC1  : true
- 1.0RC1 gt 1.0RC1  : false
- 1.0RC1  > 1.0RC1  : false
- 1.0RC1 ge 1.0RC1  : true
- 1.0RC1 >= 1.0RC1  : true
- 1.0RC1 eq 1.0RC1  : true
- 1.0RC1  = 1.0RC1  : true
- 1.0RC1 == 1.0RC1  : true
- 1.0RC1 ne 1.0RC1  : false
- 1.0RC1 <> 1.0RC1  : false
- 1.0RC1 != 1.0RC1  : false
- 1.0RC1 lt 1.0     : true
- 1.0RC1  < 1.0     : true
- 1.0RC1 le 1.0     : true
- 1.0RC1 <= 1.0     : true
- 1.0RC1 gt 1.0     : false
- 1.0RC1  > 1.0     : false
- 1.0RC1 ge 1.0     : false
- 1.0RC1 >= 1.0     : false
- 1.0RC1 eq 1.0     : false
- 1.0RC1  = 1.0     : false
- 1.0RC1 == 1.0     : false
- 1.0RC1 ne 1.0     : true
- 1.0RC1 <> 1.0     : true
- 1.0RC1 != 1.0     : true
- 1.0RC1 lt 1.0pl1  : true
- 1.0RC1  < 1.0pl1  : true
- 1.0RC1 le 1.0pl1  : true
- 1.0RC1 <= 1.0pl1  : true
- 1.0RC1 gt 1.0pl1  : false
- 1.0RC1  > 1.0pl1  : false
- 1.0RC1 ge 1.0pl1  : false
- 1.0RC1 >= 1.0pl1  : false
- 1.0RC1 eq 1.0pl1  : false
- 1.0RC1  = 1.0pl1  : false
- 1.0RC1 == 1.0pl1  : false
- 1.0RC1 ne 1.0pl1  : true
- 1.0RC1 <> 1.0pl1  : true
- 1.0RC1 != 1.0pl1  : true
-    1.0 lt 1.0-dev : false
-    1.0  < 1.0-dev : false
-    1.0 le 1.0-dev : false
-    1.0 <= 1.0-dev : false
-    1.0 gt 1.0-dev : true
-    1.0  > 1.0-dev : true
-    1.0 ge 1.0-dev : true
-    1.0 >= 1.0-dev : true
-    1.0 eq 1.0-dev : false
-    1.0  = 1.0-dev : false
-    1.0 == 1.0-dev : false
-    1.0 ne 1.0-dev : true
-    1.0 <> 1.0-dev : true
-    1.0 != 1.0-dev : true
-    1.0 lt 1.0a1   : false
-    1.0  < 1.0a1   : false
-    1.0 le 1.0a1   : false
-    1.0 <= 1.0a1   : false
-    1.0 gt 1.0a1   : true
-    1.0  > 1.0a1   : true
-    1.0 ge 1.0a1   : true
-    1.0 >= 1.0a1   : true
-    1.0 eq 1.0a1   : false
-    1.0  = 1.0a1   : false
-    1.0 == 1.0a1   : false
-    1.0 ne 1.0a1   : true
-    1.0 <> 1.0a1   : true
-    1.0 != 1.0a1   : true
-    1.0 lt 1.0b1   : false
-    1.0  < 1.0b1   : false
-    1.0 le 1.0b1   : false
-    1.0 <= 1.0b1   : false
-    1.0 gt 1.0b1   : true
-    1.0  > 1.0b1   : true
-    1.0 ge 1.0b1   : true
-    1.0 >= 1.0b1   : true
-    1.0 eq 1.0b1   : false
-    1.0  = 1.0b1   : false
-    1.0 == 1.0b1   : false
-    1.0 ne 1.0b1   : true
-    1.0 <> 1.0b1   : true
-    1.0 != 1.0b1   : true
-    1.0 lt 1.0RC1  : false
-    1.0  < 1.0RC1  : false
-    1.0 le 1.0RC1  : false
-    1.0 <= 1.0RC1  : false
-    1.0 gt 1.0RC1  : true
-    1.0  > 1.0RC1  : true
-    1.0 ge 1.0RC1  : true
-    1.0 >= 1.0RC1  : true
-    1.0 eq 1.0RC1  : false
-    1.0  = 1.0RC1  : false
-    1.0 == 1.0RC1  : false
-    1.0 ne 1.0RC1  : true
-    1.0 <> 1.0RC1  : true
-    1.0 != 1.0RC1  : true
-    1.0 lt 1.0     : false
-    1.0  < 1.0     : false
-    1.0 le 1.0     : true
-    1.0 <= 1.0     : true
-    1.0 gt 1.0     : false
-    1.0  > 1.0     : false
-    1.0 ge 1.0     : true
-    1.0 >= 1.0     : true
-    1.0 eq 1.0     : true
-    1.0  = 1.0     : true
-    1.0 == 1.0     : true
-    1.0 ne 1.0     : false
-    1.0 <> 1.0     : false
-    1.0 != 1.0     : false
-    1.0 lt 1.0pl1  : true
-    1.0  < 1.0pl1  : true
-    1.0 le 1.0pl1  : true
-    1.0 <= 1.0pl1  : true
-    1.0 gt 1.0pl1  : false
-    1.0  > 1.0pl1  : false
-    1.0 ge 1.0pl1  : false
-    1.0 >= 1.0pl1  : false
-    1.0 eq 1.0pl1  : false
-    1.0  = 1.0pl1  : false
-    1.0 == 1.0pl1  : false
-    1.0 ne 1.0pl1  : true
-    1.0 <> 1.0pl1  : true
-    1.0 != 1.0pl1  : true
- 1.0pl1 lt 1.0-dev : false
- 1.0pl1  < 1.0-dev : false
- 1.0pl1 le 1.0-dev : false
- 1.0pl1 <= 1.0-dev : false
- 1.0pl1 gt 1.0-dev : true
- 1.0pl1  > 1.0-dev : true
- 1.0pl1 ge 1.0-dev : true
- 1.0pl1 >= 1.0-dev : true
- 1.0pl1 eq 1.0-dev : false
- 1.0pl1  = 1.0-dev : false
- 1.0pl1 == 1.0-dev : false
- 1.0pl1 ne 1.0-dev : true
- 1.0pl1 <> 1.0-dev : true
- 1.0pl1 != 1.0-dev : true
- 1.0pl1 lt 1.0a1   : false
- 1.0pl1  < 1.0a1   : false
- 1.0pl1 le 1.0a1   : false
- 1.0pl1 <= 1.0a1   : false
- 1.0pl1 gt 1.0a1   : true
- 1.0pl1  > 1.0a1   : true
- 1.0pl1 ge 1.0a1   : true
- 1.0pl1 >= 1.0a1   : true
- 1.0pl1 eq 1.0a1   : false
- 1.0pl1  = 1.0a1   : false
- 1.0pl1 == 1.0a1   : false
- 1.0pl1 ne 1.0a1   : true
- 1.0pl1 <> 1.0a1   : true
- 1.0pl1 != 1.0a1   : true
- 1.0pl1 lt 1.0b1   : false
- 1.0pl1  < 1.0b1   : false
- 1.0pl1 le 1.0b1   : false
- 1.0pl1 <= 1.0b1   : false
- 1.0pl1 gt 1.0b1   : true
- 1.0pl1  > 1.0b1   : true
- 1.0pl1 ge 1.0b1   : true
- 1.0pl1 >= 1.0b1   : true
- 1.0pl1 eq 1.0b1   : false
- 1.0pl1  = 1.0b1   : false
- 1.0pl1 == 1.0b1   : false
- 1.0pl1 ne 1.0b1   : true
- 1.0pl1 <> 1.0b1   : true
- 1.0pl1 != 1.0b1   : true
- 1.0pl1 lt 1.0RC1  : false
- 1.0pl1  < 1.0RC1  : false
- 1.0pl1 le 1.0RC1  : false
- 1.0pl1 <= 1.0RC1  : false
- 1.0pl1 gt 1.0RC1  : true
- 1.0pl1  > 1.0RC1  : true
- 1.0pl1 ge 1.0RC1  : true
- 1.0pl1 >= 1.0RC1  : true
- 1.0pl1 eq 1.0RC1  : false
- 1.0pl1  = 1.0RC1  : false
- 1.0pl1 == 1.0RC1  : false
- 1.0pl1 ne 1.0RC1  : true
- 1.0pl1 <> 1.0RC1  : true
- 1.0pl1 != 1.0RC1  : true
- 1.0pl1 lt 1.0     : false
- 1.0pl1  < 1.0     : false
- 1.0pl1 le 1.0     : false
- 1.0pl1 <= 1.0     : false
- 1.0pl1 gt 1.0     : true
- 1.0pl1  > 1.0     : true
- 1.0pl1 ge 1.0     : true
- 1.0pl1 >= 1.0     : true
- 1.0pl1 eq 1.0     : false
- 1.0pl1  = 1.0     : false
- 1.0pl1 == 1.0     : false
- 1.0pl1 ne 1.0     : true
- 1.0pl1 <> 1.0     : true
- 1.0pl1 != 1.0     : true
- 1.0pl1 lt 1.0pl1  : false
- 1.0pl1  < 1.0pl1  : false
- 1.0pl1 le 1.0pl1  : true
- 1.0pl1 <= 1.0pl1  : true
- 1.0pl1 gt 1.0pl1  : false
- 1.0pl1  > 1.0pl1  : false
- 1.0pl1 ge 1.0pl1  : true
- 1.0pl1 >= 1.0pl1  : true
- 1.0pl1 eq 1.0pl1  : true
- 1.0pl1  = 1.0pl1  : true
- 1.0pl1 == 1.0pl1  : true
- 1.0pl1 ne 1.0pl1  : false
- 1.0pl1 <> 1.0pl1  : false
- 1.0pl1 != 1.0pl1  : false
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/vprintf.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/vprintf.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/vprintf.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/vprintf.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- vprintf
---SKIPIF--
-<?php if (function_exists('vprintf')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('vprintf');
-
-$values = array (2, 'car');
-
-$format = "There are %d monkeys in the %s";
-vprintf($format, $values);
-?>
---EXPECT--
-There are 2 monkeys in the car
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/vsprintf.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/vsprintf.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/function/vsprintf.phpt	2004-12-31 10:03:39.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/function/vsprintf.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,16 +0,0 @@
---TEST--
-Function -- vsprintf
---SKIPIF--
-<?php if (function_exists('vsprintf')) { echo 'skip'; } ?>
---FILE--
-<?php
-require_once 'PHP/Compat.php';
-PHP_Compat::loadFunction('vsprintf');
-
-$values = array (2, 'car');
-
-$format = "There are %d monkeys in the %s";
-vprintf($format, $values);
-?>
---EXPECT--
-There are 2 monkeys in the car
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/loadconstant.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/loadconstant.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/loadconstant.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/loadconstant.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,25 +0,0 @@
---TEST--
-Method -- PHP_Compat::loadConstant
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-
-// Singular
-echo (PHP_Compat::loadConstant('invalid') === false) ? 'false' : 'true', "\n";
-
-// Multiple
-$comp = array('an-invalid', 'also-invalid', 'more-invalid', 'E_STRICT');
-$results = PHP_Compat::loadConstant($comp);
-
-foreach ($results as $comp => $result) {
-    echo $comp . ': ';
-	echo ($result === false) ? 'false' : 'true', "\n";
-}
-
-?>
---EXPECT--
-false
-an-invalid: false
-also-invalid: false
-more-invalid: false
-E_STRICT: true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/loadfunction.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/loadfunction.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/loadfunction.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/loadfunction.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,24 +0,0 @@
---TEST--
-Method -- PHP_Compat::loadFunction
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-
-// Singular
-echo (PHP_Compat::loadFunction('invalid') === false) ? 'false' : 'true', "\n";
-
-// Multiple
-$comp = array('an-invalid', 'also-invalid', 'more-invalid');
-$results = PHP_Compat::loadFunction($comp);
-
-foreach ($results as $comp => $result) {
-    echo $comp . ': ';
-	echo ($result === false) ? 'false' : 'true', "\n";
-}
-
-?>
---EXPECT--
-false
-an-invalid: false
-also-invalid: false
-more-invalid: false
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/loadversion.phpt 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/loadversion.phpt
--- 1.3.11sr1/cpanel-glprivate/system/pear/PHP/tests/loadversion.phpt	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/PHP/tests/loadversion.phpt	1969-12-31 18:00:00.000000000 -0600
@@ -1,26 +0,0 @@
---TEST--
-Method -- PHP_Compat::loadVersion
---FILE--
-<?php
-require_once ('PHP/Compat.php');
-
-// Singular
-$res = PHP_Compat::loadVersion('3.0.0');
-echo count($res), "\n";
-
-// Multiple
-$comp = array('an-invalid', 'also-invalid', 'more-invalid', 'E_STRICT');
-$results = PHP_Compat::loadConstant($comp);
-
-foreach ($results as $comp => $result) {
-    echo $comp . ': ';
-	echo ($result === false) ? 'false' : 'true', "\n";
-}
-
-?>
---EXPECT--
-0
-an-invalid: false
-also-invalid: false
-more-invalid: false
-E_STRICT: true
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/README 1.4.0sr5-1/cpanel-glprivate/system/pear/README
--- 1.3.11sr1/cpanel-glprivate/system/pear/README	2004-12-31 10:02:22.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/README	2006-08-08 02:39:06.000000000 -0500
@@ -8,7 +8,13 @@
 Currently, Geeklog uses the following PEAR packages:
 
 - PEAR
+- HTTP_Request
 - Mail
 - Net_SMTP
 - Net_Socket
+- Net_URL
+- PHP_Compat
+- XML_RPC
 
+The Archive and Console packages are included as they are used by the base PEAR
+package (e.g. when you try to update PEAR) but are not used by Geeklog itself.
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pear.bat 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pear.bat
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pear.bat	2004-12-31 10:03:36.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pear.bat	2006-08-08 02:39:06.000000000 -0500
@@ -16,23 +16,69 @@
 REM  Authors:     Alexander Merz (alexmerz@php.net)
 REM ----------------------------------------------------------------------
 REM
-REM  Last updated 3/13/2004 ($Id$ is not replaced if the file is binary)
+REM  Last updated 12/29/2004 ($Id$ is not replaced if the file is binary)
 
 REM change this lines to match the paths of your system
 REM -------------------
 
-@ECHO OFF
-:: Check PEAR global ENV, set them if they do not exist
+
+REM Test to see if this is a raw pear.bat (uninstalled version)
+SET TMPTMPTMPTMPT=@includ
+SET PMTPMTPMT=%TMPTMPTMPTMPT%e_path@
+FOR %%x IN ("@include_path@") DO (if %%x=="%PMTPMTPMT%" GOTO :NOTINSTALLED)
+
+REM Check PEAR global ENV, set them if they do not exist
 IF "%PHP_PEAR_INSTALL_DIR%"=="" SET "PHP_PEAR_INSTALL_DIR=@include_path@"
 IF "%PHP_PEAR_BIN_DIR%"=="" SET "PHP_PEAR_BIN_DIR=@bin_dir@"
 IF "%PHP_PEAR_PHP_BIN%"=="" SET "PHP_PEAR_PHP_BIN=@php_bin@"
- 
-:: Check Folders and files
+GOTO :INSTALLED
+
+:NOTINSTALLED
+ECHO WARNING: This is a raw, uninstalled pear.bat
+
+REM Check to see if we can grab the directory of this file (Windows NT+)
+IF %~n0 == pear (
+FOR %%x IN (cli\php.exe php.exe) DO (if "%%~$PATH:x" NEQ "" (
+SET "PHP_PEAR_PHP_BIN=%%~$PATH:x"
+echo Using PHP Executable "%PHP_PEAR_PHP_BIN%"
+"%PHP_PEAR_PHP_BIN%" -v
+GOTO :NEXTTEST
+))
+GOTO :FAILAUTODETECT
+:NEXTTEST
+IF "%PHP_PEAR_PHP_BIN%" NEQ "" (
+
+REM We can use this PHP to run a temporary php file to get the dirname of pear
+
+echo ^<?php $s=getcwd^(^);chdir^($a=dirname^(__FILE__^).'\\'^);if^(stristr^($a,'\\scripts'^)^)$a=dirname^(dirname^($a^)^).'\\';$f=fopen^($s.'\\~a.a','wb'^);echo$s.'\\~a.a';fwrite^($f,$a^);fclose^($f^);chdir^($s^);?^> > ~~getloc.php
+"%PHP_PEAR_PHP_BIN%" ~~getloc.php
+set /p PHP_PEAR_BIN_DIR=fakeprompt < ~a.a
+DEL ~a.a
+DEL ~~getloc.php
+set "PHP_PEAR_INSTALL_DIR=%PHP_PEAR_BIN_DIR%pear"
+
+REM Make sure there is a pearcmd.php at our disposal
+
+IF NOT EXIST %PHP_PEAR_INSTALL_DIR%\pearcmd.php (
+IF EXIST %PHP_PEAR_INSTALL_DIR%\scripts\pearcmd.php COPY %PHP_PEAR_INSTALL_DIR%\scripts\pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+IF EXIST pearcmd.php COPY pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+IF EXIST %~dp0\scripts\pearcmd.php COPY %~dp0\scripts\pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+)
+)
+GOTO :INSTALLED
+) ELSE (
+REM Windows Me/98 cannot succeed, so allow the batch to fail
+)
+:FAILAUTODETECT
+echo WARNING: failed to auto-detect pear information
+:INSTALLED
+
+REM Check Folders and files
 IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%" GOTO PEAR_INSTALL_ERROR
 IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" GOTO PEAR_INSTALL_ERROR2
 IF NOT EXIST "%PHP_PEAR_BIN_DIR%" GOTO PEAR_BIN_ERROR
 IF NOT EXIST "%PHP_PEAR_PHP_BIN%" GOTO PEAR_PHPBIN_ERROR
-:: launch pearcmd
+REM launch pearcmd
 GOTO RUN
 :PEAR_INSTALL_ERROR
 ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
@@ -66,4 +112,4 @@
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -d output_buffering=1 -d include_path="%PHP_PEAR_INSTALL_DIR%" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
-@ECHO ON
+@ECHO ON
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pearcmd.php 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pearcmd.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pearcmd.php	2004-12-31 10:03:36.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pearcmd.php	2006-08-08 02:39:06.000000000 -0500
@@ -18,38 +18,69 @@
 // |                                                                      |
 // +----------------------------------------------------------------------+
 //
-// $Id: pearcmd.php,v 1.13.2.1 2004/10/27 05:58:21 cellog Exp $
+// $Id: pearcmd.php,v 1.33 2006/01/02 18:05:53 cellog Exp $
 
 ob_end_clean();
+if (!defined('PEAR_RUNTYPE')) {
+    // this is defined in peclcmd.php as 'pecl'
+    define('PEAR_RUNTYPE', 'pear');
+}
+define('PEAR_IGNORE_BACKTRACE', 1);
+if (!function_exists('file_get_contents')) {
+    function file_get_contents($filename)
+    {
+        $fp = fopen($filename, 'rb');
+        $ret = '';
+        while (!feof($fp)) {
+            $ret .= fread($fp, 8092);;
+        }
+        return $ret;
+    }
+}
 /**
  * @nodep Gtk
  */
 if ('@include_path@' != '@'.'include_path'.'@') {
     ini_set('include_path', '@include_path@');
+    $raw = false;
+} else {
+    // this is a raw, uninstalled pear, either a cvs checkout, or php distro
+    $raw = true;
 }
-ini_set('allow_url_fopen', true);
+@ini_set('allow_url_fopen', true);
 if (!ini_get('safe_mode')) {
     @set_time_limit(0);
 }
 ob_implicit_flush(true);
-ini_set('track_errors', true);
-ini_set('html_errors', false);
-ini_set('magic_quotes_runtime', false);
+@ini_set('track_errors', true);
+@ini_set('html_errors', false);
+@ini_set('magic_quotes_runtime', false);
+$_PEAR_PHPDIR = '#$%^&*';
 set_error_handler('error_handler');
 
 $pear_package_version = "@pear_version@";
 
 require_once 'PEAR.php';
+require_once 'PEAR/Frontend.php';
 require_once 'PEAR/Config.php';
 require_once 'PEAR/Command.php';
 require_once 'Console/Getopt.php';
 
+
 PEAR_Command::setFrontendType('CLI');
 $all_commands = PEAR_Command::getCommands();
 
+// remove this next part when we stop supporting that crap-ass PHP 4.2
+if (!isset($_SERVER['argv']) && !isset($argv) && !isset($HTTP_SERVER_VARS['argv'])) {
+    die('ERROR: either use the CLI php executable, or set register_argc_argv=On in php.ini');
+}
 $argv = Console_Getopt::readPHPArgv();
-/* $progname = basename($argv[0]); */
-$progname = 'pear';
+// fix CGI sapi oddity - the -- in pear.bat/pear is not removed
+if (php_sapi_name() != 'cli' && isset($argv[1]) && $argv[1] == '--') {
+    unset($argv[1]);
+    $argv = array_values($argv);
+}
+$progname = PEAR_RUNTYPE;
 if (in_array('getopt2', get_class_methods('Console_Getopt'))) {
     array_shift($argv);
     $options = Console_Getopt::getopt2($argv, "c:C:d:D:Gh?sSqu:vV");
@@ -72,13 +103,9 @@
         }
     }
 }
-PEAR_Command::setFrontendType($fetype);
-$ui = &PEAR_Command::getFrontendObject();
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($ui, "displayFatalError"));
-if (ini_get('safe_mode')) {
-    $ui->outputData('WARNING: running in safe mode requires that all files created ' .
-        'be the same uid as the current script.  PHP reports this script is uid: ' .
-        @getmyuid() . ', and current user is: ' . @get_current_user());
+//Check if Gtk and PHP >= 5.1.0
+if ($fetype == 'Gtk' && version_compare(phpversion(), '5.1.0', '>=')) {
+    $fetype = 'Gtk2';
 }
 
 $pear_user_config = '';
@@ -98,10 +125,75 @@
     }
 }
 
+PEAR_Command::setFrontendType($fetype);
+$ui = &PEAR_Command::getFrontendObject();
 $config = &PEAR_Config::singleton($pear_user_config, $pear_system_config);
+
+if (PEAR::isError($config)) {
+    $_file = '';
+    if ($pear_user_config !== false) {
+       $_file .= $pear_user_config;
+    }
+    if ($pear_system_config !== false) {
+       $_file .= '/' . $pear_system_config;
+    }
+    if ($_file == '/') {
+        $_file = 'The default config file';
+    }
+    $config->getMessage();
+    $ui->outputData("ERROR: $_file is not a valid config file or is corrupted.");
+    // We stop, we have no idea where we are :)
+    exit();    
+}
+
+// this is used in the error handler to retrieve a relative path
+$_PEAR_PHPDIR = $config->get('php_dir');
+$ui->setConfig($config);
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($ui, "displayFatalError"));
+if (ini_get('safe_mode')) {
+    $ui->outputData('WARNING: running in safe mode requires that all files created ' .
+        'be the same uid as the current script.  PHP reports this script is uid: ' .
+        @getmyuid() . ', and current user is: ' . @get_current_user());
+}
+
 $verbose = $config->get("verbose");
 $cmdopts = array();
 
+if ($raw) {
+    if (!$config->isDefinedLayer('user') && !$config->isDefinedLayer('system')) {
+        $found = false;
+        foreach ($opts as $opt) {
+            if ($opt[0] == 'd' || $opt[0] == 'D') {
+                $found = true; // the user knows what they are doing, and are setting config values
+            }
+        }
+        if (!$found) {
+            // no prior runs, try to install PEAR
+            if (strpos(dirname(__FILE__), 'scripts')) {
+                $packagexml = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'package2.xml';
+                $pearbase = dirname(dirname(__FILE__));
+            } else {
+                $packagexml = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'package2.xml';
+                $pearbase = dirname(__FILE__);
+            }
+            if (file_exists($packagexml)) {
+                $options[1] = array(
+                    'install',
+                    $packagexml
+                );
+                $config->set('php_dir', $pearbase . DIRECTORY_SEPARATOR . 'php');
+                $config->set('data_dir', $pearbase . DIRECTORY_SEPARATOR . 'data');
+                $config->set('doc_dir', $pearbase . DIRECTORY_SEPARATOR . 'docs');
+                $config->set('test_dir', $pearbase . DIRECTORY_SEPARATOR . 'tests');
+                $config->set('ext_dir', $pearbase . DIRECTORY_SEPARATOR . 'extensions');
+                $config->set('bin_dir', $pearbase);
+                $config->mergeConfigFile($pearbase . 'pear.ini', false);
+                $config->store();
+                $config->set('auto_discover', 1);
+            }
+        }
+    }
+}
 foreach ($opts as $opt) {
     $param = !empty($opt[1]) ? $opt[1] : true;
     switch ($opt[0]) {
@@ -130,6 +222,9 @@
             break;
         case 'V':
             usage(null, 'version');
+        case 'c':
+        case 'C':
+            break;
         default:
             // all non pear params goes to the command
             $cmdopts[$opt[0]] = $param;
@@ -151,18 +246,28 @@
     exit;
 }
 
-if ($fetype == 'Gtk') {
+if ($fetype == 'Gtk' || $fetype == 'Gtk2') {
+    if (!$config->validConfiguration()) {
+        PEAR::raiseError('CRITICAL ERROR: no existing valid configuration files found in files ' .
+            "'$pear_user_config' or '$pear_system_config', please copy an existing configuration" .
+            'file to one of these locations, or use the -c and -s options to create one');
+    }
     Gtk::main();
 } else do {
     if ($command == 'help') {
         usage(null, @$options[1][1]);
     }
+    if (!$config->validConfiguration()) {
+        PEAR::raiseError('CRITICAL ERROR: no existing valid configuration files found in files ' .
+            "'$pear_user_config' or '$pear_system_config', please copy an existing configuration" .
+            'file to one of these locations, or use the -c and -s options to create one');
+    }
 
     PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
     $cmd = PEAR_Command::factory($command, $config);
     PEAR::popErrorHandling();
     if (PEAR::isError($cmd)) {
-        usage(null, @$options[1][1]);
+        usage(null, @$options[1][0]);
     }
 
     $short_args = $long_args = null;
@@ -200,6 +305,10 @@
     if ($ok === false) {
         PEAR::raiseError("unknown command `$command'");
     }
+    if (PEAR::isError($ok)) {
+        PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($ui, "displayFatalError"));
+        PEAR::raiseError($ok);
+    }
 } while (false);
 
 // {{{ usage()
@@ -217,9 +326,6 @@
         $put = cmdHelp($helpsubject);
     } else {
         $put =
-            "Usage: $progname [options] command [command-options] <parameters>\n".
-            "Type \"$progname help options\" to list all options.\n".
-            "Type \"$progname help <command>\" to get the help for the specified command.\n".
             "Commands:\n";
         $maxlen = max(array_map("strlen", $all_commands));
         $formatstr = "%-{$maxlen}s  %s\n";
@@ -227,6 +333,11 @@
         foreach ($all_commands as $cmd => $class) {
             $put .= sprintf($formatstr, $cmd, PEAR_Command::getDescription($cmd));
         }
+        $put .=
+            "Usage: $progname [options] command [command-options] <parameters>\n".
+            "Type \"$progname help options\" to list all options.\n".
+            "Type \"$progname help shortcuts\" to list all command shortcuts.\n".
+            "Type \"$progname help <command>\" to get the help for the specified command.";
     }
     fputs($stderr, "$put\n");
     fclose($stderr);
@@ -282,7 +393,12 @@
 
 function error_handler($errno, $errmsg, $file, $line, $vars) {
     if ((defined('E_STRICT') && $errno & E_STRICT) || !error_reporting()) {
-        return; // @silenced error
+        if (defined('E_STRICT') && $errno & E_STRICT) {
+            return; // E_STRICT
+        }
+        if ($GLOBALS['config']->get('verbose') < 4) {
+            return; // @silenced error, show all if debug is high enough
+        }
     }
     $errortype = array (
         E_ERROR   =>  "Error",
@@ -298,7 +414,12 @@
         E_USER_NOTICE =>  "User Notice"
     );
     $prefix = $errortype[$errno];
-    $file = basename($file);
+    global $_PEAR_PHPDIR;
+    if (stristr($file, $_PEAR_PHPDIR)) {
+        $file = substr($file, strlen($_PEAR_PHPDIR) + 1);
+    } else {
+        $file = basename($file);
+    }
     print "\n$prefix: $errmsg in $file on line $line\n";
 }
 
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/peardev.bat 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/peardev.bat
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/peardev.bat	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/peardev.bat	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,115 @@
+@ECHO OFF
+
+REM ----------------------------------------------------------------------
+REM PHP version 5
+REM ----------------------------------------------------------------------
+REM Copyright (c) 1997-2004 The PHP Group
+REM ----------------------------------------------------------------------
+REM  This source file is subject to version 3.0 of the PHP license, 
+REM  that is bundled with this package in the file LICENSE, and is
+REM  available at through the world-wide-web at
+REM  http://www.php.net/license/3_0.txt. 
+REM  If you did not receive a copy of the PHP license and are unable to
+REM  obtain it through the world-wide-web, please send a note to
+REM  license@php.net so we can mail you a copy immediately.
+REM ----------------------------------------------------------------------
+REM  Authors:     Alexander Merz (alexmerz@php.net)
+REM ----------------------------------------------------------------------
+REM
+REM  $Id: peardev.bat,v 1.2 2005/03/21 15:23:43 cellog Exp $
+
+REM change this lines to match the paths of your system
+REM -------------------
+
+
+REM Test to see if this is a raw pear.bat (uninstalled version)
+SET TMPTMPTMPTMPT=@includ
+SET PMTPMTPMT=%TMPTMPTMPTMPT%e_path@
+FOR %%x IN ("@include_path@") DO (if %%x=="%PMTPMTPMT%" GOTO :NOTINSTALLED)
+
+REM Check PEAR global ENV, set them if they do not exist
+IF "%PHP_PEAR_INSTALL_DIR%"=="" SET "PHP_PEAR_INSTALL_DIR=@include_path@"
+IF "%PHP_PEAR_BIN_DIR%"=="" SET "PHP_PEAR_BIN_DIR=@bin_dir@"
+IF "%PHP_PEAR_PHP_BIN%"=="" SET "PHP_PEAR_PHP_BIN=@php_bin@"
+GOTO :INSTALLED
+
+:NOTINSTALLED
+ECHO WARNING: This is a raw, uninstalled pear.bat
+
+REM Check to see if we can grab the directory of this file (Windows NT+)
+IF %~n0 == pear (
+FOR %%x IN (cli\php.exe php.exe) DO (if "%%~$PATH:x" NEQ "" (
+SET "PHP_PEAR_PHP_BIN=%%~$PATH:x"
+echo Using PHP Executable "%PHP_PEAR_PHP_BIN%"
+"%PHP_PEAR_PHP_BIN%" -v
+GOTO :NEXTTEST
+))
+GOTO :FAILAUTODETECT
+:NEXTTEST
+IF "%PHP_PEAR_PHP_BIN%" NEQ "" (
+
+REM We can use this PHP to run a temporary php file to get the dirname of pear
+
+echo ^<?php $s=getcwd^(^);chdir^($a=dirname^(__FILE__^).'\\'^);if^(stristr^($a,'\\scripts'^)^)$a=dirname^(dirname^($a^)^).'\\';$f=fopen^($s.'\\~a.a','wb'^);echo$s.'\\~a.a';fwrite^($f,$a^);fclose^($f^);chdir^($s^);?^> > ~~getloc.php
+"%PHP_PEAR_PHP_BIN%" ~~getloc.php
+set /p PHP_PEAR_BIN_DIR=fakeprompt < ~a.a
+DEL ~a.a
+DEL ~~getloc.php
+set "PHP_PEAR_INSTALL_DIR=%PHP_PEAR_BIN_DIR%pear"
+
+REM Make sure there is a pearcmd.php at our disposal
+
+IF NOT EXIST %PHP_PEAR_INSTALL_DIR%\pearcmd.php (
+IF EXIST %PHP_PEAR_INSTALL_DIR%\scripts\pearcmd.php COPY %PHP_PEAR_INSTALL_DIR%\scripts\pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+IF EXIST pearcmd.php COPY pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+IF EXIST %~dp0\scripts\pearcmd.php COPY %~dp0\scripts\pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+)
+)
+GOTO :INSTALLED
+) ELSE (
+REM Windows Me/98 cannot succeed, so allow the batch to fail
+)
+:FAILAUTODETECT
+echo WARNING: failed to auto-detect pear information
+:INSTALLED
+
+REM Check Folders and files
+IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%" GOTO PEAR_INSTALL_ERROR
+IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" GOTO PEAR_INSTALL_ERROR2
+IF NOT EXIST "%PHP_PEAR_BIN_DIR%" GOTO PEAR_BIN_ERROR
+IF NOT EXIST "%PHP_PEAR_PHP_BIN%" GOTO PEAR_PHPBIN_ERROR
+REM launch pearcmd
+GOTO RUN
+:PEAR_INSTALL_ERROR
+ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_INSTALL_DIR%
+GOTO END
+:PEAR_INSTALL_ERROR2
+ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
+ECHO pearcmd.php could not be found there.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_INSTALL_DIR%
+GOTO END
+:PEAR_BIN_ERROR
+ECHO PHP_PEAR_BIN_DIR is not set correctly.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_BIN_DIR%
+GOTO END
+:PEAR_PHPBIN_ERROR
+ECHO PHP_PEAR_PHP_BIN is not set correctly.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_PHP_BIN%
+GOTO END
+:RUN
+"%PHP_PEAR_PHP_BIN%" -C -d memory_limit="-1" -d output_buffering=1 -d include_path="%PHP_PEAR_INSTALL_DIR%" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
+:END
+@ECHO ON
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/peardev.sh 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/peardev.sh
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/peardev.sh	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/peardev.sh	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# first find which PHP binary to use
+if test "x$PHP_PEAR_PHP_BIN" != "x"; then
+  PHP="$PHP_PEAR_PHP_BIN"
+else
+  if test "@php_bin@" = '@'php_bin'@'; then
+    PHP=php 
+  else
+    PHP="@php_bin@"
+  fi
+fi
+
+# then look for the right pear include dir
+if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then
+  INCDIR=$PHP_PEAR_INSTALL_DIR
+  INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR"
+else
+  if test "@php_dir@" = '@'php_dir'@'; then
+    INCDIR=`dirname $0`
+    INCARG=""  
+  else
+    INCDIR="@php_dir@"
+    INCARG="-d include_path=@php_dir@"
+  fi
+fi
+
+exec $PHP -d memory_limit="-1" -C -q $INCARG -d output_buffering=1 $INCDIR/pearcmd.php "$@"
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pecl.bat 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pecl.bat
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pecl.bat	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pecl.bat	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,115 @@
+@ECHO OFF
+
+REM ----------------------------------------------------------------------
+REM PHP version 5
+REM ----------------------------------------------------------------------
+REM Copyright (c) 1997-2004 The PHP Group
+REM ----------------------------------------------------------------------
+REM  This source file is subject to version 3.0 of the PHP license, 
+REM  that is bundled with this package in the file LICENSE, and is
+REM  available at through the world-wide-web at
+REM  http://www.php.net/license/3_0.txt. 
+REM  If you did not receive a copy of the PHP license and are unable to
+REM  obtain it through the world-wide-web, please send a note to
+REM  license@php.net so we can mail you a copy immediately.
+REM ----------------------------------------------------------------------
+REM  Authors:     Alexander Merz (alexmerz@php.net)
+REM ----------------------------------------------------------------------
+REM
+REM  Last updated 02/08/2004 ($Id$ is not replaced if the file is binary)
+
+REM change this lines to match the paths of your system
+REM -------------------
+
+
+REM Test to see if this is a raw pear.bat (uninstalled version)
+SET TMPTMPTMPTMPT=@includ
+SET PMTPMTPMT=%TMPTMPTMPTMPT%e_path@
+FOR %%x IN ("@include_path@") DO (if %%x=="%PMTPMTPMT%" GOTO :NOTINSTALLED)
+
+REM Check PEAR global ENV, set them if they do not exist
+IF "%PHP_PEAR_INSTALL_DIR%"=="" SET "PHP_PEAR_INSTALL_DIR=@include_path@"
+IF "%PHP_PEAR_BIN_DIR%"=="" SET "PHP_PEAR_BIN_DIR=@bin_dir@"
+IF "%PHP_PEAR_PHP_BIN%"=="" SET "PHP_PEAR_PHP_BIN=@php_bin@"
+GOTO :INSTALLED
+
+:NOTINSTALLED
+ECHO WARNING: This is a raw, uninstalled pear.bat
+
+REM Check to see if we can grab the directory of this file (Windows NT+)
+IF %~n0 == pear (
+FOR %%x IN (cli\php.exe php.exe) DO (if "%%~$PATH:x" NEQ "" (
+SET "PHP_PEAR_PHP_BIN=%%~$PATH:x"
+echo Using PHP Executable "%PHP_PEAR_PHP_BIN%"
+"%PHP_PEAR_PHP_BIN%" -v
+GOTO :NEXTTEST
+))
+GOTO :FAILAUTODETECT
+:NEXTTEST
+IF "%PHP_PEAR_PHP_BIN%" NEQ "" (
+
+REM We can use this PHP to run a temporary php file to get the dirname of pear
+
+echo ^<?php $s=getcwd^(^);chdir^($a=dirname^(__FILE__^).'\\'^);if^(stristr^($a,'\\scripts'^)^)$a=dirname^(dirname^($a^)^).'\\';$f=fopen^($s.'\\~a.a','wb'^);echo$s.'\\~a.a';fwrite^($f,$a^);fclose^($f^);chdir^($s^);?^> > ~~getloc.php
+"%PHP_PEAR_PHP_BIN%" ~~getloc.php
+set /p PHP_PEAR_BIN_DIR=fakeprompt < ~a.a
+DEL ~a.a
+DEL ~~getloc.php
+set "PHP_PEAR_INSTALL_DIR=%PHP_PEAR_BIN_DIR%pear"
+
+REM Make sure there is a pearcmd.php at our disposal
+
+IF NOT EXIST %PHP_PEAR_INSTALL_DIR%\pearcmd.php (
+IF EXIST %PHP_PEAR_INSTALL_DIR%\scripts\pearcmd.php COPY %PHP_PEAR_INSTALL_DIR%\scripts\pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+IF EXIST pearcmd.php COPY pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+IF EXIST %~dp0\scripts\pearcmd.php COPY %~dp0\scripts\pearcmd.php %PHP_PEAR_INSTALL_DIR%\pearcmd.php
+)
+)
+GOTO :INSTALLED
+) ELSE (
+REM Windows Me/98 cannot succeed, so allow the batch to fail
+)
+:FAILAUTODETECT
+echo WARNING: failed to auto-detect pear information
+:INSTALLED
+
+REM Check Folders and files
+IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%" GOTO PEAR_INSTALL_ERROR
+IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" GOTO PEAR_INSTALL_ERROR2
+IF NOT EXIST "%PHP_PEAR_BIN_DIR%" GOTO PEAR_BIN_ERROR
+IF NOT EXIST "%PHP_PEAR_PHP_BIN%" GOTO PEAR_PHPBIN_ERROR
+REM launch pearcmd
+GOTO RUN
+:PEAR_INSTALL_ERROR
+ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_INSTALL_DIR%
+GOTO END
+:PEAR_INSTALL_ERROR2
+ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
+ECHO pearcmd.php could not be found there.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_INSTALL_DIR%
+GOTO END
+:PEAR_BIN_ERROR
+ECHO PHP_PEAR_BIN_DIR is not set correctly.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_BIN_DIR%
+GOTO END
+:PEAR_PHPBIN_ERROR
+ECHO PHP_PEAR_PHP_BIN is not set correctly.
+ECHO Please fix it using your environment variable or modify
+ECHO the default value in pear.bat
+ECHO The current value is:
+ECHO %PHP_PEAR_PHP_BIN%
+GOTO END
+:RUN
+"%PHP_PEAR_PHP_BIN%" -C -n -d output_buffering=1 -d safe_mode=0 -d include_path="%PHP_PEAR_INSTALL_DIR%" -f "%PHP_PEAR_INSTALL_DIR%\peclcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
+:END
+@ECHO ON
\ No newline at end of file
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/peclcmd.php 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/peclcmd.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/peclcmd.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/peclcmd.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,45 @@
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 5                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2004 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available through the world-wide-web at the following url:           |
+// | http://www.php.net/license/3_0.txt.                                  |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Stig Bakken <ssb@php.net>                                   |
+// |          Tomas V.V.Cox <cox@idecnet.com>                             |
+// |                                                                      |
+// +----------------------------------------------------------------------+
+//
+// $Id: peclcmd.php,v 1.1 2005/02/21 05:30:56 cellog Exp $
+
+/**
+ * @nodep Gtk
+ */
+if ('@include_path@' != '@'.'include_path'.'@') {
+    ini_set('include_path', '@include_path@');
+    $raw = false;
+} else {
+    // this is a raw, uninstalled pear, either a cvs checkout, or php distro
+    $raw = true;
+}
+define('PEAR_RUNTYPE', 'pecl');
+require_once 'pearcmd.php';
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * mode: php
+ * End:
+ */
+// vim600:syn=php
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pecl.sh 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pecl.sh
--- 1.3.11sr1/cpanel-glprivate/system/pear/scripts/pecl.sh	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/scripts/pecl.sh	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# first find which PHP binary to use
+if test "x$PHP_PEAR_PHP_BIN" != "x"; then
+  PHP="$PHP_PEAR_PHP_BIN"
+else
+  if test "@php_bin@" = '@'php_bin'@'; then
+    PHP=php 
+  else
+    PHP="@php_bin@"
+  fi
+fi
+
+# then look for the right pear include dir
+if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then
+  INCDIR=$PHP_PEAR_INSTALL_DIR
+  INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR"
+else
+  if test "@php_dir@" = '@'php_dir'@'; then
+    INCDIR=`dirname $0`
+    INCARG=""  
+  else
+    INCDIR="@php_dir@"
+    INCARG="-d include_path=@php_dir@"
+  fi
+fi
+
+exec $PHP -C -n -q $INCARG -d output_buffering=1 -d safe_mode=0 $INCDIR/peclcmd.php "$@"
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/System.php 1.4.0sr5-1/cpanel-glprivate/system/pear/System.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/System.php	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/System.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,24 +1,28 @@
 <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com>                             |
-// +----------------------------------------------------------------------+
-//
-// $Id: System.php,v 1.36 2004/06/15 16:33:46 pajoye Exp $
-//
+/**
+ * File/Directory manipulation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    System
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: System.php,v 1.53 2006/01/06 04:47:36 cellog Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
 
+/**
+ * base class
+ */
 require_once 'PEAR.php';
 require_once 'Console/Getopt.php';
 
@@ -46,11 +50,14 @@
 *
 * System::rm(array('-r', $file1, $dir1));
 *
-* @package  System
-* @author   Tomas V.V.Cox <cox@idecnet.com>
-* @version  $Revision: 1.36 $
-* @access   public
-* @see      http://pear.php.net/manual/
+* @category   pear
+* @package    System
+* @author     Tomas V.V. Cox <cox@idecnet.com>
+* @copyright  1997-2006 The PHP Group
+* @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+* @version    Release: 1.4.6
+* @link       http://pear.php.net/package/PEAR
+* @since      Class available since Release 0.1
 */
 class System
 {
@@ -66,7 +73,7 @@
     function _parseArgs($argv, $short_options, $long_options = null)
     {
         if (!is_array($argv) && $argv !== null) {
-            $argv = preg_split('/\s+/', $argv);
+            $argv = preg_split('/\s+/', $argv, -1, PREG_SPLIT_NO_EMPTY);
         }
         return Console_Getopt::getopt2($argv, $short_options);
     }
@@ -119,9 +126,9 @@
             System::raiseError("Could not open dir $sPath");
             return $struct; // XXX could not open error
         }
-        $struct['dirs'][] = $sPath; // XXX don't add if '.' or '..' ?
+        $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ?
         $list = array();
-        while ($file = readdir($dir)) {
+        while (false !== ($file = readdir($dir))) {
             if ($file != '.' && $file != '..') {
                 $list[] = $file;
             }
@@ -131,7 +138,7 @@
         if ($aktinst < $maxinst || $maxinst == 0) {
             foreach($list as $val) {
                 $path = $sPath . DIRECTORY_SEPARATOR . $val;
-                if (is_dir($path)) {
+                if (is_dir($path) && !is_link($path)) {
                     $tmp = System::_dirToStruct($path, $maxinst, $aktinst+1);
                     $struct = array_merge_recursive($tmp, $struct);
                 } else {
@@ -154,7 +161,7 @@
         $struct = array('dirs' => array(), 'files' => array());
         settype($files, 'array');
         foreach ($files as $file) {
-            if (is_dir($file)) {
+            if (is_dir($file) && !is_link($file)) {
                 $tmp = System::_dirToStruct($file, 0);
                 $struct = array_merge_recursive($tmp, $struct);
             } else {
@@ -208,9 +215,9 @@
     }
 
     /**
-    * Make directories. Note that we use call_user_func('mkdir') to avoid
-    * a problem with ZE2 calling System::mkDir instead of the native PHP func.
+    * Make directories.
     *
+    * The -p option will create parent directories
     * @param    string  $args    the name of the director(y|ies) to create
     * @return   bool    True for success
     * @access   public
@@ -246,14 +253,18 @@
                     $dir = dirname($dir);
                 }
                 while ($newdir = array_shift($dirstack)) {
-                    if (!call_user_func('mkdir', $newdir, $mode)) {
+                    if (!is_writeable(dirname($newdir))) {
+                        $ret = false;
+                        break;
+                    }
+                    if (!mkdir($newdir, $mode)) {
                         $ret = false;
                     }
                 }
             }
         } else {
             foreach($opts[1] as $dir) {
-                if (!@is_dir($dir) && !call_user_func('mkdir', $dir, $mode)) {
+                if (!@is_dir($dir) && !mkdir($dir, $mode)) {
                     $ret = false;
                 }
             }
@@ -280,7 +291,7 @@
         $ret = null;
         $files = array();
         if (!is_array($args)) {
-            $args = preg_split('/\s+/', $args);
+            $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY);
         }
         for($i=0; $i < count($args); $i++) {
             if ($args[$i] == '>') {
@@ -363,13 +374,13 @@
         if (!isset($tmpdir)) {
             $tmpdir = System::tmpdir();
         }
-        if (!System::mkDir("-p $tmpdir")) {
+        if (!System::mkDir(array('-p', $tmpdir))) {
             return false;
         }
         $tmp = tempnam($tmpdir, $prefix);
         if (isset($tmp_is_dir)) {
             unlink($tmp); // be careful possible race condition here
-            if (!call_user_func('mkdir', $tmp, 0700)) {
+            if (!mkdir($tmp, 0700)) {
                 return System::raiseError("Unable to create temporary directory $tmpdir");
             }
         }
@@ -393,6 +404,7 @@
             $delete = $GLOBALS['_System_temp_files'];
             array_unshift($delete, '-r');
             System::rm($delete);
+            $GLOBALS['_System_temp_files'] = array();
         }
     }
 
@@ -428,31 +440,58 @@
     * The "which" command (show the full path of a command)
     *
     * @param string $program The command to search for
+    * @param mixed  $fallback Value to return if $program is not found
+    *
     * @return mixed A string with the full path or false if not found
     * @author Stig Bakken <ssb@php.net>
     */
     function which($program, $fallback = false)
     {
-        // is_executable() is not available on windows
-        if (OS_WINDOWS) {
-            $pear_is_executable = 'is_file';
-        } else {
-            $pear_is_executable = 'is_executable';
+        // enforce API
+        if (!is_string($program) || '' == $program) {
+            return $fallback;
         }
 
+        // available since 4.3.0RC2
+        if (defined('PATH_SEPARATOR')) {
+            $path_delim = PATH_SEPARATOR;
+        } else {
+            $path_delim = OS_WINDOWS ? ';' : ':';
+        }
         // full path given
         if (basename($program) != $program) {
-            return (@$pear_is_executable($program)) ? $program : $fallback;
+            $path_elements[] = dirname($program);
+            $program = basename($program);
+        } else {
+            // Honor safe mode
+            if (!ini_get('safe_mode') || !$path = ini_get('safe_mode_exec_dir')) {
+                $path = getenv('PATH');
+                if (!$path) {
+                    $path = getenv('Path'); // some OSes are just stupid enough to do this
+                }
+            }
+            $path_elements = explode($path_delim, $path);
+        }
+
+        if (OS_WINDOWS) {
+            $exe_suffixes = getenv('PATHEXT')
+                                ? explode($path_delim, getenv('PATHEXT'))
+                                : array('.exe','.bat','.cmd','.com');
+            // allow passing a command.exe param
+            if (strpos($program, '.') !== false) {
+                array_unshift($exe_suffixes, '');
+            }
+            // is_executable() is not available on windows for PHP4
+            $pear_is_executable = (function_exists('is_executable')) ? 'is_executable' : 'is_file';
+        } else {
+            $exe_suffixes = array('');
+            $pear_is_executable = 'is_executable';
         }
 
-        // XXX FIXME honor safe mode
-        $path_delim = OS_WINDOWS ? ';' : ':';
-        $exe_suffixes = OS_WINDOWS ? array('.exe','.bat','.cmd','.com') : array('');
-        $path_elements = explode($path_delim, getenv('PATH'));
         foreach ($exe_suffixes as $suff) {
             foreach ($path_elements as $dir) {
                 $file = $dir . DIRECTORY_SEPARATOR . $program . $suff;
-                if (@is_file($file) && @$pear_is_executable($file)) {
+                if ($pear_is_executable($file)) {
                     return $file;
                 }
             }
@@ -497,7 +536,7 @@
                 case '-type':
                     if (in_array($args[$i+1], array('d', 'f'))) {
                         if ($args[$i+1] == 'd') {
-                             $do_files = false;
+                            $do_files = false;
                         } else {
                             $do_dirs = false;
                         }
@@ -505,8 +544,16 @@
                     $i++;
                     break;
                 case '-name':
+                    if (OS_WINDOWS) {
+                        if ($args[$i+1]{0} == '\\') {
+                            // prepend drive
+                            $args[$i+1] = addslashes(substr(getcwd(), 0, 2) . $args[$i + 1]);
+                        }
+                        // escape path separators to avoid PCRE problems
+                        $args[$i+1] = str_replace('\\', '\\\\', $args[$i+1]);
+                    }
                     $patterns[] = "(" . preg_replace(array('/\./', '/\*/'),
-                                                     array('\.', '.*'),
+                                                     array('\.', '.*', ),
                                                      $args[$i+1])
                                       . ")";
                     $i++;
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/template.spec 1.4.0sr5-1/cpanel-glprivate/system/pear/template.spec
--- 1.3.11sr1/cpanel-glprivate/system/pear/template.spec	2004-12-31 10:03:40.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/template.spec	2006-08-08 02:39:06.000000000 -0500
@@ -6,9 +6,8 @@
 Group: Development/Libraries
 Source: http://@master_server@/get/@package@-%{version}.tgz
 BuildRoot: %{_tmppath}/%{name}-root
-URL: http://@master_server@/
+URL: http://@master_server@/package/@package@
 Prefix: %{_prefix}
-#Docdir: @doc_dir@/@package@
 BuildArchitectures: @arch@
 @extra_headers@
 
@@ -17,6 +16,7 @@
 
 %prep
 rm -rf %{buildroot}/*
+%setup -c -T
 # XXX Source files location is missing here in pear cmd
 pear -v -c %{buildroot}/pearrc \
         -d php_dir=%{_libdir}/php/pear \
@@ -24,43 +24,47 @@
         -d bin_dir=%{_bindir} \
         -d data_dir=%{_libdir}/php/pear/data \
         -d test_dir=%{_libdir}/php/pear/tests \
-        -d ext_dir=%{_libdir} \
+        -d ext_dir=%{_libdir} \@extra_config@
         -s
 
 %build
 echo BuildRoot=%{buildroot}
 
-%clean
-[ -n "%{buildroot}" -a "%{buildroot}" != / ] && rm -rf %{buildroot}
-
 %postun
-pear uninstall --nodeps -r @package@
+# if refcount = 0 then package has been removed (not upgraded)
+if [ "$1" -eq "0" ]; then
+    pear uninstall --nodeps -r @possible_channel@@package@
+    rm @rpm_xml_dir@/@package@.xml
+fi
+
 
 %post
-pear install --nodeps -r @rpm_xml_dir@/@package@.xml
+# if refcount = 2 then package has been upgraded
+if [ "$1" -ge "2" ]; then
+    pear upgrade --nodeps -r @rpm_xml_dir@/@package@.xml
+else
+    pear install --nodeps -r @rpm_xml_dir@/@package@.xml
+fi
 
 %install
-pear -c "%{buildroot}/pearrc" install --nodeps -R "%{buildroot}" \
-        "$RPM_SOURCE_DIR/@package@-%{version}.tgz"
+pear -c %{buildroot}/pearrc install --nodeps -R %{buildroot} \
+        $RPM_SOURCE_DIR/@package@-%{version}.tgz
 rm %{buildroot}/pearrc
 rm %{buildroot}/%{_libdir}/php/pear/.filemap
 rm %{buildroot}/%{_libdir}/php/pear/.lock
 rm -rf %{buildroot}/%{_libdir}/php/pear/.registry
-for DOCDIR in docs doc examples; do
-    if [ -d "%{buildroot}/docs/@package@/$DOCDIR" ]; then
-        rm -rf $RPM_BUILD_DIR/$DOCDIR
-        mv %{buildroot}/docs/@package@/$DOCDIR $RPM_BUILD_DIR
-        rm -rf %{buildroot}/docs
-    fi
-done
+if [ "@doc_files@" != "" ]; then
+     mv %{buildroot}/docs/@package@/* .
+     rm -rf %{buildroot}/docs
+fi
 mkdir -p %{buildroot}@rpm_xml_dir@
-tar -xzf $RPM_SOURCE_DIR/@package@-%{version}.tgz package.xml
-cp -p package.xml %{buildroot}@rpm_xml_dir@/@package@.xml
+tar -xzf $RPM_SOURCE_DIR/@package@-%{version}.tgz package@package2xml@.xml
+cp -p package@package2xml@.xml %{buildroot}@rpm_xml_dir@/@package@.xml
 
 #rm -rf %{buildroot}/*
-#pear -q install -R %{buildroot} -n package.xml
+#pear -q install -R %{buildroot} -n package@package2xml@.xml
 #mkdir -p %{buildroot}@rpm_xml_dir@
-#cp -p package.xml %{buildroot}@rpm_xml_dir@/@package@.xml
+#cp -p package@package2xml@.xml %{buildroot}@rpm_xml_dir@/@package@.xml
 
 %files
     %defattr(-,root,root)
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/XML/RPC/Dump.php 1.4.0sr5-1/cpanel-glprivate/system/pear/XML/RPC/Dump.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/XML/RPC/Dump.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/XML/RPC/Dump.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,187 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Function and class to dump XML_RPC_Value objects in a nice way
+ *
+ * Should be helpful as a normal var_dump(..) displays all internals which
+ * doesn't really give you an overview due to too much information.
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Christian Weiske <cweiske@php.net>
+ * @version    CVS: $Id: Dump.php,v 1.7 2005/01/24 03:47:55 danielc Exp $
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+
+
+/**
+ * Pull in the XML_RPC class
+ */
+require_once 'XML/RPC.php';
+
+
+/**
+ * Generates the dump of the XML_RPC_Value and echoes it
+ *
+ * @param object $value  the XML_RPC_Value object to dump
+ *
+ * @return void
+ */
+function XML_RPC_Dump($value)
+{
+    $dumper = new XML_RPC_Dump();
+    echo $dumper->generateDump($value);
+}
+
+
+/**
+ * Class which generates a dump of a XML_RPC_Value object
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Christian Weiske <cweiske@php.net>
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Dump
+{
+    /**
+     * The indentation array cache
+     * @var array
+     */
+    var $arIndent      = array();
+
+    /**
+     * The spaces used for indenting the XML
+     * @var string
+     */
+    var $strBaseIndent = '    ';
+
+    /**
+     * Returns the dump in XML format without printing it out
+     *
+     * @param object $value   the XML_RPC_Value object to dump
+     * @param int    $nLevel  the level of indentation
+     *
+     * @return string  the dump
+     */
+    function generateDump($value, $nLevel = 0)
+    {
+        if (!is_object($value) && get_class($value) != 'xml_rpc_value') {
+            require_once 'PEAR.php';
+            PEAR::raiseError('Tried to dump non-XML_RPC_Value variable' . "\r\n",
+                             0, PEAR_ERROR_PRINT);
+            if (is_object($value)) {
+                $strType = get_class($value);
+            } else {
+                $strType = gettype($value);
+            }
+            return $this->getIndent($nLevel) . 'NOT A XML_RPC_Value: '
+                   . $strType . "\r\n";
+        }
+
+        switch ($value->kindOf()) {
+        case 'struct':
+            $ret = $this->genStruct($value, $nLevel);
+            break;
+        case 'array':
+            $ret = $this->genArray($value, $nLevel);
+            break;
+        case 'scalar':
+            $ret = $this->genScalar($value->scalarval(), $nLevel);
+            break;
+        default:
+            require_once 'PEAR.php';
+            PEAR::raiseError('Illegal type "' . $value->kindOf()
+                             . '" in XML_RPC_Value' . "\r\n", 0,
+                             PEAR_ERROR_PRINT);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Returns the scalar value dump
+     *
+     * @param object $value   the scalar XML_RPC_Value object to dump
+     * @param int    $nLevel  the level of indentation
+     *
+     * @return string  Dumped version of the scalar value
+     */
+    function genScalar($value, $nLevel)
+    {
+        if (gettype($value) == 'object') {
+            $strClass = ' ' . get_class($value);
+        } else {
+            $strClass = '';
+        }
+        return $this->getIndent($nLevel) . gettype($value) . $strClass
+               . ' ' . $value . "\r\n";
+    }
+
+    /**
+     * Returns the dump of a struct
+     *
+     * @param object $value   the struct XML_RPC_Value object to dump
+     * @param int    $nLevel  the level of indentation
+     *
+     * @return string  Dumped version of the scalar value
+     */
+    function genStruct($value, $nLevel)
+    {
+        $value->structreset();
+        $strOutput = $this->getIndent($nLevel) . 'struct' . "\r\n";
+        while (list($key, $keyval) = $value->structeach()) {
+            $strOutput .= $this->getIndent($nLevel + 1) . $key . "\r\n";
+            $strOutput .= $this->generateDump($keyval, $nLevel + 2);
+        }
+        return $strOutput;
+    }
+
+    /**
+     * Returns the dump of an array
+     *
+     * @param object $value   the array XML_RPC_Value object to dump
+     * @param int    $nLevel  the level of indentation
+     *
+     * @return string  Dumped version of the scalar value
+     */
+    function genArray($value, $nLevel)
+    {
+        $nSize     = $value->arraysize();
+        $strOutput = $this->getIndent($nLevel) . 'array' . "\r\n";
+        for($nA = 0; $nA < $nSize; $nA++) {
+            $strOutput .= $this->getIndent($nLevel + 1) . $nA . "\r\n";
+            $strOutput .= $this->generateDump($value->arraymem($nA),
+                                              $nLevel + 2);
+        }
+        return $strOutput;
+    }
+
+    /**
+     * Returns the indent for a specific level and caches it for faster use
+     *
+     * @param int $nLevel  the level
+     *
+     * @return string  the indented string
+     */
+    function getIndent($nLevel)
+    {
+        if (!isset($this->arIndent[$nLevel])) {
+            $this->arIndent[$nLevel] = str_repeat($this->strBaseIndent, $nLevel);
+        }
+        return $this->arIndent[$nLevel];
+    }
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/XML/RPC/Server.php 1.4.0sr5-1/cpanel-glprivate/system/pear/XML/RPC/Server.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/XML/RPC/Server.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/XML/RPC/Server.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,643 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Server commands for our PHP implementation of the XML-RPC protocol
+ *
+ * This is a PEAR-ified version of Useful inc's XML-RPC for PHP.
+ * It has support for HTTP transport, proxies and authentication.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: License is granted to use or modify this software
+ * ("XML-RPC for PHP") for commercial or non-commercial use provided the
+ * copyright of the author is preserved in any distributed or derivative work.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESSED OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    CVS: $Id: Server.php,v 1.33 2006/01/14 22:30:31 danielc Exp $
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+
+
+/**
+ * Pull in the XML_RPC class
+ */
+require_once 'XML/RPC.php';
+
+
+/**
+ * signature for system.listMethods: return = array,
+ * parameters = a string or nothing
+ * @global array $GLOBALS['XML_RPC_Server_listMethods_sig']
+ */
+$GLOBALS['XML_RPC_Server_listMethods_sig'] = array(
+    array($GLOBALS['XML_RPC_Array'],
+          $GLOBALS['XML_RPC_String']
+    ),
+    array($GLOBALS['XML_RPC_Array'])
+);
+
+/**
+ * docstring for system.listMethods
+ * @global string $GLOBALS['XML_RPC_Server_listMethods_doc']
+ */
+$GLOBALS['XML_RPC_Server_listMethods_doc'] = 'This method lists all the'
+        . ' methods that the XML-RPC server knows how to dispatch';
+
+/**
+ * signature for system.methodSignature: return = array,
+ * parameters = string
+ * @global array $GLOBALS['XML_RPC_Server_methodSignature_sig']
+ */
+$GLOBALS['XML_RPC_Server_methodSignature_sig'] = array(
+    array($GLOBALS['XML_RPC_Array'],
+          $GLOBALS['XML_RPC_String']
+    )
+);
+
+/**
+ * docstring for system.methodSignature
+ * @global string $GLOBALS['XML_RPC_Server_methodSignature_doc']
+ */
+$GLOBALS['XML_RPC_Server_methodSignature_doc'] = 'Returns an array of known'
+        . ' signatures (an array of arrays) for the method name passed. If'
+        . ' no signatures are known, returns a none-array (test for type !='
+        . ' array to detect missing signature)';
+
+/**
+ * signature for system.methodHelp: return = string,
+ * parameters = string
+ * @global array $GLOBALS['XML_RPC_Server_methodHelp_sig']
+ */
+$GLOBALS['XML_RPC_Server_methodHelp_sig'] = array(
+    array($GLOBALS['XML_RPC_String'],
+          $GLOBALS['XML_RPC_String']
+    )
+);
+
+/**
+ * docstring for methodHelp
+ * @global string $GLOBALS['XML_RPC_Server_methodHelp_doc']
+ */
+$GLOBALS['XML_RPC_Server_methodHelp_doc'] = 'Returns help text if defined'
+        . ' for the method passed, otherwise returns an empty string';
+
+/**
+ * dispatch map for the automatically declared XML-RPC methods.
+ * @global array $GLOBALS['XML_RPC_Server_dmap']
+ */
+$GLOBALS['XML_RPC_Server_dmap'] = array(
+    'system.listMethods' => array(
+        'function'  => 'XML_RPC_Server_listMethods',
+        'signature' => $GLOBALS['XML_RPC_Server_listMethods_sig'],
+        'docstring' => $GLOBALS['XML_RPC_Server_listMethods_doc']
+    ),
+    'system.methodHelp' => array(
+        'function'  => 'XML_RPC_Server_methodHelp',
+        'signature' => $GLOBALS['XML_RPC_Server_methodHelp_sig'],
+        'docstring' => $GLOBALS['XML_RPC_Server_methodHelp_doc']
+    ),
+    'system.methodSignature' => array(
+        'function'  => 'XML_RPC_Server_methodSignature',
+        'signature' => $GLOBALS['XML_RPC_Server_methodSignature_sig'],
+        'docstring' => $GLOBALS['XML_RPC_Server_methodSignature_doc']
+    )
+);
+
+/**
+ * @global string $GLOBALS['XML_RPC_Server_debuginfo']
+ */
+$GLOBALS['XML_RPC_Server_debuginfo'] = '';
+
+
+/**
+ * Lists all the methods that the XML-RPC server knows how to dispatch
+ *
+ * @return object  a new XML_RPC_Response object
+ */
+function XML_RPC_Server_listMethods($server, $m)
+{
+    global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap;
+
+    $v = new XML_RPC_Value();
+    $outAr = array();
+    foreach ($server->dmap as $key => $val) {
+        $outAr[] = new XML_RPC_Value($key, 'string');
+    }
+    foreach ($XML_RPC_Server_dmap as $key => $val) {
+        $outAr[] = new XML_RPC_Value($key, 'string');
+    }
+    $v->addArray($outAr);
+    return new XML_RPC_Response($v);
+}
+
+/**
+ * Returns an array of known signatures (an array of arrays)
+ * for the given method
+ *
+ * If no signatures are known, returns a none-array
+ * (test for type != array to detect missing signature)
+ *
+ * @return object  a new XML_RPC_Response object
+ */
+function XML_RPC_Server_methodSignature($server, $m)
+{
+    global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap;
+
+    $methName = $m->getParam(0);
+    $methName = $methName->scalarval();
+    if (strpos($methName, 'system.') === 0) {
+        $dmap = $XML_RPC_Server_dmap;
+        $sysCall = 1;
+    } else {
+        $dmap = $server->dmap;
+        $sysCall = 0;
+    }
+    //  print "<!-- ${methName} -->\n";
+    if (isset($dmap[$methName])) {
+        if ($dmap[$methName]['signature']) {
+            $sigs = array();
+            $thesigs = $dmap[$methName]['signature'];
+            for ($i = 0; $i < sizeof($thesigs); $i++) {
+                $cursig = array();
+                $inSig = $thesigs[$i];
+                for ($j = 0; $j < sizeof($inSig); $j++) {
+                    $cursig[] = new XML_RPC_Value($inSig[$j], 'string');
+                }
+                $sigs[] = new XML_RPC_Value($cursig, 'array');
+            }
+            $r = new XML_RPC_Response(new XML_RPC_Value($sigs, 'array'));
+        } else {
+            $r = new XML_RPC_Response(new XML_RPC_Value('undef', 'string'));
+        }
+    } else {
+        $r = new XML_RPC_Response(0, $XML_RPC_err['introspect_unknown'],
+                                  $XML_RPC_str['introspect_unknown']);
+    }
+    return $r;
+}
+
+/**
+ * Returns help text if defined for the method passed, otherwise returns
+ * an empty string
+ *
+ * @return object  a new XML_RPC_Response object
+ */
+function XML_RPC_Server_methodHelp($server, $m)
+{
+    global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap;
+
+    $methName = $m->getParam(0);
+    $methName = $methName->scalarval();
+    if (strpos($methName, 'system.') === 0) {
+        $dmap = $XML_RPC_Server_dmap;
+        $sysCall = 1;
+    } else {
+        $dmap = $server->dmap;
+        $sysCall = 0;
+    }
+
+    if (isset($dmap[$methName])) {
+        if ($dmap[$methName]['docstring']) {
+            $r = new XML_RPC_Response(new XML_RPC_Value($dmap[$methName]['docstring']),
+                                                        'string');
+        } else {
+            $r = new XML_RPC_Response(new XML_RPC_Value('', 'string'));
+        }
+    } else {
+        $r = new XML_RPC_Response(0, $XML_RPC_err['introspect_unknown'],
+                                     $XML_RPC_str['introspect_unknown']);
+    }
+    return $r;
+}
+
+/**
+ * @return void
+ */
+function XML_RPC_Server_debugmsg($m)
+{
+    global $XML_RPC_Server_debuginfo;
+    $XML_RPC_Server_debuginfo = $XML_RPC_Server_debuginfo . $m . "\n";
+}
+
+
+/**
+ * A server for receiving and replying to XML RPC requests
+ *
+ * <code>
+ * $server = new XML_RPC_Server(
+ *     array(
+ *         'isan8' =>
+ *             array(
+ *                 'function' => 'is_8',
+ *                 'signature' =>
+ *                      array(
+ *                          array('boolean', 'int'),
+ *                          array('boolean', 'int', 'boolean'),
+ *                          array('boolean', 'string'),
+ *                          array('boolean', 'string', 'boolean'),
+ *                      ),
+ *                 'docstring' => 'Is the value an 8?'
+ *             ),
+ *     ),
+ *     1,
+ *     0
+ * ); 
+ * </code>
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Server
+{
+    /**
+     * The dispatch map, listing the methods this server provides.
+     * @var array
+     */
+    var $dmap = array();
+
+    /**
+     * The present response's encoding
+     * @var string
+     * @see XML_RPC_Message::getEncoding()
+     */
+    var $encoding = '';
+
+    /**
+     * Debug mode (0 = off, 1 = on)
+     * @var integer
+     */
+    var $debug = 0;
+
+    /**
+     * The response's HTTP headers
+     * @var string
+     */
+    var $server_headers = '';
+
+    /**
+     * The response's XML payload
+     * @var string
+     */
+    var $server_payload = '';
+
+
+    /**
+     * Constructor for the XML_RPC_Server class
+     *
+     * @param array $dispMap   the dispatch map. An associative array
+     *                          explaining each function. The keys of the main
+     *                          array are the procedure names used by the
+     *                          clients. The value is another associative array
+     *                          that contains up to three elements:
+     *                            + The 'function' element's value is the name
+     *                              of the function or method that gets called.
+     *                              To define a class' method: 'class::method'.
+     *                            + The 'signature' element (optional) is an
+     *                              array describing the return values and
+     *                              parameters
+     *                            + The 'docstring' element (optional) is a
+     *                              string describing what the method does
+     * @param int $serviceNow  should the HTTP response be sent now?
+     *                          (1 = yes, 0 = no)
+     * @param int $debug       should debug output be displayed?
+     *                          (1 = yes, 0 = no)
+     *
+     * @return void
+     */
+    function XML_RPC_Server($dispMap, $serviceNow = 1, $debug = 0)
+    {
+        global $HTTP_RAW_POST_DATA;
+
+        if ($debug) {
+            $this->debug = 1;
+        } else {
+            $this->debug = 0;
+        }
+
+        $this->dmap = $dispMap;
+
+        if ($serviceNow) {
+            $this->service();
+        } else {
+            $this->createServerPayload();
+            $this->createServerHeaders();
+        }
+    }
+
+    /**
+     * @return string  the debug information if debug debug mode is on
+     */
+    function serializeDebug()
+    {
+        global $XML_RPC_Server_debuginfo, $HTTP_RAW_POST_DATA;
+
+        if ($this->debug) {
+            XML_RPC_Server_debugmsg('vvv POST DATA RECEIVED BY SERVER vvv' . "\n"
+                                    . $HTTP_RAW_POST_DATA
+                                    . "\n" . '^^^ END POST DATA ^^^');
+        }
+
+        if ($XML_RPC_Server_debuginfo != '') {
+            return "<!-- PEAR XML_RPC SERVER DEBUG INFO:\n\n"
+                   . preg_replace('/-(?=-)/', '- ', $XML_RPC_Server_debuginfo)
+                   . "-->\n";
+        } else {
+            return '';
+        }
+    }
+
+    /**
+     * Sends the response
+     *
+     * The encoding and content-type are determined by
+     * XML_RPC_Message::getEncoding()
+     *
+     * @return void
+     *
+     * @uses XML_RPC_Server::createServerPayload(),
+     *       XML_RPC_Server::createServerHeaders()
+     */
+    function service()
+    {
+        if (!$this->server_payload) {
+            $this->createServerPayload();
+        }
+        if (!$this->server_headers) {
+            $this->createServerHeaders();
+        }
+
+        /*
+         * $server_headers needs to remain a string for compatibility with
+         * old scripts using this package, but PHP 4.4.2 no longer allows
+         * line breaks in header() calls.  So, we split each header into
+         * an individual call.  The initial replace handles the off chance
+         * that someone composed a single header with multiple lines, which
+         * the RFCs allow.
+         */
+        $this->server_headers = preg_replace("/[\r\n]+[ \t]+/", ' ',
+                                             trim($this->server_headers));
+        $headers = preg_split("/[\r\n]+/", $this->server_headers);
+        foreach ($headers as $header)
+        {
+            header($header);
+        }
+
+        print $this->server_payload;
+    }
+
+    /**
+     * Generates the payload and puts it in the $server_payload property
+     *
+     * @return void
+     *
+     * @uses XML_RPC_Server::parseRequest(), XML_RPC_Server::$encoding,
+     *       XML_RPC_Response::serialize(), XML_RPC_Server::serializeDebug()
+     */
+    function createServerPayload()
+    {
+        $r = $this->parseRequest();
+        $this->server_payload = '<?xml version="1.0" encoding="'
+                              . $this->encoding . '"?>' . "\n"
+                              . $this->serializeDebug()
+                              . $r->serialize();
+    }
+
+    /**
+     * Determines the HTTP headers and puts them in the $server_headers
+     * property
+     *
+     * @return boolean  TRUE if okay, FALSE if $server_payload isn't set.
+     *
+     * @uses XML_RPC_Server::createServerPayload(),
+     *       XML_RPC_Server::$server_headers
+     */
+    function createServerHeaders()
+    {
+        if (!$this->server_payload) {
+            return false;
+        }
+        $this->server_headers = 'Content-Length: '
+                              . strlen($this->server_payload) . "\r\n"
+                              . 'Content-Type: text/xml;'
+                              . ' charset=' . $this->encoding;
+        return true;
+    }
+
+    /**
+     * @return array
+     */
+    function verifySignature($in, $sig)
+    {
+        for ($i = 0; $i < sizeof($sig); $i++) {
+            // check each possible signature in turn
+            $cursig = $sig[$i];
+            if (sizeof($cursig) == $in->getNumParams() + 1) {
+                $itsOK = 1;
+                for ($n = 0; $n < $in->getNumParams(); $n++) {
+                    $p = $in->getParam($n);
+                    // print "<!-- $p -->\n";
+                    if ($p->kindOf() == 'scalar') {
+                        $pt = $p->scalartyp();
+                    } else {
+                        $pt = $p->kindOf();
+                    }
+                    // $n+1 as first type of sig is return type
+                    if ($pt != $cursig[$n+1]) {
+                        $itsOK = 0;
+                        $pno = $n+1;
+                        $wanted = $cursig[$n+1];
+                        $got = $pt;
+                        break;
+                    }
+                }
+                if ($itsOK) {
+                    return array(1);
+                }
+            }
+        }
+        if (isset($wanted)) {
+            return array(0, "Wanted ${wanted}, got ${got} at param ${pno}");
+        } else {
+            $allowed = array();
+            foreach ($sig as $val) {
+                end($val);
+                $allowed[] = key($val);
+            }
+            $allowed = array_unique($allowed);
+            $last = count($allowed) - 1;
+            if ($last > 0) {
+                $allowed[$last] = 'or ' . $allowed[$last];
+            }
+            return array(0,
+                         'Signature permits ' . implode(', ', $allowed)
+                                . ' parameters but the request had '
+                                . $in->getNumParams());
+        }
+    }
+
+    /**
+     * @return object  a new XML_RPC_Response object
+     *
+     * @uses XML_RPC_Message::getEncoding(), XML_RPC_Server::$encoding
+     */
+    function parseRequest($data = '')
+    {
+        global $XML_RPC_xh, $HTTP_RAW_POST_DATA,
+                $XML_RPC_err, $XML_RPC_str, $XML_RPC_errxml,
+                $XML_RPC_defencoding, $XML_RPC_Server_dmap;
+
+        if ($data == '') {
+            $data = $HTTP_RAW_POST_DATA;
+        }
+
+        $this->encoding = XML_RPC_Message::getEncoding($data);
+        $parser_resource = xml_parser_create($this->encoding);
+        $parser = (int) $parser_resource;
+
+        $XML_RPC_xh[$parser] = array();
+        $XML_RPC_xh[$parser]['cm']     = 0;
+        $XML_RPC_xh[$parser]['isf']    = 0;
+        $XML_RPC_xh[$parser]['params'] = array();
+        $XML_RPC_xh[$parser]['method'] = '';
+        $XML_RPC_xh[$parser]['stack'] = array();	
+        $XML_RPC_xh[$parser]['valuestack'] = array();	
+
+        $plist = '';
+
+        // decompose incoming XML into request structure
+
+        xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true);
+        xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee');
+        xml_set_character_data_handler($parser_resource, 'XML_RPC_cd');
+        if (!xml_parse($parser_resource, $data, 1)) {
+            // return XML error as a faultCode
+            $r = new XML_RPC_Response(0,
+                                      $XML_RPC_errxml+xml_get_error_code($parser_resource),
+                                      sprintf('XML error: %s at line %d',
+                                              xml_error_string(xml_get_error_code($parser_resource)),
+                                              xml_get_current_line_number($parser_resource)));
+            xml_parser_free($parser_resource);
+        } elseif ($XML_RPC_xh[$parser]['isf']>1) {
+            $r = new XML_RPC_Response(0,
+                                      $XML_RPC_err['invalid_request'],
+                                      $XML_RPC_str['invalid_request']
+                                      . ': '
+                                      . $XML_RPC_xh[$parser]['isf_reason']);
+            xml_parser_free($parser_resource);
+        } else {
+            xml_parser_free($parser_resource);
+            $m = new XML_RPC_Message($XML_RPC_xh[$parser]['method']);
+            // now add parameters in
+            for ($i = 0; $i < sizeof($XML_RPC_xh[$parser]['params']); $i++) {
+                // print '<!-- ' . $XML_RPC_xh[$parser]['params'][$i]. "-->\n";
+                $plist .= "$i - " . var_export($XML_RPC_xh[$parser]['params'][$i], true) . " \n";
+                $m->addParam($XML_RPC_xh[$parser]['params'][$i]);
+            }
+
+            if ($this->debug) {
+                XML_RPC_Server_debugmsg($plist);
+            }
+
+            // now to deal with the method
+            $methName = $XML_RPC_xh[$parser]['method'];
+            if (strpos($methName, 'system.') === 0) {
+                $dmap = $XML_RPC_Server_dmap;
+                $sysCall = 1;
+            } else {
+                $dmap = $this->dmap;
+                $sysCall = 0;
+            }
+
+            if (isset($dmap[$methName]['function'])
+                && is_string($dmap[$methName]['function'])
+                && strpos($dmap[$methName]['function'], '::') !== false)
+            {
+                $dmap[$methName]['function'] =
+                        explode('::', $dmap[$methName]['function']);
+            }
+
+            if (isset($dmap[$methName]['function'])
+                && is_callable($dmap[$methName]['function']))
+            {
+                // dispatch if exists
+                if (isset($dmap[$methName]['signature'])) {
+                    $sr = $this->verifySignature($m,
+                                                 $dmap[$methName]['signature'] );
+                }
+                if (!isset($dmap[$methName]['signature']) || $sr[0]) {
+                    // if no signature or correct signature
+                    if ($sysCall) {
+                        $r = call_user_func($dmap[$methName]['function'], $this, $m);
+                    } else {
+                        $r = call_user_func($dmap[$methName]['function'], $m);
+                    }
+                    if (!is_a($r, 'XML_RPC_Response')) {
+                        $r = new XML_RPC_Response(0, $XML_RPC_err['not_response_object'],
+                                                  $XML_RPC_str['not_response_object']);
+                    }
+                } else {
+                    $r = new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'],
+                                              $XML_RPC_str['incorrect_params']
+                                              . ': ' . $sr[1]);
+                }
+            } else {
+                // else prepare error response
+                $r = new XML_RPC_Response(0, $XML_RPC_err['unknown_method'],
+                                          $XML_RPC_str['unknown_method']);
+            }
+        }
+        return $r;
+    }
+
+    /**
+     * Echos back the input packet as a string value
+     *
+     * @return void
+     *
+     * Useful for debugging.
+     */
+    function echoInput()
+    {
+        global $HTTP_RAW_POST_DATA;
+
+        $r = new XML_RPC_Response(0);
+        $r->xv = new XML_RPC_Value("'Aha said I: '" . $HTTP_RAW_POST_DATA, 'string');
+        print $r->serialize();
+    }
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff -ruN 1.3.11sr1/cpanel-glprivate/system/pear/XML/RPC.php 1.4.0sr5-1/cpanel-glprivate/system/pear/XML/RPC.php
--- 1.3.11sr1/cpanel-glprivate/system/pear/XML/RPC.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/cpanel-glprivate/system/pear/XML/RPC.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,1958 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * PHP implementation of the XML-RPC protocol
+ *
+ * This is a PEAR-ified version of Useful inc's XML-RPC for PHP.
+ * It has support for HTTP transport, proxies and authentication.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: License is granted to use or modify this software
+ * ("XML-RPC for PHP") for commercial or non-commercial use provided the
+ * copyright of the author is preserved in any distributed or derivative work.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESSED OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    CVS: $Id: RPC.php,v 1.88 2005/10/15 20:29:43 danielc Exp $
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+
+
+if (!function_exists('xml_parser_create')) {
+    PEAR::loadExtension('xml');
+}
+
+/**#@+
+ * Error constants
+ */
+/**
+ * Parameter values don't match parameter types
+ */
+define('XML_RPC_ERROR_INVALID_TYPE', 101);
+/**
+ * Parameter declared to be numeric but the values are not
+ */
+define('XML_RPC_ERROR_NON_NUMERIC_FOUND', 102);
+/**
+ * Communication error
+ */
+define('XML_RPC_ERROR_CONNECTION_FAILED', 103);
+/**
+ * The array or struct has already been started
+ */
+define('XML_RPC_ERROR_ALREADY_INITIALIZED', 104);
+/**
+ * Incorrect parameters submitted
+ */
+define('XML_RPC_ERROR_INCORRECT_PARAMS', 105);
+/**
+ * Programming error by developer
+ */
+define('XML_RPC_ERROR_PROGRAMMING', 106);
+/**#@-*/
+
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_I4']
+ */
+$GLOBALS['XML_RPC_I4'] = 'i4';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_Int']
+ */
+$GLOBALS['XML_RPC_Int'] = 'int';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_Boolean']
+ */
+$GLOBALS['XML_RPC_Boolean'] = 'boolean';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_Double']
+ */
+$GLOBALS['XML_RPC_Double'] = 'double';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_String']
+ */
+$GLOBALS['XML_RPC_String'] = 'string';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_DateTime']
+ */
+$GLOBALS['XML_RPC_DateTime'] = 'dateTime.iso8601';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_Base64']
+ */
+$GLOBALS['XML_RPC_Base64'] = 'base64';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_Array']
+ */
+$GLOBALS['XML_RPC_Array'] = 'array';
+
+/**
+ * Data types
+ * @global string $GLOBALS['XML_RPC_Struct']
+ */
+$GLOBALS['XML_RPC_Struct'] = 'struct';
+
+
+/**
+ * Data type meta-types
+ * @global array $GLOBALS['XML_RPC_Types']
+ */
+$GLOBALS['XML_RPC_Types'] = array(
+    $GLOBALS['XML_RPC_I4']       => 1,
+    $GLOBALS['XML_RPC_Int']      => 1,
+    $GLOBALS['XML_RPC_Boolean']  => 1,
+    $GLOBALS['XML_RPC_String']   => 1,
+    $GLOBALS['XML_RPC_Double']   => 1,
+    $GLOBALS['XML_RPC_DateTime'] => 1,
+    $GLOBALS['XML_RPC_Base64']   => 1,
+    $GLOBALS['XML_RPC_Array']    => 2,
+    $GLOBALS['XML_RPC_Struct']   => 3,
+);
+
+
+/**
+ * Error message numbers
+ * @global array $GLOBALS['XML_RPC_err']
+ */
+$GLOBALS['XML_RPC_err'] = array(
+    'unknown_method'      => 1,
+    'invalid_return'      => 2,
+    'incorrect_params'    => 3,
+    'introspect_unknown'  => 4,
+    'http_error'          => 5,
+    'not_response_object' => 6,
+    'invalid_request'     => 7,
+);
+
+/**
+ * Error message strings
+ * @global array $GLOBALS['XML_RPC_str']
+ */
+$GLOBALS['XML_RPC_str'] = array(
+    'unknown_method'      => 'Unknown method',
+    'invalid_return'      => 'Invalid return payload: enable debugging to examine incoming payload',
+    'incorrect_params'    => 'Incorrect parameters passed to method',
+    'introspect_unknown'  => 'Can\'t introspect: method unknown',
+    'http_error'          => 'Didn\'t receive 200 OK from remote server.',
+    'not_response_object' => 'The requested method didn\'t return an XML_RPC_Response object.',
+    'invalid_request'     => 'Invalid request payload',
+);
+
+
+/**
+ * Default XML encoding (ISO-8859-1, UTF-8 or US-ASCII)
+ * @global string $GLOBALS['XML_RPC_defencoding']
+ */
+$GLOBALS['XML_RPC_defencoding'] = 'UTF-8';
+
+/**
+ * User error codes start at 800
+ * @global int $GLOBALS['XML_RPC_erruser']
+ */
+$GLOBALS['XML_RPC_erruser'] = 800;
+
+/**
+ * XML parse error codes start at 100
+ * @global int $GLOBALS['XML_RPC_errxml']
+ */
+$GLOBALS['XML_RPC_errxml'] = 100;
+
+
+/**
+ * Compose backslashes for escaping regexp
+ * @global string $GLOBALS['XML_RPC_backslash']
+ */
+$GLOBALS['XML_RPC_backslash'] = chr(92) . chr(92);
+
+
+/**
+ * Valid parents of XML elements
+ * @global array $GLOBALS['XML_RPC_valid_parents']
+ */
+$GLOBALS['XML_RPC_valid_parents'] = array(
+    'BOOLEAN' => array('VALUE'),
+    'I4' => array('VALUE'),
+    'INT' => array('VALUE'),
+    'STRING' => array('VALUE'),
+    'DOUBLE' => array('VALUE'),
+    'DATETIME.ISO8601' => array('VALUE'),
+    'BASE64' => array('VALUE'),
+    'ARRAY' => array('VALUE'),
+    'STRUCT' => array('VALUE'),
+    'PARAM' => array('PARAMS'),
+    'METHODNAME' => array('METHODCALL'),
+    'PARAMS' => array('METHODCALL', 'METHODRESPONSE'),
+    'MEMBER' => array('STRUCT'),
+    'NAME' => array('MEMBER'),
+    'DATA' => array('ARRAY'),
+    'FAULT' => array('METHODRESPONSE'),
+    'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),
+);
+
+
+/**
+ * Stores state during parsing
+ *
+ * quick explanation of components:
+ *   + ac     = accumulates values
+ *   + qt     = decides if quotes are needed for evaluation
+ *   + cm     = denotes struct or array (comma needed)
+ *   + isf    = indicates a fault
+ *   + lv     = indicates "looking for a value": implements the logic
+ *               to allow values with no types to be strings
+ *   + params = stores parameters in method calls
+ *   + method = stores method name
+ *
+ * @global array $GLOBALS['XML_RPC_xh']
+ */
+$GLOBALS['XML_RPC_xh'] = array();
+
+
+/**
+ * Start element handler for the XML parser
+ *
+ * @return void
+ */
+function XML_RPC_se($parser_resource, $name, $attrs)
+{
+    global $XML_RPC_xh, $XML_RPC_DateTime, $XML_RPC_String, $XML_RPC_valid_parents;
+    $parser = (int) $parser_resource;
+
+    // if invalid xmlrpc already detected, skip all processing
+    if ($XML_RPC_xh[$parser]['isf'] >= 2) {
+        return;
+    }
+
+    // check for correct element nesting
+    // top level element can only be of 2 types
+    if (count($XML_RPC_xh[$parser]['stack']) == 0) {
+        if ($name != 'METHODRESPONSE' && $name != 'METHODCALL') {
+            $XML_RPC_xh[$parser]['isf'] = 2;
+            $XML_RPC_xh[$parser]['isf_reason'] = 'missing top level xmlrpc element';
+            return;
+        }
+    } else {
+        // not top level element: see if parent is OK
+        if (!in_array($XML_RPC_xh[$parser]['stack'][0], $XML_RPC_valid_parents[$name])) {
+            $name = preg_replace('[^a-zA-Z0-9._-]', '', $name);
+            $XML_RPC_xh[$parser]['isf'] = 2;
+            $XML_RPC_xh[$parser]['isf_reason'] = "xmlrpc element $name cannot be child of {$XML_RPC_xh[$parser]['stack'][0]}";
+            return;
+        }
+    }
+
+    switch ($name) {
+    case 'STRUCT':
+        $XML_RPC_xh[$parser]['cm']++;
+
+        // turn quoting off
+        $XML_RPC_xh[$parser]['qt'] = 0;
+
+        $cur_val = array();
+        $cur_val['value'] = array();
+        $cur_val['members'] = 1;
+        array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val);
+        break;
+
+    case 'ARRAY':
+        $XML_RPC_xh[$parser]['cm']++;
+
+        // turn quoting off
+        $XML_RPC_xh[$parser]['qt'] = 0;
+
+        $cur_val = array();
+        $cur_val['value'] = array();
+        $cur_val['members'] = 0;
+        array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val);
+        break;
+
+    case 'NAME':
+        $XML_RPC_xh[$parser]['ac'] = '';
+        break;
+
+    case 'FAULT':
+        $XML_RPC_xh[$parser]['isf'] = 1;
+        break;
+
+    case 'PARAM':
+        $XML_RPC_xh[$parser]['valuestack'] = array();
+        break;
+
+    case 'VALUE':
+        $XML_RPC_xh[$parser]['lv'] = 1;
+        $XML_RPC_xh[$parser]['vt'] = $XML_RPC_String;
+        $XML_RPC_xh[$parser]['ac'] = '';
+        $XML_RPC_xh[$parser]['qt'] = 0;
+        // look for a value: if this is still 1 by the
+        // time we reach the first data segment then the type is string
+        // by implication and we need to add in a quote
+        break;
+
+    case 'I4':
+    case 'INT':
+    case 'STRING':
+    case 'BOOLEAN':
+    case 'DOUBLE':
+    case 'DATETIME.ISO8601':
+    case 'BASE64':
+        $XML_RPC_xh[$parser]['ac'] = ''; // reset the accumulator
+
+        if ($name == 'DATETIME.ISO8601' || $name == 'STRING') {
+            $XML_RPC_xh[$parser]['qt'] = 1;
+
+            if ($name == 'DATETIME.ISO8601') {
+                $XML_RPC_xh[$parser]['vt'] = $XML_RPC_DateTime;
+            }
+
+        } elseif ($name == 'BASE64') {
+            $XML_RPC_xh[$parser]['qt'] = 2;
+        } else {
+            // No quoting is required here -- but
+            // at the end of the element we must check
+            // for data format errors.
+            $XML_RPC_xh[$parser]['qt'] = 0;
+        }
+        break;
+
+    case 'MEMBER':
+        $XML_RPC_xh[$parser]['ac'] = '';
+        break;
+
+    case 'DATA':
+    case 'METHODCALL':
+    case 'METHODNAME':
+    case 'METHODRESPONSE':
+    case 'PARAMS':
+        // valid elements that add little to processing
+        break;
+    }
+
+
+    // Save current element to stack
+    array_unshift($XML_RPC_xh[$parser]['stack'], $name);
+
+    if ($name != 'VALUE') {
+        $XML_RPC_xh[$parser]['lv'] = 0;
+    }
+}
+
+/**
+ * End element handler for the XML parser
+ *
+ * @return void
+ */
+function XML_RPC_ee($parser_resource, $name)
+{
+    global $XML_RPC_xh, $XML_RPC_Types, $XML_RPC_String;
+    $parser = (int) $parser_resource;
+
+    if ($XML_RPC_xh[$parser]['isf'] >= 2) {
+        return;
+    }
+
+    // push this element from stack
+    // NB: if XML validates, correct opening/closing is guaranteed and
+    // we do not have to check for $name == $curr_elem.
+    // we also checked for proper nesting at start of elements...
+    $curr_elem = array_shift($XML_RPC_xh[$parser]['stack']);
+
+    switch ($name) {
+    case 'STRUCT':
+    case 'ARRAY':
+    $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']);
+    $XML_RPC_xh[$parser]['value'] = $cur_val['value'];
+        $XML_RPC_xh[$parser]['vt'] = strtolower($name);
+        $XML_RPC_xh[$parser]['cm']--;
+        break;
+
+    case 'NAME':
+    $XML_RPC_xh[$parser]['valuestack'][0]['name'] = $XML_RPC_xh[$parser]['ac'];
+        break;
+
+    case 'BOOLEAN':
+        // special case here: we translate boolean 1 or 0 into PHP
+        // constants true or false
+        if ($XML_RPC_xh[$parser]['ac'] == '1') {
+            $XML_RPC_xh[$parser]['ac'] = 'true';
+        } else {
+            $XML_RPC_xh[$parser]['ac'] = 'false';
+        }
+
+        $XML_RPC_xh[$parser]['vt'] = strtolower($name);
+        // Drop through intentionally.
+
+    case 'I4':
+    case 'INT':
+    case 'STRING':
+    case 'DOUBLE':
+    case 'DATETIME.ISO8601':
+    case 'BASE64':
+        if ($XML_RPC_xh[$parser]['qt'] == 1) {
+            // we use double quotes rather than single so backslashification works OK
+            $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac'];
+        } elseif ($XML_RPC_xh[$parser]['qt'] == 2) {
+            $XML_RPC_xh[$parser]['value'] = base64_decode($XML_RPC_xh[$parser]['ac']);
+        } elseif ($name == 'BOOLEAN') {
+            $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac'];
+        } else {
+            // we have an I4, INT or a DOUBLE
+            // we must check that only 0123456789-.<space> are characters here
+            if (!ereg("^[+-]?[0123456789 \t\.]+$", $XML_RPC_xh[$parser]['ac'])) {
+                XML_RPC_Base::raiseError('Non-numeric value received in INT or DOUBLE',
+                                         XML_RPC_ERROR_NON_NUMERIC_FOUND);
+                $XML_RPC_xh[$parser]['value'] = XML_RPC_ERROR_NON_NUMERIC_FOUND;
+            } else {
+                // it's ok, add it on
+                $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac'];
+            }
+        }
+
+        $XML_RPC_xh[$parser]['ac'] = '';
+        $XML_RPC_xh[$parser]['qt'] = 0;
+        $XML_RPC_xh[$parser]['lv'] = 3; // indicate we've found a value
+        break;
+
+    case 'VALUE':
+        if ($XML_RPC_xh[$parser]['vt'] == $XML_RPC_String) {
+            if (strlen($XML_RPC_xh[$parser]['ac']) > 0) {
+                $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac'];
+            } elseif ($XML_RPC_xh[$parser]['lv'] == 1) {
+                // The <value> element was empty.
+                $XML_RPC_xh[$parser]['value'] = '';
+            }
+        }
+
+        $temp = new XML_RPC_Value($XML_RPC_xh[$parser]['value'], $XML_RPC_xh[$parser]['vt']);
+
+        $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']);
+        if (is_array($cur_val)) {
+            if ($cur_val['members']==0) {
+                $cur_val['value'][] = $temp;
+            } else {
+                $XML_RPC_xh[$parser]['value'] = $temp;
+            }
+            array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val);
+        } else {
+            $XML_RPC_xh[$parser]['value'] = $temp;
+        }
+        break;
+
+    case 'MEMBER':
+        $XML_RPC_xh[$parser]['ac'] = '';
+        $XML_RPC_xh[$parser]['qt'] = 0;
+
+        $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']);
+        if (is_array($cur_val)) {
+            if ($cur_val['members']==1) {
+                $cur_val['value'][$cur_val['name']] = $XML_RPC_xh[$parser]['value'];
+            }
+            array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val);
+        }
+        break;
+
+    case 'DATA':
+        $XML_RPC_xh[$parser]['ac'] = '';
+        $XML_RPC_xh[$parser]['qt'] = 0;
+        break;
+
+    case 'PARAM':
+        $XML_RPC_xh[$parser]['params'][] = $XML_RPC_xh[$parser]['value'];
+        break;
+
+    case 'METHODNAME':
+    case 'RPCMETHODNAME':
+        $XML_RPC_xh[$parser]['method'] = ereg_replace("^[\n\r\t ]+", '',
+                                                      $XML_RPC_xh[$parser]['ac']);
+        break;
+    }
+
+    // if it's a valid type name, set the type
+    if (isset($XML_RPC_Types[strtolower($name)])) {
+        $XML_RPC_xh[$parser]['vt'] = strtolower($name);
+    }
+}
+
+/**
+ * Character data handler for the XML parser
+ *
+ * @return void
+ */
+function XML_RPC_cd($parser_resource, $data)
+{
+    global $XML_RPC_xh, $XML_RPC_backslash;
+    $parser = (int) $parser_resource;
+
+    if ($XML_RPC_xh[$parser]['lv'] != 3) {
+        // "lookforvalue==3" means that we've found an entire value
+        // and should discard any further character data
+
+        if ($XML_RPC_xh[$parser]['lv'] == 1) {
+            // if we've found text and we're just in a <value> then
+            // turn quoting on, as this will be a string
+            $XML_RPC_xh[$parser]['qt'] = 1;
+            // and say we've found a value
+            $XML_RPC_xh[$parser]['lv'] = 2;
+        }
+
+        // replace characters that eval would
+        // do special things with
+        if (!isset($XML_RPC_xh[$parser]['ac'])) {
+            $XML_RPC_xh[$parser]['ac'] = '';
+        }
+        $XML_RPC_xh[$parser]['ac'] .= $data;
+    }
+}
+
+/**
+ * The common methods and properties for all of the XML_RPC classes
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Base {
+
+    /**
+     * PEAR Error handling
+     *
+     * @return object  PEAR_Error object
+     */
+    function raiseError($msg, $code)
+    {
+        include_once 'PEAR.php';
+        if (is_object(@$this)) {
+            return PEAR::raiseError(get_class($this) . ': ' . $msg, $code);
+        } else {
+            return PEAR::raiseError('XML_RPC: ' . $msg, $code);
+        }
+    }
+
+    /**
+     * Tell whether something is a PEAR_Error object
+     *
+     * @param mixed $value  the item to check
+     *
+     * @return bool  whether $value is a PEAR_Error object or not
+     *
+     * @access public
+     */
+    function isError($value)
+    {
+        return is_a($value, 'PEAR_Error');
+    }
+}
+
+/**
+ * The methods and properties for submitting XML RPC requests
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Client extends XML_RPC_Base {
+
+    /**
+     * The path and name of the RPC server script you want the request to go to
+     * @var string
+     */
+    var $path = '';
+
+    /**
+     * The name of the remote server to connect to
+     * @var string
+     */
+    var $server = '';
+
+    /**
+     * The protocol to use in contacting the remote server
+     * @var string
+     */
+    var $protocol = 'http://';
+
+    /**
+     * The port for connecting to the remote server
+     *
+     * The default is 80 for http:// connections
+     * and 443 for https:// and ssl:// connections.
+     *
+     * @var integer
+     */
+    var $port = 80;
+
+    /**
+     * A user name for accessing the RPC server
+     * @var string
+     * @see XML_RPC_Client::setCredentials()
+     */
+    var $username = '';
+
+    /**
+     * A password for accessing the RPC server
+     * @var string
+     * @see XML_RPC_Client::setCredentials()
+     */
+    var $password = '';
+
+    /**
+     * The name of the proxy server to use, if any
+     * @var string
+     */
+    var $proxy = '';
+
+    /**
+     * The protocol to use in contacting the proxy server, if any
+     * @var string
+     */
+    var $proxy_protocol = 'http://';
+
+    /**
+     * The port for connecting to the proxy server
+     *
+     * The default is 8080 for http:// connections
+     * and 443 for https:// and ssl:// connections.
+     *
+     * @var integer
+     */
+    var $proxy_port = 8080;
+
+    /**
+     * A user name for accessing the proxy server
+     * @var string
+     */
+    var $proxy_user = '';
+
+    /**
+     * A password for accessing the proxy server
+     * @var string
+     */
+    var $proxy_pass = '';
+
+    /**
+     * The error number, if any
+     * @var integer
+     */
+    var $errno = 0;
+
+    /**
+     * The error message, if any
+     * @var string
+     */
+    var $errstr = '';
+
+    /**
+     * The current debug mode (1 = on, 0 = off)
+     * @var integer
+     */
+    var $debug = 0;
+
+    /**
+     * The HTTP headers for the current request.
+     * @var string
+     */
+    var $headers = '';
+
+
+    /**
+     * Sets the object's properties
+     *
+     * @param string  $path        the path and name of the RPC server script
+     *                              you want the request to go to
+     * @param string  $server      the URL of the remote server to connect to.
+     *                              If this parameter doesn't specify a
+     *                              protocol and $port is 443, ssl:// is
+     *                              assumed.
+     * @param integer $port        a port for connecting to the remote server.
+     *                              Defaults to 80 for http:// connections and
+     *                              443 for https:// and ssl:// connections.
+     * @param string  $proxy       the URL of the proxy server to use, if any.
+     *                              If this parameter doesn't specify a
+     *                              protocol and $port is 443, ssl:// is
+     *                              assumed.
+     * @param integer $proxy_port  a port for connecting to the remote server.
+     *                              Defaults to 8080 for http:// connections and
+     *                              443 for https:// and ssl:// connections.
+     * @param string  $proxy_user  a user name for accessing the proxy server
+     * @param string  $proxy_pass  a password for accessing the proxy server
+     *
+     * @return void
+     */
+    function XML_RPC_Client($path, $server, $port = 0,
+                            $proxy = '', $proxy_port = 0,
+                            $proxy_user = '', $proxy_pass = '')
+    {
+        $this->path       = $path;
+        $this->proxy_user = $proxy_user;
+        $this->proxy_pass = $proxy_pass;
+
+        preg_match('@^(http://|https://|ssl://)?(.*)$@', $server, $match);
+        if ($match[1] == '') {
+            if ($port == 443) {
+                $this->server   = $match[2];
+                $this->protocol = 'ssl://';
+                $this->port     = 443;
+            } else {
+                $this->server = $match[2];
+                if ($port) {
+                    $this->port = $port;
+                }
+            }
+        } elseif ($match[1] == 'http://') {
+            $this->server = $match[2];
+            if ($port) {
+                $this->port = $port;
+            }
+        } else {
+            $this->server   = $match[2];
+            $this->protocol = 'ssl://';
+            if ($port) {
+                $this->port = $port;
+            } else {
+                $this->port = 443;
+            }
+        }
+
+        if ($proxy) {
+            preg_match('@^(http://|https://|ssl://)?(.*)$@', $proxy, $match);
+            if ($match[1] == '') {
+                if ($proxy_port == 443) {
+                    $this->proxy          = $match[2];
+                    $this->proxy_protocol = 'ssl://';
+                    $this->proxy_port     = 443;
+                } else {
+                    $this->proxy = $match[2];
+                    if ($proxy_port) {
+                        $this->proxy_port = $proxy_port;
+                    }
+                }
+            } elseif ($match[1] == 'http://') {
+                $this->proxy = $match[2];
+                if ($proxy_port) {
+                    $this->proxy_port = $proxy_port;
+                }
+            } else {
+                $this->proxy          = $match[2];
+                $this->proxy_protocol = 'ssl://';
+                if ($proxy_port) {
+                    $this->proxy_port = $proxy_port;
+                } else {
+                    $this->proxy_port = 443;
+                }
+            }
+        }
+    }
+
+    /**
+     * Change the current debug mode
+     *
+     * @param int $in  where 1 = on, 0 = off
+     *
+     * @return void
+     */
+    function setDebug($in)
+    {
+        if ($in) {
+            $this->debug = 1;
+        } else {
+            $this->debug = 0;
+        }
+    }
+
+    /**
+     * Set username and password properties for connecting to the RPC server
+     *
+     * @param string $u  the user name
+     * @param string $p  the password
+     *
+     * @return void
+     *
+     * @see XML_RPC_Client::$username, XML_RPC_Client::$password
+     */
+    function setCredentials($u, $p)
+    {
+        $this->username = $u;
+        $this->password = $p;
+    }
+
+    /**
+     * Transmit the RPC request via HTTP 1.0 protocol
+     *
+     * @param object $msg       the XML_RPC_Message object
+     * @param int    $timeout   how many seconds to wait for the request
+     *
+     * @return object  an XML_RPC_Response object.  0 is returned if any
+     *                  problems happen.
+     *
+     * @see XML_RPC_Message, XML_RPC_Client::XML_RPC_Client(),
+     *      XML_RPC_Client::setCredentials()
+     */
+    function send($msg, $timeout = 0)
+    {
+        if (!is_a($msg, 'XML_RPC_Message')) {
+            $this->errstr = 'send()\'s $msg parameter must be an'
+                          . ' XML_RPC_Message object.';
+            $this->raiseError($this->errstr, XML_RPC_ERROR_PROGRAMMING);
+            return 0;
+        }
+        $msg->debug = $this->debug;
+        return $this->sendPayloadHTTP10($msg, $this->server, $this->port,
+                                        $timeout, $this->username,
+                                        $this->password);
+    }
+
+    /**
+     * Transmit the RPC request via HTTP 1.0 protocol
+     *
+     * Requests should be sent using XML_RPC_Client send() rather than
+     * calling this method directly.
+     *
+     * @param object $msg       the XML_RPC_Message object
+     * @param string $server    the server to send the request to
+     * @param int    $port      the server port send the request to
+     * @param int    $timeout   how many seconds to wait for the request
+     *                           before giving up
+     * @param string $username  a user name for accessing the RPC server
+     * @param string $password  a password for accessing the RPC server
+     *
+     * @return object  an XML_RPC_Response object.  0 is returned if any
+     *                  problems happen.
+     *
+     * @access protected
+     * @see XML_RPC_Client::send()
+     */
+    function sendPayloadHTTP10($msg, $server, $port, $timeout = 0,
+                               $username = '', $password = '')
+    {
+        /*
+         * If we're using a proxy open a socket to the proxy server
+         * instead to the xml-rpc server
+         */
+        if ($this->proxy) {
+            if ($this->proxy_protocol == 'http://') {
+                $protocol = '';
+            } else {
+                $protocol = $this->proxy_protocol;
+            }
+            if ($timeout > 0) {
+                $fp = @fsockopen($protocol . $this->proxy, $this->proxy_port,
+                                 $this->errno, $this->errstr, $timeout);
+            } else {
+                $fp = @fsockopen($protocol . $this->proxy, $this->proxy_port,
+                                 $this->errno, $this->errstr);
+            }
+        } else {
+            if ($this->protocol == 'http://') {
+                $protocol = '';
+            } else {
+                $protocol = $this->protocol;
+            }
+            if ($timeout > 0) {
+                $fp = @fsockopen($protocol . $server, $port,
+                                 $this->errno, $this->errstr, $timeout);
+            } else {
+                $fp = @fsockopen($protocol . $server, $port,
+                                 $this->errno, $this->errstr);
+            }
+        }
+
+        /*
+         * Just raising the error without returning it is strange,
+         * but keep it here for backwards compatibility.
+         */
+        if (!$fp && $this->proxy) {
+            $this->raiseError('Connection to proxy server '
+                              . $this->proxy . ':' . $this->proxy_port
+                              . ' failed. ' . $this->errstr,
+                              XML_RPC_ERROR_CONNECTION_FAILED);
+            return 0;
+        } elseif (!$fp) {
+            $this->raiseError('Connection to RPC server '
+                              . $server . ':' . $port
+                              . ' failed. ' . $this->errstr,
+                              XML_RPC_ERROR_CONNECTION_FAILED);
+            return 0;
+        }
+
+        if ($timeout) {
+            /*
+             * Using socket_set_timeout() because stream_set_timeout()
+             * was introduced in 4.3.0, but we need to support 4.2.0.
+             */
+            socket_set_timeout($fp, $timeout);
+        }
+
+        // Pre-emptive BC hacks for fools calling sendPayloadHTTP10() directly
+        if ($username != $this->username) {
+            $this->setCredentials($username, $password);
+        }
+
+        // Only create the payload if it was not created previously
+        if (empty($msg->payload)) {
+            $msg->createPayload();
+        }
+        $this->createHeaders($msg);
+
+        $op  = $this->headers . "\r\n\r\n";
+        $op .= $msg->payload;
+
+        if (!fputs($fp, $op, strlen($op))) {
+            $this->errstr = 'Write error';
+            return 0;
+        }
+        $resp = $msg->parseResponseFile($fp);
+
+        $meta = socket_get_status($fp);
+        if ($meta['timed_out']) {
+            fclose($fp);
+            $this->errstr = 'RPC server did not send response before timeout.';
+            $this->raiseError($this->errstr, XML_RPC_ERROR_CONNECTION_FAILED);
+            return 0;
+        }
+
+        fclose($fp);
+        return $resp;
+    }
+
+    /**
+     * Determines the HTTP headers and puts it in the $headers property
+     *
+     * @param object $msg       the XML_RPC_Message object
+     *
+     * @return boolean  TRUE if okay, FALSE if the message payload isn't set.
+     *
+     * @access protected
+     */
+    function createHeaders($msg)
+    {
+        if (empty($msg->payload)) {
+            return false;
+        }
+        if ($this->proxy) {
+            $this->headers = 'POST ' . $this->protocol . $this->server;
+            if ($this->proxy_port) {
+                $this->headers .= ':' . $this->port;
+            }
+        } else {
+           $this->headers = 'POST ';
+        }
+        $this->headers .= $this->path. " HTTP/1.0\r\n";
+
+        $this->headers .= "User-Agent: PEAR XML_RPC\r\n";
+        $this->headers .= 'Host: ' . $this->server . "\r\n";
+
+        if ($this->proxy && $this->proxy_user) {
+            $this->headers .= 'Proxy-Authorization: Basic '
+                     . base64_encode("$this->proxy_user:$this->proxy_pass")
+                     . "\r\n";
+        }
+
+        // thanks to Grant Rauscher <grant7@firstworld.net> for this
+        if ($this->username) {
+            $this->headers .= 'Authorization: Basic '
+                     . base64_encode("$this->username:$this->password")
+                     . "\r\n";
+        }
+
+        $this->headers .= "Content-Type: text/xml\r\n";
+        $this->headers .= 'Content-Length: ' . strlen($msg->payload);
+        return true;
+    }
+}
+
+/**
+ * The methods and properties for interpreting responses to XML RPC requests
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Response extends XML_RPC_Base
+{
+    var $xv;
+    var $fn;
+    var $fs;
+    var $hdrs;
+
+    /**
+     * @return void
+     */
+    function XML_RPC_Response($val, $fcode = 0, $fstr = '')
+    {
+        if ($fcode != 0) {
+            $this->fn = $fcode;
+            $this->fs = htmlspecialchars($fstr);
+        } else {
+            $this->xv = $val;
+        }
+    }
+
+    /**
+     * @return int  the error code
+     */
+    function faultCode()
+    {
+        if (isset($this->fn)) {
+            return $this->fn;
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * @return string  the error string
+     */
+    function faultString()
+    {
+        return $this->fs;
+    }
+
+    /**
+     * @return mixed  the value
+     */
+    function value()
+    {
+        return $this->xv;
+    }
+
+    /**
+     * @return string  the error message in XML format
+     */
+    function serialize()
+    {
+        $rs = "<methodResponse>\n";
+        if ($this->fn) {
+            $rs .= "<fault>
+  <value>
+    <struct>
+      <member>
+        <name>faultCode</name>
+        <value><int>" . $this->fn . "</int></value>
+      </member>
+      <member>
+        <name>faultString</name>
+        <value><string>" . $this->fs . "</string></value>
+      </member>
+    </struct>
+  </value>
+</fault>";
+        } else {
+            $rs .= "<params>\n<param>\n" . $this->xv->serialize() .
+        "</param>\n</params>";
+        }
+        $rs .= "\n</methodResponse>";
+        return $rs;
+    }
+}
+
+/**
+ * The methods and properties for composing XML RPC messages
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Message extends XML_RPC_Base
+{
+    /**
+     * The current debug mode (1 = on, 0 = off)
+     * @var integer
+     */
+    var $debug = 0;
+
+    /**
+     * The encoding to be used for outgoing messages
+     *
+     * Defaults to the value of <var>$GLOBALS['XML_RPC_defencoding']</var>
+     *
+     * @var string
+     * @see XML_RPC_Message::setSendEncoding(),
+     *      $GLOBALS['XML_RPC_defencoding'], XML_RPC_Message::xml_header()
+     */
+    var $send_encoding = '';
+
+    /**
+     * The method presently being evaluated
+     * @var string
+     */
+    var $methodname = '';
+
+    /**
+     * @var array
+     */
+    var $params = array();
+
+    /**
+     * The XML message being generated
+     * @var string
+     */
+    var $payload = '';
+
+    /**
+     * @return void
+     */
+    function XML_RPC_Message($meth, $pars = 0)
+    {
+        $this->methodname = $meth;
+        if (is_array($pars) && sizeof($pars) > 0) {
+            for ($i = 0; $i < sizeof($pars); $i++) {
+                $this->addParam($pars[$i]);
+            }
+        }
+    }
+
+    /**
+     * Produces the XML declaration including the encoding attribute
+     *
+     * The encoding is determined by this class' <var>$send_encoding</var>
+     * property.  If the <var>$send_encoding</var> property is not set, use
+     * <var>$GLOBALS['XML_RPC_defencoding']</var>.
+     *
+     * @return string  the XML declaration and <methodCall> element
+     *
+     * @see XML_RPC_Message::setSendEncoding(),
+     *      XML_RPC_Message::$send_encoding, $GLOBALS['XML_RPC_defencoding']
+     */
+    function xml_header()
+    {
+        global $XML_RPC_defencoding;
+        if (!$this->send_encoding) {
+            $this->send_encoding = $XML_RPC_defencoding;
+        }
+        return '<?xml version="1.0" encoding="' . $this->send_encoding . '"?>'
+               . "\n<methodCall>\n";
+    }
+
+    /**
+     * @return string  the closing </methodCall> tag
+     */
+    function xml_footer()
+    {
+        return "</methodCall>\n";
+    }
+
+    /**
+     * @return void
+     *
+     * @uses XML_RPC_Message::xml_header(), XML_RPC_Message::xml_footer()
+     */
+    function createPayload()
+    {
+        $this->payload = $this->xml_header();
+        $this->payload .= '<methodName>' . $this->methodname . "</methodName>\n";
+        $this->payload .= "<params>\n";
+        for ($i = 0; $i < sizeof($this->params); $i++) {
+            $p = $this->params[$i];
+            $this->payload .= "<param>\n" . $p->serialize() . "</param>\n";
+        }
+        $this->payload .= "</params>\n";
+        $this->payload .= $this->xml_footer();
+        $this->payload = ereg_replace("[\r\n]+", "\r\n", $this->payload);
+    }
+
+    /**
+     * @return string  the name of the method
+     */
+    function method($meth = '')
+    {
+        if ($meth != '') {
+            $this->methodname = $meth;
+        }
+        return $this->methodname;
+    }
+
+    /**
+     * @return string  the payload
+     */
+    function serialize()
+    {
+        $this->createPayload();
+        return $this->payload;
+    }
+
+    /**
+     * @return void
+     */
+    function addParam($par)
+    {
+        $this->params[] = $par;
+    }
+
+    /**
+     * Obtains an XML_RPC_Value object for the given parameter
+     *
+     * @param int $i  the index number of the parameter to obtain
+     *
+     * @return object  the XML_RPC_Value object.
+     *                  If the parameter doesn't exist, an XML_RPC_Response object.
+     *
+     * @since Returns XML_RPC_Response object on error since Release 1.3.0
+     */
+    function getParam($i)
+    {
+        global $XML_RPC_err, $XML_RPC_str;
+
+        if (isset($this->params[$i])) {
+            return $this->params[$i];
+        } else {
+            $this->raiseError('The submitted request did not contain this parameter',
+                              XML_RPC_ERROR_INCORRECT_PARAMS);
+            return new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'],
+                                        $XML_RPC_str['incorrect_params']);
+        }
+    }
+
+    /**
+     * @return int  the number of parameters
+     */
+    function getNumParams()
+    {
+        return sizeof($this->params);
+    }
+
+    /**
+     * Sets the XML declaration's encoding attribute
+     *
+     * @param string $type  the encoding type (ISO-8859-1, UTF-8 or US-ASCII)
+     *
+     * @return void
+     *
+     * @see XML_RPC_Message::$send_encoding, XML_RPC_Message::xml_header()
+     * @since Method available since Release 1.2.0
+     */
+    function setSendEncoding($type)
+    {
+        $this->send_encoding = $type;
+    }
+
+    /**
+     * Determine the XML's encoding via the encoding attribute
+     * in the XML declaration
+     *
+     * If the encoding parameter is not set or is not ISO-8859-1, UTF-8
+     * or US-ASCII, $XML_RPC_defencoding will be returned.
+     *
+     * @param string $data  the XML that will be parsed
+     *
+     * @return string  the encoding to be used
+     *
+     * @link   http://php.net/xml_parser_create
+     * @since  Method available since Release 1.2.0
+     */
+    function getEncoding($data)
+    {
+        global $XML_RPC_defencoding;
+
+        if (preg_match('/<\?xml[^>]*\s*encoding\s*=\s*[\'"]([^"\']*)[\'"]/i',
+                       $data, $match))
+        {
+            $match[1] = trim(strtoupper($match[1]));
+            switch ($match[1]) {
+                case 'ISO-8859-1':
+                case 'UTF-8':
+                case 'US-ASCII':
+                    return $match[1];
+                    break;
+
+                default:
+                    return $XML_RPC_defencoding;
+            }
+        } else {
+            return $XML_RPC_defencoding;
+        }
+    }
+
+    /**
+     * @return object  a new XML_RPC_Response object
+     */
+    function parseResponseFile($fp)
+    {
+        $ipd = '';
+        while ($data = @fread($fp, 8192)) {
+            $ipd .= $data;
+        }
+        return $this->parseResponse($ipd);
+    }
+
+    /**
+     * @return object  a new XML_RPC_Response object
+     */
+    function parseResponse($data = '')
+    {
+        global $XML_RPC_xh, $XML_RPC_err, $XML_RPC_str, $XML_RPC_defencoding;
+
+        $encoding = $this->getEncoding($data);
+        $parser_resource = xml_parser_create($encoding);
+        $parser = (int) $parser_resource;
+
+        $XML_RPC_xh = array();
+        $XML_RPC_xh[$parser] = array();
+
+        $XML_RPC_xh[$parser]['cm'] = 0;
+        $XML_RPC_xh[$parser]['isf'] = 0;
+        $XML_RPC_xh[$parser]['ac'] = '';
+        $XML_RPC_xh[$parser]['qt'] = '';
+        $XML_RPC_xh[$parser]['stack'] = array();
+        $XML_RPC_xh[$parser]['valuestack'] = array();
+
+        xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true);
+        xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee');
+        xml_set_character_data_handler($parser_resource, 'XML_RPC_cd');
+
+        $hdrfnd = 0;
+        if ($this->debug) {
+            print "\n<pre>---GOT---\n";
+            print isset($_SERVER['SERVER_PROTOCOL']) ? htmlspecialchars($data) : $data;
+            print "\n---END---</pre>\n";
+        }
+
+        // See if response is a 200 or a 100 then a 200, else raise error.
+        // But only do this if we're using the HTTP protocol.
+        if (ereg('^HTTP', $data) &&
+            !ereg('^HTTP/[0-9\.]+ 200 ', $data) &&
+            !preg_match('@^HTTP/[0-9\.]+ 10[0-9]([A-Za-z ]+)?[\r\n]+HTTP/[0-9\.]+ 200@', $data))
+        {
+                $errstr = substr($data, 0, strpos($data, "\n") - 1);
+                error_log('HTTP error, got response: ' . $errstr);
+                $r = new XML_RPC_Response(0, $XML_RPC_err['http_error'],
+                                          $XML_RPC_str['http_error'] . ' (' .
+                                          $errstr . ')');
+                xml_parser_free($parser_resource);
+                return $r;
+        }
+
+        // gotta get rid of headers here
+        if (!$hdrfnd && ($brpos = strpos($data,"\r\n\r\n"))) {
+            $XML_RPC_xh[$parser]['ha'] = substr($data, 0, $brpos);
+            $data = substr($data, $brpos + 4);
+            $hdrfnd = 1;
+        }
+
+        /*
+         * be tolerant of junk after methodResponse
+         * (e.g. javascript automatically inserted by free hosts)
+         * thanks to Luca Mariano <luca.mariano@email.it>
+         */
+        $data = substr($data, 0, strpos($data, "</methodResponse>") + 17);
+
+        if (!xml_parse($parser_resource, $data, sizeof($data))) {
+            // thanks to Peter Kocks <peter.kocks@baygate.com>
+            if (xml_get_current_line_number($parser_resource) == 1) {
+                $errstr = 'XML error at line 1, check URL';
+            } else {
+                $errstr = sprintf('XML error: %s at line %d',
+                                  xml_error_string(xml_get_error_code($parser_resource)),
+                                  xml_get_current_line_number($parser_resource));
+            }
+            error_log($errstr);
+            $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'],
+                                      $XML_RPC_str['invalid_return']);
+            xml_parser_free($parser_resource);
+            return $r;
+        }
+
+        xml_parser_free($parser_resource);
+
+        if ($this->debug) {
+            print "\n<pre>---PARSED---\n";
+            var_dump($XML_RPC_xh[$parser]['value']);
+            print "---END---</pre>\n";
+        }
+
+        if ($XML_RPC_xh[$parser]['isf'] > 1) {
+            $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'],
+                                      $XML_RPC_str['invalid_return'].' '.$XML_RPC_xh[$parser]['isf_reason']);
+        } elseif (!is_object($XML_RPC_xh[$parser]['value'])) {
+            // then something odd has happened
+            // and it's time to generate a client side error
+            // indicating something odd went on
+            $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'],
+                                      $XML_RPC_str['invalid_return']);
+        } else {
+            $v = $XML_RPC_xh[$parser]['value'];
+            $allOK=1;
+            if ($XML_RPC_xh[$parser]['isf']) {
+                $f = $v->structmem('faultCode');
+                $fs = $v->structmem('faultString');
+                $r = new XML_RPC_Response($v, $f->scalarval(),
+                                          $fs->scalarval());
+            } else {
+                $r = new XML_RPC_Response($v);
+            }
+        }
+        $r->hdrs = split("\r?\n", $XML_RPC_xh[$parser]['ha'][1]);
+        return $r;
+    }
+}
+
+/**
+ * The methods and properties that represent data in XML RPC format
+ *
+ * @category   Web Services
+ * @package    XML_RPC
+ * @author     Edd Dumbill <edd@usefulinc.com>
+ * @author     Stig Bakken <stig@php.net>
+ * @author     Martin Jansen <mj@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1999-2001 Edd Dumbill, 2001-2005 The PHP Group
+ * @version    Release: 1.4.5
+ * @link       http://pear.php.net/package/XML_RPC
+ */
+class XML_RPC_Value extends XML_RPC_Base
+{
+    var $me = array();
+    var $mytype = 0;
+
+    /**
+     * @return void
+     */
+    function XML_RPC_Value($val = -1, $type = '')
+    {
+        global $XML_RPC_Types;
+        $this->me = array();
+        $this->mytype = 0;
+        if ($val != -1 || $type != '') {
+            if ($type == '') {
+                $type = 'string';
+            }
+            if (!array_key_exists($type, $XML_RPC_Types)) {
+                // XXX
+                // need some way to report this error
+            } elseif ($XML_RPC_Types[$type] == 1) {
+                $this->addScalar($val, $type);
+            } elseif ($XML_RPC_Types[$type] == 2) {
+                $this->addArray($val);
+            } elseif ($XML_RPC_Types[$type] == 3) {
+                $this->addStruct($val);
+            }
+        }
+    }
+
+    /**
+     * @return int  returns 1 if successful or 0 if there are problems
+     */
+    function addScalar($val, $type = 'string')
+    {
+        global $XML_RPC_Types, $XML_RPC_Boolean;
+
+        if ($this->mytype == 1) {
+            $this->raiseError('Scalar can have only one value',
+                              XML_RPC_ERROR_INVALID_TYPE);
+            return 0;
+        }
+        $typeof = $XML_RPC_Types[$type];
+        if ($typeof != 1) {
+            $this->raiseError("Not a scalar type (${typeof})",
+                              XML_RPC_ERROR_INVALID_TYPE);
+            return 0;
+        }
+
+        if ($type == $XML_RPC_Boolean) {
+            if (strcasecmp($val, 'true') == 0
+                || $val == 1
+                || ($val == true && strcasecmp($val, 'false')))
+            {
+                $val = 1;
+            } else {
+                $val = 0;
+            }
+        }
+
+        if ($this->mytype == 2) {
+            // we're adding to an array here
+            $ar = $this->me['array'];
+            $ar[] = new XML_RPC_Value($val, $type);
+            $this->me['array'] = $ar;
+        } else {
+            // a scalar, so set the value and remember we're scalar
+            $this->me[$type] = $val;
+            $this->mytype = $typeof;
+        }
+        return 1;
+    }
+
+    /**
+     * @return int  returns 1 if successful or 0 if there are problems
+     */
+    function addArray($vals)
+    {
+        global $XML_RPC_Types;
+        if ($this->mytype != 0) {
+            $this->raiseError(
+                    'Already initialized as a [' . $this->kindOf() . ']',
+                    XML_RPC_ERROR_ALREADY_INITIALIZED);
+            return 0;
+        }
+        $this->mytype = $XML_RPC_Types['array'];
+        $this->me['array'] = $vals;
+        return 1;
+    }
+
+    /**
+     * @return int  returns 1 if successful or 0 if there are problems
+     */
+    function addStruct($vals)
+    {
+        global $XML_RPC_Types;
+        if ($this->mytype != 0) {
+            $this->raiseError(
+                    'Already initialized as a [' . $this->kindOf() . ']',
+                    XML_RPC_ERROR_ALREADY_INITIALIZED);
+            return 0;
+        }
+        $this->mytype = $XML_RPC_Types['struct'];
+        $this->me['struct'] = $vals;
+        return 1;
+    }
+
+    /**
+     * @return void
+     */
+    function dump($ar)
+    {
+        reset($ar);
+        foreach ($ar as $key => $val) {
+            echo "$key => $val<br />";
+            if ($key == 'array') {
+                foreach ($val as $key2 => $val2) {
+                    echo "-- $key2 => $val2<br />";
+                }
+            }
+        }
+    }
+
+    /**
+     * @return string  the data type of the current value
+     */
+    function kindOf()
+    {
+        switch ($this->mytype) {
+        case 3:
+            return 'struct';
+
+        case 2:
+            return 'array';
+
+        case 1:
+            return 'scalar';
+
+        default:
+            return 'undef';
+        }
+    }
+
+    /**
+     * @return string  the data in XML format
+     */
+    function serializedata($typ, $val)
+    {
+        $rs = '';
+        global $XML_RPC_Types, $XML_RPC_Base64, $XML_RPC_String, $XML_RPC_Boolean;
+        if (!array_key_exists($typ, $XML_RPC_Types)) {
+            // XXX
+            // need some way to report this error
+            return;
+        }
+        switch ($XML_RPC_Types[$typ]) {
+        case 3:
+            // struct
+            $rs .= "<struct>\n";
+            reset($val);
+            foreach ($val as $key2 => $val2) {
+                $rs .= "<member><name>${key2}</name>\n";
+                $rs .= $this->serializeval($val2);
+                $rs .= "</member>\n";
+            }
+            $rs .= '</struct>';
+            break;
+
+        case 2:
+            // array
+            $rs .= "<array>\n<data>\n";
+            for ($i = 0; $i < sizeof($val); $i++) {
+                $rs .= $this->serializeval($val[$i]);
+            }
+            $rs .= "</data>\n</array>";
+            break;
+
+        case 1:
+            switch ($typ) {
+            case $XML_RPC_Base64:
+                $rs .= "<${typ}>" . base64_encode($val) . "</${typ}>";
+                break;
+            case $XML_RPC_Boolean:
+                $rs .= "<${typ}>" . ($val ? '1' : '0') . "</${typ}>";
+                break;
+            case $XML_RPC_String:
+                $rs .= "<${typ}>" . htmlspecialchars($val). "</${typ}>";
+                break;
+            default:
+                $rs .= "<${typ}>${val}</${typ}>";
+            }
+        }
+        return $rs;
+    }
+
+    /**
+     * @return string  the data in XML format
+     */
+    function serialize()
+    {
+        return $this->serializeval($this);
+    }
+
+    /**
+     * @return string  the data in XML format
+     */
+    function serializeval($o)
+    {
+        if (!is_object($o) || empty($o->me) || !is_array($o->me)) {
+            return '';
+        }
+        $ar = $o->me;
+        reset($ar);
+        list($typ, $val) = each($ar);
+        return '<value>' .  $this->serializedata($typ, $val) .  "</value>\n";
+    }
+
+    /**
+     * @return mixed  the contents of the element requested
+     */
+    function structmem($m)
+    {
+        return $this->me['struct'][$m];
+    }
+
+    /**
+     * @return void
+     */
+    function structreset()
+    {
+        reset($this->me['struct']);
+    }
+
+    /**
+     * @return  the key/value pair of the struct's current element
+     */
+    function structeach()
+    {
+        return each($this->me['struct']);
+    }
+
+    /**
+     * @return mixed  the current value
+     */
+    function getval()
+    {
+        // UNSTABLE
+        global $XML_RPC_BOOLEAN, $XML_RPC_Base64;
+
+        reset($this->me);
+        $b = current($this->me);
+
+        // contributed by I Sofer, 2001-03-24
+        // add support for nested arrays to scalarval
+        // i've created a new method here, so as to
+        // preserve back compatibility
+
+        if (is_array($b)) {
+            foreach ($b as $id => $cont) {
+                $b[$id] = $cont->scalarval();
+            }
+        }
+
+        // add support for structures directly encoding php objects
+        if (is_object($b)) {
+            $t = get_object_vars($b);
+            foreach ($t as $id => $cont) {
+                $t[$id] = $cont->scalarval();
+            }
+            foreach ($t as $id => $cont) {
+                $b->$id = $cont;
+            }
+        }
+
+        // end contrib
+        return $b;
+    }
+
+    /**
+     * @return mixed
+     */
+    function scalarval()
+    {
+        global $XML_RPC_Boolean, $XML_RPC_Base64;
+        reset($this->me);
+        return current($this->me);
+    }
+
+    /**
+     * @return string
+     */
+    function scalartyp()
+    {
+        global $XML_RPC_I4, $XML_RPC_Int;
+        reset($this->me);
+        $a = key($this->me);
+        if ($a == $XML_RPC_I4) {
+            $a = $XML_RPC_Int;
+        }
+        return $a;
+    }
+
+    /**
+     * @return mixed  the struct's current element
+     */
+    function arraymem($m)
+    {
+        return $this->me['array'][$m];
+    }
+
+    /**
+     * @return int  the number of elements in the array
+     */
+    function arraysize()
+    {
+        reset($this->me);
+        list($a, $b) = each($this->me);
+        return sizeof($b);
+    }
+
+    /**
+     * Determines if the item submitted is an XML_RPC_Value object
+     *
+     * @param mixed $val  the variable to be evaluated
+     *
+     * @return bool  TRUE if the item is an XML_RPC_Value object
+     *
+     * @static
+     * @since Method available since Release 1.3.0
+     */
+    function isValue($val)
+    {
+        return (strtolower(get_class($val)) == 'xml_rpc_value');
+    }
+}
+
+/**
+ * Return an ISO8601 encoded string
+ *
+ * While timezones ought to be supported, the XML-RPC spec says:
+ *
+ * "Don't assume a timezone. It should be specified by the server in its
+ * documentation what assumptions it makes about timezones."
+ *
+ * This routine always assumes localtime unless $utc is set to 1, in which
+ * case UTC is assumed and an adjustment for locale is made when encoding.
+ *
+ * @return string  the formatted date
+ */
+function XML_RPC_iso8601_encode($timet, $utc = 0)
+{
+    if (!$utc) {
+        $t = strftime('%Y%m%dT%H:%M:%S', $timet);
+    } else {
+        if (function_exists('gmstrftime')) {
+            // gmstrftime doesn't exist in some versions
+            // of PHP
+            $t = gmstrftime('%Y%m%dT%H:%M:%S', $timet);
+        } else {
+            $t = strftime('%Y%m%dT%H:%M:%S', $timet - date('Z'));
+        }
+    }
+    return $t;
+}
+
+/**
+ * Convert a datetime string into a Unix timestamp
+ *
+ * While timezones ought to be supported, the XML-RPC spec says:
+ *
+ * "Don't assume a timezone. It should be specified by the server in its
+ * documentation what assumptions it makes about timezones."
+ *
+ * This routine always assumes localtime unless $utc is set to 1, in which
+ * case UTC is assumed and an adjustment for locale is made when encoding.
+ *
+ * @return int  the unix timestamp of the date submitted
+ */
+function XML_RPC_iso8601_decode($idate, $utc = 0)
+{
+    $t = 0;
+    if (ereg('([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})', $idate, $regs)) {
+        if ($utc) {
+            $t = gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+        } else {
+            $t = mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+        }
+    }
+    return $t;
+}
+
+/**
+ * Converts an XML_RPC_Value object into native PHP types
+ *
+ * @param object $XML_RPC_val  the XML_RPC_Value object to decode
+ *
+ * @return mixed  the PHP values
+ */
+function XML_RPC_decode($XML_RPC_val)
+{
+    $kind = $XML_RPC_val->kindOf();
+
+    if ($kind == 'scalar') {
+        return $XML_RPC_val->scalarval();
+
+    } elseif ($kind == 'array') {
+        $size = $XML_RPC_val->arraysize();
+        $arr = array();
+        for ($i = 0; $i < $size; $i++) {
+            $arr[] = XML_RPC_decode($XML_RPC_val->arraymem($i));
+        }
+        return $arr;
+
+    } elseif ($kind == 'struct') {
+        $XML_RPC_val->structreset();
+        $arr = array();
+        while (list($key, $value) = $XML_RPC_val->structeach()) {
+            $arr[$key] = XML_RPC_decode($value);
+        }
+        return $arr;
+    }
+}
+
+/**
+ * Converts native PHP types into an XML_RPC_Value object
+ *
+ * @param mixed $php_val  the PHP value or variable you want encoded
+ *
+ * @return object  the XML_RPC_Value object
+ */
+function XML_RPC_encode($php_val)
+{
+    global $XML_RPC_Boolean, $XML_RPC_Int, $XML_RPC_Double, $XML_RPC_String,
+           $XML_RPC_Array, $XML_RPC_Struct, $XML_RPC_DateTime;
+
+    $type = gettype($php_val);
+    $XML_RPC_val = new XML_RPC_Value;
+
+    switch ($type) {
+    case 'array':
+        if (empty($php_val)) {
+            $XML_RPC_val->addArray($php_val);
+            break;
+        }
+        $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1));
+        if (empty($tmp)) {
+           $arr = array();
+           foreach ($php_val as $k => $v) {
+               $arr[$k] = XML_RPC_encode($v);
+           }
+           $XML_RPC_val->addArray($arr);
+           break;
+        }
+        // fall though if it's not an enumerated array
+
+    case 'object':
+        $arr = array();
+        foreach ($php_val as $k => $v) {
+            $arr[$k] = XML_RPC_encode($v);
+        }
+        $XML_RPC_val->addStruct($arr);
+        break;
+
+    case 'integer':
+        $XML_RPC_val->addScalar($php_val, $XML_RPC_Int);
+        break;
+
+    case 'double':
+        $XML_RPC_val->addScalar($php_val, $XML_RPC_Double);
+        break;
+
+    case 'string':
+    case 'NULL':
+        if(ereg('^[0-9]{8}\T{1}[0-9]{2}\:[0-9]{2}\:[0-9]{2}$', $php_val)) {
+            $XML_RPC_val->addScalar($php_val, $XML_RPC_DateTime);
+        } else {
+            $XML_RPC_val->addScalar($php_val, $XML_RPC_String);
+        }
+        break;
+
+    case 'boolean':
+        // Add support for encoding/decoding of booleans, since they
+        // are supported in PHP
+        // by <G_Giunta_2001-02-29>
+        $XML_RPC_val->addScalar($php_val, $XML_RPC_Boolean);
+        break;
+
+    case 'unknown type':
+    default:
+        $XML_RPC_val = false;
+    }
+    return $XML_RPC_val;
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff -ruN 1.3.11sr1/directory.php 1.4.0sr5-1/directory.php
--- 1.3.11sr1/directory.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/directory.php	2006-08-08 02:53:59.000000000 -0500
@@ -0,0 +1,466 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | directory.php                                                             |
+// |                                                                           |
+// | Directory of all the stories on a Geeklog site.                           |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2004-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: directory.php,v 1.4 2005/12/28 10:11:48 dhaun Exp $
+
+require_once ('lib-common.php');
+
+// configuration option:
+// List stories for the current month on top of the overview page
+// (if set = true)
+$conf_list_current_month = false;
+
+// name of this script
+define ('THIS_SCRIPT', 'directory.php');
+
+$display = '';
+
+if (empty ($_USER['username']) && (($_CONF['loginrequired'] == 1) ||
+                                   ($_CONF['directoryloginrequired'] == 1))) {
+    $display = COM_siteHeader ('menu', $LANG_DIR['title']);
+    $display .= COM_startBlock ($LANG_LOGIN[1], '',
+                                COM_getBlockTemplate ('_msg_block', 'header'));
+    $login = new Template ($_CONF['path_layout'] . 'submit');
+    $login->set_file (array ('login' => 'submitloginrequired.thtml'));
+    $login->set_var ('site_url', $_CONF['site_url']);
+    $login->set_var ('layout_url', $_CONF['layout_url']);
+    $login->set_var ('login_message', $LANG_LOGIN[2]);
+    $login->set_var ('lang_login', $LANG_LOGIN[3]);
+    $login->set_var ('lang_newuser', $LANG_LOGIN[4]);
+    $login->parse ('output', 'login');
+    $display .= $login->finish ($login->get_var ('output'));
+    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    $display .= COM_siteFooter ();
+    echo $display; 
+    exit;
+}
+
+/**
+* Display a topic selection drop-down menu
+*
+* @param    string  $topic          current topic
+* @param    int     $year           current year
+* @param    int     $month          current month
+* @param    bool    $standalone     true: don't display form inline
+*
+*/
+function DIR_topicList ($topic = 'all', $year = 0, $month = 0, $standalone = false)
+{
+    global $_CONF, $LANG21;
+
+    $retval = '';
+
+    $url = $_CONF['site_url'] . '/' . THIS_SCRIPT;
+    $retval .= '<form action="' . $url . '" method="POST"';
+    if (!$standalone) {
+        $retval .= ' style="display:inline; float:right"' . LB;
+    }
+    $retval .= '>' . LB;
+    $retval .= '<select name="topic" onchange="this.form.submit()">' . LB;
+    $retval .= '<option value="all"';
+    if ($topic == 'all') {
+        $retval .= ' selected="selected"';
+    }
+    $retval .= '>' . $LANG21[7] . '</option>' . LB;
+    $retval .= COM_topicList ('tid,topic', $topic);
+    $retval .= '</select>' . LB;
+    $retval .= '<input type="hidden" name="year" value="' . $year . '">';
+    $retval .= '<input type="hidden" name="month" value="' . $month . '">';
+    $retval .= '</form>' . LB;
+
+    return $retval;
+}
+
+/**
+* Build link to a month's page
+*
+* @param    string  $topic  current topic
+* @param    int     $year   year to link to
+* @param    int     $month  month to link to
+* @param    int     $count  number of stories for that month (may be 0)
+* @return   string          month name + count, as link or plain text
+*
+*/
+function DIR_monthLink ($topic, $year, $month, $count)
+{
+    global $_CONF, $LANG30;
+
+    $retval = '';
+
+    if ($count > 0) {
+        $retval .= '<a href="' . COM_buildUrl ($_CONF['site_url'] . '/'
+                . THIS_SCRIPT . '?topic=' . urlencode ($topic) . '&amp;year='
+                . $year . '&amp;month=' . $month) . '">';
+    }
+
+    $retval .= $LANG30[$month + 12] . ' (' . COM_numberFormat ($count) . ')'
+            . LB;
+
+    if ($count > 0) {
+        $retval .= '</a>';
+    }
+
+    $retval .= LB;
+
+    return $retval;
+}
+
+/**
+* Display navigation bar
+*
+* @param    string  $topic  current topic
+* @param    int     $year   current year
+* @param    int     $month  current month (or 0 for year view pages)
+* @return   string          navigation bar with prev, next, and "up" links
+*
+*/
+function DIR_navBar ($topic, $year, $month = 0)
+{
+    global $_CONF, $_TABLES, $LANG05, $LANG_DIR;
+
+    $retval = '';
+
+    $retval .= '<div class="pagenav">';
+
+    if ($month == 0) {
+        $prevyear = $year - 1;
+        $nextyear = $year + 1;
+    } else {
+        $prevyear = $year;
+        $prevmonth = $month - 1;
+        if ($prevmonth == 0) {
+            $prevmonth = 12;
+            $prevyear--;
+        }
+        $nextyear = $year;
+        $nextmonth = $month + 1;
+        if ($nextmonth > 12) {
+            $nextmonth = 1;
+            $nextyear++;
+        }
+    }
+
+    $result = DB_query ("SELECT MIN(YEAR(date)) AS year FROM {$_TABLES['stories']}");
+    $A = DB_fetchArray ($result);
+    if ($prevyear < $A['year']) {
+        $prevyear = 0;
+    }
+
+    $currentyear = date ('Y', time ());
+    if ($nextyear > $currentyear) {
+        $nextyear = 0;
+    }
+
+    if ($prevyear > 0) {
+        $url = $_CONF['site_url'] . '/' . THIS_SCRIPT . '?topic='
+             . urlencode ($topic) . '&amp;year=' . $prevyear;
+        if ($month > 0) {
+            $url .= '&amp;month=' . $prevmonth;
+        }
+        $retval .= '<a href="' . COM_buildUrl ($url) . '">' . $LANG05[6]
+                . '</a>';
+    } else {
+        $retval .= $LANG05[6];
+    }
+
+    $retval .= ' | ';
+
+    $url = $_CONF['site_url'] . '/' . THIS_SCRIPT;
+    if ($topic != 'all') {
+        $url = COM_buildUrl ($url . '?topic=' . urlencode ($topic));
+    }
+    $retval .= '<a href="' . $url . '">' . $LANG_DIR['nav_top'] . '</a>';
+
+    $retval .= ' | ';
+
+    if ($nextyear > 0) {
+        $url = $_CONF['site_url'] . '/' . THIS_SCRIPT . '?topic='
+             . urlencode ($topic) . '&amp;year=' . $nextyear;
+        if ($month > 0) {
+            $url .= '&amp;month=' . $nextmonth;
+        }
+        $retval .= '<a href="' . COM_buildUrl ($url) . '">' . $LANG05[5]
+                . '</a>';
+    } else {
+        $retval .= $LANG05[5];
+    }
+
+    $retval .= '</div>' . LB;
+
+    return $retval;
+}
+
+/**
+* Display month view
+*
+* @param    string  $topic  current topic
+* @param    int     $year   year to display
+* @param    int     $month  month to display
+* @param    bool    $main   true: display view on its own page
+* @return   string          list of articles for the given month
+*
+*/
+function DIR_displayMonth ($topic, $year, $month, $main = false)
+{
+    global $_CONF, $_TABLES, $LANG30, $LANG_DIR;
+
+    $retval = '';
+
+    if ($main) {
+        $retval .= '<div><h1 style="display:inline">' . $LANG30[$month + 12]
+                . ' ' . $year . '</h1> ' . DIR_topicList ($topic, $year, $month)
+                . '</div>' . LB;
+    } else {
+        $retval .= '<h1>' . $LANG30[$month + 12] . ' ' . $year . '</h1>' . LB;
+    }
+
+    $start = sprintf ('%04d-%02d-01 00:00:00', $year, $month);
+    $end   = sprintf ('%04d-%02d-31 23:59:59', $year, $month);
+
+    $sql = "SELECT sid,title,UNIX_TIMESTAMP(date) AS day,DAYOFMONTH(date) AS mday FROM {$_TABLES['stories']} WHERE (date >= '$start') AND (date <= '$end') AND (draft_flag = 0) AND (date <= NOW())";
+    if ($topic != 'all') {
+        $sql .= " AND (tid = '$topic')";
+    }
+    $sql .= COM_getTopicSql ('AND') . COM_getPermSql ('AND') . " ORDER BY date ASC";
+
+    $result = DB_query ($sql);
+    $numrows = DB_numRows ($result);
+
+    if ($numrows > 0) {
+        $entries = array ();
+        $mday = 0;
+
+        for ($i = 0; $i < $numrows; $i++) {
+            $A = DB_fetchArray ($result);
+
+            if ($mday != $A['mday']) {
+                if (sizeof ($entries) > 0) {
+                    $retval .= COM_makeList ($entries);
+                    $entries = array ();
+                }
+
+                $curtime = COM_getUserDateTimeFormat ($A['day']);
+                $day = $curtime[0];
+
+                $day = strftime ($_CONF['shortdate'], $A['day']);
+
+                $retval .= '<h2>' . $day . '</h2>' . LB;
+
+                $mday = $A['mday'];
+            }
+
+            $url = COM_buildUrl ($_CONF['site_url'] . '/article.php?story='
+                                 . $A['sid']);
+            $entries[] = '<a href="' . $url . '">' . stripslashes ($A['title'])
+                       . '</a>';
+        }
+
+        if (sizeof ($entries) > 0) {
+            $retval .= COM_makeList ($entries);
+        }
+
+    } else {
+        $retval .= '<p>' . $LANG_DIR['no_articles'] . '</p>';
+    }
+
+    $retval .= LB;
+
+    return $retval;
+}
+
+/**
+* Display year view
+*
+* @param    string  $topic  current topic
+* @param    int     $year   year to display
+* @param    bool    $main   true: display view on its own page
+* @return   string          list of months (+ number of stories) for given year
+*
+*/
+function DIR_displayYear ($topic, $year, $main = false) 
+{
+    global $_CONF, $_TABLES, $LANG30, $LANG_DIR;
+
+    $retval = '';
+
+    if ($main) {
+        $retval .= '<div><h1 style="display:inline">' . $year . '</h1> '
+                . DIR_topicList ($topic, $year) . '</div>' . LB;
+    } else {
+        $retval .= '<h2>' . $year . '</h2>' . LB;
+    }
+
+    $currentyear = date ('Y', time ());
+    $currentmonth = date ('m', time ());
+
+    $start = sprintf ('%04d-01-01 00:00:00', $year);
+    $end   = sprintf ('%04d-12-31 23:59:59', $year);
+
+    $monthsql = "SELECT DISTINCT MONTH(date) AS month,COUNT(*) AS count FROM {$_TABLES['stories']} WHERE (date >= '$start') AND (date <= '$end') AND (draft_flag = 0) AND (date <= NOW())";
+    if ($topic != 'all') {
+        $monthsql .= " AND (tid = '$topic')";
+    }
+    $monthsql .= COM_getTopicSql ('AND') . COM_getPermSql ('AND') . " GROUP BY MONTH(date) ORDER BY date ASC";
+
+    $mresult = DB_query ($monthsql);
+    $nummonths = DB_numRows ($mresult);
+
+    if ($nummonths > 0) {
+        $retval .= '<ul>' . LB;
+        $lastm = 1;
+        for ($j = 0; $j < $nummonths; $j++) {
+            $M = DB_fetchArray ($mresult);
+
+            for (; $lastm < $M['month']; $lastm++) {
+                $retval .= '<li>' . DIR_monthLink ($topic, $year, $lastm, 0)
+                        . '</li>';
+            }
+            $lastm = $M['month'] + 1;
+
+            $retval .= '<li>' . DIR_monthLink ($topic, $year, $M['month'],
+                                               $M['count']) . '</li>';
+        }
+
+        if ($year == $currentyear) {
+            $fillm = $currentmonth;
+        } else {
+            $fillm = 12;
+        }
+
+        if ($lastm < $fillm) {
+            for (; $lastm <= $fillm; $lastm++) {
+                $retval .= '<li>' . DIR_monthLink ($topic, $year, $lastm, 0)
+                        . '</li>';
+            }
+        }
+
+        $retval .= '</ul>' . LB;
+    } else {
+        $retval .= '<p>' . $LANG_DIR['no_articles'] . '</p>';
+    }
+
+    $retval .= LB;
+
+    return $retval;
+}
+
+/**
+* Display main view (list of years)
+*
+* Displays an overview of all the years and months, starting with the first
+* year for which a story has been posted. Can optionally display a list of
+* the stories for the current month at the top of the page.
+*
+* @param    string  $topic                  current topic
+* @param    bool    $list_current_month     true = list stories f. current month
+* @return   string                          list of all the years in the db
+*
+*/
+function DIR_displayAll ($topic, $list_current_month = false)
+{
+    global $_TABLES, $LANG_DIR;
+
+    $retval = '';
+
+    if ($list_current_month) {
+        $currentyear = date ('Y', time ());
+        $currentmonth = date ('m', time ());
+
+        $retval .= DIR_displayMonth ($topic, $currentyear, $currentmonth);
+
+        $retval .= '<hr>' . LB;
+    }
+
+    $retval .= '<div><h1 style="display:inline">' . $LANG_DIR['title']
+            . '</h1> ' . DIR_topicList ($topic) . '</div>' . LB;
+
+    $yearsql = "SELECT DISTINCT YEAR(date) AS year FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW())" . COM_getTopicSql ('AND') . COM_getPermSql ('AND')  . " GROUP BY YEAR(date) ORDER BY date DESC";
+
+    $yresult = DB_query ($yearsql);
+    $numyears = DB_numRows ($yresult);
+
+    for ($i = 0; $i < $numyears; $i++) {
+        $Y = DB_fetchArray ($yresult);
+
+        $retval .= DIR_displayYear ($topic, $Y['year']);
+    }
+
+    return $retval;
+}
+
+// MAIN
+$display = '';
+
+if (isset ($_POST['topic']) && isset ($_POST['year']) && isset ($_POST['month'])) {
+    $topic = $_POST['topic'];
+    $year = $_POST['year'];
+    $month = $_POST['month'];
+} else {
+    COM_setArgNames (array ('topic', 'year', 'month'));
+    $topic = COM_getArgument ('topic');
+    $year = COM_getArgument ('year');
+    $month = COM_getArgument ('month');
+}
+
+$topic = COM_applyFilter ($topic);
+if (empty ($topic)) {
+    $topic = 'all';
+}
+$year = COM_applyFilter ($year, true);
+if ($year < 0) {
+    $year = 0;
+}
+$month = COM_applyFilter ($month, true);
+if (($month < 1) || ($month > 12)) {
+    $month = 0;
+}
+
+if (($year != 0) && ($month != 0)) {
+    $title = sprintf ($LANG_DIR['title_month_year'],
+                      $LANG30[$month + 12], $year);
+    $display .= COM_siteHeader ('menu', $title);
+    $display .= DIR_displayMonth ($topic, $year, $month, true);
+    $display .= DIR_navBar ($topic, $year, $month);
+} else if ($year != 0) {
+    $title = sprintf ($LANG_DIR['title_year'], $year);
+    $display .= COM_siteHeader ('menu', $title);
+    $display .= DIR_displayYear ($topic, $year, true);
+    $display .= DIR_navBar ($topic, $year);
+} else {
+    $display .= COM_siteHeader ('menu', $LANG_DIR['title']);
+    $display .= DIR_displayAll ($topic, $conf_list_current_month);
+}
+
+$display .= COM_siteFooter (true);
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/docs/changed-files 1.4.0sr5-1/docs/changed-files
--- 1.3.11sr1/docs/changed-files	2004-12-31 10:03:54.000000000 -0600
+++ 1.4.0sr5-1/docs/changed-files	2006-08-08 02:39:06.000000000 -0500
@@ -1,209 +1,15 @@
-geeklog-1.3.11/config.php
-geeklog-1.3.11/language/dutch.php
-geeklog-1.3.11/language/slovenian.php
-geeklog-1.3.11/plugins/spamx/BlackList.Examine.class.php
-geeklog-1.3.11/plugins/spamx/EditBlackList.Admin.class.php
-geeklog-1.3.11/plugins/spamx/LogView.Admin.class.php
-geeklog-1.3.11/plugins/spamx/MTBlackList.Examine.class.php
-geeklog-1.3.11/plugins/spamx/MailAdmin.Action.class.php
-geeklog-1.3.11/plugins/spamx/MassDelete.Admin.class.php
-geeklog-1.3.11/plugins/spamx/language/english.php
-geeklog-1.3.11/plugins/spamx/language/french_canada.php
-geeklog-1.3.11/plugins/spamx/language/french_france.php
-geeklog-1.3.11/plugins/staticpages/functions.inc
-geeklog-1.3.11/plugins/staticpages/language/czech.php
-geeklog-1.3.11/plugins/staticpages/language/danish.php
-geeklog-1.3.11/plugins/staticpages/language/dutch.php
-geeklog-1.3.11/plugins/staticpages/language/english.php
-geeklog-1.3.11/plugins/staticpages/language/french_canada.php
-geeklog-1.3.11/plugins/staticpages/language/german.php
-geeklog-1.3.11/plugins/staticpages/language/german_formal.php
-geeklog-1.3.11/plugins/staticpages/language/italian.php
-geeklog-1.3.11/plugins/staticpages/language/japanese.php
-geeklog-1.3.11/plugins/staticpages/language/polish.php
-geeklog-1.3.11/plugins/staticpages/language/portuguese_brazil.php
-geeklog-1.3.11/plugins/staticpages/language/spanish.php
-geeklog-1.3.11/plugins/staticpages/language/swedish.php
-geeklog-1.3.11/plugins/staticpages/language/turkish.php
-geeklog-1.3.11/public_html/admin/event.php
-geeklog-1.3.11/public_html/admin/install/install.php
-geeklog-1.3.11/public_html/admin/moderation.php
-geeklog-1.3.11/public_html/admin/poll.php
-geeklog-1.3.11/public_html/admin/story.php
-geeklog-1.3.11/public_html/admin/topic.php
-geeklog-1.3.11/public_html/calendar.php
-geeklog-1.3.11/public_html/calendar_event.php
-geeklog-1.3.11/public_html/comment.php
-geeklog-1.3.11/public_html/docs/changed-files
-geeklog-1.3.11/public_html/docs/changes.html
-geeklog-1.3.11/public_html/docs/config.html
-geeklog-1.3.11/public_html/docs/history
-geeklog-1.3.11/public_html/docs/index.html
-geeklog-1.3.11/public_html/docs/install.html
-geeklog-1.3.11/public_html/docs/theme.html
-geeklog-1.3.11/public_html/docs/themevars.html
-geeklog-1.3.11/public_html/layout/professional/calendar/events.thtml
-geeklog-1.3.11/public_html/layout/professional/header.thtml
-geeklog-1.3.11/public_html/lib-common.php
-geeklog-1.3.11/public_html/links.php
-geeklog-1.3.11/public_html/search.php
-geeklog-1.3.11/public_html/submit.php
-geeklog-1.3.11/public_html/usersettings.php
-geeklog-1.3.11/sql/mysql_tableanddata.php
-geeklog-1.3.11/sql/updates/mysql_1.3.10_to_1.3.11.php
-geeklog-1.3.11/system/classes/upload.class.php
-geeklog-1.3.11/system/lib-plugins.php
-geeklog-1.3.11/system/lib-security.php
-geeklog-1.3.11/system/lib-story.php
-geeklog-1.3.11/system/pear/OS/Guess.php
-geeklog-1.3.11/system/pear/PEAR/Builder.php
-geeklog-1.3.11/system/pear/PEAR/Command/Config.php
-geeklog-1.3.11/system/pear/PEAR/Command/Install.php
-geeklog-1.3.11/system/pear/PEAR/Command/Package.php
-geeklog-1.3.11/system/pear/PEAR/Command.php
-geeklog-1.3.11/system/pear/PEAR/Common.php
-geeklog-1.3.11/system/pear/PEAR/Downloader.php
-geeklog-1.3.11/system/pear/PEAR/ErrorStack.php
-geeklog-1.3.11/system/pear/PEAR/Exception.php
-geeklog-1.3.11/system/pear/PEAR/Installer.php
-geeklog-1.3.11/system/pear/PEAR/Packager.php
-geeklog-1.3.11/system/pear/PEAR/Registry.php
-geeklog-1.3.11/system/pear/PEAR/Remote.php
-geeklog-1.3.11/system/pear/PEAR/RunTest.php
-geeklog-1.3.11/system/pear/PEAR.php
-geeklog-1.3.11/system/pear/PHP/Compat/Components.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/E_STRICT.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/FILE.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/PATH_SEPARATOR.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/PHP_EOL.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/STD.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/T.php
-geeklog-1.3.11/system/pear/PHP/Compat/Constant/UPLOAD_ERR.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_change_key_case.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_chunk.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_combine.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_diff_assoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_diff_key.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_diff_uassoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_diff_ukey.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_intersect_assoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_intersect_key.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_intersect_uassoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_intersect_ukey.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_key_exists.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_search.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_udiff.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_udiff_assoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_udiff_uassoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_uintersect_assoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_uintersect_uassoc.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/array_walk_recursive.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/call_user_func_array.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/clone.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/constant.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/convert_uudecode.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/convert_uuencode.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/file_get_contents.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/file_put_contents.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/floatval.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/fprintf.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/get_include_path.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/html_entity_decode.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/http_build_query.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/image_type_to_mime_type.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/ini_get_all.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/is_a.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/md5_file.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/ob_clean.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/ob_flush.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/ob_get_clean.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/ob_get_flush.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/php_strip_whitespace.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/restore_include_path.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/scandir.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/set_include_path.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/str_ireplace.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/str_rot13.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/str_shuffle.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/str_split.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/str_word_count.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/stripos.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/strpbrk.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/strripos.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/substr_compare.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/var_export.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/version_compare.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/vprintf.php
-geeklog-1.3.11/system/pear/PHP/Compat/Function/vsprintf.php
-geeklog-1.3.11/system/pear/PHP/Compat.php
-geeklog-1.3.11/system/pear/PHP/tests/constant/e_strict.phpt
-geeklog-1.3.11/system/pear/PHP/tests/constant/file.phpt
-geeklog-1.3.11/system/pear/PHP/tests/constant/path_separator.phpt
-geeklog-1.3.11/system/pear/PHP/tests/constant/php_eol.phpt
-geeklog-1.3.11/system/pear/PHP/tests/constant/std.phpt
-geeklog-1.3.11/system/pear/PHP/tests/constant/t.phpt
-geeklog-1.3.11/system/pear/PHP/tests/constant/upload_err.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_change_key_case.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_chunk.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_combine.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_diff_assoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_diff_key.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_diff_uassoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_diff_ukey.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_intersect_assoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_intersect_key.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_intersect_uassoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_intersect_ukey.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_key_exists.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_search.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_udiff.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_udiff_assoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_udiff_uassoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_uintersect.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_uintersect_assoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_uintersect_uassoc.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/array_walk_recursive.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/call_user_func_array.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/clone.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/constant.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/convert_uudecode.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/convert_uuencode.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/file_get_contents.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/file_put_contents.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/floatval.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/fprintf.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/get_include_path.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/html_entity_decode.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/http_build_query.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/image_type_to_mime_type.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/ini_get_all.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/is_a.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/md5_file.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/ob_clean.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/ob_flush.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/ob_get_clean.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/ob_get_flush.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/php_strip_whitespace.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/restore_include_path.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/scandir.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/set_include_path.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/str_ireplace.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/str_rot13.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/str_shuffle.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/str_split.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/str_word_count.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/stripos.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/strpbrk.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/strripos.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/substr_compare.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/var_export.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/version_compare.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/vprintf.phpt
-geeklog-1.3.11/system/pear/PHP/tests/function/vsprintf.phpt
-geeklog-1.3.11/system/pear/PHP/tests/loadconstant.phpt
-geeklog-1.3.11/system/pear/PHP/tests/loadfunction.phpt
-geeklog-1.3.11/system/pear/PHP/tests/loadversion.phpt
-geeklog-1.3.11/system/pear/System.php
-geeklog-1.3.11/system/pear/scripts/pear.bat
-geeklog-1.3.11/system/pear/scripts/pearcmd.php
-geeklog-1.3.11/system/pear/template.spec
+geeklog-1.4.0sr5-1/config.php
+geeklog-1.4.0sr5-1/language/afrikaans.php
+geeklog-1.4.0sr5-1/language/afrikaans_utf-8.php
+geeklog-1.4.0sr5-1/language/hebrew.php
+geeklog-1.4.0sr5-1/language/turkish.php
+geeklog-1.4.0sr5-1/language/turkish_utf-8.php
+geeklog-1.4.0sr5-1/plugins/links/functions.inc
+geeklog-1.4.0sr5-1/public_html/admin/install/install.php
+geeklog-1.4.0sr5-1/public_html/docs/changed-files
+geeklog-1.4.0sr5-1/public_html/docs/changes.html
+geeklog-1.4.0sr5-1/public_html/docs/history
+geeklog-1.4.0sr5-1/public_html/docs/install.html
+geeklog-1.4.0sr5-1/sql/mysql_tableanddata.php
+geeklog-1.4.0sr5-1/system/lib-comment.php
+geeklog-1.4.0sr5-1/system/lib-trackback.php
diff -ruN 1.3.11sr1/docs/changes.html 1.4.0sr5-1/docs/changes.html
--- 1.3.11sr1/docs/changes.html	2005-07-03 03:47:35.000000000 -0500
+++ 1.4.0sr5-1/docs/changes.html	2006-08-08 02:39:06.000000000 -0500
@@ -22,6 +22,286 @@
 <a href="history">ChangeLog</a>. The file <tt>docs/changed-files</tt> has a list
 of files that have been changed since the last release.</p>
 
+<h2><a name="changes140sr5-1">Geeklog 1.4.0sr5-1</a></h2>
+
+<p>This release fixes display problems in the comment preview that were only
+introduced in Geeklog 1.4.0sr5.</p>
+
+
+<h2><a name="changes140sr5">Geeklog 1.4.0sr5</a></h2>
+
+<p>JPCERT/CC informed us about a possible <a href="http://en.wikipedia.org/wiki/XSS" title="Click to look up 'XSS' on Wikipedia" style="text-decoration: none; color: black; border-bottom: 1px dotted black;">XSS</a> in the comment handling that we're fixing with this release.</p>
+
+
+<h2><a name="changes140sr4">Geeklog 1.4.0sr4</a></h2>
+
+<p>Two exploits have been released by "rgod" for insecure Geeklog installations and for a bug in the "mcpuk" file manager that we've been shipping as part of FCKeditor in all previous 1.4.0 releases.</p>
+
+<ul>
+<li>Some of the files outside of the public_html directory were not protected
+    against direct execution. If Geeklog was installed such that those files
+    were accessible from a URL (which has always been strongly discouraged in
+    the installation instructions) then those files could be used to load and
+    execute malicious code from a remote server.
+    <br><br>
+    More information: <a
+    href="http://www.geeklog.net/article.php/so-called-exploit">So-called
+    Geeklog "exploit" posted</a>
+    <br><br>
+    In this release, we've added the missing execution prevention for all files
+    outside of public_html. We would still, however, suggest that you fix your
+    Geeklog install if the files outside of public_html are accessible from a
+    URL (see our <a
+    href="http://www.geeklog.net/faqman/index.php?op=view&amp;t=56">FAQ</a> for
+    details).
+</li>
+<li>The "mcpuk" file manager that we've integrated into FCKeditor allowed the
+    upload of arbitrary PHP code (even if FCKeditor was disabled in Geeklog's
+    config.php). Depending on your webserver's configuration, it was then
+    possible to execute that uploaded code.
+    <br><br>
+    More information: <a href="http://www.geeklog.net/article.php/exploit-for-fckeditor-filemanager">Exploit for FCKeditor's mcpuk file manager</a>
+    <br><br>
+    The file manager has been removed from this release. You will therefore no
+    longer be able to upload files, e.g. images, through FCKeditor. Future
+    versions of Geeklog will ship with an updated version of FCKeditor and its
+    included file manager.
+</li>
+</ul>
+
+<p>Note: This release also includes the <a
+href="http://www.geeklog.net/article.php/fighting-trackback-spam">updated
+lib-trackback.php</a> for better protection against Trackback spam.</p>
+
+
+<h2><a name="changes140sr3">Geeklog 1.4.0sr3</a></h2>
+
+<p>This release addresses the following security issues:</p>
+<ol>
+<li>Possible SQL injection and authentication bypass in <tt>auth.inc.php</tt>
+    (reported by the Security Science Researchers Institute Of Iran).</li>
+<li>Possible XSS in <tt>getimage.php</tt>
+    (reported by the Security Science Researchers Institute Of Iran).</li>
+<li>Path disclosure in <tt>getimage.php</tt> and the <tt>functions.php</tt> of
+    some themes, e.g. the Professional theme
+    (reported by the Security Science Researchers Institute Of Iran).</li>
+<li>Possible SQL injection in story submissions.</li>
+</ol>
+
+
+<h2><a name="changes140sr2">Geeklog 1.4.0sr2</a></h2>
+
+<p>This release addresses the following security issues:</p>
+<ul>
+<li>Konstantin Dyakoff found an old bug in the session handling that would
+    allow anyone to log in as any user.</li>
+<li>HTML was not stripped from the Location field in a user's profile.</li>
+</ul>
+
+
+<h2><a name="changes140sr1">Geeklog 1.4.0sr1</a></h2>
+
+<p>This release addresses the following security issues:</p>
+<ul>
+<li>James Bercegay of GulfTech Security Research reported several issues with
+    Geeklog's cookie handling that made it vulnerable to SQL injections,
+    arbitrary file access, and even injection and execution of arbitrary
+    code.</li>
+</ul>
+
+
+<h2><a name="changes140">Geeklog 1.4.0</a></h2>
+
+<p><small>(Geeklog 1.4.0 was originally supposed to be called 1.3.12, so any
+references you may find to a version 1.3.12 apply to version 1.4.0)</small></p>
+
+<h3>New Features</h3>
+
+<ul>
+<li>Geeklog now officially works with <code>register_globals = off</code>.
+    Please note that some plugins may still require it to be <code>on</code>,
+    though.</li>
+<li>Added support for sending and receiving <a
+    href="http://en.wikipedia.org/wiki/Trackback">Trackback</a> and <a
+    href="http://en.wikipedia.org/wiki/Pingback">Pingback</a> comments. Both
+    are supported for stories, but there is also a new plugin API so that
+    plugins can use this feature, too.  Trackback and Pingback can be disabled
+    in <tt>config.php</tt>.</li>
+<li>Added the ability to "ping" weblog directory services to advertise site
+    updates (preconfigured to ping <a
+    href="http://pingomatic.com">Ping-o-Matic</a>). As with Trackback and
+    Pingback, this is supported for stories, but plugins can also make use of
+    this feature via the plugin API.</li>
+<li>New syndication framework so that Geeklog can now <strong>read and
+    write</strong> feeds in different formats (currently supported: RSS, RDF,
+    and Atom).</li>
+<li>New administrator controlled user status. Including banning and
+    administrator activation of accounts.</li>
+<li>New Remote Authentication system to allow people with accounts on remote
+    services such as Blogger.com or LiveJournal.com to login to your site
+    without having to directly register on your site. (Remote accounts can be
+    banned as normal accounts).</li>
+<li>The Admin sections have been revamped to provide a more consistent look and
+    sortable lists. "Command and Control" (<tt>moderation.php</tt>) now also
+    comes with a new set of icons and has one icon for every Admin section.
+    Furthermore, the Admin block and Command and Control can be <a
+    href="config.html#desc_sort_admin">sorted</a> alphabetically.</li>
+<li>Ships with <a href="http://www.fckeditor.net/">FCKeditor</a> (WYSIWYG
+    editor). To <a href="config.html#desc_advanced_editor">enable</a>, set
+    <code>$_CONF['advanced_editor'] = true;</code> in your
+    <tt>config.php</tt>.</li>
+<li>The search now only displays a specified amount of results per page to
+    avoid running into timeouts when searching through large databases.<br>
+    <b>Note:</b> Plugins will have to be updated to support the "paged" search.
+    Until then, Geeklog fakes the paged results for plugin searches, which
+    means that a plugin that hasn't been updated will still search through the
+    entire database, but Geeklog will only display the results for the current
+    result page.</li>
+<li>Introduced an "Article Directory", providing an overview of all past
+    articles, sorted by year and month.</li>
+<li>The default permissions for new objects (stories, topics, blocks, etc.) can
+    now be set in config.php.</li>
+</ul>
+
+<h3>Compatibility</h3>
+
+<ul>
+<li>Due to the changes, themes will have to be updated to work with Geeklog
+    1.4.0. See the <a href="theme.html#changes">list of theme changes</a> for
+    details.</li>
+<li>The plugin API for comments has changed. Plugins using comments will have
+    to be updated to work with Geeklog 1.4.0.</li>
+</ul>
+
+<h3>More Information</h3>
+
+<p>We have posted a series of stories on the Geeklog homepage that highlight and explain some of the new features:</p>
+<ul>
+<li><a href="http://www.geeklog.net/article.php/advanced-editor">Geeklog's Advanced Editor</a></li>
+<li><a href="http://www.geeklog.net/article.php/remote-authentication">Remote Authentication</a></li>
+<li><a href="http://www.geeklog.net/article.php/trackback-pingback">Trackback and Pingback</a></li>
+<li><a href="http://www.geeklog.net/article.php/ping">Sending a Ping</a></li>
+<li><a href="http://www.geeklog.net/article.php/comment-plugin-api">New Comment Plugin API</a></li>
+</ul>
+
+
+<h2><a name="changes1311sr7">Geeklog 1.3.11sr7</a></h2>
+
+<p>JPCERT/CC informed us about a possible <a href="http://en.wikipedia.org/wiki/XSS" title="Click to look up 'XSS' on Wikipedia" style="text-decoration: none; color: black; border-bottom: 1px dotted black;">XSS</a> in the comment handling that we're fixing with this release.</p>
+
+
+<h2><a name="changes1311sr6">Geeklog 1.3.11sr6</a></h2>
+
+<p>This release addresses the following security issues:</p>
+<ol>
+<li>Possible SQL injection and authentication bypass in <tt>auth.inc.php</tt>
+    (reported by the Security Science Researchers Institute Of Iran).</li>
+<li>Possible XSS in <tt>getimage.php</tt>
+    (reported by the Security Science Researchers Institute Of Iran).</li>
+<li>Path disclosure in <tt>getimage.php</tt> and the <tt>functions.php</tt> of
+    some themes, e.g. the Professional theme
+    (reported by the Security Science Researchers Institute Of Iran).</li>
+<li>Possible SQL injection in story submissions.</li>
+</ol>
+
+
+<h2><a name="changes1311sr5">Geeklog 1.3.11sr5</a></h2>
+
+<ul>
+<li>Konstantin Dyakoff found an old bug in the session handling that would
+    allow anyone to log in as any user.</li>
+</ul>
+
+
+<h2><a name="changes1311sr4">Geeklog 1.3.11sr4</a></h2>
+
+<p>This release addresses the following security issues:</p>
+<ul>
+<li>James Bercegay of GulfTech Security Research reported several issues with
+    Geeklog's cookie handling that made it vulnerable to SQL injections,
+    arbitrary file access, and even injection and execution of arbitrary
+    code.</li>
+</ul>
+
+
+<h2><a name="changes1311sr3">Geeklog 1.3.11sr3</a></h2>
+
+<p>This release addresses the following security issues:</p>
+
+<ol>
+<li>Provided you knew the story id, it was possible to submit comments for
+    stories even if you did not have access to those stories
+    (reported by LWC). The same problem also existed with poll comments.</li>
+<li>Supplying an illegal start or end date to the advanced search resulted in a
+    warning message that disclosed the path to the Geeklog install on the
+    server (reported by r0t3d3Vil).<br>
+    It was <strong>not</strong> possible to use this for SQL injections.</li>
+</ol>
+
+<p>Also included in this release are bugfixes, e.g. for the problems editing
+static pages when URL rewriting was enabled, that were introduced in 
+1.3.11sr2.</p>
+
+
+<h2><a name="changes1311sr2">Geeklog 1.3.11sr2</a></h2>
+
+<p>This release provides security enhancements and better spam protection
+originally developed for Geeklog 1.3.12. It also addresses a few bugs where
+the bugfix could be integrated with a reasonable amount of work (other bugfixes
+will have to wait for the 1.3.12 release).
+
+<h3>Security and Spam protection</h3>
+<ul>
+<li>There is now a speed limit for login attempts, defaulting to three tries
+    in a five minute period (<a
+    href="config.html#desc_login_attempts">configurable</a> in
+    <tt>config.php</tt>).</li>
+<li>Linefeeds are filtered from the To:, From:, and Subject: fields of any
+    email sent through <code>COM_mail</code>.</li>
+<li>When a new user account is created and the user submission queue is enabled
+    in <tt>config.php</tt>, Geeklog now ensures that the new account is properly
+    queued even in the unlikely event that the account creation fails halfway
+    through.</li>
+<li>When a post is identified as spam, it now also triggers the speed limit
+    (ie. posters will have to wait for the speed limit to expire before they
+    can make another submission).</li>
+<li>Spam posts now get a 403 "Forbidden" HTTP response code.</li>
+<li>Spam checks are now done for comments, story, link, and event submissions,
+    the message sent with the "email story to a friend" option, and for the
+    contents of the user profile.</li>
+<li><a href="http://www.geeklog.net/article.php/spam-x-1.0.2"
+    rel="nofollow">Spam-X plugin 1.0.2</a> included.</li>
+</ul>
+
+<p>Please note that MT-Blacklist (used by Spam-X) has recently been <a href="http://www.geeklog.net/article.php/mt-blacklist-discontinued">discontinued</a>. The
+Spam-X plugin as included in this release is configured to get the last version
+of the blacklist from geeklog.net, but there will be no more updates.</p>
+
+<h3>Bugfixes</h3>
+<ul>
+<li>Fixed an error message thrown up by PHP 5.0.5 or later when viewing the
+    article page (bug #483).</li>
+<li>Quote names in email addresses as soon as they contain any non-alphanumeric
+    characters, apart from the blank (bug #368). This should help when trying
+    to email users with special characters in their name.</li>
+<li>Upgraded included kses class to version 0.2.2 which fixes problems with
+    Japanese and Thai characters (bugs #94 and #119).</li>
+<li>Fixed SQL error when using the [staticpage:] autotag (bug #373).</li>
+</ul>
+<p>For a complete list of bugfixes, please see the Changelog.</p>
+
+<h3>Improvements</h3>
+<ul>
+<li>Added support for a <code>custom_usercheck</code> function (for the
+    custom registration code). See the included <tt>lib-custom.php</tt> for
+    details.</li>
+<li>Improved handling of the auto-archive option in <tt>index.php</tt>, which
+    should slightly improve page load times.</li>
+<li>Includes several new and updated language files.</li>
+<li>Includes updated PEAR classes.</li>
+</ul>
+
+
 <h2><a name="changes1311sr1">Geeklog 1.3.11sr1</a></h2>
 <p>This release addresses the following security issue:</p>
 <ul>
@@ -29,7 +309,6 @@
 be exploited to extract user data such as the user's password hash.</li>
 </ul>
 
-
 <h2><a name="changes1311">Geeklog 1.3.11</a></h2>
 
 <p>Geeklog 1.3.11 is a <strong>bugfix and security release</strong> over Geeklog 1.3.10 and is meant to replace 1.3.10. The change in the version number was necessary since one of the bugfixes involves a change in the database.</p>
@@ -49,13 +328,19 @@
 
 <h3>Bugfixes</h3>
 <ul>
-<li>Fixes the length of the 'sid' field in the gl_comments table. Using story IDs longer than 20 characters prevented comment posts from being associated with the story.</li>
+<li>Fixes the length of the 'sid' field in the gl_comments table. Using story
+    IDs longer than 20 characters prevented comment posts from being associated
+    with the story.</li>
 <li>Ensures compatibility with PHP 4.1.x (includes updated PEAR packages).</li>
 <li>Fixes the archiving option being activated too early (bug #345).</li>
-<li>Properly deletes comments and story images when deleting entire topics (bug #339).</li>
+<li>Properly deletes comments and story images when deleting entire topics
+    (bug #339).</li>
 <li>Deletes comments when deleting polls.</li>
-<li>Fixes several bugs in the calendar and improves overall handling of both the site calendar and the personal calendars (bugs #268, #336, #338, and others).</li>
-<li>Fixes "More by <i>author</i>" and "More from <i>topic</i>" links in articles.</li>
+<li>Fixes several bugs in the calendar and improves overall handling of both
+    the site calendar and the personal calendars (bugs #268, #336, #338, and
+    others).</li>
+<li>Fixes "More by <i>author</i>" and "More from <i>topic</i>" links in
+    articles.</li>
 <li>Various other fixes, see <tt>docs/history</tt> for details.</li>
 </ul>
 
@@ -74,9 +359,9 @@
 <h3>New Features</h3>
 
 <ul>
-<li><a href="spamx.html">SpamX plugin</a> included. Tom Willet has kindly
-    provided his spam detection plugin, which is now part of the default
-    Geeklog install.<br>
+<li><a href="spamx.html" rel="nofollow">Spam-X plugin</a> included. Tom Willet
+    has kindly provided his spam detection plugin, which is now part of the
+    default Geeklog install.<br>
     The plugin has been modified slightly to store the blacklists in the
     database. Users of the previous version of the plugin will have to import
     their personal blacklist via the plugin's admin panel.</li>
diff -ruN 1.3.11sr1/docs/config.html 1.4.0sr5-1/docs/config.html
--- 1.3.11sr1/docs/config.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/config.html	2006-08-08 02:39:06.000000000 -0500
@@ -40,9 +40,9 @@
 <li><a href="#story">Story Settings</a></li>
 <li><a href="#comment">Comment Settings</a></li>
 <li><a href="#poll">Poll Settings</a></li>
-<li><a href="#links">Links Settings</a></li>
-<li><a href="#image">Image Settings</a></li>
-<li><a href="#rdf">RSS/RDF Feed Settings</a></li>
+<li><a href="#image">Image Settings</a>
+    <ul><li><a href="#userphoto">User photo</a></li></ul></li>
+<li><a href="#rdf">Syndication Settings</a></li>
 <li><a href="#content">Content Control Settings</a></li>
 <li><a href="#url-rewrite">URL Rewriting</a></li>
 </ul>
@@ -142,7 +142,7 @@
   <td valign="top">E-mail address for all admin mail</td></tr>
 <tr>
   <td valign="top"><a name="desc_site_url">site_url</a></td>
-  <td valign="top">http://www.yourdomain.com</td>
+  <td valign="top">http://www.example.com</td>
   <td valign="top">Base URL for your site (no trailing slash)</td></tr>
 <tr>
   <td valign="top"><a name="desc_theme">theme</a></td>
@@ -177,6 +177,23 @@
   <td valign="top">Can be 1 or 0</td>
   <td valign="top">If set to 1, the option to to exclude certain authors from being seen is hidden from the user's preferences.</td></tr>
 <tr>
+  <td valign="top"><a name="desc_remoteauthentication">remoteauthentication</a></td>
+  <td valign="top">false</td>
+  <td valign="top">Allow (when set to <tt>true</tt>) users who already have
+    an account with some other service to log into your Geeklog site with the
+    login for that service. Currently supported: Blogger and LiveJournal.<br>
+    Please note that to enable login for a specific service, you need an
+    authorization class in <tt>system/classes/authentication</tt>. If you only
+    want to allow Blogger but not LiveJournal users (or vice versa), simply
+    remove the class file for the unwanted service(s).</td></tr>
+<tr>
+  <td valign="top"><a name="desc_show_servicename">show_servicename</a></td>
+  <td valign="top">true</td>
+  <td valign="top">If you allow users to log in with accounts on remote services
+    (like Blogger or LiveJournal), this option will at the service's name to
+    the username to avoid confusion with local users of the same name. Set to
+    <tt>false</tt> to disable.</td></tr>
+<tr>
   <td valign="top"><a name="desc_site_enabled">site_enabled</a></td>
   <td valign="top">true</td>
   <td valign="top">A Geeklog site can be disabled quickly (e.g. for maintenance)
@@ -188,23 +205,29 @@
     disabled.  If the text begins with "http:" then visitors are redirected to
     that URL.</td></tr>
 <tr>
+  <td valign="top"><a name="desc_sort_admin">sort_admin</a></td>
+  <td valign="top">false</td>
+  <td valign="top">If set to <tt>true</tt> will sort the entries in the Admin's
+    block and the icons on the Submissions page (<tt>moderation.php</tt>)
+    alphabetically.</td></tr>
+<tr>
   <td valign="top"><a name="desc_link_documentation">link_documentation</a></td>
   <td valign="top">1</td>
   <td valign="top">Add a link to Geeklog's documentation to the Admin block.
     Set this to 0 if you don't want that link to show up.</td></tr>
 <tr>
   <td valign="top"><a name="desc_menu_elements">menu_elements</a></td>
-  <td valign="top"><code>array('contribute', 'links', 'polls', 'calendar',
-    'search', 'stats')</code></td>
+  <td valign="top"><code>array('contribute', 'calendar', 'search', 'stats',
+    'directory', 'plugins')</code></td>
   <td valign="top">Specifies which entries are displayed in the site's menu bar
     (if your theme uses the <code>{menu_elements}</code> variable to display
     the menu bar). Can be any combination of <tt>'home'</tt>,
-    <tt>'contribute'</tt>, <tt>'links'</tt>, <tt>'polls'</tt>,
-    <tt>'calendar'</tt>, <tt>'search'</tt>, <tt>'prefs'</tt>,
-    <tt>'plugins'</tt>, and <tt>'custom'</tt> where <tt>'plugins'</tt> is the
-    same as the <code>{plg_menu_elements}</code> variable, i.e. a list of the
-    menu entries provided by plugins, and <tt>'custom'</tt> displays the
-    entries returned by a custom function <code>CUSTOM_menuEntries</code> (see
+    <tt>'contribute'</tt>, <tt>'calendar'</tt>, <tt>'search'</tt>,
+    <tt>'directory'</tt>, <tt>'prefs'</tt>, <tt>'plugins'</tt>,
+    and <tt>'custom'</tt> where <tt>'plugins'</tt> is the same as the
+    <code>{plg_menu_elements}</code> variable, i.e. a list of the menu entries
+    provided by plugins, and <tt>'custom'</tt> displays the entries returned by
+    a custom function <code>CUSTOM_menuEntries</code> (see
     <tt>lib-custom.php</tt> for details).</td></tr>
 </table>
 
@@ -325,14 +348,6 @@
   <td valign="top"><a name="desc_cookie_language">cookie_language</a></td>
   <td valign="top">language</td>
   <td valign="top">Name of the language cookie.</td></tr>
-<tr>
-  <td valign="top"><a name="desc_cookie_lastvisit">cookie_lastvisit</a></td>
-  <td valign="top">LastVisit</td>
-  <td valign="top">Name of the cookie that stores the time of the last visit (used in session handling).</td></tr>
-<tr>
-  <td valign="top"><a name="desc_cookie_lastvisittemp">cookie_lastvisittemp</a></td>
-  <td valign="top">LastVisitTemp</td>
-  <td valign="top">Name of a temporary cookie that stores the time of the last visit (used in session handling).</td></tr>
 </table>
 
 <h3><a name="email">E-Mail Settings</a></h3>
@@ -398,18 +413,11 @@
       from the following settings.</td></tr>
 <tr><td valign="top"><a name="desc_submitloginrequired">submitloginrequired</a></td>
     <td valign="top">0</td>
-    <td valign="top">When set to 1, only registered users can submit stories, links, and 
-      events</td></tr>
+    <td valign="top">When set to 1, only registered users can submit stories
+      and events</td></tr>
 <tr><td valign="top"><a name="desc_commentsloginrequired">commentsloginrequired</a></td>
     <td valign="top">0</td>
     <td valign="top">When set to 1, only registered users can submit comments</td></tr>
-<tr><td valign="top"><a name="desc_linksloginrequired">linksloginrequired</a></td>
-    <td valign="top">0</td>
-    <td valign="top">When set to 1, only registered users can access the links area</td></tr>
-<tr><td valign="top"><a name="desc_pollsloginrequired">pollsloginrequired</a></td>
-    <td valign="top">0</td>
-    <td valign="top">When set to 1, only registered users can access the list of recent 
-      polls</td></tr>
 <tr><td valign="top"><a name="desc_calendarloginrequired">calendarloginrequired</a></td>
     <td valign="top">0</td>
     <td valign="top">When set to 1, only registered users can access the calendar</td></tr>
@@ -430,6 +438,9 @@
 <tr><td valign="top"><a name="desc_emailstoryloginrequired">emailstoryloginrequired</a></td>
     <td valign="top">0</td>
     <td valign="top">When set to 1, only registered users can email stories</td></tr>
+<tr><td valign="top"><a name="desc_directoryloginrequired">directoryloginrequired</a></td>
+    <td valign="top">0</td>
+    <td valign="top">When set to 1, only registered users can access the list of past articles</td></tr>
 </table>
 
 
@@ -444,10 +455,6 @@
   <td valign="top">1</td>
   <td valign="top">Enable (1) or disable (0) the story submission queue</td></tr>
 <tr>
-  <td valign="top"><a name="desc_linksubmission">linksubmission</a></td>
-  <td valign="top">1</td>
-  <td valign="top">Enable (1) or disable (0) the link submission queue</td></tr>
-<tr>
   <td valign="top"><a name="desc_eventsubmission">eventsubmission</a></td>
   <td valign="top">1</td>
   <td valign="top">Enable (1) or disable (0) the event submission queue</td></tr>
@@ -457,6 +464,11 @@
   <td valign="top">Enable (1) or disable (0) the user submission queue (i.e.
       new users must be approved before they receive their password)</td></tr>
 <tr>
+  <td valign="top"><a name="desc_disable_new_user_registration">disable_new_user_registration</a></td>
+  <td valign="top">false</td>
+  <td valign="top">When set to <tt>true</tt> completely disables all options
+    to sign up as a new user.</td></tr>
+<tr>
   <td valign="top"><a name="desc_allow_domains">allow_domains</a></td>
   <td valign="top">''</td>
   <td valign="top">When user submission is enabled this can contain a comma-separated list
@@ -467,14 +479,16 @@
   <td valign="top"><a name="desc_notification">notification</a></td>
   <td valign="top">array()</td>
   <td valign="top">Send an email notification to <tt>$_CONF['site_email']</tt>
-    when a new story, comment, link, or event has been submitted or a new user
-    has registered with the site. The <tt>array()</tt> can hold any combination
-    of  the strings <tt>'story'</tt>, <tt>'comment'</tt>, <tt>'link'</tt>,
-    <tt>'event'</tt>, and <tt>'user'</tt> (separated by commas), depending on
-    which notification(s) you want.<br>
+    when a new story, comment, event, trackback or pingback has been submitted
+    or a new user has registered with the site. The <tt>array()</tt> can hold
+    any combination of  the strings <tt>'story'</tt>, <tt>'comment'</tt>,
+    <tt>'trackback'</tt>, <tt>'pingback'</tt>, <tt>'event'</tt>, and
+    <tt>'user'</tt> (separated by commas), depending on which notification(s)
+    you want.<br>
     <strong>Example:</strong> <code>array('story','user');</code> would
     send notifications when a new story has been submitted or a new user has
-    registered. No notifications would be sent for new links or events.</td>
+    registered. No notifications would be sent, for example, for new
+    events.</td>
 <tr>
   <td valign="top"><a name="desc_listdraftstories">listdraftstories</a></td>
   <td valign="top">0</td>
@@ -493,6 +507,44 @@
   <td valign="top"><a name="desc_skip_preview">skip_preview</a></td>
   <td valign="top">0</td>
   <td valign="top">If 1, allows submission of stories and comments without previewing (i.e. the submission form will always have a Preview <em>and</em> a Submit button).</td></tr>
+<tr>
+  <td valign="top"><a name="desc_trackback_enabled">trackback_enabled</a></td>
+  <td valign="top">true</td>
+  <td valign="top">Enable (true) or disable (true) <a href="http://en.wikipedia.org/wiki/Trackback">trackback</a> comments. This applies to both sending and receiving trackback comments.</td></tr>
+<tr>
+  <td valign="top"><a name="desc_pingback_enabled">pingback_enabled</a></td>
+  <td valign="top">true</td>
+  <td valign="top">Enable (true) or disable (true) <a href="http://en.wikipedia.org/wiki/Pingback">pingback</a> support. This applies to both sending and receiving pingbacks.</td></tr>
+<tr>
+  <td valign="top"><a name="desc_ping_enabled">ping_enabled</a></td>
+  <td valign="top">true</td>
+  <td valign="top">Enable (true) or disable (true) the ability to ping weblog directory services like <a href="http://blo.gs/">blo.gs</a>.</td></tr>
+<tr>
+  <td valign="top"><a name="desc_trackback_code">trackback_code</a></td>
+  <td valign="top">0</td>
+  <td valign="top">Default value for new stories: Trackback enabled (0) or disabled (-1)</td></tr>
+<tr>
+  <td valign="top"><a name="desc_multiple_trackbacks">multiple_trackbacks</a></td>
+  <td valign="top">0</td>
+  <td valign="top">How to handle multiple trackbacks and pingbacks from the same source: 0 = keep only the first, reject any further trackbacks / pingbacks; 1 = overwrite, i.e. only keep the latest trackback / pingback; 2 = allow multiple trackbacks / pingbacks, i.e. list them all</td></tr>
+<tr>
+  <td valign="top"><a name="desc_pingback_self">pingback_self</a></td>
+  <td valign="top">0</td>
+  <td valign="top">Pingbacks are sent out automatically to <em>all</em> the
+    URLs linked from a story - which includes stories on your own site that
+    you may have linked in the article. This option lets you specify how these
+    "self pingbacks" are to be handled: 0 = skip them, i.e. don't send pingbacks
+    to stories on your own site; 1 = allow them, but obey the speed limit;
+    2 = allow them and ignore the speed limit.<br>
+    If your article contains more than one link to other stories on your site,
+    then option 1 is probably of limited use, as it would only pingback the
+    first linked story and run into the speed limit for the others.</td></tr>
+<tr>
+  <td valign="top"><a name="desc_advanced_editor">advanced_editor</a></td>
+  <td valign="top">false</td>
+  <td valign="top">Enable (if set to <code>true</code>) a WYSIWYG editor for
+    story and comment submissions and static pages. Geeklog ships with <a
+    href="http://www.fckeditor.net/">FCKeditor</a>.</td></tr>
 </table>
 
 
@@ -519,19 +571,10 @@
   <td valign="top">0</td>
   <td valign="top">Hide the "Home" link from the Sections block (0=no, 1=yes)</td></tr>
 <tr>
-  <td valign="top"><a name="desc_showemptysearchresults">showemptysearchresults</a></td>
-  <td valign="top">0</td>
-  <td valign="top">Show empty result blocks even when search returned no hits for 
-    stories, events, links, etc. (0=no, 1=yes)</td></tr>
-<tr>
   <td valign="top"><a name="desc_whosonline_threshold">whosonline_threshold</a></td>
   <td valign="top">300</td>
   <td valign="top">How long, in seconds, users can be idle before removing them from the whosonline block</td></tr>
 <tr>
-  <td valign="top"><a name="desc_whosonline_fullname">whosonline_fullname</a></td>
-  <td valign="top">0</td>
-  <td valign="top">Display the user's full names (1) or short usernames (0) in the Who's Online block. Users who didn't enter their full name will always be displayed with their username.</td></tr>
-<tr>
   <td valign="top"><a name="desc_whosonline_anonymous">whosonline_anonymous</a></td>
   <td valign="top">0</td>
   <td valign="top">If enabled (i.e. set to 1), anonymous users will only see the number of registered users currently online in the Who's Online block but not their names. Only logged-in users will see the names of other users that are currently online.</td></tr>
@@ -560,21 +603,21 @@
   <td valign="top">172800</td>
   <td valign="top">Comments are "new" if they are this many seconds old.</td></tr>
 <tr>
-  <td valign="top"><a name="desc_newlinksinterval">newlinksinterval</a></td>
-  <td valign="top">1209600</td>
-  <td valign="top">Links are "new" if they are this many seconds old.</td></tr>
+  <td valign="top"><a name="desc_newtrackbackinterval">newtrackbackinterval</a></td>
+  <td valign="top">172800</td>
+  <td valign="top">Trackback comments are "new" if they are this many seconds old.</td></tr>
 <tr>
   <td valign="top"><a name="desc_hidenewstories">hidenewstories</a></td>
   <td valign="top">0</td>
-  <td valign="top">Set to 1 to hide new stories from What's New block.</td></tr>
+  <td valign="top">Set to 1 to hide new stories from the What's New block.</td></tr>
 <tr>
   <td valign="top"><a name="desc_hidenewcomments">hidenewcomments</a></td>
   <td valign="top">0</td>
-  <td valign="top">Set to 1 to hide new comments from What's New block.</td></tr>
+  <td valign="top">Set to 1 to hide new comments from the What's New block.</td></tr>
 <tr>
-  <td valign="top"><a name="desc_hidenewlinks">hidenewlinks</a></td>
+  <td valign="top"><a name="desc_hidenewtrackbacks">hidenewtrackbacks</a></td>
   <td valign="top">0</td>
-  <td valign="top">Set to 1 to hide new links from What's New block.</td></tr>
+  <td valign="top">Set to 1 to hide new trackback comments from the What's New block.</td></tr>
 <tr>
   <td valign="top"><a name="desc_hidenewplugins">hidenewplugins</a></td>
   <td valign="top">0</td>
@@ -602,8 +645,12 @@
 <tr>
   <td valign="top"><a name="desc_ip_lookup">ip_lookup</a></td>
   <td valign="top"><i>not set</i></td>
-  <td valign="top">The IP addresses of comment posters are logged and displayed for admin users. When this variable is set to point to a service that can do IP address lookups, it's possible to lookup the owner of an IP address by clicking on it, making it easier to report missuse to ISPs, etc.<br>
+  <td valign="top">The IP addresses of comment posters are logged and displayed for admin users. When this variable is set to point to a service that can do IP address lookups, it's possible to lookup the owner of an IP address by clicking on it, making it easier to report abuse to ISPs, etc.<br>
 <code>$_CONF['ip_lookup']</code> should hold the complete URL to the lookup service, with a '<code>*</code>' marking the place where the IP address should go. It's also possible to use Tom Willet's <a href="http://sourceforge.net/project/showfiles.php?group_id=68255&amp;package_id=95743">NetTools</a> package, in which case the correct setting would be <code>$_CONF['ip_lookup'] = $_CONF['site_url'] . '/nettools/whois.php?domain=*';</code></td></tr>
+<tr>
+  <td valign="top"><a name="desc_num_search_results">num_search_results</a></td>
+  <td valign="top">10</td>
+  <td valign="top">Number of search results per page (and per type).</td></tr>
 </table>
 
 
@@ -659,6 +706,10 @@
   <td valign="top">right</td>
   <td valign="top">Which side of article the topic image should be shown (right or left)</td></tr>
 <tr>
+  <td valign="top"><a name="desc_show_topic_icon">show_topic_icon</a></td>
+  <td valign="top">1</td>
+  <td valign="top">Default setting for new stories and story submissions: Whether to show the topic icon (1) or not (0).</td></tr>
+<tr>
   <td valign="top"><a name="desc_hideemailicon">hideemailicon</a></td>
   <td valign="top">0</td>
   <td valign="top">When set to 1, this will disable the ability to send a story by email. It
@@ -672,12 +723,26 @@
     the &quot;View Printable Version&quot; from the Story Options
     block.</td></tr>
 <tr>
+  <td valign="top"><a name="desc_show_right_blocks">show_right_blocks</a></td>
+  <td valign="top">false</td>
+  <td valign="top">If set to <tt>true</tt>, the right-side column of blocks
+    will be displayed on <em>all</em> pages (instead of only on the index
+    page).</td></tr>
+<tr>
   <td valign="top"><a name="desc_showfirstasfeatured">showfirstasfeatured</a></td>
   <td valign="top">0</td>
   <td valign="top">When set to 1, this will render the first story on <em>any</em> page
     using the templates for a featured story, even if that story is not
     featured. This will even be applied to the first story on page 2 of a
     topic page, for example.</td></tr>
+<tr>
+  <td valign="top"><a name="desc_left_blocks_in_footer">left_blocks_in_footer</a></td>
+  <td valign="top">0</td>
+  <td valign="top">When set to 1, this will make the <code>{left_blocks}</code>
+    variable available in <tt>footer.thtml</tt> (and disable it in
+    <tt>header.thtml</tt>). This is really only useful for two-column layouts
+    where you want the left column contain the stories and the right columni
+    contain the standard blocks.</td></tr>
 </table>
 
 
@@ -732,27 +797,6 @@
 </table>
 
 
-<h3><a name="links">Links Settings</a></h3>
-
-<table border="1" width="100%">
-<tr><th width="8%">Variable</th>
-    <th width="29%">Default Value</th>
-    <th width="63%">Description</th></tr>
-<tr>
-  <td valign="top"><a name="desc_linkcols">linkcols</a></td>
-  <td valign="top">3</td>
-  <td valign="top">Number of columns to use when listing the categories in the links section.
-    Set to 0 if you don't want categories listed.</td></tr>
-<tr>
-  <td valign="top"><a name="desc_linksperpage">linksperpage</a></td>
-  <td valign="top">10</td>
-  <td valign="top">Number of links to show per page. Set to 0 to show all links at once.</td></tr>
-</table>
-
-<p><strong>Note:</strong> When setting both 'linkcols' and 'linksperpage'
-to 0 you get back the old-style (pre-1.3.6) layout of the links section.</p>
-
-
 <h3><a name="image">Image Settings</a></h3>
 
 <table border="1" width="100%">
@@ -794,55 +838,128 @@
   <td valign="top">Set this to 1 if you want Geeklog to keep the original, unscaled images after upload. The smaller image will then be used as a thumbnail and will link to the original image. Note that this may use a lot of disk space (depending on the size of your images).</td>
 </tr>
 <tr>
+  <td valign="top"><a name="desc_allow_user_scaling">allow_user_scaling</a></td>
+  <td valign="top">1</td>
+  <td valign="top">When unscaled images are kept (see above), this option lets
+    the user chose between using the scaled or unscaled image in the story, i.e.
+    enables the <code>[unscaled<i>X</i>]</code> image tag (in addition to the
+    <code>[image<i>X</i>]</code> tag).</td>
+</tr>
+<tr>
   <td valign="top"><a name="desc_max_image_width">max_image_width</a></td>
-  <td valign="top">300</td>
-  <td valign="top">Max. width of an image in pixels. If it exceeds this, it is either
-    rejected or resized (depending on the setting of $_CONF['image_lib']
+  <td valign="top">160</td>
+  <td valign="top">Max. width of an image in pixels. If it exceeds this, it is
+    either rejected or resized (depending on the setting of $_CONF['image_lib']
     above).
 </tr>
 <tr>
   <td valign="top"><a name="desc_max_image_height">max_image_height</a></td>
-  <td valign="top">300</td>
-  <td valign="top">Max. height of an image in pixels. If it exceeds this, it is either
-    rejected or resized (depending on the setting of $_CONF['image_lib']
+  <td valign="top">120</td>
+  <td valign="top">Max. height of an image in pixels. If it exceeds this, it is
+    either rejected or resized (depending on the setting of $_CONF['image_lib']
     above).
 </tr>
 <tr>
   <td valign="top"><a name="desc_max_image_size">max_image_size</a></td>
   <td valign="top">1048576 <i>(equals 1 MB)</i></td>
-  <td valign="top">Max. size of an image in bytes. If it exceeds this, it is either
-    rejected or resized (depending on the setting of $_CONF['image_lib']
-    above).
+  <td valign="top">Max. size of an image in bytes. If it exceeds this, it is
+    is rejected (even if you're using a graphics package to resize images).
+</tr>
+<tr>
+  <td valign="top"><a name="desc_max_topicicon_width">max_topicicon_width</a></td>
+  <td valign="top">48</td>
+  <td valign="top">Max. width of a topic icon in pixels. If it exceeds this,
+    it is either rejected or resized (depending on the setting of
+    $_CONF['image_lib'] above).
+</tr>
+<tr>
+  <td valign="top"><a name="desc_max_topicicon_height">max_topicicon_height</a></td>
+  <td valign="top">48</td>
+  <td valign="top">Max. height of a topic icon in pixels. If it exceeds this,
+    it is either rejected or resized (depending on the setting of
+    $_CONF['image_lib'] above).
 </tr>
 <tr>
+  <td valign="top"><a name="desc_max_topicicon_size">max_topicicon_size</a></td>
+  <td valign="top">65536 <i>(equals 64 KB)</i></td>
+  <td valign="top">Max. size of a user photo in bytes. If it exceeds this, it
+    is rejected (even if you're using a graphics package to resize images).
+</tr>
+</table>
+
+<h4><a name="userphoto">User photo</a></h4>
+
+<p>Additional options for the user photo.</p>
+
+<table border="1" width="100%">
+<tr><th width="8%">Variable</th>
+    <th width="29%">Default Value</th>
+    <th width="63%">Description</th></tr>
+<tr>
   <td valign="top"><a name="desc_max_photo_width">max_photo_width</a></td>
-  <td valign="top">96</td>
-  <td valign="top">Max. width of a user photo in pixels. If it exceeds this, it is either
-    rejected or resized (depending on the setting of $_CONF['image_lib']
-    above).
+  <td valign="top">128</td>
+  <td valign="top">Max. width of a user photo in pixels. If it exceeds this, it
+    is either rejected or resized (depending on the setting of
+    $_CONF['image_lib'] above).
 </tr>
 <tr>
   <td valign="top"><a name="desc_max_photo_height">max_photo_height</a></td>
-  <td valign="top">96</td>
-  <td valign="top">Max. height of a user photo in pixels. If it exceeds this, it is either
-    rejected or resized (depending on the setting of $_CONF['image_lib']
-    above).
+  <td valign="top">128</td>
+  <td valign="top">Max. height of a user photo in pixels. If it exceeds this,
+    it is either rejected or resized (depending on the setting of
+    $_CONF['image_lib'] above).</td>
 </tr>
 <tr>
   <td valign="top"><a name="desc_max_photo_size">max_photo_size</a></td>
   <td valign="top">65536 <i>(equals 64 KB)</i></td>
-  <td valign="top">Max. size of a user photo in bytes. If it exceeds this, it is either
-    rejected or resized (depending on the setting of $_CONF['image_lib']
-    above).
+  <td valign="top">Max. size of a user photo in bytes. If it exceeds this, it
+    is rejected (even if you're using a graphics package to resize images).</td>
+</tr>
+<tr>
+  <td valign="top"><a name="desc_use_gravatar">use_gravatar</a></td>
+  <td valign="top">false</i></td>
+  <td valign="top">If enabled (set to <tt>true</tt>), a user's avatar image will
+    be requested from <a href="http://gravatar.com/">gravatar.com</a> if the
+    user didn't upload a user photo (i.e. an uploaded photo always takes
+    priority).<br>
+    Please note that this option may slow down your site on pages that display
+    a lot of userphotos for different users (e.g. forum threads).</td>
+</tr>
+<tr>
+  <td valign="top"><a name="desc_gravatar_rating">gravatar_rating</a></td>
+  <td valign="top"><i>(commented out)</i></td>
+  <td valign="top">Avatars submitted to gravatar.com are <a
+    href="http://gravatar.com/rating.php">rated</a> with the rating system used
+    for movies (in the U.S.), i.e. the letters G, PG, R, or X. This option will
+    let you chose the <em>maximum</em> allowed rating for an avatar. For
+    example, a max. rating of R will make sure that no X-rated avatars will be
+    displayed on your site (only G, PG, and R).</td>
+</tr>
+<tr>
+  <td valign="top"><a name="desc_force_photo_width">force_photo_width</a></td>
+  <td valign="top"><i>(commented out)</i></td>
+  <td valign="top">This option, when enabled, will only apply when
+    <em>displaying</em> a user photo. The <code>&lt;img&gt;</code> tag for the
+    user photo will be emitted with a max. width, as specified by this option.
+    This means that the actual photo can still be larger, but will only be
+    displayed smaller. This is useful for cases where you don't want oddly
+    shaped user photos to break your page's layout (e.g. in a forum).</td>
+</tr>
+<tr>
+  <td valign="top"><a name="desc_default_photo">default_photo</a></td>
+  <td valign="top"><i>(commented out)</i></td>
+  <td valign="top">When enabled, this option should point to an image (full URL
+    required!) that should be displayed for users without a user photo. When
+    this option is not set and a user does not have a user photo (or an avatar)
+    then Geeklog will simply not display anything.</td>
 </tr>
 </table>
 
+<h3><a name="rdf">Syndication Settings</a></h3>
 
-<h3><a name="rdf">RSS/RDF Feed Settings</a></h3>
+<p>Geeklog can export its headlines to a news feed in various formats (RSS, RDF, and Atom). This will let you share your news with other sites (Hint: Create a Portal block from Geeklog's Block menu to import news feeds from other sites).</p>
 
-<p>Geeklog can export its headlines to a so-called RSS feed (also known as an RDF feed). This will let you share your news with other sites (Hint: Create a Portal block from Geeklog's Block menu to import RSS/RDF news feeds from other sites).</p>
-
-<p>Starting with Geeklog 1.3.9, RSS feeds can be created and configured from
+<p>Starting with Geeklog 1.3.9, feeds can be created and configured from
 Geeklog's Admin menu ("Content Syndication"). The following settings will only
 be used as the default settings for any new feeds that you create from the
 admin panel.</p>
@@ -853,19 +970,23 @@
     <th width="63%">Description</th></tr>
 <tr><td valign="top"><a name="desc_backend">backend</a></td>
     <td valign="top">1</td>
-    <td valign="top">Create an RSS/RDF file for the stories in rdf_file (0=no, 1=yes)</td></tr>
+    <td valign="top">Create a feed file for the stories in rdf_file (0=no, 1=yes)</td></tr>
 <tr><td valign="top"><a name="desc_rdf_file">rdf_file</a></td>
-    <td valign="top">HTML path with "/backend/geeklog.rdf" suffix</td>
-    <td valign="top">File system path for the RDF file. This file allows you to share your site's headlines with others</td></tr>
+    <td valign="top">HTML path with "/backend/geeklog.rss" suffix</td>
+    <td valign="top">File system path for the feed file. This file allows you to share your site's headlines with others</td></tr>
 <tr><td valign="top"><a name="desc_rdf_language">rdf_language</a></td>
     <td valign="top">en-gb</td>
     <td valign="top">Value for the feed's language tag. Depending on your site's language and operating system, this may differ from the language setting in the locale (see above).<br><strong>Example:</strong> The PHP locale setting for German is 'de_DE' while the correct language setting for a German RSS feed would be 'de-DE' (note the dash instead of the underscore).</td></tr>
 <tr><td valign="top"><a name="desc_rdf_limit">rdf_limit</a></td>
     <td valign="top">10</td>
-    <td valign="top">Limit the number of stories in the RSS feed. If the value for this setting is a number, the feed will hold this many stories. If the number is followed by a lower-case 'h' (e.g. 24h) it denotes the number of hours from which to chose the stories.</td></tr>
+    <td valign="top">Limit the number of stories to export to the news feed. If the value for this setting is a number, the feed will hold this many stories. If the number is followed by a lower-case 'h' (e.g. 24h) it denotes the number of hours from which to chose the stories.</td></tr>
 <tr><td valign="top"><a name="desc_rdf_storytext">rdf_storytext</a></td>
     <td valign="top">0</td>
-    <td valign="top">If this value is 1, then the entire introtext of the stories will be included in the RSS feed. Any number greater than one limits the introtext to that many characters (e.g. a value of 80 would only include the first 80 characters from the introtext in the feed). If set to 0, the introtext is not included in the feed.</td></tr>
+    <td valign="top">If this value is 1, then the entire introtext of the stories will be included in the news feed. Any number greater than 1 limits the introtext to that many characters (e.g. a value of 80 would only include the first 80 characters from the introtext in the feed). If set to 0, the introtext is not included in the feed.</td></tr>
+<tr><td valign="top"><a name="desc_syndication_max_headlines">syndication_max_headlines</a></td>
+    <td valign="top">0</td>
+    <td valign="top">Upper limit for the max. number of headlines when <em>importing</em> a feed (into a portal block). The limit can also be set for each individual portal block in the block menu.<br>
+    When set to 0, all headlines are imported.</td></tr>
 </table>
 
 
@@ -888,8 +1009,9 @@
       additional attributes will overwrite the definition from user_html.</td></tr>
 <tr>
   <td valign="top"><a name="desc_allowed_protocols">allowed_protocols</a></td>
-  <td valign="top">array ('http:', 'https:', 'ftp:');</td>
-  <td valign="top">Defines which protocols are allowed in links (i.e. HTML <code>&lt;a&gt;</code> tags).<br><strong>Note:</strong> The kses class used to filter these protocols has a hard-coded list of allowed protocols to which the above will be <em>added</em>. It is currently not possible to <em>remove</em> any of the default protocols (which include, for example, 'mailto:', 'gopher:', and 'news:').</td></tr>
+  <td valign="top">array ('http', 'https', 'ftp');</td>
+  <td valign="top">Defines which protocols are allowed in links (i.e. HTML
+    <code>&lt;a&gt;</code> tags).</td></tr>
 <tr>
   <td valign="top"><a name="desc_disable_autolinks">disable_autolinks</a></td>
   <td valign="top">0</td>
@@ -913,9 +1035,9 @@
 
 <p>Geeklog includes a simple but useful URL rewriting feature which can help
 make your site more crawler friendly (i.e. the URLs of your site are more
-likely to be picked up by the search engine's indexing bots). Currently, this
-feature is only supported for URLs to stories and by the Static Pages
-plugin.</p>
+likely to be picked up by the search engine's indexing bots). This feature is
+supported for URLs to stories, static pages, the article directory, and links.
+</p>
 <p>URL rewriting means that your URLs will look like this</p>
 <p align="center"><tt>http://www.geeklog.net/article.php/20021022234959146</tt></p>
 <p>instead of like this</p>
diff -ruN 1.3.11sr1/docs/docstyle.css 1.4.0sr5-1/docs/docstyle.css
--- 1.3.11sr1/docs/docstyle.css	2004-12-31 10:03:27.000000000 -0600
+++ 1.4.0sr5-1/docs/docstyle.css	2006-08-08 02:39:06.000000000 -0500
@@ -1,37 +1,54 @@
 body {
-  margin-left: 4%;
-  margin-right: 4%;
+  margin: 1em 5%;
   background: white;
   color: black;
+  font-family: Verdana, Arial, Helvetica, sans-serif;
+  font-size: smaller;
 }
 
 h1 {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
-  font-size: 195%;
+  font-size: 1.4em;
 }
 
 h2 {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
-  font-size: 156%;
+  font-size: 1.2em;
 }
 
 h3 {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
-  font-size: 125%;
+  font-size: 1.0em;
+}
+
+p, ul, ol, li {
+  margin-top: 0.6em;
+  margin-bottom: 0.6em;
+}
+ul, ol {
+  margin-left: 0.9em;
+  padding-left: 0.9em;
 }
 
 code, kbd, var {
   font-family: Courier, "Courier New", monospace;
 }
 
+table {
+  width: 100%;
+}
+
+td, th {
+  vertical-align: top;
+  padding: 4px;
+  line-height: 128%;
+  font-size: smaller;
+}
+
 th {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
-  background: black;
-  color: white;
+  text-align: left;
+  background: silver;
 }
 
-tr, td {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
+.r2 {
+  background: rgb(240,240,240);
 }
 
 dt {
@@ -40,19 +57,16 @@
 
 
 .usual {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
   font-size: 100%;
 }
 
 .menu {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
   font-size: 90%;
   background: #dddddd;
   color: black;
 }
 
 .footer {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
   font-size: 90%;
   background: #dddddd;
   color: black;
@@ -60,7 +74,6 @@
 
 
 .comment {
-  font-family: Verdana, Arial, Helvetica, sans-serif;
   font-size: 80%;
 }
 
@@ -69,7 +82,8 @@
 
 a:link    { color: #2222FF; background: transparent; }
 a:visited { color: #2222FF; background: transparent; }
-a:hover   { color: #333366; background: #AAAADD; }
+a:hover   { color: #5252FF; background: transparent; }
+/*a:hover   { color: #333366; background: #AAAADD; }*/
 a:active  { color: #2222FF; background: transparent; }
 
 /* this is to prevent Mozilla from applying :hover on <a name="..."> */
diff -ruN 1.3.11sr1/docs/history 1.4.0sr5-1/docs/history
--- 1.3.11sr1/docs/history	2005-07-03 03:47:50.000000000 -0500
+++ 1.4.0sr5-1/docs/history	2006-08-08 02:39:06.000000000 -0500
@@ -1,5 +1,731 @@
 GeekLog History/Changes:
 
+July 23, 2006 (1.4.0sr5-1)
+-------------
+
+This release fixes display problems in the comment preview that were only
+introduced in Geeklog 1.4.0sr5 (as a result of the fix for the XSS).
+
+The complete 1.4.0sr5-1 tarball also includes the following language files:
+
+- New Afrikaans language file, provided by Renier Maritz
+- Updated Hebrew language file, provided by LWC
+- Updated Turkish language file, provided by Kemal Cellat
+
+
+July 16, 2006 (1.4.0sr5)
+-------------
+
+JPCERT/CC informed us about a possible XSS in the comment handling that we're
+fixing with this release.
+
+
+June 30, 2006 (1.4.0sr4)
+-------------
+
+Two exploits have been released by "rgod" for insecure Geeklog installations
+and for a bug in the "mcpuk" file manager that we've been shipping as part of
+FCKeditor in all 1.4.0 releases.
+
+- Some of the files outside of the public_html directory were not protected
+  against direct execution. If Geeklog was installed such that those files were
+  accessible from a URL (which has always been strongly discouraged in the
+  installation instructions) then those files could be used to load and
+  execute malicious code from a remote server.
+
+  More information: http://www.geeklog.net/article.php/so-called-exploit
+
+  In this release, we've added the missing execution prevention for all files
+  outside of public_html. We would still, however, suggest that you fix your
+  Geeklog install if the files outside of public_html are accessible from a URL.
+
+- The "mcpuk" file manager that we've integrated into FCKeditor allowed the
+  upload of arbitrary PHP code (even if FCKeditor was disabled in Geeklog's
+  config.php). Depending on your webserver's configuration, it was then possible
+  to execute that uploaded code.
+
+  More information:
+  http://www.geeklog.net/article.php/exploit-for-fckeditor-filemanager
+
+  The file manager has been removed from this release. You will therefore no
+  longer be able to upload files, e.g. images, through FCKeditor. Future
+  versions of Geeklog will ship with an updated version of FCKeditor and its
+  included file manager.
+
+
+May 28, 2006 (1.4.0sr3)
+------------
+
+The Security Science Researchers Institute Of Iran reported the following
+security issues:
+
+- Possible SQL injection and authentication bypass in auth.inc.php
+- Possible XSS in getimage.php
+- Path disclosure in getimage.php and the functions.php of some themes,
+  e.g. the Professional theme
+
+An internal code review also revealed a possible SQL injection in story
+submissions.
+
+
+Mar 5, 2006 (1.4.0sr2)
+-----------
+
+Security issues:
+
+- Konstantin Dyakoff found an old bug in the session handling that would allow
+  anyone to log in as any user.
+- HTML was not stripped from the Location field in a user's profile.
+
+
+Feb 19, 2006 (1.4.0sr1)
+------------
+
+Security issues:
+
+- James Bercegay of GulfTech Security Research reported several issues with
+  Geeklog's cookie handling that made it vulnerable to SQL injections, arbitrary
+  file access, and even injection and execution of arbitrary code.
+
+Bugfixes:
+
+- Fixed bug in page-break combined with url rewrite (bug #521) [Oliver]
+- Fixed Story [page_break] showing only intro on first page [Oliver]
+- Fixed install script for the Spam-X plugin which was trying to include an SQL
+  file that doesn't exist - and wasn't needed (part of bug #520) [Dirk]
+
+- Updated Hebrew language file, provided by LWC
+- New Russian language files for the Links and Polls plugins, provided by
+  Volodymyr V. Prokurashko
+- Fixed Static pages dutch language file [Oliver]
+- New Polish language file for the Links plugin, provided by Robert Stadnik
+- Added UTF-8 English versions of the Links, Polls, Static Pages, and Spam-X
+  language files [Dirk]
+- Added all UTF-8 Language files for core [Oliver]
+
+
+Feb 5, 2006 (1.4.0)
+------------
+
+- Prevent execution of PHP code in "normal" blocks [Dirk]
+- Added missing navbar images - used for CSS based buttons as part of the
+  standard Plugin CSS [Blaine]
+- Set options in FCKConfig to have Firefox browsers by default not using the
+  <span> and font tags to format Bold and Italic [Blaine]
+- Fixed another bug in google pagination of admin-lists [Oliver]
+- Fixed "wrap static page in a block" and "exit type" options in the static
+  page editor. Also link to the "rewritten" URL from the list of static pages
+  when URL rewriting is on [Dirk]
+- Fixed JavaScript error in the Admin's story editor (bug #479) [Dirk]
+- Fixed hard-coded paths in the check.php script and added tests for missing
+  directories (reported by Markus Wollschlaeger) [Dirk]
+- A humble attempt to add some semantics [Dirk]
+  + Added rel="category tag" to a story's topic link
+  + Added rel="self bookmark" for a comment's permalink
+- Cosmetics: Moved the number of links per category out of the actual link to
+  the category [Dirk]
+- On MySQL 5, the drop-down list of link categories presented to a user when
+  submitting a new link came out wrong (while the one in the Admin's link
+  editor worked just fine). Moved the working code into a new function in the
+  plugin's functions.inc and changed the code to use it in both cases now [Dirk]
+- Fixed an SQL error when the "length of entries" field in the Feed Editor was
+  left empty [Dirk]
+- Fixed date and time defaulting to the current date and time when creating
+  a new event as an Admin user (adding a workaround for changes of strtotime()
+  behavior in PHP 5) [Dirk]
+- Fixed SQL error on MySQL 5 when creating a new topic (bug #517) [Dirk]
+- In HTTP requests, format the user agent string according to the RFCs 1945 /
+  2068 / 2616, i.e. "Geeklog/1.4.0" [Dirk]
+
+- Updated Japanese language files, provided by Yusuke Sakata
+- Updated Ukrainian (Windows-1251) language file, provided by Vitaliy Biliyenko
+
+
+Jan 22, 2006 (1.4.0rc2)
+------------
+
+- header.thtml now specifies the CSS Class Declaration to use for the body.
+  This addresses the issue with FCKEditor when displayed, its CSS was
+  over-riding the main site <body> tag and the site margin padding was being
+  affected [Blaine]
+- Removed CSS for the Forum plugin from style.css [Blaine]
+- Fixed "Cannot modify header ..." message when logging in from the admin
+  pages (reported by Samuel M. Stone). This also fixes confusing intermittent
+  displays during the login (e.g. only some of the "Command and Control" icons
+  showing up, messages about missing permissions flashing up) [Dirk]
+- Removed Geeklog version number from feed files due to security concerns
+  (pointed out by Samuel M. Stone) [Dirk]
+- Login through the admin pages didn't work with register_globals=off [Dirk]
+- Fixed admin lists so pagination works also in static pages [Oliver]
+- Pass GeekLog as user agent when fetching RSS feeds [Mike]
+- Made the image upload work with out-of-the-box PHP 5 configurations [Dirk]
+- Fixed handling of HTML entities in Pingbacks [Dirk]
+- Fixed Spam-X Mass Delete Trackback Spam module to update the story's trackback
+  count when deleting trackbacks [Dirk]
+- Fixed a possible SQL error when saving a block (reported by BDUB) [Dirk]
+- Fixed story titles in the What's New block when they contained HTML entities
+  (entities where sometimes cut off and/or encoded twice) [Dirk]
+- Fixed a typo in all the plugin install script which set the group description
+  to "grp_desc" instead of $grp_desc (found by Ingo Schaefer) [Dirk]
+- Improved autodetect of Trackback URLs [Dirk]
+- The submit story form was not selecting the advanced Editor if user was not
+  logged in or did not have Story Editor permissions [Blaine]
+- Added missing CSS class name "list-feed" for portal blocks [Dirk]
+- Fixed user submission queue (reported by Andrew Lawlor) [Dirk]
+- Fixed handling of integer fields in the Admin's story editor (reported by
+  Ron Ackerman) [Dirk]
+- Fixed handling of checkboxes in the static pages editor (reported by
+  Ron Ackerman) [Dirk]
+- Fixed SQL error when saving a static page that had had more than 1000 hits
+  (reported by Euan McKay) [Dirk]
+- Removed visible table border from advanced comment editor form [Blaine]
+- Moved some hard-coded text strings from the advanced editor into the
+  language files [Blaine]
+
+- Updated Chinese language files, provided by Samuel M. Stone
+- Updated Japanese language files, provided by Yusuke Sakate
+
+
+Dec 31, 2005 (1.4.0rc1)
+------------
+
+- Added support for Advanced Editor in the Add Comment Feature [Blaine]
+- Fixed SQL error in search on MySQL 5 (fix suggested by dariball) [Dirk]
+- Added trackback.php and pingback.php to the included robots.txt [Dirk]
+- Added a few more calls to COM_numberFormat all over the place (links and polls
+  plugins, Admins Only block, ...) [Dirk]
+- Fixed test for a Geeklog 1.3.9 database in the install script [Dirk]
+- When emailing a story, make sure all fields are filled in [Dirk]
+- Don't lose the current topic selection when a Story Admin uses the Contribute
+  link [Dirk]
+- Fixed highlighting of search query in comments when register_globals = off
+  [Dirk]
+- When the entries in the Admin's block are not sorted, make sure the icons in
+  Command and Control are in the same order as the block entries [Dirk]
+- Allow topic icons to be uploaded to and retrieved from a 'topics' directory
+  outside of the document root [Dirk]
+- Added a workaround to produce abbreviated day names in the calendar for UTF-8
+  language files (reported by Euan McKay) [Dirk]
+- The Spam-X plugin now uses the same "universal" install script as the other
+  three preinstalled plugins [Dirk]
+- Added more allowable HTML tags and attributes if Advanced_Editor enabled
+  config.php setting [Blaine]
+- Added logic to detect if Javascript was not enabled and Advanced Editor was
+  enabled.
+  User will be prompted with alert and able to use the default editor [Blaine]
+- Changed spam handling for Trackbacks and Pingbacks to check for spam on the
+  unfiltered Trackback/Pingback content [Dirk]
+- When editing a link submission with a new link category (i.e. the submitter
+  selected "other" and entered a non-existing category), make sure that new
+  category actually shows up in the links editor [Dirk]
+- In the Admin's list of stories, show the display name of the topic (i.e. the
+  same as in the Topics block) instead of the topic ID [Dirk]
+- Hide the edit icon in the Admin's list of stories when the current user
+  doesn't have edit access to a story (since they only got a note saying they
+  can't edit that story anyway) [Dirk]
+- Fixed alternating row colors in admin lists if one row has no data [Oliver]
+- Made it impossible to switch off blocks if there is no access [Oliver]
+- Fixed handling of items in the submission queues (it was only possible to
+  approve / delete the first item in a queue) [Dirk]
+- Grant users with 'plugin.edit' permission access to the plugin editor [Dirk]
+- Changed admin-lists 'default-filter' to require 'AND' [Oliver]
+- Fixed admin lists for events & static pages for non-root users [Oliver]
+- Fixed invalid language string in submit.php [Oliver]
+- Fixed problems with the query highlighting code escaping double quotes [Dirk]
+- In the list of plugins, display only the plugin's current version number as
+  long as it's in sync with the code version or the plugin hasn't implemented
+  the chkVersion API function [Dirk]
+- Limit length of a new user's username to 16 characters in the
+  admin/user/edituser.thtml template file [Dirk]
+- Don't display the current user's userphoto when creating a new user in
+  admin/user.php [Dirk]
+- Fixed sanity checks in USER_addGroup and USER_delGroup [Trinity, Dirk]
+- Allowed the Links-entry from the top menu to be hidden by config.php in links
+  [Oliver]
+- Fixed small HTML validation issues with adv. editor and admin lists [Oliver]
+- Fixed comment bug that allowed comments to be saved even when user did not
+  have the correct story/topic permissions. [Vinny]
+- Send the character set as an HTTP header from COM_siteHeader now [Oliver]
+- Fixed updating Links feeds [Mike]
+- Corrected RSS handling of GUID or LINK [Mike]
+- Fixed date format in Atom feeds [Mike]
+- Fixed loss of sort setting when browsing the user list [Oliver]
+- Fixed block title of the site stats (reported by Tom Willet) [Dirk]
+- Fixed an SQL error when approving the default story submission ("Are you
+  secure?") after a fresh install (reported by suvi) [Dirk]
+- Fixed warnings that exposed the full path to Geeklog when attempting SQL
+  injections on the advanced search [Mike]
+- The "Mail Users" icon was missing from Command and Control [Dirk]
+- In Command and Control, show the Trackback icon only when at least one of the
+  Trackback, Pingback, or Ping features is enabled (in addition to 'story.ping'
+  permissions for the current user) [Dirk]
+- Replaced the delete_event.gif icon (in layout/professional/images/icons) with
+  a PNG, since the Professional theme uses PNGs now and the icon wouldn't show
+  up otherwise [Dirk]
+- The block around the list of backups was missing the title [Dirk]
+- Don't emit the Trackback and Pingback headers when trackbacks have been
+  disabled for a story [Dirk]
+- Introduced {lang_trackback_comments_no_link} (in trackback/trackback.thtml)
+  so that you can have an article page entirely without links back to itself
+  (for picky spiders such as the one for Google News) [Dirk]
+- Call COM_refresh when creating a user with usersubmission = 1 [Mike]
+- Fixed sorting of Trackbacks in the What's New block [Dirk]
+- The search by author or by date switched to searching for everything on
+  page 2 of the results [Dirk]
+- For the Links plugin, the "last x days" text in the What's New block was
+  missing [Dirk]
+- Fixed an SQL error when creating new blocks [Mike]
+- The feed reader will now also follow redirects [Mike]
+
+- Updated Chinese traditional and simplified language files, and new Chinese
+  language files for the Links, Polls, and Static Pages plugins, provided by
+  Samuel M. Stone
+- German language files now exist in 4 combinations (formal / informal German,
+  ISO-8859-15 / UTF-8 encoding) for Geeklog, the Links, Polls and Static Pages
+  plugins [Dirk]
+- Updated Japanese language files, provided by Yusuke Sakate
+- New Ukrainian language files (Windows-1251) for Geeklog and all four plugins,
+  provided by Vitaliy Biliyenko
+- New Ukrainian language files (UTF-8 and KOI8-U encoding) for Geeklog, the
+  Spam-X, and Static Pages plugins, provided by Yaroslav Fedevych
+
+
+Nov 20, 2005 (1.4.0b1)
+------------
+
+- Introduced {start_storylink_anchortag} and {end_storylink_anchortag} template
+  variables in the story and commentbar template files which only produce a
+  link to the story when not on article.php, thus avoiding links back to the
+  article page itself, which the spider for Google News doesn't seem to like
+  (feature request #486) [Dirk]
+- Added a workaround for image uploads using GD when ImageCreateTrueColor is
+  not available (patch #468) [Dirk]
+- Allow a subject to be passed as a parameter for the "contact user" form
+  (based on patch #497) [Dirk]
+- Added support for right-to-left languages (based on patch #488) [Dirk]
+- Update Feeds and Older Stories block when changing topic settings [Dirk]
+- Added a hits counter to events and added a Top Ten Events section to the
+  site stats [Dirk]
+- Introduced $_CONF['show_topic_icon'], i.e. the default setting whether to
+  show topic icons or not [Dirk]
+- The "Older Stories" block now only lists articles that appeared on the
+  frontpage (i.e. have not been set to "Show only in topic", bug #408) [Dirk]
+- Fixed problems with query highlighting in stories scrambling links in
+  autotags (bug #492) [Dirk]
+- Group names are now unique (as they should have been from the beginning). The
+  install script takes care of existing duplicate group names when upgrading
+  to 1.4.0 (bug #367) [Dirk]
+- Allow for more topic IDs in the user's preferences (bug #490) [Dirk]
+- Replace autotags in the Daily Digest (bug #484) [Dirk]
+- Explicitly link to /docs/index.html for the documentation link in the Admin's
+  block (bug #504) [Dirk]
+- Added an option to enable / disable trackbacks per story (just like you can
+  enable / disable comments per story) [Dirk]
+- Changed COM_optionList to check for language arrays which override the text
+  strings that are embedded in the database (for comment mode, featured story,
+  post mode, etc.) Bug #227 [Dirk]
+- Fixed Bug #174 -- quotes in titles are no longer double htmlentized [Vinny]
+- The default permissions for new objects (stories, topics, blocks, etc.) can
+  now be set in config.php (feature request #90) [Dirk]
+- Added an "Active users" entry to the site statistics. If Geeklog is configured
+  to track a user's last login, this will display the number of users who
+  logged into the site during the last 4 weeks. Otherwise, it displays the
+  number of user accounts with status = 3 (i.e. have logged into their account
+  at least once and haven't been banned) [Dirk]
+- Introduced a new plugin API function so that the plugin's summary (e.g.
+  number of items) can be properly integrated with the "Site Stats" section.
+  Modified stats/sitestatistics.thtml, removed stats/stats.thtml, added
+  stats/singlesummary.thtml template files [Dirk]
+- Introduced a generic function, USER_getPhoto, which provides the user's photo,
+  if available. The function also supports getting the user's avatar from
+  gravatar.com (if enabled in config.php) [Dirk]
+- The texts in the What's New block ("x new stories in the last y hours",
+  "last 2 weeks", etc.) now properly reflect the actual settings of the
+  $_CONF['newXXXinterval'] variables (bug #390) [Oliver, Dirk]
+- Introduced a method to signal a forced update for feeds in case the content
+  of one of the feed entries has changed  - so far, we only checked if entries
+  had been added or removed (bug #277) [Dirk]
+- Added $_CONF['show_right_blocks'] option which, if set = true, will display
+  right-side blocks on all pages (also addresses feature request #31) [Dirk]
+- Fixed bug #454, SQL error when reading comments. [Vinny]
+- Leave off the "page=1" parameter on the "Google paging" navigation bar for
+  links that point back to the first page [Dirk]
+- The default feed for a new site is now in RSS 2.0 format and named
+  "geeklog.rss" [Mike, Dirk]
+- Added time of the day to the name of the database backups to allow several
+  backups a day [Oliver]
+- When the search returns no results, the search form is now pre-populated
+  with the last search query, so that it can be changed easily. On successful
+  searches, a "refine search" link will appear that also takes you back to a
+  pre-populated search form (to refine your search, obviously) [Dirk]
+- Changed search to only return a certain amount of hits per page, thus
+  avoiding timeouts on servers where the script execution time is limited
+  (bug #274) [Dirk]
+  A new config variable, $_CONF['num_search_results'], defines the number of
+  search results to be returned per page (and per type). The search form also
+  includes a drop-down menu where this can be changed for every search.
+  Plugins will have to indicate if they support this "paged" search. Otherwise,
+  Geeklog will fake the paging for the plugin, so that the plugin does a full
+  search for every page, but Geeklog will only display the hits for the current
+  page (such a plugin can therefore still cause a timeout until it is changed
+  to support "paged" searching).
+- Added a permanent link to comments (in the professional theme) [Vinny]
+- Added new icons for the admin sections and made sure each admin section
+  now has an icon in admin/moderation.php [Dirk]
+  The new icons have been taken from the Gnome project (some of them modified
+  by Jakub Steiner). They are released under the GPL.
+- Introduced global variable $_IMAGE_TYPE that specifies the image type to
+  use. Defaults to 'gif'. Themes can override it to use other images types,
+  e.g. PNG, for all images [Dirk]
+- Added option to upload topic icons (Feature Request #415, Patch #423),
+  provided by Alford Deeley (machinari)
+- Changed the Admin's "Command and Control" center such that there is an icon
+  for every entry in the Admin's block [Dirk]
+- Removed duplicate code for creating a "topic SQL" query in moderation.php
+  (use COM_getTopicSQL instead) [Dirk]
+- Added the ability to allow users to login via defined remote services (ships
+  with Blogger and LiveJournal support) [Mike]
+- Added the ability to ban users, and to tell when a user has logged in at least
+  once [Mike]
+- Added edit-icon, List-Sorting, searching, Limits & alternating row colors
+  in admin menus for groups, syndication, staticpages, trackback
+  (where not yet done) [Oliver]
+- Added function to allow user-defined scaling of images in articles by using
+  [unscaledX] instead of [imageX] [Oliver]
+- Removed $_CONF['whosonline_fullname'] option - use $_CONF['show_fullname']
+  instead [Dirk]
+- Fixed bug where extra slashes appeared when previewing comments [Vinny]
+- Removed the "lastvisit" cookies, as they are obviously not used [Dirk]
+- Removed redundant changepwd-button & code from /admin/user.php (Bug #9)
+  [Oliver]
+- Added new feature to insert a feed-links into header depending on topic, to
+  be chosen from /admin/syndication.php in the form of
+  <link rel="alternate" type="application/{format}+xml" ....> [Oliver]
+- Added options to google-Navigation so it can be used by plugins and work with
+  url-rewriting (feature request #315). [Oliver]
+- Userlist now also shows Registration Date and if $_CONF['lastlogin']= true it
+  shows the last login date instead. [Oliver]
+- Added option in config.php to hide "Viewed: x" line with
+  $_CONF['viewscountline'] just as the $_CONF['contributedbyline'] [Oliver]
+- Added function COM_numberFormat to format displayed numbers with custom
+  decimal & thousand - separators and fixed decimal places if necessary
+  Includes the respecitve 3 new config.php values in locale section.
+  (Feature Request #298) [Oliver]
+- Default Blocks showed always in all Topics before. Now you can choose to show
+  them in All/only one topic/only on homepage like other blocks (feature #326)
+  [Oliver]
+- A Story can now break over several pages in the body-text. The tag
+  [page_break] will split the bodytext in pieces that can be opened with the
+  std. COM_printPageNavigation. Introtext is removed for pages>1 [Oliver]
+- Added field for old password check in /usersettings.php (bug #230) [Oliver]
+- Added password confirmation to /admin/user.php and /usersettings.php
+  (bug #230) [Oliver]
+- Made the alternating row colors in the Admin's trackback functions compatible
+  with the scheme used in other places (list of users, etc.). Also changed the
+  list of weblog directory services so that editing is now done by clicking on
+  the number of the service [Dirk]
+- Stories are no longer forced to be featured _and_ on frontpage (bug #362)
+  [Oliver]
+- Changed links locations in User-list, added user-photo indicator [Oliver]
+- Don't update a story's date any more when unchecking the 'draft' flag
+  (bug #400) [Dirk]
+- Don't use "rewritten" URLs in the static pages editor any more (bug #403).
+  Also updated the list of static pages to use alternating colors for the
+  rows [Dirk]
+- Use "\r\n" when sending trackback pings (bug #407) [Dirk]
+- Allow autotags to optionally have a space after the tag name [Blaine]
+  Valid tags are:
+  [story:20040101093000103 here] or [story: 20040101093000103 here]
+- Fixed inconsistent use of {site_url} and {layout_url} in some of the
+  professional theme's admin template files - using {layout_url} everywhere
+  now when referring to icons (bug #395) [Dirk]
+- Event titles containing quotes were cut off at the first quote in the event
+  editor, i.e. both the admin's event editor and the editor for personal events.
+  (bug #399) [Dirk]
+- Modified PLG_templateSetVars API to also check for a custom function [Blaine]
+  Users can now set header template using CUSTOM_templatesetvars()
+- Added new CSS declarations as recommened CSS for plugins   [Blaine]
+- Added a basic scheduler Plugin API plugin_runScheduledTask  [Blaine]
+  Interval is set in config.php - $_CONF['cron_schedule_interval']
+- Enhanced the Group Admin interface display [Blaine]
+- Enhanced the User Admin display and made the headings sortable [Blaine]
+- Geeklog will now properly handle html special characters (such as quotes and
+  ampersands) in comment titles (bug #174) [Vinny]
+- Hide 'edit' option for articles in preview (bug #347) [Dirk]
+- Changed admin/user.php to use file() for the batch import [Dirk]
+- Implemented pinging weblog directory services like blo.gs and weblogs.com
+  (Feature Request #35). By default, we ping pingomatic.com [Dirk]
+- Complete overhaul of the Plugin Comment API to reduce the likelyhood of
+  plugins introducing security problems.  Older plugins that use the comment
+  API will no longer work. [Vinny]
+- Refactored Comment code out of lib-common.php and into lib-comment.php, also
+  some changes to comment.php [Vinny]
+- Introduced a 'story.ping' permission that enables users to send Pings,
+  Pingbacks, and Trackbacks for a story (or plugin item). Members of the Story
+  Admin group have that permission by default.
+- Overhauled install script: It will now abort the installation if the minumum
+  requirements (PHP 4.1.0, MySQL 3.23.2) are not met. It also displays a warning
+  message if register_long_arrays is off (PHP 5 only, bug #360). Another
+  warning message is displayed if "public_html" is part of the URL.
+  When upgrading, it now tries to identify the Geeklog version that was used
+  previously (only really works for versions 1.3.8 - 1.3.11) [Dirk]
+- Fixed date in comment preview (bug #370) [Dirk]
+- Incorporated the new syndication framework for reading and writing feeds of
+  different formats (RSS, RDF, Atom), provided by Michael Jervis (patch #352).
+  This contribution also addresses Task #19 ("RSS import class") and Feature
+  Request #67 ("Limiting number of entries in RSS feeds").
+  Please note that the feed writer classes, system/classes/*.feed.class.php,
+  are now obsolete and can be removed. Please also note this adds new PEAR
+  package requirements for Net_URL and HTTP_Request.
+- Added support for sending and receiving trackback comments (Feature Request
+  #34) Also implemented Pingback support in pretty much the same way. Once
+  received, Geeklog treats Trackbacks and Pingbacks the same and stores them
+  in the gl_trackback table. [Dirk]
+  Both can be switched off in config.php: $_CONF['trackback_enabled'] = false;
+  and $_CONF['pingback_enabled'] = false;
+- Added a new script, directory.php, that implements a date-based listing of
+  all the stories on a site [Dirk]
+  A link to the directory is available as a new option, 'directory', for the
+  $_CONF['menu_elements'] config variable, so that it can be added to the menu.
+- The column headline for event search results was not displayed [Dirk]
+- Added logos to syndication feeds. [Mike]
+- Added config option to disable new accounts (Patch #426 from Alford Deeley)
+  [Mike]
+- Alphabet Sort on Admin Menu and C&C Block [Mike]
+
+- New Farsi (Persian) language file, provided by Hesam.H
+- Updated Japanese language file, provided by Yusuke Sakata
+
+- New Farsi (Persian) language file for the static pages plugin,
+  provided by Hesam.H
+
+Links plugin 1.0.0
+------------
+- Added ID-editor and Autotags-feature [link: ... ] [Oliver]
+- Added Category-Specific Feeds [Oliver]
+- Added Edit-Icon, List-Sorting, searching, Limits & etc for admin menu [Oliver]
+- Moved links functionality into a plugin [Trinity, Oliver]
+
+Polls plugin 1.0.0
+------------
+- Polls moved to a plugin [Trinity]
+
+Spam-X plugin 1.0.3
+-------------
+- The LogView module now automatically truncates the Spam-X logfile to 100KB
+  [Tom Willet]
+- The IP Blacklist module now supports regular expressions [Mike]
+- Added a Mass Delete module for Trackback comments [Dirk]
+- Added an "admin override" option, so that postings by members of the 'spamx
+  Admin' group will not be checked for spam [Dirk]
+
+
+July 16, 2006 (1.3.11sr7)
+-------------
+
+JPCERT/CC informed us about a possible XSS in the comment handling that we're
+fixing with this release.
+
+
+May 28, 2006 (1.3.11sr6)
+------------
+
+The Security Science Researchers Institute Of Iran reported the following
+security issues:
+
+- Possible SQL injection and authentication bypass in auth.inc.php
+- Possible XSS in getimage.php
+- Path disclosure in getimage.php and the functions.php of some themes,
+  e.g. the Professional theme
+
+An internal code review also revealed a possible SQL injection in story
+submissions.
+
+
+Mar 5, 2006 (1.3.11sr5)
+-----------
+
+Security issue:
+
+- Konstantin Dyakoff found an old bug in the session handling that would allow
+  anyone to log in as any user.
+
+
+Feb 19, 2006 (1.3.11sr4)
+------------
+
+Security issues:
+
+- James Bercegay of GulfTech Security Research reported several issues with
+  Geeklog's cookie handling that made it vulnerable to SQL injections, arbitrary
+  file access, and even injection and execution of arbitrary code.
+- Prevent execution of PHP code in "normal" blocks
+
+
+Dec 12, 2005 (1.3.11sr3)
+------------
+
+Security issues:
+
+- Fixed comment bug that allowed comments to be saved even when user did not
+  have the correct story/topic permissions (reported by LWC) [Vinny]
+- Fixed a path disclosure in case someone tampered with the start date or end
+  date in advanced search (reported by r0t3d3Vil) [Mike]
+  Feeding malformed dates to the search caused a warning message to be displayed
+  that disclosed the path to the Geeklog install on the server. It was NOT
+  possible to use this for SQL injections.
+
+Bugfixes:
+
+- Fixed the problems (introduced in 1.3.11sr2) editing static pages when
+  $_CONF['url_rewrite'] = true (bug #491) [Dirk]
+- The "Reply" button didn't work when viewing individual comments [Vinny]
+- Fixed the definition of the 'expire' field (in table gl_stories), which
+  caused an SQL error when doing a fresh install on MySQL 5
+  (reported by Johannes) [Dirk]
+
+- Fixed and updated the Hebrew language file [LWC, Dirk]
+- New Ukrainian language file (Windows-1251), provided by Vitaliy Biliyenko
+- New Ukrainian language files (UTF-8 and KOI8-U encoding) for Geeklog, the
+  Spam-X, and Static Pages plugins, provided by Yaroslav Fedevych
+
+
+Oct 9, 2005 (1.3.11sr2)
+-----------
+
+This release provides security enhancements and better spam protection
+originally developed for Geeklog 1.3.12. It also addresses a few bugs where
+the bugfix could be integrated with a reasonable amount of work (other bugfixes
+will have to wait for the 1.3.12 release).
+
+Security and Spam protection:
+
+- Added speedlimit to login attempts, defaults to allowing three tries in a
+  five minute period.  [Vinny]
+  See new config options $_CONF['login_attempts'] and $_CONF['login_speedlimit']
+- Changed the spam handling to update the speed limit when spam is detected
+  (i.e. handle spam posts as if they were successful posts and make the
+  submitter wait for the speed limit to expire). Also send a 403 "Forbidden"
+  HTTP response code when displaying the "spam detected" message [Dirk]
+  To quote RFC2616: "403 Forbidden: The server understood the request, but is
+  refusing to fulfill it. Authorization will not help and the request SHOULD
+  NOT be repeated."
+- Filter linefeeds in the To:, From:, and Subject: fields of an email in
+  COM_mail [Dirk]
+- When a new user account is created and the user submission queue is enabled
+  in config.php, ensure that the user is properly "queued" even in the
+  unlikely event that the account creation fails halfway through (reported by
+  LWC) [Dirk]
+- When $_CONF['emailstoryloginrequired'] = 1, hide the links to the "email
+  story" form from anonymous users [Dirk]
+- When emailing a story, check the user's message that is sent with the story
+  for spam [Dirk]
+- Added a robots.txt file to the distribution. By default, it excludes
+  comment.php, submit.php, and the docs directory from being spidered [Dirk]
+- Added a spam check to the user profile [Dirk]
+- Story, event, and link submissions are now also checked for spam [Dirk]
+- This release also includes the Spam-X plugin version 1.0.2
+
+Please note that MT-Blacklist (used by Spam-X) has recently been discontinued.
+For the time being, we provide the last version of the blacklist for download
+from geeklog.net (the Spam-X plugin as included in this release is configured
+to get it from there for the initial import). There will, however, be no
+updates the blacklist. For details, please see
+http://www.geeklog.net/article.php/mt-blacklist-discontinued
+
+Bugfixes:
+
+- Fixed an error message thrown up by PHP 5.0.5 or later when viewing the
+  article page (bug #483) [Dirk]
+- Fixed bug with topic-specific blocks not showing up on the article page when
+  URL rewriting was enabled (bug #401) [Dirk]
+- Fixed missing site header when trying to submit an event without required
+  fields. Also fixed that it would redirect you to the story submission form
+  then (bug #409) [Dirk]
+- Make sure {menu_elements} is rendered using the menuitem_none.thtml template
+  when no menu elements are to be displayed (bug #378) [Dirk]
+- Quote names in email addresses as soon as they contain any non-alphanumeric
+  characters (apart from the blank). This also addresses bug #368 [Dirk]
+- Allow single quotes in passwords (bug #396, also previously reported as
+  bug #349 / #996354) [Dirk]
+- When $_CONF['profileloginrequired'] was set to 1, the actual message that
+  you have to log in before being able to see a user profile was not wrapped
+  in the Geeklog framework (reported by Sean C) [Dirk]
+- Fix: Made a story's archive/expire date work with the timezone hack [Dirk]
+- COM_applyFilter will now accept negative numbers if the isnumeric parameter
+  is true. Needed to fix problems with pollbooth.php (and others) [Vinny]
+- Upgraded included kses class to version 0.2.2 which fixes problems with
+  Japanese and Thai characters (among other things), thus addressing bugs #94
+  and #119 [Dirk]
+- Fixed SQL error when using the [staticpage:] autotag (bug #373) [Dirk]
+- Added a missing stripslashes call to remove backslashes when a topic's name
+  was displayed in the index page's title (bug #369) [Dirk]
+- Link tags are now translated in printer friendly mode (Bug #411) [Mike]
+- Removed the <meta name="ROBOTS"> entry from the Professional theme's
+  header.thtml as "INDEX,FOLLOW" is the default anyway. For finer control,
+  we now ship a robots.txt [Dirk]
+
+Improvements:
+
+- Don't check for auto-archived stories when no archive topic has been
+  defined yet [Dirk]
+- Added support for a custom_usercheck function. Custom registration code that
+  requires certain information can now abort the creation of a new account if
+  that information is missing. The function is called after Geeklog has checked
+  that the username and email address of the new user are okay (valid and not
+  in the database yet), but before the user has been added to the database
+  [Dirk]
+- Saved one SQL request for a story's printable view [Dirk]
+
+Language files:
+
+- Made sure all language files refer to Geeklog's [image] tags as [imageX],
+  [imageX_right], and [imageX_left] (bug #381) [Dirk]
+
+- New Catalan language file, provided by an anonymous user
+- New Russian (UTF-8) language file, provided by Konstantin Boyandin
+- Updated Hebrew language file, provided by LWC
+- Updated Hellenic (Greek) language file, provided by MzOzD
+- Updated Italian language file, provided by Marcello Teodori
+- Updated Japanese (UTF-8) language file, provided by Yusuke Sakata
+- Updated Portuguese (Brazil) language file, provided by Alcides Soares Filho
+- Updated Russian language file, provided by Konstantin Boyandin
+
+- New Japanese (UTF-8) language file for the Static Pages plugin, provided by
+  Yusuke Sakata
+- Updated Italian language file for the Static Pages plugin, provided by
+  Marcello Teodori
+- Updated Japanese language file for the Static Pages plugin, provided by
+  Yusuke Sakata
+
+
+Aug 21, 2005 (Spam-X plugin 1.0.2)
+------------
+
+- Changed the display name of the plugin to "Spam-X" to avoid potential
+  confusion with the email spam filter of the same name.
+  "SpamX" is a registered trademark of Hendrickson Software Components.
+- Added a new module to filter posts based on the IP address of the poster
+  [Tom Willet]
+- Added  a new module to filter posts based on the IP address of the
+  spamvertised site [Tom Willet]
+- Added a new module to filter posts based on characteristics of the HTTP header
+  [Dirk]
+- Fixed the Mass Delete Spam Comments module [Tom Willet]
+- The Spam-X plugin's examine modules run the post through html_entity_decode()
+  now in case the spammers try to obfuscate their posts by using HTML entities
+  [Tom Willet, Dirk]
+- The Mail Admin action module now also reports the HTTP headers of the post
+  that triggered the spam filter [Dirk]
+- Added a simple stats function (reports the number of posts deleted as spam,
+  and - to the Spam-X Admin only - the number of entries for each module) [Dirk]
+- Implemented an update function for the plugin [Dirk]
+
+- New Farsi (Persian) language file, provided by Hesam.H
+- New Italian language file, provided by Marcello Teodori
+- New Spanish language file, provided by vivi1123
+
+
 Jul 3, 2005 (1.3.11sr1)
 -----------
 
@@ -60,7 +786,7 @@
 - When using mogrify (ImageMagick) to resize uploaded images, the name of the
   image is now enclosed in double quotes instead of single quotes, which
   caused the command to fail on Windows [Dirk]
-- The emails sent from the SpamX plugin's MailAdmin action now also include
+- The emails sent from the Spam-X plugin's MailAdmin action now also include
   the IP address of the spam poster [Dirk]
 - SEC_getFeatureGroup() should not overwrite $_GROUPS if not operating on the
   current user (bug #331) [Dirk]
@@ -122,7 +848,7 @@
 - Updated Dutch language file, provided by Ko de Pree.
 - Updated Dutch language file for the Static Pages plugin,
   provided by Ko de Pree.
-- New French language files for the SpamX plugin, provided by Alain Ponton.
+- New French language files for the Spam-X plugin, provided by Alain Ponton.
 
 
 Nov 28, 2004 (1.3.10)
@@ -151,7 +877,7 @@
   enclosed in <a> tags) when the post is saved instead of when it's displayed,
   as in the previous release candidates. This also fixes bug #308. [Dirk]
 - Added $_CONF['disable_autolinks'] config option to disable autolinks [Dirk]
-- Removed ViewBlacklist.Admin.class.php from the SpamX plugin [Tom Willet]
+- Removed ViewBlacklist.Admin.class.php from the Spam-X plugin [Tom Willet]
 - Overhauled handling of personal events [Dirk]:
   + Fixed deleting personal events (again).
   + The upcoming events block now links to the event details of personal
@@ -202,7 +928,7 @@
   RFC(2)822 compliant email address from a name and an address [Dirk]
   This function is now used for formatting the site address, as well as for
   addresses entered by the user in profiles.php and admin/mail.php.
-- The SpamX plugin's MailAdmin action didn't send any email notifications,
+- The Spam-X plugin's MailAdmin action didn't send any email notifications,
   since the call to COM_mail was commented out ... [Dirk]
 - admin/mail.php and admin/group.php use the complete URL to the script in
   the <form action="..."> now (instead of relying on PHP_SELF) [Dirk]
@@ -213,7 +939,8 @@
 
 Oct 17, 2004 (1.3.10rc1)
 ------------
-
+- Added new functionality to [autotags] - New plugin API's added  [Blaine]
+- Added [autotag] hooks for stories  [Bline]
 - When a plugin had its icon only in the admin directoy, the plugin editor
   did not find it and displayed a generic icon instead [Dirk]
 - In admin/mail.php, apply htmlspecialchars() on the email addresses before
@@ -274,7 +1001,7 @@
   case), digits 0-9, the dash '-', and the underscore '_' [Dirk]
 - The Upcoming Events block didn't use the help URL, even if it was set
   (reported by Wolfgang M. Schmitt) [Dirk]
-- Geeklog now comes with Tom Willet's SpamX plugin pre-installed. The plugin
+- Geeklog now comes with Tom Willet's Spam-X plugin pre-installed. The plugin
   now stores the blacklists in the database and uses a new plugin API
   function to filter comment posts [Tom Willet, Tony, Blaine, Dirk]
 - Plugins can now offer their own tags to allow easy linking to their content.
@@ -373,7 +1100,7 @@
   .smallcal-week-even, .smallcal-week-odd, .smallcal-week-empty,
   .smallcal-day-even, .smallcal-day-odd, and .smallcal-day-empty [Dirk]
 - Improvements to the Story Archive Feature, UI tweaks, Language Extraction,
-  Added new field to the topics table. Admin now sets the archive topic in 
+  Added new field to the topics table. Admin now sets the archive topic in
   the Topic Editor. Only one topic can be used - logic enforced. [Blaine]
 - Don't emit the <br><br> in article.php when the story's body text is empty
   (based on patch #147, provided by Andy Maloney) [Dirk]
@@ -387,7 +1114,7 @@
   to archive or delete a story when the expire date is reached [Blaine]
 - Improved the commentbar to logically support comments viewed from comment.php
   [Vinny]
-- Removed a bug in comment.php that allowed a story/comment mismatch during 
+- Removed a bug in comment.php that allowed a story/comment mismatch during
   display.  This was not exploitable.  [Vinny]
 - Integrated the timezone hack to compensate for time differences when your
   webserver is located in another timezone (original timezone hack by Yew Loong,
@@ -500,14 +1227,14 @@
   page (patch provided by Niels Leenheer). [Dirk]
 - Introduced function COM_makeClickableLinks to turn URLs in text-only posts
   into clickable links (i.e. it's adding <a> tags around URLs). [Dirk]
-- Changed the comment insert, delete, display algorithms for improved 
+- Changed the comment insert, delete, display algorithms for improved
   efficiency. They now use a modified preorder tree traversal method. [Vinny]
 - Comment limit now applies to all the comments displayed, not just the top
   level comments. [Vinny]
 - Added pagination ability to comments ({pagenav} template variable in
   startcomment.thtml). [Vinny]
 - Fixed typo in timer.class.php that broke the ->restart() function. [Vinny]
-- Make sure the database backup files are always sorted by (last modified) date 
+- Make sure the database backup files are always sorted by (last modified) date
   (found & fixed by Alexander Schmacks). [Dirk]
 - Make sure the user's preferred comment limit is used when changing the
   comment display via the comment bar (bug #176). [Vinny]
@@ -571,15 +1298,6 @@
 - New Portuguese (Brazil) language file, provided by Alcides Soares Filho.
 
 
-Jul 3, 2005 (1.3.9sr4)
------------
-
-This release addresses the following security issue:
-
-Stefan Esser found an SQL injection that can, under certain circumstances,
-be exploited to extract user data such as the user's password hash.
-
-
 Dec 31, 2004 (1.3.9sr3)
 ------------
 
@@ -848,7 +1566,7 @@
   be used as an alternative to {edit_link}, i.e. as an icon that Story Admins
   can click on to edit a story.
 - You can now enable debug messages (to error.log) for the image upload by
-  setting $_CONF['debug_image_upload'] = true in config.php. 
+  setting $_CONF['debug_image_upload'] = true in config.php.
 - When deleting a group, delete all references to that group from the
   group_assignments table (bug #50). The install script will remove any
   orphaned entries when upgrading the database to 1.3.9.
@@ -1344,7 +2062,7 @@
 - Changes to make Geeklog install and work again on old versions of MySQL
   (e.g. MySQL 3.22). Special thanks to Markus Guske for providing the fixes
   for the What's New block and for testing the new install.
-- Feb 13/03: (Blaine) Added new Plugin function to support Center Blocks 
+- Feb 13/03: (Blaine) Added new Plugin function to support Center Blocks
   Included call to PLG_showCenterblock in index.php
 - The user's signature is now appended to messages sent to another user.
 - Feb 6/03: (Blaine)  Added support for custom user registration and account
@@ -1365,7 +2083,7 @@
   dbdelete, dbchange, dbcount and dbcopy for a passed value of 0 were not
   sufficient. If the parameter was 0 - it was assuming it was empty.
   Consequence: The dbdelete would delete all records or dbcount would return
-  count(*) 
+  count(*)
 - Display Preferences and Comment Preferences have been merged. There is now
   only one option, Preferences, in the User Functions block.
 - Hard-coded HTML for the Display Preferences, Comment Preferences, and
@@ -1428,7 +2146,7 @@
 
 1. As "dr.wh0" pointed out, the category field for link submissions was not
    filtered at all. Although you probably can't cause too much harm with
-   those 32 characters, this has now been fixed. 
+   those 32 characters, this has now been fixed.
 2. Vincent Furia found that the restrictions for the form to email users
    could be circumvented and could even be used to spam users.
 3. There was a way to post comments anonymously even when posting for
@@ -2055,7 +2773,7 @@
 - admin/event.php now saves am/pm and allday properly
 - PollAdmin group can now properly add a new poll.
 - fixed SEC_getUserGroups() so that it always returns an array even if no groups are returned (e.g.
-  empty array                                                                                            
+  empty array
 - fixed moderation.php so post mode is saved properly from storysubmission to story table.
 - killed 1064 bug in admin/event.php
 - set error_reporting() so uninitialized variables don't show up (common in poorly configured PHP installs)
@@ -2068,7 +2786,7 @@
 - admin/user.php has a very simple batch import utility.  You can now create multiple
   accounts by importing a tab-delimited file.  See that page for file format specs
 - story.php was reworked a bit to be simplified and to correctly do paging (old
-  paging feature had a bug where one article would never show up.                                                                            
+  paging feature had a bug where one article would never show up.
 - admin/user.php now allows for paging and searching.  Check it out, you'll see what I mean ;-)
 - blocks can now be disabled in admin/block.php
 - added support for images in articles
@@ -2122,7 +2840,7 @@
   selected only the topics they wanted to get articles for (index.php)
 - Fixed bug in story admin that would prevent the date edit from prepopulating right when admin hit
   the preview button (admin/story.php)
-- Modified admin/plugin.php to reflect change in how plugins are installed.  Because of platform 
+- Modified admin/plugin.php to reflect change in how plugins are installed.  Because of platform
   dependance issues, all plugins will have a simple but manual installation process.  This should
   work across all platforms. (admin/plugin.php, layout/Yahoo/admin/plugins/pluginlist.thtml,
   layout/Classic/admin/plugins/pluginlist.thtml, layout/Digital_Monochrome/admin/plugins/pluginlist.thtml)
@@ -2133,7 +2851,7 @@
 March 1, 2002
 -----------------
 - Admins can now manually edit the publish date of an article.  This include the ability
-  to set the date for a time in the future.  In that case the article is completely 
+  to set the date for a time in the future.  In that case the article is completely
   ignored by COM_exportRDF, stats.php, search.php and the email digest
 - Rudimentary support for database backups (one per day at most).  There is no restore
   capability at this time.
@@ -2213,7 +2931,7 @@
 
 August 3, 2001
 ----------------
-- Released 1.2.2 
+- Released 1.2.2
 - Added the ability for admins to save drafts of stories
 - Fixed a bug with in calendar_event.php when adding event to user calendar
 - Fixed a bug with the search bar in header.php
@@ -2229,7 +2947,7 @@
 
 July 19, 2001
 ----------------
-- Released 1.2 stable.  
+- Released 1.2 stable.
 - Added personalized calendars
 - Fixed a number of bugs from 1.2b
 - Fixed MySQL 3.23 incompatibility issues
@@ -2263,7 +2981,7 @@
 -added file custom_code.php.  This is where admins should put all custom code (not addon code).  GL admins should never touch common.php moving forward
 -added version checking system to let admins check for current version
 -added $CONF["OS"] for use by Geeklog Addons (Use PHP OS variable).  It represents the operating system that Geeklog is running on and is useful for producing useful error messages should a user be trying to use an addon that is OS specific
- 
+
 
 September 24, 2000
 ---------------------------------------
@@ -2285,7 +3003,7 @@
 - Fixed comment post mode preview bug.
 - If a block is empty, it will not be displayed.
 - Fixed a user creation error.
-- Fixed the submission scripts to add and remove 
+- Fixed the submission scripts to add and remove
   slashes in all the right places.
 
 September 13, 2000
@@ -2304,7 +3022,7 @@
 
 - If a user sets maxstories to less than 5, max stories
   will be 5.
-- If a story id and poll id are the smae they will 
+- If a story id and poll id are the smae they will
   share comments and the poll will be displayed on the
   stories article page.
 - Poll results box is now linked to comments.
@@ -2325,7 +3043,7 @@
 September 9, 2000
 -----------------
 
-- Updated some missing to language in english.php.  
+- Updated some missing to language in english.php.
   Thanks to Hidekazu SHIOZAWA.
 - Updated the stats script.
 - Added post modes, the user can now select plain
@@ -2335,14 +3053,14 @@
 September 8, 2000
 -----------------
 
-- Fixed a few more issues surronding the 
+- Fixed a few more issues surronding the
   $CONF["site_url"] placement. Thanks to Hidekazu SHIOZAWA.
 - Added sig to user accounts.
 - Added a system hit counter
 - Fixed a poll comment bug.
 - Comments can now be enabled on a per story basis.
 - Comments can now be enabled on a per poll basis.
- 
+
 September 7, 2000
 -----------------
 
@@ -2350,10 +3068,10 @@
 - Fixed a few issues surronding the $CONF["site_url"]
   placement in links.
 - Began work on new user customization system!
-	- Index Configuration
-	- Comment Configuration
-	- Story Configuation
-	- User Configuration
+        - Index Configuration
+        - Comment Configuration
+        - Story Configuation
+        - User Configuration
 - Fixed the link submission script so it now
   actually works.
 
@@ -2361,7 +3079,7 @@
 -----------------
 
 - Updated the email story to a friend to use the
-  db widgets. 
+  db widgets.
 - Fixed the "More by author" search links from the
   article page.
 - Fixed the article editor to be able to delete
@@ -2372,7 +3090,7 @@
 - Fixed a formating error on the links page.
 - Fixed the admin user editor to allow blanking
   on non-essential fields.
-- Removed moderation option from config.  If you 
+- Removed moderation option from config.  If you
   want an unmoderated site there are better
   applications out there like UBB and FreeLinks.
 - Updated the user profile page to put all
@@ -2396,14 +3114,14 @@
   users.
 - Fixed references to speck.gif, spec.gif was
   referenced incorrectly.
-- Fixed the story submission to correctly 
+- Fixed the story submission to correctly
   record the user instead of Anonymous.
 - Added multiple previews when submitting a
   story.
 - Update to english.php
 - Updated the blockparser to use str_replace()
   instead of strtr().  The use of strtr() was
-  causing issues on some platforms using 
+  causing issues on some platforms using
   earlier versions of PHP4.
 - Added a sample httpd.conf Apache configuration
   file to the distribution.
@@ -2524,21 +3242,21 @@
 August 11, 2000
 ---------------
 
-- Completed new story editor and managment 
+- Completed new story editor and managment
   functions.
 - Completed database widgets.
 - Began work on reworking the poll editor
   and managment.
 - Removed the following functions that have
   become obsolete:
-	- countx
-	- topicsel
-	- getTopic
-	- saveuser
-	- rot13
+        - countx
+        - topicsel
+        - getTopic
+        - saveuser
+        - rot13
 - Removed the following array used to set
   premissions in older versions
-	- $ADMIN
+        - $ADMIN
 - Began work on intergrating comments with
   user accounts.
 
@@ -2553,7 +3271,7 @@
 August 7, 2000
 --------------
 
-- More work on new submission engine and 
+- More work on new submission engine and
   database widgets.
 - Implemented submission speed limit.
 
@@ -2592,7 +3310,7 @@
 - Comment preview now displays the date correctly.
 - Made the log path configurable.
 - Fixed false "no stories" error in index.php.
-- Fixed the topic highlighting in showtopics.  
+- Fixed the topic highlighting in showtopics.
 - Fixed comments so that the posting and delete
   work properly again.
 - Events (calander) now properly parses special
@@ -2617,7 +3335,7 @@
 -------------
 
 - Added the featured article functionality.
-- Fixed a special charactors problem in the 
+- Fixed a special charactors problem in the
   comments, you can now use special charactors.
 - Made some changes to the email story function
   to provide a statement on this isn't spam!
@@ -2626,7 +3344,7 @@
 July 25, 2000
 -------------
 
-- Began moving strings from the admin files in to 
+- Began moving strings from the admin files in to
   english.php
 - Finished up printable story and email story
   functions.
@@ -2639,7 +3357,7 @@
   being stripped properly.
 - Fixed the comment control bar, the title and
   number of comments are now showing up correctly.
-- Fixed the url encoding in the reply links.  The 
+- Fixed the url encoding in the reply links.  The
   title of a reply now copies over in to the form.
 - Bought more vodka!  The vodka shortage is over!
 - Adjusted the comment spacing.
@@ -2665,7 +3383,7 @@
 - Changed password functions to use md5, crypt()
   is becoming to unreliable.  Running the dat
 
-<editor problems, change log for 0.4.1.2 - 0.4.1.1 lost> 
+<editor problems, change log for 0.4.1.2 - 0.4.1.1 lost>
 
 BETA RELEASE!!!  0.4.1!!! - July 19, 2000
 -----------------------------------------
@@ -2681,13 +3399,13 @@
 - Poll Dispaly bug fixed.  Poll wouldn't display if
   there wern't at least two user defined blocks.
 - Added word count to the read more display.
-- Move all strings for public side functions to 
+- Move all strings for public side functions to
   a resource bundle called english.php.  Geeklog can
   now be translated.  If you do translate Geeklog
-  please send me your resource file!  Great thanks 
+  please send me your resource file!  Great thanks
   goes to Mischa Polivanov for his work on this
   project!
-- When moderating a story, it now returns you to 
+- When moderating a story, it now returns you to
   the submissions que when your done.
 
 BETA RELEASE!!!  0.4.0!!! - July 8, 2000
@@ -2701,7 +3419,7 @@
 - Update the poll to restrict votes by IP.  This
   function only creates a table of IP addresses
   pollids and timestamps, votes are NOT tracked!
-  Addresses are deleted after an admin specified 
+  Addresses are deleted after an admin specified
   peroid of time set with the config.php variable
   $CONF["polladdresstime"].
 - Added $CONF["pollcookietime"] to config.php to
@@ -2712,10 +3430,10 @@
   view of the results.
 - Added SQL query interface for admins.  This was
   added for those that don't have shell access or
-  shell access isn't alaways avaiable for 
+  shell access isn't alaways avaiable for
   troubleshooting.  Be VERY careful with this!
 - Fixed a really nasty bug with the RDF import
-  HTTP calls!  This was causing the server to 
+  HTTP calls!  This was causing the server to
   lock up under certian circumstances.
 - Update showblocks() to now order polls and
   olderstuff as well.  Here's the new method:
@@ -2749,7 +3467,7 @@
   is going to be the bigest DB update script yet!
 - Calendar has been rewored as events, since I can
   see Security Geeks using this functionality for
-  things other than a calendar.  Hmm, what is he 
+  things other than a calendar.  Hmm, what is he
   thinking?
 - Adding CSS references where needed when I find
   them.
@@ -2798,12 +3516,12 @@
 - Added a new function to check email addresses.
 - Fixed a problem with the checking of <a href=>
   tags. (frank)
-- Moved more of the layout to CSS.  Giving some 
+- Moved more of the layout to CSS.  Giving some
   though to creating a CSS editor for the site.
 - Added additional error checking on submissions.
 - Evaluated the security of the file layout, file
   premissions, cookies and made some minor changes
-- Added the RDF import capibilty to the blocks.  
+- Added the RDF import capibilty to the blocks.
   Woo-hoo!  Half way there to 0.3.0!
 - Fixed a bunch of function calls that are now
   considered errors in PHP 4.0.1pl2 (richpav)
@@ -2812,15 +3530,15 @@
 ----------------------------------------
 
 - Tar'ed it up and shipped 0.2.1 BETA out the door!
-  The bugs fixed here are pretty signifant.  This 
+  The bugs fixed here are pretty signifant.  This
   has none of the 0.3.0 features.
 
 July 1, 2000
 ------------
 
-- Cleaned up the all of the PHP scripts and added 
+- Cleaned up the all of the PHP scripts and added
   missing ;'s. (macole)
-- Fixed some table layouts for comment and story 
+- Fixed some table layouts for comment and story
   submissions.
 
 June 30, 2000
@@ -2840,7 +3558,7 @@
 June 29, 2000
 -------------
 
-- Bugs Found Score: Women:28 Men:13 
+- Bugs Found Score: Women:28 Men:13
 - Security hole regarding user cookies.  The
   user cookie contined the site key, this 33%
   is part of the information needed to forge
@@ -2848,27 +3566,27 @@
 - Also fixed a problem in the user cookie where
   some of Jason's (the other Jason) info for
   his site was coded in there.
-- Added the ability to specify your own salt 
+- Added the ability to specify your own salt
   value for the encryptor.
 - Added filters that are admin configurable to
   strip out unwanted HTML tags and key words.
-  These options are configurable in the 
+  These options are configurable in the
   config.php file.
 - Blocks are now topic aware.
 - Change sid to char(20) in the database tables
-  stories and comments.  This was in order to 
+  stories and comments.  This was in order to
   create compatibilty between stories, comments
   and polls.
 - Poll comments!
-- Added a blockorder field to the blocks table. You 
+- Added a blockorder field to the blocks table. You
   can now modify the display order of blocks.
 - Fixed a bug in the link generation in stats.php.
 - Changed the description field in the links
   tables from varchar(255) to text to allow for
   longer descriptions.
-- Preview now uses article() function.  Shows a 
+- Preview now uses article() function.  Shows a
   true preview!
-- Fixed a bug in comment.php that still may the 
+- Fixed a bug in comment.php that still may the
   user type in a user name email even if if the
   anonymous option was chosen.  It never actually
   saved the info, just asked for it.  Now it no
@@ -2878,13 +3596,13 @@
 -------------
 
 - Correct setting of a user cookie in comment.php,
-  contrib.php and profile.php.  The cookie was not 
-  being set to remember a users infomation if they 
+  contrib.php and profile.php.  The cookie was not
+  being set to remember a users infomation if they
   selected to do so.
-- Fixed the CSS layout for the comment bar, this 
+- Fixed the CSS layout for the comment bar, this
   wasn't working properly under Netscape.
 - Fixed an error in the change password function.  It
-  was displaying a error even when the change was 
+  was displaying a error even when the change was
   successful.
 - Made total votes a caculated field in the poll
   editor, this is also a easy way to reset the count
@@ -2893,7 +3611,7 @@
   This also involved a change to the config.php file
   in which $CONF["topicssort"] was changed to
   $CONF["topicsort"].
-- Added feature to track which admin moderated a 
+- Added feature to track which admin moderated a
   story and posted it to the site.
 
 BETA RELEASE!!!  0.1.0!!! - June 27, 2000
@@ -2918,21 +3636,21 @@
 - Enhansed a bunch of the forms.
 - Removed some obsolete stuff, cleaned things up a bit.
 - Added some additional error checking to submits.  Also
-  moved all error checking to the server side.  I was 
-  testing the use of JavaScript but too many people 
+  moved all error checking to the server side.  I was
+  testing the use of JavaScript but too many people
   like to turn it off!  I know I do! :-)
 
 June 25, 2000
 -------------
 
 - Squashed 23 bugs with the help of my wife!  Now if
-  only Frank would get his bug reports in! 
+  only Frank would get his bug reports in!
 - Created interface for editing, creating and deleting
   links.
 - Cleaned PHP procedures out of inc files.
-- Updated and tested SQL statements to refelct DB 
+- Updated and tested SQL statements to refelct DB
   changes.
-- DB changes frozen for release and the beta testers 
+- DB changes frozen for release and the beta testers
   rejoiced!
 
 June 24, 2000
@@ -2958,7 +3676,7 @@
 - Added descriptions to the Links page.
 - Fixed the search page so its now formated correctly.
 - Finished up the pollbooth functions (edit and delete).
-- Optimized some of the HTML in the scripts, further 
+- Optimized some of the HTML in the scripts, further
   optimization later!
 
 June 21, 2000
@@ -2976,10 +3694,10 @@
 June 20, 2000
 -------------
 
-- Created admin functions for the pollbooth.  Seems the 
+- Created admin functions for the pollbooth.  Seems the
   other authors on the site don't like hand entering SQL!
   I don't like them having shell accounts!  -grin-
-- Update the Header feild in the Stories block to be a 
+- Update the Header feild in the Stories block to be a
   little bigger.  This should let wordy authors emblish
   their titles more!
 - Created a more robust errorlog routine.  Now has the
@@ -2996,7 +3714,7 @@
 -------------
 
 - Optimizations made to the SQL connections and calls.  Too
-  much done here to talk about, but part of it was moving 
+  much done here to talk about, but part of it was moving
   the site configuration to a flat file.  These changes
   should decrease the usage of the SQL server a great deal.
   This took up most of my day.
@@ -3009,7 +3727,7 @@
   servers.  So I changed all the extentions and links from
   .php3 to .php to mark this moment.
 - Restructured the directory layout so I can implement some
-  new security settings on the files.  Hmmm, I bet you 
+  new security settings on the files.  Hmmm, I bet you
   wondering "what is this mad-man thinking?"
 
 June 17, 2000
@@ -3017,8 +3735,8 @@
 
 - Initial announcement, running this new code on the Geeks
   web servers.
-- Special thanks to Jason Hines and phpWebLog! His work 
-  inspired much of my efforts!  Unfortunatly phpWebLog is 
+- Special thanks to Jason Hines and phpWebLog! His work
+  inspired much of my efforts!  Unfortunatly phpWebLog is
   taking a different direction that the Geeks sites needed.
   However, all the code I am writing here will be published
   in the hopes that Jason and others may find these functions
Files 1.3.11sr1/docs/images/de.png and 1.4.0sr5-1/docs/images/de.png differ
Files 1.3.11sr1/docs/images/germany.gif and 1.4.0sr5-1/docs/images/germany.gif differ
Files 1.3.11sr1/docs/images/japan.gif and 1.4.0sr5-1/docs/images/japan.gif differ
Files 1.3.11sr1/docs/images/jp.png and 1.4.0sr5-1/docs/images/jp.png differ
Files 1.3.11sr1/docs/images/pl.png and 1.4.0sr5-1/docs/images/pl.png differ
Files 1.3.11sr1/docs/images/poland.gif and 1.4.0sr5-1/docs/images/poland.gif differ
diff -ruN 1.3.11sr1/docs/index.html 1.4.0sr5-1/docs/index.html
--- 1.3.11sr1/docs/index.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/index.html	2006-08-08 02:39:06.000000000 -0500
@@ -32,9 +32,14 @@
   <li><a href="install.html">How to install Geeklog</a> (includes updating 
     instructions)</li>
   <li><a href="config.html">The Geeklog Configuration File</a> (config.php)</li>
-  <li><a href="staticpages.html">Static Pages plugin</a></li>
-  <li><a href="spamx.html">SpamX plugin</a></li>
-  <li>Geeklog's API<br>
+  <li>Pre-installed plugins
+    <ul>
+      <li><a href="staticpages.html">Static Pages plugin</a></li>
+      <li><a href="spamx.html" rel="nofollow">Geeklog Spam-X plugin</a> - Fight comment spam!</li>
+      <li><a href="polls.html">Polls plugin</a></li>
+    </ul></li>
+  <li><a href="trackback.html">Trackback, Pingback, Ping</a></li>
+  <li>Geeklog's API
     <ul>
       <!-- <li>Geeklog Function List</li> -->
       <li><a href="plugin.html">Plugin Development</a></li>
@@ -50,7 +55,7 @@
 
 <p>Geeklog is a weblog powered by PHP and MySQL. It allows you within minutes 
 to set up a fully functioning dynamic website, and has many features to get 
-you started. As of Geeklog 1.3, these features are:
+you started. As of Geeklog 1.4, these features are:
 
 <ul>
   <li>User-system, allowing members of the public to register for your site and submit stories.</li>
@@ -72,8 +77,8 @@
 was time to devote his time to other things and handed the project over to
 Tony Bibbs who uses Geeklog to run <a href="http://www.iowaoutdoors.org/">Iowa
 Outdoors</a>. Tony is currently focusing on getting the next generation
-Geeklog, dubbed GL2, off the ground, while Dirk Haun is now mainting the
-1.3.x branch.</p>
+Geeklog, dubbed GL2, off the ground, while Dirk Haun is now maintaining the
+1.x branch.</p>
 
 <p>Geeklog is bona fide open-source software and has been released under the
 <a href="license" title="GNU General Public License">GNU GPL</a> for use by
diff -ruN 1.3.11sr1/docs/install.html 1.4.0sr5-1/docs/install.html
--- 1.3.11sr1/docs/install.html	2005-07-03 03:48:32.000000000 -0500
+++ 1.4.0sr5-1/docs/install.html	2006-08-08 02:39:06.000000000 -0500
@@ -75,7 +75,7 @@
 		<p>Before installing Geeklog for the first time, please make sure you have or know the following:</p>
 		<ol>
 			<li>A web server running PHP 4.1.0 or higher 
-			<li>A web server running MySQL, with access to a database or the ability to create a database 
+			<li>A web server running MySQL 3.23.2 or higher, with access to a database or the ability to create a database 
 			<li>The ability to create a new database in MySQL or access to an existing one 
 			<li>A telnet or SSH connection to your web server (although FTP will work). This document will be written assuming you have command line access to your server, but we will note the major differences for FTP users. 
 			<li>The ability to unpack a tarball (file ending in tar.gz) 
@@ -121,6 +121,8 @@
 Geeklog site directly via a domain name (if you have one), e.g.
 http://www.yourdomain.com/, and that you don't need to include "public_html"
 in the URL.</p>
+
+<p>If your hosting service does not allow you to install files outside of your document root, please see this FAQ entry on geeklog.net: <a href="http://www.geeklog.net/faqman/index.php?op=view&amp;t=56">Installing Geeklog entirely within the web root</a>.</p>
 	</td>
 </tr>
 <tr>
@@ -139,7 +141,7 @@
 		<ol>
 			<li>Unpack the tarball *within* your web tree by running the following in your shell (this assumes you have ssh access and that you are working with the tarball <i>on the designated server </i>- this can be locally or hosted elsewhere):<br>
 				<br>
-				<code>tar -zxvf geeklog-1.3.11sr1.tar.gz</code><br>
+				<code>tar -zxvf geeklog-1.4.0.tar.gz</code><br>
 				<br>
 				<b>FTP, Windows Users:</b> unpack the tarball on your <i>local computer</i> and upload the result to your designated server. Everything uploads as ASCII except the images.<br>
 				<br>
@@ -150,10 +152,12 @@
 				<br>
 			<li>For *nix installations cd into /path/to/geeklog and do the following:<br>
 				<br>
-				<code>chmod -R 775 logs/<br>
-					chmod -R 775 data/<br>
-					chmod -R 775 public_html/backend/<br>
+				<code>chmod -R 775 logs<br>
+					chmod -R 775 data<br>
+					chmod -R 775 backups<br>
+					chmod -R 775 public_html/backend<br>
 					chmod -R 775 public_html/images/articles<br>
+					chmod -R 775 public_html/images/topics<br>
 					chmod -R 775 public_html/images/userphotos</code><br>
 				<br>
 				<b>FTP Users:</b> If you're doing the chmod via a FTP client, you must also apply the chmod to the files <b>in</b> logs/ and public_html/backend as well as the directories themselves. Most, if not all, ftp clients do not perform this command recursively.  That means you need to set each file within each of these directories manually.<br>
@@ -461,7 +465,7 @@
 					<td>
 <p><small>(line number may vary)</small></p>
 						<p><strong>Answer:</strong></p>
-						<p>Make sure that the logs/ directory AND the files in it have permissions of at least 775. You may need to make the permissions 777 if 775 isn't working for you. For good measure, make sure the public_html/backend directory and the geeklog.rdf file have the same 775 or 777 permissions.</p>
+						<p>Make sure that the logs/ directory AND the files in it have permissions of at least 775. You may need to make the permissions 777 if 775 isn't working for you. For good measure, make sure the public_html/backend directory and the geeklog.rss file have the same 775 or 777 permissions.</p>
 
 <p><strong>Tip:</strong> Use the script that is located at <b>http://yourgeeklogsite/admin/install/check.php</b> to test if all the permissions have been set up correctly.</p>
 					</td>
diff -ruN 1.3.11sr1/docs/plugin.html 1.4.0sr5-1/docs/plugin.html
--- 1.3.11sr1/docs/plugin.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/plugin.html	2006-08-08 02:39:06.000000000 -0500
@@ -17,9 +17,18 @@
 
 <h1>Plugin Development</h1>
 
+<p><strong>Note:</strong> Unfortunately, this document is slightly out of date.
+While the API functions described in here are still correct, several new
+functions are missing. If in doubt, please also see the file
+<tt>system/lib-plugins.php</tt> which implements the plugin interface.</p>
+
+<p>If you find these API descriptions too terse, you may also want to consult
+the more extensive <a href="http://gplugs.sourceforge.net/pluginman/">Plugin
+Developers Guide</a>.</p>
+
 <ul>
   <li><a href="#overview">Overview</a></li>
-  <li><a href="#Functions_for_writing">Functions for writing Plugins</a>
+  <li><a href="#Functions_for_writing">Geeklog Plugin API Functions</a>
     <ul>
       <li><a href="#mod_functions">Moderation Functions</a></li>
       <li><a href="#admin_user_functions">Admin and User Menu Functions</a></li>
@@ -30,66 +39,60 @@
       <li><a href="#User_Functions">User Functions</a></li>
       <li><a href="#Profile_Functions">Profile Functions</a></li>
       <li><a href="#Misc_Functions">Misc. Functions</a></li>
+      <li><a href="#Feed_Functions">Feed Functions</a></li>
     </ul></li>
   <li><a href="#Implementing_your_Admin_Interface">Implementing your Admin Interface</a></li>
   <li><a href="#Preparing_your_Geeklog_Plugin">Preparing your Geeklog Plugin Distribution</a></li>
   <li><a href="#How_Geeklog_Installs_Plugins">How To Install A Geeklog Plugin</a></li>
   <li><a href="#Deliver_Your_Plugin">Deliver Your Plugin!</a></li>
-  <li><a href="#Desc_of_api">Description of the Geeklog Plugin API</a>
-    <ul>
-      <li><a href="#Moderation_Functions_desc">Moderation Functions</a></li>
-      <li><a href="#adminuser_Functions_desc">Admin and User Functions</a></li>
-      <li><a href="#searching_Functions_desc">Search Functions</a></li>
-      <li><a href="#stats_Functions_desc">Stats Functions</a></li>
-    </ul></li>
 </ul>
 
 <h2><a name="overview">Overview</a></h2>
 
-<p>Geeklog is becoming more and more popular each day and   we,   the   
-Geeklog developers,  are amazed at some of the great  hacks   people   have   
-made to extend   their Geeklog  installation to fit their   own 
-needs.&nbsp;     At the  same time,   the Geeklog development  team is   
-continually adding   new  features  that make   Geeklog even better. We 
-have realized the   need  for Geeklog  to support   two threads of 
-development:  core geeklog  code and  plugin-code. By building  in the 
-infrastructure   needed to  extend Geeklog's  functionality  through 
-plugins  we can make  a clean seperation    between the  Geeklog codebase  
-and plugin code  so that we can concentrate    on making Geeklog's  core 
-code  better while others     can develop plugins   so that Geeklog fits 
-their needs. With that    said,  Geeklog now has   a Plugin application 
+<p>Geeklog is becoming more and more popular each day and   we,   the
+Geeklog developers,  are amazed at some of the great  hacks   people   have
+made to extend   their Geeklog  installation to fit their   own
+needs.&nbsp;     At the  same time,   the Geeklog development  team is
+continually adding   new  features  that make   Geeklog even better. We
+have realized the   need  for Geeklog  to support   two threads of
+development:  core geeklog  code and  plugin-code. By building  in the
+infrastructure   needed to  extend Geeklog's  functionality  through
+plugins  we can make  a clean seperation    between the  Geeklog codebase
+and plugin code  so that we can concentrate    on making Geeklog's  core
+code  better while others     can develop plugins   so that Geeklog fits
+their needs. With that    said,  Geeklog now has   a Plugin application
 program interface (API).
 
-<p>At the highest level, the Geeklog Plugin API is generic     code   that   
-is  called   in strategic places in the Geeklog codebase  that   allow   function    
+<p>At the highest level, the Geeklog Plugin API is generic     code   that
+is  called   in strategic places in the Geeklog codebase  that   allow   function
 of plugins to be called. This will allow your plugin the following features:
 
 <ul>
-  <li>Ability for your plugin to be submission-based so that users can submit 
-    objects to your plug-in.&nbsp; You can then visit the command and
+  <li>Ability for your plugin to be submission-based so that users can submit
+    objects to your plugin.&nbsp; You can then visit the command and
     control center in Geeklog to moderate the submissions for your plugin.</li>
-  <li>Allow your plugin to show up in the Admin block and User block on each 
+  <li>Allow your plugin to show up in the Admin block and User block on each
     Geeklog page.</li>
   <li>Allow your plugin to be searched via the Geeklog search page.</li>
   <li>Allow stats for your plugin to show up on the site statistics page.</li>
   <li> Allow your plugin the ability to use Geeklog's comment engine.</li>
-  <li>Allow you to use the power of Geeklog's code library (lib-common.php) in 
+  <li>Allow you to use the power of Geeklog's code library (lib-common.php) in
     your own plugin code.</li>
-  <li>Allow you full flexibility on what your plugin does. Geeklog does not 
+  <li>Allow you full flexibility on what your plugin does. Geeklog does not
     dictate your plugins power.</li>
 </ul>
 
 <h2><a name="Functions_for_writing">Functions for writing plugins</a></h2>
 
-<p>The below functions are what you need to write your own plugin including      
-any extra parameters that you need to pass in. Towards the end of the  
-page,    there is also a Description of the API, just incase you need it to 
+<p>The below functions are what you need to write your own plugin including
+any extra parameters that you need to pass in. Towards the end of the
+page,    there is also a Description of the API, just incase you need it to
 help  understand  in the plugin process.
 
 <p>
-<strong>Note about &lt;plugin name&gt;:</strong> You will see references to  
-&lt;plugin name&gt; in all the functions below.&nbsp; The &lt;plugin 
-name&gt; values will come from you the name of your plugin tarfile. All plugin 
+<strong>Note about &lt;plugin name&gt;:</strong> You will see references to
+&lt;plugin name&gt; in all the functions below.&nbsp; The &lt;plugin
+name&gt; values will come from you the name of your plugin tarfile. All plugin
 tarfiles have a strict naming convention that they <em>must</em> follow and it is:
 
 <blockquote>
@@ -99,23 +102,23 @@
 
 <h2><a name="mod_functions">Moderation functions</a></h2>
 
-<p>First note that there are limitations in the current Geeklog codebase that 
-will force you to name your plugin tables used  for submission in a 
-specific manner.&nbsp; All moderated Geeklog items such  as stories and 
-links are comprised of two tables.&nbsp; The first is a main  table where 
-all visible items are stored.&nbsp; The second is a submission table where 
-submitted user items sit until an administrator approves them.&nbsp; When 
-approved the item is moved from the submission table to the main 
-table.&nbsp;    So for example, if you are writing a book review plugin 
-that  allows users    to submit book reviews then we will pick bookreviews 
-for your main table   (this MUST also be your plugin name you pick) and 
-then your submission table   MUST be named bookreviewssubmission.&nbsp; Why 
-force the names? Because in  the geeklog code the submission table for all 
-stories is coded as &lt;main   name&gt;submission.&nbsp; So since we picked 
-bookreviews for our main table   (and plugin name) the submission table 
+<p>First note that there are limitations in the current Geeklog codebase that
+will force you to name your plugin tables used  for submission in a
+specific manner.&nbsp; All moderated Geeklog items such  as stories and
+links are comprised of two tables.&nbsp; The first is a main  table where
+all visible items are stored.&nbsp; The second is a submission table where
+submitted user items sit until an administrator approves them.&nbsp; When
+approved the item is moved from the submission table to the main
+table.&nbsp;    So for example, if you are writing a book review plugin
+that  allows users    to submit book reviews then we will pick bookreviews
+for your main table   (this MUST also be your plugin name you pick) and
+then your submission table   MUST be named bookreviewssubmission.&nbsp; Why
+force the names? Because in  the geeklog code the submission table for all
+stories is coded as &lt;main   name&gt;submission.&nbsp; So since we picked
+bookreviews for our main table   (and plugin name) the submission table
 must be named&nbsp; bookreviewssubmission.
 
-<p>If you want your plugin to be moderated like Geeklog stories 
+<p>If you want your plugin to be moderated like Geeklog stories
 and links then you must implement these functions.</p>
 
 <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
@@ -145,16 +148,16 @@
   </tr>
 <tr>
   <td valign="top" class="codeheader">plugin_moderationvalues_&lt;plugin name&gt;</td>
-  <td valign="top" class="code">Returns the primary key column name, the main 
-    table name (called &lt;plugin name&gt;) and the list of fields from that 
+  <td valign="top" class="code">Returns the primary key column name, the main
+    table name (called &lt;plugin name&gt;) and the list of fields from that
     table that you'd like to have show up on the moderation page.</td>
   </tr>
 </table>
 
 <h2><a name="admin_user_functions">Admin and User Menu functions</a></h2>
 
-<p>If you want your plugin to effect the Admin and User Function blocks    
-that show up on every Geeklog page then you must implement these 
+<p>If you want your plugin to effect the Admin and User Function blocks
+that show up on every Geeklog page then you must implement these
 functions.</p>
 
       <table cellpadding="2" cellspacing="2" border="1" width="90%" align="Center">
@@ -207,14 +210,14 @@
             <th valign="top">Description of Function</th>
           </tr>
           <tr>
-            <td valign="top" class="codeheader">plugin_getsearchtypes_&lt;plugin 
+            <td valign="top" class="codeheader">plugin_getsearchtypes_&lt;plugin
      name&gt;</td>
             <td valign="top" class="code">You will probably want to add a
      new type in the Type drop down on search.php.&nbsp; This function prints
     the option tags needed. make sure that the value tag is &lt;plugin name&gt;</td>
           </tr>
           <tr>
-            <td valign="top" class="codeheader">plugin_dopluginsearch_&lt;plugin 
+            <td valign="top" class="codeheader">plugin_dopluginsearch_&lt;plugin
      name&gt;</td>
             <td valign="top" class="code">Takes the search criteria and lets
      you build search results for your plugin.&nbsp; This returns a string
@@ -260,7 +263,7 @@
 
 <h2><a name="Stats_Function">Stats Function</a></h2>
 
-<p>If you want your plugin to show up on the stats page then you must 
+<p>If you want your plugin to show up on the stats page then you must
 implement this function.</p>
 
       <table cellpadding="2" cellspacing="2" border="1" width="90%" align="Center">
@@ -270,12 +273,12 @@
             <th valign="top">Description of Function</th>
           </tr>
           <tr>
-            <td valign="top" class="codeheader">plugin_showstats_&lt;plugin 
+            <td valign="top" class="codeheader">plugin_showstats_&lt;plugin
      name&gt;</td>
-            <td valign="top" class="code">This function takes a showsitestats 
-     flag.&nbsp; If set to 1, this function shows the overall stats for your 
-   plugin  in the site statistics box.&nbsp; If it is set to 2 it shows the 
-  statistic  blocks for you plugin (similar to Top Ten Viewed Stories and 
+            <td valign="top" class="code">This function takes a showsitestats
+     flag.&nbsp; If set to 1, this function shows the overall stats for your
+   plugin  in the site statistics box.&nbsp; If it is set to 2 it shows the
+  statistic  blocks for you plugin (similar to Top Ten Viewed Stories and
 Top  Ten Commented  Stories).</td>
           </tr>
       </table>
@@ -291,7 +294,7 @@
             <th valign="top">Description of Function</th>
           </tr>
           <tr>
-            <td valign="top" class="codeheader">plugin_uninstall_&lt;plugin 
+            <td valign="top" class="codeheader">plugin_uninstall_&lt;plugin
      name&gt;</td>
             <td valign="top" class="code">This function does not take any parameters. The plugin should try and uninstall itself, especially removing all its tables and data structures from the database.<br>
 The function should return <code>true</code> if the uninstall succeeded and <code>false</code> if it failed.</td>
@@ -325,7 +328,7 @@
 <p>Plugins can add blocks or individual items to the user profile.</p>
 
   <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
-    <caption align="bottom">Table 9. Misc. functions</caption>
+    <caption align="bottom">Table 8. Profile Functions</caption>
       <tr>
         <th valign="top">Function</th>
         <th valign="top">Description of Function</th>
@@ -369,11 +372,16 @@
 The function should return the complete HTML for the block (including header and footer) or an empty string.</td>
       </tr>
       <tr>
-        <td valign="top" class="codeheader">plugin_getheadercode_&lt;plugin 
+        <td valign="top" class="codeheader">plugin_getheadercode_&lt;plugin
      name&gt;</td>
         <td valign="top" class="code">Plugins may add additional lines to the site's <code>&lt;head&gt;</code> tag by implementing this function, e.g. Javascript functions or additional Meta tags.<br>
 The function should return a concatenated string of all its extra header code.</td>
       </tr>
+      <tr>
+        <td valign="top" class="codeheader">plugin_templatesetvars_&lt;plugin
+     name&gt;</td>
+        <td valign="top" class="code">Plugins may set additional template variables. Currently this function is only called in COM_siteHeader and COM_siteFooter, but could in the future be called in other locations. The parameters passed are the template name and the reference to the template object. The plugin API can check the template name (in this case it will currently be 'header' or 'footer') and then using the passed template object reference - set any required new template variables.</td>
+      </tr>
     <tr>
         <td valign="top" class="codeheader">plugin_whatsnewsupported_&lt;plugin name&gt;</td>
         <td valign="top" class="code">Plugins can add their own section to Geeklog's What's New block by implementing this and the following function.<br>
@@ -382,24 +390,66 @@
     <tr>
         <td valign="top" class="codeheader">plugin_getwhatsnew_&lt;plugin name&gt;</td>
         <td valign="top" class="code">This function should return the actual new entries to be listed in the What's New block (as an array) or a string to be displayed in case there are no new entries.</td>
+    </tr>
+    <tr>
+        <td valign="top" class="codeheader">plugin_chkVersion_&lt;plugin name&gt;</td>
+        <td valign="top" class="code">Plugins should implement this function and return the code version. Plugins should use a variable in the plugins config.php for the code version which allows the developer to easily update it before releasing a new version. As of Geeklog 1.3.10, this API function is called in the plugin Editor to show the version of the current installed version and plugin code version. The plugin installed version is pulled from the plugins table and should be updated as part of the plugin install or future updates. This API function allows the site admin to know if the current plugin code is newer then the installed version. Plugin developers can read the installed version from the plugins table and determine automatically if any SQL updates are required or atleast update the plugin record to be the same as the code version.</td>
+    </tr>
+    <tr>
+        <td valign="top" class="codeheader">plugin_runScheduledTask_&lt;plugin name&gt;</td>
+        <td valign="top" class="code">This function allows plugin developers to schedule a task to be run. This API will only be called when someone accesses the site but should be sufficient for most plugins that want to schedule some maintenance process or clean-up routine. The interval this API is called is set in the site's config.php and all plugins that have this function will then be called.</td>
+    </tr>
 
+  </table>
+
+  <h2><a name="Feed_Functions">Feed Functions</a></h2>
+
+<p>The following is a list of (optional) functions for syndication feed purposes.</p>
+
+  <table cellpadding="2" cellspacing="2" border="1" width="90%" align="center">
+    <caption align="bottom">Table 10. Feed functions</caption>
+      <tr>
+        <th valign="top">Function</th>
+        <th valign="top">Description of Function</th>
+      </tr>
+      <tr>
+        <td valign="top" class="codeheader">plugin_getfeednames_&lt;plugin name&gt;</td>
+        <td valign="top" class="code">Plugins can provide content for the creation of syndication feeds. This function allows the plugin to return a list of feed content it can supply. For example, the links plugin provides a feed for all links, and a feed for each link category. The plugin should return an array of id/name pairs where id is the plugins internal id for the field and name is what is displayed to the user.</td>
+      </tr>
+      <tr>
+        <td valign="top" class="codeheader">plugin_getfeedcontent_&lt;plugin
+     name&gt;</td>
+        <td valign="top" class="code">Where a plugin has returned a list of feeds from the plugin_getfeednames_&lt;plugin name&gt; function, it must also return feed content using this function. The plugin is expected to return an array holding the content of the feed and to fill in 'link' (some link that represents the same content on the site as that in the feed) and 'update_data' (to be stored for later up-to-date checks).</td>
+      </tr>
+      <tr>
+        <td valign="top" class="codeheader">plugin_feedExtensionTags_&lt;plugin
+     name&gt;</td>
+        <td valign="top" class="code">Plugins may enter additional elements in the top level of a feed format by supporting this function. The function receives the type and version of a feed (e.g. RSS version 2.0) and is expected to return an array of valid XML tags. (See the <a href="http://sourceforge.net/project/showfiles.php?group_id=91120&package_id=168689">Syndication Extensions</a> plugin for an example.)</td>
+      </tr>
+    <tr>
+        <td valign="top" class="codeheader">plugin_feedNSExtensions_&lt;plugin name&gt;</td>
+        <td valign="top" class="code">Plugins which add their own elements to feeds may require extra XML Namespaces adding to the XML. This function should return an array of valid namespace attributes. (See the <a href="http://sourceforge.net/project/showfiles.php?group_id=91120&package_id=168689">Syndication Extensions</a> plugin for an example.)</td>
+    </tr>
+    <tr>
+        <td valign="top" class="codeheader">plugin_feedElementExtensions_&lt;plugin name&gt;</td>
+        <td valign="top" class="code">Plugins may add additional elements to feed items by supporting this function. The function is supplied the version and type of feed, plus the content type and identifier and must return an array of valid XML Elements. (See the <a href="http://sourceforge.net/project/showfiles.php?group_id=91120&package_id=168689">Syndication Extensions</a> plugin for an example.)</td>
     </tr>
   </table>
 
 
 <h2><a name="Implementing_your_Admin_Interface">Implementing your Admin Interface</a></h2>
 
-<p>The Geeklog Plugin API is just that an API.&nbsp; You obviously have   to  
-write all your plugin code yourself.&nbsp; We have put stubs in place   to 
-link to you Admin Interface.&nbsp; You admin page(s) will be in 
+<p>The Geeklog Plugin API is just that an API.&nbsp; You obviously have   to
+write all your plugin code yourself.&nbsp; We have put stubs in place   to
+link to you Admin Interface.&nbsp; You admin page(s) will be in
 http://yourgeeklogdomain/admin/plugins/&lt;plugin name&gt;/
 
-<p>The first page of your administration interface must be named  
-index.php and it must be in the above directory.&nbsp; Whether or not 
+<p>The first page of your administration interface must be named
+index.php and it must be in the above directory.&nbsp; Whether or not
 you use more than one page for your Admin interface is completely up to you.
 
-<p>Please note that the location of your admin page isn't optional.&nbsp; For  
-organizational purposes it is important that you follow the standards 
+<p>Please note that the location of your admin page isn't optional.&nbsp; For
+organizational purposes it is important that you follow the standards
 outlined  in this document.
 
 <h2><a name="Preparing_your_Geeklog_Plugin">Preparing your Geeklog Plugin Distribution</a></h2>
@@ -436,9 +486,9 @@
   works under.</dd>
 </dl>
 
-<p>The organization of your tarfile is standardized as well.&nbsp; For each   
-directory and file a description is given.&nbsp; Your base plugin directory   
-when you create the tarfile should be &lt;plugin name&gt;.&nbsp; Under 
+<p>The organization of your tarfile is standardized as well.&nbsp; For each
+directory and file a description is given.&nbsp; Your base plugin directory
+when you create the tarfile should be &lt;plugin name&gt;.&nbsp; Under
 there   you will have the following:
 
 <dl>
@@ -458,223 +508,62 @@
    behaviour and selecting the language file based on the user's preferred
    language (falling back to english.php if you can't find a language file for
    the selected language).</dd>
-<dt>table.sql</dt><dd>the DDL needed to modify the Geeklog database so that 
-  your plugin  will work.<br>
-  <strong>Note:</strong> you must provide an entry in the plugin table in your 
-  database. Without it, Geeklog will not know your plugin exists.<br>
-  <strong>Example:</strong><br>
-  <code>REPLACE INTO plugins (pi_name, pi_version, pi_gl_version, pi_homepage,
-   pi_enabled)  VALUES ('photos', '0.1', '1.2.2', 'http://www.tonybibbs.com',
-   1);</code></dd>
-<dt>data.sql</dt><dd>sample data for your plugin</dd>
+
 <dt>README</dt><dd>standard readme for software</dd>
-<dt>/docs:</dt><dd>includes any documentation you may want to provide 
+<dt>/docs:</dt><dd>includes any documentation you may want to provide
   for your plugin  such as history, to-do, etc</dd>
 <dt>/admin:</dt><dd>includes only your admininstation pages</dd>
 <dt>/public_html:</dt><dd>include your regular web pages</dd>
-<dt>/updates:</dt><dd>includes all update sql and scripts.&nbsp; if you
-  are writing  an update SQL script be sure that you name it update_&lt;previous 
-  version&gt;.sql.&nbsp;  The way this work is if you have version 0.1 installed 
-  for a plugin and you  are installing version 0.2 the code will look for 
-the  update script for the  currently isntalled version (0.1) and if it finds 
- it, in this case update_0.1.sql  then it will execute it automatically.</dd>
+<dt>/updates:</dt><dd>includes all update sql and scripts</dd>
 </dl>
 
 <h2><a name="How_Geeklog_Installs_Plugins">How To Install A Geeklog Plugin</a></h2>
 
-<p><strong>Note:</strong> Up until Geeklog version 1.3.4, there was an 
-automatic install procedure for plugins. This, however, caused too many 
-problems and support issues and has been removed from later versions. The 
-manual install as outlined below is now the recommended way to install a 
+<p><strong>Note:</strong> Up until Geeklog version 1.3.4, there was an
+automatic install procedure for plugins. This, however, caused too many
+problems and support issues and has been removed from later versions. The
+manual install as outlined below is now the recommended way to install a
 plugin and should work for both old and new versions of Geeklog.
 
-<p>For details, you should always refer to the README that comes with the 
-plugin. In general, however, a plugin will be installed like this:
+<p>For details, you should always refer to the README that comes with the
+plugin. A general overview of plugins and install details is also provided as part of the Geeklog Documentation Project <a href="http://wiki.geeklog.net/index.php/Plugins">here</a> . In general, however, a plugin will be installed like this:
 
 <ol>
-<li>Depending on your setup and server access, you should either upload 
-  the tarball and unpack it remotely or unpack the tarball locally and 
+<li>Depending on your setup and server access, you should either upload
+  the tarball and unpack it remotely or unpack the tarball locally and
   upload the extracted files and folders afterwards.</li>
-<li>The public_html directory in the tarfile is copied to the webtree 
-  under &lt;plugin name&gt;. e.g. if my geeklog web is in /path/to/geeklog/public_html/ 
-  then the public_html from the tarfile is copied to /path/to/geeklog/public_html/&lt;plugin 
+<li>The public_html directory in the tarfile is copied to the webtree
+  under &lt;plugin name&gt;. e.g. if my geeklog web is in /path/to/geeklog/public_html/
+  then the public_html from the tarfile is copied to /path/to/geeklog/public_html/&lt;plugin
   name&gt;</li>
-<li>The admin directory in the tarfile is copied to the admin webtree.&nbsp; 
-  e.g. if my geeklog admin webtree is in /path/to/geeklog/public_html/admin/ 
-  then the admin directory from the tarfile is copied to /path/to/geeklog/public_html/admin/plugins/&lt;plugin 
+<li>The admin directory in the tarfile is copied to the admin webtree.&nbsp;
+  e.g. if my geeklog admin webtree is in /path/to/geeklog/public_html/admin/
+  then the admin directory from the tarfile is copied to /path/to/geeklog/public_html/admin/plugins/&lt;plugin
   name&gt;&nbsp; </li>
-<li>Call the plugins install script at 
+<li>Call the plugins install script at
 http://yourgeeklogsite/admin/plugins/&lt;plugin name&gt;/install.php
   <ul>
-  <li>If this is a new install (plugin doesn't exist in plugins table) 
-    then table.sql is executed and then data.sql is executed</li>
-  <li>If this is an upgrade that the necessary upgrade_&lt;version&gt;.sql 
-    script is searched for and, if found, executed.</li>
+  <li>If this is a new install (plugin doesn't exist in plugins table)
+    then the install script should execute the needed install SQL to create the required tables and default data</li>
+  <li>If this is an upgrade, you will need to refer to the provided plugin documentation. Newer plugin may support the Plugin API to perform an update. The plugin Editor has the ability for the site admin to execute the update function if available.</li>
   </ul></li>
 <li>That's it!</li>
 </ol>
 
 <h2><a name="Deliver_Your_Plugin">Deliver Your Plugin!</a></h2>
 
-<p>Because Geeklog Plugins can affect a Geeklog installation and the users 
-filesystem, our policy is we will not endorse third party plugins unless 
-they have been tested by the Geeklog Development team.&nbsp; Why?&nbsp; We  
-will make sure that your plugin installs successfully and doesn't have any  
-adverse behavior.&nbsp; Assuming your plugin checks out, we will put your  
-tarfile on our site where it can be downloaded by Geeklog users.&nbsp; You  
+<p>Because Geeklog Plugins can affect a Geeklog installation and the users
+filesystem, our policy is we will not endorse third party plugins unless
+they have been tested by the Geeklog Development team.&nbsp; Why?&nbsp; We
+will make sure that your plugin installs successfully and doesn't have any
+adverse behavior.&nbsp; Assuming your plugin checks out, we will put your
+tarfile on our site where it can be downloaded by Geeklog users.&nbsp; You
 can sumbit your plugin to our site at http://www.geeklog.net
 
-<h2><a name="Desc_of_api">Description of the Geeklog Plugin API</a></h2>
-
-<p>This is the function reference for the Geeklog Plugin API,   as  contained  
-in the plugins.php file.&nbsp; This   is provided strictly    for  
-reference sake. You, as a Geeklog Plugin Developer,     will not need    to 
-modify these functions nor make calls to them as that  has already been    
-handled in the Geeklog codebase. We do, however, encourage suggestions    
-on how you think we can make this API better.
-  
-  
-<h2><a name="Moderation_Functions_desc">Moderation Functions</a></h2>
-
-<p>These are the functions used to allow your plugin 
-to  access    the   moderation   system.</p>
-
-      <table cellpadding="2" cellspacing="2" border="1" width="80%" align="Center">
-        <caption align="bottom">Table 1. Moderation Functions</caption>
-          <tr>
-            <th valign="top">Function</th>
-            <th valign="top">Description of Function</th>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">SubmitPlugin</td>
-            <td valign="top" class="code">This function loops through all 
-          enabled plugins and calls the  plugins plugin_submit_&lt;plugin 
-name&gt;         method so that a plugins submission  form is shown to the 
-user.</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">GetPluginModerationValues</td>
-            <td valign="top" class="code">Responsible for calling the plugin_moderationvalue_&lt;plugin
-            name&gt; method so that the plugin specific values can be set
-so   that     moderation    can occur.</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">ShowPluginModerationLists</td>
-            <td valign="top" class="code">Loops through all enabled plugins 
-          and call itemlist() so that  all items needing moderation for the 
-  plugin       shows up in moderation.php</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">ShowPluginModerationOptions</td>
-            <td valign="top" class="code">Loops through all enabled plugins 
-          and calls the plugin_cclabel_&lt;plugin  name&gt; method so the 
-plugin       shows   in the command and control center.</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">SavePluginSubmission</td>
-            <td valign="top" class="code">Loops through all enabled plugins 
-          and calls the plugin_savesubmission_&lt;plugin  name&gt; method 
-so   that     the  plugin submission for a specified plugin gets  saved.</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">DoPluginModerationDelete</td>
-            <td valign="top" class="code">Calls the plugin_moderationdelete_&lt;plugin 
-          name&gt; method  of a specifid plugin so that a submission is deleted</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">DoPluginModerationApprove</td>
-            <td valign="top" class="code">Calls the plugin_moderationapprove_&lt;plugin 
-          name&gt; method  of a specified plugin so that the submission is 
- approved.</td>
-          </tr>
-</table>
-
-<h2><a name="adminuser_Functions_desc">Admin and User options functions</a></h2>
-
-<p>These are the functions used to allow your plugin 
-to  access    the   admin   and user system</p>
-
-      <table cellpadding="2" cellspacing="2" border="1" width="80%" align="Center">
-        <caption align="bottom">Table 2.&nbsp;Admin and User options functions</caption>
-          <tr>
-            <th valign="top">Function</th>
-            <th valign="top">Description of Function</th>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">ShowPluginAdminOptions</td>
-            <td valign="top" class="code">Loops through all enabled plugins 
-        and calls their plugin_showadminoption_&lt;plugin name&gt; so that 
- the    plugin   shows any option(s) they need under the Admin block.</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">ShowPluginUserOptions</td>
-            <td valign="top" class="code">Loops through all enabled plugins 
-        and calls their plugin_showuseroptions_&lt;plugin name&gt; so that 
- the    plugin   shows any option(s) users need in their User Functions block</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">HandlePluginAdminEdit</td>
-            <td valign="top" class="code">Calls the plugin_adminedit_&lt;plugin 
-        name&gt; method so that the "new &lt;plugin name&gt; | Admin Home" 
- links      show up at the top of admin/plugins/&lt;plugin name&gt;.php.&nbsp; 
- This    is  implemented strictly for consistency of the UI</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">GetPluginSubmissionCounts</td>
-            <td valign="top" class="code">Loops through all enabled plugins 
-        and calls their plugin_submissioncount_&lt;plugin name&gt; method 
-so   that     the number of submissions for plugins gets displayed</td>
-          </tr>
-      </table>
-
-<h2><a name="searching_Functions_desc">Search functions</a></h2>
-
-<p>These are the functions used to allow your plugin 
-to  access    the   search system</p>
-
-<table cellpadding="2" cellspacing="2" border="1" width="80%" align="Center">
-        <caption align="bottom">Table 3. Search functions</caption>
-          <tr>
-            <th valign="top">Function</th>
-            <th valign="top">Description of Function</th>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">GetPluginSearchTypes</td>
-            <td valign="top" class="code">Loops through all enabled plugins
-        and calls their plugin_getsearchtypes_&lt;plugin name&gt; method
-to   get    any  plugin specific values that need to show up in the Type
-drop  down on   search.php</td>
-          </tr>
-          <tr>
-            <td valign="top" class="codeheader">DoPluginSearches</td>
-            <td valign="top" class="code">Loops through all enabled plugins
-        and submits the search criteria to the plugin_dopluginsearch_&lt;pluginname&gt;
-        method so that the plugin can perform it's own search</td>
-          </tr>
-      </table>
-
-<h2><a name="stats_Functions_desc">Stats functions</a></h2>
-
-<p>These are the functions used to allow your plugin to access the stats 
-system:</p>
-
-<table cellpadding="2" cellspacing="2" border="1" width="80%" align="Center">
-<caption align="bottom">Table 4. Stats functions</caption>
-<tr>
-  <th valign="top">Function</th>
-  <th valign="top">Description of Function</th>
-</tr>
-<tr>
-  <td valign="top" class="codeheader">Show Plugin Stats</td>
-  <td valign="top" class="code">Loops through all enabled plugins 
-     and calls the plugin's plugin_showstats_&lt;plugin name&gt; method 
-     so that statistics can be reported for the plugin</td>
-</tr>
-</table>
-
+<p />
 <table border="0" width="100%" class="footer">
 <tr valign="top">
-  <td colspan="2"><a href="http://www.geeklog.net">The Geeklog Documentation Project</a><br>
+  <td colspan="2"><a href="http://wiki.geeklog.net/wiki/index.php/Geeklog_1.3x_Documentation">The Geeklog Documentation Project</a><br>
     All trademarks and copyrights on this page are owned by their respective owners. GeekLog is copyleft.</td>
 </tr>
 </table>
diff -ruN 1.3.11sr1/docs/polls.html 1.4.0sr5-1/docs/polls.html
--- 1.3.11sr1/docs/polls.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/docs/polls.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>Geeklog Documentation - Polls Plugin</title>
+  <link rel="stylesheet" type="text/css" href="docstyle.css" title="Dev Stylesheet">
+</head>
+
+<body>
+<table>
+<tr>
+  <td><a href="index.html" style="background:transparent"><img src="images/newlogo.gif" alt="Geeklog Documentation" width="243" height="90" border="0"></a></td>
+</tr>
+<tr>
+  <td class="menu"><a href="index.html">Geeklog Documentation</a> - Polls Plugin</td>
+</tr>
+</table>
+
+<h1>Polls Plugin</h1>
+
+<p>Polls used to be an integral part of the Geeklog core code, but have been
+moved to a plugin as of Geeklog 1.4.0.</p>
+
+<h2><a name="config.php">Configuration File</a></h2>
+
+<p>The polls plugin has its own configuration file, located at <tt>/path/to/geeklog/plugins/polls/config.php</tt>. There you will find the following options:</p>
+
+<table>
+<tr><th width="25%">Variable</th>
+    <th width="25%">Default Value</th>
+    <th width="50%">Description</th>
+</tr>
+<tr>
+  <td><a name="desc_pollsloginrequired">pollsloginrequired</a></td>
+  <td>0</td>
+  <td>When set to 1, only registered users can access the list of recent
+    polls.<br>
+    Please note that <code>$_CONF['<a
+    href="config.html#desc_loginrequired">loginrequired</a>']</code> in
+    <tt>config.php</tt> takes precedence over this setting. So when
+    <code>'loginrequired'</code> is set to 1, anonymous users can not access
+    the recent polls even when <code>'pollsloginrequired'</code> is set
+    to 0.</td>
+</tr>
+<tr class="r2">
+  <td><a name="desc_maxanswers">maxanswers</a></td>
+  <td>10</td>
+  <td>Maximum number of possible answers for the poll editor</td>
+</tr>
+<tr>
+  <td><a name="desc_answerorder">answerorder</a></td>
+  <td>submitorder</td>
+  <td>Sort answers by the number of results ('voteorder') or keep the order 
+    in which they were entered ('submitorder')</td>
+</tr>
+<tr class="r2">
+  <td><a name="desc_pollcookietime">pollcookietime</a></td>
+  <td>86400</td>
+  <td>Number of seconds to set a poll answer cookie to time out on</td>
+</tr>
+<tr>
+  <td><a name="desc_polladdresstime">polladdresstime</a></td>
+  <td>604800</td>
+  <td>Number of seconds to set a poll answer IP address to time out on</td>
+</tr>
+<tr class="r2">
+  <td><a name="desc_delete_polls">delete_polls</a></td>
+  <td>0</td>
+  <td>Defines what to do when a user is deleted that is the owner of a poll.
+    When set to 0, all polls owned by the deleted user will be assigned to a
+    user of the "Root" group (e.g. the site admin). When set to 1, the polls
+    are deleted, including all the comments posted on that poll.</td>
+</tr>
+</table>
+
+<h2>How do the polls work?</h2>
+
+<p><small>(Taken from the <a href="http://www.geeklog.net/faqman/">Geeklog
+FAQ</a>)</small></p>
+
+<p>In order to prevent manipulation of polls (or at least make it harder),
+Geeklog does two things when you vote:</p>
+
+<ol>
+  <li>It stores a cookie</li>
+  <li>It stores your IP address</li>
+</ol>
+
+<p>Both the cookie and the IP are valid for a certain amount of time (see below)
+and during that time, you can't vote again on the same poll.</p>
+
+<p>The amount of time your cookie and IP are stored can be changed in the polls
+plugin's <tt>config.php</tt>:</p>
+
+<pre>$_PO_CONF['pollcookietime']    = 86400;
+$_PO_CONF['polladdresstime']   = 604800;</pre>
+
+<p>Both times are in seconds, i.e. the cookie is valid for 24 hours and the IP
+is stored for a week.</p>
+
+<p>In setups where more than one person uses the same computer or the same IP
+address, you can set one (or both) of them to 1.</p>
+
+<p>Please keep in mind that <strong>any</strong> poll can be manipulated, so
+you shouldn't take the results too seriously.</p>
+
+
+<table class="footer">
+<tr>
+  <td colspan="2"><a href="http://www.geeklog.net">The Geeklog Documentation Project</a><br>
+    All trademarks and copyrights on this page are owned by their respective owners. GeekLog is copyleft.</td>
+</tr>
+</table>
+
+</body>
+</html>
diff -ruN 1.3.11sr1/docs/spamx.html 1.4.0sr5-1/docs/spamx.html
--- 1.3.11sr1/docs/spamx.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/spamx.html	2006-08-08 02:39:06.000000000 -0500
@@ -1,8 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
-  <title>Geeklog Documentation - SpamX Plugin</title>
+  <title>Geeklog Documentation - Geeklog Spam-X Plugin</title>
   <link rel="stylesheet" type="text/css" href="docstyle.css" title="Dev Stylesheet">
+  <meta name="robots" content="noindex">
 </head>
 
 <body>
@@ -11,22 +12,28 @@
   <td valign="top"><img src="images/newlogo.gif" alt="Geeklog Documentation" width="243" height="90" border="0"></td>
 </tr>
 <tr>
-  <td valign="top" class="menu"><a href="index.html">Geeklog Documentation</a> - SpamX Plugin</td>
+  <td valign="top" class="menu"><a href="index.html">Geeklog Documentation</a> - Geeklog Spam-X Plugin</td>
 </tr>
 </table>
 
-<h1>SpamX Plugin</h1>
+<h1>Geeklog Spam-X Plugin</h1>
+
+<p><small>(If you came here looking for Hendrickson Software Components' email spam filter of the same name, please <a href="http://www.hendricom.com/spamcontrol.htm" rel="nofollow">click here</a>.)</small></p>
 
 <h2>Introduction</h2>
 
-<p>The Geeklog SpamX plugin was created to fight the problem of comment spam
+<p>The Geeklog Spam-X plugin was created to fight the problem of comment spam
 for Geeklog systems. If you are unfamiliar with comment spam you might see the
 <a href="http://kalsey.com/2003/11/comment_spam_manifesto/">Comment Spam
 Manifesto</a>.</p>
 
 <h2>MT-Blacklist</h2>
 
-<p>The main mechanism SpamX uses to fight comment spam is to use the blacklist 
+<p><strong>Important note:</strong> Please note that MT-Blacklist has recently
+been discontinued. See <a href="http://www.geeklog.net/article.php/mt-blacklist-discontinued" title="MT-Blacklist discontinued">this article</a> on geeklog.net
+for details.</p>
+
+<p>The main mechanism Spam-X uses to fight comment spam is to use the blacklist 
 created by Jay Allen and Movable Type users - MT-Blacklist.  You can find out
 info about this project at <a href="http://www.jayallen.org/comment_spam/">http://www.jayallen.org/comment_spam/</a>. Jay has taken
 it upon himself not only to write and support the plugin for Movable Type but
@@ -41,8 +48,8 @@
 
 <h2>Other options</h2>
 
-<p>The MT-Blacklist is only one part of the Geeklog SpamX plugin however.  The
-SpamX plugin has its own personal blacklist that you can add to. You can
+<p>The MT-Blacklist is only one part of the Geeklog Spam-X plugin however.  The
+Spam-X plugin has its own personal blacklist that you can add to. You can
 use it to filter anything from comments.  One option is to import the Geeklog
 <a href="config.html#desc_censorlist">censor list</a> and ban all comments
 which contain one of those words.  This or an expanded list might be usefull
@@ -51,7 +58,7 @@
 
 <h2>Module types</h2>
 
-<p>The SpamX plugin was built to be expandable to easily adapt to changes the
+<p>The Spam-X plugin was built to be expandable to easily adapt to changes the
 comment spammers might make.  There are three types of modules: <b>admin</b>,
 <b>examine</b> and <b>action</b>.  A new module is contained in a file and can
 simply be dropped in and it will be added to the plugin.  The modules with
@@ -60,16 +67,21 @@
 <ul>
   <li>Admin
     <ul>
-      <li>View SpamX log</li>
+      <li>View Spam-X Log</li>
       <li>Update MT-Blacklist</li>
       <li>Edit Personal Blacklist</li>
-      <li>View/Import Other Personal Blacklists</li>
-      <li>Mass Delete Comments</li>
+      <li>Edit IP Blacklist</li>
+      <li>Edit IP of URL Blacklist</li>
+      <li>Edit HTTP Header Blacklist</li>
+      <li>Mass Delete Spam Comments</li>
+      <li>Mass Delete Trackback Spam</li>
     </ul></li>
   <li>Examine
     <ul>
       <li>MT-Blacklist</li>
       <li>Personal Blacklist</li>
+      <li>IP of Spammer</li>
+      <li>IP of Link</li>
     </ul></li>
   <li>Action
     <ul>
@@ -78,13 +90,16 @@
     </ul></li>
 </ul>
 
-<p>Other modules can be just dropped into place.  Planned modules include:</p>
+<p>Other modules can be just dropped into place and they will become
+available to the plugin.  To remove a module just
+delete it from the spamx directory or rename it.  Planned modules include:</p>
 
 <ul>
   <li>Admin
     <ul>
       <li>Comparing MT-Blacklist and personal blacklist to eliminate
           duplications</li>
+      <li>Parsing comments and automatic adding spam links</li>
     </ul></li>
   <li>Examine
     <ul>
@@ -96,20 +111,15 @@
     </ul></li>
 </ul>
 
-<h2>Sharing blacklists</h2>
-
-<p>One feature of the SpamX plugin is the ability to share your blacklist and to
-view and import the Blacklists of other SpamX plugin users.  Your participation
-in this will help give early warning to other SpamX plugin users.  This
-facility will also make it possible to create special blacklists for different
-classes of users such as k-12 schools. The sharing of blacklists uses rss feeds 
-to distibute the blacklists.  If anyone wants to create a special blacklist I 
-will make the server and interface scripts to facilitate this.</p>
+<p>Action modules are each assigned a number and the actions taken when a
+spam comment is found can be designated by a configuration variable.  Note:
+the spamx interface has been generalized and can be called by other modules
+and plugins.  See the developer docs for details.</p>
 
 <h2>Plugin Homepage</h2>
 
-<p>Further information as well as a support forum for the SpamX plugin can be
-found on the <a href="http://www.pigstye.net/gplugs/staticpages/index.php/spamx">SpamX Plugin's Homepage</a>.</p>
+<p>Further information as well as a support forum for the Spam-X plugin can be
+found on the <a href="http://www.pigstye.net/gplugs/staticpages/index.php/spamx" rel="nofollow">Spam-X Plugin's Homepage</a>.</p>
 
 <table border="0" width="100%" class="footer">
 <tr valign="top">
diff -ruN 1.3.11sr1/docs/staticpages.html 1.4.0sr5-1/docs/staticpages.html
--- 1.3.11sr1/docs/staticpages.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/staticpages.html	2006-08-08 02:39:06.000000000 -0500
@@ -15,7 +15,7 @@
 </tr>
 </table>
 
-<h1>Static Pages plugin 1.4.1</h1>
+<h1>Static Pages plugin</h1>
 
 <h2><a name="about">What is it?</a></h2>
 
diff -ruN 1.3.11sr1/docs/support.html 1.4.0sr5-1/docs/support.html
--- 1.3.11sr1/docs/support.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/support.html	2006-08-08 02:39:06.000000000 -0500
@@ -19,40 +19,60 @@
 
 <h2>Documentation</h2>
 
-<p>The very documentation you're currently reading includes information about <a href="install.html">installing</a> and <a href="install.html#upgrade">upgrading</a> Geeklog, and it also lists <a href="install.html#installprob">common problems</a> and their solution. Detailed information about the <a href="config.html">config.php</a> configuration file is also available, as is information about <a href="theme.html">themes</a>.</p>
+<p>The very documentation you're currently reading includes information about <a href="install.html">installing</a> and <a href="install.html#upgrade">upgrading</a> Geeklog, and it also lists <a href="install.html#installprob">common problems</a> and their solution. Detailed information about the <a href="config.html">config.php</a> configuration file is also available, as is information about <a href="theme.html">themes</a> and how to <a href="theme.html#changes">update</a> them.</p>
 
 <p>Further information about using Geeklog can be found in our ever-expanding <a href="http://wiki.geeklog.net/">Documentation Wiki</a>, maintained by the Geeklog community.</p>
 
 <p>The most frequently asked questions are covered in our <a href="http://www.geeklog.net/faqman/">FAQ</a> - see if you can find the answer to your question there.</p>
 
-<p>Still can't find what you're looking for? Try <a href="http://www.geeklog.net/search.php">searching</a> the Geeklog Homepage. Chances are that someone already had the same question or problem and it has been covered there before.<br>
-<strong>Hint:</strong> If you're trying to resolve an error message you're getting, try searching for that error message first.</p>
+<p>Still can't find what you're looking for? Try <a href="http://www.geeklog.net/search.php">searching</a> the Geeklog Homepage. Chances are that someone already had the same question or problem and it has been covered there before.</p>
+
+<p><strong>Hint:</strong> If you're trying to resolve an error message you're getting, try searching for that error message first.</p>
+
 
 <h2>Interactive Help</h2>
 
+<h3>Forums</h3>
+
 <p>The best place to ask your questions are the <a href="http://www.geeklog.net/forum/">forums</a> on the Geeklog Homepage. Many Geeklog users frequent the forums, so you'll usually get a quick response there.</p>
 
-<p>If you prefer email, there are also several <a href="http://lists.geeklog.net/listinfo/">mailing lists</a> that you can use. Questions regarding installing and running Geeklog are best posted on the <a href="http://lists.geeklog.net/listinfo/geeklog-users">geeklog-users</a> mailing list.<br>
-<strong>Note:</strong> Please note that due to the ever-increasing amount of spam, you have to subscribe to the mailing lists before you can post there.</p>
+<h3>Mailing Lists</h3>
+
+<p>If you prefer email, there are also several <a href="http://lists.geeklog.net/listinfo/">mailing lists</a> that you can use. Questions regarding installing and running Geeklog are best posted on the <a href="http://lists.geeklog.net/listinfo/geeklog-users">geeklog-users</a> mailing list.</p>
+
+<p><strong>Note:</strong> Please note that due to the ever-increasing amount of spam, you have to subscribe to the mailing lists before you can post there. <strong>Posts by non-subscribers are silently discarded</strong>, so make sure to subscribe first.</p>
+
+<h3>IRC</h3>
+
+<p>Want to meet the Geeklog developers and other Geeklog users? Join us on <a href="irc://irc.freenode.net/geeklog">IRC</a>: channel #geeklog on irc.freenode.net.</p>
+
+<p><strong>Note:</strong> The channel is often very quiet. It's usually best to "just ask your question" and be willing to wait a bit for a response.</p>
 
-<p>Want to meet the Geeklog developers and other Geeklog users? Join us on <a href="irc://irc.freenode.net/geeklog">IRC</a>: channel #geeklog on irc.freenode.net.<br>
-<strong>Note:</strong> The channel is often very quiet. It's usually best to "just ask your question" and be willing to wait a bit for a response.</p>
 
 <h2>Other Options</h2>
 
-<p>Found a bug? <a href="http://project.geeklog.net/tracker/?group_id=6&amp;atid=105">Submit a bug report</a> on our project website. There's also a tracker for <a href="http://project.geeklog.net/tracker/?group_id=6&amp;atid=108">feature requests</a>.<br>
-<strong>Note:</strong> Before submitting a new bug report or feature request, please do a search first (on the project site as well as on the Geeklog Homepage) to make sure it hasn't been covered before. Thanks.</p>
+<h3>Bug Reports and Feature Requests</h3>
+
+<p>Found a bug? <a href="http://project.geeklog.net/tracker/?group_id=6&amp;atid=105">Submit a bug report</a> on our project website. There's also a tracker for <a href="http://project.geeklog.net/tracker/?group_id=6&amp;atid=108">feature requests</a>.</p>
+
+<p><strong>Note:</strong> Before submitting a new bug report or feature request, please do a search first (on the project site as well as on the Geeklog Homepage) to make sure it hasn't been covered before. Thanks.</p>
+
+<h3>Development</h3>
 
 <p>Want to develop a plugin or some other add-on? Read the <a href="http://gplugs.sourceforge.net/pluginman/">Plugins Developer's Guide</a> and join the <a href="http://lists.geeklog.net/listinfo/geeklog-modules">geeklog-modules</a> and <a href="http://lists.geeklog.net/listinfo/geeklog-devtalk">geeklog-devtalk</a> mailing lists.</p>
 
 <p>Want to help in Geeklog development? See <a href="http://www.geeklog.net/article.php/20030803155454822">this story</a> for suggestions on how to get started. And if you already made a modification, why not <a href="http://project.geeklog.net/tracker/?atid=107&amp;group_id=6">submit a patch</a>?
 
+
 <h2>Security Issues</h2>
 
 <p>The Geeklog developers take security very seriously. Should you need to report a security issue with Geeklog, please email details to <a href="mailto:geeklog-security@lists.geeklog.net">geeklog-security@lists.geeklog.net</a>. Thank you.</p>
 
+<p><strong>Note:</strong> Posts to geeklog-security are of course <em>not</em> discarded and you don't (and can't, actually) subscribe to this list. Simply send an email to this address and we will get back to you ASAP.</p>
+
 <p>Also see our <a href="http://www.geeklog.net/staticpages/index.php/GeeklogSecurity">Security statement</a> on the Geeklog Homepage.</p>
 
+
 <h2>Staying up to date</h2>
 
 <p>The best way to stay up to date with Geeklog development and being informed
@@ -64,13 +84,18 @@
 the <strong>GL Version Test</strong> link (last entry in your Admin menu) to
 see if your install is up to date.</p>
 
+
+<h2>Donations</h2>
+
+<p>If you consider Geeklog to be useful, feel free to <a href="http://www.geeklog.net/faqman/index.php?op=view&amp;t=49">make a donation</a>. Thank you!</p>
+
 <h2>International Support</h2>
 
-<p><img src="images/germany.gif" width="16" height="12" border="1" align="middle" alt=""> <a href="http://geeklog.info/">geeklog.info</a> - Geeklog-Support in Deutsch</p>
+<p><img src="images/de.png" width="16" height="16" border="0" align="middle" alt=""> <a href="http://geeklog.info/">geeklog.info</a> - Geeklog-Support in Deutsch</p>
 
-<p><img src="images/poland.gif" width="16" height="12" border="1" align="middle" alt=""> <a href="http://www.geeklog.now.pl/">GeeklogPolska</a>  - Geeklog support po Polsku</p>
+<p><img src="images/pl.png" width="16" height="16" border="0" align="middle" alt=""> <a href="http://www.geeklog.now.pl/">GeeklogPolska</a>  - Geeklog support po Polsku</p>
 
-<p><img src="images/japan.gif" width="16" height="12" border="1" align="middle" alt=""> <a href="http://geek.ecofirm.com/">Geeklog Japanese</a> - Geeklog support in Japanese</p>
+<p><img src="images/jp.png" width="16" height="16" border="0" align="middle" alt=""> <a href="http://geek.ecofirm.com/">Geeklog Japanese</a> - Geeklog support in Japanese</p>
 
 <table border="0" width="100%" class="footer">
 <tr valign="top">
diff -ruN 1.3.11sr1/docs/theme.html 1.4.0sr5-1/docs/theme.html
--- 1.3.11sr1/docs/theme.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/theme.html	2006-08-08 02:39:06.000000000 -0500
@@ -15,6 +15,10 @@
 </tr>
 </table>
 
+<p><small>(see below for a list of <a href="#changes">theme changes</a> in
+recent Geeklog versions)</small></p>
+
+
 <h1>Creating a Theme for Geeklog</h1>
 
 <p>Creating a theme for Geeklog is easy and quite fast. If you can
@@ -167,7 +171,90 @@
 instead. That way, you can even leave your users a choice between, for example,
 a "normal" theme and one with the blocks on the right.</p>
 
-<h2><a name="changes">Theme changes in Geeklog 1.3.11</a></h2>
+<h2><a name="changes">Theme changes in Geeklog 1.4.0</a></h2>
+
+<p>As usual, any missing new theme files can simply be copied over from the
+default theme (Professional) that ships with Geeklog.</p>
+
+<h3>Admin templates</h3>
+
+<p>Geeklog 1.4.0 comes with revamped Admin sections which required a lot of
+theme changes. We therefore suggest that you simply replace the entire
+<tt>admin</tt> directory of your theme with the <tt>admin</tt> directory
+from Geeklog's default theme (Professional) as it ships with Geeklog 1.4.0
+and apply any modfications you may have made to your Admin templates again
+afterwards.</p>
+
+<p><strong>Note:</strong> The new icons for "Command and Control"
+(<tt>moderation.php</tt>) in the Professional theme use a white background.
+For themes with a dark (or other non-white) background, you can <a
+href="http://www.geeklog.net/filemgmt/singlefile.php?lid=623">download</a> these
+icons as PNGs with alpha transparency (note that Internet Explorer can not
+display images with alpha transparency unless you include a JavaScript "<a
+href="http://homepage.ntlworld.com/bobosola/">hack</a>" into your theme, so you
+may want to convert those icons to normal transparency or simply set the
+background to that of your theme).</p>
+
+
+<h3>Advanced editor</h3>
+
+<p>To use the included advanced editor (FCKeditor) you will need the following
+new template files:</p>
+<ul>
+<li><tt>comment/commentform_advanced.thtml</tt> (for comments)</li>
+<li><tt>submit/submitstory_advanced.thtml</tt> (for story submissions)</li>
+<li><tt>admin/story/storyeditor_advanced.thtml</tt> (Admin's story editor)</li>
+<li><tt>staticpages/templates/admin/editor_advanced.thtml</tt> (for the Static
+    Pages editor, located in <tt>/path/to/geeklog/plugins</tt>)</li>
+<li><tt>advanced_editor_header.thtml</tt> (included by all of the above)</li>
+</ul>
+<p>You also have to add <code>{advanced_editor}</code> to the <code>&lt;head&gt;</code> section of your theme's <tt>header.thtml</tt> file.</p>
+
+<h3>Other changes</h3>
+
+<ul>
+<li>The comment templates <tt>commentbar.thtml</tt> and <tt>thread.thtml</tt>
+    have changed due to changes in the comment handling.</li>
+<li>New directories <tt>trackback</tt> and <tt>admin/trackback</tt> containing
+    several new template files have been added for the trackback support.</li>
+<li>New variables <code>{send_trackback_link}</code>,
+    <code>{send_trackback_url}</code>, and
+    <code>{lang_send_trackback_text}</code> are available in the story and
+    article template files. They provide a complete link as well as the URL and
+    link text allowing you to send a trackback comment for the current
+    story.</li>
+<li>The <tt>links</tt> and <tt>admin/link</tt> directories have been
+    removed. Links are now a plugin and the plugin's templates can be found in
+    <tt>/path/to/geeklog/plugins/links/templates</tt>.</li>
+<li>The <tt>pollbooth</tt> and <tt>admin/poll</tt> directories have been
+    removed. Polls are now a plugin and the plugin's templates can be found in
+    <tt>/path/to/geeklog/plugins/polls/templates</tt>.</li>
+<li>The <tt>preferences/profile.thtml</tt> template now has additional fields
+    for the password change (old password, confirmation field for the new
+    password).</li>
+<li>The search form, <tt>search/searchform.thtml</tt> has a new option for the
+    number of search results per page, while the hard-coded option to search
+    for links has been removed (since Links are in plugin now, it will show up
+    as part of the <code>{plugin_types}</tt> option).</li>
+<li>An additional variable, <code>{services}</code>, has to be added to the
+    <tt>loginform.thtml</tt> template file if you plan to allow users to log in
+    to your site using remote authentication.</li>
+<li>If you plan to enable Trackbacks on your site, you may want to add links to
+    a story's trackbacks section to your story template files, e.g.
+    <code>{start_trackbacks_anchortag}{trackbacks_with_count}{end_trackbacks_anchortag}</code>. See the Professional theme's story template files for
+    examples.</li>
+<li>For the site statistics, the file <tt>stats/sitestatistics.thtml</tt> has
+    changed (entries for the links and poll have been removed and a new entry
+    for the number of active users has been added). There is also a new file,
+    <tt>stats/singlesummary.thtml</tt>, that is used for plugin entries.</li>
+<li>The <tt>navbar</tt> directory is now part of a Geeklog theme (previously
+    used by some plugins, e.g. the Forum plugin). It contains two files,
+    <tt>menuitem.thtml</tt> and <tt>navbar.thtml</tt>, as well as two images,
+    <tt>button.gif</tt> and <tt>button_over.gif</tt>.</li>
+</ul>
+
+
+<h2><a name="changes1311">Theme changes in Geeklog 1.3.11</a></h2>
 
 <p>There are no mandatory theme changes in Geeklog 1.3.11, so themes made for Geeklog 1.3.10 will work just fine without any modifications.</p>
 
@@ -188,7 +275,7 @@
     site calendar or the personal calendar.</li>
 </ul>
 
-<h2><a name="changes#1310">Theme changes in Geeklog 1.3.10</a></h2>
+<h2><a name="changes1310">Theme changes in Geeklog 1.3.10</a></h2>
 
 <p>General note: To upgrade your custom theme for use with Geeklog 1.3.10, you can simply copy over any new template files from the Geeklog default theme.</p>
 
@@ -218,7 +305,7 @@
     version numbers for the plugin: The installed version and the (possibly
     differing) version of the actual code.  In the latter case, it will also
     display an update button.<br>
-    The list of plugins, <tt>admin/plugins/pluginslist.thtml</tt> and
+    The list of plugins, <tt>admin/plugins/pluginlist.thtml</tt> and
     <tt>admin/plugins/listitem.thtml</tt>, also displays the 2 version numbers
     and now supports paging when more than 25 plugins are installed.</li>
 <li>The topic editor, <tt>admin/topic/topiceditor.thtml</tt>, contained a
diff -ruN 1.3.11sr1/docs/themevars.html 1.4.0sr5-1/docs/themevars.html
--- 1.3.11sr1/docs/themevars.html	2004-12-31 10:03:28.000000000 -0600
+++ 1.4.0sr5-1/docs/themevars.html	2006-08-08 02:39:06.000000000 -0500
@@ -120,8 +120,9 @@
 <h2><a name="story">Stories</a></h2>
 
 <p>The following variables are available in the <tt>storytext.thtml</tt>,
-<tt>storybodytext.thtml</tt>, <tt>featuredstorytext.thtml</tt>, and
-<tt>featuredstorybodytext.thtml</tt> template files. These files are used to
+<tt>storybodytext.thtml</tt>, <tt>featuredstorytext.thtml</tt>,
+<tt>featuredstorybodytext.thtml</tt>, <tt>archivestorytext.thtml</tt>, and
+<tt>archivestorybodytext.thtml</tt>  template files. These files are used to
 render stories for the index page as well as the content of the
 <code>{formatted_article}</code> variable in the <tt>article/article.thtml</tt>
 file (which is used to display a story on its own page).</p>
diff -ruN 1.3.11sr1/docs/trackback.html 1.4.0sr5-1/docs/trackback.html
--- 1.3.11sr1/docs/trackback.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/docs/trackback.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>Geeklog Documentation - Trackback, Pingback, Ping</title>
+  <link rel="stylesheet" type="text/css" href="docstyle.css" title="Dev Stylesheet">
+</head>
+
+<body>
+<table cellpadding="2" cellspacing="2" border="0" width="100%">
+<tr>
+  <td><a href="index.html" style="background:transparent"><img src="images/newlogo.gif" alt="Geeklog Documentation" width="243" height="90" border="0"></a></td>
+</tr>
+<tr>
+  <td valign="top" class="menu"><a href="index.html">Geeklog Documentation</a> - Trackback, Pingback, Ping</td>
+</tr>
+</table>
+
+<h1>Trackback, Pingback, Ping</h1>
+
+<h2>Introduction</h2>
+
+<p>Trackbacks, Pingbacks, and Pings are mostly used in blog communities to inform other sites / blogs about updated blogs and comments made to blog posts. These methods are supported by many blog / CMS packages, so you can also send Trackbacks and Pingbacks to sites running on software other than Geeklog.</p>
+
+<ul>
+<li><a href="#trackback">Trackback</a>s are a means to connect a post you made on your blog to a post on another blog.<br>
+E.g. Mary posts something on her blog. Peter reads that, makes a post about Mary's post on his own site and then sends a trackback to Mary's site, so that Mary and visitors of Mary's site will know about Peter's post.</li>
+<li><a href="#pingback">Pingback</a>s are pretty much the same as Trackbacks, they only use a different protocol.</li>
+<li>Sending a <a href="#ping">Ping</a> is meant to inform sites that keep track of updated blogs that you've made a new post. These weblog directories or aggregators usually offer a way to subscribe to this update information, so that you don't have to visit several sites to find the new posts.</li>
+</ul>
+
+<p>For more information, please consult Wikipedia on <a href="http://en.wikipedia.org/wiki/Trackback">TrackBack</a> and <a href="http://en.wikipedia.org/wiki/Pingback">Pingback</a>. You can also spend some time reading up on <a href="http://en.wikipedia.org/wiki/Weblog">Weblog</a>s in general there ...</p>
+
+
+<h2><a name="usage">Usage</a></h2>
+
+<p>To pick up the above example, here's how trackback, etc. work: Assume you're Peter and just read a post on Mary's blog about her little lamb. Say that post has the URL <tt>http://www.example.com/article.php/little-lamb</tt>.</p>
+
+<p>Peter now goes and writes a new story, linking to Mary's post. Something like:</p>
+<pre>
+I just read that Mary &lt;a href="http://www.example.com/article.php/little-lamb"&gt;has
+a little lamb&lt;/a&gt;. Hope she posts some pictures soon!
+</pre>
+<p>After saving that story, there is an option "send ping" in the Admin's list of stories (last column). Clicking on the link presents you with a list of options: Send Pingback, Send Ping, Send Trackback (some of those may have been disabled and not show up - <a href="#disable" title="How to disable Trackbacks">see
+below</a>).</p>
+
+<h3><a name="pingback">Pingback</a></h3>
+
+<p>Sending a Pingback is an automated process: After clicking on that link, Geeklog scans your story for links to other sites and tries to send a Pingback to all those sites that accept Pingbacks. The Pingback will automatically include a link back to your story.</p>
+
+<h3><a name="trackback">Trackback</a></h3>
+
+<p><small>(We're skipping sending Pings for the moment - <a href="#ping"
+title="Jump to the explanation of Pings">see below</a>)</small></p>
+
+<p>A Trackback can only be sent to one site, so you are now presented with a list of all the links in your story and have to choose which site should receive the trackback. Geeklog will then check if the site accepts trackbacks and try to determine the actual trackback URL to send the Trackback to.</p>
+
+<p>You will now get a form that includes information about your post (title, URL, URL of your site and the text of your post). If Geeklog could determine the Trackback URL, that field will also be filled in. If the Trackback URL is missing, then either Geeklog could not find the Trackback URL by itself (in which case you can add it manually) or the target site (Mary's, in the above example) does not accept Trackbacks.</p>
+
+<p>You can - and should - now edit the excerpt from your post. Please note that many sites will shorten the excerpt, typically to something like 255 characters. Also keep in mind that the excerpt will be displayed on Mary's site, so it should contain a portion of your post that will make it clear to a visitor of Mary's site why that post shows up there (i.e. it should somehow refer to Mary's post).</p>
+
+<p>You can then choose to see a preview of your post (but keep in mind that it may not be displayed in the exact same way on Mary's site) and / or send the Trackback.</p>
+
+<h2>Trackback vs. Pingback</h2>
+
+<p>Since, as mentioned above, Trackback and Pingback offer pretty much the same functionality, you should really only send one of the two. So if Mary's site offers both options, you should think about which of the two makes more sense to you for that particular post.</p>
+
+<p>Pingbacks provide less information (typically only a link back to your site) but they are automated and therefore easier and faster to send. Trackbacks allow you to send more information (e.g. an excerpt from your post) but preparing that information takes more time.</p>
+
+<h2><a name="receiving">Receiving Trackbacks and Pingbacks</a></h2>
+
+<p>Your Geeklog site will, of course, be able to receive Trackbacks and Pingbacks to your stories. They will show up in a dedicated section below the story, similar to the section for comments. Once received, Geeklog will treat Trackbacks and Pingbacks the same, so you won't be able to tell the difference.</p>
+
+<p>When you disable Trackbacks and / or Pingbacks in <tt>config.php</tt>, you will also disable receiving them.</p>
+
+
+<h2><a name="ping">Ping</a></h2>
+
+<p>Pings are meant to be sent to certain websites that keep track of blog posts. Geeklog comes pre-configured for pinging <a href="http://pingomatic.com/">Ping-o-Matic</a>, a service that in turn will ping other services (see their site for details). You can easily add others or delete / disable the existing entry (from the Admin's "Trackback" entry).</p>
+
+<p>Weblog directory services will usually accept either a standard or an extended ping. The difference is that the "extended" Ping will also include a link to your site's feed (RSS, Atom, or whatever you chose).</p>
+
+<p>When you click on the "Send Ping" button for a story, all currently enabled weblog directories will be notified automatically.</p>
+
+<p>Pinging a weblog directory service will also <a href="http://www.google.com/help/about_blogsearch.html#getlisted">ensure</a> that your site is included in Google's <a href="http://blogsearch.google.com/">blog search</a>.</p>
+
+
+<h2><a name="disable">Disabling Trackbacks</a></h2>
+
+<p>Since these functions may not be needed on certain sites (e.g. corporate sites), they can be switched off individually in <a href="config.html#desc_trackback_enabled">config.php</a>.</p>
+
+<p>Note that "Trackback" is sometimes used as a generic term for both trackbacks
+and pingbacks. So when you disable trackbacks but leave pingbacks enabled, you
+will still see references to "Trackback" in a few places.</p>
+
+<p>Only when all three, i.e. trackbacks, pingbacks, and pings are disabled will
+the "Trackback" entry vanish from the Admins Only block. At that point, the
+only reference to trackbacks that you'll still see is the drop-down menu entry
+in the Admin's story editor (to enable/disable trackbacks on a per-story basis).
+But its setting is overridden by the <tt>config.php</tt> entries, so it can be
+ignores.</p>
+
+
+<h2>Further reading</h2>
+
+<p>Also see the following two articles on the Geeklog homepage:</p>
+<ul>
+<li><a href="http://www.geeklog.net/article.php/trackback-pingback">Trackback and Pingback in Geeklog 1.4</a></li>
+<li><a href="http://www.geeklog.net/article.php/ping">Sending a Ping in Geeklog 1.4</a></li>
+</ul>
+
+
+<table border="0" width="100%" class="footer">
+<tr valign="top">
+  <td colspan="2"><a href="http://www.geeklog.net">The Geeklog Documentation Project</a><br>
+    All trademarks and copyrights on this page are owned by their respective owners. GeekLog is copyleft.</td>
+</tr>
+</table>
+
+</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/_documentation.html 1.4.0sr5-1/fckeditor/_documentation.html
--- 1.3.11sr1/fckeditor/_documentation.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/_documentation.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+-->
+<html>
+	<head>
+		<title>FCKeditor - Documentation</title>
+		<style>
+			BODY { FONT-FAMILY: Arial, Verdana, Sans-Serif }
+			P { MARGIN-LEFT: 20px }
+			</style>
+	</head>
+	<body>
+		<h1>FCKeditor Documentation</h1>
+		<p>You can find all the available documentation for FCKeditor online, at our wiki 
+			web site:</p>
+		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
+			<p><a href="http://wiki.fckeditor.net/">http://wiki.fckeditor.net/</a></p>
+		</blockquote>
+	</body>
+</html>
Files 1.3.11sr1/fckeditor/editor/css/behaviors/anchor.gif and 1.4.0sr5-1/fckeditor/editor/css/behaviors/anchor.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/css/behaviors/anchors.htc 1.4.0sr5-1/fckeditor/editor/css/behaviors/anchors.htc
--- 1.3.11sr1/fckeditor/editor/css/behaviors/anchors.htc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/behaviors/anchors.htc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,22 @@
+<public:component lightweight="true">
+
+<public:attach event="oncontentready" onevent="ShowIcon()" />
+
+<script language="javascript">
+
+var bIsAnchor = this.name.length > 0 && this.getAttribute('href').length == 0 ;
+
+function ShowIcon()
+{
+	if ( bIsAnchor ) 
+	{
+		this.runtimeStyle.paddingLeft		= '16px' ;
+		this.runtimeStyle.backgroundImage	= 'url(' + window.parent.FCKConfig.FullBasePath + 'css/behaviors/anchor.gif)' ;
+		this.runtimeStyle.backgroundRepeat	= 'no-repeat' ;
+		this.runtimeStyle.cursor = 'hand' ;
+	}
+}
+
+</script>
+
+</public:component>
diff -ruN 1.3.11sr1/fckeditor/editor/css/behaviors/disablehandles.htc 1.4.0sr5-1/fckeditor/editor/css/behaviors/disablehandles.htc
--- 1.3.11sr1/fckeditor/editor/css/behaviors/disablehandles.htc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/behaviors/disablehandles.htc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,15 @@
+<public:component lightweight="true">
+
+<script language="javascript">
+
+function CancelEvent()
+{
+	return false ;
+}
+
+this.onresizestart = CancelEvent ;
+this.onbeforeeditfocus = CancelEvent ;
+
+</script>
+
+</public:component>
Files 1.3.11sr1/fckeditor/editor/css/behaviors/hiddenfield.gif and 1.4.0sr5-1/fckeditor/editor/css/behaviors/hiddenfield.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/css/behaviors/hiddenfield.htc 1.4.0sr5-1/fckeditor/editor/css/behaviors/hiddenfield.htc
--- 1.3.11sr1/fckeditor/editor/css/behaviors/hiddenfield.htc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/behaviors/hiddenfield.htc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,30 @@
+<public:component lightweight="true">
+
+<public:attach event="oncontentready" onevent="ShowField()" />
+<public:attach event="ondoubleclick" onevent="EditField()" />
+
+<script language="javascript">
+
+var bIsHiddenField = this.type == 'hidden' ;
+
+function ShowField()
+{
+	if ( bIsHiddenField ) 
+	{
+		this.runtimeStyle.width				= '20px' ;
+		this.runtimeStyle.height			= '20px' ;
+		this.runtimeStyle.border			= '1px dotted #FF0000' ;
+		this.runtimeStyle.backgroundImage	= 'url(css/behaviors/hiddenfield.gif)' ;
+		this.runtimeStyle.fontSize			= '99px' ;
+	}
+}
+
+function EditField()
+{
+	if ( bIsHiddenField ) 
+		alert( this.outerHTML ) ;
+}
+
+</script>
+
+</public:component>
diff -ruN 1.3.11sr1/fckeditor/editor/css/behaviors/moz-bindings.xml 1.4.0sr5-1/fckeditor/editor/css/behaviors/moz-bindings.xml
--- 1.3.11sr1/fckeditor/editor/css/behaviors/moz-bindings.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/behaviors/moz-bindings.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<bindings xmlns="http://www.mozilla.org/xbl">
+	<binding id="showtableborders">
+		<implementation>
+			<constructor>
+				this.CheckShowBorders() ;
+			</constructor>
+			<method name="CheckShowBorders">
+				<body>
+					var oClassRegex = /\s*FCK__ShowTableBorders\s*/ ;
+
+					if ( this.border == 0 )
+					{
+						if ( !oClassRegex.test( this.className ) )
+							this.className += ' FCK__ShowTableBorders' ;
+					}
+					else
+					{
+						if ( oClassRegex.test( this.className ) )
+							this.className = this.className.replace( oClassRegex, '' ) ;
+					}
+			   </body>
+			</method>
+		</implementation>
+		<handlers>
+			<handler event="DOMAttrModified">
+				this.CheckShowBorders() ;
+			</handler>
+		</handlers>
+	</binding>
+	<binding id="anchors">
+		<implementation>
+			<constructor>
+				<![CDATA[
+				this.IsAnchor = ( this.name != null && this.name.length > 0 && ( this.getAttribute('href') == null || this.getAttribute('href').length == 0 ) ) ;
+				this.ShowIcon() ;
+				]]>
+			</constructor>
+			<method name="ShowIcon">
+				<body>
+					if ( this.IsAnchor ) 
+					{
+						this.style.height = '1px' ;
+						this.style.paddingLeft		= '16px' ;
+						this.style.backgroundImage	= 'url(behaviors/anchor.gif)' ;
+						this.style.backgroundRepeat	= 'no-repeat' ;
+						this.style.cursor = 'pointer' ;
+					}
+			   </body>
+			</method>
+		</implementation>
+		<handlers>
+			<handler event="click">
+				if ( this.IsAnchor ) 
+					alert( this.IsAnchor ) ;
+			</handler>
+		</handlers>
+	</binding>
+</bindings>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/css/behaviors/showtableborders.htc 1.4.0sr5-1/fckeditor/editor/css/behaviors/showtableborders.htc
--- 1.3.11sr1/fckeditor/editor/css/behaviors/showtableborders.htc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/behaviors/showtableborders.htc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,36 @@
+<public:component lightweight="true">
+
+<public:attach event="oncontentready" onevent="ShowBorders()" />
+<public:attach event="onpropertychange" onevent="OnPropertyChange()" />
+
+<script language="javascript">
+var oClassRegex = /\s*FCK__ShowTableBorders/ ;
+var FCKConfig = window.parent.FCKConfig ;
+
+function ShowBorders()
+{
+	if ( this.border == 0 )
+	{
+		if ( !oClassRegex.test( this.className ) )
+			this.className += ' FCK__ShowTableBorders' ;
+	}
+	else
+	{
+		if ( oClassRegex.test( this.className ) )
+		{
+			this.className = this.className.replace( oClassRegex, '' ) ;
+			if ( this.className.length == 0 )
+				this.removeAttribute( 'className', 0 ) ;
+		}
+	}
+}
+
+function OnPropertyChange()
+{
+	if ( event.propertyName == 'border' || event.propertyName == 'className' )
+		ShowBorders() ;
+}
+
+</script>
+
+</public:component>
diff -ruN 1.3.11sr1/fckeditor/editor/css/fck_editorarea.css 1.4.0sr5-1/fckeditor/editor/css/fck_editorarea.css
--- 1.3.11sr1/fckeditor/editor/css/fck_editorarea.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/fck_editorarea.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_editorarea.css
+ * 	This is the default CSS file used by the editor area. It defines the
+ * 	initial font of the editor and background color.
+ * 
+ * 	A user can configure the editor to use another CSS file. Just change
+ * 	the value of the FCKConfig.EditorAreaCSS key in the configuration
+ * 	file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+body
+{
+	font-family: Arial, Verdana, Sans-Serif;
+	font-size: 12px;
+	padding: 5px 5px 5px 5px;
+	margin: 0px;
+	border-style: none;
+	background-color: #ffffff;
+}
+
+/* 
+	Just uncomment the following block if you want to avoid spaces between 
+	paragraphs. Remember to apply the same style in your output front end page.
+*/
+/*
+P, UL, LI
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+*/
+
+.Bold
+{
+	font-weight: bold;
+}
+
+.Title
+{
+	font-weight: bold;
+	font-size: 18px;
+	color: #cc3300;
+}
+
+.Code
+{
+	border: #8b4513 1px solid;
+	padding-right: 5px;
+	padding-left: 5px;
+	color: #000066;
+	font-family: 'Courier New' , Monospace;
+	background-color: #ff9933;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/css/fck_internal.css 1.4.0sr5-1/fckeditor/editor/css/fck_internal.css
--- 1.3.11sr1/fckeditor/editor/css/fck_internal.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/fck_internal.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,64 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_internal.css
+ * 	This CSS Style Sheet defines rules used by the editor for its internal use.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+TABLE.FCK__ShowTableBorders, TABLE.FCK__ShowTableBorders TD
+{
+	border: #d3d3d3 1px solid ;
+}
+
+FORM
+{
+	border: 1px dotted #FF0000;
+	padding: 2px ;
+}
+
+.FCK__Flash
+{
+	border: darkgray 1px solid;
+	background-position: center center;
+	background-image: url(images/fck_flashlogo.gif);
+	background-repeat: no-repeat;
+	width: 80px ;
+	height: 80px ;
+}
+
+.FCK__Anchor
+{
+	background-position: center center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	width: 16px ;
+	height: 15px ;
+}
+
+.FCK__PageBreak
+{
+	background-position: center center;
+	background-image: url(images/fck_pagebreak.gif);
+	background-repeat: no-repeat;
+	clear: both;
+	display: block;
+	float: none;
+	width: 100%;
+	border-top: #999999 1px dotted;
+	border-bottom: #999999 1px dotted;
+	border-right:0px;
+	border-left:0px;
+	height: 5px;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/css/fck_showtableborders_gecko.css 1.4.0sr5-1/fckeditor/editor/css/fck_showtableborders_gecko.css
--- 1.3.11sr1/fckeditor/editor/css/fck_showtableborders_gecko.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/css/fck_showtableborders_gecko.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,23 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_showtableborders_gecko.css
+ * 	This CSS Style Sheet defines the rules to show table borders on Gecko.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+TABLE[border="0"], TABLE[border="0"] TD
+{
+	border: #d3d3d3 1px solid
+}
Files 1.3.11sr1/fckeditor/editor/css/images/fck_anchor.gif and 1.4.0sr5-1/fckeditor/editor/css/images/fck_anchor.gif differ
Files 1.3.11sr1/fckeditor/editor/css/images/fck_pagebreak.gif and 1.4.0sr5-1/fckeditor/editor/css/images/fck_pagebreak.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/common/fck_dialog_common.css 1.4.0sr5-1/fckeditor/editor/dialog/common/fck_dialog_common.css
--- 1.3.11sr1/fckeditor/editor/dialog/common/fck_dialog_common.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/common/fck_dialog_common.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,78 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_dialog_common.css
+ * 	This is the CSS file used for interface details in some dialog
+ * 	windows.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+.ImagePreviewArea
+{
+	border: #000000 1px solid;
+	padding: 5px;
+	overflow: auto;
+	width: 100%;
+	height: 170px;
+	background-color: #ffffff;
+}
+
+.FlashPreviewArea
+{
+	border: #000000 1px solid;
+	padding: 5px;
+	overflow: auto;
+	width: 100%;
+	height: 170px;
+	background-color: #ffffff;
+}
+
+.BtnReset
+{
+	float: left;
+	background-position: center center;
+	background-image: url(images/reset.gif);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	border: 1px none;
+	font-size: 1px ;
+}
+
+.BtnLocked, .BtnUnlocked
+{
+	float: left;
+	background-position: center center;
+	background-image: url(images/locked.gif);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	border: 1px none;
+	font-size: 1px ;
+}
+
+.BtnUnlocked
+{
+	background-image: url(images/unlocked.gif);
+}
+
+.BtnOver
+{
+	border: 1px outset;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.FCK__FieldNumeric
+{
+	behavior: url(common/fcknumericfield.htc) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/common/fck_dialog_common.js 1.4.0sr5-1/fckeditor/editor/dialog/common/fck_dialog_common.js
--- 1.3.11sr1/fckeditor/editor/dialog/common/fck_dialog_common.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/common/fck_dialog_common.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_dialog_common.js
+ * 	Useful functions used by almost all dialog window pages.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Gets a element by its Id. Used for shorter coding.
+function GetE( elementId )
+{
+	return document.getElementById( elementId )  ;
+}
+
+function ShowE( element, isVisible )
+{
+	if ( typeof( element ) == 'string' )
+		element = GetE( element ) ;
+	element.style.display = isVisible ? '' : 'none' ;
+}
+
+function SetAttribute( element, attName, attValue )
+{
+	if ( attValue == null || attValue.length == 0 )
+		element.removeAttribute( attName, 0 ) ;			// 0 : Case Insensitive
+	else
+		element.setAttribute( attName, attValue, 0 ) ;	// 0 : Case Insensitive
+}
+
+function GetAttribute( element, attName, valueIfNull )
+{
+	var oAtt = element.attributes[attName] ;
+
+	if ( oAtt == null || !oAtt.specified )
+		return valueIfNull ? valueIfNull : '' ;
+
+	var oValue ;
+	
+	if ( !( oValue = element.getAttribute( attName, 2 ) ) )
+		oValue = oAtt.nodeValue ;
+
+	return ( oValue == null ? valueIfNull : oValue ) ;
+}
+
+// Functions used by text fiels to accept numbers only.
+function IsDigit( e )
+{
+	e = e || event ;
+	var iCode = ( e.keyCode || e.charCode ) ;
+
+	event.returnValue =
+		(
+			( iCode >= 48 && iCode <= 57 )		// Numbers
+			|| (iCode >= 37 && iCode <= 40)		// Arrows
+			|| iCode == 8						// Backspace
+			|| iCode == 46						// Delete
+		) ;
+
+	return event.returnValue ;
+}
+
+String.prototype.trim = function()
+{
+	return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
+}
+
+String.prototype.startsWith = function( value )
+{
+	return ( this.substr( 0, value.length ) == value ) ;
+}
+
+String.prototype.remove = function( start, length )
+{
+	var s = '' ;
+
+	if ( start > 0 )
+		s = this.substring( 0, start ) ;
+
+	if ( start + length < this.length )
+		s += this.substring( start + length , this.length ) ;
+
+	return s ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/common/fcknumericfield.htc 1.4.0sr5-1/fckeditor/editor/dialog/common/fcknumericfield.htc
--- 1.3.11sr1/fckeditor/editor/dialog/common/fcknumericfield.htc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/common/fcknumericfield.htc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,24 @@
+<public:component lightweight="true">
+
+<script language="javascript">
+
+function CheckIsDigit()
+{
+	var iCode = event.keyCode ;
+
+	event.returnValue =
+		(
+			( iCode >= 48 && iCode <= 57 )		// Numbers
+			|| (iCode >= 37 && iCode <= 40)		// Arrows
+			|| iCode == 8						// Backspace
+			|| iCode == 46						// Delete
+		) ;
+
+	return event.returnValue ;
+}
+
+this.onkeypress = CheckIsDigit ;
+
+</script>
+
+</public:component>
Files 1.3.11sr1/fckeditor/editor/dialog/common/images/locked.gif and 1.4.0sr5-1/fckeditor/editor/dialog/common/images/locked.gif differ
Files 1.3.11sr1/fckeditor/editor/dialog/common/images/reset.gif and 1.4.0sr5-1/fckeditor/editor/dialog/common/images/reset.gif differ
Files 1.3.11sr1/fckeditor/editor/dialog/common/images/unlocked.gif and 1.4.0sr5-1/fckeditor/editor/dialog/common/images/unlocked.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/common/moz-bindings.xml 1.4.0sr5-1/fckeditor/editor/dialog/common/moz-bindings.xml
--- 1.3.11sr1/fckeditor/editor/dialog/common/moz-bindings.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/common/moz-bindings.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<bindings xmlns="http://www.mozilla.org/xbl">
+	<binding id="numericfield">
+		<implementation>
+			<constructor>
+				this.keypress = CheckIsDigit ;
+			</constructor>
+			<method name="CheckIsDigit">
+				<body>
+					var iCode = keyCode ;
+
+					var bAccepted =
+						(
+							( iCode >= 48 && iCode <= 57 )		// Numbers
+							|| (iCode >= 37 && iCode <= 40)		// Arrows
+							|| iCode == 8						// Backspace
+							|| iCode == 46						// Delete
+						) ;
+
+					return bAccepted ;
+			   </body>
+			</method>
+		</implementation>
+		<events>
+			<event type="keypress" value="CheckIsDigit()" />
+		</events>
+	</binding>
+</bindings>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_about/lgpl.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_about/lgpl.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_about/lgpl.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_about/lgpl.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,434 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<title>GNU Lesser General Public License</title>
+		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
+		<STYLE>
+			BODY { FONT-SIZE: 12px }
+		</STYLE>
+	</head>
+	<body>
+		<H3>GNU Lesser General Public License</H3>
+		<TT>
+			<P>Version 2.1, February 1999</P>
+			<BLOCKQUOTE>
+				<P>Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 
+					330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute 
+					verbatim copies of this license document, but changing it is not allowed.</P>
+				<P>[This is the first released version of the Lesser GPL. It also counts as the 
+					successor of the GNU Library Public License, version 2, hence the version 
+					number 2.1.]</P>
+			</BLOCKQUOTE>
+			<H4>Preamble</H4>
+			<P>The licenses for most software are designed to take away your freedom to share 
+				and change it. By contrast, the GNU General Public Licenses are intended to 
+				guarantee your freedom to share and change free software--to make sure the 
+				software is free for all its users.
+			</P>
+			<P>This license, the Lesser General Public License, applies to some specially 
+				designated software packages--typically libraries--of the Free Software 
+				Foundation and other authors who decide to use it. You can use it too, but we 
+				suggest you first think carefully about whether this license or the ordinary 
+				General Public License is the better strategy to use in any particular case, 
+				based on the explanations below.
+			</P>
+			<P>When we speak of free software, we are referring to freedom of use, not price. 
+				Our General Public Licenses are designed to make sure that you have the freedom 
+				to distribute copies of free software (and charge for this service if you 
+				wish); that you receive source code or can get it if you want it; that you can 
+				change the software and use pieces of it in new free programs; and that you are 
+				informed that you can do these things.</P>
+			<P>To protect your rights, we need to make restrictions that forbid distributors to 
+				deny you these rights or to ask you to surrender these rights. These 
+				restrictions translate to certain responsibilities for you if you distribute 
+				copies of the library or if you modify it.
+			</P>
+			<P>For example, if you distribute copies of the library, whether gratis or for a 
+				fee, you must give the recipients all the rights that we gave you. You must 
+				make sure that they, too, receive or can get the source code. If you link other 
+				code with the library, you must provide complete object files to the 
+				recipients, so that they can relink them with the library after making changes 
+				to the library and recompiling it. And you must show them these terms so they 
+				know their rights.
+			</P>
+			<P>We protect your rights with a two-step method: (1) we copyright the library, and 
+				(2) we offer you this license, which gives you legal permission to copy, 
+				distribute and/or modify the library.
+			</P>
+			<P>To protect each distributor, we want to make it very clear that there is no 
+				warranty for the free library. Also, if the library is modified by someone else 
+				and passed on, the recipients should know that what they have is not the 
+				original version, so that the original author's reputation will not be affected 
+				by problems that might be introduced by others.
+			</P>
+			<P>Finally, software patents pose a constant threat to the existence of any free 
+				program. We wish to make sure that a company cannot effectively restrict the 
+				users of a free program by obtaining a restrictive license from a patent 
+				holder. Therefore, we insist that any patent license obtained for a version of 
+				the library must be consistent with the full freedom of use specified in this 
+				license.
+			</P>
+			<P>Most GNU software, including some libraries, is covered by the ordinary GNU 
+				General Public License. This license, the GNU Lesser General Public License, 
+				applies to certain designated libraries, and is quite different from the 
+				ordinary General Public License. We use this license for certain libraries in 
+				order to permit linking those libraries into non-free programs.
+			</P>
+			<P>When a program is linked with a library, whether statically or using a shared 
+				library, the combination of the two is legally speaking a combined work, a 
+				derivative of the original library. The ordinary General Public License 
+				therefore permits such linking only if the entire combination fits its criteria 
+				of freedom. The Lesser General Public License permits more lax criteria for 
+				linking other code with the library.
+			</P>
+			<P>We call this license the "Lesser" General Public License because it does Less to 
+				protect the user's freedom than the ordinary General Public License. It also 
+				provides other free software developers Less of an advantage over competing 
+				non-free programs. These disadvantages are the reason we use the ordinary 
+				General Public License for many libraries. However, the Lesser license provides 
+				advantages in certain special circumstances.
+			</P>
+			<P>For example, on rare occasions, there may be a special need to encourage the 
+				widest possible use of a certain library, so that it becomes a de-facto 
+				standard. To achieve this, non-free programs must be allowed to use the 
+				library. A more frequent case is that a free library does the same job as 
+				widely used non-free libraries. In this case, there is little to gain by 
+				limiting the free library to free software only, so we use the Lesser General 
+				Public License.
+			</P>
+			<P>In other cases, permission to use a particular library in non-free programs 
+				enables a greater number of people to use a large body of free software. For 
+				example, permission to use the GNU C Library in non-free programs enables many 
+				more people to use the whole GNU operating system, as well as its variant, the 
+				GNU/Linux operating system.
+			</P>
+			<P>Although the Lesser General Public License is Less protective of the users' 
+				freedom, it does ensure that the user of a program that is linked with the 
+				Library has the freedom and the wherewithal to run that program using a 
+				modified version of the Library.
+			</P>
+			<P>The precise terms and conditions for copying, distribution and modification 
+				follow. Pay close attention to the difference between a "work based on the 
+				library" and a "work that uses the library". The former contains code derived 
+				from the library, whereas the latter must be combined with the library in order 
+				to run.
+			</P>
+			<H4>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</H4>
+			<P><STRONG>0.</STRONG> This License Agreement applies to any software library or 
+				other program which contains a notice placed by the copyright holder or other 
+				authorized party saying it may be distributed under the terms of this Lesser 
+				General Public License (also called "this License"). Each licensee is addressed 
+				as "you".</P>
+			<P>A "library" means a collection of software functions and/or data prepared so as 
+				to be conveniently linked with application programs (which use some of those 
+				functions and data) to form executables.
+			</P>
+			<P>The "Library", below, refers to any such software library or work which has been 
+				distributed under these terms. A "work based on the Library" means either the 
+				Library or any derivative work under copyright law: that is to say, a work 
+				containing the Library or a portion of it, either verbatim or with 
+				modifications and/or translated straightforwardly into another language. 
+				(Hereinafter, translation is included without limitation in the term 
+				"modification".)
+			</P>
+			<P>"Source code" for a work means the preferred form of the work for making 
+				modifications to it. For a library, complete source code means all the source 
+				code for all modules it contains, plus any associated interface definition 
+				files, plus the scripts used to control compilation and installation of the 
+				library.</P>
+			<P>Activities other than copying, distribution and modification are not covered by 
+				this License; they are outside its scope. The act of running a program using 
+				the Library is not restricted, and output from such a program is covered only 
+				if its contents constitute a work based on the Library (independent of the use 
+				of the Library in a tool for writing it). Whether that is true depends on what 
+				the Library does and what the program that uses the Library does.
+			</P>
+			<P><STRONG>1.</STRONG> You may copy and distribute verbatim copies of the Library's 
+				complete source code as you receive it, in any medium, provided that you 
+				conspicuously and appropriately publish on each copy an appropriate copyright 
+				notice and disclaimer of warranty; keep intact all the notices that refer to 
+				this License and to the absence of any warranty; and distribute a copy of this 
+				License along with the Library.
+			</P>
+			<P>You may charge a fee for the physical act of transferring a copy, and you may at 
+				your option offer warranty protection in exchange for a fee.
+			</P>
+			<P><STRONG>2.</STRONG> You may modify your copy or copies of the Library or any 
+				portion of it, thus forming a work based on the Library, and copy and 
+				distribute such modifications or work under the terms of Section 1 above, 
+				provided that you also meet all of these conditions:
+			</P>
+			<BLOCKQUOTE>
+				<P>a) The modified work must itself be a software library.
+				</P>
+				<P>b) You must cause the files modified to carry prominent notices stating that you 
+					changed the files and the date of any change.</P>
+				<P>c) You must cause the whole of the work to be licensed at no charge to all third 
+					parties under the terms of this License.
+				</P>
+				<P>d) If a facility in the modified Library refers to a function or a table of data 
+					to be supplied by an application program that uses the facility, other than as 
+					an argument passed when the facility is invoked, then you must make a good 
+					faith effort to ensure that, in the event an application does not supply such 
+					function or table, the facility still operates, and performs whatever part of 
+					its purpose remains meaningful.
+				</P>
+				<P>(For example, a function in a library to compute square roots has a purpose that 
+					is entirely well-defined independent of the application. Therefore, Subsection 
+					2d requires that any application-supplied function or table used by this 
+					function must be optional: if the application does not supply it, the square 
+					root function must still compute square roots.)
+				</P>
+				<P>These requirements apply to the modified work as a whole. If identifiable 
+					sections of that work are not derived from the Library, and can be reasonably 
+					considered independent and separate works in themselves, then this License, and 
+					its terms, do not apply to those sections when you distribute them as separate 
+					works. But when you distribute the same sections as part of a whole which is a 
+					work based on the Library, the distribution of the whole must be on the terms 
+					of this License, whose permissions for other licensees extend to the entire 
+					whole, and thus to each and every part regardless of who wrote it.
+				</P>
+				<P>Thus, it is not the intent of this section to claim rights or contest your 
+					rights to work written entirely by you; rather, the intent is to exercise the 
+					right to control the distribution of derivative or collective works based on 
+					the Library.
+				</P>
+				<P>In addition, mere aggregation of another work not based on the Library with the 
+					Library (or with a work based on the Library) on a volume of a storage or 
+					distribution medium does not bring the other work under the scope of this 
+					License.
+				</P>
+			</BLOCKQUOTE>
+			<P><STRONG>3.</STRONG> You may opt to apply the terms of the ordinary GNU General 
+				Public License instead of this License to a given copy of the Library. To do 
+				this, you must alter all the notices that refer to this License, so that they 
+				refer to the ordinary GNU General Public License, version 2, instead of to this 
+				License. (If a newer version than version 2 of the ordinary GNU General Public 
+				License has appeared, then you can specify that version instead if you wish.) 
+				Do not make any other change in these notices.
+			</P>
+			<P>Once this change is made in a given copy, it is irreversible for that copy, so 
+				the ordinary GNU General Public License applies to all subsequent copies and 
+				derivative works made from that copy.
+			</P>
+			<P>This option is useful when you wish to copy part of the code of the Library into 
+				a program that is not a library.
+			</P>
+			<P><STRONG>4.</STRONG> You may copy and distribute the Library (or a portion or 
+				derivative of it, under Section 2) in object code or executable form under the 
+				terms of Sections 1 and 2 above provided that you accompany it with the 
+				complete corresponding machine-readable source code, which must be distributed 
+				under the terms of Sections 1 and 2 above on a medium customarily used for 
+				software interchange.
+			</P>
+			<P>If distribution of object code is made by offering access to copy from a 
+				designated place, then offering equivalent access to copy the source code from 
+				the same place satisfies the requirement to distribute the source code, even 
+				though third parties are not compelled to copy the source along with the object 
+				code.</P>
+			<P><STRONG>5.</STRONG> A program that contains no derivative of any portion of the 
+				Library, but is designed to work with the Library by being compiled or linked 
+				with it, is called a "work that uses the Library". Such a work, in isolation, 
+				is not a derivative work of the Library, and therefore falls outside the scope 
+				of this License.
+			</P>
+			<P>However, linking a "work that uses the Library" with the Library creates an 
+				executable that is a derivative of the Library (because it contains portions of 
+				the Library), rather than a "work that uses the library". The executable is 
+				therefore covered by this License. Section 6 states terms for distribution of 
+				such executables.
+			</P>
+			<P>When a "work that uses the Library" uses material from a header file that is 
+				part of the Library, the object code for the work may be a derivative work of 
+				the Library even though the source code is not. Whether this is true is 
+				especially significant if the work can be linked without the Library, or if the 
+				work is itself a library. The threshold for this to be true is not precisely 
+				defined by law.
+			</P>
+			<P>If such an object file uses only numerical parameters, data structure layouts 
+				and accessors, and small macros and small inline functions (ten lines or less 
+				in length), then the use of the object file is unrestricted, regardless of 
+				whether it is legally a derivative work. (Executables containing this object 
+				code plus portions of the Library will still fall under Section 6.)
+			</P>
+			<P>Otherwise, if the work is a derivative of the Library, you may distribute the 
+				object code for the work under the terms of Section 6. Any executables 
+				containing that work also fall under Section 6, whether or not they are linked 
+				directly with the Library itself.
+			</P>
+			<P><STRONG>6.</STRONG> As an exception to the Sections above, you may also combine 
+				or link a "work that uses the Library" with the Library to produce a work 
+				containing portions of the Library, and distribute that work under terms of 
+				your choice, provided that the terms permit modification of the work for the 
+				customer's own use and reverse engineering for debugging such modifications.
+			</P>
+			<P>You must give prominent notice with each copy of the work that the Library is 
+				used in it and that the Library and its use are covered by this License. You 
+				must supply a copy of this License. If the work during execution displays 
+				copyright notices, you must include the copyright notice for the Library among 
+				them, as well as a reference directing the user to the copy of this License. 
+				Also, you must do one of these things:
+			</P>
+			<BLOCKQUOTE>
+				<P>a) Accompany the work with the complete corresponding machine-readable source 
+					code for the Library including whatever changes were used in the work (which 
+					must be distributed under Sections 1 and 2 above); and, if the work is an 
+					executable linked with the Library, with the complete machine-readable "work 
+					that uses the Library", as object code and/or source code, so that the user can 
+					modify the Library and then relink to produce a modified executable containing 
+					the modified Library. (It is understood that the user who changes the contents 
+					of definitions files in the Library will not necessarily be able to recompile 
+					the application to use the modified definitions.)
+				</P>
+				<P>b) Use a suitable shared library mechanism for linking with the Library. A 
+					suitable mechanism is one that (1) uses at run time a copy of the library 
+					already present on the user's computer system, rather than copying library 
+					functions into the executable, and (2) will operate properly with a modified 
+					version of the library, if the user installs one, as long as the modified 
+					version is interface-compatible with the version that the work was made with.
+				</P>
+				<P>c) Accompany the work with a written offer, valid for at least three years, to 
+					give the same user the materials specified in Subsection 6a, above, for a 
+					charge no more than the cost of performing this distribution.
+				</P>
+				<P>d) If distribution of the work is made by offering access to copy from a 
+					designated place, offer equivalent access to copy the above specified materials 
+					from the same place.
+				</P>
+				<P>e) Verify that the user has already received a copy of these materials or that 
+					you have already sent this user a copy.</P>
+			</BLOCKQUOTE>
+			<P>For an executable, the required form of the "work that uses the Library" must 
+				include any data and utility programs needed for reproducing the executable 
+				from it. However, as a special exception, the materials to be distributed need 
+				not include anything that is normally distributed (in either source or binary 
+				form) with the major components (compiler, kernel, and so on) of the operating 
+				system on which the executable runs, unless that component itself accompanies 
+				the executable.
+			</P>
+			<P>It may happen that this requirement contradicts the license restrictions of 
+				other proprietary libraries that do not normally accompany the operating 
+				system. Such a contradiction means you cannot use both them and the Library 
+				together in an executable that you distribute.
+			</P>
+			<P><STRONG>7.</STRONG> You may place library facilities that are a work based on 
+				the Library side-by-side in a single library together with other library 
+				facilities not covered by this License, and distribute such a combined library, 
+				provided that the separate distribution of the work based on the Library and of 
+				the other library facilities is otherwise permitted, and provided that you do 
+				these two things:
+			</P>
+			<BLOCKQUOTE>
+				<P>a) Accompany the combined library with a copy of the same work based on the 
+					Library, uncombined with any other library facilities. This must be distributed 
+					under the terms of the Sections above.
+				</P>
+				<P>b) Give prominent notice with the combined library of the fact that part of it 
+					is a work based on the Library, and explaining where to find the accompanying 
+					uncombined form of the same work.</P>
+			</BLOCKQUOTE>
+			<P><STRONG>8.</STRONG> You may not copy, modify, sublicense, link with, or 
+				distribute the Library except as expressly provided under this License. Any 
+				attempt otherwise to copy, modify, sublicense, link with, or distribute the 
+				Library is void, and will automatically terminate your rights under this 
+				License. However, parties who have received copies, or rights, from you under 
+				this License will not have their licenses terminated so long as such parties 
+				remain in full compliance.
+			</P>
+			<P><STRONG>9.</STRONG> You are not required to accept this License, since you have 
+				not signed it. However, nothing else grants you permission to modify or 
+				distribute the Library or its derivative works. These actions are prohibited by 
+				law if you do not accept this License. Therefore, by modifying or distributing 
+				the Library (or any work based on the Library), you indicate your acceptance of 
+				this License to do so, and all its terms and conditions for copying, 
+				distributing or modifying the Library or works based on it.
+			</P>
+			<P><STRONG>10.</STRONG> Each time you redistribute the Library (or any work based 
+				on the Library), the recipient automatically receives a license from the 
+				original licensor to copy, distribute, link with or modify the Library subject 
+				to these terms and conditions. You may not impose any further restrictions on 
+				the recipients' exercise of the rights granted herein. You are not responsible 
+				for enforcing compliance by third parties with this License.
+			</P>
+			<P><STRONG>11.</STRONG> If, as a consequence of a court judgment or allegation of 
+				patent infringement or for any other reason (not limited to patent issues), 
+				conditions are imposed on you (whether by court order, agreement or otherwise) 
+				that contradict the conditions of this License, they do not excuse you from the 
+				conditions of this License. If you cannot distribute so as to satisfy 
+				simultaneously your obligations under this License and any other pertinent 
+				obligations, then as a consequence you may not distribute the Library at all. 
+				For example, if a patent license would not permit royalty-free redistribution 
+				of the Library by all those who receive copies directly or indirectly through 
+				you, then the only way you could satisfy both it and this License would be to 
+				refrain entirely from distribution of the Library.
+			</P>
+			<P>If any portion of this section is held invalid or unenforceable under any 
+				particular circumstance, the balance of the section is intended to apply, and 
+				the section as a whole is intended to apply in other circumstances.
+			</P>
+			<P>It is not the purpose of this section to induce you to infringe any patents or 
+				other property right claims or to contest validity of any such claims; this 
+				section has the sole purpose of protecting the integrity of the free software 
+				distribution system which is implemented by public license practices. Many 
+				people have made generous contributions to the wide range of software 
+				distributed through that system in reliance on consistent application of that 
+				system; it is up to the author/donor to decide if he or she is willing to 
+				distribute software through any other system and a licensee cannot impose that 
+				choice.
+			</P>
+			<P>This section is intended to make thoroughly clear what is believed to be a 
+				consequence of the rest of this License.
+			</P>
+			<P><STRONG>12.</STRONG> If the distribution and/or use of the Library is restricted 
+				in certain countries either by patents or by copyrighted interfaces, the 
+				original copyright holder who places the Library under this License may add an 
+				explicit geographical distribution limitation excluding those countries, so 
+				that distribution is permitted only in or among countries not thus excluded. In 
+				such case, this License incorporates the limitation as if written in the body 
+				of this License.
+			</P>
+			<P><STRONG>13.</STRONG> The Free Software Foundation may publish revised and/or new 
+				versions of the Lesser General Public License from time to time. Such new 
+				versions will be similar in spirit to the present version, but may differ in 
+				detail to address new problems or concerns.</P>
+			<P>Each version is given a distinguishing version number. If the Library specifies 
+				a version number of this License which applies to it and "any later version", 
+				you have the option of following the terms and conditions either of that 
+				version or of any later version published by the Free Software Foundation. If 
+				the Library does not specify a license version number, you may choose any 
+				version ever published by the Free Software Foundation.
+			</P>
+			<P><STRONG>14.</STRONG> If you wish to incorporate parts of the Library into other 
+				free programs whose distribution conditions are incompatible with these, write 
+				to the author to ask for permission. For software which is copyrighted by the 
+				Free Software Foundation, write to the Free Software Foundation; we sometimes 
+				make exceptions for this. Our decision will be guided by the two goals of 
+				preserving the free status of all derivatives of our free software and of 
+				promoting the sharing and reuse of software generally.
+			</P>
+			<P>NO WARRANTY
+			</P>
+			<P><STRONG>15. </STRONG>BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 
+				WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT 
+				WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
+				PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR 
+				IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+				MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 
+				QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE 
+				DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR 
+				CORRECTION.
+			</P>
+			<P><STRONG>16.</STRONG> IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO 
+				IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
+				REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 
+				INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT 
+				OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS 
+				OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 
+				PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN 
+				IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
+				DAMAGES.
+			</P>
+			<H4><STRONG>END OF TERMS AND CONDITIONS</STRONG></H4>
+		</TT>
+	</body>
+</html>
Files 1.3.11sr1/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif differ
Files 1.3.11sr1/fckeditor/editor/dialog/fck_about/logo_fredck.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_about/logo_fredck.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_about.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_about.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_about.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_about.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_about.html
+ * 	"About" dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script language="javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang	= oEditor.FCKLang ;
+
+window.parent.AddTab( 'About', FCKLang.DlgAboutAboutTab ) ;
+window.parent.AddTab( 'License', 'License' ) ;
+window.parent.AddTab( 'BrowserInfo', FCKLang.DlgAboutBrowserInfoTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divAbout', ( tabCode == 'About' ) ) ;
+	ShowE('divLicense', ( tabCode == 'License' ) ) ;
+	ShowE('divInfo'	, ( tabCode == 'BrowserInfo' ) ) ;
+}
+
+function SendEMail()
+{
+	var eMail = 'mailto:' ;
+	eMail += 'fredck' ;
+	eMail += '@' ;
+	eMail += 'fckeditor' ;
+	eMail += '.' ;
+	eMail += 'net' ;
+
+	window.location = eMail ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divAbout">
+			<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+				<tr>
+					<td>
+						<img alt="" src="fck_about/logo_fckeditor.gif" width="236" height="41" align="left">
+						<table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right">
+							<tr>
+								<td align="center" style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
+									<span fckLang="DlgAboutVersion">version</span>
+									<br>
+									<b>2.1.1</b></td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr height="100%">
+					<td align="center">
+						&nbsp;<br>
+						<span style="FONT-SIZE: 14px" dir="ltr">Support <b>Open Source</b> software.<br>
+							<b><a href="http://www.fckeditor.net/donate/?about" target="_blank" title="Click to go to the donation page">
+									What about a donation today?</a></b> </span>
+						<br><br><br>
+						<span fckLang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/?About" target="_blank">
+							http://www.fckeditor.net/</a>.
+						<br>
+						Copyright &copy; 2003-2005 <a href="#" onclick="SendEMail();">Frederico Caldeira 
+							Knabben</a>
+					</td>
+				</tr>
+				<tr>
+					<td align="center">
+						<img alt="" src="fck_about/logo_fredck.gif" width="87" height="36">
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divLicense" style="DISPLAY: none">
+			<table height="100%" width="100%">
+				<tr>
+					<td>
+						<span fckLang="DlgAboutLicense">Licensed under the terms of the GNU Lesser General 
+							Public License</span>
+						<br>
+						<a href="http://www.opensource.org/licenses/lgpl-license.php" target="_blank">http://www.opensource.org/licenses/lgpl-license.php</a>
+						<br>
+					</td>
+				</tr>
+				<tr>
+					<td height="100%">
+						<iframe height="100%" width="100%" src="fck_about/lgpl.html"></iframe>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divInfo" style="DISPLAY: none" dir="ltr">
+			<table align="center" width="80%" border="0">
+				<tr>
+					<td>
+						<script language="javascript">
+<!--
+document.write( '<b>User Agent<\/b><br>' + window.navigator.userAgent + '<br><br>' ) ;
+document.write( '<b>Browser<\/b><br>' + window.navigator.appName + ' ' + window.navigator.appVersion + '<br><br>' ) ;
+document.write( '<b>Platform<\/b><br>' + window.navigator.platform + '<br><br>' ) ;
+
+var sUserLang = '?' ;
+
+if ( window.navigator.language )
+	sUserLang = window.navigator.language.toLowerCase() ;
+else if ( window.navigator.userLanguage )
+	sUserLang = window.navigator.userLanguage.toLowerCase() ;
+
+document.write( '<b>User Language<\/b><br>' + sUserLang ) ;
+//-->
+						</script>
+					</td>
+				</tr>
+			</table>
+		</div>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_anchor.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_anchor.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_anchor.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_anchor.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_anchor.html
+ * 	Anchor dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Anchor Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor	= window.parent.InnerDialogLoaded() ;
+var FCK		= oEditor.FCK ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oAnchor ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+		oAnchor = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oAnchor )
+		GetE('txtName').value = oAnchor.name ;
+	else
+		oAnchor = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( GetE('txtName').value.length == 0 )
+	{
+		alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
+		return false ;
+	}
+	
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	oAnchor		= FCK.EditorDocument.createElement( 'DIV' ) ;
+	oAnchor.innerHTML = '<a name="' + GetE('txtName').value + '"><\/a>' ;
+	oAnchor = oAnchor.firstChild ;
+
+	oFakeImage	= oEditor.FCKDocumentProcessors_CreateFakeImage( 'FCK__Anchor', oAnchor ) ;
+	oFakeImage.setAttribute( '_fckanchor', 'true', 0 ) ;
+	oFakeImage	= FCK.InsertElementAndGetIt( oFakeImage ) ;
+
+//	oEditor.FCK.InsertHtml( '<a name="' + GetE('txtName').value + '"><\/a>' ) ;
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgAnchorName">Anchor Name</span><BR>
+								<input id="txtName" style="WIDTH: 100%" type="text">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_button.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_button.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_button.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_button.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_button.html
+ * 	Button dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Button Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName.toUpperCase() == "INPUT" && ( oActiveEl.type == "button" || oActiveEl.type == "submit" || oActiveEl.type == "reset" ) )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtValue').value	= oActiveEl.value ;
+		GetE('txtType').value	= oActiveEl.type ;
+
+		GetE('txtType').disabled = true ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = GetE('txtType').value ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td colSpan="">
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgButtonText">Text (Value)</span><br>
+								<input type="text" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgButtonType">Type</span><br>
+								<select id="txtType">
+									<option value="button" selected>Button</option>
+									<option value="submit">Submit</option>
+									<option value="reset">Reset</option>
+								</select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_checkbox.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_checkbox.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_checkbox.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_checkbox.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_checkbox.html
+ * 	Checkbox dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Checkbox Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'checkbox' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oActiveEl.value ;
+		GetE('txtSelected').checked	= oActiveEl.checked ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = 'checkbox' ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	if ( GetE('txtSelected').checked )
+	{
+		SetAttribute( oActiveEl, 'checked', 'checked' ) ;
+		oActiveEl.checked = GetE('txtSelected').checked ;
+	}
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxValue">Value</span><br>
+								<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_colorselector.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_colorselector.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_colorselector.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_colorselector.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,165 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_colorselector.html
+ * 	Color Selection dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<style TYPE="text/css">
+			#ColorTable		{ cursor: pointer ; cursor: hand ; }
+			#hicolor		{ height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+			#hicolortext	{ width: 75px ; text-align: right ; margin-bottom: 7px ; }
+			#selhicolor		{ height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+			#selcolor		{ width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; }
+			#btnClear		{ width: 75px ; height: 22px ; margin-bottom: 6px ; }
+			.ColorCell		{ height: 15px ; width: 15px ; }
+		</style>
+		<script type="text/javascript">
+		
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+	
+	CreateColorTable() ;
+	
+	window.parent.SetOkButton( true ) ;	
+	window.parent.SetAutoSize( true ) ;
+}
+
+function CreateColorTable()
+{
+	// Get the target table.
+	var oTable = document.getElementById('ColorTable') ;
+
+	// Create the base colors array.
+	var aColors = ['00','33','66','99','cc','ff'] ;
+
+	// This function combines two ranges of three values from the color array into a row.
+	function AppendColorRow( rangeA, rangeB )
+	{
+		for ( var i = rangeA ; i < rangeA + 3 ; i++ ) 
+		{ 
+			var oRow = oTable.insertRow(-1) ; 
+
+			for ( var j = rangeB ; j < rangeB + 3 ; j++ ) 
+			{ 
+				for ( var n = 0 ; n < 6 ; n++ ) 
+				{ 
+					AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ; 
+				} 
+			} 
+		}
+	}
+
+	// This function create a single color cell in the color table.
+	function AppendColorCell( targetRow, color )
+	{
+		var oCell = targetRow.insertCell(-1) ;
+		oCell.className = 'ColorCell' ;
+		oCell.bgColor = color ;
+		
+		oCell.onmouseover = function()
+		{
+			document.getElementById('hicolor').style.backgroundColor = this.bgColor ;
+			document.getElementById('hicolortext').innerHTML = this.bgColor ;
+		}
+		
+		oCell.onclick = function()
+		{
+			document.getElementById('selhicolor').style.backgroundColor = this.bgColor ;
+			document.getElementById('selcolor').value = this.bgColor ;
+		}
+	}
+
+	AppendColorRow( 0, 0 ) ;
+	AppendColorRow( 3, 0 ) ;
+	AppendColorRow( 0, 3 ) ;
+	AppendColorRow( 3, 3 ) ;
+
+	// Create the last row.
+	var oRow = oTable.insertRow(-1) ;
+	
+	// Create the gray scale colors cells.
+	for ( var n = 0 ; n < 6 ; n++ )
+	{
+		AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ; 
+	}
+	
+	// Fill the row with black cells.
+	for ( var i = 0 ; i < 12 ; i++ )
+	{
+		AppendColorCell( oRow, '#000000' ) ; 
+	}
+}
+
+function Clear()
+{
+	document.getElementById('selhicolor').style.backgroundColor = '' ;
+	document.getElementById('selcolor').value = '' ;
+}
+
+function ClearActual()
+{
+	document.getElementById('hicolor').style.backgroundColor = '' ;
+	document.getElementById('hicolortext').innerHTML = '&nbsp;' ;
+}
+
+function UpdateColor()
+{
+	try		  { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; }
+	catch (e) { Clear() ; }
+}
+
+function Ok()
+{
+	if ( typeof(window.parent.dialogArguments.CustomValue) == 'function' )
+		window.parent.dialogArguments.CustomValue( document.getElementById('selcolor').value ) ;
+
+	return true ;
+}
+		</script>
+	</head>
+	<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<td align="center" valign="middle">
+					<table border="0" cellspacing="5" cellpadding="0" width="100%">
+						<tr>
+							<td valign="top" align="center" nowrap width="100%">
+								<table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();">
+								</table>
+							</td>
+							<td valign="top" align="left" nowrap>
+								<span fckLang="DlgColorHighlight">Highlight</span>
+								<div id="hicolor"></div>
+								<div id="hicolortext">&nbsp;</div>
+								<span fckLang="DlgColorSelected">Selected</span>
+								<div id="selhicolor"></div>
+								<input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();">
+								<br>
+								<input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_document_preview.html
+ * 	Preview shown in the "Document Properties" dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Document Properties - Preview</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script language="javascript">
+
+var eBase = parent.FCK.EditorDocument.getElementsByTagName( 'BASE' ) ;
+if ( eBase.length > 0 && eBase[0].href.length > 0 )
+{
+	document.write( '<base href="' + eBase[0].href + '">' ) ;
+}
+
+window.onload = function()
+{
+	if ( typeof( parent.OnPreviewLoad ) == 'function' )
+		parent.OnPreviewLoad( window, document.body ) ;
+}
+
+function SetBaseHRef( baseHref )
+{
+	var eBase = document.createElement( 'BASE' ) ;
+	eBase.href = baseHref ;
+
+	var eHead = document.getElementsByTagName( 'HEAD' )[0] ;
+	eHead.appendChild( eBase ) ;
+}
+
+function SetLinkColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eLink').style.color = color ;
+	else
+		document.getElementById('eLink').style.color = window.document.linkColor ;
+}
+
+function SetVisitedColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eVisited').style.color = color ;
+	else
+		document.getElementById('eVisited').style.color = window.document.vlinkColor ;
+}
+
+function SetActiveColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eActive').style.color = color ;
+	else
+		document.getElementById('eActive').style.color = window.document.alinkColor ;
+}
+		</script>
+	</head>
+	<body>
+		<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
+			<tr>
+				<td align="center" valign="middle">
+					Normal Text
+				</td>
+				<td id="eLink" align="center" valign="middle">
+					<u>Link Text</u>
+				</td>
+			</tr>
+			<tr>
+				<td id="eVisited" valign="middle" align="center">
+					<u>Visited Link</u>
+				</td>
+				<td id="eActive" valign="middle" align="center">
+					<u>Active Link</u>
+				</td>
+			</tr>
+		</table>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_docprops.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_docprops.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_docprops.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_docprops.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,586 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_docprops.html
+ * 	Link dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Document Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script language="javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'General'		, FCKLang.DlgDocGeneralTab ) ;
+window.parent.AddTab( 'Background'	, FCKLang.DlgDocBackTab ) ;
+window.parent.AddTab( 'Colors'		, FCKLang.DlgDocColorsTab ) ;
+window.parent.AddTab( 'Meta'		, FCKLang.DlgDocMetaTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE( 'divGeneral'		, ( tabCode == 'General' ) ) ;
+	ShowE( 'divBackground'	, ( tabCode == 'Background' ) ) ;
+	ShowE( 'divColors'		, ( tabCode == 'Colors' ) ) ;
+	ShowE( 'divMeta'		, ( tabCode == 'Meta' ) ) ;
+
+	ShowE( 'ePreview'		, ( tabCode == 'Background' || tabCode == 'Colors' ) ) ;
+}
+
+//#### Get Base elements from the document: BEGIN
+
+// The HTML element of the document.
+var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+// The HEAD element of the document.
+var oHead = oHTML.getElementsByTagName('head')[0] ;
+
+var oBody = FCK.EditorDocument.body ;
+
+// This object contains all META tags defined in the document.
+var oMetaTags = new Object() ;
+
+// Get all META tags defined in the document.
+var aMetas = oHead.getElementsByTagName('meta') ;
+
+// Loop throw all METAs and put it in the HashTable.
+for ( var i = 0 ; i < aMetas.length ; i++ )
+{
+	// Try to get the "name" attribute.
+	var sName = GetAttribute( aMetas[i], 'name', GetAttribute( aMetas[i], '___fcktoreplace:name', '' ) ) ;
+
+	// If no "name", try with the "http-equiv" attribute.
+	if ( sName.length == 0 )
+	{
+		if ( document.all )
+		{
+			// Get the http-equiv value from the outerHTML.
+			var oHttpEquivMatch = aMetas[i].outerHTML.match( oEditor.FCKRegexLib.MetaHttpEquiv ) ;
+			if ( oHttpEquivMatch )
+				sName = oHttpEquivMatch[1] ;
+		}
+		else
+			sName = GetAttribute( aMetas[i], 'http-equiv', '' ) ;
+	}
+
+	if ( sName.length > 0 )
+		oMetaTags[ sName.toLowerCase() ] = aMetas[i] ;
+}
+
+//#### END
+
+// Set a META tag in the document.
+function SetMetadata( name, content, isHttp )
+{
+	if ( content.length == 0 )
+	{
+		RemoveMetadata( name ) ;
+		return ;
+	}
+
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( !oMeta )
+	{
+		oMeta = oHead.appendChild( FCK.EditorDocument.createElement('META') ) ;
+
+		if ( isHttp )
+			SetAttribute( oMeta, 'http-equiv', name ) ;
+		else
+		{
+			// On IE, it is not possible to set the "name" attribute of the META tag.
+			// So a temporary attribute is used and it is replaced when getting the
+			// editor's HTML/XHTML value. This is sad, I know :(
+			if ( document.all )
+				SetAttribute( oMeta, '___fcktoreplace:name', name ) ;
+			else
+				SetAttribute( oMeta, 'name', name ) ;
+		}
+
+		oMetaTags[ name.toLowerCase() ] = oMeta ;
+	}
+
+	oMeta.content = content ;
+}
+
+function RemoveMetadata( name )
+{
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( oMeta && oMeta != null )
+	{
+		oMeta.parentNode.removeChild( oMeta ) ;
+		oMetaTags[ name.toLowerCase() ] = null ;
+	}
+}
+
+function GetMetadata( name )
+{
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( oMeta && oMeta != null )
+		return oMeta.content ;
+	else
+		return '' ;
+}
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	FillFields() ;
+
+	UpdatePreview() ;
+
+	// Show the "Ok" button.
+	window.parent.SetOkButton( true ) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+function FillFields()
+{
+	// ### General Info
+	GetE('txtPageTitle').value = FCK.EditorDocument.title ;
+
+	GetE('selDirection').value	= GetAttribute( oHTML, 'dir', '' ) ;
+	GetE('txtLang').value		= GetAttribute( oHTML, 'xml:lang', GetAttribute( oHTML, 'lang', '' ) ) ;	// "xml:lang" takes precedence to "lang".
+
+	// Character Set Encoding.
+//	if ( document.all )
+//		var sCharSet = FCK.EditorDocument.charset ;
+//	else
+		var sCharSet = GetMetadata( 'Content-Type' ) ;
+
+	if ( sCharSet != null && sCharSet.length > 0 )
+	{
+//		if ( !document.all )
+			sCharSet = sCharSet.match( /[^=]*$/ ) ;
+
+		GetE('selCharSet').value = sCharSet ;
+
+		if ( GetE('selCharSet').selectedIndex == -1 )
+		{
+			GetE('selCharSet').value = '...' ;
+			GetE('txtCustomCharSet').value = sCharSet ;
+
+			CheckOther( GetE('selCharSet'), 'txtCustomCharSet' ) ;
+		}
+	}
+
+	// Document Type.
+	if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+	{
+		GetE('selDocType').value = FCK.DocTypeDeclaration ;
+
+		if ( GetE('selDocType').selectedIndex == -1 )
+		{
+			GetE('selDocType').value = '...' ;
+			GetE('txtDocType').value = FCK.DocTypeDeclaration ;
+
+			CheckOther( GetE('selDocType'), 'txtDocType' ) ;
+		}
+	}
+
+	// Document Type.
+	GetE('chkIncXHTMLDecl').checked = ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) ;
+
+	// ### Background
+	GetE('txtBackColor').value = GetAttribute( oBody, 'bgColor'		, '' ) ;
+	GetE('txtBackImage').value = GetAttribute( oBody, 'background'	, '' ) ;
+	GetE('chkBackNoScroll').checked = ( GetAttribute( oBody, 'bgProperties', '' ).toLowerCase() == 'fixed' ) ;
+
+	// ### Colors
+	GetE('txtColorText').value		= GetAttribute( oBody, 'text'	, '' ) ;
+	GetE('txtColorLink').value		= GetAttribute( oBody, 'link'	, '' ) ;
+	GetE('txtColorVisited').value	= GetAttribute( oBody, 'vLink'	, '' ) ;
+	GetE('txtColorActive').value	= GetAttribute( oBody, 'aLink'	, '' ) ;
+
+	// ### Margins
+	GetE('txtMarginTop').value		= GetAttribute( oBody, 'topMargin'		, '' ) ;
+	GetE('txtMarginLeft').value		= GetAttribute( oBody, 'leftMargin'		, '' ) ;
+	GetE('txtMarginRight').value	= GetAttribute( oBody, 'rightMargin'	, '' ) ;
+	GetE('txtMarginBottom').value	= GetAttribute( oBody, 'bottomMargin'	, '' ) ;
+
+	// ### Meta Data
+	GetE('txtMetaKeywords').value		= GetMetadata( 'keywords' ) ;
+	GetE('txtMetaDescription').value	= GetMetadata( 'description' ) ;
+	GetE('txtMetaAuthor').value			= GetMetadata( 'author' ) ;
+	GetE('txtMetaCopyright').value		= GetMetadata( 'copyright' ) ;
+}
+
+// Called when the "Ok" button is clicked.
+function Ok()
+{
+	// ### General Info
+	FCK.EditorDocument.title = GetE('txtPageTitle').value ;
+
+	var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+	SetAttribute( oHTML, 'dir'		, GetE('selDirection').value ) ;
+	SetAttribute( oHTML, 'lang'		, GetE('txtLang').value ) ;
+	SetAttribute( oHTML, 'xml:lang'	, GetE('txtLang').value ) ;
+
+	// Character Set Enconding.
+	var sCharSet = GetE('selCharSet').value ;
+	if ( sCharSet == '...' )
+		sCharSet = GetE('txtCustomCharSet').value ;
+
+	if ( sCharSet.length > 0 )
+			sCharSet = 'text/html; charset=' + sCharSet ;
+
+//	if ( document.all )
+//		FCK.EditorDocument.charset = sCharSet ;
+//	else
+		SetMetadata( 'Content-Type', sCharSet, true ) ;
+
+	// Document Type
+	var sDocType = GetE('selDocType').value ;
+	if ( sDocType == '...' )
+		sDocType = GetE('txtDocType').value ;
+
+	FCK.DocTypeDeclaration = sDocType ;
+
+	// XHTML Declarations.
+	if ( GetE('chkIncXHTMLDecl').checked )
+	{
+		if ( sCharSet.length == 0 )
+			sCharSet = 'utf-8' ;
+
+		FCK.XmlDeclaration = '<?xml version="1.0" encoding="' + sCharSet + '"?>' ;
+
+		SetAttribute( oHTML, 'xmlns', 'http://www.w3.org/1999/xhtml' ) ;
+	}
+	else
+	{
+		FCK.XmlDeclaration = null ;
+		oHTML.removeAttribute( 'xmlns', 0 ) ;
+	}
+
+	// ### Background
+	SetAttribute( oBody, 'bgcolor'		, GetE('txtBackColor').value ) ;
+	SetAttribute( oBody, 'background'	, GetE('txtBackImage').value ) ;
+	SetAttribute( oBody, 'bgproperties'	, GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+	// ### Colors
+	SetAttribute( oBody, 'text'	, GetE('txtColorText').value ) ;
+	SetAttribute( oBody, 'link'	, GetE('txtColorLink').value ) ;
+	SetAttribute( oBody, 'vlink', GetE('txtColorVisited').value ) ;
+	SetAttribute( oBody, 'alink', GetE('txtColorActive').value ) ;
+
+	// ### Margins
+	SetAttribute( oBody, 'topmargin'	, GetE('txtMarginTop').value ) ;
+	SetAttribute( oBody, 'leftmargin'	, GetE('txtMarginLeft').value ) ;
+	SetAttribute( oBody, 'rightmargin'	, GetE('txtMarginRight').value ) ;
+	SetAttribute( oBody, 'bottommargin'	, GetE('txtMarginBottom').value ) ;
+
+	// ### Meta data
+	SetMetadata( 'keywords'		, GetE('txtMetaKeywords').value ) ;
+	SetMetadata( 'description'	, GetE('txtMetaDescription').value ) ;
+	SetMetadata( 'author'		, GetE('txtMetaAuthor').value ) ;
+	SetMetadata( 'copyright'	, GetE('txtMetaCopyright').value ) ;
+
+	return true ;
+}
+
+var bPreviewIsLoaded = false ;
+var oPreviewWindow ;
+var oPreviewBody ;
+
+// Called by the Preview page when loaded.
+function OnPreviewLoad( previewWindow, previewBody )
+{
+	oPreviewWindow	= previewWindow ;
+	oPreviewBody	= previewBody ;
+
+	bPreviewIsLoaded = true ;
+	UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+	if ( !bPreviewIsLoaded )
+		return ;
+
+	// ### Background
+	SetAttribute( oPreviewBody, 'bgcolor'		, GetE('txtBackColor').value ) ;
+	SetAttribute( oPreviewBody, 'background'	, GetE('txtBackImage').value ) ;
+	SetAttribute( oPreviewBody, 'bgproperties'	, GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+	// ### Colors
+	SetAttribute( oPreviewBody, 'text', GetE('txtColorText').value ) ;
+
+	oPreviewWindow.SetLinkColor( GetE('txtColorLink').value ) ;
+	oPreviewWindow.SetVisitedColor( GetE('txtColorVisited').value ) ;
+	oPreviewWindow.SetActiveColor( GetE('txtColorActive').value ) ;
+}
+
+function CheckOther( combo, txtField )
+{
+	var bNotOther = ( combo.value != '...' ) ;
+
+	GetE(txtField).style.backgroundColor = ( bNotOther ? '#cccccc' : '' ) ;
+	GetE(txtField).disabled = bNotOther ;
+}
+
+function SetColor( inputId, color )
+{
+	GetE( inputId ).value = color + '' ;
+	UpdatePreview() ;
+}
+
+function SelectBackColor( color )		{ SetColor('txtBackColor', color ) ; }
+function SelectColorText( color )		{ SetColor('txtColorText', color ) ; }
+function SelectColorLink( color )		{ SetColor('txtColorLink', color ) ; }
+function SelectColorVisited( color )	{ SetColor('txtColorVisited', color ) ; }
+function SelectColorActive( color )		{ SetColor('txtColorActive', color ) ; }
+
+function SelectColor( wich )
+{
+	switch ( wich )
+	{
+		case 'Back'			: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectBackColor, window ) ; return ;
+		case 'ColorText'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorText, window ) ; return ;
+		case 'ColorLink'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorLink, window ) ; return ;
+		case 'ColorVisited'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorVisited, window ) ; return ;
+		case 'ColorActive'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorActive, window ) ; return ;
+	}
+}
+
+function BrowseServerBack()
+{
+	var iLeft = (FCKConfig.ScreenWidth  - FCKConfig.ImageBrowserWindowWidth) / 2 ;
+	var iTop  = (FCKConfig.ScreenHeight - FCKConfig.ImageBrowserWindowHeight) / 2 ;
+
+	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes" ;
+	sOptions += ",width=" + FCKConfig.LinkBrowserWindowWidth ;
+	sOptions += ",height=" + FCKConfig.LinkBrowserWindowHeight ;
+	sOptions += ",left=" + iLeft ;
+	sOptions += ",top=" + iTop ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		// The following change has been made otherwise IE will open the file 
+		// browser on a different server session (on some cases):
+		// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678
+		// by Simone Chiaretta.
+		var oWindow = oEditor.window.open( FCKConfig.ImageBrowserURL, "FCKBrowseWindow", sOptions ) ;
+		oWindow.opener = window ;
+    }
+    else
+		window.open( FCKConfig.ImageBrowserURL, "FCKBrowseWindow", sOptions ) ;
+}
+
+function SetUrl( url )
+{
+	GetE('txtBackImage').value = url ;
+	UpdatePreview() ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td vAlign="top" height="100%">
+					<div id="divGeneral">
+						<span fckLang="DlgDocPageTitle">Page Title</span><br>
+						<input id="txtPageTitle" style="WIDTH: 100%" type="text">
+						<br>
+						<table cellSpacing="0" cellPadding="0" border="0">
+							<tr>
+								<td>
+									<span fckLang="DlgDocLangDir">Language Direction</span><br>
+									<select id="selDirection">
+										<option value="" selected></option>
+										<option value="ltr" fckLang="DlgDocLangDirLTR">Left to Right (LTR)</option>
+										<option value="rtl" fckLang="DlgDocLangDirRTL">Right to Left (RTL)</option>
+									</select>
+								</td>
+								<td>&nbsp;&nbsp;&nbsp;</td>
+								<td>
+									<span fckLang="DlgDocLangCode">Language Code</span><br>
+									<input id="txtLang" type="text">
+								</td>
+							</tr>
+						</table>
+						<br>
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td noWrap><span fckLang="DlgDocCharSet">Character Set Encoding</span><br>
+									<select id="selCharSet" onchange="CheckOther( this, 'txtCustomCharSet' );">
+										<option value="" selected></option>
+										<option value="us-ascii">ASCII</option>
+										<option value="iso-8859-2">Central European</option>
+										<option value="big5">Chinese Traditional (Big5)</option>
+										<option value="iso-8859-5">Cyrillic</option>
+										<option value="iso-8859-7">Greek</option>
+										<option value="iso-2022-jp">Japanese</option>
+										<option value="iso-2022-kr">Korean</option>
+										<option value="iso-8859-9">Turkish</option>
+										<option value="utf-8">Unicode (UTF-8)</option>
+										<option value="iso-8859-1">Western European</option>
+										<option value="..." fckLang="DlgOpOther">&lt;Other&gt;</option>
+									</select>
+								</td>
+								<td>&nbsp;&nbsp;&nbsp;</td>
+								<td width="100%">
+									<span fckLang="DlgDocCharSetOther">Other Character Set Encoding</span><br>
+									<input id="txtCustomCharSet" style="WIDTH: 100%; BACKGROUND-COLOR: #cccccc" disabled type="text">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3">&nbsp;</td>
+							</tr>
+							<tr>
+								<td nowrap>
+									<span fckLang="DlgDocDocType">Document Type Heading</span><br>
+									<select id="selDocType" name="selDocType" onchange="CheckOther( this, 'txtDocType' );">
+										<option value="" selected></option>
+										<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'>HTML
+											4.01 Transitional</option>
+										<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'>HTML
+											4.01 Strict</option>
+										<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'>HTML
+											4.01 Frameset</option>
+										<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'>XHTML
+											1.0 Transitional</option>
+										<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'>XHTML
+											1.0 Strict</option>
+										<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'>XHTML
+											1.0 Frameset</option>
+										<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'>XHTML
+											1.1</option>
+										<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'>HTML 3.2</option>
+										<option value='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'>HTML 2.0</option>
+										<option value="..." fckLang="DlgOpOther">&lt;Other&gt;</option>
+									</select>
+								</td>
+								<td></td>
+								<td width="100%">
+									<span fckLang="DlgDocDocTypeOther">Other Document Type Heading</span><br>
+									<input id="txtDocType" style="WIDTH: 100%; BACKGROUND-COLOR: #cccccc" disabled type="text">
+								</td>
+							</tr>
+						</table>
+						<br>
+						<input id="chkIncXHTMLDecl" type="checkbox"> <label for="chkIncXHTMLDecl" fckLang="DlgDocIncXHTML">Include
+							XHTML Declarations</label>
+					</div>
+					<div id="divBackground" style="DISPLAY: none">
+						<span fckLang="DlgDocBgColor">Background Color</span><br>
+						<input id="txtBackColor" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();">&nbsp;<input id="btnSelBackColor" onclick="SelectColor( 'Back' )" type="button" value="Select..."
+							fckLang="DlgCellBtnSelect"><br>
+						<br>
+						<span fckLang="DlgDocBgImage">Background Image URL</span><br>
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%"><input id="txtBackImage" style="WIDTH: 100%" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();"></td>
+								<td nowrap>&nbsp;<input id="btnBrowse" onclick="BrowseServerBack();" type="button" fckLang="DlgBtnBrowseServer" value="Browse Server" fckLang="DlgBtnBrowseServer"></td>
+							</tr>
+						</table>
+						<input id="chkBackNoScroll" type="checkbox" onclick="UpdatePreview();"> <label for="chkBackNoScroll" fckLang="DlgDocBgNoScroll">Nonscrolling
+							Background</label>
+					</div>
+					<div id="divColors" style="DISPLAY: none">
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td>
+									<span fckLang="DlgDocCText">Text</span><br>
+									<input id="txtColorText" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();"><input onclick="SelectColor( 'ColorText' )" type="button" value="Select..." fckLang="DlgCellBtnSelect">
+									<br>
+									<span fckLang="DlgDocCLink">Link</span><br>
+									<input id="txtColorLink" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();"><input onclick="SelectColor( 'ColorLink' )" type="button" value="Select..." fckLang="DlgCellBtnSelect">
+									<br>
+									<span fckLang="DlgDocCVisited">Visited Link</span><br>
+									<input id="txtColorVisited" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();"><input onclick="SelectColor( 'ColorVisited' )" type="button" value="Select..." fckLang="DlgCellBtnSelect">
+									<br>
+									<span fckLang="DlgDocCActive">Active Link</span><br>
+									<input id="txtColorActive" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();"><input onclick="SelectColor( 'ColorActive' )" type="button" value="Select..." fckLang="DlgCellBtnSelect">
+								</td>
+								<td valign="middle" align="center">
+									<table cellspacing="2" cellpadding="0" border="0">
+										<tr>
+											<td><span fckLang="DlgDocMargins">Page Margins</span></td>
+										</tr>
+										<tr>
+											<td style="BORDER: #000000 1px solid; PADDING: 5px">
+												<table cellpadding="0" cellspacing="0" border="0" dir="ltr">
+													<tr>
+														<td align="center" colspan="3">
+															<span fckLang="DlgDocMaTop">Top</span><br>
+															<input id="txtMarginTop" type="text" size="3">
+														</td>
+													</tr>
+													<tr>
+														<td align="left">
+															<span fckLang="DlgDocMaLeft">Left</span><br>
+															<input id="txtMarginLeft" type="text" size="3">
+														</td>
+														<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+														<td align="right">
+															<span fckLang="DlgDocMaRight">Right</span><BR>
+															<input id="txtMarginRight" type="text" size="3">
+														</td>
+													</tr>
+													<tr>
+														<td align="center" colspan="3">
+															<span fckLang="DlgDocMaBottom">Bottom</span><br>
+															<input id="txtMarginBottom" type="text" size="3">
+														</td>
+													</tr>
+												</table>
+											</td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</div>
+					<div id="divMeta" style="DISPLAY: none">
+						<span fckLang="DlgDocMeIndex">Document Indexing Keywords (comma separated)</span><br>
+						<textarea id="txtMetaKeywords" style="WIDTH: 100%" rows="2" cols="20"></textarea>
+						<br>
+						<span fckLang="DlgDocMeDescr">Document Description</span><br>
+						<textarea id="txtMetaDescription" style="WIDTH: 100%" rows="4" cols="20"></textarea>
+						<br>
+						<span fckLang="DlgDocMeAuthor">Author</span><br>
+						<input id="txtMetaAuthor" style="WIDTH: 100%" type="text"><br>
+						<br>
+						<span fckLang="DlgDocMeCopy">Copyright</span><br>
+						<input id="txtMetaCopyright" type="text" style="WIDTH: 100%">
+					</div>
+				</td>
+			</tr>
+			<tr id="ePreview" style="DISPLAY: none">
+				<td>
+					<span fckLang="DlgDocPreview">Preview</span><br>
+					<iframe id="frmPreview" src="fck_docprops/fck_document_preview.html" width="100%" height="100"></iframe>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_find.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_find.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_find.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_find.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_find.html
+ * 	"Find" dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+	// Whole word is available on IE only.
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		document.getElementById('divWord').style.display = '' ;
+
+	// First of all, translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+function btnStat(frm)
+{
+	document.getElementById('btnFind').disabled =
+		( document.getElementById('txtFind').value.length == 0 ) ;
+}
+
+function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll )
+{
+	for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
+	{
+		var oNode = parentNode.childNodes[i] ;
+		if ( oNode.nodeType == 3 )
+		{
+			var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;
+			if ( oNode.nodeValue != sReplaced )
+			{
+				oNode.nodeValue = sReplaced ;
+				if ( ! replaceAll )
+					return true ;
+			}
+		}
+		else
+		{
+			if ( ReplaceTextNodes( oNode, regex, replaceValue ) )
+				return true ;
+		}
+	}
+	return false ;
+}
+
+function GetRegexExpr()
+{
+	if ( document.getElementById('chkWord').checked )
+		var sExpr = '\\b' + document.getElementById('txtFind').value + '\\b' ;
+	else
+		var sExpr = document.getElementById('txtFind').value ;
+
+	return sExpr ;
+}
+
+function GetCase()
+{
+	return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;
+}
+
+var oRange = oEditor.FCK.EditorDocument.body.createTextRange() ;
+
+function Ok()
+{
+	if ( document.getElementById('txtFind').value.length == 0 )
+		return ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		FindIE() ;
+	else
+		FindGecko() ;
+}
+
+function FindIE()
+{
+	var iFlags = 0 ;
+
+	if ( chkCase.checked )
+		iFlags = iFlags | 4 ;
+
+	if ( chkWord.checked )
+		iFlags = iFlags | 2 ;
+
+	var bFound = oRange.findText( document.getElementById('txtFind').value, 1, iFlags ) ;
+
+	if ( bFound )
+	{
+		oRange.scrollIntoView() ;
+		oRange.select() ;
+		oRange.collapse(false) ;
+		oLastRangeFound = oRange ;
+	}
+	else
+	{
+		oRange = oEditor.FCK.EditorDocument.body.createTextRange() ;
+		alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;
+	}
+}
+
+function FindGecko()
+{
+	var bCase = document.getElementById('chkCase').checked ;
+	var bWord = document.getElementById('chkWord').checked ;
+
+	// window.find( searchString, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog ) ;
+	oEditor.FCK.EditorWindow.find( document.getElementById('txtFind').value, bCase, false, false, bWord, false, false ) ;
+
+}
+		</script>
+	</head>
+	<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
+		<table cellSpacing="3" cellPadding="2" width="100%" border="0">
+			<tr>
+				<td nowrap>
+					<label for="txtFind" fckLang="DlgReplaceFindLbl">Find what:</label>&nbsp;
+				</td>
+				<td width="100%">
+					<input id="txtFind" style="WIDTH: 100%" tabIndex="1" type="text">
+				</td>
+				<td>
+					<input id="btnFind" style="WIDTH: 100%; PADDING-RIGHT: 5px; PADDING-LEFT: 5px" onclick="Ok();"
+						type="button" value="Find" fckLang="DlgFindFindBtn">
+				</td>
+			</tr>
+			<tr>
+				<td valign="bottom" colSpan="3">
+					&nbsp;<input id="chkCase" tabIndex="3" type="checkbox"><label for="chkCase" fckLang="DlgReplaceCaseChk">Match 
+						case</label>
+					<br>
+					<div id="divWord" style="DISPLAY: none">
+						&nbsp;<input id="chkWord" tabIndex="4" type="checkbox"><label for="chkWord" fckLang="DlgReplaceWordChk">Match 
+							whole word</label>
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_flash/fck_flash.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_flash/fck_flash.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_flash/fck_flash.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_flash/fck_flash.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,283 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_flash.js
+ * 	Scripts related to the Flash dialog window (see fck_flash.html).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
+
+if ( FCKConfig.FlashUpload )
+	window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.FlashDlgHideAdvanced )
+	window.parent.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected flash embed (if available).
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oEmbed ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') )
+		oEmbed = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display = FCKConfig.FlashBrowser	? '' : 'none' ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.FlashUpload )
+		GetE('frmUpload').action = FCKConfig.FlashUploadURL ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oEmbed ) return ;
+
+	var sUrl = GetAttribute( oEmbed, 'src', '' ) ;
+
+	GetE('txtUrl').value    = GetAttribute( oEmbed, 'src', '' ) ;
+	GetE('txtWidth').value  = GetAttribute( oEmbed, 'width', '' ) ;
+	GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ;
+
+	// Get Advances Attributes
+	GetE('txtAttId').value		= oEmbed.id ;
+	GetE('chkAutoPlay').checked	= GetAttribute( oEmbed, 'play', 'true' ) == 'true' ;
+	GetE('chkLoop').checked		= GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ;
+	GetE('chkMenu').checked		= GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ;
+	GetE('cmbScale').value		= GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ;
+	
+	GetE('txtAttTitle').value		= oEmbed.title ;
+	GetE('txtAttClasses').value		= oEmbed.getAttribute('class',2) || '' ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		GetE('txtAttStyle').value	= oEmbed.style.cssText ;
+	else
+		GetE('txtAttStyle').value	= oEmbed.getAttribute('style',2) ;
+
+	UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		window.parent.SetSelectedTab( 'Info' ) ;
+		GetE('txtUrl').focus() ;
+
+		alert( oEditor.FCKLang.DlgAlertUrl ) ;
+
+		return false ;
+	}
+
+	if ( !oEmbed )
+	{
+		oEmbed		= FCK.EditorDocument.createElement( 'EMBED' ) ;
+		oFakeImage  = null ;
+	}
+	UpdateEmbed( oEmbed ) ;
+	
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessors_CreateFakeImage( 'FCK__Flash', oEmbed ) ;
+		oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ;
+		oFakeImage	= FCK.InsertElementAndGetIt( oFakeImage ) ;
+	}
+	else
+		oEditor.FCKUndo.SaveUndoStep() ;
+	
+	oEditor.FCKFlashProcessor.RefreshView( oFakeImage, oEmbed ) ;
+
+	return true ;
+}
+
+function UpdateEmbed( e )
+{
+	SetAttribute( e, 'type'			, 'application/x-shockwave-flash' ) ;
+	SetAttribute( e, 'pluginspage'	, 'http://www.macromedia.com/go/getflashplayer' ) ;
+
+	e.src = GetE('txtUrl').value ;
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+	
+	// Advances Attributes
+
+	SetAttribute( e, 'id'	, GetE('txtAttId').value ) ;
+	SetAttribute( e, 'scale', GetE('cmbScale').value ) ;
+	
+	if ( !GetE('chkAutoPlay').checked )	SetAttribute( e, 'play', 'false' ) ;
+	if ( !GetE('chkLoop').checked )		SetAttribute( e, 'loop', 'false' ) ;
+	if ( !GetE('chkMenu').checked )		SetAttribute( e, 'menu', 'false' ) ;
+
+	SetAttribute( e, 'title'	, GetE('txtAttTitle').value ) ;
+	SetAttribute( e, 'class'	, GetE('txtAttClasses').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		e.style.cssText = GetE('txtAttStyle').value ;
+	else
+		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+}
+
+function UpdatePreview()
+{
+	var oCell = GetE('ePreviewCell') ;
+	
+	while ( oCell.firstChild )
+		oCell.removeChild( oCell.firstChild ) ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+		oCell.innerHTML = '&nbsp;' ;
+	else
+	{
+		var e = document.createElement( 'EMBED' ) ;
+		
+		e.src		= GetE('txtUrl').value ;
+		e.type		= 'application/x-shockwave-flash' ;
+		e.width		= '100%' ;
+		e.height	= '100%' ;
+		
+		oCell.appendChild( e ) ;
+	}
+}
+
+// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%" style="visibility:hidden" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
+
+function BrowseServer()
+{
+	OpenServerBrowser(
+		'Flash',
+		FCKConfig.FlashBrowserURL,
+		FCKConfig.FlashBrowserWindowWidth,
+		FCKConfig.FlashBrowserWindowHeight ) ;
+}
+
+function OpenServerBrowser( type, url, width, height )
+{
+	var iLeft = (FCKConfig.ScreenWidth  - width) / 2 ;
+	var iTop  = (FCKConfig.ScreenHeight - height) / 2 ;
+
+	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes" ;
+	sOptions += ",width=" + width ;
+	sOptions += ",height=" + height ;
+	sOptions += ",left=" + iLeft ;
+	sOptions += ",top=" + iTop ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		// The following change has been made otherwise IE will open the file 
+		// browser on a different server session (on some cases):
+		// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678
+		// by Simone Chiaretta.
+		var oWindow = oEditor.window.open( url, "FCKBrowseWindow", sOptions ) ;
+		oWindow.opener = window ;
+    }
+    else
+		window.open( url, "FCKBrowseWindow", sOptions ) ;
+}
+
+function SetUrl( url )
+{
+	GetE('txtUrl').value = url ;
+	UpdatePreview() ;
+
+	window.parent.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+	
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+	
+	if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+	
+	return true ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_flash.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_flash.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_flash.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_flash.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_flash.html
+ * 	Flash Properties dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Flash Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_flash/fck_flash.js" type="text/javascript"></script>
+		<link href="common/fck_dialog_common.css" type="text/css" rel="stylesheet">
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo">
+			<table cellSpacing="1" cellPadding="1" width="100%" border="0">
+				<tr>
+					<td>
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%"><span fckLang="DlgImgURL">URL</span>
+								</td>
+								<td id="tdBrowse" style="DISPLAY: none" noWrap rowSpan="2">&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer">
+								</td>
+							</tr>
+							<tr>
+								<td vAlign="top"><input id="txtUrl" onblur="UpdatePreview();" style="WIDTH: 100%" type="text">
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<TR>
+					<TD>
+						<table cellSpacing="0" cellPadding="0" border="0">
+							<TR>
+								<TD nowrap>
+									<span fckLang="DlgImgWidth">Width</span><br>
+									<input id="txtWidth" class="FCK__FieldNumeric" type="text" size="3">
+								</TD>
+								<TD>&nbsp;</TD>
+								<TD>
+									<span fckLang="DlgImgHeight">Height</span><br>
+									<input id="txtHeight" class="FCK__FieldNumeric" type="text" size="3">
+								</TD>
+							</TR>
+						</table>
+					</TD>
+				</TR>
+				<tr>
+					<td vAlign="top">
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td valign="top" width="100%">
+									<table cellSpacing="0" cellPadding="0" width="100%">
+										<tr>
+											<td><span fckLang="DlgImgPreview">Preview</span></td>
+										</tr>
+										<tr>
+											<td id="ePreviewCell" valign="top" class="FlashPreviewArea">&nbsp;</td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<iframe name="UploadWindow" style="DISPLAY: none" src="../fckblank.html"></iframe> 
+			</form>
+		</div>
+		<div id="divAdvanced" style="DISPLAY: none">
+			<TABLE cellSpacing="0" cellPadding="0" border="0">
+				<TR>
+					<TD nowrap>
+						<span fckLang="DlgFlashScale">Scale</span><BR>
+						<select id="cmbScale">
+							<option value="" selected></option>
+							<option value="showall" fckLang="DlgFlashScaleAll">Show all</option>
+							<option value="noborder" fckLang="DlgFlashScaleNoBorder">No Border</option>
+							<option value="exactfit" fckLang="DlgFlashScaleFit">Exact Fit</option>
+						</select></TD>
+					<TD>&nbsp;&nbsp;&nbsp; &nbsp;
+					</TD>
+					<td valign="bottom">
+						<table>
+							<tr>
+								<td><input id="chkAutoPlay" type="checkbox" checked></td>
+								<td><label for="chkAutoPlay" nowrap fckLang="DlgFlashChkPlay">Auto Play</label>&nbsp;&nbsp;</td>
+								<td><input id="chkLoop" type="checkbox" checked></td>
+								<td><label for="chkLoop" nowrap fckLang="DlgFlashChkLoop">Loop</label>&nbsp;&nbsp;</td>
+								<td><input id="chkMenu" type="checkbox" checked></td>
+								<td><label for="chkMenu" nowrap fckLang="DlgFlashChkMenu">Enable Flash Menu</label></td>
+							</tr>
+						</table>
+					</td>
+				</TR>
+			</TABLE>
+			<br>
+			&nbsp;
+			<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td vAlign="top" width="50%"><span fckLang="DlgGenId">Id</span><br>
+						<input id="txtAttId" style="WIDTH: 100%" type="text">
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td vAlign="top" nowrap><span fckLang="DlgGenClass">Stylesheet Classes</span><br>
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text">
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td vAlign="top" nowrap width="50%">&nbsp;<span fckLang="DlgGenTitle">Advisory Title</span><br>
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text">
+					</td>
+				</tr>
+			</table>
+			<span fckLang="DlgGenStyle">Style</span><br>
+			<input id="txtAttStyle" style="WIDTH: 100%" type="text">
+		</div>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_form.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_form.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_form.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_form.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_form.html
+ * 	Checkbox dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Checkbox Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'FORM' ) ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl ) 
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtAction').value	= oActiveEl.action ;
+		GetE('txtMethod').value	= oActiveEl.method ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'FORM' ) ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+		oActiveEl.innerHTML = '&nbsp;' ;
+	}
+	
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'action'	, GetE('txtAction').value ) ;
+	oActiveEl.method = GetE('txtMethod').value ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td>
+					<table cellspacing="0" cellpadding="0" width="80%" border="0" valign="top" align="center">
+						<tr>
+							<td>
+								<span fckLang="DlgFormName">Name</span><br>
+								<input style="WIDTH: 100%" type="text" id="txtName">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgFormAction">Action</span><br>
+								<input style="WIDTH: 100%" type="text" id="txtAction">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgFormMethod">Method</span><br>
+								<select id="txtMethod">
+									<option value="get" selected>GET</option>
+									<option value="post">POST</option>
+								</select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_hiddenfield.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_hiddenfield.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_hiddenfield.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_hiddenfield.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_hiddenfield.html
+ * 	Hidden Field dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Hidden Field Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'hidden' ) 
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oActiveEl.value ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}	
+
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = 'hidden' ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+	
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" class="inhoud" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgHiddenName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgHiddenValue">Value</span><br>
+								<input type="text" size="30" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_image/fck_image.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_image/fck_image.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_image/fck_image.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_image/fck_image.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,442 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_image.js
+ * 	Scripts related to the Image dialog window (see fck_image.html).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
+
+if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
+	window.parent.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
+
+if ( FCKConfig.ImageUpload )
+	window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.ImageDlgHideAdvanced )
+	window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divLink'		, ( tabCode == 'Link' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected image (if available).
+var oImage = FCK.Selection.GetSelectedElement() ;
+
+if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
+	oImage = null ;
+
+// Get the active link.
+var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+
+var oImageOriginal ;
+
+function UpdateOriginal( resetSize )
+{
+	oImageOriginal = document.createElement( 'IMG' ) ;	// new Image() ;
+
+	if ( resetSize )
+	{
+		oImageOriginal.onload = function()
+		{
+			this.onload = null ;
+			ResetSizes() ;
+		}
+	}
+
+	oImageOriginal.src = GetE('imgPreview').src ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
+	GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display				= FCKConfig.ImageBrowser	? '' : 'none' ;
+	GetE('divLnkBrowseServer').style.display	= FCKConfig.LinkBrowser		? '' : 'none' ;
+
+	UpdateOriginal() ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.ImageUpload )
+		GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oImage ) return ;
+
+	var sUrl = GetAttribute( oImage, 'src', '' ) ;
+
+	// TODO: Wait stable version and remove the following commented lines.
+//	if ( sUrl.startsWith( FCK.BaseUrl ) )
+//		sUrl = sUrl.remove( 0, FCK.BaseUrl.length ) ;
+
+	GetE('txtUrl').value    = sUrl ;
+	GetE('txtAlt').value    = GetAttribute( oImage, 'alt', '' ) ;
+	GetE('txtVSpace').value	= GetAttribute( oImage, 'vspace', '' ) ;
+	GetE('txtHSpace').value	= GetAttribute( oImage, 'hspace', '' ) ;
+	GetE('txtBorder').value	= GetAttribute( oImage, 'border', '' ) ;
+	GetE('cmbAlign').value	= GetAttribute( oImage, 'align', '' ) ;
+
+	if ( oImage.style.pixelWidth > 0 )
+		GetE('txtWidth').value  = oImage.style.pixelWidth ;
+	else
+		GetE('txtWidth').value  = GetAttribute( oImage, "width", '' ) ;
+
+	if ( oImage.style.pixelHeight > 0 )
+		GetE('txtHeight').value  = oImage.style.pixelHeight ;
+	else
+		GetE('txtHeight').value = GetAttribute( oImage, "height", '' ) ;
+
+	// Get Advances Attributes
+	GetE('txtAttId').value			= oImage.id ;
+	GetE('cmbAttLangDir').value		= oImage.dir ;
+	GetE('txtAttLangCode').value	= oImage.lang ;
+	GetE('txtAttTitle').value		= oImage.title ;
+	GetE('txtAttClasses').value		= oImage.getAttribute('class',2) || '' ;
+	GetE('txtLongDesc').value		= oImage.longDesc ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		GetE('txtAttStyle').value	= oImage.style.cssText ;
+	else
+		GetE('txtAttStyle').value	= oImage.getAttribute('style',2) ;
+
+	if ( oLink )
+	{
+		GetE('txtLnkUrl').value		= oLink.getAttribute('href',2) ;
+		GetE('cmbLnkTarget').value	= oLink.target ;
+	}
+
+	UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		window.parent.SetSelectedTab( 'Info' ) ;
+		GetE('txtUrl').focus() ;
+
+		alert( FCKLang.DlgImgAlertUrl ) ;
+
+		return false ;
+	}
+
+	var bHasImage = ( oImage != null ) ;
+
+	if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
+	{
+		if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
+			oImage = null ;
+	}
+	else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
+	{
+		if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
+			oImage = null ;
+	}
+	
+	if ( !bHasImage )
+	{
+		if ( bImageButton )
+		{
+			oImage = FCK.EditorDocument.createElement( 'INPUT' ) ;
+			oImage.type = 'image' ;
+			oImage = FCK.InsertElementAndGetIt( oImage ) ;
+		}
+		else
+			oImage = FCK.CreateElement( 'IMG' ) ;
+	}
+	else
+		oEditor.FCKUndo.SaveUndoStep() ;
+	
+	UpdateImage( oImage ) ;
+
+	var sLnkUrl = GetE('txtLnkUrl').value.trim() ;
+
+	if ( sLnkUrl.length == 0 )
+	{
+		if ( oLink )
+			FCK.ExecuteNamedCommand( 'Unlink' ) ;
+	}
+	else
+	{
+		if ( oLink )	// Modifying an existent link.
+			oLink.href = sLnkUrl ;
+		else			// Creating a new link.
+		{
+			if ( !bHasImage )
+				oEditor.FCKSelection.SelectNode( oImage ) ;
+
+			oLink = oEditor.FCK.CreateLink( sLnkUrl ) ;
+
+			if ( !bHasImage )
+			{
+				oEditor.FCKSelection.SelectNode( oLink ) ;
+				oEditor.FCKSelection.Collapse( false ) ;
+			}
+		}
+
+		SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
+	}
+
+	return true ;
+}
+
+function UpdateImage( e, skipId )
+{
+	e.src = GetE('txtUrl').value ;
+	SetAttribute( e, "alt"   , GetE('txtAlt').value ) ;
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+	SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
+	SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
+	SetAttribute( e, "border", GetE('txtBorder').value ) ;
+	SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
+
+	// Advances Attributes
+
+	if ( ! skipId )
+		SetAttribute( e, 'id', GetE('txtAttId').value ) ;
+
+	SetAttribute( e, 'dir'		, GetE('cmbAttLangDir').value ) ;
+	SetAttribute( e, 'lang'		, GetE('txtAttLangCode').value ) ;
+	SetAttribute( e, 'title'	, GetE('txtAttTitle').value ) ;
+	SetAttribute( e, 'class'	, GetE('txtAttClasses').value ) ;
+	SetAttribute( e, 'longDesc'	, GetE('txtLongDesc').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		e.style.cssText = GetE('txtAttStyle').value ;
+	else
+		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+}
+
+function UpdatePreview()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+		GetE('lnkPreview').style.display = 'none' ;
+	else
+	{
+		UpdateImage( GetE('imgPreview'), true ) ;
+
+		if ( GetE('txtLnkUrl').value.trim().length > 0 )
+			GetE('lnkPreview').href = 'javascript:void(null);' ;
+		else
+			SetAttribute( GetE('lnkPreview'), 'href', '' ) ;
+
+		GetE('lnkPreview').style.display = '' ;
+	}
+}
+
+var bLockRatio = true ;
+
+function SwitchLock( lockButton )
+{
+	bLockRatio = !bLockRatio ;
+	lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
+	lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
+
+	if ( bLockRatio )
+	{
+		if ( GetE('txtWidth').value.length > 0 )
+			OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
+		else
+			OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
+	}
+}
+
+// Fired when the width or height input texts change
+function OnSizeChanged( dimension, value )
+{
+	// Verifies if the aspect ration has to be mantained
+	if ( oImageOriginal && bLockRatio )
+	{
+		if ( value.length == 0 || isNaN( value ) )
+		{
+			GetE('txtHeight').value = GetE('txtWidth').value = '' ;
+			return ;
+		}
+
+		if ( dimension == 'Width' )
+			GetE('txtHeight').value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value  / oImageOriginal.width ) ) ;
+		else
+			GetE('txtWidth').value  = value == 0 ? 0 : Math.round( oImageOriginal.width  * ( value / oImageOriginal.height ) ) ;
+	}
+
+	UpdatePreview() ;
+}
+
+// Fired when the Reset Size button is clicked
+function ResetSizes()
+{
+	if ( ! oImageOriginal ) return ;
+
+	GetE('txtWidth').value  = oImageOriginal.width ;
+	GetE('txtHeight').value = oImageOriginal.height ;
+
+	UpdatePreview() ;
+}
+
+function BrowseServer()
+{
+	OpenServerBrowser(
+		'Image',
+		FCKConfig.ImageBrowserURL,
+		FCKConfig.ImageBrowserWindowWidth,
+		FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function LnkBrowseServer()
+{
+	OpenServerBrowser(
+		'Link',
+		FCKConfig.LinkBrowserURL,
+		FCKConfig.LinkBrowserWindowWidth,
+		FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function OpenServerBrowser( type, url, width, height )
+{
+	sActualBrowser = type ;
+
+	var iLeft = (FCKConfig.ScreenWidth  - width) / 2 ;
+	var iTop  = (FCKConfig.ScreenHeight - height) / 2 ;
+
+	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes" ;
+	sOptions += ",width=" + width ;
+	sOptions += ",height=" + height ;
+	sOptions += ",left=" + iLeft ;
+	sOptions += ",top=" + iTop ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		// The following change has been made otherwise IE will open the file 
+		// browser on a different server session (on some cases):
+		// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678
+		// by Simone Chiaretta.
+		var oWindow = oEditor.window.open( url, "FCKBrowseWindow", sOptions ) ;
+		oWindow.opener = window ;
+    }
+    else
+		window.open( url, "FCKBrowseWindow", sOptions ) ;
+}
+
+var sActualBrowser ;
+
+function SetUrl( url, width, height, alt )
+{
+	if ( sActualBrowser == 'Link' )
+	{
+		GetE('txtLnkUrl').value = url ;
+		UpdatePreview() ;
+	}
+	else
+	{
+		GetE('txtUrl').value = url ;
+		GetE('txtWidth').value = width ? width : '' ;
+		GetE('txtHeight').value = height ? height : '' ;
+
+		if ( alt )
+			GetE('txtAlt').value = alt;
+
+		UpdatePreview() ;
+		UpdateOriginal( true ) ;
+	}
+	
+	window.parent.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	sActualBrowser = ''
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+	
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+	
+	if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+	
+	return true ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_image.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_image.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_image.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_image.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,242 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_image.html
+ * 	Image Properties dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<title>Image Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_image/fck_image.js" type="text/javascript"></script>
+		<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo">
+			<table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%">
+				<tr>
+					<td>
+						<table cellspacing="0" cellpadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%">
+									<span fckLang="DlgImgURL">URL</span>
+								</td>
+								<td id="tdBrowse" style="DISPLAY: none" nowrap rowspan="2">
+									&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer">
+								</td>
+							</tr>
+							<tr>
+								<td valign="top">
+									<input id="txtUrl" style="WIDTH: 100%" type="text" onblur="UpdatePreview();">
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<span fckLang="DlgImgAlt">Short Description</span><br />
+						<input id="txtAlt" style="WIDTH: 100%" type="text"><br />
+					</td>
+				</tr>
+				<tr height="100%">
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+							<tr>
+								<td valign="top">
+									<br />
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap><span fckLang="DlgImgWidth">Width</span>&nbsp;</td>
+											<td>
+												<input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);"></td>
+											<td nowrap rowspan="2">
+												<div id="btnLockSizes" class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';"
+													onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );" title="Lock Sizes"
+													onclick="SwitchLock(this);"></div>
+												<div id="btnResetSize" class="BtnReset" onmouseover="this.className='BtnReset BtnOver';"
+													onmouseout="this.className='BtnReset';" title="Reset Size" onclick="ResetSizes();"></div>
+											</td>
+										</tr>
+										<tr>
+											<td nowrap><span fckLang="DlgImgHeight">Height</span>&nbsp;</td>
+											<td>
+												<input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);"></td>
+										</tr>
+									</table>
+									<br />
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap><span fckLang="DlgImgBorder">Border</span>&nbsp;</td>
+											<td>
+												<input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();"></td>
+										</tr>
+										<tr>
+											<td nowrap><span fckLang="DlgImgHSpace">HSpace</span>&nbsp;</td>
+											<td>
+												<input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();"></td>
+										</tr>
+										<tr>
+											<td nowrap><span fckLang="DlgImgVSpace">VSpace</span>&nbsp;</td>
+											<td>
+												<input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();"></td>
+										</tr>
+										<tr>
+											<td nowrap><span fckLang="DlgImgAlign">Align</span>&nbsp;</td>
+											<td><select id="cmbAlign" onchange="UpdatePreview();">
+													<option value="" selected></option>
+													<option fckLang="DlgImgAlignLeft" value="left">Left</option>
+													<option fckLang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option>
+													<option fckLang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option>
+													<option fckLang="DlgImgAlignBaseline" value="baseline">Baseline</option>
+													<option fckLang="DlgImgAlignBottom" value="bottom">Bottom</option>
+													<option fckLang="DlgImgAlignMiddle" value="middle">Middle</option>
+													<option fckLang="DlgImgAlignRight" value="right">Right</option>
+													<option fckLang="DlgImgAlignTextTop" value="textTop">Text Top</option>
+													<option fckLang="DlgImgAlignTop" value="top">Top</option>
+												</select>
+											</td>
+										</tr>
+									</table>
+								</td>
+								<td>&nbsp;&nbsp;&nbsp;</td>
+								<td width="100%" valign="top">
+									<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed">
+										<tr>
+											<td><span fckLang="DlgImgPreview">Preview</span></td>
+										</tr>
+										<tr>
+											<td valign="top">
+												<div class="ImagePreviewArea">
+													<a id="lnkPreview" onclick="return false;" style="CURSOR: default"><img id="imgPreview" style="DISPLAY: none"></a>Magnus 
+													es, domine, et laudabilis valde: magna virtus tua, et sapientiae tuae non est 
+													numerus. et laudare te vult homo, aliqua portio creaturae tuae, et homo 
+													circumferens mortalitem suam, circumferens testimonium peccati sui et 
+													testimonium, quia superbis resistis: et tamen laudare te vult homo, aliqua 
+													portio creaturae tuae.tu excitas, ut laudare te delectet, quia fecisti nos ad 
+													te et inquietum est cor nostrum, donec requiescat in te. da mihi, domine, scire 
+													et intellegere, utrum sit prius invocare te an laudare te, et scire te prius 
+													sit an invocare te. sed quis te invocat nesciens te? aliud enim pro alio potest 
+													invocare nesciens. an potius invocaris, ut sciaris? quomodo autem invocabunt, 
+													in quem non crediderunt? aut quomodo credent sine praedicante? et laudabunt 
+													dominum qui requirunt eum. quaerentes enim inveniunt eum et invenientes 
+													laudabunt eum. quaeram te, domine, invocans te, et invocem te credens in te: 
+													praedicatus enim es nobis. invocat te, domine, fides mea, quam dedisti mihi, 
+													quam inspirasti mihi per humanitatem filii tui, per ministerium praedicatoris 
+													tui.
+												</div>
+											</td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<iframe name="UploadWindow" style="DISPLAY: none" src="../fckblank.html"></iframe> 
+			</form>
+		</div>
+		<div id="divLink" style="DISPLAY: none">
+			<table cellspacing="1" cellpadding="1" border="0" width="100%">
+				<tr>
+					<td>
+						<div>
+							<span fckLang="DlgLnkURL">URL</span><br />
+							<input id="txtLnkUrl" style="WIDTH: 100%" type="text" onblur="UpdatePreview();" />
+						</div>
+						<div id="divLnkBrowseServer" align="right">
+							<input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="LnkBrowseServer();" />
+						</div>
+						<div>
+							<span fckLang="DlgLnkTarget">Target</span><br />
+							<select id="cmbLnkTarget">
+								<option value="" fckLang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+								<option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option>
+								<option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option>
+								<option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option>
+								<option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option>
+							</select>
+						</div>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divAdvanced" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenId">Id</span><br />
+						<input id="txtAttId" style="WIDTH: 100%" type="text">
+					</td>
+					<td width="1">&nbsp;&nbsp;</td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangDir">Language Direction</span><br />
+									<select id="cmbAttLangDir" style="WIDTH: 100%">
+										<option value="" fckLang="DlgGenNotSet" selected>&lt;not set&gt;</option>
+										<option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+										<option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+									</select>
+								</td>
+								<td width="1%">&nbsp;&nbsp;</td>
+								<td nowrap>
+									<span fckLang="DlgGenLangCode">Language Code</span><br />
+									<input id="txtAttLangCode" style="WIDTH: 100%" type="text">&nbsp;
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td colspan="3">&nbsp;</td>
+				</tr>
+				<tr>
+					<td colspan="3">
+						<span fckLang="DlgGenLongDescr">Long Description URL</span><br />
+						<input id="txtLongDesc" style="WIDTH: 100%" type="text">
+					</td>
+				</tr>
+				<tr>
+					<td colspan="3">&nbsp;</td>
+				</tr>
+				<tr>
+					<td valign="top">
+						<span fckLang="DlgGenClass">Stylesheet Classes</span><br />
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text">
+					</td>
+					<td></td>
+					<td valign="top">&nbsp;<span fckLang="DlgGenTitle">Advisory Title</span><br />
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text">
+					</td>
+				</tr>
+			</table>
+			<span fckLang="DlgGenStyle">Style</span><br />
+			<input id="txtAttStyle" style="WIDTH: 100%" type="text">
+		</div>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_link/fck_link.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_link/fck_link.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_link/fck_link.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_link/fck_link.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,602 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_link.js
+ * 	Scripts related to the Link dialog window (see fck_link.html).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
+
+if ( !FCKConfig.LinkDlgHideTarget )
+	window.parent.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
+
+if ( FCKConfig.LinkUpload )
+	window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
+
+if ( !FCKConfig.LinkDlgHideAdvanced )
+	window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divTarget'	, ( tabCode == 'Target' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAttribs'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+//#### Regular Expressions library.
+var oRegex = new Object() ;
+
+oRegex.UriProtocol = new RegExp('') ;
+oRegex.UriProtocol.compile( '^(((http|https|ftp|news):\/\/)|mailto:)', 'gi' ) ;
+
+oRegex.UrlOnChangeProtocol = new RegExp('') ;
+oRegex.UrlOnChangeProtocol.compile( '^(http|https|ftp|news)://(?=.)', 'gi' ) ;
+
+oRegex.UrlOnChangeTestOther = new RegExp('') ;
+//oRegex.UrlOnChangeTestOther.compile( '^(javascript:|#|/)', 'gi' ) ;
+oRegex.UrlOnChangeTestOther.compile( '^((javascript:)|[#/\.])', 'gi' ) ; 
+
+oRegex.ReserveTarget = new RegExp('') ;
+oRegex.ReserveTarget.compile( '^_(blank|self|top|parent)$', 'i' ) ;
+
+oRegex.PopupUri = new RegExp('') ;
+oRegex.PopupUri.compile( "^javascript:void\\(\\s*window.open\\(\\s*'([^']+)'\\s*,\\s*(?:'([^']*)'|null)\\s*,\\s*'([^']*)'\\s*\\)\\s*\\)\\s*$" ) ;
+
+oRegex.PopupFeatures = new RegExp('') ;
+oRegex.PopupFeatures.compile( '(?:^|,)([^=]+)=(\\d+|yes|no)', 'gi' ) ;
+
+//#### Parser Functions
+
+var oParser = new Object() ;
+
+oParser.ParseEMailUrl = function( emailUrl )
+{
+	// Initializes the EMailInfo object.
+	var oEMailInfo = new Object() ;
+	oEMailInfo.Address	= '' ;
+	oEMailInfo.Subject	= '' ;
+	oEMailInfo.Body		= '' ;
+
+	var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ;
+	if ( oParts )
+	{
+		// Set the e-mail address.
+		oEMailInfo.Address = oParts[1] ;
+
+		// Look for the optional e-mail parameters.
+		if ( oParts[2] )
+		{
+			var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ;
+			if ( oMatch ) oEMailInfo.Subject = unescape( oMatch[2] ) ;
+
+			oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ;
+			if ( oMatch ) oEMailInfo.Body = unescape( oMatch[2] ) ;
+		}
+	}
+
+	return oEMailInfo ;
+}
+
+oParser.CreateEMailUri = function( address, subject, body )
+{
+	var sBaseUri = 'mailto:' + address ;
+
+	var sParams = '' ;
+
+	if ( subject.length > 0 )
+		sParams = '?subject=' + escape( subject ) ;
+
+	if ( body.length > 0 )
+	{
+		sParams += ( sParams.length == 0 ? '?' : '&' ) ;
+		sParams += 'body=' + escape( body ) ;
+	}
+
+	return sBaseUri + sParams ;
+}
+
+//#### Initialization Code
+
+// oLink: The actual selected link in the editor.
+var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+if ( oLink )
+	FCK.Selection.SelectNode( oLink ) ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Fill the Anchor Names and Ids combos.
+	LoadAnchorNamesAndIds() ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Update the dialog box.
+	SetLinkType( GetE('cmbLinkType').value ) ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
+
+	// Show the initial dialog content.
+	GetE('divInfo').style.display = '' ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.LinkUpload )
+		GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+var bHasAnchors ;
+
+function LoadAnchorNamesAndIds()
+{
+	// Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon 
+	// to edit them. So, we must look for that images now.
+	var aAnchors = new Array() ;
+	
+	var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
+	for( var i = 0 ; i < oImages.length ; i++ )
+	{
+		if ( oImages[i].getAttribute('_fckanchor') )
+			aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
+	}
+	
+	var aIds = oEditor.FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
+
+	bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
+
+	for ( var i = 0 ; i < aAnchors.length ; i++ )
+	{
+		var sName = aAnchors[i].name ;
+		if ( sName && sName.length > 0 )
+			oEditor.FCKTools.AddSelectOption( document, GetE('cmbAnchorName'), sName, sName ) ;
+	}
+
+	for ( var i = 0 ; i < aIds.length ; i++ )
+	{
+		oEditor.FCKTools.AddSelectOption( document, GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
+	}
+
+	ShowE( 'divSelAnchor'	, bHasAnchors ) ;
+	ShowE( 'divNoAnchor'	, !bHasAnchors ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oLink ) return ;
+
+	var sType = 'url' ;
+
+	// Get the actual Link href.
+	var sHRef = oLink.getAttribute('href',2) + '' ;
+
+	// TODO: Wait stable version and remove the following commented lines.
+//	if ( sHRef.startsWith( FCK.BaseUrl ) )
+//		sHRef = sHRef.remove( 0, FCK.BaseUrl.length ) ;
+
+	// Look for a popup javascript link.
+	var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
+	if( oPopupMatch )
+	{
+		GetE('cmbTarget').value = 'popup' ;
+		sHRef = oPopupMatch[1] ;
+		FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
+		SetTarget( 'popup' ) ;
+	}
+
+	// Search for the protocol.
+	var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
+
+	if ( sProtocol )
+	{
+		sProtocol = sProtocol[0].toLowerCase() ;
+		GetE('cmbLinkProtocol').value = sProtocol ;
+
+		// Remove the protocol and get the remainig URL.
+		var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
+
+		if ( sProtocol == 'mailto:' )	// It is an e-mail link.
+		{
+			sType = 'email' ;
+
+			var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ;
+			GetE('txtEMailAddress').value	= oEMailInfo.Address ;
+			GetE('txtEMailSubject').value	= oEMailInfo.Subject ;
+			GetE('txtEMailBody').value		= oEMailInfo.Body ;
+		}
+		else				// It is a normal link.
+		{
+			sType = 'url' ;
+			GetE('txtUrl').value = sUrl ;
+		}
+	}
+	else if ( sHRef.substr(0,1) == '#' && sHRef.length > 2 )	// It is an anchor link.
+	{
+		sType = 'anchor' ;
+		GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
+	}
+	else					// It is another type of link.
+	{
+		sType = 'url' ;
+
+		GetE('cmbLinkProtocol').value = '' ;
+		GetE('txtUrl').value = sHRef ;
+	}
+
+	if ( !oPopupMatch )
+	{
+		// Get the target.
+		var sTarget = oLink.target ;
+
+		if ( sTarget && sTarget.length > 0 )
+		{
+			if ( oRegex.ReserveTarget.test( sTarget ) )
+			{
+				sTarget = sTarget.toLowerCase() ;
+				GetE('cmbTarget').value = sTarget ;
+			}
+			else
+				GetE('cmbTarget').value = 'frame' ;
+			GetE('txtTargetFrame').value = sTarget ;
+		}
+	}
+
+	// Get Advances Attributes
+	GetE('txtAttId').value			= oLink.id ;
+	GetE('txtAttName').value		= oLink.name ;
+	GetE('cmbAttLangDir').value		= oLink.dir ;
+	GetE('txtAttLangCode').value	= oLink.lang ;
+	GetE('txtAttAccessKey').value	= oLink.accessKey ;
+	GetE('txtAttTabIndex').value	= oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
+	GetE('txtAttTitle').value		= oLink.title ;
+	GetE('txtAttContentType').value	= oLink.type ;
+	GetE('txtAttCharSet').value		= oLink.charset ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		GetE('txtAttClasses').value	= oLink.getAttribute('className',2) || '' ;
+		GetE('txtAttStyle').value	= oLink.style.cssText ;
+	}
+	else
+	{
+		GetE('txtAttClasses').value	= oLink.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value	= oLink.getAttribute('style',2) ;
+	}
+
+	// Update the Link type combo.
+	GetE('cmbLinkType').value = sType ;
+}
+
+//#### Link type selection.
+function SetLinkType( linkType )
+{
+	ShowE('divLinkTypeUrl'		, (linkType == 'url') ) ;
+	ShowE('divLinkTypeAnchor'	, (linkType == 'anchor') ) ;
+	ShowE('divLinkTypeEMail'	, (linkType == 'email') ) ;
+
+	if ( !FCKConfig.LinkDlgHideTarget )
+		window.parent.SetTabVisibility( 'Target'	, (linkType == 'url') ) ;
+
+	if ( FCKConfig.LinkUpload )
+		window.parent.SetTabVisibility( 'Upload'	, (linkType == 'url') ) ;
+
+	if ( !FCKConfig.LinkDlgHideAdvanced )
+		window.parent.SetTabVisibility( 'Advanced'	, (linkType != 'anchor' || bHasAnchors) ) ;
+
+	if ( linkType == 'email' )
+		window.parent.SetAutoSize( true ) ;
+}
+
+//#### Target type selection.
+function SetTarget( targetType )
+{
+	GetE('tdTargetFrame').style.display	= ( targetType == 'popup' ? 'none' : '' ) ;
+	GetE('tdPopupName').style.display	=
+		GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
+
+	switch ( targetType )
+	{
+		case "_blank" :
+		case "_self" :
+		case "_parent" :
+		case "_top" :
+			GetE('txtTargetFrame').value = targetType ;
+			break ;
+		case "" :
+			GetE('txtTargetFrame').value = '' ;
+			break ;
+	}
+
+	if ( targetType == 'popup' )
+		window.parent.SetAutoSize( true ) ;
+}
+
+//#### Called while the user types the URL.
+function OnUrlChange()
+{
+	var sUrl = GetE('txtUrl').value ;
+	var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
+
+	if ( sProtocol )
+	{
+		sUrl = sUrl.substr( sProtocol[0].length ) ;
+		GetE('txtUrl').value = sUrl ;
+		GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
+	}
+	else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
+	{
+		GetE('cmbLinkProtocol').value = '' ;
+	}
+}
+
+//#### Called while the user types the target name.
+function OnTargetNameChange()
+{
+	var sFrame = GetE('txtTargetFrame').value ;
+
+	if ( sFrame.length == 0 )
+		GetE('cmbTarget').value = '' ;
+	else if ( oRegex.ReserveTarget.test( sFrame ) )
+		GetE('cmbTarget').value = sFrame.toLowerCase() ;
+	else
+		GetE('cmbTarget').value = 'frame' ;
+}
+
+//#### Builds the javascript URI to open a popup to the specified URI.
+function BuildPopupUri( uri )
+{
+	var oReg = new RegExp( "'", "g" ) ;
+	var sWindowName = "'" + GetE('txtPopupName').value.replace(oReg, "\\'") + "'" ;
+
+	var sFeatures = '' ;
+	var aChkFeatures = document.getElementsByName('chkFeature') ;
+	for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+	{
+		if ( i > 0 ) sFeatures += ',' ;
+		sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
+	}
+
+	if ( GetE('txtPopupWidth').value.length > 0 )	sFeatures += ',width=' + GetE('txtPopupWidth').value ;
+	if ( GetE('txtPopupHeight').value.length > 0 )	sFeatures += ',height=' + GetE('txtPopupHeight').value ;
+	if ( GetE('txtPopupLeft').value.length > 0 )	sFeatures += ',left=' + GetE('txtPopupLeft').value ;
+	if ( GetE('txtPopupTop').value.length > 0 )		sFeatures += ',top=' + GetE('txtPopupTop').value ;
+
+	return ( "javascript:void(window.open('" + uri + "'," + sWindowName + ",'" + sFeatures + "'))" ) ;
+}
+
+//#### Fills all Popup related fields.
+function FillPopupFields( windowName, features )
+{
+	if ( windowName )
+		GetE('txtPopupName').value = windowName ;
+
+	var oFeatures = new Object() ;
+	var oFeaturesMatch ;
+	while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
+	{
+		var sValue = oFeaturesMatch[2] ;
+		if ( sValue == ( 'yes' || '1' ) )
+			oFeatures[ oFeaturesMatch[1] ] = true ;
+		else if ( ! isNaN( sValue ) && sValue != 0 )
+			oFeatures[ oFeaturesMatch[1] ] = sValue ;
+	}
+
+	// Update all features check boxes.
+	var aChkFeatures = document.getElementsByName('chkFeature') ;
+	for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+	{
+		if ( oFeatures[ aChkFeatures[i].value ] )
+			aChkFeatures[i].checked = true ;
+	}
+
+	// Update position and size text boxes.
+	if ( oFeatures['width'] )	GetE('txtPopupWidth').value		= oFeatures['width'] ;
+	if ( oFeatures['height'] )	GetE('txtPopupHeight').value	= oFeatures['height'] ;
+	if ( oFeatures['left'] )	GetE('txtPopupLeft').value		= oFeatures['left'] ;
+	if ( oFeatures['top'] )		GetE('txtPopupTop').value		= oFeatures['top'] ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	var sUri ;
+
+	switch ( GetE('cmbLinkType').value )
+	{
+		case 'url' :
+			sUri = GetE('txtUrl').value ;
+
+			if ( sUri.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoUrl ) ;
+				return false ;
+			}
+
+			sUri = GetE('cmbLinkProtocol').value + sUri ;
+
+			if( GetE('cmbTarget').value == 'popup' )
+				sUri = BuildPopupUri( sUri ) ;
+
+			break ;
+
+		case 'email' :
+			sUri = GetE('txtEMailAddress').value ;
+
+			if ( sUri.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoEMail ) ;
+				return false ;
+			}
+
+			sUri = oParser.CreateEMailUri(
+				sUri,
+				GetE('txtEMailSubject').value,
+				GetE('txtEMailBody').value ) ;
+			break ;
+
+		case 'anchor' :
+			var sAnchor = GetE('cmbAnchorName').value ;
+			if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
+
+			if ( sAnchor.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoAnchor ) ;
+				return false ;
+			}
+
+			sUri = '#' + sAnchor ;
+			break ;
+	}
+
+	if ( oLink )	// Modifying an existent link.
+	{
+		oEditor.FCKUndo.SaveUndoStep() ;
+		oLink.href = sUri ;
+	}
+	else			// Creating a new link.
+	{
+		oLink = oEditor.FCK.CreateLink( sUri ) ;
+		if ( ! oLink )
+			return true ;
+	}
+
+	// Target
+	if( GetE('cmbTarget').value != 'popup' )
+		SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
+	else
+		SetAttribute( oLink, 'target', null ) ;
+
+	// Advances Attributes
+	SetAttribute( oLink, 'id'		, GetE('txtAttId').value ) ;
+	SetAttribute( oLink, 'name'		, GetE('txtAttName').value ) ;		// No IE. Set but doesnt't update the outerHTML.
+	SetAttribute( oLink, 'dir'		, GetE('cmbAttLangDir').value ) ;
+	SetAttribute( oLink, 'lang'		, GetE('txtAttLangCode').value ) ;
+	SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
+	SetAttribute( oLink, 'tabindex'	, ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
+	SetAttribute( oLink, 'title'	, GetE('txtAttTitle').value ) ;
+	SetAttribute( oLink, 'class'	, GetE('txtAttClasses').value ) ;
+	SetAttribute( oLink, 'type'		, GetE('txtAttContentType').value ) ;
+	SetAttribute( oLink, 'charset'	, GetE('txtAttCharSet').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oLink.style.cssText = GetE('txtAttStyle').value ;
+	else
+		SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
+
+	return true ;
+}
+
+function BrowseServer()
+{
+	// Set the browser window feature.
+	var iWidth	= FCKConfig.LinkBrowserWindowWidth ;
+	var iHeight	= FCKConfig.LinkBrowserWindowHeight ;
+
+	var iLeft = (FCKConfig.ScreenWidth  - iWidth) / 2 ;
+	var iTop  = (FCKConfig.ScreenHeight - iHeight) / 2 ;
+
+	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes" ;
+	sOptions += ",width=" + iWidth ;
+	sOptions += ",height=" + iHeight ;
+	sOptions += ",left=" + iLeft ;
+	sOptions += ",top=" + iTop ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		// The following change has been made otherwise IE will open the file 
+		// browser on a different server session (on some cases):
+		// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678
+		// by Simone Chiaretta.
+		var oWindow = oEditor.window.open( FCKConfig.LinkBrowserURL, "FCKBrowseWindow", sOptions ) ;
+		oWindow.opener = window ;
+    }
+    else
+		window.open( FCKConfig.LinkBrowserURL, "FCKBrowseWindow", sOptions ) ;
+}
+
+function SetUrl( url )
+{
+	document.getElementById('txtUrl').value = url ;
+	OnUrlChange() ;
+	window.parent.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+	
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+	
+	if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+	
+	return true ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_link.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_link.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_link.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_link.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,289 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_link.html
+ * 	Link dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<title>Link Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_link/fck_link.js" type="text/javascript"></script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo" style="DISPLAY: none">
+			<span fckLang="DlgLnkType">Link Type</span><br />
+			<select id="cmbLinkType" onchange="SetLinkType(this.value);">
+				<option value="url" fckLang="DlgLnkTypeURL" selected="selected">URL</option>
+				<option value="anchor" fckLang="DlgLnkTypeAnchor">Anchor in this page</option>
+				<option value="email" fckLang="DlgLnkTypeEMail">E-Mail</option>
+			</select>
+			<br />
+			<br />
+			<div id="divLinkTypeUrl">
+				<table cellspacing="0" cellpadding="0" width="100%" border="0" dir="ltr">
+					<tr>
+						<td nowrap="nowrap">
+							<span fckLang="DlgLnkProto">Protocol</span><br />
+							<select id="cmbLinkProtocol">
+								<option value="http://" selected="selected">http://</option>
+								<option value="https://">https://</option>
+								<option value="ftp://">ftp://</option>
+								<option value="news://">news://</option>
+								<option value="" fckLang="DlgLnkProtoOther">&lt;other&gt;</option>
+							</select>
+						</td>
+						<td nowrap="nowrap">&nbsp;</td>
+						<td nowrap="nowrap" width="100%">
+							<span fckLang="DlgLnkURL">URL</span><br />
+							<input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" />
+						</td>
+					</tr>
+				</table>
+				<br />
+				<div id="divBrowseServer">
+				<input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="BrowseServer();" />
+				</div>
+			</div>
+			<div id="divLinkTypeAnchor" style="DISPLAY: none" align="center">
+				<div id="divSelAnchor" style="DISPLAY: none">
+					<table cellspacing="0" cellpadding="0" border="0" width="70%">
+						<tr>
+							<td colspan="3">
+								<span fckLang="DlgLnkAnchorSel">Select an Anchor</span>
+							</td>
+						</tr>
+						<tr>
+							<td width="50%">
+								<span fckLang="DlgLnkAnchorByName">By Anchor Name</span><br />
+								<select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%">
+									<option value="" selected="selected"></option>
+								</select>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;</td>
+							<td width="50%">
+								<span fckLang="DlgLnkAnchorById">By Element Id</span><br />
+								<select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%">
+									<option value="" selected="selected"></option>
+								</select>
+							</td>
+						</tr>
+					</table>
+				</div>
+				<div id="divNoAnchor" style="DISPLAY: none">
+					<span fckLang="DlgLnkNoAnchors">&lt;No anchors available in the document&gt;</span>
+				</div>
+			</div>
+			<div id="divLinkTypeEMail" style="DISPLAY: none">
+				<span fckLang="DlgLnkEMail">E-Mail Address</span><br />
+				<input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br />
+				<span fckLang="DlgLnkEMailSubject">Message Subject</span><br />
+				<input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br />
+				<span fckLang="DlgLnkEMailBody">Message Body</span><br />
+				<textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea>
+			</div>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<iframe name="UploadWindow" style="DISPLAY: none" src="../fckblank.html"></iframe> 
+			</form>
+		</div>
+		<div id="divTarget" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" border="0">
+				<tr>
+					<td nowrap="nowrap">
+						<span fckLang="DlgLnkTarget">Target</span><br />
+						<select id="cmbTarget" onchange="SetTarget(this.value);">
+							<option value="" fckLang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+							<option value="frame" fckLang="DlgLnkTargetFrame">&lt;frame&gt;</option>
+							<option value="popup" fckLang="DlgLnkTargetPopup">&lt;popup window&gt;</option>
+							<option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option>
+							<option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option>
+							<option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option>
+							<option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option>
+						</select>
+					</td>
+					<td>&nbsp;</td>
+					<td id="tdTargetFrame" nowrap="nowrap" width="100%">
+						<span fckLang="DlgLnkTargetFrameName">Target Frame Name</span><br />
+						<input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();"
+							onchange="OnTargetNameChange();" />
+					</td>
+					<td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%">
+						<span fckLang="DlgLnkPopWinName">Popup Window Name</span><br />
+						<input id="txtPopupName" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+			<br />
+			<table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center"
+				border="0">
+				<tr>
+					<td>
+						<span fckLang="DlgLnkPopWinFeat">Popup Window Features</span><br />
+						<table cellspacing="0" cellpadding="0" border="0">
+							<tr>
+								<td valign="top" nowrap="nowrap" width="50%">
+									<input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable" fckLang="DlgLnkPopResize">Resizable</label><br />
+									<input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar" fckLang="DlgLnkPopLocation">Location 
+										Bar</label><br />
+									<input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar" fckLang="DlgLnkPopMenu">Menu 
+										Bar</label><br />
+									<input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars" fckLang="DlgLnkPopScroll">Scroll 
+										Bars</label>
+								</td>
+								<td></td>
+								<td valign="top" nowrap="nowrap" width="50%">
+									<input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar" fckLang="DlgLnkPopStatus">Status 
+										Bar</label><br />
+									<input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar" fckLang="DlgLnkPopToolbar">Toolbar</label><br />
+									<input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen" fckLang="DlgLnkPopFullScrn">Full 
+										Screen (IE)</label><br />
+									<input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent" fckLang="DlgLnkPopDependent">Dependent 
+										(Netscape)</label>
+								</td>
+							</tr>
+							<tr>
+								<td valign="top" nowrap="nowrap" width="50%">&nbsp;</td>
+								<td></td>
+								<td valign="top" nowrap="nowrap" width="50%"></td>
+							</tr>
+							<tr>
+								<td valign="top">
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopWidth">Width</span></td>
+											<td>&nbsp;<input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td>
+										</tr>
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopHeight">Height</span></td>
+											<td>&nbsp;<input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td>
+										</tr>
+									</table>
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td valign="top">
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopLeft">Left Position</span></td>
+											<td>&nbsp;<input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td>
+										</tr>
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopTop">Top Position</span></td>
+											<td>&nbsp;<input id="txtPopupTop" type="text" maxlength="4" size="4" /></td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divAttribs" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenId">Id</span><br />
+						<input id="txtAttId" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1"></td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangDir">Language Direction</span><br />
+									<select id="cmbAttLangDir" style="WIDTH: 100%">
+										<option value="" fckLang="DlgGenNotSet" selected>&lt;not set&gt;</option>
+										<option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+										<option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+									</select>
+								</td>
+								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
+								<td nowrap="nowrap"><span fckLang="DlgGenAccessKey">Access Key</span><br />
+									<input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" />
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenName">Name</span><br />
+						<input id="txtAttName" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1"></td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangCode">Language Code</span><br />
+									<input id="txtAttLangCode" style="WIDTH: 100%" type="text" />
+								</td>
+								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
+								<td nowrap="nowrap">
+									<span fckLang="DlgGenTabIndex">Tab Index</span><br />
+									<input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" />
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">&nbsp;</td>
+					<td width="1"></td>
+					<td valign="top"></td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenTitle">Advisory Title</span><br />
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1">&nbsp;&nbsp;&nbsp;</td>
+					<td valign="top">
+						<span fckLang="DlgGenContType">Advisory Content Type</span><br />
+						<input id="txtAttContentType" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+				<tr>
+					<td valign="top">
+						<span fckLang="DlgGenClass">Stylesheet Classes</span><br />
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text" />
+					</td>
+					<td></td>
+					<td valign="top">
+						<span fckLang="DlgGenLinkCharset">Linked Resource Charset</span><br />
+						<input id="txtAttCharSet" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td>
+						<span fckLang="DlgGenStyle">Style</span><br />
+						<input id="txtAttStyle" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+		</div>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_listprop.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_listprop.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_listprop.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_listprop.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_listprop.html
+ * 	Bulleted List dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Bulleted List Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'UL' ) ;
+var oActiveSel ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl )
+		oActiveSel = GetE('selBulleted') ;
+	else
+	{
+		oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'OL' ) ;
+		if ( oActiveEl )
+			oActiveSel = GetE('selNumbered') ;
+	}
+
+	oActiveSel.style.display = '' ;
+
+	if ( oActiveEl )
+	{
+		if ( oActiveEl.getAttribute('type') )
+			oActiveSel.value = oActiveEl.getAttribute('type').toLowerCase() ;
+	}
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( oActiveEl )
+		SetAttribute( oActiveEl, 'type'	, oActiveSel.value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table width="100%" height="100%">
+			<tr>
+				<td>
+					<table cellspacing="0" cellpadding="0" border="0" align="center">
+						<tr>
+							<td>
+								<span fckLang="DlgLstType">List Type</span><br>
+								<select id="selBulleted" style="DISPLAY: none">
+									<option value="" selected></option>
+									<option value="circle" fckLang="DlgLstTypeCircle">Circle</option>
+									<option value="disc" fckLang="DlgLstTypeDisc">Disc</option>
+									<option value="square" fckLang="DlgLstTypeSquare">Square</option>
+								</select>
+								<select id="selNumbered" style="DISPLAY: none">
+									<option value="" selected></option>
+									<option value="1" fckLang="DlgLstTypeNumbers">Numbers (1, 2, 3)</option>
+									<option value="a" fckLang="DlgLstTypeLCase">Lowercase Letters (a, b, c)</option>
+									<option value="A" fckLang="DlgLstTypeUCase">Uppercase Letters (A, B, C)</option>
+									<option value="i" fckLang="DlgLstTypeSRoman">Small Roman Numerals (i, ii, iii)</option>
+									<option value="I" fckLang="DlgLstTypeLRoman">Large Roman Numerals (I, II, III)</option>
+								</select>
+								&nbsp;
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_paste.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_paste.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_paste.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_paste.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_paste.html
+ * 	This dialog is shown when, for some reason (usually security settings), 
+ * 	the user is not able to paste data from the clipboard to the editor using 
+ * 	the toolbar buttons or the context menu.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script language="javascript">
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+	
+	window.parent.SetOkButton( true ) ;	
+
+	if ( window.parent.dialogArguments.CustomValue == 'Word' )
+	{
+		var oFrame = document.getElementById('frmData')
+		oFrame.style.display = '' ;
+		
+		if ( oFrame.contentDocument ) 
+			oFrame.contentDocument.designMode = 'on' ;
+		else
+			oFrame.contentWindow.document.body.contentEditable = true ;
+	}
+	else
+	{
+		document.getElementById('txtData').style.display = '' ;
+		document.getElementById('oWordCommands').style.display = 'none' ;
+	}
+}
+
+function Ok()
+{
+	var sHtml ;
+	
+	if ( window.parent.dialogArguments.CustomValue == 'Word' )
+	{
+		var oFrame = document.getElementById('frmData') ;
+		
+		if ( oFrame.contentDocument ) 
+			sHtml = oFrame.contentDocument.body.innerHTML ;
+		else
+			sHtml = oFrame.contentWindow.document.body.innerHTML ;
+
+		sHtml = CleanWord( sHtml ) ;
+	}
+	else
+	{
+		var sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value )  ;
+		sHtml = sHtml.replace( /\n/g, '<BR>' ) ;
+	}
+	
+	oEditor.FCK.InsertHtml( sHtml ) ;
+	
+	return true ;
+}
+
+function CleanUpBox()
+{
+	var oFrame = document.getElementById('frmData') ;
+	
+	if ( oFrame.contentDocument ) 
+		oFrame.contentDocument.body.innerHTML = '' ;
+	else
+		oFrame.contentWindow.document.body.innerHTML = '' ;
+}
+
+function CleanWord( html )
+{
+	var bIgnoreFont = document.getElementById('chkRemoveFont').checked ;
+	var bRemoveStyles = document.getElementById('chkRemoveStyles').checked ;
+
+	html = html.replace(/<o:p>\s*<\/o:p>/g, "") ;
+	html = html.replace(/<o:p>.*?<\/o:p>/g, "&nbsp;") ;
+	
+	// Remove mso-xxx styles.
+	html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, "" ) ;
+
+	// Remove margin styles.
+	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, "" ) ;
+	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;
+
+	html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, "" ) ;
+	html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;
+
+	html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*tab-stops:[^;"]*;?/gi, "" ) ;
+	html = html.replace( /\s*tab-stops:[^"]*/gi, "" ) ;
+
+	// Remove FONT face attributes.
+	if ( bIgnoreFont )
+	{
+		html = html.replace( /\s*face="[^"]*"/gi, "" ) ;
+		html = html.replace( /\s*face=[^ >]*/gi, "" ) ;
+
+		html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, "" ) ;
+	}
+	
+	// Remove Class attributes
+	html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	// Remove styles.
+	if ( bRemoveStyles )
+		html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;
+
+	// Remove empty styles.
+	html =  html.replace( /\s*style="\s*"/gi, '' ) ;
+	
+	html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
+	
+	html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
+	
+	// Remove Lang attributes
+	html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+	
+	html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ;
+	
+	html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ;
+
+	// Remove XML elements and declarations
+	html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
+	
+	// Remove Tags with XML namespace declarations: <o:p></o:p>
+	html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
+	
+	html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;
+
+	html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
+	html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
+	html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
+	html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
+	html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
+	html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;
+
+	html = html.replace( /<\/H\d>/gi, '</font></b></div>' ) ;
+	
+	html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;
+
+	// Remove empty tags (three times, just to be sure).
+	html = html.replace( /<([^\s>]+)[^>]*>\s*<\/\1>/g, '' ) ;
+	html = html.replace( /<([^\s>]+)[^>]*>\s*<\/\1>/g, '' ) ;
+	html = html.replace( /<([^\s>]+)[^>]*>\s*<\/\1>/g, '' ) ;
+
+	// Transform <P> to <DIV>
+	var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ;	// Different because of a IE 5.0 error
+	html = html.replace( re, "<div$2</div>" ) ;
+
+	return html ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table height="98%" cellspacing="0" cellpadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<span fckLang="DlgPasteMsg2">Please paste inside the following box using the 
+						keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.</span>
+					<br>
+					&nbsp;
+				</td>
+			</tr>
+			<tr>
+				<td valign="top" height="100%" style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
+					<textarea id="txtData" style="BORDER-RIGHT: #000000 1px; BORDER-TOP: #000000 1px; DISPLAY: none; BORDER-LEFT: #000000 1px; WIDTH: 99%; BORDER-BOTTOM: #000000 1px; HEIGHT: 98%"></textarea>
+					<iframe id="frmData" src="../fckblank.html" height="98%" width="99%" frameborder="no" style="BORDER-RIGHT: #000000 1px; BORDER-TOP: #000000 1px; DISPLAY: none; BORDER-LEFT: #000000 1px; BORDER-BOTTOM: #000000 1px; BACKGROUND-COLOR: #ffffff">
+					</iframe>
+				</td>
+			</tr>
+			<tr id="oWordCommands">
+				<td>
+					<table border="0" cellpadding="0" cellspacing="0" width="100%">
+						<tr>
+							<td nowrap>
+								<input id="chkRemoveFont" type="checkbox" checked="checked"> <label for="chkRemoveFont" fckLang="DlgPasteIgnoreFont">
+									Ignore Font Face definitions</label>
+								<br>
+								<input id="chkRemoveStyles" type="checkbox"> <label for="chkRemoveStyles" fckLang="DlgPasteRemoveStyles">
+									Remove Styles definitions</label>
+							</td>
+							<td align="right" valign="top">
+								<input type="button" fckLang="DlgPasteCleanBox" value="Clean Up Box" onclick="CleanUpBox()">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_radiobutton.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_radiobutton.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_radiobutton.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_radiobutton.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_radiobutton.html
+ * 	Radio Button dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Radio Button Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName.toUpperCase() == 'INPUT' && oActiveEl.type == 'radio' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oActiveEl.value ;
+		GetE('txtSelected').checked	= oActiveEl.checked ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = 'radio' ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	if ( GetE('txtSelected').checked )
+	{
+		SetAttribute( oActiveEl, 'checked', 'checked' ) ;
+		oActiveEl.checked = GetE('txtSelected').checked ;
+	}
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxValue">Value</span><br>
+								<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_replace.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_replace.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_replace.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_replace.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_replace.html
+ * 	"Replace" dialog box window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ * 		Abdul-Aziz A. Al-Oraij (aziz.oraij.com)
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+}
+
+function btnStat(frm)
+{
+	document.getElementById('btnReplace').disabled = 
+		document.getElementById('btnReplaceAll').disabled = 
+			( document.getElementById('txtFind').value.length == 0 ) ;
+}
+
+function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll, hasFound )
+{
+	for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
+	{
+		var oNode = parentNode.childNodes[i] ;
+		if ( oNode.nodeType == 3 )
+		{
+			var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;
+			if ( oNode.nodeValue != sReplaced )
+			{
+				oNode.nodeValue = sReplaced ;
+				if ( ! replaceAll )
+					return true ;
+				hasFound = true ;
+			}
+		}
+
+		hasFound = ReplaceTextNodes( oNode, regex, replaceValue, replaceAll, hasFound ) ;
+		if ( ! replaceAll && hasFound )
+			return true ;
+	}
+	
+	return hasFound ;
+}
+
+function GetRegexExpr()
+{
+	if ( document.getElementById('chkWord').checked )
+		var sExpr = '\\b' + document.getElementById('txtFind').value + '\\b' ;
+	else
+		var sExpr = document.getElementById('txtFind').value ;
+		
+	return sExpr ;
+}
+
+function GetCase() 
+{
+	return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;
+}
+
+function Replace()
+{
+	var oRegex = new RegExp( GetRegexExpr(), GetCase() ) ;
+	ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, document.getElementById('txtReplace').value, false, false ) ;
+}
+
+function ReplaceAll()
+{
+	var oRegex = new RegExp( GetRegexExpr(), GetCase() + 'g' ) ;
+	ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, document.getElementById('txtReplace').value, true, false ) ;
+	window.parent.Cancel() ;
+}
+		</script>
+	</head>
+	<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
+		<table cellSpacing="3" cellPadding="2" width="100%" border="0">
+			<tr>
+				<td noWrap><label for="txtFind" fckLang="DlgReplaceFindLbl">Find what:</label>
+				</td>
+				<td width="100%"><input id="txtFind" onkeyup="btnStat(this.form)" style="WIDTH: 100%" tabIndex="1" type="text">
+				</td>
+				<td><input id="btnReplace" style="WIDTH: 100%" disabled onclick="Replace();" type="button"
+						value="Replace" fckLang="DlgReplaceReplaceBtn">
+				</td>
+			</tr>
+			<tr>
+				<td vAlign="top" noWrap><label for="txtReplace" fckLang="DlgReplaceReplaceLbl">Replace 
+						with:</label>
+				</td>
+				<td vAlign="top"><input id="txtReplace" style="WIDTH: 100%" tabIndex="2" type="text">
+				</td>
+				<td><input id="btnReplaceAll" disabled onclick="ReplaceAll()" type="button" value="Replace All"
+						fckLang="DlgReplaceReplAllBtn">
+				</td>
+			</tr>
+			<tr>
+				<td vAlign="bottom" colSpan="3">&nbsp;<input id="chkCase" tabIndex="3" type="checkbox"><label for="chkCase" fckLang="DlgReplaceCaseChk">Match 
+						case</label>
+					<br>
+					&nbsp;<input id="chkWord" tabIndex="4" type="checkbox"><label for="chkWord" fckLang="DlgReplaceWordChk">Match 
+						whole word</label>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_select/fck_select.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_select/fck_select.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_select/fck_select.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_select/fck_select.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,165 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_select.js
+ * 	Scripts for the fck_select.html page.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+function Select( combo )
+{
+	var iIndex = combo.selectedIndex ;
+
+	oListText.selectedIndex		= iIndex ;
+	oListValue.selectedIndex	= iIndex ;
+
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	oTxtText.value	= oListText.value ;
+	oTxtValue.value	= oListValue.value ;
+}
+
+function Add()
+{
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	AddComboOption( oListText, oTxtText.value, oTxtText.value ) ;
+	AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ;
+
+	oListText.selectedIndex = oListText.options.length - 1 ;
+	oListValue.selectedIndex = oListValue.options.length - 1 ;
+
+	oTxtText.value	= '' ;
+	oTxtValue.value	= '' ;
+
+	oTxtText.focus() ;
+}
+
+function Modify()
+{
+	var iIndex = oListText.selectedIndex ;
+
+	if ( iIndex < 0 ) return ;
+
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	oListText.options[ iIndex ].innerHTML	= oTxtText.value ;
+	oListText.options[ iIndex ].value		= oTxtText.value ;
+
+	oListValue.options[ iIndex ].innerHTML	= oTxtValue.value ;
+	oListValue.options[ iIndex ].value		= oTxtValue.value ;
+
+	oTxtText.value	= '' ;
+	oTxtValue.value	= '' ;
+
+	oTxtText.focus() ;
+}
+
+function Move( steps )
+{
+	ChangeOptionPosition( oListText, steps ) ;
+	ChangeOptionPosition( oListValue, steps ) ;
+}
+
+function Delete()
+{
+	RemoveSelectedOptions( oListText ) ;
+	RemoveSelectedOptions( oListValue ) ;
+}
+
+function SetSelectedValue()
+{
+	var iIndex = oListValue.selectedIndex ;
+	if ( iIndex < 0 ) return ;
+
+	var oTxtValue = document.getElementById( "txtSelValue" ) ;
+
+	oTxtValue.value = oListValue.options[ iIndex ].value ;
+}
+
+// Moves the selected option by a number of steps (also negative)
+function ChangeOptionPosition( combo, steps )
+{
+	var iActualIndex = combo.selectedIndex ;
+
+	if ( iActualIndex < 0 )
+		return ;
+
+	var iFinalIndex = iActualIndex + steps ;
+
+	if ( iFinalIndex < 0 )
+		iFinalIndex = 0 ;
+
+	if ( iFinalIndex > ( combo.options.lenght - 1 ) )
+		iFinalIndex = combo.options.lenght - 1 ;
+
+	if ( iActualIndex == iFinalIndex )
+		return ;
+
+	var oOption = combo.options[ iActualIndex ] ;
+	var sText	= oOption.innerHTML ;
+	var sValue	= oOption.value ;
+
+	combo.remove( iActualIndex ) ;
+
+	oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ;
+
+	oOption.selected = true ;
+}
+
+// Remove all selected options from a SELECT object
+function RemoveSelectedOptions(combo)
+{
+	// Save the selected index
+	var iSelectedIndex = combo.selectedIndex ;
+
+	var oOptions = combo.options ;
+
+	// Remove all selected options
+	for ( var i = oOptions.length - 1 ; i >= 0 ; i-- )
+	{
+		if (oOptions[i].selected) combo.remove(i) ;
+	}
+
+	// Reset the selection based on the original selected index
+	if ( combo.options.length > 0 )
+	{
+		if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ;
+		combo.selectedIndex = iSelectedIndex ;
+	}
+}
+
+// Add a new option to a SELECT object (combo or list)
+function AddComboOption( combo, optionText, optionValue, documentObject, index )
+{
+	var oOption ;
+
+	if ( documentObject )
+		oOption = documentObject.createElement("OPTION") ;
+	else
+		oOption = document.createElement("OPTION") ;
+
+	if ( index != null )
+		combo.options.add( oOption, index ) ;
+	else
+		combo.options.add( oOption ) ;
+
+	oOption.innerHTML = optionText.length > 0 ? optionText : '&nbsp;' ;
+	oOption.value     = optionValue ;
+
+	return oOption ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_select.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_select.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_select.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_select.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_select.html
+ * 	Select dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Select Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript" src="fck_select/fck_select.js"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+var oListText ;
+var oListValue ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	oListText	= document.getElementById( 'cmbText' ) ;
+	oListValue	= document.getElementById( 'cmbValue' ) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'SELECT' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtSelValue').value	= oActiveEl.value ;
+		GetE('txtLines').value		= GetAttribute( oActiveEl, 'size' ) ;
+		GetE('chkMultiple').checked	= oActiveEl.multiple ;
+
+		// Load the actual options
+		for ( var i = 0 ; i < oActiveEl.options.length ; i++ )
+		{
+			var sText	= oActiveEl.options[i].innerHTML ;
+			var sValue	= oActiveEl.options[i].value ;
+
+			AddComboOption( oListText, sText, sText ) ;
+			AddComboOption( oListValue, sValue, sValue ) ;
+		}
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	var sSize = GetE('txtLines').value ;
+	if ( sSize == null || isNaN( sSize ) || sSize <= 1 )
+		sSize = '' ;
+
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'SELECT' ) ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+
+	SetAttribute( oActiveEl, 'name'	, GetE('txtName').value ) ;
+	SetAttribute( oActiveEl, 'size'	, sSize ) ;
+	oActiveEl.multiple = ( sSize.length > 0 && GetE('chkMultiple').checked ) ;
+
+	// Remove all options.
+	while ( oActiveEl.options.length > 0 )
+		oActiveEl.remove(0) ;
+
+	// Add all available options.
+	for ( var i = 0 ; i < oListText.options.length ; i++ )
+	{
+		var sText	= oListText.options[i].value ;
+		var sValue	= oListValue.options[i].value ;
+		if ( sValue.length == 0 ) sValue = sText ;
+
+		var oOption = AddComboOption( oActiveEl, sText, sValue, oDOM ) ;
+
+		if ( sValue == GetE('txtSelValue').value )
+		{
+			SetAttribute( oOption, 'selected', 'selected' ) ;
+			oOption.selected = true ;
+		}
+	}
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style='OVERFLOW: hidden' scroll='no'>
+		<table width="100%" height="100%">
+			<tr>
+				<td>
+					<table width="100%">
+						<tr>
+							<td nowrap><span fckLang="DlgSelectName">Name</span>&nbsp;</td>
+							<td width="100%" colSpan="2"><input id="txtName" style="WIDTH: 100%" type="text"></td>
+						</tr>
+						<tr>
+							<td nowrap><span fckLang="DlgSelectValue">Value</span>&nbsp;</td>
+							<td width="100%" colSpan="2"><input id="txtSelValue" style="WIDTH: 100%; BACKGROUND-COLOR: buttonface" type="text" readonly></td>
+						</tr>
+						<tr>
+							<td nowrap><span fckLang="DlgSelectSize">Size</span>&nbsp;</td>
+							<td nowrap><input id="txtLines" type="text" size="2" value="">&nbsp;<span fckLang="DlgSelectLines">lines</span></td>
+							<td nowrap align="right"><input id="chkMultiple" name="chkMultiple" type="checkbox"><label for="chkMultiple" fckLang="DlgSelectChkMulti">Allow
+									multiple selections</label></td>
+						</tr>
+					</table>
+					<br>
+					<hr style="POSITION: absolute">
+					<span style="LEFT: 10px; POSITION: relative; TOP: -7px" class="BackColor">&nbsp;<span fckLang="DlgSelectOpAvail">Available
+							Options</span>&nbsp;</span>
+					<table width="100%">
+						<tr>
+							<td width="50%"><span fckLang="DlgSelectOpText">Text</span><br>
+								<input id="txtText" style="WIDTH: 100%" type="text" name="txtText">
+							</td>
+							<td width="50%"><span fckLang="DlgSelectOpValue">Value</span><br>
+								<input id="txtValue" style="WIDTH: 100%" type="text" name="txtValue">
+							</td>
+							<td vAlign="bottom"><input onclick="Add();" type="button" fckLang="DlgSelectBtnAdd" value="Add"></td>
+							<td vAlign="bottom"><input onclick="Modify();" type="button" fckLang="DlgSelectBtnModify" value="Modify"></td>
+						</tr>
+						<tr>
+							<td rowSpan="2"><select id="cmbText" style="WIDTH: 100%" onchange="GetE('cmbValue').selectedIndex = this.selectedIndex;Select(this);"
+									size="5" name="cmbText"></select>
+							</td>
+							<td rowSpan="2"><select id="cmbValue" style="WIDTH: 100%" onchange="GetE('cmbText').selectedIndex = this.selectedIndex;Select(this);"
+									size="5" name="cmbValue"></select>
+							</td>
+							<td vAlign="top" colSpan="2">
+							</td>
+						</tr>
+						<tr>
+							<td vAlign="bottom" colSpan="2"><input style="WIDTH: 100%" onclick="Move(-1);" type="button" fckLang="DlgSelectBtnUp" value="Up">
+								<br>
+								<input style="WIDTH: 100%" onclick="Move(1);" type="button" fckLang="DlgSelectBtnDown"
+									value="Down">
+							</td>
+						</tr>
+						<TR>
+							<TD vAlign="bottom" colSpan="4"><INPUT onclick="SetSelectedValue();" type="button" fckLang="DlgSelectBtnSetValue" value="Set as selected value">&nbsp;&nbsp;
+								<input onclick="Delete();" type="button" fckLang="DlgSelectBtnDelete" value="Delete"></TD>
+						</TR>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_smiley.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_smiley.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_smiley.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_smiley.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,90 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_smiley.html
+ * 	Smileys (emoticons) dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<style type="text/css">
+			.HandIE { cursor: hand ; }
+			.HandMozilla { cursor: pointer ; }
+		</style>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+}
+
+function InsertSmiley( url )
+{
+	var oImg = oEditor.FCK.CreateElement( 'IMG' ) ;
+	oImg.src = url ;
+
+	window.parent.Cancel() ;
+}
+
+function over(td)
+{
+	td.className = 'LightBackground HandIE HandMozilla' ;
+}
+
+function out(td)
+{
+	td.className = 'DarkBackground HandIE HandMozilla' ;
+}
+		</script>
+	</head>
+	<body scroll="no">
+		<table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%">
+			<script type="text/javascript">
+<!--
+var FCKConfig = oEditor.FCKConfig ;
+
+var sBasePath = FCKConfig.SmileyPath ;
+var aImages   = FCKConfig.SmileyImages ;
+var cols      = FCKConfig.SmileyColumns ;
+
+var i = 0 ;
+while (i < aImages.length)
+{
+	document.write("<TR>") ;
+	for(var j = 0 ; j < cols ; j++)
+	{
+		if (aImages[i])
+		{
+			var sUrl = sBasePath + aImages[i] ;
+			document.write("<TD width='1%' align='center' class='DarkBackground HandIE HandMozilla' onclick='InsertSmiley(\"" + sUrl.replace(/"/g, '\\"' ) + "\")' onmouseover='over(this)' onmouseout='out(this)'>") ;
+			document.write("<img src='" + sUrl + "' border='0'>") ;
+		}
+		else
+			document.write("<TD width='1%' class='DarkBackground'>&nbsp;") ;
+		document.write("<\/TD>") ;
+		i++ ;
+	}
+	document.write("<\/TR>") ;
+}
+//-->
+			</script>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_source.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_source.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_source.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_source.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,59 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_source.html
+ * 	Source editor dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<html>
+	<head>
+		<title>Source</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
+		<script language="javascript">
+		
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+window.onload = function()
+{
+	document.getElementById('txtSource').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oEditor.FCKUndo.SaveUndoStep() ;
+			
+	FCK.SetHTML( document.getElementById('txtSource').value, false ) ;
+	
+	return true ;
+}
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table width="100%" height="100%">
+			<tr>
+				<td height="100%"><textarea id="txtSource" dir="ltr" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; WIDTH: 100%; PADDING-TOP: 5px; FONT-FAMILY: Monospace; HEIGHT: 100%">Loading. Please wait...</textarea></td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_specialchar.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_specialchar.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_specialchar.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_specialchar.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,106 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_specialchar.html
+ * 	Special Chars Selector dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<html>
+	<head>
+		<meta name="robots" content="noindex, nofollow">
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<style type="text/css">
+				.HandIE { cursor: hand ; }
+				.HandMozilla { cursor: pointer ; }
+				.Sample { font-size: 24px; }
+		</style>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+var oSample ;
+
+function insertChar(charValue)
+{
+	oEditor.FCK.InsertHtml( charValue || "" ) ;
+	window.parent.Cancel() ;
+}
+
+function over(td)
+{
+	oSample.innerHTML = td.innerHTML ;
+	td.className = 'LightBackground HandIE HandMozilla' ;
+}
+
+function out(td)
+{
+	oSample.innerHTML = "&nbsp;" ;
+	td.className = 'DarkBackground HandIE HandMozilla' ;
+}
+
+function setDefaults()
+{
+	// Gets the sample placeholder.
+	oSample = document.getElementById("SampleTD") ;
+
+	// First of all, translates the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+}
+
+		</script>
+	</HEAD>
+	<BODY onload="setDefaults()" scroll="no">
+		<table cellpadding="0" cellspacing="0" width="100%" height="100%">
+			<tr>
+				<td width="100%">
+					<table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%">
+						<script type="text/javascript">
+var aChars = ["!","&quot;","#","$","%","&amp;","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","&ndash;","&mdash;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;","&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;","&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;","&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;"] ;
+
+var cols = 20 ;
+
+var i = 0 ;
+while (i < aChars.length)
+{
+	document.write("<TR>") ;
+	for(var j = 0 ; j < cols ; j++) 
+	{
+		if (aChars[i])
+		{
+			document.write('<TD width="1%" class="DarkBackground HandIE HandMozilla" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&amp;") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ;
+			document.write(aChars[i]) ;
+		}
+		else
+			document.write("<TD class='DarkBackground'>&nbsp;") ;
+		document.write("<\/TD>") ;
+		i++ ;
+	}
+	document.write("<\/TR>") ;
+}
+						</script>
+					</table>
+				</td>
+				<td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+				<td valign="top">
+					<table width="40" cellpadding="0" cellspacing="0" border="0">
+						<tr>
+							<td id="SampleTD" width="40" height="40" align="center" class="DarkBackground Sample">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</BODY>
+</HTML>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,153 @@
+<html>
+	<head>
+		<link rel="stylesheet" type="text/css" href="spellerStyle.css" />
+		<script src="controlWindow.js"></script>
+		<script>
+var spellerObject;
+var controlWindowObj;
+
+if( parent.opener ) {
+	spellerObject = parent.opener.speller;
+}
+
+function ignore_word() {
+	if( spellerObject ) {
+		spellerObject.ignoreWord();
+	}
+}
+
+function ignore_all() {
+	if( spellerObject ) {
+		spellerObject.ignoreAll();
+	}
+}
+
+function replace_word() {
+	if( spellerObject ) {
+		spellerObject.replaceWord();
+	}
+}
+
+function replace_all() {
+	if( spellerObject ) {
+		spellerObject.replaceAll();
+	}
+}
+
+function end_spell() {
+	if( spellerObject ) {
+		spellerObject.terminateSpell();
+	}
+}
+
+function undo() {
+	if( spellerObject ) {
+		spellerObject.undo();
+	}
+}
+
+function suggText() {
+	if( controlWindowObj ) {
+		controlWindowObj.setSuggestedText();
+	}
+}
+
+var FCKLang = window.parent.parent.FCKLang ;	// by FredCK
+
+function init_spell() {
+	// By FredCK (fckLang attributes have been added to the HTML source of this page)
+	window.parent.parent.OnSpellerControlsLoad( this ) ;
+
+	var controlForm = document.spellcheck;
+
+	// create a new controlWindow object
+ 	controlWindowObj = new controlWindow( controlForm );
+
+	// call the init_spell() function in the parent frameset
+	if( parent.frames.length ) {
+		parent.init_spell( controlWindowObj );
+	} else {
+		alert( 'This page was loaded outside of a frameset. It might not display properly' );
+	}
+}
+
+</script>
+	</head>
+	<body class="controlWindowBody" onLoad="init_spell();" style="OVERFLOW: hidden" scroll="no">	<!-- by FredCK -->
+		<form name="spellcheck">
+			<table border="0" cellpadding="0" cellspacing="0" border="0" align="center">
+				<tr>
+					<td colspan="3" class="normalLabel"><span fckLang="DlgSpellNotInDic">Not in dictionary:</span></td>
+				</tr>
+				<tr>
+					<td colspan="3"><input class="readonlyInput" type="text" name="misword" readonly /></td>
+				</tr>
+				<tr>
+					<td colspan="3" height="5"></td>
+				</tr>
+				<tr>
+					<td class="normalLabel"><span fckLang="DlgSpellChangeTo">Change to:</span></td>
+				</tr>
+				<tr valign="top">
+					<td>
+						<table border="0" cellpadding="0" cellspacing="0" border="0">
+							<tr>
+								<td class="normalLabel">
+									<input class="textDefault" type="text" name="txtsugg" />
+								</td>
+							</tr>
+							<tr>
+								<td>
+									<select class="suggSlct" name="sugg" size="7" onChange="suggText();" onDblClick="replace_word();">
+										<option></option>
+									</select>
+								</td>
+							</tr>
+						</table>
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td>
+						<table border="0" cellpadding="0" cellspacing="0" border="0">
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnore" value="Ignore" onClick="ignore_word();">
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnoreAll" value="Ignore All" onClick="ignore_all();">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3" height="5"></td>
+							</tr>
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplace" value="Replace" onClick="replace_word();">
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplaceAll" value="Replace All" onClick="replace_all();">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3" height="5"></td>
+							</tr>
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" name="btnUndo" fckLang="DlgSpellBtnUndo" value="Undo" onClick="undo();"
+										disabled>
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td> 
+									<!-- by FredCK
+									<input class="buttonDefault" type="button" value="Close" onClick="end_spell();">
+									-->
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,87 @@
+﻿////////////////////////////////////////////////////
+// controlWindow object
+////////////////////////////////////////////////////
+function controlWindow( controlForm ) {
+	// private properties
+	this._form = controlForm;
+
+	// public properties
+	this.windowType = "controlWindow";
+//	this.noSuggestionSelection = "- No suggestions -";	// by FredCK
+	this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ;
+	// set up the properties for elements of the given control form
+	this.suggestionList  = this._form.sugg;
+	this.evaluatedText   = this._form.misword;
+	this.replacementText = this._form.txtsugg;
+	this.undoButton      = this._form.btnUndo;
+
+	// public methods
+	this.addSuggestion = addSuggestion;
+	this.clearSuggestions = clearSuggestions;
+	this.selectDefaultSuggestion = selectDefaultSuggestion;
+	this.resetForm = resetForm;
+	this.setSuggestedText = setSuggestedText;
+	this.enableUndo = enableUndo;
+	this.disableUndo = disableUndo;
+}
+
+function resetForm() {
+	if( this._form ) {
+		this._form.reset();
+	}
+}
+
+function setSuggestedText() {
+	var slct = this.suggestionList;
+	var txt = this.replacementText;
+	var str = "";
+	if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) {
+		str = slct.options[slct.selectedIndex].text;
+	}
+	txt.value = str;
+}
+
+function selectDefaultSuggestion() {
+	var slct = this.suggestionList;
+	var txt = this.replacementText;
+	if( slct.options.length == 0 ) {
+		this.addSuggestion( this.noSuggestionSelection );
+	} else {
+		slct.options[0].selected = true;
+	}
+	this.setSuggestedText();
+}
+
+function addSuggestion( sugg_text ) {
+	var slct = this.suggestionList;
+	if( sugg_text ) {
+		var i = slct.options.length;
+		var newOption = new Option( sugg_text, 'sugg_text'+i );
+		slct.options[i] = newOption;
+	 }
+}
+
+function clearSuggestions() {
+	var slct = this.suggestionList;
+	for( var j = slct.length - 1; j > -1; j-- ) {
+		if( slct.options[j] ) {
+			slct.options[j] = null;
+		}
+	}
+}
+
+function enableUndo() {
+	if( this.undoButton ) {
+		if( this.undoButton.disabled == true ) {
+			this.undoButton.disabled = false;
+		}
+	}
+}
+
+function disableUndo() {
+	if( this.undoButton ) {
+		if( this.undoButton.disabled == false ) {
+			this.undoButton.disabled = true;
+		}
+	}
+}
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,132 @@
+<!--- Coldfusion MX uses java on the server to process tags. So it is save to use most java attributes. For example below
+I use list.lastindexOf(), lastindexOf() is a java string attribute. If you plan on using this tag with earlier versions
+of Coldfusion, you will have to replace the lastindexOf with a pure coldfusion function. By replacing the lastindexOf, spellchecker.cfm
+script should be compatible with all cf version 4.5 and up.
+
+Also if you are hosting your site at an ISP, you will have to check with them to see if the use of <CFEXECUTE> is allowed. 
+In most cases ISP will not allow the use of that tag for security reasons. Clients would be able to access each others files in certain cases.
+ --->
+
+
+<!--- Set up variables --->
+<cfset tempFolder = "c:\test">
+<cfset tempfile = "spell_#randrange(1,1000)#">
+<cfset apsell_dir = "c:\aspell\bin">
+<!--- <cfset spellercss = "/speller/spellerStyle.css">		by FredCK --->
+<cfset spellercss = "../spellerStyle.css">
+<!--- <cfset word_win_src = "/speller/wordWindow.js">		by FredCK --->
+<cfset word_win_src = "../wordWindow.js">
+
+
+<!--- Takes care of those pesky smart quotes from MS apps, replaces them with regular quotes --->
+<cfset submitted_text = replacelist(form.checktext,"%u201C,%u201D","%22,%22")> 
+<cfset submitted_text = urlDecode(submitted_text)>
+
+
+
+
+<!--- need to escape special javascript characters such as ' --->
+<cfset unaltered_text = submitted_text>
+<cfset submitted_text = replace(submitted_text,"'","\'","All")>
+<cfset submitted_text = replace(submitted_text,"""","\""","All")>
+
+<!--- use carat on each line to escape possible aspell commands --->
+<cfset text = "">
+<cfloop list="#submitted_text#" index="idx" delimiters="#chr(10)##chr(13)#">
+	<cfset text =text&"^"&idx&"#chr(10)##chr(13)#">
+</cfloop>
+
+
+
+<!--- create temp file from the submitted text, this will be passed to aspell to be check for misspelled words --->
+<cffile action="write" file="#tempFolder#\#tempfile#.txt" output="#text#" charset="utf-8">
+
+
+<!--- cfsavecontent is used to set the variable that will be returned with the results from aspell.
+If your using the new version of mx 6.1 you can  use the following cfexecute tag instead:
+<cfexecute name="C:\WINDOWS\SYSTEM32\cmd.exe" arguments="/c type c:\test\#tempfile#.txt | c:\aspell\bin\aspell -a" timeout="100" variable="results"></cfexecute> --->
+
+<cfsavecontent variable="food">
+<cfexecute name="C:\WINDOWS\SYSTEM32\cmd.exe" arguments="/c type #tempFolder#\#tempfile#.txt | #apsell_dir#\aspell -a" timeout="100"></cfexecute>
+</cfsavecontent>
+
+<!--- remove temp file --->
+<cffile action="delete" file="#tempFolder#\#tempfile#.txt">
+
+
+
+
+<cfoutput>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="speller/spellerStyle.css">
+<script src="/speller/wordWindow.js"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var error;
+var wordtext = unescape('#urlencodedFormat(unaltered_text)#');
+
+<cfset cnt = 1>
+<cfset word_cnt = 0>
+<cfloop list="#food#" index="list" delimiters="#chr(10)##chr(13)#">
+	<!--- removes the first line of the aspell output "@(#) International Ispell Version 3.1.20 (but really Aspell 0.50.3)" --->
+	<cfif NOT cnt EQ 1>
+		<cfif find("&",list) OR find("##",list)>
+			<!--- word that misspelled --->
+			<cfset bad_word = listGetAt(list,"2"," ")>
+			<!--- sugestions --->
+			<cfset wrdList = mid(list,(list.lastindexOf(':') + 2),(len(list) - (list.lastindexOf(':') + 2)))>
+			<cfset wrdsList = "">
+			<cfloop list=#wrdList# index="idx">
+				<cfset wrdsList =wrdsList&"'"&trim(replace(idx,"'","\'","All"))&"',">
+			</cfloop>
+			<!--- javascript --->
+			words[#word_cnt#] = '#trim(replace(bad_word,"'","\'","All"))#';
+			suggs[#word_cnt#] = [#trim(wrdsList)#];
+			<cfset word_cnt = word_cnt + 1>
+		<cfelseif find("*",list)>
+		</cfif>			
+	</cfif>
+	<cfset cnt = cnt + 1>
+</cfloop>
+
+
+
+
+
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.text = wordtext;
+
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+
+
+
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script>
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+</cfoutput>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,193 @@
+<?php
+header('Content-type: text/html; charset=utf-8');
+
+//$spellercss = '/speller/spellerStyle.css';	// by FredCK
+$spellercss = '../spellerStyle.css';			// by FredCK
+//$word_win_src = '/speller/wordWindow.js';		// by FredCK
+$word_win_src = '../wordWindow.js';				// by FredCK
+$textinputs = $_POST['textinputs']; # array
+//$aspell_prog = 'aspell';									// by FredCK (for Linux)
+$aspell_prog = '"C:\Program Files\Aspell\bin\aspell.exe"';	// by FredCK (for Windows)
+$lang = 'en_US';
+//$aspell_opts = "-a --lang=$lang --encoding=utf-8";	// by FredCK
+$aspell_opts = "-a --lang=$lang --encoding=utf-8 -H";	// by FredCK
+$tempfiledir = "./";
+$input_separator = "A";
+
+# set the JavaScript variable to the submitted text.
+# textinputs is an array, each element corresponding to the (url-encoded)
+# value of the text control submitted for spell-checking
+function print_textinputs_var() {
+	global $textinputs;
+	foreach( $textinputs as $key=>$val ) {
+		# $val = str_replace( "'", "%27", $val );
+		echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n";
+	}
+}
+
+# make declarations for the text input index
+function print_textindex_decl( $text_input_idx ) {
+	echo "words[$text_input_idx] = [];\n";
+	echo "suggs[$text_input_idx] = [];\n";
+}
+
+# set an element of the JavaScript 'words' array to a misspelled word
+function print_words_elem( $word, $index, $text_input_idx ) {
+	echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n";
+}
+
+
+# set an element of the JavaScript 'suggs' array to a list of suggestions
+function print_suggs_elem( $suggs, $index, $text_input_idx ) {
+	echo "suggs[$text_input_idx][$index] = [";
+	foreach( $suggs as $key=>$val ) {
+		if( $val ) {
+			echo "'" . escape_quote( $val ) . "'";
+			if ( $key+1 < count( $suggs )) {
+				echo ", ";
+			}
+		}
+	}
+	echo "];\n";
+}
+
+# escape single quote
+function escape_quote( $str ) {
+	return preg_replace ( "/'/", "\\'", $str );
+}
+
+
+# handle a server-side error.
+function error_handler( $err ) {
+	echo "error = '" . escape_quote( $err ) . "';\n";
+}
+
+## get the list of misspelled words. Put the results in the javascript words array
+## for each misspelled word, get suggestions and put in the javascript suggs array
+function print_checker_results() {
+
+	global $aspell_prog;
+	global $aspell_opts;
+	global $tempfiledir;
+	global $textinputs;
+	global $input_separator;
+	$aspell_err = "";
+	# create temp file
+	$tempfile = tempnam( $tempfiledir, 'aspell_data_' );
+
+	# open temp file, add the submitted text.
+	if( $fh = fopen( $tempfile, 'w' )) {
+		for( $i = 0; $i < count( $textinputs ); $i++ ) {
+			$text = urldecode( $textinputs[$i] );
+			$lines = explode( "\n", $text );
+			fwrite ( $fh, "%\n" ); # exit terse mode
+			fwrite ( $fh, "^$input_separator\n" );
+			fwrite ( $fh, "!\n" ); # enter terse mode
+			foreach( $lines as $key=>$value ) {
+				# use carat on each line to escape possible aspell commands
+				fwrite( $fh, "^$value\n" );
+			}
+		}
+		fclose( $fh );
+
+		# exec aspell command - redirect STDERR to STDOUT
+		$cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1";
+		if( $aspellret = shell_exec( $cmd )) {
+			$linesout = explode( "\n", $aspellret );
+			$index = 0;
+			$text_input_index = -1;
+			# parse each line of aspell return
+			foreach( $linesout as $key=>$val ) {
+				$chardesc = substr( $val, 0, 1 );
+				# if '&', then not in dictionary but has suggestions
+				# if '#', then not in dictionary and no suggestions
+				# if '*', then it is a delimiter between text inputs
+				# if '@' then version info
+				if( $chardesc == '&' || $chardesc == '#' ) {
+					$line = explode( " ", $val, 5 );
+					print_words_elem( $line[1], $index, $text_input_index );
+					if( isset( $line[4] )) {
+						$suggs = explode( ", ", $line[4] );
+					} else {
+						$suggs = array();
+					}
+					print_suggs_elem( $suggs, $index, $text_input_index );
+					$index++;
+				} elseif( $chardesc == '*' ) {
+					$text_input_index++;
+					print_textindex_decl( $text_input_index );
+					$index = 0;
+				} elseif( $chardesc != '@' && $chardesc != "" ) {
+					# assume this is error output
+					$aspell_err .= $val;
+				}
+			}
+			if( $aspell_err ) {
+				$aspell_err = "Error executing `$cmd`\\n$aspell_err";
+				error_handler( $aspell_err );
+			}
+		} else {
+			error_handler( "System error: Aspell program execution failed (`$cmd`)" );
+		}
+	} else {
+		error_handler( "System error: Could not open file '$tempfile' for writing" );
+	}
+
+	# close temp file, delete file
+	unlink( $tempfile );
+}
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" />
+<script language="javascript" src="<?php echo $word_win_src ?>"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+<?php
+
+print_textinputs_var();
+
+print_checker_results();
+
+?>
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+
+
+
+</script>
+
+</head>
+<!-- <body onLoad="init_spell();">		by FredCK -->
+<body onLoad="init_spell();" bgcolor="#ffffff">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,180 @@
+#!/usr/bin/perl
+
+use CGI qw/ :standard /;
+use File::Temp qw/ tempfile tempdir /;
+
+# my $spellercss = '/speller/spellerStyle.css';					# by FredCK
+my $spellercss = '../spellerStyle.css';							# by FredCK
+# my $wordWindowSrc = '/speller/wordWindow.js';					# by FredCK
+my $wordWindowSrc = '../wordWindow.js';							# by FredCK
+my @textinputs = param( 'textinputs[]' ); # array
+# my $aspell_cmd = 'aspell';									# by FredCK (for Linux)
+my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"';	# by FredCK (for Windows)
+my $lang = 'en_US';
+# my $aspell_opts = "-a --lang=$lang --encoding=utf-8";			# by FredCK
+my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H";		# by FredCK
+my $input_separator = "A";
+
+# set the 'wordtext' JavaScript variable to the submitted text. 
+sub printTextVar {
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+	        print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n";
+	}
+}
+
+sub printTextIdxDecl {
+	my $idx = shift;
+	print "words[$idx] = [];\n";
+	print "suggs[$idx] = [];\n";
+}
+
+sub printWordsElem {
+	my( $textIdx, $wordIdx, $word ) = @_;
+	print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n";
+}
+
+sub printSuggsElem {
+	my( $textIdx, $wordIdx, @suggs ) = @_;
+	print "suggs[$textIdx][$wordIdx] = [";
+	for my $i ( 0..$#suggs ) {
+		print "'" . escapeQuote( $suggs[$i] ) . "'";
+		if( $i < $#suggs ) {
+			print ", ";
+		}
+	}
+	print "];\n";
+}
+
+sub printCheckerResults {
+	my $textInputIdx = -1;
+	my $wordIdx = 0;
+	my $unhandledText;
+	# create temp file
+	my $dir = tempdir( CLEANUP => 1 );
+	my( $fh, $tmpfilename ) = tempfile( DIR => $dir );
+
+	# temp file was created properly?
+	
+	# open temp file, add the submitted text.
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+		$text = url_decode( $textinputs[$i] );
+		@lines = split( /\n/, $text );
+		print $fh "\%\n"; # exit terse mode
+		print $fh "^$input_separator\n";
+		print $fh "!\n";  # enter terse mode
+		for my $line ( @lines ) {
+			# use carat on each line to escape possible aspell commands
+			print $fh "^$line\n";
+		}
+		
+	}
+	# exec aspell command
+	my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1";
+	open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return;
+	# parse each line of aspell return
+	for my $ret ( <ASPELL> ) {
+		chomp( $ret );
+		# if '&', then not in dictionary but has suggestions
+		# if '#', then not in dictionary and no suggestions
+		# if '*', then it is a delimiter between text inputs
+		if( $ret =~ /^\*/ ) {
+			$textInputIdx++;
+			printTextIdxDecl( $textInputIdx );
+			$wordIdx = 0;
+	
+		} elsif( $ret =~ /^(&|#)/ ) {
+			my @tokens = split( " ", $ret, 5 );
+			printWordsElem( $textInputIdx, $wordIdx, $tokens[1] );
+			my @suggs = ();
+			if( $tokens[4] ) {
+				@suggs = split( ", ", $tokens[4] );
+			}
+			printSuggsElem( $textInputIdx, $wordIdx, @suggs );
+			$wordIdx++;
+		} else {
+			$unhandledText .= $ret;
+		}
+	}
+	close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return;
+}
+
+sub escapeQuote {
+	my $str = shift;
+	$str =~ s/'/\\'/g;
+	return $str;
+}
+
+sub handleError {
+	my $err = shift;
+	print "error = '" . escapeQuote( $err ) . "';\n";
+}
+
+sub url_decode {
+	local $_ = @_ ? shift : $_;
+	defined or return;
+	# change + signs to spaces
+	tr/+/ /;
+	# change hex escapes to the proper characters
+	s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
+	return $_;
+}
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# Display HTML
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+print <<EOF;
+Content-type: text/html; charset=utf-8
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="$spellercss"/>
+<script src="$wordWindowSrc"></script>
+<script type="text/javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+EOF
+
+printTextVar();
+
+printCheckerResults();
+
+print <<EOF;
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			error = "This page was loaded outside of a frameset. "; 
+			error += "It might not display properly";
+			alert( error );
+		}
+	}
+}
+
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+EOF
+
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,71 @@
+
+<script>
+
+var wordWindow = null;
+var controlWindow = null;
+
+function init_spell( spellerWindow ) {
+
+	if( spellerWindow ) {
+		if( spellerWindow.windowType == "wordWindow" ) {
+			wordWindow = spellerWindow;
+		} else if ( spellerWindow.windowType == "controlWindow" ) {
+			controlWindow = spellerWindow;
+		}
+	}
+
+	if( controlWindow && wordWindow ) {
+		// populate the speller object and start it off!
+		var speller = opener.speller;
+		wordWindow.speller = speller;
+		speller.startCheck( wordWindow, controlWindow );
+	}
+}
+
+// encodeForPost
+function encodeForPost( str ) {
+	var s = new String( str );
+	s = encodeURIComponent( s );
+	// additionally encode single quotes to evade any PHP 
+	// magic_quotes_gpc setting (it inserts escape characters and 
+	// therefore skews the btye positions of misspelled words)
+	return s.replace( /\'/g, '%27' );
+}
+
+// post the text area data to the script that populates the speller
+function postWords() {
+	var bodyDoc = window.frames[0].document;
+	bodyDoc.open();
+	bodyDoc.write('<html>');
+	bodyDoc.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
+	bodyDoc.write('<link rel="stylesheet" type="text/css" href="spellerStyle.css"/>');
+	if (opener) {
+		var speller = opener.speller;
+		bodyDoc.write('<body class="normalText" onLoad="document.forms[0].submit();">');
+		bodyDoc.write('<p>' + window.parent.FCKLang.DlgSpellProgress + '<\/p>');		// by FredCK
+		bodyDoc.write('<form action="'+speller.spellCheckScript+'" method="post">');
+		for( var i = 0; i < speller.textInputs.length; i++ ) {
+			bodyDoc.write('<input type="hidden" name="textinputs[]" value="'+encodeForPost(speller.textInputs[i].value)+'">');
+		}
+		bodyDoc.write('<\/form>');
+		bodyDoc.write('<\/body>');
+	} else {
+		bodyDoc.write('<body class="normalText">');
+		bodyDoc.write('<p><b>This page cannot be displayed<\/b><\/p><p>The window was not opened from another window.<\/p>');
+		bodyDoc.write('<\/body>');
+	}
+	bodyDoc.write('<\/html>');
+	bodyDoc.close();
+}
+</script>
+
+<html>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<head>
+<title>Speller Pages</title>
+</head>
+<frameset rows="*,201" onLoad="postWords();">
+<frame src="blank.html">
+<frame src="controls.html">
+</frameset>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,458 @@
+﻿////////////////////////////////////////////////////
+// spellChecker.js
+//
+// spellChecker object
+//
+// This file is sourced on web pages that have a textarea object to evaluate
+// for spelling. It includes the implementation for the spellCheckObject.
+//
+////////////////////////////////////////////////////
+
+
+// constructor
+function spellChecker( textObject ) {
+
+	// public properties - configurable
+//	this.popUpUrl = '/speller/spellchecker.html';							// by FredCK
+	this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html';		// by FredCK
+	this.popUpName = 'spellchecker';
+//	this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes";	// by FredCK
+	this.popUpProps = null ;																	// by FredCK
+//	this.spellCheckScript = '/speller/server-scripts/spellchecker.php';		// by FredCK
+	this.spellCheckScript = 'server-scripts/spellchecker.php';				// by FredCK
+	//this.spellCheckScript = '/cgi-bin/spellchecker.pl';
+
+	// values used to keep track of what happened to a word
+	this.replWordFlag = "R";	// single replace
+	this.ignrWordFlag = "I";	// single ignore
+	this.replAllFlag = "RA";	// replace all occurances
+	this.ignrAllFlag = "IA";	// ignore all occurances
+	this.fromReplAll = "~RA";	// an occurance of a "replace all" word
+	this.fromIgnrAll = "~IA";	// an occurance of a "ignore all" word
+	// properties set at run time
+	this.wordFlags = new Array();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	this.spellCheckerWin = null;
+	this.controlWin = null;
+	this.wordWin = null;
+	this.textArea = textObject;	// deprecated
+	this.textInputs = arguments; 
+
+	// private methods
+	this._spellcheck = _spellcheck;
+	this._getSuggestions = _getSuggestions;
+	this._setAsIgnored = _setAsIgnored;
+	this._getTotalReplaced = _getTotalReplaced;
+	this._setWordText = _setWordText;
+	this._getFormInputs = _getFormInputs;
+
+	// public methods
+	this.openChecker = openChecker;
+	this.startCheck = startCheck;
+	this.checkTextBoxes = checkTextBoxes;
+	this.checkTextAreas = checkTextAreas;
+	this.spellCheckAll = spellCheckAll;
+	this.ignoreWord = ignoreWord;
+	this.ignoreAll = ignoreAll;
+	this.replaceWord = replaceWord;
+	this.replaceAll = replaceAll;
+	this.terminateSpell = terminateSpell;
+	this.undo = undo;
+
+	// set the current window's "speller" property to the instance of this class.
+	// this object can now be referenced by child windows/frames.
+	window.speller = this;
+}
+
+// call this method to check all text boxes (and only text boxes) in the HTML document
+function checkTextBoxes() {
+	this.textInputs = this._getFormInputs( "^text$" );
+	this.openChecker();
+}
+
+// call this method to check all textareas (and only textareas ) in the HTML document
+function checkTextAreas() {
+	this.textInputs = this._getFormInputs( "^textarea$" );
+	this.openChecker();
+}
+
+// call this method to check all text boxes and textareas in the HTML document
+function spellCheckAll() {
+	this.textInputs = this._getFormInputs( "^text(area)?$" );
+	this.openChecker();
+}
+
+// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
+// object's constructor or to the textInputs property
+function openChecker() {
+	this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
+	if( !this.spellCheckerWin.opener ) {
+		this.spellCheckerWin.opener = window;
+	}
+}
+
+function startCheck( wordWindowObj, controlWindowObj ) {
+
+	// set properties from args
+	this.wordWin = wordWindowObj;
+	this.controlWin = controlWindowObj;
+	
+	// reset properties
+	this.wordWin.resetForm();
+	this.controlWin.resetForm();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	// initialize the flags to an array - one element for each text input
+	this.wordFlags = new Array( this.wordWin.textInputs.length );
+	// each element will be an array that keeps track of each word in the text
+	for( var i=0; i<this.wordFlags.length; i++ ) {
+		this.wordFlags[i] = [];
+	}
+
+	// start
+	this._spellcheck();
+	
+	return true;
+}
+
+function ignoreWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing.' );
+		return false;
+	}
+	// set as ignored
+	if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
+		this.currentWordIndex++;
+		this._spellcheck();
+	}
+}
+
+function ignoreAll() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	// get the word that is currently being evaluated.
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+
+	// set this word as an "ignore all" word. 
+	this._setAsIgnored( ti, wi, this.ignrAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set as "from ignore all" if
+				// 1) do not already have a flag and 
+				// 2) have the same value as current word
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setAsIgnored( i, j, this.fromIgnrAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+}
+
+function replaceWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	if( !this.controlWin.replacementText ) {
+		return;
+	}
+	var txt = this.controlWin.replacementText;
+	if( txt.value ) {
+		var newspell = new String( txt.value );
+		if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
+			this.currentWordIndex++;
+			this._spellcheck();
+		}
+	}
+}
+
+function replaceAll() {
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	var txt = this.controlWin.replacementText;
+	if( !txt.value ) return;
+	var newspell = new String( txt.value );
+
+	// set this word as a "replace all" word. 
+	this._setWordText( ti, wi, newspell, this.replAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set word text to s_word_to_repl if
+				// 1) do not already have a flag and 
+				// 2) have the same value as s_word_to_repl
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setWordText( i, j, newspell, this.fromReplAll );
+				}
+			}
+		}
+	}
+	
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+}
+
+function terminateSpell() {
+	// called when we have reached the end of the spell checking.
+	var msg = "";		// by FredCK
+	var numrepl = this._getTotalReplaced();
+	if( numrepl == 0 ) {
+		// see if there were no misspellings to begin with
+		if( !this.wordWin ) {
+			msg = "";
+		} else {
+			if( this.wordWin.totalMisspellings() ) {
+//				msg += "No words changed.";			// by FredCK
+				msg += FCKLang.DlgSpellNoChanges ;	// by FredCK
+			} else {
+//				msg += "No misspellings found.";	// by FredCK
+				msg += FCKLang.DlgSpellNoMispell ;	// by FredCK
+			}
+		}
+	} else if( numrepl == 1 ) {
+//		msg += "One word changed.";			// by FredCK
+		msg += FCKLang.DlgSpellOneChange ;	// by FredCK
+	} else {
+//		msg += numrepl + " words changed.";	// by FredCK
+		msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
+	}
+	if( msg ) {
+//		msg += "\n";	// by FredCK
+		alert( msg );
+	}
+
+	if( numrepl > 0 ) {
+		// update the text field(s) on the opener window
+		for( var i = 0; i < this.textInputs.length; i++ ) {
+			// this.textArea.value = this.wordWin.text;
+			if( this.wordWin ) {
+				if( this.wordWin.textInputs[i] ) {
+					this.textInputs[i].value = this.wordWin.textInputs[i];
+				}
+			}
+		}
+	}
+
+	// return back to the calling window
+//	this.spellCheckerWin.close();					// by FredCK
+	if ( typeof( this.OnFinished ) == 'function' )	// by FredCK
+		this.OnFinished(numrepl) ;					// by FredCK
+
+	return true;
+}
+
+function undo() {
+	// skip if this is the first word!
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex
+	
+	if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
+		this.wordWin.removeFocus( ti, wi );
+
+		// go back to the last word index that was acted upon 
+		do {
+			// if the current word index is zero then reset the seed
+			if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
+				this.currentTextIndex--;
+				this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
+				if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
+			} else {
+				if( this.currentWordIndex > 0 ) {
+					this.currentWordIndex--;
+				}
+			}
+		} while ( 
+			this.wordWin.totalWords( this.currentTextIndex ) == 0
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
+		); 
+
+		var text_idx = this.currentTextIndex;
+		var idx = this.currentWordIndex;
+		var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
+		
+		// if we got back to the first word then set the Undo button back to disabled
+		if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
+			this.controlWin.disableUndo();
+		}
+	
+		// examine what happened to this current word.
+		switch( this.wordFlags[text_idx][idx] ) {
+			// replace all: go through this and all the future occurances of the word 
+			// and revert them all to the original spelling and clear their flags
+			case this.replAllFlag :
+				for( var i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							var origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this._setWordText ( i, j, origSpell, undefined );
+							}
+						}
+					}
+				}
+				break;
+				
+			// ignore all: go through all the future occurances of the word 
+			// and clear their flags
+			case this.ignrAllFlag :
+				for( var i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							var origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this.wordFlags[i][j] = undefined; 
+							}
+						}
+					}
+				}
+				break;
+				
+			// replace: revert the word to its original spelling
+			case this.replWordFlag :
+				this._setWordText ( text_idx, idx, preReplSpell, undefined );
+				break;
+		}
+
+		// For all four cases, clear the wordFlag of this word. re-start the process
+		this.wordFlags[text_idx][idx] = undefined; 
+		this._spellcheck();
+	}
+}
+
+function _spellcheck() {
+	var ww = this.wordWin;
+	
+	// check if this is the last word in the current text element
+	if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
+		this.currentTextIndex++;
+		this.currentWordIndex = 0;
+		// keep going if we're not yet past the last text element
+		if( this.currentTextIndex < this.wordWin.textInputs.length ) {	
+			this._spellcheck();
+			return;
+		} else {
+			this.terminateSpell();
+			return;
+		}
+	}
+	
+	// if this is after the first one make sure the Undo button is enabled
+	if( this.currentWordIndex > 0 ) {
+		this.controlWin.enableUndo();
+	}
+
+	// skip the current word if it has already been worked on
+	if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
+		// increment the global current word index and move on.
+		this.currentWordIndex++;
+		this._spellcheck();
+	} else {
+		var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
+		if( evalText ) {
+			this.controlWin.evaluatedText.value = evalText;
+			ww.setFocus( this.currentTextIndex, this.currentWordIndex );
+			this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
+		}
+	}
+}
+
+function _getSuggestions( text_num, word_num ) {
+	this.controlWin.clearSuggestions();
+	// add suggestion in list for each suggested word.
+	// get the array of suggested words out of the
+	// three-dimensional array containing all suggestions.
+	var a_suggests = this.wordWin.suggestions[text_num][word_num];	
+	if( a_suggests ) {
+		// got an array of suggestions.
+		for( var ii = 0; ii < a_suggests.length; ii++ ) {	
+			this.controlWin.addSuggestion( a_suggests[ii] );
+		}
+	}
+	this.controlWin.selectDefaultSuggestion();
+}
+
+function _setAsIgnored( text_num, word_num, flag ) {
+	// set the UI
+	this.wordWin.removeFocus( text_num, word_num );
+	// do the bookkeeping
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getTotalReplaced() {
+	var i_replaced = 0;
+	for( var i = 0; i < this.wordFlags.length; i++ ) {
+		for( var j = 0; j < this.wordFlags[i].length; j++ ) {
+			if(( this.wordFlags[i][j] == this.replWordFlag )
+			|| ( this.wordFlags[i][j] == this.replAllFlag )
+			|| ( this.wordFlags[i][j] == this.fromReplAll )) {
+				i_replaced++;
+			}
+		}
+	}
+	return i_replaced;
+}
+
+function _setWordText( text_num, word_num, newText, flag ) {
+	// set the UI and form inputs
+	this.wordWin.setText( text_num, word_num, newText );
+	// keep track of what happened to this word:
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getFormInputs( inputPattern ) {
+	var inputs = new Array();
+	for( var i = 0; i < document.forms.length; i++ ) {
+		for( var j = 0; j < document.forms[i].elements.length; j++ ) {
+			if( document.forms[i].elements[j].type.match( inputPattern )) {
+				inputs[inputs.length] = document.forms[i].elements[j]; 
+			}	
+		}
+	}
+	return inputs;
+}
+
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,49 @@
+.blend {
+	font-family: courier new;
+	font-size: 10pt;
+	border: 0;
+	margin-bottom:-1;
+}
+.normalLabel {
+	font-size:8pt;
+}
+.normalText {
+	font-family:arial, helvetica, sans-serif;
+	font-size:10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.plainText {
+	font-family: courier new, courier, monospace;
+	font-size: 10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.controlWindowBody {
+	font-family:arial, helvetica, sans-serif;
+	font-size:8pt;
+	padding: 7px ;		/* by FredCK */
+	margin: 0px ;		/* by FredCK */
+	/* color:000000;				by FredCK */
+	/* background-color:DADADA;		by FredCK */
+}
+.readonlyInput {
+	background-color:DADADA;
+	color:000000;
+	font-size:8pt;
+	width:392px;
+}
+.textDefault {
+	font-size:8pt;
+	width: 200px;
+}
+.buttonDefault {
+	width:90px;
+	height:22px;
+	font-size:8pt;
+}
+.suggSlct {
+	width:200px;
+	margin-top:2;
+	font-size:8pt;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,271 @@
+﻿////////////////////////////////////////////////////
+// wordWindow object
+////////////////////////////////////////////////////
+function wordWindow() {
+	// private properties
+	this._forms = [];
+
+	// private methods
+	this._getWordObject = _getWordObject;
+	//this._getSpellerObject = _getSpellerObject;
+	this._wordInputStr = _wordInputStr;
+	this._adjustIndexes = _adjustIndexes;
+	this._isWordChar = _isWordChar;
+	this._lastPos = _lastPos;
+	
+	// public properties
+	this.wordChar = /[a-zA-Z]/;
+	this.windowType = "wordWindow";
+	this.originalSpellings = new Array();
+	this.suggestions = new Array();
+	this.checkWordBgColor = "pink";
+	this.normWordBgColor = "white";
+	this.text = "";
+	this.textInputs = new Array();
+	this.indexes = new Array();
+	//this.speller = this._getSpellerObject();
+
+	// public methods
+	this.resetForm = resetForm;
+	this.totalMisspellings = totalMisspellings;
+	this.totalWords = totalWords;
+	this.totalPreviousWords = totalPreviousWords;
+	//this.getTextObjectArray = getTextObjectArray;
+	this.getTextVal = getTextVal;
+	this.setFocus = setFocus;
+	this.removeFocus = removeFocus;
+	this.setText = setText;
+	//this.getTotalWords = getTotalWords;
+	this.writeBody = writeBody;
+	this.printForHtml = printForHtml;
+}
+
+function resetForm() {
+	if( this._forms ) {
+		for( var i = 0; i < this._forms.length; i++ ) {
+			this._forms[i].reset();
+		}
+	}
+	return true;
+}
+
+function totalMisspellings() {
+	var total_words = 0;
+	for( var i = 0; i < this.textInputs.length; i++ ) {
+		total_words += this.totalWords( i );
+	}
+	return total_words;
+}
+
+function totalWords( textIndex ) {
+	return this.originalSpellings[textIndex].length;
+}
+
+function totalPreviousWords( textIndex, wordIndex ) {
+	var total_words = 0;
+	for( var i = 0; i <= textIndex; i++ ) {
+		for( var j = 0; j < this.totalWords( i ); j++ ) {
+			if( i == textIndex && j == wordIndex ) {
+				break;
+			} else {
+				total_words++;
+			}	
+		}
+	}
+	return total_words;
+}
+
+//function getTextObjectArray() {
+//	return this._form.elements;
+//}
+
+function getTextVal( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		return word.value;
+	}
+}
+
+function setFocus( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		if( word.type == "text" ) {
+			word.focus();
+			word.style.backgroundColor = this.checkWordBgColor;
+		}
+	}
+}
+
+function removeFocus( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		if( word.type == "text" ) {
+			word.blur();
+			word.style.backgroundColor = this.normWordBgColor;
+		}
+	}
+}
+
+function setText( textIndex, wordIndex, newText ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	var beginStr;
+	var endStr;
+	if( word ) {
+		var pos = this.indexes[textIndex][wordIndex];
+		var oldText = word.value;
+		// update the text given the index of the string
+		beginStr = this.textInputs[textIndex].substring( 0, pos );
+		endStr = this.textInputs[textIndex].substring( 
+			pos + oldText.length, 
+			this.textInputs[textIndex].length 
+		);
+		this.textInputs[textIndex] = beginStr + newText + endStr;
+		
+		// adjust the indexes on the stack given the differences in 
+		// length between the new word and old word. 
+		var lengthDiff = newText.length - oldText.length;
+		this._adjustIndexes( textIndex, wordIndex, lengthDiff );
+		
+		word.size = newText.length;
+		word.value = newText;
+		this.removeFocus( textIndex, wordIndex );
+	}
+}
+
+
+function writeBody() {
+	var d = window.document;
+	var is_html = false;
+
+	d.open();
+
+	// iterate through each text input.
+	for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {	
+		var end_idx = 0;
+		var begin_idx = 0;	
+		d.writeln( '<form name="textInput'+txtid+'">' );
+		var wordtxt = this.textInputs[txtid];
+		this.indexes[txtid] = [];
+
+		if( wordtxt ) {			
+			var orig = this.originalSpellings[txtid];
+			if( !orig ) break;
+
+			//!!! plain text, or HTML mode?
+			d.writeln( '<div class="plainText">' );
+			// iterate through each occurrence of a misspelled word. 
+			for( var i = 0; i < orig.length; i++ ) {
+				// find the position of the current misspelled word,
+				// starting at the last misspelled word. 
+				// and keep looking if it's a substring of another word
+				do {
+					begin_idx = wordtxt.indexOf( orig[i], end_idx );
+					end_idx = begin_idx + orig[i].length;
+					// word not found? messed up!
+					if( begin_idx == -1 ) break; 
+					// look at the characters immediately before and after 
+					// the word. If they are word characters we'll keep looking.
+					var before_char = wordtxt.charAt( begin_idx - 1 );
+					var after_char = wordtxt.charAt( end_idx );
+				} while ( 
+					this._isWordChar( before_char ) 
+					|| this._isWordChar( after_char )
+				);
+
+				// keep track of its position in the original text. 
+				this.indexes[txtid][i] = begin_idx;
+
+				// write out the characters before the current misspelled word
+				for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
+					// !!! html mode? make it html compatible
+					d.write( this.printForHtml( wordtxt.charAt( j )));
+				}
+
+				// write out the misspelled word. 
+				d.write( this._wordInputStr( orig[i] ));
+
+				// if it's the last word, write out the rest of the text
+				if( i == orig.length-1 ){
+					d.write( printForHtml( wordtxt.substr( end_idx )));
+				}			
+			}
+
+			d.writeln( '</div>' );
+			
+		}
+		d.writeln( '</form>' );
+	}
+	//for ( var j = 0; j < d.forms.length; j++ ) {
+	//	alert( d.forms[j].name );
+	//	for( var k = 0; k < d.forms[j].elements.length; k++ ) {
+	//		alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
+	//	}
+	//}	
+	
+	// set the _forms property
+	this._forms = d.forms;
+	d.close();
+}
+
+// return the character index in the full text after the last word we evaluated
+function _lastPos( txtid, idx ) {
+	if( idx > 0 )
+		return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
+	else
+		return 0;
+}
+
+function printForHtml( n ) {
+	return n ;		// by FredCK
+	
+	var htmlstr = n;
+	if( htmlstr.length == 1 ) {
+		// do simple case statement if it's just one character
+		switch ( n ) {
+			case "\n":
+				htmlstr = '<br/>';
+				break;
+			case "<":
+				htmlstr = '&lt;';
+				break;
+			case ">":
+				htmlstr = '&gt;';
+				break;
+		}
+		return htmlstr;
+	} else {
+		htmlstr = htmlstr.replace( /</g, '&lt' );
+		htmlstr = htmlstr.replace( />/g, '&gt' );
+		htmlstr = htmlstr.replace( /\n/g, '<br/>' );
+		return htmlstr;
+	}
+}
+
+function _isWordChar( letter ) {
+	if( letter.search( this.wordChar ) == -1 ) {
+		return false;
+	} else {
+		return true;
+	}
+}
+
+function _getWordObject( textIndex, wordIndex ) {
+	if( this._forms[textIndex] ) {
+		if( this._forms[textIndex].elements[wordIndex] ) {
+			return this._forms[textIndex].elements[wordIndex];
+		}
+	}
+	return null;
+}
+
+function _wordInputStr( word ) {
+	var str = '<input readonly ';
+	str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
+	return str;
+}
+
+function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
+	for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
+		this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
+	}
+}
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_spellerpages.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_spellerpages.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_spellerpages.html
+ * 	Spell Check dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Spell Check</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="fck_spellerpages/spellerpages/spellChecker.js"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+
+window.onload = function()
+{
+	document.getElementById('txtHtml').value = oEditor.FCK.GetHTML() ;
+
+	var oSpeller = new spellChecker( document.getElementById('txtHtml') ) ;
+	oSpeller.OnFinished = oSpeller_OnFinished ;
+	oSpeller.openChecker() ;
+}
+
+function OnSpellerControlsLoad( controlsWindow )
+{
+	// Translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( controlsWindow.document ) ;
+}
+
+function oSpeller_OnFinished( numberOCorrections )
+{
+	if ( numberOCorrections > 0 )
+		oEditor.FCK.SetHTML( document.getElementById('txtHtml').value ) ;
+	window.parent.Cancel() ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no" style="padding:0px;">
+		<input type="hidden" id="txtHtml" value="">
+		<iframe id="frmSpell" src="../fckblank.html" name="spellchecker" width="100%" height="100%" frameborder="no"></iframe>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_tablecell.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_tablecell.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_tablecell.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_tablecell.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,215 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_tablecell.html
+ * 	Cell properties dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<html>
+	<head>
+		<title>Table Cell Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+// Array of selected Cells
+var aCells = oEditor.FCKTableHandler.GetSelectedCells() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	SetStartupValue() ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function SetStartupValue()
+{
+	if ( aCells.length > 0 )
+	{
+		var oCell = aCells[0] ;
+		var iWidth = GetAttribute( oCell, 'width' ) ;
+
+		if ( iWidth.indexOf && iWidth.indexOf( '%' ) >= 0 )
+		{
+			iWidth = iWidth.substr( 0, iWidth.length - 1 ) ;
+			GetE('selWidthType').value = 'percent' ;
+		}
+
+		if ( oCell.attributes['noWrap'] != null && oCell.attributes['noWrap'].specified )
+			GetE('selWordWrap').value = !oCell.noWrap ;
+
+		GetE('txtWidth').value			= iWidth ;
+		GetE('txtHeight').value			= GetAttribute( oCell, 'height' ) ;
+		GetE('selHAlign').value			= GetAttribute( oCell, 'align' ) ;
+		GetE('selVAlign').value			= GetAttribute( oCell, 'vAlign' ) ;
+		GetE('txtRowSpan').value		= GetAttribute( oCell, 'rowSpan' ) ;
+		GetE('txtCollSpan').value		= GetAttribute( oCell, 'colSpan' ) ;
+		GetE('txtBackColor').value		= GetAttribute( oCell, 'bgColor' ) ;
+		GetE('txtBorderColor').value	= GetAttribute( oCell, 'borderColor' ) ;
+//		GetE('cmbFontStyle').value		= oCell.className ;
+	}
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+	for( i = 0 ; i < aCells.length ; i++ )
+	{
+		if ( GetE('txtWidth').value.length > 0 )
+			aCells[i].width	= GetE('txtWidth').value + ( GetE('selWidthType').value == 'percent' ? '%' : '') ;
+		else
+			aCells[i].removeAttribute( 'width', 0 ) ;
+
+		if ( GetE('selWordWrap').value == 'false' )
+			aCells[i].noWrap = true ;
+		else
+			aCells[i].removeAttribute( 'noWrap' ) ;
+
+		SetAttribute( aCells[i], 'height'		, GetE('txtHeight').value ) ;
+		SetAttribute( aCells[i], 'align'		, GetE('selHAlign').value ) ;
+		SetAttribute( aCells[i], 'vAlign'		, GetE('selVAlign').value ) ;
+		SetAttribute( aCells[i], 'rowSpan'		, GetE('txtRowSpan').value ) ;
+		SetAttribute( aCells[i], 'colSpan'		, GetE('txtCollSpan').value ) ;
+		SetAttribute( aCells[i], 'bgColor'		, GetE('txtBackColor').value ) ;
+		SetAttribute( aCells[i], 'borderColor'	, GetE('txtBorderColor').value ) ;
+//		SetAttribute( aCells[i], 'className'	, GetE('cmbFontStyle').value ) ;
+	}
+
+	return true ;
+}
+
+function SelectBackColor( color )
+{
+	if ( color && color.length > 0 )
+		GetE('txtBackColor').value = color ;
+}
+
+function SelectBorderColor( color )
+{
+	if ( color && color.length > 0 )
+		GetE('txtBorderColor').value = color ;
+}
+
+function SelectColor( wich )
+{
+	oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table cellSpacing="0" cellPadding="0" width="100%" border="0" height="100%">
+			<tr>
+				<td>
+					<table cellSpacing="1" cellPadding="1" width="100%" border="0">
+						<tr>
+							<td>
+								<table cellSpacing="0" cellPadding="0" border="0">
+									<tr>
+										<td nowrap><span fckLang="DlgCellWidth">Width</span>:</td>
+										<td>&nbsp;<input onkeypress="return IsDigit();" id="txtWidth" type="text" maxLength="4"
+												size="3" name="txtWidth">&nbsp;<select id="selWidthType" name="selWidthType">
+												<option fckLang="DlgCellWidthPx" value="pixels" selected>pixels</option>
+												<option fckLang="DlgCellWidthPc" value="percent">percent</option>
+											</select></td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellHeight">Height</span>:</td>
+										<td>&nbsp;<INPUT id="txtHeight" type="text" maxLength="4" size="3" name="txtHeight" onkeypress="return IsDigit();">&nbsp;<span fckLang="DlgCellWidthPx">pixels</span></td>
+									</tr>
+									<tr>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellWordWrap">Word Wrap</span>:</td>
+										<td>&nbsp;<select id="selWordWrap" name="selAlignment">
+												<option fckLang="DlgCellWordWrapNotSet" value="" selected>&lt;Not set&gt;</option>
+												<option fckLang="DlgCellWordWrapYes" value="true">Yes</option>
+												<option fckLang="DlgCellWordWrapNo" value="false">No</option>
+											</select></td>
+									</tr>
+									<tr>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellHorAlign">Horizontal Alignment</span>:</td>
+										<td>&nbsp;<select id="selHAlign" name="selAlignment">
+												<option fckLang="DlgCellHorAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+												<option fckLang="DlgCellHorAlignLeft" value="left">Left</option>
+												<option fckLang="DlgCellHorAlignCenter" value="center">Center</option>
+												<option fckLang="DlgCellHorAlignRight" value="right">Right</option>
+											</select></td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellVerAlign">Vertival Alignement</span>:</td>
+										<td>&nbsp;<select id="selVAlign" name="selAlignment">
+												<option fckLang="DlgCellVerAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+												<option fckLang="DlgCellVerAlignTop" value="top">Top</option>
+												<option fckLang="DlgCellVerAlignMiddle" value="middle">Middle</option>
+												<option fckLang="DlgCellVerAlignBottom" value="bottom">Bottom</option>
+												<option fckLang="DlgCellVerAlignBaseline" value="baseline">Baseline</option>
+											</select></td>
+									</tr>
+								</table>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;</td>
+							<td align="right">
+								<table cellSpacing="0" cellPadding="0" border="0">
+									<tr>
+										<td nowrap><span fckLang="DlgCellRowSpan">Rows Span</span>:</td>
+										<td>&nbsp; <input onkeypress="return IsDigit();" id="txtRowSpan" type="text" maxLength="3"
+												size="2" name="txtRows"></td>
+										<td></td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellCollSpan">Columns Span</span>:</td>
+										<td>&nbsp; <input onkeypress="return IsDigit();" id="txtCollSpan" type="text" maxLength="2"
+												size="2" name="txtColumns"></td>
+										<td></td>
+									</tr>
+									<tr>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellBackColor">Background Color</span>:</td>
+										<td>&nbsp;<input id="txtBackColor" type="text" size="8" name="txtCellSpacing"></td>
+										<td>&nbsp; <input type="button" fckLang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Back' )"></td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgCellBorderColor">Border Color</span>:</td>
+										<td>&nbsp;<input id="txtBorderColor" type="text" size="8" name="txtCellPadding"></td>
+										<td>&nbsp; <input type="button" fckLang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Border' )"></td>
+									</tr>
+								</table>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_table.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_table.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_table.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_table.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,274 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_table.html
+ * 	Table dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<html>
+	<head>
+		<title>Table Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+// Gets the table if there is one selected.
+var table ;
+var e = oEditor.FCKSelection.GetSelectedElement() ;
+
+if ( ! e && document.location.search.substr(1) == 'Parent' )
+	e = oEditor.FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+if ( e && e.tagName == "TABLE" )
+	table = e ;
+
+// Fired when the window loading process is finished. It sets the fields with the
+// actual values if a table is selected in the editor.
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if (table)
+	{
+		document.getElementById('txtRows').value    = table.rows.length ;
+		document.getElementById('txtColumns').value = table.rows[0].cells.length ;
+
+		// Gets the value from the Width or the Style attribute
+		var iWidth  = (table.style.width  ? table.style.width  : table.width ) ;
+		var iHeight = (table.style.height ? table.style.height : table.height ) ;
+
+		if (iWidth.indexOf('%') >= 0)			// Percentual = %
+		{
+			iWidth = parseInt( iWidth.substr(0,iWidth.length - 1) ) ;
+			document.getElementById('selWidthType').value = "percent" ;
+		}
+		else if (iWidth.indexOf('px') >= 0)		// Style Pixel = px
+		{																										  //
+			iWidth = iWidth.substr(0,iWidth.length - 2);
+			document.getElementById('selWidthType').value = "pixels" ;
+		}
+		
+		if (iHeight && iHeight.indexOf('px') >= 0)		// Style Pixel = px
+			iHeight = iHeight.substr(0,iHeight.length - 2);
+		
+		document.getElementById('txtWidth').value		= iWidth ;
+		document.getElementById('txtHeight').value		= iHeight ;
+		document.getElementById('txtBorder').value		= table.border ;
+		document.getElementById('selAlignment').value	= table.align ;
+		document.getElementById('txtCellPadding').value	= table.cellPadding	;
+		document.getElementById('txtCellSpacing').value	= table.cellSpacing	;
+//		document.getElementById('cmbFontStyle').value	= table.className ;
+
+		if (table.caption) document.getElementById('txtCaption').value = table.caption.innerHTML ;
+		
+		document.getElementById('txtRows').disabled    = true ;
+		document.getElementById('txtColumns').disabled = true ;
+	}
+	
+	window.parent.SetOkButton( true ) ;	
+	window.parent.SetAutoSize( true ) ;	
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+	var bExists = ( table != null ) ;
+	
+	if ( ! bExists )
+	{
+		table = document.createElement( "TABLE" ) ;
+	}
+
+	// Removes the Width and Height styles
+	if ( bExists && table.style.width )		table.style.width = null ; //.removeAttribute("width") ;
+	if ( bExists && table.style.height )	table.style.height = null ; //.removeAttribute("height") ;
+	
+	table.width			= document.getElementById('txtWidth').value + ( document.getElementById('selWidthType').value == "percent" ? "%" : "") ;
+	table.height		= document.getElementById('txtHeight').value ;
+	table.border		= document.getElementById('txtBorder').value ;
+	table.align			= document.getElementById('selAlignment').value ;
+	table.cellPadding	= document.getElementById('txtCellPadding').value ;
+	table.cellSpacing	= document.getElementById('txtCellSpacing').value ;
+//	table.className		= cmbFontStyle.value ;
+	
+	if ( document.getElementById('txtCaption').value != '')
+	{
+		if (! table.caption) table.createCaption() ;
+		table.caption.innerHTML = document.getElementById('txtCaption').value ;
+	}
+	else if ( bExists && table.caption )
+	{
+		if ( document.all )
+			table.caption.innerHTML = '' ;	// TODO: It causes an IE internal error if using removeChild.
+		else
+			table.caption.parentNode.removeChild( table.caption ) ;
+	}
+		
+	if (! bExists)
+	{
+		var iRows = document.getElementById('txtRows').value ;
+		var iCols = document.getElementById('txtColumns').value ;
+		
+		for ( var r = 0 ; r < iRows ; r++ )
+		{
+			var oRow = table.insertRow(-1) ;
+			for ( var c = 0 ; c < iCols ; c++ )
+			{
+				var oCell = oRow.insertCell(-1) ;
+				if ( oEditor.FCKBrowserInfo.IsGecko )
+					oCell.innerHTML = '<br _moz_editor_bogus_node="TRUE">' ;
+				//oCell.innerHTML = "&nbsp;" ;
+			}
+		}
+		
+		oEditor.FCKUndo.SaveUndoStep() ;
+		
+		// START iCM MODIFICATIONS	
+		// Amended to ensure that newly inserted tables are not incorrectly nested in P tags, etc
+		// We insert the table first and then rectify any nestings afterwards so we can re-use the
+		// FCKTablesProcessor function that corrects tables on SetHTML()
+		/*
+		table = oEditor.FCK.InsertElementAndGetIt( table ) ;
+		if ( !oEditor.FCKConfig.UseBROnCarriageReturn )
+		{
+			oEditor.FCKTablesProcessor.CheckTableNesting( table ) ;
+		}
+		*/
+		// END iCM MODIFICATIONS	
+		
+		oEditor.FCK.InsertElement( table ) ;
+	}
+	
+	return true ;
+}
+
+function IsDigit( e )
+{
+	e = e || event ;
+	var iCode = ( e.keyCode || e.charCode ) ;
+	return 
+		(
+			( iCode >= 48 && iCode <= 57 )		// Numbers
+			|| (iCode >= 37 && iCode <= 40)		// Arrows
+			|| iCode == 8		// Backspace
+			|| iCode == 46		// Delete
+		) ;
+}
+
+		</script>
+	</head>
+	<body bottommargin="5" leftmargin="5" topmargin="5" rightmargin="5" scroll="no" style="OVERFLOW: hidden">
+		<table id="otable" cellSpacing="0" cellPadding="0" width="100%" border="0" height="100%">
+			<tr>
+				<td>
+					<table cellSpacing="1" cellPadding="1" width="100%" border="0">
+						<tr>
+							<td valign="top">
+								<table cellSpacing="0" cellPadding="0" border="0">
+									<tr>
+										<td><span fckLang="DlgTableRows">Rows</span>:</td>
+										<td>&nbsp;<input id="txtRows" type="text" maxLength="3" size="2" value="3" name="txtRows" onkeypress="return IsDigit(event);"></td>
+									</tr>
+									<tr>
+										<td><span fckLang="DlgTableColumns">Columns</span>:</td>
+										<td>&nbsp;<input id="txtColumns" type="text" maxLength="2" size="2" value="2" name="txtColumns" onkeypress="return IsDigit(event);"></td>
+									</tr>
+									<tr>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+									</tr>
+									<tr>
+										<td><span fckLang="DlgTableBorder">Border size</span>:</td>
+										<td>&nbsp;<INPUT id="txtBorder" type="text" maxLength="2" size="2" value="1" name="txtBorder" onkeypress="return IsDigit(event);"></td>
+									</tr>
+									<tr>
+										<td><span fckLang="DlgTableAlign">Alignment</span>:</td>
+										<td>&nbsp;<select id="selAlignment" name="selAlignment">
+												<option fckLang="DlgTableAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+												<option fckLang="DlgTableAlignLeft" value="left">Left</option>
+												<option fckLang="DlgTableAlignCenter" value="center">Center</option>
+												<option fckLang="DlgTableAlignRight" value="right">Right</option>
+											</select></td>
+									</tr>
+								</table>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;</td>
+							<td align="right" valign="top">
+								<table cellSpacing="0" cellPadding="0" border="0">
+									<tr>
+										<td><span fckLang="DlgTableWidth">Width</span>:</td>
+										<td>&nbsp;<input id="txtWidth" type="text" maxLength="4" size="3" value="200" name="txtWidth" onkeypress="return IsDigit(event);"></td>
+										<td>&nbsp;<select id="selWidthType" name="selWidthType">
+												<option fckLang="DlgTableWidthPx" value="pixels" selected>pixels</option>
+												<option fckLang="DlgTableWidthPc" value="percent">percent</option>
+											</select></td>
+									</tr>
+									<tr>
+										<td><span fckLang="DlgTableHeight">Height</span>:</td>
+										<td>&nbsp;<INPUT id="txtHeight" type="text" maxLength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);"></td>
+										<td>&nbsp;<span fckLang="DlgTableWidthPx">pixels</span></td>
+									</tr>
+									<tr>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+										<td>&nbsp;</td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgTableCellSpace">Cell spacing</span>:</td>
+										<td>&nbsp;<input id="txtCellSpacing" type="text" maxLength="2" size="2" value="1" name="txtCellSpacing"
+												onkeypress="return IsDigit(event);"></td>
+										<td>&nbsp;</td>
+									</tr>
+									<tr>
+										<td nowrap><span fckLang="DlgTableCellPad">Cell padding</span>:</td>
+										<td>&nbsp;<input id="txtCellPadding" type="text" maxLength="2" size="2" value="1" name="txtCellPadding"
+												onkeypress="return IsDigit(event);"></td>
+										<td>&nbsp;</td>
+									</tr>
+								</table>
+							</td>
+						</tr>
+					</table>
+					<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+					<!--
+						<tr>
+						<td nowrap>
+						<span fcklang="DlgClassName">Class Name</span>:</td>
+							<td>&nbsp;</td>
+										<td>
+										<script type="text/javascript">
+//											var tbstyles = new TBCombo( "FontStyle"		, "null"			, "", oEditor.config.StyleNames, oEditor.config.StyleValues, 'CheckStyle("cmbFontStyle")');
+//											document.write(tbstyles.GetHTML());
+										</script></td>
+						</tr>
+					-->
+						<tr>
+							<td nowrap><span fckLang="DlgTableCaption">Caption</span>:</td>
+							<td>&nbsp;</td>
+							<td width="100%">&nbsp;
+								<input id="txtCaption" type="text" style="WIDTH: 100%"></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_template/fck_templateitem.htc 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/fck_templateitem.htc
--- 1.3.11sr1/fckeditor/editor/dialog/fck_template/fck_templateitem.htc	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/fck_templateitem.htc	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,26 @@
+<public:component lightweight="true">
+
+<public:attach event="onmouseover" onevent="OnMouseOver()" />
+<public:attach event="onmouseout" onevent="OnMouseOut()" />
+<public:attach event="onclick" onevent="OnClick()" />
+
+<script language="javascript">
+
+function OnMouseOver()
+{
+	this.className += ' PopupSelectionBox' ;
+}
+
+function OnMouseOut()
+{
+	this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
+}
+
+function OnClick()
+{
+	SelectTemplate( this.TplIndex ) ;
+}
+
+</script>
+
+</public:component>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_template/fck_template_moz-bindings.xml 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/fck_template_moz-bindings.xml
--- 1.3.11sr1/fckeditor/editor/dialog/fck_template/fck_template_moz-bindings.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/fck_template_moz-bindings.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" ?> 
+<bindings xmlns="http://www.mozilla.org/xbl">
+	<binding id="templateitem">
+		<handlers>
+			<handler event="mouseover">
+				this.className += ' PopupSelectionBox' ;
+			</handler>
+			<handler event="mouseout">
+				this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
+			</handler>
+			<handler event="click">
+				SelectTemplate( this.TplIndex ) ;
+			</handler>
+		</handlers>
+	</binding>
+</bindings>
\ No newline at end of file
Files 1.3.11sr1/fckeditor/editor/dialog/fck_template/images/template1.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/images/template1.gif differ
Files 1.3.11sr1/fckeditor/editor/dialog/fck_template/images/template2.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/images/template2.gif differ
Files 1.3.11sr1/fckeditor/editor/dialog/fck_template/images/template3.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_template/images/template3.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_template.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_template.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_template.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_template.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,210 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_template.html
+ * 	Template selection dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<style>
+			.TplList
+			{
+				border: #dcdcdc 2px solid;
+				background-color: #ffffff;
+				overflow: auto;
+				width: 90%;
+			}
+
+			.TplItem
+			{
+				margin: 5px;
+				padding: 7px;
+				border: #eeeeee 1px solid;
+			}
+
+			.TplItem TABLE
+			{
+				display: inline;
+			}
+
+			.TplTitle
+			{
+				font-weight: bold;
+			}
+		</style>
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script language="javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+window.onload = function()
+{
+	// Set the right box height (browser dependent).
+	GetE('eList').style.height = document.all ? '100%' : '295px' ;
+
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	LoadTemplatesXml() ;
+}
+
+function LoadTemplatesXml()
+{
+	if ( !FCK._Templates )
+	{
+		GetE('eLoading').style.display = '' ;
+
+		// Create the Templates array.
+		FCK._Templates = new Array() ;
+
+		// Load the XML file.
+		var oXml = new oEditor.FCKXml() ;
+		oXml.LoadUrl( FCKConfig.TemplatesXmlPath ) ;
+
+		// Get the Images Base Path.
+		var oAtt = oXml.SelectSingleNode( 'Templates/@imagesBasePath' ) ;
+		var sImagesBasePath = oAtt ? oAtt.value : '' ;
+
+		// Get the "Template" nodes defined in the XML file.
+		var aTplNodes = oXml.SelectNodes( 'Templates/Template' ) ;
+
+		for ( var i = 0 ; i < aTplNodes.length ; i++ )
+		{
+			var oNode = aTplNodes[i]
+
+			var oTemplate = new Object() ;
+
+			var oPart ;
+
+			// Get the Template Title.
+			if ( oPart = oNode.attributes.getNamedItem('title') )
+				oTemplate.Title = oPart.value ;
+			else
+				oTemplate.Title = 'Template ' + ( i + 1 ) ;
+
+			// Get the Template Description.
+			if ( oPart = oXml.SelectSingleNode( 'Description', oNode ) )
+				oTemplate.Description = oPart.text ? oPart.text : oPart.textContent ;
+
+			// Get the Template Image.
+			if ( oPart = oNode.attributes.getNamedItem('image') )
+				oTemplate.Image = sImagesBasePath + oPart.value ;
+
+			// Get the Template HTML.
+			if ( oPart = oXml.SelectSingleNode( 'Html', oNode ) )
+				oTemplate.Html = oPart.text ? oPart.text : oPart.textContent ;
+			else
+			{
+				alert( 'No HTML defined for template index ' + i + '. Please review the "' + FCKConfig.TemplatesXmlPath + '" file.' ) ;
+				continue ;
+			}
+
+			FCK._Templates[ FCK._Templates.length ] = oTemplate ;
+		}
+
+		GetE('eLoading').style.display = 'none' ;
+	}
+
+	if ( FCK._Templates.length == 0 )
+		GetE('eEmpty').style.display = '' ;
+	else
+	{
+		for ( var i = 0 ; i < FCK._Templates.length ; i++ )
+		{
+			var oTemplate = FCK._Templates[i] ;
+
+			var oItemDiv = GetE('eList').appendChild( document.createElement( 'DIV' ) ) ;
+			oItemDiv.TplIndex = i ;
+			oItemDiv.className = 'TplItem' ;
+
+			// Build the inner HTML of our new item DIV.
+			var sInner = '<table><tr>' ;
+
+			if ( oTemplate.Image )
+				sInner += '<td valign="top"><img src="' + oTemplate.Image + '"><\/td>' ;
+
+			sInner += '<td valign="top"><div class="TplTitle">' + oTemplate.Title + '<\/div>' ;
+
+			if ( oTemplate.Description )
+				sInner += '<div>' + oTemplate.Description + '<\/div>' ;
+
+			sInner += '<\/td><\/tr><\/table>' ;
+
+			oItemDiv.innerHTML = sInner ;
+			
+			oItemDiv.onmouseover = ItemDiv_OnMouseOver ;
+			oItemDiv.onmouseout = ItemDiv_OnMouseOut ;
+			oItemDiv.onclick = ItemDiv_OnClick ;
+		}
+	}
+}
+
+function ItemDiv_OnMouseOver()
+{
+	this.className += ' PopupSelectionBox' ;
+}
+
+function ItemDiv_OnMouseOut()
+{
+	this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
+}
+
+function ItemDiv_OnClick()
+{
+	SelectTemplate( this.TplIndex ) ;
+}
+
+function SelectTemplate( index )
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	FCK.SetHTML( FCK._Templates[index].Html ) ;
+	window.parent.Cancel() ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table width="100%" height="100%">
+			<tr>
+				<td align="center">
+					<span fckLang="DlgTemplatesSelMsg">Please select the template to open in the editor<br>
+					(the actual contents will be lost):</span>
+				</td>
+			</tr>
+			<tr>
+				<td height="100%" align="center">
+					<div id="eList" align="left" class="TplList">
+						<div id="eLoading" align="center" style="DISPLAY: none">
+							<br>
+							<span fckLang="DlgTemplatesLoading">Loading templates list. Please wait...</span>
+						</div>
+						<div id="eEmpty" align="center" style="DISPLAY: none">
+							<br>
+							<span fckLang="DlgTemplatesNoTpl">(No templates defined)</span>
+						</div>
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_textarea.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_textarea.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_textarea.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_textarea.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_textarea.html
+ * 	Text Area dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Text Area Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'TEXTAREA' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtCols').value		= GetAttribute( oActiveEl, 'cols' ) ;
+		GetE('txtRows').value		= GetAttribute( oActiveEl, 'rows' ) ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'TEXTAREA' ) ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'cols', GetE('txtCols').value ) ;
+	SetAttribute( oActiveEl, 'rows', GetE('txtRows').value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style='OVERFLOW: hidden' scroll='no'>
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgTextareaName">Name</span><br>
+								<input type="text" id="txtName" style="WIDTH: 100%">
+								<span fckLang="DlgTextareaCols">Collumns</span><br>
+								<input id="txtCols" type="text" size="5">
+								<br>
+								<span fckLang="DlgTextareaRows">Rows</span><br>
+								<input id="txtRows" type="text" size="5">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_textfield.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_textfield.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_textfield.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_textfield.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_textfield.html
+ * 	Text field dialog window.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Text Field Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && ( oActiveEl.type == 'text' || oActiveEl.type == 'password' ) )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtValue').value	= oActiveEl.value ;
+		GetE('txtSize').value	= GetAttribute( oActiveEl, 'size' ) ;
+		GetE('txtMax').value	= GetAttribute( oActiveEl, 'maxLength' ) ;
+		GetE('txtType').value	= oActiveEl.type ;
+
+		GetE('txtType').disabled = true ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( isNaN( GetE('txtMax').value ) || GetE('txtMax').value < 0 )
+	{
+		alert( "Maximum characters must be a positive number." ) ;
+		GetE('txtMax').focus() ;
+		return false ;
+	}
+	else if( isNaN( GetE('txtSize').value ) || GetE('txtSize').value < 0 )
+	{
+		alert( "Width must be a positive number." ) ;
+		GetE('txtSize').focus() ;
+		return false ;
+	}
+
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = GetE('txtType').value ;
+		oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value'	, GetE('txtValue').value ) ;
+	SetAttribute( oActiveEl, 'size'		, GetE('txtSize').value ) ;
+	SetAttribute( oActiveEl, 'maxlength', GetE('txtMax').value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table cellSpacing="0" cellPadding="0" border="0">
+						<tr>
+							<td>
+								<span fckLang="DlgTextName">Name</span><br>
+								<input id="txtName" type="text" size="20">
+							</td>
+							<td></td>
+							<td>
+								<span fckLang="DlgTextValue">Value</span><br>
+								<input id="txtValue" type="text" size="25">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgTextCharWidth">Character Width</span><br>
+								<input id="txtSize" type="text" size="5">
+							</td>
+							<td></td>
+							<td>
+								<span fckLang="DlgTextMaxChars">Maximum Characters</span><br>
+								<input id="txtMax" type="text" size="5">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgTextType">Type</span><br>
+								<select id="txtType">
+									<option value="text" selected fckLang="DlgTextTypeText">Text</option>
+									<option value="password" fckLang="DlgTextTypePass">Password</option>
+								</select>
+							</td>
+							<td>&nbsp;</td>
+							<td></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Files 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/00.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/00.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/data.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/data.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/data.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/data.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,68 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: data.js
+ * 	Scripts for the fck_universalkey.html page.
+ * 	Definition des 104 caracteres en hexa unicode.
+ * 
+ * File Authors:
+ * 		Michel Staelens (michel.staelens@wanadoo.fr)
+ * 		Abdul-Aziz Al-Oraij (top7up@hotmail.com)
+ */
+
+var Maj = new Array() ;
+var Min = new Array() ;
+
+Maj["Arabic"]				="0651|0021|0040|0023|0024|0025|005E|0026|002A|0029|0028|005F|002B|064E|064B|064F|064C|0625|0625|2018|00F7|00D7|061B|003C|003E|0650|064D|005D|005B|0623|0623|0640|060C|002F|003A|0022|007E|0652|007D|007B|0622|0622|2019|002C|002E|061F|007C|0020|0020|0020|0020|0020" ;
+Min["Arabic"]				="0630|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0636|0635|062B|0642|0641|063A|0639|0647|062E|062D|062C|062F|0634|0633|064A|0628|0644|0627|062A|0646|0645|0643|0637|0626|0621|0624|0631|0644|0627|0649|0629|0648|0632|0638|005C|0020|0020|0020|0020" ;
+Maj["Belarusian (C)"]		="0401|0021|0022|2116|003B|0025|003A|003F|002A|0028|0029|005F|002B|0419|0426|0423|041A|0415|041D|0413|0428|040E|0417|0425|0027|0424|042B|0412|0410|041F|0420|041E|041B|0414|0416|042D|042F|0427|0421|041C|0406|0422|042C|0411|042E|002C|0020|0020|0020|0020|0020|0020" ;
+Min["Belarusian (C)"]		="0451|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0439|0446|0443|043A|0435|043D|0433|0448|045E|0437|0445|0027|0444|044B|0432|0430|043F|0440|043E|043B|0434|0436|044D|044F|0447|0441|043C|0456|0442|044C|0431|044E|002E|0020|0020|0020|0020|0020|0020" ;
+Maj["Bulgarian (C)"]		="007E|0021|003F|002B|0022|0025|003D|003A|002F|005F|2116|0406|0056|044B|0423|0415|0418|0428|0429|041A|0421|0414|0417|0426|00A7|042C|042F|0410|041E|0416|0413|0422|041D|0412|041C|0427|042E|0419|042A|042D|0424|0425|041F|0420|041B|0411|0029|0020|0020|0020|0020|0020" ;
+Min["Bulgarian (C)"]		="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|002E|002C|0443|0435|0438|0448|0449|043A|0441|0434|0437|0446|003B|044C|044F|0430|043E|0436|0433|0442|043D|0432|043C|0447|044E|0439|044A|044D|0444|0445|043F|0440|043B|0431|0028|0020|0020|0020|0020|0020" ;
+Maj["Croatian (L)"]			="00B8|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|00A8|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0160|0110|0041|0053|0044|0046|0047|0048|004A|004B|004C|010C|0106|0059|0058|0043|0056|0042|004E|004D|017D|003B|003A|003C|003E|005F|002D|002A|002B" ;
+Min["Croatian (L)"]			="00B8|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|00A8|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|0161|0111|0061|0073|0064|0066|0067|0068|006A|006B|006C|010D|0107|0079|0078|0063|0076|0062|006E|006D|017E|002C|002E|003C|003E|005F|002D|002A|002B" ;
+Maj["Czech (L)"]			="00B0|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0025|02C7|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|002F|0028|0041|0053|0044|0046|0047|0048|004A|004B|004C|0022|0027|0059|0058|0043|0056|0042|004E|004D|003F|003A|005F|005B|007B|0021|0020|0148|010F" ;
+Min["Czech (L)"]			="003B|002B|011B|0161|010D|0159|017E|00FD|00E1|00ED|00E9|003D|00B4|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|00FA|0029|0061|0073|0064|0066|0067|0068|006A|006B|006C|016F|00A7|0079|0078|0063|0076|0062|006E|006D|002C|002E|002D|005D|007D|00A8|0040|00F3|0165" ;
+Maj["Danish (L)"]			="00A7|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|0060|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|00C5|005E|0041|0053|0044|0046|0047|0048|004A|004B|004C|00C6|00D8|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|002A|005F|007B|007D|005C|007E" ;
+Min["Danish (L)"]			="00BD|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00B4|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|00E5|00A8|0061|0073|0064|0066|0067|0068|006A|006B|006C|00E6|00F8|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|0027|002D|005B|005D|007C|0040" ;
+Maj["Farsi"]				="0020|0021|0040|0023|0024|0025|005E|0026|002A|0029|0028|005F|002B|0020|0020|0020|0020|0020|0020|0020|00F7|00D7|0020|007D|007B|0020|0020|005D|005B|0623|0622|0640|060C|061B|003A|0022|007E|0020|0020|0020|0020|0020|2019|003E|003C|061F|007C|0020|0020|0020|0020|0020"
+Min["Farsi"]				="067E|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0636|0635|062B|0642|0641|063A|0639|0647|062E|062D|062C|0686|0634|0633|064A|0628|0644|0627|062A|0646|0645|0643|06AF|0638|0637|0632|0631|0630|062F|0621|0648|002E|002F|005C|0020|0020|0020|0020|0020"
+Maj["Finnish (L)"]			="00A7|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|0060|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|00C5|005E|0041|0053|0044|0046|0047|0048|004A|004B|004C|00D6|00C4|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|002A|005F|007B|007D|005C|007E" ;
+Min["Finnish (L)"]			="00BD|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00B4|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|00E5|00A8|0061|0073|0064|0066|0067|0068|006A|006B|006C|00F6|00E4|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|0027|002D|005B|005D|007C|0040" ;
+Maj["French (L)"]			="0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|00B0|002B|0023|0041|005A|0045|0052|0054|0059|0055|0049|004F|0050|00A8|0025|0051|0053|0044|0046|0047|0048|004A|004B|004C|004D|00B5|0057|0058|0043|0056|0042|004E|003F|002E|002F|00A7|003C|005B|007B|00A3|007E|0020" ;
+Min["French (L)"]			="0026|00E9|0022|0027|0028|002D|00E8|005F|00E7|00E0|0029|003D|0040|0061|007A|0065|0072|0074|0079|0075|0069|006F|0070|005E|00F9|0071|0073|0064|0066|0067|0068|006A|006B|006C|006D|002A|0077|0078|0063|0076|0062|006E|002C|003B|003A|0021|003E|005D|007D|0024|007E|0020" ;
+Maj["Greek"]				="007E|0021|0040|0023|0024|0025|0390|0026|03B0|0028|0029|005F|002B|003A|03A3|0395|03A1|03A4|03A5|0398|0399|039F|03A0|0386|038F|0391|03A3|0394|03A6|0393|0397|039E|039A|039B|038C|0022|0396|03A7|03A8|03A9|0392|039D|039C|003C|003E|003F|0388|0389|038A|03AA|03AB|038E" ;
+Min["Greek"]				="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|003B|03C2|03B5|03C1|03C4|03C5|03B8|03B9|03BF|03C0|03AC|03CE|03B1|03C3|03B4|03C6|03B3|03B7|03BE|03BA|03BB|03CC|0027|03B6|03C7|03C8|03C9|03B2|03BD|03BC|002C|002E|002F|03AD|03AE|03AF|03CA|03CB|03CD" ;
+Maj["Hebrew"]				="007E|0021|0040|0023|0024|0025|005E|0026|002A|0028|0029|005F|002B|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|007B|007D|0041|0053|0044|0046|0047|0048|004A|004B|004C|003A|0022|005A|0058|0043|0056|0042|004E|004D|003C|003E|003F|0020|0020|0020|0020|0020|0020" ;
+Min["Hebrew"]				="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|002F|0027|05E7|05E8|05D0|05D8|05D5|05DF|05DD|05E4|005B|005D|05E9|05D3|05D2|05DB|05E2|05D9|05D7|05DC|05DA|05E3|002C|05D6|05E1|05D1|05D4|05E0|05DE|05E6|05EA|05E5|002E|0020|0020|0020|0020|0020|0020" ;
+Maj["Hungarian (L)"]		="00A7|0027|0022|002B|0021|0025|002F|003D|0028|0029|00ED|00DC|00D3|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0150|00DA|0041|0053|0044|0046|0047|0048|004A|004B|004C|00C9|00C1|0170|00CD|0059|0058|0043|0056|0042|004E|004D|003F|002E|003A|002D|005F|007B|007D" ;
+Min["Hungarian (L)"]		="0030|0031|0032|0033|0034|0035|0036|0037|0038|0039|00F6|00FC|00F3|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|0151|00FA|0061|0073|0064|0066|0067|0068|006A|006B|006C|00E9|00E1|0171|00ED|0079|0078|0063|0076|0062|006E|006D|002C|002E|003A|002D|005F|007B|007D" ;
+Maj["Diacritical (L)"]		="0060|00B4|005E|00A8|007E|00B0|00B7|00B8|00AF|02D9|02DB|02C7|02D8|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|00C6|02DD|0041|0053|0044|0046|0047|0048|004A|004B|004C|0141|0152|0059|0058|0043|0056|0042|004E|004D|01A0|01AF|00D8|0126|0110|0132|00DE|00D0|00DF" ;
+Min["Diacritical (L)"]		="0060|00B4|005E|00A8|007E|00B0|00B7|00B8|00AF|02D9|02DB|02C7|02D8|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|00E6|02DD|0061|0073|0064|0066|0067|0068|006A|006B|006C|0142|0153|0079|0078|0063|0076|0062|006E|006D|01A1|01B0|00F8|0127|0111|0133|00FE|00F0|00DF" ;
+Maj["Macedonian (C)"]		="007E|0021|201E|201C|2019|0025|2018|0026|002A|0028|0029|005F|002B|0409|040A|0415|0420|0422|0405|0423|0418|041E|041F|0428|0403|0410|0421|0414|0424|0413|0425|0408|041A|041B|0427|040C|0401|0417|040F|0426|0412|0411|041D|041C|0416|003B|003A|003F|002A|005F|007B|007D" ;
+Min["Macedonian (C)"]		="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0459|045A|0435|0440|0442|0455|0443|0438|043E|043F|0448|0453|0430|0441|0434|0444|0433|0445|0458|043A|043B|0447|045C|0451|0437|045F|0446|0432|0431|043D|043C|0436|002C|002E|002F|0027|002D|005B|005D" ;
+Maj["Norwegian (L)"]		="00A7|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|0060|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|00C5|005E|0041|0053|0044|0046|0047|0048|004A|004B|00D8|00C6|00C4|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|002A|005F|007B|007D|005C|007E" ;
+Min["Norwegian (L)"]		="00BD|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00B4|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|00E5|00A8|0061|0073|0064|0066|0067|0068|006A|006B|00F8|00E6|00E4|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|0027|002D|005B|005D|007C|0040" ;
+Maj["Polish (L)"]			="002A|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|017A|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0144|0107|0041|0053|0044|0046|0047|0048|004A|004B|004C|0141|0119|0059|0058|0043|0056|0042|004E|004D|003B|003A|005F|003C|005B|007B|02D9|00B4|02DB" ;
+Min["Polish (L)"]			="0027|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00F3|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|017C|015B|0061|0073|0064|0066|0067|0068|006A|006B|006C|0142|0105|0079|0078|0063|0076|0062|006E|006D|002C|002E|002D|003E|005D|007D|02D9|00B4|02DB" ;
+Maj["Russian (C)"]			="0401|0021|0040|0023|2116|0025|005E|0026|002A|0028|0029|005F|002B|0419|0426|0423|041A|0415|041D|0413|0428|0429|0417|0425|042A|0424|042B|0412|0410|041F|0420|041E|041B|0414|0416|042D|042F|0427|0421|041C|0418|0422|042C|0411|042E|003E|002E|003A|0022|005B|005D|003F" ;
+Min["Russian (C)"]			="0451|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0439|0446|0443|043A|0435|043D|0433|0448|0449|0437|0445|044A|0444|044B|0432|0430|043F|0440|043E|043B|0434|0436|044D|044F|0447|0441|043C|0438|0442|044C|0431|044E|003C|002C|003B|0027|007B|007D|002F" ;
+Maj["Serbian (C)"]			="007E|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|002A|0409|040A|0415|0420|0422|0417|0423|0418|041E|041F|0428|0402|0410|0421|0414|0424|0413|0425|0408|041A|041B|0427|040B|003E|0405|040F|0426|0412|0411|041D|041C|0416|003A|005F|002E|003A|0022|005B|005D" ;
+Min["Serbian (C)"]			="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|002B|0459|045A|0435|0440|0442|0437|0443|0438|043E|043F|0448|0452|0430|0441|0434|0444|0433|0445|0458|043A|043B|0447|045B|003C|0455|045F|0446|0432|0431|043D|043C|0436|002E|002D|002C|003B|0027|007B|007D" ;
+Maj["Serbian (L)"]			="007E|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|002A|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0160|0110|0041|0053|0044|0046|0047|0048|004A|004B|004C|010C|0106|003E|0059|0058|0043|0056|0042|004E|004D|017D|003A|005F|002E|003A|0022|005B|005D" ;
+Min["Serbian (L)"]			="201A|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|002B|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|0161|0111|0061|0073|0064|0066|0067|0068|006A|006B|006C|010D|0107|003C|0079|0078|0063|0076|0062|006E|006D|017E|002E|002D|002C|003B|0027|007B|007D" ;
+Maj["Slovak (L)"]			="00B0|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0025|02C7|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|002F|0028|0041|0053|0044|0046|0047|0048|004A|004B|004C|0022|0021|0059|0058|0043|0056|0042|004E|004D|003F|003A|005F|003C|005B|010F|0029|002A|0020" ;
+Min["Slovak (L)"]			="003B|002B|013E|0161|010D|0165|017E|00FD|00E1|00ED|00E9|003D|00B4|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|00FA|00E4|0061|0073|0064|0066|0067|0068|006A|006B|006C|00F4|00A7|0079|0078|0063|0076|0062|006E|006D|002C|002E|002D|003E|005D|00F3|0148|0026|0020" ;
+Maj["Spanish (L)"]			="00AA|0021|0022|00B7|0024|0025|0026|002F|0028|0029|003D|003F|00BF|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|005E|00A8|0041|0053|0044|0046|0047|0048|004A|004B|004C|00D1|00C7|005A|0058|0043|0056|0042|004E|004D|003B|003A|005F|003E|007C|0040|0023|007E|002A" ;
+Min["Spanish (L)"]			="00BA|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|00A1|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|0060|00B4|0061|0073|0064|0066|0067|0068|006A|006B|006C|00F1|00E7|007A|0078|0063|0076|0062|006E|006D|002C|002E|002D|003C|005C|0040|0023|007E|002B" ;
+Maj["Ukrainian (C)"]		="0401|0021|0040|0023|2116|0025|005E|0026|002A|0028|0029|005F|002B|0419|0426|0423|041A|0415|041D|0413|0428|0429|0417|0425|0407|0424|0406|0412|0410|041F|0420|041E|041B|0414|0416|0404|0490|042F|0427|0421|041C|0418|0422|042C|0411|042E|002E|003A|0022|003C|003E|003F" ;
+Min["Ukrainian (C)"]		="0451|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0439|0446|0443|043A|0435|043D|0433|0448|0449|0437|0445|0457|0444|0456|0432|0430|043F|0440|043E|043B|0434|0436|0454|0491|044F|0447|0441|043C|0438|0442|044C|0431|044E|002C|003B|0027|007B|007D|002F" ;
+Maj["Vietnamese (L)"]		="007E|0021|0040|0023|0024|0025|005E|0026|002A|0028|0029|005F|002B|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|01AF|01A0|0041|0053|0044|0046|0047|0048|004A|004B|004C|0102|00C2|005A|0058|0043|0056|0042|004E|004D|00CA|00D4|0110|003C|003E|003F|007D|003A|0022" ;
+Min["Vietnamese (L)"]		="20AB|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|01B0|01A1|0061|0073|0064|0066|0067|0068|006A|006B|006C|0103|00E2|007A|0078|0063|0076|0062|006E|006D|00EA|00F4|0111|002C|002E|002F|007B|003B|0027" ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/diacritic.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/diacritic.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/diacritic.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/diacritic.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,63 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: diacritic.js
+ * 	Scripts for the fck_universalkey.html page.
+ * 
+ * File Authors:
+ * 		Michel Staelens (michel.staelens@wanadoo.fr)
+ * 		Abdul-Aziz Al-Oraij (top7up@hotmail.com)
+ */
+
+var dia = new Array()
+
+dia["0060"]=new Array();dia["00B4"]=new Array();dia["005E"]=new Array();dia["00A8"]=new Array();dia["007E"]=new Array();dia["00B0"]=new Array();dia["00B7"]=new Array();dia["00B8"]=new Array();dia["00AF"]=new Array();dia["02D9"]=new Array();dia["02DB"]=new Array();dia["02C7"]=new Array();dia["02D8"]=new Array();dia["02DD"]=new Array();dia["031B"]=new Array();
+dia["0060"]["0061"]="00E0";dia["00B4"]["0061"]="00E1";dia["005E"]["0061"]="00E2";dia["00A8"]["0061"]="00E4";dia["007E"]["0061"]="00E3";dia["00B0"]["0061"]="00E5";dia["00AF"]["0061"]="0101";dia["02DB"]["0061"]="0105";dia["02D8"]["0061"]="0103";
+dia["00B4"]["0063"]="0107";dia["005E"]["0063"]="0109";dia["00B8"]["0063"]="00E7";dia["02D9"]["0063"]="010B";dia["02C7"]["0063"]="010D";
+dia["02C7"]["0064"]="010F";
+dia["0060"]["0065"]="00E8";dia["00B4"]["0065"]="00E9";dia["005E"]["0065"]="00EA";dia["00A8"]["0065"]="00EB";dia["00AF"]["0065"]="0113";dia["02D9"]["0065"]="0117";dia["02DB"]["0065"]="0119";dia["02C7"]["0065"]="011B";dia["02D8"]["0065"]="0115";
+dia["005E"]["0067"]="011D";dia["00B8"]["0067"]="0123";dia["02D9"]["0067"]="0121";dia["02D8"]["0067"]="011F";
+dia["005E"]["0068"]="0125";
+dia["0060"]["0069"]="00EC";dia["00B4"]["0069"]="00ED";dia["005E"]["0069"]="00EE";dia["00A8"]["0069"]="00EF";dia["007E"]["0069"]="0129";dia["00AF"]["0069"]="012B";dia["02DB"]["0069"]="012F";dia["02D8"]["0069"]="012D";
+dia["005E"]["006A"]="0135";
+dia["00B8"]["006B"]="0137";
+dia["00B4"]["006C"]="013A";dia["00B7"]["006C"]="0140";dia["00B8"]["006C"]="013C";dia["02C7"]["006C"]="013E";
+dia["00B4"]["006E"]="0144";dia["007E"]["006E"]="00F1";dia["00B8"]["006E"]="0146";dia["02D8"]["006E"]="0148";
+dia["0060"]["006F"]="00F2";dia["00B4"]["006F"]="00F3";dia["005E"]["006F"]="00F4";dia["00A8"]["006F"]="00F6";dia["007E"]["006F"]="00F5";dia["00AF"]["006F"]="014D";dia["02D8"]["006F"]="014F";dia["02DD"]["006F"]="0151";dia["031B"]["006F"]="01A1";
+dia["00B4"]["0072"]="0155";dia["00B8"]["0072"]="0157";dia["02C7"]["0072"]="0159";
+dia["00B4"]["0073"]="015B";dia["005E"]["0073"]="015D";dia["00B8"]["0073"]="015F";dia["02C7"]["0073"]="0161";
+dia["00B8"]["0074"]="0163";dia["02C7"]["0074"]="0165";
+dia["0060"]["0075"]="00F9";dia["00B4"]["0075"]="00FA";dia["005E"]["0075"]="00FB";dia["00A8"]["0075"]="00FC";dia["007E"]["0075"]="0169";dia["00B0"]["0075"]="016F";dia["00AF"]["0075"]="016B";dia["02DB"]["0075"]="0173";dia["02D8"]["0075"]="016D";dia["02DD"]["0075"]="0171";dia["031B"]["0075"]="01B0";
+dia["005E"]["0077"]="0175";
+dia["00B4"]["0079"]="00FD";dia["005E"]["0079"]="0177";dia["00A8"]["0079"]="00FF";
+dia["00B4"]["007A"]="017A";dia["02D9"]["007A"]="017C";dia["02C7"]["007A"]="017E";
+dia["00B4"]["00E6"]="01FD";
+dia["00B4"]["00F8"]="01FF";
+dia["0060"]["0041"]="00C0";dia["00B4"]["0041"]="00C1";dia["005E"]["0041"]="00C2";dia["00A8"]["0041"]="00C4";dia["007E"]["0041"]="00C3";dia["00B0"]["0041"]="00C5";dia["00AF"]["0041"]="0100";dia["02DB"]["0041"]="0104";dia["02D8"]["0041"]="0102";
+dia["00B4"]["0043"]="0106";dia["005E"]["0043"]="0108";dia["00B8"]["0043"]="00C7";dia["02D9"]["0043"]="010A";dia["02C7"]["0043"]="010C";
+dia["02C7"]["0044"]="010E";
+dia["0060"]["0045"]="00C8";dia["00B4"]["0045"]="00C9";dia["005E"]["0045"]="00CA";dia["00A8"]["0045"]="00CB";dia["00AF"]["0045"]="0112";dia["02D9"]["0045"]="0116";dia["02DB"]["0045"]="0118";dia["02C7"]["0045"]="011A";dia["02D8"]["0045"]="0114";
+dia["005E"]["0047"]="011C";dia["00B8"]["0047"]="0122";dia["02D9"]["0047"]="0120";dia["02D8"]["0047"]="011E";
+dia["005E"]["0048"]="0124";
+dia["0060"]["0049"]="00CC";dia["00B4"]["0049"]="00CD";dia["005E"]["0049"]="00CE";dia["00A8"]["0049"]="00CF";dia["007E"]["0049"]="0128";dia["00AF"]["0049"]="012A";dia["02D9"]["0049"]="0130";dia["02DB"]["0049"]="012E";dia["02D8"]["0049"]="012C";
+dia["005E"]["004A"]="0134";
+dia["00B8"]["004B"]="0136";
+dia["00B4"]["004C"]="0139";dia["00B7"]["004C"]="013F";dia["00B8"]["004C"]="013B";dia["02C7"]["004C"]="013D";
+dia["00B4"]["004E"]="0143";dia["007E"]["004E"]="00D1";dia["00B8"]["004E"]="0145";dia["02D8"]["004E"]="0147";
+dia["0060"]["004F"]="00D2";dia["00B4"]["004F"]="00D3";dia["005E"]["004F"]="00D4";dia["00A8"]["004F"]="00D6";dia["007E"]["004F"]="00D5";dia["00AF"]["004F"]="014C";dia["02D8"]["004F"]="014E";dia["02DD"]["004F"]="0150";dia["031B"]["004F"]="01A0";
+dia["00B4"]["0052"]="0154";dia["00B8"]["0052"]="0156";dia["02C7"]["0052"]="0158";
+dia["00B4"]["0053"]="015A";dia["005E"]["0053"]="015C";dia["00B8"]["0053"]="015E";dia["02C7"]["0053"]="0160";
+dia["00B8"]["0054"]="0162";dia["02C7"]["0054"]="0164";
+dia["0060"]["0055"]="00D9";dia["00B4"]["0055"]="00DA";dia["005E"]["0055"]="00DB";dia["00A8"]["0055"]="00DC";dia["007E"]["0055"]="0168";dia["00B0"]["0055"]="016E";dia["00AF"]["0055"]="016A";dia["02DB"]["0055"]="0172";dia["02D8"]["0055"]="016C";dia["02DD"]["0055"]="0170";dia["031B"]["0055"]="01AF";
+dia["005E"]["0057"]="0174";
+dia["00B4"]["0059"]="00DD";dia["005E"]["0059"]="0176";dia["00A8"]["0059"]="0178";
+dia["00B4"]["005A"]="0179";dia["02D9"]["005A"]="017B";dia["02C7"]["005A"]="017D";
+dia["00B4"]["00C6"]="01FC";
+dia["00B4"]["00D8"]="01FE";
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/dialogue.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/dialogue.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/dialogue.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/dialogue.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,29 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: dialogue.js
+ * 	Scripts for the fck_universalkey.html page.
+ * 
+ * File Authors:
+ * 		Michel Staelens (michel.staelens@wanadoo.fr)
+ * 		Bernadette Cierzniak
+ * 		Abdul-Aziz Al-Oraij (top7up@hotmail.com)
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+function afficher(txt)
+{
+	document.getElementById( 'uni_area' ).value = txt ;
+}
+
+function rechercher()
+{
+	return document.getElementById( 'uni_area' ).value ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/fck_universalkey.css 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/fck_universalkey.css
--- 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/fck_universalkey.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/fck_universalkey.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,60 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_universalkey.css
+ * 	CSS styles for the Universal Keyboard.
+ * 
+ * File Authors:
+ * 		Michel Staelens (michel.staelens@wanadoo.fr)
+ * 		Bernadette Cierzniak
+ * 		Abdul-Aziz Al-Oraij (top7up@hotmail.com)
+ */
+
+BODY, TEXTAREA, INPUT, TD, SELECT
+{
+	font-family: Tahoma,verdana,arial,sans-serif;
+}
+DIV
+{
+	position: absolute;
+}
+.simple
+{
+	font-size: 11pt;
+}
+.double
+{
+	font-size: 9pt;
+}
+.simpledia
+{
+	color: red;
+	font-size: 11pt;
+}
+.doubledia
+{
+	color: red;
+	font-size: 9pt;
+}
+.action
+{
+	color: white;
+	font-size: 7pt;
+}
+.clavier
+{
+	color: blue;
+	font-size: 7pt;
+}
+.sign
+{
+	color: gray;
+	font-size: 7pt;
+}
Files 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/keyboard_layout.gif and 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/keyboard_layout.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/multihexa.js 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/multihexa.js
--- 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey/multihexa.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey/multihexa.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,309 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: multihexa.js
+ * 	Scripts for the fck_universalkey.html page.
+ * 	Definition des 104 caracteres en hexa unicode.
+ * 
+ * File Authors:
+ * 		Michel Staelens (michel.staelens@wanadoo.fr)
+ * 		Bernadette Cierzniak
+ * 		Abdul-Aziz Al-Oraij (top7up@hotmail.com)
+ */
+
+var caps=0, lock=0, hexchars="0123456789ABCDEF", accent="0000", keydeb=0
+var key=new Array();j=0;for (i in Maj){key[j]=i;j++}
+var ns6=((!document.all)&&(document.getElementById))
+var ie=document.all
+
+var langue=getCk();
+if (langue==""){
+	langue=key[keydeb]
+}
+CarMaj=Maj[langue].split("|");CarMin=Min[langue].split("|")
+
+/*unikey*/
+var posUniKeyLeft=0, posUniKeyTop=0
+if (ns6){posUniKeyLeft=0;posUniKeyTop=60}
+else if (ie){posUniKeyLeft=0;posUniKeyTop=60}
+tracer("fond",posUniKeyLeft,posUniKeyTop,'<img src="fck_universalkey/keyboard_layout.gif" width=404 height=152 border="0"><br />',"sign")
+/*touches*/
+var posX=new Array(0,28,56,84,112,140,168,196,224,252,280,308,336,42,70,98,126,154,182,210,238,266,294,322,350,50,78,106,134,162,190,218,246,274,302,330,64,92,120,148,176,204,232,260,288,316,28,56,84,294,322,350)
+var posY=new Array(14,14,14,14,14,14,14,14,14,14,14,14,14,42,42,42,42,42,42,42,42,42,42,42,42,70,70,70,70,70,70,70,70,70,70,70,98,98,98,98,98,98,98,98,98,98,126,126,126,126,126,126)
+var nbTouches=52
+for (i=0;i<nbTouches;i++){
+	CarMaj[i]=((CarMaj[i]!="0000")?(fromhexby4tocar(CarMaj[i])):"")
+	CarMin[i]=((CarMin[i]!="0000")?(fromhexby4tocar(CarMin[i])):"")
+	if (CarMaj[i]==CarMin[i].toUpperCase()){
+		cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i])
+		tracer("car"+i,posUniKeyLeft+6+posX[i],posUniKeyTop+3+posY[i],cecar,((dia[hexa(cecar)]!=null)?"simpledia":"simple"))
+		tracer("majus"+i,posUniKeyLeft+15+posX[i],posUniKeyTop+1+posY[i],"&nbsp;","double")
+		tracer("minus"+i,posUniKeyLeft+3+posX[i],posUniKeyTop+9+posY[i],"&nbsp;","double")
+	}
+	else{
+		tracer("car"+i,posUniKeyLeft+6+posX[i],posUniKeyTop+3+posY[i],"&nbsp;","simple")
+		cecar=CarMin[i]
+		tracer("minus"+i,posUniKeyLeft+3+posX[i],posUniKeyTop+9+posY[i],cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double"))
+		cecar=CarMaj[i]
+		tracer("majus"+i,posUniKeyLeft+15+posX[i],posUniKeyTop+1+posY[i],cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double"))
+	}
+}
+/*touches de fonctions*/
+var actC1=new Array(0,371,364,0,378,0,358,0,344,0,112,378)
+var actC2=new Array(0,0,14,42,42,70,70,98,98,126,126,126)
+var actC3=new Array(32,403,403,39,403,47,403,61,403,25,291,403)
+var actC4=new Array(11,11,39,67,67,95,95,123,123,151,151,151)
+var act  =new Array(" « KB"," KB » ","Delete","Clear","Back","Caps<br> Lock","Enter","Shift","Shift","<|<","Space",">|>")
+var effet=new Array("keyscroll(-3)","keyscroll(3)","faire(\"del\")","RAZ()","faire(\"bck\")","bloq()","faire(\"\\n\")","haut()","haut()","faire(\"ar\")","faire(\" \")","faire(\"av\")")
+var nbActions=12
+for (i=0;i<nbActions;i++){
+	tracer("act"+i,posUniKeyLeft+1+actC1[i],posUniKeyTop-1+actC2[i],act[i],"action")
+}
+/*navigation*/
+var keyC1=new Array(35,119,203,287)
+var keyC2=new Array(0,0,0,0)
+var keyC3=new Array(116,200,284,368)
+var keyC4=new Array(11,11,11,11)
+for (i=0;i<4;i++){
+	tracer("key"+i,posUniKeyLeft+5+keyC1[i],posUniKeyTop-1+keyC2[i],key[i],"unikey")
+}
+/*zones reactives*/
+tracer("masque",posUniKeyLeft,posUniKeyTop,'<img src="fck_universalkey/00.gif" width=404 height=152 border="0" usemap="#unikey">')
+document.write('<map name="unikey">')
+for (i=0;i<nbTouches;i++){
+	document.write('<area coords="'+posX[i]+','+posY[i]+','+(posX[i]+25)+','+(posY[i]+25)+'" href=# onClick=\'javascript:ecrire('+i+')\'>')
+}
+for (i=0;i<nbActions;i++){
+	document.write('<area coords="'+actC1[i]+','+actC2[i]+','+actC3[i]+','+actC4[i]+'" href=# onClick=\'javascript:'+effet[i]+'\'>')
+}
+for (i=0;i<4;i++){
+	document.write('<area coords="'+keyC1[i]+','+keyC2[i]+','+keyC3[i]+','+keyC4[i]+'" onclick=\'javascript:charger('+i+')\'>')
+}
+document.write('</map>')
+
+/*fonctions*/
+function ecrire(i){
+	txt=rechercher()+"|";subtxt=txt.split("|")
+	ceci=(lock==1)?CarMaj[i]:((caps==1)?CarMaj[i]:CarMin[i])
+	if (test(ceci)){subtxt[0]+=cardia(ceci);distinguer(false)}
+	else if(dia[accent]!=null&&dia[hexa(ceci)]!=null){distinguer(false);accent=hexa(ceci);distinguer(true)}
+	else if(dia[accent]!=null){subtxt[0]+=fromhexby4tocar(accent)+ceci;distinguer(false)}
+	else if(dia[hexa(ceci)]!=null){accent=hexa(ceci);distinguer(true)}
+	else {subtxt[0]+=ceci}
+	txt=subtxt[0]+"|"+subtxt[1]
+	afficher(txt)
+	if (caps==1){caps=0;MinusMajus()}
+}
+function faire(ceci){
+	txt=rechercher()+"|";subtxt=txt.split("|")
+	l0=subtxt[0].length
+	l1=subtxt[1].length
+	c1=subtxt[0].substring(0,(l0-2))
+	c2=subtxt[0].substring(0,(l0-1))
+	c3=subtxt[1].substring(0,1)
+	c4=subtxt[1].substring(0,2)
+	c5=subtxt[0].substring((l0-2),l0)
+	c6=subtxt[0].substring((l0-1),l0)
+	c7=subtxt[1].substring(1,l1)
+	c8=subtxt[1].substring(2,l1)
+	if(dia[accent]!=null){if(ceci==" "){ceci=fromhexby4tocar(accent)}distinguer(false)}
+	switch (ceci){
+	case("av") :if(escape(c4)!="%0D%0A"){txt=subtxt[0]+c3+"|"+c7}else{txt=subtxt[0]+c4+"|"+c8}break
+	case("ar") :if(escape(c5)!="%0D%0A"){txt=c2+"|"+c6+subtxt[1]}else{txt=c1+"|"+c5+subtxt[1]}break
+	case("bck"):if(escape(c5)!="%0D%0A"){txt=c2+"|"+subtxt[1]}else{txt=c1+"|"+subtxt[1]}break
+	case("del"):if(escape(c4)!="%0D%0A"){txt=subtxt[0]+"|"+c7}else{txt=subtxt[0]+"|"+c8}break
+	default:txt=subtxt[0]+ceci+"|"+subtxt[1];break
+	}
+	afficher(txt)
+}
+function RAZ(){txt="";if(dia[accent]!=null){distinguer(false)}afficher(txt)}
+function haut(){caps=1;MinusMajus()}
+function bloq(){lock=(lock==1)?0:1;MinusMajus()}
+
+/*fonctions de traitement du unikey*/
+function tracer(nom,gauche,haut,ceci,classe){ceci="<span class="+classe+">"+ceci+"</span>";document.write('<div id="'+nom+'" >'+ceci+'</div>');if (ns6){document.getElementById(nom).style.left=gauche+"px";document.getElementById(nom).style.top=haut+"px";}else if (ie){document.all(nom).style.left=gauche;document.all(nom).style.top=haut}}
+function retracer(nom,ceci,classe){ceci="<span class="+classe+">"+ceci+"</span>";if (ns6){document.getElementById(nom).innerHTML=ceci}else if (ie){doc=document.all(nom);doc.innerHTML=ceci}}
+function keyscroll(n){
+	keydeb+=n
+	if (keydeb<0){
+		keydeb=0
+	}
+	if (keydeb>key.length-4){
+		keydeb=key.length-4
+	}
+	for (i=keydeb;i<keydeb+4;i++){
+		retracer("key"+(i-keydeb),key[i],"unikey")
+	}
+	if (keydeb==0){
+		retracer("act0","&nbsp;","action")
+	}else {
+		retracer("act0",act[0],"action")
+	}
+	if (keydeb==key.length-4){
+		retracer("act1","&nbsp;","action")
+	}else {
+		retracer("act1",act[1],"action")
+	}
+}
+function charger(i){
+	langue=key[i+keydeb];setCk(langue);accent="0000"
+	CarMaj=Maj[langue].split("|");CarMin=Min[langue].split("|")
+	for (i=0;i<nbTouches;i++){
+		CarMaj[i]=((CarMaj[i]!="0000")?(fromhexby4tocar(CarMaj[i])):"")
+		CarMin[i]=((CarMin[i]!="0000")?(fromhexby4tocar(CarMin[i])):"")
+		if (CarMaj[i]==CarMin[i].toUpperCase()){
+			cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i])
+			retracer("car"+i,cecar,((dia[hexa(cecar)]!=null)?"simpledia":"simple"))
+			retracer("minus"+i,"&nbsp;")
+			retracer("majus"+i,"&nbsp;")
+		}
+		else{
+			retracer("car"+i,"&nbsp;")
+			cecar=CarMin[i]
+			retracer("minus"+i,cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double"))
+			cecar=CarMaj[i]
+			retracer("majus"+i,cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double"))
+		}
+	}
+}
+function distinguer(oui){
+	for (i=0;i<nbTouches;i++){
+		if (CarMaj[i]==CarMin[i].toUpperCase()){
+			cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i])
+			if(test(cecar)){retracer("car"+i,oui?(cardia(cecar)):cecar,oui?"simpledia":"simple")}
+		}
+		else{
+			cecar=CarMin[i]
+			if(test(cecar)){retracer("minus"+i,oui?(cardia(cecar)):cecar,oui?"doubledia":"double")}
+			cecar=CarMaj[i]
+			if(test(cecar)){retracer("majus"+i,oui?(cardia(cecar)):cecar,oui?"doubledia":"double")}
+		}
+	}
+	if (!oui){accent="0000"}
+}
+function MinusMajus(){
+	for (i=0;i<nbTouches;i++){
+		if (CarMaj[i]==CarMin[i].toUpperCase()){
+			cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i])
+			retracer("car"+i,(test(cecar)?cardia(cecar):cecar),((dia[hexa(cecar)]!=null||test(cecar))?"simpledia":"simple"))
+		}
+	}
+}
+function test(cecar){return(dia[accent]!=null&&dia[accent][hexa(cecar)]!=null)}
+function cardia(cecar){return(fromhexby4tocar(dia[accent][hexa(cecar)]))}
+function fromhex(inval){out=0;for (a=inval.length-1;a>=0;a--){out+=Math.pow(16,inval.length-a-1)*hexchars.indexOf(inval.charAt(a))}return out}
+function fromhexby4tocar(ceci){out4=new String();for (l=0;l<ceci.length;l+=4){out4+=String.fromCharCode(fromhex(ceci.substring(l,l+4)))}return out4}
+function tohex(inval){return hexchars.charAt(inval/16)+hexchars.charAt(inval%16)}
+function tohex2(inval){return tohex(inval/256)+tohex(inval%256)}
+function hexa(ceci){out="";for (k=0;k<ceci.length;k++){out+=(tohex2(ceci.charCodeAt(k)))}return out}
+function getCk(){
+	fromN=document.cookie.indexOf("langue=")+0;
+	if((fromN)!=-1){
+		fromN+=7;
+		toN=document.cookie.indexOf(";",fromN)+0;
+		if(toN==-1){
+			toN=document.cookie.length
+		}
+		return unescape(document.cookie.substring(fromN,toN))
+	}
+	return ""
+}
+function setCk(inval){
+	if(inval!=null){
+		exp=new Date();
+		time=365*60*60*24*1000;
+		exp.setTime(exp.getTime()+time);
+		document.cookie=escape("langue")+"="+escape(inval)+"; "+"expires="+exp.toGMTString()
+	}
+}
+
+// Arabic Keystroke Translator
+function arkey(e) {
+	if ((document.layers)|(navigator.userAgent.indexOf("MSIE 4")>-1)|(langue!="Arabic")) return true;
+
+	if (!e) var e = window.event;
+	if (e.keyCode) keyCode = e.keyCode;
+	else if (e.which) keyCode = e.which;
+	var character = String.fromCharCode(keyCode);
+
+		entry = true;
+		cont=e.srcElement || e.currentTarget || e.target;
+		if (keyCode>64 && keyCode<91) {
+			entry=false;
+			source='ش لاؤ ي ث ب ل ا ه ت ن م ة ى خ ح ض ق س ف ع ر ص ء غ ئ ';
+			shsource='ِ لآ} ] ُ [ لأأ ÷ ـ ، /   آ × ؛ َ ٌ ٍ لإ  { ً ْ إ ~'; 
+
+			if (e.shiftKey) cont.value += shsource.substr((keyCode-64)*2-2,2);
+			else
+				cont.value += source.substr((keyCode-64)*2-2,2);
+			if (cont.value.substr(cont.value.length-1,1)==' ') cont.value=cont.value.substr(0,cont.value.length-1);
+		}
+		if (e.shiftKey) {
+			if (keyCode==186) {cont.value += ':';entry=false;}
+			if (keyCode==188) {cont.value += ',';entry=false;}
+			if (keyCode==190) {cont.value += '.';entry=false;}
+			if (keyCode==191) {cont.value += '؟';entry=false;}
+			if (keyCode==192) {cont.value += 'ّ';entry=false;}
+			if (keyCode==219) {cont.value += '<';entry=false;}
+			if (keyCode==221) {cont.value += '>';entry=false;}
+		} else {
+			if (keyCode==186||keyCode==59) {cont.value += 'ك';entry=false;}
+			if (keyCode==188) {cont.value += 'و';entry=false;}
+			if (keyCode==190) {cont.value += 'ز';entry=false;}
+			if (keyCode==191) {cont.value += 'ظ';entry=false;}
+			if (keyCode==192) {cont.value += 'ذ';entry=false;}
+			if (keyCode==219) {cont.value += 'ج';entry=false;}
+			if (keyCode==221) {cont.value += 'د';entry=false;}
+			if (keyCode==222) {cont.value += 'ط';entry=false;}
+		}
+	return entry;
+}
+function hold_it(e){
+	if ((document.layers)|(navigator.userAgent.indexOf("MSIE 4")>-1)|(langue!="Arabic")) return true;
+
+	var keyCode;
+	if (!e) var e = window.event;
+	if (e.keyCode) keyCode = e.keyCode;
+	else if (e.which) keyCode = e.which;
+	var character = String.fromCharCode(keyCode);
+	switch(keyCode){
+		case 186:
+		case 188:
+		case 190:
+		case 191:
+		case 192:
+		case 219:
+		case 221:
+		case 222:
+		case 116:
+		case 59:
+		case 47:
+		case 46:
+		case 44:
+		case 39:
+			return false;
+		case 92:
+			return true;
+	}
+		if (keyCode<63) return true;
+		return false;
+	}
+
+var obj = document.getElementById( 'uni_area' );
+if ( obj && langue=="Arabic"){
+	with (navigator) {
+		if (appName=="Netscape")
+			obj.onkeypress = hold_it;
+	}
+	obj.onkeydown = arkey;
+}
+// Arabic Keystroke Translator End
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey.html 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey.html
--- 1.3.11sr1/fckeditor/editor/dialog/fck_universalkey.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/dialog/fck_universalkey.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_universalkey.html
+ * 	Unicode Keyboard dialog window.
+ * 
+ * File Authors:
+ * 		Abdul-Aziz Al-Oraij (top7up@hotmail.com)
+ * 		Michel Staelens
+ * 		Bernadette Cierzniak
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Universal Keyboard</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<link rel="stylesheet" type="text/css" href="fck_universalkey/fck_universalkey.css" />
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+window.onload = function()
+{
+	document.body.style.padding = '0px' ;
+
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;	
+}
+
+function Ok()
+{
+	var oArea = document.getElementById( 'uni_area' ) ;
+
+	if ( oArea.value.length > 0 )
+		oEditor.FCK.InsertHtml( oArea.value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<textarea id="uni_area" cols="40" rows="4" style="width:100%;height:60px;"></textarea>
+		<script type="text/javascript" src="fck_universalkey/data.js"></script>
+		<script type="text/javascript" src="fck_universalkey/diacritic.js"></script>
+		<script type="text/javascript" src="fck_universalkey/dialogue.js"></script>
+		<script type="text/javascript" src="fck_universalkey/multihexa.js"></script>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/fckblank.html 1.4.0sr5-1/fckeditor/editor/fckblank.html
--- 1.3.11sr1/fckeditor/editor/fckblank.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/fckblank.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<html>
+<head><title></title></head>
+<body></body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/fckdebug.html 1.4.0sr5-1/fckeditor/editor/fckdebug.html
--- 1.3.11sr1/fckeditor/editor/fckdebug.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/fckdebug.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,108 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckdebug.html
+ * 	This is the Debug window.
+ * 	It automatically popups if the Debug = true in the configuration file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+		<title>FCKeditor Debug Window</title>
+		<script type="text/javascript">
+
+var oWindow ;
+var oDiv ;
+
+if ( !window.FCKMessages )
+	window.FCKMessages = new Array() ;
+
+function Initialize()
+{
+	oWindow = window.frames[ 'eOutput' ]
+	oWindow.document.open() ;
+	oWindow.document.write( '<div id="divMsg"><\/div>' ) ;
+	oWindow.document.close() ;
+	oDiv	= oWindow.document.getElementById('divMsg') ;
+}
+
+function Output( message, color )
+{
+	if ( color )
+		message = '<font color="' + color + '">' + message + '<\/font>' ;
+		
+	window.FCKMessages[ window.FCKMessages.length ] = message ;
+	StartTimer() ;
+}
+
+function StartTimer()
+{
+	window.setTimeout( 'CheckMessages()', 100 ) ;
+}
+
+function CheckMessages()
+{
+	if ( window.FCKMessages.length > 0 )
+	{
+		// Get the first item in the queue
+		var sMessage = window.FCKMessages[0] ;
+		
+		// Removes the first item from the queue
+		var oTempArray = new Array() ;
+		for ( i = 1 ; i < window.FCKMessages.length ; i++ )
+			oTempArray[ i - 1 ] = window.FCKMessages[ i ] ;
+		window.FCKMessages = oTempArray ;
+		
+		var d = new Date() ;
+		var sTime = 
+			( d.getHours() + 100 + '' ).substr( 1,2 ) + ':' + 
+			( d.getMinutes() + 100 + '' ).substr( 1,2 ) + ':' + 
+			( d.getSeconds() + 100 + '' ).substr( 1,2 ) + ':' + 
+			( d.getMilliseconds() + 1000 + '' ).substr( 1,3 ) ;
+
+		var oMsgDiv = oWindow.document.createElement( 'div' ) ;
+		oMsgDiv.innerHTML = sTime + ': <b>' + sMessage + '<\/b>' ;
+		oDiv.appendChild( oMsgDiv ) ;
+		oMsgDiv.scrollIntoView() ;
+	}
+}
+
+function Clear()
+{
+	oDiv.innerHTML = '' ;
+}
+		</script>
+	</head>
+	<body onload="Initialize();" bottomMargin="10" leftMargin="10" topMargin="10" rightMargin="10">
+		<TABLE height="100%" cellSpacing="5" cellPadding="0" width="100%" border="0">
+			<TR>
+				<TD>
+					<TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
+						<TR>
+							<TD><FONT size="+2"><STRONG>FCKeditor Debug Window</STRONG></FONT></TD>
+							<TD align="right"><INPUT type="button" value="Clear" onclick="Clear();"></TD>
+						</TR>
+					</TABLE>
+				</TD>
+			</TR>
+			<TR>
+				<TD height="100%" style="BORDER-RIGHT: #696969 1px solid; BORDER-TOP: #696969 1px solid; BORDER-LEFT: #696969 1px solid; BORDER-BOTTOM: #696969 1px solid">
+					<iframe id="eOutput" name="eOutput" width="100%" height="100%" scrolling="auto" src="fckblank.html" frameborder="no"></iframe>
+				</TD>
+			</TR>
+		</TABLE>
+	</body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/fckdialog.html 1.4.0sr5-1/fckeditor/editor/fckdialog.html
--- 1.3.11sr1/fckeditor/editor/fckdialog.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/fckdialog.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,310 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckdialog.html
+ * 	This page is used by all dialog box as the container.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script type="text/javascript">
+
+// On some Gecko browsers (probably over slow connections) the
+// "dialogArguments" are not set so we must get it from the opener window.
+if ( !window.dialogArguments )
+	window.dialogArguments = window.opener.FCKLastDialogInfo ;
+
+// Sets the Skin CSS
+document.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+
+// Sets the language direction.
+window.document.dir = window.dialogArguments.Editor.FCKLang.Dir ;
+
+var sTitle = window.dialogArguments.Title ;
+document.write( '<title>' + sTitle + '<\/title>' ) ;
+
+function LoadInnerDialog()
+{
+	if ( window.onresize )
+		window.onresize() ;
+
+	// First of all, translate the dialog box contents.
+	window.dialogArguments.Editor.FCKLanguageManager.TranslatePage( document ) ;
+
+	window.frames["frmMain"].document.location.href = window.dialogArguments.Page ;
+}
+
+function InnerDialogLoaded()
+{
+	var oInnerDoc = document.getElementById('frmMain').contentWindow.document ;
+
+	// Set the language direction.
+	oInnerDoc.dir = window.dialogArguments.Editor.FCKLang.Dir ;
+
+	// Sets the Skin CSS.
+	oInnerDoc.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+
+	SetOnKeyDown( oInnerDoc ) ;
+	DisableContextMenu( oInnerDoc ) ;
+
+	return window.dialogArguments.Editor ;
+}
+
+function SetOkButton( showIt )
+{
+	document.getElementById('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
+}
+
+var bAutoSize = false ;
+
+function SetAutoSize( autoSize )
+{
+	bAutoSize = autoSize ;
+	RefreshSize() ;
+}
+
+function RefreshSize()
+{
+	if ( bAutoSize )
+	{
+		var oInnerDoc = document.getElementById('frmMain').contentWindow.document ;
+
+		var iFrameHeight ;
+		if ( document.all )
+			iFrameHeight = oInnerDoc.body.offsetHeight ;
+		else
+			iFrameHeight = document.getElementById('frmMain').contentWindow.innerHeight ;
+
+		var iInnerHeight = oInnerDoc.body.scrollHeight ;
+
+		var iDiff = iInnerHeight - iFrameHeight ;
+
+		if ( iDiff > 0 )
+		{
+			if ( document.all )
+				window.dialogHeight = ( parseInt( window.dialogHeight ) + iDiff ) + 'px' ;
+			else
+				window.resizeBy( 0, iDiff ) ;
+		}
+	}
+}
+
+function Ok()
+{
+	if ( window.frames["frmMain"].Ok && window.frames["frmMain"].Ok() )
+		Cancel() ;
+}
+
+function Cancel()
+{
+	window.close() ;
+}
+
+// Object that holds all available tabs.
+var oTabs = new Object() ;
+
+function TabDiv_OnClick()
+{
+	SetSelectedTab( this.TabCode ) ;
+}
+
+function AddTab( tabCode, tabText, startHidden )
+{
+	if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
+		return ;
+
+	var eTabsRow = document.getElementById( 'Tabs' ) ;
+
+	var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
+	oCell.noWrap = true ;
+
+	var oDiv = document.createElement( 'DIV' ) ;
+	oDiv.className = 'PopupTab' ;
+	oDiv.innerHTML = tabText ;
+	oDiv.TabCode = tabCode ;
+	oDiv.onclick = TabDiv_OnClick ;
+
+	if ( startHidden )
+		oDiv.style.display = 'none' ;
+
+	eTabsRow = document.getElementById( 'TabsRow' ) ;
+
+	oCell.appendChild( oDiv ) ;
+
+	if ( eTabsRow.style.display == 'none' )
+	{
+		var eTitleArea = document.getElementById( 'TitleArea' ) ;
+		eTitleArea.className = 'PopupTitle' ;
+
+		oDiv.className = 'PopupTabSelected' ;
+		eTabsRow.style.display = '' ;
+
+		if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+			window.onresize() ;
+	}
+
+	oTabs[ tabCode ] = oDiv ;
+	oTabs[ tabCode ].Index = oTabs.length - 1 ;
+}
+
+function SetSelectedTab( tabCode )
+{
+	for ( var sCode in oTabs )
+	{
+		if ( sCode == tabCode )
+			oTabs[sCode].className = 'PopupTabSelected' ;
+		else
+			oTabs[sCode].className = 'PopupTab' ;
+	}
+
+	if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
+		window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
+}
+
+function SetTabVisibility( tabCode, isVisible )
+{
+	var oTab = oTabs[ tabCode ] ;
+	oTab.style.display = isVisible ? '' : 'none' ;
+
+	if ( ! isVisible && oTab.className == 'PopupTabSelected' )
+	{
+		for ( var sCode in oTabs )
+		{
+			if ( oTabs[sCode].style.display != 'none' )
+			{
+				SetSelectedTab( sCode ) ;
+				break ;
+			}
+		}
+	}
+}
+
+function SetOnKeyDown( targetDocument )
+{
+	targetDocument.onkeydown = function ( e )
+	{
+		e = e || event || this.parentWindow.event ;
+		switch ( e.keyCode )
+		{
+			case 13 :		// ENTER
+				var oTarget = e.srcElement || e.target ;
+				if ( oTarget.tagName == 'TEXTAREA' ) return ;
+				Ok() ;
+				return false ;
+			case 27 :		// ESC
+				Cancel() ;
+				return false ;
+				break ;
+		}
+		return true ;
+	}
+}
+SetOnKeyDown( document ) ;
+
+function DisableContextMenu( targetDocument )
+{
+	if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) return ;
+
+	// Disable Right-Click
+	var oOnContextMenu = function( e )
+	{
+		var sTagName = e.target.tagName ;
+		if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
+			e.preventDefault() ;
+	}
+	targetDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
+}
+DisableContextMenu( document ) ;
+
+if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+{
+	window.onresize = function()
+	{
+		var oFrame = document.getElementById("frmMain") ;
+
+		if ( ! oFrame )
+		return ;
+
+		oFrame.height = 0 ;
+
+		var oCell = document.getElementById("FrameCell") ;
+		var iHeight = oCell.offsetHeight ;
+
+		oFrame.height = iHeight - 2 ;
+	}
+}
+
+window.onfocus = function()
+{
+	document.getElementById('frmMain').contentWindow.focus() ;
+}
+
+if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+{
+	function Window_OnBeforeUnload()
+	{
+		for ( var t in oTabs )
+			oTabs[t] = null ;
+
+		window.dialogArguments.Editor = null ;
+	}
+	window.attachEvent( "onbeforeunload", Window_OnBeforeUnload ) ;
+}
+
+		</script>
+	</head>
+	<body onload="LoadInnerDialog();" class="PopupBody">
+		<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
+			<tr>
+				<td id="TitleArea" class="PopupTitle PopupTitleBorder">
+					<script type="text/javascript">
+document.write( sTitle ) ;
+					</script>
+				</td>
+			</tr>
+			<tr id="TabsRow" style="DISPLAY: none">
+				<td class="PopupTabArea">
+					<table border="0" cellpadding="0" cellspacing="0" width="100%">
+						<tr id="Tabs" onselectstart="return false;">
+							<td class="PopupTabEmptyArea">&nbsp;</td>
+							<td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td id="FrameCell" height="100%" valign="top">
+					<iframe id="frmMain" src="fckblank.html" name="frmMain" frameborder="0" height="100%" width="100%" scrolling="auto">
+					</iframe>
+				</td>
+			</tr>
+			<tr>
+				<td class="PopupButtons">
+					<table border="0" cellpadding="0" cellspacing="0">
+						<tr>
+							<td width="100%">&nbsp;</td>
+							<td nowrap="nowrap">
+								<input id="btnOk" style="VISIBILITY: hidden; WIDTH: 100px" type="button" value="Ok" class="Button"
+									onclick="Ok();" fckLang="DlgBtnOK" />&nbsp; <input type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/fckeditor.html 1.4.0sr5-1/fckeditor/editor/fckeditor.html
--- 1.3.11sr1/fckeditor/editor/fckeditor.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/fckeditor.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,58 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckeditor.html
+ * 	Main page that holds the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<title>FCKeditor</title>
+		<meta name="robots" content="noindex, nofollow" />
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<script type="text/javascript" src="lang/fcklanguagemanager.js"></script>
+		<meta http-equiv="Cache-Control" content="public">
+		<script type="text/javascript" src="js/fck_startup.js"></script>
+	</head>
+	<body>
+		<table height="100%" width="100%" cellpadding="0" cellspacing="0" border="0" style="TABLE-LAYOUT: fixed">
+			<tr>
+				<td unselectable="on" style="OVERFLOW: hidden">
+					<table width="100%" cellpadding="0" cellspacing="0" border="0">
+						<tr id="Collapsed" style="DISPLAY: none">
+							<td id="ExpandHandle" class="TB_Expand" unselectable="on" colspan="3" onclick="FCKToolbarSet.Expand();return false;"><img class="TB_ExpandImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
+						</tr>
+						<tr id="Expanded" style="DISPLAY: none">
+							<td id="CollapseHandle" style="DISPLAY: none" class="TB_Collapse" 
+								unselectable="on" valign="bottom" onclick="FCKToolbarSet.Collapse();return false;"><img class="TB_CollapseImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
+							<td id="eToolbar" class="TB_ToolbarSet" unselectable="on"></td>
+							<td width="1" class="TB_SideBorder"></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr id="eWysiwyg">
+				<td id="eWysiwygCell" height="100%" valign="top">
+					<iframe id="eEditorArea" name="eEditorArea" height="100%" width="100%" frameborder="no" src="fckblank.html"></iframe>
+				</td>
+			</tr>
+			<tr id="eSource" style="DISPLAY: none">
+				<td class="Source" height="100%" valign="top">
+					<textarea id="eSourceField" dir="ltr" style="WIDTH: 100%; HEIGHT: 100%"></textarea>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff -ruN 1.3.11sr1/fckeditor/editor/fckeditor.original.html 1.4.0sr5-1/fckeditor/editor/fckeditor.original.html
--- 1.3.11sr1/fckeditor/editor/fckeditor.original.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/fckeditor.original.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,75 @@
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckeditor.original.html
+ * 	Main page that holds the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+	<head>
+		<title>FCKeditor</title>
+		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <!-- @Packager.RemoveLine -->
+		<meta name="robots" content="noindex, nofollow" />
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<script type="text/javascript" src="lang/fcklanguagemanager.js"></script>
+		<!-- @Packager.RemoveLine
+		<meta http-equiv="Cache-Control" content="public">
+		@Packager.RemoveLine -->
+		<!-- @Packager.Remove.Start -->
+		<script type="text/javascript" src="_source/internals/fcknamespace.js"></script>
+		<script type="text/javascript" src="_source/internals/fckcoreextensions.js"></script>
+		<script type="text/javascript" src="_source/globals/fck_constants.js"></script>
+		<script type="text/javascript" src="_source/internals/fckbrowserinfo.js"></script>
+		<script type="text/javascript" src="_source/internals/fckscriptloader.js"></script>
+		<script type="text/javascript" src="_source/internals/fckurlparams.js"></script>
+		<script type="text/javascript" src="_source/internals/fck.js"></script>
+		<script type="text/javascript" src="_source/internals/fckconfig.js"></script>
+		<script type="text/javascript" src="_source/globals/fckeditorapi.js"></script>
+		<script type="text/javascript" src="_source/internals/fck_onload.js"></script>
+		<!-- @Packager.Remove.End -->
+		<!-- @Packager.RemoveLine
+		<script type="text/javascript" src="js/fck_startup.js"></script>
+		@Packager.RemoveLine -->
+	</head>
+	<body>
+		<table height="100%" width="100%" cellpadding="0" cellspacing="0" border="0" style="TABLE-LAYOUT: fixed">
+			<tr>
+				<td unselectable="on" style="OVERFLOW: hidden">
+					<table width="100%" cellpadding="0" cellspacing="0" border="0">
+						<tr id="Collapsed" style="DISPLAY: none">
+							<td id="ExpandHandle" class="TB_Expand" unselectable="on" colspan="3" onclick="FCKToolbarSet.Expand();return false;"><img class="TB_ExpandImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
+						</tr>
+						<tr id="Expanded" style="DISPLAY: none">
+							<td id="CollapseHandle" style="DISPLAY: none" class="TB_Collapse" 
+								unselectable="on" valign="bottom" onclick="FCKToolbarSet.Collapse();return false;"><img class="TB_CollapseImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
+							<td id="eToolbar" class="TB_ToolbarSet" unselectable="on"></td>
+							<td width="1" class="TB_SideBorder"></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr id="eWysiwyg">
+				<td id="eWysiwygCell" height="100%" valign="top">
+					<iframe id="eEditorArea" name="eEditorArea" height="100%" width="100%" frameborder="no" src="fckblank.html"></iframe>
+				</td>
+			</tr>
+			<tr id="eSource" style="DISPLAY: none">
+				<td class="Source" height="100%" valign="top">
+					<textarea id="eSourceField" dir="ltr" style="WIDTH: 100%; HEIGHT: 100%"></textarea>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Files 1.3.11sr1/fckeditor/editor/images/anchor.gif and 1.4.0sr5-1/fckeditor/editor/images/anchor.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/aiua.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/aiua.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/ak.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/ak.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/alien2.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/alien2.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/alien.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/alien.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/angry1.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/angry1.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/angry.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/angry.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/apophys.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/apophys.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/assjani.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/assjani.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/asthanos.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/asthanos.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/bazuzeus.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/bazuzeus.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/beaute.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/beaute.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/bigsmile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/bigsmile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/blush.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/blush.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/boid.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/boid.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/bonk.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/bonk.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/bored.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/bored.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/borg.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/borg.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/capo.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/capo.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/confused.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/confused.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/cool.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/cool.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/crazy.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/crazy.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/cwm14.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/cwm14.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/demis_roussos.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/demis_roussos.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/devil2.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/devil2.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/devil.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/devil.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/double0smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/double0smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/eek3.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/eek3.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/eltaf.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/eltaf.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/gele.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/gele.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/halm.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/halm.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/happy.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/happy.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon12.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon12.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon23.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon23.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon26.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon26.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon_angel.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon_angel.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon_bandit.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon_bandit.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon_bravo.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon_bravo.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/icon_clown.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/icon_clown.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/jesors1.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/jesors1.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/jesors.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/jesors.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/lol3.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/lol3.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/love.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/love.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/mad.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/mad.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/megaphone.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/megaphone.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/mmm.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/mmm.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/music.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/music.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/notify.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/notify.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/nuts.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/nuts.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/obanon.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/obanon.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/ouaip.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/ouaip.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/pleure.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/pleure.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/plugin.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/plugin.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/question2.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/question2.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/question.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/question.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/rasta2.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/rasta2.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/rastapop.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/rastapop.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/rosebud.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/rosebud.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sad2.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sad2.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sad.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sad.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/shocked.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/shocked.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sick2.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sick2.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sick.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sick.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/slaap.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/slaap.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sleep.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sleep.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/smiley_peur.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/smiley_peur.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sors.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sors.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/sovxx.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/sovxx.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/spamafote.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/spamafote.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/tap67.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/tap67.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/thumbdown.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/thumbdown.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/thumbup.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/thumbup.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/tigi.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/tigi.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/toad666.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/toad666.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/tongue.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/tongue.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/tuffgong.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/tuffgong.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/urgeman.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/urgeman.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/vanadium.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/vanadium.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/wink.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/wink.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/worship.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/worship.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/wouaf.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/wouaf.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/wow.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/wow.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/xp1700.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/xp1700.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/yltype.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/yltype.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/yopyopyop.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/yopyopyop.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/youpi.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/youpi.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/fun/zoor.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/fun/zoor.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/angel_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/angel_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/angry_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/angry_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/broken_heart.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/broken_heart.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/cake.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/cake.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/confused_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/confused_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/cry_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/cry_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/devil_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/devil_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/embaressed_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/embaressed_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/envelope.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/envelope.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/heart.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/heart.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/kiss.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/kiss.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/lightbulb.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/lightbulb.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/omg_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/omg_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/regular_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/regular_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/sad_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/sad_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/shades_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/shades_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/teeth_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/teeth_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/thumbs_down.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/thumbs_down.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/thumbs_up.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/thumbs_up.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/tounge_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/tounge_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/smiley/msn/wink_smile.gif and 1.4.0sr5-1/fckeditor/editor/images/smiley/msn/wink_smile.gif differ
Files 1.3.11sr1/fckeditor/editor/images/spacer.gif and 1.4.0sr5-1/fckeditor/editor/images/spacer.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/js/fckeditorcode_gecko_1.js 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_gecko_1.js
--- 1.3.11sr1/fckeditor/editor/js/fckeditorcode_gecko_1.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_gecko_1.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * This file has been compacted for best loading performance.
+ */
+var FCKDebug=new Object();if (FCKConfig.Debug){FCKDebug.Output=function(A,B){if (!FCKConfig.Debug) return;if (A!=null&&isNaN(A)) A=A.replace(/</g,"&lt;");if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open('fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500',true);if (this.DebugWindow.Output) this.DebugWindow.Output(A,B);};}else FCKDebug.Output=function() {};
+var FCKTools=new Object();FCKTools.GetLinkedFieldValue=function(){return FCK.LinkedField.value;};FCKTools.AttachToLinkedFieldFormSubmit=function(A){var B=FCK.LinkedField.form;if (!B) return;if (FCKBrowserInfo.IsIE) B.attachEvent("onsubmit",A);else B.addEventListener('submit',A,true);if (!B.updateFCKeditor) B.updateFCKeditor=new Array();B.updateFCKeditor[B.updateFCKeditor.length]=A;if (!B.originalSubmit&&(typeof(B.submit)=='function'||(!B.submit.tagName&&!B.submit.length))){B.originalSubmit=B.submit;B.submit=FCKTools_SubmitReplacer;};};function FCKTools_SubmitReplacer(){if (this.updateFCKeditor){for (var i=0;i<this.updateFCKeditor.length;i++) this.updateFCKeditor[i]();};this.originalSubmit();};FCKTools.AddSelectOption=function(A,B,C,D){var E=A.createElement("OPTION");E.text=C;E.value=D;B.options.add(E);return E;};FCKTools.RemoveAllSelectOptions=function(A){for (var i=A.options.length-1;i>=0;i--){A.options.remove(i);};};FCKTools.SelectNoCase=function(A,B,C){var D=B.toString().toLowerCase();for (var i=0;i<A.options.length;i++){if (D==A.options[i].value.toLowerCase()){A.selectedIndex=i;return;};};if (C!=null) FCKTools.SelectNoCase(A,C);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,"&amp;");A=A.replace(/"/g,"&quot;");A=A.replace(/</g,"&lt;");A=A.replace(/>/g,"&gt;");A=A.replace(/'/g,"&#39;");return A;};FCKTools.GetResultingArray=function(A,B){switch (typeof(A)){case "string":return A.split(B);case "function":return B();default:if (isArray(A)) return A;else return new Array();};};FCKTools.GetElementPosition=function(A){var c={ X:0,Y:0 };while (A){c.X+=A.offsetLeft;c.Y+=A.offsetTop;A=A.offsetParent;};return c;};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.Pause=function(A){var B=new Date();while (true){var C=new Date();if (A<C-B) return;};};FCKTools.ConvertStyleSizeToHtml=function(A){return A.endsWith('%')?A:parseInt(A);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.endsWith('%')?A:(A+'px');};
+var GECKO_BOGUS='<br _moz_editor_bogus_node="TRUE">';FCKTools.AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i<A.attributes.length;i++){A.removeAttribute(A.attributes[i].name,0);};};FCKTools.GetAllChildrenIds=function(A){var B=new Array();var C=function(parent){for (var i=0;i<parent.childNodes.length;i++){var D=parent.childNodes[i].id;if (D&&D.length>0) B[B.length]=D;C(parent.childNodes[i]);};};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i<e.childNodes.length;i++) A.appendChild(e.childNodes[i]);e.parentNode.replaceChild(A,e);};FCKTools.CreateXmlObject=function(A){switch (A){case 'XmlHttp':return new XMLHttpRequest();case 'DOMDocument':return document.implementation.createDocument('','',null);};return null;};
+var FCKRegexLib=new Object();FCKRegexLib.AposEntity=/&apos;/gi;FCKRegexLib.ObjectElements=/^(?:IMG|TABLE|TR|TD|INPUT|SELECT|TEXTAREA|HR|OBJECT)$/i;FCKRegexLib.BlockElements=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD)$/i;FCKRegexLib.EmptyElements=/^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i;FCKRegexLib.NamedCommands=/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i;FCKRegexLib.BodyContents=/([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i;FCKRegexLib.ToReplace=/___fcktoreplace:([\w]+)/ig;FCKRegexLib.MetaHttpEquiv=/http-equiv\s*=\s*["']?([^"' ]+)/i;FCKRegexLib.HasBaseTag=/<base /i;FCKRegexLib.HeadOpener=/<head\s?[^>]*>/i;FCKRegexLib.HeadCloser=/<\/head\s*>/i;FCKRegexLib.TableBorderClass=/\s*FCK__ShowTableBorders\s*/;FCKRegexLib.ElementName=/^[A-Za-z_:][\w.-:]*$/;FCKRegexLib.ForceSimpleAmpersand=/___FCKAmp___/g;FCKRegexLib.SpaceNoClose=/\/>/g;FCKRegexLib.EmptyParagraph=/^<(p|div)>\s*<\/\1>$/i;FCKRegexLib.TagBody=/></;FCKRegexLib.StrongOpener=/<STRONG([ \>])/gi;FCKRegexLib.StrongCloser=/<\/STRONG>/gi;FCKRegexLib.EmOpener=/<EM([ \>])/gi;FCKRegexLib.EmCloser=/<\/EM>/gi;FCKRegexLib.GeckoEntitiesMarker=/#\?-\:/g;
+FCKLanguageManager.GetActiveLanguage=function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;};};return this.DefaultLanguage;};FCKLanguageManager.TranslateElements=function(A,B,C){var e=A.getElementsByTagName(B);for (var i=0;i<e.length;i++){var D=e[i].getAttribute('fckLang');if (D){var s=FCKLang[D];if (s) eval('e[i].'+C+' = s');};};};FCKLanguageManager.TranslatePage=function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML');};if (FCKLanguageManager.AvailableLanguages[FCKConfig.DefaultLanguage]) FCKLanguageManager.DefaultLanguage=FCKConfig.DefaultLanguage;else FCKLanguageManager.DefaultLanguage='en';FCKLanguageManager.ActiveLanguage=new Object();FCKLanguageManager.ActiveLanguage.Code=FCKLanguageManager.GetActiveLanguage();FCKLanguageManager.ActiveLanguage.Name=FCKLanguageManager.AvailableLanguages[FCKLanguageManager.ActiveLanguage.Code];FCK.Language=FCKLanguageManager;LoadLanguageFile();
+var FCKEvents;if (!(FCKEvents=NS.FCKEvents)){FCKEvents=NS.FCKEvents=function(A){this.Owner=A;this.RegisteredEvents=new Object();};FCKEvents.prototype.AttachEvent=function(A,B){if (!this.RegisteredEvents[A]) this.RegisteredEvents[A]=new Array();this.RegisteredEvents[A][this.RegisteredEvents[A].length]=B;};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this.RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++) C=(D[i](this.Owner,B)&&C);};return C;};}
+var FCKXHtmlEntities=new Object();if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','­':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','ƒ':'fnof','•':'bull','…':'hellip','′':'prime','″':'Prime','‾':'oline','⁄':'frasl','℘':'weierp','ℑ':'image','ℜ':'real','™':'trade','ℵ':'alefsym','←':'larr','↑':'uarr','→':'rarr','↓':'darr','↔':'harr','↵':'crarr','⇐':'lArr','⇑':'uArr','⇒':'rArr','⇓':'dArr','⇔':'hArr','∀':'forall','∂':'part','∃':'exist','∅':'empty','∇':'nabla','∈':'isin','∉':'notin','∋':'ni','∏':'prod','∑':'sum','−':'minus','∗':'lowast','√':'radic','∝':'prop','∞':'infin','∠':'ang','∧':'and','∨':'or','∩':'cap','∪':'cup','∫':'int','∴':'there4','∼':'sim','≅':'cong','≈':'asymp','≠':'ne','≡':'equiv','≤':'le','≥':'ge','⊂':'sub','⊃':'sup','⊄':'nsub','⊆':'sube','⊇':'supe','⊕':'oplus','⊗':'otimes','⊥':'perp','⋅':'sdot','◊':'loz','♠':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};FCKXHtmlEntities.Chars='';for (var e in FCKXHtmlEntities.Entities) FCKXHtmlEntities.Chars+=e;if (FCKConfig.IncludeLatinEntities){var oEntities={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (var e in oEntities){FCKXHtmlEntities.Entities[e]=oEntities[e];FCKXHtmlEntities.Chars+=e;};oEntities=null;};if (FCKConfig.IncludeGreekEntities){var oEntities={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega'};for (var e in oEntities){FCKXHtmlEntities.Entities[e]=oEntities[e];FCKXHtmlEntities.Chars+=e;};oEntities=null;};FCKXHtmlEntities.EntitiesRegex=new RegExp('','');FCKXHtmlEntities.EntitiesRegex.compile('['+FCKXHtmlEntities.Chars+']|[^'+FCKXHtmlEntities.Chars+']+','g');}else{FCKXHtmlEntities.Entities={ ' ':'nbsp' };FCKXHtmlEntities.EntitiesRegex=/[ ]|[^ ]+/g;}
+var FCKXHtml=new Object();FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKXHtml.SpecialBlocks=new Array();this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var D=this._GetMainXmlString();D=D.substr(7,D.length-15).trim();if (FCKBrowserInfo.IsGecko) D=D.replace(/<br\/>$/,'');D=D.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) D=D.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) D=FCKCodeFormatter.Format(D);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var E=new RegExp('___FCKsi___'+i);D=D.replace(E,FCKXHtml.SpecialBlocks[i]);};this.XML=null;return D};FCKXHtml._AppendAttribute=function(A,B,C){try{var D=this.XML.createAttribute(B);D.value=C?C:'';A.attributes.setNamedItem(D);}catch (e){};};FCKXHtml._AppendChildNodes=function(A,B,C){var D=0;if (B.hasChildNodes()){var E=B.childNodes;for (var i=0;i<E.length;i++){if (this._AppendNode(A,E[i])) D++;};};if (D==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,'nbsp');return;};if (!FCKRegexLib.EmptyElements.test(B.nodeName)) A.appendChild(this.XML.createTextNode(''));};};FCKXHtml._AppendNode=function(A,B){switch (B.nodeType){case 1:if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&B.hasAttribute('_moz_editor_bogus_node')) return false;if (B.getAttribute('_fckdelete')) return false;var C=B.nodeName;if (!FCKRegexLib.ElementName.test(C)) return false;C=C.toLowerCase();if (FCKBrowserInfo.IsGecko&&C=='br'&&B.hasAttribute('type')&&B.getAttribute('type',2)=='_moz') return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;else B._fckxhtmljob=FCKXHtml.CurrentJobNum;var D=this._CreateNode(C);FCKXHtml._AppendAttributes(A,B,D,C);var E=FCKXHtml.TagProcessors[C];if (E){D=E(D,B);if (!D) break;}else this._AppendChildNodes(D,B,FCKRegexLib.BlockElements.test(C));A.appendChild(D);break;case 3:this._AppendTextNode(A,B.nodeValue.replaceNewLineChars(' '));break;case 8:try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) { /* Do nothing... probably this is a wrong format comment. */};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};if (FCKConfig.ForceStrongEm){FCKXHtml._CreateNode=function(A){switch (A){case 'b':A='strong';break;case 'i':A='em';break;};return this.XML.createElement(A);};}else{FCKXHtml._CreateNode=function(A){return this.XML.createElement(A);};};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.addItem(A);};FCKXHtml._AppendTextNode=function(A,B){var C=B.match(FCKXHtmlEntities.EntitiesRegex);if (C){for (var i=0;i<C.length;i++){if (C[i].length==1){var D=FCKXHtmlEntities.Entities[C[i]];if (D!=null){this._AppendEntity(A,D);continue;};};A.appendChild(this.XML.createTextNode(C[i]));};};};FCKXHtml.TagProcessors=new Object();FCKXHtml.TagProcessors['img']=function(A){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');return A;};FCKXHtml.TagProcessors['script']=function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;};FCKXHtml.TagProcessors['style']=function(A,B){if (B.getAttribute('_fcktemp')) return null;if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.innerHTML)));return A;};FCKXHtml.TagProcessors['title']=function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;};FCKXHtml.TagProcessors['base']=function(A,B){if (B.getAttribute('_fcktemp')) return null;return A;};FCKXHtml.TagProcessors['link']=function(A,B){if (B.getAttribute('_fcktemp')) return null;return A;};FCKXHtml.TagProcessors['table']=function(A,B){var C=A.attributes.getNamedItem('class');if (C&&FCKRegexLib.TableBorderClass.test(C.nodeValue)){var D=C.nodeValue.replace(FCKRegexLib.TableBorderClass,'');if (D.length==0) A.attributes.removeNamedItem('class');else FCKXHtml._AppendAttribute(A,'class',D);};FCKXHtml._AppendChildNodes(A,B,false);return A;}
+FCKXHtml._GetMainXmlString=function(){var A=new XMLSerializer();return A.serializeToString(this.MainNode).replace(FCKRegexLib.GeckoEntitiesMarker,'&');};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n<D.length;n++){var E=D[n];if (E.specified){var F=E.nodeName.toLowerCase();var G;if (F=='_fckxhtmljob') continue;else if (F.indexOf('_moz')==0) continue;else if (F=='class') G=E.nodeValue;else if (E.nodeValue===true) G=F;else G=B.getAttribute(F,2);if (FCKConfig.ForceSimpleAmpersand&&G.replace) G=G.replace(/&/g,'___FCKAmp___');this._AppendAttribute(C,F,G);};};}
+var FCKCodeFormatter;if (!(FCKCodeFormatter=NS.FCKCodeFormatter)){FCKCodeFormatter=NS.FCKCodeFormatter=new Object();FCKCodeFormatter.Regex=new Object();FCKCodeFormatter.Regex.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi;FCKCodeFormatter.Regex.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi;FCKCodeFormatter.Regex.NewLineTags=/\<(BR|HR)[^\>]\>/gi;FCKCodeFormatter.Regex.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;FCKCodeFormatter.Regex.LineSplitter=/\s*\n+\s*/g;FCKCodeFormatter.Regex.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;FCKCodeFormatter.Regex.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;FCKCodeFormatter.Regex.FormatIndentatorRemove=new RegExp(FCKConfig.FormatIndentator);FCKCodeFormatter.Format=function(A){var B=A.replace(this.Regex.BlocksOpener,'\n$&');;B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};return B.trim();};}
+var FCKUndo=new Object();FCKUndo.SaveUndoStep=function(){}
+FCK.Events=new FCKEvents(FCK);FCK.Toolbar=null;FCK.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';FCK.StartEditor=function(){this.EditorWindow=window.frames['eEditorArea'];this.EditorDocument=this.EditorWindow.document;this.SetHTML(FCKTools.GetLinkedFieldValue());FCKTools.AttachToLinkedFieldFormSubmit(this.UpdateLinkedField);FCKUndo.SaveUndoStep();this.SetStatus(FCK_STATUS_ACTIVE);};function Window_OnFocus(){FCK.Focus();};FCK.SetStatus=function(A){this.Status=A;if (A==FCK_STATUS_ACTIVE){window.onfocus=window.document.body.onfocus=Window_OnFocus;if (FCKConfig.StartupFocus) FCK.Focus();if (FCKBrowserInfo.IsIE) FCKScriptLoader.AddScript('js/fckeditorcode_ie_2.js');else FCKScriptLoader.AddScript('js/fckeditorcode_gecko_2.js');};this.Events.FireEvent('OnStatusChange',A);};FCK.GetHTML=function(A){var B;if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsIE) B=this.EditorDocument.body.innerHTML.replace(FCKRegexLib.ToReplace,'$1');else B=this.EditorDocument.body.innerHTML;}else B=document.getElementById('eSourceField').value;if (A) return FCKCodeFormatter.Format(B);else return B;};FCK.GetXHTML=function(A){var B=(FCK.EditMode==FCK_EDITMODE_SOURCE);if (B) this.SwitchEditMode();var C;if (FCKConfig.FullPage) C=FCKXHtml.GetXHTML(this.EditorDocument.getElementsByTagName('html')[0],true,A);else{if (FCKConfig.IgnoreEmptyParagraphValue&&this.EditorDocument.body.innerHTML=='<P>&nbsp;</P>') C='';else C=FCKXHtml.GetXHTML(this.EditorDocument.body,false,A);};if (B) this.SwitchEditMode();if (FCKBrowserInfo.IsIE) C=C.replace(FCKRegexLib.ToReplace,'$1');if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) C=FCK.DocTypeDeclaration+'\n'+C;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) C=FCK.XmlDeclaration+'\n'+C;return FCKConfig.ProtectedSource.Revert(C);};FCK.UpdateLinkedField=function(){if (FCKConfig.EnableXHTML) FCK.LinkedField.value=FCK.GetXHTML(FCKConfig.FormatOutput);else FCK.LinkedField.value=FCK.GetHTML(FCKConfig.FormatOutput);FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');};FCK.ShowContextMenu=function(x,y){if (this.Status!=FCK_STATUS_COMPLETE) return;FCKContextMenu.Show(x,y);this.Events.FireEvent("OnContextMenu");};FCK.RegisteredDoubleClickHandlers=new Object();FCK.OnDoubleClick=function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);};FCK.RegisterDoubleClickHandler=function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;};FCK.OnAfterSetHTML=function(){var A,i=0;while((A=FCKDocumentProcessors[i++])) A.ProcessDocument(FCK.EditorDocument);this.Events.FireEvent('OnAfterSetHTML');};var FCKDocumentProcessors=new Array();var FCKDocumentProcessors_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};var FCKAnchorsProcessor=new Object();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0&&(!C.getAttribute('href')||C.getAttribute('href').length==0)){var D=FCKDocumentProcessors_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);};};};FCKDocumentProcessors.addItem(FCKAnchorsProcessor);var FCKPageBreaksProcessor=new Object();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('CENTER');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.innerHTML.trim().length==0){var D=FCKDocumentProcessors_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);};};};FCKDocumentProcessors.addItem(FCKPageBreaksProcessor);var FCKFlashProcessor=new Object();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.src.endsWith('.swf',true)){var D=FCKDocumentProcessors_CreateFakeImage('FCK__Flash',C.cloneNode(true));D.setAttribute('_fckflash','true',0);FCKFlashProcessor.RefreshView(D,C);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);};};};FCKFlashProcessor.RefreshView=function(A,B){if (B.width>0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.width);if (B.height>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.height);};FCKDocumentProcessors.addItem(FCKFlashProcessor);FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};
+FCK.Description="FCKeditor for Gecko Browsers";FCK.InitializeBehaviors=function(){if (FCKConfig.ShowBorders){var A=FCKTools.AppendStyleSheet(this.EditorDocument,FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css');A.setAttribute('_fcktemp','true');};var B=function(e){e.preventDefault();FCK.ShowContextMenu(e.clientX,e.clientY);};this.EditorDocument.addEventListener('contextmenu',B,true);var C=function(e){if (e.ctrlKey&&!e.shiftKey&&!e.altKey){var D=false;switch (e.which){case 66:case 98:FCK.ExecuteNamedCommand('bold');D=true;break;case 105:case 73:FCK.ExecuteNamedCommand('italic');D=true;break;case 117:case 85:FCK.ExecuteNamedCommand('underline');D=true;break;case 86:case 118:D=(FCK.Status!=FCK_STATUS_COMPLETE||!FCK.Events.FireEvent("OnPaste"));break;};if (D){e.preventDefault();e.stopPropagation();};};};this.EditorDocument.addEventListener('keypress',C,true);this.ExecOnSelectionChange=function(){FCK.Events.FireEvent("OnSelectionChange");};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this._OnLoad=function(){if (this._FCK_HTML){this.document.body.innerHTML=this._FCK_HTML;this._FCK_HTML=null;};};this.EditorWindow.addEventListener('load',this._OnLoad,true);};FCK.MakeEditable=function(){try{FCK.EditorDocument.designMode='on';FCK.EditorDocument.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);}catch (e) {};};FCK.Focus=function(){try{FCK.EditorWindow.focus();}catch(e) {};};FCK.SetHTML=function(A,B){A=A.replace(FCKRegexLib.StrongOpener,'<b$1');A=A.replace(FCKRegexLib.StrongCloser,'<\/b>');A=A.replace(FCKRegexLib.EmOpener,'<i$1');A=A.replace(FCKRegexLib.EmCloser,'<\/i>');if (B||FCK.EditMode==FCK_EDITMODE_WYSIWYG){A=FCKConfig.ProtectedSource.Protect(A);if (FCKConfig.FullPage&&FCKRegexLib.BodyContents.test(A)){if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);A=A.replace(FCKRegexLib.HeadCloser,'<link href="'+FCKConfig.BasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" /></head>');var C=A.match(FCKRegexLib.BodyContents);var D=C[1];var E=C[2];var F=C[3];var G=D+'&nbsp;'+F;if (!this._Initialized){FCK.EditorDocument.designMode="on";FCK.EditorDocument.execCommand("useCSS",false,!FCKConfig.GeckoUseSPAN);this._Initialized=true;};this.EditorDocument.open();this.EditorDocument.write(G);this.EditorDocument.close();if (this.EditorDocument.body) this.EditorDocument.body.innerHTML=E;else this.EditorWindow._FCK_HTML=E;this.InitializeBehaviors();}else{if (!this._Initialized){this.EditorDocument.dir=FCKConfig.ContentLangDirection;var G='<title></title>'+'<link href="'+FCKConfig.EditorAreaCSS+'" rel="stylesheet" type="text/css" />'+'<link href="'+FCKConfig.BasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />'+FCK.TempBaseTag;this.EditorDocument.getElementsByTagName("HEAD")[0].innerHTML=G;this.InitializeBehaviors();this._Initialized=true;};if (A.length==0) FCK.EditorDocument.body.innerHTML=GECKO_BOGUS;else if (FCKRegexLib.EmptyParagraph.test(A)) FCK.EditorDocument.body.innerHTML=A.replace(FCKRegexLib.TagBody,'>'+GECKO_BOGUS+'<');else FCK.EditorDocument.body.innerHTML=A;FCK.MakeEditable();};FCK.OnAfterSetHTML();}else document.getElementById('eSourceField').value=A;}
diff -ruN 1.3.11sr1/fckeditor/editor/js/fckeditorcode_gecko_2.js 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_gecko_2.js
--- 1.3.11sr1/fckeditor/editor/js/fckeditorcode_gecko_2.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_gecko_2.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * This file has been compacted for best loading performance.
+ */
+FCK.RedirectNamedCommands=new Object();FCK.ExecuteNamedCommand=function(A,B){FCKUndo.SaveUndoStep();if (FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};FCKUndo.SaveUndoStep();};FCK.GetNamedCommandState=function(A){try{if (!FCK.EditorDocument.queryCommandEnabled(A)) return FCK_TRISTATE_DISABLED;else return FCK.EditorDocument.queryCommandState(A)?FCK_TRISTATE_ON:FCK_TRISTATE_OFF;}catch (e){return FCK_TRISTATE_OFF;};};FCK.GetNamedCommandValue=function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==FCK_TRISTATE_DISABLED) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';};FCK.PasteFromWord=function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');};FCK.Preview=function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.GetXHTML().replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'">'+'<head><title>'+FCKLang.Preview+'</title>'+'<link href="'+FCKConfig.EditorAreaCSS+'" rel="stylesheet" type="text/css" />'+FCK.TempBaseTag+'</head><body>'+FCK.GetXHTML()+'</body></html>';};D.document.write(E);D.document.close();};FCK.SwitchEditMode=function(){var A=(FCK.EditMode==FCK_EDITMODE_WYSIWYG);document.getElementById('eWysiwyg').style.display=A?'none':'';document.getElementById('eSource').style.display=A?'':'none';if (A){if (FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();document.getElementById('eSourceField').value=(FCKConfig.EnableXHTML&&FCKConfig.EnableSourceXHTML?FCK.GetXHTML(FCKConfig.FormatSource):FCK.GetHTML(FCKConfig.FormatSource));}else FCK.SetHTML(FCK.GetHTML(),true);FCK.EditMode=A?FCK_EDITMODE_SOURCE:FCK_EDITMODE_WYSIWYG;FCKToolbarSet.RefreshModeState();FCK.Focus();};FCK.CreateElement=function(A){var e=FCK.EditorDocument.createElement(A);return FCK.InsertElementAndGetIt(e);};FCK.InsertElementAndGetIt=function(e){e.setAttribute('__FCKTempLabel',1);this.InsertElement(e);var A=FCK.EditorDocument.getElementsByTagName(e.tagName);for (var i=0;i<A.length;i++){if (A[i].getAttribute('__FCKTempLabel')){A[i].removeAttribute('__FCKTempLabel');return A[i];};};return null;};
+FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;default:return FCK._BaseGetNamedCommandState(A);};};FCK.RedirectNamedCommands={Print:true,Paste:true,Cut:true,Copy:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try			{ if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste');}catch (e)	{ alert(FCKLang.PasteErrorPaste);};break;case 'Cut':try			{ FCK.ExecuteNamedCommand('Cut');}catch (e)	{ alert(FCKLang.PasteErrorCut);};break;case 'Copy':try			{ FCK.ExecuteNamedCommand('Copy');}catch (e)	{ alert(FCKLang.PasteErrorCopy);};break;default:FCK.ExecuteNamedCommand(A,B);};};FCK.AttachToOnSelectionChange=function(A){this.Events.AttachEvent('OnSelectionChange',A);};FCK.Paste=function(){if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;}else return true;};FCK.InsertHtml=function(A){var B=FCKSelection.Delete();var C=B.getRangeAt(0);var D=C.createContextualFragment(A);var E=D.lastChild;C.insertNode(D);C.setEndAfter(E);C.setStartAfter(E);B.removeAllRanges();B=FCK.EditorWindow.getSelection();B.addRange(C);this.Focus();};FCK.InsertElement=function(A){var B=FCKSelection.Delete();var C=B.getRangeAt(0);C.insertNode(A);C.setEndAfter(A);C.setStartAfter(A);this.Focus();};FCK.PasteAsPlainText=function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A){FCK.ExecuteNamedCommand('Unlink');if (A.length>0){var B='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',B);var C=document.evaluate("//a[@href='"+B+"']",this.EditorDocument.body,null,9,null).singleNodeValue;if (C){C.href=A;return C;};};};
+var FCKSelection=new Object();FCK.Selection=FCKSelection;
+FCKSelection.GetType=function(){this._Type='Text';var A=FCK.EditorWindow.getSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.startContainer==B.endContainer&&(B.endOffset-B.startOffset)==1) this._Type='Control';};return this._Type;};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorWindow.getSelection();return A.anchorNode.childNodes[A.anchorOffset];};};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentElement;else{var A=FCK.EditorWindow.getSelection();if (A){var B=A.anchorNode;while (B&&B.nodeType!=1) B=B.parentNode;return B;};};};FCKSelection.SelectNode=function(A){FCK.Focus();var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=FCK.EditorWindow.getSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=FCK.EditorWindow.getSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try		{ B=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;}catch(e){};};while (B){if (B.nodeType==1&&B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;while (C){if (C.tagName==A) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=FCK.EditorWindow.getSelection();for (var i=0;i<A.rangeCount;i++){A.getRangeAt(i).deleteContents();};return A;};
+var FCKPanel=function(A){if (A) this.Window=A;else{this.Window=window;while (this.Window!=window.top){try{if (this.Window.parent.document.body.tagName=='FRAMESET') break;}catch (e){break;};this.Window=this.Window.parent;};};};FCKPanel.prototype.Create=function(){this._IFrame=this.Window.document.createElement('iframe');this._IFrame.src='about:blank';this._IFrame.frameBorder='0';this._IFrame.scrolling='no';this._IFrame.style.left='0px';this._IFrame.style.top='0px';this._IFrame.width=10;this._IFrame.height=10;this._IFrame.style.position='absolute';this._IFrame.style.visibility='hidden';this._IFrame.IsFCKPanel=true;this._IFrame.Panel=this;this.Window.document.body.appendChild(this._IFrame);this.Document=this._IFrame.contentWindow.document;this.Document.open();this.Document.write('<html><head></head><body><\/body><\/html>');this.Document.close();this.Document.body.style.margin=this.Document.body.style.padding='0px';if (this.StyleSheet) FCKTools.AppendStyleSheet(this.Document,this.StyleSheet);this.OuterDiv=this.Document.body.appendChild(this.Document.createElement('DIV'));this.OuterDiv.style.cssFloat='left';this.PanelDiv=this.OuterDiv.appendChild(this.Document.createElement('DIV'));this.PanelDiv.className='FCK_Panel';this.Created=true;};FCKPanel.prototype.Show=function(A,B,C,D,E,F){if (!this.Created) this.Create();if (D!=null&&F&&D<this.OuterDiv.offsetWidth) this.PanelDiv.style.width=D;if (E!=null&&F&&E<this.PanelDiv.offsetHeight) this.PanelDiv.style.height=E+'px';var G=this.GetElementPosition(C);A+=G.X;B+=G.Y;if (A+this.OuterDiv.offsetWidth>this.Window.innerWidth){A-=A+this.OuterDiv.offsetWidth-this.Window.innerWidth;};this._IFrame.style.left=A+'px';this._IFrame.style.top=B+'px';function SetOnClickListener(targetWindow,targetFunction){try{if (targetWindow==null||(targetWindow.frameElement&&targetWindow.frameElement.IsFCKPanel)) return;targetWindow.document.addEventListener('click',targetFunction,false);}catch (e) {};for (var i=0;i<targetWindow.frames.length;i++) SetOnClickListener(targetWindow.frames[i],targetFunction);};SetOnClickListener(window.top,FCKPanelEventHandlers.OnDocumentClick);this._IFrame.width=this.OuterDiv.offsetWidth;this._IFrame.height=this.OuterDiv.offsetHeight;this._IFrame.style.visibility='';};FCKPanel.prototype.GetElementPosition=function(A){var c={ X:0,Y:0 };while (A){c.X+=A.offsetLeft;c.Y+=A.offsetTop;if (A.offsetParent==null&&A.ownerDocument.defaultView!=this.Window) A=A.ownerDocument.defaultView.frameElement;else A=A.offsetParent;};return c;};FCKPanel.prototype.Hide=function(){this.PanelDiv.style.overflow='visible';this._IFrame.style.visibility='hidden';};var FCKPanelEventHandlers=new Object();FCKPanelEventHandlers.OnDocumentClick=function(e){var A=e.target.ownerDocument.defaultView;if (!A.IsFCKPanel){function RemoveOnClickListener(targetWindow){if (targetWindow==null) return;try{if (targetWindow.frameElement&&targetWindow.frameElement.IsFCKPanel) targetWindow.frameElement.Panel.Hide();else targetWindow.document.removeEventListener('click',FCKPanelEventHandlers.OnDocumentClick,false);}catch (e) {};for (var i=0;i<targetWindow.frames.length;i++) RemoveOnClickListener(targetWindow.frames[i]);};RemoveOnClickListener(window.top);};}
+var FCKTableHandler=new Object();FCKTableHandler.InsertRow=function(){var A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=A.cloneNode(true);A.parentNode.insertBefore(B,A);FCKTableHandler.ClearRow(A);};FCKTableHandler.DeleteRows=function(A){if (!A) A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');if (B.rows.length==1){FCKTableHandler.DeleteTable(B);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A) A=FCKSelection.MoveToAncestorNode("TABLE");if (!A) return;A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(){var A=FCKSelection.MoveToAncestorNode("TD");if (!A) A=FCKSelection.MoveToAncestorNode("TH");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex+1;for (var i=0;i<B.rows.length;i++){var D=B.rows[i];if (D.cells.length<C) continue;A=D.cells[C-1].cloneNode(false);if (FCKBrowserInfo.IsGecko) A.innerHTML=FCKBrowserInfo.IsGecko?GECKO_BOGUS:'';var E=D.cells[C];if (E) D.insertBefore(A,E);else D.appendChild(A);};};FCKTableHandler.DeleteColumns=function(){var A=FCKSelection.MoveToAncestorNode("TD");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex;for (var i=B.rows.length-1;i>=0;i--){var D=B.rows[i];if (C==0&&D.cells.length==1){FCKTableHandler.DeleteRows(D);continue;};if (D.cells[C]) D.removeChild(D.cells[C]);};};FCKTableHandler.InsertCell=function(A){var B=A?A:FCKSelection.MoveToAncestorNode("TD");if (!B) return;var C=FCK.EditorDocument.createElement("TD");if (FCKBrowserInfo.IsGecko) C.innerHTML=GECKO_BOGUS;if (B.cellIndex==B.parentNode.cells.lenght-1){B.parentNode.appendChild(C);}else{B.parentNode.insertBefore(C,B.nextSibling);};return C;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);};};FCKTableHandler.MergeCells=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<2) return;if (A[0].parentNode!=A[A.length-1].parentNode) return;var B=isNaN(A[0].colSpan)?1:A[0].colSpan;var C='';for (var i=A.length-1;i>0;i--){B+=isNaN(A[i].colSpan)?1:A[i].colSpan;C=A[i].innerHTML+C;FCKTableHandler.DeleteCell(A[i]);};A[0].colSpan=B;A[0].innerHTML+=C;};FCKTableHandler.SplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=FCKTableHandler._GetCellIndexSpan(B,A[0].parentNode.rowIndex,A[0]);var D=this._GetCollumnCells(B,C);for (var i=0;i<D.length;i++){if (D[i]==A[0]){var E=this.InsertCell(A[0]);if (!isNaN(A[0].rowSpan)&&A[0].rowSpan>1) E.rowSpan=A[0].rowSpan;}else{if (isNaN(D[i].colSpan)) D[i].colSpan=2;else D[i].colSpan+=1;};};};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCollumnCells=function(A,B){var C=new Array();for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=new Array();for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=new Array();var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=new Array();for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];};};c+=E-1;};};return C;};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsGecko) B[i].innerHTML=GECKO_BOGUS;else B[i].innerHTML='';};}
+FCKTableHandler.GetSelectedCells=function(){var A=new Array();var B=FCK.EditorWindow.getSelection();if (B.rangeCount==1&&B.anchorNode.nodeType==3){var C=FCKTools.GetElementAscensor(B.anchorNode,'TD');if (C){A[0]=C;return A;};};for (var i=0;i<B.rangeCount;i++){var D=B.getRangeAt(i);var E=D.startContainer.childNodes[D.startOffset];if (E.tagName=='TD') A[A.length]=E;};return A;};
+var FCKXml;if (!(FCKXml=NS.FCKXml)){FCKXml=NS.FCKXml=function(){};FCKXml.prototype.LoadUrl=function(A){var B=this;var C=FCKTools.CreateXmlObject('XmlHttp');C.open("GET",A,false);C.send(null);if (C.status==200||C.status==304) this.DOMDocument=C.responseXML;else if (C.status==0&&C.readyState==4) this.DOMDocument=C.responseXML;else alert('Error loading "'+A+'"');};FCKXml.prototype.SelectNodes=function(A,B){var C=new Array();var D=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);if (D){var E=D.iterateNext();while(E){C[C.length]=E;E=D.iterateNext();};};return C;};FCKXml.prototype.SelectSingleNode=function(A,B){var C=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),9,null);if (C&&C.singleNodeValue) return C.singleNodeValue;else return null;};}
+var FCKStyleDef=function(A,B){this.Name=A;this.Element=B.toUpperCase();this.IsObjectElement=FCKRegexLib.ObjectElements.test(this.Element);this.Attributes=new Object();};FCKStyleDef.prototype.AddAttribute=function(A,B){this.Attributes[A]=B;};FCKStyleDef.prototype.GetOpenerTag=function(){var s='<'+this.Element;for (var a in this.Attributes) s+=' '+a+'="'+this.Attributes[a]+'"';return s+'>';};FCKStyleDef.prototype.GetCloserTag=function(){return '</'+this.Element+'>';};FCKStyleDef.prototype.RemoveFromSelection=function(){if (FCKSelection.GetType()=='Control') this._RemoveMe(FCKSelection.GetSelectedElement());else this._RemoveMe(FCKSelection.GetParentElement());}
+FCKStyleDef.prototype.ApplyToSelection=function(){if (FCKSelection.GetType()=='Text'&&!this.IsObjectElement){var A=FCK.EditorWindow.getSelection();var e=FCK.EditorDocument.createElement(this.Element);for (var i=0;i<A.rangeCount;i++){e.appendChild(A.getRangeAt(i).extractContents());};this._AddAttributes(e);this._RemoveDuplicates(e);var B=A.getRangeAt(0);B.insertNode(e);}else{var C=FCKSelection.GetSelectedElement();if (C.tagName==this.Element) this._AddAttributes(C);};};FCKStyleDef.prototype._AddAttributes=function(A){for (var a in this.Attributes) A.setAttribute(a,this.Attributes[a],0);};FCKStyleDef.prototype._RemoveDuplicates=function(A){for (var i=0;i<A.childNodes.length;i++){var B=A.childNodes[i];if (B.nodeType!=1) continue;this._RemoveDuplicates(B);if (this.IsEqual(B)) FCKTools.RemoveOuterTags(B);};};FCKStyleDef.prototype.IsEqual=function(e){if (e.tagName!=this.Element) return false;for (var a in this.Attributes){if (e.getAttribute(a)!=this.Attributes[a]) return false;};return true;};FCKStyleDef.prototype._RemoveMe=function(A){if (!A) return;var B=A.parentNode;if (A.nodeType==1&&this.IsEqual(A)){if (this.IsObjectElement){for (var a in this.Attributes) A.removeAttribute(a,0);return;}else FCKTools.RemoveOuterTags(A);};this._RemoveMe(B);}
+var FCKStylesLoader=function(){this.Styles=new Object();this.StyleGroups=new Object();this.Loaded=false;this.HasObjectElements=false;};FCKStylesLoader.prototype.Load=function(A){var B=new FCKXml();B.LoadUrl(A);var C=B.SelectNodes('Styles/Style');for (var i=0;i<C.length;i++){var D=C[i].attributes.getNamedItem('element').value.toUpperCase();var E=new FCKStyleDef(C[i].attributes.getNamedItem('name').value,D);if (E.IsObjectElement) this.HasObjectElements=true;var F=B.SelectNodes('Attribute',C[i]);for (var j=0;j<F.length;j++){var G=F[j].attributes.getNamedItem('name').value;var H=F[j].attributes.getNamedItem('value').value;if (G.toLowerCase()=='style'){var I=document.createElement('SPAN');I.style.cssText=H;H=I.style.cssText;};E.AddAttribute(G,H);};this.Styles[E.Name]=E;var J=this.StyleGroups[D];if (J==null){this.StyleGroups[D]=new Array();J=this.StyleGroups[D];};J[J.length]=E;};this.Loaded=true;}
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);};
+var FCKDialogCommand=function(A,B,C,D,E,F,G){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.GetStateFunction=F;this.GetStateParam=G;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK_TRISTATE_OFF;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKFontNameCommand=function(){this.Name='FontName';};FCKFontNameCommand.prototype.Execute=function(A){if (A==null||A==""){}else FCK.ExecuteNamedCommand('FontName',A);};FCKFontNameCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontName');};var FCKFontSizeCommand=function(){this.Name='FontSize';};FCKFontSizeCommand.prototype.Execute=function(A){if (typeof(A)=='string') A=parseInt(A);if (A==null||A==''){FCK.ExecuteNamedCommand('FontSize',3);}else FCK.ExecuteNamedCommand('FontSize',A);};FCKFontSizeCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontSize');};var FCKFormatBlockCommand=function(){this.Name='FormatBlock';};FCKFormatBlockCommand.prototype.Execute=function(A){if (A==null||A=='') FCK.ExecuteNamedCommand('FormatBlock','<P>');else FCK.ExecuteNamedCommand('FormatBlock','<'+A+'>');};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.LinkedField.form;if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};A.submit();};FCKSaveCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetHTML('');FCKUndo.Typing=true;};FCKNewPageCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsGecko){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==FCK_EDITMODE_WYSIWYG?FCK_TRISTATE_OFF:FCK_TRISTATE_ON);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Undo();else FCK.ExecuteNamedCommand('Undo');};FCKUndoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckUndoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Undo');};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Redo();else FCK.ExecuteNamedCommand('Redo');};FCKRedoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckRedoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Redo');};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){var A=FCK.EditorDocument.createElement('CENTER');A.style.pageBreakAfter='always';var B=FCKDocumentProcessors_CreateFakeImage('FCK__PageBreak',A);B=FCK.InsertElement(B);};FCKPageBreakCommand.prototype.GetState=function(){return 0;}
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;}
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;this._Panel=new FCKPanel();this._Panel.StyleSheet=FCKConfig.SkinPath+'fck_contextmenu.css';this._Panel.Create();this._CreatePanelBody(this._Panel.Document,this._Panel.PanelDiv);};FCKTextColorCommand.prototype.Execute=function(A,B,C){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor',A);else if (FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('hilitecolor',A);else FCK.ExecuteNamedCommand('BackColor',A);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};function FCKTextColorCommand_OnMouseOver()	{ this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut()	{ this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(){this.className='ColorDeselected';this.Command.SetColor('#'+this.Color);this.Command._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(){this.className='ColorDeselected';this.Command.SetColor('');this.Command._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(){this.className='ColorDeselected';this.Command._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,this.Command.SetColor);};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';C.onmouseover=FCKTextColorCommand_OnMouseOver;C.onmouseout=FCKTextColorCommand_OnMouseOut;return C;};var D=B.appendChild(A.createElement("TABLE"));D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\<tr>\<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\<td nowrap width="100%" align="center" unselectable="on">' + FCKLang.ColorAutomatic + '</td>\</tr>\</table>';C.Command=this;C.onclick=FCKTextColorCommand_AutoOnClick;var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8&&H<G.length;i++,H++){C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.Color=G[H];C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #'+G[H]+'"></div></div>';C.Command=this;C.onclick=FCKTextColorCommand_OnClick;};};E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';C.Command=this;C.onclick=FCKTextColorCommand_MoreOnClick;}
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return FCK_TRISTATE_DISABLED;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();switch (this.Name){case 'TableInsertRow':FCKTableHandler.InsertRow();break;case 'TableDeleteRows':FCKTableHandler.DeleteRows();break;case 'TableInsertColumn':FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns':FCKTableHandler.DeleteColumns();break;case 'TableInsertCell':FCKTableHandler.InsertCell();break;case 'TableDeleteCells':FCKTableHandler.DeleteCells();break;case 'TableMergeCells':FCKTableHandler.MergeCells();break;case 'TableSplitCell':FCKTableHandler.SplitCell();break;default:alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));};};FCKTableCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;}
+var FCKStyleCommand=function(){this.Name='Style';this.StylesLoader=new FCKStylesLoader();this.StylesLoader.Load(FCKConfig.StylesXmlPath);this.Styles=this.StylesLoader.Styles;};FCKStyleCommand.prototype.Execute=function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) B.Style.RemoveFromSelection();else B.Style.ApplyToSelection();FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent("OnSelectionChange");};FCKStyleCommand.prototype.GetState=function(){var A=FCK.EditorDocument.selection;if (FCKSelection.GetType()=='Control'){var e=FCKSelection.GetSelectedElement();if (e) return this.StylesLoader.StyleGroups[e.tagName]?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;};return FCK_TRISTATE_OFF;};FCKStyleCommand.prototype.GetActiveStyles=function(){var A=new Array();if (FCKSelection.GetType()=='Control') this._CheckStyle(FCKSelection.GetSelectedElement(),A,false);else this._CheckStyle(FCKSelection.GetParentElement(),A,true);return A;};FCKStyleCommand.prototype._CheckStyle=function(A,B,C){if (!A) return;if (A.nodeType==1){var D=this.StylesLoader.StyleGroups[A.tagName];if (D){for (var i=0;i<D.length;i++){if (D[i].IsEqual(A)) B[B.length]=D[i];};};};if (C) this._CheckStyle(A.parentNode,B,C);}
+var FCKCommands=FCK.Commands=new Object();FCKCommands.LoadedCommands=new Object();FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,390,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,330,FCK.GetNamedCommandState,'CreateLink');break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,170);break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html',370,170);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html',370,170);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',400,330);break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindTitle,'dialog/fck_find.html',340,170);break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgReplaceTitle,'dialog/fck_replace.html',340,200);break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,400);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,400);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,300);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',400,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',400,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',500,250);break;case 'UniversalKey':B=new FCKDialogCommand('UniversalKey',FCKLang.UniversalKeyboard,'dialog/fck_universalkey.html',415,300);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'TableInsertRow':B=new FCKTableCommand('TableInsertRow');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumn':B=new FCKTableCommand('TableInsertColumn');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCell':B=new FCKTableCommand('TableInsertCell');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableSplitCell':B=new FCKTableCommand('TableSplitCell');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,230);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,230);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,230);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,230);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,230);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,230);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,230);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,380);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,400);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;};};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;};
+var FCKToolbarButton=function(A,B,C,D,E,F){this.Command=FCKCommands.GetCommand(A);this.Label=B?B:A;this.Tooltip=C?C:(B?B:A);this.Style=D?D:FCK_TOOLBARITEM_ONLYICON;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';this.State=FCK_UNKNOWN;};FCKToolbarButton.prototype.CreateInstance=function(A){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;var B='<table title="'+this.Tooltip+'" cellspacing="0" cellpadding="0" border="0" unselectable="on">'+'<tr>';if (this.Style!=FCK_TOOLBARITEM_ONLYTEXT) B+='<td class="TB_Icon" unselectable="on"><img src="'+this.IconPath+'" width="21" height="21" unselectable="on"></td>';if (this.Style!=FCK_TOOLBARITEM_ONLYICON) B+='<td class="TB_Text" unselectable="on" nowrap>'+this.Label+'</td>';B+='</tr>'+'</table>';this.DOMDiv.innerHTML=B;var C=A.DOMRow.insertCell(-1);C.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarButton.prototype.RefreshState=function(){var A=this.Command.GetState();if (A==this.State) return;this.State=A;switch (this.State){case FCK_TRISTATE_ON:this.DOMDiv.className='TB_Button_On';this.DOMDiv.onmouseover=FCKToolbarButton_OnMouseOnOver;this.DOMDiv.onmouseout=FCKToolbarButton_OnMouseOnOut;this.DOMDiv.onclick=FCKToolbarButton_OnClick;break;case FCK_TRISTATE_OFF:this.DOMDiv.className='TB_Button_Off';this.DOMDiv.onmouseover=FCKToolbarButton_OnMouseOffOver;this.DOMDiv.onmouseout=FCKToolbarButton_OnMouseOffOut;this.DOMDiv.onclick=FCKToolbarButton_OnClick;break;default:this.Disable();break;};};function FCKToolbarButton_OnMouseOnOver(){this.className='TB_Button_On TB_Button_On_Over';};function FCKToolbarButton_OnMouseOnOut(){this.className='TB_Button_On';};function FCKToolbarButton_OnMouseOffOver(){this.className='TB_Button_On TB_Button_Off_Over';};function FCKToolbarButton_OnMouseOffOut(){this.className='TB_Button_Off';};function FCKToolbarButton_OnClick(e){this.FCKToolbarButton.Click(e);return false;};FCKToolbarButton.prototype.Click=function(){this.Command.Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this.State=FCK_TRISTATE_DISABLED;this.DOMDiv.className='TB_Button_Disabled';this.DOMDiv.onmouseover=null;this.DOMDiv.onmouseout=null;this.DOMDiv.onclick=null;}
+var FCKSpecialCombo=function(A){this.FieldWidth=80;this.PanelWidth=130;this.PanelMaxHeight=150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=FCK_TOOLBARITEM_ICONTEXT;this.Enabled=true;this.Items=new Object();this._Panel=new FCKPanel();this._Panel.StyleSheet=FCKConfig.SkinPath+'fck_contextmenu.css';this._Panel.Create();this._Panel.PanelDiv.className+=' SC_Panel';this._Panel.PanelDiv.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._Panel.PanelDiv.getElementsByTagName('TD')[0];};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(){this.FCKSpecialCombo._Panel.Hide();this.FCKSpecialCombo.SetLabel(this.FCKItemLabel);if (typeof(this.FCKSpecialCombo.OnSelect)=='function') this.FCKSpecialCombo.OnSelect(this.FCKItemID,this);};FCKSpecialCombo.prototype.AddItem=function(A,B,C){var D=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));D.className=D.originalClass='SC_Item';D.innerHTML=B;D.FCKItemID=A;D.FCKItemLabel=C?C:A;D.FCKSpecialCombo=this;D.Selected=false;D.onmouseover=FCKSpecialCombo_ItemOnMouseOver;D.onmouseout=FCKSpecialCombo_ItemOnMouseOut;D.onclick=FCKSpecialCombo_ItemOnClick;this.Items[A.toString().toLowerCase()]=D;return D;};FCKSpecialCombo.prototype.SelectItem=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];if (B){B.className=B.originalClass='SC_ItemSelected';B.Selected=true;};};FCKSpecialCombo.prototype.DeselectAll=function(){for (var i in this.Items){this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){this.Label=A.length==0?'&nbsp;':A;if (this._LabelEl) this._LabelEl.innerHTML=this.Label;};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){this._OuterTable=A.appendChild(document.createElement('TABLE'));this._OuterTable.cellPadding=0;this._OuterTable.cellSpacing=0;this._OuterTable.insertRow(-1);var B;var C;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON:B='TB_ButtonType_Icon';C=false;break;case FCK_TOOLBARITEM_ONLYTEXT:B='TB_ButtonType_Text';C=false;break;case FCK_TOOLBARITEM_ICONTEXT:C=true;break;};if (this.Caption&&this.Caption.length>0&&C){var D=this._OuterTable.rows[0].insertCell(-1);D.unselectable='on';D.innerHTML=this.Caption;D.className='SC_FieldCaption';};var E=this._OuterTable.rows[0].insertCell(-1).appendChild(document.createElement('DIV'));if (C){E.className='SC_Field';E.style.width=this.FieldWidth+'px';E.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldLabel" unselectable="on"><label unselectable="on">&nbsp;</label></td><td class="SC_FieldButton" unselectable="on">&nbsp;</td></tr></tbody></table>';this._LabelEl=E.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{E.className='TB_Button_Off';E.innerHTML='<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldButton" style="border-left: none;" unselectable="on">&nbsp;</td></tr></tbody></table>';E.innerHTML='<table title="'+this.Tooltip+'" class="'+B+'" cellspacing="0" cellpadding="0" border="0" unselectable="on">'+'<tr>'+'<td class="TB_Text" unselectable="on">'+this.Caption+'</td>'+'<td class="TB_ButtonArrow" unselectable="on"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'+'</tr>'+'</table>';};E.SpecialCombo=this;E.onmouseover=FCKSpecialCombo_OnMouseOver;E.onmouseout=FCKSpecialCombo_OnMouseOut;E.onclick=FCKSpecialCombo_OnClick;};function FCKSpecialCombo_OnMouseOver(){if (this.SpecialCombo.Enabled){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_On';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_On';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field SC_FieldOver';break;};};};function FCKSpecialCombo_OnMouseOut(){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field';break;};};function FCKSpecialCombo_OnClick(e){if (e){e.stopPropagation();FCKPanelEventHandlers.OnDocumentClick(e);};if (this.SpecialCombo.Enabled){var oPanel=this.SpecialCombo._Panel;if (typeof(this.SpecialCombo.OnBeforeClick)=='function') this.SpecialCombo.OnBeforeClick(this.SpecialCombo);if (this.SpecialCombo._ItemsHolderEl.offsetHeight>this.SpecialCombo.PanelMaxHeight) oPanel.PanelDiv.style.height=this.SpecialCombo.PanelMaxHeight+'px';else oPanel.PanelDiv.style.height=this.SpecialCombo._ItemsHolderEl.offsetHeight+'px';oPanel.PanelDiv.style.width=this.SpecialCombo.PanelWidth+'px';if (FCKBrowserInfo.IsGecko) oPanel.PanelDiv.style.overflow='-moz-scrollbars-vertical';oPanel.Show(0,this.offsetHeight,this,null,this.SpecialCombo.PanelMaxHeight,true);};return false;};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;};function FCKToolbarSpecialCombo_OnSelect(itemId,item){this.Command.Execute(itemId,item);};FCKToolbarSpecialCombo.prototype.CreateInstance=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel());this._Combo.FieldWidth=this.FieldWidth!=null?this.FieldWidth:100;this._Combo.PanelWidth=this.PanelWidth!=null?this.PanelWidth:150;this._Combo.PanelMaxHeight=this.PanelMaxHeight!=null?this.PanelMaxHeight:150;this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A.DOMRow.insertCell(-1));this._Combo.Command=this.Command;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(combo,value){combo.DeselectAll();combo.SelectItem(value);combo.SetLabelById(value);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=this.Command.GetState();if (B!=FCK_TRISTATE_DISABLED){A=FCK_TRISTATE_ON;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}else A=FCK_TRISTATE_DISABLED;if (A==this.State) return;if (A==FCK_TRISTATE_DISABLED){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=FCK_TRISTATE_DISABLED);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=FCK_TRISTATE_DISABLED;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}
+var FCKToolbarFontsCombo=function(A,B){this.Command=FCKCommands.GetCommand('FontName');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontsCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.CreateItems=function(A){var B=FCKConfig.FontNames.split(';');for (var i=0;i<B.length;i++) this._Combo.AddItem(B[i],'<span style="font-family: \''+B[i]+'\'; font-size: 12px;">'+B[i]+'</span>');}
+var FCKToolbarFontSizeCombo=function(A,B){this.Command=FCKCommands.GetCommand('FontSize');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.CreateItems=function(A){A.FieldWidth=70;var B=FCKConfig.FontSizes.split(';');for (var i=0;i<B.length;i++){var C=B[i].split('/');this._Combo.AddItem(C[0],'<font size="'+C[0]+'">'+C[1]+'</font>',C[1]);};}
+var FCKToolbarFontFormatCombo=function(A,B){this.Command=FCKCommands.GetCommand('FontFormat');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;this.PanelWidth=190;};FCKToolbarFontFormatCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.CreateItems=function(A){var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){if (D[i]=='div'&&FCKBrowserInfo.IsGecko) continue;this._Combo.AddItem(D[i],'<'+D[i]+'>'+C[D[i]]+'</'+D[i]+'>',C[D[i]]);};}
+var FCKToolbarStyleCombo=function(A,B){this.Command=FCKCommands.GetCommand('Style');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){FCKTools.AppendStyleSheet(A._Panel.Document,FCKConfig.EditorAreaCSS);if (!FCKBrowserInfo.IsGecko) A.OnBeforeClick=this.RefreshVisibleItems;for (var s in this.Command.Styles){var B=this.Command.Styles[s];var C;if (B.IsObjectElement) C=A.AddItem(s,s);else C=A.AddItem(s,B.GetOpenerTag()+s+B.GetCloserTag());C.Style=B;};};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){A.DeselectAll();var B=this.Command.GetActiveStyles();if (B.length>0){for (var i=0;i<B.length;i++) A.SelectItem(B[i].Name);A.SetLabelById(B[0].Name);}else A.SetLabel('');};FCKToolbarStyleCombo.prototype.RefreshVisibleItems=function(A){if (FCKSelection.GetType()=='Control') var B=FCKSelection.GetSelectedElement().tagName;for (var i in A.Items){var C=A.Items[i];if ((B&&C.Style.Element==B)||(!B&&!C.Style.IsObjectElement)) C.style.display='';else C.style.display='none';};}
+var FCKToolbarPanelButton=function(A,B,C,D){this.Command=FCKCommands.GetCommand(A);this.Label=B?B:A;this.Tooltip=C?C:(B?B:A);this.Style=D?D:FCK_TOOLBARITEM_ONLYICON;this.State=FCK_UNKNOWN;};FCKToolbarPanelButton.prototype.Click=function(e){if (e){e.stopPropagation();FCKPanelEventHandlers.OnDocumentClick(e);};if (this.State!=FCK_TRISTATE_DISABLED){this.Command.Execute(0,this.DOMDiv.offsetHeight,this.DOMDiv);};return false;};FCKToolbarPanelButton.prototype.CreateInstance=function(A){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;var B='<table title="'+this.Tooltip+'" cellspacing="0" cellpadding="0" border="0" unselectable="on">'+'<tr>';if (this.Style!=FCK_TOOLBARITEM_ONLYTEXT) B+='<td class="TB_Icon" unselectable="on"><img src="'+FCKConfig.SkinPath+'toolbar/'+this.Command.Name.toLowerCase()+'.gif" width="21" height="21" unselectable="on"></td>';if (this.Style!=FCK_TOOLBARITEM_ONLYICON) B+='<td class="TB_Text" unselectable="on" nowrap>'+this.Label+'</td>';B+='<td class="TB_ButtonArrow" unselectable="on"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'+'</tr>'+'</table>';this.DOMDiv.innerHTML=B;var C=A.DOMRow.insertCell(-1);C.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems=new Object();FCKToolbarItems.LoadedItems=new Object();FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,FCK_TOOLBARITEM_ICONTEXT,true,true);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak);break;case 'UniversalKey':B=new FCKToolbarButton('UniversalKey',FCKLang.UniversalKeyboard);break;case 'Rule':B=new FCKToolbarButton('InsertHorizontalRule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;}
+var FCKToolbar=function(){this.Items=new Array();var e=this.DOMTable=document.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';e.cellPadding=0;e.cellSpacing=0;e.border=0;this.DOMRow=e.insertRow(-1);var A=this.DOMRow.insertCell(-1);A.className='TB_Start';A.innerHTML='<img src="'+FCKConfig.SkinPath+'images/toolbar.start.gif" width="7" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';FCKToolbarSet.DOMElement.appendChild(e);};FCKToolbar.prototype.AddItem=function(A){this.Items[this.Items.length]=A;A.CreateInstance(this);};FCKToolbar.prototype.AddSeparator=function(){var A=this.DOMRow.insertCell(-1);A.unselectable='on';A.innerHTML='<img src="'+FCKConfig.SkinPath+'images/toolbar.separator.gif" width="5" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};FCKToolbar.prototype.AddTerminator=function(){var A=this.DOMRow.insertCell(-1);A.className='TB_End';A.innerHTML='<img src="'+FCKConfig.SkinPath+'images/toolbar.end.gif" width="12" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};
+var FCKToolbarBreak=function(){var A=document.createElement('div');A.style.clear=A.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';FCKToolbarSet.DOMElement.appendChild(A);}
+var FCKToolbarSet=FCK.ToolbarSet=new Object();document.getElementById('ExpandHandle').title=FCKLang.ToolbarExpand;document.getElementById('CollapseHandle').title=FCKLang.ToolbarCollapse;FCKToolbarSet.Toolbars=new Array();FCKToolbarSet.ItemsWysiwygOnly=new Array();FCKToolbarSet.ItemsContextSensitive=new Array();FCKToolbarSet.Expand=function(){document.getElementById('Collapsed').style.display='none';document.getElementById('Expanded').style.display='';if (!FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()",1);};};FCKToolbarSet.Collapse=function(){document.getElementById('Collapsed').style.display='';document.getElementById('Expanded').style.display='none';if (!FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()",1);};};FCKToolbarSet.Restart=function(){if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();document.getElementById('CollapseHandle').style.display=FCKConfig.ToolbarCanCollapse?'':'none';};FCKToolbarSet.Load=function(A){this.DOMElement=document.getElementById('eToolbar');var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=new Array();for (var x=0;x<B.length;x++){var C=B[x];var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);if (!F.SourceView) this.ItemsWysiwygOnly[this.ItemsWysiwygOnly.length]=F;if (F.ContextSensitive) this.ItemsContextSensitive[this.ItemsContextSensitive.length]=F;};};};D.AddTerminator();};this.Toolbars[this.Toolbars.length]=D;};};FCKToolbarSet.RefreshModeState=function(){if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){for (var i=0;i<FCKToolbarSet.ItemsWysiwygOnly.length;i++) FCKToolbarSet.ItemsWysiwygOnly[i].Enable();FCKToolbarSet.RefreshItemsState();}else{FCKToolbarSet.RefreshItemsState();for (var i=0;i<FCKToolbarSet.ItemsWysiwygOnly.length;i++) FCKToolbarSet.ItemsWysiwygOnly[i].Disable();};};FCKToolbarSet.RefreshItemsState=function(){for (var i=0;i<FCKToolbarSet.ItemsContextSensitive.length;i++) FCKToolbarSet.ItemsContextSensitive[i].RefreshState();};
+var FCKDialog=new Object();FCKDialog.OpenDialog=function(A,B,C,D,E,F,G,H){var I=new Object();I.Title=B;I.Page=C;I.Editor=window;I.CustomValue=F;var J=FCKConfig.BasePath+'fckdialog.html';this.Show(I,A,J,D,E,G,H);};
+FCKDialog.Show=function(A,B,C,D,E,F,G){var H=(FCKConfig.ScreenHeight-E)/2;var I=(FCKConfig.ScreenWidth-D)/2;var J="location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,modal=yes,alwaysRaised=yes"+",resizable="+(G?'yes':'no')+",width="+D+",height="+E+",top="+H+",left="+I;if (!F) F=window;var K=F.open('','FCKeditorDialog_'+B,J,true);K.moveTo(I,H);K.resizeTo(D,E);K.focus();K.location.href=C;K.dialogArguments=A;F.FCKLastDialogInfo=A;this.Window=K;try{window.top.captureEvents(Event.CLICK|Event.MOUSEDOWN|Event.MOUSEUP|Event.FOCUS);window.top.parent.addEventListener('mousedown',this.CheckFocus,true);window.top.parent.addEventListener('mouseup',this.CheckFocus,true);window.top.parent.addEventListener('click',this.CheckFocus,true);window.top.parent.addEventListener('focus',this.CheckFocus,true);}catch (e){};};FCKDialog.CheckFocus=function(){if (typeof(FCKDialog)!="object") return false;if (FCKDialog.Window&&!FCKDialog.Window.closed) FCKDialog.Window.focus();else{try{window.top.releaseEvents(Event.CLICK|Event.MOUSEDOWN|Event.MOUSEUP|Event.FOCUS);window.top.parent.removeEventListener('onmousedown',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('mouseup',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('click',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('onfocus',FCKDialog.CheckFocus,true);}catch (e){};};return false;};
+var FCKContextMenuItem=function(A,B,C,D){this.ContextMenu=A;this.Command=FCKCommands.GetCommand(B);this.Label=C?C:B;this.HasIcon=D?true:false;};function FCKContextMenuItem_OnMouseOver(){if (this.className!='CM_Disabled') this.className='CM_Over';};function FCKContextMenuItem_OnMouseOut(){if (this.className!='CM_Disabled') this.className='CM_Option';};function FCKContextMenuItem_OnClick(){if (this.className!='CM_Disabled'){this.FCKContextMenuItem.ContextMenu.Hide();this.FCKContextMenuItem.Command.Execute();};return false;};FCKContextMenuItem.prototype.CreateTableRow=function(A){this._Row=A.insertRow(-1);this._Row.className='CM_Disabled';this._Row.FCKContextMenuItem=this;this._Row.onmouseover=FCKContextMenuItem_OnMouseOver;this._Row.onmouseout=FCKContextMenuItem_OnMouseOut;this._Row.onclick=FCKContextMenuItem_OnClick;var B=this._Row.insertCell(-1);B.className='CM_Icon';if (this.HasIcon) B.innerHTML='<img alt="" src="'+FCKConfig.SkinPath+'toolbar/'+this.Command.Name.toLowerCase()+'.gif" width="21" height="20" unselectable="on">';B=this._Row.insertCell(-1);B.className='CM_Label';B.unselectable='on';B.noWrap=true;B.innerHTML=this.Label;};FCKContextMenuItem.prototype.SetVisible=function(A){this._Row.style.display=A?'':'none';};FCKContextMenuItem.prototype.RefreshState=function(){switch (this.Command.GetState()){case FCK_TRISTATE_ON:case FCK_TRISTATE_OFF:this._Row.className='CM_Option';break;default:this._Row.className='CM_Disabled';break;};};
+var FCKContextMenuSeparator=function(){};FCKContextMenuSeparator.prototype.CreateTableRow=function(A){this._Row=A.insertRow(-1);this._Row.className='CM_Separator';var B=this._Row.insertCell(-1);B.className='CM_Icon';B=this._Row.insertCell(-1);B.className='CM_Label';B.innerHTML='<div></div>';};FCKContextMenuSeparator.prototype.SetVisible=function(A){this._Row.style.display=A?'':'none';};FCKContextMenuSeparator.prototype.RefreshState=function(){};
+var FCKContextMenuGroup=function(A,B,C,D,E){this.IsVisible=true;this.Items=new Array();if (A) this.Add(new FCKContextMenuSeparator());if (B&&C&&D) this.Add(new FCKContextMenuItem(B,C,D,E));this.ValidationFunction=null;};FCKContextMenuGroup.prototype.Add=function(A){this.Items[this.Items.length]=A;};FCKContextMenuGroup.prototype.CreateTableRows=function(A){for (var i=0;i<this.Items.length;i++){this.Items[i].CreateTableRow(A);};};FCKContextMenuGroup.prototype.SetVisible=function(A){for (var i=0;i<this.Items.length;i++){this.Items[i].SetVisible(A);};this.IsVisible=A;};FCKContextMenuGroup.prototype.RefreshState=function(){if (!this.IsVisible) return;for (var i=0;i<this.Items.length;i++){this.Items[i].RefreshState();};}
+var FCKContextMenu=new Object();FCKContextMenu._IsLoaded=false;FCKContextMenu.Reload=function(){this._Div=this._Document.createElement('DIV');this._Div.className='CM_ContextMenu';this._Div.style.position='absolute';this._Div.style.visibility='hidden';this._Document.body.appendChild(this._Div);var A=this._Document.createElement('TABLE');A.cellSpacing=0;A.cellPadding=0;A.border=0;this._Div.appendChild(A);this.Groups=new Object();for (var i=0;i<FCKConfig.ContextMenu.length;i++){var B=FCKConfig.ContextMenu[i];this.Groups[B]=this._GetGroup(B);this.Groups[B].CreateTableRows(A);};this._IsLoaded=true;};FCKContextMenu._GetGroup=function(A){var B;switch (A){case 'Generic':B=new FCKContextMenuGroup();B.Add(new FCKContextMenuItem(this,'Cut',FCKLang.Cut,true));B.Add(new FCKContextMenuItem(this,'Copy',FCKLang.Copy,true));B.Add(new FCKContextMenuItem(this,'Paste',FCKLang.Paste,true));break;case 'Link':B=new FCKContextMenuGroup();B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'Link',FCKLang.EditLink,true));B.Add(new FCKContextMenuItem(this,'Unlink',FCKLang.RemoveLink,true));break;case 'TableCell':B=new FCKContextMenuGroup();B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableInsertRow',FCKLang.InsertRow,true));B.Add(new FCKContextMenuItem(this,'TableDeleteRows',FCKLang.DeleteRows,true));B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableInsertColumn',FCKLang.InsertColumn,true));B.Add(new FCKContextMenuItem(this,'TableDeleteColumns',FCKLang.DeleteColumns,true));B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableInsertCell',FCKLang.InsertCell,true));B.Add(new FCKContextMenuItem(this,'TableDeleteCells',FCKLang.DeleteCells,true));B.Add(new FCKContextMenuItem(this,'TableMergeCells',FCKLang.MergeCells,true));B.Add(new FCKContextMenuItem(this,'TableSplitCell',FCKLang.SplitCell,true));B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableCellProp',FCKLang.CellProperties,true));B.Add(new FCKContextMenuItem(this,'TableProp',FCKLang.TableProperties,true));break;case 'Table':return new FCKContextMenuGroup(true,this,'Table',FCKLang.TableProperties,true);case 'Image':return new FCKContextMenuGroup(true,this,'Image',FCKLang.ImageProperties,true);case 'Flash':return new FCKContextMenuGroup(true,this,'Flash',FCKLang.FlashProperties,true);case 'Form':return new FCKContextMenuGroup(true,this,'Form',FCKLang.FormProp,true);case 'Checkbox':return new FCKContextMenuGroup(true,this,'Checkbox',FCKLang.CheckboxProp,true);case 'Radio':return new FCKContextMenuGroup(true,this,'Radio',FCKLang.RadioButtonProp,true);case 'TextField':return new FCKContextMenuGroup(true,this,'TextField',FCKLang.TextFieldProp,true);case 'HiddenField':return new FCKContextMenuGroup(true,this,'HiddenField',FCKLang.HiddenFieldProp,true);case 'ImageButton':return new FCKContextMenuGroup(true,this,'ImageButton',FCKLang.ImageButtonProp,true);case 'Button':return new FCKContextMenuGroup(true,this,'Button',FCKLang.ButtonProp,true);case 'Select':return new FCKContextMenuGroup(true,this,'Select',FCKLang.SelectionFieldProp,true);case 'Textarea':return new FCKContextMenuGroup(true,this,'Textarea',FCKLang.TextareaProp,true);case 'BulletedList':return new FCKContextMenuGroup(true,this,'BulletedList',FCKLang.BulletedListProp,true);case 'NumberedList':return new FCKContextMenuGroup(true,this,'NumberedList',FCKLang.NumberedListProp,true);case 'Anchor':return new FCKContextMenuGroup(true,this,'Anchor',FCKLang.AnchorProp,true);};return B;};FCKContextMenu.RefreshState=function(){var A=FCKSelection.GetSelectedElement();var B;if (A) B=A.tagName;if (this.Groups['Link'])			this.Groups['Link'].SetVisible(FCK.GetNamedCommandState('Unlink')!=FCK_TRISTATE_DISABLED);if (this.Groups['TableCell'])		this.Groups['TableCell'].SetVisible(B!='TABLE'&&FCKSelection.HasAncestorNode('TABLE'));if (this.Groups['Table'])			this.Groups['Table'].SetVisible(B=='TABLE');if (this.Groups['Image'])			this.Groups['Image'].SetVisible(B=='IMG'&&!A.getAttribute('_fckfakelement'));if (this.Groups['Flash'])			this.Groups['Flash'].SetVisible(B=='IMG'&&A.getAttribute('_fckflash'));if (this.Groups['Anchor'])		this.Groups['Anchor'].SetVisible(B=='IMG'&&A.getAttribute('_fckanchor'));if (this.Groups['BulletedList'])	this.Groups['BulletedList'].SetVisible(FCKSelection.HasAncestorNode('UL'));if (this.Groups['NumberedList'])	this.Groups['NumberedList'].SetVisible(FCKSelection.HasAncestorNode('OL'));if (this.Groups['Select'])		this.Groups['Select'].SetVisible(B=='SELECT');if (this.Groups['Textarea'])		this.Groups['Textarea'].SetVisible(B=='TEXTAREA');if (this.Groups['Form'])			this.Groups['Form'].SetVisible(FCKSelection.HasAncestorNode('FORM'));if (this.Groups['Checkbox'])		this.Groups['Checkbox'].SetVisible(B=='INPUT'&&A.type=='checkbox');if (this.Groups['Radio'])			this.Groups['Radio'].SetVisible(B=='INPUT'&&A.type=='radio');if (this.Groups['TextField'])		this.Groups['TextField'].SetVisible(B=='INPUT'&&(A.type=='text'||A.type=='password'));if (this.Groups['HiddenField'])	this.Groups['HiddenField'].SetVisible(B=='INPUT'&&A.type=='hidden');if (this.Groups['ImageButton'])	this.Groups['ImageButton'].SetVisible(B=='INPUT'&&A.type=='image');if (this.Groups['Button'])		this.Groups['Button'].SetVisible(B=='INPUT'&&(A.type=='button'||A.type=='submit'||A.type=='reset'));for (var o in this.Groups){this.Groups[o].RefreshState();};};
+FCKTools.AppendStyleSheet(window.parent.document,FCKConfig.SkinPath+'fck_contextmenu.css');FCKContextMenu.Show=function(x,y){if (!this._Document){this._Document=window.parent.document;};if (!this._IsLoaded){this.Reload();this._Div.style.zIndex=10000;this._Div.oncontextmenu=function() { return false;};};this.RefreshState();var A=FCKTools.GetElementPosition(FCK.EditorWindow.frameElement);var B=FCKTools.GetElementPosition(window.frameElement);x+=A.X+B.X;y+=A.Y+B.Y;var C=x+this._Div.offsetWidth-this._Div.ownerDocument.defaultView.innerWidth;var D=y+this._Div.offsetHeight-this._Div.ownerDocument.defaultView.innerHeight;if (C>0) x-=this._Div.offsetWidth;if (D>0) y-=this._Div.offsetHeight;this._Div.style.left=x+'px';this._Div.style.top=y+'px';var E=FCK.EditorWindow;while (E){E.document.addEventListener('click',FCKContextMenu._OnDocumentClick,false);if (E!=E.parent) E=E.parent;else if (E.opener==null) E=E.opener;else break;};this._Div.style.visibility='';};FCKContextMenu._OnDocumentClick=function(A){var e=A.target;while (e){if (e==FCKContextMenu._Div) return;e=e.parentNode;};FCKContextMenu.Hide();};FCKContextMenu.Hide=function(){this._Div.style.visibility='hidden';this._Div.style.left=this._Div.style.top='1px';}
+if (!FCKConfig.PluginsPath.endsWith('/')) FCKConfig.PluginsPath+='/';var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=new Array();else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.indexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];FCKScriptLoader.AddScript(this.Path+'lang/'+A+'.js');};FCKScriptLoader.AddScript(this.Path+'fckplugin.js');}
+var FCKPlugins=FCK.Plugins=new Object();FCKPlugins.ItemsCount=0;FCKPlugins.Loaded=false;FCKPlugins.Items=new Object();for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var oItem=FCKConfig.Plugins.Items[i];FCKPlugins.Items[oItem[0]]=new FCKPlugin(oItem[0],oItem[1],oItem[2]);FCKPlugins.ItemsCount++;};FCKPlugins.Load=function(){for (var s in this.Items) this.Items[s].Load();this.Loaded=true;FCKPlugins.Load=null;}
+if (FCKLang&&window.document.dir.toLowerCase()!=FCKLang.Dir.toLowerCase()) window.document.dir=FCKLang.Dir;if (FCKConfig.ForcePasteAsPlainText) FCK.Events.AttachEvent("OnPaste",FCK.Paste);if (FCKPlugins.ItemsCount>0){FCKScriptLoader.OnEmpty=CompleteLoading;FCKPlugins.Load();}else CompleteLoading();function CompleteLoading(){FCKToolbarSet.Name=FCKURLParams['Toolbar']||'Default';FCKToolbarSet.Load(FCKToolbarSet.Name);FCKToolbarSet.Restart();FCK.AttachToOnSelectionChange(FCKToolbarSet.RefreshItemsState);FCK.SetStatus(FCK_STATUS_COMPLETE);if (typeof(window.parent.FCKeditor_OnComplete)=='function') window.parent.FCKeditor_OnComplete(FCK);}
diff -ruN 1.3.11sr1/fckeditor/editor/js/fckeditorcode_ie_1.js 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_ie_1.js
--- 1.3.11sr1/fckeditor/editor/js/fckeditorcode_ie_1.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_ie_1.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * This file has been compacted for best loading performance.
+ */
+var FCKDebug=new Object();if (FCKConfig.Debug){FCKDebug.Output=function(A,B){if (!FCKConfig.Debug) return;if (A!=null&&isNaN(A)) A=A.replace(/</g,"&lt;");if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open('fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500',true);if (this.DebugWindow.Output) this.DebugWindow.Output(A,B);};}else FCKDebug.Output=function() {};
+var FCKTools=new Object();FCKTools.GetLinkedFieldValue=function(){return FCK.LinkedField.value;};FCKTools.AttachToLinkedFieldFormSubmit=function(A){var B=FCK.LinkedField.form;if (!B) return;if (FCKBrowserInfo.IsIE) B.attachEvent("onsubmit",A);else B.addEventListener('submit',A,true);if (!B.updateFCKeditor) B.updateFCKeditor=new Array();B.updateFCKeditor[B.updateFCKeditor.length]=A;if (!B.originalSubmit&&(typeof(B.submit)=='function'||(!B.submit.tagName&&!B.submit.length))){B.originalSubmit=B.submit;B.submit=FCKTools_SubmitReplacer;};};function FCKTools_SubmitReplacer(){if (this.updateFCKeditor){for (var i=0;i<this.updateFCKeditor.length;i++) this.updateFCKeditor[i]();};this.originalSubmit();};FCKTools.AddSelectOption=function(A,B,C,D){var E=A.createElement("OPTION");E.text=C;E.value=D;B.options.add(E);return E;};FCKTools.RemoveAllSelectOptions=function(A){for (var i=A.options.length-1;i>=0;i--){A.options.remove(i);};};FCKTools.SelectNoCase=function(A,B,C){var D=B.toString().toLowerCase();for (var i=0;i<A.options.length;i++){if (D==A.options[i].value.toLowerCase()){A.selectedIndex=i;return;};};if (C!=null) FCKTools.SelectNoCase(A,C);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,"&amp;");A=A.replace(/"/g,"&quot;");A=A.replace(/</g,"&lt;");A=A.replace(/>/g,"&gt;");A=A.replace(/'/g,"&#39;");return A;};FCKTools.GetResultingArray=function(A,B){switch (typeof(A)){case "string":return A.split(B);case "function":return B();default:if (isArray(A)) return A;else return new Array();};};FCKTools.GetElementPosition=function(A){var c={ X:0,Y:0 };while (A){c.X+=A.offsetLeft;c.Y+=A.offsetTop;A=A.offsetParent;};return c;};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.Pause=function(A){var B=new Date();while (true){var C=new Date();if (A<C-B) return;};};FCKTools.ConvertStyleSizeToHtml=function(A){return A.endsWith('%')?A:parseInt(A);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.endsWith('%')?A:(A+'px');};
+FCKTools.AppendStyleSheet=function(A,B){return A.createStyleSheet(B);};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=new Array();for (var i=0;i<A.all.length;i++){var C=A.all[i].id;if (C&&C.length>0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){};};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};}
+var FCKRegexLib=new Object();FCKRegexLib.AposEntity=/&apos;/gi;FCKRegexLib.ObjectElements=/^(?:IMG|TABLE|TR|TD|INPUT|SELECT|TEXTAREA|HR|OBJECT)$/i;FCKRegexLib.BlockElements=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD)$/i;FCKRegexLib.EmptyElements=/^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i;FCKRegexLib.NamedCommands=/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i;FCKRegexLib.BodyContents=/([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i;FCKRegexLib.ToReplace=/___fcktoreplace:([\w]+)/ig;FCKRegexLib.MetaHttpEquiv=/http-equiv\s*=\s*["']?([^"' ]+)/i;FCKRegexLib.HasBaseTag=/<base /i;FCKRegexLib.HeadOpener=/<head\s?[^>]*>/i;FCKRegexLib.HeadCloser=/<\/head\s*>/i;FCKRegexLib.TableBorderClass=/\s*FCK__ShowTableBorders\s*/;FCKRegexLib.ElementName=/^[A-Za-z_:][\w.-:]*$/;FCKRegexLib.ForceSimpleAmpersand=/___FCKAmp___/g;FCKRegexLib.SpaceNoClose=/\/>/g;FCKRegexLib.EmptyParagraph=/^<(p|div)>\s*<\/\1>$/i;FCKRegexLib.TagBody=/></;FCKRegexLib.StrongOpener=/<STRONG([ \>])/gi;FCKRegexLib.StrongCloser=/<\/STRONG>/gi;FCKRegexLib.EmOpener=/<EM([ \>])/gi;FCKRegexLib.EmCloser=/<\/EM>/gi;FCKRegexLib.GeckoEntitiesMarker=/#\?-\:/g;
+FCKLanguageManager.GetActiveLanguage=function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;};};return this.DefaultLanguage;};FCKLanguageManager.TranslateElements=function(A,B,C){var e=A.getElementsByTagName(B);for (var i=0;i<e.length;i++){var D=e[i].getAttribute('fckLang');if (D){var s=FCKLang[D];if (s) eval('e[i].'+C+' = s');};};};FCKLanguageManager.TranslatePage=function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML');};if (FCKLanguageManager.AvailableLanguages[FCKConfig.DefaultLanguage]) FCKLanguageManager.DefaultLanguage=FCKConfig.DefaultLanguage;else FCKLanguageManager.DefaultLanguage='en';FCKLanguageManager.ActiveLanguage=new Object();FCKLanguageManager.ActiveLanguage.Code=FCKLanguageManager.GetActiveLanguage();FCKLanguageManager.ActiveLanguage.Name=FCKLanguageManager.AvailableLanguages[FCKLanguageManager.ActiveLanguage.Code];FCK.Language=FCKLanguageManager;LoadLanguageFile();
+var FCKEvents;if (!(FCKEvents=NS.FCKEvents)){FCKEvents=NS.FCKEvents=function(A){this.Owner=A;this.RegisteredEvents=new Object();};FCKEvents.prototype.AttachEvent=function(A,B){if (!this.RegisteredEvents[A]) this.RegisteredEvents[A]=new Array();this.RegisteredEvents[A][this.RegisteredEvents[A].length]=B;};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this.RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++) C=(D[i](this.Owner,B)&&C);};return C;};}
+var FCKXHtmlEntities=new Object();if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','­':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','ƒ':'fnof','•':'bull','…':'hellip','′':'prime','″':'Prime','‾':'oline','⁄':'frasl','℘':'weierp','ℑ':'image','ℜ':'real','™':'trade','ℵ':'alefsym','←':'larr','↑':'uarr','→':'rarr','↓':'darr','↔':'harr','↵':'crarr','⇐':'lArr','⇑':'uArr','⇒':'rArr','⇓':'dArr','⇔':'hArr','∀':'forall','∂':'part','∃':'exist','∅':'empty','∇':'nabla','∈':'isin','∉':'notin','∋':'ni','∏':'prod','∑':'sum','−':'minus','∗':'lowast','√':'radic','∝':'prop','∞':'infin','∠':'ang','∧':'and','∨':'or','∩':'cap','∪':'cup','∫':'int','∴':'there4','∼':'sim','≅':'cong','≈':'asymp','≠':'ne','≡':'equiv','≤':'le','≥':'ge','⊂':'sub','⊃':'sup','⊄':'nsub','⊆':'sube','⊇':'supe','⊕':'oplus','⊗':'otimes','⊥':'perp','⋅':'sdot','◊':'loz','♠':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};FCKXHtmlEntities.Chars='';for (var e in FCKXHtmlEntities.Entities) FCKXHtmlEntities.Chars+=e;if (FCKConfig.IncludeLatinEntities){var oEntities={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (var e in oEntities){FCKXHtmlEntities.Entities[e]=oEntities[e];FCKXHtmlEntities.Chars+=e;};oEntities=null;};if (FCKConfig.IncludeGreekEntities){var oEntities={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega'};for (var e in oEntities){FCKXHtmlEntities.Entities[e]=oEntities[e];FCKXHtmlEntities.Chars+=e;};oEntities=null;};FCKXHtmlEntities.EntitiesRegex=new RegExp('','');FCKXHtmlEntities.EntitiesRegex.compile('['+FCKXHtmlEntities.Chars+']|[^'+FCKXHtmlEntities.Chars+']+','g');}else{FCKXHtmlEntities.Entities={ ' ':'nbsp' };FCKXHtmlEntities.EntitiesRegex=/[ ]|[^ ]+/g;}
+var FCKXHtml=new Object();FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKXHtml.SpecialBlocks=new Array();this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var D=this._GetMainXmlString();D=D.substr(7,D.length-15).trim();if (FCKBrowserInfo.IsGecko) D=D.replace(/<br\/>$/,'');D=D.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) D=D.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) D=FCKCodeFormatter.Format(D);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var E=new RegExp('___FCKsi___'+i);D=D.replace(E,FCKXHtml.SpecialBlocks[i]);};this.XML=null;return D};FCKXHtml._AppendAttribute=function(A,B,C){try{var D=this.XML.createAttribute(B);D.value=C?C:'';A.attributes.setNamedItem(D);}catch (e){};};FCKXHtml._AppendChildNodes=function(A,B,C){var D=0;if (B.hasChildNodes()){var E=B.childNodes;for (var i=0;i<E.length;i++){if (this._AppendNode(A,E[i])) D++;};};if (D==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,'nbsp');return;};if (!FCKRegexLib.EmptyElements.test(B.nodeName)) A.appendChild(this.XML.createTextNode(''));};};FCKXHtml._AppendNode=function(A,B){switch (B.nodeType){case 1:if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&B.hasAttribute('_moz_editor_bogus_node')) return false;if (B.getAttribute('_fckdelete')) return false;var C=B.nodeName;if (!FCKRegexLib.ElementName.test(C)) return false;C=C.toLowerCase();if (FCKBrowserInfo.IsGecko&&C=='br'&&B.hasAttribute('type')&&B.getAttribute('type',2)=='_moz') return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;else B._fckxhtmljob=FCKXHtml.CurrentJobNum;var D=this._CreateNode(C);FCKXHtml._AppendAttributes(A,B,D,C);var E=FCKXHtml.TagProcessors[C];if (E){D=E(D,B);if (!D) break;}else this._AppendChildNodes(D,B,FCKRegexLib.BlockElements.test(C));A.appendChild(D);break;case 3:this._AppendTextNode(A,B.nodeValue.replaceNewLineChars(' '));break;case 8:try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) { /* Do nothing... probably this is a wrong format comment. */};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};if (FCKConfig.ForceStrongEm){FCKXHtml._CreateNode=function(A){switch (A){case 'b':A='strong';break;case 'i':A='em';break;};return this.XML.createElement(A);};}else{FCKXHtml._CreateNode=function(A){return this.XML.createElement(A);};};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.addItem(A);};FCKXHtml._AppendTextNode=function(A,B){var C=B.match(FCKXHtmlEntities.EntitiesRegex);if (C){for (var i=0;i<C.length;i++){if (C[i].length==1){var D=FCKXHtmlEntities.Entities[C[i]];if (D!=null){this._AppendEntity(A,D);continue;};};A.appendChild(this.XML.createTextNode(C[i]));};};};FCKXHtml.TagProcessors=new Object();FCKXHtml.TagProcessors['img']=function(A){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');return A;};FCKXHtml.TagProcessors['script']=function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;};FCKXHtml.TagProcessors['style']=function(A,B){if (B.getAttribute('_fcktemp')) return null;if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.innerHTML)));return A;};FCKXHtml.TagProcessors['title']=function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;};FCKXHtml.TagProcessors['base']=function(A,B){if (B.getAttribute('_fcktemp')) return null;return A;};FCKXHtml.TagProcessors['link']=function(A,B){if (B.getAttribute('_fcktemp')) return null;return A;};FCKXHtml.TagProcessors['table']=function(A,B){var C=A.attributes.getNamedItem('class');if (C&&FCKRegexLib.TableBorderClass.test(C.nodeValue)){var D=C.nodeValue.replace(FCKRegexLib.TableBorderClass,'');if (D.length==0) A.attributes.removeNamedItem('class');else FCKXHtml._AppendAttribute(A,'class',D);};FCKXHtml._AppendChildNodes(A,B,false);return A;}
+FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createEntityReference(B));};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n<E.length;n++){var F=E[n];if (F.specified){var G=F.nodeName.toLowerCase();var H;if (G=='_fckxhtmljob') continue;else if (G=='style') H=B.style.cssText;else if (G=='class'||G.indexOf('on')==0) H=F.nodeValue;else if (D=='body'&&G=='contenteditable') continue;else if (F.nodeValue===true) H=G;else if (!(H=B.getAttribute(G,2))) H=F.nodeValue;if (FCKConfig.ForceSimpleAmpersand&&H.replace) H=H.replace(/&/g,'___FCKAmp___');this._AppendAttribute(C,G,H);};};};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);};};return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['abbr']=function(A,B){var C=B.nextSibling;while (true){if (C&&C.nodeName!='/ABBR'){FCKXHtml._AppendNode(A,C);C=C.nextSibling;}else break;};return A;};FCKXHtml.TagProcessors['area']=function(A,B){if (!A.attributes.getNamedItem('coords')){var C=B.getAttribute('coords',2);if (C&&C!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',C);};if (!A.attributes.getNamedItem('shape')){var C=B.getAttribute('shape',2);if (C&&C.length>0) FCKXHtml._AppendAttribute(A,'shape',C);};return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);FCKXHtml._AppendChildNodes(A,B);return A;} 
+var FCKCodeFormatter;if (!(FCKCodeFormatter=NS.FCKCodeFormatter)){FCKCodeFormatter=NS.FCKCodeFormatter=new Object();FCKCodeFormatter.Regex=new Object();FCKCodeFormatter.Regex.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi;FCKCodeFormatter.Regex.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi;FCKCodeFormatter.Regex.NewLineTags=/\<(BR|HR)[^\>]\>/gi;FCKCodeFormatter.Regex.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;FCKCodeFormatter.Regex.LineSplitter=/\s*\n+\s*/g;FCKCodeFormatter.Regex.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;FCKCodeFormatter.Regex.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;FCKCodeFormatter.Regex.FormatIndentatorRemove=new RegExp(FCKConfig.FormatIndentator);FCKCodeFormatter.Format=function(A){var B=A.replace(this.Regex.BlocksOpener,'\n$&');;B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};return B.trim();};}
+var FCKUndo=new Object();FCKUndo.SavedData=new Array();FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo.SaveUndoStep=function(){FCKUndo.SavedData=FCKUndo.SavedData.slice(0,FCKUndo.CurrentIndex+1);var A=FCK.EditorDocument.body.innerHTML;if (FCKUndo.CurrentIndex>=0&&A==FCKUndo.SavedData[FCKUndo.CurrentIndex][0]) return;if (FCKUndo.CurrentIndex+1>=FCKConfig.MaxUndoLevels) FCKUndo.SavedData.shift();else FCKUndo.CurrentIndex++;var B;if (FCK.EditorDocument.selection.type=='Text') B=FCK.EditorDocument.selection.createRange().getBookmark();FCKUndo.SavedData[FCKUndo.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (FCKUndo.Typing||FCKUndo.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (!FCKUndo.Typing&&FCKUndo.CurrentIndex<(FCKUndo.SavedData.length-1));};FCKUndo.Undo=function(){if (FCKUndo.CheckUndoState()){if (FCKUndo.CurrentIndex==(FCKUndo.SavedData.length-1)){FCKUndo.SaveUndoStep();};FCKUndo._ApplyUndoLevel(--FCKUndo.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");};};FCKUndo.Redo=function(){if (FCKUndo.CheckRedoState()){FCKUndo._ApplyUndoLevel(++FCKUndo.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");};};FCKUndo._ApplyUndoLevel=function(A){var B=FCKUndo.SavedData[A];if (!B) return;FCK.SetInnerHtml(B[0]);if (B[1]){var C=FCK.EditorDocument.selection.createRange();C.moveToBookmark(B[1]);C.select();};FCKUndo.TypesCount=0;FCKUndo.Typing=false;}
+FCK.Events=new FCKEvents(FCK);FCK.Toolbar=null;FCK.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';FCK.StartEditor=function(){this.EditorWindow=window.frames['eEditorArea'];this.EditorDocument=this.EditorWindow.document;this.SetHTML(FCKTools.GetLinkedFieldValue());FCKTools.AttachToLinkedFieldFormSubmit(this.UpdateLinkedField);FCKUndo.SaveUndoStep();this.SetStatus(FCK_STATUS_ACTIVE);};function Window_OnFocus(){FCK.Focus();};FCK.SetStatus=function(A){this.Status=A;if (A==FCK_STATUS_ACTIVE){window.onfocus=window.document.body.onfocus=Window_OnFocus;if (FCKConfig.StartupFocus) FCK.Focus();if (FCKBrowserInfo.IsIE) FCKScriptLoader.AddScript('js/fckeditorcode_ie_2.js');else FCKScriptLoader.AddScript('js/fckeditorcode_gecko_2.js');};this.Events.FireEvent('OnStatusChange',A);};FCK.GetHTML=function(A){var B;if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsIE) B=this.EditorDocument.body.innerHTML.replace(FCKRegexLib.ToReplace,'$1');else B=this.EditorDocument.body.innerHTML;}else B=document.getElementById('eSourceField').value;if (A) return FCKCodeFormatter.Format(B);else return B;};FCK.GetXHTML=function(A){var B=(FCK.EditMode==FCK_EDITMODE_SOURCE);if (B) this.SwitchEditMode();var C;if (FCKConfig.FullPage) C=FCKXHtml.GetXHTML(this.EditorDocument.getElementsByTagName('html')[0],true,A);else{if (FCKConfig.IgnoreEmptyParagraphValue&&this.EditorDocument.body.innerHTML=='<P>&nbsp;</P>') C='';else C=FCKXHtml.GetXHTML(this.EditorDocument.body,false,A);};if (B) this.SwitchEditMode();if (FCKBrowserInfo.IsIE) C=C.replace(FCKRegexLib.ToReplace,'$1');if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) C=FCK.DocTypeDeclaration+'\n'+C;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) C=FCK.XmlDeclaration+'\n'+C;return FCKConfig.ProtectedSource.Revert(C);};FCK.UpdateLinkedField=function(){if (FCKConfig.EnableXHTML) FCK.LinkedField.value=FCK.GetXHTML(FCKConfig.FormatOutput);else FCK.LinkedField.value=FCK.GetHTML(FCKConfig.FormatOutput);FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');};FCK.ShowContextMenu=function(x,y){if (this.Status!=FCK_STATUS_COMPLETE) return;FCKContextMenu.Show(x,y);this.Events.FireEvent("OnContextMenu");};FCK.RegisteredDoubleClickHandlers=new Object();FCK.OnDoubleClick=function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);};FCK.RegisterDoubleClickHandler=function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;};FCK.OnAfterSetHTML=function(){var A,i=0;while((A=FCKDocumentProcessors[i++])) A.ProcessDocument(FCK.EditorDocument);this.Events.FireEvent('OnAfterSetHTML');};var FCKDocumentProcessors=new Array();var FCKDocumentProcessors_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};var FCKAnchorsProcessor=new Object();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0&&(!C.getAttribute('href')||C.getAttribute('href').length==0)){var D=FCKDocumentProcessors_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);};};};FCKDocumentProcessors.addItem(FCKAnchorsProcessor);var FCKPageBreaksProcessor=new Object();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('CENTER');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.innerHTML.trim().length==0){var D=FCKDocumentProcessors_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);};};};FCKDocumentProcessors.addItem(FCKPageBreaksProcessor);var FCKFlashProcessor=new Object();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.src.endsWith('.swf',true)){var D=FCKDocumentProcessors_CreateFakeImage('FCK__Flash',C.cloneNode(true));D.setAttribute('_fckflash','true',0);FCKFlashProcessor.RefreshView(D,C);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);};};};FCKFlashProcessor.RefreshView=function(A,B){if (B.width>0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.width);if (B.height>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.height);};FCKDocumentProcessors.addItem(FCKFlashProcessor);FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};
+FCK.Description="FCKeditor for Internet Explorer 5.5+";FCK._BehaviorsStyle='<style type="text/css" _fcktemp="true">\ INPUT { behavior:url(' + FCKConfig.FullBasePath + 'css/behaviors/hiddenfield.htc);} ';if (FCKConfig.ShowBorders) FCK._BehaviorsStyle+='TABLE { behavior: url('+FCKConfig.FullBasePath+'css/behaviors/showtableborders.htc) ; }';var sNoHandlers='INPUT, TEXTAREA, SELECT, .FCK__Anchor, .FCK__PageBreak';if (FCKConfig.DisableImageHandles) sNoHandlers+=', IMG';if (FCKConfig.DisableTableHandles) sNoHandlers+=', TABLE';FCK._BehaviorsStyle+=sNoHandlers+' { behavior: url('+FCKConfig.FullBasePath+'css/behaviors/disablehandles.htc) ; }';FCK._BehaviorsStyle+='</style>';function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;};};function Doc_OnPaste(){if (FCK.Status==FCK_STATUS_COMPLETE) return FCK.Events.FireEvent("OnPaste");else return false;};function Doc_OnContextMenu(){var e=FCK.EditorWindow.event;FCK.ShowContextMenu(e.screenX,e.screenY);return false;};function Doc_OnKeyDown(){var e=FCK.EditorWindow.event;switch (e.keyCode){case 13:if (FCKConfig.UseBROnCarriageReturn&&!(e.ctrlKey||e.altKey||e.shiftKey)){Doc_OnKeyDownUndo();if (FCK.EditorDocument.queryCommandState('InsertOrderedList')||FCK.EditorDocument.queryCommandState('InsertUnorderedList')) return true;FCK.InsertHtml('<br>&nbsp;');var oRange=FCK.EditorDocument.selection.createRange();oRange.moveStart('character',-1);oRange.select();FCK.EditorDocument.selection.clear();return false;};break;case 9:if (FCKConfig.TabSpaces>0&&!(e.ctrlKey||e.altKey||e.shiftKey)){Doc_OnKeyDownUndo();FCK.InsertHtml(window.FCKTabHTML);return false;};break;case 90:if (e.ctrlKey&&!(e.altKey||e.shiftKey)){FCKUndo.Undo();return false;};break;case 89:if (e.ctrlKey&&!(e.altKey||e.shiftKey)){FCKUndo.Redo();return false;};break;};if (!(e.keyCode>=16&&e.keyCode<=18)) Doc_OnKeyDownUndo();return true;};function Doc_OnKeyDownUndo(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();};};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){FCK.Events.FireEvent("OnSelectionChange");};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.attachEvent('oncontextmenu',Doc_OnContextMenu);if (FCKConfig.TabSpaces>0){window.FCKTabHTML='';for (i=0;i<FCKConfig.TabSpaces;i++) window.FCKTabHTML+="&nbsp;";};this.EditorDocument.attachEvent("onkeydown",Doc_OnKeyDown);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);};FCK.Focus=function(){try{if (FCK.EditMode==FCK_EDITMODE_WYSIWYG) FCK.EditorDocument.body.focus();else document.getElementById('eSourceField').focus();}catch(e) {};};FCK.SetHTML=function(A,B){if (B||FCK.EditMode==FCK_EDITMODE_WYSIWYG){A=FCKConfig.ProtectedSource.Protect(A);var C;if (FCKConfig.FullPage){var C=FCK._BehaviorsStyle+'<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />';if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) C+=FCK.TempBaseTag;C=A.replace(FCKRegexLib.HeadOpener,'$&'+C);}else{C=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKConfig.IEForceVScroll) C+=' style="overflow-y: scroll"';C+='><head><title></title>'+'<link href="'+FCKConfig.EditorAreaCSS+'" rel="stylesheet" type="text/css" />'+'<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />';C+=FCK._BehaviorsStyle;C+=FCK.TempBaseTag;C+='</head><body>'+A+'</body></html>';};this.EditorDocument.open('','_self','',true);this.EditorDocument.write(C);this.EditorDocument.close();this.InitializeBehaviors();this.EditorDocument.body.contentEditable=true;FCK.OnAfterSetHTML();}else document.getElementById('eSourceField').value=A;};FCK.InsertHtml=function(A){FCK.Focus();FCKUndo.SaveUndoStep();var B=FCK.EditorDocument.selection;if (B.type.toLowerCase()!="none") B.clear();B.createRange().pasteHTML(A);};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='<div id="__fakeFCKRemove__">&nbsp;</div>'+A;B.getElementById('__fakeFCKRemove__').removeNode(true);}
diff -ruN 1.3.11sr1/fckeditor/editor/js/fckeditorcode_ie_2.js 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_ie_2.js
--- 1.3.11sr1/fckeditor/editor/js/fckeditorcode_ie_2.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/js/fckeditorcode_ie_2.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * This file has been compacted for best loading performance.
+ */
+FCK.RedirectNamedCommands=new Object();FCK.ExecuteNamedCommand=function(A,B){FCKUndo.SaveUndoStep();if (FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};FCKUndo.SaveUndoStep();};FCK.GetNamedCommandState=function(A){try{if (!FCK.EditorDocument.queryCommandEnabled(A)) return FCK_TRISTATE_DISABLED;else return FCK.EditorDocument.queryCommandState(A)?FCK_TRISTATE_ON:FCK_TRISTATE_OFF;}catch (e){return FCK_TRISTATE_OFF;};};FCK.GetNamedCommandValue=function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==FCK_TRISTATE_DISABLED) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';};FCK.PasteFromWord=function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');};FCK.Preview=function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.GetXHTML().replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'">'+'<head><title>'+FCKLang.Preview+'</title>'+'<link href="'+FCKConfig.EditorAreaCSS+'" rel="stylesheet" type="text/css" />'+FCK.TempBaseTag+'</head><body>'+FCK.GetXHTML()+'</body></html>';};D.document.write(E);D.document.close();};FCK.SwitchEditMode=function(){var A=(FCK.EditMode==FCK_EDITMODE_WYSIWYG);document.getElementById('eWysiwyg').style.display=A?'none':'';document.getElementById('eSource').style.display=A?'':'none';if (A){if (FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();document.getElementById('eSourceField').value=(FCKConfig.EnableXHTML&&FCKConfig.EnableSourceXHTML?FCK.GetXHTML(FCKConfig.FormatSource):FCK.GetHTML(FCKConfig.FormatSource));}else FCK.SetHTML(FCK.GetHTML(),true);FCK.EditMode=A?FCK_EDITMODE_SOURCE:FCK_EDITMODE_WYSIWYG;FCKToolbarSet.RefreshModeState();FCK.Focus();};FCK.CreateElement=function(A){var e=FCK.EditorDocument.createElement(A);return FCK.InsertElementAndGetIt(e);};FCK.InsertElementAndGetIt=function(e){e.setAttribute('__FCKTempLabel',1);this.InsertElement(e);var A=FCK.EditorDocument.getElementsByTagName(e.tagName);for (var i=0;i<A.length;i++){if (A[i].getAttribute('__FCKTempLabel')){A[i].removeAttribute('__FCKTempLabel');return A[i];};};return null;};
+FCK.Paste=function(){if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;}else if (FCKConfig.AutoDetectPasteFromWord){var A=FCK.GetClipboardHTML();var B=/<\w[^>]* class="?MsoNormal"?/gi;if (B.test(A)){if (confirm(FCKLang["PasteWordConfirm"])){FCK.PasteFromWord();return false;};};}else return true;};FCK.PasteAsPlainText=function(){var A=FCKTools.HTMLEncode(clipboardData.getData("Text"));A=A.replace(/\n/g,'<BR>');this.InsertHtml(A);};FCK.InsertElement=function(A){FCK.InsertHtml(A.outerHTML);};FCK.GetClipboardHTML=function(){var A=document.getElementById('___FCKHiddenDiv');if (!A){var A=document.createElement('DIV');A.id='___FCKHiddenDiv';A.style.visibility='hidden';A.style.overflow='hidden';A.style.position='absolute';A.style.width=1;A.style.height=1;document.body.appendChild(A);};A.innerHTML='';var C=document.body.createTextRange();C.moveToElementText(A);C.execCommand('Paste');var D=A.innerHTML;A.innerHTML='';return D;};FCK.AttachToOnSelectionChange=function(A){this.Events.AttachEvent('OnSelectionChange',A);};FCK.CreateLink=function(A){FCK.ExecuteNamedCommand('Unlink');if (A.length>0){var B='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',B);var C=this.EditorDocument.links;for (i=0;i<C.length;i++){if (C[i].href==B){C[i].href=A;return C[i];};};};};
+var FCKSelection=new Object();FCK.Selection=FCKSelection;
+FCKSelection.GetType=function(){return FCK.EditorDocument.selection.type;};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorDocument.selection.createRange();if (A&&A.item) return FCK.EditorDocument.selection.createRange().item(0);};};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':return FCKSelection.GetSelectedElement().parentElement;case 'None':return;default:return FCK.EditorDocument.selection.createRange().parentElement();};};FCKSelection.SelectNode=function(A){FCK.Focus();FCK.EditorDocument.selection.empty();var B=FCK.EditorDocument.selection.createRange();B.moveToElementText(A);B.select();};FCKSelection.Collapse=function(A){FCK.Focus();var B=FCK.EditorDocument.selection.createRange();B.collapse(A==null||A===true);B.select();};FCKSelection.HasAncestorNode=function(A){var B;if (FCK.EditorDocument.selection.type=="Control"){B=this.GetSelectedElement();}else{var C=FCK.EditorDocument.selection.createRange();B=C.parentElement();};while (B){if (B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;if (FCK.EditorDocument.selection.type=="Control"){var C=FCK.EditorDocument.selection.createRange();for (i=0;i<C.length;i++){if (C(i).parentNode){B=C(i).parentNode;break;};};}else{var C=FCK.EditorDocument.selection.createRange();B=C.parentElement();};while (B&&B.nodeName!=A) B=B.parentNode;return B;};FCKSelection.Delete=function(){var A=FCK.EditorDocument.selection;if (A.type.toLowerCase()!="none"){A.clear();};return A;};
+var FCKPanel=function(A){this.Window=A?A:window;};function FCKPanel_OnContextMenu() { return false;};FCKPanel.prototype.Create=function(){this._Popup=this.Window.createPopup();this.Document=this._Popup.document;aCleanupDocs[aCleanupDocs.length]=this.Document;this.Document.oncontextmenu=FCKPanel_OnContextMenu;if (this.StyleSheet) FCKTools.AppendStyleSheet(this.Document,this.StyleSheet);this.PanelDiv=this.Document.body.appendChild(this.Document.createElement('DIV'));this.PanelDiv.className='FCK_Panel';this.Created=true;};FCKPanel.prototype.Show=function(A,B,C,D,E,F){if (!this.Created) this._Create();this._Popup.show(A,B,0,0,C);if (D==null||(F&&D>this.PanelDiv.offsetWidth)) var G=this.PanelDiv.offsetWidth;else var G=D;if (E==null||(F&&E>this.PanelDiv.offsetHeight)) var I=this.PanelDiv.offsetHeight;else var I=E;this.PanelDiv.style.height=I;this._Popup.show(A,B,G,I,C);};FCKPanel.prototype.Hide=function(){if (this._Popup) this._Popup.hide();}
+var FCKTableHandler=new Object();FCKTableHandler.InsertRow=function(){var A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=A.cloneNode(true);A.parentNode.insertBefore(B,A);FCKTableHandler.ClearRow(A);};FCKTableHandler.DeleteRows=function(A){if (!A) A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');if (B.rows.length==1){FCKTableHandler.DeleteTable(B);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A) A=FCKSelection.MoveToAncestorNode("TABLE");if (!A) return;A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(){var A=FCKSelection.MoveToAncestorNode("TD");if (!A) A=FCKSelection.MoveToAncestorNode("TH");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex+1;for (var i=0;i<B.rows.length;i++){var D=B.rows[i];if (D.cells.length<C) continue;A=D.cells[C-1].cloneNode(false);if (FCKBrowserInfo.IsGecko) A.innerHTML=FCKBrowserInfo.IsGecko?GECKO_BOGUS:'';var E=D.cells[C];if (E) D.insertBefore(A,E);else D.appendChild(A);};};FCKTableHandler.DeleteColumns=function(){var A=FCKSelection.MoveToAncestorNode("TD");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex;for (var i=B.rows.length-1;i>=0;i--){var D=B.rows[i];if (C==0&&D.cells.length==1){FCKTableHandler.DeleteRows(D);continue;};if (D.cells[C]) D.removeChild(D.cells[C]);};};FCKTableHandler.InsertCell=function(A){var B=A?A:FCKSelection.MoveToAncestorNode("TD");if (!B) return;var C=FCK.EditorDocument.createElement("TD");if (FCKBrowserInfo.IsGecko) C.innerHTML=GECKO_BOGUS;if (B.cellIndex==B.parentNode.cells.lenght-1){B.parentNode.appendChild(C);}else{B.parentNode.insertBefore(C,B.nextSibling);};return C;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);};};FCKTableHandler.MergeCells=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<2) return;if (A[0].parentNode!=A[A.length-1].parentNode) return;var B=isNaN(A[0].colSpan)?1:A[0].colSpan;var C='';for (var i=A.length-1;i>0;i--){B+=isNaN(A[i].colSpan)?1:A[i].colSpan;C=A[i].innerHTML+C;FCKTableHandler.DeleteCell(A[i]);};A[0].colSpan=B;A[0].innerHTML+=C;};FCKTableHandler.SplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=FCKTableHandler._GetCellIndexSpan(B,A[0].parentNode.rowIndex,A[0]);var D=this._GetCollumnCells(B,C);for (var i=0;i<D.length;i++){if (D[i]==A[0]){var E=this.InsertCell(A[0]);if (!isNaN(A[0].rowSpan)&&A[0].rowSpan>1) E.rowSpan=A[0].rowSpan;}else{if (isNaN(D[i].colSpan)) D[i].colSpan=2;else D[i].colSpan+=1;};};};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCollumnCells=function(A,B){var C=new Array();for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=new Array();for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=new Array();var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=new Array();for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];};};c+=E-1;};};return C;};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsGecko) B[i].innerHTML=GECKO_BOGUS;else B[i].innerHTML='';};}
+FCKTableHandler.GetSelectedCells=function(){var A=new Array();var B=FCK.EditorDocument.selection.createRange();var C=B.parentElement();if (C&&C.tagName=="TD") A[0]=C;else{var C=FCKSelection.MoveToAncestorNode("TABLE");if (C){for (var i=0;i<C.cells.length;i++){var E=FCK.EditorDocument.selection.createRange();E.moveToElementText(C.cells[i]);if (B.inRange(E)||(B.compareEndPoints('StartToStart',E)>=0&&B.compareEndPoints('StartToEnd',E)<=0)||(B.compareEndPoints('EndToStart',E)>=0&&B.compareEndPoints('EndToEnd',E)<=0)){A[A.length]=C.cells[i];};};};};return A;};
+var FCKXml;if (!(FCKXml=NS.FCKXml)){FCKXml=NS.FCKXml=function(){this.Error=false;};FCKXml.prototype.LoadUrl=function(A){this.Error=false;var B=FCKTools.CreateXmlObject('XmlHttp');if (!B){this.Error=true;return;};B.open("GET",A,false);B.send(null);if (B.status==200||B.status==304) this.DOMDocument=B.responseXML;else if (B.status==0&&B.readyState==4){this.DOMDocument=FCKTools.CreateXmlObject('DOMDocument');this.DOMDocument.async=false;this.DOMDocument.resolveExternals=false;this.DOMDocument.loadXML(B.responseText);}else{this.Error=true;alert('Error loading "'+A+'"');};};FCKXml.prototype.SelectNodes=function(A,B){if (this.Error) return new Array();if (B) return B.selectNodes(A);else return this.DOMDocument.selectNodes(A);};FCKXml.prototype.SelectSingleNode=function(A,B){if (this.Error) return;if (B) return B.selectSingleNode(A);else return this.DOMDocument.selectSingleNode(A);};}
+var FCKStyleDef=function(A,B){this.Name=A;this.Element=B.toUpperCase();this.IsObjectElement=FCKRegexLib.ObjectElements.test(this.Element);this.Attributes=new Object();};FCKStyleDef.prototype.AddAttribute=function(A,B){this.Attributes[A]=B;};FCKStyleDef.prototype.GetOpenerTag=function(){var s='<'+this.Element;for (var a in this.Attributes) s+=' '+a+'="'+this.Attributes[a]+'"';return s+'>';};FCKStyleDef.prototype.GetCloserTag=function(){return '</'+this.Element+'>';};FCKStyleDef.prototype.RemoveFromSelection=function(){if (FCKSelection.GetType()=='Control') this._RemoveMe(FCKSelection.GetSelectedElement());else this._RemoveMe(FCKSelection.GetParentElement());}
+FCKStyleDef.prototype.ApplyToSelection=function(){var A=FCK.EditorDocument.selection;if (A.type=='Text'){var B=A.createRange();var e=document.createElement(this.Element);e.innerHTML=B.htmlText;this._AddAttributes(e);this._RemoveDuplicates(e);B.pasteHTML(e.outerHTML);}else if (A.type=='Control'){var C=FCKSelection.GetSelectedElement();if (C.tagName==this.Element) this._AddAttributes(C);};};FCKStyleDef.prototype._AddAttributes=function(A){for (var a in this.Attributes){if (a.toLowerCase()=='style') A.style.cssText=this.Attributes[a];else A.setAttribute(a,this.Attributes[a],0);};};FCKStyleDef.prototype._RemoveDuplicates=function(A){for (var i=0;i<A.children.length;i++){var B=A.children[i];this._RemoveDuplicates(B);if (this.IsEqual(B)){B.insertAdjacentHTML('beforeBegin',B.innerHTML);B.parentElement.removeChild(B);};};};FCKStyleDef.prototype.IsEqual=function(e){if (e.tagName!=this.Element) return false;for (var a in this.Attributes){switch (a.toLowerCase()){case 'style':if (e.style.cssText.toLowerCase()!=this.Attributes[a].toLowerCase()) return false;break;case 'class':if (e.getAttribute('className',0)!=this.Attributes[a]) return false;break;default:if (e.getAttribute(a,0)!=this.Attributes[a]) return false;};};return true;};FCKStyleDef.prototype._RemoveMe=function(A){if (!A) return;var B=A.parentElement;if (this.IsEqual(A)){if (this.IsObjectElement){for (var a in this.Attributes){switch (a.toLowerCase()){case 'class':A.removeAttribute('className',0);break;default:A.removeAttribute(a,0);};};return;}else FCKTools.RemoveOuterTags(A);};this._RemoveMe(B);}
+var FCKStylesLoader=function(){this.Styles=new Object();this.StyleGroups=new Object();this.Loaded=false;this.HasObjectElements=false;};FCKStylesLoader.prototype.Load=function(A){var B=new FCKXml();B.LoadUrl(A);var C=B.SelectNodes('Styles/Style');for (var i=0;i<C.length;i++){var D=C[i].attributes.getNamedItem('element').value.toUpperCase();var E=new FCKStyleDef(C[i].attributes.getNamedItem('name').value,D);if (E.IsObjectElement) this.HasObjectElements=true;var F=B.SelectNodes('Attribute',C[i]);for (var j=0;j<F.length;j++){var G=F[j].attributes.getNamedItem('name').value;var H=F[j].attributes.getNamedItem('value').value;if (G.toLowerCase()=='style'){var I=document.createElement('SPAN');I.style.cssText=H;H=I.style.cssText;};E.AddAttribute(G,H);};this.Styles[E.Name]=E;var J=this.StyleGroups[D];if (J==null){this.StyleGroups[D]=new Array();J=this.StyleGroups[D];};J[J.length]=E;};this.Loaded=true;}
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);};
+var FCKDialogCommand=function(A,B,C,D,E,F,G){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.GetStateFunction=F;this.GetStateParam=G;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK_TRISTATE_OFF;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKFontNameCommand=function(){this.Name='FontName';};FCKFontNameCommand.prototype.Execute=function(A){if (A==null||A==""){}else FCK.ExecuteNamedCommand('FontName',A);};FCKFontNameCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontName');};var FCKFontSizeCommand=function(){this.Name='FontSize';};FCKFontSizeCommand.prototype.Execute=function(A){if (typeof(A)=='string') A=parseInt(A);if (A==null||A==''){FCK.ExecuteNamedCommand('FontSize',3);}else FCK.ExecuteNamedCommand('FontSize',A);};FCKFontSizeCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontSize');};var FCKFormatBlockCommand=function(){this.Name='FormatBlock';};FCKFormatBlockCommand.prototype.Execute=function(A){if (A==null||A=='') FCK.ExecuteNamedCommand('FormatBlock','<P>');else FCK.ExecuteNamedCommand('FormatBlock','<'+A+'>');};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.LinkedField.form;if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};A.submit();};FCKSaveCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetHTML('');FCKUndo.Typing=true;};FCKNewPageCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsGecko){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==FCK_EDITMODE_WYSIWYG?FCK_TRISTATE_OFF:FCK_TRISTATE_ON);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Undo();else FCK.ExecuteNamedCommand('Undo');};FCKUndoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckUndoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Undo');};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Redo();else FCK.ExecuteNamedCommand('Redo');};FCKRedoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckRedoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Redo');};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){var A=FCK.EditorDocument.createElement('CENTER');A.style.pageBreakAfter='always';var B=FCKDocumentProcessors_CreateFakeImage('FCK__PageBreak',A);B=FCK.InsertElement(B);};FCKPageBreakCommand.prototype.GetState=function(){return 0;}
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;};};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');};};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;}
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;this._Panel=new FCKPanel();this._Panel.StyleSheet=FCKConfig.SkinPath+'fck_contextmenu.css';this._Panel.Create();this._CreatePanelBody(this._Panel.Document,this._Panel.PanelDiv);};FCKTextColorCommand.prototype.Execute=function(A,B,C){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor',A);else if (FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('hilitecolor',A);else FCK.ExecuteNamedCommand('BackColor',A);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};function FCKTextColorCommand_OnMouseOver()	{ this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut()	{ this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(){this.className='ColorDeselected';this.Command.SetColor('#'+this.Color);this.Command._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(){this.className='ColorDeselected';this.Command.SetColor('');this.Command._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(){this.className='ColorDeselected';this.Command._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,this.Command.SetColor);};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';C.onmouseover=FCKTextColorCommand_OnMouseOver;C.onmouseout=FCKTextColorCommand_OnMouseOut;return C;};var D=B.appendChild(A.createElement("TABLE"));D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\<tr>\<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\<td nowrap width="100%" align="center" unselectable="on">' + FCKLang.ColorAutomatic + '</td>\</tr>\</table>';C.Command=this;C.onclick=FCKTextColorCommand_AutoOnClick;var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8&&H<G.length;i++,H++){C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.Color=G[H];C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #'+G[H]+'"></div></div>';C.Command=this;C.onclick=FCKTextColorCommand_OnClick;};};E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';C.Command=this;C.onclick=FCKTextColorCommand_MoreOnClick;}
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return FCK_TRISTATE_DISABLED;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();switch (this.Name){case 'TableInsertRow':FCKTableHandler.InsertRow();break;case 'TableDeleteRows':FCKTableHandler.DeleteRows();break;case 'TableInsertColumn':FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns':FCKTableHandler.DeleteColumns();break;case 'TableInsertCell':FCKTableHandler.InsertCell();break;case 'TableDeleteCells':FCKTableHandler.DeleteCells();break;case 'TableMergeCells':FCKTableHandler.MergeCells();break;case 'TableSplitCell':FCKTableHandler.SplitCell();break;default:alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));};};FCKTableCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;}
+var FCKStyleCommand=function(){this.Name='Style';this.StylesLoader=new FCKStylesLoader();this.StylesLoader.Load(FCKConfig.StylesXmlPath);this.Styles=this.StylesLoader.Styles;};FCKStyleCommand.prototype.Execute=function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) B.Style.RemoveFromSelection();else B.Style.ApplyToSelection();FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent("OnSelectionChange");};FCKStyleCommand.prototype.GetState=function(){var A=FCK.EditorDocument.selection;if (FCKSelection.GetType()=='Control'){var e=FCKSelection.GetSelectedElement();if (e) return this.StylesLoader.StyleGroups[e.tagName]?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;};return FCK_TRISTATE_OFF;};FCKStyleCommand.prototype.GetActiveStyles=function(){var A=new Array();if (FCKSelection.GetType()=='Control') this._CheckStyle(FCKSelection.GetSelectedElement(),A,false);else this._CheckStyle(FCKSelection.GetParentElement(),A,true);return A;};FCKStyleCommand.prototype._CheckStyle=function(A,B,C){if (!A) return;if (A.nodeType==1){var D=this.StylesLoader.StyleGroups[A.tagName];if (D){for (var i=0;i<D.length;i++){if (D[i].IsEqual(A)) B[B.length]=D[i];};};};if (C) this._CheckStyle(A.parentNode,B,C);}
+var FCKCommands=FCK.Commands=new Object();FCKCommands.LoadedCommands=new Object();FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,390,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,330,FCK.GetNamedCommandState,'CreateLink');break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,170);break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html',370,170);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html',370,170);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',400,330);break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindTitle,'dialog/fck_find.html',340,170);break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgReplaceTitle,'dialog/fck_replace.html',340,200);break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,400);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,400);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,300);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',400,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',400,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',500,250);break;case 'UniversalKey':B=new FCKDialogCommand('UniversalKey',FCKLang.UniversalKeyboard,'dialog/fck_universalkey.html',415,300);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'TableInsertRow':B=new FCKTableCommand('TableInsertRow');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumn':B=new FCKTableCommand('TableInsertColumn');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCell':B=new FCKTableCommand('TableInsertCell');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableSplitCell':B=new FCKTableCommand('TableSplitCell');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,230);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,230);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,230);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,230);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,230);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,230);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,230);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,380);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,400);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;};};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;};
+var FCKToolbarButton=function(A,B,C,D,E,F){this.Command=FCKCommands.GetCommand(A);this.Label=B?B:A;this.Tooltip=C?C:(B?B:A);this.Style=D?D:FCK_TOOLBARITEM_ONLYICON;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';this.State=FCK_UNKNOWN;};FCKToolbarButton.prototype.CreateInstance=function(A){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;var B='<table title="'+this.Tooltip+'" cellspacing="0" cellpadding="0" border="0" unselectable="on">'+'<tr>';if (this.Style!=FCK_TOOLBARITEM_ONLYTEXT) B+='<td class="TB_Icon" unselectable="on"><img src="'+this.IconPath+'" width="21" height="21" unselectable="on"></td>';if (this.Style!=FCK_TOOLBARITEM_ONLYICON) B+='<td class="TB_Text" unselectable="on" nowrap>'+this.Label+'</td>';B+='</tr>'+'</table>';this.DOMDiv.innerHTML=B;var C=A.DOMRow.insertCell(-1);C.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarButton.prototype.RefreshState=function(){var A=this.Command.GetState();if (A==this.State) return;this.State=A;switch (this.State){case FCK_TRISTATE_ON:this.DOMDiv.className='TB_Button_On';this.DOMDiv.onmouseover=FCKToolbarButton_OnMouseOnOver;this.DOMDiv.onmouseout=FCKToolbarButton_OnMouseOnOut;this.DOMDiv.onclick=FCKToolbarButton_OnClick;break;case FCK_TRISTATE_OFF:this.DOMDiv.className='TB_Button_Off';this.DOMDiv.onmouseover=FCKToolbarButton_OnMouseOffOver;this.DOMDiv.onmouseout=FCKToolbarButton_OnMouseOffOut;this.DOMDiv.onclick=FCKToolbarButton_OnClick;break;default:this.Disable();break;};};function FCKToolbarButton_OnMouseOnOver(){this.className='TB_Button_On TB_Button_On_Over';};function FCKToolbarButton_OnMouseOnOut(){this.className='TB_Button_On';};function FCKToolbarButton_OnMouseOffOver(){this.className='TB_Button_On TB_Button_Off_Over';};function FCKToolbarButton_OnMouseOffOut(){this.className='TB_Button_Off';};function FCKToolbarButton_OnClick(e){this.FCKToolbarButton.Click(e);return false;};FCKToolbarButton.prototype.Click=function(){this.Command.Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this.State=FCK_TRISTATE_DISABLED;this.DOMDiv.className='TB_Button_Disabled';this.DOMDiv.onmouseover=null;this.DOMDiv.onmouseout=null;this.DOMDiv.onclick=null;}
+var FCKSpecialCombo=function(A){this.FieldWidth=80;this.PanelWidth=130;this.PanelMaxHeight=150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=FCK_TOOLBARITEM_ICONTEXT;this.Enabled=true;this.Items=new Object();this._Panel=new FCKPanel();this._Panel.StyleSheet=FCKConfig.SkinPath+'fck_contextmenu.css';this._Panel.Create();this._Panel.PanelDiv.className+=' SC_Panel';this._Panel.PanelDiv.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._Panel.PanelDiv.getElementsByTagName('TD')[0];};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(){this.FCKSpecialCombo._Panel.Hide();this.FCKSpecialCombo.SetLabel(this.FCKItemLabel);if (typeof(this.FCKSpecialCombo.OnSelect)=='function') this.FCKSpecialCombo.OnSelect(this.FCKItemID,this);};FCKSpecialCombo.prototype.AddItem=function(A,B,C){var D=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));D.className=D.originalClass='SC_Item';D.innerHTML=B;D.FCKItemID=A;D.FCKItemLabel=C?C:A;D.FCKSpecialCombo=this;D.Selected=false;D.onmouseover=FCKSpecialCombo_ItemOnMouseOver;D.onmouseout=FCKSpecialCombo_ItemOnMouseOut;D.onclick=FCKSpecialCombo_ItemOnClick;this.Items[A.toString().toLowerCase()]=D;return D;};FCKSpecialCombo.prototype.SelectItem=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];if (B){B.className=B.originalClass='SC_ItemSelected';B.Selected=true;};};FCKSpecialCombo.prototype.DeselectAll=function(){for (var i in this.Items){this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){this.Label=A.length==0?'&nbsp;':A;if (this._LabelEl) this._LabelEl.innerHTML=this.Label;};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){this._OuterTable=A.appendChild(document.createElement('TABLE'));this._OuterTable.cellPadding=0;this._OuterTable.cellSpacing=0;this._OuterTable.insertRow(-1);var B;var C;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON:B='TB_ButtonType_Icon';C=false;break;case FCK_TOOLBARITEM_ONLYTEXT:B='TB_ButtonType_Text';C=false;break;case FCK_TOOLBARITEM_ICONTEXT:C=true;break;};if (this.Caption&&this.Caption.length>0&&C){var D=this._OuterTable.rows[0].insertCell(-1);D.unselectable='on';D.innerHTML=this.Caption;D.className='SC_FieldCaption';};var E=this._OuterTable.rows[0].insertCell(-1).appendChild(document.createElement('DIV'));if (C){E.className='SC_Field';E.style.width=this.FieldWidth+'px';E.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldLabel" unselectable="on"><label unselectable="on">&nbsp;</label></td><td class="SC_FieldButton" unselectable="on">&nbsp;</td></tr></tbody></table>';this._LabelEl=E.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{E.className='TB_Button_Off';E.innerHTML='<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldButton" style="border-left: none;" unselectable="on">&nbsp;</td></tr></tbody></table>';E.innerHTML='<table title="'+this.Tooltip+'" class="'+B+'" cellspacing="0" cellpadding="0" border="0" unselectable="on">'+'<tr>'+'<td class="TB_Text" unselectable="on">'+this.Caption+'</td>'+'<td class="TB_ButtonArrow" unselectable="on"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'+'</tr>'+'</table>';};E.SpecialCombo=this;E.onmouseover=FCKSpecialCombo_OnMouseOver;E.onmouseout=FCKSpecialCombo_OnMouseOut;E.onclick=FCKSpecialCombo_OnClick;};function FCKSpecialCombo_OnMouseOver(){if (this.SpecialCombo.Enabled){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_On';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_On';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field SC_FieldOver';break;};};};function FCKSpecialCombo_OnMouseOut(){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field';break;};};function FCKSpecialCombo_OnClick(e){if (e){e.stopPropagation();FCKPanelEventHandlers.OnDocumentClick(e);};if (this.SpecialCombo.Enabled){var oPanel=this.SpecialCombo._Panel;if (typeof(this.SpecialCombo.OnBeforeClick)=='function') this.SpecialCombo.OnBeforeClick(this.SpecialCombo);if (this.SpecialCombo._ItemsHolderEl.offsetHeight>this.SpecialCombo.PanelMaxHeight) oPanel.PanelDiv.style.height=this.SpecialCombo.PanelMaxHeight+'px';else oPanel.PanelDiv.style.height=this.SpecialCombo._ItemsHolderEl.offsetHeight+'px';oPanel.PanelDiv.style.width=this.SpecialCombo.PanelWidth+'px';if (FCKBrowserInfo.IsGecko) oPanel.PanelDiv.style.overflow='-moz-scrollbars-vertical';oPanel.Show(0,this.offsetHeight,this,null,this.SpecialCombo.PanelMaxHeight,true);};return false;};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;};function FCKToolbarSpecialCombo_OnSelect(itemId,item){this.Command.Execute(itemId,item);};FCKToolbarSpecialCombo.prototype.CreateInstance=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel());this._Combo.FieldWidth=this.FieldWidth!=null?this.FieldWidth:100;this._Combo.PanelWidth=this.PanelWidth!=null?this.PanelWidth:150;this._Combo.PanelMaxHeight=this.PanelMaxHeight!=null?this.PanelMaxHeight:150;this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A.DOMRow.insertCell(-1));this._Combo.Command=this.Command;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(combo,value){combo.DeselectAll();combo.SelectItem(value);combo.SetLabelById(value);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=this.Command.GetState();if (B!=FCK_TRISTATE_DISABLED){A=FCK_TRISTATE_ON;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}else A=FCK_TRISTATE_DISABLED;if (A==this.State) return;if (A==FCK_TRISTATE_DISABLED){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=FCK_TRISTATE_DISABLED);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=FCK_TRISTATE_DISABLED;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}
+var FCKToolbarFontsCombo=function(A,B){this.Command=FCKCommands.GetCommand('FontName');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontsCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.CreateItems=function(A){var B=FCKConfig.FontNames.split(';');for (var i=0;i<B.length;i++) this._Combo.AddItem(B[i],'<span style="font-family: \''+B[i]+'\'; font-size: 12px;">'+B[i]+'</span>');}
+var FCKToolbarFontSizeCombo=function(A,B){this.Command=FCKCommands.GetCommand('FontSize');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.CreateItems=function(A){A.FieldWidth=70;var B=FCKConfig.FontSizes.split(';');for (var i=0;i<B.length;i++){var C=B[i].split('/');this._Combo.AddItem(C[0],'<font size="'+C[0]+'">'+C[1]+'</font>',C[1]);};}
+var FCKToolbarFontFormatCombo=function(A,B){this.Command=FCKCommands.GetCommand('FontFormat');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;this.PanelWidth=190;};FCKToolbarFontFormatCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.CreateItems=function(A){var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){if (D[i]=='div'&&FCKBrowserInfo.IsGecko) continue;this._Combo.AddItem(D[i],'<'+D[i]+'>'+C[D[i]]+'</'+D[i]+'>',C[D[i]]);};}
+var FCKToolbarStyleCombo=function(A,B){this.Command=FCKCommands.GetCommand('Style');this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){FCKTools.AppendStyleSheet(A._Panel.Document,FCKConfig.EditorAreaCSS);if (!FCKBrowserInfo.IsGecko) A.OnBeforeClick=this.RefreshVisibleItems;for (var s in this.Command.Styles){var B=this.Command.Styles[s];var C;if (B.IsObjectElement) C=A.AddItem(s,s);else C=A.AddItem(s,B.GetOpenerTag()+s+B.GetCloserTag());C.Style=B;};};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){A.DeselectAll();var B=this.Command.GetActiveStyles();if (B.length>0){for (var i=0;i<B.length;i++) A.SelectItem(B[i].Name);A.SetLabelById(B[0].Name);}else A.SetLabel('');};FCKToolbarStyleCombo.prototype.RefreshVisibleItems=function(A){if (FCKSelection.GetType()=='Control') var B=FCKSelection.GetSelectedElement().tagName;for (var i in A.Items){var C=A.Items[i];if ((B&&C.Style.Element==B)||(!B&&!C.Style.IsObjectElement)) C.style.display='';else C.style.display='none';};}
+var FCKToolbarPanelButton=function(A,B,C,D){this.Command=FCKCommands.GetCommand(A);this.Label=B?B:A;this.Tooltip=C?C:(B?B:A);this.Style=D?D:FCK_TOOLBARITEM_ONLYICON;this.State=FCK_UNKNOWN;};FCKToolbarPanelButton.prototype.Click=function(e){if (e){e.stopPropagation();FCKPanelEventHandlers.OnDocumentClick(e);};if (this.State!=FCK_TRISTATE_DISABLED){this.Command.Execute(0,this.DOMDiv.offsetHeight,this.DOMDiv);};return false;};FCKToolbarPanelButton.prototype.CreateInstance=function(A){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;var B='<table title="'+this.Tooltip+'" cellspacing="0" cellpadding="0" border="0" unselectable="on">'+'<tr>';if (this.Style!=FCK_TOOLBARITEM_ONLYTEXT) B+='<td class="TB_Icon" unselectable="on"><img src="'+FCKConfig.SkinPath+'toolbar/'+this.Command.Name.toLowerCase()+'.gif" width="21" height="21" unselectable="on"></td>';if (this.Style!=FCK_TOOLBARITEM_ONLYICON) B+='<td class="TB_Text" unselectable="on" nowrap>'+this.Label+'</td>';B+='<td class="TB_ButtonArrow" unselectable="on"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'+'</tr>'+'</table>';this.DOMDiv.innerHTML=B;var C=A.DOMRow.insertCell(-1);C.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems=new Object();FCKToolbarItems.LoadedItems=new Object();FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,FCK_TOOLBARITEM_ICONTEXT,true,true);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak);break;case 'UniversalKey':B=new FCKToolbarButton('UniversalKey',FCKLang.UniversalKeyboard);break;case 'Rule':B=new FCKToolbarButton('InsertHorizontalRule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;}
+var FCKToolbar=function(){this.Items=new Array();var e=this.DOMTable=document.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';e.cellPadding=0;e.cellSpacing=0;e.border=0;this.DOMRow=e.insertRow(-1);var A=this.DOMRow.insertCell(-1);A.className='TB_Start';A.innerHTML='<img src="'+FCKConfig.SkinPath+'images/toolbar.start.gif" width="7" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';FCKToolbarSet.DOMElement.appendChild(e);};FCKToolbar.prototype.AddItem=function(A){this.Items[this.Items.length]=A;A.CreateInstance(this);};FCKToolbar.prototype.AddSeparator=function(){var A=this.DOMRow.insertCell(-1);A.unselectable='on';A.innerHTML='<img src="'+FCKConfig.SkinPath+'images/toolbar.separator.gif" width="5" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};FCKToolbar.prototype.AddTerminator=function(){var A=this.DOMRow.insertCell(-1);A.className='TB_End';A.innerHTML='<img src="'+FCKConfig.SkinPath+'images/toolbar.end.gif" width="12" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};
+var FCKToolbarBreak=function(){var A=document.createElement('div');A.className='TB_Break';A.style.clear=FCKLang.Dir=='rtl'?'left':'right';FCKToolbarSet.DOMElement.appendChild(A);}
+var FCKToolbarSet=FCK.ToolbarSet=new Object();document.getElementById('ExpandHandle').title=FCKLang.ToolbarExpand;document.getElementById('CollapseHandle').title=FCKLang.ToolbarCollapse;FCKToolbarSet.Toolbars=new Array();FCKToolbarSet.ItemsWysiwygOnly=new Array();FCKToolbarSet.ItemsContextSensitive=new Array();FCKToolbarSet.Expand=function(){document.getElementById('Collapsed').style.display='none';document.getElementById('Expanded').style.display='';if (!FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()",1);};};FCKToolbarSet.Collapse=function(){document.getElementById('Collapsed').style.display='';document.getElementById('Expanded').style.display='none';if (!FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()",1);};};FCKToolbarSet.Restart=function(){if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();document.getElementById('CollapseHandle').style.display=FCKConfig.ToolbarCanCollapse?'':'none';};FCKToolbarSet.Load=function(A){this.DOMElement=document.getElementById('eToolbar');var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=new Array();for (var x=0;x<B.length;x++){var C=B[x];var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);if (!F.SourceView) this.ItemsWysiwygOnly[this.ItemsWysiwygOnly.length]=F;if (F.ContextSensitive) this.ItemsContextSensitive[this.ItemsContextSensitive.length]=F;};};};D.AddTerminator();};this.Toolbars[this.Toolbars.length]=D;};};FCKToolbarSet.RefreshModeState=function(){if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){for (var i=0;i<FCKToolbarSet.ItemsWysiwygOnly.length;i++) FCKToolbarSet.ItemsWysiwygOnly[i].Enable();FCKToolbarSet.RefreshItemsState();}else{FCKToolbarSet.RefreshItemsState();for (var i=0;i<FCKToolbarSet.ItemsWysiwygOnly.length;i++) FCKToolbarSet.ItemsWysiwygOnly[i].Disable();};};FCKToolbarSet.RefreshItemsState=function(){for (var i=0;i<FCKToolbarSet.ItemsContextSensitive.length;i++) FCKToolbarSet.ItemsContextSensitive[i].RefreshState();};
+var FCKDialog=new Object();FCKDialog.OpenDialog=function(A,B,C,D,E,F,G,H){var I=new Object();I.Title=B;I.Page=C;I.Editor=window;I.CustomValue=F;var J=FCKConfig.BasePath+'fckdialog.html';this.Show(I,A,J,D,E,G,H);};
+FCKDialog.Show=function(A,B,C,D,E,F){if (!F) F=window;F.showModalDialog(C,A,"dialogWidth:"+D+"px;dialogHeight:"+E+"px;help:no;scroll:no;status:no");};
+var FCKContextMenuItem=function(A,B,C,D){this.ContextMenu=A;this.Command=FCKCommands.GetCommand(B);this.Label=C?C:B;this.HasIcon=D?true:false;};function FCKContextMenuItem_OnMouseOver(){if (this.className!='CM_Disabled') this.className='CM_Over';};function FCKContextMenuItem_OnMouseOut(){if (this.className!='CM_Disabled') this.className='CM_Option';};function FCKContextMenuItem_OnClick(){if (this.className!='CM_Disabled'){this.FCKContextMenuItem.ContextMenu.Hide();this.FCKContextMenuItem.Command.Execute();};return false;};FCKContextMenuItem.prototype.CreateTableRow=function(A){this._Row=A.insertRow(-1);this._Row.className='CM_Disabled';this._Row.FCKContextMenuItem=this;this._Row.onmouseover=FCKContextMenuItem_OnMouseOver;this._Row.onmouseout=FCKContextMenuItem_OnMouseOut;this._Row.onclick=FCKContextMenuItem_OnClick;var B=this._Row.insertCell(-1);B.className='CM_Icon';if (this.HasIcon) B.innerHTML='<img alt="" src="'+FCKConfig.SkinPath+'toolbar/'+this.Command.Name.toLowerCase()+'.gif" width="21" height="20" unselectable="on">';B=this._Row.insertCell(-1);B.className='CM_Label';B.unselectable='on';B.noWrap=true;B.innerHTML=this.Label;};FCKContextMenuItem.prototype.SetVisible=function(A){this._Row.style.display=A?'':'none';};FCKContextMenuItem.prototype.RefreshState=function(){switch (this.Command.GetState()){case FCK_TRISTATE_ON:case FCK_TRISTATE_OFF:this._Row.className='CM_Option';break;default:this._Row.className='CM_Disabled';break;};};
+var FCKContextMenuSeparator=function(){};FCKContextMenuSeparator.prototype.CreateTableRow=function(A){this._Row=A.insertRow(-1);this._Row.className='CM_Separator';var B=this._Row.insertCell(-1);B.className='CM_Icon';B=this._Row.insertCell(-1);B.className='CM_Label';B.innerHTML='<div></div>';};FCKContextMenuSeparator.prototype.SetVisible=function(A){this._Row.style.display=A?'':'none';};FCKContextMenuSeparator.prototype.RefreshState=function(){};
+var FCKContextMenuGroup=function(A,B,C,D,E){this.IsVisible=true;this.Items=new Array();if (A) this.Add(new FCKContextMenuSeparator());if (B&&C&&D) this.Add(new FCKContextMenuItem(B,C,D,E));this.ValidationFunction=null;};FCKContextMenuGroup.prototype.Add=function(A){this.Items[this.Items.length]=A;};FCKContextMenuGroup.prototype.CreateTableRows=function(A){for (var i=0;i<this.Items.length;i++){this.Items[i].CreateTableRow(A);};};FCKContextMenuGroup.prototype.SetVisible=function(A){for (var i=0;i<this.Items.length;i++){this.Items[i].SetVisible(A);};this.IsVisible=A;};FCKContextMenuGroup.prototype.RefreshState=function(){if (!this.IsVisible) return;for (var i=0;i<this.Items.length;i++){this.Items[i].RefreshState();};}
+var FCKContextMenu=new Object();FCKContextMenu._IsLoaded=false;FCKContextMenu.Reload=function(){this._Div=this._Document.createElement('DIV');this._Div.className='CM_ContextMenu';this._Div.style.position='absolute';this._Div.style.visibility='hidden';this._Document.body.appendChild(this._Div);var A=this._Document.createElement('TABLE');A.cellSpacing=0;A.cellPadding=0;A.border=0;this._Div.appendChild(A);this.Groups=new Object();for (var i=0;i<FCKConfig.ContextMenu.length;i++){var B=FCKConfig.ContextMenu[i];this.Groups[B]=this._GetGroup(B);this.Groups[B].CreateTableRows(A);};this._IsLoaded=true;};FCKContextMenu._GetGroup=function(A){var B;switch (A){case 'Generic':B=new FCKContextMenuGroup();B.Add(new FCKContextMenuItem(this,'Cut',FCKLang.Cut,true));B.Add(new FCKContextMenuItem(this,'Copy',FCKLang.Copy,true));B.Add(new FCKContextMenuItem(this,'Paste',FCKLang.Paste,true));break;case 'Link':B=new FCKContextMenuGroup();B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'Link',FCKLang.EditLink,true));B.Add(new FCKContextMenuItem(this,'Unlink',FCKLang.RemoveLink,true));break;case 'TableCell':B=new FCKContextMenuGroup();B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableInsertRow',FCKLang.InsertRow,true));B.Add(new FCKContextMenuItem(this,'TableDeleteRows',FCKLang.DeleteRows,true));B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableInsertColumn',FCKLang.InsertColumn,true));B.Add(new FCKContextMenuItem(this,'TableDeleteColumns',FCKLang.DeleteColumns,true));B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableInsertCell',FCKLang.InsertCell,true));B.Add(new FCKContextMenuItem(this,'TableDeleteCells',FCKLang.DeleteCells,true));B.Add(new FCKContextMenuItem(this,'TableMergeCells',FCKLang.MergeCells,true));B.Add(new FCKContextMenuItem(this,'TableSplitCell',FCKLang.SplitCell,true));B.Add(new FCKContextMenuSeparator());B.Add(new FCKContextMenuItem(this,'TableCellProp',FCKLang.CellProperties,true));B.Add(new FCKContextMenuItem(this,'TableProp',FCKLang.TableProperties,true));break;case 'Table':return new FCKContextMenuGroup(true,this,'Table',FCKLang.TableProperties,true);case 'Image':return new FCKContextMenuGroup(true,this,'Image',FCKLang.ImageProperties,true);case 'Flash':return new FCKContextMenuGroup(true,this,'Flash',FCKLang.FlashProperties,true);case 'Form':return new FCKContextMenuGroup(true,this,'Form',FCKLang.FormProp,true);case 'Checkbox':return new FCKContextMenuGroup(true,this,'Checkbox',FCKLang.CheckboxProp,true);case 'Radio':return new FCKContextMenuGroup(true,this,'Radio',FCKLang.RadioButtonProp,true);case 'TextField':return new FCKContextMenuGroup(true,this,'TextField',FCKLang.TextFieldProp,true);case 'HiddenField':return new FCKContextMenuGroup(true,this,'HiddenField',FCKLang.HiddenFieldProp,true);case 'ImageButton':return new FCKContextMenuGroup(true,this,'ImageButton',FCKLang.ImageButtonProp,true);case 'Button':return new FCKContextMenuGroup(true,this,'Button',FCKLang.ButtonProp,true);case 'Select':return new FCKContextMenuGroup(true,this,'Select',FCKLang.SelectionFieldProp,true);case 'Textarea':return new FCKContextMenuGroup(true,this,'Textarea',FCKLang.TextareaProp,true);case 'BulletedList':return new FCKContextMenuGroup(true,this,'BulletedList',FCKLang.BulletedListProp,true);case 'NumberedList':return new FCKContextMenuGroup(true,this,'NumberedList',FCKLang.NumberedListProp,true);case 'Anchor':return new FCKContextMenuGroup(true,this,'Anchor',FCKLang.AnchorProp,true);};return B;};FCKContextMenu.RefreshState=function(){var A=FCKSelection.GetSelectedElement();var B;if (A) B=A.tagName;if (this.Groups['Link'])			this.Groups['Link'].SetVisible(FCK.GetNamedCommandState('Unlink')!=FCK_TRISTATE_DISABLED);if (this.Groups['TableCell'])		this.Groups['TableCell'].SetVisible(B!='TABLE'&&FCKSelection.HasAncestorNode('TABLE'));if (this.Groups['Table'])			this.Groups['Table'].SetVisible(B=='TABLE');if (this.Groups['Image'])			this.Groups['Image'].SetVisible(B=='IMG'&&!A.getAttribute('_fckfakelement'));if (this.Groups['Flash'])			this.Groups['Flash'].SetVisible(B=='IMG'&&A.getAttribute('_fckflash'));if (this.Groups['Anchor'])		this.Groups['Anchor'].SetVisible(B=='IMG'&&A.getAttribute('_fckanchor'));if (this.Groups['BulletedList'])	this.Groups['BulletedList'].SetVisible(FCKSelection.HasAncestorNode('UL'));if (this.Groups['NumberedList'])	this.Groups['NumberedList'].SetVisible(FCKSelection.HasAncestorNode('OL'));if (this.Groups['Select'])		this.Groups['Select'].SetVisible(B=='SELECT');if (this.Groups['Textarea'])		this.Groups['Textarea'].SetVisible(B=='TEXTAREA');if (this.Groups['Form'])			this.Groups['Form'].SetVisible(FCKSelection.HasAncestorNode('FORM'));if (this.Groups['Checkbox'])		this.Groups['Checkbox'].SetVisible(B=='INPUT'&&A.type=='checkbox');if (this.Groups['Radio'])			this.Groups['Radio'].SetVisible(B=='INPUT'&&A.type=='radio');if (this.Groups['TextField'])		this.Groups['TextField'].SetVisible(B=='INPUT'&&(A.type=='text'||A.type=='password'));if (this.Groups['HiddenField'])	this.Groups['HiddenField'].SetVisible(B=='INPUT'&&A.type=='hidden');if (this.Groups['ImageButton'])	this.Groups['ImageButton'].SetVisible(B=='INPUT'&&A.type=='image');if (this.Groups['Button'])		this.Groups['Button'].SetVisible(B=='INPUT'&&(A.type=='button'||A.type=='submit'||A.type=='reset'));for (var o in this.Groups){this.Groups[o].RefreshState();};};
+function FCKContextMenu_OnContextMenu() { return false;};FCKContextMenu.Show=function(x,y){if (!this._Popup){this._Popup=window.createPopup();this._Document=this._Popup.document;this._Document.createStyleSheet(FCKConfig.SkinPath+'fck_contextmenu.css');this._Document.oncontextmenu=FCKContextMenu_OnContextMenu;aCleanupDocs[aCleanupDocs.length]=this._Document;};if (!this._IsLoaded){this.Reload();this._Div.style.visibility='';};this.RefreshState();this._Popup.show(x,y,0,0);this._Popup.show(x,y,this._Div.offsetWidth,this._Div.offsetHeight);};FCKContextMenu.Hide=function(){if (this._Popup) this._Popup.hide();}
+if (!FCKConfig.PluginsPath.endsWith('/')) FCKConfig.PluginsPath+='/';var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=new Array();else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.indexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];FCKScriptLoader.AddScript(this.Path+'lang/'+A+'.js');};FCKScriptLoader.AddScript(this.Path+'fckplugin.js');}
+var FCKPlugins=FCK.Plugins=new Object();FCKPlugins.ItemsCount=0;FCKPlugins.Loaded=false;FCKPlugins.Items=new Object();for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var oItem=FCKConfig.Plugins.Items[i];FCKPlugins.Items[oItem[0]]=new FCKPlugin(oItem[0],oItem[1],oItem[2]);FCKPlugins.ItemsCount++;};FCKPlugins.Load=function(){for (var s in this.Items) this.Items[s].Load();this.Loaded=true;FCKPlugins.Load=null;}
+if (FCKLang&&window.document.dir.toLowerCase()!=FCKLang.Dir.toLowerCase()) window.document.dir=FCKLang.Dir;if (FCKConfig.ForcePasteAsPlainText) FCK.Events.AttachEvent("OnPaste",FCK.Paste);if (FCKPlugins.ItemsCount>0){FCKScriptLoader.OnEmpty=CompleteLoading;FCKPlugins.Load();}else CompleteLoading();function CompleteLoading(){FCKToolbarSet.Name=FCKURLParams['Toolbar']||'Default';FCKToolbarSet.Load(FCKToolbarSet.Name);FCKToolbarSet.Restart();FCK.AttachToOnSelectionChange(FCKToolbarSet.RefreshItemsState);FCK.SetStatus(FCK_STATUS_COMPLETE);if (typeof(window.parent.FCKeditor_OnComplete)=='function') window.parent.FCKeditor_OnComplete(FCK);}
diff -ruN 1.3.11sr1/fckeditor/editor/js/fck_startup.js 1.4.0sr5-1/fckeditor/editor/js/fck_startup.js
--- 1.3.11sr1/fckeditor/editor/js/fck_startup.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/js/fck_startup.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,24 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * This file has been compacted for best loading performance.
+ */
+var NS;if (!(NS=window.parent.__FCKeditorNS)) NS=window.parent.__FCKeditorNS=new Object();
+Array.prototype.addItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.indexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};String.prototype.startsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.endsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,'');};String.prototype.ltrim=function(){return this.replace(/^\s*/g,'');};String.prototype.rtrim=function(){return this.replace(/\s*$/g,'');};String.prototype.replaceNewLineChars=function(A){return this.replace(/\n/g,A);}
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-1000;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;
+var FCKBrowserInfo;if (!(FCKBrowserInfo=NS.FCKBrowserInfo)){FCKBrowserInfo=NS.FCKBrowserInfo=new Object();var sAgent=navigator.userAgent.toLowerCase();FCKBrowserInfo.IsIE=(sAgent.indexOf("msie")!=-1);FCKBrowserInfo.IsGecko=!FCKBrowserInfo.IsIE;FCKBrowserInfo.IsSafari=(sAgent.indexOf("safari")!=-1);FCKBrowserInfo.IsNetscape=(sAgent.indexOf("netscape")!=-1);};
+var FCKScriptLoader=new Object();FCKScriptLoader.IsLoading=false;FCKScriptLoader.Queue=new Array();FCKScriptLoader.AddScript=function(A){FCKScriptLoader.Queue[FCKScriptLoader.Queue.length]=A;if (!this.IsLoading) this.CheckQueue();};FCKScriptLoader.CheckQueue=function(){if (this.Queue.length>0){this.IsLoading=true;var A=this.Queue[0];var B=new Array();for (i=1;i<this.Queue.length;i++) B[i-1]=this.Queue[i];this.Queue=B;this.LoadFile(A);}else{this.IsLoading=false;if (this.OnEmpty) this.OnEmpty();};};if (FCKBrowserInfo.IsSafari){FCKScriptLoader.LoadFile=function(A){if (A.lastIndexOf('.css')>0){this.CheckQueue();return;};var B=new XMLHttpRequest();B.open("GET",A,false);B.send(null);if (B.status==200){try{eval(B.responseText);}catch (e){alert('Error parsing '+A+': '+e.message);};}else alert('Error loading '+A);this.CheckQueue();};}else{FCKScriptLoader.LoadFile=function(A){var e;if (A.lastIndexOf('.css')>0){e=document.createElement('LINK');e.rel='stylesheet';e.type='text/css';}else{e=document.createElement("script");e.type="text/javascript";};document.getElementsByTagName("head")[0].appendChild(e);if (e.tagName=='LINK'){if (FCKBrowserInfo.IsIE) e.onload=FCKScriptLoader_OnLoad;else FCKScriptLoader.CheckQueue();e.href=A;}else{e.onload=e.onreadystatechange=FCKScriptLoader_OnLoad;e.src=A;};};function FCKScriptLoader_OnLoad(){if (this.tagName=='LINK'||!this.readyState||this.readyState=='loaded') FCKScriptLoader.CheckQueue();};}
+var FCKURLParams=new Object();var aParams=document.location.search.substr(1).split('&');for (var i=0;i<aParams.length;i++){var aParam=aParams[i].split('=');var sParamName=aParam[0];var sParamValue=aParam[1];FCKURLParams[sParamName]=sParamValue;}
+var FCK=new Object();FCK.Name=FCKURLParams['InstanceName'];FCK.Status=FCK_STATUS_NOTLOADED;FCK.EditMode=FCK_EDITMODE_WYSIWYG;var aElements=window.parent.document.getElementsByName(FCK.Name);aElements[aElements.length]=window.parent.document.getElementById(FCK.Name);var i=0;while ((FCK.LinkedField=aElements[i++])){if (FCK.LinkedField.tagName=='INPUT'||FCK.LinkedField.tagName=='TEXTAREA') break;};var FCKTempBin=new Object();FCKTempBin.Elements=new Array();FCKTempBin.AddElement=function(A){var B=FCKTempBin.Elements.length;FCKTempBin.Elements[B]=A;return B;};FCKTempBin.RemoveElement=function(A){var e=FCKTempBin.Elements[A];FCKTempBin.Elements[A]=null;return e;};FCKTempBin.Reset=function(){var i=0;while (i<FCKTempBin.Elements.length) FCKTempBin.Elements[i++]==null;FCKTempBin.Elements.length=0;}
+var FCKConfig=FCK.Config=new Object();if (document.location.protocol=='file:'){FCKConfig.BasePath=document.location.pathname.substr(1);FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');FCKConfig.BasePath='file://'+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);}else{FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=document.location.protocol+'//'+document.location.host+FCKConfig.BasePath;};FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig=new Object();var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=unescape(C[0]);var E=unescape(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (!isNaN(E)) this.PageConfig[D]=parseInt(E);else this.PageConfig[D]=E;};};FCKConfig.LoadPageConfig=function(){for (var A in this.PageConfig) FCKConfig[A]=this.PageConfig[A];};FCKConfig.ToolbarSets=new Object();FCKConfig.Plugins=new Object();FCKConfig.Plugins.Items=new Array();FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.addItem([A,B,C]);};FCKConfig.ProtectedSource=new Object();FCKConfig.ProtectedSource.RegexEntries=new Array();FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.addItem(A);};FCKConfig.ProtectedSource.Protect=function(A){function _Replace(protectedSource){var B=FCKTempBin.AddElement(protectedSource);return '<!--{PS..'+B+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};return A.replace(/(<|&lt;)!--\{PS..(\d+)\}--(>|&gt;)/g,_Replace);};FCKConfig.ProtectedSource.Add(/<!--[\s\S]*?-->/g);
+var FCKeditorAPI;function FCKeditorAPI_GetInstance(instanceName){return this.__Instances[instanceName];};if (!window.parent.FCKeditorAPI){FCKeditorAPI=window.parent.FCKeditorAPI=new Object();FCKeditorAPI.__Instances=new Object();FCKeditorAPI.Version='2.1.1';FCKeditorAPI.GetInstance=FCKeditorAPI_GetInstance;}else FCKeditorAPI=window.parent.FCKeditorAPI;FCKeditorAPI.__Instances[FCK.Name]=FCK;
+function Window_OnContextMenu(e){if (e) e.preventDefault();else{if (event.srcElement==document.getElementById('eSourceField')) return true;};return false;};window.document.oncontextmenu=Window_OnContextMenu;if (FCKBrowserInfo.IsGecko){function Window_OnResize(){var oFrame=document.getElementById('eEditorArea');oFrame.height=0;var oCell=document.getElementById(FCK.EditMode==FCK_EDITMODE_WYSIWYG?'eWysiwygCell':'eSource');var iHeight=oCell.offsetHeight;oFrame.height=iHeight-2;};window.onresize=Window_OnResize;};if (FCKBrowserInfo.IsIE){var aCleanupDocs=new Array();aCleanupDocs[0]=document;function Window_OnBeforeUnload(){var d,e;var j=0;while ((d=aCleanupDocs[j++])){var i=0;while ((e=d.getElementsByTagName("DIV").item(i++))){if (e.FCKToolbarButton) e.FCKToolbarButton=null;if (e.FCKSpecialCombo) e.FCKSpecialCombo=null;if (e.Command) e.Command=null;};i=0;while ((e=d.getElementsByTagName("TR").item(i++))){if (e.FCKContextMenuItem) e.FCKContextMenuItem=null;};aCleanupDocs[j]=null;};if (typeof(FCKTempBin)!='undefined') FCKTempBin.Reset();};window.attachEvent("onunload",Window_OnBeforeUnload);};function Window_OnLoad(){if (FCKBrowserInfo.IsNetscape) document.getElementById('eWysiwygCell').style.paddingRight='2px';LoadConfigFile();};window.onload=Window_OnLoad;function LoadConfigFile(){FCKScriptLoader.OnEmpty=ProcessHiddenField;FCKScriptLoader.AddScript('../fckconfig.js');};function ProcessHiddenField(){FCKConfig.ProcessHiddenField();LoadCustomConfigFile();};function LoadCustomConfigFile(){if (FCKConfig.CustomConfigurationsPath.length>0){FCKScriptLoader.OnEmpty=LoadPageConfig;FCKScriptLoader.AddScript(FCKConfig.CustomConfigurationsPath);}else{LoadPageConfig();};};function LoadPageConfig(){FCKConfig.LoadPageConfig();LoadStyles();};function LoadStyles(){FCKScriptLoader.OnEmpty=LoadScripts;FCKScriptLoader.AddScript(FCKConfig.SkinPath+'fck_editor.css');FCKScriptLoader.AddScript(FCKConfig.SkinPath+'fck_contextmenu.css');};function LoadScripts(){FCKScriptLoader.OnEmpty=null;if (FCKBrowserInfo.IsIE) FCKScriptLoader.AddScript('js/fckeditorcode_ie_1.js');else FCKScriptLoader.AddScript('js/fckeditorcode_gecko_1.js');};function LoadLanguageFile(){FCKScriptLoader.OnEmpty=LoadEditor;FCKScriptLoader.AddScript('lang/'+FCKLanguageManager.ActiveLanguage.Code+'.js');};function LoadEditor(){FCKScriptLoader.OnEmpty=null;if (FCKLang) window.document.dir=FCKLang.Dir;FCK.StartEditor();}
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ar.js 1.4.0sr5-1/fckeditor/editor/lang/ar.js
--- 1.3.11sr1/fckeditor/editor/lang/ar.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ar.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ar.js
+ * 	Arabic language file.
+ * 
+ * File Authors:
+ * 		Abdul-Aziz Abdul-Kareem Al-Oraij (http://aziz.oraij.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "ضم شريط الأدوات",
+ToolbarExpand		: "تمدد شريط الأدوات",
+
+// Toolbar Items and Context Menu
+Save				: "حفظ",
+NewPage				: "صفحة جديدة",
+Preview				: "معاينة الصفحة",
+Cut					: "قص",
+Copy				: "نسخ",
+Paste				: "لصق",
+PasteText			: "لصق كنص بسيط",
+PasteWord			: "لصق من وورد",
+Print				: "طباعة",
+SelectAll			: "تحديد الكل",
+RemoveFormat		: "إزالة التنسيقات",
+InsertLinkLbl		: "رابط",
+InsertLink			: "إدراج/تحرير رابط",
+RemoveLink			: "إزالة رابط",
+Anchor				: "إدراج/تحرير إشارة مرجعية",
+InsertImageLbl		: "صورة",
+InsertImage			: "إدراج/تحرير صورة",
+InsertFlashLbl		: "فلاش",
+InsertFlash			: "إدراج/تحرير فيلم فلاش",
+InsertTableLbl		: "جدول",
+InsertTable			: "إدراج/تحرير جدول",
+InsertLineLbl		: "خط فاصل",
+InsertLine			: "إدراج خط فاصل",
+InsertSpecialCharLbl: "رموز",
+InsertSpecialChar	: "إدراج  رموز..ِ",
+InsertSmileyLbl		: "ابتسامات",
+InsertSmiley		: "إدراج ابتسامات",
+About				: "حول FCKeditor",
+Bold				: "غامق",
+Italic				: "مائل",
+Underline			: "تسطير",
+StrikeThrough		: "يتوسطه خط",
+Subscript			: "منخفض",
+Superscript			: "مرتفع",
+LeftJustify			: "محاذاة إلى اليسار",
+CenterJustify		: "توسيط",
+RightJustify		: "محاذاة إلى اليمين",
+BlockJustify		: "ضبط",
+DecreaseIndent		: "إنقاص المسافة البادئة",
+IncreaseIndent		: "زيادة المسافة البادئة",
+Undo				: "تراجع",
+Redo				: "إعادة",
+NumberedListLbl		: "تعداد رقمي",
+NumberedList		: "إدراج/إلغاء تعداد رقمي",
+BulletedListLbl		: "تعداد نقطي",
+BulletedList		: "إدراج/إلغاء تعداد نقطي",
+ShowTableBorders	: "معاينة حدود الجداول",
+ShowDetails			: "معاينة التفاصيل",
+Style				: "نمط",
+FontFormat			: "تنسيق",
+Font				: "خط",
+FontSize			: "حجم الخط",
+TextColor			: "لون النص",
+BGColor				: "لون الخلفية",
+Source				: "شفرة المصدر",
+Find				: "بحث",
+Replace				: "استبدال",
+SpellCheck			: "تدقيق إملائي",
+UniversalKeyboard	: "لوحة المفاتيح العالمية",
+
+Form			: "نموذج",
+Checkbox		: "خانة اختيار",
+RadioButton		: "زر خيار",
+TextField		: "مربع نص",
+Textarea		: "ناحية نص",
+HiddenField		: "إدراج حقل خفي",
+Button			: "زر ضغط",
+SelectionField	: "قائمة منسدلة",
+ImageButton		: "زر صورة",
+
+// Context Menu
+EditLink			: "تحرير رابط",
+InsertRow			: "إدراج صف",
+DeleteRows			: "حذف صفوف",
+InsertColumn		: "إدراج عمود",
+DeleteColumns		: "حذف أعمدة",
+InsertCell			: "إدراج خلية",
+DeleteCells			: "حذف خلايا",
+MergeCells			: "دمج خلايا",
+SplitCell			: "تقسيم خلية",
+CellProperties		: "خصائص الخلية",
+TableProperties		: "خصائص الجدول",
+ImageProperties		: "خصائص الصورة",
+FlashProperties		: "خصائص فيلم الفلاش",
+
+AnchorProp			: "خصائص الإشارة المرجعية",
+ButtonProp			: "خصائص زر الضغط",
+CheckboxProp		: "خصائص خانة الاختيار",
+HiddenFieldProp		: "خصائص الحقل الخفي",
+RadioButtonProp		: "خصائص زر الخيار",
+ImageButtonProp		: "خصائص زر الصورة",
+TextFieldProp		: "خصائص مربع النص",
+SelectionFieldProp	: "خصائص القائمة المنسدلة",
+TextareaProp		: "خصائص ناحية النص",
+FormProp			: "خصائص النموذج",
+
+FontFormats			: "عادي;منسّق;دوس;العنوان 1;العنوان  2;العنوان  3;العنوان  4;العنوان  5;العنوان  6",
+
+// Alerts and Messages
+ProcessingXHTML		: "انتظر قليلاً ريثما تتم   معالَجة‏ XHTML. لن يستغرق طويلاً...",
+Done				: "تم",
+PasteWordConfirm	: "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟",
+NotCompatiblePaste	: "هذه الميزة تحتاج لمتصفح من النوعInternet Explorer إصدار 5.5 فما فوق. هل تود اللصق دون تنظيف الكود؟",
+UnknownToolbarItem	: "عنصر شريط أدوات غير معروف \"%1\"",
+UnknownCommand		: "أمر غير معروف \"%1\"",
+NotImplemented		: "لم يتم دعم هذا الأمر",
+UnknownToolbarSet	: "لم أتمكن من العثور على طقم الأدوات \"%1\" ",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "موافق",
+DlgBtnCancel		: "إلغاء الأمر",
+DlgBtnClose			: "إغلاق",
+DlgBtnBrowseServer	: "تصفح الخادم",
+DlgAdvancedTag		: "متقدم",
+DlgOpOther			: "&lt;أخرى&gt;",
+DlgInfoTab			: "معلومات",
+DlgAlertUrl			: "الرجاء كتابة عنوان الإنترنت",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;بدون تحديد&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "اتجاه النص",
+DlgGenLangDirLtr	: "اليسار لليمين (LTR)",
+DlgGenLangDirRtl	: "اليمين لليسار (RTL)",
+DlgGenLangCode		: "رمز اللغة",
+DlgGenAccessKey		: "مفاتيح الاختصار",
+DlgGenName			: "الاسم",
+DlgGenTabIndex		: "الترتيب",
+DlgGenLongDescr		: "عنوان الوصف المفصّل",
+DlgGenClass			: "فئات التنسيق",
+DlgGenTitle			: "تلميح الشاشة",
+DlgGenContType		: "نوع التلميح",
+DlgGenLinkCharset	: "ترميز المادة المرطلوبة",
+DlgGenStyle			: "نمط",
+
+// Image Dialog
+DlgImgTitle			: "خصائص الصورة",
+DlgImgInfoTab		: "معلومات الصورة",
+DlgImgBtnUpload		: "أرسلها للخادم",
+DlgImgURL			: "موقع الصورة",
+DlgImgUpload		: "رفع",
+DlgImgAlt			: "الوصف",
+DlgImgWidth			: "العرض",
+DlgImgHeight		: "الارتفاع",
+DlgImgLockRatio		: "تناسق الحجم",
+DlgBtnResetSize		: "استعادة الحجم الأصلي",
+DlgImgBorder		: "سمك الحدود",
+DlgImgHSpace		: "تباعد أفقي",
+DlgImgVSpace		: "تباعد عمودي",
+DlgImgAlign			: "محاذاة",
+DlgImgAlignLeft		: "يسار",
+DlgImgAlignAbsBottom: "أسفل النص",
+DlgImgAlignAbsMiddle: "وسط السطر",
+DlgImgAlignBaseline	: "على السطر",
+DlgImgAlignBottom	: "أسفل",
+DlgImgAlignMiddle	: "وسط",
+DlgImgAlignRight	: "يمين",
+DlgImgAlignTextTop	: "أعلى النص",
+DlgImgAlignTop		: "أعلى",
+DlgImgPreview		: "معاينة",
+DlgImgAlertUrl		: "فضلاً اكتب الموقع الذي توجد عليه هذه الصورة.",
+DlgImgLinkTab		: "الرابط",
+
+// Flash Dialog
+DlgFlashTitle		: "خصائص فيلم الفلاش",
+DlgFlashChkPlay		: "تشغيل تلقائي",
+DlgFlashChkLoop		: "تكرار",
+DlgFlashChkMenu		: "تمكين قائمة فيلم الفلاش",
+DlgFlashScale		: "الحجم",
+DlgFlashScaleAll	: "إظهار الكل",
+DlgFlashScaleNoBorder	: "بلا حدود",
+DlgFlashScaleFit	: "ضبط تام",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ارتباط تشعبي",
+DlgLnkInfoTab		: "معلومات الرابط",
+DlgLnkTargetTab		: "الهدف",
+
+DlgLnkType			: "نوع الربط",
+DlgLnkTypeURL		: "العنوان",
+DlgLnkTypeAnchor	: "مكان في هذا المستند",
+DlgLnkTypeEMail		: "بريد إلكتروني",
+DlgLnkProto			: "البروتوكول",
+DlgLnkProtoOther	: "&lt;أخرى&gt;",
+DlgLnkURL			: "الموقع",
+DlgLnkAnchorSel		: "اختر علامة مرجعية",
+DlgLnkAnchorByName	: "حسب اسم العلامة",
+DlgLnkAnchorById	: "حسب تعريف العنصر",
+DlgLnkNoAnchors		: "&lt;لا يوجد علامات مرجعية في هذا المستند&gt;",
+DlgLnkEMail			: "عنوان بريد إلكتروني",
+DlgLnkEMailSubject	: "موضوع الرسالة",
+DlgLnkEMailBody		: "محتوى الرسالة",
+DlgLnkUpload		: "رفع",
+DlgLnkBtnUpload		: "أرسلها للخادم",
+
+DlgLnkTarget		: "الهدف",
+DlgLnkTargetFrame	: "&lt;إطار&gt;",
+DlgLnkTargetPopup	: "&lt;نافذة منبثقة&gt;",
+DlgLnkTargetBlank	: "إطار جديد (_blank)",
+DlgLnkTargetParent	: "الإطار الأصل (_parent)",
+DlgLnkTargetSelf	: "نفس الإطار (_self)",
+DlgLnkTargetTop		: "صفحة كاملة (_top)",
+DlgLnkTargetFrameName	: "اسم الإطار الهدف",
+DlgLnkPopWinName	: "تسمية النافذة المنبثقة",
+DlgLnkPopWinFeat	: "خصائص النافذة المنبثقة",
+DlgLnkPopResize		: "قابلة للتحجيم",
+DlgLnkPopLocation	: "شريط العنوان",
+DlgLnkPopMenu		: "القوائم الرئيسية",
+DlgLnkPopScroll		: "أشرطة التمرير",
+DlgLnkPopStatus		: "شريط الحالة السفلي",
+DlgLnkPopToolbar	: "شريط الأدوات",
+DlgLnkPopFullScrn	: "ملئ الشاشة (IE)",
+DlgLnkPopDependent	: "تابع (Netscape)",
+DlgLnkPopWidth		: "العرض",
+DlgLnkPopHeight		: "الارتفاع",
+DlgLnkPopLeft		: "التمركز لليسار",
+DlgLnkPopTop		: "التمركز للأعلى",
+
+DlnLnkMsgNoUrl		: "فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط",
+DlnLnkMsgNoEMail	: "فضلاً أدخل عنوان البريد الإلكتروني",
+DlnLnkMsgNoAnchor	: "فضلاً حدد العلامة المرجعية المرغوبة",
+
+// Color Dialog
+DlgColorTitle		: "اختر لوناً",
+DlgColorBtnClear	: "مسح",
+DlgColorHighlight	: "تحديد",
+DlgColorSelected	: "اختيار",
+
+// Smiley Dialog
+DlgSmileyTitle		: "إدراج ابتسامات ",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "إدراج رمز",
+
+// Table Dialog
+DlgTableTitle		: "إدراج جدول",
+DlgTableRows		: "صفوف",
+DlgTableColumns		: "أعمدة",
+DlgTableBorder		: "سمك الحدود",
+DlgTableAlign		: "المحاذاة",
+DlgTableAlignNotSet	: "<بدون تحديد>",
+DlgTableAlignLeft	: "يسار",
+DlgTableAlignCenter	: "وسط",
+DlgTableAlignRight	: "يمين",
+DlgTableWidth		: "العرض",
+DlgTableWidthPx		: "بكسل",
+DlgTableWidthPc		: "بالمئة",
+DlgTableHeight		: "الارتفاع",
+DlgTableCellSpace	: "تباعد الخلايا",
+DlgTableCellPad		: "المسافة البادئة",
+DlgTableCaption		: "الوصف",
+
+// Table Cell Dialog
+DlgCellTitle		: "خصائص الخلية",
+DlgCellWidth		: "العرض",
+DlgCellWidthPx		: "بكسل",
+DlgCellWidthPc		: "بالمئة",
+DlgCellHeight		: "الارتفاع",
+DlgCellWordWrap		: "التفاف النص",
+DlgCellWordWrapNotSet	: "<بدون تحديد>",
+DlgCellWordWrapYes	: "نعم",
+DlgCellWordWrapNo	: "لا",
+DlgCellHorAlign		: "المحاذاة الأفقية",
+DlgCellHorAlignNotSet	: "<بدون تحديد>",
+DlgCellHorAlignLeft	: "يسار",
+DlgCellHorAlignCenter	: "وسط",
+DlgCellHorAlignRight: "يمين",
+DlgCellVerAlign		: "المحاذاة العمودية",
+DlgCellVerAlignNotSet	: "<بدون تحديد>",
+DlgCellVerAlignTop	: "أعلى",
+DlgCellVerAlignMiddle	: "وسط",
+DlgCellVerAlignBottom	: "أسفل",
+DlgCellVerAlignBaseline	: "على السطر",
+DlgCellRowSpan		: "امتداد الصفوف",
+DlgCellCollSpan		: "امتداد الأعمدة",
+DlgCellBackColor	: "لون الخلفية",
+DlgCellBorderColor	: "لون الحدود",
+DlgCellBtnSelect	: "حدّد...",
+
+// Find Dialog
+DlgFindTitle		: "بحث",
+DlgFindFindBtn		: "ابحث",
+DlgFindNotFoundMsg	: "لم يتم العثور على النص المحدد.",
+
+// Replace Dialog
+DlgReplaceTitle			: "استبدال",
+DlgReplaceFindLbl		: "البحث عن:",
+DlgReplaceReplaceLbl	: "استبدال بـ:",
+DlgReplaceCaseChk		: "مطابقة حالة الأحرف",
+DlgReplaceReplaceBtn	: "استبدال",
+DlgReplaceReplAllBtn	: "استبدال الكل",
+DlgReplaceWordChk		: "الكلمة بالكامل فقط",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع اللصق التلقائي. فضلاً استخدم لوحة المفاتيح لفعل ذلك (Ctrl+V).",
+PasteErrorCut	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً استخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).",
+PasteErrorCopy	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً استخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).",
+
+PasteAsText		: "لصق كنص بسيط",
+PasteFromWord	: "لصق من وورد",
+
+DlgPasteMsg2	: "الصق داخل الصندوق باستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.",
+DlgPasteIgnoreFont		: "تجاهل تعريفات أسماء الخطوط",
+DlgPasteRemoveStyles	: "إزالة تعريفات الأنماط",
+DlgPasteCleanBox		: "نظّف محتوى الصندوق",
+
+
+// Color Picker
+ColorAutomatic	: "تلقائي",
+ColorMoreColors	: "ألوان إضافية...",
+
+// Document Properties
+DocProps		: "خصائص الصفحة",
+
+// Anchor Dialog
+DlgAnchorTitle		: "خصائص إشارة مرجعية",
+DlgAnchorName		: "اسم الإشارة المرجعية",
+DlgAnchorErrorName	: "الرجاء كتابة اسم الإشارة المرجعية",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "ليست في القاموس",
+DlgSpellChangeTo		: "التغيير إلى",
+DlgSpellBtnIgnore		: "تجاهل",
+DlgSpellBtnIgnoreAll	: "تجاهل الكل",
+DlgSpellBtnReplace		: "تغيير",
+DlgSpellBtnReplaceAll	: "تغيير الكل",
+DlgSpellBtnUndo			: "تراجع",
+DlgSpellNoSuggestions	: "- لا توجد اقتراحات -",
+DlgSpellProgress		: "جاري التدقيق إملائياً",
+DlgSpellNoMispell		: "تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية",
+DlgSpellNoChanges		: "تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة",
+DlgSpellOneChange		: "تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط",
+DlgSpellManyChanges		: "تم إكمال التدقيق الإملائي: تم تغيير %1 كلمات\كلمة",
+
+IeSpellDownload			: "المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟",
+
+// Button Dialog
+DlgButtonText	: "القيمة/التسمية",
+DlgButtonType	: "نوع الزر",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "الاسم",
+DlgCheckboxValue	: "القيمة",
+DlgCheckboxSelected	: "محدد",
+
+// Form Dialog
+DlgFormName		: "الاسم",
+DlgFormAction	: "اسم الملف",
+DlgFormMethod	: "الأسلوب",
+
+// Select Field Dialog
+DlgSelectName		: "الاسم",
+DlgSelectValue		: "القيمة",
+DlgSelectSize		: "الحجم",
+DlgSelectLines		: "الأسطر",
+DlgSelectChkMulti	: "السماح بتحديدات متعددة",
+DlgSelectOpAvail	: "الخيارات المتاحة",
+DlgSelectOpText		: "النص",
+DlgSelectOpValue	: "القيمة",
+DlgSelectBtnAdd		: "إضافة",
+DlgSelectBtnModify	: "تعديل",
+DlgSelectBtnUp		: "تحريك لأعلى",
+DlgSelectBtnDown	: "تحريك لأسفل",
+DlgSelectBtnSetValue : "اجعلها محددة",
+DlgSelectBtnDelete	: "إزالة",
+
+// Textarea Dialog
+DlgTextareaName	: "الاسم",
+DlgTextareaCols	: "الأعمدة",
+DlgTextareaRows	: "الصفوف",
+
+// Text Field Dialog
+DlgTextName			: "الاسم",
+DlgTextValue		: "القيمة",
+DlgTextCharWidth	: "العرض بالأحرف",
+DlgTextMaxChars		: "عدد الحروف الأقصى",
+DlgTextType			: "نوع المحتوى",
+DlgTextTypeText		: "نص",
+DlgTextTypePass		: "كلمة مرور",
+
+// Hidden Field Dialog
+DlgHiddenName	: "الاسم",
+DlgHiddenValue	: "القيمة",
+
+// Bulleted List Dialog
+BulletedListProp	: "خصائص التعداد النقطي",
+NumberedListProp	: "خصائص التعداد الرقمي",
+DlgLstType			: "النوع",
+DlgLstTypeCircle	: "دائرة",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "مربع",
+DlgLstTypeNumbers	: "أرقام (1، 2، 3)َ",
+DlgLstTypeLCase		: "حروف صغيرة (a, b, c)َ",
+DlgLstTypeUCase		: "حروف كبيرة (A, B, C)َ",
+DlgLstTypeSRoman	: "ترقيم روماني صغير (i, ii, iii)َ",
+DlgLstTypeLRoman	: "ترقيم روماني كبير (I, II, III)َ",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "عام",
+DlgDocBackTab		: "الخلفية",
+DlgDocColorsTab		: "الألوان والهوامش",
+DlgDocMetaTab		: "المعرّفات الرأسية",
+
+DlgDocPageTitle		: "عنوان الصفحة",
+DlgDocLangDir		: "اتجاه اللغة",
+DlgDocLangDirLTR	: "اليسار لليمين (LTR)",
+DlgDocLangDirRTL	: "اليمين لليسار (RTL)",
+DlgDocLangCode		: "رمز اللغة",
+DlgDocCharSet		: "ترميز الحروف",
+DlgDocCharSetOther	: "ترميز حروف آخر",
+
+DlgDocDocType		: "ترويسة نوع  الصفحة",
+DlgDocDocTypeOther	: "ترويسة نوع  صفحة أخرى",
+DlgDocIncXHTML		: "تضمين   إعلانات‏ لغة XHTMLَ",
+DlgDocBgColor		: "لون الخلفية",
+DlgDocBgImage		: "رابط الصورة الخلفية",
+DlgDocBgNoScroll	: "جعلها علامة مائية",
+DlgDocCText			: "النص",
+DlgDocCLink			: "الروابط",
+DlgDocCVisited		: "المزارة",
+DlgDocCActive		: "النشطة",
+DlgDocMargins		: "هوامش الصفحة",
+DlgDocMaTop			: "علوي",
+DlgDocMaLeft		: "أيسر",
+DlgDocMaRight		: "أيمن",
+DlgDocMaBottom		: "سفلي",
+DlgDocMeIndex		: "الكلمات الأساسية (مفصولة بفواصل)َ",
+DlgDocMeDescr		: "وصف الصفحة",
+DlgDocMeAuthor		: "الكاتب",
+DlgDocMeCopy		: "المالك",
+DlgDocPreview		: "معاينة",
+
+// Templates Dialog
+Templates			: "القوالب",
+DlgTemplatesTitle	: "قوالب المحتوى",
+DlgTemplatesSelMsg	: "اختر القالب الذي تود وضعه في المحرر <br>(سيتم فقدان المحتوى الحالي):",
+DlgTemplatesLoading	: "جاري تحميل قائمة القوالب، الرجاء الانتظار...",
+DlgTemplatesNoTpl	: "(لم يتم تعريف أي قالب)",
+
+// About Dialog
+DlgAboutAboutTab	: "نبذة",
+DlgAboutBrowserInfoTab	: "معلومات متصفحك",
+DlgAboutVersion		: "الإصدار",
+DlgAboutLicense		: "مرخّص بحسب قانون  GNU LGPL",
+DlgAboutInfo		: "لمزيد من المعلومات تفضل بزيارة"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/bg.js 1.4.0sr5-1/fckeditor/editor/lang/bg.js
--- 1.3.11sr1/fckeditor/editor/lang/bg.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/bg.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: bg.js
+ * 	Bulgarian language file.
+ * 
+ * File Authors:
+ * 		Miroslav Ivanov (miro@primal-chaos.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Скрий панела с инструментите",
+ToolbarExpand		: "Покажи панела с инструментите",
+
+// Toolbar Items and Context Menu
+Save				: "Запази",
+NewPage				: "Нова страница",
+Preview				: "Предварителен изглед",
+Cut					: "Изрежи",
+Copy				: "Запамети",
+Paste				: "Вмъкни",
+PasteText			: "Вмъкни само текст",
+PasteWord			: "Вмъкни от MS Word",
+Print				: "Печат",
+SelectAll			: "Селектирай всичко",
+RemoveFormat		: "Изтрий форматирането",
+InsertLinkLbl		: "Връзка",
+InsertLink			: "Добави/Редактирай връзка",
+RemoveLink			: "Изтрий връзка",
+Anchor				: "Добави/Редактирай котва",
+InsertImageLbl		: "Изображение",
+InsertImage			: "Добави/Редактирай изображение",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Добави/Редактиай Flash обект",
+InsertTableLbl		: "Таблица",
+InsertTable			: "Добави/Редактирай таблица",
+InsertLineLbl		: "Линия",
+InsertLine			: "Вмъкни хоризонтална линия",
+InsertSpecialCharLbl: "Специален символ",
+InsertSpecialChar	: "Вмъкни специален символ",
+InsertSmileyLbl		: "Усмивка",
+InsertSmiley		: "Добави усмивка",
+About				: "За FCKeditor",
+Bold				: "Удебелен",
+Italic				: "Курсив",
+Underline			: "Подчертан",
+StrikeThrough		: "Зачертан",
+Subscript			: "Индекс за база",
+Superscript			: "Индекс за степен",
+LeftJustify			: "Подравняване в ляво",
+CenterJustify		: "Подравнявне в средата",
+RightJustify		: "Подравняване в дясно",
+BlockJustify		: "Двустранно подравняване",
+DecreaseIndent		: "Намали отстъпа",
+IncreaseIndent		: "Увеличи отстъпа",
+Undo				: "Отмени",
+Redo				: "Повтори",
+NumberedListLbl		: "Нумериран списък",
+NumberedList		: "Добави/Изтрий нумериран списък",
+BulletedListLbl		: "Ненумериран списък",
+BulletedList		: "Добави/Изтрий ненумериран списък",
+ShowTableBorders	: "Покажи рамките на таблицата",
+ShowDetails			: "Покажи подробности",
+Style				: "Стил",
+FontFormat			: "Формат",
+Font				: "Шрифт",
+FontSize			: "Размер",
+TextColor			: "Цвят на текста",
+BGColor				: "Цвят на фона",
+Source				: "Код",
+Find				: "Търси",
+Replace				: "Замести",
+SpellCheck			: "Провери правописа",
+UniversalKeyboard	: "Универсална клавиатура",
+
+Form			: "Формуляр",
+Checkbox		: "Поле за отметка",
+RadioButton		: "Поле за опция",
+TextField		: "Текстово поле",
+Textarea		: "Текстова област",
+HiddenField		: "Скрито поле",
+Button			: "Бутон",
+SelectionField	: "Падащо меню с опции",
+ImageButton		: "Бутон-изображение",
+
+// Context Menu
+EditLink			: "Редактирай връзка",
+InsertRow			: "Добави ред",
+DeleteRows			: "Изтрий редовете",
+InsertColumn		: "Добави колона",
+DeleteColumns		: "Изтрий колоните",
+InsertCell			: "Добави клетка",
+DeleteCells			: "Изтрий клетките",
+MergeCells			: "Обедини клетките",
+SplitCell			: "Раздели клетката",
+CellProperties		: "Параметри на клетката",
+TableProperties		: "Параметри на таблицата",
+ImageProperties		: "Параметри на изображението",
+FlashProperties		: "Параметри на Flash обекта",
+
+AnchorProp			: "Параметри на котвата",
+ButtonProp			: "Параметри на бутона",
+CheckboxProp		: "Параметри на полето за отметка",
+HiddenFieldProp		: "Параметри на скритото поле",
+RadioButtonProp		: "Параметри на полето за опция",
+ImageButtonProp		: "Параметри на бутона-изображение",
+TextFieldProp		: "Параметри на текстовото-поле",
+SelectionFieldProp	: "Параметри на падащото меню с опции",
+TextareaProp		: "Параметри на текстовата област",
+FormProp			: "Параметри на формуляра",
+
+FontFormats			: "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обработка на XHTML. Моля изчакайте...",
+Done				: "Готово",
+PasteWordConfirm	: "Текстът, който искате да вмъкнете е копиран от MS Word. Желаете ли да бъде изчистен преди вмъкването?",
+NotCompatiblePaste	: "Тази операция изисква MS Internet Explorer версия 5.5 или по-висока. Желаете ли да вмъкнете запаметеното без изчистване?",
+UnknownToolbarItem	: "Непознат инструмент \"%1\"",
+UnknownCommand		: "Непозната команда \"%1\"",
+NotImplemented		: "Командата не е имплементирана",
+UnknownToolbarSet	: "Панелът \"%1\" не съществува",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Отказ",
+DlgBtnClose			: "Затвори",
+DlgBtnBrowseServer	: "Разгледай сървъра",
+DlgAdvancedTag		: "Подробности...",
+DlgOpOther			: "&lt;Друго&gt;",
+DlgInfoTab			: "Информация",
+DlgAlertUrl			: "Моля, въведете пълния път (URL)",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;не е настроен&gt;",
+DlgGenId			: "Идентификатор",
+DlgGenLangDir		: "посока на речта",
+DlgGenLangDirLtr	: "От ляво на дясно",
+DlgGenLangDirRtl	: "От дясно на ляво",
+DlgGenLangCode		: "Код на езика",
+DlgGenAccessKey		: "Бърз клавиш",
+DlgGenName			: "Име",
+DlgGenTabIndex		: "Ред на достъп",
+DlgGenLongDescr		: "Описание на връзката",
+DlgGenClass			: "Клас от стиловите таблици",
+DlgGenTitle			: "Препоръчително заглавие",
+DlgGenContType		: "Препоръчителен тип на съдържанието",
+DlgGenLinkCharset	: "Тип на свързания ресурс",
+DlgGenStyle			: "Стил",
+
+// Image Dialog
+DlgImgTitle			: "Параметри на изображението",
+DlgImgInfoTab		: "Информация за изображението",
+DlgImgBtnUpload		: "Прати към сървъра",
+DlgImgURL			: "Пълен път (URL)",
+DlgImgUpload		: "Качи",
+DlgImgAlt			: "Алтернативен текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Височина",
+DlgImgLockRatio		: "Запази пропорцията",
+DlgBtnResetSize		: "Възстанови размера",
+DlgImgBorder		: "Рамка",
+DlgImgHSpace		: "Хоризонтален отстъп",
+DlgImgVSpace		: "Вертикален отстъп",
+DlgImgAlign			: "Подравняване",
+DlgImgAlignLeft		: "Ляво",
+DlgImgAlignAbsBottom: "Най-долу",
+DlgImgAlignAbsMiddle: "Точно по средата",
+DlgImgAlignBaseline	: "По базовата линия",
+DlgImgAlignBottom	: "Долу",
+DlgImgAlignMiddle	: "По средата",
+DlgImgAlignRight	: "Дясно",
+DlgImgAlignTextTop	: "Върху текста",
+DlgImgAlignTop		: "Отгоре",
+DlgImgPreview		: "Изглед",
+DlgImgAlertUrl		: "Моля, въведете пълния път до изображението",
+DlgImgLinkTab		: "Връзка",
+
+// Flash Dialog
+DlgFlashTitle		: "Параметри на Flash обекта",
+DlgFlashChkPlay		: "Автоматично стартиране",
+DlgFlashChkLoop		: "Ново стартиране след завършването",
+DlgFlashChkMenu		: "Разрешено Flash меню",
+DlgFlashScale		: "Оразмеряване",
+DlgFlashScaleAll	: "Покажи целия обект",
+DlgFlashScaleNoBorder	: "Без рамка",
+DlgFlashScaleFit	: "Според мястото",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Връзка",
+DlgLnkInfoTab		: "Информация за връзката",
+DlgLnkTargetTab		: "Цел",
+
+DlgLnkType			: "Вид на връзката",
+DlgLnkTypeURL		: "Пълен път (URL)",
+DlgLnkTypeAnchor	: "Котва в текущата страница",
+DlgLnkTypeEMail		: "Е-поща",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "&lt;друго&gt;",
+DlgLnkURL			: "Пълен път (URL)",
+DlgLnkAnchorSel		: "Изберете котва",
+DlgLnkAnchorByName	: "По име на котвата",
+DlgLnkAnchorById	: "По идентификатор на елемент",
+DlgLnkNoAnchors		: "&lt;Няма котви в текущия документ&gt;",
+DlgLnkEMail			: "Адрес за е-поща",
+DlgLnkEMailSubject	: "Тема на писмото",
+DlgLnkEMailBody		: "Текст на писмото",
+DlgLnkUpload		: "Качи",
+DlgLnkBtnUpload		: "Прати на сървъра",
+
+DlgLnkTarget		: "Цел",
+DlgLnkTargetFrame	: "&lt;рамка&gt;",
+DlgLnkTargetPopup	: "&lt;дъщерен прозорец&gt;",
+DlgLnkTargetBlank	: "Нов прозорец (_blank)",
+DlgLnkTargetParent	: "Родителски прозорец (_parent)",
+DlgLnkTargetSelf	: "Активния прозорец (_self)",
+DlgLnkTargetTop		: "Целия прозорец (_top)",
+DlgLnkTargetFrameName	: "Име на целевия прозорец",
+DlgLnkPopWinName	: "Име на дъщерния прозорец",
+DlgLnkPopWinFeat	: "Параметри на дъщерния прозорец",
+DlgLnkPopResize		: "С променливи размери",
+DlgLnkPopLocation	: "Поле за адрес",
+DlgLnkPopMenu		: "Меню",
+DlgLnkPopScroll		: "Плъзгач",
+DlgLnkPopStatus		: "Поле за статус",
+DlgLnkPopToolbar	: "Панел с бутони",
+DlgLnkPopFullScrn	: "Голям екран (MS IE)",
+DlgLnkPopDependent	: "Зависим (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Височина",
+DlgLnkPopLeft		: "Координати - X",
+DlgLnkPopTop		: "Координати - Y",
+
+DlnLnkMsgNoUrl		: "Моля, напишете пълния път (URL)",
+DlnLnkMsgNoEMail	: "Моля, напишете адреса за е-поща",
+DlnLnkMsgNoAnchor	: "Моля, изберете котва",
+
+// Color Dialog
+DlgColorTitle		: "Изберете цвят",
+DlgColorBtnClear	: "Изчисти",
+DlgColorHighlight	: "Текущ",
+DlgColorSelected	: "Избран",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Добави усмивка",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Изберете специален символ",
+
+// Table Dialog
+DlgTableTitle		: "Параметри на таблицата",
+DlgTableRows		: "Редове",
+DlgTableColumns		: "Колони",
+DlgTableBorder		: "Размер на рамката",
+DlgTableAlign		: "Подравняване",
+DlgTableAlignNotSet	: "<Не е избрано>",
+DlgTableAlignLeft	: "Ляво",
+DlgTableAlignCenter	: "Център",
+DlgTableAlignRight	: "Дясно",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пиксели",
+DlgTableWidthPc		: "проценти",
+DlgTableHeight		: "Височина",
+DlgTableCellSpace	: "Разстояние между клетките",
+DlgTableCellPad		: "Отстъп на съдържанието в клетките",
+DlgTableCaption		: "Заглавие",
+
+// Table Cell Dialog
+DlgCellTitle		: "Параметри на клетката",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пиксели",
+DlgCellWidthPc		: "проценти",
+DlgCellHeight		: "Височина",
+DlgCellWordWrap		: "пренасяне на нов ред",
+DlgCellWordWrapNotSet	: "&lt;Не е настроено&gt;",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "не",
+DlgCellHorAlign		: "Хоризонтално подравняване",
+DlgCellHorAlignNotSet	: "&lt;Не е настроено&gt;",
+DlgCellHorAlignLeft	: "Ляво",
+DlgCellHorAlignCenter	: "Център",
+DlgCellHorAlignRight: "Дясно",
+DlgCellVerAlign		: "Вертикално подравняване",
+DlgCellVerAlignNotSet	: "&lt;Не е настроено&gt;",
+DlgCellVerAlignTop	: "Горе",
+DlgCellVerAlignMiddle	: "По средата",
+DlgCellVerAlignBottom	: "Долу",
+DlgCellVerAlignBaseline	: "По базовата линия",
+DlgCellRowSpan		: "повече от един ред",
+DlgCellCollSpan		: "повече от една колона",
+DlgCellBackColor	: "фонов цвят",
+DlgCellBorderColor	: "цвят на рамката",
+DlgCellBtnSelect	: "Изберете...",
+
+// Find Dialog
+DlgFindTitle		: "Търси",
+DlgFindFindBtn		: "Търси",
+DlgFindNotFoundMsg	: "Указания текст не беше намерен.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замести",
+DlgReplaceFindLbl		: "Търси:",
+DlgReplaceReplaceLbl	: "Замести с:",
+DlgReplaceCaseChk		: "Със същия регистър",
+DlgReplaceReplaceBtn	: "Замести",
+DlgReplaceReplAllBtn	: "Замести всички",
+DlgReplaceWordChk		: "Търси същата дума",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни вмъкването. За целта използвайте клавиатурата (Ctrl+V).",
+PasteErrorCut	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).",
+PasteErrorCopy	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).",
+
+PasteAsText		: "Вмъкни като чист текст",
+PasteFromWord	: "Вмъкни от MS Word",
+
+DlgPasteMsg2	: "Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Игнорирай шрифтовите дефиниции",
+DlgPasteRemoveStyles	: "Изтрий стиловите дефиниции",
+DlgPasteCleanBox		: "Изчисти",
+
+
+// Color Picker
+ColorAutomatic	: "По подразбиране",
+ColorMoreColors	: "Други цветове...",
+
+// Document Properties
+DocProps		: "Параметри на документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Параметри на котвата",
+DlgAnchorName		: "Име на котвата",
+DlgAnchorErrorName	: "Моля, въведете име на котвата",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Липсва в речника",
+DlgSpellChangeTo		: "Промени на",
+DlgSpellBtnIgnore		: "Игнорирай",
+DlgSpellBtnIgnoreAll	: "Игнорирай всички",
+DlgSpellBtnReplace		: "Замести",
+DlgSpellBtnReplaceAll	: "Замести всички",
+DlgSpellBtnUndo			: "Отмени",
+DlgSpellNoSuggestions	: "- Няма предложения -",
+DlgSpellProgress		: "Извършване на проверката за правопис...",
+DlgSpellNoMispell		: "Проверката за правопис завършена: не са открити правописни грешки",
+DlgSpellNoChanges		: "Проверката за правопис завършена: няма променени думи",
+DlgSpellOneChange		: "Проверката за правопис завършена: една дума е променена",
+DlgSpellManyChanges		: "Проверката за правопис завършена: %1 думи са променени",
+
+IeSpellDownload			: "Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?",
+
+// Button Dialog
+DlgButtonText	: "Текст (Стойност)",
+DlgButtonType	: "Тип",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Име",
+DlgCheckboxValue	: "Стойност",
+DlgCheckboxSelected	: "Отметнато",
+
+// Form Dialog
+DlgFormName		: "Име",
+DlgFormAction	: "Действие",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Име",
+DlgSelectValue		: "Стойност",
+DlgSelectSize		: "Размер",
+DlgSelectLines		: "линии",
+DlgSelectChkMulti	: "Разрешено множествено селектиране",
+DlgSelectOpAvail	: "Възможни опции",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Стойност",
+DlgSelectBtnAdd		: "Добави",
+DlgSelectBtnModify	: "Промени",
+DlgSelectBtnUp		: "Нагоре",
+DlgSelectBtnDown	: "Надолу",
+DlgSelectBtnSetValue : "Настрой като избрана стойност",
+DlgSelectBtnDelete	: "Изтрий",
+
+// Textarea Dialog
+DlgTextareaName	: "Име",
+DlgTextareaCols	: "Колони",
+DlgTextareaRows	: "Редове",
+
+// Text Field Dialog
+DlgTextName			: "Име",
+DlgTextValue		: "Стойност",
+DlgTextCharWidth	: "Ширина на символите",
+DlgTextMaxChars		: "Максимум символи",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Парола",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Име",
+DlgHiddenValue	: "Стойност",
+
+// Bulleted List Dialog
+BulletedListProp	: "Параметри на ненумерирания списък",
+NumberedListProp	: "Параметри на нумерирания списък",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Окръжност",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Числа (1, 2, 3)",
+DlgLstTypeLCase		: "Малки букви (a, b, c)",
+DlgLstTypeUCase		: "Големи букви (A, B, C)",
+DlgLstTypeSRoman	: "Малки римски числа (i, ii, iii)",
+DlgLstTypeLRoman	: "Големи римски числа (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Общи",
+DlgDocBackTab		: "Фон",
+DlgDocColorsTab		: "Цветове и отстъпи",
+DlgDocMetaTab		: "Мета данни",
+
+DlgDocPageTitle		: "Заглавие на страницата",
+DlgDocLangDir		: "Посока на речта",
+DlgDocLangDirLTR	: "От ляво на дясно",
+DlgDocLangDirRTL	: "От дясно на ляво",
+DlgDocLangCode		: "Код на езика",
+DlgDocCharSet		: "Кодиране на символите",
+DlgDocCharSetOther	: "Друго кодиране на символите",
+
+DlgDocDocType		: "Тип на документа",
+DlgDocDocTypeOther	: "Друг тип на документа",
+DlgDocIncXHTML		: "Включи XHTML декларация",
+DlgDocBgColor		: "Цвят на фона",
+DlgDocBgImage		: "Пълен път до фоновото изображение",
+DlgDocBgNoScroll	: "Не-повтарящо се фоново изображение",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Връзка",
+DlgDocCVisited		: "Посетена връзка",
+DlgDocCActive		: "Активна връзка",
+DlgDocMargins		: "Отстъпи на страницата",
+DlgDocMaTop			: "Горе",
+DlgDocMaLeft		: "Ляво",
+DlgDocMaRight		: "Дясно",
+DlgDocMaBottom		: "Долу",
+DlgDocMeIndex		: "Ключови думи за документа (разделени със запетаи)",
+DlgDocMeDescr		: "Описание на документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторски права",
+DlgDocPreview		: "Изглед",
+
+// Templates Dialog
+Templates			: "Шаблони",
+DlgTemplatesTitle	: "Шаблони",
+DlgTemplatesSelMsg	: "Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):",
+DlgTemplatesLoading	: "Зареждане на списъка с шаблоните. Моля изчакайте...",
+DlgTemplatesNoTpl	: "(Няма дефинирани шаблони)",
+
+// About Dialog
+DlgAboutAboutTab	: "За",
+DlgAboutBrowserInfoTab	: "Информация за браузъра",
+DlgAboutVersion		: "версия",
+DlgAboutLicense		: "Лиценз по условията на GNU Lesser General Public License",
+DlgAboutInfo		: "За повече информация посетете"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/bs.js 1.4.0sr5-1/fckeditor/editor/lang/bs.js
--- 1.3.11sr1/fckeditor/editor/lang/bs.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/bs.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: bs.js
+ * 	Bosnian language file.
+ * 
+ * File Authors:
+ * 		Muris Trax (www.elektronika.ba)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skupi trake sa alatima",
+ToolbarExpand		: "Otvori trake sa alatima",
+
+// Toolbar Items and Context Menu
+Save				: "Snimi",
+NewPage				: "Novi dokument",
+Preview				: "Prikaži",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Zalijepi",
+PasteText			: "Zalijepi kao obièan tekst",
+PasteWord			: "Zalijepi iz Word-a",
+Print				: "Štampaj",
+SelectAll			: "Selektuj sve",
+RemoveFormat		: "Poništi format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Ubaci/Izmjeni link",
+RemoveLink			: "Izbriši link",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+InsertImageLbl		: "Slika",
+InsertImage			: "Ubaci/Izmjeni sliku",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabela",
+InsertTable			: "Ubaci/Izmjeni tabelu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Ubaci horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakter",
+InsertSpecialChar	: "Ubaci specijalni karater",
+InsertSmileyLbl		: "Smješko",
+InsertSmiley		: "Ubaci smješka",
+About				: "O FCKeditor-u",
+Bold				: "Boldiraj",
+Italic				: "Ukosi",
+Underline			: "Podvuci",
+StrikeThrough		: "Precrtaj",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Lijevo poravnanje",
+CenterJustify		: "Centralno poravnanje",
+RightJustify		: "Desno poravnanje",
+BlockJustify		: "Puno poravnanje",
+DecreaseIndent		: "Smanji uvod",
+IncreaseIndent		: "Poveæaj uvod",
+Undo				: "Vrati",
+Redo				: "Ponovi",
+NumberedListLbl		: "Numerisana lista",
+NumberedList		: "Ubaci/Izmjeni numerisanu listu",
+BulletedListLbl		: "Lista",
+BulletedList		: "Ubaci/Izmjeni listu",
+ShowTableBorders	: "Pokaži okvire tabela",
+ShowDetails			: "Pokaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Velièina",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "HTML kôd",
+Find				: "Naði",
+Replace				: "Zamjeni",
+SpellCheck			: "Check Spell",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+// Context Menu
+EditLink			: "Izmjeni link",
+InsertRow			: "Ubaci red",
+DeleteRows			: "Briši redove",
+InsertColumn		: "Ubaci kolonu",
+DeleteColumns		: "Briši kolone",
+InsertCell			: "Ubaci æeliju",
+DeleteCells			: "Briši æelije",
+MergeCells			: "Spoji æelije",
+SplitCell			: "Razdvoji æeliju",
+CellProperties		: "Svojstva æelije",
+TableProperties		: "Svojstva tabele",
+ImageProperties		: "Svojstva slike",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesiram XHTML. Molim saèekajte...",
+Done				: "Gotovo",
+PasteWordConfirm	: "Tekst koji želite zalijepiti èini se da je kopiran iz Worda. Da li želite da se prvo oèisti?",
+NotCompatiblePaste	: "Ova komanda je podržana u Internet Explorer-u verzijama 5.5 ili novijim. Da li želite da izvršite lijepljenje teksta bez èišæenja?",
+UnknownToolbarItem	: "Nepoznata stavka sa trake sa alatima \"%1\"",
+UnknownCommand		: "Nepoznata komanda \"%1\"",
+NotImplemented		: "Komanda nije implementirana",
+UnknownToolbarSet	: "Traka sa alatima \"%1\" ne postoji",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Odustani",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Naprednije",
+DlgOpOther			: "&lt;Other&gt;",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nije podešeno&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smjer pisanja",
+DlgGenLangDirLtr	: "S lijeva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na lijevo (RTL)",
+DlgGenLangCode		: "Jezièni kôd",
+DlgGenAccessKey		: "Pristupna tipka",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Dugaèki opis URL-a",
+DlgGenClass			: "Klase CSS stilova",
+DlgGenTitle			: "Advisory title",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Svojstva slike",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Šalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Šalji",
+DlgImgAlt			: "Tekst na slici",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zakljuèaj odnos",
+DlgBtnResetSize		: "Resetuj dimenzije",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Poravnanje",
+DlgImgAlignLeft		: "Lijevo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dno",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Prikaz",
+DlgImgAlertUrl		: "Molimo ukucajte URL od slike.",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link info",
+DlgLnkTargetTab		: "Prozor",
+
+DlgLnkType			: "Tip linka",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;drugi&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id-u elementa",
+DlgLnkNoAnchors		: "&lt;Nema dostupnih sidra na stranici&gt;",
+DlgLnkEMail			: "E-Mail Adresa",
+DlgLnkEMailSubject	: "Subjekt poruke",
+DlgLnkEMailBody		: "Poruka",
+DlgLnkUpload		: "Šalji",
+DlgLnkBtnUpload		: "Šalji na server",
+
+DlgLnkTarget		: "Prozor",
+DlgLnkTargetFrame	: "&lt;frejm&gt;",
+DlgLnkTargetPopup	: "&lt;popup prozor&gt;",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Glavni prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Najgornji prozor (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Moguænosti popup prozora",
+DlgLnkPopResize		: "Promjenljive velièine",
+DlgLnkPopLocation	: "Traka za lokaciju",
+DlgLnkPopMenu		: "Izborna traka",
+DlgLnkPopScroll		: "Scroll traka",
+DlgLnkPopStatus		: "Statusna traka",
+DlgLnkPopToolbar	: "Traka sa alatima",
+DlgLnkPopFullScrn	: "Cijeli ekran (IE)",
+DlgLnkPopDependent	: "Ovisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Lijeva pozicija",
+DlgLnkPopTop		: "Gornja pozicija",
+
+DlnLnkMsgNoUrl		: "Molimo ukucajte URL link",
+DlnLnkMsgNoEMail	: "Molimo ukucajte e-mail adresu",
+DlnLnkMsgNoAnchor	: "Molimo izaberite sidro",
+
+// Color Dialog
+DlgColorTitle		: "Izaberi boju",
+DlgColorBtnClear	: "Oèisti",
+DlgColorHighlight	: "Igled",
+DlgColorSelected	: "Selektovana",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Izaberi specijalni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Svojstva tabele",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Okvir",
+DlgTableAlign		: "Poravnanje",
+DlgTableAlignNotSet	: "<Nije podešeno>",
+DlgTableAlignLeft	: "Lijevo",
+DlgTableAlignCenter	: "Centar",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "posto",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Razmak æelija",
+DlgTableCellPad		: "Uvod æelija",
+DlgTableCaption		: "Naslov",
+
+// Table Cell Dialog
+DlgCellTitle		: "Svojstva æelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "posto",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Vrapuj tekst",
+DlgCellWordWrapNotSet	: "<Nije podešeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizontalno poravnanje",
+DlgCellHorAlignNotSet	: "<Nije podešeno>",
+DlgCellHorAlignLeft	: "Lijevo",
+DlgCellHorAlignCenter	: "Centar",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Vertikalno poravnanje",
+DlgCellVerAlignNotSet	: "<Nije podešeno>",
+DlgCellVerAlignTop	: "Gore",
+DlgCellVerAlignMiddle	: "Sredina",
+DlgCellVerAlignBottom	: "Dno",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje æelija",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Selektuj...",
+
+// Find Dialog
+DlgFindTitle		: "Naði",
+DlgFindFindBtn		: "Naði",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronaðen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamjeni",
+DlgReplaceFindLbl		: "Naði šta:",
+DlgReplaceReplaceLbl	: "Zamjeni sa:",
+DlgReplaceCaseChk		: "Uporeðuj velika/mala slova",
+DlgReplaceReplaceBtn	: "Zamjeni",
+DlgReplaceReplAllBtn	: "Zamjeni sve",
+DlgReplaceWordChk		: "Uporeðuj samo cijelu rijeè",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog lijepljenja. Molimo koristite kraticu na tastaturi (Ctrl+V).",
+PasteErrorCut	: "Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).",
+
+PasteAsText		: "Zalijepi kao obièan tekst",
+PasteFromWord	: "Zalijepi iz Word-a",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Automatska",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",	//MISSING
+DlgButtonType	: "Type",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutVersion		: "verzija",
+DlgAboutLicense		: "Licencirano pod uslovima GNU Lesser General Public License",
+DlgAboutInfo		: "Za više informacija posjetite"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ca.js 1.4.0sr5-1/fckeditor/editor/lang/ca.js
--- 1.3.11sr1/fckeditor/editor/lang/ca.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ca.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ca.js
+ * 	Catalan language file.
+ * 
+ * File Authors:
+ * 		Jordi Cerdan (nan@myp.ad)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Col·lapsar barra",
+ToolbarExpand		: "Expandir barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nova Pàgina",
+Preview				: "Vista Prèvia",
+Cut					: "Tallar",
+Copy				: "Copiar",
+Paste				: "Enganxar",
+PasteText			: "Enganxar com text planer",
+PasteWord			: "Enganxar des de Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar tot",
+RemoveFormat		: "Eliminar Format",
+InsertLinkLbl		: "Enllaç",
+InsertLink			: "Afegir/Editar Enllaç",
+RemoveLink			: "Eliminar Enllaç",
+Anchor				: "Afegir/Editar Àncora",
+InsertImageLbl		: "Imatge",
+InsertImage			: "Afegir/Editar Imatge",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Afegir/Editar Flash",
+InsertTableLbl		: "Taula",
+InsertTable			: "Afegir/Editar Taula",
+InsertLineLbl		: "Línia",
+InsertLine			: "Afegir Línia Horitzontal",
+InsertSpecialCharLbl: "Caràcter Especial",
+InsertSpecialChar	: "Afegir Caràcter Especial",
+InsertSmileyLbl		: "Icona",
+InsertSmiley		: "Afegir Icona",
+About				: "Sobre FCKeditor",
+Bold				: "Negreta",
+Italic				: "Itàlica",
+Underline			: "Subratllat",
+StrikeThrough		: "Tatxat",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Justificar Esquerra",
+CenterJustify		: "Justificar Centrat",
+RightJustify		: "Justificar Dreta",
+BlockJustify		: "Justificar Bloc",
+DecreaseIndent		: "Disminuir Indentació",
+IncreaseIndent		: "Augmentar Indentació",
+Undo				: "Desfer",
+Redo				: "Refer",
+NumberedListLbl		: "Llista Numerada",
+NumberedList		: "Afegir/Eliminar Llista Numerada",
+BulletedListLbl		: "Llista Marcada",
+BulletedList		: "Afegir/Eliminar Llista Marcada",
+ShowTableBorders	: "Mostrar Costats de Taules",
+ShowDetails			: "Mostrar Detalls",
+Style				: "Estil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Tamany",
+TextColor			: "Color de Text",
+BGColor				: "Color de Fons",
+Source				: "Font",
+Find				: "Cercar",
+Replace				: "Remplaçar",
+SpellCheck			: "Verificar sintaxi",
+UniversalKeyboard	: "Teclat universal",
+
+Form			: "Formulari",
+Checkbox		: "Casella de verificació",
+RadioButton		: "Botó ràdio",
+TextField		: "Camp de text",
+Textarea		: "Àrea de text",
+HiddenField		: "Camp ocult",
+Button			: "botó",
+SelectionField	: "Camp de selecció",
+ImageButton		: "Botó imatge",
+
+// Context Menu
+EditLink			: "Editar Enllaç",
+InsertRow			: "Afegir Fila",
+DeleteRows			: "Eliminar Files",
+InsertColumn		: "Afegir Columna",
+DeleteColumns		: "Eliminar Columnes",
+InsertCell			: "Afegir Cel·la",
+DeleteCells			: "Eliminar Cel·les",
+MergeCells			: "Fusionar Cel·les",
+SplitCell			: "Separar Cel·les",
+CellProperties		: "Proprietats de Cel·la",
+TableProperties		: "Proprietats de Taula",
+ImageProperties		: "Proprietats d'Image",
+FlashProperties		: "Proprietats Flash",
+
+AnchorProp			: "Proprietats d'àncora",
+ButtonProp			: "Proprietats de botó",
+CheckboxProp		: "Proprietats de casella de verificació",
+HiddenFieldProp		: "Proprietats de camp ocult",
+RadioButtonProp		: "Proprietats de botó ràdio",
+ImageButtonProp		: "Proprietats de botó imatge",
+TextFieldProp		: "Proprietats de camp de text",
+SelectionFieldProp	: "Proprietats de camp de selecció",
+TextareaProp		: "Proprietats de camp de text",
+FormProp			: "Proprietats de formulari",
+
+FontFormats			: "Normal;Formatejat;Adreça;Capçalera 1;Capçalera 2;Capçalera 3;Capçalera 4;Capçalera 5;Capçalera 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processant XHTML. Si us plau esperi...",
+Done				: "Fet",
+PasteWordConfirm	: "El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?",
+NotCompatiblePaste	: "Aquesta funció és disponible per a Internet Explorer versió 5.5 o superior. Voleu enganxar sense netejar?",
+UnknownToolbarItem	: "Element de la Barra d'eines desconegut \"%1\"",
+UnknownCommand		: "Nom de comanda desconegut \"%1\"",
+NotImplemented		: "Mètode no implementat",
+UnknownToolbarSet	: "Conjunt de barra d'eines \"%1\" inexistent",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Tancar",
+DlgBtnBrowseServer	: "Veure servidor",
+DlgAdvancedTag		: "Avançat",
+DlgOpOther			: "Altres",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Si us plau, afegiu la URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;no definit&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direcció Idioma",
+DlgGenLangDirLtr	: "Esquerra a Dreta (LTR)",
+DlgGenLangDirRtl	: "Dreta a Esquerra (RTL)",
+DlgGenLangCode		: "Codi de Llengua",
+DlgGenAccessKey		: "Clau d'accés",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Index de Tab",
+DlgGenLongDescr		: "Descripció Llarga URL",
+DlgGenClass			: "Classes del Full d'Estils",
+DlgGenTitle			: "Títol Consultiu",
+DlgGenContType		: "Tipus de Contingut Consultiu",
+DlgGenLinkCharset	: "Conjunt de Caràcters Font Enllaçat",
+DlgGenStyle			: "Estil",
+
+// Image Dialog
+DlgImgTitle			: "Proprietats d'Imatge",
+DlgImgInfoTab		: "Informació d'Imatge",
+DlgImgBtnUpload		: "Enviar-la al servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pujar",
+DlgImgAlt			: "Text Alternatiu",
+DlgImgWidth			: "Amplada",
+DlgImgHeight		: "Alçada",
+DlgImgLockRatio		: "Bloquejar Proporcions",
+DlgBtnResetSize		: "Restaurar Tamany",
+DlgImgBorder		: "Costat",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Alineació",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Vista Prèvia",
+DlgImgAlertUrl		: "Si us plau, escriviu la URL de la imatge",
+DlgImgLinkTab		: "Enllaç",
+
+// Flash Dialog
+DlgFlashTitle		: "Propietats Flash",
+DlgFlashChkPlay		: "Reprodució Automàtica",
+DlgFlashChkLoop		: "Bucle",
+DlgFlashChkMenu		: "Habilitar Menu Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tot",
+DlgFlashScaleNoBorder	: "Sense Costats",
+DlgFlashScaleFit	: "Mida exacta",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Enllaç",
+DlgLnkInfoTab		: "Informació d'Enllaç",
+DlgLnkTargetTab		: "Destí",
+
+DlgLnkType			: "Tipus de Link",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Àncora en aquesta pàgina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;altra&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una àncora",
+DlgLnkAnchorByName	: "Per nom d'àncora",
+DlgLnkAnchorById	: "Per Id d'element",
+DlgLnkNoAnchors		: "&lt;No hi ha àncores disponibles en aquest document&gt;",
+DlgLnkEMail			: "Adreça d'E-Mail",
+DlgLnkEMailSubject	: "Subjecte del Missatge",
+DlgLnkEMailBody		: "Cos del Missatge",
+DlgLnkUpload		: "Pujar",
+DlgLnkBtnUpload		: "Enviar al Servidor",
+
+DlgLnkTarget		: "Destí",
+DlgLnkTargetFrame	: "&lt;marc&gt;",
+DlgLnkTargetPopup	: "&lt;finestra popup&gt;",
+DlgLnkTargetBlank	: "Nova Finestra (_blank)",
+DlgLnkTargetParent	: "Finestra Pare (_parent)",
+DlgLnkTargetSelf	: "Mateixa Finestra (_self)",
+DlgLnkTargetTop		: "Finestra Major (_top)",
+DlgLnkTargetFrameName	: "Nom del marc de destí",
+DlgLnkPopWinName	: "Nom Finestra Popup",
+DlgLnkPopWinFeat	: "Característiques Finestra Popup",
+DlgLnkPopResize		: "Redimensionable",
+DlgLnkPopLocation	: "Barra d'Adreça",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barres d'Scroll",
+DlgLnkPopStatus		: "Barra d'Estat",
+DlgLnkPopToolbar	: "Barra d'Eines",
+DlgLnkPopFullScrn	: "Pantalla completa (IE)",
+DlgLnkPopDependent	: "Depenent (Netscape)",
+DlgLnkPopWidth		: "Amplada",
+DlgLnkPopHeight		: "Alçada",
+DlgLnkPopLeft		: "Posició Esquerra",
+DlgLnkPopTop		: "Posició Dalt",
+
+DlnLnkMsgNoUrl		: "Si us plau, escrigui l'enllaç URL",
+DlnLnkMsgNoEMail	: "Si us plau, escrigui l'adreça e-mail",
+DlnLnkMsgNoAnchor	: "Si us plau, escrigui l'àncora",
+
+// Color Dialog
+DlgColorTitle		: "Seleccioni Color",
+DlgColorBtnClear	: "Netejar",
+DlgColorHighlight	: "Realçar",
+DlgColorSelected	: "Seleccionat",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Afegir una Icona",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccioneu Caràcter Especial",
+
+// Table Dialog
+DlgTableTitle		: "Proprietats de Taula",
+DlgTableRows		: "Files",
+DlgTableColumns		: "Columnes",
+DlgTableBorder		: "Tamany de Costat",
+DlgTableAlign		: "Alineació",
+DlgTableAlignNotSet	: "<No Definit>",
+DlgTableAlignLeft	: "Esquerra",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Dreta",
+DlgTableWidth		: "Amplada",
+DlgTableWidthPx		: "píxels",
+DlgTableWidthPc		: "percentatge",
+DlgTableHeight		: "Alçada",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Capçalera",
+
+// Table Cell Dialog
+DlgCellTitle		: "Proprietats de Cel·la",
+DlgCellWidth		: "Amplada",
+DlgCellWidthPx		: "píxels",
+DlgCellWidthPc		: "percentatge",
+DlgCellHeight		: "Alçada",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<No Definit>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Alineació Horitzontal",
+DlgCellHorAlignNotSet	: "<No Definit>",
+DlgCellHorAlignLeft	: "Esquerra",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Dreta",
+DlgCellVerAlign		: "Alineació Vertical",
+DlgCellVerAlignNotSet	: "<No definit>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Color de Fons",
+DlgCellBorderColor	: "Colr de Costat",
+DlgCellBtnSelect	: "Seleccioni...",
+
+// Find Dialog
+DlgFindTitle		: "Cercar",
+DlgFindFindBtn		: "Cercar",
+DlgFindNotFoundMsg	: "El text especificat no ha estat trobat.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Remplaçar",
+DlgReplaceFindLbl		: "Cercar:",
+DlgReplaceReplaceLbl	: "Remplaçar per:",
+DlgReplaceCaseChk		: "Sensible a Majúscules",
+DlgReplaceReplaceBtn	: "Remplaçar",
+DlgReplaceReplAllBtn	: "Remplaçar Tot",
+DlgReplaceWordChk		: "Cercar Paraula Completa",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "La seguretat del vostre navigador no permet executar automàticament les operacions d'enganxat. Si us plau, utilitzeu el teclat (Ctrl+V).",
+PasteErrorCut	: "La seguretat del vostre navigador no permet executar automàticament les operacions de tallar. Si us plau, utilitzeu el teclat (Ctrl+X).",
+PasteErrorCopy	: "La seguretat del vostre navigador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).",
+
+PasteAsText		: "Enganxar com Text Planer",
+PasteFromWord	: "Enganxar com Word",
+
+DlgPasteMsg2	: "Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorar definicions de font",
+DlgPasteRemoveStyles	: "Eliminar definicions d'estil",
+DlgPasteCleanBox		: "Netejar camp",
+
+
+// Color Picker
+ColorAutomatic	: "Automàtic",
+ColorMoreColors	: "Més Colors...",
+
+// Document Properties
+DocProps		: "Proprietats de document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietats d'àncora",
+DlgAnchorName		: "Nom d'àncora",
+DlgAnchorErrorName	: "Si us plau, escrigui el nom de l'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "No és al diccionari",
+DlgSpellChangeTo		: "Canviar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar tot",
+DlgSpellBtnReplace		: "Remplaçar",
+DlgSpellBtnReplaceAll	: "Replaçar tot",
+DlgSpellBtnUndo			: "Desfer",
+DlgSpellNoSuggestions	: "Cap suggestió",
+DlgSpellProgress		: "Comprovació de sintaxi en progrés",
+DlgSpellNoMispell		: "Comprovació de sintaxi completada",
+DlgSpellNoChanges		: "Comprovació de sintaxi: cap paraulada canviada",
+DlgSpellOneChange		: "Comprovació de sintaxi: una paraula canviada",
+DlgSpellManyChanges		: "Comprovació de sintaxi %1 paraules canviades",
+
+IeSpellDownload			: "Comprovació de sintaxi no instal·lat. Voleu descarregar-ho ara?",
+
+// Button Dialog
+DlgButtonText	: "Text (Valor)",
+DlgButtonType	: "Tipus",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionat",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Acció",
+DlgFormMethod	: "Mètode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamany",
+DlgSelectLines		: "Línies",
+DlgSelectChkMulti	: "Permetre múltiples seleccions",
+DlgSelectOpAvail	: "Opcions disponibles",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Afegir",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Amunt",
+DlgSelectBtnDown	: "Avall",
+DlgSelectBtnSetValue : "Seleccionar per defecte",
+DlgSelectBtnDelete	: "Esborrar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Columnes",
+DlgTextareaRows	: "Files",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Amplada de caràcter",
+DlgTextMaxChars		: "Màxim de caràcters",
+DlgTextType			: "Tipus",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Contrassenya",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietats de llista marcada",
+NumberedListProp	: "Proprietats de llista numerada",
+DlgLstType			: "Tipus",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Quadrat",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Lletres minúscules (a, b, c)",
+DlgLstTypeUCase		: "Lletres majúscules (A, B, C)",
+DlgLstTypeSRoman	: "Números romans minúscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Números romans majúscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fons",
+DlgDocColorsTab		: "Colors i marges",
+DlgDocMetaTab		: "Dades Meta",
+
+DlgDocPageTitle		: "Títol de la pàgina",
+DlgDocLangDir		: "Direcció llenguatge",
+DlgDocLangDirLTR	: "Esquerra a dreta (LTR)",
+DlgDocLangDirRTL	: "Dreta a esquerra (RTL)",
+DlgDocLangCode		: "Codi de llenguatge",
+DlgDocCharSet		: "Codificació de conjunt de caràcters",
+DlgDocCharSetOther	: "Altra codificació de conjunt de caràcters",
+
+DlgDocDocType		: "Capçalera de tipus de document",
+DlgDocDocTypeOther	: "Altra Capçalera de tipus de document",
+DlgDocIncXHTML		: "Incloure declaracions XHTML",
+DlgDocBgColor		: "Color de fons",
+DlgDocBgImage		: "URL de la imatge de fons",
+DlgDocBgNoScroll	: "Fons fixe",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Enllaç",
+DlgDocCVisited		: "Enllaç visitat",
+DlgDocCActive		: "Enllaç actiu",
+DlgDocMargins		: "Marges de pàgina",
+DlgDocMaTop			: "Cap",
+DlgDocMaLeft		: "Esquerra",
+DlgDocMaRight		: "Dreta",
+DlgDocMaBottom		: "Peu",
+DlgDocMeIndex		: "Mots clau per a indexació (separats per coma)",
+DlgDocMeDescr		: "Descripció del document",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista prèvia",
+
+// Templates Dialog
+Templates			: "Plantilles",
+DlgTemplatesTitle	: "Contingut Plantilles",
+DlgTemplatesSelMsg	: "Si us plau, seleccioneu la plantilla per obrir en l'editor<br>(el contingut actual no serà enregistrat):",
+DlgTemplatesLoading	: "Carregant la llista de plantilles. Si us plau, esperi...",
+DlgTemplatesNoTpl	: "(No hi ha plantilles definides)",
+
+// About Dialog
+DlgAboutAboutTab	: "Sobre",
+DlgAboutBrowserInfoTab	: "Informació del navigador",
+DlgAboutVersion		: "versió",
+DlgAboutLicense		: "Sota els termes de la Llicència GNU Lesser General Public License",
+DlgAboutInfo		: "Per a més informació aneu a"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/cs.js 1.4.0sr5-1/fckeditor/editor/lang/cs.js
--- 1.3.11sr1/fckeditor/editor/lang/cs.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/cs.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: cs.js
+ * 	Czech language file.
+ * 
+ * File Authors:
+ * 		David Horák (david.horak@email.cz)
+ * 		Petr Plavjaník (plavjanik@gmail.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skrýt panel nástrojů",
+ToolbarExpand		: "Zobrazit panel nástrojů",
+
+// Toolbar Items and Context Menu
+Save				: "Uložit",
+NewPage				: "Nová stránka",
+Preview				: "Náhled",
+Cut					: "Vyjmout",
+Copy				: "Kopírovat",
+Paste				: "Vložit",
+PasteText			: "Vložit jako čistý text",
+PasteWord			: "Vložit z Wordu",
+Print				: "Tisk",
+SelectAll			: "Vybrat vše",
+RemoveFormat		: "Odstranit formátování",
+InsertLinkLbl		: "Odkaz",
+InsertLink			: "Vložit/změnit odkaz",
+RemoveLink			: "Odstranit odkaz",
+Anchor				: "Vložít/změnit záložku",
+InsertImageLbl		: "Obrázek",
+InsertImage			: "Vložit/změnit obrázek",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabulka",
+InsertTable			: "Vložit/změnit tabulku",
+InsertLineLbl		: "Linka",
+InsertLine			: "Vložit vodorovnou linku",
+InsertSpecialCharLbl: "Speciální znaky",
+InsertSpecialChar	: "Vložit speciální znaky",
+InsertSmileyLbl		: "Smajlíky",
+InsertSmiley		: "Vložit smajlík",
+About				: "O aplikaci FCKeditor",
+Bold				: "Tučné",
+Italic				: "Kurzíva",
+Underline			: "Podtržené",
+StrikeThrough		: "Přeškrtnuté",
+Subscript			: "Dolní index",
+Superscript			: "Horní index",
+LeftJustify			: "Zarovnat vlevo",
+CenterJustify		: "Zarovnat na střed",
+RightJustify		: "Zarovnat vpravo",
+BlockJustify		: "Zarovnat do bloku",
+DecreaseIndent		: "Zmenšit odsazení",
+IncreaseIndent		: "Zvětšit odsazení",
+Undo				: "Zpět",
+Redo				: "Znovu",
+NumberedListLbl		: "Číslování",
+NumberedList		: "Vložit/odstranit číslovaný seznam",
+BulletedListLbl		: "Odrážky",
+BulletedList		: "Vložit/odstranit odrážky",
+ShowTableBorders	: "Zobrzit okraje tabulek",
+ShowDetails			: "Zobrazit podrobnosti",
+Style				: "Styl",
+FontFormat			: "Formát",
+Font				: "Písmo",
+FontSize			: "Velikost",
+TextColor			: "Barva textu",
+BGColor				: "Barva pozadí",
+Source				: "Zdroj",
+Find				: "Hledat",
+Replace				: "Nahradit",
+SpellCheck			: "Zkontrolovat pravopis",
+UniversalKeyboard	: "Univerzální klávesnice",
+
+Form			: "Formulář",
+Checkbox		: "Zaškrtávací políčko",
+RadioButton		: "Přepínač",
+TextField		: "Textové pole",
+Textarea		: "Textová oblast",
+HiddenField		: "Skryté pole",
+Button			: "Tlačítko",
+SelectionField	: "Seznam",
+ImageButton		: "Obrázkové tlačítko",
+
+// Context Menu
+EditLink			: "Změnit odkaz",
+InsertRow			: "Vložit řádek",
+DeleteRows			: "Smazat řádek",
+InsertColumn		: "Vložit sloupec",
+DeleteColumns		: "Smazat sloupec",
+InsertCell			: "Vložit buňku",
+DeleteCells			: "Smazat buňky",
+MergeCells			: "Sloučit buňky",
+SplitCell			: "Rozdělit buňku",
+CellProperties		: "Vlastnosti buňky",
+TableProperties		: "Vlastnosti tabulky",
+ImageProperties		: "Vlastnosti obrázku",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Vlastnosti záložky",
+ButtonProp			: "Vlastnosti tlačítka",
+CheckboxProp		: "Vlastnosti zaškrtávacího políčka",
+HiddenFieldProp		: "Vlastnosti skrytého pole",
+RadioButtonProp		: "Vlastnosti přepínače",
+ImageButtonProp		: "Vlastností obrázkového tlačítka",
+TextFieldProp		: "Vlastnosti textového pole",
+SelectionFieldProp	: "Vlastnosti seznamu",
+TextareaProp		: "Vlastnosti textové oblasti",
+FormProp			: "Vlastnosti formuláře",
+
+FontFormats			: "Normální;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Probíhá zpracování XHTML. Prosím čekejte...",
+Done				: "Hotovo",
+PasteWordConfirm	: "Jak je vidět, vkládaný text je kopírován z Wordu. Chceet jej před vložením vyčistit?",
+NotCompatiblePaste	: "Tento příkaz je dostupný pouze v Internet Exploreru verze 5.5 nebo vyšší. Chcete vložit text bez vyčištění?",
+UnknownToolbarItem	: "Neznámá položka panelu nástrojů \"%1\"",
+UnknownCommand		: "Neznámý příkaz \"%1\"",
+NotImplemented		: "Příkaz není implementován",
+UnknownToolbarSet	: "Panel nástrojů \"%1\" neexistuje",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Storno",
+DlgBtnClose			: "Zavřít",
+DlgBtnBrowseServer	: "Vybrat na serveru",
+DlgAdvancedTag		: "Rozšířené",
+DlgOpOther			: "&lt;Ostatní&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nenastaveno&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientace jazyka",
+DlgGenLangDirLtr	: "Zleva do prava (LTR)",
+DlgGenLangDirRtl	: "Zprava do leva (RTL)",
+DlgGenLangCode		: "Kód jazyka",
+DlgGenAccessKey		: "Přístupový klíč",
+DlgGenName			: "Jméno",
+DlgGenTabIndex		: "Pořadí prvku",
+DlgGenLongDescr		: "Dlouhý popis URL",
+DlgGenClass			: "Třída stylu",
+DlgGenTitle			: "Pomocný titulek",
+DlgGenContType		: "Pomocný typ obsahu",
+DlgGenLinkCharset	: "Přiřazená znaková sada",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Vlastosti obrázku",
+DlgImgInfoTab		: "Informace o obrázku",
+DlgImgBtnUpload		: "Odeslat na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Odeslat",
+DlgImgAlt			: "Alternativní text",
+DlgImgWidth			: "Šířka",
+DlgImgHeight		: "Výška",
+DlgImgLockRatio		: "Zámek",
+DlgBtnResetSize		: "Původní velikost",
+DlgImgBorder		: "Okraje",
+DlgImgHSpace		: "H-mezera",
+DlgImgVSpace		: "V-mezera",
+DlgImgAlign			: "Zarovnání",
+DlgImgAlignLeft		: "Vlevo",
+DlgImgAlignAbsBottom: "Zcela dolů",
+DlgImgAlignAbsMiddle: "Doprostřed",
+DlgImgAlignBaseline	: "Na účaří",
+DlgImgAlignBottom	: "Dolů",
+DlgImgAlignMiddle	: "Na střed",
+DlgImgAlignRight	: "Vpravo",
+DlgImgAlignTextTop	: "Na horní okraj textu",
+DlgImgAlignTop		: "Nahoru",
+DlgImgPreview		: "Náhled",
+DlgImgAlertUrl		: "Zadejte prosím URL obrázku",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Odkaz",
+DlgLnkInfoTab		: "Informace o odkazu",
+DlgLnkTargetTab		: "Cíl",
+
+DlgLnkType			: "Typ odkazu",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Kotva v této stránce",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;jiný&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vybrat kotvu",
+DlgLnkAnchorByName	: "Podle jména kotvy",
+DlgLnkAnchorById	: "Podle Id objektu",
+DlgLnkNoAnchors		: "&lt;Ve stránce žádná kotva není definována&gt;",
+DlgLnkEMail			: "E-Mailová adresa",
+DlgLnkEMailSubject	: "Předmět zprávy",
+DlgLnkEMailBody		: "Tělo zprávy",
+DlgLnkUpload		: "Odeslat",
+DlgLnkBtnUpload		: "Odeslat na Server",
+
+DlgLnkTarget		: "Cíl",
+DlgLnkTargetFrame	: "&lt;rámec&gt;",
+DlgLnkTargetPopup	: "&lt;vyskakovací okno&gt;",
+DlgLnkTargetBlank	: "Nové okno (_blank)",
+DlgLnkTargetParent	: "Rodičovské okno (_parent)",
+DlgLnkTargetSelf	: "Stejné okno (_self)",
+DlgLnkTargetTop		: "Hlavní okno (_top)",
+DlgLnkTargetFrameName	: "Název cílového rámu",
+DlgLnkPopWinName	: "Název vyskakovacího okna",
+DlgLnkPopWinFeat	: "Vlastnosti vyskakovacího okna",
+DlgLnkPopResize		: "Měnitelná velikost",
+DlgLnkPopLocation	: "Panel umístění",
+DlgLnkPopMenu		: "Panel nabídky",
+DlgLnkPopScroll		: "Posuvníky",
+DlgLnkPopStatus		: "Stavový řádek",
+DlgLnkPopToolbar	: "Panel nástrojů",
+DlgLnkPopFullScrn	: "Celá obrazovka (IE)",
+DlgLnkPopDependent	: "Závislost (Netscape)",
+DlgLnkPopWidth		: "Šířka",
+DlgLnkPopHeight		: "Výška",
+DlgLnkPopLeft		: "Levý okraj",
+DlgLnkPopTop		: "Horní okraj",
+
+DlnLnkMsgNoUrl		: "Zadejte prosím URL odkazu",
+DlnLnkMsgNoEMail	: "Zadejte prosím e-mailovou adresu",
+DlnLnkMsgNoAnchor	: "Vyberte prosím kotvu",
+
+// Color Dialog
+DlgColorTitle		: "Výběr barvy",
+DlgColorBtnClear	: "Vymazat",
+DlgColorHighlight	: "Zvýrazněná",
+DlgColorSelected	: "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vkládání smajlíků",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Výběr speciálního znaku",
+
+// Table Dialog
+DlgTableTitle		: "Vlastnosti tabulky",
+DlgTableRows		: "Řádky",
+DlgTableColumns		: "Sloupce",
+DlgTableBorder		: "Ohraničení",
+DlgTableAlign		: "Zarovnání",
+DlgTableAlignNotSet	: "<nenastaveno>",
+DlgTableAlignLeft	: "Vlevo",
+DlgTableAlignCenter	: "Na střed",
+DlgTableAlignRight	: "Vpravo",
+DlgTableWidth		: "Šířka",
+DlgTableWidthPx		: "bodů",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Výška",
+DlgTableCellSpace	: "Vzdálenost buněk",
+DlgTableCellPad		: "Odsazení obsahu",
+DlgTableCaption		: "Popis",
+
+// Table Cell Dialog
+DlgCellTitle		: "Vlastnosti buňky",
+DlgCellWidth		: "Šířka",
+DlgCellWidthPx		: "bodů",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Výška",
+DlgCellWordWrap		: "Zalamování",
+DlgCellWordWrapNotSet	: "<nenanstaveno>",
+DlgCellWordWrapYes	: "Ano",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodorovné zarovnání",
+DlgCellHorAlignNotSet	: "<nenastaveno>",
+DlgCellHorAlignLeft	: "Vlevo",
+DlgCellHorAlignCenter	: "Na střed",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign		: "Svislé zarovnání",
+DlgCellVerAlignNotSet	: "<nenastaveno>",
+DlgCellVerAlignTop	: "Nahoru",
+DlgCellVerAlignMiddle	: "Doprostřed",
+DlgCellVerAlignBottom	: "Dolů",
+DlgCellVerAlignBaseline	: "Na účaří",
+DlgCellRowSpan		: "Sloučené řádky",
+DlgCellCollSpan		: "Sloučené sloupce",
+DlgCellBackColor	: "Barva pozadí",
+DlgCellBorderColor	: "Rarva ohraničení",
+DlgCellBtnSelect	: "Výběr...",
+
+// Find Dialog
+DlgFindTitle		: "Hledat",
+DlgFindFindBtn		: "Hledat",
+DlgFindNotFoundMsg	: "Hledaný text nebyl nalezen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Nahradit",
+DlgReplaceFindLbl		: "Co hledat:",
+DlgReplaceReplaceLbl	: "Čím nahradit:",
+DlgReplaceCaseChk		: "Rozlišovat velikost písma",
+DlgReplaceReplaceBtn	: "Nahradit",
+DlgReplaceReplAllBtn	: "Nahradit vše",
+DlgReplaceWordChk		: "Pouze celá slova",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vložení textu ze schránky. Prosím vložte text ze schránky pomocí klávesnice (Ctrl+V).",
+PasteErrorCut	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl+X).",
+PasteErrorCopy	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).",
+
+PasteAsText		: "Vložit jako čistý text",
+PasteFromWord	: "Vložit text z Wordu",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Automaticky",
+ColorMoreColors	: "Více barev...",
+
+// Document Properties
+DocProps		: "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Vlastnosti záložky",
+DlgAnchorName		: "Název záložky",
+DlgAnchorErrorName	: "Zadejte prosím název záložky",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Není ve slovníku",
+DlgSpellChangeTo		: "Změnit na",
+DlgSpellBtnIgnore		: "Přeskočit",
+DlgSpellBtnIgnoreAll	: "Přeskakovat vše",
+DlgSpellBtnReplace		: "Zaměnit",
+DlgSpellBtnReplaceAll	: "Zaměňovat vše",
+DlgSpellBtnUndo			: "Zpět",
+DlgSpellNoSuggestions	: "- žádné návrhy -",
+DlgSpellProgress		: "Probíhá kontrola pravopisu...",
+DlgSpellNoMispell		: "Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny",
+DlgSpellNoChanges		: "Kontrola pravopisu dokončena: Beze změn",
+DlgSpellOneChange		: "Kontrola pravopisu dokončena: Jedno slovo změněno",
+DlgSpellManyChanges		: "Kontrola pravopisu dokončena: %1 slov změněno",
+
+IeSpellDownload			: "Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?",
+
+// Button Dialog
+DlgButtonText	: "Popisek",
+DlgButtonType	: "Typ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Název",
+DlgCheckboxValue	: "Hodnota",
+DlgCheckboxSelected	: "Zaškrtnuto",
+
+// Form Dialog
+DlgFormName		: "Název",
+DlgFormAction	: "Akce",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Název",
+DlgSelectValue		: "Hodnota",
+DlgSelectSize		: "Velikost",
+DlgSelectLines		: "řádků",
+DlgSelectChkMulti	: "Povolit mnohonásobné výběry",
+DlgSelectOpAvail	: "Dostupná nastavení",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Hodnota",
+DlgSelectBtnAdd		: "Přidat",
+DlgSelectBtnModify	: "Změnit",
+DlgSelectBtnUp		: "Nahoru",
+DlgSelectBtnDown	: "Dolů",
+DlgSelectBtnSetValue : "Nastavit jako vybranou hodnotu",
+DlgSelectBtnDelete	: "Smazat",
+
+// Textarea Dialog
+DlgTextareaName	: "Název",
+DlgTextareaCols	: "Sloupců",
+DlgTextareaRows	: "Řádků",
+
+// Text Field Dialog
+DlgTextName			: "Název",
+DlgTextValue		: "Hodnota",
+DlgTextCharWidth	: "Šířka ve znacích",
+DlgTextMaxChars		: "Maximální počet znaků",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Název",
+DlgHiddenValue	: "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp	: "Vlastnosti odrážek",
+NumberedListProp	: "Vlastnosti číslovaného seznamu",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Kružnice",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Čtverec",
+DlgLstTypeNumbers	: "Čísla (1, 2, 3)",
+DlgLstTypeLCase		: "Malá písmena (a, b, c)",
+DlgLstTypeUCase		: "Velká písmena (A, B, C)",
+DlgLstTypeSRoman	: "Malé římská číslice (i, ii, iii)",
+DlgLstTypeLRoman	: "Velké římské číslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Obecné",
+DlgDocBackTab		: "Pozadí",
+DlgDocColorsTab		: "Barvy a okraje",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Titulek stránky",
+DlgDocLangDir		: "Směr jazyku",
+DlgDocLangDirLTR	: "Zleva do prava ",
+DlgDocLangDirRTL	: "Zprava doleva",
+DlgDocLangCode		: "Kód jazyku",
+DlgDocCharSet		: "Znaková sada",
+DlgDocCharSetOther	: "Další znaková sada",
+
+DlgDocDocType		: "Typ dokumentu",
+DlgDocDocTypeOther	: "Jiný typ dokumetu",
+DlgDocIncXHTML		: "Zahrnou deklarace XHTML",
+DlgDocBgColor		: "Barva pozadí",
+DlgDocBgImage		: "URL obrázku na pozadí",
+DlgDocBgNoScroll	: "Nerolovatelné pozadí",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Odkaz",
+DlgDocCVisited		: "Navštívený odkaz",
+DlgDocCActive		: "Vybraný odkaz",
+DlgDocMargins		: "Okraje stránky",
+DlgDocMaTop			: "Horní",
+DlgDocMaLeft		: "Levý",
+DlgDocMaRight		: "Pravý",
+DlgDocMaBottom		: "Dolní",
+DlgDocMeIndex		: "Klíčová slova (oddělená čárkou)",
+DlgDocMeDescr		: "Popis dokumentu",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorská práva",
+DlgDocPreview		: "Náhled",
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "O aplikaci",
+DlgAboutBrowserInfoTab	: "Informace o prohlížeči",
+DlgAboutVersion		: "verze",
+DlgAboutLicense		: "Licencováno pomocí GNU Lesser General Public License",
+DlgAboutInfo		: "Více informací získáte na"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/da.js 1.4.0sr5-1/fckeditor/editor/lang/da.js
--- 1.3.11sr1/fckeditor/editor/lang/da.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/da.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: da.js
+ * 	Danish language file.
+ * 
+ * File Authors:
+ * 		Jørgen Nordstrøm (jn@FirstWeb.dk)
+ * 		Jesper Michelsen (jm@i-deVision.dk)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Sammenfold Værktøjskasse",
+ToolbarExpand		: "Udvid Værktøjskasse",
+
+// Toolbar Items and Context Menu
+Save				: "Gem",
+NewPage				: "Ny side",
+Preview				: "Vis eksempel",
+Cut					: "Klip",
+Copy				: "Kopier",
+Paste				: "Indsæt",
+PasteText			: "Indsæt som ren tekst",
+PasteWord			: "Indsæt fra Word",
+Print				: "Udskriv",
+SelectAll			: "Vælg alt",
+RemoveFormat		: "Slet formatering",
+InsertLinkLbl		: "Link",
+InsertLink			: "Indsæt/Rediger Link",
+RemoveLink			: "Slet Link",
+Anchor				: "Insert/Rediger Anker",
+InsertImageLbl		: "Indsæt Billed",
+InsertImage			: "Indsæt/Rediger Billed",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Indsæt/rediger Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Indsæt/Rediger Tabel",
+InsertLineLbl		: "Linie",
+InsertLine			: "Indsæt horisontal Linie",
+InsertSpecialCharLbl: "Special Karakter",
+InsertSpecialChar	: "Indsæt Special Karakter",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Indsæt Smiley",
+About				: "Om FCKeditor",
+Bold				: "Fed",
+Italic				: "Kursiv",
+Underline			: "Understreget",
+StrikeThrough		: "Overstreget",
+Subscript			: "Sænket skrift",
+Superscript			: "Hævet skrift",
+LeftJustify			: "Venstrestillet",
+CenterJustify		: "Centreret",
+RightJustify		: "Højrestillet",
+BlockJustify		: "Lige margener",
+DecreaseIndent		: "Forøg indrykning",
+IncreaseIndent		: "Formindsk indrykning",
+Undo				: "Fortryd",
+Redo				: "Anuller fortryd",
+NumberedListLbl		: "Tal opstilling",
+NumberedList		: "Indsæt/Slet Tal opstilling",
+BulletedListLbl		: "Punkttegn opstilling",
+BulletedList		: "Indsæt/Slet Punkttegn opstilling",
+ShowTableBorders	: "Vis tabel kanter",
+ShowDetails			: "Vis detaljer",
+Style				: "Typografi",
+FontFormat			: "Formatering",
+Font				: "Skrifttype",
+FontSize			: "Skriftstørrelse",
+TextColor			: "Tekstfarve",
+BGColor				: "Baggrundsfarve",
+Source				: "Kilde",
+Find				: "Søg",
+Replace				: "Erstat",
+SpellCheck			: "Stavekontrol",
+UniversalKeyboard	: "Universalt Tastatur",
+
+Form			: "Indsæt Form",
+Checkbox		: "Indsæt Afkrydsningsboks",
+RadioButton		: "Indsæt Radioknap",
+TextField		: "Indsæt Tekstfelt",
+Textarea		: "Indsæt Tekstboks",
+HiddenField		: "Indsæt Skjultfelt",
+Button			: "Indsæt Knap",
+SelectionField	: "Indsæt Valgfelt",
+ImageButton		: "Indsæt Billedknap",
+
+// Context Menu
+EditLink			: "Rediger link",
+InsertRow			: "Indsæt række",
+DeleteRows			: "Slet rækker",
+InsertColumn		: "Indsæt kolonne",
+DeleteColumns		: "Slet kolonner",
+InsertCell			: "Indsæt celle",
+DeleteCells			: "Slet celle",
+MergeCells			: "Flet celler",
+SplitCell			: "Opdel celler",
+CellProperties		: "Celle egenskaber",
+TableProperties		: "Tabel egenskaber",
+ImageProperties		: "Billed egenskaber",
+FlashProperties		: "Flash egenskaber",
+
+AnchorProp			: "Anker egenskaber",
+ButtonProp			: "Knap egenskaber",
+CheckboxProp		: "Afkrydsningsboks egenskaber",
+HiddenFieldProp		: "Skjultfelt egenskaber",
+RadioButtonProp		: "Radioknap egenskaber",
+ImageButtonProp		: "Billedknap egenskaber",
+TextFieldProp		: "Tekstfelt egenskaber",
+SelectionFieldProp	: "Valgfelt egenskaber",
+TextareaProp		: "Tekstboks egenskaber",
+FormProp			: "Form egenskaber",
+
+FontFormats			: "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Behandler XHTML. Vent venligst...",
+Done				: "Færdig",
+PasteWordConfirm	: "Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes ?",
+NotCompatiblePaste	: "Denne kommando er tilgændelig i Internet Explorer 5.5 og senere. Vil du indsætte teksten uden at rense den ?",
+UnknownToolbarItem	: "Ukendt værktøjslinje objekt \"%1\"",
+UnknownCommand		: "Ukendt kommando navn \"%1\"",
+NotImplemented		: "Kommandoen er ikke implementeret",
+UnknownToolbarSet	: "Værktøjslinjen \"%1\" eksisterer ikke",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Anuller",
+DlgBtnClose			: "Luk",
+DlgBtnBrowseServer	: "Gennemse Server",
+DlgAdvancedTag		: "Avanceret",
+DlgOpOther			: "&lt;Andet&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Indtast URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ikke sat&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Tekstretning",
+DlgGenLangDirLtr	: "Venstre mod højre (LTR)",
+DlgGenLangDirRtl	: "Højre mod venstre (RTL)",
+DlgGenLangCode		: "Sprog kode",
+DlgGenAccessKey		: "Adgangsnøgle",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tabulator Indeks",
+DlgGenLongDescr		: "Udvidet beskrivelse",
+DlgGenClass			: "Typografiark",
+DlgGenTitle			: "Titel",
+DlgGenContType		: "Indholdstype",
+DlgGenLinkCharset	: "Tegnsæt",
+DlgGenStyle			: "Typografi",
+
+// Image Dialog
+DlgImgTitle			: "Billed egenskaber",
+DlgImgInfoTab		: "Billed info",
+DlgImgBtnUpload		: "Send til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Højde",
+DlgImgLockRatio		: "Lås størrelsesforhold",
+DlgBtnResetSize		: "Nulstil størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMargin",
+DlgImgVSpace		: "VMargin",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Abs bund",
+DlgImgAlignAbsMiddle: "Abs Midte",
+DlgImgAlignBaseline	: "Bundlinje",
+DlgImgAlignBottom	: "Bund",
+DlgImgAlignMiddle	: "Midte",
+DlgImgAlignRight	: "Højre",
+DlgImgAlignTextTop	: "Tekst top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Vis eksempel",
+DlgImgAlertUrl		: "Indtast stien til billedet",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash egenskaber",
+DlgFlashChkPlay		: "Automatisk afspilning",
+DlgFlashChkLoop		: "Gentagelse",
+DlgFlashChkMenu		: "Vis Flash menu",
+DlgFlashScale		: "Skalér",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Tilpas størrelse",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link info",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Link type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anker på denne side",
+DlgLnkTypeEMail		: "Email",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;anden&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vælg et anker",
+DlgLnkAnchorByName	: "Efter anker navn",
+DlgLnkAnchorById	: "Efter element Id",
+DlgLnkNoAnchors		: "&lt;Der er ingen ankre tilgængelige i dette dokument&gt;",
+DlgLnkEMail			: "Email Adresse",
+DlgLnkEMailSubject	: "Emne",
+DlgLnkEMailBody		: "Besked",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send til serveren",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "&lt;ramme&gt;",
+DlgLnkTargetPopup	: "&lt;popup vindue&gt;",
+DlgLnkTargetBlank	: "Nyt vindue (_blank)",
+DlgLnkTargetParent	: "Overliggende vindue (_parent)",
+DlgLnkTargetSelf	: "Samme vindue (_self)",
+DlgLnkTargetTop		: "Øverste vindue (_top)",
+DlgLnkTargetFrameName	: "Visnings vinduets navn",
+DlgLnkPopWinName	: "Popup vinduets navn",
+DlgLnkPopWinFeat	: "Popup vinduets egenskaber",
+DlgLnkPopResize		: "Skalering",
+DlgLnkPopLocation	: "Lokationslinje",
+DlgLnkPopMenu		: "Menulinje",
+DlgLnkPopScroll		: "Scrollbars",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Værktøjslinje",
+DlgLnkPopFullScrn	: "Fuld skærm (IE)",
+DlgLnkPopDependent	: "Afhængig (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Højde",
+DlgLnkPopLeft		: "Position fra venstre",
+DlgLnkPopTop		: "Position fra toppen",
+
+DlnLnkMsgNoUrl		: "Indtast link URL",
+DlnLnkMsgNoEMail	: "Indtast e-mail addressen",
+DlnLnkMsgNoAnchor	: "Vælg Anker",
+
+// Color Dialog
+DlgColorTitle		: "Vælg farve",
+DlgColorBtnClear	: "Slet alt",
+DlgColorHighlight	: "Marker",
+DlgColorSelected	: "valgt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insæt en smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vælg specialkarakter",
+
+// Table Dialog
+DlgTableTitle		: "Tabel egenskaber",
+DlgTableRows		: "Rækker",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Ramme størrelse",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikke sat>",
+DlgTableAlignLeft	: "Venstrestillet",
+DlgTableAlignCenter	: "Centreret",
+DlgTableAlignRight	: "Højrestillet",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Højde",
+DlgTableCellSpace	: "Afstand mellem celler",
+DlgTableCellPad		: "Celle margin",
+DlgTableCaption		: "Titel",
+
+// Table Cell Dialog
+DlgCellTitle		: "Celle egenskaber",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Højde",
+DlgCellWordWrap		: "Orddeling",
+DlgCellWordWrapNotSet	: "<Ikke sat>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke sat>",
+DlgCellHorAlignLeft	: "Venstrestillet",
+DlgCellHorAlignCenter	: "Centreret",
+DlgCellHorAlignRight: "Højrestillet",
+DlgCellVerAlign		: "Vertikal Justering",
+DlgCellVerAlignNotSet	: "<Ikke sat>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Midte",
+DlgCellVerAlignBottom	: "Bund",
+DlgCellVerAlignBaseline	: "Bundlinje",
+DlgCellRowSpan		: "Antal rækker cellen spænder over",
+DlgCellCollSpan		: "Antal kolonner cellen spænder over",
+DlgCellBackColor	: "Baggrundsfarve",
+DlgCellBorderColor	: "rammefarve",
+DlgCellBtnSelect	: "Vælg...",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "Den angivne tekst blev ikke fundet",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstat",
+DlgReplaceFindLbl		: "Find:",
+DlgReplaceReplaceLbl	: "Erstat med:",
+DlgReplaceCaseChk		: "Forskel på store og små bogstaver",
+DlgReplaceReplaceBtn	: "Erstat",
+DlgReplaceReplAllBtn	: "Erstat alle",
+DlgReplaceWordChk		: "Kun hele ord",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at indsætte tekst automatisk. Brug i stedet tastaturet til at indsætte teksten (Ctrl+V).",
+PasteErrorCut	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk. Brug i stedet tastaturet til at klippe teksten (Ctrl+X).",
+PasteErrorCopy	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk. Brug i stedet tastaturet til at kopiere teksten (Ctrl+V).",
+
+PasteAsText		: "Indsæt som ren tekst",
+PasteFromWord	: "Indsæt fra Word",
+
+DlgPasteMsg2	: "Indsæt i boksen herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorer font definitioner",
+DlgPasteRemoveStyles	: "Fjern typografi definitioner",
+DlgPasteCleanBox		: "Slet indhold",
+
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farver...",
+
+// Document Properties
+DocProps		: "Dokument egenskaber",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anker egenskaber",
+DlgAnchorName		: "Anker navn",
+DlgAnchorErrorName	: "Indtast Anker navn",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Findes ikke i ordbogen",
+DlgSpellChangeTo		: "Ændre til",
+DlgSpellBtnIgnore		: "Ignorere",
+DlgSpellBtnIgnoreAll	: "Ignorere alle",
+DlgSpellBtnReplace		: "Udskift",
+DlgSpellBtnReplaceAll	: "Udskift alle",
+DlgSpellBtnUndo			: "Tilbage",
+DlgSpellNoSuggestions	: "- Intet forslag -",
+DlgSpellProgress		: "Stavekontrolen arbejder...",
+DlgSpellNoMispell		: "Stavekontrol færdig: Ingen fejl fundet",
+DlgSpellNoChanges		: "Stavekontrol færdig: Ingen ord ændret",
+DlgSpellOneChange		: "Stavekontrol færdig: Et ord ændret",
+DlgSpellManyChanges		: "Stavekontrol færdig: %1 ord ændret",
+
+IeSpellDownload			: "Stavekontrol ikke installeret. Vil du hente den nu?",
+
+// Button Dialog
+DlgButtonText	: "Tekst (Værdi)",
+DlgButtonType	: "Type",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Værdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Værdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "linier",
+DlgSelectChkMulti	: "Tillad flere valg",
+DlgSelectOpAvail	: "Valgmulighedder",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Værdi",
+DlgSelectBtnAdd		: "Tilføj",
+DlgSelectBtnModify	: "Ændre",
+DlgSelectBtnUp		: "Op",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sæt som udvalgt",
+DlgSelectBtnDelete	: "Slet",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonne",
+DlgTextareaRows	: "Række",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "Værdi",
+DlgTextCharWidth	: "Synligt antal bogstaver",
+DlgTextMaxChars		: "Maximum antal bogstaver",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Kodeord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Værdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Punkttegnopstilling egenskaber",
+NumberedListProp	: "Talopstilling egenskaber",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Nummereret (1, 2, 3)",
+DlgLstTypeLCase		: "Små bogstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bogstaver (A, B, C)",
+DlgLstTypeSRoman	: "Små Romertal (i, ii, iii)",
+DlgLstTypeLRoman	: "Store Romertal (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generelt",
+DlgDocBackTab		: "Baggrund",
+DlgDocColorsTab		: "Farver og Margin",
+DlgDocMetaTab		: "Meta Information",
+
+DlgDocPageTitle		: "Side Titel",
+DlgDocLangDir		: "Sprog",
+DlgDocLangDirLTR	: "Venstre Til Højre (LTR)",
+DlgDocLangDirRTL	: "Højre Til Venstre (RTL)",
+DlgDocLangCode		: "Landekode",
+DlgDocCharSet		: "Karakter sæt kode",
+DlgDocCharSetOther	: "Anden karakter sæt kode",
+
+DlgDocDocType		: "Dokument type kategori",
+DlgDocDocTypeOther	: "Anden dokument type kategori",
+DlgDocIncXHTML		: "Inkludere XHTML deklartion",
+DlgDocBgColor		: "Baggrundsfarve",
+DlgDocBgImage		: "Baggrundsbilled URL",
+DlgDocBgNoScroll	: "Ikke scrollbar baggrund",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besøgt link",
+DlgDocCActive		: "Aktivt link",
+DlgDocMargins		: "Side margin",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Højre",
+DlgDocMaBottom		: "Bund",
+DlgDocMeIndex		: "Dokument index nøgleord (komma sepereret)",
+DlgDocMeDescr		: "Dokument beskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vis",
+
+// Templates Dialog
+Templates			: "Skabeloner",
+DlgTemplatesTitle	: "Indholdsskabeloner",
+DlgTemplatesSelMsg	: "Vælg den skabelon, som skal åbnes i editoren<br>(Nuværende indhold vil blive overskrevet):",
+DlgTemplatesLoading	: "Henter liste over skabeloner. Vent venligst...",
+DlgTemplatesNoTpl	: "(Der er ikke defineret nogen skabelon)",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutVersion		: "version",
+DlgAboutLicense		: "Licens under vilkår for GNU Lesser General Public License",
+DlgAboutInfo		: "For yderlig information gå til"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/de.js 1.4.0sr5-1/fckeditor/editor/lang/de.js
--- 1.3.11sr1/fckeditor/editor/lang/de.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/de.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: de.js
+ * 	German language file.
+ * 
+ * File Authors:
+ * 		Maik Unruh (m.unruh@mm-concept.de)
+ * 		Hendrik Kramer (HK@lwd.de)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Toolbar einklappen",
+ToolbarExpand		: "Toolbar ausklappen",
+
+// Toolbar Items and Context Menu
+Save				: "Speichern",
+NewPage				: "Neue Seite",
+Preview				: "Vorschau",
+Cut					: "Ausschneiden",
+Copy				: "Kopieren",
+Paste				: "Einfügen",
+PasteText			: "aus Textdatei einfügen",
+PasteWord			: "aus Word einfügen",
+Print				: "Drucken",
+SelectAll			: "Alles auswählen",
+RemoveFormat		: "Formatierungen entfernen",
+InsertLinkLbl		: "Link",
+InsertLink			: "Link einfügen/editieren",
+RemoveLink			: "Link entfernen",
+Anchor				: "Anker einfügen/editieren",
+InsertImageLbl		: "Bild",
+InsertImage			: "Bild einfügen/editieren",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash einfügen/editieren",
+InsertTableLbl		: "Tabelle",
+InsertTable			: "Tabelle einfügen/editieren",
+InsertLineLbl		: "Linie",
+InsertLine			: "Horizontale Linie einfügen",
+InsertSpecialCharLbl: "Sonderzeichen",
+InsertSpecialChar	: "Sonderzeichen einfügen/editieren",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley einfügen",
+About				: "Über FCKeditor",
+Bold				: "Fett",
+Italic				: "Kursiv",
+Underline			: "Unterstrichen",
+StrikeThrough		: "Durchgestrichen",
+Subscript			: "Tiefgestellt",
+Superscript			: "Hochgestellt",
+LeftJustify			: "Linksbündig",
+CenterJustify		: "Zentriert",
+RightJustify		: "Rechtsbündig",
+BlockJustify		: "Blocksatz",
+DecreaseIndent		: "Einzug verringern",
+IncreaseIndent		: "Einzug erhöhen",
+Undo				: "Rückgängig",
+Redo				: "Wiederherstellen",
+NumberedListLbl		: "Nummerierte Liste",
+NumberedList		: "Nummerierte Liste einfügen/entfernen",
+BulletedListLbl		: "Liste",
+BulletedList		: "Liste einfügen/entfernen",
+ShowTableBorders	: "Zeige Tabellenrahmen",
+ShowDetails			: "Zeige Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Textfarbe",
+BGColor				: "Hintergrundfarbe",
+Source				: "Quellcode",
+Find				: "Finden",
+Replace				: "Ersetzen",
+SpellCheck			: "Rechtschreibprü:fung",
+UniversalKeyboard	: "Universal-Tastatur",
+
+Form			: "Formular",
+Checkbox		: "Checkbox",
+RadioButton		: "Radiobutton",
+TextField		: "Textfeld einzeilig",
+Textarea		: "Textfeld mehrzeilig",
+HiddenField		: "verstecktes Feld",
+Button			: "Klickbutton",
+SelectionField	: "Auswahlfeld",
+ImageButton		: "Bildbutton",
+
+// Context Menu
+EditLink			: "Link editieren",
+InsertRow			: "Zeile einfügen",
+DeleteRows			: "Zeile entfernen",
+InsertColumn		: "Spalte einfügen",
+DeleteColumns		: "Spalte löschen",
+InsertCell			: "Zelle einfügen",
+DeleteCells			: "Zelle löschen",
+MergeCells			: "Zellen vereinen",
+SplitCell			: "Zelle teilen",
+CellProperties		: "Zellen Eigenschaften",
+TableProperties		: "Tabellen Eigenschaften",
+ImageProperties		: "Bild Eigenschaften",
+FlashProperties		: "Flash Eigenschaften",
+
+AnchorProp			: "Anker Eigenschaften",
+ButtonProp			: "Button Eigenschaften",
+CheckboxProp		: "Checkbox Eigenschaften",
+HiddenFieldProp		: "Verstecktes Feld Eigenschaften",
+RadioButtonProp		: "Radiobutton Eigenschaften",
+ImageButtonProp		: "Bildbutton Eigenschaften",
+TextFieldProp		: "Textfeld einzeilig Eigenschaften",
+SelectionFieldProp	: "Auswahlfeld Eigenschaften",
+TextareaProp		: "Textfeld mehrzeilig Eigenschaften",
+FormProp			: "Formular Eigenschaften",
+
+FontFormats			: "Normal;Formatiert;Addresse;Überschrift 1;Überschrift 2;Überschrift 3;Überschrift 4;Überschrift 5;Überschrift 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bearbeite XHTML. Bitte warten...",
+Done				: "Fertig",
+PasteWordConfirm	: "Der Text, den Sie einfügen Möchten, scheint aus Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?",
+NotCompatiblePaste	: "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?",
+UnknownToolbarItem	: "Unbekanntes Menüleisten-Objekt \"%1\"",
+UnknownCommand		: "Unbekannter Befehl \"%1\"",
+NotImplemented		: "Befehl nicht implementiert",
+UnknownToolbarSet	: "Menüleiste \"%1\" existiert nicht",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Abbrechen",
+DlgBtnClose			: "Schließen",
+DlgBtnBrowseServer	: "Server durchsuchen",
+DlgAdvancedTag		: "Erweitert",
+DlgOpOther			: "&lt;andere&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Bitte tragen Sie die URL ein",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt; nichts &gt;",
+DlgGenId			: "ID",
+DlgGenLangDir		: "Schreibrichtung",
+DlgGenLangDirLtr	: "Links nach Rechts (LTR)",
+DlgGenLangDirRtl	: "Rechts nach Links (RTL)",
+DlgGenLangCode		: "Sprachenkürzel",
+DlgGenAccessKey		: "Schlüssel",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Langform URL",
+DlgGenClass			: "Stylesheet Klasse",
+DlgGenTitle			: "Titel Beschreibung",
+DlgGenContType		: "Content Beschreibung",
+DlgGenLinkCharset	: "Ziel-Zeichensatz",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Bild Eigenschaften",
+DlgImgInfoTab		: "Bild-Info",
+DlgImgBtnUpload		: "Zum Server senden",
+DlgImgURL			: "Bildauswahl",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternativer Text",
+DlgImgWidth			: "Breite",
+DlgImgHeight		: "Höhe",
+DlgImgLockRatio		: "Größenverhaeltniss beibehalten",
+DlgBtnResetSize		: "Größe zuruecksetzen",
+DlgImgBorder		: "Rahmen",
+DlgImgHSpace		: "H-Freiraum",
+DlgImgVSpace		: "V-Freiraum",
+DlgImgAlign			: "Ausrichtung",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Abs Unten",
+DlgImgAlignAbsMiddle: "Abs Mitte",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Unten",
+DlgImgAlignMiddle	: "Mitte",
+DlgImgAlignRight	: "Rechts",
+DlgImgAlignTextTop	: "Text Oben",
+DlgImgAlignTop		: "Oben",
+DlgImgPreview		: "Vorschau",
+DlgImgAlertUrl		: "Bitte geben Sie die Bild-URL an",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Eigenschaften",
+DlgFlashChkPlay		: "autom. Abspielen",
+DlgFlashChkLoop		: "Endlosschleife",
+DlgFlashChkMenu		: "Aktiviere Flash Menü",
+DlgFlashScale		: "Skalierung",
+DlgFlashScaleAll	: "Alles anzeigen",
+DlgFlashScaleNoBorder	: "ohne Rand",
+DlgFlashScaleFit	: "Passgenau",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Zielseite",
+
+DlgLnkType			: "Link-Typ",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anker in dieser Seite",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "&lt;anderes&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Anker auswählen",
+DlgLnkAnchorByName	: "nach Anker Name",
+DlgLnkAnchorById	: "nach Element Id",
+DlgLnkNoAnchors		: "&lt;keine Anker im Dokument vorhanden&gt;",
+DlgLnkEMail			: "E-Mail Addresse",
+DlgLnkEMailSubject	: "Betreffzeile",
+DlgLnkEMailBody		: "Nachrichtentext",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Uum Server senden",
+
+DlgLnkTarget		: "Zielseite",
+DlgLnkTargetFrame	: "&lt;Frame&gt;",
+DlgLnkTargetPopup	: "&lt;Pop-up Fenster&gt;",
+DlgLnkTargetBlank	: "Neues Fenster (_blank)",
+DlgLnkTargetParent	: "Oberes Fenster (_parent)",
+DlgLnkTargetSelf	: "Gleiches Fenster (_self)",
+DlgLnkTargetTop		: "Oberstes Fenster (_top)",
+DlgLnkTargetFrameName	: "Ziel-Frame Name",
+DlgLnkPopWinName	: "Pop-up Fenster Name",
+DlgLnkPopWinFeat	: "Pop-up Fenster Eigenschaften",
+DlgLnkPopResize		: "Vergrößerbar",
+DlgLnkPopLocation	: "Adress-Leiste",
+DlgLnkPopMenu		: "Menü-Leiste",
+DlgLnkPopScroll		: "Scroll-Leisten",
+DlgLnkPopStatus		: "Status-Leiste",
+DlgLnkPopToolbar	: "Werkzeugleiste",
+DlgLnkPopFullScrn	: "Vollbild (IE)",
+DlgLnkPopDependent	: "Abhängig (Netscape)",
+DlgLnkPopWidth		: "Breite",
+DlgLnkPopHeight		: "Höhe",
+DlgLnkPopLeft		: "Linke Position",
+DlgLnkPopTop		: "Obere Position",
+
+DlnLnkMsgNoUrl		: "Bitte geben Sie die Link-URL an",
+DlnLnkMsgNoEMail	: "Bitte geben Sie e-Mail Adresse an",
+DlnLnkMsgNoAnchor	: "Bitte waehlen Sie einen Anker aus",
+
+// Color Dialog
+DlgColorTitle		: "Farbauswahl",
+DlgColorBtnClear	: "Keine Farbe",
+DlgColorHighlight	: "Vorschau",
+DlgColorSelected	: "Ausgewählt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Smiley auswählen",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Sonderzeichen auswählen",
+
+// Table Dialog
+DlgTableTitle		: "Tabellen Eigenschaften",
+DlgTableRows		: "Zeile",
+DlgTableColumns		: "Spalte",
+DlgTableBorder		: "Rahmen",
+DlgTableAlign		: "Ausrichtung",
+DlgTableAlignNotSet	: "<nichts>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Zentriert",
+DlgTableAlignRight	: "Rechts",
+DlgTableWidth		: "Breite",
+DlgTableWidthPx		: "Pixel",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Höhe",
+DlgTableCellSpace	: "Zellenabstand außen",
+DlgTableCellPad		: "Zellenabstand innen",
+DlgTableCaption		: "Üeberschrift",
+
+// Table Cell Dialog
+DlgCellTitle		: "Zellen-Eigenschaften",
+DlgCellWidth		: "Breite",
+DlgCellWidthPx		: "Pixel",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Höhe",
+DlgCellWordWrap		: "Umbruch",
+DlgCellWordWrapNotSet	: "&lt;nichts&gt;",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nein",
+DlgCellHorAlign		: "Horizontale Ausrichtung",
+DlgCellHorAlignNotSet	: "&lt;nichts&gt;",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Zentriert",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign		: "Vertikale Ausrichtung",
+DlgCellVerAlignNotSet	: "&lt;nichts&gt;",
+DlgCellVerAlignTop	: "Oben",
+DlgCellVerAlignMiddle	: "Mitte",
+DlgCellVerAlignBottom	: "Unten",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Zeilen zusammenfassen",
+DlgCellCollSpan		: "Spalten zusammenfassen",
+DlgCellBackColor	: "Hintergrundfarbe",
+DlgCellBorderColor	: "Rahmenfarbe",
+DlgCellBtnSelect	: "Auswahl...",
+
+// Find Dialog
+DlgFindTitle		: "Finden",
+DlgFindFindBtn		: "Finden",
+DlgFindNotFoundMsg	: "Der Suchtext wurde nicht gefunden.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ersetzen",
+DlgReplaceFindLbl		: "Suche nach:",
+DlgReplaceReplaceLbl	: "Ersetze mit:",
+DlgReplaceCaseChk		: "Groß-Kleinschreibung beachten",
+DlgReplaceReplaceBtn	: "Ersetzen",
+DlgReplaceReplAllBtn	: "Alle Ersetzen",
+DlgReplaceWordChk		: "Nur ganze Worte suchen",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch einzufügen. Bitte benutzen Sie die System-Zwischenablage ueber STRG-C (kopieren) und STRG-V (einfügen).",
+PasteErrorCut	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage ueber STRG-X (ausschneiden) und STRG-V (einfügen).",
+PasteErrorCopy	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage ueber STRG-C (kopieren).",
+
+PasteAsText		: "Als Text einfügen",
+PasteFromWord	: "Aus Word einfügen",
+
+DlgPasteMsg2	: "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Ctrl+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignoriere Schriftart-Definitionen",
+DlgPasteRemoveStyles	: "Entferne Style-Definitionen",
+DlgPasteCleanBox		: "Inhalt aufräumen",
+
+
+// Color Picker
+ColorAutomatic	: "Automatisch",
+ColorMoreColors	: "Weitere Farben...",
+
+// Document Properties
+DocProps		: "Dokument Eigenschaften",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anker Eigenschaften",
+DlgAnchorName		: "Anker Name",
+DlgAnchorErrorName	: "Bitte geben Sie den Namen des Ankers ein",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nicht im Wörterbuch",
+DlgSpellChangeTo		: "Äendern in",
+DlgSpellBtnIgnore		: "Ignorieren",
+DlgSpellBtnIgnoreAll	: "Alle Ignorieren",
+DlgSpellBtnReplace		: "Ersetzen",
+DlgSpellBtnReplaceAll	: "Alle Ersetzen",
+DlgSpellBtnUndo			: "Rückgängig",
+DlgSpellNoSuggestions	: " - keine Vorschläge - ",
+DlgSpellProgress		: "Rechtschreibprüfung läuft...",
+DlgSpellNoMispell		: "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden",
+DlgSpellNoChanges		: "Rechtschreibprüfung abgeschlossen - keine Worte geändert",
+DlgSpellOneChange		: "Rechtschreibprüfung abgeschlossen - ein Wort geändert",
+DlgSpellManyChanges		: "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert",
+
+IeSpellDownload			: "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?",
+
+// Button Dialog
+DlgButtonText	: "Text (Wert)",
+DlgButtonType	: "Typ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Wert",
+DlgCheckboxSelected	: "ausgewählt",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Wert",
+DlgSelectSize		: "Größe",
+DlgSelectLines		: "Linien",
+DlgSelectChkMulti	: "Erlaube Mehrfachauswahl",
+DlgSelectOpAvail	: "Mögliche Optionen",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Wert",
+DlgSelectBtnAdd		: "Hinzufügen",
+DlgSelectBtnModify	: "Äendern",
+DlgSelectBtnUp		: "Hoch",
+DlgSelectBtnDown	: "Runter",
+DlgSelectBtnSetValue : "Setze als Standardwert",
+DlgSelectBtnDelete	: "Entfernen",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Spalten",
+DlgTextareaRows	: "Reihen",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Wert",
+DlgTextCharWidth	: "Zeichenbreite",
+DlgTextMaxChars		: "Max. Zeichen",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Passwort",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Wert",
+
+// Bulleted List Dialog
+BulletedListProp	: "Listen-Eigenschaften",
+NumberedListProp	: "Nummerierte Listen-Eigenschaften",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Kreis",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Quadrat",
+DlgLstTypeNumbers	: "Nummern (1, 2, 3)",
+DlgLstTypeLCase		: "Kleinbuchstaben (a, b, c)",
+DlgLstTypeUCase		: "Großbuchstaben (A, B, C)",
+DlgLstTypeSRoman	: "Kleine römische Zahlen (i, ii, iii)",
+DlgLstTypeLRoman	: "Große römische Zahlen (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Allgemein",
+DlgDocBackTab		: "Hintergrund",
+DlgDocColorsTab		: "Farben und Abstände",
+DlgDocMetaTab		: "Metadaten",
+
+DlgDocPageTitle		: "Seitentitel",
+DlgDocLangDir		: "Schriftrichtung",
+DlgDocLangDirLTR	: "Links nach Rechts",
+DlgDocLangDirRTL	: "rechts nach Links",
+DlgDocLangCode		: "Sprachkürzel",
+DlgDocCharSet		: "Zeichenkodierung",
+DlgDocCharSetOther	: "Andere Zeichenkodierung",
+
+DlgDocDocType		: "Dokumententyp",
+DlgDocDocTypeOther	: "Anderer Dokumententyp",
+DlgDocIncXHTML		: "Beziehe XHTML Deklarationen ein",
+DlgDocBgColor		: "Hintergrundfarbe",
+DlgDocBgImage		: "Hintergrundbild URL",
+DlgDocBgNoScroll	: "Nicht-Scrollender Hintergrund",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besuchter Link",
+DlgDocCActive		: "Aktiver Link",
+DlgDocMargins		: "Seitenränder",
+DlgDocMaTop			: "Oben",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Rechts",
+DlgDocMaBottom		: "Unten",
+DlgDocMeIndex		: "Schlüsselwörter (Komma-getrennt)",
+DlgDocMeDescr		: "Dokument-Beschreibung",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vorschau",
+
+// Templates Dialog
+Templates			: "Vorlagen",
+DlgTemplatesTitle	: "Vorlagen",
+DlgTemplatesSelMsg	: "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen(der aktuelle Inhalt wird dabei gelöscht!):",
+DlgTemplatesLoading	: "Liste der Vorlagen wird geladen. Bitte warten...",
+DlgTemplatesNoTpl	: "(keine Vorlagen definiert)",
+
+// About Dialog
+DlgAboutAboutTab	: "Über",
+DlgAboutBrowserInfoTab	: "Browser-Info",
+DlgAboutVersion		: "Version",
+DlgAboutLicense		: "Lizensiert unter den Richtlinien der GNU Lesser General Public License",
+DlgAboutInfo		: "Für weitere Informationen siehe"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/el.js 1.4.0sr5-1/fckeditor/editor/lang/el.js
--- 1.3.11sr1/fckeditor/editor/lang/el.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/el.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: el.js
+ * 	Greek language file.
+ * 
+ * File Authors:
+ * 		Spyros Barbatos (sbarbatos{at}users.sourceforge.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Απόκρυψη Μπάρας Εργαλείων",
+ToolbarExpand		: "Εμφάνιση Μπάρας Εργαλείων",
+
+// Toolbar Items and Context Menu
+Save				: "Αποθήκευση",
+NewPage				: "Νέα Σελίδα",
+Preview				: "Προεπισκόπιση",
+Cut					: "Αποκοπή",
+Copy				: "Αντιγραφή",
+Paste				: "Επικόλληση",
+PasteText			: "Επικόλληση (απλό κείμενο)",
+PasteWord			: "Επικόλληση από το Word",
+Print				: "Εκτύπωση",
+SelectAll			: "Επιλογή όλων",
+RemoveFormat		: "Αφαίρεση Μορφοποίησης",
+InsertLinkLbl		: "Σύνδεσμος (Link)",
+InsertLink			: "Εισαγωγή/Μεταβολή Συνδέσμου (Link)",
+RemoveLink			: "Αφαίρεση Συνδέσμου (Link)",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+InsertImageLbl		: "Εικόνα",
+InsertImage			: "Εισαγωγή/Μεταβολή Εικόνας",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Πίνακας",
+InsertTable			: "Εισαγωγή/Μεταβολή Πίνακα",
+InsertLineLbl		: "Γραμμή",
+InsertLine			: "Εισαγωγή Οριζόντιας Γραμμής",
+InsertSpecialCharLbl: "Ειδικό Σύμβολο",
+InsertSpecialChar	: "Εισαγωγή Ειδικού Συμβόλου",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Εισαγωγή Smiley",
+About				: "Περί του FCKeditor",
+Bold				: "Έντονα",
+Italic				: "Πλάγια",
+Underline			: "Υπογράμμιση",
+StrikeThrough		: "Διαγράμμιση",
+Subscript			: "Δείκτης",
+Superscript			: "Εκθέτης",
+LeftJustify			: "Στοίχιση Αριστερά",
+CenterJustify		: "Στοίχιση στο Κέντρο",
+RightJustify		: "Στοίχιση Δεξιά",
+BlockJustify		: "Πλήρης Στοίχιση (Block)",
+DecreaseIndent		: "Μείωση Εσοχής",
+IncreaseIndent		: "Αύξηση Εσοχής",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Λίστα με Αριθμούς",
+NumberedList		: "Εισαγωγή/Διαγραφή Λίστας με Αριθμούς",
+BulletedListLbl		: "Λίστα με Bullets",
+BulletedList		: "Εισαγωγή/Διαγραφή Λίστας με Bullets",
+ShowTableBorders	: "Προβολή Ορίων Πίνακα",
+ShowDetails			: "Προβολή Λεπτομερειών",
+Style				: "Style",
+FontFormat			: "Μορφή Γραμματοσειράς",
+Font				: "Γραμματοσειρά",
+FontSize			: "Μέγεθος",
+TextColor			: "Χρώμα Γραμμάτων",
+BGColor				: "Χρώμα Υποβάθρου",
+Source				: "HTML κώδικας",
+Find				: "Αναζήτηση",
+Replace				: "Αντικατάσταση",
+SpellCheck			: "Check Spell",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+// Context Menu
+EditLink			: "Μεταβολή Συνδέσμου (Link)",
+InsertRow			: "Εισαγωγή Γραμμής",
+DeleteRows			: "Διαγραφή Γραμμών",
+InsertColumn		: "Εισαγωγή Κολώνας",
+DeleteColumns		: "Διαγραφή Κολωνών",
+InsertCell			: "Εισαγωγή Κελιού",
+DeleteCells			: "Διαγραφή Κελιών",
+MergeCells			: "Ενοποίηση Κελιών",
+SplitCell			: "Διαχωρισμός Κελιού",
+CellProperties		: "Ιδιότητες Κελιού",
+TableProperties		: "Ιδιότητες Πίνακα",
+ImageProperties		: "Ιδιότητες Εικόνας",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Επεξεργασία XHTML. Παρακαλώ περιμένετε...",
+Done				: "Έτοιμο",
+PasteWordConfirm	: "Το κείμενο που θέλετε να επικολήσετε, φαίνεται πως προέρχεται από το Word. Θέλετε να καθαριστεί πριν επικοληθεί;",
+NotCompatiblePaste	: "Αυτή η επιλογή είναι διαθέσιμη στον Internet Explorer έκδοση 5.5+. Θέλετε να γίνει η επικόλληση χωρίς καθαρισμό;",
+UnknownToolbarItem	: "Άγνωστο αντικείμενο της μπάρας εργαλείων \"%1\"",
+UnknownCommand		: "Άγνωστή εντολή \"%1\"",
+NotImplemented		: "Η εντολή δεν έχει ενεργοποιηθεί",
+UnknownToolbarSet	: "Η μπάρα εργαλείων \"%1\" δεν υπάρχει",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Ακύρωση",
+DlgBtnClose			: "Κλείσιμο",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Για προχωρημένους",
+DlgOpOther			: "&lt;Other&gt;",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;χωρίς&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Κατεύθυνση κειμένου",
+DlgGenLangDirLtr	: "Αριστερά προς Δεξιά (LTR)",
+DlgGenLangDirRtl	: "Δεξιά προς Αριστερά (RTL)",
+DlgGenLangCode		: "Κωδικός Γλώσσας",
+DlgGenAccessKey		: "Συντόμευση (Access Key)",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Ιδιότητες Εικόνας",
+DlgImgInfoTab		: "Πληροφορίες Εικόνας",
+DlgImgBtnUpload		: "Αποστολή στον Διακομιστή",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Αποστολή",
+DlgImgAlt			: "Εναλλακτικό Κείμενο (ALT)",
+DlgImgWidth			: "Πλάτος",
+DlgImgHeight		: "Ύψος",
+DlgImgLockRatio		: "Κλείδωμα Αναλογίας",
+DlgBtnResetSize		: "Επαναφορά Αρχικού Μεγέθους",
+DlgImgBorder		: "Περιθώριο",
+DlgImgHSpace		: "Οριζόντιος Χώρος (HSpace)",
+DlgImgVSpace		: "Κάθετος Χώρος (VSpace)",
+DlgImgAlign			: "Ευθυγράμμιση (Align)",
+DlgImgAlignLeft		: "Αριστερά",
+DlgImgAlignAbsBottom: "Απόλυτα Κάτω (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Απόλυτα στη Μέση (Abs Middle)",
+DlgImgAlignBaseline	: "Γραμμή Βάσης (Baseline)",
+DlgImgAlignBottom	: "Κάτω (Bottom)",
+DlgImgAlignMiddle	: "Μέση (Middle)",
+DlgImgAlignRight	: "Δεξιά (Right)",
+DlgImgAlignTextTop	: "Κορυφή Κειμένου (Text Top)",
+DlgImgAlignTop		: "Πάνω (Top)",
+DlgImgPreview		: "Προεπισκόπιση",
+DlgImgAlertUrl		: "Εισάγετε την τοποθεσία (URL) της εικόνας",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Υπερσύνδεσμος (Link)",
+DlgLnkInfoTab		: "Link",
+DlgLnkTargetTab		: "Παράθυρο Στόχος (Target)",
+
+DlgLnkType			: "Τύπος Υπερσυνδέσμου (Link)",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anchor in this page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;άλλο&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Επιλέξτε ένα Anchor",
+DlgLnkAnchorByName	: "Βάσει του Ονόματος (Name)του Anchor",
+DlgLnkAnchorById	: "Βάσει του Element Id",
+DlgLnkNoAnchors		: "&lt;Δεν υπάρχουν Anchors στο κείμενο&gt;",
+DlgLnkEMail			: "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου",
+DlgLnkEMailSubject	: "Θέμα Μηνύματος",
+DlgLnkEMailBody		: "Κείμενο Μηνύματος",
+DlgLnkUpload		: "Αποστολή",
+DlgLnkBtnUpload		: "Αποστολή στον Διακομιστή",
+
+DlgLnkTarget		: "Παράθυρο Στόχος (Target)",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;popup window&gt;",
+DlgLnkTargetBlank	: "Νέο Παράθυρο (_blank)",
+DlgLnkTargetParent	: "Γονικό Παράθυρο (_parent)",
+DlgLnkTargetSelf	: "Ίδιο Παράθυρο (_self)",
+DlgLnkTargetTop		: "Ανώτατο Παράθυρο (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Όνομα Popup Window",
+DlgLnkPopWinFeat	: "Επιλογές Popup Window",
+DlgLnkPopResize		: "Με αλλαγή Μεγέθους",
+DlgLnkPopLocation	: "Μπάρα Τοποθεσίας",
+DlgLnkPopMenu		: "Μπάρα Menu",
+DlgLnkPopScroll		: "Μπάρες Κύλισης",
+DlgLnkPopStatus		: "Μπάρα Status",
+DlgLnkPopToolbar	: "Μπάρα Εργαλείων",
+DlgLnkPopFullScrn	: "Ολόκληρη η Οθόνη (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Πλάτος",
+DlgLnkPopHeight		: "Ύψος",
+DlgLnkPopLeft		: "Τοποθεσία Αριστερής Άκρης",
+DlgLnkPopTop		: "Τοποθεσία Πάνω Άκρης",
+
+DlnLnkMsgNoUrl		: "Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)",
+DlnLnkMsgNoEMail	: "Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου",
+DlnLnkMsgNoAnchor	: "Επιλέξτε ένα Anchor",
+
+// Color Dialog
+DlgColorTitle		: "Επιλογή χρώματος",
+DlgColorBtnClear	: "Καθαρισμός",
+DlgColorHighlight	: "Προεπισκόπιση",
+DlgColorSelected	: "Επιλεγμένο",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Επιλέξτε ένα Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Επιλέξτε ένα Ειδικό Σύμβολο",
+
+// Table Dialog
+DlgTableTitle		: "Ιδιότητες Πίνακα",
+DlgTableRows		: "Γραμμές",
+DlgTableColumns		: "Κολώνες",
+DlgTableBorder		: "Μέγεθος Περιθωρίου",
+DlgTableAlign		: "Στοίχιση",
+DlgTableAlignNotSet	: "<χωρίς>",
+DlgTableAlignLeft	: "Αριστερά",
+DlgTableAlignCenter	: "Κέντρο",
+DlgTableAlignRight	: "Δεξιά",
+DlgTableWidth		: "Πλάτος",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "\%",
+DlgTableHeight		: "Ύψος",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Υπέρτιτλος",
+
+// Table Cell Dialog
+DlgCellTitle		: "Ιδιότητες Κελιού",
+DlgCellWidth		: "Πλάτος",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "\%",
+DlgCellHeight		: "Ύψος",
+DlgCellWordWrap		: "Με αλλαγή γραμμής",
+DlgCellWordWrapNotSet	: "<χωρίς>",
+DlgCellWordWrapYes	: "Ναι",
+DlgCellWordWrapNo	: "Όχι",
+DlgCellHorAlign		: "Οριζόντια Στοίχιση",
+DlgCellHorAlignNotSet	: "<χωρίς>",
+DlgCellHorAlignLeft	: "Αριστερά",
+DlgCellHorAlignCenter	: "Κέντρο",
+DlgCellHorAlignRight: "Δεξιά",
+DlgCellVerAlign		: "Κάθετη Στοίχιση",
+DlgCellVerAlignNotSet	: "<χωρίς>",
+DlgCellVerAlignTop	: "Πάνω (Top)",
+DlgCellVerAlignMiddle	: "Μέση (Middle)",
+DlgCellVerAlignBottom	: "Κάτω (Bottom)",
+DlgCellVerAlignBaseline	: "Γραμμή Βάσης (Baseline)",
+DlgCellRowSpan		: "Αριθμός Γραμμών (Rows Span)",
+DlgCellCollSpan		: "Αριθμός Κολωνών (Columns Span)",
+DlgCellBackColor	: "Χρώμα Υποβάθρου",
+DlgCellBorderColor	: "Χρώμα Περιθωρίου",
+DlgCellBtnSelect	: "Επιλογή...",
+
+// Find Dialog
+DlgFindTitle		: "Αναζήτηση",
+DlgFindFindBtn		: "Αναζήτηση",
+DlgFindNotFoundMsg	: "Το κείμενο δεν βρέθηκε.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Αντικατάσταση",
+DlgReplaceFindLbl		: "Αναζήτηση:",
+DlgReplaceReplaceLbl	: "Αντικατάσταση με:",
+DlgReplaceCaseChk		: "Έλεγχος πεζών/κεφαλαίων",
+DlgReplaceReplaceBtn	: "Αντικατάσταση",
+DlgReplaceReplAllBtn	: "Αντικατάσταση Όλων",
+DlgReplaceWordChk		: "Εύρεση πλήρους λέξης",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία επικόλλησης. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+V).",
+PasteErrorCut	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).",
+PasteErrorCopy	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).",
+
+PasteAsText		: "Επικόλληση ως Απλό Κείμενο",
+PasteFromWord	: "Επικόλληση από το Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Αυτόματο",
+ColorMoreColors	: "Περισσότερα χρώματα...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",	//MISSING
+DlgButtonType	: "Type",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutVersion		: "έκδοση",
+DlgAboutLicense		: "Άδεια χρήσης υπό τους όρους της GNU Lesser General Public License",
+DlgAboutInfo		: "Για περισσότερες πληροφορίες"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/en-au.js 1.4.0sr5-1/fckeditor/editor/lang/en-au.js
--- 1.3.11sr1/fckeditor/editor/lang/en-au.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/en-au.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: en-au.js
+ * 	English (Australia) language file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ * 		Christopher Dawes (fckeditor@dawes.id.au)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Char",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Center Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Color",
+BGColor				: "Background Color",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spell",
+UniversalKeyboard	: "Universal Keyboard",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+// Context Menu
+EditLink			: "Edit Link",
+InsertRow			: "Insert Row",
+DeleteRows			: "Delete Rows",
+InsertColumn		: "Insert Column",
+DeleteColumns		: "Delete Columns",
+InsertCell			: "Insert Cell",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+SplitCell			: "Split Cell",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "&lt;Other&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;not set&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anchor in this page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;other&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "&lt;No anchors available in the document&gt;",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;popup window&gt;",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+
+// Color Dialog
+DlgColorTitle		: "Select Color",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "&lt;Not set&gt;",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "&lt;Not set&gt;",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "&lt;Not set&gt;",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Color",
+DlgCellBorderColor	: "Border Color",
+DlgCellBtnSelect	: "Select...",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Your browser security settings don't permit the editor to automaticaly execute pasting operations. Please use the keyboard for that (Ctrl+V).",
+PasteErrorCut	: "Your browser security settings don't permit the editor to automaticaly execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automaticaly execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colors...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",
+DlgButtonType	: "Type",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colors and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Color",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutVersion		: "version",
+DlgAboutLicense		: "Licensed under the terms of the GNU Lesser General Public License",
+DlgAboutInfo		: "For further information go to"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/en.js 1.4.0sr5-1/fckeditor/editor/lang/en.js
--- 1.3.11sr1/fckeditor/editor/lang/en.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/en.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,477 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: en.js
+ * 	English language file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Char",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Center Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Color",
+BGColor				: "Background Color",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spell",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+// Context Menu
+EditLink			: "Edit Link",
+InsertRow			: "Insert Row",
+DeleteRows			: "Delete Rows",
+InsertColumn		: "Insert Column",
+DeleteColumns		: "Delete Columns",
+InsertCell			: "Insert Cell",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+SplitCell			: "Split Cell",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "&lt;Other&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;not set&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anchor in this page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;other&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "&lt;No anchors available in the document&gt;",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;popup window&gt;",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+
+// Color Dialog
+DlgColorTitle		: "Select Color",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Center",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "&lt;Not set&gt;",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "&lt;Not set&gt;",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Center",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "&lt;Not set&gt;",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Color",
+DlgCellBorderColor	: "Border Color",
+DlgCellBtnSelect	: "Select...",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Your browser security settings don't permit the editor to automatically execute pasting operations. Please use the keyboard for that (Ctrl+V).",
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colors...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",
+DlgButtonType	: "Type",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colors and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Color",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutVersion		: "version",
+DlgAboutLicense		: "Licensed under the terms of the GNU Lesser General Public License",
+DlgAboutInfo		: "For further information go to"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/en-uk.js 1.4.0sr5-1/fckeditor/editor/lang/en-uk.js
--- 1.3.11sr1/fckeditor/editor/lang/en-uk.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/en-uk.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: en-uk.js
+ * 	English (United Kingdom) language file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ * 		Christopher Dawes (fckeditor@dawes.id.au)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Char",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Center Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Color",
+BGColor				: "Background Color",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spell",
+UniversalKeyboard	: "Universal Keyboard",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+// Context Menu
+EditLink			: "Edit Link",
+InsertRow			: "Insert Row",
+DeleteRows			: "Delete Rows",
+InsertColumn		: "Insert Column",
+DeleteColumns		: "Delete Columns",
+InsertCell			: "Insert Cell",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+SplitCell			: "Split Cell",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "&lt;Other&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;not set&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anchor in this page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;other&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "&lt;No anchors available in the document&gt;",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;popup window&gt;",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+
+// Color Dialog
+DlgColorTitle		: "Select Color",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "&lt;Not set&gt;",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "&lt;Not set&gt;",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "&lt;Not set&gt;",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Color",
+DlgCellBorderColor	: "Border Color",
+DlgCellBtnSelect	: "Select...",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Your browser security settings don't permit the editor to automaticaly execute pasting operations. Please use the keyboard for that (Ctrl+V).",
+PasteErrorCut	: "Your browser security settings don't permit the editor to automaticaly execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automaticaly execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colors...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",
+DlgButtonType	: "Type",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colors and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Color",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutVersion		: "version",
+DlgAboutLicense		: "Licensed under the terms of the GNU Lesser General Public License",
+DlgAboutInfo		: "For further information go to"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/eo.js 1.4.0sr5-1/fckeditor/editor/lang/eo.js
--- 1.3.11sr1/fckeditor/editor/lang/eo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/eo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: eo.js
+ * 	Esperanto language file.
+ * 
+ * File Authors:
+ * 		Tim Morley (timsk@openoffice.org)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Kaŝi Ilobreton",
+ToolbarExpand		: "Vidigi Ilojn",
+
+// Toolbar Items and Context Menu
+Save				: "Sekurigi",
+NewPage				: "Nova Paĝo",
+Preview				: "Vidigi Aspekton",
+Cut					: "Eltondi",
+Copy				: "Kopii",
+Paste				: "Interglui",
+PasteText			: "Interglui kiel Tekston",
+PasteWord			: "Interglui el Word",
+Print				: "Presi",
+SelectAll			: "Elekti ĉion",
+RemoveFormat		: "Forigi Formaton",
+InsertLinkLbl		: "Ligilo",
+InsertLink			: "Enmeti/Ŝanĝi Ligilon",
+RemoveLink			: "Forigi Ligilon",
+Anchor				: "Enmeti/Ŝanĝi Ankron",
+InsertImageLbl		: "Bildo",
+InsertImage			: "Enmeti/Ŝanĝi Bildon",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabelo",
+InsertTable			: "Enmeti/Ŝanĝi Tabelon",
+InsertLineLbl		: "Horizonta Linio",
+InsertLine			: "Enmeti Horizonta Linio",
+InsertSpecialCharLbl: "Speciala Signo",
+InsertSpecialChar	: "Enmeti Specialan Signon",
+InsertSmileyLbl		: "Mienvinjeto",
+InsertSmiley		: "Enmeti Mienvinjeton",
+About				: "Pri FCKeditor",
+Bold				: "Grasa",
+Italic				: "Kursiva",
+Underline			: "Substreko",
+StrikeThrough		: "Trastreko",
+Subscript			: "Subskribo",
+Superscript			: "Superskribo",
+LeftJustify			: "Maldekstrigi",
+CenterJustify		: "Centrigi",
+RightJustify		: "Dekstrigi",
+BlockJustify		: "Ĝisrandigi Ambaŭflanke",
+DecreaseIndent		: "Malpligrandigi Krommarĝenon",
+IncreaseIndent		: "Pligrandigi Krommarĝenon",
+Undo				: "Malfari",
+Redo				: "Refari",
+NumberedListLbl		: "Numera Listo",
+NumberedList		: "Enmeti/Forigi Numeran Liston",
+BulletedListLbl		: "Bula Listo",
+BulletedList		: "Enmeti/Forigi Bulan Liston",
+ShowTableBorders	: "Vidigi Borderojn de Tabelo",
+ShowDetails			: "Vidigi Detalojn",
+Style				: "Stilo",
+FontFormat			: "Formato",
+Font				: "Tiparo",
+FontSize			: "Grando",
+TextColor			: "Teksta Koloro",
+BGColor				: "Fona Koloro",
+Source				: "Fonto",
+Find				: "Serĉi",
+Replace				: "Anstataŭigi",
+SpellCheck			: "Literumada Kontrolilo",
+UniversalKeyboard	: "Universala Klavaro",
+
+Form			: "Formularo",
+Checkbox		: "Markobutono",
+RadioButton		: "Radiobutono",
+TextField		: "Teksta kampo",
+Textarea		: "Teksta Areo",
+HiddenField		: "Kaŝita Kampo",
+Button			: "Butono",
+SelectionField	: "Elekta Kampo",
+ImageButton		: "Bildbutono",
+
+// Context Menu
+EditLink			: "Modifier Ligilon",
+InsertRow			: "Enmeti Linion",
+DeleteRows			: "Forigi Liniojn",
+InsertColumn		: "Enmeti Kolumnon",
+DeleteColumns		: "Forigi Kolumnojn",
+InsertCell			: "Enmeti Ĉelon",
+DeleteCells			: "Forigi Ĉelojn",
+MergeCells			: "Kunfandi Ĉelojn",
+SplitCell			: "Dividi Ĉelojn",
+CellProperties		: "Atributoj de Ĉelo",
+TableProperties		: "Atributoj de Tabelo",
+ImageProperties		: "Atributoj de Bildo",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Ankraj Atributoj",
+ButtonProp			: "Butonaj Atributoj",
+CheckboxProp		: "Markobutonaj Atributoj",
+HiddenFieldProp		: "Atributoj de Kaŝita Kampo",
+RadioButtonProp		: "Radiobutonaj Atributoj",
+ImageButtonProp		: "Bildbutonaj Atributoj",
+TextFieldProp		: "Atributoj de Teksta Kampo",
+SelectionFieldProp	: "Atributoj de Elekta Kampo",
+TextareaProp		: "Atributoj de Teksta Areo",
+FormProp			: "Formularaj Atributoj",
+
+FontFormats			: "Normala;Formatita;Adreso;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Traktado de XHTML. Bonvolu pacienci...",
+Done				: "Finita",
+PasteWordConfirm	: "La algluota teksto ŝajnas esti Word-devena. Ĉu vi volas purigi ĝin antaŭ ol interglui?",
+NotCompatiblePaste	: "Tiu ĉi komando bezonas almenaŭ Internet Explorer 5.5. Ĉu vi volas daŭrigi sen purigado?",
+UnknownToolbarItem	: "Ilobretero nekonata \"%1\"",
+UnknownCommand		: "Komandonomo nekonata \"%1\"",
+NotImplemented		: "Komando ne ankoraŭ realigita",
+UnknownToolbarSet	: "La ilobreto \"%1\" ne ekzistas",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Akcepti",
+DlgBtnCancel		: "Rezigni",
+DlgBtnClose			: "Fermi",
+DlgBtnBrowseServer	: "Foliumi en la Servilo",
+DlgAdvancedTag		: "Speciala",
+DlgOpOther			: "&lt;Alia&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;Defaŭlta&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Skribdirekto",
+DlgGenLangDirLtr	: "De maldekstro dekstren (LTR)",
+DlgGenLangDirRtl	: "De dekstro maldekstren (RTL)",
+DlgGenLangCode		: "Lingva Kodo",
+DlgGenAccessKey		: "Fulmoklavo",
+DlgGenName			: "Nomo",
+DlgGenTabIndex		: "Taba Ordo",
+DlgGenLongDescr		: "URL de Longa Priskribo",
+DlgGenClass			: "Klasoj de Stilfolioj",
+DlgGenTitle			: "Indika Titolo",
+DlgGenContType		: "Indika Enhavotipo",
+DlgGenLinkCharset	: "Signaro de la Ligita Rimedo",
+DlgGenStyle			: "Stilo",
+
+// Image Dialog
+DlgImgTitle			: "Atributoj de Bildo",
+DlgImgInfoTab		: "Informoj pri Bildo",
+DlgImgBtnUpload		: "Sendu al Servilo",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Alŝuti",
+DlgImgAlt			: "Anstataŭiga Teksto",
+DlgImgWidth			: "Larĝo",
+DlgImgHeight		: "Alto",
+DlgImgLockRatio		: "Konservi Proporcion",
+DlgBtnResetSize		: "Origina Grando",
+DlgImgBorder		: "Bordero",
+DlgImgHSpace		: "HSpaco",
+DlgImgVSpace		: "VSpaco",
+DlgImgAlign			: "Ĝisrandigo",
+DlgImgAlignLeft		: "Maldekstre",
+DlgImgAlignAbsBottom: "Abs Malsupre",
+DlgImgAlignAbsMiddle: "Abs Centre",
+DlgImgAlignBaseline	: "Je Malsupro de Teksto",
+DlgImgAlignBottom	: "Malsupre",
+DlgImgAlignMiddle	: "Centre",
+DlgImgAlignRight	: "Dekstre",
+DlgImgAlignTextTop	: "Je Supro de Teksto",
+DlgImgAlignTop		: "Supre",
+DlgImgPreview		: "Vidigi Aspekton",
+DlgImgAlertUrl		: "Bonvolu tajpi la URL de la bildo",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ligilo",
+DlgLnkInfoTab		: "Informoj pri la Ligilo",
+DlgLnkTargetTab		: "Celo",
+
+DlgLnkType			: "Tipo de Ligilo",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankri en tiu ĉi paĝo",
+DlgLnkTypeEMail		: "Retpoŝto",
+DlgLnkProto			: "Protokolo",
+DlgLnkProtoOther	: "&lt;alia&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Elekti Ankron",
+DlgLnkAnchorByName	: "Per Ankronomo",
+DlgLnkAnchorById	: "Per Elementidentigilo",
+DlgLnkNoAnchors		: "&lt;Ne disponeblas ankroj en la dokumento&gt;",
+DlgLnkEMail			: "Retadreso",
+DlgLnkEMailSubject	: "Temlinio",
+DlgLnkEMailBody		: "Mesaĝa korpo",
+DlgLnkUpload		: "Alŝuti",
+DlgLnkBtnUpload		: "Sendi al Servilo",
+
+DlgLnkTarget		: "Celo",
+DlgLnkTargetFrame	: "&lt;kadro&gt;",
+DlgLnkTargetPopup	: "&lt;ŝprucfenestro&gt;",
+DlgLnkTargetBlank	: "Nova Fenestro (_blank)",
+DlgLnkTargetParent	: "Gepatra Fenestro (_parent)",
+DlgLnkTargetSelf	: "Sama Fenestro (_self)",
+DlgLnkTargetTop		: "Plej Supra Fenestro (_top)",
+DlgLnkTargetFrameName	: "Nomo de Kadro",
+DlgLnkPopWinName	: "Nomo de Ŝprucfenestro",
+DlgLnkPopWinFeat	: "Atributoj de la Ŝprucfenestro",
+DlgLnkPopResize		: "Grando Ŝanĝebla",
+DlgLnkPopLocation	: "Adresobreto",
+DlgLnkPopMenu		: "Menubreto",
+DlgLnkPopScroll		: "Rulumlisteloj",
+DlgLnkPopStatus		: "Statobreto",
+DlgLnkPopToolbar	: "Ilobreto",
+DlgLnkPopFullScrn	: "Tutekrane (IE)",
+DlgLnkPopDependent	: "Dependa (Netscape)",
+DlgLnkPopWidth		: "Larĝo",
+DlgLnkPopHeight		: "Alto",
+DlgLnkPopLeft		: "Pozicio de Maldekstro",
+DlgLnkPopTop		: "Pozicio de Supro",
+
+DlnLnkMsgNoUrl		: "Bonvolu entajpi la URL-on",
+DlnLnkMsgNoEMail	: "Bonvolu entajpi la retadreson",
+DlnLnkMsgNoAnchor	: "Bonvolu elekti ankron",
+
+// Color Dialog
+DlgColorTitle		: "Elekti",
+DlgColorBtnClear	: "Forigi",
+DlgColorHighlight	: "Emfazi",
+DlgColorSelected	: "Elektita",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Enmeti Mienvinjeton",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Enmeti Specialan Signon",
+
+// Table Dialog
+DlgTableTitle		: "Atributoj de Tabelo",
+DlgTableRows		: "Linioj",
+DlgTableColumns		: "Kolumnoj",
+DlgTableBorder		: "Bordero",
+DlgTableAlign		: "Ĝisrandigo",
+DlgTableAlignNotSet	: "<Defaŭlte>",
+DlgTableAlignLeft	: "Maldekstre",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Dekstre",
+DlgTableWidth		: "Larĝo",
+DlgTableWidthPx		: "Bitbilderoj",
+DlgTableWidthPc		: "elcentoj",
+DlgTableHeight		: "Alto",
+DlgTableCellSpace	: "Interspacigo de Ĉeloj",
+DlgTableCellPad		: "Ĉirkaŭenhava Plenigado",
+DlgTableCaption		: "Titolo",
+
+// Table Cell Dialog
+DlgCellTitle		: "Atributoj de Celo",
+DlgCellWidth		: "Larĝo",
+DlgCellWidthPx		: "bitbilderoj",
+DlgCellWidthPc		: "elcentoj",
+DlgCellHeight		: "Alto",
+DlgCellWordWrap		: "Linifaldo",
+DlgCellWordWrapNotSet	: "<Defaŭlte>",
+DlgCellWordWrapYes	: "Jes",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizonta Ĝisrandigo",
+DlgCellHorAlignNotSet	: "<Defaŭlte>",
+DlgCellHorAlignLeft	: "Maldekstre",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Dekstre",
+DlgCellVerAlign		: "Vertikala Ĝisrandigo",
+DlgCellVerAlignNotSet	: "<Defaŭlte>",
+DlgCellVerAlignTop	: "Supre",
+DlgCellVerAlignMiddle	: "Centre",
+DlgCellVerAlignBottom	: "Malsupre",
+DlgCellVerAlignBaseline	: "Je Malsupro de Teksto",
+DlgCellRowSpan		: "Linioj Kunfanditaj",
+DlgCellCollSpan		: "Kolumnoj Kunfanditaj",
+DlgCellBackColor	: "Fono",
+DlgCellBorderColor	: "Bordero",
+DlgCellBtnSelect	: "Elekti...",
+
+// Find Dialog
+DlgFindTitle		: "Serĉi",
+DlgFindFindBtn		: "Serĉi",
+DlgFindNotFoundMsg	: "La celteksto ne estas trovita.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Anstataŭigi",
+DlgReplaceFindLbl		: "Serĉi:",
+DlgReplaceReplaceLbl	: "Anstataŭigi per:",
+DlgReplaceCaseChk		: "Kongruigi Usklecon",
+DlgReplaceReplaceBtn	: "Anstataŭigi",
+DlgReplaceReplAllBtn	: "Anstataŭigi Ĉiun",
+DlgReplaceWordChk		: "Tuta Vorto",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras intergluajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-V).",
+PasteErrorCut	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).",
+PasteErrorCopy	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).",
+
+PasteAsText		: "Interglui kiel Tekston",
+PasteFromWord	: "Interglui el Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Aŭtomata",
+ColorMoreColors	: "Pli da Koloroj...",
+
+// Document Properties
+DocProps		: "Dokumentaj Atributoj",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankraj Atributoj",
+DlgAnchorName		: "Ankra Nomo",
+DlgAnchorErrorName	: "Bv tajpi la ankran nomon",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ne trovita en la vortaro",
+DlgSpellChangeTo		: "Ŝanĝi al",
+DlgSpellBtnIgnore		: "Malatenti",
+DlgSpellBtnIgnoreAll	: "Malatenti Ĉiun",
+DlgSpellBtnReplace		: "Anstataŭigi",
+DlgSpellBtnReplaceAll	: "Anstataŭigi Ĉiun",
+DlgSpellBtnUndo			: "Malfari",
+DlgSpellNoSuggestions	: "- Neniu propono -",
+DlgSpellProgress		: "Literumkontrolado daŭras...",
+DlgSpellNoMispell		: "Literumkontrolado finita: neniu fuŝo trovita",
+DlgSpellNoChanges		: "Literumkontrolado finita: neniu vorto ŝanĝita",
+DlgSpellOneChange		: "Literumkontrolado finita: unu vorto ŝanĝita",
+DlgSpellManyChanges		: "Literumkontrolado finita: %1 vortoj ŝanĝitaj",
+
+IeSpellDownload			: "Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?",
+
+// Button Dialog
+DlgButtonText	: "Teksto (Valoro)",
+DlgButtonType	: "Tipo",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nomo",
+DlgCheckboxValue	: "Valoro",
+DlgCheckboxSelected	: "Elektita",
+
+// Form Dialog
+DlgFormName		: "Nomo",
+DlgFormAction	: "Ago",
+DlgFormMethod	: "Metodo",
+
+// Select Field Dialog
+DlgSelectName		: "Nomo",
+DlgSelectValue		: "Valoro",
+DlgSelectSize		: "Grando",
+DlgSelectLines		: "Linioj",
+DlgSelectChkMulti	: "Permesi Plurajn Elektojn",
+DlgSelectOpAvail	: "Elektoj Disponeblaj",
+DlgSelectOpText		: "Teksto",
+DlgSelectOpValue	: "Valoro",
+DlgSelectBtnAdd		: "Aldoni",
+DlgSelectBtnModify	: "Modifi",
+DlgSelectBtnUp		: "Supren",
+DlgSelectBtnDown	: "Malsupren",
+DlgSelectBtnSetValue : "Agordi kiel Elektitan Valoron",
+DlgSelectBtnDelete	: "Forigi",
+
+// Textarea Dialog
+DlgTextareaName	: "Nomo",
+DlgTextareaCols	: "Kolumnoj",
+DlgTextareaRows	: "Vicoj",
+
+// Text Field Dialog
+DlgTextName			: "Nomo",
+DlgTextValue		: "Valoro",
+DlgTextCharWidth	: "Signolarĝo",
+DlgTextMaxChars		: "Maksimuma Nombro da Signoj",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Teksto",
+DlgTextTypePass		: "Pasvorto",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nomo",
+DlgHiddenValue	: "Valoro",
+
+// Bulleted List Dialog
+BulletedListProp	: "Atributoj de Bula Listo",
+NumberedListProp	: "Atributoj de Numera Listo",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Cirklo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrato",
+DlgLstTypeNumbers	: "Ciferoj (1, 2, 3)",
+DlgLstTypeLCase		: "Minusklaj Literoj (a, b, c)",
+DlgLstTypeUCase		: "Majusklaj Literoj (A, B, C)",
+DlgLstTypeSRoman	: "Malgrandaj Romanaj Ciferoj (i, ii, iii)",
+DlgLstTypeLRoman	: "Grandaj Romanaj Ciferoj (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ĝeneralaĵoj",
+DlgDocBackTab		: "Fono",
+DlgDocColorsTab		: "Koloroj kaj Marĝenoj",
+DlgDocMetaTab		: "Metadatumoj",
+
+DlgDocPageTitle		: "Paĝotitolo",
+DlgDocLangDir		: "Skribdirekto de la Lingvo",
+DlgDocLangDirLTR	: "De maldekstro dekstren (LTR)",
+DlgDocLangDirRTL	: "De dekstro maldekstren (LTR)",
+DlgDocLangCode		: "Lingvokodo",
+DlgDocCharSet		: "Signara Kodo",
+DlgDocCharSetOther	: "Alia Signara Kodo",
+
+DlgDocDocType		: "Dokumenta Tipo",
+DlgDocDocTypeOther	: "Alia Dokumenta Tipo",
+DlgDocIncXHTML		: "Inkluzivi XHTML Deklaroj",
+DlgDocBgColor		: "Fona Koloro",
+DlgDocBgImage		: "URL de Fona Bildo",
+DlgDocBgNoScroll	: "Neruluma Fono",
+DlgDocCText			: "Teksto",
+DlgDocCLink			: "Ligilo",
+DlgDocCVisited		: "Vizitita Ligilo",
+DlgDocCActive		: "Aktiva Ligilo",
+DlgDocMargins		: "Paĝaj Marĝenoj",
+DlgDocMaTop			: "Supra",
+DlgDocMaLeft		: "Maldekstra",
+DlgDocMaRight		: "Dekstra",
+DlgDocMaBottom		: "Malsupra",
+DlgDocMeIndex		: "Ŝlosilvortoj de la Dokumento (apartigita de komoj)",
+DlgDocMeDescr		: "Dokumenta Priskribo",
+DlgDocMeAuthor		: "Verkinto",
+DlgDocMeCopy		: "Kopirajto",
+DlgDocPreview		: "Aspekto",
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Pri",
+DlgAboutBrowserInfoTab	: "Informoj pri TTT-legilo",
+DlgAboutVersion		: "versio",
+DlgAboutLicense		: "Disdonata laŭ la GNU Lesser General Public License",
+DlgAboutInfo		: "Por pli da informoj, vizitu"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/es.js 1.4.0sr5-1/fckeditor/editor/lang/es.js
--- 1.3.11sr1/fckeditor/editor/lang/es.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/es.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: es.js
+ * 	Spanish language file.
+ * 
+ * File Authors:
+ * 		Gabriel Schillaci (internetbug@users.sourceforge.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Contraer Barra",
+ToolbarExpand		: "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nueva Página",
+Preview				: "Vista Previa",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Pegar",
+PasteText			: "Pegar como texto plano",
+PasteWord			: "Pegar desde Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar Todo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Vínculo",
+InsertLink			: "Insertar/Editar Vínculo",
+RemoveLink			: "Eliminar Vínculo",
+Anchor				: "Referencia",
+InsertImageLbl		: "Imagen",
+InsertImage			: "Insertar/Editar Imagen",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insertar/Editar Flash",
+InsertTableLbl		: "Tabla",
+InsertTable			: "Insertar/Editar Tabla",
+InsertLineLbl		: "Línea",
+InsertLine			: "Insertar Línea Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar	: "Insertar Caracter Especial",
+InsertSmileyLbl		: "Emoticons",
+InsertSmiley		: "Insertar Emoticons",
+About				: "Acerca de FCKeditor",
+Bold				: "Negrita",
+Italic				: "Cursiva",
+Underline			: "Subrayado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subíndice",
+Superscript			: "Superíndice",
+LeftJustify			: "Alinear a Izquierda",
+CenterJustify		: "Centrar",
+RightJustify		: "Alinear a Derecha",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Disminuir Sangría",
+IncreaseIndent		: "Aumentar Sangría",
+Undo				: "Deshacer",
+Redo				: "Rehacer",
+NumberedListLbl		: "Numeración",
+NumberedList		: "Insertar/Eliminar Numeración",
+BulletedListLbl		: "Viñetas",
+BulletedList		: "Insertar/Eliminar Viñetas",
+ShowTableBorders	: "Mostrar Bordes de Tablas",
+ShowDetails			: "Mostrar saltos de Párrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Fuente",
+FontSize			: "Tamaño",
+TextColor			: "Color de Texto",
+BGColor				: "Color de Fondo",
+Source				: "Fuente HTML",
+Find				: "Buscar",
+Replace				: "Reemplazar",
+SpellCheck			: "Ortografía",
+UniversalKeyboard	: "Teclado Universal",
+
+Form			: "Formulario",
+Checkbox		: "Casilla de Verificación",
+RadioButton		: "Botones de Radio",
+TextField		: "Campo de Texto",
+Textarea		: "Area de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botón",
+SelectionField	: "Campo de Selección",
+ImageButton		: "Botón Imagen",
+
+// Context Menu
+EditLink			: "Editar Vínculo",
+InsertRow			: "Insertar Fila",
+DeleteRows			: "Eliminar Filas",
+InsertColumn		: "Insertar Columna",
+DeleteColumns		: "Eliminar Columnas",
+InsertCell			: "Insertar Celda",
+DeleteCells			: "Eliminar Celdas",
+MergeCells			: "Combinar Celdas",
+SplitCell			: "Dividir Celda",
+CellProperties		: "Propiedades de Celda",
+TableProperties		: "Propiedades de Tabla",
+ImageProperties		: "Propiedades de Imagen",
+FlashProperties		: "Propiedades de Flash",
+
+AnchorProp			: "Propiedades de Referencia",
+ButtonProp			: "Propiedades de Botón",
+CheckboxProp		: "Propiedades de Casilla",
+HiddenFieldProp		: "Propiedades de Campo Oculto",
+RadioButtonProp		: "Propiedades de Botón de Radio",
+ImageButtonProp		: "Propiedades de Botón de Imagen",
+TextFieldProp		: "Propiedades de Campo de Texto",
+SelectionFieldProp	: "Propiedades de Campo de Selección",
+TextareaProp		: "Propiedades de Area de Texto",
+FormProp			: "Propiedades de Formulario",
+
+FontFormats			: "Normal;Formateado;Direccion;Encabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesando XHTML. Por favor, espere...",
+Done				: "Hecho",
+PasteWordConfirm	: "El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?",
+NotCompatiblePaste	: "Este comando está disponible sólo para Internet Explorer version 5.5 or superior. Desea pegar sin depurar?",
+UnknownToolbarItem	: "Item de barra desconocido \"%1\"",
+UnknownCommand		: "Nombre de comando desconocido \"%1\"",
+NotImplemented		: "Comando no implementado",
+UnknownToolbarSet	: "Nombre de barra \"%1\" no definido",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Cerrar",
+DlgBtnBrowseServer	: "Ver Servidor",
+DlgAdvancedTag		: "Avanzado",
+DlgOpOther			: "&lt;Otro&gt;",
+DlgInfoTab			: "Información",
+DlgAlertUrl			: "Inserte el URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;No definido&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientación de idioma",
+DlgGenLangDirLtr	: "Izquierda a Derecha (LTR)",
+DlgGenLangDirRtl	: "Derecha a Izquierda (RTL)",
+DlgGenLangCode		: "Código de idioma",
+DlgGenAccessKey		: "Clave de Acceso",
+DlgGenName			: "Nombre",
+DlgGenTabIndex		: "Indice de tabulación",
+DlgGenLongDescr		: "Descripción larga URL",
+DlgGenClass			: "Clases de hojas de estilo",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Contenido",
+DlgGenLinkCharset	: "Fuente de caracteres vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propiedades de Imagen",
+DlgImgInfoTab		: "Información de Imagen",
+DlgImgBtnUpload		: "Enviar al Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Cargar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Anchura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamaño Original",
+DlgImgBorder		: "Borde",
+DlgImgHSpace		: "Esp.Horiz",
+DlgImgVSpace		: "Esp.Vert",
+DlgImgAlign			: "Alineación",
+DlgImgAlignLeft		: "Izquierda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline	: "Línea de base",
+DlgImgAlignBottom	: "Pie",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Derecha",
+DlgImgAlignTextTop	: "Tope del texto",
+DlgImgAlignTop		: "Tope",
+DlgImgPreview		: "Vista Previa",
+DlgImgAlertUrl		: "Por favor tipee el URL de la imagen",
+DlgImgLinkTab		: "Vínculo",
+
+// Flash Dialog
+DlgFlashTitle		: "Propiedades de Flash",
+DlgFlashChkPlay		: "Autoejecución",
+DlgFlashChkLoop		: "Repetir",
+DlgFlashChkMenu		: "Activar Menú Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar todo",
+DlgFlashScaleNoBorder	: "Sin Borde",
+DlgFlashScaleFit	: "Ajustado",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Vínculo",
+DlgLnkInfoTab		: "Información de Vínculo",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de vínculo",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referencia en esta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "&lt;otro&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una referencia",
+DlgLnkAnchorByName	: "Por Nombre de Referencia",
+DlgLnkAnchorById	: "Por ID de elemento",
+DlgLnkNoAnchors		: "&lt;No hay referencias disponibles en el documento&gt;",
+DlgLnkEMail			: "Dirección de E-Mail",
+DlgLnkEMailSubject	: "Título del Mensaje",
+DlgLnkEMailBody		: "Cuerpo del Mensaje",
+DlgLnkUpload		: "Cargar",
+DlgLnkBtnUpload		: "Enviar al Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "&lt;marco&gt;",
+DlgLnkTargetPopup	: "&lt;ventana emergente&gt;",
+DlgLnkTargetBlank	: "Nueva Ventana(_blank)",
+DlgLnkTargetParent	: "Ventana Padre (_parent)",
+DlgLnkTargetSelf	: "Misma Ventana (_self)",
+DlgLnkTargetTop		: "Ventana primaria (_top)",
+DlgLnkTargetFrameName	: "Nombre del Marco Destino",
+DlgLnkPopWinName	: "Nombre de Ventana Emergente",
+DlgLnkPopWinFeat	: "Características de Ventana Emergente",
+DlgLnkPopResize		: "Ajustable",
+DlgLnkPopLocation	: "Barra de ubicación",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barras de desplazamiento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Herramientas",
+DlgLnkPopFullScrn	: "Pantalla Completa (IE)",
+DlgLnkPopDependent	: "Dependiente (Netscape)",
+DlgLnkPopWidth		: "Anchura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posición Izquierda",
+DlgLnkPopTop		: "Posición Derecha",
+
+DlnLnkMsgNoUrl		: "Por favor tipee el vínculo URL",
+DlnLnkMsgNoEMail	: "Por favor tipee la dirección de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor seleccione una referencia",
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Color",
+DlgColorBtnClear	: "Ninguno",
+DlgColorHighlight	: "Resaltado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insertar un Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione un caracter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propiedades de Tabla",
+DlgTableRows		: "Filas",
+DlgTableColumns		: "Columnas",
+DlgTableBorder		: "Tamaño de Borde",
+DlgTableAlign		: "Alineación",
+DlgTableAlignNotSet	: "<No establecido>",
+DlgTableAlignLeft	: "Izquierda",
+DlgTableAlignCenter	: "Centrado",
+DlgTableAlignRight	: "Derecha",
+DlgTableWidth		: "Anchura",
+DlgTableWidthPx		: "pixeles",
+DlgTableWidthPc		: "porcentaje",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Esp. e/celdas",
+DlgTableCellPad		: "Esp. interior",
+DlgTableCaption		: "Título",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propiedades de Celda",
+DlgCellWidth		: "Anchura",
+DlgCellWidthPx		: "pixeles",
+DlgCellWidthPc		: "porcentaje",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Cortar Línea",
+DlgCellWordWrapNotSet	: "<No establecido>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Alineación Horizontal",
+DlgCellHorAlignNotSet	: "<No establecido>",
+DlgCellHorAlignLeft	: "Izquierda",
+DlgCellHorAlignCenter	: "Centrado",
+DlgCellHorAlignRight: "Derecha",
+DlgCellVerAlign		: "Alineación Vertical",
+DlgCellVerAlignNotSet	: "<Not establecido>",
+DlgCellVerAlignTop	: "Tope",
+DlgCellVerAlignMiddle	: "Medio",
+DlgCellVerAlignBottom	: "ie",
+DlgCellVerAlignBaseline	: "Línea de Base",
+DlgCellRowSpan		: "Abarcar Filas",
+DlgCellCollSpan		: "Abarcar Columnas",
+DlgCellBackColor	: "Color de Fondo",
+DlgCellBorderColor	: "Color de Borde",
+DlgCellBtnSelect	: "Seleccione...",
+
+// Find Dialog
+DlgFindTitle		: "Buscar",
+DlgFindFindBtn		: "Buscar",
+DlgFindNotFoundMsg	: "El texto especificado no ha sido encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Reemplazar",
+DlgReplaceFindLbl		: "Texto a buscar:",
+DlgReplaceReplaceLbl	: "Reemplazar con:",
+DlgReplaceCaseChk		: "Coincidir may/min",
+DlgReplaceReplaceBtn	: "Reemplazar",
+DlgReplaceReplAllBtn	: "Reemplazar Todo",
+DlgReplaceWordChk		: "Coincidir toda la palabra",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de pegado. Por favor use el teclado (Ctrl+V).",
+PasteErrorCut	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).",
+PasteErrorCopy	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).",
+
+PasteAsText		: "Pegar como Texto Plano",
+PasteFromWord	: "Pegar desde Word",
+
+DlgPasteMsg2	: "Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorar definiciones de fuentes",
+DlgPasteRemoveStyles	: "Remover definiciones de estilo",
+DlgPasteCleanBox		: "Clean Up Box",
+
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Más Colores...",
+
+// Document Properties
+DocProps		: "Propiedades del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propiedades de la Referencia",
+DlgAnchorName		: "Nombre de la Referencia",
+DlgAnchorErrorName	: "Por favor, complete el nombre de la Referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "No se encuentra en el Diccionario",
+DlgSpellChangeTo		: "Cambiar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Todo",
+DlgSpellBtnReplace		: "Reemplazar",
+DlgSpellBtnReplaceAll	: "Reemplazar Todo",
+DlgSpellBtnUndo			: "Deshacer",
+DlgSpellNoSuggestions	: "- No hay sugerencias -",
+DlgSpellProgress		: "Control de Ortografía en progreso...",
+DlgSpellNoMispell		: "Control finalizado: no se encontraron errores",
+DlgSpellNoChanges		: "Control finalizado: no se ha cambiado ninguna palabra",
+DlgSpellOneChange		: "Control finalizado: se ha cambiado una palabra",
+DlgSpellManyChanges		: "Control finalizado: se ha cambiado %1 palabras",
+
+IeSpellDownload			: "Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?",
+
+// Button Dialog
+DlgButtonText	: "Texto (Valor)",
+DlgButtonType	: "Tipo",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nombre",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nombre",
+DlgFormAction	: "Acción",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nombre",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamaño",
+DlgSelectLines		: "Lineas",
+DlgSelectChkMulti	: "Permitir múltiple selección",
+DlgSelectOpAvail	: "Opciones disponibles",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Agregar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Subir",
+DlgSelectBtnDown	: "Bajar",
+DlgSelectBtnSetValue : "Establecer como predeterminado",
+DlgSelectBtnDelete	: "Eliminar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nombre",
+DlgTextareaCols	: "Columnas",
+DlgTextareaRows	: "Filas",
+
+// Text Field Dialog
+DlgTextName			: "Nombre",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Caracteres de ancho",
+DlgTextMaxChars		: "Máximo caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Contraseña",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nombre",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propiedades de Viñetas",
+NumberedListProp	: "Propiedades de Numeraciones",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Cuadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "letras en minúsculas (a, b, c)",
+DlgLstTypeUCase		: "letras en mayúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fondo",
+DlgDocColorsTab		: "Colores y Márgenes",
+DlgDocMetaTab		: "Meta Información",
+
+DlgDocPageTitle		: "Título de Página",
+DlgDocLangDir		: "Orientación de idioma",
+DlgDocLangDirLTR	: "Izq. a Derecha (LTR)",
+DlgDocLangDirRTL	: "Der. a Izquierda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codif. de Conjunto de Caracteres",
+DlgDocCharSetOther	: "Otra Codificación",
+
+DlgDocDocType		: "Encabezado de Tipo de Documento",
+DlgDocDocTypeOther	: "Otro Encabezado",
+DlgDocIncXHTML		: "Incluir Declaraciones XHTML",
+DlgDocBgColor		: "Color de Fondo",
+DlgDocBgImage		: "URL de Imagen de Fondo",
+DlgDocBgNoScroll	: "Fondo sin rolido",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Vínculo",
+DlgDocCVisited		: "Vínculo Visitado",
+DlgDocCActive		: "Vínculo Activo",
+DlgDocMargins		: "Márgenes de Página",
+DlgDocMaTop			: "Tope",
+DlgDocMaLeft		: "Izquierda",
+DlgDocMaRight		: "Derecha",
+DlgDocMaBottom		: "Pie",
+DlgDocMeIndex		: "Claves de indexación del Documento (separados por comas)",
+DlgDocMeDescr		: "Descripción del Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista Previa",
+
+// Templates Dialog
+Templates			: "Plantillas",
+DlgTemplatesTitle	: "Contenido de Plantillas",
+DlgTemplatesSelMsg	: "Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):",
+DlgTemplatesLoading	: "Cargando lista de Plantillas. Por favor, aguarde...",
+DlgTemplatesNoTpl	: "(No hay plantillas definidas)",
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca de",
+DlgAboutBrowserInfoTab	: "Información de Navegador",
+DlgAboutVersion		: "versión",
+DlgAboutLicense		: "Licenciado bajo los términos de GNU Lesser General Public License",
+DlgAboutInfo		: "Para mayor información por favor dirigirse a"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/et.js 1.4.0sr5-1/fckeditor/editor/lang/et.js
--- 1.3.11sr1/fckeditor/editor/lang/et.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/et.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: et.js
+ * 	Estonian language file.
+ * 
+ * File Authors:
+ * 		Kristjan Kivikangur (kristjan@ttrk.ee)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Voldi tööriistariba",
+ToolbarExpand		: "Laienda tööriistariba",
+
+// Toolbar Items and Context Menu
+Save				: "Salvesta",
+NewPage				: "Uus leht",
+Preview				: "Eelvaade",
+Cut					: "Lõika",
+Copy				: "Kopeeri",
+Paste				: "Kleebi",
+PasteText			: "Kleebi tavalise tekstina",
+PasteWord			: "Kleebi Wordist",
+Print				: "Prindi",
+SelectAll			: "Vali kõik",
+RemoveFormat		: "Eemalda vorming",
+InsertLinkLbl		: "Link",
+InsertLink			: "Sisesta/Muuda link",
+RemoveLink			: "Eemalda link",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+InsertImageLbl		: "Pilt",
+InsertImage			: "Sisesta/Muuda pilt",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabel",
+InsertTable			: "Sisesta/Muuda tabel",
+InsertLineLbl		: "Joon",
+InsertLine			: "Sisesta horisontaaljoon",
+InsertSpecialCharLbl: "Erimärgid",
+InsertSpecialChar	: "Sisesta erimärk",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Sisesta Smiley",
+About				: "FCKeditor kohta",
+Bold				: "Paks",
+Italic				: "Kursiiv",
+Underline			: "Allajoonitud",
+StrikeThrough		: "Läbijoonitud",
+Subscript			: "Allindeks",
+Superscript			: "Ülaindeks",
+LeftJustify			: "Vasakjoondus",
+CenterJustify		: "Keskjoondus",
+RightJustify		: "Paremjoondus",
+BlockJustify		: "Rööpjoondus",
+DecreaseIndent		: "Vähenda taanet",
+IncreaseIndent		: "Suurenda taanet",
+Undo				: "Võta tagasi",
+Redo				: "Tee uuesti",
+NumberedListLbl		: "Nummerdatud loetelu",
+NumberedList		: "Sisesta/Eemalda nummerdatud loetelu",
+BulletedListLbl		: "Täpitud loetelu",
+BulletedList		: "Sisesta/Eemalda täpitud loetelu",
+ShowTableBorders	: "Nöita tabeli jooni",
+ShowDetails			: "Näita üksikasju",
+Style				: "Laad",
+FontFormat			: "Vorming",
+Font				: "Font",
+FontSize			: "Suurus",
+TextColor			: "Teksti värv",
+BGColor				: "Tausta värv",
+Source				: "Lähtekood",
+Find				: "Otsi",
+Replace				: "Asenda",
+SpellCheck			: "Check Spell",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+// Context Menu
+EditLink			: "Muuda linki",
+InsertRow			: "Lisa rida",
+DeleteRows			: "Eemalda ridu",
+InsertColumn		: "Lisa veerg",
+DeleteColumns		: "Eemalda veerud",
+InsertCell			: "Lisa lahter",
+DeleteCells			: "Eemalda lahtrid",
+MergeCells			: "Ühenda lahtrid",
+SplitCell			: "Lahuta lahtrid",
+CellProperties		: "Lahtri atribuudid",
+TableProperties		: "Tabeli atribuudid",
+ImageProperties		: "Pildi  atribuudid",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Töötlen XHTML. Palun oota...",
+Done				: "Tehtud",
+PasteWordConfirm	: "Tekst, mida soovid lisada paistab pärinevat Wordist. Kas soovid seda enne kleepimist puhastada?",
+NotCompatiblePaste	: "See käsk on saadaval ainult Internet Explorer versioon 5.5 või rohkem puhul. Kas soovid kleepida ilma puhastamata?",
+UnknownToolbarItem	: "Tundmatu tööriistariba üksus \"%1\"",
+UnknownCommand		: "Tundmatu käsunimi \"%1\"",
+NotImplemented		: "Käsku ei täidetud",
+UnknownToolbarSet	: "Tööriistariba \"%1\" ei eksisteeri",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Loobu",
+DlgBtnClose			: "Sule",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Täpsemalt",
+DlgOpOther			: "&lt;Other&gt;",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;määramata&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Keele suund",
+DlgGenLangDirLtr	: "Vasakult paremale (LTR)",
+DlgGenLangDirRtl	: "Paremalt vasakule (RTL)",
+DlgGenLangCode		: "Keele kood",
+DlgGenAccessKey		: "Juurdepääsu võti",
+DlgGenName			: "Nimi",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Pikk kirjeldus URL",
+DlgGenClass			: "Stiilistiku klassid",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Laad",
+
+// Image Dialog
+DlgImgTitle			: "Pildi atribuudid",
+DlgImgInfoTab		: "Pildi info",
+DlgImgBtnUpload		: "Saada serverile",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Lae üles",
+DlgImgAlt			: "Alternatiivne tekst",
+DlgImgWidth			: "Laius",
+DlgImgHeight		: "Kõrgus",
+DlgImgLockRatio		: "Lukusta kuvasuhe",
+DlgBtnResetSize		: "Lähtesta suurus",
+DlgImgBorder		: "Joon",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Joondus",
+DlgImgAlignLeft		: "Vasak",
+DlgImgAlignAbsBottom: "Abs alla",
+DlgImgAlignAbsMiddle: "Abs keskele",
+DlgImgAlignBaseline	: "Baasjoonele",
+DlgImgAlignBottom	: "Alla",
+DlgImgAlignMiddle	: "Keskele",
+DlgImgAlignRight	: "Paremale",
+DlgImgAlignTextTop	: "Teksti üles",
+DlgImgAlignTop		: "Üles",
+DlgImgPreview		: "Eelvaade",
+DlgImgAlertUrl		: "Palun kirjuta pildi URL",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Lingi info",
+DlgLnkTargetTab		: "Sihtkoht",
+
+DlgLnkType			: "Lingi tüüp",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankur sellel lehel",
+DlgLnkTypeEMail		: "E-Post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "&lt;muu&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vali ankur",
+DlgLnkAnchorByName	: "Ankru nime järgi",
+DlgLnkAnchorById	: "Elemendi Id järgi",
+DlgLnkNoAnchors		: "&lt;Selles dokumendis ei ole ankruid&gt;",
+DlgLnkEMail			: "E-Posti aadress",
+DlgLnkEMailSubject	: "Sõnumi teema",
+DlgLnkEMailBody		: "Sõnumi tekst",
+DlgLnkUpload		: "Lae üles",
+DlgLnkBtnUpload		: "Saada serverile",
+
+DlgLnkTarget		: "Sihtkoht",
+DlgLnkTargetFrame	: "&lt;raam&gt;",
+DlgLnkTargetPopup	: "&lt;hüpikaken&gt;",
+DlgLnkTargetBlank	: "Uus aken (_blank)",
+DlgLnkTargetParent	: "Vanem aken (_parent)",
+DlgLnkTargetSelf	: "Sama aken (_self)",
+DlgLnkTargetTop		: "Pealmine aken (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Hüpikakna nimi",
+DlgLnkPopWinFeat	: "Hüpikakna omadused",
+DlgLnkPopResize		: "Suurendatav",
+DlgLnkPopLocation	: "Aadressiriba",
+DlgLnkPopMenu		: "Menüüriba",
+DlgLnkPopScroll		: "Kerimisribad",
+DlgLnkPopStatus		: "Olekuriba",
+DlgLnkPopToolbar	: "Tööriistariba",
+DlgLnkPopFullScrn	: "Täisekraan (IE)",
+DlgLnkPopDependent	: "Sõltuv (Netscape)",
+DlgLnkPopWidth		: "Laius",
+DlgLnkPopHeight		: "Kõrgus",
+DlgLnkPopLeft		: "Vasak asukoht",
+DlgLnkPopTop		: "Ülemine asukoht",
+
+DlnLnkMsgNoUrl		: "Palun kirjuta lingi URL",
+DlnLnkMsgNoEMail	: "Palun kirjuta E-Posti aadress",
+DlnLnkMsgNoAnchor	: "Palun vali ankur",
+
+// Color Dialog
+DlgColorTitle		: "Vali värv",
+DlgColorBtnClear	: "Tühjenda",
+DlgColorHighlight	: "Märgi",
+DlgColorSelected	: "Valitud",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sisesta Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vali erimärk",
+
+// Table Dialog
+DlgTableTitle		: "Tabeli atribuudid",
+DlgTableRows		: "Read",
+DlgTableColumns		: "Veerud",
+DlgTableBorder		: "Joone suurus",
+DlgTableAlign		: "Joondus",
+DlgTableAlignNotSet	: "<Määramata>",
+DlgTableAlignLeft	: "Vasak",
+DlgTableAlignCenter	: "Kesk",
+DlgTableAlignRight	: "Parem",
+DlgTableWidth		: "Laius",
+DlgTableWidthPx		: "pikslit",
+DlgTableWidthPc		: "protsenti",
+DlgTableHeight		: "Kõrgus",
+DlgTableCellSpace	: "Lahtri vahe",
+DlgTableCellPad		: "Lahtri täidis",
+DlgTableCaption		: "Seletiitel",
+
+// Table Cell Dialog
+DlgCellTitle		: "Lahtri atribuudid",
+DlgCellWidth		: "Laius",
+DlgCellWidthPx		: "pikslit",
+DlgCellWidthPc		: "protsenti",
+DlgCellHeight		: "Kõrgus",
+DlgCellWordWrap		: "Murra ridu",
+DlgCellWordWrapNotSet	: "<Määramata>",
+DlgCellWordWrapYes	: "Jah",
+DlgCellWordWrapNo	: "Ei",
+DlgCellHorAlign		: "Horisontaaljoondus",
+DlgCellHorAlignNotSet	: "<Määramata>",
+DlgCellHorAlignLeft	: "Vasak",
+DlgCellHorAlignCenter	: "Kesk",
+DlgCellHorAlignRight: "Parem",
+DlgCellVerAlign		: "Vertikaaljoondus",
+DlgCellVerAlignNotSet	: "<Määramata>",
+DlgCellVerAlignTop	: "Üles",
+DlgCellVerAlignMiddle	: "Keskele",
+DlgCellVerAlignBottom	: "Alla",
+DlgCellVerAlignBaseline	: "Baasjoonele",
+DlgCellRowSpan		: "Reaulatus",
+DlgCellCollSpan		: "Veeruulatus",
+DlgCellBackColor	: "Tausta värv",
+DlgCellBorderColor	: "Joone värv",
+DlgCellBtnSelect	: "Vali...",
+
+// Find Dialog
+DlgFindTitle		: "Otsi",
+DlgFindFindBtn		: "Otsi",
+DlgFindNotFoundMsg	: "Valitud teksti ei leitud.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Asenda",
+DlgReplaceFindLbl		: "Leia mida:",
+DlgReplaceReplaceLbl	: "Asenda millega:",
+DlgReplaceCaseChk		: "Erista suurtähti",
+DlgReplaceReplaceBtn	: "Asenda",
+DlgReplaceReplAllBtn	: "Asenda kõik",
+DlgReplaceWordChk		: "Otsi terveid sõnu",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Sinu brauseri turvaseaded ei luba redaktoril automaatselt kleepida. Palun kasutage selleks klaviatuuri (Ctrl+V).",
+PasteErrorCut	: "Sinu brauseri turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri (Ctrl+X).",
+PasteErrorCopy	: "Sinu brauseri turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri (Ctrl+C).",
+
+PasteAsText		: "Kleebi tavalise tekstina",
+PasteFromWord	: "Kleebi Wordist",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Automaatne",
+ColorMoreColors	: "Rohkem värve...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",	//MISSING
+DlgButtonType	: "Type",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutVersion		: "versioon",
+DlgAboutLicense		: "Litsenseeritud GNU Lesser General Public License litsentsiga",
+DlgAboutInfo		: "Täpsema info saamiseks mine"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/eu.js 1.4.0sr5-1/fckeditor/editor/lang/eu.js
--- 1.3.11sr1/fckeditor/editor/lang/eu.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/eu.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: eu.js
+ * 	Basque language file.
+ * 	Euskara hizkuntza fitxategia.
+ * 
+ * File Authors:
+ * 		Ibon Igartua (Librezale.org)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Estutu Tresna Barra",
+ToolbarExpand		: "Hedatu Tresna Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Gorde",
+NewPage				: "Orrialde Berria",
+Preview				: "Aurrebista",
+Cut					: "Ebaki",
+Copy				: "Kopiatu",
+Paste				: "Itsatsi",
+PasteText			: "Itsatsi testu bezala",
+PasteWord			: "Itsatsi Word-etik",
+Print				: "Inprimatu",
+SelectAll			: "Hautatu dena",
+RemoveFormat		: "Kendu Formatoa",
+InsertLinkLbl		: "Esteka",
+InsertLink			: "Txertatu/Editatu Esteka",
+RemoveLink			: "Kendu Esteka",
+Anchor				: "Aingura",
+InsertImageLbl		: "Irudia",
+InsertImage			: "Txertatu/Editatu Irudia",
+InsertFlashLbl		: "Flasha",
+InsertFlash			: "Txertatu/Editatu Flasha",
+InsertTableLbl		: "Taula",
+InsertTable			: "Txertatu/Editatu Taula",
+InsertLineLbl		: "Lerroa",
+InsertLine			: "Txertatu Marra Horizontala",
+InsertSpecialCharLbl: "Karaktere Berezia",
+InsertSpecialChar	: "Txertatu Karaktere Berezia",
+InsertSmileyLbl		: "Aurpegierak",
+InsertSmiley		: "Txertatu Aurpegierak",
+About				: "FCKeditor-ri buruz",
+Bold				: "Lodia",
+Italic				: "Etzana",
+Underline			: "Azpimarratu",
+StrikeThrough		: "Marratua",
+Subscript			: "Azpi-indize",
+Superscript			: "Goi-indize",
+LeftJustify			: "Lerrokatu Ezkerrean",
+CenterJustify		: "Lerrokatu Erdian",
+RightJustify		: "Lerrokatu Eskuman",
+BlockJustify		: "Justifikatu",
+DecreaseIndent		: "Txikitu Koska",
+IncreaseIndent		: "Handitu Koska",
+Undo				: "Desegin",
+Redo				: "Berregin",
+NumberedListLbl		: "Zenbakidun Zerrenda",
+NumberedList		: "Txertatu/Kendu Zenbakidun zerrenda",
+BulletedListLbl		: "Buletdun Zerrenda",
+BulletedList		: "Txertatu/Kendu Buletdun zerrenda",
+ShowTableBorders	: "Erakutsi Taularen Ertzak",
+ShowDetails			: "Erakutsi Xehetasunak",
+Style				: "Estiloa",
+FontFormat			: "Formatoa",
+Font				: "Letra-tipoa",
+FontSize			: "Tamaina",
+TextColor			: "Testu Kolorea",
+BGColor				: "Atzeko kolorea",
+Source				: "HTML Iturburua",
+Find				: "Bilatu",
+Replace				: "Ordezkatu",
+SpellCheck			: "Ortografia",
+UniversalKeyboard	: "Teklatu Unibertsala",
+
+Form			: "Formularioa",
+Checkbox		: "Kontrol-laukia",
+RadioButton		: "Aukera-botoia",
+TextField		: "Testu Eremua",
+Textarea		: "Testu-area",
+HiddenField		: "Ezkutuko Eremua",
+Button			: "Botoia",
+SelectionField	: "Hautespen Eremua",
+ImageButton		: "Irudi Botoia",
+
+// Context Menu
+EditLink			: "Aldatu Esteka",
+InsertRow			: "Txertatu Errenkada",
+DeleteRows			: "Ezabatu Errenkadak",
+InsertColumn		: "Txertatu Zutabea",
+DeleteColumns		: "Ezabatu Zutabeak",
+InsertCell			: "Txertatu Gelaxka",
+DeleteCells			: "Kendu Gelaxkak",
+MergeCells			: "Batu Gelaxkak",
+SplitCell			: "Zatitu Gelaxka",
+CellProperties		: "Gelaxkaren Ezaugarriak",
+TableProperties		: "Taularen Ezaugarriak",
+ImageProperties		: "Irudiaren Ezaugarriak",
+FlashProperties		: "Flasharen Ezaugarriak",
+
+AnchorProp			: "Ainguraren Ezaugarriak",
+ButtonProp			: "Botoiaren Ezaugarriak",
+CheckboxProp		: "Kontrol-laukiko Ezaugarriak",
+HiddenFieldProp		: "Ezkutuko Eremuaren Ezaugarriak",
+RadioButtonProp		: "Aukera-botoiaren Ezaugarriak",
+ImageButtonProp		: "Irudi Botoiaren Ezaugarriak",
+TextFieldProp		: "Testu Eremuaren Ezaugarriak",
+SelectionFieldProp	: "Hautespen Eremuaren Ezaugarriak",
+TextareaProp		: "Testu-arearen Ezaugarriak",
+FormProp			: "Formularioaren Ezaugarriak",
+
+FontFormats			: "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML Prozesatzen. Itxaron mesedez...",
+Done				: "Eginda",
+PasteWordConfirm	: "Itsatsi nahi duzun textua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?",
+NotCompatiblePaste	: "Komando hau Internet Explorer 5.5 bertsiorako edo ondorengoentzako erabilgarria dago. Garbitu gabe itsatsi nahi duzu?",
+UnknownToolbarItem	: "Ataza barrako elementu ezezaguna \"%1\"",
+UnknownCommand		: "Komando izen ezezaguna \"%1\"",
+NotImplemented		: "Komando ez inplementatua",
+UnknownToolbarSet	: "Ataza barra \"%1\" taldea ez da existitzen",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Ados",
+DlgBtnCancel		: "Utzi",
+DlgBtnClose			: "Itxi",
+DlgBtnBrowseServer	: "Zerbitzaria arakatu",
+DlgAdvancedTag		: "Aurreratua",
+DlgOpOther			: "&lt;Bestelakoak&gt;",
+DlgInfoTab			: "Informazioa",
+DlgAlertUrl			: "Mesedez URLa idatzi ezazu",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;Ezarri gabe&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Hizkuntzaren Norabidea",
+DlgGenLangDirLtr	: "Ezkerretik Eskumara(LTR)",
+DlgGenLangDirRtl	: "Eskumatik Ezkerrera (RTL)",
+DlgGenLangCode		: "Hizkuntza Kodea",
+DlgGenAccessKey		: "Sarbide-gakoa",
+DlgGenName			: "Izena",
+DlgGenTabIndex		: "Tabulazio Indizea",
+DlgGenLongDescr		: "URL Deskribapen Luzea",
+DlgGenClass			: "Estilo-orriko Klaseak",
+DlgGenTitle			: "Izenburua",
+DlgGenContType		: "Eduki Mota (Content Type)",
+DlgGenLinkCharset	: "Estekatutako Karaktere Multzoa",
+DlgGenStyle			: "Estiloa",
+
+// Image Dialog
+DlgImgTitle			: "Irudi Ezaugarriak",
+DlgImgInfoTab		: "Irudi informazioa",
+DlgImgBtnUpload		: "Zerbitzarira bidalia",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Gora Kargatu",
+DlgImgAlt			: "Textu Alternatiboa",
+DlgImgWidth			: "Zabalera",
+DlgImgHeight		: "Altuera",
+DlgImgLockRatio		: "Erlazioa Blokeatu",
+DlgBtnResetSize		: "Tamaina Berrezarri",
+DlgImgBorder		: "Ertza",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Lerrokatu",
+DlgImgAlignLeft		: "Ezkerrera",
+DlgImgAlignAbsBottom: "Abs Behean",
+DlgImgAlignAbsMiddle: "Abs Erdian",
+DlgImgAlignBaseline	: "Oinan",
+DlgImgAlignBottom	: "Behean",
+DlgImgAlignMiddle	: "Erdian",
+DlgImgAlignRight	: "Eskuman",
+DlgImgAlignTextTop	: "Testua Goian",
+DlgImgAlignTop		: "Goian",
+DlgImgPreview		: "Aurrebista",
+DlgImgAlertUrl		: "Mesedez Irudiaren URLa idatzi",
+DlgImgLinkTab		: "Esteka",
+
+// Flash Dialog
+DlgFlashTitle		: "Flasharen Ezaugarriak",
+DlgFlashChkPlay		: "Automatikoki Erreproduzitu",
+DlgFlashChkLoop		: "Begizta",
+DlgFlashChkMenu		: "Flasharen Menua Gaitu",
+DlgFlashScale		: "Eskalatu",
+DlgFlashScaleAll	: "Dena erakutsi",
+DlgFlashScaleNoBorder	: "Ertzarik gabe",
+DlgFlashScaleFit	: "Doitu",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Esteka",
+DlgLnkInfoTab		: "Estekaren Informazioa",
+DlgLnkTargetTab		: "Helburua",
+
+DlgLnkType			: "Esteka Mota",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Aingura horrialde honentan",
+DlgLnkTypeEMail		: "ePosta",
+DlgLnkProto			: "Protokoloa",
+DlgLnkProtoOther	: "&lt;Beste batzuk&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Aingura bat hautatu",
+DlgLnkAnchorByName	: "Aingura izenagatik",
+DlgLnkAnchorById	: "Elementuaren ID-gatik",
+DlgLnkNoAnchors		: "&lt;Ez daude aingurak eskuragarri dokumentuan&gt;",
+DlgLnkEMail			: "ePosta Helbidea",
+DlgLnkEMailSubject	: "Mezuaren Gaia",
+DlgLnkEMailBody		: "Mezuaren Gorputza",
+DlgLnkUpload		: "Gora kargatu",
+DlgLnkBtnUpload		: "Zerbitzarira bidali",
+
+DlgLnkTarget		: "Target (Helburua)",
+DlgLnkTargetFrame	: "&lt;marko&gt;",
+DlgLnkTargetPopup	: "&lt;popup lehioa&gt;",
+DlgLnkTargetBlank	: "Lehio Berria (_blank)",
+DlgLnkTargetParent	: "Lehio Gurasoa (_parent)",
+DlgLnkTargetSelf	: "Lehio Berdina (_self)",
+DlgLnkTargetTop		: "Goiko Lehioa (_top)",
+DlgLnkTargetFrameName	: "Marko Helburuaren Izena",
+DlgLnkPopWinName	: "Popup Lehioaren Izena",
+DlgLnkPopWinFeat	: "Popup Lehioaren Ezaugarriak",
+DlgLnkPopResize		: "Tamaina Aldakorra",
+DlgLnkPopLocation	: "Kokaleku Barra",
+DlgLnkPopMenu		: "Menu Barra",
+DlgLnkPopScroll		: "Korritze Barrak",
+DlgLnkPopStatus		: "Egoera Barra",
+DlgLnkPopToolbar	: "Tresna Barra",
+DlgLnkPopFullScrn	: "Pantaila Osoa (IE)",
+DlgLnkPopDependent	: "Menpekoa (Netscape)",
+DlgLnkPopWidth		: "Zabalera",
+DlgLnkPopHeight		: "Altuera",
+DlgLnkPopLeft		: "Ezkerreko  Posizioa",
+DlgLnkPopTop		: "Goiko Posizioa",
+
+DlnLnkMsgNoUrl		: "Mesedez URL esteka idatzi",
+DlnLnkMsgNoEMail	: "Mesedez ePosta helbidea idatzi",
+DlnLnkMsgNoAnchor	: "Mesedez aingura bat aukeratu",
+
+// Color Dialog
+DlgColorTitle		: "Kolore Aukeraketa",
+DlgColorBtnClear	: "Garbitu",
+DlgColorHighlight	: "Nabarmendu",
+DlgColorSelected	: "Aukeratuta",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Aurpegiera Sartu",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Karaktere Berezia Aukeratu",
+
+// Table Dialog
+DlgTableTitle		: "Taularen Ezaugarriak",
+DlgTableRows		: "Lerroak",
+DlgTableColumns		: "Zutabeak",
+DlgTableBorder		: "Ertzaren Zabalera",
+DlgTableAlign		: "Lerrokatu",
+DlgTableAlignNotSet	: "<Ezarri gabe>",
+DlgTableAlignLeft	: "Ezkerrean",
+DlgTableAlignCenter	: "Erdian",
+DlgTableAlignRight	: "Eskuman",
+DlgTableWidth		: "Zabalera",
+DlgTableWidthPx		: "pixel",
+DlgTableWidthPc		: "ehuneko",
+DlgTableHeight		: "Altuera",
+DlgTableCellSpace	: "Gelaxka arteko tartea",
+DlgTableCellPad		: "Gelaxken betegarria",
+DlgTableCaption		: "Epigrafea",
+
+// Table Cell Dialog
+DlgCellTitle		: "Gelaxken Ezaugarriak",
+DlgCellWidth		: "Zabalera",
+DlgCellWidthPx		: "pixel",
+DlgCellWidthPc		: "ehuneko",
+DlgCellHeight		: "Altuera",
+DlgCellWordWrap		: "Itzulbira",
+DlgCellWordWrapNotSet	: "&lt;Ezarri gabe&gt;",
+DlgCellWordWrapYes	: "Bai",
+DlgCellWordWrapNo	: "Ez",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "&lt;Ezarri gabe&gt;",
+DlgCellHorAlignLeft	: "Ezkerrean",
+DlgCellHorAlignCenter	: "Erdian",
+DlgCellHorAlignRight: "Eskuman",
+DlgCellVerAlign		: "Lerrokatu Bertikalki",
+DlgCellVerAlignNotSet	: "&lt;Ezarri gabe&gt;",
+DlgCellVerAlignTop	: "Goian",
+DlgCellVerAlignMiddle	: "Erdian",
+DlgCellVerAlignBottom	: "Behean",
+DlgCellVerAlignBaseline	: "Oinan",
+DlgCellRowSpan		: "Lerroak Hedatu",
+DlgCellCollSpan		: "Zutabeak Hedatu",
+DlgCellBackColor	: "Atzeko Kolorea",
+DlgCellBorderColor	: "Ertzako Kolorea",
+DlgCellBtnSelect	: "Aukertau...",
+
+// Find Dialog
+DlgFindTitle		: "Bilaketa",
+DlgFindFindBtn		: "Bilatu",
+DlgFindNotFoundMsg	: "Idatzitako testua ez da topatu.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ordeztu",
+DlgReplaceFindLbl		: "Zer bilatu:",
+DlgReplaceReplaceLbl	: "Zerekin ordeztu:",
+DlgReplaceCaseChk		: "Maiuskula/minuskula",
+DlgReplaceReplaceBtn	: "Ordeztu",
+DlgReplaceReplAllBtn	: "Ordeztu Guztiak",
+DlgReplaceWordChk		: "Esaldi osoa bilatu",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki itsastea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+V).",
+PasteErrorCut	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).",
+PasteErrorCopy	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).",
+
+PasteAsText		: "Testu Arrunta bezala Itsatsi",
+PasteFromWord	: "Word-etik itsatsi",
+
+DlgPasteMsg2	: "Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.",
+DlgPasteIgnoreFont		: "Letra Motaren definizioa ezikusi",
+DlgPasteRemoveStyles	: "Estilo definizioak kendu",
+DlgPasteCleanBox		: "Testu-eremua Garbitu",
+
+
+// Color Picker
+ColorAutomatic	: "Automatikoa",
+ColorMoreColors	: "Kolore gehiago...",
+
+// Document Properties
+DocProps		: "Dokumentuaren Ezarpenak",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ainguraren Ezaugarriak",
+DlgAnchorName		: "Ainguraren Izena",
+DlgAnchorErrorName	: "Idatzi ainguraren izena",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ez dago hiztegian",
+DlgSpellChangeTo		: "Honekin ordezkatu",
+DlgSpellBtnIgnore		: "Ezikusi",
+DlgSpellBtnIgnoreAll	: "Denak Ezikusi",
+DlgSpellBtnReplace		: "Ordezkatu",
+DlgSpellBtnReplaceAll	: "Denak Ordezkatu",
+DlgSpellBtnUndo			: "Desegin",
+DlgSpellNoSuggestions	: "- Iradokizunik ez -",
+DlgSpellProgress		: "Zuzenketa ortografikoa martxan...",
+DlgSpellNoMispell		: "Zuzenketa ortografikoa bukatuta: Akatsik ez",
+DlgSpellNoChanges		: "Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu",
+DlgSpellOneChange		: "Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da",
+DlgSpellManyChanges		: "Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira",
+
+IeSpellDownload			: "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?",
+
+// Button Dialog
+DlgButtonText	: "Testua (Balorea)",
+DlgButtonType	: "Mota",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Izena",
+DlgCheckboxValue	: "Balorea",
+DlgCheckboxSelected	: "Hautatuta",
+
+// Form Dialog
+DlgFormName		: "Izena",
+DlgFormAction	: "Ekintza",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Izena",
+DlgSelectValue		: "Balorea",
+DlgSelectSize		: "Tamaina",
+DlgSelectLines		: "lerro kopurura",
+DlgSelectChkMulti	: "Hautaketa anitzak baimendu",
+DlgSelectOpAvail	: "Aukera Eskuragarriak",
+DlgSelectOpText		: "Testua",
+DlgSelectOpValue	: "Balorea",
+DlgSelectBtnAdd		: "Gehitu",
+DlgSelectBtnModify	: "Aldatu",
+DlgSelectBtnUp		: "Gora",
+DlgSelectBtnDown	: "Behera",
+DlgSelectBtnSetValue : "Aukeratutako balorea ezarri",
+DlgSelectBtnDelete	: "Ezabatu",
+
+// Textarea Dialog
+DlgTextareaName	: "Izena",
+DlgTextareaCols	: "Zutabeak",
+DlgTextareaRows	: "Lerroak",
+
+// Text Field Dialog
+DlgTextName			: "Izena",
+DlgTextValue		: "Balorea",
+DlgTextCharWidth	: "Zabalera",
+DlgTextMaxChars		: "Zenbat karaktere gehienez",
+DlgTextType			: "Mota",
+DlgTextTypeText		: "Testua",
+DlgTextTypePass		: "Pasahitza",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Izena",
+DlgHiddenValue	: "Balorea",
+
+// Bulleted List Dialog
+BulletedListProp	: "Buletdun Zerrendaren Ezarpenak",
+NumberedListProp	: "Zenbakidun Zerrendaren Ezarpenak",
+DlgLstType			: "Mota",
+DlgLstTypeCircle	: "Zirkulua",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Karratua",
+DlgLstTypeNumbers	: "Zenbakiak (1, 2, 3)",
+DlgLstTypeLCase		: "Letra xeheak (a, b, c)",
+DlgLstTypeUCase		: "Letra larriak (A, B, C)",
+DlgLstTypeSRoman	: "Erromatar zenbaki zeheak (i, ii, iii)",
+DlgLstTypeLRoman	: "Erromatar zenbaki larriak (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Orokorra",
+DlgDocBackTab		: "Atzekaldea",
+DlgDocColorsTab		: "Koloreak eta Marjinak",
+DlgDocMetaTab		: "Meta Informazioa",
+
+DlgDocPageTitle		: "Orriaren Izenburua",
+DlgDocLangDir		: "Hizkuntzaren Norabidea",
+DlgDocLangDirLTR	: "Ezkerretik eskumara (LTR)",
+DlgDocLangDirRTL	: "Eskumatik ezkerrera (RTL)",
+DlgDocLangCode		: "Hizkuntzaren Kodea",
+DlgDocCharSet		: "Karaktere Multzoaren Kodeketa",
+DlgDocCharSetOther	: "Beste Karaktere Multzoaren Kodeketa",
+
+DlgDocDocType		: "Document Type Goiburua",
+DlgDocDocTypeOther	: "Beste Document Type Goiburua",
+DlgDocIncXHTML		: "XHTML Ezarpenak",
+DlgDocBgColor		: "Atzeko Kolorea",
+DlgDocBgImage		: "Atzeko Irudiaren URL-a",
+DlgDocBgNoScroll	: "Korritze gabeko Atzekaldea",
+DlgDocCText			: "Testua",
+DlgDocCLink			: "Estekak",
+DlgDocCVisited		: "Bisitatutako Estekak",
+DlgDocCActive		: "Esteka Aktiboa",
+DlgDocMargins		: "Orrialdearen marjinak",
+DlgDocMaTop			: "Goian",
+DlgDocMaLeft		: "Ezkerrean",
+DlgDocMaRight		: "Eskuman",
+DlgDocMaBottom		: "Behean",
+DlgDocMeIndex		: "Dokumentuaren Gako-hitzak (komarekin bananduta)",
+DlgDocMeDescr		: "Dokumentuaren Deskribapena",
+DlgDocMeAuthor		: "Egilea",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Aurrebista",
+
+// Templates Dialog
+Templates			: "Txantiloiak",
+DlgTemplatesTitle	: "Eduki Txantiloiak",
+DlgTemplatesSelMsg	: "Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):",
+DlgTemplatesLoading	: "Txantiloiak kargatzen. Itxaron mesedez...",
+DlgTemplatesNoTpl	: "(Ez dago definitutako txantiloirik)",
+
+// About Dialog
+DlgAboutAboutTab	: "Honi buruz",
+DlgAboutBrowserInfoTab	: "Nabigatzailearen Informazioa",
+DlgAboutVersion		: "bertsioa",
+DlgAboutLicense		: "GNU Lesser General Public License Lizentziapean",
+DlgAboutInfo		: "Informazio gehiago eskuratzeko hona joan"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/fa.js 1.4.0sr5-1/fckeditor/editor/lang/fa.js
--- 1.3.11sr1/fckeditor/editor/lang/fa.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/fa.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fa.js
+ * 	Persian language file.
+ * 
+ * File Authors:
+ * 		Hamed Taj-Abadi (hamed@ranginkaman.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "بستن منوابزار",
+ToolbarExpand		: "بازکردن منوابزار",
+
+// Toolbar Items and Context Menu
+Save				: "ذخيره",
+NewPage				: "جديد",
+Preview				: "پيش نمايش",
+Cut					: "برش",
+Copy				: "کپی",
+Paste				: "چسباندن",
+PasteText			: "چسباندن به عنوان متن ساده",
+PasteWord			: "چسباندن از WORD",
+Print				: "چاپ",
+SelectAll			: "انتخاب همه",
+RemoveFormat		: "برداشتن فرمت",
+InsertLinkLbl		: "لينک",
+InsertLink			: "درج/ويرايش لينک",
+RemoveLink			: "برداشتن لينک",
+Anchor				: "درج/ويرايش لنگر",
+InsertImageLbl		: "تصوير",
+InsertImage			: "درج/ويرايش تصوير",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "جدول",
+InsertTable			: "درج/ويرايش جدول",
+InsertLineLbl		: "خط",
+InsertLine			: "درج خط افقی",
+InsertSpecialCharLbl: "شناسه ويژه",
+InsertSpecialChar	: "درج شناسه ويژه",
+InsertSmileyLbl		: "خندانک",
+InsertSmiley		: "درج خندانک",
+About				: "درباره FCKeditor",
+Bold				: "پررنگ",
+Italic				: "ايتاليک",
+Underline			: "زيرخط",
+StrikeThrough		: "ميان خط",
+Subscript			: "انديس پائين",
+Superscript			: "انديس بالا",
+LeftJustify			: "چپ چين",
+CenterJustify		: "وسط چين",
+RightJustify		: "راست چين",
+BlockJustify		: "بلوک چين",
+DecreaseIndent		: "کاهش تورفتگی",
+IncreaseIndent		: "افزايش تورفتگی",
+Undo				: "واچيدن",
+Redo				: "بازچيدن",
+NumberedListLbl		: "فهرست عددی",
+NumberedList		: "درج/برداشتن فهرست عددی",
+BulletedListLbl		: "فهرست نقطه ای",
+BulletedList		: "درج/برداشتن فهرست نقطه ای",
+ShowTableBorders	: "نمايش لبه جدول",
+ShowDetails			: "نمايش جزئيات",
+Style				: "سبک",
+FontFormat			: "فرمت",
+Font				: "قلم",
+FontSize			: "اندازه",
+TextColor			: "رنگ متن",
+BGColor				: "رنگ پس زمينه",
+Source				: "منبع",
+Find				: "جستجو",
+Replace				: "جايگزينی",
+SpellCheck			: "کنترل املا",
+UniversalKeyboard	: "صفحه کليد جهانی",
+
+Form			: "فرم",
+Checkbox		: "دکمه گزينه ای",
+RadioButton		: "دکمه راديويی",
+TextField		: "فيلد متنی",
+Textarea		: "ناحيه متنی",
+HiddenField		: "فيلد پنهان",
+Button			: "دکمه",
+SelectionField	: "فيلد انتخابی",
+ImageButton		: "دکمه تصويری",
+
+// Context Menu
+EditLink			: "ويرايش لينک",
+InsertRow			: "درج سطر",
+DeleteRows			: "حذف سطرها",
+InsertColumn		: "درج ستون",
+DeleteColumns		: "حذف ستونها",
+InsertCell			: "درج سلول",
+DeleteCells			: "حذف سلولها",
+MergeCells			: "ادغام سلولها",
+SplitCell			: "تفکيک سلول",
+CellProperties		: "ويژگيهای سلول",
+TableProperties		: "ويژگيهای جدول",
+ImageProperties		: "ويژگيهای تصوير",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "ويژگيهای لنگر",
+ButtonProp			: "ويژگيهای دکمه",
+CheckboxProp		: "ويژگيهای دکمه گزينه ای",
+HiddenFieldProp		: "ويژگيهای فيلد پنهان",
+RadioButtonProp		: "ويژگيهای دکمه راديويی",
+ImageButtonProp		: "ويژگيهای دکمه تصويری",
+TextFieldProp		: "ويژگيهای فيلد متنی",
+SelectionFieldProp	: "ويژگيهای فيلد انتخابی",
+TextareaProp		: "ويژگيهای ناحيه متنی",
+FormProp			: "ويژگيهای فرم",
+
+FontFormats			: "نرمال;فرمت شده;آدرس;سرنويس 1;سرنويس 2;سرنويس 3;سرنويس 4;سرنويس 5;سرنويس 6;بند;(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "پردازش XHTML. لطفا صبر کنيد...",
+Done				: "انجام شد",
+PasteWordConfirm	: "متنی که می خواهيد بچسبانيد به نظر از WORD کپی شده است. آيا مايليد قبل از چسباندن آنرا تميز کنيد؟ ",
+NotCompatiblePaste	: "اين فرمان برای مرورگر Internet Explorer از نگارش 5.5 يا بالاتر در دسترس است. آيا مايليد بدون تميز کردن متن را بچسبانيد؟",
+UnknownToolbarItem	: "فقره منوابزار ناشناخته \"%1\"",
+UnknownCommand		: "نام دستور ناشناخته \"%1\"",
+NotImplemented		: "دستور اجرا نشد",
+UnknownToolbarSet	: "مجموعه منوابزار \"%1\" وجود ندارد",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "تائيد",
+DlgBtnCancel		: "انصراف",
+DlgBtnClose			: "بستن",
+DlgBtnBrowseServer	: "فهرست نمايی سرور",
+DlgAdvancedTag		: "پيشرفته",
+DlgOpOther			: "&lt;غيره&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;تعين نشده&gt;",
+DlgGenId			: "کد",
+DlgGenLangDir		: "جهت نمای زبان",
+DlgGenLangDirLtr	: "چپ به راست (LTR)",
+DlgGenLangDirRtl	: "راست به چپ (RTL)",
+DlgGenLangCode		: "کد زبان",
+DlgGenAccessKey		: "کليد دستيابی",
+DlgGenName			: "نام",
+DlgGenTabIndex		: "انديس برگه",
+DlgGenLongDescr		: "URL توضيح طولانی",
+DlgGenClass			: "کلاسهای استايل شيت",
+DlgGenTitle			: "عنوان کمکی",
+DlgGenContType		: "نوع محتوی کمکی",
+DlgGenLinkCharset	: "مجموعه نويسه منبع لينک شده",
+DlgGenStyle			: "سبک",
+
+// Image Dialog
+DlgImgTitle			: "ويژگيهای تصوير",
+DlgImgInfoTab		: "اطلاعات تصوير",
+DlgImgBtnUpload		: "به سرور ارسال کن",
+DlgImgURL			: "URL",
+DlgImgUpload		: "انتقال به سرور",
+DlgImgAlt			: "متن جايگزين",
+DlgImgWidth			: "پهنا",
+DlgImgHeight		: "درازا",
+DlgImgLockRatio		: "قفل کردن نسبت",
+DlgBtnResetSize		: "بازنشانی اندازه",
+DlgImgBorder		: "لبه",
+DlgImgHSpace		: "فاصله افقی",
+DlgImgVSpace		: "فاصله عمودی",
+DlgImgAlign			: "چينش",
+DlgImgAlignLeft		: "چپ",
+DlgImgAlignAbsBottom: "پائين مطلق",
+DlgImgAlignAbsMiddle: "وسط مطلق",
+DlgImgAlignBaseline	: "خط پايه",
+DlgImgAlignBottom	: "پائين",
+DlgImgAlignMiddle	: "وسط",
+DlgImgAlignRight	: "راست",
+DlgImgAlignTextTop	: "متن بالا",
+DlgImgAlignTop		: "بالا",
+DlgImgPreview		: "پيش نمايش",
+DlgImgAlertUrl		: "لطفا URL تصوير را انتخاب کنيد",
+DlgImgLinkTab		: "لينک",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "لينک",
+DlgLnkInfoTab		: "اطلاعات لينک",
+DlgLnkTargetTab		: "مقصد",
+
+DlgLnkType			: "نوع لينک",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "پيوند در صفحه جاری",
+DlgLnkTypeEMail		: "پست الکترونيکی",
+DlgLnkProto			: "پروتکل",
+DlgLnkProtoOther	: "&lt;غيره&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "يک پيوند انتخاب کنيد",
+DlgLnkAnchorByName	: "با نام پيوند",
+DlgLnkAnchorById	: "با کد المان",
+DlgLnkNoAnchors		: "&lt;در اين سند پيوندی موجود نيست&gt;",
+DlgLnkEMail			: "آدرس پست الکترونيکی",
+DlgLnkEMailSubject	: "موضوع پيام",
+DlgLnkEMailBody		: "متن پيام",
+DlgLnkUpload		: "انتقال به سرور",
+DlgLnkBtnUpload		: "به سرور ارسال کن",
+
+DlgLnkTarget		: "مقصد",
+DlgLnkTargetFrame	: "&lt;فريم&gt;",
+DlgLnkTargetPopup	: "&lt;پنجره پاپاپ&gt;",
+DlgLnkTargetBlank	: "پنجره جديد (_blank)",
+DlgLnkTargetParent	: "پنجره والد (_parent)",
+DlgLnkTargetSelf	: "همان پنجره (_self)",
+DlgLnkTargetTop		: "بالاترين پنجره (_top)",
+DlgLnkTargetFrameName	: "نام فريم مقصد",
+DlgLnkPopWinName	: "نام پنجره پاپاپ",
+DlgLnkPopWinFeat	: "خصوصيات پنجره پاپاپ",
+DlgLnkPopResize		: "قابل تغيراندازه",
+DlgLnkPopLocation	: "نوار موقعيت",
+DlgLnkPopMenu		: "نوار منو",
+DlgLnkPopScroll		: "نوارهای طومار",
+DlgLnkPopStatus		: "نوار وضعيت",
+DlgLnkPopToolbar	: "نوارابزار",
+DlgLnkPopFullScrn	: "تمام صفحه (IE)",
+DlgLnkPopDependent	: "وابسته (Netscape)",
+DlgLnkPopWidth		: "پهنا",
+DlgLnkPopHeight		: "درازا",
+DlgLnkPopLeft		: "موقعيت چپ",
+DlgLnkPopTop		: "موقعيت بالا",
+
+DlnLnkMsgNoUrl		: "لطفا URL لينک را وارد کنيد",
+DlnLnkMsgNoEMail	: "لطفا آدرس ايميل را وارد کنيد",
+DlnLnkMsgNoAnchor	: "لطفا پيوندی انتخاب کنيد",
+
+// Color Dialog
+DlgColorTitle		: "انتخاب رنگ",
+DlgColorBtnClear	: "پاک کردن",
+DlgColorHighlight	: "هايلايت",
+DlgColorSelected	: "انتخاب شده",
+
+// Smiley Dialog
+DlgSmileyTitle		: "درج  خندانک",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "انتخاب شناسه های ويژه",
+
+// Table Dialog
+DlgTableTitle		: "ويژگيهای جدول",
+DlgTableRows		: "سطرها",
+DlgTableColumns		: "ستونها",
+DlgTableBorder		: "اندازه لبه",
+DlgTableAlign		: "چينش",
+DlgTableAlignNotSet	: "<تعين نشده>",
+DlgTableAlignLeft	: "چپ",
+DlgTableAlignCenter	: "وسط",
+DlgTableAlignRight	: "راست",
+DlgTableWidth		: "پهنا",
+DlgTableWidthPx		: "پيکسل",
+DlgTableWidthPc		: "درصد",
+DlgTableHeight		: "درازا",
+DlgTableCellSpace	: "فاصله ميان سلولها",
+DlgTableCellPad		: "فاصله پرشده در سلول",
+DlgTableCaption		: "عنوان",
+
+// Table Cell Dialog
+DlgCellTitle		: "ويژگيهای سلول",
+DlgCellWidth		: "پهنا",
+DlgCellWidthPx		: "پيکسل",
+DlgCellWidthPc		: "درصد",
+DlgCellHeight		: "درازا",
+DlgCellWordWrap		: "شکستن کلمات",
+DlgCellWordWrapNotSet	: "&lt;تعين نشده&gt;",
+DlgCellWordWrapYes	: "بله",
+DlgCellWordWrapNo	: "خير",
+DlgCellHorAlign		: "چينش افقی",
+DlgCellHorAlignNotSet	: "&lt;تعين نشده&gt;",
+DlgCellHorAlignLeft	: "چپ",
+DlgCellHorAlignCenter	: "وسط",
+DlgCellHorAlignRight: "راست",
+DlgCellVerAlign		: "چينش عمودی",
+DlgCellVerAlignNotSet	: "&lt;تعين نشده&gt;",
+DlgCellVerAlignTop	: "بالا",
+DlgCellVerAlignMiddle	: "ميان",
+DlgCellVerAlignBottom	: "پائين",
+DlgCellVerAlignBaseline	: "خط پايه",
+DlgCellRowSpan		: "گستردگی سطرها",
+DlgCellCollSpan		: "گستردگی ستونها",
+DlgCellBackColor	: "رنگ پس زمينه",
+DlgCellBorderColor	: "رنگ لبه",
+DlgCellBtnSelect	: "انتخاب کنيد...",
+
+// Find Dialog
+DlgFindTitle		: "يافتن",
+DlgFindFindBtn		: "يافتن",
+DlgFindNotFoundMsg	: "متن مورد نظر يافت نشد.",
+
+// Replace Dialog
+DlgReplaceTitle			: "جايگزينی",
+DlgReplaceFindLbl		: "چه چيز را می يابيد:",
+DlgReplaceReplaceLbl	: "جايگزينی با:",
+DlgReplaceCaseChk		: "انطباق قالب",
+DlgReplaceReplaceBtn	: "جايگزينی",
+DlgReplaceReplAllBtn	: "جايگزينی همه موارد",
+DlgReplaceWordChk		: "انطباق کلمه کامل",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "تنظيمات امنيتی مرورگر شما اجازه نمی دهد که ويرايشگر به طور خودکار عملکردهای چسباندن کلمات را انجام دهد. لطفا از کلمه کليدی مرتبط با اينکار را استفاده کنيد (Ctrl+V).",
+PasteErrorCut	: "تنظيمات امنيتی مرورگر شما اجازه نمی دهد که ويرايشگر به طور خودکار عملکردهای برش کلمات را انجام دهد. لطفا از کلمه کليدی مرتبط با اينکار را استفاده کنيد (Ctrl+X).",
+PasteErrorCopy	: "تنظيمات امنيتی مرورگر شما اجازه نمی دهد که ويرايشگر به طور خودکار عملکردهای کپی کردن کلمات را انجام دهد. لطفا از کلمه کليدی مرتبط با اينکار را استفاده کنيد (Ctrl+C).",
+
+PasteAsText		: "چسباندن به عنوان متن ساده",
+PasteFromWord	: "چسباندن از Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "خودکار",
+ColorMoreColors	: "رنگهای بيشتر...",
+
+// Document Properties
+DocProps		: "ويژگيهای سند",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ويژگيهای لنگر",
+DlgAnchorName		: "نام لنگر",
+DlgAnchorErrorName	: "لطفا نام لنگر را وارد کنيد",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "در واژه نامه موجود نيست",
+DlgSpellChangeTo		: "تغير به",
+DlgSpellBtnIgnore		: "چشم پوشی",
+DlgSpellBtnIgnoreAll	: "چشم پوشی همه",
+DlgSpellBtnReplace		: "جايگزينی",
+DlgSpellBtnReplaceAll	: "جايگزينی همه",
+DlgSpellBtnUndo			: "واچينش",
+DlgSpellNoSuggestions	: "- پيشنهادی نيست -",
+DlgSpellProgress		: "کنترل املا در حال انجام...",
+DlgSpellNoMispell		: "کنترل املا انجام شد. هيچ غلط املائی يافت نشد",
+DlgSpellNoChanges		: "کنترل املا انجام شد. هيچ کلمه ای تغير نيافت",
+DlgSpellOneChange		: "کنترل املا انجام شد. يک کلمه تغير يافت",
+DlgSpellManyChanges		: "کنترل املا انجام شد. %1 کلمه تغير يافت",
+
+IeSpellDownload			: "کنترل کننده املا نصب نشده است. آيا مايليد آنرا هم اکنون دريافت کنيد؟",
+
+// Button Dialog
+DlgButtonText	: "متن (مقدار)",
+DlgButtonType	: "نوع",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "نام",
+DlgCheckboxValue	: "مقدار",
+DlgCheckboxSelected	: "برگزيده",
+
+// Form Dialog
+DlgFormName		: "نام",
+DlgFormAction	: "اقدام",
+DlgFormMethod	: "متد",
+
+// Select Field Dialog
+DlgSelectName		: "نام",
+DlgSelectValue		: "مقدار",
+DlgSelectSize		: "اندازه",
+DlgSelectLines		: "خطوط",
+DlgSelectChkMulti	: "انتخاب چند گزينه ای مجاز",
+DlgSelectOpAvail	: "گزينه های موجود",
+DlgSelectOpText		: "متن",
+DlgSelectOpValue	: "مقدار",
+DlgSelectBtnAdd		: "اضافه",
+DlgSelectBtnModify	: "ويرايش",
+DlgSelectBtnUp		: "بالا",
+DlgSelectBtnDown	: "پائين",
+DlgSelectBtnSetValue : "تنظيم به عنوان مقدار برگزيده",
+DlgSelectBtnDelete	: "حذف",
+
+// Textarea Dialog
+DlgTextareaName	: "نام",
+DlgTextareaCols	: "ستونها",
+DlgTextareaRows	: "سطرها",
+
+// Text Field Dialog
+DlgTextName			: "نام",
+DlgTextValue		: "مقدار",
+DlgTextCharWidth	: "پهنای شناسه",
+DlgTextMaxChars		: "بيشينه شناسه",
+DlgTextType			: "نوع",
+DlgTextTypeText		: "متن",
+DlgTextTypePass		: "کلمه عبور",
+
+// Hidden Field Dialog
+DlgHiddenName	: "نام",
+DlgHiddenValue	: "مقدار",
+
+// Bulleted List Dialog
+BulletedListProp	: "ويژگيهای فهرست دکمه ای",
+NumberedListProp	: "ويژگيهای فهرست عددی",
+DlgLstType			: "نوع",
+DlgLstTypeCircle	: "دايره",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "مربع",
+DlgLstTypeNumbers	: "شماره ها (1، 2، 3)",
+DlgLstTypeLCase		: "حروف کوچک (a، b، c)",
+DlgLstTypeUCase		: "حروف بزرگ (A، B، C)",
+DlgLstTypeSRoman	: "ارقام يونانی کوچک (i، ii، iii)",
+DlgLstTypeLRoman	: "ارقام يونانی بزرگ (I، II، III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "عمومی",
+DlgDocBackTab		: "پس زمينه",
+DlgDocColorsTab		: "رنگها و حاشيه ها",
+DlgDocMetaTab		: "فراداده",
+
+DlgDocPageTitle		: "عنوان صفحه",
+DlgDocLangDir		: "جهت زبان",
+DlgDocLangDirLTR	: "چپ به راست (LTF(",
+DlgDocLangDirRTL	: "راست به چپ (RTL(",
+DlgDocLangCode		: "کد زبان",
+DlgDocCharSet		: "رمزگذاری نويسه",
+DlgDocCharSetOther	: "رمزگذاری نويسه های ديگر",
+
+DlgDocDocType		: "عنوان نوع سند",
+DlgDocDocTypeOther	: "عنوان نوع سند های ديگر",
+DlgDocIncXHTML		: "شامل تعاريف XHTML",
+DlgDocBgColor		: "رنگ پس زمينه",
+DlgDocBgImage		: "URL تصوير پس زمينه",
+DlgDocBgNoScroll	: "پس زمينه غير طوماری",
+DlgDocCText			: "متن",
+DlgDocCLink			: "لينک",
+DlgDocCVisited		: "لينک مشاهده شده",
+DlgDocCActive		: "لينک فعال",
+DlgDocMargins		: "حاشيه صفحه",
+DlgDocMaTop			: "رو",
+DlgDocMaLeft		: "چپ",
+DlgDocMaRight		: "راست",
+DlgDocMaBottom		: "زير",
+DlgDocMeIndex		: "کلمات کليدی انديس کردن سند (با کاما جدا شوند)",
+DlgDocMeDescr		: "سند",
+DlgDocMeAuthor		: "نويسنده",
+DlgDocMeCopy		: "کپی رايت",
+DlgDocPreview		: "پيش نمايش",
+
+// Templates Dialog
+Templates			: "الگوها",
+DlgTemplatesTitle	: "الگوهای محتويات",
+DlgTemplatesSelMsg	: "لطفا الگوی مورد نظر را برای باز کردن در ويرايشگر انتخاب نمائيد<br>(محتويات اصلی از دست خواهند رفت):",
+DlgTemplatesLoading	: "بارگذاری فهرست الگوها. لطفا صبر کنيد...",
+DlgTemplatesNoTpl	: "(الگوئی تعريف نشده است)",
+
+// About Dialog
+DlgAboutAboutTab	: "درباره",
+DlgAboutBrowserInfoTab	: "اطلاعات مرورگر",
+DlgAboutVersion		: "نگارش",
+DlgAboutLicense		: "ليسانس تحت توافقنامه GNU Lesser General Public License",
+DlgAboutInfo		: "برای اطلاعات بيشتر به آدرس زير برويد"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/fcklanguagemanager.js 1.4.0sr5-1/fckeditor/editor/lang/fcklanguagemanager.js
--- 1.3.11sr1/fckeditor/editor/lang/fcklanguagemanager.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/fcklanguagemanager.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,71 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcklanguagemanager.js
+ * 	This file list all available languages in the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKLanguageManager = new Object() ;
+
+FCKLanguageManager.AvailableLanguages = 
+{
+	'ar'		: 'Arabic',
+	'bg'		: 'Bulgarian',
+	'bs'		: 'Bosnian',
+	'ca'		: 'Catalan',
+	'cs'		: 'Czech',
+	'da'		: 'Danish',
+	'de'		: 'German',
+	'el'		: 'Greek',
+	'en'		: 'English',
+	'en-au'		: 'English (Australia)',
+	'en-uk'		: 'English (United Kingdom)',
+	'eo'		: 'Esperanto',
+	'es'		: 'Spanish',
+	'et'		: 'Estonian',
+	'eu'		: 'Basque',
+	'fa'		: 'Persian',
+	'fi'		: 'Finnish',
+	'fo'		: 'Faroese',
+	'fr'		: 'French',
+	'gl'		: 'Galician',
+	'he'		: 'Hebrew',
+	'hr'		: 'Croatian',
+	'hu'		: 'Hungarian',
+	'it'		: 'Italian',
+	'ja'		: 'Japanese',
+	'ko'		: 'Korean',
+	'lt'		: 'Lithuanian',
+	'mn'		: 'Mongolian',
+	'ms'		: 'Malay',
+	'nl'		: 'Dutch',
+	'no'		: 'Norwegian',
+	'pl'		: 'Polish',
+	'pt'		: 'Portuguese (Portugal)',
+	'pt-br'		: 'Portuguese (Brazil)',
+	'ro'		: 'Romanian',
+	'ru'		: 'Russian',
+	'sk'		: 'Slovak',
+	'sl'		: 'Slovenian',
+	'sr'		: 'Serbian (Cyrillic)',
+	'sr-latn'	: 'Serbian (Latin)',
+	'sv'		: 'Swedish',
+	'th'		: 'Thai',
+	'tr'		: 'Turkish',
+	'uk'		: 'Ukrainian',
+	'vi'		: 'Vietnamese',
+	'zh'		: 'Chinese Traditional',
+	'zh-cn'		: 'Chinese Simplified'
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/fi.js 1.4.0sr5-1/fckeditor/editor/lang/fi.js
--- 1.3.11sr1/fckeditor/editor/lang/fi.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/fi.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fi.js
+ * 	Finnish language file.
+ * 
+ * File Authors:
+ * 		Marko Korhonen (marko.korhonen@datafisher.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Piilota työkalurivi",
+ToolbarExpand		: "Näytä työkalurivi",
+
+// Toolbar Items and Context Menu
+Save				: "Tallenna",
+NewPage				: "Tyhjennä",
+Preview				: "Esikatsele",
+Cut					: "Leikkaa",
+Copy				: "Kopioi",
+Paste				: "Liitä",
+PasteText			: "Liitä tekstinä",
+PasteWord			: "Liitä Wordista",
+Print				: "Tulosta",
+SelectAll			: "Valitse kaikki",
+RemoveFormat		: "Poista muotoilu",
+InsertLinkLbl		: "Linkki",
+InsertLink			: "Lisää linkki/muokkaa linkkiä",
+RemoveLink			: "Poista linkki",
+Anchor				: "Lisää ankkuri/muokkaa ankkuria",
+InsertImageLbl		: "Kuva",
+InsertImage			: "Lisää kuva/muokkaa kuvaa",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Lisää/muokkaa Flashia",
+InsertTableLbl		: "Taulu",
+InsertTable			: "Lisää taulu/muokkaa taulua",
+InsertLineLbl		: "Murtoviiva",
+InsertLine			: "Lisää murtoviiva",
+InsertSpecialCharLbl: "Erikoismerkki",
+InsertSpecialChar	: "Lisää erikoismerkki",
+InsertSmileyLbl		: "Hymiö",
+InsertSmiley		: "Lisää hymiö",
+About				: "FCKeditorista",
+Bold				: "Lihavoitu",
+Italic				: "Kursivoitu",
+Underline			: "Alleviivattu",
+StrikeThrough		: "Yliviivattu",
+Subscript			: "Alaindeksi",
+Superscript			: "Yläindeksi",
+LeftJustify			: "Tasaa vasemmat reunat",
+CenterJustify		: "Keskitä",
+RightJustify		: "Tasaa oikeat reunat",
+BlockJustify		: "Tasaa molemmat reunat",
+DecreaseIndent		: "Pienennä sisennystä",
+IncreaseIndent		: "Suurenna sisennystä",
+Undo				: "Kumoa",
+Redo				: "Toista",
+NumberedListLbl		: "Numerointi",
+NumberedList		: "Lisää/poista numerointi",
+BulletedListLbl		: "Luottelomerkit",
+BulletedList		: "Lisää/poista luottelomerkit",
+ShowTableBorders	: "Näytä taulun rajat",
+ShowDetails			: "Näytä muotoilu",
+Style				: "Tyyli",
+FontFormat			: "Muotoilu",
+Font				: "Fontti",
+FontSize			: "Koko",
+TextColor			: "Tekstiväri",
+BGColor				: "Taustaväri",
+Source				: "Koodi",
+Find				: "Etsi",
+Replace				: "Korvaa",
+SpellCheck			: "Tarkista oikeinkirjoitus",
+UniversalKeyboard	: "Universaali näppäimistö",
+
+Form			: "Lomake",
+Checkbox		: "Valintaruutu",
+RadioButton		: "Radiopainike",
+TextField		: "Tekstikenttä",
+Textarea		: "Tekstilaatikko",
+HiddenField		: "Piilokenttä",
+Button			: "Painike",
+SelectionField	: "Valintakenttä",
+ImageButton		: "Kuvapainike",
+
+// Context Menu
+EditLink			: "Muokkaa linkkiä",
+InsertRow			: "Lisää rivi",
+DeleteRows			: "Poista rivit",
+InsertColumn		: "Lisää sarake",
+DeleteColumns		: "Poista sarakkeet",
+InsertCell			: "Lisää solu",
+DeleteCells			: "Poista solut",
+MergeCells			: "Yhdistä solut",
+SplitCell			: "Jaa solu",
+CellProperties		: "Solun ominaisuudet",
+TableProperties		: "Taulun ominaisuudet",
+ImageProperties		: "Kuvan ominaisuudet",
+FlashProperties		: "Flash ominaisuudet",
+
+AnchorProp			: "Ankkurin ominaisuudet",
+ButtonProp			: "Painikkeen ominaisuudet",
+CheckboxProp		: "Valintaruudun ominaisuudet",
+HiddenFieldProp		: "Piilokentän ominaisuudet",
+RadioButtonProp		: "Radiopainikkeen ominaisuudet",
+ImageButtonProp		: "Kuvapainikkeen ominaisuudet",
+TextFieldProp		: "Tekstikentän ominaisuudet",
+SelectionFieldProp	: "Valintakentän ominaisuudet",
+TextareaProp		: "Tekstilaatikon ominaisuudet",
+FormProp			: "Lomakkeen ominaisuudet",
+
+FontFormats			: "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Prosessoidaan XHTML:ää. Odota hetki...",
+Done				: "Valmis",
+PasteWordConfirm	: "Teksti, jonka haluat liittää, näyttää olevan kopioitu Wordista. Haluatko puhdistaa sen ennen liittämistä?",
+NotCompatiblePaste	: "Tämä komento toimii vain Internet Explorer 5.5:ssa tai uudemmassa. Haluatko liittää ilman puhdistusta?",
+UnknownToolbarItem	: "Tuntemanton työkalu \"%1\"",
+UnknownCommand		: "Tuntematon komento \"%1\"",
+NotImplemented		: "Komentoa ei ole liitetty sovellukseen",
+UnknownToolbarSet	: "Työkalukokonaisuus \"%1\" ei ole olemassa",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Peruuta",
+DlgBtnClose			: "Sulje",
+DlgBtnBrowseServer	: "Selaa palvelinta",
+DlgAdvancedTag		: "Lisäominaisuudet",
+DlgOpOther			: "Muut",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Lisää URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ei asetettu&gt;",
+DlgGenId			: "Tunniste",
+DlgGenLangDir		: "Kielen suunta",
+DlgGenLangDirLtr	: "Vasemmalta oikealle (LTR)",
+DlgGenLangDirRtl	: "Oikealta vasemmalle (RTL)",
+DlgGenLangCode		: "Kielikoodi",
+DlgGenAccessKey		: "Pikanäppäin",
+DlgGenName			: "Nimi",
+DlgGenTabIndex		: "Tabulaattori indeksi",
+DlgGenLongDescr		: "Pitkän kuvauksen URL",
+DlgGenClass			: "Tyyliluokat",
+DlgGenTitle			: "Avustava otsikko",
+DlgGenContType		: "Avustava sisällön tyyppi",
+DlgGenLinkCharset	: "Linkitetty kirjaimisto",
+DlgGenStyle			: "Tyyli",
+
+// Image Dialog
+DlgImgTitle			: "Kuvan ominaisuudet",
+DlgImgInfoTab		: "Kuvan tiedot",
+DlgImgBtnUpload		: "Lähetä palvelimelle",
+DlgImgURL			: "Osoite",
+DlgImgUpload		: "Lisää kuva",
+DlgImgAlt			: "Vaihtoehtoinen teksti",
+DlgImgWidth			: "Leveys",
+DlgImgHeight		: "Korkeus",
+DlgImgLockRatio		: "Lukitse suhteet",
+DlgBtnResetSize		: "Alkuperäinen koko",
+DlgImgBorder		: "Raja",
+DlgImgHSpace		: "Vaakatila",
+DlgImgVSpace		: "Pystytila",
+DlgImgAlign			: "Kohdistus",
+DlgImgAlignLeft		: "Vasemmalle",
+DlgImgAlignAbsBottom: "Aivan alas",
+DlgImgAlignAbsMiddle: "Aivan keskelle",
+DlgImgAlignBaseline	: "Alas (teksti)",
+DlgImgAlignBottom	: "Alas",
+DlgImgAlignMiddle	: "Keskelle",
+DlgImgAlignRight	: "Oikealle",
+DlgImgAlignTextTop	: "Ylös (teksti)",
+DlgImgAlignTop		: "Ylös",
+DlgImgPreview		: "Esikatselu",
+DlgImgAlertUrl		: "Kirjoita kuvan osoite (URL)",
+DlgImgLinkTab		: "Linkki",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash ominaisuudet",
+DlgFlashChkPlay		: "Automaattinen käynnistys",
+DlgFlashChkLoop		: "Toisto",
+DlgFlashChkMenu		: "Näytä Flash-valikko",
+DlgFlashScale		: "Levitä",
+DlgFlashScaleAll	: "Näytä kaikki",
+DlgFlashScaleNoBorder	: "Ei rajaa",
+DlgFlashScaleFit	: "Tarkka koko",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Linkki",
+DlgLnkInfoTab		: "Linkin tiedot",
+DlgLnkTargetTab		: "Kohde",
+
+DlgLnkType			: "Linkkityyppi",
+DlgLnkTypeURL		: "Osoite",
+DlgLnkTypeAnchor	: "Ankkuri tässä sivussa",
+DlgLnkTypeEMail		: "Sähköposti",
+DlgLnkProto			: "Protokolla",
+DlgLnkProtoOther	: "&lt;muu&gt;",
+DlgLnkURL			: "Osoite",
+DlgLnkAnchorSel		: "Valitse ankkuri",
+DlgLnkAnchorByName	: "Ankkurin nimen mukaan",
+DlgLnkAnchorById	: "Ankkurin ID:n mukaan",
+DlgLnkNoAnchors		: "&lt;Ei ankkureita tässä dokumentissa&gt;",
+DlgLnkEMail			: "Sähköpostiosoite",
+DlgLnkEMailSubject	: "Aihe",
+DlgLnkEMailBody		: "Viesti",
+DlgLnkUpload		: "Lisää tiedosto",
+DlgLnkBtnUpload		: "Lähetä palvelimelle",
+
+DlgLnkTarget		: "Kohde",
+DlgLnkTargetFrame	: "&lt;kehys&gt;",
+DlgLnkTargetPopup	: "&lt;popup ikkuna&gt;",
+DlgLnkTargetBlank	: "Uusi ikkuna (_blank)",
+DlgLnkTargetParent	: "Emoikkuna (_parent)",
+DlgLnkTargetSelf	: "Sama ikkuna (_self)",
+DlgLnkTargetTop		: "Päällimmäisin ikkuna (_top)",
+DlgLnkTargetFrameName	: "Kohdekehyksen nimi",
+DlgLnkPopWinName	: "Popup ikkunan nimi",
+DlgLnkPopWinFeat	: "Popup ikkunan ominaisuudet",
+DlgLnkPopResize		: "Venytettävä",
+DlgLnkPopLocation	: "Osoiterivi",
+DlgLnkPopMenu		: "Valikkorivi",
+DlgLnkPopScroll		: "Vierityspalkit",
+DlgLnkPopStatus		: "Tilarivi",
+DlgLnkPopToolbar	: "Vakiopainikkeet",
+DlgLnkPopFullScrn	: "Täysi ikkuna (IE)",
+DlgLnkPopDependent	: "Riippuva (Netscape)",
+DlgLnkPopWidth		: "Leveys",
+DlgLnkPopHeight		: "Korkeus",
+DlgLnkPopLeft		: "Vasemmalta (px)",
+DlgLnkPopTop		: "Ylhäältä (px)",
+
+DlnLnkMsgNoUrl		: "Linkille on kirjoitettava URL",
+DlnLnkMsgNoEMail	: "Kirjoita sähköpostiosoite",
+DlnLnkMsgNoAnchor	: "Valitse ankkuri",
+
+// Color Dialog
+DlgColorTitle		: "Valitse väri",
+DlgColorBtnClear	: "Tyhjennä",
+DlgColorHighlight	: "Kohdalla",
+DlgColorSelected	: "Valittu",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Lisää hymiö",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Valitse erikoismerkki",
+
+// Table Dialog
+DlgTableTitle		: "Taulun ominaisuudet",
+DlgTableRows		: "Rivit",
+DlgTableColumns		: "Sarakkeet",
+DlgTableBorder		: "Rajan paksuus",
+DlgTableAlign		: "Kohdistus",
+DlgTableAlignNotSet	: "<ei asetettu>",
+DlgTableAlignLeft	: "Vasemmalle",
+DlgTableAlignCenter	: "Keskelle",
+DlgTableAlignRight	: "Oikealle",
+DlgTableWidth		: "Leveys",
+DlgTableWidthPx		: "pikseliä",
+DlgTableWidthPc		: "prosenttia",
+DlgTableHeight		: "Korkeus",
+DlgTableCellSpace	: "Solujen väli",
+DlgTableCellPad		: "Solujen sisennys",
+DlgTableCaption		: "Otsikko",
+
+// Table Cell Dialog
+DlgCellTitle		: "Solun ominaisuudet",
+DlgCellWidth		: "Leveys",
+DlgCellWidthPx		: "pikseliä",
+DlgCellWidthPc		: "prosenttia",
+DlgCellHeight		: "Korkeus",
+DlgCellWordWrap		: "Tekstikierrätys",
+DlgCellWordWrapNotSet	: "<Ei asetettu>",
+DlgCellWordWrapYes	: "Kyllä",
+DlgCellWordWrapNo	: "Ei",
+DlgCellHorAlign		: "Vaakakohdistus",
+DlgCellHorAlignNotSet	: "<Ei asetettu>",
+DlgCellHorAlignLeft	: "Vasemmalle",
+DlgCellHorAlignCenter	: "Keskelle",
+DlgCellHorAlignRight: "Oikealle",
+DlgCellVerAlign		: "Pystykohdistus",
+DlgCellVerAlignNotSet	: "<Ei asetettu>",
+DlgCellVerAlignTop	: "Ylös",
+DlgCellVerAlignMiddle	: "Keskelle",
+DlgCellVerAlignBottom	: "Alas",
+DlgCellVerAlignBaseline	: "Tekstin alas",
+DlgCellRowSpan		: "Rivin jatkuvuus",
+DlgCellCollSpan		: "Sarakkeen jatkuvuus",
+DlgCellBackColor	: "Taustaväri",
+DlgCellBorderColor	: "Rajan väri",
+DlgCellBtnSelect	: "Valitse...",
+
+// Find Dialog
+DlgFindTitle		: "Etsi",
+DlgFindFindBtn		: "Etsi",
+DlgFindNotFoundMsg	: "Etsittyä tekstiä ei löytynyt.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Korvaa",
+DlgReplaceFindLbl		: "Etsi mitä:",
+DlgReplaceReplaceLbl	: "Korvaa tällä:",
+DlgReplaceCaseChk		: "Sama kirjainkoko",
+DlgReplaceReplaceBtn	: "Korvaa",
+DlgReplaceReplAllBtn	: "Korvaa kaikki",
+DlgReplaceWordChk		: "Koko sana",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa liittämistä. Käytä näppäimistöä liittämiseen (Ctrl+V).",
+PasteErrorCut	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).",
+PasteErrorCopy	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).",
+
+PasteAsText		: "Liitä tekstinä",
+PasteFromWord	: "Liitä Wordista",
+
+DlgPasteMsg2	: "Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Jätä huomioimatta fonttimääritykset",
+DlgPasteRemoveStyles	: "Poista tyylimääritykset",
+DlgPasteCleanBox		: "Tyhjennä",
+
+
+// Color Picker
+ColorAutomatic	: "Automaattinen",
+ColorMoreColors	: "Lisää värejä...",
+
+// Document Properties
+DocProps		: "Dokumentin ominaisuudet",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankkurin ominaisuudet",
+DlgAnchorName		: "Nimi",
+DlgAnchorErrorName	: "Ankkurille on kirjoitettava nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ei sanakirjassa",
+DlgSpellChangeTo		: "Vaihda",
+DlgSpellBtnIgnore		: "Jätä huomioimatta",
+DlgSpellBtnIgnoreAll	: "Jätä kaikki huomioimatta",
+DlgSpellBtnReplace		: "Korvaa",
+DlgSpellBtnReplaceAll	: "Korvaa kaikki",
+DlgSpellBtnUndo			: "Kumoa",
+DlgSpellNoSuggestions	: "Ei ehdotuksia",
+DlgSpellProgress		: "Tarkistus käynnissä...",
+DlgSpellNoMispell		: "Tarkistus valmis: Ei virheitä",
+DlgSpellNoChanges		: "Tarkistus valmis: Yhtään sanaa ei muutettu",
+DlgSpellOneChange		: "Tarkistus valmis: Yksi sana muutettiin",
+DlgSpellManyChanges		: "Tarkistus valmis: %1 sanaa muutettiin",
+
+IeSpellDownload			: "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?",
+
+// Button Dialog
+DlgButtonText	: "Teksti (arvo)",
+DlgButtonType	: "Tyyppi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nimi",
+DlgCheckboxValue	: "Arvo",
+DlgCheckboxSelected	: "Valittu",
+
+// Form Dialog
+DlgFormName		: "Nimi",
+DlgFormAction	: "Toiminto",
+DlgFormMethod	: "Tapa",
+
+// Select Field Dialog
+DlgSelectName		: "Nimi",
+DlgSelectValue		: "Arvo",
+DlgSelectSize		: "Koko",
+DlgSelectLines		: "Rivit",
+DlgSelectChkMulti	: "Salli usea valinta",
+DlgSelectOpAvail	: "Ominaisuudet",
+DlgSelectOpText		: "Teksti",
+DlgSelectOpValue	: "Arvo",
+DlgSelectBtnAdd		: "Lisää",
+DlgSelectBtnModify	: "Muuta",
+DlgSelectBtnUp		: "Ylös",
+DlgSelectBtnDown	: "Alas",
+DlgSelectBtnSetValue : "Aseta valituksi",
+DlgSelectBtnDelete	: "Poista",
+
+// Textarea Dialog
+DlgTextareaName	: "Nimi",
+DlgTextareaCols	: "Sarakkeita",
+DlgTextareaRows	: "Rivejä",
+
+// Text Field Dialog
+DlgTextName			: "Nimi",
+DlgTextValue		: "Arvo",
+DlgTextCharWidth	: "Leveys",
+DlgTextMaxChars		: "Maksimi merkkimäärä",
+DlgTextType			: "Tyyppi",
+DlgTextTypeText		: "Teksti",
+DlgTextTypePass		: "Salasana",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nimi",
+DlgHiddenValue	: "Arvo",
+
+// Bulleted List Dialog
+BulletedListProp	: "Luettelon ominaisuudet",
+NumberedListProp	: "Numeroinnin ominaisuudet",
+DlgLstType			: "Tyyppi",
+DlgLstTypeCircle	: "Kehä",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Neliö",
+DlgLstTypeNumbers	: "Numerot (1, 2, 3)",
+DlgLstTypeLCase		: "Pienet kirjaimet (a, b, c)",
+DlgLstTypeUCase		: "Isot kirjaimet (A, B, C)",
+DlgLstTypeSRoman	: "Pienet roomalaiset numerot (i, ii, iii)",
+DlgLstTypeLRoman	: "Isot roomalaiset numerot (Ii, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Yleiset",
+DlgDocBackTab		: "Tausta",
+DlgDocColorsTab		: "Värit ja marginaalit",
+DlgDocMetaTab		: "Meta-tieto",
+
+DlgDocPageTitle		: "Sivun nimi",
+DlgDocLangDir		: "Kielen suunta",
+DlgDocLangDirLTR	: "Vasemmalta oikealle (LTR)",
+DlgDocLangDirRTL	: "Oikealta vasemmalle (RTL)",
+DlgDocLangCode		: "Kielikoodi",
+DlgDocCharSet		: "Merkistäkoodaus",
+DlgDocCharSetOther	: "Muu merkistäkoodaus",
+
+DlgDocDocType		: "Dokumentin tyyppi",
+DlgDocDocTypeOther	: "Muu dokumentin tyyppi",
+DlgDocIncXHTML		: "Lisää XHTML julistukset",
+DlgDocBgColor		: "Taustaväri",
+DlgDocBgImage		: "Taustakuva",
+DlgDocBgNoScroll	: "Paikallaanpysyvä tausta",
+DlgDocCText			: "Teksti",
+DlgDocCLink			: "Linkki",
+DlgDocCVisited		: "Vierailtu linkki",
+DlgDocCActive		: "Aktiivinen linkki",
+DlgDocMargins		: "Sivun marginaalit",
+DlgDocMaTop			: "Ylä",
+DlgDocMaLeft		: "Vasen",
+DlgDocMaRight		: "Oikea",
+DlgDocMaBottom		: "Ala",
+DlgDocMeIndex		: "Hakusanat (pilkulla erotettuna)",
+DlgDocMeDescr		: "Kuvaus",
+DlgDocMeAuthor		: "Tekijä",
+DlgDocMeCopy		: "Tekijänoikeudet",
+DlgDocPreview		: "Esikatselu",
+
+// Templates Dialog
+Templates			: "Pohjat",
+DlgTemplatesTitle	: "Sisältöpohjat",
+DlgTemplatesSelMsg	: "Valitse pohja editoriin<br>(aiempi sisältö menetetään):",
+DlgTemplatesLoading	: "Ladataan listaa pohjista. Hetkinen...",
+DlgTemplatesNoTpl	: "(Ei määriteltyjä pohjia)",
+
+// About Dialog
+DlgAboutAboutTab	: "Editorista",
+DlgAboutBrowserInfoTab	: "Selaimen tiedot",
+DlgAboutVersion		: "versio",
+DlgAboutLicense		: "Lisenssi: GNU Lesser General Public License",
+DlgAboutInfo		: "Lisää tietoa osoitteesta"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/fo.js 1.4.0sr5-1/fckeditor/editor/lang/fo.js
--- 1.3.11sr1/fckeditor/editor/lang/fo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/fo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fo.js
+ * 	Faroese language file.
+ * 
+ * File Authors:
+ * 		Símin Lassaberg
+ * 		Helgi Arnthorsson
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Goym amboðalistan",
+ToolbarExpand		: "Vís amboðalistan",
+
+// Toolbar Items and Context Menu
+Save				: "Geim",
+NewPage				: "Nýggj síða",
+Preview				: "Vís dømi",
+Cut					: "Klipp",
+Copy				: "Avrita",
+Paste				: "Set inn",
+PasteText			: "Set inn sum reinan tekst",
+PasteWord			: "Set inn frá Word",
+Print				: "Prenta",
+SelectAll			: "Markera alt",
+RemoveFormat		: "Sletta sniðgeving",
+InsertLinkLbl		: "Leinkja",
+InsertLink			: "Seta inn/Broyta Leinkju",
+RemoveLink			: "Sletta Leinkju",
+Anchor				: "Seta inn/Broyta staðsetingarmerki",
+InsertImageLbl		: "Seta inn mynd",
+InsertImage			: "Seta inn/Broyta mynd",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Talva",
+InsertTable			: "Seta inn/Broyta talvu",
+InsertLineLbl		: "Linja",
+InsertLine			: "Seta inn vatnrætta linju",
+InsertSpecialCharLbl: "Serlig tekn",
+InsertSpecialChar	: "Seta inn serligt tekn",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Seta inn Smiley",
+About				: "Um FCKeditor",
+Bold				: "Feit",
+Italic				: "Skástillað",
+Underline			: "Undirstrikað",
+StrikeThrough		: "Strikað yvir",
+Subscript			: "Lækkað skrift",
+Superscript			: "Hækkað skrift",
+LeftJustify			: "Vinstristillað",
+CenterJustify		: "Miðstillað",
+RightJustify		: "Hægristillað",
+BlockJustify		: "Beinir tekstkantar",
+DecreaseIndent		: "Økja innrykk",
+IncreaseIndent		: "Minka innrykk",
+Undo				: "Angra",
+Redo				: "Broyt aftur í upprunamynd",
+NumberedListLbl		: "Talsettur listi",
+NumberedList		: "Seta inn/Sletta talsettan lista",
+BulletedListLbl		: "Punktsettur listi",
+BulletedList		: "Seta inn/Sletta punktsettan lista",
+ShowTableBorders	: "Vísa talvukantar ",
+ShowDetails			: "Vísa detaljur",
+Style				: "Tekstsnið",
+FontFormat			: "Sniðgeving",
+Font				: "Skrift",
+FontSize			: "Skriftstødd",
+TextColor			: "Tekstlitur",
+BGColor				: "Litur aftanfyri",
+Source				: "Kelda",
+Find				: "Leita",
+Replace				: "Set í staðin",
+SpellCheck			: "Stavseting",
+UniversalKeyboard	: "Universalt Tastatur",
+
+Form			: "Seta inn Form",
+Checkbox		: "Seta inn Avmerkingarboks",
+RadioButton		: "Seta inn Radioknap",
+TextField		: "Seta inn Tekstteig",
+Textarea		: "Seta inn Tekstøki",
+HiddenField		: "Seta inn GoymdanTeig",
+Button			: "Seta inn knapp",
+SelectionField	: "Seta inn Valteig",
+ImageButton		: "Seta inn Myndaknapp",
+
+// Context Menu
+EditLink			: "Broyt leinkju",
+InsertRow			: "Seta inn rekkju",
+DeleteRows			: "Sletta rekkjur",
+InsertColumn		: "Seta inn søjlur",
+DeleteColumns		: "Sletta søjlur",
+InsertCell			: "Seta inn sellu",
+DeleteCells			: "Sletta sellu",
+MergeCells			: "Flætta sellur",
+SplitCell			: "Deila sellur",
+CellProperties		: "Eginleikar fyri sellu",
+TableProperties		: "Eginleikar fyri talvu",
+ImageProperties		: "Eginleikar fyri mynd",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Eginleikar fyri staðsetingarpunkt",
+ButtonProp			: "Eginleikar fyri knapp",
+CheckboxProp		: "Eginleikar fyri avmerkingarboks",
+HiddenFieldProp		: "Eginleikar fyri goymdan teig",
+RadioButtonProp		: "Eginleikar fyri radioknapp",
+ImageButtonProp		: "Eginleikar fyri myndaknapp",
+TextFieldProp		: "Eginleikar fyri Tekstateig",
+SelectionFieldProp	: "Eginleikar fyri Valteig",
+TextareaProp		: "Eginleikar fyri Tekstaøki",
+FormProp			: "Eginleikar fyri form",
+
+FontFormats			: "Normalt;Sniðgevið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Viðgerir XHTML. Bíða...",
+Done				: "Liðugt",
+PasteWordConfirm	: "Teksturin, tú roynir at seta inn, sýnist at vera frá Word. Vilt tú reinsa tekstin, áðrenn hann verður settur inn?",
+NotCompatiblePaste	: "Hesin ordri er tøkur í Internet Explorer 5.5 og nýggjari. Vilt tú seta tekstin inn, uttan at reinsa hann?",
+UnknownToolbarItem	: "Ókendur lutur í amboðalinju \"%1\"",
+UnknownCommand		: "Kenni ikki ordra \"%1\"",
+NotImplemented		: "Ordrin er ikki gjørdur virkin",
+UnknownToolbarSet	: "Amboðalinjan \"%1\" finst ikki",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Angra",
+DlgBtnClose			: "Lukka",
+DlgBtnBrowseServer	: "Hyggja á servara",
+DlgAdvancedTag		: "Útvíðka",
+DlgOpOther			: "&lt;Annað&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ikki sett&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Tekstakós",
+DlgGenLangDirLtr	: "Vinstri móti høgri (LTR)",
+DlgGenLangDirRtl	: "Høgri móti vinstri (RTL)",
+DlgGenLangCode		: "Málkoda",
+DlgGenAccessKey		: "Atgongdslykil",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tabulator Indeks",
+DlgGenLongDescr		: "víðka frágreiðing",
+DlgGenClass			: "Typografiark",
+DlgGenTitle			: "Heiti",
+DlgGenContType		: "Innihaldsslag",
+DlgGenLinkCharset	: "Teknset",
+DlgGenStyle			: "Prentlist",
+
+// Image Dialog
+DlgImgTitle			: "Mynd eginleikar",
+DlgImgInfoTab		: "Mynd info",
+DlgImgBtnUpload		: "Send til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Annar tekstur",
+DlgImgWidth			: "Breidd",
+DlgImgHeight		: "Hædd",
+DlgImgLockRatio		: "Læs støddarlutfall",
+DlgBtnResetSize		: "Nulstilla stødd",
+DlgImgBorder		: "Ramma",
+DlgImgHSpace		: "HMargin",
+DlgImgVSpace		: "VMargin",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Vinstra",
+DlgImgAlignAbsBottom: "Abs botnur",
+DlgImgAlignAbsMiddle: "Abs Miðja",
+DlgImgAlignBaseline	: "Botnlinja",
+DlgImgAlignBottom	: "Botnur",
+DlgImgAlignMiddle	: "Miðja",
+DlgImgAlignRight	: "Høgra",
+DlgImgAlignTextTop	: "Tekstur ovast",
+DlgImgAlignTop		: "Ovast",
+DlgImgPreview		: "Vís dømi",
+DlgImgAlertUrl		: "Slá inn slóðina til myndina",
+DlgImgLinkTab		: "Leinkja",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Leinkja",
+DlgLnkInfoTab		: "Leinkju info",
+DlgLnkTargetTab		: "Mál",
+
+DlgLnkType			: "Leinkju slag",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Akker á hesari síðuni",
+DlgLnkTypeEMail		: "Teldupostur",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "&lt;onnur&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "VEl eitt akker",
+DlgLnkAnchorByName	: "Eftir akker navni",
+DlgLnkAnchorById	: "Eftir element Id",
+DlgLnkNoAnchors		: "&lt;Tað eru ongi akker tøk í hesum dokumentinum;",
+DlgLnkEMail			: "Teldupost Adresse",
+DlgLnkEMailSubject	: "Evni",
+DlgLnkEMailBody		: "Boð",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send til servaran",
+
+DlgLnkTarget		: "Mál",
+DlgLnkTargetFrame	: "&lt;ramma&gt;",
+DlgLnkTargetPopup	: "&lt;popup vindeyga&gt;",
+DlgLnkTargetBlank	: "Nytt vindeyga (_blank)",
+DlgLnkTargetParent	: "Omaná liggjandi vindeyga (_parent)",
+DlgLnkTargetSelf	: "Sama vindeyga (_self)",
+DlgLnkTargetTop		: "ovasta vindeyga (_top)",
+DlgLnkTargetFrameName	: "vísa vindeygas navn",
+DlgLnkPopWinName	: "Popup vindeygas navn",
+DlgLnkPopWinFeat	: "Popup vindeygas eginleikar",
+DlgLnkPopResize		: "Skalering",
+DlgLnkPopLocation	: "Lokationslinja",
+DlgLnkPopMenu		: "Menulinja",
+DlgLnkPopScroll		: "Scrollbars",
+DlgLnkPopStatus		: "Statuslinja",
+DlgLnkPopToolbar	: "Værktøjslinja",
+DlgLnkPopFullScrn	: "Fullur skermur (IE)",
+DlgLnkPopDependent	: "Bundin (Netscape)",
+DlgLnkPopWidth		: "Breidd",
+DlgLnkPopHeight		: "Hædd",
+DlgLnkPopLeft		: "Positión frá vinstru",
+DlgLnkPopTop		: "Positión frá toppinum",
+
+DlnLnkMsgNoUrl		: "Inntasta leinkju URL",
+DlnLnkMsgNoEMail	: "Inntasta teldupost addressuna",
+DlnLnkMsgNoAnchor	: "Vel akker",
+
+// Color Dialog
+DlgColorTitle		: "vel farvu",
+DlgColorBtnClear	: "sletta alt",
+DlgColorHighlight	: "Markera",
+DlgColorSelected	: "valt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Innset ein smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "vel specialkarakter",
+
+// Table Dialog
+DlgTableTitle		: "Tabel eginleikar",
+DlgTableRows		: "Rekkjur",
+DlgTableColumns		: "Kolonnur",
+DlgTableBorder		: "Rammu stødd",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikki sett>",
+DlgTableAlignLeft	: "Vinstrastilla",
+DlgTableAlignCenter	: "Miðseta",
+DlgTableAlignRight	: "Høgrastilla",
+DlgTableWidth		: "Breidd",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Hædd",
+DlgTableCellSpace	: "Fjarstøða millum sellur",
+DlgTableCellPad		: "Sellu breddi",
+DlgTableCaption		: "Heiti",
+
+// Table Cell Dialog
+DlgCellTitle		: "Sellu eginleikar",
+DlgCellWidth		: "Breidd",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Hædd",
+DlgCellWordWrap		: "Orðbýti",
+DlgCellWordWrapNotSet	: "<Ikki sett>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke sat>",
+DlgCellHorAlignLeft	: "Vinstrastilla",
+DlgCellHorAlignCenter	: "Miðsett",
+DlgCellHorAlignRight: "Høgrastilla",
+DlgCellVerAlign		: "Lodrøtt Justering",
+DlgCellVerAlignNotSet	: "<Ikki sett>",
+DlgCellVerAlignTop	: "Ovast",
+DlgCellVerAlignMiddle	: "Miðja",
+DlgCellVerAlignBottom	: "Niðast",
+DlgCellVerAlignBaseline	: "Botnlinja",
+DlgCellRowSpan		: "Tal av rekkjum sellan spennur yvir",
+DlgCellCollSpan		: "Tal av talrøðum sellan spennur yvir",
+DlgCellBackColor	: "Bakgrundsfarva",
+DlgCellBorderColor	: "rammufarva",
+DlgCellBtnSelect	: "Vel...",
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Teksturin bleiv ikki funnin",
+
+// Replace Dialog
+DlgReplaceTitle			: "Set í staðin",
+DlgReplaceFindLbl		: "Finn:",
+DlgReplaceReplaceLbl	: "Set í staðin við:",
+DlgReplaceCaseChk		: "Munur á stórum og smáðum stavum",
+DlgReplaceReplaceBtn	: "Set í staðin",
+DlgReplaceReplAllBtn	: "Skift alt út",
+DlgReplaceWordChk		: "Bert heil orð",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Leitarans trygdarinstillingar loyva ikki editorinum at innseta tekstin automatiskt. Brúka knappaborðið til at innseta tekstin (Ctrl+V).",
+PasteErrorCut	: "Leitarans trygdarinstillingar loyva ikki editorinum at klippa tekstin automatiskt. Brúka í staðin knappaborðið til at klippa tekstin (Ctrl+X).",
+PasteErrorCopy	: "Leitarans trygdarinstillingar loyva ikki editorinum at avrita tekstin automatiskt. Brúka í staðin knappaborðið til at avrita tekstin (Ctrl+V).",
+
+PasteAsText		: "Seta inn som reinur tekstur",
+PasteFromWord	: "Seta inn fra Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Fleiri farvur...",
+
+// Document Properties
+DocProps		: "Dokument eginleikar",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Akker eginleikar",
+DlgAnchorName		: "Akker navn",
+DlgAnchorErrorName	: "Slá innn akker navn",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Finnst ikki í orðabókini",
+DlgSpellChangeTo		: "broyta til",
+DlgSpellBtnIgnore		: "Ignorera",
+DlgSpellBtnIgnoreAll	: "Ignorera alt",
+DlgSpellBtnReplace		: "Skift út",
+DlgSpellBtnReplaceAll	: "Skift út alt",
+DlgSpellBtnUndo			: "Aftur",
+DlgSpellNoSuggestions	: "- Einki uppskot -",
+DlgSpellProgress		: "Stavarin arbeiðir...",
+DlgSpellNoMispell		: "Stavarain liðugur: Eingin feilur funnin",
+DlgSpellNoChanges		: "Stavarain liðugur: Einki orð broytt",
+DlgSpellOneChange		: "Stavarain liðugur: Eitt orð broytt",
+DlgSpellManyChanges		: "Stavarain liðugur: %1 orð broytt",
+
+IeSpellDownload			: "Stavarin ikki lagdur inn. vilt tú heinta hann nú?",
+
+// Button Dialog
+DlgButtonText	: "Tekstur (Virði)",
+DlgButtonType	: "Slag",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Virði",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Gerð",
+DlgFormMethod	: "Háttur",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Virði",
+DlgSelectSize		: "Stødd",
+DlgSelectLines		: "linjir",
+DlgSelectChkMulti	: "Loyv fleiri valmøguleikar",
+DlgSelectOpAvail	: "valmøguleikar",
+DlgSelectOpText		: "Tekstur",
+DlgSelectOpValue	: "Virði",
+DlgSelectBtnAdd		: "Legg afturat",
+DlgSelectBtnModify	: "Broyt",
+DlgSelectBtnUp		: "Upp",
+DlgSelectBtnDown	: "Niður",
+DlgSelectBtnSetValue : "Set sum útvald",
+DlgSelectBtnDelete	: "Sletta",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "talrøð",
+DlgTextareaRows	: "Rekkja",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "Virði",
+DlgTextCharWidth	: "Sjónligt tal av bókstavum",
+DlgTextMaxChars		: "Hægst loyvda tal av bókstavum",
+DlgTextType			: "Slag",
+DlgTextTypeText		: "Tekstur",
+DlgTextTypePass		: "Koduorð",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Virði",
+
+// Bulleted List Dialog
+BulletedListProp	: "Punktteknsuppsetingar eginleikar",
+NumberedListProp	: "Taluppsetingar eginleikar",
+DlgLstType			: "Slag",
+DlgLstTypeCircle	: "Sirkul",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Fýrakantur",
+DlgLstTypeNumbers	: "Talmerkt (1, 2, 3)",
+DlgLstTypeLCase		: "Smáir bókstavir (a, b, c)",
+DlgLstTypeUCase		: "Stórir bókstavir (A, B, C)",
+DlgLstTypeSRoman	: "Smá rómaratøl (i, ii, iii)",
+DlgLstTypeLRoman	: "Stór rómaratøl (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generelt",
+DlgDocBackTab		: "Bakgrund",
+DlgDocColorsTab		: "Farva og Breddin",
+DlgDocMetaTab		: "Meta Information",
+
+DlgDocPageTitle		: "Síðu heiti",
+DlgDocLangDir		: "Mál",
+DlgDocLangDirLTR	: "Frá vinstru móti høgru (LTR)",
+DlgDocLangDirRTL	: "Frá høgru móti vinstru (RTL)",
+DlgDocLangCode		: "Landakoda",
+DlgDocCharSet		: "Karakter set kodu",
+DlgDocCharSetOther	: "Annar karakter set kodu",
+
+DlgDocDocType		: "Dokument slag kategori",
+DlgDocDocTypeOther	: "Annað dokument slag kategori",
+DlgDocIncXHTML		: "Inkludere XHTML deklartion",
+DlgDocBgColor		: "Bakgrundsfarva",
+DlgDocBgImage		: "Bakgrundsmynd URL",
+DlgDocBgNoScroll	: "Ikki scrollbar bakgrund",
+DlgDocCText			: "Tekstur",
+DlgDocCLink			: "Leinkja",
+DlgDocCVisited		: "Vitja leinkja",
+DlgDocCActive		: "Aktiv leinkja",
+DlgDocMargins		: "Síðu breddi",
+DlgDocMaTop			: "Ovast",
+DlgDocMaLeft		: "Vinstra",
+DlgDocMaRight		: "Høgra",
+DlgDocMaBottom		: "Niðast",
+DlgDocMeIndex		: "Dokument index lyklaorð (komma sundurskilt)",
+DlgDocMeDescr		: "Dokument lýsing",
+DlgDocMeAuthor		: "Høvundur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vís",
+
+// Templates Dialog
+Templates			: "Frymlar",
+DlgTemplatesTitle	: "Innihaldsfrymlar",
+DlgTemplatesSelMsg	: "Vel tann frymilin, sum skal opnast í editorinum<br>(Tað verður skriva útyvir núverandi innihald):",
+DlgTemplatesLoading	: "Heintar lista yvir frymlar. Vinarliga bíða...",
+DlgTemplatesNoTpl	: "(Ongin frymil er valdur)",
+
+// About Dialog
+DlgAboutAboutTab	: "Um",
+DlgAboutBrowserInfoTab	: "Browsara upplýsingar",
+DlgAboutVersion		: "versión",
+DlgAboutLicense		: "Loyvi undir treytum fyri GNU Lesser General Public License",
+DlgAboutInfo		: "Fleiri upplýsingar, far til"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/fr.js 1.4.0sr5-1/fckeditor/editor/lang/fr.js
--- 1.3.11sr1/fckeditor/editor/lang/fr.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/fr.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fr.js
+ * 	French language file.
+ * 
+ * File Authors:
+ * 		Hubert Garrido (liane@users.sourceforge.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Masquer Outils",
+ToolbarExpand		: "Afficher Outils",
+
+// Toolbar Items and Context Menu
+Save				: "Enregistrer",
+NewPage				: "Nouvelle Page",
+Preview				: "Prévisualisation",
+Cut					: "Couper",
+Copy				: "Copier",
+Paste				: "Coller",
+PasteText			: "Coller comme texte",
+PasteWord			: "Coller de Word",
+Print				: "Imprimer",
+SelectAll			: "Tout sélectionner",
+RemoveFormat		: "Supprimer Format",
+InsertLinkLbl		: "Lien",
+InsertLink			: "Insérer/Modifier Lien",
+RemoveLink			: "Supprimer Lien",
+Anchor				: "Insérer/Modifier Ancre",
+InsertImageLbl		: "Image",
+InsertImage			: "Insérer/Modifier Image",
+InsertFlashLbl		: "Animation Flash",
+InsertFlash			: "Insérer/Modifier Animation Flash",
+InsertTableLbl		: "Tableau",
+InsertTable			: "Insérer/Modifier Tableau",
+InsertLineLbl		: "Séparateur",
+InsertLine			: "Insérer Séparateur",
+InsertSpecialCharLbl: "Caractère Spécial",
+InsertSpecialChar	: "Insérer Caractère Spécial",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insérer Smiley",
+About				: "A propos de FCKeditor",
+Bold				: "Gras",
+Italic				: "Italique",
+Underline			: "Souligné",
+StrikeThrough		: "Barré",
+Subscript			: "Indice",
+Superscript			: "Exposant",
+LeftJustify			: "Aligné à Gauche",
+CenterJustify		: "Centré",
+RightJustify		: "Aligné à Droite",
+BlockJustify		: "Texte Justifié",
+DecreaseIndent		: "Diminuer le Retrait",
+IncreaseIndent		: "Augmenter le Retrait",
+Undo				: "Annuler",
+Redo				: "Refaire",
+NumberedListLbl		: "Liste Numérotée",
+NumberedList		: "Insérer/Supprimer Liste Numérotée",
+BulletedListLbl		: "Liste à puces",
+BulletedList		: "Insérer/Supprimer Liste à puces",
+ShowTableBorders	: "Afficher Bordures de Tableau",
+ShowDetails			: "Afficher Caractères Invisibles",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Police",
+FontSize			: "Taille",
+TextColor			: "Couleur de Caractère",
+BGColor				: "Couleur de Fond",
+Source				: "Source",
+Find				: "Chercher",
+Replace				: "Remplacer",
+SpellCheck			: "Orthographe",
+UniversalKeyboard	: "Clavier Universel",
+
+Form			: "Formulaire",
+Checkbox		: "Case à cocher",
+RadioButton		: "Bouton Radio",
+TextField		: "Champ Texte",
+Textarea		: "Zone Texte",
+HiddenField		: "Champ caché",
+Button			: "Bouton",
+SelectionField	: "Liste/Menu",
+ImageButton		: "Bouton Image",
+
+// Context Menu
+EditLink			: "Modifier Lien",
+InsertRow			: "Insérer une Ligne",
+DeleteRows			: "Supprimer des Lignes",
+InsertColumn		: "Insérer une Colonne",
+DeleteColumns		: "Supprimer des Colonnes",
+InsertCell			: "Insérer une Cellule",
+DeleteCells			: "Supprimer des Cellules",
+MergeCells			: "Fusionner les Cellules",
+SplitCell			: "Scinder les Cellules",
+CellProperties		: "Propriétés de Cellule",
+TableProperties		: "Propriétés de Tableau",
+ImageProperties		: "Propriétés d'Image",
+FlashProperties		: "Propriétés d'Animation Flash",
+
+AnchorProp			: "Propriétés d'Ancre",
+ButtonProp			: "Propriétés de Bouton",
+CheckboxProp		: "Propriétés de Case à Cocher",
+HiddenFieldProp		: "Propriétés de Champ Caché",
+RadioButtonProp		: "Propriétés de Bouton Radio",
+ImageButtonProp		: "Propriétés de Bouton Image",
+TextFieldProp		: "Propriétés de Champ Texte",
+SelectionFieldProp	: "Propriétés de Liste/Menu",
+TextareaProp		: "Propriétés de Zone Texte",
+FormProp			: "Propriétés de Formulaire",
+
+FontFormats			: "Normal;Formatted;Address;Titre 1;Titre 2;Titre 3;Titre 4;Titre 5;Titre 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Calcul XHTML. Veuillez patienter...",
+Done				: "Terminé",
+PasteWordConfirm	: "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?",
+NotCompatiblePaste	: "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?",
+UnknownToolbarItem	: "Elément de barre d'outil inconnu \"%1\"",
+UnknownCommand		: "Nom de commande inconnu \"%1\"",
+NotImplemented		: "Commande non encore écrite",
+UnknownToolbarSet	: "La barre d'outils \"%1\" n'existe pas",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuler",
+DlgBtnClose			: "Fermer",
+DlgBtnBrowseServer	: "Parcourir le Serveur",
+DlgAdvancedTag		: "Avancé",
+DlgOpOther			: "&lt;Autre&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Veuillez saisir l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;Par Défaut&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Sens d'Ecriture",
+DlgGenLangDirLtr	: "Gauche vers Droite (LTR)",
+DlgGenLangDirRtl	: "Droite vers Gauche (RTL)",
+DlgGenLangCode		: "Code Langue",
+DlgGenAccessKey		: "Equivalent Clavier",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Ordre de Tabulation",
+DlgGenLongDescr		: "URL de Description Longue",
+DlgGenClass			: "Classes de Feuilles de Style",
+DlgGenTitle			: "Titre Indicatif",
+DlgGenContType		: "Type de Contenu Indicatif",
+DlgGenLinkCharset	: "Encodage de Caractère de la cible",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Propriétés d'Image",
+DlgImgInfoTab		: "Informations sur l'Image",
+DlgImgBtnUpload		: "Envoyer au Serveur",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Texte de Remplacement",
+DlgImgWidth			: "Largeur",
+DlgImgHeight		: "Hauteur",
+DlgImgLockRatio		: "Garder proportions",
+DlgBtnResetSize		: "Taille Originale",
+DlgImgBorder		: "Bordure",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Alignement",
+DlgImgAlignLeft		: "Gauche",
+DlgImgAlignAbsBottom: "Abs Bas",
+DlgImgAlignAbsMiddle: "Abs Milieu",
+DlgImgAlignBaseline	: "Bas du texte",
+DlgImgAlignBottom	: "Bas",
+DlgImgAlignMiddle	: "Milieu",
+DlgImgAlignRight	: "Droite",
+DlgImgAlignTextTop	: "Haut du texte",
+DlgImgAlignTop		: "Haut",
+DlgImgPreview		: "Prévisualisation",
+DlgImgAlertUrl		: "Veuillez saisir l'URL de l'image",
+DlgImgLinkTab		: "Lien",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriétés d'animation Flash",
+DlgFlashChkPlay		: "Lecture automatique",
+DlgFlashChkLoop		: "Boucle",
+DlgFlashChkMenu		: "Activer menu Flash",
+DlgFlashScale		: "Affichage",
+DlgFlashScaleAll	: "Par défault (tout montrer)",
+DlgFlashScaleNoBorder	: "Sans Bordure",
+DlgFlashScaleFit	: "Ajuster aux Dimensions",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Propriétés de Lien",
+DlgLnkInfoTab		: "Informations sur le Lien",
+DlgLnkTargetTab		: "Destination",
+
+DlgLnkType			: "Type de Lien",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancre dans cette page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocole",
+DlgLnkProtoOther	: "&lt;autre&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sélectionner une Ancre",
+DlgLnkAnchorByName	: "Par Nom d'Ancre",
+DlgLnkAnchorById	: "Par Id d'Elément",
+DlgLnkNoAnchors		: "&lt;Pas d'ancre disponible dans le document&gt;",
+DlgLnkEMail			: "Adresse E-Mail",
+DlgLnkEMailSubject	: "Sujet du Message",
+DlgLnkEMailBody		: "Corps du Message",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Envoyer au Serveur",
+
+DlgLnkTarget		: "Destination",
+DlgLnkTargetFrame	: "&lt;cadre&gt;",
+DlgLnkTargetPopup	: "&lt;fenêtre popup&gt;",
+DlgLnkTargetBlank	: "Nouvelle Fenêtre (_blank)",
+DlgLnkTargetParent	: "Fenêtre Mère (_parent)",
+DlgLnkTargetSelf	: "Même Fenêtre (_self)",
+DlgLnkTargetTop		: "Fenêtre Supérieure (_top)",
+DlgLnkTargetFrameName	: "Nom du Cadre de Destination",
+DlgLnkPopWinName	: "Nom de la Fenêtre Popup",
+DlgLnkPopWinFeat	: "Caractéristiques de la Fenêtre Popup",
+DlgLnkPopResize		: "Taille Modifiable",
+DlgLnkPopLocation	: "Barre d'Adresses",
+DlgLnkPopMenu		: "Barre de Menu",
+DlgLnkPopScroll		: "Barres de Défilement",
+DlgLnkPopStatus		: "Barre d'Etat",
+DlgLnkPopToolbar	: "Barre d'Outils",
+DlgLnkPopFullScrn	: "Plein Ecran (IE)",
+DlgLnkPopDependent	: "Dépendante (Netscape)",
+DlgLnkPopWidth		: "Largeur",
+DlgLnkPopHeight		: "Hauteur",
+DlgLnkPopLeft		: "Position Gauche",
+DlgLnkPopTop		: "Position Haut",
+
+DlnLnkMsgNoUrl		: "Veuillez saisir l'URL",
+DlnLnkMsgNoEMail	: "Veuillez saisir l'adresse e-mail",
+DlnLnkMsgNoAnchor	: "Veuillez sélectionner une ancre",
+
+// Color Dialog
+DlgColorTitle		: "Sélectionner",
+DlgColorBtnClear	: "Effacer",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Sélectionné",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insérer Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Insérer Caractère Spécial",
+
+// Table Dialog
+DlgTableTitle		: "Propriétés de Tableau",
+DlgTableRows		: "Lignes",
+DlgTableColumns		: "Colonnes",
+DlgTableBorder		: "Bordure",
+DlgTableAlign		: "Alignement",
+DlgTableAlignNotSet	: "<Par Défaut>",
+DlgTableAlignLeft	: "Gauche",
+DlgTableAlignCenter	: "Centré",
+DlgTableAlignRight	: "Droite",
+DlgTableWidth		: "Largeur",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "pourcentage",
+DlgTableHeight		: "Hauteur",
+DlgTableCellSpace	: "Espacement",
+DlgTableCellPad		: "Contour",
+DlgTableCaption		: "Titre",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriétés de cellule",
+DlgCellWidth		: "Largeur",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "pourcentage",
+DlgCellHeight		: "Hauteur",
+DlgCellWordWrap		: "Retour à la ligne",
+DlgCellWordWrapNotSet	: "<Par Défaut>",
+DlgCellWordWrapYes	: "Oui",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Alignement Horizontal",
+DlgCellHorAlignNotSet	: "<Par Défaut>",
+DlgCellHorAlignLeft	: "Gauche",
+DlgCellHorAlignCenter	: "Centré",
+DlgCellHorAlignRight: "Droite",
+DlgCellVerAlign		: "Alignement Vertical",
+DlgCellVerAlignNotSet	: "<Par Défaut>",
+DlgCellVerAlignTop	: "Haut",
+DlgCellVerAlignMiddle	: "Milieu",
+DlgCellVerAlignBottom	: "Bas",
+DlgCellVerAlignBaseline	: "Bas du texte",
+DlgCellRowSpan		: "Lignes Fusionnées",
+DlgCellCollSpan		: "Colonnes Fusionnées",
+DlgCellBackColor	: "Fond",
+DlgCellBorderColor	: "Bordure",
+DlgCellBtnSelect	: "Choisir...",
+
+// Find Dialog
+DlgFindTitle		: "Chercher",
+DlgFindFindBtn		: "Chercher",
+DlgFindNotFoundMsg	: "Le texte indiqué est introuvable.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Remplacer",
+DlgReplaceFindLbl		: "Rechercher:",
+DlgReplaceReplaceLbl	: "Remplacer par:",
+DlgReplaceCaseChk		: "Respecter la casse",
+DlgReplaceReplaceBtn	: "Remplacer",
+DlgReplaceReplAllBtn	: "Tout remplacer",
+DlgReplaceWordChk		: "Mot entier",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de coller automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+V).",
+PasteErrorCut	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",
+PasteErrorCopy	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",
+
+PasteAsText		: "Coller comme texte",
+PasteFromWord	: "Coller à partir de Word",
+
+DlgPasteMsg2	: "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et cliquez sur <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorer les Polices de Caractères",
+DlgPasteRemoveStyles	: "Supprimer les Styles",
+DlgPasteCleanBox		: "Effacer le contenu",
+
+
+// Color Picker
+ColorAutomatic	: "Automatique",
+ColorMoreColors	: "Plus de Couleurs...",
+
+// Document Properties
+DocProps		: "Propriétés du Document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriétés de l'Ancre",
+DlgAnchorName		: "Nom de l'Ancre",
+DlgAnchorErrorName	: "Veuillez saisir le nom de l'ancre",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Pas dans le dictionnaire",
+DlgSpellChangeTo		: "Changer en",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer Tout",
+DlgSpellBtnReplace		: "Remplacer",
+DlgSpellBtnReplaceAll	: "Remplacer Tout",
+DlgSpellBtnUndo			: "Annuler",
+DlgSpellNoSuggestions	: "- Aucune suggestion -",
+DlgSpellProgress		: "Vérification d'orthographe en cours...",
+DlgSpellNoMispell		: "Vérification d'orthographe terminée: Aucune erreur trouvée",
+DlgSpellNoChanges		: "Vérification d'orthographe terminée: Pas de modifications",
+DlgSpellOneChange		: "Vérification d'orthographe terminée: Un mot modifié",
+DlgSpellManyChanges		: "Vérification d'orthographe terminée: %1 mots modifiés",
+
+IeSpellDownload			: "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?",
+
+// Button Dialog
+DlgButtonText	: "Texte (Valeur)",
+DlgButtonType	: "Type",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valeur",
+DlgCheckboxSelected	: "Sélectionné",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Méthode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valeur",
+DlgSelectSize		: "Taille",
+DlgSelectLines		: "lignes",
+DlgSelectChkMulti	: "Sélection multiple",
+DlgSelectOpAvail	: "Options Disponibles",
+DlgSelectOpText		: "Texte",
+DlgSelectOpValue	: "Valeur",
+DlgSelectBtnAdd		: "Ajouter",
+DlgSelectBtnModify	: "Modifier",
+DlgSelectBtnUp		: "Monter",
+DlgSelectBtnDown	: "Descendre",
+DlgSelectBtnSetValue : "Valeur sélectionnée",
+DlgSelectBtnDelete	: "Supprimer",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Colonnes",
+DlgTextareaRows	: "Lignes",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valeur",
+DlgTextCharWidth	: "Largeur en Caractères",
+DlgTextMaxChars		: "Nombre Maximum de Caractères",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Texte",
+DlgTextTypePass		: "Mot de Passe",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valeur",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriétés de Liste à puces",
+NumberedListProp	: "Propriétés de Numérotée",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Carré",
+DlgLstTypeNumbers	: "Nombres (1, 2, 3)",
+DlgLstTypeLCase		: "Lettres Minuscules (a, b, c)",
+DlgLstTypeUCase		: "Lettres Majuscules (A, B, C)",
+DlgLstTypeSRoman	: "Chiffres Romains Minuscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Chiffres Romains Majuscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Général",
+DlgDocBackTab		: "Fond",
+DlgDocColorsTab		: "Couleurs et Marges",
+DlgDocMetaTab		: "Métadonnées",
+
+DlgDocPageTitle		: "Titre de la Page",
+DlgDocLangDir		: "Sens d'Ecriture",
+DlgDocLangDirLTR	: "Gauche vers Droite (LTR)",
+DlgDocLangDirRTL	: "Droite vers Gauche (RTL)",
+DlgDocLangCode		: "Code Langue",
+DlgDocCharSet		: "Encodage de Caractère",
+DlgDocCharSetOther	: "Autre Encodage de Caractère",
+
+DlgDocDocType		: "Type de Document",
+DlgDocDocTypeOther	: "Autre Type de Document",
+DlgDocIncXHTML		: "Inclure les déclarations XHTML",
+DlgDocBgColor		: "Couleur de Fond",
+DlgDocBgImage		: "Image de Fond",
+DlgDocBgNoScroll	: "Image fixe sans défilement",
+DlgDocCText			: "Texte",
+DlgDocCLink			: "Lien",
+DlgDocCVisited		: "Lien Visité",
+DlgDocCActive		: "Lien Activé",
+DlgDocMargins		: "Marges",
+DlgDocMaTop			: "Haut",
+DlgDocMaLeft		: "Gauche",
+DlgDocMaRight		: "Droite",
+DlgDocMaBottom		: "Bas",
+DlgDocMeIndex		: "Mots Clés (séparés par des virgules)",
+DlgDocMeDescr		: "Description",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Prévisualisation",
+
+// Templates Dialog
+Templates			: "Modèles",
+DlgTemplatesTitle	: "Modèles de Contenu",
+DlgTemplatesSelMsg	: "Veuillez sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",
+DlgTemplatesLoading	: "Chargement de la liste des modèles. Veuillez patienter...",
+DlgTemplatesNoTpl	: "(Aucun modèle disponible)",
+
+// About Dialog
+DlgAboutAboutTab	: "A propos de",
+DlgAboutBrowserInfoTab	: "Navigateur",
+DlgAboutVersion		: "version",
+DlgAboutLicense		: "License selon les termes de GNU Lesser General Public License",
+DlgAboutInfo		: "Pour plus d'informations, aller à"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/gl.js 1.4.0sr5-1/fckeditor/editor/lang/gl.js
--- 1.3.11sr1/fckeditor/editor/lang/gl.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/gl.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: gl.js
+ * 	Galician language file.
+ * 
+ * File Authors:
+ * 		Fernando Riveiro Lopez
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ocultar Ferramentas",
+ToolbarExpand		: "Mostrar Ferramentas",
+
+// Toolbar Items and Context Menu
+Save				: "Gardar",
+NewPage				: "Nova Páxina",
+Preview				: "Vista Previa",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Pegar",
+PasteText			: "Pegar como texto plano",
+PasteWord			: "Pegar dende Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar todo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Ligazón",
+InsertLink			: "Inserir/Editar Ligazón",
+RemoveLink			: "Eliminar Ligazón",
+Anchor				: "Inserir/Editar Referencia",
+InsertImageLbl		: "Imaxe",
+InsertImage			: "Inserir/Editar Imaxe",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserir/Editar Flash",
+InsertTableLbl		: "Tabla",
+InsertTable			: "Inserir/Editar Tabla",
+InsertLineLbl		: "Liña",
+InsertLine			: "Inserir Liña Horizontal",
+InsertSpecialCharLbl: "Carácter Special",
+InsertSpecialChar	: "Inserir Carácter Especial",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Inserir Smiley",
+About				: "Acerca de FCKeditor",
+Bold				: "Negrita",
+Italic				: "Cursiva",
+Underline			: "Sub-raiado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subíndice",
+Superscript			: "Superíndice",
+LeftJustify			: "Aliñar á Esquerda",
+CenterJustify		: "Centrado",
+RightJustify		: "Aliñar á Dereita",
+BlockJustify		: "Xustificado",
+DecreaseIndent		: "Disminuir Sangría",
+IncreaseIndent		: "Aumentar Sangría",
+Undo				: "Desfacer",
+Redo				: "Refacer",
+NumberedListLbl		: "Lista Numerada",
+NumberedList		: "Inserir/Eliminar Lista Numerada",
+BulletedListLbl		: "Marcas",
+BulletedList		: "Inserir/Eliminar Marcas",
+ShowTableBorders	: "Mostrar Bordes das Taboas",
+ShowDetails			: "Mostrar Marcas Parágrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Tipo",
+FontSize			: "Tamaño",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor do Fondo",
+Source				: "Código Fonte",
+Find				: "Procurar",
+Replace				: "Substituir",
+SpellCheck			: "Corrección Ortográfica",
+UniversalKeyboard	: "Teclado Universal",
+
+Form			: "Formulario",
+Checkbox		: "Cadro de Verificación",
+RadioButton		: "Botón de Radio",
+TextField		: "Campo de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botón",
+SelectionField	: "Campo de Selección",
+ImageButton		: "Botón de Imaxe",
+
+// Context Menu
+EditLink			: "Editar Ligazón",
+InsertRow			: "Inserir Fila",
+DeleteRows			: "Borrar Filas",
+InsertColumn		: "Inserir Columna",
+DeleteColumns		: "Borrar Columnas",
+InsertCell			: "Inserir Cela",
+DeleteCells			: "Borrar Cela",
+MergeCells			: "Unir Celas",
+SplitCell			: "Partir Celas",
+CellProperties		: "Propriedades da Cela",
+TableProperties		: "Propriedades da Taboa",
+ImageProperties		: "Propriedades Imaxe",
+FlashProperties		: "Propriedades Flash",
+
+AnchorProp			: "Propriedades da Referencia",
+ButtonProp			: "Propriedades do Botón",
+CheckboxProp		: "Propriedades do Cadro de Verificación",
+HiddenFieldProp		: "Propriedades do Campo Oculto",
+RadioButtonProp		: "Propriedades do Botón de Radio",
+ImageButtonProp		: "Propriedades do Botón de Imaxe",
+TextFieldProp		: "Propriedades do Campo de Texto",
+SelectionFieldProp	: "Propriedades do Campo de Selección",
+TextareaProp		: "Propriedades da Área de Texto",
+FormProp			: "Propriedades do Formulario",
+
+FontFormats			: "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesando XHTML. Por facor, agarde...",
+Done				: "Feiro",
+PasteWordConfirm	: "Parece que o texto que quere pegar está copiado do Word.¿Quere limpar o formato antes de pegalo?",
+NotCompatiblePaste	: "Este comando está disponible para Internet Explorer versión 5.5 ou superior. ¿Quere pegalo sen limpar o formato?",
+UnknownToolbarItem	: "Ítem de ferramentas descoñecido \"%1\"",
+UnknownCommand		: "Nome de comando descoñecido \"%1\"",
+NotImplemented		: "Comando non implementado",
+UnknownToolbarSet	: "O conxunto de ferramentas \"%1\" non existe",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Pechar",
+DlgBtnBrowseServer	: "Navegar no Servidor",
+DlgAdvancedTag		: "Advanzado",
+DlgOpOther			: "&lt;Outro&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Por favor, insira a URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;non definido&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientación do Idioma",
+DlgGenLangDirLtr	: "Esquerda a Dereita (LTR)",
+DlgGenLangDirRtl	: "Dereita a Esquerda (RTL)",
+DlgGenLangCode		: "Código do Idioma",
+DlgGenAccessKey		: "Chave de Acceso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tabulación",
+DlgGenLongDescr		: "Descrición Completa da URL",
+DlgGenClass			: "Clases da Folla de Estilos",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Contido",
+DlgGenLinkCharset	: "Fonte de Caracteres Vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propriedades da Imaxe",
+DlgImgInfoTab		: "Información da Imaxe",
+DlgImgBtnUpload		: "Enviar ó Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carregar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamaño Orixinal",
+DlgImgBorder		: "Límite",
+DlgImgHSpace		: "Esp. Horiz.",
+DlgImgVSpace		: "Esp. Vert.",
+DlgImgAlign			: "Aliñamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Abs Inferior",
+DlgImgAlignAbsMiddle: "Abs Centro",
+DlgImgAlignBaseline	: "Liña Base",
+DlgImgAlignBottom	: "Pé",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Dereita",
+DlgImgAlignTextTop	: "Tope do Texto",
+DlgImgAlignTop		: "Tope",
+DlgImgPreview		: "Vista Previa",
+DlgImgAlertUrl		: "Por favor, escriba a URL da imaxe",
+DlgImgLinkTab		: "Ligazón",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades Flash",
+DlgFlashChkPlay		: "Auto Execución",
+DlgFlashChkLoop		: "Bucle",
+DlgFlashChkMenu		: "Activar Menú Flash",
+DlgFlashScale		: "Escalar",
+DlgFlashScaleAll	: "Amosar Todo",
+DlgFlashScaleNoBorder	: "Sen Borde",
+DlgFlashScaleFit	: "Encaixar axustando",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ligazón",
+DlgLnkInfoTab		: "Información da Ligazón",
+DlgLnkTargetTab		: "Referencia a esta páxina",
+
+DlgLnkType			: "Tipo de Ligazón",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referencia nesta páxina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "&lt;outro&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar unha Referencia",
+DlgLnkAnchorByName	: "Por Nome de Referencia",
+DlgLnkAnchorById	: "Por Element Id",
+DlgLnkNoAnchors		: "&lt;Non hai referencias disponibles no documento&gt;",
+DlgLnkEMail			: "Enderezo de E-Mail",
+DlgLnkEMailSubject	: "Asunto do Mensaxe",
+DlgLnkEMailBody		: "Corpo do Mensaxe",
+DlgLnkUpload		: "Carregar",
+DlgLnkBtnUpload		: "Enviar ó servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;Xanela Emerxente&gt;",
+DlgLnkTargetBlank	: "Nova Xanela (_blank)",
+DlgLnkTargetParent	: "Xanela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma Xanela (_self)",
+DlgLnkTargetTop		: "Xanela Primaria (_top)",
+DlgLnkTargetFrameName	: "Nome do Marco Destino",
+DlgLnkPopWinName	: "Nome da Xanela Emerxente",
+DlgLnkPopWinFeat	: "Características da Xanela Emerxente",
+DlgLnkPopResize		: "Axustable",
+DlgLnkPopLocation	: "Barra de Localización",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barras de Desplazamento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "A Toda Pantalla (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posición Esquerda",
+DlgLnkPopTop		: "Posición dende Arriba",
+
+DlnLnkMsgNoUrl		: "Por favor, escriba a ligazón URL",
+DlnLnkMsgNoEMail	: "Por favor, escriba o enderezo de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor, seleccione un destino",
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Color",
+DlgColorBtnClear	: "Nengunha",
+DlgColorHighlight	: "Destacado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserte un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione Caracter Especial",
+
+// Table Dialog
+DlgTableTitle		: "Propiedades da Taboa",
+DlgTableRows		: "Filas",
+DlgTableColumns		: "Columnas",
+DlgTableBorder		: "Tamaño do Borde",
+DlgTableAlign		: "Aliñamento",
+DlgTableAlignNotSet	: "<Non Definido>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centro",
+DlgTableAlignRight	: "Ereita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Marxe entre Celas",
+DlgTableCellPad		: "Marxe interior",
+DlgTableCaption		: "Título",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriedades da Cela",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Axustar Liñas",
+DlgCellWordWrapNotSet	: "&lt;Non Definido&gt;",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Aliñamento Horizontal",
+DlgCellHorAlignNotSet	: "&lt;Non definido&gt;",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centro",
+DlgCellHorAlignRight: "Dereita",
+DlgCellVerAlign		: "Aliñamento Vertical",
+DlgCellVerAlignNotSet	: "&lt;Non definido&gt;",
+DlgCellVerAlignTop	: "Arriba",
+DlgCellVerAlignMiddle	: "Medio",
+DlgCellVerAlignBottom	: "Abaixo",
+DlgCellVerAlignBaseline	: "Liña de Base",
+DlgCellRowSpan		: "Ocupar Filas",
+DlgCellCollSpan		: "Ocupar Columnas",
+DlgCellBackColor	: "Color de Fondo",
+DlgCellBorderColor	: "Color de Borde",
+DlgCellBtnSelect	: "Seleccionar...",
+
+// Find Dialog
+DlgFindTitle		: "Procurar",
+DlgFindFindBtn		: "Procurar",
+DlgFindNotFoundMsg	: "Non te atopou o texto indicado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Texto a procurar:",
+DlgReplaceReplaceLbl	: "Substituir con:",
+DlgReplaceCaseChk		: "Coincidir Mai./min.",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substitiur Todo",
+DlgReplaceWordChk		: "Coincidir con toda a palabra",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de pegado. Por favor, use o teclado para iso (Ctrl+V).",
+PasteErrorCut	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).",
+PasteErrorCopy	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).",
+
+PasteAsText		: "Pegar como texto plano",
+PasteFromWord	: "Pegar dende Word",
+
+DlgPasteMsg2	: "Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorar as definicións de Tipografía",
+DlgPasteRemoveStyles	: "Eliminar as definicións de Estilos",
+DlgPasteCleanBox		: "Limpar o Cadro",
+
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Máis Cores...",
+
+// Document Properties
+DocProps		: "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriedades da Referencia",
+DlgAnchorName		: "Nome da Referencia",
+DlgAnchorErrorName	: "Por favor, escriba o nome da referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Non está no diccionario",
+DlgSpellChangeTo		: "Cambiar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Todas",
+DlgSpellBtnReplace		: "Substituir",
+DlgSpellBtnReplaceAll	: "Substituir Todas",
+DlgSpellBtnUndo			: "Desfacer",
+DlgSpellNoSuggestions	: "- Sen candidatos -",
+DlgSpellProgress		: "Corrección ortográfica en progreso...",
+DlgSpellNoMispell		: "Corrección ortográfica rematada: Non se atoparon erros",
+DlgSpellNoChanges		: "Corrección ortográfica rematada: Non se substituiu nengunha verba",
+DlgSpellOneChange		: "Corrección ortográfica rematada: Unha verba substituida",
+DlgSpellManyChanges		: "Corrección ortográfica rematada: %1 verbas substituidas",
+
+IeSpellDownload			: "O corrector ortográfico non está instalado. ¿Quere descargalo agora?",
+
+// Button Dialog
+DlgButtonText	: "Texto (Valor)",
+DlgButtonType	: "Tipo",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Acción",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamaño",
+DlgSelectLines		: "liñas",
+DlgSelectChkMulti	: "Permitir múltiples seleccións",
+DlgSelectOpAvail	: "Opcións Disponibles",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Engadir",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Subir",
+DlgSelectBtnDown	: "Baixar",
+DlgSelectBtnSetValue : "Definir como valor por defecto",
+DlgSelectBtnDelete	: "Borrar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Columnas",
+DlgTextareaRows	: "Filas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Tamaño do Caracter",
+DlgTextMaxChars		: "Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Chave",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriedades das Marcas",
+NumberedListProp	: "Propriedades da Lista de Numeración",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Cuadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos en minúscula (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos en Maiúscula (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Xeral",
+DlgDocBackTab		: "Fondo",
+DlgDocColorsTab		: "Cores e Marxes",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Título da Páxina",
+DlgDocLangDir		: "Orientación do Idioma",
+DlgDocLangDirLTR	: "Esquerda a Dereita (LTR)",
+DlgDocLangDirRTL	: "Dereita a Esquerda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codificación do Xogo de Caracteres",
+DlgDocCharSetOther	: "Outra Codificación do Xogo de Caracteres",
+
+DlgDocDocType		: "Encabezado do Tipo de Documento",
+DlgDocDocTypeOther	: "Outro Encabezado do Tipo de Documento",
+DlgDocIncXHTML		: "Incluir Declaracións XHTML",
+DlgDocBgColor		: "Cor de Fondo",
+DlgDocBgImage		: "URL da Imaxe de Fondo",
+DlgDocBgNoScroll	: "Fondo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Ligazóns",
+DlgDocCVisited		: "Ligazón Visitada",
+DlgDocCActive		: "Ligazón Activa",
+DlgDocMargins		: "Marxes da Páxina",
+DlgDocMaTop			: "Arriba",
+DlgDocMaLeft		: "Esquerda",
+DlgDocMaRight		: "Dereita",
+DlgDocMaBottom		: "Abaixo",
+DlgDocMeIndex		: "Palabras Chave de Indexación do Documento (separadas por comas)",
+DlgDocMeDescr		: "Descripción do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista Previa",
+
+// Templates Dialog
+Templates			: "Plantillas",
+DlgTemplatesTitle	: "Plantillas de Contido",
+DlgTemplatesSelMsg	: "Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):",
+DlgTemplatesLoading	: "Cargando listado de plantillas. Por favor, espere...",
+DlgTemplatesNoTpl	: "(Non hai plantillas definidas)",
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca de",
+DlgAboutBrowserInfoTab	: "Información do Navegador",
+DlgAboutVersion		: "versión",
+DlgAboutLicense		: "Licencia concedida baixo os termos da GNU Lesser General Public License",
+DlgAboutInfo		: "Para máis información visitar:"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/he.js 1.4.0sr5-1/fckeditor/editor/lang/he.js
--- 1.3.11sr1/fckeditor/editor/lang/he.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/he.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: he.js
+ * 	Hebrew language file.
+ * 
+ * File Authors:
+ * 		Tamir Mordo (tamir@tetitu.co.il)
+ * 		Ophir Radnitz (ophir@liqweed.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "כיווץ סרגל הכלים",
+ToolbarExpand		: "פתיחת סרגל הכלים",
+
+// Toolbar Items and Context Menu
+Save				: "שמירה",
+NewPage				: "דף חדש",
+Preview				: "תצוגה מקדימה",
+Cut					: "גזירה",
+Copy				: "העתקה",
+Paste				: "הדבקה",
+PasteText			: "הדבקה כטקסט פשוט",
+PasteWord			: "הדבקה מ-Word",
+Print				: "הדפסה",
+SelectAll			: "בחירת הכל",
+RemoveFormat		: "הסרת העיצוב",
+InsertLinkLbl		: "קישור",
+InsertLink			: "הוספת/עריכת קישור",
+RemoveLink			: "הסרת הקישור",
+Anchor				: "הוספת/עריכת נקודת עיגון",
+InsertImageLbl		: "תמונה",
+InsertImage			: "הוספת/עריכת תמונה",
+InsertFlashLbl		: "פלאש",
+InsertFlash			: "הוסף/ערוך פלאש",
+InsertTableLbl		: "טבלה",
+InsertTable			: "הוספת/עריכת טבלה",
+InsertLineLbl		: "קו",
+InsertLine			: "הוספת קו אופקי",
+InsertSpecialCharLbl: "תו מיוחד",
+InsertSpecialChar	: "הוספת תו מיוחד",
+InsertSmileyLbl		: "סמיילי",
+InsertSmiley		: "הוספת סמיילי",
+About				: "אודות FCKeditor",
+Bold				: "מודגש",
+Italic				: "נטוי",
+Underline			: "קו תחתון",
+StrikeThrough		: "כתיב מחוק",
+Subscript			: "כתיב תחתון",
+Superscript			: "כתיב עליון",
+LeftJustify			: "יישור לשמאל",
+CenterJustify		: "מרכוז",
+RightJustify		: "יישור לימין",
+BlockJustify		: "יישור לשוליים",
+DecreaseIndent		: "הקטנת אינדנטציה",
+IncreaseIndent		: "הגדלת אינדנטציה",
+Undo				: "ביטול צעד אחרון",
+Redo				: "חזרה על צעד אחרון",
+NumberedListLbl		: "רשימה ממוספרת",
+NumberedList		: "הוספת/הסרת רשימה ממוספרת",
+BulletedListLbl		: "רשימת נקודות",
+BulletedList		: "הוספת/הסרת רשימת נקודות",
+ShowTableBorders	: "הצגת מסגרת הטבלה",
+ShowDetails			: "הצגת פרטים",
+Style				: "סגנון",
+FontFormat			: "עיצוב",
+Font				: "גופן",
+FontSize			: "גודל",
+TextColor			: "צבע טקסט",
+BGColor				: "צבע רקע",
+Source				: "מקור",
+Find				: "חיפוש",
+Replace				: "החלפה",
+SpellCheck			: "בדיקת איות",
+UniversalKeyboard	: "מקלדת אוניברסלית",
+
+Form			: "טופס",
+Checkbox		: "תיבת סימון",
+RadioButton		: "לחצן אפשרויות",
+TextField		: "שדה טקסט",
+Textarea		: "איזור טקסט",
+HiddenField		: "שדה חבוי",
+Button			: "כפתור",
+SelectionField	: "שדה בחירה",
+ImageButton		: "כפתור תמונה",
+
+// Context Menu
+EditLink			: "עריכת קישור",
+InsertRow			: "הוספת שורה",
+DeleteRows			: "מחיקת שורות",
+InsertColumn		: "הוספת עמודה",
+DeleteColumns		: "מחיקת עמודות",
+InsertCell			: "הוספת תא",
+DeleteCells			: "מחיקת תאים",
+MergeCells			: "מיזוג תאים",
+SplitCell			: "פיצול תאים",
+CellProperties		: "תכונות התא",
+TableProperties		: "תכונות הטבלה",
+ImageProperties		: "תכונות התמונה",
+FlashProperties		: "מאפייני פלאש",
+
+AnchorProp			: "מאפייני נקודת עיגון",
+ButtonProp			: "מאפייני כפתור",
+CheckboxProp		: "מאפייני תיבת סימון",
+HiddenFieldProp		: "מאפיני שדה חבוי",
+RadioButtonProp		: "מאפייני לחצן אפשרויות",
+ImageButtonProp		: "מאפיני כפתור תמונה",
+TextFieldProp		: "מאפייני שדה טקסט",
+SelectionFieldProp	: "מאפייני שדה בחירה",
+TextareaProp		: "מאפיני איזור טקסט",
+FormProp			: "מאפיני טופס",
+
+FontFormats			: "נורמלי;קוד;כתובת;כותרת;כותרת 2;כותרת 3;כותרת 4;כותרת 5;כותרת 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "מעבד XHTML, נא להמתין...",
+Done				: "המשימה הושלמה",
+PasteWordConfirm	: "נראה הטקסט שבכוונתך להדביק מקורו בקובץ Word. האם ברצונך לנקות אותו טרם ההדבקה?",
+NotCompatiblePaste	: "פעולה זו זמינה לדפדפן Internet Explorer מגירסא 5.5 ומעלה. האם להמשיך בהדבקה ללא הניקוי?",
+UnknownToolbarItem	: "פריט לא ידוע בסרגל הכלים \"%1\"",
+UnknownCommand		: "שם פעולה לא ידוע \"%1\"",
+NotImplemented		: "הפקודה לא מיושמת",
+UnknownToolbarSet	: "ערכת סרגל הכלים \"%1\" לא קיימת",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "אישור",
+DlgBtnCancel		: "ביטול",
+DlgBtnClose			: "סגירה",
+DlgBtnBrowseServer	: "סייר השרת",
+DlgAdvancedTag		: "אפשרויות מתקדמות",
+DlgOpOther			: "&lt;אחר&gt;",
+DlgInfoTab			: "מידע",
+DlgAlertUrl			: "אנה הזן URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;לא נקבע&gt;",
+DlgGenId			: "זיהוי (Id)",
+DlgGenLangDir		: "כיוון שפה",
+DlgGenLangDirLtr	: "שמאל לימין (LTR)",
+DlgGenLangDirRtl	: "ימין לשמאל (RTL)",
+DlgGenLangCode		: "קוד שפה",
+DlgGenAccessKey		: "מקש גישה",
+DlgGenName			: "שם",
+DlgGenTabIndex		: "מספר טאב",
+DlgGenLongDescr		: "קישור לתיאור מפורט",
+DlgGenClass			: "גיליונות עיצוב קבוצות",
+DlgGenTitle			: "כותרת מוצעת",
+DlgGenContType		: "Content Type מוצע",
+DlgGenLinkCharset	: "קידוד המשאב המקושר",
+DlgGenStyle			: "סגנון",
+
+// Image Dialog
+DlgImgTitle			: "תכונות התמונה",
+DlgImgInfoTab		: "מידע על התמונה",
+DlgImgBtnUpload		: "שליחה לשרת",
+DlgImgURL			: "כתובת (URL)",
+DlgImgUpload		: "העלאה",
+DlgImgAlt			: "טקסט חלופי",
+DlgImgWidth			: "רוחב",
+DlgImgHeight		: "גובה",
+DlgImgLockRatio		: "נעילת היחס",
+DlgBtnResetSize		: "איפוס הגודל",
+DlgImgBorder		: "מסגרת",
+DlgImgHSpace		: "מרווח אופקי",
+DlgImgVSpace		: "מרווח אנכי",
+DlgImgAlign			: "יישור",
+DlgImgAlignLeft		: "לשמאל",
+DlgImgAlignAbsBottom: "לתחתית האבסולוטית",
+DlgImgAlignAbsMiddle: "מרכוז אבסולוטי",
+DlgImgAlignBaseline	: "לקו התחתית",
+DlgImgAlignBottom	: "לתחתית",
+DlgImgAlignMiddle	: "לאמצע",
+DlgImgAlignRight	: "לימין",
+DlgImgAlignTextTop	: "לראש הטקסט",
+DlgImgAlignTop		: "למעלה",
+DlgImgPreview		: "תצוגה מקדימה",
+DlgImgAlertUrl		: "נא להקליד את כתובת התמונה",
+DlgImgLinkTab		: "קישור",
+
+// Flash Dialog
+DlgFlashTitle		: "מאפיני פלאש",
+DlgFlashChkPlay		: "נגן אוטומטי",
+DlgFlashChkLoop		: "לולאה",
+DlgFlashChkMenu		: "אפשר תפריט פלאש",
+DlgFlashScale		: "גודל",
+DlgFlashScaleAll	: "הצג הכל",
+DlgFlashScaleNoBorder	: "ללא גבולות",
+DlgFlashScaleFit	: "התאמה מושלמת",
+
+// Link Dialog
+DlgLnkWindowTitle	: "קישור",
+DlgLnkInfoTab		: "מידע על הקישור",
+DlgLnkTargetTab		: "מטרה",
+
+DlgLnkType			: "סוג קישור",
+DlgLnkTypeURL		: "כתובת (URL)",
+DlgLnkTypeAnchor	: "עוגן בעמוד זה",
+DlgLnkTypeEMail		: "דוא''ל",
+DlgLnkProto			: "פרוטוקול",
+DlgLnkProtoOther	: "&lt;אחר&gt;",
+DlgLnkURL			: "כתובת (URL)",
+DlgLnkAnchorSel		: "בחירת עוגן",
+DlgLnkAnchorByName	: "עפ''י שם העוגן",
+DlgLnkAnchorById	: "עפ''י זיהוי (Id) הרכיב",
+DlgLnkNoAnchors		: "&lt;אין עוגנים זמינים בדף&gt;",
+DlgLnkEMail			: "כתובת הדוא''ל",
+DlgLnkEMailSubject	: "נושא ההודעה",
+DlgLnkEMailBody		: "גוף ההודעה",
+DlgLnkUpload		: "העלאה",
+DlgLnkBtnUpload		: "שליחה לשרת",
+
+DlgLnkTarget		: "מטרה",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;חלון קופץ&gt;",
+DlgLnkTargetBlank	: "חלון חדש (_blank)",
+DlgLnkTargetParent	: "חלון האב (_parent)",
+DlgLnkTargetSelf	: "באותו החלון (_self)",
+DlgLnkTargetTop		: "חלון ראשי (_top)",
+DlgLnkTargetFrameName	: "שם frame היעד",
+DlgLnkPopWinName	: "שם החלון הקופץ",
+DlgLnkPopWinFeat	: "תכונות החלון הקופץ",
+DlgLnkPopResize		: "בעל גודל ניתן לשינוי",
+DlgLnkPopLocation	: "סרגל כתובת",
+DlgLnkPopMenu		: "סרגל תפריט",
+DlgLnkPopScroll		: "ניתן לגלילה",
+DlgLnkPopStatus		: "סרגל חיווי",
+DlgLnkPopToolbar	: "סרגל הכלים",
+DlgLnkPopFullScrn	: "מסך מלא (IE)",
+DlgLnkPopDependent	: "תלוי (Netscape)",
+DlgLnkPopWidth		: "רוחב",
+DlgLnkPopHeight		: "גובה",
+DlgLnkPopLeft		: "מיקום צד שמאל",
+DlgLnkPopTop		: "מיקום צד עליון",
+
+DlnLnkMsgNoUrl		: "נא להקליד את כתובת הקישור (URL)",
+DlnLnkMsgNoEMail	: "נא להקליד את כתובת הדוא''ל",
+DlnLnkMsgNoAnchor	: "נא לבחור עוגן במסמך",
+
+// Color Dialog
+DlgColorTitle		: "בחירת צבע",
+DlgColorBtnClear	: "איפוס",
+DlgColorHighlight	: "נוכחי",
+DlgColorSelected	: "נבחר",
+
+// Smiley Dialog
+DlgSmileyTitle		: "הוספת סמיילי",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "בחירת תו מיוחד",
+
+// Table Dialog
+DlgTableTitle		: "תכונות טבלה",
+DlgTableRows		: "שורות",
+DlgTableColumns		: "עמודות",
+DlgTableBorder		: "גודל מסגרת",
+DlgTableAlign		: "יישור",
+DlgTableAlignNotSet	: "<לא נקבע>",
+DlgTableAlignLeft	: "שמאל",
+DlgTableAlignCenter	: "מרכז",
+DlgTableAlignRight	: "ימין",
+DlgTableWidth		: "רוחב",
+DlgTableWidthPx		: "פיקסלים",
+DlgTableWidthPc		: "אחוז",
+DlgTableHeight		: "גובה",
+DlgTableCellSpace	: "מרווח תא",
+DlgTableCellPad		: "ריפוד תא",
+DlgTableCaption		: "כיתוב",
+
+// Table Cell Dialog
+DlgCellTitle		: "תכונות תא",
+DlgCellWidth		: "רוחב",
+DlgCellWidthPx		: "פיקסלים",
+DlgCellWidthPc		: "אחוז",
+DlgCellHeight		: "גובה",
+DlgCellWordWrap		: "גלילת שורות",
+DlgCellWordWrapNotSet	: "<לא נקבע>",
+DlgCellWordWrapYes	: "כן",
+DlgCellWordWrapNo	: "לא",
+DlgCellHorAlign		: "יישור אופקי",
+DlgCellHorAlignNotSet	: "<לא נקבע>",
+DlgCellHorAlignLeft	: "שמאל",
+DlgCellHorAlignCenter	: "מרכז",
+DlgCellHorAlignRight: "ימין",
+DlgCellVerAlign		: "יישור אנכי",
+DlgCellVerAlignNotSet	: "<לא נקבע>",
+DlgCellVerAlignTop	: "למעלה",
+DlgCellVerAlignMiddle	: "לאמצע",
+DlgCellVerAlignBottom	: "לתחתית",
+DlgCellVerAlignBaseline	: "קו תחתית",
+DlgCellRowSpan		: "טווח שורות",
+DlgCellCollSpan		: "טווח עמודות",
+DlgCellBackColor	: "צבע רקע",
+DlgCellBorderColor	: "צבע מסגרת",
+DlgCellBtnSelect	: "בחירה...",
+
+// Find Dialog
+DlgFindTitle		: "חיפוש",
+DlgFindFindBtn		: "חיפוש",
+DlgFindNotFoundMsg	: "הטקסט המבוקש לא נמצא.",
+
+// Replace Dialog
+DlgReplaceTitle			: "החלפה",
+DlgReplaceFindLbl		: "חיפוש מחרוזת:",
+DlgReplaceReplaceLbl	: "החלפה במחרוזת:",
+DlgReplaceCaseChk		: "התאמת סוג אותיות (Case)",
+DlgReplaceReplaceBtn	: "החלפה",
+DlgReplaceReplAllBtn	: "החלפה בכל העמוד",
+DlgReplaceWordChk		: "התאמה למילה המלאה",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות הדבקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+V).",
+PasteErrorCut	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה  אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).",
+PasteErrorCopy	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).",
+
+PasteAsText		: "הדבקה כטקסט פשוט",
+PasteFromWord	: "הדבקה מ-Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "התעלם מהגדרות סוג פונט",
+DlgPasteRemoveStyles	: "הסר הגדרות סגנון",
+DlgPasteCleanBox		: "קופסת ניקוי",
+
+
+// Color Picker
+ColorAutomatic	: "אוטומטי",
+ColorMoreColors	: "צבעים נוספים...",
+
+// Document Properties
+DocProps		: "מאפיני מסמך",
+
+// Anchor Dialog
+DlgAnchorTitle		: "מאפיני נקודת עיגון",
+DlgAnchorName		: "שם לנקודת עיגון",
+DlgAnchorErrorName	: "אנא הזן שם לנקודת עיגון",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "לא נמצא במילון",
+DlgSpellChangeTo		: "שנה ל",
+DlgSpellBtnIgnore		: "התעלם",
+DlgSpellBtnIgnoreAll	: "התעלם מהכל",
+DlgSpellBtnReplace		: "החלף",
+DlgSpellBtnReplaceAll	: "החלף הכל",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- אין הצעות -",
+DlgSpellProgress		: "בדיקות איות בתהליך ....",
+DlgSpellNoMispell		: "בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב",
+DlgSpellNoChanges		: "בדיקות איות הסתיימה: לא שונתה אף מילה",
+DlgSpellOneChange		: "בדיקות איות הסתיימה: שונתה מילה אחת",
+DlgSpellManyChanges		: "בדיקות איות הסתיימה: %1 מילים שונו",
+
+IeSpellDownload			: "בודק האיות לא מותקן, האם אתה מעוניין להוריד?",
+
+// Button Dialog
+DlgButtonText	: "טקסט (ערך)",
+DlgButtonType	: "סוג",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "שם",
+DlgCheckboxValue	: "ערך",
+DlgCheckboxSelected	: "בחור",
+
+// Form Dialog
+DlgFormName		: "שם",
+DlgFormAction	: "שלח אל",
+DlgFormMethod	: "סוג שליחה",
+
+// Select Field Dialog
+DlgSelectName		: "שם",
+DlgSelectValue		: "ערך",
+DlgSelectSize		: "גודל",
+DlgSelectLines		: "שורות",
+DlgSelectChkMulti	: "אפשר בחירות מרובות",
+DlgSelectOpAvail	: "אפשרויות זמינות",
+DlgSelectOpText		: "טקסט",
+DlgSelectOpValue	: "ערך",
+DlgSelectBtnAdd		: "הוסף",
+DlgSelectBtnModify	: "שנה",
+DlgSelectBtnUp		: "למעלה",
+DlgSelectBtnDown	: "למטה",
+DlgSelectBtnSetValue : "קבע כברירת מחדל",
+DlgSelectBtnDelete	: "מחק",
+
+// Textarea Dialog
+DlgTextareaName	: "שם",
+DlgTextareaCols	: "עמודות",
+DlgTextareaRows	: "שורות",
+
+// Text Field Dialog
+DlgTextName			: "שם",
+DlgTextValue		: "ערך",
+DlgTextCharWidth	: "רוחב באותיות",
+DlgTextMaxChars		: "מקסימות אותיות",
+DlgTextType			: "סוג",
+DlgTextTypeText		: "טקסט",
+DlgTextTypePass		: "סיסמה",
+
+// Hidden Field Dialog
+DlgHiddenName	: "שם",
+DlgHiddenValue	: "ערך",
+
+// Bulleted List Dialog
+BulletedListProp	: "מאפייני רשימה",
+NumberedListProp	: "מאפייני רשימה ממוספרת",
+DlgLstType			: "סוג",
+DlgLstTypeCircle	: "עיגול",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "מרובע",
+DlgLstTypeNumbers	: "מספרים (1, 2, 3)",
+DlgLstTypeLCase		: "אותיות קטנות (a, b, c)",
+DlgLstTypeUCase		: "אותיות גדולות (A, B, C)",
+DlgLstTypeSRoman	: "ספרות רומאיות קטנות (i, ii, iii)",
+DlgLstTypeLRoman	: "ספרות רומאיות גדולות (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "כללי",
+DlgDocBackTab		: "רקע",
+DlgDocColorsTab		: "צבעים וגבולות",
+DlgDocMetaTab		: "נתוני META",
+
+DlgDocPageTitle		: "כותרת דף",
+DlgDocLangDir		: "כיוון שפה",
+DlgDocLangDirLTR	: "שמאל לימין (LTR)",
+DlgDocLangDirRTL	: "ימין לשמאל (RTL)",
+DlgDocLangCode		: "קוד שפה",
+DlgDocCharSet		: "קידוד אותיות",
+DlgDocCharSetOther	: "קידוד אותיות אחר",
+
+DlgDocDocType		: "הגדרות סוג מסמך",
+DlgDocDocTypeOther	: "הגדרות סוג מסמך אחרות",
+DlgDocIncXHTML		: "כלול הגדרות XHTML",
+DlgDocBgColor		: "צבע רקע",
+DlgDocBgImage		: "URL לתמונת רקע",
+DlgDocBgNoScroll	: "רגע ללא גלילה",
+DlgDocCText			: "טקסט",
+DlgDocCLink			: "קישור",
+DlgDocCVisited		: "קישור שבוקר",
+DlgDocCActive		: " קישור פעיל",
+DlgDocMargins		: "גבולות דף",
+DlgDocMaTop			: "למעלה",
+DlgDocMaLeft		: "שמאלה",
+DlgDocMaRight		: "ימינה",
+DlgDocMaBottom		: "למטה",
+DlgDocMeIndex		: "מפתח עניינים של המסמך )מופרד בפסיק(",
+DlgDocMeDescr		: "תאור מסמך",
+DlgDocMeAuthor		: "מחבר",
+DlgDocMeCopy		: "זכויות יוצרים",
+DlgDocPreview		: "תצוגה מקדימה",
+
+// Templates Dialog
+Templates			: "תבניות",
+DlgTemplatesTitle	: "תביות תוכן",
+DlgTemplatesSelMsg	: "אנא בחר תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:",
+DlgTemplatesLoading	: "מעלה רשימת תבניות אנא המתן",
+DlgTemplatesNoTpl	: "(לא הוגדרו תבניות)",
+
+// About Dialog
+DlgAboutAboutTab	: "אודות",
+DlgAboutBrowserInfoTab	: "גירסת דפדפן",
+DlgAboutVersion		: "גירסא",
+DlgAboutLicense		: "ברשיון תחת תנאי GNU Lesser General Public License",
+DlgAboutInfo		: "מידע נוסף ניתן למצוא כאן:"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/hr.js 1.4.0sr5-1/fckeditor/editor/lang/hr.js
--- 1.3.11sr1/fckeditor/editor/lang/hr.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/hr.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: hr.js
+ * 	Croatian language file.
+ * 
+ * File Authors:
+ * 		Alex Varga (avarga@globaldizajn.hr)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Smanji trake s alatima",
+ToolbarExpand		: "Proširi trake s alatima",
+
+// Toolbar Items and Context Menu
+Save				: "Snimi",
+NewPage				: "Nova stranica",
+Preview				: "Pregledaj",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Zalijepi",
+PasteText			: "Zalijepi kao čisti tekst",
+PasteWord			: "Zalijepi iz Worda",
+Print				: "Ispiši",
+SelectAll			: "Odaberi sve",
+RemoveFormat		: "Ukloni formatiranje",
+InsertLinkLbl		: "Link",
+InsertLink			: "Ubaci/promijeni link",
+RemoveLink			: "Ukloni link",
+Anchor				: "Ubaci/promijeni sidro",
+InsertImageLbl		: "Slika",
+InsertImage			: "Ubaci/promijeni sliku",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Ubaci/promijeni Flash",
+InsertTableLbl		: "Tablica",
+InsertTable			: "Ubaci/promijeni tablicu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Ubaci vodoravnu liniju",
+InsertSpecialCharLbl: "Posebni karakteri",
+InsertSpecialChar	: "Ubaci posebne znakove",
+InsertSmileyLbl		: "Smješko",
+InsertSmiley		: "Ubaci smješka",
+About				: "O FCKeditoru",
+Bold				: "Podebljaj",
+Italic				: "Ukosi",
+Underline			: "Potcrtano",
+StrikeThrough		: "Precrtano",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Lijevo poravnanje",
+CenterJustify		: "Središnje poravnanje",
+RightJustify		: "Desno poravnanje",
+BlockJustify		: "Blok poravnanje",
+DecreaseIndent		: "Pomakni ulijevo",
+IncreaseIndent		: "Pomakni udesno",
+Undo				: "Poništi",
+Redo				: "Ponovi",
+NumberedListLbl		: "Brojčana lista",
+NumberedList		: "Ubaci/ukloni brojčanu listu",
+BulletedListLbl		: "Obična lista",
+BulletedList		: "Ubaci/ukloni običnu listu",
+ShowTableBorders	: "Prikaži okvir tablice",
+ShowDetails			: "Prikaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Veličina",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "K&ocirc;d",
+Find				: "Pronađi",
+Replace				: "Zamijeni",
+SpellCheck			: "Provjeri pravopis",
+UniversalKeyboard	: "Univerzalna tipkovnica",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+// Context Menu
+EditLink			: "Promijeni link",
+InsertRow			: "Ubaci red",
+DeleteRows			: "Izbriši redove",
+InsertColumn		: "Ubaci kolonu",
+DeleteColumns		: "Izbriši kolone",
+InsertCell			: "Ubaci ćelije",
+DeleteCells			: "Izbriši ćelije",
+MergeCells			: "Spoji ćelije",
+SplitCell			: "Razdvoji ćelije",
+CellProperties		: "Svojstva ćelije",
+TableProperties		: "Svojstva tablice",
+ImageProperties		: "Svojstva slike",
+FlashProperties		: "Flash svojstva",
+
+AnchorProp			: "Svojstva sidra",
+ButtonProp			: "Image Button svojstva",
+CheckboxProp		: "Checkbox svojstva",
+HiddenFieldProp		: "Hidden Field svojstva",
+RadioButtonProp		: "Radio Button svojstva",
+ImageButtonProp		: "Image Button svojstva",
+TextFieldProp		: "Text Field svojstva",
+SelectionFieldProp	: "Selection svojstva",
+TextareaProp		: "Textarea svojstva",
+FormProp			: "Form svojstva",
+
+FontFormats			: "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obrađujem XHTML. Molimo pričekajte...",
+Done				: "Završio",
+PasteWordConfirm	: "Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?",
+NotCompatiblePaste	: "Ova naredba je dostupna samo u Internet Exploreru 5.5 ili novijem. Želite li nastaviti bez čišćenja?",
+UnknownToolbarItem	: "Nepoznati član trake s alatima \"%1\"",
+UnknownCommand		: "Nepoznata naredba \"%1\"",
+NotImplemented		: "Naredba nije implementirana",
+UnknownToolbarSet	: "Traka s alatima \"%1\" ne postoji",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Poništi",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Pretraži server",
+DlgAdvancedTag		: "Napredno",
+DlgOpOther			: "&lt;Drugo&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Molimo unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nije postavljeno&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smjer jezika",
+DlgGenLangDirLtr	: "S lijeva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na lijevo (RTL)",
+DlgGenLangCode		: "K&ocirc;d jezika",
+DlgGenAccessKey		: "Pristupna tipka",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Dugački opis URL",
+DlgGenClass			: "Stylesheet klase",
+DlgGenTitle			: "Advisory naslov",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Kodna stranica povezanih resursa",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Svojstva slika",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Pošalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošalji",
+DlgImgAlt			: "Alternativni tekst",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zaključaj odnos",
+DlgBtnResetSize		: "Obriši veličinu",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Poravnaj",
+DlgImgAlignLeft		: "Lijevo",
+DlgImgAlignAbsBottom: "Abs dolje",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dolje",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Pregledaj",
+DlgImgAlertUrl		: "Unesite URL slike",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash svojstva",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Ponavljaj",
+DlgFlashChkMenu		: "Omogući Flash izbornik",
+DlgFlashScale		: "Omjer",
+DlgFlashScaleAll	: "Prikaži sve",
+DlgFlashScaleNoBorder	: "Bez okvira",
+DlgFlashScaleFit	: "Točna veličina",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Meta",
+
+DlgLnkType			: "Link vrsta",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;drugo&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Odaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id elementa",
+DlgLnkNoAnchors		: "&lt;Nema dostupnih sidra&gt;",
+DlgLnkEMail			: "E-Mail adresa",
+DlgLnkEMailSubject	: "Naslov",
+DlgLnkEMailBody		: "Sadržaj poruke",
+DlgLnkUpload		: "Pošalji",
+DlgLnkBtnUpload		: "Pošalji na server",
+
+DlgLnkTarget		: "Meta",
+DlgLnkTargetFrame	: "&lt;okvir&gt;",
+DlgLnkTargetPopup	: "&lt;popup prozor&gt;",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Vršni prozor (_top)",
+DlgLnkTargetFrameName	: "Ime ciljnog okvira",
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Mogućnosti popup prozora",
+DlgLnkPopResize		: "Promjenljive veličine",
+DlgLnkPopLocation	: "Traka za lokaciju",
+DlgLnkPopMenu		: "Izborna traka",
+DlgLnkPopScroll		: "Scroll traka",
+DlgLnkPopStatus		: "Statusna traka",
+DlgLnkPopToolbar	: "Traka s alatima",
+DlgLnkPopFullScrn	: "Cijeli ekran (IE)",
+DlgLnkPopDependent	: "Ovisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Lijeva pozicija",
+DlgLnkPopTop		: "Gornja pozicija",
+
+DlnLnkMsgNoUrl		: "Molimo upišite URL link",
+DlnLnkMsgNoEMail	: "Molimo upišite e-mail adresu",
+DlnLnkMsgNoAnchor	: "Molimo odaberite sidro",
+
+// Color Dialog
+DlgColorTitle		: "Odaberite boju",
+DlgColorBtnClear	: "Obriši",
+DlgColorHighlight	: "Osvijetli",
+DlgColorSelected	: "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Odaberite posebni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Svojstva tablice",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Veličina okvira",
+DlgTableAlign		: "Poravnanje",
+DlgTableAlignNotSet	: "&lt;nije postavljeno&gt;",
+DlgTableAlignLeft	: "Lijevo",
+DlgTableAlignCenter	: "Središnje",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "postotaka",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Prostornost ćelija",
+DlgTableCellPad		: "Razmak ćelija",
+DlgTableCaption		: "Naslov",
+
+// Table Cell Dialog
+DlgCellTitle		: "Svojstva ćelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "postotaka",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "&lt;nije postavljeno&gt;",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravno poravnanje",
+DlgCellHorAlignNotSet	: "&lt;nije postavljeno&gt;",
+DlgCellHorAlignLeft	: "Lijevo",
+DlgCellHorAlignCenter	: "Središnje",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Okomito poravnanje",
+DlgCellVerAlignNotSet	: "&lt;nije postavljeno&gt;",
+DlgCellVerAlignTop	: "Gornje",
+DlgCellVerAlignMiddle	: "Srednišnje",
+DlgCellVerAlignBottom	: "Donje",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje redova",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Odaberi...",
+
+// Find Dialog
+DlgFindTitle		: "Pronađi",
+DlgFindFindBtn		: "Pronađi",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamijeni",
+DlgReplaceFindLbl		: "Pronađi:",
+DlgReplaceReplaceLbl	: "Zamijeni s:",
+DlgReplaceCaseChk		: "Usporedi mala/velika slova",
+DlgReplaceReplaceBtn	: "Zamijeni",
+DlgReplaceReplAllBtn	: "Zamijeni sve",
+DlgReplaceWordChk		: "Usporedi cijele riječi",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog ljepljenja. Molimo koristite kraticu na tipkovnici (Ctrl+V).",
+PasteErrorCut	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).",
+
+PasteAsText		: "Zalijepi kao čisti tekst",
+PasteFromWord	: "Zalijepi iz Worda",
+
+DlgPasteMsg2	: "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Zanemari definiciju vrste fonta",
+DlgPasteRemoveStyles	: "Ukloni definicije stilova",
+DlgPasteCleanBox		: "Očisti okvir",
+
+
+// Color Picker
+ColorAutomatic	: "Automatski",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Svojstva dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Svojstva sidra",
+DlgAnchorName		: "Ime sidra",
+DlgAnchorErrorName	: "Molimo unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nije u rječniku",
+DlgSpellChangeTo		: "Promijeni u",
+DlgSpellBtnIgnore		: "Zanemari",
+DlgSpellBtnIgnoreAll	: "Zanemari sve",
+DlgSpellBtnReplace		: "Zamijeni",
+DlgSpellBtnReplaceAll	: "Zamijeni sve",
+DlgSpellBtnUndo			: "Vrati",
+DlgSpellNoSuggestions	: "-Nema preporuke-",
+DlgSpellProgress		: "Provjera u tijeku...",
+DlgSpellNoMispell		: "Provjera završena: Nema grešaka",
+DlgSpellNoChanges		: "Provjera završena: Nije napravljena promjena",
+DlgSpellOneChange		: "Provjera završena: Jedna riječ promjenjena",
+DlgSpellManyChanges		: "Provjera završena: Promijenjeno %1 riječi",
+
+IeSpellDownload			: "Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?",
+
+// Button Dialog
+DlgButtonText	: "Tekst (vrijednost)",
+DlgButtonType	: "Vrsta",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ime",
+DlgCheckboxValue	: "Vrijednost",
+DlgCheckboxSelected	: "Odabrano",
+
+// Form Dialog
+DlgFormName		: "Ime",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Ime",
+DlgSelectValue		: "Vrijednost",
+DlgSelectSize		: "Veličina",
+DlgSelectLines		: "linija",
+DlgSelectChkMulti	: "Dozvoli višestruki odabir",
+DlgSelectOpAvail	: "Dostupne opcije",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Vrijednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Promijeni",
+DlgSelectBtnUp		: "Gore",
+DlgSelectBtnDown	: "Dolje",
+DlgSelectBtnSetValue : "Postavi kao odabranu vrijednost",
+DlgSelectBtnDelete	: "Obriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Ime",
+DlgTextareaCols	: "Kolona",
+DlgTextareaRows	: "Redova",
+
+// Text Field Dialog
+DlgTextName			: "Ime",
+DlgTextValue		: "Vrijednost",
+DlgTextCharWidth	: "Širina",
+DlgTextMaxChars		: "Najviše karaktera",
+DlgTextType			: "Vrsta",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Šifra",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ime",
+DlgHiddenValue	: "Vrijednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Svojstva liste",
+NumberedListProp	: "Svojstva brojčane liste",
+DlgLstType			: "Vrsta",
+DlgLstTypeCircle	: "Krug",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrat",
+DlgLstTypeNumbers	: "Brojevi (1, 2, 3)",
+DlgLstTypeLCase		: "Mala slova (a, b, c)",
+DlgLstTypeUCase		: "Velika slova (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske brojke (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske brojke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Općenito",
+DlgDocBackTab		: "Pozadina",
+DlgDocColorsTab		: "Boje i margine",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Naslov stranice",
+DlgDocLangDir		: "Smjer jezika",
+DlgDocLangDirLTR	: "S lijeva na desno",
+DlgDocLangDirRTL	: "S desna na lijevo",
+DlgDocLangCode		: "K&ocirc;d jezika",
+DlgDocCharSet		: "Enkodiranje znakova",
+DlgDocCharSetOther	: "Ostalo enkodiranje znakova",
+
+DlgDocDocType		: "Zaglavlje vrste dokumenta",
+DlgDocDocTypeOther	: "Ostalo zaglavlje vrste dokumenta",
+DlgDocIncXHTML		: "Ubaci XHTML deklaracije",
+DlgDocBgColor		: "Boja pozadine",
+DlgDocBgImage		: "URL slike pozadine",
+DlgDocBgNoScroll	: "Pozadine se ne pomiče",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Posjećeni link",
+DlgDocCActive		: "Aktivni link",
+DlgDocMargins		: "Margine stranice",
+DlgDocMaTop			: "Vrh",
+DlgDocMaLeft		: "Lijevo",
+DlgDocMaRight		: "Desno",
+DlgDocMaBottom		: "Dolje",
+DlgDocMeIndex		: "Ključne riječi dokumenta (odvojene zarezom)",
+DlgDocMeDescr		: "Opis dokumenta",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorska prava",
+DlgDocPreview		: "Pregledaj",
+
+// Templates Dialog
+Templates			: "Predlošci",
+DlgTemplatesTitle	: "Predlošci sadržaja",
+DlgTemplatesSelMsg	: "Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):",
+DlgTemplatesLoading	: "Učitavam listu predložaka. Molimo pričekajte...",
+DlgTemplatesNoTpl	: "(Nema definiranih predložaka)",
+
+// About Dialog
+DlgAboutAboutTab	: "O FCKEditoru",
+DlgAboutBrowserInfoTab	: "Podaci o pretraživaču",
+DlgAboutVersion		: "inačica",
+DlgAboutLicense		: "Licencirano pod uvjetima GNU Lesser General Public License",
+DlgAboutInfo		: "Za više informacija posjetite"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/hu.js 1.4.0sr5-1/fckeditor/editor/lang/hu.js
--- 1.3.11sr1/fckeditor/editor/lang/hu.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/hu.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: hu.js
+ * 	Hungarian language file.
+ * 
+ * File Authors:
+ * 		Varga Zsolt (meridian@netteszt.hu)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Egyszerû eszköztár",
+ToolbarExpand		: "Bõvített eszköztár",
+
+// Toolbar Items and Context Menu
+Save				: "Mentés",
+NewPage				: "Új oldal",
+Preview				: "Elõnézet",
+Cut					: "Kivágás",
+Copy				: "Másolás",
+Paste				: "Beillesztés",
+PasteText			: "Beillesztés formázatlan szövegként",
+PasteWord			: "Beillesztés Wordbõl",
+Print				: "Nyomtatás",
+SelectAll			: "Minden kijelölése",
+RemoveFormat		: "Formázás törlése",
+InsertLinkLbl		: "Hivatkozás",
+InsertLink			: "Hivatkozás beillesztése/módosítása",
+RemoveLink			: "Hivatkozás törlése",
+Anchor				: "Horgony beillesztése/szerkesztése",
+InsertImageLbl		: "Kép",
+InsertImage			: "Kép beillesztése/módosítása",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash beillesztése, módosítása",
+InsertTableLbl		: "Táblázat",
+InsertTable			: "Táblázat beillesztése/módosítása",
+InsertLineLbl		: "Vonal",
+InsertLine			: "Elválasztóvonal beillesztése",
+InsertSpecialCharLbl: "Speciális karakter",
+InsertSpecialChar	: "Speciális karakter beillesztése",
+InsertSmileyLbl		: "Hangulatjelek",
+InsertSmiley		: "Hangulatjelek beillesztése",
+About				: "FCKeditor névjegy",
+Bold				: "Félkövér",
+Italic				: "Dõlt",
+Underline			: "Aláhúzott",
+StrikeThrough		: "Áthúzott",
+Subscript			: "Alsó index",
+Superscript			: "Felsõ index",
+LeftJustify			: "Balra",
+CenterJustify		: "Középre",
+RightJustify		: "Jobbra",
+BlockJustify		: "Sorkizárt",
+DecreaseIndent		: "Behúzás csökkentése",
+IncreaseIndent		: "Behúzás növelése",
+Undo				: "Visszavonás",
+Redo				: "Ismétlés",
+NumberedListLbl		: "Számozás",
+NumberedList		: "Számozás beillesztése/törlése",
+BulletedListLbl		: "Felsorolás",
+BulletedList		: "Felsorolás beillesztése/törlése",
+ShowTableBorders	: "Táblázat szegély mutatása",
+ShowDetails			: "Részletek mutatása",
+Style				: "Stílus",
+FontFormat			: "Formátum",
+Font				: "Betûtipus",
+FontSize			: "Méret",
+TextColor			: "Betûszín",
+BGColor				: "Háttérszín",
+Source				: "Forráskód",
+Find				: "Keresés",
+Replace				: "Csere",
+SpellCheck			: "Helyesírásellenőrzés",
+UniversalKeyboard	: "Általános billentyűzet",
+
+Form			: "Űrlap",
+Checkbox		: "Jelölőnégyzet",
+RadioButton		: "Választógomb",
+TextField		: "Szövegmező",
+Textarea		: "Szövegterület",
+HiddenField		: "Rejtettmező",
+Button			: "Gomb",
+SelectionField	: "Választómező",
+ImageButton		: "Képgomb",
+
+// Context Menu
+EditLink			: "Hivatkozás módosítása",
+InsertRow			: "Sor beszúrása",
+DeleteRows			: "Sor(ok) törlése",
+InsertColumn		: "Oszlop beszúrása",
+DeleteColumns		: "Oszlop(ok) törlése",
+InsertCell			: "Cella beszúrása",
+DeleteCells			: "Cellák törlése",
+MergeCells			: "Cellák egyesítése",
+SplitCell			: "Cellák szétválasztása",
+CellProperties		: "Cellák tulajdonsága",
+TableProperties		: "Táblázat tulajdonsága",
+ImageProperties		: "Kép tulajdonsága",
+FlashProperties		: "Flash tulajdonsága",
+
+AnchorProp			: "Horgony(ok) tulajdonsága(i)",
+ButtonProp			: "Gomb(ok) tulajdonsága(i) ",
+CheckboxProp		: "Jelölőnégyzet(ek) tulajdonsága(i)",
+HiddenFieldProp		: "Rejtettmező(k) tulajdonsága(i)",
+RadioButtonProp		: "Választógomb(ok) tulajdonsága(i)",
+ImageButtonProp		: "Képgomb(ok) tulajdonsága(i)",
+TextFieldProp		: "Szövegmező(k) tulajdonsága(i)",
+SelectionFieldProp	: "Választómező(k) tulajdonsága(i)",
+TextareaProp		: "Szövegterület(ek) tulajdonsága(i)",
+FormProp			: "Űrlap(ok) tulajdonsága(i)",
+
+FontFormats			: "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML feldolgozása. Kérem várjon...",
+Done				: "Kész",
+PasteWordConfirm	: "A szöveg amit be szeretnél illeszteni úgy néz ki Word-bõl van másolva. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "Ez a parancs csak Internet Explorer 5.5 verziótól használható (Firefox rulez). Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Ismeretlen eszköztár elem \"%1\"",
+UnknownCommand		: "Ismeretlen parancs \"%1\"",
+NotImplemented		: "A parancs nincs beágyazva",
+UnknownToolbarSet	: "Eszközkészlet beállítás \"%1\" nem létezik",
+NoActiveX			: "A böngésződ biztonsági beállításai limitálják a szerkesztő lehetőségeit. Engedélyezned kell ezt az opciót: \"Run ActiveX controls and plug-ins\". Kitapasztalhatod a hibákat és feljegyezheted a hiányzó képességeket.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Mégsem",
+DlgBtnClose			: "Bezárás",
+DlgBtnBrowseServer	: "Szerver tallózása",
+DlgAdvancedTag		: "Haladó",
+DlgOpOther			: "Egyéb",
+DlgInfoTab			: "Információ",
+DlgAlertUrl			: "Illeszd be a hivatkozást",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nincs beállítva&gt;",
+DlgGenId			: "Azonosító",
+DlgGenLangDir		: "Nyelv útmutató",
+DlgGenLangDirLtr	: "Balról jobbra",
+DlgGenLangDirRtl	: "Jobbról balra",
+DlgGenLangCode		: "Nyelv kód",
+DlgGenAccessKey		: "Elérési kulcs",
+DlgGenName			: "Név",
+DlgGenTabIndex		: "Tabulátor index",
+DlgGenLongDescr		: "Hosszú URL",
+DlgGenClass			: "Stíluskészlet",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Hivatkozott kódlap készlet",
+DlgGenStyle			: "Stílus",
+
+// Image Dialog
+DlgImgTitle			: "Kép tulajdonsága",
+DlgImgInfoTab		: "Kép információ",
+DlgImgBtnUpload		: "Küldés a szervernek",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Feltöltés",
+DlgImgAlt			: "Buborék szöveg",
+DlgImgWidth			: "Szélesség",
+DlgImgHeight		: "Magasság",
+DlgImgLockRatio		: "Arány megtartása",
+DlgBtnResetSize		: "Eredeti méret",
+DlgImgBorder		: "Keret",
+DlgImgHSpace		: "Vízsz. táv",
+DlgImgVSpace		: "Függ. táv",
+DlgImgAlign			: "Igazítás",
+DlgImgAlignLeft		: "Bal",
+DlgImgAlignAbsBottom: "Legaljára",
+DlgImgAlignAbsMiddle: "Közepére",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Aljára",
+DlgImgAlignMiddle	: "Középre",
+DlgImgAlignRight	: "Jobbra",
+DlgImgAlignTextTop	: "Szöveg tetjére",
+DlgImgAlignTop		: "Tetejére",
+DlgImgPreview		: "Elõnézet",
+DlgImgAlertUrl		: "Töltse ki a kép URL-ét",
+DlgImgLinkTab		: "Hivatkozás",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash tulajdonsága",
+DlgFlashChkPlay		: "Automata lejátszás",
+DlgFlashChkLoop		: "Folyamatosan",
+DlgFlashChkMenu		: "Flash menü engedélyezése",
+DlgFlashScale		: "Méretezés",
+DlgFlashScaleAll	: "Mindent mutat",
+DlgFlashScaleNoBorder	: "Keret nélkül",
+DlgFlashScaleFit	: "Teljes kitöltés",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hivatkozás",
+DlgLnkInfoTab		: "Hivatkozás információ",
+DlgLnkTargetTab		: "Cél",
+
+DlgLnkType			: "Hivatkozás tipusa",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Horgony az oldalon",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "&lt;más&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Horgony választása",
+DlgLnkAnchorByName	: "Horgony név szerint",
+DlgLnkAnchorById	: "Azonosító szerint elõsorban ",
+DlgLnkNoAnchors		: "&lt;Nincs horgony a dokumentumban&gt;",
+DlgLnkEMail			: "E-Mail cím",
+DlgLnkEMailSubject	: "Üzenet tárgya",
+DlgLnkEMailBody		: "Üzenet",
+DlgLnkUpload		: "Feltöltés",
+DlgLnkBtnUpload		: "Küldés a szerverhez",
+
+DlgLnkTarget		: "Cél",
+DlgLnkTargetFrame	: "&lt;keret&gt;",
+DlgLnkTargetPopup	: "&lt;felugró ablak&gt;",
+DlgLnkTargetBlank	: "Új ablak (_blank)",
+DlgLnkTargetParent	: "Szülõ ablak (_parent)",
+DlgLnkTargetSelf	: "Azonos ablak (_self)",
+DlgLnkTargetTop		: "Legfelsõ ablak (_top)",
+DlgLnkTargetFrameName	: "Cél frame neve",
+DlgLnkPopWinName	: "Felugró ablak neve",
+DlgLnkPopWinFeat	: "Felugró ablak jellemzõi",
+DlgLnkPopResize		: "Méretezhetõ",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menü sor",
+DlgLnkPopScroll		: "Gördítõsáv",
+DlgLnkPopStatus		: "Állapotsor",
+DlgLnkPopToolbar	: "Eszköztár",
+DlgLnkPopFullScrn	: "Teljes képernyõ (IE)",
+DlgLnkPopDependent	: "Netscape sajátosság",
+DlgLnkPopWidth		: "Szélesség",
+DlgLnkPopHeight		: "Magasság",
+DlgLnkPopLeft		: "Bal pozíció",
+DlgLnkPopTop		: "Felsõ pozíció",
+
+DlnLnkMsgNoUrl		: "Adja meg a hivatkozás URL-ét",
+DlnLnkMsgNoEMail	: "Adja meg az e-mail címet",
+DlnLnkMsgNoAnchor	: "Válasszon egy horgonyt",
+
+// Color Dialog
+DlgColorTitle		: "Szinválasztás",
+DlgColorBtnClear	: "Törlés",
+DlgColorHighlight	: "Világos rész",
+DlgColorSelected	: "Választott",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Hangulatjel beszúrása",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Speciális karakter választása",
+
+// Table Dialog
+DlgTableTitle		: "Táblázat tulajdonságai",
+DlgTableRows		: "Sorok",
+DlgTableColumns		: "Oszlopok",
+DlgTableBorder		: "Szegélyméret",
+DlgTableAlign		: "Igazítás",
+DlgTableAlignNotSet	: "<Nincs beállítva>",
+DlgTableAlignLeft	: "Bal",
+DlgTableAlignCenter	: "Közép",
+DlgTableAlignRight	: "Jobb",
+DlgTableWidth		: "Szélesség",
+DlgTableWidthPx		: "képpontok",
+DlgTableWidthPc		: "százalék",
+DlgTableHeight		: "Magasság",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Felirat",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cella tulajdonságai",
+DlgCellWidth		: "Szélesség",
+DlgCellWidthPx		: "képpontok",
+DlgCellWidthPc		: "százalék",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Sortörés",
+DlgCellWordWrapNotSet	: "&lt;Nincs beállítva&gt;",
+DlgCellWordWrapYes	: "Igen",
+DlgCellWordWrapNo	: "Nem",
+DlgCellHorAlign		: "Vízszintes igazítás",
+DlgCellHorAlignNotSet	: "&lt;Nincs beállítva&gt;",
+DlgCellHorAlignLeft	: "Bal",
+DlgCellHorAlignCenter	: "Közép",
+DlgCellHorAlignRight: "Jobb",
+DlgCellVerAlign		: "Függõleges igazítás",
+DlgCellVerAlignNotSet	: "&lt;Nincs beállítva&gt;",
+DlgCellVerAlignTop	: "Tetejére",
+DlgCellVerAlignMiddle	: "Középre",
+DlgCellVerAlignBottom	: "Aljára",
+DlgCellVerAlignBaseline	: "Egyvonalba",
+DlgCellRowSpan		: "Sorok egyesítése",
+DlgCellCollSpan		: "Oszlopok egyesítése",
+DlgCellBackColor	: "Háttérszín",
+DlgCellBorderColor	: "Szegélyszín",
+DlgCellBtnSelect	: "Kiválasztás...",
+
+// Find Dialog
+DlgFindTitle		: "Keresés",
+DlgFindFindBtn		: "Keresés",
+DlgFindNotFoundMsg	: "A keresett szöveg nem található.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Csere",
+DlgReplaceFindLbl		: "Keresendõ:",
+DlgReplaceReplaceLbl	: "Cserélendõ:",
+DlgReplaceCaseChk		: "Találatok",
+DlgReplaceReplaceBtn	: "Csere",
+DlgReplaceReplAllBtn	: "Összes cseréje",
+DlgReplaceWordChk		: "Egész dokumentumban",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "A böngészõ biztonsági beállításai nem engedélyezik a szerkesztõnek, hogy végrehatjsa a beillesztés mûveletet.Használja az alábbi billentyûzetkombinációt (Ctrl+V).",
+PasteErrorCut	: "A böngészõ biztonsági beállításai nem engedélyezik a szerkesztõnek, hogy végrehatjsa a kivágás mûveletet.Használja az alábbi billentyûzetkombinációt (Ctrl+X).",
+PasteErrorCopy	: "A böngészõ biztonsági beállításai nem engedélyezik a szerkesztõnek, hogy végrehatjsa a másolás mûveletet.Használja az alábbi billentyûzetkombinációt (Ctrl+X).",
+
+PasteAsText		: "Beillesztés formázatlan szövegként",
+PasteFromWord	: "Beillesztés Wordbõl",
+
+DlgPasteMsg2	: "Másold be az alábbi mezőbe a következő billentyűk használatával (<STRONG>Ctrl+V</STRONG>) és nyomj <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Betű formázások megszüntetése",
+DlgPasteRemoveStyles	: "Stíluslapok eltávolítása",
+DlgPasteCleanBox		: "Mező tartalmának törlése",
+
+
+// Color Picker
+ColorAutomatic	: "Automatikus",
+ColorMoreColors	: "Több szín...",
+
+// Document Properties
+DocProps		: "Dokumentum tulajdonsága",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Horgony tulajdonsága",
+DlgAnchorName		: "Horgony neve",
+DlgAnchorErrorName	: "Kérem adja meg a horgony nevét",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nincs a könyvtárban",
+DlgSpellChangeTo		: "Átváltás",
+DlgSpellBtnIgnore		: "Kihagyja",
+DlgSpellBtnIgnoreAll	: "Összeset kihagyja",
+DlgSpellBtnReplace		: "Csere",
+DlgSpellBtnReplaceAll	: "Összes cseréje",
+DlgSpellBtnUndo			: "Visszavonás",
+DlgSpellNoSuggestions	: "Nincs feltevés",
+DlgSpellProgress		: "Helyesírásellenőrzés folyamatban...",
+DlgSpellNoMispell		: "Helyesírásellenőrzés kész: Nem találtam hibát",
+DlgSpellNoChanges		: "Helyesírásellenőrzés kész: Nincs változtatott szó",
+DlgSpellOneChange		: "Helyesírásellenőrzés kész: Egy szó cserélve",
+DlgSpellManyChanges		: "Helyesírásellenőrzés kész: %1 szó cserélve",
+
+IeSpellDownload			: "A helyesírásellenőrző nincs telepítve. Szeretné letölteni most?",
+
+// Button Dialog
+DlgButtonText	: "Szöveg (Érték)",
+DlgButtonType	: "Típus",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Név",
+DlgCheckboxValue	: "Érték",
+DlgCheckboxSelected	: "Választott",
+
+// Form Dialog
+DlgFormName		: "Név",
+DlgFormAction	: "Esemény",
+DlgFormMethod	: "Metódus",
+
+// Select Field Dialog
+DlgSelectName		: "Név",
+DlgSelectValue		: "Érték",
+DlgSelectSize		: "Méret",
+DlgSelectLines		: "sorok",
+DlgSelectChkMulti	: "Engedi a többszörös kiválasztást",
+DlgSelectOpAvail	: "Elérhető opciók",
+DlgSelectOpText		: "Szöveg",
+DlgSelectOpValue	: "Érték",
+DlgSelectBtnAdd		: "Bővít",
+DlgSelectBtnModify	: "Módosít",
+DlgSelectBtnUp		: "Fel",
+DlgSelectBtnDown	: "Le",
+DlgSelectBtnSetValue : "Beállítja a kiválasztott értéket",
+DlgSelectBtnDelete	: "Töröl",
+
+// Textarea Dialog
+DlgTextareaName	: "Név",
+DlgTextareaCols	: "Oszlopok",
+DlgTextareaRows	: "Sorok",
+
+// Text Field Dialog
+DlgTextName			: "Név",
+DlgTextValue		: "Érték",
+DlgTextCharWidth	: "Karakter szélesség",
+DlgTextMaxChars		: "Maximum karakterek",
+DlgTextType			: "Típus",
+DlgTextTypeText		: "Szöveg",
+DlgTextTypePass		: "Jelszó",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Név",
+DlgHiddenValue	: "Érték",
+
+// Bulleted List Dialog
+BulletedListProp	: "Felsorolás tulajdonságai",
+NumberedListProp	: "Számozás tulajdonságai",
+DlgLstType			: "Típus",
+DlgLstTypeCircle	: "Ciklus",
+DlgLstTypeDisc		: "Lemez",
+DlgLstTypeSquare	: "Négyzet",
+DlgLstTypeNumbers	: "Számok (1, 2, 3)",
+DlgLstTypeLCase		: "Kisbetűs (a, b, c)",
+DlgLstTypeUCase		: "Nagybetűs (a, b, c)",
+DlgLstTypeSRoman	: "Kis római számok (i, ii, iii)",
+DlgLstTypeLRoman	: "Nagy római számok (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Általános",
+DlgDocBackTab		: "Háttér",
+DlgDocColorsTab		: "Színek és margók",
+DlgDocMetaTab		: "Meta adatok",
+
+DlgDocPageTitle		: "Oldalcím",
+DlgDocLangDir		: "Nyelv utasítás",
+DlgDocLangDirLTR	: "Balról jobbra (LTR)",
+DlgDocLangDirRTL	: "Jobbról balra (RTL)",
+DlgDocLangCode		: "Nyelv kód",
+DlgDocCharSet		: "Karakterkódolás",
+DlgDocCharSetOther	: "Más karakterkódolás",
+
+DlgDocDocType		: "Dokumentum címsor típus",
+DlgDocDocTypeOther	: "Más dokumentum címsor típus",
+DlgDocIncXHTML		: "XHTML elemeket tartalmaz",
+DlgDocBgColor		: "Háttérszín",
+DlgDocBgImage		: "Háttérkép cím",
+DlgDocBgNoScroll	: "Nem gördíthető háttér",
+DlgDocCText			: "Szöveg",
+DlgDocCLink			: "Cím",
+DlgDocCVisited		: "Látogatott cím",
+DlgDocCActive		: "Aktív cím",
+DlgDocMargins		: "Oldal margók",
+DlgDocMaTop			: "Felső",
+DlgDocMaLeft		: "Bal",
+DlgDocMaRight		: "Jobb",
+DlgDocMaBottom		: "Felül",
+DlgDocMeIndex		: "Dokumentum keresőszavak (vesszővel elválasztva)",
+DlgDocMeDescr		: "Dokumentum leírás",
+DlgDocMeAuthor		: "Szerző",
+DlgDocMeCopy		: "Szerzői jog",
+DlgDocPreview		: "Előnézet",
+
+// Templates Dialog
+Templates			: "Sablonok",
+DlgTemplatesTitle	: "Elérhető sablonok",
+DlgTemplatesSelMsg	: "Válaszd ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):",
+DlgTemplatesLoading	: "Sablon lista betöltése. Kis türelmet...",
+DlgTemplatesNoTpl	: "(Nincs sablon megadva)",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Böngésző információ",
+DlgAboutVersion		: "verzió",
+DlgAboutLicense		: "GNU Lesser General Public License szabadalom alá tartozik",
+DlgAboutInfo		: "További információkért menjen"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/it.js 1.4.0sr5-1/fckeditor/editor/lang/it.js
--- 1.3.11sr1/fckeditor/editor/lang/it.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/it.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: it.js
+ * 	Italian language file.
+ * 
+ * File Authors:
+ * 		Simone Chiaretta (simone@piyosailing.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Nasconti la barra degli strumenti",
+ToolbarExpand		: "Mostra la barra degli strumenti",
+
+// Toolbar Items and Context Menu
+Save				: "Salva",
+NewPage				: "Nuova pagina vuota",
+Preview				: "Anteprima",
+Cut					: "Taglia",
+Copy				: "Copia",
+Paste				: "Incolla",
+PasteText			: "Incolla come testo semplice",
+PasteWord			: "Incolla da Word",
+Print				: "Stampa",
+SelectAll			: "Seleziona tutto",
+RemoveFormat		: "Elimina formattazione",
+InsertLinkLbl		: "Collegamento",
+InsertLink			: "Inserisci/Modifica collegamento",
+RemoveLink			: "Elimina collegamento",
+Anchor				: "Inserisci/Modifica Ancora",
+InsertImageLbl		: "Immagine",
+InsertImage			: "Inserisci/Modifica immagine",
+InsertFlashLbl		: "Oggetto Flash",
+InsertFlash			: "Inserisci/Modifica Oggetto Flash",
+InsertTableLbl		: "Tabella",
+InsertTable			: "Inserisci/Modifica tabella",
+InsertLineLbl		: "Riga orizzontale",
+InsertLine			: "Inserisci riga orizzontale",
+InsertSpecialCharLbl: "Caratteri speciali",
+InsertSpecialChar	: "Inserisci carattere speciale",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Inserisci emoticon",
+About				: "Informazioni su FCKeditor",
+Bold				: "Grassetto",
+Italic				: "Corsivo",
+Underline			: "Sottolineato",
+StrikeThrough		: "Barrato",
+Subscript			: "Pedice",
+Superscript			: "Apice",
+LeftJustify			: "Allinea a sinistra",
+CenterJustify		: "Centra",
+RightJustify		: "Allinea a destra",
+BlockJustify		: "Giustifica",
+DecreaseIndent		: "Riduci rientro",
+IncreaseIndent		: "Aumenta rientro",
+Undo				: "Annulla",
+Redo				: "Ripristina",
+NumberedListLbl		: "Elenco numerato",
+NumberedList		: "Inserisci/Modifica elenco numerato",
+BulletedListLbl		: "Elenco puntato",
+BulletedList		: "Inserisci/Modifica elenco puntato",
+ShowTableBorders	: "Mostra bordi tabelle",
+ShowDetails			: "Mostra dettagli",
+Style				: "Stile",
+FontFormat			: "Formato",
+Font				: "Font",
+FontSize			: "Dimensione",
+TextColor			: "Colore testo",
+BGColor				: "Colore sfondo",
+Source				: "Codice Sorgente",
+Find				: "Trova",
+Replace				: "Sostituisci",
+SpellCheck			: "Correttore ortografico",
+UniversalKeyboard	: "Tastiera univerale",
+
+Form			: "Modulo",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Campo di testo",
+Textarea		: "Area di testo",
+HiddenField		: "Campo nascosto",
+Button			: "Bottone",
+SelectionField	: "Menu di selezione",
+ImageButton		: "Bottone immagine",
+
+// Context Menu
+EditLink			: "Modifica collegamento",
+InsertRow			: "Inserisci riga",
+DeleteRows			: "Elimina righe",
+InsertColumn		: "Inserisci colonna",
+DeleteColumns		: "Elimina colonne",
+InsertCell			: "Inserisci cella",
+DeleteCells			: "Elimina celle",
+MergeCells			: "Unisce celle",
+SplitCell			: "Dividi celle",
+CellProperties		: "Proprietà cella",
+TableProperties		: "Proprietà tabella",
+ImageProperties		: "Proprietà immagine",
+FlashProperties		: "Proprietà Oggetto Flash",
+
+AnchorProp			: "Proprietà ancora",
+ButtonProp			: "Proprietà bottone",
+CheckboxProp		: "Proprietà checkbox",
+HiddenFieldProp		: "Proprietà campo nascosto",
+RadioButtonProp		: "Proprietà radio button",
+ImageButtonProp		: "Proprietà bottone immagine",
+TextFieldProp		: "Proprietà campo di testo",
+SelectionFieldProp	: "Proprietà menu di selezione",
+TextareaProp		: "Proprietà area di testo",
+FormProp			: "Proprietà modulo",
+
+FontFormats			: "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Elaborazione XHTML in corso. Attendere prego...",
+Done				: "Completato",
+PasteWordConfirm	: "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?",
+NotCompatiblePaste	: "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?",
+UnknownToolbarItem	: "Elemento della barra strumenti sconosciuto \"%1\"",
+UnknownCommand		: "Comando sconosciuto \"%1\"",
+NotImplemented		: "Commando non implementato",
+UnknownToolbarSet	: "La barra di strumenti \"%1\" non esiste",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annulla",
+DlgBtnClose			: "Chiudi",
+DlgBtnBrowseServer	: "Cerca sul server",
+DlgAdvancedTag		: "Avanzate",
+DlgOpOther			: "&lt;Altro&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Devi inserire l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;non impostato&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direzione scrittura",
+DlgGenLangDirLtr	: "Da Sinistra a Destra (LTR)",
+DlgGenLangDirRtl	: "Da Destra a Sinistra (RTL)",
+DlgGenLangCode		: "Codice Lingua",
+DlgGenAccessKey		: "Scorciatoria<br>da tastiera",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Ordine di tabulazione",
+DlgGenLongDescr		: "URL descrizione estesa",
+DlgGenClass			: "Nome classe CSS",
+DlgGenTitle			: "Titolo",
+DlgGenContType		: "Tipo della risorsa collegata",
+DlgGenLinkCharset	: "Set di caretteri della risorsa collegata",
+DlgGenStyle			: "Stile",
+
+// Image Dialog
+DlgImgTitle			: "Proprietà immagine",
+DlgImgInfoTab		: "Informazioni immagine",
+DlgImgBtnUpload		: "Invia al server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carica",
+DlgImgAlt			: "Testo alternativo",
+DlgImgWidth			: "Larghezza",
+DlgImgHeight		: "Altezza",
+DlgImgLockRatio		: "Blocca rapporto",
+DlgBtnResetSize		: "Reimposta dimensione",
+DlgImgBorder		: "Bordo",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Allineamento",
+DlgImgAlignLeft		: "Sinistra",
+DlgImgAlignAbsBottom: "In basso assoluto",
+DlgImgAlignAbsMiddle: "Centrato assoluto",
+DlgImgAlignBaseline	: "Linea base",
+DlgImgAlignBottom	: "In Basso",
+DlgImgAlignMiddle	: "Centrato",
+DlgImgAlignRight	: "Destra",
+DlgImgAlignTextTop	: "In alto al testo",
+DlgImgAlignTop		: "In Alto",
+DlgImgPreview		: "Anteprima",
+DlgImgAlertUrl		: "Devi inserire l'URL per l'immagine",
+DlgImgLinkTab		: "Collegamento",
+
+// Flash Dialog
+DlgFlashTitle		: "Proprietà Oggetto Flash",
+DlgFlashChkPlay		: "Avvio Automatico",
+DlgFlashChkLoop		: "Cicla",
+DlgFlashChkMenu		: "Abilita Menu di Flash",
+DlgFlashScale		: "Ridimensiona",
+DlgFlashScaleAll	: "Mostra Tutto",
+DlgFlashScaleNoBorder	: "Senza Bordo",
+DlgFlashScaleFit	: "Dimensione Esatta",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Collegamento",
+DlgLnkInfoTab		: "Informazioni collegamento",
+DlgLnkTargetTab		: "Destinazione",
+
+DlgLnkType			: "Tipo di Collegamento",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancora nella pagina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocollo",
+DlgLnkProtoOther	: "&lt;altro&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Scegli Ancora",
+DlgLnkAnchorByName	: "Per Nome",
+DlgLnkAnchorById	: "Per id elemento",
+DlgLnkNoAnchors		: "&lt;Nessuna ancora disponibile nel documento&gt;",
+DlgLnkEMail			: "Indirizzo E-Mail",
+DlgLnkEMailSubject	: "Oggetto del messaggio",
+DlgLnkEMailBody		: "Corpo del messaggio",
+DlgLnkUpload		: "Carica",
+DlgLnkBtnUpload		: "Invia al Server",
+
+DlgLnkTarget		: "Destinazione",
+DlgLnkTargetFrame	: "&lt;riquadro&gt;",
+DlgLnkTargetPopup	: "&lt;finestra popup&gt;",
+DlgLnkTargetBlank	: "Nuova finestra (_blank)",
+DlgLnkTargetParent	: "Finestra padre (_parent)",
+DlgLnkTargetSelf	: "Stessa finestra (_self)",
+DlgLnkTargetTop		: "Finestra superiore (_top)",
+DlgLnkTargetFrameName	: "Nome del riquadro di destinazione",
+DlgLnkPopWinName	: "Nome finestra popup",
+DlgLnkPopWinFeat	: "Caratteristiche finestra popup",
+DlgLnkPopResize		: "Ridimensionabile",
+DlgLnkPopLocation	: "Barra degli indirizzi",
+DlgLnkPopMenu		: "Barra del menu",
+DlgLnkPopScroll		: "Barre di scorrimento",
+DlgLnkPopStatus		: "Barra di stato",
+DlgLnkPopToolbar	: "Barra degli strumenti",
+DlgLnkPopFullScrn	: "A tutto schermo (IE)",
+DlgLnkPopDependent	: "Dipendente (Netscape)",
+DlgLnkPopWidth		: "Larghezza",
+DlgLnkPopHeight		: "Altezza",
+DlgLnkPopLeft		: "Posizione da sinistra",
+DlgLnkPopTop		: "Posizione dall'alto",
+
+DlnLnkMsgNoUrl		: "Devi inserire l'URL del collegamento",
+DlnLnkMsgNoEMail	: "Devi inserire un'indirizzo e-mail",
+DlnLnkMsgNoAnchor	: "Devi selezionare un'ancora",
+
+// Color Dialog
+DlgColorTitle		: "Seleziona colore",
+DlgColorBtnClear	: "Vuota",
+DlgColorHighlight	: "Evidenziato",
+DlgColorSelected	: "Selezionato",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserisci emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleziona carattere speciale",
+
+// Table Dialog
+DlgTableTitle		: "Proprietà tabella",
+DlgTableRows		: "Righe",
+DlgTableColumns		: "Colonne",
+DlgTableBorder		: "Dimensione bordo",
+DlgTableAlign		: "Allineamento",
+DlgTableAlignNotSet	: "&lt;non impostato&gt;",
+DlgTableAlignLeft	: "Sinistra",
+DlgTableAlignCenter	: "Centrato",
+DlgTableAlignRight	: "Destra",
+DlgTableWidth		: "Larghezza",
+DlgTableWidthPx		: "pixel",
+DlgTableWidthPc		: "percento",
+DlgTableHeight		: "Altezza",
+DlgTableCellSpace	: "Spaziatura celle",
+DlgTableCellPad		: "Padding celle",
+DlgTableCaption		: "Intestazione",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriet cella",
+DlgCellWidth		: "Larghezza",
+DlgCellWidthPx		: "pixel",
+DlgCellWidthPc		: "percento",
+DlgCellHeight		: "Altezza",
+DlgCellWordWrap		: "A capo automatico",
+DlgCellWordWrapNotSet	: "&lt;non impostato&gt;",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Allineamento orizzontale",
+DlgCellHorAlignNotSet	: "&lt;non impostato&gt;",
+DlgCellHorAlignLeft	: "Sinistra",
+DlgCellHorAlignCenter	: "Centrato",
+DlgCellHorAlignRight: "Destra",
+DlgCellVerAlign		: "Allineamento verticale",
+DlgCellVerAlignNotSet	: "&lt;non impostato&gt;",
+DlgCellVerAlignTop	: "In Alto",
+DlgCellVerAlignMiddle	: "Centrato",
+DlgCellVerAlignBottom	: "In Basso",
+DlgCellVerAlignBaseline	: "Linea base",
+DlgCellRowSpan		: "Righe occupate",
+DlgCellCollSpan		: "Colonne occupate",
+DlgCellBackColor	: "Colore sfondo",
+DlgCellBorderColor	: "Colore bordo",
+DlgCellBtnSelect	: "Scegli...",
+
+// Find Dialog
+DlgFindTitle		: "Trova",
+DlgFindFindBtn		: "Trova",
+DlgFindNotFoundMsg	: "L'elemento cercato non  stato trovato.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Sostituisci",
+DlgReplaceFindLbl		: "Trova:",
+DlgReplaceReplaceLbl	: "Sostituisci con:",
+DlgReplaceCaseChk		: "Maiuscole/minuscole",
+DlgReplaceReplaceBtn	: "Sostituisci",
+DlgReplaceReplAllBtn	: "Sostituisci tutto",
+DlgReplaceWordChk		: "Solo parole intere",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Le impostazioni di sicurezza del browser non permettono di incollare automaticamente il testo. Usa la tastiera (Ctrl+V).",
+PasteErrorCut	: "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).",
+PasteErrorCopy	: "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).",
+
+PasteAsText		: "Incolla come testo semplice",
+PasteFromWord	: "Incolla da Word",
+
+DlgPasteMsg2	: "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignora le definizioni di Font",
+DlgPasteRemoveStyles	: "Rimuovi le definizioni di Stile",
+DlgPasteCleanBox		: "Svuota area di testo",
+
+
+// Color Picker
+ColorAutomatic	: "Automatico",
+ColorMoreColors	: "Altri colori...",
+
+// Document Properties
+DocProps		: "Proprietà del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietà ancora",
+DlgAnchorName		: "Nome ancora",
+DlgAnchorErrorName	: "Inserici il nome dell'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Non nel dizionario",
+DlgSpellChangeTo		: "Cambia in",
+DlgSpellBtnIgnore		: "Ignora",
+DlgSpellBtnIgnoreAll	: "Ignora tutto",
+DlgSpellBtnReplace		: "Cambia",
+DlgSpellBtnReplaceAll	: "Cambia tutto",
+DlgSpellBtnUndo			: "Annulla",
+DlgSpellNoSuggestions	: "- Nessun suggerimento -",
+DlgSpellProgress		: "Controllo ortografico in corso",
+DlgSpellNoMispell		: "Controllo ortografico completato: nessun errore trovato",
+DlgSpellNoChanges		: "Controllo ortografico completato: nessuna parola cambiata",
+DlgSpellOneChange		: "Controllo ortografico completato: 1 parola cambiata",
+DlgSpellManyChanges		: "Controllo ortografico completato: %1 parole cambiate",
+
+IeSpellDownload			: "Contollo ortografico non installato. Lo vuoi scaricare ora?",
+
+// Button Dialog
+DlgButtonText	: "Testo (Value)",
+DlgButtonType	: "Tipo",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valore",
+DlgCheckboxSelected	: "Selezionato",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Azione",
+DlgFormMethod	: "Metodo",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valore",
+DlgSelectSize		: "Dimensione",
+DlgSelectLines		: "righe",
+DlgSelectChkMulti	: "Permetti selezione multipla",
+DlgSelectOpAvail	: "Opzioni disponibili",
+DlgSelectOpText		: "Testo",
+DlgSelectOpValue	: "Valore",
+DlgSelectBtnAdd		: "Aggiungi",
+DlgSelectBtnModify	: "Modifica",
+DlgSelectBtnUp		: "Su",
+DlgSelectBtnDown	: "Gi",
+DlgSelectBtnSetValue : "Imposta come predefinito",
+DlgSelectBtnDelete	: "Rimuovi",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colonne",
+DlgTextareaRows	: "Righe",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valore",
+DlgTextCharWidth	: "Larghezza",
+DlgTextMaxChars		: "Numero massimo di caratteri",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Testo",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valore",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietà lista puntata",
+NumberedListProp	: "Proprietà lista numerata",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Tondo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Quadrato",
+DlgLstTypeNumbers	: "Numeri (1, 2, 3)",
+DlgLstTypeLCase		: "Caratteri minuscoli (a, b, c)",
+DlgLstTypeUCase		: "Caratteri maiuscoli (A, B, C)",
+DlgLstTypeSRoman	: "Numeri Romani minuscoli (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeri Romani maiuscoli (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Genarale",
+DlgDocBackTab		: "Sfondo",
+DlgDocColorsTab		: "Colori e margini",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titolo pagina",
+DlgDocLangDir		: "Direzione scrittura",
+DlgDocLangDirLTR	: "Da Sinistra a Destra (LTR)",
+DlgDocLangDirRTL	: "Da Destra a Sinistra (RTL)",
+DlgDocLangCode		: "Codice Lingua",
+DlgDocCharSet		: "Set di caretteri",
+DlgDocCharSetOther	: "Altro set di caretteri",
+
+DlgDocDocType		: "Intestazione DocType",
+DlgDocDocTypeOther	: "Altra intestazione DocType",
+DlgDocIncXHTML		: "Includi dichiarazione XHTML",
+DlgDocBgColor		: "Colore di sfondo",
+DlgDocBgImage		: "Immagine di sfondo",
+DlgDocBgNoScroll	: "Sfondo fissato",
+DlgDocCText			: "Testo",
+DlgDocCLink			: "Collegamento",
+DlgDocCVisited		: "Collegamento visitato",
+DlgDocCActive		: "Collegamento attivo",
+DlgDocMargins		: "Margini",
+DlgDocMaTop			: "In Alto",
+DlgDocMaLeft		: "A Sinistra",
+DlgDocMaRight		: "A Destra",
+DlgDocMaBottom		: "In Basso",
+DlgDocMeIndex		: "Chiavi di indicizzazione documento (separate da virgola)",
+DlgDocMeDescr		: "Descrizione documento",
+DlgDocMeAuthor		: "Autore",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Anteprima",
+
+// Templates Dialog
+Templates			: "Modelli",
+DlgTemplatesTitle	: "Contenuto dei modelli",
+DlgTemplatesSelMsg	: "Seleziona il modello da aprire nell'editor<br>(il contenuto attuale verrà eliminato):",
+DlgTemplatesLoading	: "Caricamento modelli in corso. Attendere prego...",
+DlgTemplatesNoTpl	: "(Nessun modello definito)",
+
+// About Dialog
+DlgAboutAboutTab	: "Informazioni",
+DlgAboutBrowserInfoTab	: "Informazioni Browser",
+DlgAboutVersion		: "versione",
+DlgAboutLicense		: "Rilasciato sotto la licensa GNU Lesser General Public License",
+DlgAboutInfo		: "Localizzazione in Italiano realizzata da Simone Chiaretta<br /><a target=\"_blank\" href=\"http://www.piyosailing.com/S/\">www.piyosailing.com</a><br /><br />Per maggiori informazioni visitare"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ja.js 1.4.0sr5-1/fckeditor/editor/lang/ja.js
--- 1.3.11sr1/fckeditor/editor/lang/ja.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ja.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ja.js
+ * 	Japanese language file.
+ * 
+ * File Authors:
+ * 		Takashi Yamaguchi (jack@omakase.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ツールバーを隠す",
+ToolbarExpand		: "ツールバーを表示",
+
+// Toolbar Items and Context Menu
+Save				: "保存",
+NewPage				: "新しいページ",
+Preview				: "プレビュー",
+Cut					: "切り取り",
+Copy				: "コピー",
+Paste				: "貼り付け",
+PasteText			: "プレーンテキスト貼り付け",
+PasteWord			: "ワード文章から貼り付け",
+Print				: "印刷",
+SelectAll			: "すべて選択",
+RemoveFormat		: "フォーマット削除",
+InsertLinkLbl		: "リンク",
+InsertLink			: "リンク挿入/編集",
+RemoveLink			: "リンク削除",
+Anchor				: "アンカー挿入/編集",
+InsertImageLbl		: "イメージ",
+InsertImage			: "イメージ挿入/編集",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash挿入/編集",
+InsertTableLbl		: "テーブル",
+InsertTable			: "テーブル挿入/編集",
+InsertLineLbl		: "ライン",
+InsertLine			: "横罫線",
+InsertSpecialCharLbl: "特殊文字",
+InsertSpecialChar	: "特殊文字挿入",
+InsertSmileyLbl		: "絵文字",
+InsertSmiley		: "絵文字挿入",
+About				: "FCKeditorヘルプ",
+Bold				: "太字",
+Italic				: "斜体",
+Underline			: "下線",
+StrikeThrough		: "打ち消し線",
+Subscript			: "添え字",
+Superscript			: "上付き文字",
+LeftJustify			: "左揃え",
+CenterJustify		: "中央揃え",
+RightJustify		: "右揃え",
+BlockJustify		: "両端揃え",
+DecreaseIndent		: "インデント解除",
+IncreaseIndent		: "インデント",
+Undo				: "元に戻す",
+Redo				: "やり直し",
+NumberedListLbl		: "段落番号",
+NumberedList		: "段落番号の追加/削除",
+BulletedListLbl		: "箇条書き",
+BulletedList		: "箇条書きの追加/削除",
+ShowTableBorders	: "テーブルボーダー表示",
+ShowDetails			: "詳細表示",
+Style				: "スタイル",
+FontFormat			: "フォーマット",
+Font				: "フォント",
+FontSize			: "サイズ",
+TextColor			: "テキスト色",
+BGColor				: "背景色",
+Source				: "ソース",
+Find				: "検索",
+Replace				: "置き換え",
+SpellCheck			: "スペルチェック",
+UniversalKeyboard	: "ユニバーサル・キーボード",
+
+Form			: "フォーム",
+Checkbox		: "チェックボックス",
+RadioButton		: "ラジオボタン",
+TextField		: "１行テキスト",
+Textarea		: "テキストエリア",
+HiddenField		: "不可視フィールド",
+Button			: "ボタン",
+SelectionField	: "選択フィールド",
+ImageButton		: "画像ボタン",
+
+// Context Menu
+EditLink			: "リンク編集",
+InsertRow			: "行挿入",
+DeleteRows			: "行削除",
+InsertColumn		: "列挿入",
+DeleteColumns		: "列削除",
+InsertCell			: "セル挿入",
+DeleteCells			: "セル削除",
+MergeCells			: "セル結合",
+SplitCell			: "セル分割",
+CellProperties		: "セル プロパティ",
+TableProperties		: "テーブル プロパティ",
+ImageProperties		: "イメージ プロパティ",
+FlashProperties		: "Flash プロパティ",
+
+AnchorProp			: "アンカー プロパティ",
+ButtonProp			: "ボタン プロパティ",
+CheckboxProp		: "チェックボックス プロパティ",
+HiddenFieldProp		: "不可視フィールド プロパティ",
+RadioButtonProp		: "ラジオボタン プロパティ",
+ImageButtonProp		: "画像ボタン プロパティ",
+TextFieldProp		: "１行テキスト プロパティ",
+SelectionFieldProp	: "選択フィールド プロパティ",
+TextareaProp		: "テキストエリア プロパティ",
+FormProp			: "フォーム プロパティ",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML処理中. しばらくお待ちください...",
+Done				: "完了",
+PasteWordConfirm	: "貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか？",
+NotCompatiblePaste	: "このコマンドはインターネット・エクスプローラーバージョン5.5以上で利用可能です。クリーニングしないで貼り付けを行いますか？",
+UnknownToolbarItem	: "未知のツールバー項目 \"%1\"",
+UnknownCommand		: "未知のコマンド名 \"%1\"",
+NotImplemented		: "コマンドはインプリメントされませんでした。",
+UnknownToolbarSet	: "ツールバー設定 \"%1\" 存在しません。",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "キャンセル",
+DlgBtnClose			: "閉じる",
+DlgBtnBrowseServer	: "サーバーブラウザー",
+DlgAdvancedTag		: "高度な設定",
+DlgOpOther			: "&lt;その他&gt;",
+DlgInfoTab			: "情報",
+DlgAlertUrl			: "URLを挿入してください",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;なし&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "文字表記の方向",
+DlgGenLangDirLtr	: "左から右 (LTR)",
+DlgGenLangDirRtl	: "右から左 (RTL)",
+DlgGenLangCode		: "言語コード",
+DlgGenAccessKey		: "アクセスキー",
+DlgGenName			: "Name属性",
+DlgGenTabIndex		: "タブインデックス",
+DlgGenLongDescr		: "longdesc属性(長文説明)",
+DlgGenClass			: "スタイルシートクラス",
+DlgGenTitle			: "Title属性",
+DlgGenContType		: "Content Type属性",
+DlgGenLinkCharset	: "リンクcharset属性",
+DlgGenStyle			: "スタイルシート",
+
+// Image Dialog
+DlgImgTitle			: "イメージ プロパティ",
+DlgImgInfoTab		: "イメージ 情報",
+DlgImgBtnUpload		: "サーバーに送信",
+DlgImgURL			: "URL",
+DlgImgUpload		: "アップロード",
+DlgImgAlt			: "代替テキスト",
+DlgImgWidth			: "幅",
+DlgImgHeight		: "高さ",
+DlgImgLockRatio		: "ロック比率",
+DlgBtnResetSize		: "サイズリセット",
+DlgImgBorder		: "ボーダー",
+DlgImgHSpace		: "横間隔",
+DlgImgVSpace		: "縦間隔",
+DlgImgAlign			: "行揃え",
+DlgImgAlignLeft		: "左",
+DlgImgAlignAbsBottom: "下部(絶対的)",
+DlgImgAlignAbsMiddle: "中央(絶対的)",
+DlgImgAlignBaseline	: "ベースライン",
+DlgImgAlignBottom	: "下",
+DlgImgAlignMiddle	: "中央",
+DlgImgAlignRight	: "右",
+DlgImgAlignTextTop	: "テキスト上部",
+DlgImgAlignTop		: "上",
+DlgImgPreview		: "プレビュー",
+DlgImgAlertUrl		: "イメージのURLを入力してください。",
+DlgImgLinkTab		: "リンク",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash プロパティ",
+DlgFlashChkPlay		: "再生",
+DlgFlashChkLoop		: "ループ再生",
+DlgFlashChkMenu		: "Flashメニュー可能",
+DlgFlashScale		: "拡大縮小設定",
+DlgFlashScaleAll	: "すべて表示",
+DlgFlashScaleNoBorder	: "外が見えない様に拡大",
+DlgFlashScaleFit	: "上下左右にフィット",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ハイパーリンク",
+DlgLnkInfoTab		: "ハイパーリンク 情報",
+DlgLnkTargetTab		: "ターゲット",
+
+DlgLnkType			: "リンクタイプ",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "このページのアンカー",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "プロトコル",
+DlgLnkProtoOther	: "&lt;その他&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "アンカーを選択",
+DlgLnkAnchorByName	: "アンカー名",
+DlgLnkAnchorById	: "エレメントID",
+DlgLnkNoAnchors		: "&lt;ドキュメントにおいて利用可能なアンカーはありません。&gt;",
+DlgLnkEMail			: "E-Mail アドレス",
+DlgLnkEMailSubject	: "件名",
+DlgLnkEMailBody		: "本文",
+DlgLnkUpload		: "アップロード",
+DlgLnkBtnUpload		: "サーバーに送信",
+
+DlgLnkTarget		: "ターゲット",
+DlgLnkTargetFrame	: "&lt;フレーム&gt;",
+DlgLnkTargetPopup	: "&lt;ポップアップウィンドウ&gt;",
+DlgLnkTargetBlank	: "新しいウィンドウ (_blank)",
+DlgLnkTargetParent	: "親ウィンドウ (_parent)",
+DlgLnkTargetSelf	: "同じウィンドウ (_self)",
+DlgLnkTargetTop		: "最上位ウィンドウ (_top)",
+DlgLnkTargetFrameName	: "目的のフレーム名",
+DlgLnkPopWinName	: "ポップアップウィンドウ名",
+DlgLnkPopWinFeat	: "ポップアップウィンドウ特徴",
+DlgLnkPopResize		: "リサイズ可能",
+DlgLnkPopLocation	: "ロケーションバー",
+DlgLnkPopMenu		: "メニューバー",
+DlgLnkPopScroll		: "スクロールバー",
+DlgLnkPopStatus		: "ステータスバー",
+DlgLnkPopToolbar	: "ツールバー",
+DlgLnkPopFullScrn	: "全画面モード(IE)",
+DlgLnkPopDependent	: "開いたウィンドウに連動して閉じる (Netscape)",
+DlgLnkPopWidth		: "幅",
+DlgLnkPopHeight		: "高さ",
+DlgLnkPopLeft		: "左端からの座標で指定",
+DlgLnkPopTop		: "上端からの座標で指定",
+
+DlnLnkMsgNoUrl		: "リンクURLを入力してください。",
+DlnLnkMsgNoEMail	: "メールアドレスを入力してください。",
+DlnLnkMsgNoAnchor	: "アンカーを選択してください。",
+
+// Color Dialog
+DlgColorTitle		: "色選択",
+DlgColorBtnClear	: "クリア",
+DlgColorHighlight	: "ハイライト",
+DlgColorSelected	: "選択色",
+
+// Smiley Dialog
+DlgSmileyTitle		: "顔文字挿入",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "特殊文字選択",
+
+// Table Dialog
+DlgTableTitle		: "テーブル プロパティ",
+DlgTableRows		: "行",
+DlgTableColumns		: "列",
+DlgTableBorder		: "ボーダーサイズ",
+DlgTableAlign		: "キャプションの整列",
+DlgTableAlignNotSet	: "<なし>",
+DlgTableAlignLeft	: "左",
+DlgTableAlignCenter	: "中央",
+DlgTableAlignRight	: "右",
+DlgTableWidth		: "テーブル幅",
+DlgTableWidthPx		: "ピクセル",
+DlgTableWidthPc		: "パーセント",
+DlgTableHeight		: "テーブル高さ",
+DlgTableCellSpace	: "セル内余白",
+DlgTableCellPad		: "セル内間隔",
+DlgTableCaption		: "ｷｬﾌﾟｼｮﾝ",
+
+// Table Cell Dialog
+DlgCellTitle		: "セル プロパティ",
+DlgCellWidth		: "幅",
+DlgCellWidthPx		: "ピクセル",
+DlgCellWidthPc		: "パーセント",
+DlgCellHeight		: "高さ",
+DlgCellWordWrap		: "折り返し",
+DlgCellWordWrapNotSet	: "&lt;なし&gt;",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "セル横の整列",
+DlgCellHorAlignNotSet	: "&lt;なし&gt;",
+DlgCellHorAlignLeft	: "左",
+DlgCellHorAlignCenter	: "中央",
+DlgCellHorAlignRight: "右",
+DlgCellVerAlign		: "セル縦の整列",
+DlgCellVerAlignNotSet	: "&lt;なし&gt;",
+DlgCellVerAlignTop	: "上",
+DlgCellVerAlignMiddle	: "中央",
+DlgCellVerAlignBottom	: "下",
+DlgCellVerAlignBaseline	: "ベースライン",
+DlgCellRowSpan		: "縦幅(行数)",
+DlgCellCollSpan		: "横幅(列数)",
+DlgCellBackColor	: "背景色",
+DlgCellBorderColor	: "ボーダーカラー",
+DlgCellBtnSelect	: "選択...",
+
+// Find Dialog
+DlgFindTitle		: "検索",
+DlgFindFindBtn		: "検索",
+DlgFindNotFoundMsg	: "指定された文字列は見つかりませんでした。",
+
+// Replace Dialog
+DlgReplaceTitle			: "置き換え",
+DlgReplaceFindLbl		: "検索する文字列:",
+DlgReplaceReplaceLbl	: "置換えする文字列:",
+DlgReplaceCaseChk		: "部分一致",
+DlgReplaceReplaceBtn	: "置換え",
+DlgReplaceReplAllBtn	: "すべて置換え",
+DlgReplaceWordChk		: "単語単位で一致",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "ブラウザーのセキュリティ設定によりエディタの貼り付け操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+V)を使用してください。",
+PasteErrorCut	: "ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。",
+PasteErrorCopy	: "ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。",
+
+PasteAsText		: "プレーンテキスト貼り付け",
+PasteFromWord	: "ワード文章から貼り付け",
+
+DlgPasteMsg2	: "キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。",
+DlgPasteIgnoreFont		: "FontタグのFace属性を無視します。",
+DlgPasteRemoveStyles	: "スタイル定義を削除します。",
+DlgPasteCleanBox		: "入力エリアクリア",
+
+
+// Color Picker
+ColorAutomatic	: "自動",
+ColorMoreColors	: "その他の色...",
+
+// Document Properties
+DocProps		: "文書 プロパティ",
+
+// Anchor Dialog
+DlgAnchorTitle		: "アンカー プロパティ",
+DlgAnchorName		: "アンカー名",
+DlgAnchorErrorName	: "アンカー名を必ず入力してください。",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "辞書にありません",
+DlgSpellChangeTo		: "変更",
+DlgSpellBtnIgnore		: "無視",
+DlgSpellBtnIgnoreAll	: "すべて無視",
+DlgSpellBtnReplace		: "置換",
+DlgSpellBtnReplaceAll	: "すべて置換",
+DlgSpellBtnUndo			: "やり直し",
+DlgSpellNoSuggestions	: "- 該当なし -",
+DlgSpellProgress		: "スペルチェック処理中...",
+DlgSpellNoMispell		: "スペルチェック完了: スペルの誤りはありませんでした",
+DlgSpellNoChanges		: "スペルチェック完了: 語句は変更されませんでした",
+DlgSpellOneChange		: "スペルチェック完了: １語句変更されました",
+DlgSpellManyChanges		: "スペルチェック完了: %1 語句変更されました",
+
+IeSpellDownload			: "スペルチェッカーがインストールされていません。今すぐダウンロードしますか?",
+
+// Button Dialog
+DlgButtonText	: "テキスト (値)",
+DlgButtonType	: "タイプ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名前",
+DlgCheckboxValue	: "値",
+DlgCheckboxSelected	: "選択済み",
+
+// Form Dialog
+DlgFormName		: "フォーム名",
+DlgFormAction	: "アクション",
+DlgFormMethod	: "メソッド",
+
+// Select Field Dialog
+DlgSelectName		: "名前",
+DlgSelectValue		: "値",
+DlgSelectSize		: "サイズ",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "複数項目選択を許可",
+DlgSelectOpAvail	: "利用可能なオプション",
+DlgSelectOpText		: "選択項目名",
+DlgSelectOpValue	: "選択項目値",
+DlgSelectBtnAdd		: "追加",
+DlgSelectBtnModify	: "編集",
+DlgSelectBtnUp		: "上へ",
+DlgSelectBtnDown	: "下へ",
+DlgSelectBtnSetValue : "選択した値を設定",
+DlgSelectBtnDelete	: "削除",
+
+// Textarea Dialog
+DlgTextareaName	: "名前",
+DlgTextareaCols	: "列",
+DlgTextareaRows	: "行",
+
+// Text Field Dialog
+DlgTextName			: "名前",
+DlgTextValue		: "値",
+DlgTextCharWidth	: "サイズ",
+DlgTextMaxChars		: "最大長",
+DlgTextType			: "タイプ",
+DlgTextTypeText		: "テキスト",
+DlgTextTypePass		: "パスワード入力",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名前",
+DlgHiddenValue	: "値",
+
+// Bulleted List Dialog
+BulletedListProp	: "箇条書き プロパティ",
+NumberedListProp	: "段落番号 プロパティ",
+DlgLstType			: "タイプ",
+DlgLstTypeCircle	: "白丸",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "四角",
+DlgLstTypeNumbers	: "アラビア数字 (1, 2, 3)",
+DlgLstTypeLCase		: "英字小文字 (a, b, c)",
+DlgLstTypeUCase		: "英字大文字 (A, B, C)",
+DlgLstTypeSRoman	: "ローマ数字小文字 (i, ii, iii)",
+DlgLstTypeLRoman	: "ローマ数字大文字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "全般",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "色とマージン",
+DlgDocMetaTab		: "メタデータ",
+
+DlgDocPageTitle		: "ページタイトル",
+DlgDocLangDir		: "言語文字表記の方向",
+DlgDocLangDirLTR	: "左から右に文字表記します(LTR)",
+DlgDocLangDirRTL	: "右から左に文字表記します(RTL)",
+DlgDocLangCode		: "言語コード",
+DlgDocCharSet		: "文字セット符号化",
+DlgDocCharSetOther	: "他の文字セット符号化",
+
+DlgDocDocType		: "文書タイプヘッダー",
+DlgDocDocTypeOther	: "その他文書タイプヘッダー",
+DlgDocIncXHTML		: "XHTML宣言をインクルード",
+DlgDocBgColor		: "背景色",
+DlgDocBgImage		: "背景画像 URL",
+DlgDocBgNoScroll	: "スクロールしない背景",
+DlgDocCText			: "テキスト",
+DlgDocCLink			: "リンク",
+DlgDocCVisited		: "アクセス済みリンク",
+DlgDocCActive		: "アクセス中リンク",
+DlgDocMargins		: "ページ・マージン",
+DlgDocMaTop			: "上部",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下部",
+DlgDocMeIndex		: "文書のキーワード(カンマ区切り)",
+DlgDocMeDescr		: "文書の概要",
+DlgDocMeAuthor		: "文書の作者",
+DlgDocMeCopy		: "文書の著作権",
+DlgDocPreview		: "プレビュー",
+
+// Templates Dialog
+Templates			: "テンプレート(雛形)",
+DlgTemplatesTitle	: "テンプレート内容",
+DlgTemplatesSelMsg	: "エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):",
+DlgTemplatesLoading	: "テンプレート一覧読み込み中. しばらくお待ちください...",
+DlgTemplatesNoTpl	: "(テンプレートが定義されていません)",
+
+// About Dialog
+DlgAboutAboutTab	: "バージョン情報",
+DlgAboutBrowserInfoTab	: "ブラウザ情報",
+DlgAboutVersion		: "バージョン",
+DlgAboutLicense		: "Licensed under the terms of the GNU Lesser General Public License",
+DlgAboutInfo		: "より詳しい情報はこちらで"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ko.js 1.4.0sr5-1/fckeditor/editor/lang/ko.js
--- 1.3.11sr1/fckeditor/editor/lang/ko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ko.js
+ * 	Korean language file.
+ * 
+ * File Authors:
+ * 		Taehwan Kwag (thkwag@nate.com)
+ * 		Hyung-chae, Kim (chaeya@gmail.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "툴바 감추기",
+ToolbarExpand		: "툴바 보이기",
+
+// Toolbar Items and Context Menu
+Save				: "저장하기",
+NewPage				: "새 문서",
+Preview				: "미리보기",
+Cut					: "잘라내기",
+Copy				: "복사하기",
+Paste				: "붙여넣기",
+PasteText			: "텍스트로 붙여넣기",
+PasteWord			: "MS Word 형식에서 붙여넣기",
+Print				: "인쇄하기",
+SelectAll			: "전체선택",
+RemoveFormat		: "포맷 지우기",
+InsertLinkLbl		: "링크",
+InsertLink			: "링크 삽입/변경",
+RemoveLink			: "링크 삭제",
+Anchor				: "책갈피 삽입/변경",
+InsertImageLbl		: "이미지",
+InsertImage			: "이미지 삽입/변경",
+InsertFlashLbl		: "플래쉬",
+InsertFlash			: "플래쉬 삽입/변경",
+InsertTableLbl		: "표",
+InsertTable			: "표 삽입/변경",
+InsertLineLbl		: "수평선",
+InsertLine			: "수평선 삽입",
+InsertSpecialCharLbl: "특수문자 삽입",
+InsertSpecialChar	: "특수문자 삽입",
+InsertSmileyLbl		: "아이콘",
+InsertSmiley		: "아이콘 삽입",
+About				: "FCKeditor에 대하여",
+Bold				: "진하게",
+Italic				: "이텔릭",
+Underline			: "밑줄",
+StrikeThrough		: "취소선",
+Subscript			: "아래 첨자",
+Superscript			: "위 첨자",
+LeftJustify			: "왼쪽 정렬",
+CenterJustify		: "가운데 정렬",
+RightJustify		: "오른쪽 정렬",
+BlockJustify		: "양쪽 맞춤",
+DecreaseIndent		: "내어쓰기",
+IncreaseIndent		: "들여쓰기",
+Undo				: "취소",
+Redo				: "재실행",
+NumberedListLbl		: "순서있는 목록",
+NumberedList		: "순서있는 목록",
+BulletedListLbl		: "순서없는 목록",
+BulletedList		: "순서없는 목록",
+ShowTableBorders	: "표 테두리 보기",
+ShowDetails			: "문서기호 보기",
+Style				: "스타일",
+FontFormat			: "포맷",
+Font				: "폰트",
+FontSize			: "글자 크기",
+TextColor			: "글자 색상",
+BGColor				: "배경 색상",
+Source				: "소스",
+Find				: "찾기",
+Replace				: "바꾸기",
+SpellCheck			: "철자검사",
+UniversalKeyboard	: "다국어 입력기",
+
+Form			: "폼",
+Checkbox		: "체크박스",
+RadioButton		: "라디오버튼",
+TextField		: "입력필드",
+Textarea		: "입력영역",
+HiddenField		: "숨김필드",
+Button			: "버튼",
+SelectionField	: "펼침목록",
+ImageButton		: "이미지버튼",
+
+// Context Menu
+EditLink			: "링크 수정",
+InsertRow			: "가로줄 삽입",
+DeleteRows			: "가로줄 삭제",
+InsertColumn		: "세로줄 삽입",
+DeleteColumns		: "세로줄 삭제",
+InsertCell			: "셀 삽입",
+DeleteCells			: "셀 삭제",
+MergeCells			: "셀 합치기",
+SplitCell			: "셀 나누기",
+CellProperties		: "셀 속성",
+TableProperties		: "표 속성",
+ImageProperties		: "이미지 속성",
+FlashProperties		: "플래쉬 속성",
+
+AnchorProp			: "책갈피 속성",
+ButtonProp			: "버튼 속성",
+CheckboxProp		: "체크박스 속성",
+HiddenFieldProp		: "숨김필드 속성",
+RadioButtonProp		: "라디오버튼 속성",
+ImageButtonProp		: "이미지버튼 속성",
+TextFieldProp		: "입력필드 속성",
+SelectionFieldProp	: "펼침목록 속성",
+TextareaProp		: "입력영역 속성",
+FormProp			: "폼 속성",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML 처리중. 잠시만 기다려주십시요.",
+Done				: "완료",
+PasteWordConfirm	: "붙여넣기 할 텍스트는 MS Word에서 복사한 것입니다. 붙여넣기 전에 MS Word 포멧을 삭제하시겠습니까?",
+NotCompatiblePaste	: "이 명령은 인터넷익스플로러 5.5 버전 이상에서만 작동합니다. 포멧을 삭제하지 않고 붙여넣기 하시겠습니까?",
+UnknownToolbarItem	: "알수없는 툴바입니다. : \"%1\"",
+UnknownCommand		: "알수없는 기능입니다. : \"%1\"",
+NotImplemented		: "기능이 실행되지 않았습니다.",
+UnknownToolbarSet	: "툴바 설정이 없습니다. : \"%1\"",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "예",
+DlgBtnCancel		: "아니오",
+DlgBtnClose			: "닫기",
+DlgBtnBrowseServer	: "서버 보기",
+DlgAdvancedTag		: "자세히",
+DlgOpOther			: "&lt;기타&gt;",
+DlgInfoTab			: "정보",
+DlgAlertUrl			: "URL을 입력하십시요",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;설정되지 않음&gt;",
+DlgGenId			: "ID",
+DlgGenLangDir		: "쓰기 방향",
+DlgGenLangDirLtr	: "왼쪽에서 오른쪽 (LTR)",
+DlgGenLangDirRtl	: "오른쪽에서 왼쪽 (RTL)",
+DlgGenLangCode		: "언어 코드",
+DlgGenAccessKey		: "엑세스 키",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "탭 순서",
+DlgGenLongDescr		: "URL 설명",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "이미지 설정",
+DlgImgInfoTab		: "이미지 정보",
+DlgImgBtnUpload		: "서버로 전송",
+DlgImgURL			: "URL",
+DlgImgUpload		: "업로드",
+DlgImgAlt			: "이미지 설명",
+DlgImgWidth			: "너비",
+DlgImgHeight		: "높이",
+DlgImgLockRatio		: "비율 유지",
+DlgBtnResetSize		: "원래 크기로",
+DlgImgBorder		: "테두리",
+DlgImgHSpace		: "수평여백",
+DlgImgVSpace		: "수직여백",
+DlgImgAlign			: "정렬",
+DlgImgAlignLeft		: "왼쪽",
+DlgImgAlignAbsBottom: "줄아래(Abs Bottom)",
+DlgImgAlignAbsMiddle: "줄중간(Abs Middle)",
+DlgImgAlignBaseline	: "기준선",
+DlgImgAlignBottom	: "아래",
+DlgImgAlignMiddle	: "중간",
+DlgImgAlignRight	: "오른쪽",
+DlgImgAlignTextTop	: "글자위(Text Top)",
+DlgImgAlignTop		: "위",
+DlgImgPreview		: "미리보기",
+DlgImgAlertUrl		: "이미지 URL을 입력하십시요",
+DlgImgLinkTab		: "링크",
+
+// Flash Dialog
+DlgFlashTitle		: "플래쉬 등록정보",
+DlgFlashChkPlay		: "자동재생",
+DlgFlashChkLoop		: "반복",
+DlgFlashChkMenu		: "플래쉬메뉴 가능",
+DlgFlashScale		: "영역",
+DlgFlashScaleAll	: "모두보기",
+DlgFlashScaleNoBorder	: "경계선없음",
+DlgFlashScaleFit	: "영역자동조절",
+
+// Link Dialog
+DlgLnkWindowTitle	: "링크",
+DlgLnkInfoTab		: "링크 정보",
+DlgLnkTargetTab		: "타겟",
+
+DlgLnkType			: "링크 종류",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "책갈피",
+DlgLnkTypeEMail		: "이메일",
+DlgLnkProto			: "프로토콜",
+DlgLnkProtoOther	: "&lt;기타&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "책갈피 선택",
+DlgLnkAnchorByName	: "책갈피 이름",
+DlgLnkAnchorById	: "책갈피 ID",
+DlgLnkNoAnchors		: "&lt;문서에 책갈피가 없습니다.&gt;",
+DlgLnkEMail			: "이메일 주소",
+DlgLnkEMailSubject	: "제목",
+DlgLnkEMailBody		: "내용",
+DlgLnkUpload		: "업로드",
+DlgLnkBtnUpload		: "서버로 전송",
+
+DlgLnkTarget		: "타겟",
+DlgLnkTargetFrame	: "&lt;프레임&gt;",
+DlgLnkTargetPopup	: "&lt;팝업창&gt;",
+DlgLnkTargetBlank	: "새 창 (_blank)",
+DlgLnkTargetParent	: "부모 창 (_parent)",
+DlgLnkTargetSelf	: "현재 창 (_self)",
+DlgLnkTargetTop		: "최 상위 창 (_top)",
+DlgLnkTargetFrameName	: "타겟 프레임 이름",
+DlgLnkPopWinName	: "팝업창 이름",
+DlgLnkPopWinFeat	: "팝업창 설정",
+DlgLnkPopResize		: "크기조정",
+DlgLnkPopLocation	: "주소표시줄",
+DlgLnkPopMenu		: "메뉴바",
+DlgLnkPopScroll		: "스크롤바",
+DlgLnkPopStatus		: "상태바",
+DlgLnkPopToolbar	: "툴바",
+DlgLnkPopFullScrn	: "전체화면 (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "너비",
+DlgLnkPopHeight		: "높이",
+DlgLnkPopLeft		: "왼쪽 위치",
+DlgLnkPopTop		: "윗쪽 위치",
+
+DlnLnkMsgNoUrl		: "링크 URL을 입력하십시요.",
+DlnLnkMsgNoEMail	: "이메일주소를 입력하십시요.",
+DlnLnkMsgNoAnchor	: "책갈피명을 입력하십시요.",
+
+// Color Dialog
+DlgColorTitle		: "색상 선택",
+DlgColorBtnClear	: "지우기",
+DlgColorHighlight	: "현재",
+DlgColorSelected	: "선택됨",
+
+// Smiley Dialog
+DlgSmileyTitle		: "아이콘 삽입",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "특수문자 선택",
+
+// Table Dialog
+DlgTableTitle		: "표 설정",
+DlgTableRows		: "가로줄",
+DlgTableColumns		: "세로줄",
+DlgTableBorder		: "테두리 크기",
+DlgTableAlign		: "정렬",
+DlgTableAlignNotSet	: "<설정되지 않음>",
+DlgTableAlignLeft	: "왼쪽",
+DlgTableAlignCenter	: "가운데",
+DlgTableAlignRight	: "오른쪽",
+DlgTableWidth		: "너비",
+DlgTableWidthPx		: "픽셀",
+DlgTableWidthPc		: "퍼센트",
+DlgTableHeight		: "높이",
+DlgTableCellSpace	: "셀 간격",
+DlgTableCellPad		: "셀 여백",
+DlgTableCaption		: "캡션",
+
+// Table Cell Dialog
+DlgCellTitle		: "셀 설정",
+DlgCellWidth		: "너비",
+DlgCellWidthPx		: "픽셀",
+DlgCellWidthPc		: "퍼센트",
+DlgCellHeight		: "높이",
+DlgCellWordWrap		: "워드랩",
+DlgCellWordWrapNotSet	: "<설정되지 않음>",
+DlgCellWordWrapYes	: "예",
+DlgCellWordWrapNo	: "아니오",
+DlgCellHorAlign		: "수평 정렬",
+DlgCellHorAlignNotSet	: "<설정되지 않음>",
+DlgCellHorAlignLeft	: "왼쪽",
+DlgCellHorAlignCenter	: "가운데",
+DlgCellHorAlignRight: "오른쪽",
+DlgCellVerAlign		: "수직 정렬",
+DlgCellVerAlignNotSet	: "<설정되지 않음>",
+DlgCellVerAlignTop	: "위",
+DlgCellVerAlignMiddle	: "중간",
+DlgCellVerAlignBottom	: "아래",
+DlgCellVerAlignBaseline	: "기준선",
+DlgCellRowSpan		: "세로 합치기",
+DlgCellCollSpan		: "가로 합치기",
+DlgCellBackColor	: "배경 색상",
+DlgCellBorderColor	: "테두리 색상",
+DlgCellBtnSelect	: "선택",
+
+// Find Dialog
+DlgFindTitle		: "찾기",
+DlgFindFindBtn		: "찾기",
+DlgFindNotFoundMsg	: "문자열을 찾을 수 없습니다.",
+
+// Replace Dialog
+DlgReplaceTitle			: "바꾸기",
+DlgReplaceFindLbl		: "찾을 문자열:",
+DlgReplaceReplaceLbl	: "바꿀 문자열:",
+DlgReplaceCaseChk		: "대소문자 구분",
+DlgReplaceReplaceBtn	: "바꾸기",
+DlgReplaceReplAllBtn	: "모두 바꾸기",
+DlgReplaceWordChk		: "온전한 단어",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "브라우저의 보안설정때문에 붙여넣기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+V).",
+PasteErrorCut	: "브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).",
+PasteErrorCopy	: "브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요.  (Ctrl+C).",
+
+PasteAsText		: "텍스트로 붙여넣기",
+PasteFromWord	: "MS Word 형식에서 붙여넣기",
+
+DlgPasteMsg2	: "키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.",
+DlgPasteIgnoreFont		: "폰트 설정 무시",
+DlgPasteRemoveStyles	: "스타일 정의 제거",
+DlgPasteCleanBox		: "글상자 제거",
+
+
+// Color Picker
+ColorAutomatic	: "기본색상",
+ColorMoreColors	: "색상선택...",
+
+// Document Properties
+DocProps		: "문서 속성",
+
+// Anchor Dialog
+DlgAnchorTitle		: "책갈피 속성",
+DlgAnchorName		: "책갈피 이름",
+DlgAnchorErrorName	: "책갈피 이름을 입력하십시요.",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "사전에 없는 단어",
+DlgSpellChangeTo		: "변경할 단어",
+DlgSpellBtnIgnore		: "건너뜀",
+DlgSpellBtnIgnoreAll	: "모두 건너뜀",
+DlgSpellBtnReplace		: "변경",
+DlgSpellBtnReplaceAll	: "모두 변경",
+DlgSpellBtnUndo			: "취소",
+DlgSpellNoSuggestions	: "- 추천단어 없음 -",
+DlgSpellProgress		: "철자검사를 진행중입니다...",
+DlgSpellNoMispell		: "철자검사 완료: 잘못된 철자가 없습니다.",
+DlgSpellNoChanges		: "철자검사 완료: 변경된 단어가 없습니다.",
+DlgSpellOneChange		: "철자검사 완료: 단어가 변경되었습니다.",
+DlgSpellManyChanges		: "철자검사 완료: %1 단어가 변경되었습니다.",
+
+IeSpellDownload			: "철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?",
+
+// Button Dialog
+DlgButtonText	: "버튼글자(값)",
+DlgButtonType	: "버튼종류",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "이름",
+DlgCheckboxValue	: "값",
+DlgCheckboxSelected	: "선택됨",
+
+// Form Dialog
+DlgFormName		: "폼이름",
+DlgFormAction	: "실행경로(Action)",
+DlgFormMethod	: "방법(Method)",
+
+// Select Field Dialog
+DlgSelectName		: "이름",
+DlgSelectValue		: "값",
+DlgSelectSize		: "세로크기",
+DlgSelectLines		: "줄",
+DlgSelectChkMulti	: "여러항목 선택 허용",
+DlgSelectOpAvail	: "선택옵션",
+DlgSelectOpText		: "이름",
+DlgSelectOpValue	: "값",
+DlgSelectBtnAdd		: "추가",
+DlgSelectBtnModify	: "변경",
+DlgSelectBtnUp		: "위로",
+DlgSelectBtnDown	: "아래로",
+DlgSelectBtnSetValue : "선택된것으로 설정",
+DlgSelectBtnDelete	: "삭제",
+
+// Textarea Dialog
+DlgTextareaName	: "이름",
+DlgTextareaCols	: "칸수",
+DlgTextareaRows	: "줄수",
+
+// Text Field Dialog
+DlgTextName			: "이름",
+DlgTextValue		: "값",
+DlgTextCharWidth	: "글자 너비",
+DlgTextMaxChars		: "최대 글자수",
+DlgTextType			: "종류",
+DlgTextTypeText		: "문자열",
+DlgTextTypePass		: "비밀번호",
+
+// Hidden Field Dialog
+DlgHiddenName	: "이름",
+DlgHiddenValue	: "값",
+
+// Bulleted List Dialog
+BulletedListProp	: "순서없는 목록 속성",
+NumberedListProp	: "순서있는 목록 속성",
+DlgLstType			: "종류",
+DlgLstTypeCircle	: "원(Circle)",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "네모점(Square)",
+DlgLstTypeNumbers	: "번호 (1, 2, 3)",
+DlgLstTypeLCase		: "소문자 (a, b, c)",
+DlgLstTypeUCase		: "대문자 (A, B, C)",
+DlgLstTypeSRoman	: "로마자 수문자 (i, ii, iii)",
+DlgLstTypeLRoman	: "로마자 대문자 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "일반",
+DlgDocBackTab		: "배경",
+DlgDocColorsTab		: "색상 및 여백",
+DlgDocMetaTab		: "메타데이터",
+
+DlgDocPageTitle		: "페이지명",
+DlgDocLangDir		: "문자 쓰기방향",
+DlgDocLangDirLTR	: "왼쪽에서 오른쪽 (LTR)",
+DlgDocLangDirRTL	: "오른쪽에서 왼쪽 (RTL)",
+DlgDocLangCode		: "언어코드",
+DlgDocCharSet		: "캐릭터셋 인코딩",
+DlgDocCharSetOther	: "다른 캐릭터셋 인코딩",
+
+DlgDocDocType		: "문서 헤드",
+DlgDocDocTypeOther	: "다른 문서헤드",
+DlgDocIncXHTML		: "XHTML 문서정의 포함",
+DlgDocBgColor		: "배경색상",
+DlgDocBgImage		: "배경이미지 URL",
+DlgDocBgNoScroll	: "스크롤되지않는 배경",
+DlgDocCText			: "텍스트",
+DlgDocCLink			: "링크",
+DlgDocCVisited		: "방문한 링크(Visited)",
+DlgDocCActive		: "활성화된 링크(Active)",
+DlgDocMargins		: "페이지 여백",
+DlgDocMaTop			: "위",
+DlgDocMaLeft		: "왼쪽",
+DlgDocMaRight		: "오른쪽",
+DlgDocMaBottom		: "아래",
+DlgDocMeIndex		: "문서 키워드 (콤마로 구분)",
+DlgDocMeDescr		: "문서 설명",
+DlgDocMeAuthor		: "작성자",
+DlgDocMeCopy		: "저작권",
+DlgDocPreview		: "미리보기",
+
+// Templates Dialog
+Templates			: "템플릿",
+DlgTemplatesTitle	: "내용 템플릿",
+DlgTemplatesSelMsg	: "에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):",
+DlgTemplatesLoading	: "템플릿 목록을 불러오는중입니다. 잠시만 기다려주십시요.",
+DlgTemplatesNoTpl	: "(템플릿이 없습니다.)",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "브라우저 정보",
+DlgAboutVersion		: "버전",
+DlgAboutLicense		: "Licensed under the terms of the GNU Lesser General Public License",
+DlgAboutInfo		: "For further information go to"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/lt.js 1.4.0sr5-1/fckeditor/editor/lang/lt.js
--- 1.3.11sr1/fckeditor/editor/lang/lt.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/lt.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: lt.js
+ * 	Lithuanian language file.
+ * 
+ * File Authors:
+ * 		Tauras Paliulis (tauras.paliulis@tauras.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Sutraukti mygtukų juostą",
+ToolbarExpand		: "Išplėsti mygtukų juostą",
+
+// Toolbar Items and Context Menu
+Save				: "Išsaugoti",
+NewPage				: "Naujas puslapis",
+Preview				: "Peržiūra",
+Cut					: "Iškirpti",
+Copy				: "Kopijuoti",
+Paste				: "Įdėti",
+PasteText			: "Įdėti kaip gryną tekstą",
+PasteWord			: "Įdėti iš Word",
+Print				: "Spausdinti",
+SelectAll			: "Pažymėti viską",
+RemoveFormat		: "Panaikinti formatą",
+InsertLinkLbl		: "Nuoroda",
+InsertLink			: "Įterpti/taisyti nuorodą",
+RemoveLink			: "Panaikinti nuorodą",
+Anchor				: "Įterpti/modifikuoti žymę",
+InsertImageLbl		: "Vaizdas",
+InsertImage			: "Įterpti/taisyti vaizdą",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Įterpti/taisyti Flash",
+InsertTableLbl		: "Lentelė",
+InsertTable			: "Įterpti/taisyti lentelę",
+InsertLineLbl		: "Linija",
+InsertLine			: "Įterpti horizontalią liniją",
+InsertSpecialCharLbl: "Spec. simbolis",
+InsertSpecialChar	: "Įterpti specialų simbolį",
+InsertSmileyLbl		: "Veideliai",
+InsertSmiley		: "Įterpti veidelį",
+About				: "Apie FCKeditor",
+Bold				: "Pusjuodis",
+Italic				: "Kursyvas",
+Underline			: "Pabrauktas",
+StrikeThrough		: "Perbrauktas",
+Subscript			: "Apatinis indeksas",
+Superscript			: "Viršutinis indeksas",
+LeftJustify			: "Lygiuoti kairę",
+CenterJustify		: "Centruoti",
+RightJustify		: "Lygiuoti dešinę",
+BlockJustify		: "Lygiuoti abi puses",
+DecreaseIndent		: "Sumažinti įtrauką",
+IncreaseIndent		: "Padidinti įtrauką",
+Undo				: "Atšaukti",
+Redo				: "Atstatyti",
+NumberedListLbl		: "Numeruotas sąrašas",
+NumberedList		: "Įterpti/Panaikinti numeruotą sąrašą",
+BulletedListLbl		: "Suženklintas sąrašas",
+BulletedList		: "Įterpti/Panaikinti suženklintą sąrašą",
+ShowTableBorders	: "Rodyti lentelės rėmus",
+ShowDetails			: "Rodyti detales",
+Style				: "Stilius",
+FontFormat			: "Šrifto formatas",
+Font				: "Šriftas",
+FontSize			: "Šrifto dydis",
+TextColor			: "Teksto spalva",
+BGColor				: "Fono spalva",
+Source				: "Šaltinis",
+Find				: "Rasti",
+Replace				: "Pakeisti",
+SpellCheck			: "Rašybos tikrinimas",
+UniversalKeyboard	: "Universali klaviatūra",
+
+Form			: "Forma",
+Checkbox		: "Žymimasis langelis",
+RadioButton		: "Žymimoji akutė",
+TextField		: "Teksto laukas",
+Textarea		: "Teksto sritis",
+HiddenField		: "Nerodomas laukas",
+Button			: "Mygtukas",
+SelectionField	: "Atrankos laukas",
+ImageButton		: "Vaizdinis mygtukas",
+
+// Context Menu
+EditLink			: "Taisyti nuorodą",
+InsertRow			: "Įterpti eilutę",
+DeleteRows			: "Šalinti eilutes",
+InsertColumn		: "Įterpti stulpelį",
+DeleteColumns		: "Šalinti stulpelius",
+InsertCell			: "Įterpti langelį",
+DeleteCells			: "Šalinti langelius",
+MergeCells			: "Sujungti langelius",
+SplitCell			: "Skaidyti langelius",
+CellProperties		: "Langelio savybės",
+TableProperties		: "Lentelės savybės",
+ImageProperties		: "Vaizdo savybės",
+FlashProperties		: "Flash savybės",
+
+AnchorProp			: "Žymės savybės",
+ButtonProp			: "Mygtuko savybės",
+CheckboxProp		: "Žymimojo langelio savybės",
+HiddenFieldProp		: "Nerodomo lauko savybės",
+RadioButtonProp		: "Žymimosios akutės savybės",
+ImageButtonProp		: "Vaizdinio mygtuko savybės",
+TextFieldProp		: "Teksto lauko savybės",
+SelectionFieldProp	: "Atrankos lauko savybės",
+TextareaProp		: "Teksto srities savybės",
+FormProp			: "Formos savybės",
+
+FontFormats			: "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Apdorojamas XHTML. Prašome palaukti...",
+Done				: "Baigta",
+PasteWordConfirm	: "Įdedamas tekstas yra panašus į kopiją iš Word. Ar Jūs norite prieš įdėjimą išvalyti jį?",
+NotCompatiblePaste	: "Ši komanda yra prieinama tik per Internet Explorer 5.5 ar aukštesnę versiją. Ar Jūs norite įterpti be valymo?",
+UnknownToolbarItem	: "Nežinomas mygtukų juosta elementas \"%1\"",
+UnknownCommand		: "Nežinomas komandos vardas \"%1\"",
+NotImplemented		: "Komanda nėra įgyvendinta",
+UnknownToolbarSet	: "Mygtukų juostos rinkinys \"%1\" neegzistuoja",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Nutraukti",
+DlgBtnClose			: "Uždaryti",
+DlgBtnBrowseServer	: "Naršyti po serverį",
+DlgAdvancedTag		: "Papildomas",
+DlgOpOther			: "&lt;Kita&gt;",
+DlgInfoTab			: "Informacija",
+DlgAlertUrl			: "Prašome įrašyti URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nėra nustatyta&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Teksto kryptis",
+DlgGenLangDirLtr	: "Iš kairės į dešinę (LTR)",
+DlgGenLangDirRtl	: "Iš dešinės į kairę (RTL)",
+DlgGenLangCode		: "Kalbos kodas",
+DlgGenAccessKey		: "Prieigos raktas",
+DlgGenName			: "Vardas",
+DlgGenTabIndex		: "Tabuliavimo indeksas",
+DlgGenLongDescr		: "Ilgas aprašymas URL",
+DlgGenClass			: "Stilių lentelės klasės",
+DlgGenTitle			: "Konsultacinė antraštė",
+DlgGenContType		: "Konsultacinio turinio tipas",
+DlgGenLinkCharset	: "Susietų išteklių simbolių lentelė",
+DlgGenStyle			: "Stilius",
+
+// Image Dialog
+DlgImgTitle			: "Vaizdo savybės",
+DlgImgInfoTab		: "Vaizdo informacija",
+DlgImgBtnUpload		: "Siųsti į serverį",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Nusiųsti",
+DlgImgAlt			: "Alternatyvus Tekstas",
+DlgImgWidth			: "Plotis",
+DlgImgHeight		: "Aukštis",
+DlgImgLockRatio		: "Išlaikyti proporciją",
+DlgBtnResetSize		: "Atstatyti dydį",
+DlgImgBorder		: "Rėmelis",
+DlgImgHSpace		: "Hor.Erdvė",
+DlgImgVSpace		: "Vert.Erdvė",
+DlgImgAlign			: "Lygiuoti",
+DlgImgAlignLeft		: "Kairę",
+DlgImgAlignAbsBottom: "Absoliučią apačią",
+DlgImgAlignAbsMiddle: "Absoliutų vidurį",
+DlgImgAlignBaseline	: "Apatinę liniją",
+DlgImgAlignBottom	: "Apačią",
+DlgImgAlignMiddle	: "Vidurį",
+DlgImgAlignRight	: "Dešinę",
+DlgImgAlignTextTop	: "Teksto viršūnę",
+DlgImgAlignTop		: "Viršūnę",
+DlgImgPreview		: "Peržiūra",
+DlgImgAlertUrl		: "Prašome įvesti vaizdo URL",
+DlgImgLinkTab		: "Nuoroda",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash savybės",
+DlgFlashChkPlay		: "Automatinis paleidimas",
+DlgFlashChkLoop		: "Ciklas",
+DlgFlashChkMenu		: "Leisti Flash meniu",
+DlgFlashScale		: "Mastelis",
+DlgFlashScaleAll	: "Rodyti visą",
+DlgFlashScaleNoBorder	: "Be rėmelio",
+DlgFlashScaleFit	: "Tikslus atitikimas",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Nuoroda",
+DlgLnkInfoTab		: "Nuorodos informacija",
+DlgLnkTargetTab		: "Paskirtis",
+
+DlgLnkType			: "Nuorodos tipas",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Žymė šiame puslapyje",
+DlgLnkTypeEMail		: "El.paštas",
+DlgLnkProto			: "Protokolas",
+DlgLnkProtoOther	: "&lt;kitas&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Pasirinkite žymę",
+DlgLnkAnchorByName	: "Pagal žymės vardą",
+DlgLnkAnchorById	: "Pagal žymės Id",
+DlgLnkNoAnchors		: "&lt;Šiame dokumente žymių nėra&gt;",
+DlgLnkEMail			: "El.pašto adresas",
+DlgLnkEMailSubject	: "Žinutės tema",
+DlgLnkEMailBody		: "Žinutės turinys",
+DlgLnkUpload		: "Siųsti",
+DlgLnkBtnUpload		: "Siųsti į serverį",
+
+DlgLnkTarget		: "Paskirties vieta",
+DlgLnkTargetFrame	: "&lt;kadras&gt;",
+DlgLnkTargetPopup	: "&lt;išskleidžiamas langas&gt;",
+DlgLnkTargetBlank	: "Naujas langas (_blank)",
+DlgLnkTargetParent	: "Pirminis langas (_parent)",
+DlgLnkTargetSelf	: "Tas pats langas (_self)",
+DlgLnkTargetTop		: "Svarbiausias langas (_top)",
+DlgLnkTargetFrameName	: "Paskirties kadro vardas",
+DlgLnkPopWinName	: "Paskirties lango vardas",
+DlgLnkPopWinFeat	: "Išskleidžiamo lango savybės",
+DlgLnkPopResize		: "Keičiamas dydis",
+DlgLnkPopLocation	: "Adreso juosta",
+DlgLnkPopMenu		: "Meniu juosta",
+DlgLnkPopScroll		: "Slinkties juostos",
+DlgLnkPopStatus		: "Būsenos juosta",
+DlgLnkPopToolbar	: "Mygtukų juosta",
+DlgLnkPopFullScrn	: "Visas ekranas (IE)",
+DlgLnkPopDependent	: "Priklausomas (Netscape)",
+DlgLnkPopWidth		: "Plotis",
+DlgLnkPopHeight		: "Aukštis",
+DlgLnkPopLeft		: "Kairė pozicija",
+DlgLnkPopTop		: "Viršutinė pozicija",
+
+DlnLnkMsgNoUrl		: "Prašome įvesti nuorodos URL",
+DlnLnkMsgNoEMail	: "Prašome įvesti el.pašto adresą",
+DlnLnkMsgNoAnchor	: "Prašome pasirinkti žymę",
+
+// Color Dialog
+DlgColorTitle		: "Pasirinkite spalvą",
+DlgColorBtnClear	: "Trinti",
+DlgColorHighlight	: "Paryškinta",
+DlgColorSelected	: "Pažymėta",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Įterpti veidelį",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Pasirinkite specialų simbolį",
+
+// Table Dialog
+DlgTableTitle		: "Lentelės savybės",
+DlgTableRows		: "Eilutės",
+DlgTableColumns		: "Stulpeliai",
+DlgTableBorder		: "Rėmelio dydis",
+DlgTableAlign		: "Lygiuoti",
+DlgTableAlignNotSet	: "<Nenustatyta>",
+DlgTableAlignLeft	: "Kairę",
+DlgTableAlignCenter	: "Centrą",
+DlgTableAlignRight	: "Dešinę",
+DlgTableWidth		: "Plotis",
+DlgTableWidthPx		: "taškais",
+DlgTableWidthPc		: "procentais",
+DlgTableHeight		: "Aukštis",
+DlgTableCellSpace	: "Tarpas tarp langelių",
+DlgTableCellPad		: "Trapas nuo langelio rėmo iki teksto",
+DlgTableCaption		: "Antraštė",
+
+// Table Cell Dialog
+DlgCellTitle		: "Langelio savybės",
+DlgCellWidth		: "Plotis",
+DlgCellWidthPx		: "taškais",
+DlgCellWidthPc		: "procentais",
+DlgCellHeight		: "Aukštis",
+DlgCellWordWrap		: "Teksto laužymas",
+DlgCellWordWrapNotSet	: "<Nenustatyta>",
+DlgCellWordWrapYes	: "Taip",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizontaliai lygiuoti",
+DlgCellHorAlignNotSet	: "<Nenustatyta>",
+DlgCellHorAlignLeft	: "Kairę",
+DlgCellHorAlignCenter	: "Centrą",
+DlgCellHorAlignRight: "Dešinę",
+DlgCellVerAlign		: "Vertikaliai lygiuoti",
+DlgCellVerAlignNotSet	: "<Nenustatyta>",
+DlgCellVerAlignTop	: "Viršų",
+DlgCellVerAlignMiddle	: "Vidurį",
+DlgCellVerAlignBottom	: "Apačią",
+DlgCellVerAlignBaseline	: "Apatinę liniją",
+DlgCellRowSpan		: "Eilučių apjungimas",
+DlgCellCollSpan		: "Stulpelių apjungimas",
+DlgCellBackColor	: "Fono spalva",
+DlgCellBorderColor	: "Rėmelio spalva",
+DlgCellBtnSelect	: "Pažymėti...",
+
+// Find Dialog
+DlgFindTitle		: "Paieška",
+DlgFindFindBtn		: "Surasti",
+DlgFindNotFoundMsg	: "Nurodytas tekstas nerastas.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Pakeisti",
+DlgReplaceFindLbl		: "Surasti tekstą:",
+DlgReplaceReplaceLbl	: "Pakeisti tekstu:",
+DlgReplaceCaseChk		: "Skirti didžiąsias ir mažąsias raides",
+DlgReplaceReplaceBtn	: "Pakeisti",
+DlgReplaceReplAllBtn	: "Pakeisti viską",
+DlgReplaceWordChk		: "Atitikti pilną žodį",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti įdėjimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+V).",
+PasteErrorCut	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).",
+PasteErrorCopy	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).",
+
+PasteAsText		: "Įdėti kaip gryną tekstą",
+PasteFromWord	: "Įdėti iš Word",
+
+DlgPasteMsg2	: "Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir spūstelkite mygtuką <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignoruoti šriftų nustatymus",
+DlgPasteRemoveStyles	: "Pašalinti stilių nustatymus",
+DlgPasteCleanBox		: "Trinti įvedimo lauką",
+
+
+// Color Picker
+ColorAutomatic	: "Automatinis",
+ColorMoreColors	: "Daugiau spalvų...",
+
+// Document Properties
+DocProps		: "Dokumento savybės",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Žymės savybės",
+DlgAnchorName		: "Žymės vardas",
+DlgAnchorErrorName	: "Prašome įvesti žymės vardą",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Žodyne nerastas",
+DlgSpellChangeTo		: "Pakeisti į",
+DlgSpellBtnIgnore		: "Ignoruoti",
+DlgSpellBtnIgnoreAll	: "Ignoruoti visus",
+DlgSpellBtnReplace		: "Pakeisti",
+DlgSpellBtnReplaceAll	: "Pakeisti visus",
+DlgSpellBtnUndo			: "Atšaukti",
+DlgSpellNoSuggestions	: "- Nėra pasiūlymų -",
+DlgSpellProgress		: "Vyksta rašybos tikrinimas...",
+DlgSpellNoMispell		: "Rašybos tikrinimas baigtas: Nerasta rašybos klaidų",
+DlgSpellNoChanges		: "Rašybos tikrinimas baigtas: Nėra pakeistų žodžių",
+DlgSpellOneChange		: "Rašybos tikrinimas baigtas: Vienas žodis pakeistas",
+DlgSpellManyChanges		: "Rašybos tikrinimas baigtas: Pakeista %1 žodžių",
+
+IeSpellDownload			: "Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?",
+
+// Button Dialog
+DlgButtonText	: "Tekstas (Reikšmė)",
+DlgButtonType	: "Tipas",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Vardas",
+DlgCheckboxValue	: "Reikšmė",
+DlgCheckboxSelected	: "Pažymėtas",
+
+// Form Dialog
+DlgFormName		: "Vardas",
+DlgFormAction	: "Veiksmas",
+DlgFormMethod	: "Metodas",
+
+// Select Field Dialog
+DlgSelectName		: "Vardas",
+DlgSelectValue		: "Reikšmė",
+DlgSelectSize		: "Dydis",
+DlgSelectLines		: "eilučių",
+DlgSelectChkMulti	: "Leisti daugeriopą atranką",
+DlgSelectOpAvail	: "Galimos parinktys",
+DlgSelectOpText		: "Tekstas",
+DlgSelectOpValue	: "Reikšmė",
+DlgSelectBtnAdd		: "Įtraukti",
+DlgSelectBtnModify	: "Modifikuoti",
+DlgSelectBtnUp		: "Aukštyn",
+DlgSelectBtnDown	: "Žemyn",
+DlgSelectBtnSetValue : "Laikyti pažymėta reikšme",
+DlgSelectBtnDelete	: "Trinti",
+
+// Textarea Dialog
+DlgTextareaName	: "Vardas",
+DlgTextareaCols	: "Ilgis",
+DlgTextareaRows	: "Plotis",
+
+// Text Field Dialog
+DlgTextName			: "Vardas",
+DlgTextValue		: "Reikšmė",
+DlgTextCharWidth	: "Ilgis simboliais",
+DlgTextMaxChars		: "Maksimalus simbolių skaičius",
+DlgTextType			: "Tipas",
+DlgTextTypeText		: "Tekstas",
+DlgTextTypePass		: "Slaptažodis",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Vardas",
+DlgHiddenValue	: "Reikšmė",
+
+// Bulleted List Dialog
+BulletedListProp	: "Suženklinto sąrašo savybės",
+NumberedListProp	: "Numeruoto sąrašo savybės",
+DlgLstType			: "Tipas",
+DlgLstTypeCircle	: "Apskritimas",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadratas",
+DlgLstTypeNumbers	: "Skaičiai (1, 2, 3)",
+DlgLstTypeLCase		: "Mažosios raidės (a, b, c)",
+DlgLstTypeUCase		: "Didžiosios raidės (A, B, C)",
+DlgLstTypeSRoman	: "Romėnų mažieji skaičiai (i, ii, iii)",
+DlgLstTypeLRoman	: "Romėnų didieji skaičiai (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Bendros savybės",
+DlgDocBackTab		: "Fonas",
+DlgDocColorsTab		: "Spalvos ir kraštinės",
+DlgDocMetaTab		: "Meta duomenys",
+
+DlgDocPageTitle		: "Puslapio antraštė",
+DlgDocLangDir		: "Kalbos kryptis",
+DlgDocLangDirLTR	: "Iš kairės į dešinę (LTR)",
+DlgDocLangDirRTL	: "Iš dešinės į kairę (RTL)",
+DlgDocLangCode		: "Kalbos kodas",
+DlgDocCharSet		: "Simbolių kodavimo lentelė",
+DlgDocCharSetOther	: "Kita simbolių kodavimo lentelė",
+
+DlgDocDocType		: "Dokumento tipo antraštė",
+DlgDocDocTypeOther	: "Kita dokumento tipo antraštė",
+DlgDocIncXHTML		: "Įtraukti XHTML deklaracijas",
+DlgDocBgColor		: "Fono spalva",
+DlgDocBgImage		: "Fono paveikslėlio nuoroda (URL)",
+DlgDocBgNoScroll	: "Neslenkantis fonas",
+DlgDocCText			: "Tekstas",
+DlgDocCLink			: "Nuoroda",
+DlgDocCVisited		: "Aplankyta nuoroda",
+DlgDocCActive		: "Aktyvi nuoroda",
+DlgDocMargins		: "Puslapio kraštinės",
+DlgDocMaTop			: "Viršuje",
+DlgDocMaLeft		: "Kairėje",
+DlgDocMaRight		: "Dešinėje",
+DlgDocMaBottom		: "Apačioje",
+DlgDocMeIndex		: "Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)",
+DlgDocMeDescr		: "Dokumento apibūdinimas",
+DlgDocMeAuthor		: "Autorius",
+DlgDocMeCopy		: "Autorinės teisės",
+DlgDocPreview		: "Peržiūra",
+
+// Templates Dialog
+Templates			: "Šablonai",
+DlgTemplatesTitle	: "Turinio šablonai",
+DlgTemplatesSelMsg	: "Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):",
+DlgTemplatesLoading	: "Įkeliamas šablonų sąrašas. Prašome palaukti...",
+DlgTemplatesNoTpl	: "(Šablonų sąrašas tuščias)",
+
+// About Dialog
+DlgAboutAboutTab	: "Apie",
+DlgAboutBrowserInfoTab	: "Naršyklės informacija",
+DlgAboutVersion		: "versija",
+DlgAboutLicense		: "Licencijuota pagal GNU mažesnės atsakomybės pagrindinės viešos licencijos sąlygas",
+DlgAboutInfo		: "Papildomą informaciją galima gauti"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/mn.js 1.4.0sr5-1/fckeditor/editor/lang/mn.js
--- 1.3.11sr1/fckeditor/editor/lang/mn.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/mn.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: mn.js
+ * 	Mongolian language file.
+ * 
+ * File Authors:
+ * 		Lkamtseren ODONBAATAR (odonbaatarl@yahoo.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Багажны хэсэг эвдэх",
+ToolbarExpand		: "Багажны хэсэг өргөтгөх",
+
+// Toolbar Items and Context Menu
+Save				: "Хадгалах",
+NewPage				: "Шинэ хуудас",
+Preview				: "Уридчлан харах",
+Cut					: "Хайчлах",
+Copy				: "Хуулах",
+Paste				: "Буулгах",
+PasteText			: "plain text-ээс буулгах",
+PasteWord			: "Word-оос буулгах",
+Print				: "Хэвлэх",
+SelectAll			: "Бүгдийг нь сонгох",
+RemoveFormat		: "Формат авч хаях",
+InsertLinkLbl		: "Линк",
+InsertLink			: "Линк Оруулах/Засварлах",
+RemoveLink			: "Линк авч хаях",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+InsertImageLbl		: "Зураг",
+InsertImage			: "Зураг Оруулах/Засварлах",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Хүснэгт",
+InsertTable			: "Хүснэгт Оруулах/Засварлах",
+InsertLineLbl		: "Зураас",
+InsertLine			: "Хөндлөн зураас оруулах",
+InsertSpecialCharLbl: "Онцгой тэмдэгт",
+InsertSpecialChar	: "Онцгой тэмдэгт оруулах",
+InsertSmileyLbl		: "Тодорхойлолт",
+InsertSmiley		: "Тодорхойлолт оруулах",
+About				: "FCKeditor-н тухай",
+Bold				: "Тод бүдүүн",
+Italic				: "Налуу",
+Underline			: "Доогуур нь зураастай болгох",
+StrikeThrough		: "Дундуур нь зураастай болгох",
+Subscript			: "Суурь болгох",
+Superscript			: "Зэрэг болгох",
+LeftJustify			: "Зүүн талд байрлуулах",
+CenterJustify		: "Төвд байрлуулах",
+RightJustify		: "Баруун талд байрлуулах",
+BlockJustify		: "Блок хэлбэрээр байрлуулах",
+DecreaseIndent		: "Догол мөр нэмэх",
+IncreaseIndent		: "Догол мөр хасах",
+Undo				: "Хүчингүй болгох",
+Redo				: "Өмнөх үйлдлээ сэргээх",
+NumberedListLbl		: "Дугаарлагдсан жагсаалт",
+NumberedList		: "Дугаарлагдсан жагсаалт Оруулах/Авах",
+BulletedListLbl		: "Цэгтэй жагсаалт",
+BulletedList		: "Цэгтэй жагсаалт Оруулах/Авах",
+ShowTableBorders	: "Хүснэгтийн хүрээг үзүүлэх",
+ShowDetails			: "Деталчлан үзүүлэх",
+Style				: "Загвар",
+FontFormat			: "Формат",
+Font				: "Фонт",
+FontSize			: "Хэмжээ",
+TextColor			: "Фонтны өнгө",
+BGColor				: "Фонны өнгө",
+Source				: "Код",
+Find				: "Хайх",
+Replace				: "Солих",
+SpellCheck			: "Check Spell",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+// Context Menu
+EditLink			: "Холбоос засварлах",
+InsertRow			: "Мөр оруулах",
+DeleteRows			: "Мөр устгах",
+InsertColumn		: "Багана оруулах",
+DeleteColumns		: "Багана устгах",
+InsertCell			: "Нүх оруулах",
+DeleteCells			: "Нүх устгах",
+MergeCells			: "Нүх нэгтэх",
+SplitCell			: "Нүх тусгайрлах",
+CellProperties		: "Хоосон зайн шинж чанар",
+TableProperties		: "Хүснэгт",
+ImageProperties		: "Зураг",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Хэвийн;Formatted;Хаяг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML үйл явц явагдаж байна. Хүлээнэ үү...",
+Done				: "Хийх",
+PasteWordConfirm	: "Word-оос хуулсан текстээ санаж байгааг нь буулгахыг та хүсч байна уу. Та текст-ээ буулгахын өмнө цэвэрлэх үү?",
+NotCompatiblePaste	: "Энэ комманд Internet Explorer-ын 5.5 буюу түүнээс дээш хувилбарт идвэхшинэ. Та цэвэрлэхгүйгээр буулгахыг хүсч байна?",
+UnknownToolbarItem	: "Багажны хэсгийн \"%1\" item мэдэгдэхгүй байна",
+UnknownCommand		: "\"%1\" комманд нэр мэдагдэхгүй байна",
+NotImplemented		: "Зөвшөөрөгдөхгүй комманд",
+UnknownToolbarSet	: "Багажны хэсэгт \"%1\" оноох, үүсээгүй байна",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Болих",
+DlgBtnClose			: "Хаах",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Нэмэлт",
+DlgOpOther			: "&lt;Other&gt;",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;Оноохгүй&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Хэлний чиглэл",
+DlgGenLangDirLtr	: "Зүүнээс баруун (LTR)",
+DlgGenLangDirRtl	: "Баруунаас зүүн (RTL)",
+DlgGenLangCode		: "Хэлний код",
+DlgGenAccessKey		: "Холбох түлхүүр",
+DlgGenName			: "Нэр",
+DlgGenTabIndex		: "Tab индекс",
+DlgGenLongDescr		: "URL-ын тайлбар",
+DlgGenClass			: "Stylesheet классууд",
+DlgGenTitle			: "Зөвлөлдөх гарчиг",
+DlgGenContType		: "Зөвлөлдөх төрлийн агуулга",
+DlgGenLinkCharset	: "Тэмдэгт оноох нөөцөд холбогдсон",
+DlgGenStyle			: "Загвар",
+
+// Image Dialog
+DlgImgTitle			: "Зураг",
+DlgImgInfoTab		: "Зурагны мэдээлэл",
+DlgImgBtnUpload		: "Үүнийг сервэррүү илгээ",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Хуулах",
+DlgImgAlt			: "Тайлбар текст",
+DlgImgWidth			: "Өргөн",
+DlgImgHeight		: "Өндөр",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "хэмжээ дахин оноох",
+DlgImgBorder		: "Хүрээ",
+DlgImgHSpace		: "Хөндлөн зай",
+DlgImgVSpace		: "Босоо зай",
+DlgImgAlign			: "Эгнээ",
+DlgImgAlignLeft		: "Зүүн",
+DlgImgAlignAbsBottom: "Abs доод талд",
+DlgImgAlignAbsMiddle: "Abs Дунд талд",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Доод талд",
+DlgImgAlignMiddle	: "Дунд талд",
+DlgImgAlignRight	: "Баруун",
+DlgImgAlignTextTop	: "Текст дээр",
+DlgImgAlignTop		: "Дээд талд",
+DlgImgPreview		: "Уридчлан харах",
+DlgImgAlertUrl		: "Зурагны URL-ын төрлийн сонгоно уу",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Линк",
+DlgLnkInfoTab		: "Линкийн мэдээлэл",
+DlgLnkTargetTab		: "Байрлал",
+
+DlgLnkType			: "Линкийн төрөл",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Энэ хуудасандах холбоос",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "&lt;бусад&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Холбоос сонгох",
+DlgLnkAnchorByName	: "Холбоосын нэрээр",
+DlgLnkAnchorById	: "Элемэнт Id-гаар",
+DlgLnkNoAnchors		: "&lt;Баримт бичиг холбоосгүй байна&gt;",
+DlgLnkEMail			: "E-Mail Хаяг",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message-ийн агуулга",
+DlgLnkUpload		: "Хуулах",
+DlgLnkBtnUpload		: "Үүнийг серверрүү илгээ",
+
+DlgLnkTarget		: "Байрлал",
+DlgLnkTargetFrame	: "&lt;Агуулах хүрээ&gt;",
+DlgLnkTargetPopup	: "&lt;popup цонх&gt;",
+DlgLnkTargetBlank	: "Шинэ цонх (_blank)",
+DlgLnkTargetParent	: "Эцэг цонх (_parent)",
+DlgLnkTargetSelf	: "Төстэй цонх (_self)",
+DlgLnkTargetTop		: "Хамгийн түрүүн байх цонх (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Popup цонхны нэр",
+DlgLnkPopWinFeat	: "Popup цонхны онцлог",
+DlgLnkPopResize		: "Хэмжээ өөрчлөх",
+DlgLnkPopLocation	: "Location хэсэг",
+DlgLnkPopMenu		: "Meню хэсэг",
+DlgLnkPopScroll		: "Скрол хэсэгүүд",
+DlgLnkPopStatus		: "Статус хэсэг",
+DlgLnkPopToolbar	: "Багажны хэсэг",
+DlgLnkPopFullScrn	: "Цонх дүүргэх (IE)",
+DlgLnkPopDependent	: "Хамаатай (Netscape)",
+DlgLnkPopWidth		: "Өргөн",
+DlgLnkPopHeight		: "Өндөр",
+DlgLnkPopLeft		: "Зүүн байрлал",
+DlgLnkPopTop		: "Дээд байрлал",
+
+DlnLnkMsgNoUrl		: "Линк URL-ээ төрөлжүүлнэ үү",
+DlnLnkMsgNoEMail	: "Е-mail хаягаа төрөлжүүлнэ үү",
+DlnLnkMsgNoAnchor	: "Холбоосоо сонгоно уу",
+
+// Color Dialog
+DlgColorTitle		: "Өнгө сонгох",
+DlgColorBtnClear	: "Цэвэрлэх",
+DlgColorHighlight	: "Өнгө",
+DlgColorSelected	: "Сонгогдсон",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Тодорхойлолт оруулах",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Онцгой тэмдэгт сонгох",
+
+// Table Dialog
+DlgTableTitle		: "Хүснэгт",
+DlgTableRows		: "Мөр",
+DlgTableColumns		: "Багана",
+DlgTableBorder		: "Хүрээний хэмжээ",
+DlgTableAlign		: "Эгнээ",
+DlgTableAlignNotSet	: "&lt;Оноохгүй&gt;",
+DlgTableAlignLeft	: "Зүүн талд",
+DlgTableAlignCenter	: "Төвд",
+DlgTableAlignRight	: "Баруун талд",
+DlgTableWidth		: "Өргөн",
+DlgTableWidthPx		: "цэг",
+DlgTableWidthPc		: "хувь",
+DlgTableHeight		: "Өндөр",
+DlgTableCellSpace	: "Нүх хоорондын зай",
+DlgTableCellPad		: "Нүх доторлох",
+DlgTableCaption		: "Тайлбар",
+
+// Table Cell Dialog
+DlgCellTitle		: "Хоосон зайн шинж чанар",
+DlgCellWidth		: "Өргөн",
+DlgCellWidthPx		: "цэг",
+DlgCellWidthPc		: "хувь",
+DlgCellHeight		: "Өндөр",
+DlgCellWordWrap		: "Үг таслах",
+DlgCellWordWrapNotSet	: "&lt;Оноохгүй&gt;",
+DlgCellWordWrapYes	: "Тийм",
+DlgCellWordWrapNo	: "Үгүй",
+DlgCellHorAlign		: "Босоо эгнээ",
+DlgCellHorAlignNotSet	: "&lt;Оноохгүй&gt;",
+DlgCellHorAlignLeft	: "Зүүн",
+DlgCellHorAlignCenter	: "Төв",
+DlgCellHorAlignRight: "Баруун",
+DlgCellVerAlign		: "Хөндлөн эгнээ",
+DlgCellVerAlignNotSet	: "&lt;Оноохгүй&gt;",
+DlgCellVerAlignTop	: "Дээд тал",
+DlgCellVerAlignMiddle	: "Дунд",
+DlgCellVerAlignBottom	: "Доод тал",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Нийт мөр",
+DlgCellCollSpan		: "Нийт багана",
+DlgCellBackColor	: "Фонны өнгө",
+DlgCellBorderColor	: "Хүрээний өнгө",
+DlgCellBtnSelect	: "Сонго...",
+
+// Find Dialog
+DlgFindTitle		: "Хайх",
+DlgFindFindBtn		: "Хайх",
+DlgFindNotFoundMsg	: "Хайсан текст олсонгүй.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Солих",
+DlgReplaceFindLbl		: "Хайх үг/үсэг:",
+DlgReplaceReplaceLbl	: "Солих үг:",
+DlgReplaceCaseChk		: "Тэнцэх төлөв",
+DlgReplaceReplaceBtn	: "Солих",
+DlgReplaceReplAllBtn	: "Бүгдийг нь Солих",
+DlgReplaceWordChk		: "Тэнцэх бүтэн үг",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар буулгах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+V) товчны хослолыг ашиглана уу.",
+PasteErrorCut	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хослолыг ашиглана уу.",
+PasteErrorCopy	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хослолыг ашиглана уу.",
+
+PasteAsText		: "Plain Text-ээс буулгах",
+PasteFromWord	: "Word-оос буулгах",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Автоматаар",
+ColorMoreColors	: "Нэмэлт өнгөнүүд...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",	//MISSING
+DlgButtonType	: "Type",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutVersion		: "Хувилбар",
+DlgAboutLicense		: "GNU цөөн ерөнхий нийтийн лицензийн ангилалд багтсан зөвшөөрөлтэй",
+DlgAboutInfo		: "Мэдээллээр туслах"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ms.js 1.4.0sr5-1/fckeditor/editor/lang/ms.js
--- 1.3.11sr1/fckeditor/editor/lang/ms.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ms.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ms.js
+ * 	Malay language file.
+ * 
+ * File Authors:
+ * 		Fairul Izham Mohd Mokhlas (eg86@hotmail.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Simpan",
+NewPage				: "Helaian Baru",
+Preview				: "Prebiu",
+Cut					: "Potong",
+Copy				: "Salin",
+Paste				: "Tampal",
+PasteText			: "Tampal sebagai Text Biasa",
+PasteWord			: "Tampal dari Word",
+Print				: "Cetak",
+SelectAll			: "Pilih Semua",
+RemoveFormat		: "Buang Format",
+InsertLinkLbl		: "Sambungan",
+InsertLink			: "Masukkan/Sunting Sambungan",
+RemoveLink			: "Buang Sambungan",
+Anchor				: "Masukkan/Sunting Pautan",
+InsertImageLbl		: "Gambar",
+InsertImage			: "Masukkan/Sunting Gambar",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Jadual",
+InsertTable			: "Masukkan/Sunting Jadual",
+InsertLineLbl		: "Garisan",
+InsertLine			: "Masukkan Garisan Membujur",
+InsertSpecialCharLbl: "Huruf Istimewa",
+InsertSpecialChar	: "Masukkan Huruf Istimewa",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Masukkan Smiley",
+About				: "Tentang FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Jajaran Kiri",
+CenterJustify		: "Jajaran Tengah",
+RightJustify		: "Jajaran Kanan",
+BlockJustify		: "Jajaran Blok",
+DecreaseIndent		: "Kurangkan Inden",
+IncreaseIndent		: "Tambahkan Inden",
+Undo				: "Batalkan",
+Redo				: "Ulangkan",
+NumberedListLbl		: "Senarai bernombor",
+NumberedList		: "Masukkan/Sunting Senarai bernombor",
+BulletedListLbl		: "Senarai tidak bernombor",
+BulletedList		: "Masukkan/Sunting Senarai tidak bernombor",
+ShowTableBorders	: "Tunjukkan Border Jadual",
+ShowDetails			: "Tunjukkan Butiran",
+Style				: "Stail",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Saiz",
+TextColor			: "Warna Text",
+BGColor				: "Warna Latarbelakang",
+Source				: "Sumber",
+Find				: "Cari",
+Replace				: "Ganti",
+SpellCheck			: "Semak Ejaan",
+UniversalKeyboard	: "Papan Kekunci Universal",
+
+Form			: "Borang",
+Checkbox		: "Checkbox",
+RadioButton		: "Butang Radio",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Field Tersembunyi",
+Button			: "Butang",
+SelectionField	: "Field Pilihan",
+ImageButton		: "Butang Bergambar",
+
+// Context Menu
+EditLink			: "Sunting Sambungan",
+InsertRow			: "Masukkan Baris",
+DeleteRows			: "Buangkan Baris",
+InsertColumn		: "Masukkan Lajur",
+DeleteColumns		: "Buangkan Lajur",
+InsertCell			: "Masukkan Sel",
+DeleteCells			: "Buangkan Sel-sel",
+MergeCells			: "Cantumkan Sel-sel",
+SplitCell			: "Bahagikan Sel",
+CellProperties		: "Ciri-ciri Sel",
+TableProperties		: "Ciri-ciri Jadual",
+ImageProperties		: "Ciri-ciri Gambar",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Ciri-ciri Pautan",
+ButtonProp			: "Ciri-ciri Butang",
+CheckboxProp		: "Ciri-ciri Checkbox",
+HiddenFieldProp		: "Ciri-ciri Field Tersembunyi",
+RadioButtonProp		: "Ciri-ciri Butang Radio",
+ImageButtonProp		: "Ciri-ciri Butang Bergambar",
+TextFieldProp		: "Ciri-ciri Text Field",
+SelectionFieldProp	: "Ciri-ciri Selection Field",
+TextareaProp		: "Ciri-ciri Textarea",
+FormProp			: "Ciri-ciri Borang",
+
+FontFormats			: "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Memproses XHTML. Sila tunggu...",
+Done				: "Siap",
+PasteWordConfirm	: "Text yang anda hendak tampal adalah berasal dari Word. Adakah anda mahu membuang semua format Word sebelum tampal ke dalam text?",
+NotCompatiblePaste	: "Arahan ini bole dilakukan jika anda mempuunyai Internet Explorer version 5.5 atau yang lebih tinggi. Adakah anda hendak tampal text tanpa membuang format Word?",
+UnknownToolbarItem	: "Toolbar item tidak diketahui\"%1\"",
+UnknownCommand		: "Arahan tidak diketahui \"%1\"",
+NotImplemented		: "Arahan tidak terdapat didalam sistem",
+UnknownToolbarSet	: "Set toolbar \"%1\" tidak wujud",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Batal",
+DlgBtnClose			: "Tutup",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "&lt;Lain-lain&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;tidak di set&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Arah Tulisan",
+DlgGenLangDirLtr	: "Kiri ke Kanan (LTR)",
+DlgGenLangDirRtl	: "Kanan ke Kiri (RTL)",
+DlgGenLangCode		: "Kod Bahasa",
+DlgGenAccessKey		: "Kunci Akses",
+DlgGenName			: "Nama",
+DlgGenTabIndex		: "Indeks Tab ",
+DlgGenLongDescr		: "Butiran Panjang URL",
+DlgGenClass			: "Kelas-kelas Stylesheet",
+DlgGenTitle			: "Tajuk Makluman",
+DlgGenContType		: "Jenis Kandungan Makluman",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stail",
+
+// Image Dialog
+DlgImgTitle			: "Ciri-ciri Imej",
+DlgImgInfoTab		: "Info Imej",
+DlgImgBtnUpload		: "Hantar ke Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Muat Naik",
+DlgImgAlt			: "Text Alternatif",
+DlgImgWidth			: "Lebar",
+DlgImgHeight		: "Tinggi",
+DlgImgLockRatio		: "Tetapkan Nisbah",
+DlgBtnResetSize		: "Saiz Set Semula",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "Ruang Melintang",
+DlgImgVSpace		: "Ruang Menegak",
+DlgImgAlign			: "Jajaran",
+DlgImgAlignLeft		: "Kiri",
+DlgImgAlignAbsBottom: "Bawah Mutlak",
+DlgImgAlignAbsMiddle: "Pertengahan Mutlak",
+DlgImgAlignBaseline	: "Garis Dasar",
+DlgImgAlignBottom	: "Bawah",
+DlgImgAlignMiddle	: "Pertengahan",
+DlgImgAlignRight	: "Kanan",
+DlgImgAlignTextTop	: "Atas Text",
+DlgImgAlignTop		: "Atas",
+DlgImgPreview		: "Prebiu",
+DlgImgAlertUrl		: "Sila taip URL untuk fail gambar",
+DlgImgLinkTab		: "Sambungan",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Sambungan",
+DlgLnkInfoTab		: "Butiran Sambungan",
+DlgLnkTargetTab		: "Sasaran",
+
+DlgLnkType			: "Jenis Sambungan",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Pautan dalam muka surat ini",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;lain-lain&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sila pilih pautan",
+DlgLnkAnchorByName	: "dengan menggunakan nama pautan",
+DlgLnkAnchorById	: "dengan menggunakan ID elemen",
+DlgLnkNoAnchors		: "&lt;Tiada pautan terdapat dalam dokumen ini&gt;",
+DlgLnkEMail			: "Alamat E-Mail",
+DlgLnkEMailSubject	: "Subjek Mesej",
+DlgLnkEMailBody		: "Isi Kandungan Mesej",
+DlgLnkUpload		: "Muat Naik",
+DlgLnkBtnUpload		: "Hantar ke Server",
+
+DlgLnkTarget		: "Sasaran",
+DlgLnkTargetFrame	: "&lt;bingkai&gt;",
+DlgLnkTargetPopup	: "&lt;tetingkap popup&gt;",
+DlgLnkTargetBlank	: "Tetingkap Baru (_blank)",
+DlgLnkTargetParent	: "Tetingkap Parent (_parent)",
+DlgLnkTargetSelf	: "Tetingkap yang Sama (_self)",
+DlgLnkTargetTop		: "Tetingkap yang paling atas (_top)",
+DlgLnkTargetFrameName	: "Nama Bingkai Sasaran",
+DlgLnkPopWinName	: "Nama Tetingkap Popup",
+DlgLnkPopWinFeat	: "Ciri Tetingkap Popup",
+DlgLnkPopResize		: "Saiz bolehubah",
+DlgLnkPopLocation	: "Bar Lokasi",
+DlgLnkPopMenu		: "Bar Menu",
+DlgLnkPopScroll		: "Bar-bar skrol",
+DlgLnkPopStatus		: "Bar Status",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Skrin Penuh (IE)",
+DlgLnkPopDependent	: "Bergantungan (Netscape)",
+DlgLnkPopWidth		: "Lebar",
+DlgLnkPopHeight		: "Tinggi",
+DlgLnkPopLeft		: "Posisi Kiri",
+DlgLnkPopTop		: "Posisi Atas",
+
+DlnLnkMsgNoUrl		: "Sila taip sambungan URL",
+DlnLnkMsgNoEMail	: "Sila taip alamat e-mail",
+DlnLnkMsgNoAnchor	: "Sila pilih pautan berkenaaan",
+
+// Color Dialog
+DlgColorTitle		: "Pilihan Warna",
+DlgColorBtnClear	: "Nyahwarna",
+DlgColorHighlight	: "Terang",
+DlgColorSelected	: "Dipilih",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Masukkan Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Sila pilih huruf istimewa",
+
+// Table Dialog
+DlgTableTitle		: "Ciri-ciri Jadual",
+DlgTableRows		: "Barisan",
+DlgTableColumns		: "Jaluran",
+DlgTableBorder		: "Saiz Border",
+DlgTableAlign		: "Penjajaran",
+DlgTableAlignNotSet	: "<Tidak diset>",
+DlgTableAlignLeft	: "Kiri",
+DlgTableAlignCenter	: "Tengah",
+DlgTableAlignRight	: "Kanan",
+DlgTableWidth		: "Lebar",
+DlgTableWidthPx		: "piksel-piksel",
+DlgTableWidthPc		: "peratus",
+DlgTableHeight		: "Tinggi",
+DlgTableCellSpace	: "Ruangan Antara Sel",
+DlgTableCellPad		: "Tambahan Ruang Sel",
+DlgTableCaption		: "Keterangan",
+
+// Table Cell Dialog
+DlgCellTitle		: "Ciri-ciri Sel",
+DlgCellWidth		: "Lebar",
+DlgCellWidthPx		: "piksel-piksel",
+DlgCellWidthPc		: "peratus",
+DlgCellHeight		: "Tinggi",
+DlgCellWordWrap		: "Mengulung Perkataan",
+DlgCellWordWrapNotSet	: "&lt;Tidak diset&gt;",
+DlgCellWordWrapYes	: "Ya",
+DlgCellWordWrapNo	: "Tidak",
+DlgCellHorAlign		: "Jajaran Membujur",
+DlgCellHorAlignNotSet	: "&lt;Tidak diset&gt;",
+DlgCellHorAlignLeft	: "Kiri",
+DlgCellHorAlignCenter	: "Tengah",
+DlgCellHorAlignRight: "Kanan",
+DlgCellVerAlign		: "Jajaran Menegak",
+DlgCellVerAlignNotSet	: "&lt;Tidak diset&gt;",
+DlgCellVerAlignTop	: "Atas",
+DlgCellVerAlignMiddle	: "Tengah",
+DlgCellVerAlignBottom	: "Bawah",
+DlgCellVerAlignBaseline	: "Garis Dasar",
+DlgCellRowSpan		: "Penggunaan Baris",
+DlgCellCollSpan		: "Penggunaan Lajur",
+DlgCellBackColor	: "Warna Latarbelakang",
+DlgCellBorderColor	: "Warna Border",
+DlgCellBtnSelect	: "Pilih...",
+
+// Find Dialog
+DlgFindTitle		: "Carian",
+DlgFindFindBtn		: "Cari",
+DlgFindNotFoundMsg	: "Text yang dicari tidak dijumpai.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Gantian",
+DlgReplaceFindLbl		: "Perkataan yang dicari:",
+DlgReplaceReplaceLbl	: "Diganti dengan:",
+DlgReplaceCaseChk		: "Padanan case huruf",
+DlgReplaceReplaceBtn	: "Ganti",
+DlgReplaceReplAllBtn	: "Ganti semua",
+DlgReplaceWordChk		: "Padana Keseluruhan perkataan",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Keselamatan perisian browser anda tidak membenarkan operasi tampalan text/imej. Sila gunakan papan kekunci (Ctrl+V).",
+PasteErrorCut	: "Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).",
+PasteErrorCopy	: "Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).",
+
+PasteAsText		: "Tampal sebagai text biasa",
+PasteFromWord	: "Tampal dari perisian \"Word\"",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Otomatik",
+ColorMoreColors	: "Warna lain-lain...",
+
+// Document Properties
+DocProps		: "Ciri-ciri dokumen",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ciri-ciri Pautan",
+DlgAnchorName		: "Nama Pautan",
+DlgAnchorErrorName	: "Sila taip nama pautan",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Tidak terdapat didalam kamus",
+DlgSpellChangeTo		: "Tukarkan kepada",
+DlgSpellBtnIgnore		: "Biar",
+DlgSpellBtnIgnoreAll	: "Biarkan semua",
+DlgSpellBtnReplace		: "Ganti",
+DlgSpellBtnReplaceAll	: "Gantikan Semua",
+DlgSpellBtnUndo			: "Batalkan",
+DlgSpellNoSuggestions	: "- Tiada cadangan -",
+DlgSpellProgress		: "Pemeriksaan ejaan sedang diproses...",
+DlgSpellNoMispell		: "Pemeriksaan ejaan siap: Tiada salah ejaan",
+DlgSpellNoChanges		: "Pemeriksaan ejaan siap: Tiada perkataan diubah",
+DlgSpellOneChange		: "Pemeriksaan ejaan siap: Satu perkataan telah diubah",
+DlgSpellManyChanges		: "Pemeriksaan ejaan siap: %1 perkataan diubah",
+
+IeSpellDownload			: "Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?",
+
+// Button Dialog
+DlgButtonText	: "Teks (Nilai)",
+DlgButtonType	: "Jenis",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nama",
+DlgCheckboxValue	: "Nilai",
+DlgCheckboxSelected	: "Dipilih",
+
+// Form Dialog
+DlgFormName		: "Nama",
+DlgFormAction	: "Tindakan borang",
+DlgFormMethod	: "Cara borang dihantar",
+
+// Select Field Dialog
+DlgSelectName		: "Nama",
+DlgSelectValue		: "Nilai",
+DlgSelectSize		: "Saiz",
+DlgSelectLines		: "garisan",
+DlgSelectChkMulti	: "Benarkan pilihan pelbagai",
+DlgSelectOpAvail	: "Pilihan sediada",
+DlgSelectOpText		: "Teks",
+DlgSelectOpValue	: "Nilai",
+DlgSelectBtnAdd		: "Tambah Pilihan",
+DlgSelectBtnModify	: "Ubah Pilihan",
+DlgSelectBtnUp		: "Naik ke atas",
+DlgSelectBtnDown	: "Turun ke bawah",
+DlgSelectBtnSetValue : "Set sebagai nilai terpilih",
+DlgSelectBtnDelete	: "Padam",
+
+// Textarea Dialog
+DlgTextareaName	: "Nama",
+DlgTextareaCols	: "Lajur",
+DlgTextareaRows	: "Baris",
+
+// Text Field Dialog
+DlgTextName			: "Nama",
+DlgTextValue		: "Nilai",
+DlgTextCharWidth	: "Lebar isian",
+DlgTextMaxChars		: "Isian Maksimum",
+DlgTextType			: "Jenis",
+DlgTextTypeText		: "Teks",
+DlgTextTypePass		: "Kata Laluan",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nama",
+DlgHiddenValue	: "Nilai",
+
+// Bulleted List Dialog
+BulletedListProp	: "Ciri-ciri senarai berpeluru",
+NumberedListProp	: "Ciri-ciri senarai bernombor",
+DlgLstType			: "Jenis",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Nombor-nombor (1, 2, 3)",
+DlgLstTypeLCase		: "Huruf-huruf kecil (a, b, c)",
+DlgLstTypeUCase		: "Huruf-huruf besar (A, B, C)",
+DlgLstTypeSRoman	: "Nombor Roman Kecil (i, ii, iii)",
+DlgLstTypeLRoman	: "Nombor Roman Besar (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Umum",
+DlgDocBackTab		: "Latarbelakang",
+DlgDocColorsTab		: "Warna dan margin",
+DlgDocMetaTab		: "Data Meta",
+
+DlgDocPageTitle		: "Tajuk Muka Surat",
+DlgDocLangDir		: "Arah Tulisan",
+DlgDocLangDirLTR	: "Kiri ke Kanan (LTR)",
+DlgDocLangDirRTL	: "Kanan ke Kiri (RTL)",
+DlgDocLangCode		: "Kod Bahasa",
+DlgDocCharSet		: "Enkod Set Huruf",
+DlgDocCharSetOther	: "Enkod Set Huruf yang Lain",
+
+DlgDocDocType		: "Jenis Kepala Dokumen",
+DlgDocDocTypeOther	: "Jenis Kepala Dokumen yang Lain",
+DlgDocIncXHTML		: "Masukkan pemula kod XHTML",
+DlgDocBgColor		: "Warna Latarbelakang",
+DlgDocBgImage		: "URL Gambar Latarbelakang",
+DlgDocBgNoScroll	: "Imej Latarbelakang tanpa Skrol",
+DlgDocCText			: "Teks",
+DlgDocCLink			: "Sambungan",
+DlgDocCVisited		: "Sambungan telah Dilawati",
+DlgDocCActive		: "Sambungan Aktif",
+DlgDocMargins		: "Margin Muka Surat",
+DlgDocMaTop			: "Atas",
+DlgDocMaLeft		: "Kiri",
+DlgDocMaRight		: "Kanan",
+DlgDocMaBottom		: "Bawah",
+DlgDocMeIndex		: "Kata Kunci Indeks Dokumen (dipisahkan oleh koma)",
+DlgDocMeDescr		: "Keterangan Dokumen",
+DlgDocMeAuthor		: "Penulis",
+DlgDocMeCopy		: "Hakcipta",
+DlgDocPreview		: "Prebiu",
+
+// Templates Dialog
+Templates			: "Templat",
+DlgTemplatesTitle	: "Templat Kandungan",
+DlgTemplatesSelMsg	: "Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):",
+DlgTemplatesLoading	: "Senarai Templat sedang diproses. Sila Tunggu...",
+DlgTemplatesNoTpl	: "(Tiada Templat Disimpan)",
+
+// About Dialog
+DlgAboutAboutTab	: "Tentang",
+DlgAboutBrowserInfoTab	: "Maklumat Perisian Browser",
+DlgAboutVersion		: "versi",
+DlgAboutLicense		: "Perlesenan dibawah terma GNU Lesser General Public License",
+DlgAboutInfo		: "Untuk maklumat lanjut sila pergi ke"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/nl.js 1.4.0sr5-1/fckeditor/editor/lang/nl.js
--- 1.3.11sr1/fckeditor/editor/lang/nl.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/nl.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: nl.js
+ * 	Dutch language file.
+ * 
+ * File Authors:
+ * 		Bram Crins (bcrins@realdesign.nl)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Menubalk inklappen",
+ToolbarExpand		: "Menubalk uitklappen",
+
+// Toolbar Items and Context Menu
+Save				: "Opslaan",
+NewPage				: "Nieuwe pagina",
+Preview				: "Voorbeeld",
+Cut					: "Knippen",
+Copy				: "Kopiëren",
+Paste				: "Plakken",
+PasteText			: "Plakken als pure tekst",
+PasteWord			: "Plakken Word-gegevens",
+Print				: "Printen",
+SelectAll			: "Alles selecteren",
+RemoveFormat		: "Verwijderen opmaak",
+InsertLinkLbl		: "Link",
+InsertLink			: "Invoegen/Wijzigen link",
+RemoveLink			: "Verwijderen link",
+Anchor				: "Interne link",
+InsertImageLbl		: "Afbeelding",
+InsertImage			: "Invoegen/Wijzigen afbeelding",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Invoegen/Wijzigen Flash",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Invoegen/Wijzigen tabel",
+InsertLineLbl		: "Lijn",
+InsertLine			: "Invoegen horizontale lijn",
+InsertSpecialCharLbl: "Speciale tekens",
+InsertSpecialChar	: "Speciaal teken invoegen",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Emoticon invoegen",
+About				: "Over FCKeditor",
+Bold				: "Vet",
+Italic				: "Schuingedrukt",
+Underline			: "Onderstreept",
+StrikeThrough		: "Doorhalen",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Links uitlijnen",
+CenterJustify		: "Centreren",
+RightJustify		: "Rechts uitlijnen",
+BlockJustify		: "Uitvullen",
+DecreaseIndent		: "Oplopenend",
+IncreaseIndent		: "Aflopend",
+Undo				: "Ongedaan maken",
+Redo				: "Opnieuw",
+NumberedListLbl		: "Genummerde lijst",
+NumberedList		: "Invoegen/Verwijderen genummerde lijst",
+BulletedListLbl		: "Opsomming",
+BulletedList		: "Invoegen/Verwijderen opsomming",
+ShowTableBorders	: "Randen tabel weergeven",
+ShowDetails			: "Details weergeven",
+Style				: "Stijl",
+FontFormat			: "Opmaak",
+Font				: "Lettertype",
+FontSize			: "Grootte",
+TextColor			: "Tekst kleur",
+BGColor				: "Achtergrond kleur",
+Source				: "Code",
+Find				: "Zoeken",
+Replace				: "Vervangen",
+SpellCheck			: "Spellings controle",
+UniversalKeyboard	: "Universeel toetsenbord",
+
+Form			: "Formulier",
+Checkbox		: "Aanvink vakje",
+RadioButton		: "Selectie vakje",
+TextField		: "Tekstveld",
+Textarea		: "Tekstveld (groot)",
+HiddenField		: "Verborgen veld",
+Button			: "Knop",
+SelectionField	: "Selectieveld",
+ImageButton		: "Grafische knop",
+
+// Context Menu
+EditLink			: "Link wijzigen",
+InsertRow			: "Rij invoegen",
+DeleteRows			: "Rijen verwijderen",
+InsertColumn		: "Kolom invoegen",
+DeleteColumns		: "Kolommen verwijderen",
+InsertCell			: "Cel",
+DeleteCells			: "Cellen verwijderen",
+MergeCells			: "Cellen samenvoegen",
+SplitCell			: "Cellen splitsen",
+CellProperties		: "Eigenschappen cel",
+TableProperties		: "Eigenschappen tabel",
+ImageProperties		: "Eigenschappen afbeelding",
+FlashProperties		: "Eigenschappen Flash",
+
+AnchorProp			: "Eigenschappen interne link",
+ButtonProp			: "Eigenschappen knop",
+CheckboxProp		: "Eigenschappen aanvink vakje",
+HiddenFieldProp		: "Eigenschappen verborgen veld",
+RadioButtonProp		: "Eigenschappen selectie vakje",
+ImageButtonProp		: "Eigenschappen grafische knop",
+TextFieldProp		: "Eigenschappen tekstveld",
+SelectionFieldProp	: "Eigenschappen selectieveld",
+TextareaProp		: "Eigenschappen tekstveld (groot)",
+FormProp			: "Eigenschappen formulier",
+
+FontFormats			: "Normaal;Met opmaak;Adres;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Verwerken XHTML. Even geduld aub...",
+Done				: "Klaar",
+PasteWordConfirm	: "De tekst die je plakt lijkt gekopiëerd uit Word. Wil je de tekst opschonen voordat er geplakt wordt?",
+NotCompatiblePaste	: "Deze opdracht is beschikbaar voor Internet Explorer versie 5.5 of hoger. Wil je plakken zonder opschonen?",
+UnknownToolbarItem	: "Onbekende item op menubalk \"%1\"",
+UnknownCommand		: "Onbekende opdracht naam \"%1\"",
+NotImplemented		: "Opdracht niet geïmplementeerd.",
+UnknownToolbarSet	: "Menubalk \"%1\" bestaat niet.",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuleren",
+DlgBtnClose			: "Afsluiten",
+DlgBtnBrowseServer	: "Bladeren op server",
+DlgAdvancedTag		: "Geavanceerd",
+DlgOpOther			: "&lt;Anders&gt;",
+DlgInfoTab			: "Informatie",
+DlgAlertUrl			: "Geef URL op",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;niet ingevuld&gt;",
+DlgGenId			: "Kenmerk",
+DlgGenLangDir		: "Richting taal",
+DlgGenLangDirLtr	: "Links naar Rechts (LTR)",
+DlgGenLangDirRtl	: "Rechts naar Links (RTL)",
+DlgGenLangCode		: "Code taal",
+DlgGenAccessKey		: "Toegangs toets",
+DlgGenName			: "Naam",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Lange omschrijving URL",
+DlgGenClass			: "Stylesheet Klassen",
+DlgGenTitle			: "Advisory titel",
+DlgGenContType		: "Advisory Content type",
+DlgGenLinkCharset	: "Gelinkte bron karakterset",
+DlgGenStyle			: "Stijl",
+
+// Image Dialog
+DlgImgTitle			: "Eigenschappen afbeelding",
+DlgImgInfoTab		: "Informatie afbeelding",
+DlgImgBtnUpload		: "Naar server verzenden",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternatieve tekst",
+DlgImgWidth			: "Breedte",
+DlgImgHeight		: "Hoogte",
+DlgImgLockRatio		: "Afmetingen vergrendelen",
+DlgBtnResetSize		: "Afmetingen resetten",
+DlgImgBorder		: "Rand",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Uitlijning",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Abs beneden",
+DlgImgAlignAbsMiddle: "Abs midden",
+DlgImgAlignBaseline	: "Basislijn",
+DlgImgAlignBottom	: "Beneden",
+DlgImgAlignMiddle	: "Midden",
+DlgImgAlignRight	: "Rechts",
+DlgImgAlignTextTop	: "Tekst boven",
+DlgImgAlignTop		: "Boven",
+DlgImgPreview		: "Voorbeeld",
+DlgImgAlertUrl		: "Geeft de URL van de afbeelding",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Eigenschappen Flash",
+DlgFlashChkPlay		: "Automatisch afspelen",
+DlgFlashChkLoop		: "Herhalen",
+DlgFlashChkMenu		: "Flaschmenu\'s inschakelen",
+DlgFlashScale		: "Verschalen",
+DlgFlashScaleAll	: "Alles tonen",
+DlgFlashScaleNoBorder	: "Geen rand",
+DlgFlashScaleFit	: "Precies passen",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Informatie link",
+DlgLnkTargetTab		: "Doel",
+
+DlgLnkType			: "Type link",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Interne link in pagina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;anders&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Kies een interne link",
+DlgLnkAnchorByName	: "Op naam interne link",
+DlgLnkAnchorById	: "Op kenmerk interne link",
+DlgLnkNoAnchors		: "&lt;Geen interne links in document gevonden.&gt;",
+DlgLnkEMail			: "E-Mail adres",
+DlgLnkEMailSubject	: "Onderwerp bericht",
+DlgLnkEMailBody		: "Inhoud bericht",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Naar de server versturen.",
+
+DlgLnkTarget		: "Doel",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;popup window&gt;",
+DlgLnkTargetBlank	: "Nieuw venster (_blank)",
+DlgLnkTargetParent	: "Ouder venster (_parent)",
+DlgLnkTargetSelf	: "Zelfde venster (_self)",
+DlgLnkTargetTop		: "Browser venster (_top)",
+DlgLnkTargetFrameName	: "Naam doelframe",
+DlgLnkPopWinName	: "Naam popup venster",
+DlgLnkPopWinFeat	: "Instellingen popup venster",
+DlgLnkPopResize		: "Grootte wijzigen",
+DlgLnkPopLocation	: "Locatie menu",
+DlgLnkPopMenu		: "Menu balk",
+DlgLnkPopScroll		: "Schuifbalken",
+DlgLnkPopStatus		: "Statusbalk",
+DlgLnkPopToolbar	: "Menubalk",
+DlgLnkPopFullScrn	: "Volledig scherm (IE)",
+DlgLnkPopDependent	: "Afhankelijk (Netscape)",
+DlgLnkPopWidth		: "Breedte",
+DlgLnkPopHeight		: "Hoogte",
+DlgLnkPopLeft		: "Positie links",
+DlgLnkPopTop		: "Positie top",
+
+DlnLnkMsgNoUrl		: "Geeft de link van de URL",
+DlnLnkMsgNoEMail	: "Geef een e-mail adres",
+DlnLnkMsgNoAnchor	: "Selecteer een interne link",
+
+// Color Dialog
+DlgColorTitle		: "Selecteer kleur",
+DlgColorBtnClear	: "Opschonen",
+DlgColorHighlight	: "Accentueren",
+DlgColorSelected	: "Geselecteerd",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Invoegen smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecteer speciaal karakter",
+
+// Table Dialog
+DlgTableTitle		: "Eigenschappen tabel",
+DlgTableRows		: "Rijen",
+DlgTableColumns		: "Kolommen",
+DlgTableBorder		: "Breedte rand",
+DlgTableAlign		: "Uitlijning",
+DlgTableAlignNotSet	: "<Niet ingegven>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Centreren",
+DlgTableAlignRight	: "Rechts",
+DlgTableWidth		: "Breedte",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Hoogte",
+DlgTableCellSpace	: "Afstand tussen cellen",
+DlgTableCellPad		: "Afstand vanaf rand cel",
+DlgTableCaption		: "Naam",
+
+// Table Cell Dialog
+DlgCellTitle		: "Eigenschappen cel",
+DlgCellWidth		: "Breedte",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Hoogte",
+DlgCellWordWrap		: "Afbreken woorden",
+DlgCellWordWrapNotSet	: "<Niet ingegeven>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nee",
+DlgCellHorAlign		: "Horizontale uitlijning",
+DlgCellHorAlignNotSet	: "<Niet ingegeven>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Centreren",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign		: "Verticale uitlijning",
+DlgCellVerAlignNotSet	: "<Niet ingegeven>",
+DlgCellVerAlignTop	: "Boven",
+DlgCellVerAlignMiddle	: "Midden",
+DlgCellVerAlignBottom	: "Beneden",
+DlgCellVerAlignBaseline	: "Basislijn",
+DlgCellRowSpan		: "Overkoepeling rijen",
+DlgCellCollSpan		: "Overkoepeling kolommen",
+DlgCellBackColor	: "Kleur achterrond",
+DlgCellBorderColor	: "Kleur rand",
+DlgCellBtnSelect	: "Selecteren...",
+
+// Find Dialog
+DlgFindTitle		: "Vinden",
+DlgFindFindBtn		: "Vinden",
+DlgFindNotFoundMsg	: "De opgegeven tekst is niet gevonden.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Vervangen",
+DlgReplaceFindLbl		: "Zoeken naar:",
+DlgReplaceReplaceLbl	: "Vervangen met:",
+DlgReplaceCaseChk		: "Hoofdlettergevoelig",
+DlgReplaceReplaceBtn	: "Vervangen",
+DlgReplaceReplAllBtn	: "Alles vervangen",
+DlgReplaceWordChk		: "Hele woord moet voorkomen",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "De beveiligingsinstelling van de browser verhinderen het automatisch plakken. Gebruik Ctrl+V op het toetsenbord.",
+PasteErrorCut	: "De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik Ctrl+X op het toetsenbord.",
+PasteErrorCopy	: "De beveiligingsinstelling van de browser verhinderen het automatisch kopieëren. Gebruik Ctrl+C op het toetsenbord.",
+
+PasteAsText		: "Plakken als platte tekst",
+PasteFromWord	: "Plakken van Word-gegevens",
+
+DlgPasteMsg2	: "Plak de tekst in de volgende box gebruikmakend van je toetstenbord (<STRONG>Ctrl+V</STRONG>) en kies <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Negeer Font Face definities",
+DlgPasteRemoveStyles	: "Verwijder Styles definities",
+DlgPasteCleanBox		: "Box opschonen",
+
+
+// Color Picker
+ColorAutomatic	: "Automatisch",
+ColorMoreColors	: "Meer kleuren...",
+
+// Document Properties
+DocProps		: "Eigenschappen document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Eigenschappen interne link",
+DlgAnchorName		: "Naam interne link",
+DlgAnchorErrorName	: "Geef de naam van de interne link op",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Niet in het woordenboek",
+DlgSpellChangeTo		: "Wijzig in",
+DlgSpellBtnIgnore		: "Negeren",
+DlgSpellBtnIgnoreAll	: "Alles negeren",
+DlgSpellBtnReplace		: "Vervangen",
+DlgSpellBtnReplaceAll	: "Alles vervangen",
+DlgSpellBtnUndo			: "Ongedaan maken",
+DlgSpellNoSuggestions	: "-Geen suggesties-",
+DlgSpellProgress		: "Bezig met spellingscontrole...",
+DlgSpellNoMispell		: "Klaar met spellingscontrole: Geen fouten gevonden",
+DlgSpellNoChanges		: "Klaar met spellingscontrole: Geen woorden aangepast",
+DlgSpellOneChange		: "Klaar met spellingscontrole: 1 woord aangepast",
+DlgSpellManyChanges		: "Klaar met spellingscontrole: %1 woorden aangepast",
+
+IeSpellDownload			: "Spellingscontrole niet geïnstalleerd. Wil je deze nu downloaden?",
+
+// Button Dialog
+DlgButtonText	: "Tekst (waarde)",
+DlgButtonType	: "Soort",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naam",
+DlgCheckboxValue	: "Waarde",
+DlgCheckboxSelected	: "Geselecteerd",
+
+// Form Dialog
+DlgFormName		: "Naam",
+DlgFormAction	: "Actie",
+DlgFormMethod	: "Methode",
+
+// Select Field Dialog
+DlgSelectName		: "Naam",
+DlgSelectValue		: "Waarde",
+DlgSelectSize		: "Grootte",
+DlgSelectLines		: "Regels",
+DlgSelectChkMulti	: "Gecombineerde selecties toestaan",
+DlgSelectOpAvail	: "Beschikbare opties",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Waarde",
+DlgSelectBtnAdd		: "Toevoegen",
+DlgSelectBtnModify	: "Wijzigen",
+DlgSelectBtnUp		: "Omhoog",
+DlgSelectBtnDown	: "Omlaag",
+DlgSelectBtnSetValue : "Als geselecteerde waarde instellen",
+DlgSelectBtnDelete	: "Verwijderen",
+
+// Textarea Dialog
+DlgTextareaName	: "Naam",
+DlgTextareaCols	: "Kolommen",
+DlgTextareaRows	: "Rijen",
+
+// Text Field Dialog
+DlgTextName			: "Naam",
+DlgTextValue		: "Waarde",
+DlgTextCharWidth	: "Breedte karakter",
+DlgTextMaxChars		: "Maximum aantal karakters",
+DlgTextType			: "Soort",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Wachtwoord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naam",
+DlgHiddenValue	: "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Eigenschappen opsommingslijst",
+NumberedListProp	: "Eigenschappen genummerde opsommingslijst",
+DlgLstType			: "Soort",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Vierkant",
+DlgLstTypeNumbers	: "Nummerks (1, 2, 3)",
+DlgLstTypeLCase		: "Kleine letters (a, b, c)",
+DlgLstTypeUCase		: "Hoofdletters (A, B, C)",
+DlgLstTypeSRoman	: "Klein romeins (i, ii, iii)",
+DlgLstTypeLRoman	: "Groot romeins (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Algemeen",
+DlgDocBackTab		: "Achtergrond",
+DlgDocColorsTab		: "Kleuring en marges",
+DlgDocMetaTab		: "Meta data",
+
+DlgDocPageTitle		: "Titel pagina",
+DlgDocLangDir		: "Richting taal",
+DlgDocLangDirLTR	: "Links naar rechts",
+DlgDocLangDirRTL	: "Rechts naar links",
+DlgDocLangCode		: "Taalcode",
+DlgDocCharSet		: "Karakterset-encoding",
+DlgDocCharSetOther	: "Andere karakterset-encoding",
+
+DlgDocDocType		: "Opschrift document soort",
+DlgDocDocTypeOther	: "Ander opschrift document soort",
+DlgDocIncXHTML		: "XHTML declaraties meenemen",
+DlgDocBgColor		: "Achtergrond kleur",
+DlgDocBgImage		: "URL achtergrondplaatje",
+DlgDocBgNoScroll	: "Gefixeerde achtergrond",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Bezochte link",
+DlgDocCActive		: "Active link",
+DlgDocMargins		: "Afstandsinstellingen document",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Rechts",
+DlgDocMaBottom		: "Bodem",
+DlgDocMeIndex		: "Trefwoorden betreffende document (komma gescheiden)",
+DlgDocMeDescr		: "Beschrijving document",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Voorbeeld",
+
+// Templates Dialog
+Templates			: "Sjablonen",
+DlgTemplatesTitle	: "Inhoud sjabonen",
+DlgTemplatesSelMsg	: "Selecteer een sjabloon die in de editor geopend moet worden. (De actuele inhoud gaat verloren.):",
+DlgTemplatesLoading	: "Bezig met laden sjabonen. Even geduld aub...",
+DlgTemplatesNoTpl	: "(Geen sjablonen gedefiniëerd)",
+
+// About Dialog
+DlgAboutAboutTab	: "Over",
+DlgAboutBrowserInfoTab	: "Browser informatie",
+DlgAboutVersion		: "Versie",
+DlgAboutLicense		: "Gelicenceerd onder de condities van de GNU Lesser General Public License",
+DlgAboutInfo		: "Voor meer informatie ga naar "
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/no.js 1.4.0sr5-1/fckeditor/editor/lang/no.js
--- 1.3.11sr1/fckeditor/editor/lang/no.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/no.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: no.js
+ * 	Norwegian language file.
+ * 
+ * File Authors:
+ * 		Martin Kronstad (www.siteman.no) (martin.kronstad@broadpark.no)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul verktøylinje",
+ToolbarExpand		: "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save				: "Lagre",
+NewPage				: "Ny Side",
+Preview				: "Forhåndsvis",
+Cut					: "Klipp ut",
+Copy				: "Kopier",
+Paste				: "Lim inn",
+PasteText			: "Lim inn som ren tekst",
+PasteWord			: "Lim inn fra Word",
+Print				: "Skriv ut",
+SelectAll			: "Velg alle",
+RemoveFormat		: "Fjern format",
+InsertLinkLbl		: "Lenke",
+InsertLink			: "Sett inn/Rediger lenke",
+RemoveLink			: "Fjern lenke",
+Anchor				: "Sett inn/Rediger anker",
+InsertImageLbl		: "Bilde",
+InsertImage			: "Sett inn/Rediger bilde",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sett inn/Rediger Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Sett inn/Rediger tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar	: "Sett inn spesielt tegn",
+InsertSmileyLbl		: "Smil",
+InsertSmiley		: "Sett inn smil",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understrek",
+StrikeThrough		: "Gjennomstrek",
+Subscript			: "Senket skrift",
+Superscript			: "Hevet skrift",
+LeftJustify			: "Venstrejuster",
+CenterJustify		: "Midtjuster",
+RightJustify		: "Høyrejuster",
+BlockJustify		: "Blokkjuster",
+DecreaseIndent		: "Senk nivå",
+IncreaseIndent		: "Øk nivå",
+Undo				: "Angre",
+Redo				: "Gjør om",
+NumberedListLbl		: "Numrert liste",
+NumberedList		: "Sett inn/Fjern numrert liste",
+BulletedListLbl		: "Uordnet liste",
+BulletedList		: "Sett inn/Fjern uordnet liste",
+ShowTableBorders	: "Vis tabellrammer",
+ShowDetails			: "Vis detaljer",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Skrift",
+FontSize			: "Størrelse",
+TextColor			: "Tekstfarge",
+BGColor				: "Bakgrunnsfarge",
+Source				: "Kilde",
+Find				: "Finn",
+Replace				: "Erstatt",
+SpellCheck			: "Stavekontroll",
+UniversalKeyboard	: "Universelt tastatur",
+
+Form			: "Skjema",
+Checkbox		: "Sjekkboks",
+RadioButton		: "Radioknapp",
+TextField		: "Tekstfelt",
+Textarea		: "Tekstområde",
+HiddenField		: "Skjult felt",
+Button			: "Knapp",
+SelectionField	: "Dropdown meny",
+ImageButton		: "Bildeknapp",
+
+// Context Menu
+EditLink			: "Rediger lenke",
+InsertRow			: "Sett inn rad",
+DeleteRows			: "Slett rader",
+InsertColumn		: "Sett inn kolonne",
+DeleteColumns		: "Slett kolonner",
+InsertCell			: "Sett inn celle",
+DeleteCells			: "Slett celler",
+MergeCells			: "Slå sammen celler",
+SplitCell			: "Splitt celler",
+CellProperties		: "Celleegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildeegenskaper",
+FlashProperties		: "Flash Egenskaper",
+
+AnchorProp			: "Ankeregenskaper",
+ButtonProp			: "Knappegenskaper",
+CheckboxProp		: "Sjekkboksegenskaper",
+HiddenFieldProp		: "Skjult felt egenskaper",
+RadioButtonProp		: "Radioknappegenskaper",
+ImageButtonProp		: "Bildeknappegenskaper",
+TextFieldProp		: "Tekstfeltegenskaper",
+SelectionFieldProp	: "Dropdown menyegenskaper",
+TextareaProp		: "Tekstfeltegenskaper",
+FormProp			: "Skjemaegenskaper",
+
+FontFormats			: "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Lager XHTML. Vennligst vent...",
+Done				: "Ferdig",
+PasteWordConfirm	: "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?",
+NotCompatiblePaste	: "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)",
+UnknownToolbarItem	: "Ukjent menyvalg \"%1\"",
+UnknownCommand		: "Ukjent kommando \"%1\"",
+NotImplemented		: "Kommando ikke ennå implimentert",
+UnknownToolbarSet	: "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Lukk",
+DlgBtnBrowseServer	: "Bla igjennom server",
+DlgAdvancedTag		: "Avansert",
+DlgOpOther			: "&lt;Annet&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Vennligst skriv inn URL'en",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ikke satt&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkretning",
+DlgGenLangDirLtr	: "Venstre til høyre (VTH)",
+DlgGenLangDirRtl	: "Høyre til venstre (HTV)",
+DlgGenLangCode		: "Språk kode",
+DlgGenAccessKey		: "Aksessknapp",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Utvidet beskrivelse",
+DlgGenClass			: "Stilarkklasser",
+DlgGenTitle			: "Tittel",
+DlgGenContType		: "Type",
+DlgGenLinkCharset	: "Lenket språkkart",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Bildeegenskaper",
+DlgImgInfoTab		: "Bildeinformasjon",
+DlgImgBtnUpload		: "Send det til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Last opp",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Høyde",
+DlgImgLockRatio		: "Lås forhold",
+DlgBtnResetSize		: "Tilbakestill størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMarg",
+DlgImgVSpace		: "VMarg",
+DlgImgAlign			: "Juster",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline	: "Bunnlinje",
+DlgImgAlignBottom	: "Bunn",
+DlgImgAlignMiddle	: "Midten",
+DlgImgAlignRight	: "Høyre",
+DlgImgAlignTextTop	: "Tekst topp",
+DlgImgAlignTop		: "Topp",
+DlgImgPreview		: "Forhåndsvis",
+DlgImgAlertUrl		: "Vennligst skriv bildeurlen",
+DlgImgLinkTab		: "Lenke",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Egenskaper",
+DlgFlashChkPlay		: "Auto Spill",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Slå på Flash meny",
+DlgFlashScale		: "Skaler",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Skaler til å passeExact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Lenke",
+DlgLnkInfoTab		: "Lenkeinfo",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Lenketype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Bokmerk denne siden",
+DlgLnkTypeEMail		: "E-Post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "&lt;annet&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Velg ett anker",
+DlgLnkAnchorByName	: "Anker etter navn",
+DlgLnkAnchorById	: "Element etter ID",
+DlgLnkNoAnchors		: "&lt;Ingen anker i dokumentet&gt;",
+DlgLnkEMail			: "E-Post Addresse",
+DlgLnkEMailSubject	: "Meldingsemne",
+DlgLnkEMailBody		: "Melding",
+DlgLnkUpload		: "Last opp",
+DlgLnkBtnUpload		: "Send til server",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "&lt;ramme&gt;",
+DlgLnkTargetPopup	: "&lt;popup vindu&gt;",
+DlgLnkTargetBlank	: "Nytt vindu (_blank)",
+DlgLnkTargetParent	: "Foreldre vindu (_parent)",
+DlgLnkTargetSelf	: "Samme vindu (_self)",
+DlgLnkTargetTop		: "Hele vindu (_top)",
+DlgLnkTargetFrameName	: "Målramme",
+DlgLnkPopWinName	: "Popup vindus navn",
+DlgLnkPopWinFeat	: "Popup vindus egenskaper",
+DlgLnkPopResize		: "Endre størrelse",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menylinje",
+DlgLnkPopScroll		: "Scrollbar",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Verktøylinje",
+DlgLnkPopFullScrn	: "Full skjerm (IE)",
+DlgLnkPopDependent	: "Avhenging (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Høyde",
+DlgLnkPopLeft		: "Venstre posisjon",
+DlgLnkPopTop		: "Topp posisjon",
+
+DlnLnkMsgNoUrl		: "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail	: "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor	: "Vennligst velg ett anker",
+
+// Color Dialog
+DlgColorTitle		: "Velg farge",
+DlgColorBtnClear	: "Tøm",
+DlgColorHighlight	: "Marker",
+DlgColorSelected	: "Velg",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammestørrelse",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikke satt>",
+DlgTableAlignLeft	: "Venstre",
+DlgTableAlignCenter	: "Midtjuster",
+DlgTableAlignRight	: "Høyre",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "pixler",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Høyde",
+DlgTableCellSpace	: "Celle marg",
+DlgTableCellPad		: "Celle polstring",
+DlgTableCaption		: "Tittel",
+
+// Table Cell Dialog
+DlgCellTitle		: "Celle egenskaper",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "pixeler",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Høyde",
+DlgCellWordWrap		: "Tekstbrytning",
+DlgCellWordWrapNotSet	: "<Ikke satt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke satt>",
+DlgCellHorAlignLeft	: "Venstre",
+DlgCellHorAlignCenter	: "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ikke satt>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Midten",
+DlgCellVerAlignBottom	: "Bunn",
+DlgCellVerAlignBaseline	: "Bunnlinje",
+DlgCellRowSpan		: "Radspenn",
+DlgCellCollSpan		: "Kolonnespenn",
+DlgCellBackColor	: "Bakgrunnsfarge",
+DlgCellBorderColor	: "Rammefarge",
+DlgCellBtnSelect	: "Velg...",
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Den spesifiserte teksten ble ikke funnet.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstatt",
+DlgReplaceFindLbl		: "Finn hva:",
+DlgReplaceReplaceLbl	: "Erstatt med:",
+DlgReplaceCaseChk		: "Riktig case",
+DlgReplaceReplaceBtn	: "Erstatt",
+DlgReplaceReplAllBtn	: "Erstatt alle",
+DlgReplaceWordChk		: "Finn hele ordet",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk innliming av tekst. Vennligst brukt snareveien (Ctrl+V).",
+PasteErrorCut	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).",
+PasteErrorCopy	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).",
+
+PasteAsText		: "Lim inn som ren tekst",
+PasteFromWord	: "Lim inn fra word",
+
+DlgPasteMsg2	: "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorer fonter",
+DlgPasteRemoveStyles	: "Fjern stildefinisjoner",
+DlgPasteCleanBox		: "Tøm boksen",
+
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankeregenskaper",
+DlgAnchorName		: "Ankernavn",
+DlgAnchorErrorName	: "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordboken",
+DlgSpellChangeTo		: "Endre til",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstatt",
+DlgSpellBtnReplaceAll	: "Erstatt alle",
+DlgSpellBtnUndo			: "Angre",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontroll pågår...",
+DlgSpellNoMispell		: "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges		: "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange		: "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges		: "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload			: "Stavekontroll ikke installert, vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText	: "Tekst",
+DlgButtonType	: "Type",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Verdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Verdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillat flervalg",
+DlgSelectOpAvail	: "Tilgjenglige alternativer",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Verdi",
+DlgSelectBtnAdd		: "Legg til",
+DlgSelectBtnModify	: "Endre",
+DlgSelectBtnUp		: "Opp",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete	: "Slett",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "verdi",
+DlgTextCharWidth	: "Tegnbredde",
+DlgTextMaxChars		: "Maks antall tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Uordnet listeegenskaper",
+NumberedListProp	: "Ordnet listeegenskaper",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Numre(1, 2, 3)",
+DlgLstTypeLCase		: "Små bokstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bokstaver(A, B, C)",
+DlgLstTypeSRoman	: "Små romerske tall(i, ii, iii)",
+DlgLstTypeLRoman	: "Store romerske tall(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generalt",
+DlgDocBackTab		: "Bakgrunn",
+DlgDocColorsTab		: "Farger og marginer",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Sidetittel",
+DlgDocLangDir		: "Språkretning",
+DlgDocLangDirLTR	: "Venstre til høyre (LTR)",
+DlgDocLangDirRTL	: "Høyre til venstre (RTL)",
+DlgDocLangCode		: "Språkkode",
+DlgDocCharSet		: "Tegnsett",
+DlgDocCharSetOther	: "Annet tegnsett",
+
+DlgDocDocType		: "Dokumenttype header",
+DlgDocDocTypeOther	: "Annet dokumenttype header",
+DlgDocIncXHTML		: "Inkulder XHTML deklarasjon",
+DlgDocBgColor		: "Bakgrunnsfarge",
+DlgDocBgImage		: "Bakgrunnsbilde url",
+DlgDocBgNoScroll	: "Ikke scroll bakgrunnsbilde",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besøkt lenke",
+DlgDocCActive		: "Aktiv lenke",
+DlgDocMargins		: "Sidemargin",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Høyre",
+DlgDocMaBottom		: "Bunn",
+DlgDocMeIndex		: "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr		: "Dokumentbeskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Kopirett",
+DlgDocPreview		: "Forhåndsvising",
+
+// Templates Dialog
+Templates			: "Maler",
+DlgTemplatesTitle	: "Innholdsmaler",
+DlgTemplatesSelMsg	: "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading	: "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl	: "(Ingen maler definert)",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Nettleserinfo",
+DlgAboutVersion		: "versjon",
+DlgAboutLicense		: "Lisensiert under GNU Lesser General Public License",
+DlgAboutInfo		: "Oversatt av Siteman DA<br /><a target=\"_blank\" href=\"http://www.siteman.no\">www.siteman.no</a><br /><br />For mer informasjon gå til"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/pl.js 1.4.0sr5-1/fckeditor/editor/lang/pl.js
--- 1.3.11sr1/fckeditor/editor/lang/pl.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/pl.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: pl.js
+ * 	Polish language file.
+ * 
+ * File Authors:
+ * 		Jakub Boesche (jboesche@gazeta.pl)
+ * 		Maciej Bochynski (maciej.bochynski@lubman.pl)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Zwiń pasek narzędzi",
+ToolbarExpand		: "Rozwiń pasek narzędzi",
+
+// Toolbar Items and Context Menu
+Save				: "Zapisz",
+NewPage				: "Nowa strona",
+Preview				: "Podgląd",
+Cut					: "Wytnij",
+Copy				: "Kopiuj",
+Paste				: "Wklej",
+PasteText			: "Wklej jako czysty tekst",
+PasteWord			: "Wklej z Worda",
+Print				: "Drukuj",
+SelectAll			: "Zaznacz wszystko",
+RemoveFormat		: "Usuń formatowanie",
+InsertLinkLbl		: "Hiperłącze",
+InsertLink			: "Wstaw/edytuj hiperłącze",
+RemoveLink			: "Usuń hiperłącze",
+Anchor				: "Wstaw/edytuj kotwicę",
+InsertImageLbl		: "Obrazek",
+InsertImage			: "Wstaw/edytuj obrazek",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabela",
+InsertTable			: "Wstaw/edytuj tabelę",
+InsertLineLbl		: "Linia pozioma",
+InsertLine			: "Wstaw poziomą linię",
+InsertSpecialCharLbl: "Znak specjalny",
+InsertSpecialChar	: "Wstaw znak specjalny",
+InsertSmileyLbl		: "Emotikona",
+InsertSmiley		: "Wstaw emotikonę",
+About				: "O programie FCKeditor",
+Bold				: "Pogrubienie",
+Italic				: "Kursywa",
+Underline			: "Podkreślenie",
+StrikeThrough		: "Przekreślenie",
+Subscript			: "Indeks dolny",
+Superscript			: "Indeks górny",
+LeftJustify			: "Wyrównaj do lewej",
+CenterJustify		: "Wyrównaj do środka",
+RightJustify		: "Wyrównaj do prawej",
+BlockJustify		: "Wyrównaj do lewej i prawej",
+DecreaseIndent		: "Zmniejsz wcięcie",
+IncreaseIndent		: "Zwiększ wcięcie",
+Undo				: "Cofnij",
+Redo				: "Ponów",
+NumberedListLbl		: "Lista numerowana",
+NumberedList		: "Wstaw/usuń numerowanie listy",
+BulletedListLbl		: "Lista wypunktowana",
+BulletedList		: "Wstaw/usuń wypunktowanie listy",
+ShowTableBorders	: "Pokazuj ramkę tabeli",
+ShowDetails			: "Pokaż szczegóły",
+Style				: "Styl",
+FontFormat			: "Format",
+Font				: "Czcionka",
+FontSize			: "Rozmiar",
+TextColor			: "Kolor tekstu",
+BGColor				: "Kolor tła",
+Source				: "Źródło dokumentu",
+Find				: "Znajdź",
+Replace				: "Zamień",
+SpellCheck			: "Sprawdź pisownię",
+UniversalKeyboard	: "Klawiatura Uniwersalna",
+
+Form			: "Formularz",
+Checkbox		: "Checkbox",
+RadioButton		: "Pole wyboru",
+TextField		: "Pole tekstowe",
+Textarea		: "Obszar tekstowy",
+HiddenField		: "Pole ukryte",
+Button			: "Przycisk",
+SelectionField	: "Lista wyboru",
+ImageButton		: "Przycisk obrazek",
+
+// Context Menu
+EditLink			: "Edytuj hiperłącze",
+InsertRow			: "Wstaw wiersz",
+DeleteRows			: "Usuń wiersze",
+InsertColumn		: "Wstaw kolumnę",
+DeleteColumns		: "Usuń kolumny",
+InsertCell			: "Wstaw komórkę",
+DeleteCells			: "Usuń komórki",
+MergeCells			: "Połącz komórki",
+SplitCell			: "Podziel komórkę",
+CellProperties		: "Właściwości komórki",
+TableProperties		: "Właściwości tabeli",
+ImageProperties		: "Właściwości obrazka",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Właściwości kotwicy",
+ButtonProp			: "Właściwości przycisku",
+CheckboxProp		: "Checkbox - właściwości",
+HiddenFieldProp		: "Właściwości pola ukrytego",
+RadioButtonProp		: "Właściwości pola wyboru",
+ImageButtonProp		: "Właściwości przycisku obrazka",
+TextFieldProp		: "Właściwości pola tekstowego",
+SelectionFieldProp	: "Właściwości listy wyboru",
+TextareaProp		: "Właściwości obszaru tekstowego",
+FormProp			: "Właściwości formularza",
+
+FontFormats			: "Normalny;Tekst sformatowany;Adres;Nagłówek 1;Nagłówek 2;Nagłówek 3;Nagłówek 4;Nagłówek 5;Nagłówek 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Przetwarzanie XHTML. Proszę czekać...",
+Done				: "Gotowe",
+PasteWordConfirm	: "Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Word. Czy chcesz go wyczyścic przed wklejeniem?",
+NotCompatiblePaste	: "Ta funkcja jest dostępna w programie Internet Explorer w wersji 5.5 lub wyższej. Czy chcesz wkleić tekst bez czyszczenia?",
+UnknownToolbarItem	: "Nieznany element paska narzędzi \"%1\"",
+UnknownCommand		: "Nieznana komenda \"%1\"",
+NotImplemented		: "Komenda niezaimplementowana",
+UnknownToolbarSet	: "Pasek narzędzi \"%1\" nie istnieje",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Anuluj",
+DlgBtnClose			: "Zamknij",
+DlgBtnBrowseServer	: "Przeglądaj",
+DlgAdvancedTag		: "Zaawansowane",
+DlgOpOther			: "&lt;Inny&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nieustawione&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Kierunek tekstu",
+DlgGenLangDirLtr	: "Od lewej do prawej (LTR)",
+DlgGenLangDirRtl	: "Od prawej do lewej (RTL)",
+DlgGenLangCode		: "Kod języka",
+DlgGenAccessKey		: "Klawisz dostępu",
+DlgGenName			: "Nazwa",
+DlgGenTabIndex		: "Indeks tabeli",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Właściwości obrazka",
+DlgImgInfoTab		: "Informacje o obrazku",
+DlgImgBtnUpload		: "Syślij",
+DlgImgURL			: "Adres URL",
+DlgImgUpload		: "Wyślij",
+DlgImgAlt			: "Tekst zastępczy",
+DlgImgWidth			: "Szerokość",
+DlgImgHeight		: "Wysokość",
+DlgImgLockRatio		: "Zablokuj proporcje",
+DlgBtnResetSize		: "Przywróć rozmiar",
+DlgImgBorder		: "Ramka",
+DlgImgHSpace		: "Odstęp poziomy",
+DlgImgVSpace		: "Odstęp pionowy",
+DlgImgAlign			: "Wyrównaj",
+DlgImgAlignLeft		: "Do lewej",
+DlgImgAlignAbsBottom: "Do dołu",
+DlgImgAlignAbsMiddle: "Do środka w pionie",
+DlgImgAlignBaseline	: "Do linii bazowej",
+DlgImgAlignBottom	: "Do dołu",
+DlgImgAlignMiddle	: "Do środka",
+DlgImgAlignRight	: "Do prawej",
+DlgImgAlignTextTop	: "Do góry tekstu",
+DlgImgAlignTop		: "Do góry",
+DlgImgPreview		: "Podgląd",
+DlgImgAlertUrl		: "Podaj adres obrazka.",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperłącze",
+DlgLnkInfoTab		: "Informacje ",
+DlgLnkTargetTab		: "Cel",
+
+DlgLnkType			: "Typ hiperłącza",
+DlgLnkTypeURL		: "Adres URL",
+DlgLnkTypeAnchor	: "Odnośnik wewnątrz strony",
+DlgLnkTypeEMail		: "Adres e-mail",
+DlgLnkProto			: "Protokół",
+DlgLnkProtoOther	: "&lt;inny&gt;",
+DlgLnkURL			: "Adres URL",
+DlgLnkAnchorSel		: "Wybierz etykietę",
+DlgLnkAnchorByName	: "Wg etykiety",
+DlgLnkAnchorById	: "Wg identyfikatora elementu",
+DlgLnkNoAnchors		: "&lt;W dokumencie nie zdefiniowano żadnych etykiet&gt;",
+DlgLnkEMail			: "Adres e-mail",
+DlgLnkEMailSubject	: "Temat",
+DlgLnkEMailBody		: "Treść",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Wyślij",
+
+DlgLnkTarget		: "Cel",
+DlgLnkTargetFrame	: "&lt;ramka&gt;",
+DlgLnkTargetPopup	: "&lt;wyskakujące okno&gt;",
+DlgLnkTargetBlank	: "Nowe okno (_blank)",
+DlgLnkTargetParent	: "Okno nadrzędne (_parent)",
+DlgLnkTargetSelf	: "To samo okno (_self)",
+DlgLnkTargetTop		: "Okno najwyższe w hierarchii (_top)",
+DlgLnkTargetFrameName	: "Nazwa Ramki Docelowej",
+DlgLnkPopWinName	: "Nazwa wyskakującego okna",
+DlgLnkPopWinFeat	: "Właściwości wyskakującego okna",
+DlgLnkPopResize		: "Możliwa zmiana rozmiaru",
+DlgLnkPopLocation	: "Pasek adresu",
+DlgLnkPopMenu		: "Pasek menu",
+DlgLnkPopScroll		: "Paski przewijania",
+DlgLnkPopStatus		: "Pasek statusu",
+DlgLnkPopToolbar	: "Pasek narzędzi",
+DlgLnkPopFullScrn	: "Pełny ekran (IE)",
+DlgLnkPopDependent	: "Okno zależne (Netscape)",
+DlgLnkPopWidth		: "Szerokość",
+DlgLnkPopHeight		: "Wysokość",
+DlgLnkPopLeft		: "Pozycja w poziomie",
+DlgLnkPopTop		: "Pozycja w pionie",
+
+DlnLnkMsgNoUrl		: "Podaj adres URL",
+DlnLnkMsgNoEMail	: "Podaj adres e-mail",
+DlnLnkMsgNoAnchor	: "Wybierz etykietę",
+
+// Color Dialog
+DlgColorTitle		: "Wybierz kolor",
+DlgColorBtnClear	: "Wyczyść",
+DlgColorHighlight	: "Podgląd",
+DlgColorSelected	: "Wybrane",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Wstaw emotikonę",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Wybierz znak specjalny",
+
+// Table Dialog
+DlgTableTitle		: "Właściwości tabeli",
+DlgTableRows		: "Liczba wierszy",
+DlgTableColumns		: "Liczba kolumn",
+DlgTableBorder		: "Grubość ramki",
+DlgTableAlign		: "Wyrównanie",
+DlgTableAlignNotSet	: "<brak ustawień>",
+DlgTableAlignLeft	: "Do lewej",
+DlgTableAlignCenter	: "Do środka",
+DlgTableAlignRight	: "Do prawej",
+DlgTableWidth		: "Szerokość",
+DlgTableWidthPx		: "piksele",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Wysokość",
+DlgTableCellSpace	: "Odstęp pomiędzy komórkami",
+DlgTableCellPad		: "Margines wewnętrzny komórek",
+DlgTableCaption		: "Tytuł",
+
+// Table Cell Dialog
+DlgCellTitle		: "Właściwości komórki",
+DlgCellWidth		: "Szerokość",
+DlgCellWidthPx		: "piksele",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Wysokość",
+DlgCellWordWrap		: "Zawijanie tekstu",
+DlgCellWordWrapNotSet	: "<brak ustawień>",
+DlgCellWordWrapYes	: "Tak",
+DlgCellWordWrapNo	: "Nie",
+DlgCellHorAlign		: "Wyrównanie poziome",
+DlgCellHorAlignNotSet	: "<brak ustawień>",
+DlgCellHorAlignLeft	: "Do lewej",
+DlgCellHorAlignCenter	: "Do środka",
+DlgCellHorAlignRight: "Do prawej",
+DlgCellVerAlign		: "Wyrównanie pionowe",
+DlgCellVerAlignNotSet	: "<brak ustawień>",
+DlgCellVerAlignTop	: "Do góry",
+DlgCellVerAlignMiddle	: "Do środka",
+DlgCellVerAlignBottom	: "Do dołu",
+DlgCellVerAlignBaseline	: "Do linii bazowej",
+DlgCellRowSpan		: "Zajętość wierszy",
+DlgCellCollSpan		: "Zajętość kolumn",
+DlgCellBackColor	: "Kolor tła",
+DlgCellBorderColor	: "Kolor ramki",
+DlgCellBtnSelect	: "Wybierz...",
+
+// Find Dialog
+DlgFindTitle		: "Znajdź",
+DlgFindFindBtn		: "Znajdź",
+DlgFindNotFoundMsg	: "Nie znaleziono szukanego hasła.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamień",
+DlgReplaceFindLbl		: "Znajdź:",
+DlgReplaceReplaceLbl	: "Zastąp przez:",
+DlgReplaceCaseChk		: "Uwzględnij wielkość liter",
+DlgReplaceReplaceBtn	: "Zastąp",
+DlgReplaceReplAllBtn	: "Zastąp wszystko",
+DlgReplaceWordChk		: "Całe słowa",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wklejanie tekstu. Użyj skrótu klawiszowego Ctrl+V.",
+PasteErrorCut	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.",
+PasteErrorCopy	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.",
+
+PasteAsText		: "Wklej jako czysty tekst",
+PasteFromWord	: "Wklej z Worda",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "Automatycznie",
+ColorMoreColors	: "Więcej kolorów...",
+
+// Document Properties
+DocProps		: "Właściwości dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Właściwości kotwicy",
+DlgAnchorName		: "Nazwa kotwicy",
+DlgAnchorErrorName	: "Wpisz nazwę kotwicy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Słowa nie ma w słowniku",
+DlgSpellChangeTo		: "Zmień na",
+DlgSpellBtnIgnore		: "Ignoruj",
+DlgSpellBtnIgnoreAll	: "Ignoruj wszystkie",
+DlgSpellBtnReplace		: "Zmień",
+DlgSpellBtnReplaceAll	: "Zmień wszystkie",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- Brak sugestii -",
+DlgSpellProgress		: "Trwa sprawdzanie ...",
+DlgSpellNoMispell		: "Sprawdzanie zakończone: nie znaleziono błędów",
+DlgSpellNoChanges		: "Sprawdzanie zakończone: nie zmieniono żadnego słowa",
+DlgSpellOneChange		: "Sprawdzanie zakończone: zmieniono jedno słowo",
+DlgSpellManyChanges		: "Sprawdzanie zakończone: zmieniono %l słów",
+
+IeSpellDownload			: "Słownik nie jest zainstalowany. Chcesz go ściągnąć?",
+
+// Button Dialog
+DlgButtonText	: "Tekst (Wartość)",
+DlgButtonType	: "Typ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nazwa",
+DlgCheckboxValue	: "Wartość",
+DlgCheckboxSelected	: "Zaznaczony",
+
+// Form Dialog
+DlgFormName		: "Nazwa",
+DlgFormAction	: "Akcja",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Nazwa",
+DlgSelectValue		: "Wartość",
+DlgSelectSize		: "Rozmiar",
+DlgSelectLines		: "linii",
+DlgSelectChkMulti	: "Wielokrotny wybór",
+DlgSelectOpAvail	: "Dostępne opcje",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Wartość",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Zmień",
+DlgSelectBtnUp		: "Do góry",
+DlgSelectBtnDown	: "Do dołu",
+DlgSelectBtnSetValue : "Ustaw wartość zaznaczoną",
+DlgSelectBtnDelete	: "Usuń",
+
+// Textarea Dialog
+DlgTextareaName	: "Nazwa",
+DlgTextareaCols	: "Kolumnu",
+DlgTextareaRows	: "Wiersze",
+
+// Text Field Dialog
+DlgTextName			: "Nazwa",
+DlgTextValue		: "Wartość",
+DlgTextCharWidth	: "Szerokość w znakach",
+DlgTextMaxChars		: "Max. szerokość",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Hasło",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nazwa",
+DlgHiddenValue	: "Wartość",
+
+// Bulleted List Dialog
+BulletedListProp	: "Właściwości listy punktowanej",
+NumberedListProp	: "Właściwości listy numerowanej",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Koło",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kwadrat",
+DlgLstTypeNumbers	: "Cyfry (1, 2, 3)",
+DlgLstTypeLCase		: "Małe litery (a, b, c)",
+DlgLstTypeUCase		: "Duże litery (A, B, C)",
+DlgLstTypeSRoman	: "Numeracja rzymska (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeracja rzymska (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ogólne",
+DlgDocBackTab		: "Tło",
+DlgDocColorsTab		: "Kolory i marginesy",
+DlgDocMetaTab		: "Meta Dane",
+
+DlgDocPageTitle		: "Tytuł strony",
+DlgDocLangDir		: "Kierunek pisania",
+DlgDocLangDirLTR	: "Od lewej do prawej (LTR)",
+DlgDocLangDirRTL	: "Od prawej do lewej (RTL)",
+DlgDocLangCode		: "Kod języka",
+DlgDocCharSet		: "Kodowanie znaków",
+DlgDocCharSetOther	: "Inne kodowanie znaków",
+
+DlgDocDocType		: "Nagłowek typu dokumentu",
+DlgDocDocTypeOther	: "Inny typ dokumentu",
+DlgDocIncXHTML		: "Dołącz deklarację XHTML",
+DlgDocBgColor		: "Kolor tła",
+DlgDocBgImage		: "Obrazek tła",
+DlgDocBgNoScroll	: "Tło nieruchome",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Hiperłącze",
+DlgDocCVisited		: "Odwiedzane hiperłącze",
+DlgDocCActive		: "Aktywne hiperłącze",
+DlgDocMargins		: "Marginesy strony",
+DlgDocMaTop			: "Górny",
+DlgDocMaLeft		: "Lewy",
+DlgDocMaRight		: "Prawy",
+DlgDocMaBottom		: "Dolny",
+DlgDocMeIndex		: "Słowa kluczowe (oddzielone przecinkami)",
+DlgDocMeDescr		: "Opis dokumentu",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Podgląd",
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "O ...",
+DlgAboutBrowserInfoTab	: "O przeglądarce",
+DlgAboutVersion		: "wersja",
+DlgAboutLicense		: "na licencji GNU Lesser General Public License",
+DlgAboutInfo		: "Więcej informacji uzyskasz pod adresem"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/pt-br.js 1.4.0sr5-1/fckeditor/editor/lang/pt-br.js
--- 1.3.11sr1/fckeditor/editor/lang/pt-br.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/pt-br.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: pt-br.js
+ * 	Brazilian Portuguese language file.
+ * 
+ * File Authors:
+ * 		Carlos Alberto Tomatis Loth (carlos.loth@conectait.com.br)
+ * 		GibaPhp (www.xoopstotal.com.br)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ocultar Barra de Ferramentas",
+ToolbarExpand		: "Exibir Barra de Ferramentas",
+
+// Toolbar Items and Context Menu
+Save				: "Salvar",
+NewPage				: "Novo",
+Preview				: "Visualizar",
+Cut					: "Recortar",
+Copy				: "Copiar",
+Paste				: "Colar",
+PasteText			: "Colar como Texto sem Formatação",
+PasteWord			: "Colar do Word",
+Print				: "Imprimir",
+SelectAll			: "Selecionar Tudo",
+RemoveFormat		: "Remover Formatação",
+InsertLinkLbl		: "Hiperlink",
+InsertLink			: "Inserir/Editar Hiperlink",
+RemoveLink			: "Remover Hiperlink",
+Anchor				: "Inserir/Editar Âncora",
+InsertImageLbl		: "Figura",
+InsertImage			: "Inserir/Editar Figura",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insere/Edita Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Inserir/Editar Tabela",
+InsertLineLbl		: "Linha",
+InsertLine			: "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracteres Especiais",
+InsertSpecialChar	: "Inserir Caractere Especial",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Inserir Emoticon",
+About				: "Sobre FCKeditor",
+Bold				: "Negrito",
+Italic				: "Itálico",
+Underline			: "Sublinhado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subscrito",
+Superscript			: "Sobrescrito",
+LeftJustify			: "Alinhar Esquerda",
+CenterJustify		: "Centralizar",
+RightJustify		: "Alinhar Direita",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Diminuir Recuo",
+IncreaseIndent		: "Aumentar Recuo",
+Undo				: "Desfazer",
+Redo				: "Refazer",
+NumberedListLbl		: "Numeração",
+NumberedList		: "Inserir/Remover Numeração",
+BulletedListLbl		: "Marcadores",
+BulletedList		: "Inserir/Remover Marcadores",
+ShowTableBorders	: "Exibir Bordas da Tabela",
+ShowDetails			: "Exibir Detalhes",
+Style				: "Estilo",
+FontFormat			: "Formatação",
+Font				: "Fonte",
+FontSize			: "Tamanho",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor do Plano de Fundo",
+Source				: "Código-Fonte",
+Find				: "Localizar",
+Replace				: "Substituir",
+SpellCheck			: "Verificar Ortografia",
+UniversalKeyboard	: "Teclado Universal",
+
+Form			: "Formulário",
+Checkbox		: "Caixa de Seleção",
+RadioButton		: "Botão de Opção",
+TextField		: "Caixa de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botão",
+SelectionField	: "Caixa de Listagem",
+ImageButton		: "Botão de Imagem",
+
+// Context Menu
+EditLink			: "Editar Hiperlink",
+InsertRow			: "Inserir Linha",
+DeleteRows			: "Remover Linhas",
+InsertColumn		: "Inserir Coluna",
+DeleteColumns		: "Remover Colunas",
+InsertCell			: "Inserir Células",
+DeleteCells			: "Remover Células",
+MergeCells			: "Mesclar Células",
+SplitCell			: "Dividir Célular",
+CellProperties		: "Formatar Célula",
+TableProperties		: "Formatar Tabela",
+ImageProperties		: "Formatar Figura",
+FlashProperties		: "Propriedades Flash",
+
+AnchorProp			: "Formatar Âncora",
+ButtonProp			: "Formatar Botão",
+CheckboxProp		: "Formatar Caixa de Seleção",
+HiddenFieldProp		: "Formatar Campo Oculto",
+RadioButtonProp		: "Formatar Botão de Opção",
+ImageButtonProp		: "Formatar Botão de Imagem",
+TextFieldProp		: "Formatar Caixa de Texto",
+SelectionFieldProp	: "Formatar Caixa de Listagem",
+TextareaProp		: "Formatar Área de Texto",
+FormProp			: "Formatar Formulário",
+
+FontFormats			: "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processando XHTML. Por favor, aguarde...",
+Done				: "Pronto",
+PasteWordConfirm	: "O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?",
+NotCompatiblePaste	: "Este comando está disponível para o navegador Internet Explorer 5.5 ou superior. Você gostaria de colar sem remover a formatação?",
+UnknownToolbarItem	: "O item da barra de ferramentas \"%1\" não é reconhecido",
+UnknownCommand		: "O comando \"%1\" não é reconhecido",
+NotImplemented		: "O comando não foi implementado",
+UnknownToolbarSet	: "A barra de ferramentas \"%1\" não existe",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Fechar",
+DlgBtnBrowseServer	: "Localizar no Servidor",
+DlgAdvancedTag		: "Avançado",
+DlgOpOther			: "&lt;Outros&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Inserir a URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;não ajustado&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direção do idioma",
+DlgGenLangDirLtr	: "Esquerda para Direita (LTR)",
+DlgGenLangDirRtl	: "Direita para Esquerda (RTL)",
+DlgGenLangCode		: "Idioma",
+DlgGenAccessKey		: "Chave de Acesso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tabulação",
+DlgGenLongDescr		: "Descrição da URL",
+DlgGenClass			: "Classe de Folhas de Estilo",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Conteúdo",
+DlgGenLinkCharset	: "Conjunto de Caracteres do Hiperlink",
+DlgGenStyle			: "Estilos",
+
+// Image Dialog
+DlgImgTitle			: "Formatar Figura",
+DlgImgInfoTab		: "Informações da Figura",
+DlgImgBtnUpload		: "Enviar para o Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Submeter",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Manter proporções",
+DlgBtnResetSize		: "Redefinir para o Tamanho Original",
+DlgImgBorder		: "Borda",
+DlgImgHSpace		: "Horizontal",
+DlgImgVSpace		: "Vertical",
+DlgImgAlign			: "Alinhamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Inferior Absoluto",
+DlgImgAlignAbsMiddle: "Centralizado Absoluto",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Inferior",
+DlgImgAlignMiddle	: "Centralizado",
+DlgImgAlignRight	: "Direita",
+DlgImgAlignTextTop	: "Superior Absoluto",
+DlgImgAlignTop		: "Superior",
+DlgImgPreview		: "Visualização",
+DlgImgAlertUrl		: "Por favor, digite o URL da figura.",
+DlgImgLinkTab		: "Hiperlink",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades Flash",
+DlgFlashChkPlay		: "Tocar Automaticamente",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Habilita Menu Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tudo",
+DlgFlashScaleNoBorder	: "Sem Borda",
+DlgFlashScaleFit	: "Escala Exata",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperlink",
+DlgLnkInfoTab		: "Informações do hiperlink",
+DlgLnkTargetTab		: "Informações de destino",
+
+DlgLnkType			: "Tipo de hiperlink",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Âncora nesta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "&lt;outro&gt;",
+DlgLnkURL			: "URL do hiperlink",
+DlgLnkAnchorSel		: "Selecione uma âncora",
+DlgLnkAnchorByName	: "Pelo Nome da âncora",
+DlgLnkAnchorById	: "Pelo Id do Elemento",
+DlgLnkNoAnchors		: "&lt;Não há âncoras disponíveis neste documento&gt;",
+DlgLnkEMail			: "Endereço E-Mail",
+DlgLnkEMailSubject	: "Assunto da Mensagem",
+DlgLnkEMailBody		: "Corpo da Mesagem",
+DlgLnkUpload		: "Enviar ao Servidor",
+DlgLnkBtnUpload		: "Enviar ao Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "&lt;quadro&gt;",
+DlgLnkTargetPopup	: "&lt;janela popup&gt;",
+DlgLnkTargetBlank	: "Nova Janela (_blank)",
+DlgLnkTargetParent	: "Janela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma Janela (_self)",
+DlgLnkTargetTop		: "Janela Superior (_top)",
+DlgLnkTargetFrameName	: "Nome do Frame de Destino",
+DlgLnkPopWinName	: "Nome da Janela Pop-up",
+DlgLnkPopWinFeat	: "Atributos da Janela Pop-up",
+DlgLnkPopResize		: "Redimensionável",
+DlgLnkPopLocation	: "Barra de Endereços",
+DlgLnkPopMenu		: "Barra de Menus",
+DlgLnkPopScroll		: "Barras de Rolagem",
+DlgLnkPopStatus		: "Barra de Status",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "Modo Tela Cheia (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Esquerda",
+DlgLnkPopTop		: "Superior",
+
+DlnLnkMsgNoUrl		: "Por favor, digite o endereço do Hiperlink",
+DlnLnkMsgNoEMail	: "Por favor, digite o endereço de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor, selecione uma âncora",
+
+// Color Dialog
+DlgColorTitle		: "Selecione uma Cor",
+DlgColorBtnClear	: "Limpar",
+DlgColorHighlight	: "Visualização",
+DlgColorSelected	: "Selecionada",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserir Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecione um Caractere Especial",
+
+// Table Dialog
+DlgTableTitle		: "Formatar Tabela",
+DlgTableRows		: "Linhas",
+DlgTableColumns		: "Colunas",
+DlgTableBorder		: "Borda",
+DlgTableAlign		: "Alinhamento",
+DlgTableAlignNotSet	: "<Não ajustado>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centralizado",
+DlgTableAlignRight	: "Direita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Espaçamento",
+DlgTableCellPad		: "Enchimento",
+DlgTableCaption		: "Legenda",
+
+// Table Cell Dialog
+DlgCellTitle		: "Formatar célula",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Quebra de Linha",
+DlgCellWordWrapNotSet	: "<Não ajustado>",
+DlgCellWordWrapYes	: "Sim",
+DlgCellWordWrapNo	: "Não",
+DlgCellHorAlign		: "Alinhamento Horizontal",
+DlgCellHorAlignNotSet	: "<Não ajustado>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centralizado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign		: "Alinhamento Vertical",
+DlgCellVerAlignNotSet	: "<Não ajustado>",
+DlgCellVerAlignTop	: "Superior",
+DlgCellVerAlignMiddle	: "Centralizado",
+DlgCellVerAlignBottom	: "Inferior",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Transpor Linhas",
+DlgCellCollSpan		: "Transpor Colunas",
+DlgCellBackColor	: "Cor do Plano de Fundo",
+DlgCellBorderColor	: "Cor da Borda",
+DlgCellBtnSelect	: "Selecionar...",
+
+// Find Dialog
+DlgFindTitle		: "Localizar...",
+DlgFindFindBtn		: "Localizar",
+DlgFindNotFoundMsg	: "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Procurar por:",
+DlgReplaceReplaceLbl	: "Substituir por:",
+DlgReplaceCaseChk		: "Coincidir Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substituir Tudo",
+DlgReplaceWordChk		: "Coincidir a palavra inteira",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "As configurações de segurança do seu navegador não permitem que o editor excute operações de colar automaticamente. Por favor, utilize o teclado para colar (Ctrl+V).",
+PasteErrorCut	: "As configurações de segurança do seu navegador não permitem que o editor excute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).",
+PasteErrorCopy	: "As configurações de segurança do seu navegador não permitem que o editor excute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).",
+
+PasteAsText		: "Colar como Texto sem Formatação",
+PasteFromWord	: "Colar do Word",
+
+DlgPasteMsg2	: "Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorar definições de fonte",
+DlgPasteRemoveStyles	: "Remove definições de estilo",
+DlgPasteCleanBox		: "Limpar Box",
+
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Mais Cores...",
+
+// Document Properties
+DocProps		: "Propriedades Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Formatar Âncora",
+DlgAnchorName		: "Nome da Âncora",
+DlgAnchorErrorName	: "Por favor, digite o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Não encontrada",
+DlgSpellChangeTo		: "Alterar para",
+DlgSpellBtnIgnore		: "Ignorar uma vez",
+DlgSpellBtnIgnoreAll	: "Ignorar Todas",
+DlgSpellBtnReplace		: "Alterar",
+DlgSpellBtnReplaceAll	: "Alterar Todas",
+DlgSpellBtnUndo			: "Desfazer",
+DlgSpellNoSuggestions	: "-sem sugestões de ortografia-",
+DlgSpellProgress		: "Verificação ortográfica em andamento...",
+DlgSpellNoMispell		: "Verificação encerrada: Não foram encontrados erros de ortografia",
+DlgSpellNoChanges		: "Verificação ortográfica encerrada: Não houve alterações",
+DlgSpellOneChange		: "Verificação ortográfica encerrada: Uma palavra foi alterada",
+DlgSpellManyChanges		: "Verificação ortográfica encerrada: %1 foram alteradas",
+
+IeSpellDownload			: "A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?",
+
+// Button Dialog
+DlgButtonText	: "Texto (Valor)",
+DlgButtonType	: "Tipo",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Selecionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamanho",
+DlgSelectLines		: "linhas",
+DlgSelectChkMulti	: "Permitir múltiplas seleções",
+DlgSelectOpAvail	: "Opções disponíveis",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Adicionar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Para cima",
+DlgSelectBtnDown	: "Para baixo",
+DlgSelectBtnSetValue : "Definir como selecionado",
+DlgSelectBtnDelete	: "Remover",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colunas",
+DlgTextareaRows	: "Linhas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Comprimento (em caracteres)",
+DlgTextMaxChars		: "Número Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Senha",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Formatar Marcadores",
+NumberedListProp	: "Formatar Numeração",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Quadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos Minúsculos (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos Maiúsculos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Geral",
+DlgDocBackTab		: "Plano de Fundo",
+DlgDocColorsTab		: "Cores e Margens",
+DlgDocMetaTab		: "Meta Dados",
+
+DlgDocPageTitle		: "Título da Página",
+DlgDocLangDir		: "Direção do Idioma",
+DlgDocLangDirLTR	: "Esquerda para Direita (LTR)",
+DlgDocLangDirRTL	: "Direita para Esquerda (RTL)",
+DlgDocLangCode		: "Código do Idioma",
+DlgDocCharSet		: "Codificação de Caracteres",
+DlgDocCharSetOther	: "Outra Codificação de Caracteres",
+
+DlgDocDocType		: "Cabeçalho Tipo de Documento",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Incluir Declarações XHTML",
+DlgDocBgColor		: "Cor do Plano de Fundo",
+DlgDocBgImage		: "URL da Imagem de Plano de Fundo",
+DlgDocBgNoScroll	: "Plano de Fundo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Hiperlink",
+DlgDocCVisited		: "Hiperlink Visitado",
+DlgDocCActive		: "Hiperlink Ativo",
+DlgDocMargins		: "Margens da Página",
+DlgDocMaTop			: "Superior",
+DlgDocMaLeft		: "Inferior",
+DlgDocMaRight		: "Direita",
+DlgDocMaBottom		: "Inferior",
+DlgDocMeIndex		: "Palavras-chave de Indexação do Documento (separadas por vírgula)",
+DlgDocMeDescr		: "Descrição do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Direitos Autorais",
+DlgDocPreview		: "Visualizar",
+
+// Templates Dialog
+Templates			: "Modelos de layout",
+DlgTemplatesTitle	: "Modelo de layout do conteúdo",
+DlgTemplatesSelMsg	: "Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):",
+DlgTemplatesLoading	: "Carregando a lista de modelos de layout. Aguarde...",
+DlgTemplatesNoTpl	: "(Não foram definidos modelos de layout)",
+
+// About Dialog
+DlgAboutAboutTab	: "Sobre",
+DlgAboutBrowserInfoTab	: "Informações do Navegador",
+DlgAboutVersion		: "versão",
+DlgAboutLicense		: "Licenciado sobre os termos da GNU Lesser General Public License",
+DlgAboutInfo		: "Para maiores informações visite"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/pt.js 1.4.0sr5-1/fckeditor/editor/lang/pt.js
--- 1.3.11sr1/fckeditor/editor/lang/pt.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/pt.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: pt.js
+ * 	Portuguese language file.
+ * 
+ * File Authors:
+ * 		Francisco Pereira (fjpereira@netcabo.pt)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Fechar Barra",
+ToolbarExpand		: "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nova Página",
+Preview				: "Pré-visualizar",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Colar",
+PasteText			: "Colar como texto não formatado",
+PasteWord			: "Colar do Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar Tudo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Hiperligação",
+InsertLink			: "Inserir/Editar Hiperligação",
+RemoveLink			: "Eliminar Hiperligação",
+Anchor				: " Inserir/Editar Âncora",
+InsertImageLbl		: "Imagem",
+InsertImage			: "Inserir/Editar Imagem",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserir/Editar Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Inserir/Editar Tabela",
+InsertLineLbl		: "Linha",
+InsertLine			: "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar	: "Inserir Caracter Especial",
+InsertSmileyLbl		: "Emoticons",
+InsertSmiley		: "Inserir Emoticons",
+About				: "Acerca do FCKeditor",
+Bold				: "Negrito",
+Italic				: "Itálico",
+Underline			: "Sublinhado",
+StrikeThrough		: "Rasurado",
+Subscript			: "Superior à Linha",
+Superscript			: "Inferior à Linha",
+LeftJustify			: "Alinhar à Esquerda",
+CenterJustify		: "Alinhar ao Centro",
+RightJustify		: "Alinhar à Direita",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Diminuir Avanço",
+IncreaseIndent		: "Aumentar Avanço",
+Undo				: "Anular",
+Redo				: "Repetir",
+NumberedListLbl		: "Numeração",
+NumberedList		: "Inserir/Eliminar Numeração",
+BulletedListLbl		: "Marcas",
+BulletedList		: "Inserir/Eliminar Marcas",
+ShowTableBorders	: "Mostrar Limites da Tabelas",
+ShowDetails			: "Mostrar Parágrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Tipo de Letra",
+FontSize			: "Tamanho",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor de Fundo",
+Source				: "Fonte",
+Find				: "Procurar",
+Replace				: "Substituir",
+SpellCheck			: "Verificação Ortográfica",
+UniversalKeyboard	: "Teclado Universal",
+
+Form			: "Formulário",
+Checkbox		: "Caixa de Verificação",
+RadioButton		: "Botão de Opção",
+TextField		: "Campo de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Escondido",
+Button			: "Botão",
+SelectionField	: "Caixa de Combinação",
+ImageButton		: "Botão de Imagem",
+
+// Context Menu
+EditLink			: "Editar Hiperligação",
+InsertRow			: "Inserir Linha",
+DeleteRows			: "Eliminar Linhas",
+InsertColumn		: "Inserir Coluna",
+DeleteColumns		: "Eliminar Coluna",
+InsertCell			: "Inserir Célula",
+DeleteCells			: "Eliminar Célula",
+MergeCells			: "Unir Células",
+SplitCell			: "Dividir Célula",
+CellProperties		: "Propriedades da Célula",
+TableProperties		: "Propriedades da Tabela",
+ImageProperties		: "Propriedades da Imagem",
+FlashProperties		: "Propriedades do Flash",
+
+AnchorProp			: "Propriedades da Âncora",
+ButtonProp			: "Propriedades do Botão",
+CheckboxProp		: "Propriedades da Caixa de Verificação",
+HiddenFieldProp		: "Propriedades do Campo Escondido",
+RadioButtonProp		: "Propriedades do Botão de Opção",
+ImageButtonProp		: "Propriedades do Botão de imagens",
+TextFieldProp		: "Propriedades do Campo de Texto",
+SelectionFieldProp	: "Propriedades da Caixa de Combinação",
+TextareaProp		: "Propriedades da Área de Texto",
+FormProp			: "Propriedades do Formulário",
+
+FontFormats			: "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "A Processar XHTML. Por favor, espere...",
+Done				: "Concluído",
+PasteWordConfirm	: "O texto que deseja parece ter sido copiado do Word. Deseja limpar a formatação antes de colar?",
+NotCompatiblePaste	: "Este comando só está disponível para Internet Explorer versão 5.5 ou superior. Deseja colar sem limpar a formatação?",
+UnknownToolbarItem	: "Item de barra desconhecido \"%1\"",
+UnknownCommand		: "Nome de comando desconhecido \"%1\"",
+NotImplemented		: "Comando não implementado",
+UnknownToolbarSet	: "Nome de barra \"%1\" não definido",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Fechar",
+DlgBtnBrowseServer	: "Navegar no Servidor",
+DlgAdvancedTag		: "Avançado",
+DlgOpOther			: "&lt;Outro&gt;",
+DlgInfoTab			: "Informação",
+DlgAlertUrl			: "Por favor introduza o URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;Não definido&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientação de idioma",
+DlgGenLangDirLtr	: "Esquerda à Direita (LTR)",
+DlgGenLangDirRtl	: "Direita a Esquerda (RTL)",
+DlgGenLangCode		: "Código de Idioma",
+DlgGenAccessKey		: "Chave de Acesso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tubulação",
+DlgGenLongDescr		: "Descrição Completa do URL",
+DlgGenClass			: "Classes de Estilo de Folhas Classes",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Conteúdo",
+DlgGenLinkCharset	: "Fonte de caracteres vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propriedades da Imagem",
+DlgImgInfoTab		: "Informação da Imagem",
+DlgImgBtnUpload		: "Enviar para o Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carregar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamanho Original",
+DlgImgBorder		: "Limite",
+DlgImgHSpace		: "Esp.Horiz",
+DlgImgVSpace		: "Esp.Vert",
+DlgImgAlign			: "Alinhamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline	: "Linha de base",
+DlgImgAlignBottom	: "Fundo",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Direita",
+DlgImgAlignTextTop	: "Topo do texto",
+DlgImgAlignTop		: "Topo",
+DlgImgPreview		: "Pré-visualizar",
+DlgImgAlertUrl		: "Por favor introduza o URL da imagem",
+DlgImgLinkTab		: "Hiperligação",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades do Flash",
+DlgFlashChkPlay		: "Reproduzir automaticamente",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Permitir Menu do Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tudo",
+DlgFlashScaleNoBorder	: "Sem Limites",
+DlgFlashScaleFit	: "Tamanho Exacto",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperligação",
+DlgLnkInfoTab		: "Informação de Hiperligação",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de Hiperligação",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referência a esta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "&lt;outro&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una referência",
+DlgLnkAnchorByName	: "Por Nome de Referência",
+DlgLnkAnchorById	: "Por ID de elemento",
+DlgLnkNoAnchors		: "&lt;Não há referências disponíveis no documento&gt;",
+DlgLnkEMail			: "Endereço de E-Mail",
+DlgLnkEMailSubject	: "Título de Mensagem",
+DlgLnkEMailBody		: "Corpo da Mensagem",
+DlgLnkUpload		: "Carregar",
+DlgLnkBtnUpload		: "Enviar ao Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "&lt;Frame&gt;",
+DlgLnkTargetPopup	: "&lt;Janela de popup&gt;",
+DlgLnkTargetBlank	: "Nova Janela(_blank)",
+DlgLnkTargetParent	: "Janela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma janela (_self)",
+DlgLnkTargetTop		: "Janela primaria (_top)",
+DlgLnkTargetFrameName	: "Nome do Frame Destino",
+DlgLnkPopWinName	: "Nome da Janela de Popup",
+DlgLnkPopWinFeat	: "Características de Janela de Popup",
+DlgLnkPopResize		: "Ajustável",
+DlgLnkPopLocation	: "Barra de localização",
+DlgLnkPopMenu		: "Barra de Menu",
+DlgLnkPopScroll		: "Barras de deslocamento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "Janela Completa (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posição Esquerda",
+DlgLnkPopTop		: "Posição Direita",
+
+DlnLnkMsgNoUrl		: "Por favor introduza a hiperligação URL",
+DlnLnkMsgNoEMail	: "Por favor introduza o endereço de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor seleccione uma referência",
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Cor",
+DlgColorBtnClear	: "Nenhuma",
+DlgColorHighlight	: "Destacado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserir um Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione um caracter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propriedades da Tabela",
+DlgTableRows		: "Linhas",
+DlgTableColumns		: "Colunas",
+DlgTableBorder		: "Tamanho do Limite",
+DlgTableAlign		: "Alinhamento",
+DlgTableAlignNotSet	: "<Não definido>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centrado",
+DlgTableAlignRight	: "Direita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixeis",
+DlgTableWidthPc		: "percentagem",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Esp. e/células",
+DlgTableCellPad		: "Esp. interior",
+DlgTableCaption		: "Título",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriedades da Célula",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixeis",
+DlgCellWidthPc		: "percentagem",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Moldar Texto",
+DlgCellWordWrapNotSet	: "<Não definido>",
+DlgCellWordWrapYes	: "Sim",
+DlgCellWordWrapNo	: "Não",
+DlgCellHorAlign		: "Alinhamento Horizontal",
+DlgCellHorAlignNotSet	: "<Não definido>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centrado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign		: "Alinhamento Vertical",
+DlgCellVerAlignNotSet	: "<Não definido>",
+DlgCellVerAlignTop	: "Topo",
+DlgCellVerAlignMiddle	: "Médio",
+DlgCellVerAlignBottom	: "Fundi",
+DlgCellVerAlignBaseline	: "Linha de Base",
+DlgCellRowSpan		: "Unir Linhas",
+DlgCellCollSpan		: "Unir Colunas",
+DlgCellBackColor	: "Cor do Fundo",
+DlgCellBorderColor	: "Cor do Limite",
+DlgCellBtnSelect	: "Seleccione...",
+
+// Find Dialog
+DlgFindTitle		: "Procurar",
+DlgFindFindBtn		: "Procurar",
+DlgFindNotFoundMsg	: "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Texto a Procurar:",
+DlgReplaceReplaceLbl	: "Substituir por:",
+DlgReplaceCaseChk		: "Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substituir Tudo",
+DlgReplaceWordChk		: "Coincidir com toda a palavra",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "A configuração de segurança do navegador não permite a execução automática de operações de colar. Por favor use o teclado (Ctrl+V).",
+PasteErrorCut	: "A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).",
+PasteErrorCopy	: "A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).",
+
+PasteAsText		: "Colar como Texto Simples",
+PasteFromWord	: "Colar do Word",
+
+DlgPasteMsg2	: "Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorar da definições do Tipo de Letra ",
+DlgPasteRemoveStyles	: "Remover as definições de Estilos",
+DlgPasteCleanBox		: "Caixa de Limpeza",
+
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Mais Cores...",
+
+// Document Properties
+DocProps		: "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriedades da Âncora",
+DlgAnchorName		: "Nome da Âncora",
+DlgAnchorErrorName	: "Por favor, introduza o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Não está num directório",
+DlgSpellChangeTo		: "Mudar para",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Tudo",
+DlgSpellBtnReplace		: "Substituir",
+DlgSpellBtnReplaceAll	: "Substituir Tudo",
+DlgSpellBtnUndo			: "Anular",
+DlgSpellNoSuggestions	: "- Sem sugestões -",
+DlgSpellProgress		: "Verificação ortográfica em progresso…",
+DlgSpellNoMispell		: "Verificação ortográfica completa: não foram encontrados erros",
+DlgSpellNoChanges		: "Verificação ortográfica completa: não houve alteração de palavras",
+DlgSpellOneChange		: "Verificação ortográfica completa: uma palavra alterada",
+DlgSpellManyChanges		: "Verificação ortográfica completa: %1 palavras alteradas",
+
+IeSpellDownload			: " Verificação ortográfica não instalada. Quer descarregar agora?",
+
+// Button Dialog
+DlgButtonText	: "Texto (Valor)",
+DlgButtonType	: "Tipo",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Acção",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamanho",
+DlgSelectLines		: "linhas",
+DlgSelectChkMulti	: "Permitir selecções múltiplas",
+DlgSelectOpAvail	: "Opções Possíveis",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Adicionar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Para cima",
+DlgSelectBtnDown	: "Para baixo",
+DlgSelectBtnSetValue : "Definir um valor por defeito",
+DlgSelectBtnDelete	: "Apagar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colunas",
+DlgTextareaRows	: "Linhas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Tamanho do caracter",
+DlgTextMaxChars		: "Nr. Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Palavra-chave",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriedades da Marca",
+NumberedListProp	: "Propriedades da Numeração",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Circulo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Quadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Numeração Romana em Minúsculas (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeração Romana em Maiúsculas (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Geral",
+DlgDocBackTab		: "Fundo",
+DlgDocColorsTab		: "Cores e Margens",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Título da Página",
+DlgDocLangDir		: "Orientação de idioma",
+DlgDocLangDirLTR	: "Esquerda à Direita (LTR)",
+DlgDocLangDirRTL	: "Direita à Esquerda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codificação de Caracteres",
+DlgDocCharSetOther	: "Outra Codificação de Caracteres",
+
+DlgDocDocType		: "Tipo de Cabeçalho do Documento",
+DlgDocDocTypeOther	: "Outro Tipo de Cabeçalho do Documento",
+DlgDocIncXHTML		: "Incluir Declarações XHTML",
+DlgDocBgColor		: "Cor de Fundo",
+DlgDocBgImage		: "Caminho para a Imagem de Fundo",
+DlgDocBgNoScroll	: "Fundo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Hiperligação",
+DlgDocCVisited		: "Hiperligação Visitada",
+DlgDocCActive		: "Hiperligação Activa",
+DlgDocMargins		: "Margem das Páginas",
+DlgDocMaTop			: "Topo",
+DlgDocMaLeft		: "Esquerda",
+DlgDocMaRight		: "Direita",
+DlgDocMaBottom		: "Fundo",
+DlgDocMeIndex		: "Palavras de Indexação do Documento (separadas por virgula)",
+DlgDocMeDescr		: "Descrição do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Direitos de Autor",
+DlgDocPreview		: "Pré-visualizar",
+
+// Templates Dialog
+Templates			: "Modelos",
+DlgTemplatesTitle	: "Modelo de Conteúdo",
+DlgTemplatesSelMsg	: "Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):",
+DlgTemplatesLoading	: "A carregar a lista de modelos. Aguarde por favor...",
+DlgTemplatesNoTpl	: "(Sem modelos definidos)",
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca",
+DlgAboutBrowserInfoTab	: "Informação do Nevegador",
+DlgAboutVersion		: "versão",
+DlgAboutLicense		: "Licenciado segundo os términos de GNU Lesser General Public License",
+DlgAboutInfo		: "Para mais informações por favor dirija-se a"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ro.js 1.4.0sr5-1/fckeditor/editor/lang/ro.js
--- 1.3.11sr1/fckeditor/editor/lang/ro.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ro.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ro.js
+ * 	Romanian language file.
+ * 
+ * File Authors:
+ * 		Adrian Nicoara
+ * 		Ionut Traian Popa
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ascunde bara cu opţiuni",
+ToolbarExpand		: "Expandează bara cu opţiuni",
+
+// Toolbar Items and Context Menu
+Save				: "Salvează",
+NewPage				: "Pagină nouă",
+Preview				: "Previzualizare",
+Cut					: "Taie",
+Copy				: "Copiază",
+Paste				: "Adaugă",
+PasteText			: "Adaugă ca text simplu",
+PasteWord			: "Adaugă din Word",
+Print				: "Printează",
+SelectAll			: "Selectează tot",
+RemoveFormat		: "Înlătură formatarea",
+InsertLinkLbl		: "Link (Legătură web)",
+InsertLink			: "Inserează/Editează link (legătură web)",
+RemoveLink			: "Înlătură link (legătură web)",
+Anchor				: "Inserează/Editează ancoră",
+InsertImageLbl		: "Imagine",
+InsertImage			: "Inserează/Editează imagine",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserează/Editează flash",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Inserează/Editează tabel",
+InsertLineLbl		: "Linie",
+InsertLine			: "Inserează linie orizontă",
+InsertSpecialCharLbl: "Caracter special",
+InsertSpecialChar	: "Inserează caracter special",
+InsertSmileyLbl		: "Figură expresivă (Emoticon)",
+InsertSmiley		: "Inserează Figură expresivă (Emoticon)",
+About				: "Despre FCKeditor",
+Bold				: "Îngroşat (bold)",
+Italic				: "Înclinat (italic)",
+Underline			: "Subliniat (underline)",
+StrikeThrough		: "Tăiat (strike through)",
+Subscript			: "Indice (subscript)",
+Superscript			: "Putere (superscript)",
+LeftJustify			: "Aliniere la stânga",
+CenterJustify		: "Aliniere centrală",
+RightJustify		: "Aliniere la dreapta",
+BlockJustify		: "Aliniere în bloc (Block Justify)",
+DecreaseIndent		: "Scade indentarea",
+IncreaseIndent		: "Creşte indentarea",
+Undo				: "Starea anterioară (undo)",
+Redo				: "Starea ulterioară (redo)",
+NumberedListLbl		: "Listă numerotată",
+NumberedList		: "Inserează/Şterge listă numerotată",
+BulletedListLbl		: "Listă cu puncte",
+BulletedList		: "Inserează/Şterge listă cu puncte",
+ShowTableBorders	: "Arată marginile tabelului",
+ShowDetails			: "Arată detalii",
+Style				: "Stil",
+FontFormat			: "Formatare",
+Font				: "Font",
+FontSize			: "Mărime",
+TextColor			: "Culoarea textului",
+BGColor				: "Coloarea fundalului",
+Source				: "Sursa",
+Find				: "Găseşte",
+Replace				: "Înlocuieşte",
+SpellCheck			: "Verifică text",
+UniversalKeyboard	: "Tastatură universală",
+
+Form			: "Formular (Form)",
+Checkbox		: "Bifă (Checkbox)",
+RadioButton		: "Buton radio (RadioButton)",
+TextField		: "Câmp text (TextField)",
+Textarea		: "Suprafaţă text (Textarea)",
+HiddenField		: "Câmp ascuns (HiddenField)",
+Button			: "Buton",
+SelectionField	: "Câmp selecţie (SelectionField)",
+ImageButton		: "Buton imagine (ImageButton)",
+
+// Context Menu
+EditLink			: "Editează Link",
+InsertRow			: "Inserează Row",
+DeleteRows			: "Şterge Rows",
+InsertColumn		: "Inserează Column",
+DeleteColumns		: "Şterge Columns",
+InsertCell			: "Inserează Cell",
+DeleteCells			: "Şterge celule",
+MergeCells			: "Uneşte celule",
+SplitCell			: "Împarte celulă",
+CellProperties		: "Proprietăţile celulei",
+TableProperties		: "Proprietăţile tabelului",
+ImageProperties		: "Proprietăţile imaginii",
+FlashProperties		: "Proprietăţile flash-ului",
+
+AnchorProp			: "Proprietăţi ancoră",
+ButtonProp			: "Proprietăţi buton",
+CheckboxProp		: "Proprietăţi bifă (Checkbox)",
+HiddenFieldProp		: "Proprietăţi câmp ascuns (Hidden Field)",
+RadioButtonProp		: "Proprietăţi buton radio (Radio Button)",
+ImageButtonProp		: "Proprietăţi buton imagine (Image Button)",
+TextFieldProp		: "Proprietăţi câmp text (Text Field)",
+SelectionFieldProp	: "Proprietăţi câmp selecţie (Selection Field)",
+TextareaProp		: "Proprietăţi suprafaţă text (Textarea)",
+FormProp			: "Proprietăţi formular (Form)",
+
+FontFormats			: "Normal;Formatat;Adresa;Titlu 1;Titlu 2;Titlu 3;Titlu 4;Titlu 5;Titlu 6;Paragraf (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesăm XHTML. Vă rugăm aşteptaţi...",
+Done				: "Am terminat",
+PasteWordConfirm	: "Textul pe care doriţi să-l adăugaţi pare a fi formatat pentru Word. Doriţi să-l curăţaţi de această formatare înainte de a-l adăuga?",
+NotCompatiblePaste	: "Această facilitate e disponibilă doar pentru Microsoft Internet Explorer, versiunea 5.5 sau ulterioară. Vreţi să-l adăugaţi fără a-i fi înlăturat formatarea?",
+UnknownToolbarItem	: "Obiectul \"%1\" din bara cu opţiuni necunoscut",
+UnknownCommand		: "Comanda \"%1\" necunoscută",
+NotImplemented		: "Comandă neimplementată",
+UnknownToolbarSet	: "Grupul din bara cu opţiuni \"%1\" nu există",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Bine",
+DlgBtnCancel		: "Anulare",
+DlgBtnClose			: "Închidere",
+DlgBtnBrowseServer	: "Răsfoieşte server",
+DlgAdvancedTag		: "Avansat",
+DlgOpOther			: "&lt;Altul&gt;",
+DlgInfoTab			: "Informaţii",
+DlgAlertUrl			: "Vă rugăm să scrieţi URL-ul",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nesetat&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direcţia cuvintelor",
+DlgGenLangDirLtr	: "stânga-dreapta (LTR)",
+DlgGenLangDirRtl	: "dreapta-stânga (RTL)",
+DlgGenLangCode		: "Codul limbii",
+DlgGenAccessKey		: "Tasta de acces",
+DlgGenName			: "Nume",
+DlgGenTabIndex		: "Indexul tabului",
+DlgGenLongDescr		: "Descrierea lungă URL",
+DlgGenClass			: "Clasele cu stilul paginii (CSS)",
+DlgGenTitle			: "Titlul consultativ",
+DlgGenContType		: "Tipul consultativ al titlului",
+DlgGenLinkCharset	: "Setul de caractere al resursei legate",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Proprietăţile imaginii",
+DlgImgInfoTab		: "Informaţii despre imagine",
+DlgImgBtnUpload		: "Trimite la server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Încarcă",
+DlgImgAlt			: "Text alternativ",
+DlgImgWidth			: "Lăţime",
+DlgImgHeight		: "Înălţime",
+DlgImgLockRatio		: "Păstrează proporţiile",
+DlgBtnResetSize		: "Resetează mărimea",
+DlgImgBorder		: "Margine",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Aliniere",
+DlgImgAlignLeft		: "Stânga",
+DlgImgAlignAbsBottom: "Jos absolut (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Mijloc absolut (Abs Middle)",
+DlgImgAlignBaseline	: "Linia de jos (Baseline)",
+DlgImgAlignBottom	: "Jos",
+DlgImgAlignMiddle	: "Mijloc",
+DlgImgAlignRight	: "Dreapta",
+DlgImgAlignTextTop	: "Text sus",
+DlgImgAlignTop		: "Sus",
+DlgImgPreview		: "Previzualizare",
+DlgImgAlertUrl		: "Vă rugăm să scrieţi URL-ul imaginii",
+DlgImgLinkTab		: "Link (Legătură web)",
+
+// Flash Dialog
+DlgFlashTitle		: "Proprietăţile flash-ului",
+DlgFlashChkPlay		: "Rulează automat",
+DlgFlashChkLoop		: "Repetă (Loop)",
+DlgFlashChkMenu		: "Activează meniul flash",
+DlgFlashScale		: "Scală",
+DlgFlashScaleAll	: "Arată tot",
+DlgFlashScaleNoBorder	: "Fără margini (No border)",
+DlgFlashScaleFit	: "Potriveşte",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link (Legătură web)",
+DlgLnkInfoTab		: "Informaţii despre link (Legătură web)",
+DlgLnkTargetTab		: "Ţintă (Target)",
+
+DlgLnkType			: "Tipul link-ului (al legăturii web)",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancoră în această pagină",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "&lt;altul&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Selectaţi o ancoră",
+DlgLnkAnchorByName	: "după numele ancorei",
+DlgLnkAnchorById	: "după Id-ul elementului",
+DlgLnkNoAnchors		: "&lt;Nici o ancoră disponibilă în document&gt;",
+DlgLnkEMail			: "Adresă de e-mail",
+DlgLnkEMailSubject	: "Subiectul mesajului",
+DlgLnkEMailBody		: "Conţinutul mesajului",
+DlgLnkUpload		: "Încarcă",
+DlgLnkBtnUpload		: "Trimite la server",
+
+DlgLnkTarget		: "Ţintă (Target)",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;fereastra popup&gt;",
+DlgLnkTargetBlank	: "Fereastră nouă (_blank)",
+DlgLnkTargetParent	: "Fereastra părinte (_parent)",
+DlgLnkTargetSelf	: "Aceeaşi fereastră (_self)",
+DlgLnkTargetTop		: "Fereastra din topul ierarhiei (_top)",
+DlgLnkTargetFrameName	: "Numele frame-ului ţintă",
+DlgLnkPopWinName	: "Numele ferestrei popup",
+DlgLnkPopWinFeat	: "Proprietăţile ferestrei popup",
+DlgLnkPopResize		: "Scalabilă",
+DlgLnkPopLocation	: "Bara de locaţie",
+DlgLnkPopMenu		: "Bara de meniu",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Bara de status",
+DlgLnkPopToolbar	: "Bara de opţiuni",
+DlgLnkPopFullScrn	: "Tot ecranul (Full Screen)(IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Lăţime",
+DlgLnkPopHeight		: "Înălţime",
+DlgLnkPopLeft		: "Poziţia la stânga",
+DlgLnkPopTop		: "Poziţia la dreapta",
+
+DlnLnkMsgNoUrl		: "Vă rugăm să scrieţi URL-ul",
+DlnLnkMsgNoEMail	: "Vă rugăm să scrieţi adresa de e-mail",
+DlnLnkMsgNoAnchor	: "Vă rugăm să selectaţi o ancoră",
+
+// Color Dialog
+DlgColorTitle		: "Selectează culoare",
+DlgColorBtnClear	: "Curăţă",
+DlgColorHighlight	: "Subliniază (Highlight)",
+DlgColorSelected	: "Selectat",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserează o figură expresivă (Emoticon)",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selectează caracter special",
+
+// Table Dialog
+DlgTableTitle		: "Proprietăţile tabelului",
+DlgTableRows		: "Linii",
+DlgTableColumns		: "Coloane",
+DlgTableBorder		: "Mărimea marginii",
+DlgTableAlign		: "Aliniament",
+DlgTableAlignNotSet	: "<Nesetat>",
+DlgTableAlignLeft	: "Stânga",
+DlgTableAlignCenter	: "Centru",
+DlgTableAlignRight	: "Dreapta",
+DlgTableWidth		: "Lăţime",
+DlgTableWidthPx		: "pixeli",
+DlgTableWidthPc		: "procente",
+DlgTableHeight		: "Înălţime",
+DlgTableCellSpace	: "Spaţiu între celule",
+DlgTableCellPad		: "Spaţiu în cadrul celulei",
+DlgTableCaption		: "Titlu (Caption)",
+
+// Table Cell Dialog
+DlgCellTitle		: "Proprietăţile celulei",
+DlgCellWidth		: "Lăţime",
+DlgCellWidthPx		: "pixeli",
+DlgCellWidthPc		: "procente",
+DlgCellHeight		: "Înălţime",
+DlgCellWordWrap		: "Desparte cuvintele (Wrap)",
+DlgCellWordWrapNotSet	: "&lt;Nesetat&gt;",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Nu",
+DlgCellHorAlign		: "Aliniament orizontal",
+DlgCellHorAlignNotSet	: "&lt;Nesetat&gt;",
+DlgCellHorAlignLeft	: "Stânga",
+DlgCellHorAlignCenter	: "Centru",
+DlgCellHorAlignRight: "Dreapta",
+DlgCellVerAlign		: "Aliniament vertical",
+DlgCellVerAlignNotSet	: "&lt;Nesetat&gt;",
+DlgCellVerAlignTop	: "Sus",
+DlgCellVerAlignMiddle	: "Mijloc",
+DlgCellVerAlignBottom	: "Jos",
+DlgCellVerAlignBaseline	: "Linia de jos (Baseline)",
+DlgCellRowSpan		: "Lungimea în linii (Span)",
+DlgCellCollSpan		: "Lungimea în coloane (Span)",
+DlgCellBackColor	: "Culoarea fundalului",
+DlgCellBorderColor	: "Culoarea marginii",
+DlgCellBtnSelect	: "Selectaţi...",
+
+// Find Dialog
+DlgFindTitle		: "Găseşte",
+DlgFindFindBtn		: "Găseşte",
+DlgFindNotFoundMsg	: "Textul specificat nu a fost găsit.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Găseşte:",
+DlgReplaceReplaceLbl	: "Înlocuieşte cu:",
+DlgReplaceCaseChk		: "Deosebeşte majuscule de minuscule (Match case)",
+DlgReplaceReplaceBtn	: "Înlocuieşte",
+DlgReplaceReplAllBtn	: "Înlocuieşte tot",
+DlgReplaceWordChk		: "Doar cuvintele întregi",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de adăugare. Vă rugăm folosiţi tastatura (Ctrl+V).",
+PasteErrorCut	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl+X).",
+PasteErrorCopy	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl+C).",
+
+PasteAsText		: "Adaugă ca text simplu (Plain Text)",
+PasteFromWord	: "Adaugă din Word",
+
+DlgPasteMsg2	: "Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignoră definiţiile Font Face",
+DlgPasteRemoveStyles	: "Şterge definiţiile stilurilor",
+DlgPasteCleanBox		: "Şterge căsuţa",
+
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "Mai multe culori...",
+
+// Document Properties
+DocProps		: "Proprietăţile documentului",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietăţile ancorei",
+DlgAnchorName		: "Numele ancorei",
+DlgAnchorErrorName	: "Vă rugăm scrieţi numele ancorei",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nu e în dicţionar",
+DlgSpellChangeTo		: "Schimbă în",
+DlgSpellBtnIgnore		: "Ignoră",
+DlgSpellBtnIgnoreAll	: "Ignoră toate",
+DlgSpellBtnReplace		: "Înlocuieşte",
+DlgSpellBtnReplaceAll	: "Înlocuieşte tot",
+DlgSpellBtnUndo			: "Starea anterioară (undo)",
+DlgSpellNoSuggestions	: "- Fără sugestii -",
+DlgSpellProgress		: "Verificarea textului în desfăşurare...",
+DlgSpellNoMispell		: "Verificarea textului terminată: Nici o greşeală găsită",
+DlgSpellNoChanges		: "Verificarea textului terminată: Nici un cuvânt modificat",
+DlgSpellOneChange		: "Verificarea textului terminată: Un cuvânt modificat",
+DlgSpellManyChanges		: "Verificarea textului terminată: 1% cuvinte modificate",
+
+IeSpellDownload			: "Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?",
+
+// Button Dialog
+DlgButtonText	: "Text (Valoare)",
+DlgButtonType	: "Tip",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nume",
+DlgCheckboxValue	: "Valoare",
+DlgCheckboxSelected	: "Selectat",
+
+// Form Dialog
+DlgFormName		: "Nume",
+DlgFormAction	: "Acţiune",
+DlgFormMethod	: "Metodă",
+
+// Select Field Dialog
+DlgSelectName		: "Nume",
+DlgSelectValue		: "Valoare",
+DlgSelectSize		: "Mărime",
+DlgSelectLines		: "linii",
+DlgSelectChkMulti	: "Permite selecţii multiple",
+DlgSelectOpAvail	: "Opţiuni disponibile",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Valoare",
+DlgSelectBtnAdd		: "Adaugă",
+DlgSelectBtnModify	: "Modifică",
+DlgSelectBtnUp		: "Sus",
+DlgSelectBtnDown	: "Jos",
+DlgSelectBtnSetValue : "Setează ca valoare selectată",
+DlgSelectBtnDelete	: "Şterge",
+
+// Textarea Dialog
+DlgTextareaName	: "Nume",
+DlgTextareaCols	: "Coloane",
+DlgTextareaRows	: "Linii",
+
+// Text Field Dialog
+DlgTextName			: "Nume",
+DlgTextValue		: "Valoare",
+DlgTextCharWidth	: "Lărgimea caracterului",
+DlgTextMaxChars		: "Caractere maxime",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Parolă",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nume",
+DlgHiddenValue	: "Valoare",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietăţile listei punctate (Bulleted List)",
+NumberedListProp	: "Proprietăţile listei numerotate (Numbered List)",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Cerc",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Pătrat",
+DlgLstTypeNumbers	: "Numere (1, 2, 3)",
+DlgLstTypeLCase		: "Minuscule-litere mici (a, b, c)",
+DlgLstTypeUCase		: "Majuscule (A, B, C)",
+DlgLstTypeSRoman	: "Cifre romane mici (i, ii, iii)",
+DlgLstTypeLRoman	: "Cifre romane mari (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fundal",
+DlgDocColorsTab		: "Culori si margini",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titlul paginii",
+DlgDocLangDir		: "Descrierea limbii",
+DlgDocLangDirLTR	: "stânga-dreapta (LTR)",
+DlgDocLangDirRTL	: "dreapta-stânga (RTL)",
+DlgDocLangCode		: "Codul limbii",
+DlgDocCharSet		: "Encoding setului de caractere",
+DlgDocCharSetOther	: "Alt encoding al setului de caractere",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Alt Document Type Heading",
+DlgDocIncXHTML		: "Include declaraţii XHTML",
+DlgDocBgColor		: "Culoarea fundalului (Background Color)",
+DlgDocBgImage		: "URL-ul imaginii din fundal (Background Image URL)",
+DlgDocBgNoScroll	: "Fundal neflotant, fix (Nonscrolling Background)",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link (Legătură web)",
+DlgDocCVisited		: "Link (Legătură web) vizitat",
+DlgDocCActive		: "Link (Legătură web) activ",
+DlgDocMargins		: "Marginile paginii",
+DlgDocMaTop			: "Sus",
+DlgDocMaLeft		: "Stânga",
+DlgDocMaRight		: "Dreapta",
+DlgDocMaBottom		: "Jos",
+DlgDocMeIndex		: "Cuvinte cheie după care se va indexa documentul (separate prin virgulă)",
+DlgDocMeDescr		: "Descrierea documentului",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Drepturi de autor",
+DlgDocPreview		: "Previzualizare",
+
+// Templates Dialog
+Templates			: "Template-uri (şabloane)",
+DlgTemplatesTitle	: "Template-uri (şabloane) de conţinut",
+DlgTemplatesSelMsg	: "Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):",
+DlgTemplatesLoading	: "Se încarcă lista cu template-uri (şabloane). Vă rugăm aşteptaţi...",
+DlgTemplatesNoTpl	: "(Nici un template (şablon) definit)",
+
+// About Dialog
+DlgAboutAboutTab	: "Despre",
+DlgAboutBrowserInfoTab	: "Informaţii browser",
+DlgAboutVersion		: "versiune",
+DlgAboutLicense		: "Licenţiat sub termenii GNU Lesser General Public License",
+DlgAboutInfo		: "Pentru informaţii amănunţite, vizitaţi"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/ru.js 1.4.0sr5-1/fckeditor/editor/lang/ru.js
--- 1.3.11sr1/fckeditor/editor/lang/ru.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/ru.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: ru.js
+ * 	Russian language file.
+ * 
+ * File Authors:
+ * 		Andrey Grebnev (andrey.grebnev@blandware.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Свернуть панель инструментов",
+ToolbarExpand		: "Развернуть панель инструментов",
+
+// Toolbar Items and Context Menu
+Save				: "Сохранить",
+NewPage				: "Новая страница",
+Preview				: "Предварительный просмотр",
+Cut					: "Вырезать",
+Copy				: "Копировать",
+Paste				: "Вставить",
+PasteText			: "Вставить только текст",
+PasteWord			: "Вставить из Word",
+Print				: "Печать",
+SelectAll			: "Выделить все",
+RemoveFormat		: "Убрать форматирование",
+InsertLinkLbl		: "Ссылка",
+InsertLink			: "Вставить/Редактировать ссылку",
+RemoveLink			: "Убрать ссылку",
+Anchor				: "Вставить/Редактировать якорь",
+InsertImageLbl		: "Изображение",
+InsertImage			: "Вставить/Редактировать изображение",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Вставить/Редактировать Flash",
+InsertTableLbl		: "Таблица",
+InsertTable			: "Вставить/Редактировать таблицу",
+InsertLineLbl		: "Линия",
+InsertLine			: "Вставить горизонтальную линию",
+InsertSpecialCharLbl: "Специальный символ",
+InsertSpecialChar	: "Вставить специальный символ",
+InsertSmileyLbl		: "Смайлик",
+InsertSmiley		: "Вставить смайлик",
+About				: "О FCKeditor",
+Bold				: "Жирный",
+Italic				: "Курсив",
+Underline			: "Подчеркнутый",
+StrikeThrough		: "Зачеркнутый",
+Subscript			: "Подстрочный индекс",
+Superscript			: "Надстрочный индекс",
+LeftJustify			: "По левому краю",
+CenterJustify		: "По центру",
+RightJustify		: "По правому краю",
+BlockJustify		: "По ширине",
+DecreaseIndent		: "Уменьшить отступ",
+IncreaseIndent		: "Увеличить отступ",
+Undo				: "Отменить",
+Redo				: "Повторить",
+NumberedListLbl		: "Нумерованный список",
+NumberedList		: "Вставить/Удалить нумерованный список",
+BulletedListLbl		: "Маркированный список",
+BulletedList		: "Вставить/Удалить маркированный список",
+ShowTableBorders	: "Показать бордюры таблицы",
+ShowDetails			: "Показать детали",
+Style				: "Стиль",
+FontFormat			: "Форматирование",
+Font				: "Шрифт",
+FontSize			: "Размер",
+TextColor			: "Цвет текста",
+BGColor				: "Цвет фона",
+Source				: "Источник",
+Find				: "Найти",
+Replace				: "Заменить",
+SpellCheck			: "Проверить орфографию",
+UniversalKeyboard	: "Универсальная клавиатура",
+
+Form			: "Форма",
+Checkbox		: "Флаговая кнопка",
+RadioButton		: "Кнопка выбора",
+TextField		: "Текстовое поле",
+Textarea		: "Текстовая область",
+HiddenField		: "Скрытое поле",
+Button			: "Кнопка",
+SelectionField	: "Список",
+ImageButton		: "Кнопка с изображением",
+
+// Context Menu
+EditLink			: "Вставить ссылку",
+InsertRow			: "Вставить строку",
+DeleteRows			: "Удалить строки",
+InsertColumn		: "Вставить колонку",
+DeleteColumns		: "Удалить колонки",
+InsertCell			: "Вставить ячейку",
+DeleteCells			: "Удалить ячейки",
+MergeCells			: "Соединить ячейки",
+SplitCell			: "Разбить ячейку",
+CellProperties		: "Свойства ячейки",
+TableProperties		: "Свойства таблицы",
+ImageProperties		: "Свойства изображения",
+FlashProperties		: "Свойства Flash",
+
+AnchorProp			: "Свойства якоря",
+ButtonProp			: "Свойства кнопки",
+CheckboxProp		: "Свойства флаговой кнопки",
+HiddenFieldProp		: "Свойства скрытого поля",
+RadioButtonProp		: "Свойства кнопки выбора",
+ImageButtonProp		: "Свойства кнопки с изображением",
+TextFieldProp		: "Свойства текстового поля",
+SelectionFieldProp	: "Свойства списка",
+TextareaProp		: "Свойства текстовой области",
+FormProp			: "Свойства формы",
+
+FontFormats			: "Нормальный;Форматированный;Адрес;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обработка XHTML. Пожалуйста подождите...",
+Done				: "Сделано",
+PasteWordConfirm	: "Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?",
+NotCompatiblePaste	: "Эта команда доступна для Internet Explorer версии 5.5 или выше. Вы хотите вставить без очистки?",
+UnknownToolbarItem	: "Не известный элемент панели инструментов \"%1\"",
+UnknownCommand		: "Не известное имя команды \"%1\"",
+NotImplemented		: "Команда не реализована",
+UnknownToolbarSet	: "Панель инструментов \"%1\" не существует",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Отмена",
+DlgBtnClose			: "Закрыть",
+DlgBtnBrowseServer	: "Просмотреть на сервере",
+DlgAdvancedTag		: "Расширенный",
+DlgOpOther			: "&lt;Другое&gt;",
+DlgInfoTab			: "Информация",
+DlgAlertUrl			: "Пожалуйста вставьте URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;не определено&gt;",
+DlgGenId			: "Идентификатор",
+DlgGenLangDir		: "Направление языка",
+DlgGenLangDirLtr	: "Слева на право (LTR)",
+DlgGenLangDirRtl	: "Справа на лево (RTL)",
+DlgGenLangCode		: "Язык",
+DlgGenAccessKey		: "Горячая клавиша",
+DlgGenName			: "Имя",
+DlgGenTabIndex		: "Последовательность перехода",
+DlgGenLongDescr		: "Длинное описание URL",
+DlgGenClass			: "Класс CSS",
+DlgGenTitle			: "Заголовок",
+DlgGenContType		: "Тип содержимого",
+DlgGenLinkCharset	: "Кодировка",
+DlgGenStyle			: "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle			: "Свойства изображения",
+DlgImgInfoTab		: "Информация о изображении",
+DlgImgBtnUpload		: "Послать на сервер",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Закачать",
+DlgImgAlt			: "Альтернативный текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Высота",
+DlgImgLockRatio		: "Сохранять пропорции",
+DlgBtnResetSize		: "Сбросить размер",
+DlgImgBorder		: "Бордюр",
+DlgImgHSpace		: "Горизонтальный отступ",
+DlgImgVSpace		: "Вертикальный отступ",
+DlgImgAlign			: "Выравнивание",
+DlgImgAlignLeft		: "По левому краю",
+DlgImgAlignAbsBottom: "Абс понизу",
+DlgImgAlignAbsMiddle: "Абс посередине",
+DlgImgAlignBaseline	: "По базовой линии",
+DlgImgAlignBottom	: "Понизу",
+DlgImgAlignMiddle	: "Посередине",
+DlgImgAlignRight	: "По правому краю",
+DlgImgAlignTextTop	: "Текст наверху",
+DlgImgAlignTop		: "По верху",
+DlgImgPreview		: "Предварительный просмотр",
+DlgImgAlertUrl		: "Пожалуйста введите URL изображения",
+DlgImgLinkTab		: "Ссылка",
+
+// Flash Dialog
+DlgFlashTitle		: "Свойства Flash",
+DlgFlashChkPlay		: "Авто проигрывание",
+DlgFlashChkLoop		: "Повтор",
+DlgFlashChkMenu		: "Включить меню Flash",
+DlgFlashScale		: "Масштабировать",
+DlgFlashScaleAll	: "Показывать все",
+DlgFlashScaleNoBorder	: "Без бордюра",
+DlgFlashScaleFit	: "Точное совпадение",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ссылка",
+DlgLnkInfoTab		: "Информация ссылки",
+DlgLnkTargetTab		: "Цель",
+
+DlgLnkType			: "Тип ссылки",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Якорь на эту страницу",
+DlgLnkTypeEMail		: "Эл. почта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "&lt;другое&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Выберите якорь",
+DlgLnkAnchorByName	: "По имени якоря",
+DlgLnkAnchorById	: "По идентификатору элемента",
+DlgLnkNoAnchors		: "&lt;Нет якорей доступных в этом документе&gt;",
+DlgLnkEMail			: "Адрес эл. почты",
+DlgLnkEMailSubject	: "Заголовок сообщения",
+DlgLnkEMailBody		: "Тело сообщения",
+DlgLnkUpload		: "Закачать",
+DlgLnkBtnUpload		: "Послать на сервер",
+
+DlgLnkTarget		: "Цель",
+DlgLnkTargetFrame	: "&lt;фрейм&gt;",
+DlgLnkTargetPopup	: "&lt;всплывающее окно&gt;",
+DlgLnkTargetBlank	: "Новое окно (_blank)",
+DlgLnkTargetParent	: "Родительское окно (_parent)",
+DlgLnkTargetSelf	: "Тоже окно (_self)",
+DlgLnkTargetTop		: "Самое верхнее окно (_top)",
+DlgLnkTargetFrameName	: "Имя целевого фрейма",
+DlgLnkPopWinName	: "Имя всплывающего окна",
+DlgLnkPopWinFeat	: "Свойства всплывающего окна",
+DlgLnkPopResize		: "Изменяющееся в размерах",
+DlgLnkPopLocation	: "Панель локации",
+DlgLnkPopMenu		: "Панель меню",
+DlgLnkPopScroll		: "Полосы прокрутки",
+DlgLnkPopStatus		: "Строка состояния",
+DlgLnkPopToolbar	: "Панель инструментов",
+DlgLnkPopFullScrn	: "Полный экран (IE)",
+DlgLnkPopDependent	: "Зависимый (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Высота",
+DlgLnkPopLeft		: "Позиция слева",
+DlgLnkPopTop		: "Позиция сверху",
+
+DlnLnkMsgNoUrl		: "Пожалуйста введите URL ссылки",
+DlnLnkMsgNoEMail	: "Пожалуйста введите адрес эл. почты",
+DlnLnkMsgNoAnchor	: "Пожалуйста выберете якорь",
+
+// Color Dialog
+DlgColorTitle		: "Выберите цвет",
+DlgColorBtnClear	: "Очистить",
+DlgColorHighlight	: "Подсвеченный",
+DlgColorSelected	: "Выбранный",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Вставить смайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Выберите специальный символ",
+
+// Table Dialog
+DlgTableTitle		: "Свойства таблицы",
+DlgTableRows		: "Строки",
+DlgTableColumns		: "Колонки",
+DlgTableBorder		: "Размер бордюра",
+DlgTableAlign		: "Выравнивание",
+DlgTableAlignNotSet	: "<Не уст.>",
+DlgTableAlignLeft	: "Слева",
+DlgTableAlignCenter	: "По центру",
+DlgTableAlignRight	: "Справа",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пикселей",
+DlgTableWidthPc		: "процентов",
+DlgTableHeight		: "Высота",
+DlgTableCellSpace	: "Промежуток (spacing)",
+DlgTableCellPad		: "Отступ (padding)",
+DlgTableCaption		: "Заголовок",
+
+// Table Cell Dialog
+DlgCellTitle		: "Свойства ячейки",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пикселей",
+DlgCellWidthPc		: "процентов",
+DlgCellHeight		: "Высота",
+DlgCellWordWrap		: "Заворачивание текста",
+DlgCellWordWrapNotSet	: "<Не уст.>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "Нет",
+DlgCellHorAlign		: "Гор. выравнивание",
+DlgCellHorAlignNotSet	: "<Не уст.>",
+DlgCellHorAlignLeft	: "Слева",
+DlgCellHorAlignCenter	: "По центру",
+DlgCellHorAlignRight: "Справа",
+DlgCellVerAlign		: "Верт. выравнивание",
+DlgCellVerAlignNotSet	: "<Не уст.>",
+DlgCellVerAlignTop	: "Сверху",
+DlgCellVerAlignMiddle	: "Посередине",
+DlgCellVerAlignBottom	: "Снизу",
+DlgCellVerAlignBaseline	: "По базовой линии",
+DlgCellRowSpan		: "Диапазон строк (span)",
+DlgCellCollSpan		: "Диапазон колонок (span)",
+DlgCellBackColor	: "Цвет фона",
+DlgCellBorderColor	: "Цвет бордюра",
+DlgCellBtnSelect	: "Выберите...",
+
+// Find Dialog
+DlgFindTitle		: "Найти",
+DlgFindFindBtn		: "Найти",
+DlgFindNotFoundMsg	: "Указанный текст не найден.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Заменить",
+DlgReplaceFindLbl		: "Найти:",
+DlgReplaceReplaceLbl	: "Заменить на:",
+DlgReplaceCaseChk		: "Учитывать регистр",
+DlgReplaceReplaceBtn	: "Заменить",
+DlgReplaceReplAllBtn	: "Заменить все",
+DlgReplaceWordChk		: "Совпадение целых слов",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вставки. Пожалуйста используйте клавиатуру для этого (Ctrl+V).",
+PasteErrorCut	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста используйте клавиатуру для этого (Ctrl+X).",
+PasteErrorCopy	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста используйте клавиатуру для этого (Ctrl+C).",
+
+PasteAsText		: "Вставить только текст",
+PasteFromWord	: "Вставить из Word",
+
+DlgPasteMsg2	: "Пожалуйста вставьте текст в прямоугольник используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>) и нажмите <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Игнорировать определения гарнитуры",
+DlgPasteRemoveStyles	: "Убрать определения стилей",
+DlgPasteCleanBox		: "Очистить",
+
+
+// Color Picker
+ColorAutomatic	: "Автоматический",
+ColorMoreColors	: "Цвета...",
+
+// Document Properties
+DocProps		: "Свойства документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Свойства якоря",
+DlgAnchorName		: "Имя якоря",
+DlgAnchorErrorName	: "Пожалуйста введите имя якоря",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Нет в словаре",
+DlgSpellChangeTo		: "Заменить на",
+DlgSpellBtnIgnore		: "Игнорировать",
+DlgSpellBtnIgnoreAll	: "Игнорировать все",
+DlgSpellBtnReplace		: "Заменить",
+DlgSpellBtnReplaceAll	: "Заменить все",
+DlgSpellBtnUndo			: "Отменить",
+DlgSpellNoSuggestions	: "- Нет предположений -",
+DlgSpellProgress		: "Идет проверка орфографии...",
+DlgSpellNoMispell		: "Проверка орфографии закончена: ошибок не найдено",
+DlgSpellNoChanges		: "Проверка орфографии закончена: ни одного слова не изменено",
+DlgSpellOneChange		: "Проверка орфографии закончена: одно слово изменено",
+DlgSpellManyChanges		: "Проверка орфографии закончена: 1% слов изменен",
+
+IeSpellDownload			: "Модуль проверки орфографии не установлен. Хотите скачать его сейчас?",
+
+// Button Dialog
+DlgButtonText	: "Текст (Значение)",
+DlgButtonType	: "Тип",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Имя",
+DlgCheckboxValue	: "Значение",
+DlgCheckboxSelected	: "Выбранная",
+
+// Form Dialog
+DlgFormName		: "Имя",
+DlgFormAction	: "Действие",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Имя",
+DlgSelectValue		: "Значение",
+DlgSelectSize		: "Размер",
+DlgSelectLines		: "линии",
+DlgSelectChkMulti	: "Разрешить множественный выбор",
+DlgSelectOpAvail	: "Доступные варианты",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Значение",
+DlgSelectBtnAdd		: "Добавить",
+DlgSelectBtnModify	: "Модифицировать",
+DlgSelectBtnUp		: "Вверх",
+DlgSelectBtnDown	: "Вниз",
+DlgSelectBtnSetValue : "Установить как выбранное значение",
+DlgSelectBtnDelete	: "Удалить",
+
+// Textarea Dialog
+DlgTextareaName	: "Имя",
+DlgTextareaCols	: "Колонки",
+DlgTextareaRows	: "Строки",
+
+// Text Field Dialog
+DlgTextName			: "Имя",
+DlgTextValue		: "Значение",
+DlgTextCharWidth	: "Ширина",
+DlgTextMaxChars		: "Макс. кол-во символов",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Имя",
+DlgHiddenValue	: "Значение",
+
+// Bulleted List Dialog
+BulletedListProp	: "Свойства маркированного списка",
+NumberedListProp	: "Свойства нумерованного списка",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Круг",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Номера (1, 2, 3)",
+DlgLstTypeLCase		: "Буквы нижнего регистра (a, b, c)",
+DlgLstTypeUCase		: "Буквы верхнего регистра (A, B, C)",
+DlgLstTypeSRoman	: "Малые римские буквы (i, ii, iii)",
+DlgLstTypeLRoman	: "Большие римские буквы (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Общие",
+DlgDocBackTab		: "Задний фон",
+DlgDocColorsTab		: "Цвета и отступы",
+DlgDocMetaTab		: "Мета данные",
+
+DlgDocPageTitle		: "Заголовок страницы",
+DlgDocLangDir		: "Направление текста",
+DlgDocLangDirLTR	: "Слева на право (LTR)",
+DlgDocLangDirRTL	: "Справа на лево (RTL)",
+DlgDocLangCode		: "Код языка",
+DlgDocCharSet		: "Кодировка набора символов",
+DlgDocCharSetOther	: "Другая кодировка набора символов",
+
+DlgDocDocType		: "Заголовок типа документа",
+DlgDocDocTypeOther	: "Другой заголовок типа документа",
+DlgDocIncXHTML		: "Включить XHTML объявления",
+DlgDocBgColor		: "Цвет фона",
+DlgDocBgImage		: "URL изображения фона",
+DlgDocBgNoScroll	: "Нескроллируемый фон",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Ссылка",
+DlgDocCVisited		: "Посещенная ссылка",
+DlgDocCActive		: "Активная ссылка",
+DlgDocMargins		: "Отступы страницы",
+DlgDocMaTop			: "Верхний",
+DlgDocMaLeft		: "Левый",
+DlgDocMaRight		: "Правый",
+DlgDocMaBottom		: "Нижний",
+DlgDocMeIndex		: "Ключевые слова документа (разделенные запятой)",
+DlgDocMeDescr		: "Описание документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторские права",
+DlgDocPreview		: "Предварительный просмотр",
+
+// Templates Dialog
+Templates			: "Шаблоны",
+DlgTemplatesTitle	: "Шаблоны содержимого",
+DlgTemplatesSelMsg	: "Пожалуйста выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):",
+DlgTemplatesLoading	: "Загрузка списка шаблонов. Пожалуйста подождите...",
+DlgTemplatesNoTpl	: "(Ни одного шаблона не определено)",
+
+// About Dialog
+DlgAboutAboutTab	: "О программе",
+DlgAboutBrowserInfoTab	: "Информация браузера",
+DlgAboutVersion		: "Версия",
+DlgAboutLicense		: "Лицензировано в соответствии с условиями GNU Lesser General Public License",
+DlgAboutInfo		: "Для большей информации, посетите"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/sk.js 1.4.0sr5-1/fckeditor/editor/lang/sk.js
--- 1.3.11sr1/fckeditor/editor/lang/sk.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/sk.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: sk.js
+ * 	Slovak language file.
+ * 
+ * File Authors:
+ * 		Samuel Szabo (samuel@nanete.sk)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skryť panel nástrojov",
+ToolbarExpand		: "Zobraziť panel nástrojov",
+
+// Toolbar Items and Context Menu
+Save				: "Uložit",
+NewPage				: "Nová stránka",
+Preview				: "Náhľad",
+Cut					: "Vystrihnúť",
+Copy				: "Kopírovať",
+Paste				: "Vložiť",
+PasteText			: "Vložiť ako čistý text",
+PasteWord			: "Vložiť z Wordu",
+Print				: "Tlač",
+SelectAll			: "Vybrať všetko",
+RemoveFormat		: "Odstrániť formátovanie",
+InsertLinkLbl		: "Odkaz",
+InsertLink			: "Vložiť/zmeniť odkaz",
+RemoveLink			: "Odstrániť odkaz",
+Anchor				: "Vložiť/zmeniť kotvu",
+InsertImageLbl		: "Obrázok",
+InsertImage			: "Vložiť/zmeniť obrazok",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vložiť/zmeniť Flash",
+InsertTableLbl		: "Tabuľka",
+InsertTable			: "Vložiť/zmeniť tabulku",
+InsertLineLbl		: "Čiara",
+InsertLine			: "Vložiť vodorovnú čiara",
+InsertSpecialCharLbl: "Speciálne znaky",
+InsertSpecialChar	: "Vložiť špeciálne znaky",
+InsertSmileyLbl		: "Smajlíky",
+InsertSmiley		: "Vložiť smajlíka",
+About				: "O aplikáci FCKeditor",
+Bold				: "Tučné",
+Italic				: "Kurzíva",
+Underline			: "Podčiarknuté",
+StrikeThrough		: "Prečiarknuté",
+Subscript			: "Dolný index",
+Superscript			: "Horný index",
+LeftJustify			: "Zarovnať vľavo",
+CenterJustify		: "Zarovnať na stred",
+RightJustify		: "Zarovnať vpravo",
+BlockJustify		: "Zarovnať do bloku",
+DecreaseIndent		: "Zmenšiť odsadenie",
+IncreaseIndent		: "Zväčšiť odsadenie",
+Undo				: "Späť",
+Redo				: "Znovu",
+NumberedListLbl		: "Číslovanie",
+NumberedList		: "Vložiť/odstrániť číslovaný zoznam",
+BulletedListLbl		: "Odrážky",
+BulletedList		: "Vložiť/odstraniť odrážky",
+ShowTableBorders	: "Zobraziť okraje tabuliek",
+ShowDetails			: "Zobraziť podrobnosti",
+Style				: "Štýl",
+FontFormat			: "Formát",
+Font				: "Písmo",
+FontSize			: "Veľkost",
+TextColor			: "Farba textu",
+BGColor				: "Farba pozadia",
+Source				: "Zdroj",
+Find				: "Hľadať",
+Replace				: "Nahradiť",
+SpellCheck			: "Kontrola pravopisu",
+UniversalKeyboard	: "Univerzálna klávesnica",
+
+Form			: "Formulár",
+Checkbox		: "Zaškrtávacie políčko",
+RadioButton		: "Prepínač",
+TextField		: "Textové pole",
+Textarea		: "Textová oblasť",
+HiddenField		: "Skryté pole",
+Button			: "Tlačítko",
+SelectionField	: "Rozbaľovací zoznam",
+ImageButton		: "Obrázkové tlačítko",
+
+// Context Menu
+EditLink			: "Zmeniť odkaz",
+InsertRow			: "Vložiť riadok",
+DeleteRows			: "Zmazať riadok",
+InsertColumn		: "Vložiť stĺpec",
+DeleteColumns		: "Zmazať stĺpec",
+InsertCell			: "Vložiť bunku",
+DeleteCells			: "Zmazať bunky",
+MergeCells			: "Zlúčiť bunky",
+SplitCell			: "Rozdeliť bunku",
+CellProperties		: "Vlastnosti bunky",
+TableProperties		: "Vlastnosti tabulky",
+ImageProperties		: "Vlastnosti obrázka",
+FlashProperties		: "Vlastnosti Flashu",
+
+AnchorProp			: "Vlastnosti kotvy",
+ButtonProp			: "Vlastnosti tlačítka",
+CheckboxProp		: "Vlastnosti zaškrtávacieho políčka",
+HiddenFieldProp		: "Vlastnosti skrytého poľa",
+RadioButtonProp		: "Vlastnosti prepínača",
+ImageButtonProp		: "Vlastnosti obrázkového tlačítka",
+TextFieldProp		: "Vlastnosti textového pola",
+SelectionFieldProp	: "Vlastnosti rozbaľovacieho zoznamu",
+TextareaProp		: "Vlastnosti textové oblasti",
+FormProp			: "Vlastnosti formulára",
+
+FontFormats			: "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Prebieha spracovanie XHTML. Prosím čakejte...",
+Done				: "Dokončené.",
+PasteWordConfirm	: "Vyzerá to tak, že vkladaný text je kopírovaný z Wordu. Chcete ho pred vložením vyčistiť?",
+NotCompatiblePaste	: "Tento príkaz je dostupný len v prehliadači Internet Explorer verzie 5.5 alebo vyššej. Chcete vložiť text bez vyčistenia?",
+UnknownToolbarItem	: "Neznáma položka panela nástrojov \"%1\"",
+UnknownCommand		: "Neznámy príkaz \"%1\"",
+NotImplemented		: "Príkaz nie je implementovaný",
+UnknownToolbarSet	: "Panel nástrojov \"%1\" neexistuje",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Zrušiť",
+DlgBtnClose			: "Zavrieť",
+DlgBtnBrowseServer	: "Prechádzať server",
+DlgAdvancedTag		: "Rozšírené",
+DlgOpOther			: "&lt;Ďalšie&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nenastavené&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientácia jazyka",
+DlgGenLangDirLtr	: "Zľava doprava (LTR)",
+DlgGenLangDirRtl	: "Zprava doľava (RTL)",
+DlgGenLangCode		: "Kód jazyka",
+DlgGenAccessKey		: "Prístupový kľúč",
+DlgGenName			: "Meno",
+DlgGenTabIndex		: "Poradie prvku",
+DlgGenLongDescr		: "Dlhý popis URL",
+DlgGenClass			: "Trieda štýlu",
+DlgGenTitle			: "Pomocný titulok",
+DlgGenContType		: "Pomocný typ obsahu",
+DlgGenLinkCharset	: "Priradená znaková sada",
+DlgGenStyle			: "Štýl",
+
+// Image Dialog
+DlgImgTitle			: "Vlastnosti obrázku",
+DlgImgInfoTab		: "Informácie o obrázku",
+DlgImgBtnUpload		: "Odoslať na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Odoslať",
+DlgImgAlt			: "Alternatívny text",
+DlgImgWidth			: "Šírka",
+DlgImgHeight		: "Výška",
+DlgImgLockRatio		: "Zámok",
+DlgBtnResetSize		: "Pôvodná veľkosť",
+DlgImgBorder		: "Okraje",
+DlgImgHSpace		: "H-medzera",
+DlgImgVSpace		: "V-medzera",
+DlgImgAlign			: "Zarovnanie",
+DlgImgAlignLeft		: "Vľevo",
+DlgImgAlignAbsBottom: "Úplne dole",
+DlgImgAlignAbsMiddle: "Do stredu",
+DlgImgAlignBaseline	: "Na základňu",
+DlgImgAlignBottom	: "Dole",
+DlgImgAlignMiddle	: "Na stred",
+DlgImgAlignRight	: "Vpravo",
+DlgImgAlignTextTop	: "Na horný okraj textu",
+DlgImgAlignTop		: "Nahor",
+DlgImgPreview		: "Náhľad",
+DlgImgAlertUrl		: "Zadajte prosím URL obrázku",
+DlgImgLinkTab		: "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle		: "Vlastnosti Flashu",
+DlgFlashChkPlay		: "Automatické prehrávanie",
+DlgFlashChkLoop		: "Opakovanie",
+DlgFlashChkMenu		: "Povoliť Flash Menu",
+DlgFlashScale		: "Mierka",
+DlgFlashScaleAll	: "Zobraziť mierku",
+DlgFlashScaleNoBorder	: "Bez okrajov",
+DlgFlashScaleFit	: "Roztiahnuť na celé",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Odkaz",
+DlgLnkInfoTab		: "Informácie o odkaze",
+DlgLnkTargetTab		: "Cieľ",
+
+DlgLnkType			: "Typ odkazu",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Kotva v tejto stránke",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;iný&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vybrať kotvu",
+DlgLnkAnchorByName	: "Podľa mena kotvy",
+DlgLnkAnchorById	: "Podľa Id objektu",
+DlgLnkNoAnchors		: "&lt;V stránke žiadna kotva nie je definovaná&gt;",
+DlgLnkEMail			: "E-Mailová adresa",
+DlgLnkEMailSubject	: "Predmet správy",
+DlgLnkEMailBody		: "Telo správy",
+DlgLnkUpload		: "Odoslať",
+DlgLnkBtnUpload		: "Odoslať na server",
+
+DlgLnkTarget		: "Cieľ",
+DlgLnkTargetFrame	: "&lt;rámec&gt;",
+DlgLnkTargetPopup	: "&lt;vyskakovacie okno&gt;",
+DlgLnkTargetBlank	: "Nové okno (_blank)",
+DlgLnkTargetParent	: "Rodičovské okno (_parent)",
+DlgLnkTargetSelf	: "Rovnaké okno (_self)",
+DlgLnkTargetTop		: "Hlavné okno (_top)",
+DlgLnkTargetFrameName	: "Meno rámu cieľa",
+DlgLnkPopWinName	: "Názov vyskakovacieho okna",
+DlgLnkPopWinFeat	: "Vlastnosti vyskakovacieho okna",
+DlgLnkPopResize		: "Měnitelná velikost",
+DlgLnkPopLocation	: "Panel umístění",
+DlgLnkPopMenu		: "Panel ponuky",
+DlgLnkPopScroll		: "Posuvníky",
+DlgLnkPopStatus		: "Stavový riadok",
+DlgLnkPopToolbar	: "Panel nástrojov",
+DlgLnkPopFullScrn	: "Celá obrazovka (IE)",
+DlgLnkPopDependent	: "Závislosť (Netscape)",
+DlgLnkPopWidth		: "Šírka",
+DlgLnkPopHeight		: "Výška",
+DlgLnkPopLeft		: "Ľavý okraj",
+DlgLnkPopTop		: "Horný okraj",
+
+DlnLnkMsgNoUrl		: "Zadajte prosím URL odkazu",
+DlnLnkMsgNoEMail	: "Zadajte prosím e-mailovú adresu",
+DlnLnkMsgNoAnchor	: "Vyberte prosím kotvu",
+
+// Color Dialog
+DlgColorTitle		: "Výber farby",
+DlgColorBtnClear	: "Vymazať",
+DlgColorHighlight	: "Zvýraznená",
+DlgColorSelected	: "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vkladanie smajlíkov",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Výber speciálneho znaku",
+
+// Table Dialog
+DlgTableTitle		: "Vlastnosti tabuľky",
+DlgTableRows		: "Riadky",
+DlgTableColumns		: "Stĺpce",
+DlgTableBorder		: "Ohraničenie",
+DlgTableAlign		: "Zarovnanie",
+DlgTableAlignNotSet	: "<nenastavené>",
+DlgTableAlignLeft	: "Vľavo",
+DlgTableAlignCenter	: "Na stred",
+DlgTableAlignRight	: "Vpravo",
+DlgTableWidth		: "Šírka",
+DlgTableWidthPx		: "pixelov",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Výška",
+DlgTableCellSpace	: "Vzdialenosť buniek",
+DlgTableCellPad		: "Odsadenie obsahu",
+DlgTableCaption		: "Popis",
+
+// Table Cell Dialog
+DlgCellTitle		: "Vlastnosti bunky",
+DlgCellWidth		: "Šírka",
+DlgCellWidthPx		: "bodov",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Výška",
+DlgCellWordWrap		: "Zalamovannie",
+DlgCellWordWrapNotSet	: "<nenanstavené>",
+DlgCellWordWrapYes	: "Áno",
+DlgCellWordWrapNo	: "Nie",
+DlgCellHorAlign		: "Vodorovné zarovnanie",
+DlgCellHorAlignNotSet	: "<nenastavené>",
+DlgCellHorAlignLeft	: "Vľavo",
+DlgCellHorAlignCenter	: "Na stred",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign		: "Zvyslé zarovnanie",
+DlgCellVerAlignNotSet	: "<nenastavené>",
+DlgCellVerAlignTop	: "Nahor",
+DlgCellVerAlignMiddle	: "Doprostred",
+DlgCellVerAlignBottom	: "Dole",
+DlgCellVerAlignBaseline	: "Na základňu",
+DlgCellRowSpan		: "Zlúčené riadky",
+DlgCellCollSpan		: "Zlúčené stĺpce",
+DlgCellBackColor	: "Farba pozadia",
+DlgCellBorderColor	: "Farba ohraničenia",
+DlgCellBtnSelect	: "Výber...",
+
+// Find Dialog
+DlgFindTitle		: "Hľadať",
+DlgFindFindBtn		: "Hľadať",
+DlgFindNotFoundMsg	: "Hľadaný text nebol nájdený.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Nahradiť",
+DlgReplaceFindLbl		: "Čo hľadať:",
+DlgReplaceReplaceLbl	: "Čím nahradiť:",
+DlgReplaceCaseChk		: "Rozlišovať malé/veľké písmená",
+DlgReplaceReplaceBtn	: "Nahradiť",
+DlgReplaceReplAllBtn	: "Nahradiť všetko",
+DlgReplaceWordChk		: "Len celé slová",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Bezpečnostné nastavenie Vášho prohehliadača nedovoľujú editoru spustiť funkciu pre vloženie textu zo schránky. Prosím vložte text zo schránky pomocou klávesnice (Ctrl+V).",
+PasteErrorCut	: "Bezpečnostné nastavenie Vášho prohehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).",
+PasteErrorCopy	: "Bezpečnostné nastavenie Vášho prohehliadača nedovoľujú editoru spustiť funkciu pre kopírovánie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).",
+
+PasteAsText		: "Vložiť ako čistý text",
+PasteFromWord	: "Vložiť text z Wordu",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorovať nastavenia typu písma",
+DlgPasteRemoveStyles	: "Odstrániť formátovanie",
+DlgPasteCleanBox		: "Vyčistiť schránku",
+
+
+// Color Picker
+ColorAutomatic	: "Automaticky",
+ColorMoreColors	: "Viac farieb...",
+
+// Document Properties
+DocProps		: "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Vlastnosti kotvy",
+DlgAnchorName		: "Meno kotvy",
+DlgAnchorErrorName	: "Zadajte prosím meno kotvy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nie je v slovníku",
+DlgSpellChangeTo		: "Zmeniť na",
+DlgSpellBtnIgnore		: "Ignorovať",
+DlgSpellBtnIgnoreAll	: "Ignorovať všetko",
+DlgSpellBtnReplace		: "Prepísat",
+DlgSpellBtnReplaceAll	: "Prepísat všetko",
+DlgSpellBtnUndo			: "Späť",
+DlgSpellNoSuggestions	: "- Žiadny návrh -",
+DlgSpellProgress		: "Prebieha kontrola pravopisu...",
+DlgSpellNoMispell		: "Kontrola pravopisu dokončená: bez chyb",
+DlgSpellNoChanges		: "Kontrola pravopisu dokončená: žiadne slová nezmenené",
+DlgSpellOneChange		: "Kontrola pravopisu dokončená: zmenené jedno slovo",
+DlgSpellManyChanges		: "Kontrola pravopisu dokončená: zmenených %1 slov",
+
+IeSpellDownload			: "Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?",
+
+// Button Dialog
+DlgButtonText	: "Text",
+DlgButtonType	: "Typ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Názov",
+DlgCheckboxValue	: "Hodnota",
+DlgCheckboxSelected	: "Vybrané",
+
+// Form Dialog
+DlgFormName		: "Názov",
+DlgFormAction	: "Akcie",
+DlgFormMethod	: "Metóda",
+
+// Select Field Dialog
+DlgSelectName		: "Názov",
+DlgSelectValue		: "Hodnota",
+DlgSelectSize		: "Veľkosť",
+DlgSelectLines		: "riadkov",
+DlgSelectChkMulti	: "Povoliť viacnásobný výber",
+DlgSelectOpAvail	: "Dostupné možnosti",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Hodnota",
+DlgSelectBtnAdd		: "Pridať",
+DlgSelectBtnModify	: "Zmeniť",
+DlgSelectBtnUp		: "Nahor",
+DlgSelectBtnDown	: "Dolu",
+DlgSelectBtnSetValue : "Nastaviť ako vybranú hodnotu",
+DlgSelectBtnDelete	: "Zmazať",
+
+// Textarea Dialog
+DlgTextareaName	: "Názov",
+DlgTextareaCols	: "Stĺpce",
+DlgTextareaRows	: "Riadky",
+
+// Text Field Dialog
+DlgTextName			: "Názov",
+DlgTextValue		: "Hodnota",
+DlgTextCharWidth	: "Šírka pola (znakov)",
+DlgTextMaxChars		: "Maximálny počet znakov",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Názov",
+DlgHiddenValue	: "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp	: "Vlastnosti odrážok",
+NumberedListProp	: "Vlastnosti číslovania",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Krúžok",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Štvorec",
+DlgLstTypeNumbers	: "Číslovanie (1, 2, 3)",
+DlgLstTypeLCase		: "Malé písmená (a, b, c)",
+DlgLstTypeUCase		: "Veľké písmená (A, B, C)",
+DlgLstTypeSRoman	: "Malé rímske číslice (i, ii, iii)",
+DlgLstTypeLRoman	: "Veľké rímske číslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Všeobecné",
+DlgDocBackTab		: "Pozadie",
+DlgDocColorsTab		: "Farby a okraje",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titulok",
+DlgDocLangDir		: "Orientácie jazyka",
+DlgDocLangDirLTR	: "Zľeva doprava (LTR)",
+DlgDocLangDirRTL	: "Zprava doľava (RTL)",
+DlgDocLangCode		: "Kód jazyka",
+DlgDocCharSet		: "Kódová stránka",
+DlgDocCharSetOther	: "Iná kódová stránka",
+
+DlgDocDocType		: "Typ záhlavia dokumentu",
+DlgDocDocTypeOther	: "Iný typ záhlavia dokumentu",
+DlgDocIncXHTML		: "Obsahuje deklarácie XHTML",
+DlgDocBgColor		: "Farba pozadia",
+DlgDocBgImage		: "URL adresa obrázku na pozadí",
+DlgDocBgNoScroll	: "Fixné pozadie",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Odkaz",
+DlgDocCVisited		: "Navštívený odkaz",
+DlgDocCActive		: "Aktívny odkaz",
+DlgDocMargins		: "Okraje stránky",
+DlgDocMaTop			: "Horný",
+DlgDocMaLeft		: "Ľavý",
+DlgDocMaRight		: "Pravý",
+DlgDocMaBottom		: "Dolný",
+DlgDocMeIndex		: "Kľúčové slová pre indexovanie (oddelené čiarkou)",
+DlgDocMeDescr		: "Popis stránky",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorské práva",
+DlgDocPreview		: "Náhľad",
+
+// Templates Dialog
+Templates			: "Šablóny",
+DlgTemplatesTitle	: "Šablóny obsahu",
+DlgTemplatesSelMsg	: "Prosím vyberte šablóny ma otvorenie v editore<br>(terajší obsah bude stratený):",
+DlgTemplatesLoading	: "Nahrávam zoznam šablón. Čakajte prosím...",
+DlgTemplatesNoTpl	: "(žiadne šablóny nenájdené)",
+
+// About Dialog
+DlgAboutAboutTab	: "O aplikáci",
+DlgAboutBrowserInfoTab	: "Informácie o prehliadači",
+DlgAboutVersion		: "verzie",
+DlgAboutLicense		: "Licencované pod pravidlami GNU Lesser General Public License",
+DlgAboutInfo		: "Viac informácií získate na"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/sl.js 1.4.0sr5-1/fckeditor/editor/lang/sl.js
--- 1.3.11sr1/fckeditor/editor/lang/sl.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/sl.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: sl.js
+ * 	Slovenian language file.
+ * 
+ * File Authors:
+ * 		Boris Volarič (vol@rutka.net)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Zloži orodno vrstico",
+ToolbarExpand		: "Razširi orodno vrstico",
+
+// Toolbar Items and Context Menu
+Save				: "Shrani",
+NewPage				: "Nova stran",
+Preview				: "Predogled",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Prilepi",
+PasteText			: "Prilepi kot golo besedilo",
+PasteWord			: "Prilepi iz Worda",
+Print				: "Natisni",
+SelectAll			: "Izberi vse",
+RemoveFormat		: "Odstrani oblikovanje",
+InsertLinkLbl		: "Povezava",
+InsertLink			: "Vstavi/uredi povezavo",
+RemoveLink			: "Odstrani povezavo",
+Anchor				: "Vstavi/uredi zaznamek",
+InsertImageLbl		: "Slika",
+InsertImage			: "Vstavi/uredi sliko",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vstavi/Uredi Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Vstavi/uredi tabelo",
+InsertLineLbl		: "Črta",
+InsertLine			: "Vstavi vodoravno črto",
+InsertSpecialCharLbl: "Posebni znak",
+InsertSpecialChar	: "Vstavi posebni znak",
+InsertSmileyLbl		: "Smeško",
+InsertSmiley		: "Vstavi smeška",
+About				: "O FCKeditorju",
+Bold				: "Krepko",
+Italic				: "Ležeče",
+Underline			: "Podčrtano",
+StrikeThrough		: "Prečrtano",
+Subscript			: "Podpisano",
+Superscript			: "Nadpisano",
+LeftJustify			: "Leva poravnava",
+CenterJustify		: "Sredinska poravnava",
+RightJustify		: "Desna poravnava",
+BlockJustify		: "Obojestranska poravnava",
+DecreaseIndent		: "Zmanjšaj zamik",
+IncreaseIndent		: "Povečaj zamik",
+Undo				: "Razveljavi",
+Redo				: "Ponovi",
+NumberedListLbl		: "Oštevilčen seznam",
+NumberedList		: "Vstavi/odstrani oštevilčevanje",
+BulletedListLbl		: "Označen seznam",
+BulletedList		: "Vstavi/odstrani označevanje",
+ShowTableBorders	: "Pokaži meje tabele",
+ShowDetails			: "Pokaži podrobnosti",
+Style				: "Slog",
+FontFormat			: "Oblika",
+Font				: "Pisava",
+FontSize			: "Velikost",
+TextColor			: "Barva besedila",
+BGColor				: "Barva ozadja",
+Source				: "Izvorna koda",
+Find				: "Najdi",
+Replace				: "Zamenjaj",
+SpellCheck			: "Preveri črkovanje",
+UniversalKeyboard	: "Večjezična tipkovnica",
+
+Form			: "Obrazec",
+Checkbox		: "Potrditveno polje",
+RadioButton		: "Izbirno polje",
+TextField		: "Vnosno polje",
+Textarea		: "Vnosno območje",
+HiddenField		: "Skrito polje",
+Button			: "Gumb",
+SelectionField	: "Spustni seznam",
+ImageButton		: "Gumb s sliko",
+
+// Context Menu
+EditLink			: "Uredi povezavo",
+InsertRow			: "Vstavi vrstico",
+DeleteRows			: "Izbriši vrstice",
+InsertColumn		: "Vstavi stolpec",
+DeleteColumns		: "Izbriši stolpce",
+InsertCell			: "Vstavi celico",
+DeleteCells			: "Izbriši celice",
+MergeCells			: "Združi celice",
+SplitCell			: "Razdeli celico",
+CellProperties		: "Lastnosti celice",
+TableProperties		: "Lastnosti tabele",
+ImageProperties		: "Lastnosti slike",
+FlashProperties		: "Lastnosti Flash",
+
+AnchorProp			: "Lastnosti zaznamka",
+ButtonProp			: "Lastnosti gumba",
+CheckboxProp		: "Lastnosti potrditvenega polja",
+HiddenFieldProp		: "Lastnosti skritega polja",
+RadioButtonProp		: "Lastnosti izbirnega polja",
+ImageButtonProp		: "Lastnosti gumba s sliko",
+TextFieldProp		: "Lastnosti vnosnega polja",
+SelectionFieldProp	: "Lastnosti spustnega seznama",
+TextareaProp		: "Lastnosti vnosnega območja",
+FormProp			: "Lastnosti obrazca",
+
+FontFormats			: "Navaden;Oblikovan;Napis;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obdelujem XHTML. Prosim počakajte...",
+Done				: "Narejeno",
+PasteWordConfirm	: "Izgleda, da želite prilepiti besedilo iz Worda. Ali ga želite očistiti, preden ga prilepite?",
+NotCompatiblePaste	: "Ta ukaz deluje le v Internet Explorerje različice 5.5 ali višje. Ali želite prilepiti brez čiščenja?",
+UnknownToolbarItem	: "Neznan element orodne vrstice \"%1\"",
+UnknownCommand		: "Neznano ime ukaza \"%1\"",
+NotImplemented		: "Ukaz ni izdelan",
+UnknownToolbarSet	: "Skupina orodnih vrstic \"%1\" ne obstoja",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "V redu",
+DlgBtnCancel		: "Prekliči",
+DlgBtnClose			: "Zapri",
+DlgBtnBrowseServer	: "Prebrskaj na strežniku",
+DlgAdvancedTag		: "Napredno",
+DlgOpOther			: "&lt;Ostalo&gt;",
+DlgInfoTab			: "Podatki",
+DlgAlertUrl			: "Prosim vpiši spletni naslov",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ni postavljen&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smer jezika",
+DlgGenLangDirLtr	: "Od leve proti desni (LTR)",
+DlgGenLangDirRtl	: "Od desne proti levi (RTL)",
+DlgGenLangCode		: "Oznaka jezika",
+DlgGenAccessKey		: "Vstopno geslo",
+DlgGenName			: "Ime",
+DlgGenTabIndex		: "Številka tabulatorja",
+DlgGenLongDescr		: "Dolg opis URL-ja",
+DlgGenClass			: "Razred stilne predloge",
+DlgGenTitle			: "Predlagani naslov",
+DlgGenContType		: "Predlagani tip vsebine (content-type)",
+DlgGenLinkCharset	: "Kodna tabela povezanega vira",
+DlgGenStyle			: "Slog",
+
+// Image Dialog
+DlgImgTitle			: "Lastnosti slike",
+DlgImgInfoTab		: "Podatki o sliki",
+DlgImgBtnUpload		: "Pošlji na strežnik",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošlji",
+DlgImgAlt			: "Nadomestno besedilo",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Višina",
+DlgImgLockRatio		: "Zakleni razmerje",
+DlgBtnResetSize		: "Ponastavi velikost",
+DlgImgBorder		: "Obroba",
+DlgImgHSpace		: "Vodoravni razmik",
+DlgImgVSpace		: "Navpični razmik",
+DlgImgAlign			: "Poravnava",
+DlgImgAlignLeft		: "Levo",
+DlgImgAlignAbsBottom: "Popolnoma na dno",
+DlgImgAlignAbsMiddle: "Popolnoma v sredino",
+DlgImgAlignBaseline	: "Na osnovno črto",
+DlgImgAlignBottom	: "Na dno",
+DlgImgAlignMiddle	: "V sredino",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Besedilo na vrh",
+DlgImgAlignTop		: "Na vrh",
+DlgImgPreview		: "Predogled",
+DlgImgAlertUrl		: "Vnesite URL slike",
+DlgImgLinkTab		: "Povezava",
+
+// Flash Dialog
+DlgFlashTitle		: "Lastnosti Flash",
+DlgFlashChkPlay		: "Samodejno predvajaj",
+DlgFlashChkLoop		: "Ponavljanje",
+DlgFlashChkMenu		: "Omogoči Flash Meni",
+DlgFlashScale		: "Povečava",
+DlgFlashScaleAll	: "Pokaži vse",
+DlgFlashScaleNoBorder	: "Brez obrobe",
+DlgFlashScaleFit	: "Natančno prileganje",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Povezava",
+DlgLnkInfoTab		: "Podatki o povezavi",
+DlgLnkTargetTab		: "Cilj",
+
+DlgLnkType			: "Vrsta povezave",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Zaznamek na tej strani",
+DlgLnkTypeEMail		: "Elektronski naslov",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;drugo&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izberi zaznamek",
+DlgLnkAnchorByName	: "Po imenu zaznamka",
+DlgLnkAnchorById	: "Po ID-ju elementa",
+DlgLnkNoAnchors		: "&lt;V tem dokumentu ni zaznamkov&gt;",
+DlgLnkEMail			: "Elektronski naslov",
+DlgLnkEMailSubject	: "Predmet sporočila",
+DlgLnkEMailBody		: "Vsebina sporočila",
+DlgLnkUpload		: "Prenesi",
+DlgLnkBtnUpload		: "Pošlji na strežnik",
+
+DlgLnkTarget		: "Cilj",
+DlgLnkTargetFrame	: "&lt;okvir&gt;",
+DlgLnkTargetPopup	: "&lt;pojavno okno&gt;",
+DlgLnkTargetBlank	: "Novo okno (_blank)",
+DlgLnkTargetParent	: "Starševsko okno (_parent)",
+DlgLnkTargetSelf	: "Isto okno (_self)",
+DlgLnkTargetTop		: "Najvišje okno (_top)",
+DlgLnkTargetFrameName	: "Ime ciljnega okvirja",
+DlgLnkPopWinName	: "Ime pojavnega okna",
+DlgLnkPopWinFeat	: "Značilnosti pojavnega okna",
+DlgLnkPopResize		: "Spremenljive velikosti",
+DlgLnkPopLocation	: "Naslovna vrstica",
+DlgLnkPopMenu		: "Menijska vrstica",
+DlgLnkPopScroll		: "Drsniki",
+DlgLnkPopStatus		: "Vrstica stanja",
+DlgLnkPopToolbar	: "Orodna vrstica",
+DlgLnkPopFullScrn	: "Celozaslonska slika (IE)",
+DlgLnkPopDependent	: "Podokno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Višina",
+DlgLnkPopLeft		: "Lega levo",
+DlgLnkPopTop		: "Lega na vrhu",
+
+DlnLnkMsgNoUrl		: "Vnesite URL povezave",
+DlnLnkMsgNoEMail	: "Vnesite elektronski naslov",
+DlnLnkMsgNoAnchor	: "Izberite zaznamek",
+
+// Color Dialog
+DlgColorTitle		: "Izberite barvo",
+DlgColorBtnClear	: "Počisti",
+DlgColorHighlight	: "Označi",
+DlgColorSelected	: "Izbrano",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vstavi smeška",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Izberi posebni znak",
+
+// Table Dialog
+DlgTableTitle		: "Lastnosti tabele",
+DlgTableRows		: "Vrstice",
+DlgTableColumns		: "Stolpci",
+DlgTableBorder		: "Velikost obrobe",
+DlgTableAlign		: "Poravnava",
+DlgTableAlignNotSet	: "<Ni nastavljeno>",
+DlgTableAlignLeft	: "Levo",
+DlgTableAlignCenter	: "Sredinsko",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "pik",
+DlgTableWidthPc		: "procentov",
+DlgTableHeight		: "Višina",
+DlgTableCellSpace	: "Razmik med celicami",
+DlgTableCellPad		: "Polnilo med celicami",
+DlgTableCaption		: "Naslov",
+
+// Table Cell Dialog
+DlgCellTitle		: "Lastnosti celice",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "pik",
+DlgCellWidthPc		: "procentov",
+DlgCellHeight		: "Višina",
+DlgCellWordWrap		: "Pomikanje besedila",
+DlgCellWordWrapNotSet	: "<Ni nastavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravna poravnava",
+DlgCellHorAlignNotSet	: "<Ni nastavljeno>",
+DlgCellHorAlignLeft	: "Levo",
+DlgCellHorAlignCenter	: "Sredinsko",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Navpična poravnava",
+DlgCellVerAlignNotSet	: "<Ni nastavljeno>",
+DlgCellVerAlignTop	: "Na vrh",
+DlgCellVerAlignMiddle	: "V sredino",
+DlgCellVerAlignBottom	: "Na dno",
+DlgCellVerAlignBaseline	: "Na osnovno črto",
+DlgCellRowSpan		: "Spojenih vrstic (row-span)",
+DlgCellCollSpan		: "Spojenih stolpcev (col-span)",
+DlgCellBackColor	: "Barva ozadja",
+DlgCellBorderColor	: "Barva obrobe",
+DlgCellBtnSelect	: "Izberi...",
+
+// Find Dialog
+DlgFindTitle		: "Najdi",
+DlgFindFindBtn		: "Najdi",
+DlgFindNotFoundMsg	: "Navedeno besedilo ni bilo najdeno.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamenjaj",
+DlgReplaceFindLbl		: "Najdi:",
+DlgReplaceReplaceLbl	: "Zamenjaj z:",
+DlgReplaceCaseChk		: "Razlikuj velike in male črke",
+DlgReplaceReplaceBtn	: "Zamenjaj",
+DlgReplaceReplAllBtn	: "Zamenjaj vse",
+DlgReplaceWordChk		: "Samo cele besede",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega lepljenja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+V).",
+PasteErrorCut	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).",
+PasteErrorCopy	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).",
+
+PasteAsText		: "Prilepi kot golo besedilo",
+PasteFromWord	: "Prilepi iz Worda",
+
+DlgPasteMsg2	: "Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.",
+DlgPasteIgnoreFont		: "Prezri obliko pisave",
+DlgPasteRemoveStyles	: "Odstrani nastavitve stila",
+DlgPasteCleanBox		: "Počisti okvir",
+
+
+// Color Picker
+ColorAutomatic	: "Samodejno",
+ColorMoreColors	: "Več barv...",
+
+// Document Properties
+DocProps		: "Lastnosti dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Lastnosti zaznamka",
+DlgAnchorName		: "Ime zaznamka",
+DlgAnchorErrorName	: "Prosim vnesite ime zaznamka",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ni v slovarju",
+DlgSpellChangeTo		: "Spremeni v",
+DlgSpellBtnIgnore		: "Prezri",
+DlgSpellBtnIgnoreAll	: "Prezri vse",
+DlgSpellBtnReplace		: "Zamenjaj",
+DlgSpellBtnReplaceAll	: "Zamenjaj vse",
+DlgSpellBtnUndo			: "Razveljavi",
+DlgSpellNoSuggestions	: "- Ni predlogov -",
+DlgSpellProgress		: "Preverjanje črkovanja se izvaja...",
+DlgSpellNoMispell		: "Črkovanje je končano: Brez napak",
+DlgSpellNoChanges		: "Črkovanje je končano: Nobena beseda ni bila spremenjena",
+DlgSpellOneChange		: "Črkovanje je končano: Spremenjena je bila ena beseda",
+DlgSpellManyChanges		: "Črkovanje je končano: Spremenjenih je bilo %1 besed",
+
+IeSpellDownload			: "Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?",
+
+// Button Dialog
+DlgButtonText	: "Besedilo (Vrednost)",
+DlgButtonType	: "Tip",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ime",
+DlgCheckboxValue	: "Vrednost",
+DlgCheckboxSelected	: "Izbrano",
+
+// Form Dialog
+DlgFormName		: "Ime",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Ime",
+DlgSelectValue		: "Vrednost",
+DlgSelectSize		: "Velikost",
+DlgSelectLines		: "vrstic",
+DlgSelectChkMulti	: "Dovoli izbor večih vrstic",
+DlgSelectOpAvail	: "Razpoložljive izbire",
+DlgSelectOpText		: "Besedilo",
+DlgSelectOpValue	: "Vrednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Spremeni",
+DlgSelectBtnUp		: "Gor",
+DlgSelectBtnDown	: "Dol",
+DlgSelectBtnSetValue : "Postavi kot privzeto izbiro",
+DlgSelectBtnDelete	: "Izbriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Ime",
+DlgTextareaCols	: "Stolpcev",
+DlgTextareaRows	: "Vrstic",
+
+// Text Field Dialog
+DlgTextName			: "Ime",
+DlgTextValue		: "Vrednost",
+DlgTextCharWidth	: "Dolžina",
+DlgTextMaxChars		: "Največje število znakov",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Besedilo",
+DlgTextTypePass		: "Geslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ime",
+DlgHiddenValue	: "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Lastnosti označenega seznama",
+NumberedListProp	: "Lastnosti oštevilčenega seznama",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Pikica",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadratek",
+DlgLstTypeNumbers	: "Številke (1, 2, 3)",
+DlgLstTypeLCase		: "Male črke (a, b, c)",
+DlgLstTypeUCase		: "Velike črke (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske številke (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske številke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Splošno",
+DlgDocBackTab		: "Ozadje",
+DlgDocColorsTab		: "Barve in zamiki",
+DlgDocMetaTab		: "Meta podatki",
+
+DlgDocPageTitle		: "Naslov strani",
+DlgDocLangDir		: "Smer jezika",
+DlgDocLangDirLTR	: "Od leve proti desni (LTR)",
+DlgDocLangDirRTL	: "Od desne proti levi (RTL)",
+DlgDocLangCode		: "Oznaka jezika",
+DlgDocCharSet		: "Kodna tabela",
+DlgDocCharSetOther	: "Druga kodna tabela",
+
+DlgDocDocType		: "Glava tipa dokumenta",
+DlgDocDocTypeOther	: "Druga glava tipa dokumenta",
+DlgDocIncXHTML		: "Vstavi XHTML deklaracije",
+DlgDocBgColor		: "Barva ozadja",
+DlgDocBgImage		: "URL slike za ozadje",
+DlgDocBgNoScroll	: "Nepremično ozadje",
+DlgDocCText			: "Besedilo",
+DlgDocCLink			: "Povezava",
+DlgDocCVisited		: "Obiskana povezava",
+DlgDocCActive		: "Aktivna povezava",
+DlgDocMargins		: "Zamiki strani",
+DlgDocMaTop			: "Na vrhu",
+DlgDocMaLeft		: "Levo",
+DlgDocMaRight		: "Desno",
+DlgDocMaBottom		: "Spodaj",
+DlgDocMeIndex		: "Ključne besede (ločene z vejicami)",
+DlgDocMeDescr		: "Opis strani",
+DlgDocMeAuthor		: "Avtor",
+DlgDocMeCopy		: "Avtorske pravice",
+DlgDocPreview		: "Predogled",
+
+// Templates Dialog
+Templates			: "Predloge",
+DlgTemplatesTitle	: "Vsebinske predloge",
+DlgTemplatesSelMsg	: "Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):",
+DlgTemplatesLoading	: "Nalagam seznam predlog. Prosim počakajte...",
+DlgTemplatesNoTpl	: "(Ni pripravljenih predlog)",
+
+// About Dialog
+DlgAboutAboutTab	: "Vizitka",
+DlgAboutBrowserInfoTab	: "Informacije o brskalniku",
+DlgAboutVersion		: "različica",
+DlgAboutLicense		: "Pravica za uporabo pod pogoji GNU Lesser General Public License",
+DlgAboutInfo		: "Za več informacij obiščite"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/sr.js 1.4.0sr5-1/fckeditor/editor/lang/sr.js
--- 1.3.11sr1/fckeditor/editor/lang/sr.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/sr.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: sr.js
+ * 	Serbian (Cyrillic) language file.
+ * 
+ * File Authors:
+ * 		Zoran Subić (zoran@tf.zr.ac.yu)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Смањи линију са алаткама",
+ToolbarExpand		: "Прошири линију са алаткама",
+
+// Toolbar Items and Context Menu
+Save				: "Сачувај",
+NewPage				: "Нова страница",
+Preview				: "Изглед странице",
+Cut					: "Исеци",
+Copy				: "Копирај",
+Paste				: "Залепи",
+PasteText			: "Залепи као неформатиран текст",
+PasteWord			: "Залепи из Worda",
+Print				: "Штампа",
+SelectAll			: "Означи све",
+RemoveFormat		: "Уклони форматирање",
+InsertLinkLbl		: "Линк",
+InsertLink			: "Унеси/измени линк",
+RemoveLink			: "Уклони линк",
+Anchor				: "Унеси/измени сидро",
+InsertImageLbl		: "Слика",
+InsertImage			: "Унеси/измени слику",
+InsertFlashLbl		: "Флеш елемент",
+InsertFlash			: "Унеси/измени флеш",
+InsertTableLbl		: "Табела",
+InsertTable			: "Унеси/измени табелу",
+InsertLineLbl		: "Линија",
+InsertLine			: "Унеси хоризонталну линију",
+InsertSpecialCharLbl: "Специјални карактери",
+InsertSpecialChar	: "Унеси специјални карактер",
+InsertSmileyLbl		: "Смајли",
+InsertSmiley		: "Унеси смајлија",
+About				: "О ФЦКедитору",
+Bold				: "Подебљано",
+Italic				: "Курзив",
+Underline			: "Подвучено",
+StrikeThrough		: "Прецртано",
+Subscript			: "Индекс",
+Superscript			: "Степен",
+LeftJustify			: "Лево равнање",
+CenterJustify		: "Центриран текст",
+RightJustify		: "Десно равнање",
+BlockJustify		: "Обострано равнање",
+DecreaseIndent		: "Смањи леву маргину",
+IncreaseIndent		: "Увећај леву маргину",
+Undo				: "Поништи акцију",
+Redo				: "Понови акцију",
+NumberedListLbl		: "Набројиву листу",
+NumberedList		: "Унеси/уклони набројиву листу",
+BulletedListLbl		: "Ненабројива листа",
+BulletedList		: "Унеси/уклони ненабројиву листу",
+ShowTableBorders	: "Прикажи оквир табеле",
+ShowDetails			: "Прикажи детаље",
+Style				: "Стил",
+FontFormat			: "Формат",
+Font				: "Фонт",
+FontSize			: "Величина фонта",
+TextColor			: "Боја текста",
+BGColor				: "Боја позадине",
+Source				: "K&ocirc;д",
+Find				: "Претрага",
+Replace				: "Замена",
+SpellCheck			: "Провери спеловање",
+UniversalKeyboard	: "Универзална тастатура",
+
+Form			: "Форма",
+Checkbox		: "Поље за потврду",
+RadioButton		: "Радио-дугме",
+TextField		: "Текстуално поље",
+Textarea		: "Зона текста",
+HiddenField		: "Скривено поље",
+Button			: "Дугме",
+SelectionField	: "Изборно поље",
+ImageButton		: "Дугме са сликом",
+
+// Context Menu
+EditLink			: "Промени линк",
+InsertRow			: "Унеси ред",
+DeleteRows			: "Обриши редове",
+InsertColumn		: "Унеси колону",
+DeleteColumns		: "Обриши колоне",
+InsertCell			: "Унеси ћелије",
+DeleteCells			: "Обриши ћелије",
+MergeCells			: "Спој ћелије",
+SplitCell			: "Раздвоји ћелије",
+CellProperties		: "Особине ћелије",
+TableProperties		: "Особине табеле",
+ImageProperties		: "Особине слике",
+FlashProperties		: "Особине Флеша",
+
+AnchorProp			: "Особине сидра",
+ButtonProp			: "Особине дугмета",
+CheckboxProp		: "Особине поља за потврду",
+HiddenFieldProp		: "Особине скривеног поља",
+RadioButtonProp		: "Особине радио-дугмета",
+ImageButtonProp		: "Особине дугмета са сликом",
+TextFieldProp		: "Особине текстуалног поља",
+SelectionFieldProp	: "Особине изборног поља",
+TextareaProp		: "Особине зоне текста",
+FormProp			: "Особине форме",
+
+FontFormats			: "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обрађујем XHTML. Maлo стрпљења...",
+Done				: "Завршио",
+PasteWordConfirm	: "Текст који желите да налепите копиран је из Worda. Да ли желите да буде очишћен од формата пре лепљења?",
+NotCompatiblePaste	: "Ова команда је доступна само за Интернет Екплорер од верзије 5.5. Да ли желите да налепим текст без чишћења?",
+UnknownToolbarItem	: "Непозната ставка toolbara \"%1\"",
+UnknownCommand		: "Непозната наредба \"%1\"",
+NotImplemented		: "Наредба није имплементирана",
+UnknownToolbarSet	: "Toolbar \"%1\" не постоји",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Oткажи",
+DlgBtnClose			: "Затвори",
+DlgBtnBrowseServer	: "Претражи сервер",
+DlgAdvancedTag		: "Напредни тагови",
+DlgOpOther			: "&lt;Остали&gt;",
+DlgInfoTab			: "Инфо",
+DlgAlertUrl			: "Молимо Вас, унесите УРЛ",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;није постављено&gt;",
+DlgGenId			: "Ид",
+DlgGenLangDir		: "Смер језика",
+DlgGenLangDirLtr	: "С лева на десно (LTR)",
+DlgGenLangDirRtl	: "С десна на лево (RTL)",
+DlgGenLangCode		: "K&ocirc;д језика",
+DlgGenAccessKey		: "Приступни тастер",
+DlgGenName			: "Назив",
+DlgGenTabIndex		: "Таб индекс",
+DlgGenLongDescr		: "Пун опис УРЛ",
+DlgGenClass			: "Stylesheet класе",
+DlgGenTitle			: "Advisory наслов",
+DlgGenContType		: "Advisory врста садржаја",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Стил",
+
+// Image Dialog
+DlgImgTitle			: "Особине слика",
+DlgImgInfoTab		: "Инфо слике",
+DlgImgBtnUpload		: "Пошаљи на сервер",
+DlgImgURL			: "УРЛ",
+DlgImgUpload		: "Пошаљи",
+DlgImgAlt			: "Алтернативни текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Висина",
+DlgImgLockRatio		: "Закључај однос",
+DlgBtnResetSize		: "Ресетуј величину",
+DlgImgBorder		: "Оквир",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Равнање",
+DlgImgAlignLeft		: "Лево",
+DlgImgAlignAbsBottom: "Abs доле",
+DlgImgAlignAbsMiddle: "Abs средина",
+DlgImgAlignBaseline	: "Базно",
+DlgImgAlignBottom	: "Доле",
+DlgImgAlignMiddle	: "Средина",
+DlgImgAlignRight	: "Десно",
+DlgImgAlignTextTop	: "Врх текста",
+DlgImgAlignTop		: "Врх",
+DlgImgPreview		: "Изглед",
+DlgImgAlertUrl		: "Унесите УРЛ слике",
+DlgImgLinkTab		: "Линк",
+
+// Flash Dialog
+DlgFlashTitle		: "Особине флеша",
+DlgFlashChkPlay		: "Аутоматски старт",
+DlgFlashChkLoop		: "Понављај",
+DlgFlashChkMenu		: "Укључи флеш мени",
+DlgFlashScale		: "Скалирај",
+DlgFlashScaleAll	: "Прикажи све",
+DlgFlashScaleNoBorder	: "Без ивице",
+DlgFlashScaleFit	: "Попуни површину",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Линк",
+DlgLnkInfoTab		: "Линк инфо",
+DlgLnkTargetTab		: "Мета",
+
+DlgLnkType			: "Врста линка",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Сидро на овој страници",
+DlgLnkTypeEMail		: "Eлектронска пошта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "&lt;друго&gt;",
+DlgLnkURL			: "УРЛ",
+DlgLnkAnchorSel		: "Одабери сидро",
+DlgLnkAnchorByName	: "По називу сидра",
+DlgLnkAnchorById	: "Пo Ид-jу елемента",
+DlgLnkNoAnchors		: "&lt;Нема доступних сидра&gt;",
+DlgLnkEMail			: "Адреса електронске поште",
+DlgLnkEMailSubject	: "Наслов",
+DlgLnkEMailBody		: "Садржај поруке",
+DlgLnkUpload		: "Пошаљи",
+DlgLnkBtnUpload		: "Пошаљи на сервер",
+
+DlgLnkTarget		: "Meтa",
+DlgLnkTargetFrame	: "&lt;оквир&gt;",
+DlgLnkTargetPopup	: "&lt;искачући прозор&gt;",
+DlgLnkTargetBlank	: "Нови прозор (_blank)",
+DlgLnkTargetParent	: "Родитељски прозор (_parent)",
+DlgLnkTargetSelf	: "Исти прозор (_self)",
+DlgLnkTargetTop		: "Прозор на врху (_top)",
+DlgLnkTargetFrameName	: "Назив одредишног фрејма",
+DlgLnkPopWinName	: "Назив искачућег прозора",
+DlgLnkPopWinFeat	: "Могућности искачућег прозора",
+DlgLnkPopResize		: "Променљива величина",
+DlgLnkPopLocation	: "Локација",
+DlgLnkPopMenu		: "Контекстни мени",
+DlgLnkPopScroll		: "Скрол бар",
+DlgLnkPopStatus		: "Статусна линија",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Приказ преко целог екрана (ИE)",
+DlgLnkPopDependent	: "Зависно (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Висина",
+DlgLnkPopLeft		: "Од леве ивице екрана (пиксела)",
+DlgLnkPopTop		: "Од врха екрана (пиксела)",
+
+DlnLnkMsgNoUrl		: "Унесите УРЛ линка",
+DlnLnkMsgNoEMail	: "Откуцајте адресу електронске поште",
+DlnLnkMsgNoAnchor	: "Одаберите сидро",
+
+// Color Dialog
+DlgColorTitle		: "Одаберите боју",
+DlgColorBtnClear	: "Обриши",
+DlgColorHighlight	: "Посветли",
+DlgColorSelected	: "Одабери",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Унеси смајлија",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Одаберите специјални карактер",
+
+// Table Dialog
+DlgTableTitle		: "Особине табеле",
+DlgTableRows		: "Редова",
+DlgTableColumns		: "Kолона",
+DlgTableBorder		: "Величина оквира",
+DlgTableAlign		: "Равнање",
+DlgTableAlignNotSet	: "<није постављено>",
+DlgTableAlignLeft	: "Лево",
+DlgTableAlignCenter	: "Средина",
+DlgTableAlignRight	: "Десно",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пиксела",
+DlgTableWidthPc		: "процената",
+DlgTableHeight		: "Висина",
+DlgTableCellSpace	: "Ћелијски простор",
+DlgTableCellPad		: "Размак ћелија",
+DlgTableCaption		: "Наслов табеле",
+
+// Table Cell Dialog
+DlgCellTitle		: "Особине ћелије",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пиксела",
+DlgCellWidthPc		: "процената",
+DlgCellHeight		: "Висина",
+DlgCellWordWrap		: "Дељење речи",
+DlgCellWordWrapNotSet	: "<није постављено>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "Не",
+DlgCellHorAlign		: "Водоравно равнање",
+DlgCellHorAlignNotSet	: "<није постављено>",
+DlgCellHorAlignLeft	: "Лево",
+DlgCellHorAlignCenter	: "Средина",
+DlgCellHorAlignRight: "Десно",
+DlgCellVerAlign		: "Вертикално равнање",
+DlgCellVerAlignNotSet	: "<није постављено>",
+DlgCellVerAlignTop	: "Горње",
+DlgCellVerAlignMiddle	: "Средина",
+DlgCellVerAlignBottom	: "Доње",
+DlgCellVerAlignBaseline	: "Базно",
+DlgCellRowSpan		: "Спајање редова",
+DlgCellCollSpan		: "Спајање колона",
+DlgCellBackColor	: "Боја позадине",
+DlgCellBorderColor	: "Боја оквира",
+DlgCellBtnSelect	: "Oдабери...",
+
+// Find Dialog
+DlgFindTitle		: "Пронађи",
+DlgFindFindBtn		: "Пронађи",
+DlgFindNotFoundMsg	: "Тражени текст није пронађен.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замени",
+DlgReplaceFindLbl		: "Пронађи:",
+DlgReplaceReplaceLbl	: "Замени са:",
+DlgReplaceCaseChk		: "Разликуј велика и мала слова",
+DlgReplaceReplaceBtn	: "Замени",
+DlgReplaceReplAllBtn	: "Замени све",
+DlgReplaceWordChk		: "Упореди целе речи",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског лепљења текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+V).",
+PasteErrorCut	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+X).",
+PasteErrorCopy	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+C).",
+
+PasteAsText		: "Залепи као чист текст",
+PasteFromWord	: "Залепи из Worda",
+
+DlgPasteMsg2	: "Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Игнориши Font Face дефиниције",
+DlgPasteRemoveStyles	: "Уклони дефиниције стилова",
+DlgPasteCleanBox		: "Обриши све",
+
+
+// Color Picker
+ColorAutomatic	: "Аутоматски",
+ColorMoreColors	: "Више боја...",
+
+// Document Properties
+DocProps		: "Особине документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Особине сидра",
+DlgAnchorName		: "Име сидра",
+DlgAnchorErrorName	: "Молимо Вас да унесете име сидра",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Није у речнику",
+DlgSpellChangeTo		: "Измени",
+DlgSpellBtnIgnore		: "Игнориши",
+DlgSpellBtnIgnoreAll	: "Игнориши све",
+DlgSpellBtnReplace		: "Замени",
+DlgSpellBtnReplaceAll	: "Замени све",
+DlgSpellBtnUndo			: "Врати акцију",
+DlgSpellNoSuggestions	: "- Без сугестија -",
+DlgSpellProgress		: "Провера спеловања у току...",
+DlgSpellNoMispell		: "Провера спеловања завршена: грешке нису пронађене",
+DlgSpellNoChanges		: "Провера спеловања завршена: Није измењена ниједна реч",
+DlgSpellOneChange		: "Провера спеловања завршена: Измењена је једна реч",
+DlgSpellManyChanges		: "Провера спеловања завршена:  %1 реч(и) је измењено",
+
+IeSpellDownload			: "Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?",
+
+// Button Dialog
+DlgButtonText	: "Текст (вредност)",
+DlgButtonType	: "Tип",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Назив",
+DlgCheckboxValue	: "Вредност",
+DlgCheckboxSelected	: "Означено",
+
+// Form Dialog
+DlgFormName		: "Назив",
+DlgFormAction	: "Aкција",
+DlgFormMethod	: "Mетода",
+
+// Select Field Dialog
+DlgSelectName		: "Назив",
+DlgSelectValue		: "Вредност",
+DlgSelectSize		: "Величина",
+DlgSelectLines		: "линија",
+DlgSelectChkMulti	: "Дозволи вишеструку селекцију",
+DlgSelectOpAvail	: "Доступне опције",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Вредност",
+DlgSelectBtnAdd		: "Додај",
+DlgSelectBtnModify	: "Измени",
+DlgSelectBtnUp		: "Горе",
+DlgSelectBtnDown	: "Доле",
+DlgSelectBtnSetValue : "Подеси као означену вредност",
+DlgSelectBtnDelete	: "Обриши",
+
+// Textarea Dialog
+DlgTextareaName	: "Назив",
+DlgTextareaCols	: "Број колона",
+DlgTextareaRows	: "Број редова",
+
+// Text Field Dialog
+DlgTextName			: "Назив",
+DlgTextValue		: "Вредност",
+DlgTextCharWidth	: "Ширина (карактера)",
+DlgTextMaxChars		: "Максимално карактера",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Лозинка",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Назив",
+DlgHiddenValue	: "Вредност",
+
+// Bulleted List Dialog
+BulletedListProp	: "Особине Bulleted листе",
+NumberedListProp	: "Особине набројиве листе",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Круг",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Бројеви (1, 2, 3)",
+DlgLstTypeLCase		: "мала слова (a, b, c)",
+DlgLstTypeUCase		: "ВЕЛИКА СЛОВА (A, B, C)",
+DlgLstTypeSRoman	: "Мале римске цифре (i, ii, iii)",
+DlgLstTypeLRoman	: "Велике римске цифре (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Опште особине",
+DlgDocBackTab		: "Позадина",
+DlgDocColorsTab		: "Боје и маргине",
+DlgDocMetaTab		: "Метаподаци",
+
+DlgDocPageTitle		: "Наслов странице",
+DlgDocLangDir		: "Смер језика",
+DlgDocLangDirLTR	: "Слева надесно (LTR)",
+DlgDocLangDirRTL	: "Здесна налево (RTL)",
+DlgDocLangCode		: "Шифра језика",
+DlgDocCharSet		: "Кодирање скупа карактера",
+DlgDocCharSetOther	: "Остала кодирања скупа карактера",
+
+DlgDocDocType		: "Заглавље типа документа",
+DlgDocDocTypeOther	: "Остала заглавља типа документа",
+DlgDocIncXHTML		: "Улључи XHTML декларације",
+DlgDocBgColor		: "Боја позадине",
+DlgDocBgImage		: "УРЛ позадинске слике",
+DlgDocBgNoScroll	: "Фиксирана позадина",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Линк",
+DlgDocCVisited		: "Посећени линк",
+DlgDocCActive		: "Активни линк",
+DlgDocMargins		: "Маргине странице",
+DlgDocMaTop			: "Горња",
+DlgDocMaLeft		: "Лева",
+DlgDocMaRight		: "Десна",
+DlgDocMaBottom		: "Доња",
+DlgDocMeIndex		: "Кључне речи за индексирање документа (раздвојене зарезом)",
+DlgDocMeDescr		: "Опис документа",
+DlgDocMeAuthor		: "Аутор",
+DlgDocMeCopy		: "Ауторска права",
+DlgDocPreview		: "Изглед странице",
+
+// Templates Dialog
+Templates			: "Обрасци",
+DlgTemplatesTitle	: "Обрасци за садржај",
+DlgTemplatesSelMsg	: "Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):",
+DlgTemplatesLoading	: "Учитавам листу образаца. Мало стрпљења...",
+DlgTemplatesNoTpl	: "(Нема дефинисаних образаца)",
+
+// About Dialog
+DlgAboutAboutTab	: "О едитору",
+DlgAboutBrowserInfoTab	: "Информације о претраживачу",
+DlgAboutVersion		: "верзија",
+DlgAboutLicense		: "Лиценцирано под условима GNU Lesser General Public License",
+DlgAboutInfo		: "За више информација посетите"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/sr-latn.js 1.4.0sr5-1/fckeditor/editor/lang/sr-latn.js
--- 1.3.11sr1/fckeditor/editor/lang/sr-latn.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/sr-latn.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: sr-latn.js
+ * 	Serbian (Latin) language file.
+ * 
+ * File Authors:
+ * 		Zoran Subic (zoran@tf.zr.ac.yu)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Smanji liniju sa alatkama",
+ToolbarExpand		: "Proiri liniju sa alatkama",
+
+// Toolbar Items and Context Menu
+Save				: "Sačuvaj",
+NewPage				: "Nova stranica",
+Preview				: "Izgled stranice",
+Cut					: "Iseci",
+Copy				: "Kopiraj",
+Paste				: "Zalepi",
+PasteText			: "Zalepi kao neformatiran tekst",
+PasteWord			: "Zalepi iz Worda",
+Print				: "Štampa",
+SelectAll			: "Označi sve",
+RemoveFormat		: "Ukloni formatiranje",
+InsertLinkLbl		: "Link",
+InsertLink			: "Unesi/izmeni link",
+RemoveLink			: "Ukloni link",
+Anchor				: "Unesi/izmeni sidro",
+InsertImageLbl		: "Slika",
+InsertImage			: "Unesi/izmeni sliku",
+InsertFlashLbl		: "Fleš",
+InsertFlash			: "Unesi/izmeni fleš",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Unesi/izmeni tabelu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Unesi horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakteri",
+InsertSpecialChar	: "Unesi specijalni karakter",
+InsertSmileyLbl		: "Smajli",
+InsertSmiley		: "Unesi smajlija",
+About				: "O FCKeditoru",
+Bold				: "Podebljano",
+Italic				: "Kurziv",
+Underline			: "Podvučeno",
+StrikeThrough		: "Precrtano",
+Subscript			: "Indeks",
+Superscript			: "Stepen",
+LeftJustify			: "Levo ravnanje",
+CenterJustify		: "Centriran tekst",
+RightJustify		: "Desno ravnanje",
+BlockJustify		: "Obostrano ravnanje",
+DecreaseIndent		: "Smanji levu marginu",
+IncreaseIndent		: "Uvećaj levu marginu",
+Undo				: "Poni�ti akciju",
+Redo				: "Ponovi akciju",
+NumberedListLbl		: "Nabrojiva lista",
+NumberedList		: "Unesi/ukloni nabrojivu listu",
+BulletedListLbl		: "Nenabrojiva lista",
+BulletedList		: "Unesi/ukloni nenabrojivu listu",
+ShowTableBorders	: "Prikaži okvir tabele",
+ShowDetails			: "Prikaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Veličina fonta",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "K&ocirc;d",
+Find				: "Pretraga",
+Replace				: "Zamena",
+SpellCheck			: "Proveri spelovanje",
+UniversalKeyboard	: "Univerzalna tastatura",
+
+Form			: "Forma",
+Checkbox		: "Polje za potvrdu",
+RadioButton		: "Radio-dugme",
+TextField		: "Tekstualno polje",
+Textarea		: "Zona teksta",
+HiddenField		: "Skriveno polje",
+Button			: "Dugme",
+SelectionField	: "Izborno polje",
+ImageButton		: "Dugme sa slikom",
+
+// Context Menu
+EditLink			: "Izmeni link",
+InsertRow			: "Unesi red",
+DeleteRows			: "Obriši redove",
+InsertColumn		: "Unesi kolonu",
+DeleteColumns		: "Obriši kolone",
+InsertCell			: "Unesi ćelije",
+DeleteCells			: "Obriši ćelije",
+MergeCells			: "Spoj celije",
+SplitCell			: "Razdvoji celije",
+CellProperties		: "Osobine celije",
+TableProperties		: "Osobine tabele",
+ImageProperties		: "Osobine slike",
+FlashProperties		: "Osobine fleša",
+
+AnchorProp			: "Osobine sidra",
+ButtonProp			: "Osobine dugmeta",
+CheckboxProp		: "Osobine polja za potvrdu",
+HiddenFieldProp		: "Osobine skrivenog polja",
+RadioButtonProp		: "Osobine radio-dugmeta",
+ImageButtonProp		: "Osobine dugmeta sa slikom",
+TextFieldProp		: "Osobine tekstualnog polja",
+SelectionFieldProp	: "Osobine izbornog polja",
+TextareaProp		: "Osobine zone teksta",
+FormProp			: "Osobine forme",
+
+FontFormats			: "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obradujem XHTML. Malo strpljenja...",
+Done				: "Završio",
+PasteWordConfirm	: "Tekst koji želite da nalepite kopiran je iz Worda. Da li želite da bude očišćen od formata pre lepljenja?",
+NotCompatiblePaste	: "Ova komanda je dostupna samo za Internet Explorer od verzije 5.5. Da li želite da nalepim tekst bez čišćenja?",
+UnknownToolbarItem	: "Nepoznata stavka toolbara \"%1\"",
+UnknownCommand		: "Nepoznata naredba \"%1\"",
+NotImplemented		: "Naredba nije implementirana",
+UnknownToolbarSet	: "Toolbar \"%1\" ne postoji",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Otkaži",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Pretraži server",
+DlgAdvancedTag		: "Napredni tagovi",
+DlgOpOther			: "&lt;Ostali&gt;",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Molimo Vas, unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;nije postavljeno&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smer jezika",
+DlgGenLangDirLtr	: "S leva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na levo (RTL)",
+DlgGenLangCode		: "K&ocirc;d jezika",
+DlgGenAccessKey		: "Pristupni taster",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Pun opis URL",
+DlgGenClass			: "Stylesheet klase",
+DlgGenTitle			: "Advisory naslov",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Osobine slika",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Pošalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošalji",
+DlgImgAlt			: "Alternativni tekst",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zaključaj odnos",
+DlgBtnResetSize		: "Resetuj veličinu",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Ravnanje",
+DlgImgAlignLeft		: "Levo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dole",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Izgled",
+DlgImgAlertUrl		: "Unesite URL slike",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Osobine fleša",
+DlgFlashChkPlay		: "Automatski start",
+DlgFlashChkLoop		: "Ponavljaj",
+DlgFlashChkMenu		: "Uključi fleš meni",
+DlgFlashScale		: "Skaliraj",
+DlgFlashScaleAll	: "Prikaži sve",
+DlgFlashScaleNoBorder	: "Bez ivice",
+DlgFlashScaleFit	: "Popuni površinu",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Meta",
+
+DlgLnkType			: "Vrsta linka",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;drugo&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Odaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id-ju elementa",
+DlgLnkNoAnchors		: "&lt;Nema dostupnih sidra&gt;",
+DlgLnkEMail			: "E-Mail adresa",
+DlgLnkEMailSubject	: "Naslov",
+DlgLnkEMailBody		: "Sadržaj poruke",
+DlgLnkUpload		: "Pošalji",
+DlgLnkBtnUpload		: "Pošalji na server",
+
+DlgLnkTarget		: "Meta",
+DlgLnkTargetFrame	: "&lt;okvir&gt;",
+DlgLnkTargetPopup	: "&lt;popup prozor&gt;",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Prozor na vrhu (_top)",
+DlgLnkTargetFrameName	: "Naziv odredišnog frejma",
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Mogućnosti popup prozora",
+DlgLnkPopResize		: "Promenljiva velicina",
+DlgLnkPopLocation	: "Lokacija",
+DlgLnkPopMenu		: "Kontekstni meni",
+DlgLnkPopScroll		: "Scroll bar",
+DlgLnkPopStatus		: "Statusna linija",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Prikaz preko celog ekrana (IE)",
+DlgLnkPopDependent	: "Zavisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Od leve ivice ekrana (px)",
+DlgLnkPopTop		: "Od vrha ekrana (px)",
+
+DlnLnkMsgNoUrl		: "Unesite URL linka",
+DlnLnkMsgNoEMail	: "Otkucajte adresu elektronske pote",
+DlnLnkMsgNoAnchor	: "Odaberite sidro",
+
+// Color Dialog
+DlgColorTitle		: "Odaberite boju",
+DlgColorBtnClear	: "Obriši",
+DlgColorHighlight	: "Posvetli",
+DlgColorSelected	: "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Unesi smajlija",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Odaberite specijalni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Osobine tabele",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Veličina okvira",
+DlgTableAlign		: "Ravnanje",
+DlgTableAlignNotSet	: "&lt;nije postavljeno&gt;",
+DlgTableAlignLeft	: "Levo",
+DlgTableAlignCenter	: "Sredina",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "procenata",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Ćelijski prostor",
+DlgTableCellPad		: "Razmak ćelija",
+DlgTableCaption		: "Naslov tabele",
+
+// Table Cell Dialog
+DlgCellTitle		: "Osobine ćelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "procenata",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Deljenje reči",
+DlgCellWordWrapNotSet	: "&lt;nije postavljeno&gt;",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravno ravnanje",
+DlgCellHorAlignNotSet	: "&lt;nije postavljeno&gt;",
+DlgCellHorAlignLeft	: "Levo",
+DlgCellHorAlignCenter	: "Sredina",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Vertikalno ravnanje",
+DlgCellVerAlignNotSet	: "&lt;nije postavljeno&gt;",
+DlgCellVerAlignTop	: "Gornje",
+DlgCellVerAlignMiddle	: "Sredina",
+DlgCellVerAlignBottom	: "Donje",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje redova",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Odaberi...",
+
+// Find Dialog
+DlgFindTitle		: "Pronađi",
+DlgFindFindBtn		: "Pronađi",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zameni",
+DlgReplaceFindLbl		: "Pronadi:",
+DlgReplaceReplaceLbl	: "Zameni sa:",
+DlgReplaceCaseChk		: "Razlikuj mala i velika slova",
+DlgReplaceReplaceBtn	: "Zameni",
+DlgReplaceReplAllBtn	: "Zameni sve",
+DlgReplaceWordChk		: "Uporedi cele reci",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog lepljenja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+V).",
+PasteErrorCut	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+C).",
+
+PasteAsText		: "Zalepi kao čist tekst",
+PasteFromWord	: "Zalepi iz Worda",
+
+DlgPasteMsg2	: "Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignoriši definicije fontova",
+DlgPasteRemoveStyles	: "Ukloni definicije stilova",
+DlgPasteCleanBox		: "Obriši sve",
+
+
+// Color Picker
+ColorAutomatic	: "Automatski",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Osobine dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Osobine sidra",
+DlgAnchorName		: "Ime sidra",
+DlgAnchorErrorName	: "Unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nije u rečniku",
+DlgSpellChangeTo		: "Izmeni",
+DlgSpellBtnIgnore		: "Ignoriši",
+DlgSpellBtnIgnoreAll	: "Ignoriši sve",
+DlgSpellBtnReplace		: "Zameni",
+DlgSpellBtnReplaceAll	: "Zameni sve",
+DlgSpellBtnUndo			: "Vrati akciju",
+DlgSpellNoSuggestions	: "- Bez sugestija -",
+DlgSpellProgress		: "Provera spelovanja u toku...",
+DlgSpellNoMispell		: "Provera spelovanja završena: greške nisu pronadene",
+DlgSpellNoChanges		: "Provera spelovanja završena: Nije izmenjena nijedna rec",
+DlgSpellOneChange		: "Provera spelovanja završena: Izmenjena je jedna reč",
+DlgSpellManyChanges		: "Provera spelovanja završena: %1 reč(i) je izmenjeno",
+
+IeSpellDownload			: "Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?",
+
+// Button Dialog
+DlgButtonText	: "Tekst (vrednost)",
+DlgButtonType	: "Tip",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naziv",
+DlgCheckboxValue	: "Vrednost",
+DlgCheckboxSelected	: "Označeno",
+
+// Form Dialog
+DlgFormName		: "Naziv",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Naziv",
+DlgSelectValue		: "Vrednost",
+DlgSelectSize		: "Veličina",
+DlgSelectLines		: "linija",
+DlgSelectChkMulti	: "Dozvoli višestruku selekciju",
+DlgSelectOpAvail	: "Dostupne opcije",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Vrednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Izmeni",
+DlgSelectBtnUp		: "Gore",
+DlgSelectBtnDown	: "Dole",
+DlgSelectBtnSetValue : "Podesi kao označenu vrednost",
+DlgSelectBtnDelete	: "Obriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Naziv",
+DlgTextareaCols	: "Broj kolona",
+DlgTextareaRows	: "Broj redova",
+
+// Text Field Dialog
+DlgTextName			: "Naziv",
+DlgTextValue		: "Vrednost",
+DlgTextCharWidth	: "Širina (karaktera)",
+DlgTextMaxChars		: "Maksimalno karaktera",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Lozinka",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naziv",
+DlgHiddenValue	: "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Osobine nenabrojive liste",
+NumberedListProp	: "Osobine nabrojive liste",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Krug",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrat",
+DlgLstTypeNumbers	: "Brojevi (1, 2, 3)",
+DlgLstTypeLCase		: "mala slova (a, b, c)",
+DlgLstTypeUCase		: "VELIKA slova (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske cifre (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske cifre (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Opšte osobine",
+DlgDocBackTab		: "Pozadina",
+DlgDocColorsTab		: "Boje i margine",
+DlgDocMetaTab		: "Metapodaci",
+
+DlgDocPageTitle		: "Naslov stranice",
+DlgDocLangDir		: "Smer jezika",
+DlgDocLangDirLTR	: "Sleva nadesno (LTR)",
+DlgDocLangDirRTL	: "Zdesna nalevo (RTL)",
+DlgDocLangCode		: "Šifra jezika",
+DlgDocCharSet		: "Kodiranje skupa karaktera",
+DlgDocCharSetOther	: "Ostala kodiranja skupa karaktera",
+
+DlgDocDocType		: "Zaglavlje tipa dokumenta",
+DlgDocDocTypeOther	: "Ostala zaglavlja tipa dokumenta",
+DlgDocIncXHTML		: "Ukljuci XHTML deklaracije",
+DlgDocBgColor		: "Boja pozadine",
+DlgDocBgImage		: "URL pozadinske slike",
+DlgDocBgNoScroll	: "Fiksirana pozadina",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Posećeni link",
+DlgDocCActive		: "Aktivni link",
+DlgDocMargins		: "Margine stranice",
+DlgDocMaTop			: "Gornja",
+DlgDocMaLeft		: "Leva",
+DlgDocMaRight		: "Desna",
+DlgDocMaBottom		: "Donja",
+DlgDocMeIndex		: "Ključne reci za indeksiranje dokumenta (razdvojene zarezima)",
+DlgDocMeDescr		: "Opis dokumenta",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorska prava",
+DlgDocPreview		: "Izgled stranice",
+
+// Templates Dialog
+Templates			: "Obrasci",
+DlgTemplatesTitle	: "Obrasci za sadržaj",
+DlgTemplatesSelMsg	: "Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):",
+DlgTemplatesLoading	: "Učitavam listu obrazaca. Malo strpljenja...",
+DlgTemplatesNoTpl	: "(Nema definisanih obrazaca)",
+
+// About Dialog
+DlgAboutAboutTab	: "O editoru",
+DlgAboutBrowserInfoTab	: "Informacije o pretraživacu",
+DlgAboutVersion		: "verzija",
+DlgAboutLicense		: "Licencirano pod uslovima GNU Lesser General Public License",
+DlgAboutInfo		: "Za više informacija posetite"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/sv.js 1.4.0sr5-1/fckeditor/editor/lang/sv.js
--- 1.3.11sr1/fckeditor/editor/lang/sv.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/sv.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: sv.js
+ * 	Swedish language file.
+ * 
+ * File Authors:
+ * 		Kristoffer Malvefors (kristoffer@intema.ws)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Dölj verktygsfält",
+ToolbarExpand		: "Visa verktygsfält",
+
+// Toolbar Items and Context Menu
+Save				: "Spara",
+NewPage				: "Ny sida",
+Preview				: "Förhandsgranska",
+Cut					: "Klipp ut",
+Copy				: "Kopiera",
+Paste				: "Klistra in",
+PasteText			: "Klistra in som text",
+PasteWord			: "Klistra in från Word",
+Print				: "Skriv ut",
+SelectAll			: "Markera allt",
+RemoveFormat		: "Radera formatering",
+InsertLinkLbl		: "Länk",
+InsertLink			: "Infoga/Redigera länk",
+RemoveLink			: "Radera länk",
+Anchor				: "Infoga/Redigera ankarlänk",
+InsertImageLbl		: "Bild",
+InsertImage			: "Infoga/Redigera bild",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Infoga/Redigera Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Infoga/Redigera tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Infoga horisontal linje",
+InsertSpecialCharLbl: "Utökade tecken",
+InsertSpecialChar	: "Klistra in utökat tecken",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Infoga Smiley",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understruken",
+StrikeThrough		: "Genomstruken",
+Subscript			: "Nedsänkta tecken",
+Superscript			: "Upphöjda tecken",
+LeftJustify			: "Vänsterjustera",
+CenterJustify		: "Centrera",
+RightJustify		: "Högerjustera",
+BlockJustify		: "Justera till marginaler",
+DecreaseIndent		: "Minska indrag",
+IncreaseIndent		: "Öka indrag",
+Undo				: "Ångra",
+Redo				: "Gör om",
+NumberedListLbl		: "Numrerad lista",
+NumberedList		: "Infoga/Radera numrerad lista",
+BulletedListLbl		: "Punktlista",
+BulletedList		: "Infoga/Radera punktlista",
+ShowTableBorders	: "Visa tabellkant",
+ShowDetails			: "Visa radbrytningar",
+Style				: "Anpassad stil",
+FontFormat			: "Teckenformat",
+Font				: "Typsnitt",
+FontSize			: "Storlek",
+TextColor			: "Textfärg",
+BGColor				: "Bakgrundsfärg",
+Source				: "Källa",
+Find				: "Sök",
+Replace				: "Ersätt",
+SpellCheck			: "Stavningskontroll",
+UniversalKeyboard	: "Universellt tangentbord",
+
+Form			: "Formulär",
+Checkbox		: "Kryssruta",
+RadioButton		: "Alternativknapp",
+TextField		: "Textfält",
+Textarea		: "Textruta",
+HiddenField		: "Dolt fält",
+Button			: "Knapp",
+SelectionField	: "Flervalslista",
+ImageButton		: "Bildknapp",
+
+// Context Menu
+EditLink			: "Redigera länk",
+InsertRow			: "Infoga rad",
+DeleteRows			: "Radera rad",
+InsertColumn		: "Infoga kolumn",
+DeleteColumns		: "Radera kolumn",
+InsertCell			: "Infoga cell",
+DeleteCells			: "Radera celler",
+MergeCells			: "Sammanfoga celler",
+SplitCell			: "Separera celler",
+CellProperties		: "Cellegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildegenskaper",
+FlashProperties		: "Flashegenskaper",
+
+AnchorProp			: "Egenskaper för ankarlänk",
+ButtonProp			: "Egenskaper för knapp",
+CheckboxProp		: "Egenskaper för kryssruta",
+HiddenFieldProp		: "Egenskaper för dolt fält",
+RadioButtonProp		: "Egenskaper för alternativknapp",
+ImageButtonProp		: "Egenskaper för bildknapp",
+TextFieldProp		: "Egenskaper för textfält",
+SelectionFieldProp	: "Egenskaper för flervalslista",
+TextareaProp		: "Egenskaper för textruta",
+FormProp			: "Egenskaper för formulär",
+
+FontFormats			: "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bearbetar XHTML. Var god vänta...",
+Done				: "Klar",
+PasteWordConfirm	: "Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistar in?",
+NotCompatiblePaste	: "Denna åtgärd är inte tillgängligt för Internet Explorer version 5.5 eller högre. Vill du klistra in utan att rensa?",
+UnknownToolbarItem	: "Okänt verktygsfält \"%1\"",
+UnknownCommand		: "Okänt kommando \"%1\"",
+NotImplemented		: "Kommandot finns ej",
+UnknownToolbarSet	: "Verktygsfält \"%1\" finns ej",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Stäng",
+DlgBtnBrowseServer	: "Bläddra på server",
+DlgAdvancedTag		: "Avancerad",
+DlgOpOther			: "Övrigt",
+DlgInfoTab			: "Information",
+DlgAlertUrl			: "Var god och ange en URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ej angivet&gt;",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkriktning",
+DlgGenLangDirLtr	: "Vänster till Höger (VTH)",
+DlgGenLangDirRtl	: "Höger till Vänster (HTV)",
+DlgGenLangCode		: "Språkkod",
+DlgGenAccessKey		: "Behörighetsnyckel",
+DlgGenName			: "Namn",
+DlgGenTabIndex		: "Tabindex",
+DlgGenLongDescr		: "URL-beskrivning",
+DlgGenClass			: "Stylesheet class",
+DlgGenTitle			: "Titel",
+DlgGenContType		: "Innehållstyp",
+DlgGenLinkCharset	: "Teckenuppställning",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Bildegenskaper",
+DlgImgInfoTab		: "Bildinformation",
+DlgImgBtnUpload		: "Skicka till server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Ladda upp",
+DlgImgAlt			: "Alternativ text",
+DlgImgWidth			: "Bredd",
+DlgImgHeight		: "Höjd",
+DlgImgLockRatio		: "Lås höjd/bredd förhållanden",
+DlgBtnResetSize		: "Återställ storlek",
+DlgImgBorder		: "Kant",
+DlgImgHSpace		: "Horis. marginal",
+DlgImgVSpace		: "Vert. marginal",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Vänster",
+DlgImgAlignAbsBottom: "Absolut nederkant",
+DlgImgAlignAbsMiddle: "Absolut centrering",
+DlgImgAlignBaseline	: "Baslinje",
+DlgImgAlignBottom	: "Nederkant",
+DlgImgAlignMiddle	: "Mitten",
+DlgImgAlignRight	: "Höger",
+DlgImgAlignTextTop	: "Text överkant",
+DlgImgAlignTop		: "Överkant",
+DlgImgPreview		: "Förhandsgranska",
+DlgImgAlertUrl		: "Var god och ange bildens URL",
+DlgImgLinkTab		: "Länk",
+
+// Flash Dialog
+DlgFlashTitle		: "Flashegenskaper",
+DlgFlashChkPlay		: "Automatisk uppspelning",
+DlgFlashChkLoop		: "Upprepa/Loopa",
+DlgFlashChkMenu		: "Aktivera Flashmeny",
+DlgFlashScale		: "Skala",
+DlgFlashScaleAll	: "Visa allt",
+DlgFlashScaleNoBorder	: "Ingen ram",
+DlgFlashScaleFit	: "Exakt passning",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Länk",
+DlgLnkInfoTab		: "Länkinformation",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Länktyp",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankare i sidan",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "&lt;övrigt&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Välj ett ankare",
+DlgLnkAnchorByName	: "efter ankarnamn",
+DlgLnkAnchorById	: "efter objektid",
+DlgLnkNoAnchors		: "&lt;Inga ankare kunde hittas&gt;",
+DlgLnkEMail			: "E-postadress",
+DlgLnkEMailSubject	: "Ämne",
+DlgLnkEMailBody		: "Innehåll",
+DlgLnkUpload		: "Ladda upp",
+DlgLnkBtnUpload		: "Skicka till servern",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "&lt;ram&gt;",
+DlgLnkTargetPopup	: "&lt;popup-fönster&gt;",
+DlgLnkTargetBlank	: "Nytt fönster (_blank)",
+DlgLnkTargetParent	: "Föregående Window (_parent)",
+DlgLnkTargetSelf	: "Detta fönstret (_self)",
+DlgLnkTargetTop		: "Översta fönstret (_top)",
+DlgLnkTargetFrameName	: "Målets ramnamn",
+DlgLnkPopWinName	: "Popup-fönstrets namn",
+DlgLnkPopWinFeat	: "Popup-fönstrets egenskaper",
+DlgLnkPopResize		: "Kan ändra storlek",
+DlgLnkPopLocation	: "Adressfält",
+DlgLnkPopMenu		: "Menyfält",
+DlgLnkPopScroll		: "Scrolllista",
+DlgLnkPopStatus		: "Statusfält",
+DlgLnkPopToolbar	: "Verktygsfält",
+DlgLnkPopFullScrn	: "Helskärm (endast IE)",
+DlgLnkPopDependent	: "Beroende (endest Netscape)",
+DlgLnkPopWidth		: "Bredd",
+DlgLnkPopHeight		: "Höjd",
+DlgLnkPopLeft		: "Position från vänster",
+DlgLnkPopTop		: "Position från sidans topp",
+
+DlnLnkMsgNoUrl		: "Var god ange länkens URL",
+DlnLnkMsgNoEMail	: "Var god ange E-postadress",
+DlnLnkMsgNoAnchor	: "Var god ange ett ankare",
+
+// Color Dialog
+DlgColorTitle		: "Välj färg",
+DlgColorBtnClear	: "Rensa",
+DlgColorHighlight	: "Markera",
+DlgColorSelected	: "Vald",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Infoga en smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Välj utökat tecken",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolumner",
+DlgTableBorder		: "Kantstorlek",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<ej angivet>",
+DlgTableAlignLeft	: "Vänster",
+DlgTableAlignCenter	: "Centrerad",
+DlgTableAlignRight	: "Höger",
+DlgTableWidth		: "Bredd",
+DlgTableWidthPx		: "pixlar",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Höjd",
+DlgTableCellSpace	: "Cellavstånd",
+DlgTableCellPad		: "Cellutfyllnad",
+DlgTableCaption		: "Rubrik",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cellegenskaper",
+DlgCellWidth		: "Bredd",
+DlgCellWidthPx		: "pixlar",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Höjd",
+DlgCellWordWrap		: "Automatisk radbrytning",
+DlgCellWordWrapNotSet	: "<Ej angivet>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ej angivet>",
+DlgCellHorAlignLeft	: "Vänster",
+DlgCellHorAlignCenter	: "Centrerad",
+DlgCellHorAlignRight: "Höger",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ej angivet>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Mitten",
+DlgCellVerAlignBottom	: "Nederkant",
+DlgCellVerAlignBaseline	: "Underst",
+DlgCellRowSpan		: "Radomfång",
+DlgCellCollSpan		: "Kolumnomfång",
+DlgCellBackColor	: "Bakgrundsfärg",
+DlgCellBorderColor	: "Kantfärg",
+DlgCellBtnSelect	: "Välj...",
+
+// Find Dialog
+DlgFindTitle		: "Sök",
+DlgFindFindBtn		: "Sök",
+DlgFindNotFoundMsg	: "Angiven text kunde ej hittas.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ersätt",
+DlgReplaceFindLbl		: "Sök efter:",
+DlgReplaceReplaceLbl	: "Ersätt med:",
+DlgReplaceCaseChk		: "Skiftläge",
+DlgReplaceReplaceBtn	: "Ersätt",
+DlgReplaceReplAllBtn	: "Ersätt alla",
+DlgReplaceWordChk		: "Inkludera hela ord",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klistra in. Använd (Ctrl+V) istället.",
+PasteErrorCut	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.",
+PasteErrorCopy	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället",
+
+PasteAsText		: "Klistra in som vanlig text",
+PasteFromWord	: "Klistra in från Word",
+
+DlgPasteMsg2	: "Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ignorera typsnittsdefinitioner",
+DlgPasteRemoveStyles	: "Radera Stildefinitioner",
+DlgPasteCleanBox		: "Töm rutans innehåll",
+
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Fler färger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankaregenskaper",
+DlgAnchorName		: "Ankarnamn",
+DlgAnchorErrorName	: "Var god ange ett ankarnamn",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Saknas i ordlistan",
+DlgSpellChangeTo		: "Ändra till",
+DlgSpellBtnIgnore		: "Ignorera",
+DlgSpellBtnIgnoreAll	: "Ignorera alla",
+DlgSpellBtnReplace		: "Ersätt",
+DlgSpellBtnReplaceAll	: "Ersätt alla",
+DlgSpellBtnUndo			: "Ångra",
+DlgSpellNoSuggestions	: "- Förslag saknas -",
+DlgSpellProgress		: "Stavningskontroll pågår...",
+DlgSpellNoMispell		: "Stavningskontroll slutförd: Inga stavfel påträffades.",
+DlgSpellNoChanges		: "Stavningskontroll slutförd: Inga ord rättades.",
+DlgSpellOneChange		: "Stavningskontroll slutförd: Ett ord rättades.",
+DlgSpellManyChanges		: "Stavningskontroll slutförd: %1 ord rättades.",
+
+IeSpellDownload			: "Stavningskontrollen är ej installerad. Vill du göra det nu?",
+
+// Button Dialog
+DlgButtonText	: "Text (Värde)",
+DlgButtonType	: "Typ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Namn",
+DlgCheckboxValue	: "Värde",
+DlgCheckboxSelected	: "Vald",
+
+// Form Dialog
+DlgFormName		: "Namn",
+DlgFormAction	: "Funktion",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Namn",
+DlgSelectValue		: "Värde",
+DlgSelectSize		: "Storlek",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillåt flerval",
+DlgSelectOpAvail	: "Befintliga val",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Värde",
+DlgSelectBtnAdd		: "Lägg till",
+DlgSelectBtnModify	: "Redigera",
+DlgSelectBtnUp		: "Upp",
+DlgSelectBtnDown	: "Ner",
+DlgSelectBtnSetValue : "Markera som valt värde",
+DlgSelectBtnDelete	: "Radera",
+
+// Textarea Dialog
+DlgTextareaName	: "Namn",
+DlgTextareaCols	: "Kolumner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Namn",
+DlgTextValue		: "Värde",
+DlgTextCharWidth	: "Teckenbredd",
+DlgTextMaxChars		: "Max antal tecken",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Lösenord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Namn",
+DlgHiddenValue	: "Värde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Egenskaper för punktlista",
+NumberedListProp	: "Egenskaper för numrerad lista",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Ruta",
+DlgLstTypeNumbers	: "Nummer (1, 2, 3)",
+DlgLstTypeLCase		: "Gemener (a, b, c)",
+DlgLstTypeUCase		: "Versaler (A, B, C)",
+DlgLstTypeSRoman	: "Små romerska siffror (i, ii, iii)",
+DlgLstTypeLRoman	: "Stora romerska siffror (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Allmän",
+DlgDocBackTab		: "Bakgrund",
+DlgDocColorsTab		: "Färg och marginal",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Sidtitel",
+DlgDocLangDir		: "Språkriktning",
+DlgDocLangDirLTR	: "Vänster till Höger",
+DlgDocLangDirRTL	: "Höger till Vänster",
+DlgDocLangCode		: "Språkkod",
+DlgDocCharSet		: "Teckenuppsättningar",
+DlgDocCharSetOther	: "Övriga teckenuppsättningar",
+
+DlgDocDocType		: "Sidhuvud",
+DlgDocDocTypeOther	: "Övriga sidhuvuden",
+DlgDocIncXHTML		: "Inkludera XHTML deklaration",
+DlgDocBgColor		: "Bakgrundsfärg",
+DlgDocBgImage		: "Bakgrundsbildens URL",
+DlgDocBgNoScroll	: "Fast bakgrund",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Länk",
+DlgDocCVisited		: "Besökt länk",
+DlgDocCActive		: "Aktiv länk",
+DlgDocMargins		: "Sidmarginal",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Vänster",
+DlgDocMaRight		: "Höger",
+DlgDocMaBottom		: "Botten",
+DlgDocMeIndex		: "Sidans nyckelord",
+DlgDocMeDescr		: "Sidans beskrivning",
+DlgDocMeAuthor		: "Författare",
+DlgDocMeCopy		: "Upphovsrätt",
+DlgDocPreview		: "Förhandsgranska",
+
+// Templates Dialog
+Templates			: "Sidmallar",
+DlgTemplatesTitle	: "Sidmallar",
+DlgTemplatesSelMsg	: "Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):",
+DlgTemplatesLoading	: "Laddar mallar. Var god vänta...",
+DlgTemplatesNoTpl	: "(Ingen mall är vald)",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Webläsarinfo",
+DlgAboutVersion		: "version",
+DlgAboutLicense		: "Licensierad under villkoren av GNU Lesser General Public License",
+DlgAboutInfo		: "För mer information se"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/th.js 1.4.0sr5-1/fckeditor/editor/lang/th.js
--- 1.3.11sr1/fckeditor/editor/lang/th.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/th.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,476 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: th.js
+ * 	Thai language file.
+ * 
+ * File Authors:
+ * 		Audy Charin Arsakit (arsakit@gmail.com)
+ * 		Joy Piyanoot Promnuan (piyanoot@gmail.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ซ่อนแถบเครื่องมือ",
+ToolbarExpand		: "แสดงแถบเครื่องมือ",
+
+// Toolbar Items and Context Menu
+Save				: "บันทึก",
+NewPage				: "สร้างหน้าเอกสารใหม่",
+Preview				: "ดูหน้าเอกสารตัวอย่าง",
+Cut					: "ตัด",
+Copy				: "สำเนา",
+Paste				: "วาง",
+PasteText			: "วางสำเนาจากตัวอักษรธรรมดา",
+PasteWord			: "วางสำเนาจากตัวอักษรเวิร์ด",
+Print				: "สั่งพิมพ์",
+SelectAll			: "เลือกทั้งหมด",
+RemoveFormat		: "ล้างรูปแบบ",
+InsertLinkLbl		: "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+InsertLink			: "แทรก/แก้ไข ลิงค์",
+RemoveLink			: "ลบ ลิงค์",
+Anchor				: "แทรก/แก้ไข Anchor",
+InsertImageLbl		: "รูปภาพ",
+InsertImage			: "แทรก/แก้ไข รูปภาพ",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "ตาราง",
+InsertTable			: "แทรก/แก้ไข ตาราง",
+InsertLineLbl		: "เส้นคั่นบรรทัด",
+InsertLine			: "แทรกเส้นคั่นบรรทัด",
+InsertSpecialCharLbl: "ตัวอักษรพิเศษ",
+InsertSpecialChar	: "แทรกตัวอักษรพิเศษ",
+InsertSmileyLbl		: "รูปสื่ออารมณ์",
+InsertSmiley		: "แทรกรูปสื่ออารมณ์",
+About				: "เกี่ยวกับโปรแกรม FCKeditor",
+Bold				: "ตัวหนา",
+Italic				: "ตัวเอียง",
+Underline			: "ตัวขีดเส้นใต้",
+StrikeThrough		: "ตัวขีดเส้นทับ",
+Subscript			: "ตัวห้อย",
+Superscript			: "ตัวยก",
+LeftJustify			: "จัดชิดซ้าย",
+CenterJustify		: "จัดกึ่งกลาง",
+RightJustify		: "จัดชิดขวา",
+BlockJustify		: "จัดพอดีหน้ากระดาษ",
+DecreaseIndent		: "ลดระยะย่อหน้า",
+IncreaseIndent		: "เพิ่มระยะย่อหน้า",
+Undo				: "ยกเลิกคำสั่ง",
+Redo				: "ทำซ้ำคำสั่ง",
+NumberedListLbl		: "ลำดับรายการแบบตัวเลข",
+NumberedList		: "แทรก/แก้ไข ลำดับรายการแบบตัวเลข",
+BulletedListLbl		: "ลำดับรายการแบบสัญลักษณ์",
+BulletedList		: "แทรก/แก้ไข ลำดับรายการแบบสัญลักษณ์",
+ShowTableBorders	: "แสดงขอบของตาราง",
+ShowDetails			: "แสดงรายละเอียด",
+Style				: "ลักษณะ",
+FontFormat			: "รูปแบบ",
+Font				: "แบบอักษร",
+FontSize			: "ขนาด",
+TextColor			: "สีตัวอักษร",
+BGColor				: "สีพื้นหลัง",
+Source				: "ดูรหัส HTML",
+Find				: "ค้นหา",
+Replace				: "ค้นหาและแทนที่",
+SpellCheck			: "ตรวจการสะกดคำ",
+UniversalKeyboard	: "คีย์บอร์ดหลากภาษา",
+
+Form			: "แบบฟอร์ม",
+Checkbox		: "เช็คบ๊อก",
+RadioButton		: "เรดิโอบัตตอน",
+TextField		: "เท็กซ์ฟิลด์",
+Textarea		: "เท็กซ์แอเรีย",
+HiddenField		: "ฮิดเดนฟิลด์",
+Button			: "ปุ่ม",
+SelectionField	: "แถบตัวเลือก",
+ImageButton		: "ปุ่มแบบรูปภาพ",
+
+// Context Menu
+EditLink			: "แก้ไข ลิงค์",
+InsertRow			: "แทรกแถว",
+DeleteRows			: "ลบแถว",
+InsertColumn		: "แทรกสดมน์",
+DeleteColumns		: "ลบสดมน์",
+InsertCell			: "แทรกช่อง",
+DeleteCells			: "ลบช่อง",
+MergeCells			: "ผสานช่อง",
+SplitCell			: "แยกช่อง",
+CellProperties		: "คุณสมบัติของช่อง",
+TableProperties		: "คุณสมบัติของตาราง",
+ImageProperties		: "คุณสมบัติของรูปภาพ",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "รายละเอียด Anchor",
+ButtonProp			: "รายละเอียดของ ปุ่ม",
+CheckboxProp		: "คุณสมบัติของ เช็คบ๊อก",
+HiddenFieldProp		: "คุณสมบัติของ ฮิดเดนฟิลด์",
+RadioButtonProp		: "คุณสมบัติของ เรดิโอบัตตอน",
+ImageButtonProp		: "คุณสมบัติของ ปุ่มแบบรูปภาพ",
+TextFieldProp		: "คุณสมบัติของ เท็กซ์ฟิลด์",
+SelectionFieldProp	: "คุณสมบัติของ แถบตัวเลือก",
+TextareaProp		: "คุณสมบัติของ เท็กแอเรีย",
+FormProp			: "คุณสมบัติของ แบบฟอร์ม",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "โปรแกรมกำลังทำงานด้วยเทคโนโลยี XHTML กรุณารอสักครู่...",
+Done				: "โปรแกรมทำงานเสร็จสมบูรณ์",
+PasteWordConfirm	: "ข้อมูลที่ท่านต้องการวางลงในแผ่นงาน ถูกจัดรูปแบบจากโปรแกรมเวิร์ด. ท่านต้องการล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?",
+NotCompatiblePaste	: "คำสั่งนี้ทำงานในโปรแกรมท่องเว็บ Internet Explorer version รุ่น 5.5 หรือใหม่กว่าเท่านั้น. ท่านต้องการวางตัวอักษรโดยไม่ล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?",
+UnknownToolbarItem	: "ไม่สามารถระบุปุ่มเครื่องมือได้ \"%1\"",
+UnknownCommand		: "ไม่สามารถระบุชื่อคำสั่งได้ \"%1\"",
+NotImplemented		: "ไม่สามารถใช้งานคำสั่งได้",
+UnknownToolbarSet	: "ไม่มีการติดตั้งชุดคำสั่งในแถบเครื่องมือ \"%1\" กรุณาติดต่อผู้ดูแลระบบ",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "ตกลง",
+DlgBtnCancel		: "ยกเลิก",
+DlgBtnClose			: "ปิด",
+DlgBtnBrowseServer	: "เปิดหน้าต่างจัดการไฟล์อัพโหลด",
+DlgAdvancedTag		: "ขั้นสูง",
+DlgOpOther			: "&lt;อื่นๆ&gt;",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;ไม่ระบุ&gt;",
+DlgGenId			: "ไอดี",
+DlgGenLangDir		: "การเขียน-อ่านภาษา",
+DlgGenLangDirLtr	: "จากซ้ายไปขวา (LTR)",
+DlgGenLangDirRtl	: "จากขวามาซ้าย (RTL)",
+DlgGenLangCode		: "รหัสภาษา",
+DlgGenAccessKey		: "แอคเซส คีย์",
+DlgGenName			: "ชื่อ",
+DlgGenTabIndex		: "ลำดับของ แท็บ",
+DlgGenLongDescr		: "คำอธิบายประกอบ URL",
+DlgGenClass			: "คลาสของไฟล์กำหนดลักษณะการแสดงผล",
+DlgGenTitle			: "คำเกริ่นนำ",
+DlgGenContType		: "ชนิดของคำเกริ่นนำ",
+DlgGenLinkCharset	: "ลิงค์เชื่อมโยงไปยังชุดตัวอักษร",
+DlgGenStyle			: "ลักษณะการแสดงผล",
+
+// Image Dialog
+DlgImgTitle			: "คุณสมบัติของ รูปภาพ",
+DlgImgInfoTab		: "ข้อมูลของรูปภาพ",
+DlgImgBtnUpload		: "อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)",
+DlgImgURL			: "ที่อยู่อ้างอิง URL",
+DlgImgUpload		: "อัพโหลดไฟล์",
+DlgImgAlt			: "คำประกอบรูปภาพ",
+DlgImgWidth			: "ความกว้าง",
+DlgImgHeight		: "ความสูง",
+DlgImgLockRatio		: "กำหนดอัตราส่วน กว้าง-สูง แบบคงที่",
+DlgBtnResetSize		: "กำหนดรูปเท่าขนาดจริง",
+DlgImgBorder		: "ขนาดขอบรูป",
+DlgImgHSpace		: "ระยะแนวนอน",
+DlgImgVSpace		: "ระยะแนวตั้ง",
+DlgImgAlign			: "การจัดวาง",
+DlgImgAlignLeft		: "ชิดซ้าย",
+DlgImgAlignAbsBottom: "ชิดด้านล่างสุด",
+DlgImgAlignAbsMiddle: "กึ่งกลาง",
+DlgImgAlignBaseline	: "ชิดบรรทัด",
+DlgImgAlignBottom	: "ชิดด้านล่าง",
+DlgImgAlignMiddle	: "กึ่งกลางแนวตั้ง",
+DlgImgAlignRight	: "ชิดขวา",
+DlgImgAlignTextTop	: "ใต้ตัวอักษร",
+DlgImgAlignTop		: "บนสุด",
+DlgImgPreview		: "หน้าเอกสารตัวอย่าง",
+DlgImgAlertUrl		: "กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+DlgLnkInfoTab		: "รายละเอียด",
+DlgLnkTargetTab		: "การเปิดหน้าจอ",
+
+DlgLnkType			: "ประเภทของลิงค์",
+DlgLnkTypeURL		: "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkTypeAnchor	: "จุดเชื่อมโยง (Anchor)",
+DlgLnkTypeEMail		: "ส่งอีเมล์ (E-Mail)",
+DlgLnkProto			: "โปรโตคอล",
+DlgLnkProtoOther	: "&lt;อื่นๆ&gt;",
+DlgLnkURL			: "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkAnchorSel		: "ระบุข้อมูลของจุดเชื่อมโยง (Anchor)",
+DlgLnkAnchorByName	: "ชื่อ",
+DlgLnkAnchorById	: "ไอดี",
+DlgLnkNoAnchors		: "&lt;ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้&gt;",
+DlgLnkEMail			: "อีเมล์ (E-Mail)",
+DlgLnkEMailSubject	: "หัวเรื่อง",
+DlgLnkEMailBody		: "ข้อความ",
+DlgLnkUpload		: "อัพโหลดไฟล์",
+DlgLnkBtnUpload		: "บันทึกไฟล์ไว้บนเซิร์ฟเวอร์",
+
+DlgLnkTarget		: "การเปิดหน้าลิงค์",
+DlgLnkTargetFrame	: "&lt;เปิดในเฟรม&gt;",
+DlgLnkTargetPopup	: "&lt;เปิดหน้าจอเล็ก (Pop-up)&gt;",
+DlgLnkTargetBlank	: "เปิดหน้าจอใหม่ (_blank)",
+DlgLnkTargetParent	: "เปิดในหน้าหลัก (_parent)",
+DlgLnkTargetSelf	: "เปิดในหน้าปัจจุบัน (_self)",
+DlgLnkTargetTop		: "เปิดในหน้าบนสุด (_top)",
+DlgLnkTargetFrameName	: "ชื่อทาร์เก็ตเฟรม",
+DlgLnkPopWinName	: "ระบุชื่อหน้าจอเล็ก (Pop-up)",
+DlgLnkPopWinFeat	: "คุณสมบัติของหน้าจอเล็ก (Pop-up)",
+DlgLnkPopResize		: "ปรับขนาดหน้าจอ",
+DlgLnkPopLocation	: "แสดงที่อยู่ของไฟล์",
+DlgLnkPopMenu		: "แสดงแถบเมนู",
+DlgLnkPopScroll		: "แสดงแถบเลื่อน",
+DlgLnkPopStatus		: "แสดงแถบสถานะ",
+DlgLnkPopToolbar	: "แสดงแถบเครื่องมือ",
+DlgLnkPopFullScrn	: "แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)",
+DlgLnkPopDependent	: "แสดงเต็มหน้าจอ (Netscape)",
+DlgLnkPopWidth		: "กว้าง",
+DlgLnkPopHeight		: "สูง",
+DlgLnkPopLeft		: "พิกัดซ้าย (Left Position)",
+DlgLnkPopTop		: "พิกัดบน (Top Position)",
+
+DlnLnkMsgNoUrl		: "กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)",
+DlnLnkMsgNoEMail	: "กรุณาระบุอีเมล์ (E-mail)",
+DlnLnkMsgNoAnchor	: "กรุณาระบุจุดเชื่อมโยง (Anchor)",
+
+// Color Dialog
+DlgColorTitle		: "เลือกสี",
+DlgColorBtnClear	: "ล้างค่ารหัสสี",
+DlgColorHighlight	: "ตัวอย่างสี",
+DlgColorSelected	: "สีที่เลือก",
+
+// Smiley Dialog
+DlgSmileyTitle		: "แทรกสัญักษณ์สื่ออารมณ์",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "แทรกตัวอักษรพิเศษ",
+
+// Table Dialog
+DlgTableTitle		: "คุณสมบัติของ ตาราง",
+DlgTableRows		: "แถว",
+DlgTableColumns		: "สดมน์",
+DlgTableBorder		: "ขนาดเส้นขอบ",
+DlgTableAlign		: "การจัดตำแหน่ง",
+DlgTableAlignNotSet	: "<ไม่ระบุ>",
+DlgTableAlignLeft	: "ชิดซ้าย",
+DlgTableAlignCenter	: "กึ่งกลาง",
+DlgTableAlignRight	: "ชิดขวา",
+DlgTableWidth		: "กว้าง",
+DlgTableWidthPx		: "จุดสี",
+DlgTableWidthPc		: "เปอร์เซ็น",
+DlgTableHeight		: "สูง",
+DlgTableCellSpace	: "ระยะแนวนอนน",
+DlgTableCellPad		: "ระยะแนวตั้ง",
+DlgTableCaption		: "หัวเรื่องของตาราง",
+
+// Table Cell Dialog
+DlgCellTitle		: "คุณสมบัติของ ช่อง",
+DlgCellWidth		: "กว้าง",
+DlgCellWidthPx		: "จุดสี",
+DlgCellWidthPc		: "เปอร์เซ็น",
+DlgCellHeight		: "สูง",
+DlgCellWordWrap		: "ตัดบรรทัดอัตโนมัติ",
+DlgCellWordWrapNotSet	: "&lt;ไม่ระบุ&gt;",
+DlgCellWordWrapYes	: "ใ่ช่",
+DlgCellWordWrapNo	: "ไม่",
+DlgCellHorAlign		: "การจัดวางแนวนอน",
+DlgCellHorAlignNotSet	: "&lt;ไม่ระบุ&gt;",
+DlgCellHorAlignLeft	: "ชิดซ้าย",
+DlgCellHorAlignCenter	: "กึ่งกลาง",
+DlgCellHorAlignRight: "ชิดขวา",
+DlgCellVerAlign		: "การจัดวางแนวตั้ง",
+DlgCellVerAlignNotSet	: "&lt;ไม่ระบุ&gt;",
+DlgCellVerAlignTop	: "บนสุด",
+DlgCellVerAlignMiddle	: "กึ่งกลาง",
+DlgCellVerAlignBottom	: "ล่างสุด",
+DlgCellVerAlignBaseline	: "อิงบรรทัด",
+DlgCellRowSpan		: "จำนวนแถวที่คร่อมกัน",
+DlgCellCollSpan		: "จำนวนสดมน์ที่คร่อมกัน",
+DlgCellBackColor	: "สีพื้นหลัง",
+DlgCellBorderColor	: "สีเส้นขอบ",
+DlgCellBtnSelect	: "เลือก..",
+
+// Find Dialog
+DlgFindTitle		: "ค้นหา",
+DlgFindFindBtn		: "ค้นหา",
+DlgFindNotFoundMsg	: "ไม่พบคำที่ค้นหา.",
+
+// Replace Dialog
+DlgReplaceTitle			: "ค้นหาและแทนที่",
+DlgReplaceFindLbl		: "ค้นหาคำว่า:",
+DlgReplaceReplaceLbl	: "แทนที่ด้วย:",
+DlgReplaceCaseChk		: "ตัวโหญ่-เล็ก ต้องตรงกัน",
+DlgReplaceReplaceBtn	: "แทนที่",
+DlgReplaceReplAllBtn	: "แทนที่ทั้งหมดที่พบ",
+DlgReplaceWordChk		: "ต้องตรงกันทุกคำ",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "ไม่สามารถวางข้อความที่สำเนามาได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว V พร้อมกัน).",
+PasteErrorCut	: "ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว X พร้อมกัน).",
+PasteErrorCopy	: "ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว C พร้อมกัน).",
+
+PasteAsText		: "วางแบบตัวอักษรธรรมดา",
+PasteFromWord	: "วางแบบตัวอักษรจากโปรแกรมเวิร์ด",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+
+// Color Picker
+ColorAutomatic	: "สีอัตโนมัติ",
+ColorMoreColors	: "เลือกสีอื่นๆ...",
+
+// Document Properties
+DocProps		: "คุณสมบัติของเอกสาร",
+
+// Anchor Dialog
+DlgAnchorTitle		: "คุณสมบัติของ Anchor",
+DlgAnchorName		: "ชื่อ Anchor",
+DlgAnchorErrorName	: "กรุณาระบุชื่อของ Anchor",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "ไม่พบในดิกชันนารี",
+DlgSpellChangeTo		: "แก้ไขเป็น",
+DlgSpellBtnIgnore		: "ยกเว้น",
+DlgSpellBtnIgnoreAll	: "ยกเว้นทั้งหมด",
+DlgSpellBtnReplace		: "แทนที่",
+DlgSpellBtnReplaceAll	: "แทนที่ทั้งหมด",
+DlgSpellBtnUndo			: "ยกเลิก",
+DlgSpellNoSuggestions	: "- ไม่มีคำแนะนำใดๆ -",
+DlgSpellProgress		: "กำลังตรวจสอบคำสะกด...",
+DlgSpellNoMispell		: "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด",
+DlgSpellNoChanges		: "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ",
+DlgSpellOneChange		: "ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ",
+DlgSpellManyChanges		: "ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ",
+
+IeSpellDownload			: "ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?",
+
+// Button Dialog
+DlgButtonText	: "ข้อความ (ค่าตัวแปร)",
+DlgButtonType	: "ข้อความ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "ชื่อ",
+DlgCheckboxValue	: "ค่าตัวแปร",
+DlgCheckboxSelected	: "เลือกเป็นค่าเริ่มต้น",
+
+// Form Dialog
+DlgFormName		: "ชื่อ",
+DlgFormAction	: "แอคชั่น",
+DlgFormMethod	: "เมธอด",
+
+// Select Field Dialog
+DlgSelectName		: "ชื่อ",
+DlgSelectValue		: "ค่าตัวแปร",
+DlgSelectSize		: "ขนาด",
+DlgSelectLines		: "บรรทัด",
+DlgSelectChkMulti	: "เลือกหลายค่าได้",
+DlgSelectOpAvail	: "รายการตัวเลือก",
+DlgSelectOpText		: "ข้อความ",
+DlgSelectOpValue	: "ค่าตัวแปร",
+DlgSelectBtnAdd		: "เพิ่ม",
+DlgSelectBtnModify	: "แก้ไข",
+DlgSelectBtnUp		: "บน",
+DlgSelectBtnDown	: "ล่าง",
+DlgSelectBtnSetValue : "เลือกเป็นค่าเริ่มต้น",
+DlgSelectBtnDelete	: "ลบ",
+
+// Textarea Dialog
+DlgTextareaName	: "ชื่อ",
+DlgTextareaCols	: "สดมภ์",
+DlgTextareaRows	: "แถว",
+
+// Text Field Dialog
+DlgTextName			: "ชื่อ",
+DlgTextValue		: "ค่าตัวแปร",
+DlgTextCharWidth	: "ความกว้าง",
+DlgTextMaxChars		: "จำนวนตัวอักษรสูงสุด",
+DlgTextType			: "ชนิด",
+DlgTextTypeText		: "ข้อความ",
+DlgTextTypePass		: "รหัสผ่าน",
+
+// Hidden Field Dialog
+DlgHiddenName	: "ชื่อ",
+DlgHiddenValue	: "ค่าตัวแปร",
+
+// Bulleted List Dialog
+BulletedListProp	: "คุณสมบัติของ บูลเล็ตลิสต์",
+NumberedListProp	: "คุณสมบัติของ นัมเบอร์ลิสต์",
+DlgLstType			: "ชนิด",
+DlgLstTypeCircle	: "รูปวงกลม",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "รูปสี่เหลี่ยม",
+DlgLstTypeNumbers	: "หมายเลข (1, 2, 3)",
+DlgLstTypeLCase		: "ตัวพิมพ์เล็ก (a, b, c)",
+DlgLstTypeUCase		: "ตัวพิมพ์ใหญ่ (A, B, C)",
+DlgLstTypeSRoman	: "เลขโรมันพิมพ์เล็ก (i, ii, iii)",
+DlgLstTypeLRoman	: "เลขโรมันพิมพ์ใหญ่ (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "ลักษณะทั่วไปของเอกสาร",
+DlgDocBackTab		: "พื้นหลัง",
+DlgDocColorsTab		: "สีและระยะขอบ",
+DlgDocMetaTab		: "ข้อมูลสำหรับเสิร์ชเอนจิ้น",
+
+DlgDocPageTitle		: "ชื่อไตเติ้ล",
+DlgDocLangDir		: "การอ่านภาษา",
+DlgDocLangDirLTR	: "จากซ้ายไปขวา (LTR)",
+DlgDocLangDirRTL	: "จากขวาไปซ้าย (RTL)",
+DlgDocLangCode		: "รหัสภาษา",
+DlgDocCharSet		: "ชุดตัวอักษร",
+DlgDocCharSetOther	: "ชุดตัวอักษรอื่นๆ",
+
+DlgDocDocType		: "ประเภทของเอกสาร",
+DlgDocDocTypeOther	: "ประเภทเอกสารอื่นๆ",
+DlgDocIncXHTML		: "รวมเอา  XHTML Declarations ไว้ด้วย",
+DlgDocBgColor		: "สีพื้นหลัง",
+DlgDocBgImage		: "ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)",
+DlgDocBgNoScroll	: "พื้นหลังแบบไม่มีแถบเลื่อน",
+DlgDocCText			: "ข้อความ",
+DlgDocCLink			: "ลิงค์",
+DlgDocCVisited		: "ลิงค์ที่เคยคลิ้กแล้ว Visited Link",
+DlgDocCActive		: "ลิงค์ที่กำลังคลิ้ก Active Link",
+DlgDocMargins		: "ระยะขอบของหน้าเอกสาร",
+DlgDocMaTop			: "ด้านบน",
+DlgDocMaLeft		: "ด้านซ้าย",
+DlgDocMaRight		: "ด้านขวา",
+DlgDocMaBottom		: "ด้านล่าง",
+DlgDocMeIndex		: "คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)",
+DlgDocMeDescr		: "ประโยคอธิบายเกี่ยวกับเอกสาร",
+DlgDocMeAuthor		: "ผู้สร้างเอกสาร",
+DlgDocMeCopy		: "สงวนลิขสิทธิ์",
+DlgDocPreview		: "ตัวอย่างหน้าเอกสาร",
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "เกี่ยวกับโปรแกรม",
+DlgAboutBrowserInfoTab	: "โปรแกรมท่องเว็บที่ท่านใช้",
+DlgAboutVersion		: "รุ่น",
+DlgAboutLicense		: "สงวนลิขสิทธิ์ โดยนโยบายลิขสิทธิ์แบบ GNU Lesser General Public License",
+DlgAboutInfo		: "ข้อมูลเพิ่มเติมภาษาไทยติดต่อ</BR>นาย ชรินทร์ อาษากิจ (อู้ด)</BR><A HREF='mailto:arsakit@gmail.com'>arsakit@gmail.com</A> tel. (+66) 06-9241924</BR>หรือดาวน์โหลดรุ่นภาษาไทยได้ที่เว็บไซต์</BR><A HREF='http://www.thaimall4u.com'>www.Thaimall4u.com</A></BR>ข้อมูลเพิ่มเติมภาษาอังกฤษ กรุณาไปที่นี่"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/_translationstatus.txt 1.4.0sr5-1/fckeditor/editor/lang/_translationstatus.txt
--- 1.3.11sr1/fckeditor/editor/lang/_translationstatus.txt	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/_translationstatus.txt	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: _translationstatus.txt
+ * 	Translation Status.
+ * 	A useful site with languages information:
+ * 	http://www.omniglot.com/
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+PROCESSING: ar.js      Found: 375   Missing: 2
+PROCESSING: bg.js      Found: 375   Missing: 2
+PROCESSING: bs.js      Found: 232   Missing: 145
+PROCESSING: ca.js      Found: 375   Missing: 2
+PROCESSING: cs.js      Found: 352   Missing: 25
+PROCESSING: da.js      Found: 375   Missing: 2
+PROCESSING: de.js      Found: 375   Missing: 2
+PROCESSING: el.js      Found: 232   Missing: 145
+PROCESSING: en-au.js   Found: 375   Missing: 2
+PROCESSING: en-uk.js   Found: 375   Missing: 2
+PROCESSING: eo.js      Found: 352   Missing: 25
+PROCESSING: es.js      Found: 375   Missing: 2
+PROCESSING: et.js      Found: 232   Missing: 145
+PROCESSING: eu.js      Found: 375   Missing: 2
+PROCESSING: fa.js      Found: 358   Missing: 19
+PROCESSING: fi.js      Found: 375   Missing: 2
+PROCESSING: fo.js      Found: 358   Missing: 19
+PROCESSING: fr.js      Found: 375   Missing: 2
+PROCESSING: gl.js      Found: 375   Missing: 2
+PROCESSING: he.js      Found: 375   Missing: 2
+PROCESSING: hr.js      Found: 375   Missing: 2
+PROCESSING: hu.js      Found: 377   Missing: 0
+PROCESSING: it.js      Found: 375   Missing: 2
+PROCESSING: ja.js      Found: 375   Missing: 2
+PROCESSING: ko.js      Found: 375   Missing: 2
+PROCESSING: lt.js      Found: 375   Missing: 2
+PROCESSING: mn.js      Found: 232   Missing: 145
+PROCESSING: ms.js      Found: 358   Missing: 19
+PROCESSING: nl.js      Found: 375   Missing: 2
+PROCESSING: no.js      Found: 375   Missing: 2
+PROCESSING: pl.js      Found: 352   Missing: 25
+PROCESSING: pt-br.js   Found: 375   Missing: 2
+PROCESSING: pt.js      Found: 375   Missing: 2
+PROCESSING: ro.js      Found: 375   Missing: 2
+PROCESSING: ru.js      Found: 375   Missing: 2
+PROCESSING: sk.js      Found: 375   Missing: 2
+PROCESSING: sl.js      Found: 375   Missing: 2
+PROCESSING: sr-latn.js Found: 375   Missing: 2
+PROCESSING: sr.js      Found: 375   Missing: 2
+PROCESSING: sv.js      Found: 375   Missing: 2
+PROCESSING: th.js      Found: 352   Missing: 25
+PROCESSING: tr.js      Found: 374   Missing: 3
+PROCESSING: uk.js      Found: 375   Missing: 2
+PROCESSING: vi.js      Found: 374   Missing: 3
+PROCESSING: zh-cn.js   Found: 375   Missing: 2
+PROCESSING: zh.js      Found: 375   Missing: 2
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/tr.js 1.4.0sr5-1/fckeditor/editor/lang/tr.js
--- 1.3.11sr1/fckeditor/editor/lang/tr.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/tr.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: tr.js
+ * 	Turkish language file.
+ * 
+ * File Authors:
+ * 		Bogac Guven (bogacmx@yahoo.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Araç Çubugunu Kapat",
+ToolbarExpand		: "Araç Çubugunu Aç",
+
+// Toolbar Items and Context Menu
+Save				: "Kaydet",
+NewPage				: "Yeni Sayfa",
+Preview				: "Ön Izleme",
+Cut					: "Kes",
+Copy				: "Kopyala",
+Paste				: "Yapistir",
+PasteText			: "Düzyazi Olarak Yapistir",
+PasteWord			: "Word'den Yapistir",
+Print				: "Yazdir",
+SelectAll			: "Tümünü Seç",
+RemoveFormat		: "Biçimi Kaldir",
+InsertLinkLbl		: "Köprü",
+InsertLink			: "Köprü Ekle/Düzenle",
+RemoveLink			: "Köprü Kaldir",
+Anchor				: "Çapa Ekle/Düzenle",
+InsertImageLbl		: "Resim",
+InsertImage			: "Resim Ekle/Düzenle",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash Ekle/Düzenle",
+InsertTableLbl		: "Tablo",
+InsertTable			: "Tablo Ekle/Düzenle",
+InsertLineLbl		: "Satir",
+InsertLine			: "Yatay Satir Ekle",
+InsertSpecialCharLbl: "Özel Karakter",
+InsertSpecialChar	: "Özel Karakter Ekle",
+InsertSmileyLbl		: "Ifade",
+InsertSmiley		: "Ifade Ekle",
+About				: "FCKeditor Hakkinda",
+Bold				: "Kalin",
+Italic				: "Italik",
+Underline			: "Alti Çizgili",
+StrikeThrough		: "Üstü Çizgili",
+Subscript			: "Alt Simge",
+Superscript			: "Üst Simge",
+LeftJustify			: "Sola Dayali",
+CenterJustify		: "Ortalanmis",
+RightJustify		: "Saga Dayali",
+BlockJustify		: "Iki Kenara Yaslanmis",
+DecreaseIndent		: "Sekme Azalt",
+IncreaseIndent		: "Sekme Arttir",
+Undo				: "Geri Al",
+Redo				: "Tekrarla",
+NumberedListLbl		: "Numarali Liste",
+NumberedList		: "Numarali Liste Ekle/Kaldir",
+BulletedListLbl		: "Simgeli Liste",
+BulletedList		: "Simgeli Liste Ekle/Kaldir",
+ShowTableBorders	: "Tablo Kenarlarini Göster",
+ShowDetails			: "Detaylari Göster",
+Style				: "Stil",
+FontFormat			: "Biçim",
+Font				: "Yazi Tipi",
+FontSize			: "Boyut",
+TextColor			: "Yazi Rengi",
+BGColor				: "Arka Renk",
+Source				: "Kaynak",
+Find				: "Bul",
+Replace				: "Degistir",
+SpellCheck			: "Yazim Denetimi",
+UniversalKeyboard	: "Evrensel Klavye",
+
+Form			: "Form",
+Checkbox		: "Onay Kutusu",
+RadioButton		: "Seçenek Dügmesi",
+TextField		: "Metin Girisi",
+Textarea		: "Çok Satirli Metin",
+HiddenField		: "Gizli Veri",
+Button			: "Dügme",
+SelectionField	: "Seçim Mönüsü",
+ImageButton		: "Resimli Dügme",
+
+// Context Menu
+EditLink			: "Köprü Düzenle",
+InsertRow			: "Satir Ekle",
+DeleteRows			: "Satir Sil",
+InsertColumn		: "Sütun Ekle",
+DeleteColumns		: "Sütun Sil",
+InsertCell			: "Hücre Ekle",
+DeleteCells			: "Hücre Sil",
+MergeCells			: "Hücreleri Birlestir",
+SplitCell			: "Hücre Böl",
+CellProperties		: "Hücre Özellikleri",
+TableProperties		: "Tablo Özellikleri",
+ImageProperties		: "Resim Özellikleri",
+FlashProperties		: "Flash Özellikleri",
+
+AnchorProp			: "Çapa Özellikleri",
+ButtonProp			: "Dügme Özellikleri",
+CheckboxProp		: "Onay Kutusu Özellikleri",
+HiddenFieldProp		: "Gizli Veri Özellikleri",
+RadioButtonProp		: "Seçenek Dügmesi Özellikleri",
+ImageButtonProp		: "Resimli Dügme Özellikleri",
+TextFieldProp		: "Metin Girisi Özellikleri",
+SelectionFieldProp	: "Seçim Mönüsü Özellikleri",
+TextareaProp		: "Çok Satirli Metin Özellikleri",
+FormProp			: "Form Özellikleri",
+
+FontFormats			: "Normal;Biçimli;Adres;Baslik 1;Baslik 2;Baslik 3;Baslik 4;Baslik 5;Baslik 6;Paragraf (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML isleniyor. Lütfen bekleyin...",
+Done				: "Bitti",
+PasteWordConfirm	: "Yapistirdiginiz yazi Word'den gelmise benziyor. Yapistirmadan önce silmek ister misiniz?",
+NotCompatiblePaste	: "Bu komut Internet Explorer 5.5 ve ileriki sürümleri için mevcuttur. Temizlenmeden yapistirilmasini ister misiniz ?",
+UnknownToolbarItem	: "Bilinmeyen araç çubugu ögesi \"%1\"",
+UnknownCommand		: "Bilinmeyen komut \"%1\"",
+NotImplemented		: "Komut uyarlanamadi",
+UnknownToolbarSet	: "\"%1\" araç çubugu ögesi mevcut degil",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Tamam",
+DlgBtnCancel		: "Iptal",
+DlgBtnClose			: "Kapat",
+DlgBtnBrowseServer	: "Sunucuyu Gez",
+DlgAdvancedTag		: "Gelismis",
+DlgOpOther			: "&lt;Diger&gt;",
+DlgInfoTab			: "Bilgi",
+DlgAlertUrl			: "Lütfen URL girin",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;tanimlanmamis&gt;",
+DlgGenId			: "Kimlik",
+DlgGenLangDir		: "Lisan Yönü",
+DlgGenLangDirLtr	: "Soldan Saga (LTR)",
+DlgGenLangDirRtl	: "Sagdan Sola (RTL)",
+DlgGenLangCode		: "Lisan Kodlamasi",
+DlgGenAccessKey		: "Erisim Tusu",
+DlgGenName			: "Isim",
+DlgGenTabIndex		: "Sekme Indeksi",
+DlgGenLongDescr		: "Uzun Tanimli URL",
+DlgGenClass			: "Stil Klaslari",
+DlgGenTitle			: "Danisma Basligi",
+DlgGenContType		: "Danisma Içerik Türü",
+DlgGenLinkCharset	: "Bagli Kaynak Karakter Gurubu",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Resim Özellikleri",
+DlgImgInfoTab		: "Resim Bilgisi",
+DlgImgBtnUpload		: "Sunucuya Yolla",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Karsiya Yükle",
+DlgImgAlt			: "Alternatif Yazi",
+DlgImgWidth			: "Genislik",
+DlgImgHeight		: "Yükseklik",
+DlgImgLockRatio		: "Orani Kilitle",
+DlgBtnResetSize		: "Boyutu Basa Döndür",
+DlgImgBorder		: "Kenar",
+DlgImgHSpace		: "Yatay Bosluk",
+DlgImgVSpace		: "Dikey Bosluk",
+DlgImgAlign			: "Hizalama",
+DlgImgAlignLeft		: "Sol",
+DlgImgAlignAbsBottom: "Tam Alti",
+DlgImgAlignAbsMiddle: "Tam Ortasi",
+DlgImgAlignBaseline	: "Taban Çizgisi",
+DlgImgAlignBottom	: "Alt",
+DlgImgAlignMiddle	: "Orta",
+DlgImgAlignRight	: "Sag",
+DlgImgAlignTextTop	: "Yazi Tepeye",
+DlgImgAlignTop		: "Tepe",
+DlgImgPreview		: "Ön Izleme",
+DlgImgAlertUrl		: "Lütfen resimin URL'sini yaziniz",
+DlgImgLinkTab		: "Köprü",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Özellikleri",
+DlgFlashChkPlay		: "Otomatik Oynat",
+DlgFlashChkLoop		: "Döngü",
+DlgFlashChkMenu		: "Flash Mönüsünü Kullan",
+DlgFlashScale		: "Boyutlandır",
+DlgFlashScaleAll	: "Hepsini Göster",
+DlgFlashScaleNoBorder	: "Kenar Yok",
+DlgFlashScaleFit	: "Tam Sığdır",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Köprü",
+DlgLnkInfoTab		: "Köprü Bilgisi",
+DlgLnkTargetTab		: "Hedef",
+
+DlgLnkType			: "Köprü Türü",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Bu sayfada çapa",
+DlgLnkTypeEMail		: "E-Posta",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "&lt;diger&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Çapa Seç",
+DlgLnkAnchorByName	: "Çapa Ismi ile",
+DlgLnkAnchorById	: "Eleman Id ile",
+DlgLnkNoAnchors		: "&lt;Bu dokümanda hiç çapa yok&gt;",
+DlgLnkEMail			: "E-Posta Adresi",
+DlgLnkEMailSubject	: "Mesaj Konusu",
+DlgLnkEMailBody		: "Mesaj Vücudu",
+DlgLnkUpload		: "Karsiya Yükle",
+DlgLnkBtnUpload		: "Sunucuya Gönder",
+
+DlgLnkTarget		: "Hedef",
+DlgLnkTargetFrame	: "&lt;çerçeve&gt;",
+DlgLnkTargetPopup	: "&lt;yeni açilan pencere&gt;",
+DlgLnkTargetBlank	: "Yeni Pencere(_blank)",
+DlgLnkTargetParent	: "Anne Pencere (_parent)",
+DlgLnkTargetSelf	: "Kendi Penceresi (_self)",
+DlgLnkTargetTop		: "En Üst Pencere (_top)",
+DlgLnkTargetFrameName	: "Hedef Çerçeve Ismi",
+DlgLnkPopWinName	: "Yeni Açilan Pencere Ismi",
+DlgLnkPopWinFeat	: "Yeni Açilan Pencere Özellikleri",
+DlgLnkPopResize		: "Boyutlandirilabilir",
+DlgLnkPopLocation	: "Yer Çubugu",
+DlgLnkPopMenu		: "Mönü Çubugu",
+DlgLnkPopScroll		: "Kaydirma Çubuklari",
+DlgLnkPopStatus		: "Statü Çubugu",
+DlgLnkPopToolbar	: "Araç Çubugu",
+DlgLnkPopFullScrn	: "Tam Ekran (IE)",
+DlgLnkPopDependent	: "Bagli-Dependent- (Netscape)",
+DlgLnkPopWidth		: "Genislik",
+DlgLnkPopHeight		: "Yükseklik",
+DlgLnkPopLeft		: "Sola Göre Pozisyon",
+DlgLnkPopTop		: "Yukariya Göre Pozisyon",
+
+DlnLnkMsgNoUrl		: "Lütfen köprü URL'sini yazin",
+DlnLnkMsgNoEMail	: "Lütfen E-posta adresini yazin",
+DlnLnkMsgNoAnchor	: "Lütfen bir çapa seçin",
+
+// Color Dialog
+DlgColorTitle		: "Renk Seç",
+DlgColorBtnClear	: "Temizle",
+DlgColorHighlight	: "Belirle",
+DlgColorSelected	: "Seçilmis",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ifade Ekle",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Özel Karakter Seç",
+
+// Table Dialog
+DlgTableTitle		: "Tablo Özellikleri",
+DlgTableRows		: "Satirlar",
+DlgTableColumns		: "Sütunlar",
+DlgTableBorder		: "Kenar Kalinligi",
+DlgTableAlign		: "Hizalama",
+DlgTableAlignNotSet	: "<Tanimlanmamis>",
+DlgTableAlignLeft	: "Sol",
+DlgTableAlignCenter	: "Merkez",
+DlgTableAlignRight	: "Sag",
+DlgTableWidth		: "Genislik",
+DlgTableWidthPx		: "piksel",
+DlgTableWidthPc		: "yüzde",
+DlgTableHeight		: "Yükseklik",
+DlgTableCellSpace	: "Izgara kalinligi",
+DlgTableCellPad		: "Izgara yazi arasi",
+DlgTableCaption		: "Baslik",
+
+// Table Cell Dialog
+DlgCellTitle		: "Hücre Özellikleri",
+DlgCellWidth		: "Genislik",
+DlgCellWidthPx		: "piksel",
+DlgCellWidthPc		: "yüzde",
+DlgCellHeight		: "Yükseklik",
+DlgCellWordWrap		: "Sözcük Kaydir",
+DlgCellWordWrapNotSet	: "&lt;Tanimlanmamis&gt;",
+DlgCellWordWrapYes	: "Evet",
+DlgCellWordWrapNo	: "Hayir",
+DlgCellHorAlign		: "Yatay Hizalama",
+DlgCellHorAlignNotSet	: "&lt;Tanimlanmamis&gt;",
+DlgCellHorAlignLeft	: "Sol",
+DlgCellHorAlignCenter	: "Merkez",
+DlgCellHorAlignRight: "Sag",
+DlgCellVerAlign		: "Dikey Hizalama",
+DlgCellVerAlignNotSet	: "&lt;Tanimlanmamis&gt;",
+DlgCellVerAlignTop	: "Tepe",
+DlgCellVerAlignMiddle	: "Orta",
+DlgCellVerAlignBottom	: "Alt",
+DlgCellVerAlignBaseline	: "Taban Çizgisi",
+DlgCellRowSpan		: "Satir Kapla",
+DlgCellCollSpan		: "Sütun Kapla",
+DlgCellBackColor	: "Arka Plan Rengi",
+DlgCellBorderColor	: "Kenar Rengi",
+DlgCellBtnSelect	: "Seç...",
+
+// Find Dialog
+DlgFindTitle		: "Bul",
+DlgFindFindBtn		: "Bul",
+DlgFindNotFoundMsg	: "Belirtilen yazi bulunamadi.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Degistir",
+DlgReplaceFindLbl		: "Aranan:",
+DlgReplaceReplaceLbl	: "Bunla degistir:",
+DlgReplaceCaseChk		: "Büyük/küçük harf duyarli",
+DlgReplaceReplaceBtn	: "Degistir",
+DlgReplaceReplAllBtn	: "Tümünü Degistir",
+DlgReplaceWordChk		: "Kelimenin tamami uysun",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Gezgin yaziliminizin güvenlik ayarlari editörün otomatik yapistirma islemine izin vermiyor. Islem için (Ctrl+V) tuslarini kullanin.",
+PasteErrorCut	: "Gezgin yaziliminizin güvenlik ayarlari editörün otomatik kesme islemine izin vermiyor. Islem için (Ctrl+X) tuslarini kullanin.",
+PasteErrorCopy	: "Gezgin yaziliminizin güvenlik ayarlari editörün otomatik kopyalama islemine izin vermiyor. Islem için (Ctrl+C) tuslarini kullanin.",
+
+PasteAsText		: "Düz Metin Olarak Yapistir",
+PasteFromWord	: "Word'den yapistir",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",	//MISSING
+DlgPasteIgnoreFont		: "Yazı Tipi tanımlarını yoksay",
+DlgPasteRemoveStyles	: "Sitil Tanımlarını çıkar",
+DlgPasteCleanBox		: "Temizlik Kutusu",
+
+
+// Color Picker
+ColorAutomatic	: "Otomatik",
+ColorMoreColors	: "Diger renkler...",
+
+// Document Properties
+DocProps		: "Doküman Özellikleri",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Çapa Özellikleri",
+DlgAnchorName		: "Çapa Ismi",
+DlgAnchorErrorName	: "Lütfen çapa için isim giriniz",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Sözlükte Yok",
+DlgSpellChangeTo		: "Suna degistir:",
+DlgSpellBtnIgnore		: "Yoksay",
+DlgSpellBtnIgnoreAll	: "Tümünü Yoksay",
+DlgSpellBtnReplace		: "Degistir",
+DlgSpellBtnReplaceAll	: "Tümünü Degistir",
+DlgSpellBtnUndo			: "Geri Al",
+DlgSpellNoSuggestions	: "- Öneri Yok -",
+DlgSpellProgress		: "Yazim denetimi islemde...",
+DlgSpellNoMispell		: "Yazim denetimi tamamlandi: Yanlis yazima raslanmadi",
+DlgSpellNoChanges		: "Yazim denetimi tamamlandi: Hiçbir kelime degistirilmedi",
+DlgSpellOneChange		: "Yazim denetimi tamamlandi: Bir kelime degistirildi",
+DlgSpellManyChanges		: "Yazim denetimi tamamlandi: %1 kelime degistirildi",
+
+IeSpellDownload			: "Yazim denetimi yüklenmemis. Simdi yüklemek ister misiniz?",
+
+// Button Dialog
+DlgButtonText	: "Metin (Deger)",
+DlgButtonType	: "Tip",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Isim",
+DlgCheckboxValue	: "Deger",
+DlgCheckboxSelected	: "Seçili",
+
+// Form Dialog
+DlgFormName		: "Isim",
+DlgFormAction	: "Islem",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Isim",
+DlgSelectValue		: "Deger",
+DlgSelectSize		: "Boyut",
+DlgSelectLines		: "satir",
+DlgSelectChkMulti	: "Çoklu seçime izin ver",
+DlgSelectOpAvail	: "Mevcut Seçenekler",
+DlgSelectOpText		: "Metin",
+DlgSelectOpValue	: "Deger",
+DlgSelectBtnAdd		: "Ekle",
+DlgSelectBtnModify	: "Düzenle",
+DlgSelectBtnUp		: "Yukari",
+DlgSelectBtnDown	: "Asagi",
+DlgSelectBtnSetValue : "Seçili deger olarak ata",
+DlgSelectBtnDelete	: "Sil",
+
+// Textarea Dialog
+DlgTextareaName	: "Isim",
+DlgTextareaCols	: "Sütunlar",
+DlgTextareaRows	: "Satirlar",
+
+// Text Field Dialog
+DlgTextName			: "Isim",
+DlgTextValue		: "Deger",
+DlgTextCharWidth	: "Karakter Genisligi",
+DlgTextMaxChars		: "En Fazla Karakter",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Metin",
+DlgTextTypePass		: "Sifre",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Isim",
+DlgHiddenValue	: "Deger",
+
+// Bulleted List Dialog
+BulletedListProp	: "Simgeli Liste Özellikleri",
+NumberedListProp	: "Numarali Liste Özellikleri",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Çember",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kare",
+DlgLstTypeNumbers	: "Sayilar (1, 2, 3)",
+DlgLstTypeLCase		: "Küçük Harfler (a, b, c)",
+DlgLstTypeUCase		: "Büyük Harfler (A, B, C)",
+DlgLstTypeSRoman	: "Küçük Romen Rakamlari (i, ii, iii)",
+DlgLstTypeLRoman	: "Büyük Romen Rakamlari (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Genel",
+DlgDocBackTab		: "Arka Plan",
+DlgDocColorsTab		: "Renler ve Mesafeler",
+DlgDocMetaTab		: "Tanim Bilgisi (Meta)",
+
+DlgDocPageTitle		: "Sayfa Basligi",
+DlgDocLangDir		: "Lisan Yönü",
+DlgDocLangDirLTR	: "Soldan Saga (LTR)",
+DlgDocLangDirRTL	: "Sagdan Sola (RTL)",
+DlgDocLangCode		: "Lisan Kodu",
+DlgDocCharSet		: "Karakter Kümesi Kodlamasi",
+DlgDocCharSetOther	: "Diger Karakter Kümesi Kodlamasi",
+
+DlgDocDocType		: "Doküman Türü Basligi",
+DlgDocDocTypeOther	: "Diger Doküman Türü Basligi",
+DlgDocIncXHTML		: "XHTML Bildirimlerini Dahil Et",
+DlgDocBgColor		: "Arka Plan Rengi",
+DlgDocBgImage		: "Arka Plan Resim URLsi",
+DlgDocBgNoScroll	: "Sabit Arka Plan",
+DlgDocCText			: "Metin",
+DlgDocCLink			: "Köprü",
+DlgDocCVisited		: "Görülmüs Köprü",
+DlgDocCActive		: "Aktif Köprü",
+DlgDocMargins		: "Kenar Bosluklari",
+DlgDocMaTop			: "Tepe",
+DlgDocMaLeft		: "Sol",
+DlgDocMaRight		: "Sag",
+DlgDocMaBottom		: "Alt",
+DlgDocMeIndex		: "Doküman Indeksleme Anahtar Kelimeleri (virgülle ayrilmis)",
+DlgDocMeDescr		: "Doküman Tanimi",
+DlgDocMeAuthor		: "Yazar",
+DlgDocMeCopy		: "Telif",
+DlgDocPreview		: "Ön Izleme",
+
+// Templates Dialog
+Templates			: "Düzenler",
+DlgTemplatesTitle	: "İçerik Düzenleri",
+DlgTemplatesSelMsg	: "Editörde açmak için lütfen bir düzen seçin.<br>(hali hazırdaki içerik kaybolacaktır.):",
+DlgTemplatesLoading	: "Düzenler listesi yüklenmekte. Lütfen bekleyiniz...",
+DlgTemplatesNoTpl	: "(Belirli bir düzen seçilmedi)",
+
+// About Dialog
+DlgAboutAboutTab	: "Hakkinda",
+DlgAboutBrowserInfoTab	: "Gezgin Bilgisi",
+DlgAboutVersion		: "versiyon",
+DlgAboutLicense		: "GNU Kisitli Kamu Lisansi (LGPL) kosullari altinda lisanslanmistir",
+DlgAboutInfo		: "Daha fazla bilgi için:"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/uk.js 1.4.0sr5-1/fckeditor/editor/lang/uk.js
--- 1.3.11sr1/fckeditor/editor/lang/uk.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/uk.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: uk.js
+ * 	Ukrainian language file.
+ * 
+ * File Authors:
+ * 		Alexander Pervak (pervak@gmail.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Згорнути панель інструментів",
+ToolbarExpand		: "Розгорнути панель інструментів",
+
+// Toolbar Items and Context Menu
+Save				: "Зберегти",
+NewPage				: "Нова сторінка",
+Preview				: "Попередній перегляд",
+Cut					: "Вирізати",
+Copy				: "Копіювати",
+Paste				: "Вставити",
+PasteText			: "Вставити тільки текст",
+PasteWord			: "Вставити з Word",
+Print				: "Друк",
+SelectAll			: "Виділити все",
+RemoveFormat		: "Прибрати форматування",
+InsertLinkLbl		: "Посилання",
+InsertLink			: "Вставити/Редагувати посилання",
+RemoveLink			: "Знищити посилання",
+Anchor				: "Вставити/Редагувати якір",
+InsertImageLbl		: "Зображення",
+InsertImage			: "Вставити/Редагувати зображення",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Вставити/Редагувати Flash",
+InsertTableLbl		: "Таблиця",
+InsertTable			: "Вставити/Редагувати таблицю",
+InsertLineLbl		: "Лінія",
+InsertLine			: "Вставити горизонтальну лінію",
+InsertSpecialCharLbl: "Спеціальний символ",
+InsertSpecialChar	: "Вставити спеціальний символ",
+InsertSmileyLbl		: "Смайлик",
+InsertSmiley		: "Вставити смайлик",
+About				: "Про FCKeditor",
+Bold				: "Жирний",
+Italic				: "Курсив",
+Underline			: "Підкреслений",
+StrikeThrough		: "Закреслений",
+Subscript			: "Підрядковий індекс",
+Superscript			: "Надрядковий индекс",
+LeftJustify			: "По лівому краю",
+CenterJustify		: "По центру",
+RightJustify		: "По правому краю",
+BlockJustify		: "По ширині",
+DecreaseIndent		: "Зменшити відступ",
+IncreaseIndent		: "Збільшити відступ",
+Undo				: "Повернути",
+Redo				: "Повторити",
+NumberedListLbl		: "Нумерований список",
+NumberedList		: "Вставити/Видалити нумерований список",
+BulletedListLbl		: "Маркований список",
+BulletedList		: "Вставити/Видалити маркований список",
+ShowTableBorders	: "Показати бордюри таблиці",
+ShowDetails			: "Показати деталі",
+Style				: "Стиль",
+FontFormat			: "Форматування",
+Font				: "Шрифт",
+FontSize			: "Розмір",
+TextColor			: "Колір тексту",
+BGColor				: "Колір фону",
+Source				: "Джерело",
+Find				: "Пошук",
+Replace				: "Заміна",
+SpellCheck			: "Перевірити орфографію",
+UniversalKeyboard	: "Універсальна клавіатура",
+
+Form			: "Форма",
+Checkbox		: "Флагова кнопка",
+RadioButton		: "Кнопка вибору",
+TextField		: "Текстове поле",
+Textarea		: "Текстова область",
+HiddenField		: "Приховане поле",
+Button			: "Кнопка",
+SelectionField	: "Список",
+ImageButton		: "Кнопка із зображенням",
+
+// Context Menu
+EditLink			: "Вставити посилання",
+InsertRow			: "Вставити строку",
+DeleteRows			: "Видалити строки",
+InsertColumn		: "Вставити колонку",
+DeleteColumns		: "Видалити колонки",
+InsertCell			: "Вставити комірку",
+DeleteCells			: "Видалити комірки",
+MergeCells			: "Об'єднати комірки",
+SplitCell			: "Роз'єднати комірку",
+CellProperties		: "Властивості комірки",
+TableProperties		: "Властивості таблиці",
+ImageProperties		: "Властивості зображення",
+FlashProperties		: "Властивості Flash",
+
+AnchorProp			: "Властивості якоря",
+ButtonProp			: "Властивості кнопки",
+CheckboxProp		: "Властивості флагової кнопки",
+HiddenFieldProp		: "Властивості прихованого поля",
+RadioButtonProp		: "Властивості кнопки вибору",
+ImageButtonProp		: "Властивості кнопки із зображенням",
+TextFieldProp		: "Властивості текстового поля",
+SelectionFieldProp	: "Властивості списку",
+TextareaProp		: "Властивості текстової області",
+FormProp			: "Властивості форми",
+
+FontFormats			: "Нормальний;Форматований;Адреса;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обробка XHTML. Зачекайте, будь ласка...",
+Done				: "Зроблено",
+PasteWordConfirm	: "Текст, що ви хочете вставити, схожий на копійований з Word. Ви хочете очистити його перед вставкою?",
+NotCompatiblePaste	: "Ця команда доступна для Internet Explorer версії 5.5 або вище. Ви хочете вставити без очищення?",
+UnknownToolbarItem	: "Невідомий елемент панелі інструментів \"%1\"",
+UnknownCommand		: "Невідоме ім'я команди \"%1\"",
+NotImplemented		: "Команда не реалізована",
+UnknownToolbarSet	: "Панель інструментів \"%1\" не існує",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Скасувати",
+DlgBtnClose			: "Зачинити",
+DlgBtnBrowseServer	: "Передивитися на сервері",
+DlgAdvancedTag		: "Розширений",
+DlgOpOther			: "&lt;Інше&gt;",
+DlgInfoTab			: "Інфо",
+DlgAlertUrl			: "Вставте, будь-ласка, URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;не визначено&gt;",
+DlgGenId			: "Ідентифікатор",
+DlgGenLangDir		: "Напрямок мови",
+DlgGenLangDirLtr	: "Зліва на право (LTR)",
+DlgGenLangDirRtl	: "Зправа на ліво (RTL)",
+DlgGenLangCode		: "Мова",
+DlgGenAccessKey		: "Гаряча клавіша",
+DlgGenName			: "Им'я",
+DlgGenTabIndex		: "Послідовність переходу",
+DlgGenLongDescr		: "Довгий опис URL",
+DlgGenClass			: "Клас CSS",
+DlgGenTitle			: "Заголовок",
+DlgGenContType		: "Тип вмісту",
+DlgGenLinkCharset	: "Кодировка",
+DlgGenStyle			: "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle			: "Властивості зображення",
+DlgImgInfoTab		: "Інформація про изображении",
+DlgImgBtnUpload		: "Надіслати на сервер",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Закачати",
+DlgImgAlt			: "Альтернативний текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Висота",
+DlgImgLockRatio		: "Зберегти пропорції",
+DlgBtnResetSize		: "Скинути розмір",
+DlgImgBorder		: "Бордюр",
+DlgImgHSpace		: "Горизонтальний відступ",
+DlgImgVSpace		: "Вертикальний відступ",
+DlgImgAlign			: "Вирівнювання",
+DlgImgAlignLeft		: "По лівому краю",
+DlgImgAlignAbsBottom: "Абс по низу",
+DlgImgAlignAbsMiddle: "Абс по середині",
+DlgImgAlignBaseline	: "По базовій лінії",
+DlgImgAlignBottom	: "По низу",
+DlgImgAlignMiddle	: "По середині",
+DlgImgAlignRight	: "По правому краю",
+DlgImgAlignTextTop	: "Текст на верху",
+DlgImgAlignTop		: "По верху",
+DlgImgPreview		: "Попередній перегляд",
+DlgImgAlertUrl		: "Будь ласка, введіть URL зображення",
+DlgImgLinkTab		: "Посилання",
+
+// Flash Dialog
+DlgFlashTitle		: "Властивості Flash",
+DlgFlashChkPlay		: "Авто програвання",
+DlgFlashChkLoop		: "Зациклити",
+DlgFlashChkMenu		: "Дозволити меню Flash",
+DlgFlashScale		: "Масштаб",
+DlgFlashScaleAll	: "Показати всі",
+DlgFlashScaleNoBorder	: "Без рамки",
+DlgFlashScaleFit	: "Дійсний розмір",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Посилання",
+DlgLnkInfoTab		: "Інформація посилання",
+DlgLnkTargetTab		: "Ціль",
+
+DlgLnkType			: "Тип посилання",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Якір на цю сторінку",
+DlgLnkTypeEMail		: "Эл. пошта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "&lt;інше&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Оберіть якір",
+DlgLnkAnchorByName	: "За ім'ям якоря",
+DlgLnkAnchorById	: "За ідентифікатором елемента",
+DlgLnkNoAnchors		: "&lt;Немає якорів доступних в цьому документі&gt;",
+DlgLnkEMail			: "Адреса ел. пошти",
+DlgLnkEMailSubject	: "Тема листа",
+DlgLnkEMailBody		: "Тіло повідомлення",
+DlgLnkUpload		: "Закачати",
+DlgLnkBtnUpload		: "Переслати на сервер",
+
+DlgLnkTarget		: "Ціль",
+DlgLnkTargetFrame	: "&lt;фрейм&gt;",
+DlgLnkTargetPopup	: "&lt;спливаюче вікно&gt;",
+DlgLnkTargetBlank	: "Нове вікно (_blank)",
+DlgLnkTargetParent	: "Батьківське вікно (_parent)",
+DlgLnkTargetSelf	: "Теж вікно (_self)",
+DlgLnkTargetTop		: "Найвище вікно (_top)",
+DlgLnkTargetFrameName	: "Ім'я целевого фрейма",
+DlgLnkPopWinName	: "Ім'я спливаючого вікна",
+DlgLnkPopWinFeat	: "Властивості спливаючого вікна",
+DlgLnkPopResize		: "Змінюється в розмірах",
+DlgLnkPopLocation	: "Панель локації",
+DlgLnkPopMenu		: "Панель меню",
+DlgLnkPopScroll		: "Полоси прокрутки",
+DlgLnkPopStatus		: "Строка статусу",
+DlgLnkPopToolbar	: "Панель інструментів",
+DlgLnkPopFullScrn	: "Повний екран (IE)",
+DlgLnkPopDependent	: "Залежний (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Висота",
+DlgLnkPopLeft		: "Позиція зліва",
+DlgLnkPopTop		: "Позиція зверху",
+
+DlnLnkMsgNoUrl		: "Будь ласка, занесіть URL посилання",
+DlnLnkMsgNoEMail	: "Будь ласка, занесіть адрес эл. почты",
+DlnLnkMsgNoAnchor	: "Будь ласка, оберіть якір",
+
+// Color Dialog
+DlgColorTitle		: "Оберіть колір",
+DlgColorBtnClear	: "Очистити",
+DlgColorHighlight	: "Підсвічений",
+DlgColorSelected	: "Обраний",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Вставити смайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Оберіть спеціальний символ",
+
+// Table Dialog
+DlgTableTitle		: "Властивості таблиці",
+DlgTableRows		: "Строки",
+DlgTableColumns		: "Колонки",
+DlgTableBorder		: "Розмір бордюра",
+DlgTableAlign		: "Вирівнювання",
+DlgTableAlignNotSet	: "<Не вст.>",
+DlgTableAlignLeft	: "Зліва",
+DlgTableAlignCenter	: "По центру",
+DlgTableAlignRight	: "Зправа",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пікселів",
+DlgTableWidthPc		: "відсотків",
+DlgTableHeight		: "Висота",
+DlgTableCellSpace	: "Проміжок (spacing)",
+DlgTableCellPad		: "Відступ (padding)",
+DlgTableCaption		: "Заголовок",
+
+// Table Cell Dialog
+DlgCellTitle		: "Властивості комірки",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пікселів",
+DlgCellWidthPc		: "відсотків",
+DlgCellHeight		: "Висота",
+DlgCellWordWrap		: "Згортання текста",
+DlgCellWordWrapNotSet	: "<Не вст.>",
+DlgCellWordWrapYes	: "Так",
+DlgCellWordWrapNo	: "Ні",
+DlgCellHorAlign		: "Горизонтальне вирівнювання",
+DlgCellHorAlignNotSet	: "<Не вст.>",
+DlgCellHorAlignLeft	: "Зліва",
+DlgCellHorAlignCenter	: "По центру",
+DlgCellHorAlignRight: "Зправа",
+DlgCellVerAlign		: "Вертикальное вирівнювання",
+DlgCellVerAlignNotSet	: "<Не вст.>",
+DlgCellVerAlignTop	: "Зверху",
+DlgCellVerAlignMiddle	: "Посередині",
+DlgCellVerAlignBottom	: "Знизу",
+DlgCellVerAlignBaseline	: "По базовій лінії",
+DlgCellRowSpan		: "Діапазон строк (span)",
+DlgCellCollSpan		: "Діапазон колонок (span)",
+DlgCellBackColor	: "Колір фона",
+DlgCellBorderColor	: "Колір бордюра",
+DlgCellBtnSelect	: "Оберіть...",
+
+// Find Dialog
+DlgFindTitle		: "Пошук",
+DlgFindFindBtn		: "Пошук",
+DlgFindNotFoundMsg	: "Вказаний текст не знайдений.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замінити",
+DlgReplaceFindLbl		: "Шукати:",
+DlgReplaceReplaceLbl	: "Замінити на:",
+DlgReplaceCaseChk		: "Учитывать регистр",
+DlgReplaceReplaceBtn	: "Замінити",
+DlgReplaceReplAllBtn	: "Замінити все",
+DlgReplaceWordChk		: "Збіг цілих слів",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вставки. Будь ласка, використовуйте клавіатуру для цього (Ctrl+V).",
+PasteErrorCut	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl+X).",
+PasteErrorCopy	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl+C).",
+
+PasteAsText		: "Вставити тільки текст",
+PasteFromWord	: "Вставити з Word",
+
+DlgPasteMsg2	: "Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.",
+DlgPasteIgnoreFont		: "Ігнорувати налаштування шрифтів",
+DlgPasteRemoveStyles	: "Видалити налаштування стилів",
+DlgPasteCleanBox		: "Очистити область",
+
+
+// Color Picker
+ColorAutomatic	: "Автоматичний",
+ColorMoreColors	: "Кольори...",
+
+// Document Properties
+DocProps		: "Властивості документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Властивості якоря",
+DlgAnchorName		: "Ім'я якоря",
+DlgAnchorErrorName	: "Будь ласка, занесіть ім'я якоря",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Не має в словнику",
+DlgSpellChangeTo		: "Замінити на",
+DlgSpellBtnIgnore		: "Ігнорувати",
+DlgSpellBtnIgnoreAll	: "Ігнорувати все",
+DlgSpellBtnReplace		: "Замінити",
+DlgSpellBtnReplaceAll	: "Замінити все",
+DlgSpellBtnUndo			: "Назад",
+DlgSpellNoSuggestions	: "- Немає припущень -",
+DlgSpellProgress		: "Виконується перевірка орфографії...",
+DlgSpellNoMispell		: "Перевірку орфографії завершено: помилок не знайдено",
+DlgSpellNoChanges		: "Перевірку орфографії завершено: жодне слово не змінено",
+DlgSpellOneChange		: "Перевірку орфографії завершено: змінено одно слово",
+DlgSpellManyChanges		: "Перевірку орфографії завершено: 1% слів змінено",
+
+IeSpellDownload			: "Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?",
+
+// Button Dialog
+DlgButtonText	: "Текст (Значення)",
+DlgButtonType	: "Тип",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ім'я",
+DlgCheckboxValue	: "Значення",
+DlgCheckboxSelected	: "Обрана",
+
+// Form Dialog
+DlgFormName		: "Ім'я",
+DlgFormAction	: "Дія",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Ім'я",
+DlgSelectValue		: "Значення",
+DlgSelectSize		: "Розмір",
+DlgSelectLines		: "лінії",
+DlgSelectChkMulti	: "Дозволити обрання декількох позицій",
+DlgSelectOpAvail	: "Доступні варіанти",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Значення",
+DlgSelectBtnAdd		: "Добавити",
+DlgSelectBtnModify	: "Змінити",
+DlgSelectBtnUp		: "Вгору",
+DlgSelectBtnDown	: "Вниз",
+DlgSelectBtnSetValue : "Встановити як вибране значення",
+DlgSelectBtnDelete	: "Видалити",
+
+// Textarea Dialog
+DlgTextareaName	: "Ім'я",
+DlgTextareaCols	: "Колонки",
+DlgTextareaRows	: "Строки",
+
+// Text Field Dialog
+DlgTextName			: "Ім'я",
+DlgTextValue		: "Значення",
+DlgTextCharWidth	: "Ширина",
+DlgTextMaxChars		: "Макс. кіл-ть символів",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ім'я",
+DlgHiddenValue	: "Значення",
+
+// Bulleted List Dialog
+BulletedListProp	: "Властивості маркованого списка",
+NumberedListProp	: "Властивості нумерованного списка",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Коло",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Номери (1, 2, 3)",
+DlgLstTypeLCase		: "Літери нижнього регістра(a, b, c)",
+DlgLstTypeUCase		: "Літери ВЕРХНЬОГО РЕГІСТРА (A, B, C)",
+DlgLstTypeSRoman	: "Малі римські літери (i, ii, iii)",
+DlgLstTypeLRoman	: "Великі римські літери (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Загальні",
+DlgDocBackTab		: "Заднє тло",
+DlgDocColorsTab		: "Кольори та відступи",
+DlgDocMetaTab		: "Мета дані",
+
+DlgDocPageTitle		: "Заголовок сторінки",
+DlgDocLangDir		: "Напрямок тексту",
+DlgDocLangDirLTR	: "Зліва на право (LTR)",
+DlgDocLangDirRTL	: "Зправа на лево (RTL)",
+DlgDocLangCode		: "Код мови",
+DlgDocCharSet		: "Кодування набору символів",
+DlgDocCharSetOther	: "Інше кодування набору символів",
+
+DlgDocDocType		: "Заголовок типу документу",
+DlgDocDocTypeOther	: "Інший заголовок типу документу",
+DlgDocIncXHTML		: "Ввімкнути XHTML оголошення",
+DlgDocBgColor		: "Колір тла",
+DlgDocBgImage		: "URL зображення тла",
+DlgDocBgNoScroll	: "Тло без прокрутки",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Посилання",
+DlgDocCVisited		: "Відвідане посилання",
+DlgDocCActive		: "Активне посилання",
+DlgDocMargins		: "Відступи сторінки",
+DlgDocMaTop			: "Верхній",
+DlgDocMaLeft		: "Лівий",
+DlgDocMaRight		: "Правий",
+DlgDocMaBottom		: "Нижній",
+DlgDocMeIndex		: "Ключові слова документа (розділені комами)",
+DlgDocMeDescr		: "Опис документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторські права",
+DlgDocPreview		: "Попередній перегляд",
+
+// Templates Dialog
+Templates			: "Шаблони",
+DlgTemplatesTitle	: "Шаблони змісту",
+DlgTemplatesSelMsg	: "Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):",
+DlgTemplatesLoading	: "Завантаження списку шаблонів. Зачекайте, будь ласка...",
+DlgTemplatesNoTpl	: "(Не визначено жодного шаблону)",
+
+// About Dialog
+DlgAboutAboutTab	: "Про програму",
+DlgAboutBrowserInfoTab	: "Інформація браузера",
+DlgAboutVersion		: "Версія",
+DlgAboutLicense		: "Ліцензовано згідно умовам GNU Lesser General Public License",
+DlgAboutInfo		: "Додаткову інформацію дивіться на "
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/vi.js 1.4.0sr5-1/fckeditor/editor/lang/vi.js
--- 1.3.11sr1/fckeditor/editor/lang/vi.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/vi.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: vi.js
+ * 	Vietnamese language file.
+ * 
+ * File Authors:
+ * 		Phan Binh Giang (bbbgiang@yahoo.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Ghi",
+NewPage				: "Trang Mới",
+Preview				: "Xem trước",
+Cut					: "Cắt",
+Copy				: "Sao",
+Paste				: "Dán",
+PasteText			: "Dán Ký tự đơn thuần",
+PasteWord			: "Dán với định dạng Word",
+Print				: "In",
+SelectAll			: "Chọn Tất cả",
+RemoveFormat		: "Xoá Định dạng",
+InsertLinkLbl		: "Liên kết",
+InsertLink			: "Chèn/Sửa Liên kết",
+RemoveLink			: "Xoá Liên kết",
+Anchor				: "Chèn/Sửa Neo",
+InsertImageLbl		: "Hình ảnh",
+InsertImage			: "Chèn/Sửa Hình ảnh",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Chèn/Sửa Flash",
+InsertTableLbl		: "Bảng",
+InsertTable			: "Chèn/Sửa bảng",
+InsertLineLbl		: "Đường phân cách",
+InsertLine			: "Chèn đường phân cách ngang",
+InsertSpecialCharLbl: "Ký tự đặt biệt",
+InsertSpecialChar	: "Chèn Ký tự đặc biệt",
+InsertSmileyLbl		: "Hình cảm xúc",
+InsertSmiley		: "Chèn Hình cảm xúc",
+About				: "Giới thiệu về FCKeditor",
+Bold				: "Đậm",
+Italic				: "Nghiêng",
+Underline			: "Gạch chân",
+StrikeThrough		: "Gạch ngang",
+Subscript			: "Chỉ số dưới",
+Superscript			: "Chỉ số trên",
+LeftJustify			: "Canh bên Trái",
+CenterJustify		: "Canh Giữa",
+RightJustify		: "Canh bên Phải",
+BlockJustify		: "Canh Hai bên",
+DecreaseIndent		: "Dịch sang Trái",
+IncreaseIndent		: "Dịch sang Phải",
+Undo				: "Phục hồi Lùi",
+Redo				: "Phục hồi Tiến",
+NumberedListLbl		: "Số thứ tự",
+NumberedList		: "Chèn/Xoá Số thứ tự",
+BulletedListLbl		: "Danh sách Bulleted",
+BulletedList		: "Chèn/Xoá Danh sách Bulleted",
+ShowTableBorders	: "Hiện thị Đường viền bảng",
+ShowDetails			: "Hiện thị Chi tiết",
+Style				: "Mẫu",
+FontFormat			: "Định dạng",
+Font				: "Font",
+FontSize			: "Cỡ Chữ",
+TextColor			: "Màu Chữ",
+BGColor				: "Màu Nền",
+Source				: "Mã nguồn",
+Find				: "Tìm",
+Replace				: "Thay thế",
+SpellCheck			: "Kiểm tra Chính tả",
+UniversalKeyboard	: "Bàn phím quốc tế",
+
+Form			: "Form",
+Checkbox		: "Nốt Kiểm",
+RadioButton		: "Nốt Đài",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+// Context Menu
+EditLink			: "Sửa Liên kết",
+InsertRow			: "Chèn Dòng",
+DeleteRows			: "Xoá Dòng",
+InsertColumn		: "Chèn Cột",
+DeleteColumns		: "Xoá Cột",
+InsertCell			: "Chèn Ô",
+DeleteCells			: "Xoá Ô",
+MergeCells			: "Trộn Ô",
+SplitCell			: "Chia Ô",
+CellProperties		: "Thuộc tính Ô",
+TableProperties		: "Thuộc tính Bảng",
+ImageProperties		: "Thuộc tính Hình ảnh",
+FlashProperties		: "Thuộc tính Flash",
+
+AnchorProp			: "Thuộc tính Neo",
+ButtonProp			: "Thuộc tính Button",
+CheckboxProp		: "Thuộc tính Nốt kiểm",
+HiddenFieldProp		: "Thuộc tính Hidden Field",
+RadioButtonProp		: "Thuộc tính Nốt đài",
+ImageButtonProp		: "Thuộc tính Image Button",
+TextFieldProp		: "Thuộc tính Text Field",
+SelectionFieldProp	: "Thuộc tính Selection Field",
+TextareaProp		: "Thuộc tính Textarea",
+FormProp			: "Thuộc tính Form",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Đang xử lý XHTML. Xin hãy đợi...",
+Done				: "Đã hoàn thành",
+PasteWordConfirm	: "Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?",
+NotCompatiblePaste	: "Lệnh này chỉ được hỗ trợ từ trình duyệt Internet Explorer phiên bản 5.5 hoặc mới hơn. Bạn có muốn dán nguyên mẫu?",
+UnknownToolbarItem	: "Không rõ Nốt \"%1\"",
+UnknownCommand		: "Không rõ lệnh \"%1\"",
+NotImplemented		: "Lệnh không được thi hành",
+UnknownToolbarSet	: "Thanh công cụ \"%1\" không tồn tại",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Đồng ý",
+DlgBtnCancel		: "Bỏ qua",
+DlgBtnClose			: "Đóng",
+DlgBtnBrowseServer	: "Duyệt trên máy chủ",
+DlgAdvancedTag		: "Mở rộng",
+DlgOpOther			: "&lt;Khác&gt;",
+DlgInfoTab			: "Thông tin",
+DlgAlertUrl			: "Hãy đưa vào một URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;không thiết lập&gt;",
+DlgGenId			: "Định danh",
+DlgGenLangDir		: "Đường dẫn Ngôn ngữ",
+DlgGenLangDirLtr	: "Trái sang Phải (LTR)",
+DlgGenLangDirRtl	: "Phải sang Trái (RTL)",
+DlgGenLangCode		: "Mã Ngôn ngữ",
+DlgGenAccessKey		: "Phím Truy cập",
+DlgGenName			: "Tên",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Mô tả URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Mẫu",
+
+// Image Dialog
+DlgImgTitle			: "Thuộc tính Hình ảnh",
+DlgImgInfoTab		: "Thông tin Hình ảnh",
+DlgImgBtnUpload		: "Gửi lên Máy chủ",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Tải lên",
+DlgImgAlt			: "Chú thích Hình ảnh",
+DlgImgWidth			: "Rộng",
+DlgImgHeight		: "Cao",
+DlgImgLockRatio		: "Giữ tỷ lệ",
+DlgBtnResetSize		: "Kích thước gốc",
+DlgImgBorder		: "Đường viền",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Vị trí",
+DlgImgAlignLeft		: "Trái",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Dưới",
+DlgImgAlignMiddle	: "Giữa",
+DlgImgAlignRight	: "Phải",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Trên",
+DlgImgPreview		: "Xem trước",
+DlgImgAlertUrl		: "Hãy đưa vào URL của hình ảnh",
+DlgImgLinkTab		: "Liên kết",
+
+// Flash Dialog
+DlgFlashTitle		: "Thuộc tính Flash",
+DlgFlashChkPlay		: "Tự động Chạy",
+DlgFlashChkLoop		: "Lặp",
+DlgFlashChkMenu		: "Kích hoạt Menu Flash ",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Hiển thị tất cả",
+DlgFlashScaleNoBorder	: "Không đường viền",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Liên kết",
+DlgLnkInfoTab		: "Thông tin Liên kết",
+DlgLnkTargetTab		: "Hướng tới",
+
+DlgLnkType			: "Kiểu Liên kết",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Neo trong trang này",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Giao thức",
+DlgLnkProtoOther	: "&lt;khác&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Chọn một Neo",
+DlgLnkAnchorByName	: "Theo Tên Neo",
+DlgLnkAnchorById	: "Theo Định danh Element",
+DlgLnkNoAnchors		: "&lt;Không có Neo nào trong tài liệu&gt;",
+DlgLnkEMail			: "E-Mail",
+DlgLnkEMailSubject	: "Tựa đề Thông điệp",
+DlgLnkEMailBody		: "Nội dung Thông điệp",
+DlgLnkUpload		: "Tải lên",
+DlgLnkBtnUpload		: "Gửi lên Máy chủ",
+
+DlgLnkTarget		: "Hướng tới",
+DlgLnkTargetFrame	: "&lt;frame&gt;",
+DlgLnkTargetPopup	: "&lt;cửa sổ popup&gt;",
+DlgLnkTargetBlank	: "Cửa sổ mới (_blank)",
+DlgLnkTargetParent	: "Cửa sổ cha (_parent)",
+DlgLnkTargetSelf	: "Cùng cửa sổ (_self)",
+DlgLnkTargetTop		: "Cửa sổ trên cùng(_top)",
+DlgLnkTargetFrameName	: "Tên Frame hướng tới",
+DlgLnkPopWinName	: "Tên Cửa sổ Popup",
+DlgLnkPopWinFeat	: "Cửa sổ Popup Đặc trưng",
+DlgLnkPopResize		: "Kích thước thay đổi",
+DlgLnkPopLocation	: "Location Bar",	//MISSING
+DlgLnkPopMenu		: "Thanh Menu",
+DlgLnkPopScroll		: "Thanh cuộn",
+DlgLnkPopStatus		: "Thanh trạng thái",
+DlgLnkPopToolbar	: "Thanh công cụ",
+DlgLnkPopFullScrn	: "Toàn màn hình (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Rộng",
+DlgLnkPopHeight		: "Cao",
+DlgLnkPopLeft		: "Vị trí Trái",
+DlgLnkPopTop		: "Vị trí Trên",
+
+DlnLnkMsgNoUrl		: "Hãy đưa vào Liên kết URL",
+DlnLnkMsgNoEMail	: "Hãy đưa vào địa chỉ e-mail",
+DlnLnkMsgNoAnchor	: "Hãy chọn một Neo",
+
+// Color Dialog
+DlgColorTitle		: "Chọn màu",
+DlgColorBtnClear	: "Xoá",
+DlgColorHighlight	: "Điểm sáng",
+DlgColorSelected	: "Đã chọn",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Chèn một hình cảm xúc",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Chọn ký tự đặc biệt",
+
+// Table Dialog
+DlgTableTitle		: "Thuộc tính bảng",
+DlgTableRows		: "Dòng",
+DlgTableColumns		: "Cột",
+DlgTableBorder		: "Cỡ Đường viền",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Không thiết lập>",
+DlgTableAlignLeft	: "Trái",
+DlgTableAlignCenter	: "Giữa",
+DlgTableAlignRight	: "Phải",
+DlgTableWidth		: "Rộng",
+DlgTableWidthPx		: "điểm",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Cao",
+DlgTableCellSpace	: "Khoảng cách Ô",
+DlgTableCellPad		: "Đệm Ô",
+DlgTableCaption		: "Đầu đề",
+
+// Table Cell Dialog
+DlgCellTitle		: "Thuộc tính Ô",
+DlgCellWidth		: "Rộng",
+DlgCellWidthPx		: "điểm",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Cao",
+DlgCellWordWrap		: "Dàn từ",
+DlgCellWordWrapNotSet	: "&lt;Không thiết lập&gt;",
+DlgCellWordWrapYes	: "Đồng ý",
+DlgCellWordWrapNo	: "Không",
+DlgCellHorAlign		: "Sắp xếp Ngang",
+DlgCellHorAlignNotSet	: "&lt;Không thiết lập&gt;",
+DlgCellHorAlignLeft	: "Trái",
+DlgCellHorAlignCenter	: "Giữa",
+DlgCellHorAlignRight: "Phải",
+DlgCellVerAlign		: "Sắp xếp Dọc",
+DlgCellVerAlignNotSet	: "&lt;Không thiết lập&gt;",
+DlgCellVerAlignTop	: "Trên",
+DlgCellVerAlignMiddle	: "Giữa",
+DlgCellVerAlignBottom	: "Dưới",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Màu nền",
+DlgCellBorderColor	: "Màu viền",
+DlgCellBtnSelect	: "Chọn...",
+
+// Find Dialog
+DlgFindTitle		: "Tìm",
+DlgFindFindBtn		: "Tìm",
+DlgFindNotFoundMsg	: "Chuỗi cần tìm không thấy.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Thay thế",
+DlgReplaceFindLbl		: "Tìm gì:",
+DlgReplaceReplaceLbl	: "Thay bằng:",
+DlgReplaceCaseChk		: "Đúng chứ HOA/thường",
+DlgReplaceReplaceBtn	: "Thay thế",
+DlgReplaceReplAllBtn	: "Thay thế Tất cả",
+DlgReplaceWordChk		: "Đúng từ",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "An ninh trình duyệt của bạn được thiết lập không cho phép trình soạn thảo tự động thực thi lệnh dán. Hãy sử dụng bàn phím cho lệnh này (Ctrl+V).",
+PasteErrorCut	: "An ninh trình duyệt của bạn được thiết lập không cho phép trình soạn thảo tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl+X).",
+PasteErrorCopy	: "An ninh trình duyệt của bạn được thiết lập không cho phép trình soạn thảo tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl+C).",
+
+PasteAsText		: "Dán ký tự đơn thuần",
+PasteFromWord	: "Dán với định dạng Word",
+
+DlgPasteMsg2	: "Hãy dán vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nốt <STRONG>Đồng ý</STRONG>.",
+DlgPasteIgnoreFont		: "Chấp nhận các định dạng Font",
+DlgPasteRemoveStyles	: "Xoá tất cả các định dạng Styles",
+DlgPasteCleanBox		: "Xoá sạch",
+
+
+// Color Picker
+ColorAutomatic	: "Tự động",
+ColorMoreColors	: "Màu khác...",
+
+// Document Properties
+DocProps		: "Thuộc tính tài liệu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Thuộc tính Neo",
+DlgAnchorName		: "Tên Neo",
+DlgAnchorErrorName	: "Hãy đưa vào tên Neo",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Không trong từ điển",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Bỏ qua",
+DlgSpellBtnIgnoreAll	: "Bỏ qua Tất cả",
+DlgSpellBtnReplace		: "Thay thế",
+DlgSpellBtnReplaceAll	: "Thay thế Tất cả",
+DlgSpellBtnUndo			: "Phục hồi lại",
+DlgSpellNoSuggestions	: "- Không đề xuất -",
+DlgSpellProgress		: "Đang tiến hành kiểm tra chính tả...",
+DlgSpellNoMispell		: "Hoàn tất kiểm tra chính tả: Không có lỗi chính tả",
+DlgSpellNoChanges		: "Hoàn tất kiểm tra chính tả: Không từ nào được thay đổi",
+DlgSpellOneChange		: "Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi",
+DlgSpellManyChanges		: "Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi",
+
+IeSpellDownload			: "Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có tải về ngay bây giờ?",
+
+// Button Dialog
+DlgButtonText	: "Text (Value)",
+DlgButtonType	: "Kiểu",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Tên",
+DlgCheckboxValue	: "Giá trị",
+DlgCheckboxSelected	: "Đã chọn",
+
+// Form Dialog
+DlgFormName		: "Tên",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Phương thức",
+
+// Select Field Dialog
+DlgSelectName		: "Tên",
+DlgSelectValue		: "Giá trị",
+DlgSelectSize		: "Kích cỡ",
+DlgSelectLines		: "dòng",
+DlgSelectChkMulti	: "Chấp nhận chọn nhiều",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Giá trị",
+DlgSelectBtnAdd		: "Thêm",
+DlgSelectBtnModify	: "Thay đổi",
+DlgSelectBtnUp		: "Lên",
+DlgSelectBtnDown	: "Xuống",
+DlgSelectBtnSetValue : "Giá trị được chọn",
+DlgSelectBtnDelete	: "Xoá",
+
+// Textarea Dialog
+DlgTextareaName	: "Tên",
+DlgTextareaCols	: "Cột",
+DlgTextareaRows	: "Dòng",
+
+// Text Field Dialog
+DlgTextName			: "Tên",
+DlgTextValue		: "Giá trị",
+DlgTextCharWidth	: "Rộng",
+DlgTextMaxChars		: "Số Ký tự tối đa",
+DlgTextType			: "Kiểu",
+DlgTextTypeText		: "Ký tự",
+DlgTextTypePass		: "Mật khẩu",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Tên",
+DlgHiddenValue	: "Giá trị",
+
+// Bulleted List Dialog
+BulletedListProp	: "Thuộc tính Danh sách Bulleted",
+NumberedListProp	: "Thuộc tính Danh sách Số",
+DlgLstType			: "Kiểu",
+DlgLstTypeCircle	: "Tròn",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Vuông",
+DlgLstTypeNumbers	: "Số (1, 2, 3)",
+DlgLstTypeLCase		: "Chữ cái thường (a, b, c)",
+DlgLstTypeUCase		: "Chữ cái hoa (A, B, C)",
+DlgLstTypeSRoman	: "Số LaMa thường (i, ii, iii)",
+DlgLstTypeLRoman	: "Số LaMa hoa (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Toàn thể",
+DlgDocBackTab		: "Nền",
+DlgDocColorsTab		: "Màu sắc và Biên",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Tiêu đề Trang",
+DlgDocLangDir		: "Đường dẫn Ngôn Ngữ",
+DlgDocLangDirLTR	: "Trái sang Phải (LTR)",
+DlgDocLangDirRTL	: "Phải sang Trái (RTL)",
+DlgDocLangCode		: "Mã Ngôn ngữ",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Kiểu Đề mục Tài liệu",
+DlgDocDocTypeOther	: "Kiểu Đề mục Tài liệu khác",
+DlgDocIncXHTML		: "Bao gồm cả định nghĩa XHTML",
+DlgDocBgColor		: "Màu nền",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Không cuộn nền",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Liên kết",
+DlgDocCVisited		: "Liên kết Đã viếng thăm",
+DlgDocCActive		: "Liên kết Hoạt động",
+DlgDocMargins		: "Biên của Trang",
+DlgDocMaTop			: "Trên",
+DlgDocMaLeft		: "Trái",
+DlgDocMaRight		: "Phải",
+DlgDocMaBottom		: "Dưới",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Mô tả tài liệu",
+DlgDocMeAuthor		: "Tác giả",
+DlgDocMeCopy		: "Bản quyền",
+DlgDocPreview		: "Xem trước",
+
+// Templates Dialog
+Templates			: "Mẫu dựng sẵn",
+DlgTemplatesTitle	: "Nội dung Mẫu dựng sẵn",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Đang nạp Danh sách Mẫu dựng sẵn. Xin hãy chờ...",
+DlgTemplatesNoTpl	: "(Không có Mẫu dựng sẵn nào được định nghĩa)",
+
+// About Dialog
+DlgAboutAboutTab	: "Giới thiệu",
+DlgAboutBrowserInfoTab	: "Thông tin trình duyệt",
+DlgAboutVersion		: "phiên bản",
+DlgAboutLicense		: "Licensed under the terms of the GNU Lesser General Public License",
+DlgAboutInfo		: "Thông tin thêm hãy đến"
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/zh-cn.js 1.4.0sr5-1/fckeditor/editor/lang/zh-cn.js
--- 1.3.11sr1/fckeditor/editor/lang/zh-cn.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/zh-cn.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: zh-cn.js
+ * 	Chinese Simplified language file.
+ * 
+ * File Authors:
+ * 		NetRube (NetRube@126.com)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "折叠工具栏",
+ToolbarExpand		: "展开工具栏",
+
+// Toolbar Items and Context Menu
+Save				: "保存",
+NewPage				: "新建",
+Preview				: "预览",
+Cut					: "剪切",
+Copy				: "复制",
+Paste				: "粘贴",
+PasteText			: "粘贴为无格式文本",
+PasteWord			: "从 MS Word 粘贴",
+Print				: "打印",
+SelectAll			: "全选",
+RemoveFormat		: "清除格式",
+InsertLinkLbl		: "超链接",
+InsertLink			: "插入/编辑超链接",
+RemoveLink			: "取消超链接",
+Anchor				: "插入/编辑锚点链接",
+InsertImageLbl		: "图象",
+InsertImage			: "插入/编辑图象",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "插入/编辑 Flash",
+InsertTableLbl		: "表格",
+InsertTable			: "插入/编辑表格",
+InsertLineLbl		: "水平线",
+InsertLine			: "插入水平线",
+InsertSpecialCharLbl: "特殊符号",
+InsertSpecialChar	: "插入特殊符号",
+InsertSmileyLbl		: "表情符",
+InsertSmiley		: "插入表情图标",
+About				: "关于 FCKeditor",
+Bold				: "加粗",
+Italic				: "倾斜",
+Underline			: "下划线",
+StrikeThrough		: "删除线",
+Subscript			: "下标",
+Superscript			: "上标",
+LeftJustify			: "左对齐",
+CenterJustify		: "居中对齐",
+RightJustify		: "右对齐",
+BlockJustify		: "两端对齐",
+DecreaseIndent		: "减少缩进量",
+IncreaseIndent		: "增加缩进量",
+Undo				: "撤消",
+Redo				: "重做",
+NumberedListLbl		: "编号列表",
+NumberedList		: "插入/删除编号列表",
+BulletedListLbl		: "项目列表",
+BulletedList		: "插入/删除项目列表",
+ShowTableBorders	: "显示表格边框",
+ShowDetails			: "显示详细资料",
+Style				: "样式",
+FontFormat			: "格式",
+Font				: "字体",
+FontSize			: "大小",
+TextColor			: "文本颜色",
+BGColor				: "背景颜色",
+Source				: "源代码",
+Find				: "查找",
+Replace				: "替换",
+SpellCheck			: "拼写检查",
+UniversalKeyboard	: "软键盘",
+
+Form			: "表单",
+Checkbox		: "复选框",
+RadioButton		: "单选按钮",
+TextField		: "单行文本",
+Textarea		: "多行文本",
+HiddenField		: "隐藏域",
+Button			: "按钮",
+SelectionField	: "列表/菜单",
+ImageButton		: "图像域",
+
+// Context Menu
+EditLink			: "编辑超链接",
+InsertRow			: "插入行",
+DeleteRows			: "删除行",
+InsertColumn		: "插入列",
+DeleteColumns		: "删除列",
+InsertCell			: "插入单元格",
+DeleteCells			: "删除单元格",
+MergeCells			: "合并单元格",
+SplitCell			: "拆分单元格",
+CellProperties		: "单元格属性",
+TableProperties		: "表格属性",
+ImageProperties		: "图象属性",
+FlashProperties		: "Flash 属性",
+
+AnchorProp			: "锚点链接属性",
+ButtonProp			: "按钮属性",
+CheckboxProp		: "复选框属性",
+HiddenFieldProp		: "隐藏域属性",
+RadioButtonProp		: "单选按钮属性",
+ImageButtonProp		: "图像域属性",
+TextFieldProp		: "单行文本属性",
+SelectionFieldProp	: "菜单/列表属性",
+TextareaProp		: "多行文本属性",
+FormProp			: "表单属性",
+
+FontFormats			: "普通;带格式的;地址;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段落(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "正在处理 XHTML，请稍等...",
+Done				: "完成",
+PasteWordConfirm	: "您要粘贴的内容好像是来自 MS Word，是否要清除 MS Word 格式后再粘贴？",
+NotCompatiblePaste	: "该命令需要 Internet Explorer 5.5 或更高版本的支持，是否按常规粘贴进行？",
+UnknownToolbarItem	: "未知工具栏项目 \"%1\"",
+UnknownCommand		: "未知命令名称 \"%1\"",
+NotImplemented		: "命令无法执行",
+UnknownToolbarSet	: "工具栏设置 \"%1\" 不存在",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "确定",
+DlgBtnCancel		: "取消",
+DlgBtnClose			: "关闭",
+DlgBtnBrowseServer	: "浏览服务器",
+DlgAdvancedTag		: "高级",
+DlgOpOther			: "&lt;其它&gt;",
+DlgInfoTab			: "信息",
+DlgAlertUrl			: "请插入 URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;没有设置&gt;",
+DlgGenId			: "ID",
+DlgGenLangDir		: "语言方向",
+DlgGenLangDirLtr	: "从左到右 (LTR)",
+DlgGenLangDirRtl	: "从右到左 (RTL)",
+DlgGenLangCode		: "语言代码",
+DlgGenAccessKey		: "访问键",
+DlgGenName			: "名称",
+DlgGenTabIndex		: "Tab 键次序",
+DlgGenLongDescr		: "详细说明地址",
+DlgGenClass			: "样式类名称",
+DlgGenTitle			: "标题",
+DlgGenContType		: "内容类型",
+DlgGenLinkCharset	: "字符编码",
+DlgGenStyle			: "行内样式",
+
+// Image Dialog
+DlgImgTitle			: "图象属性",
+DlgImgInfoTab		: "图象",
+DlgImgBtnUpload		: "发送到服务器上",
+DlgImgURL			: "源文件",
+DlgImgUpload		: "上传",
+DlgImgAlt			: "替换文本",
+DlgImgWidth			: "宽度",
+DlgImgHeight		: "高度",
+DlgImgLockRatio		: "锁定比例",
+DlgBtnResetSize		: "恢复尺寸",
+DlgImgBorder		: "边框大小",
+DlgImgHSpace		: "水平间距",
+DlgImgVSpace		: "垂直间距",
+DlgImgAlign			: "对齐方式",
+DlgImgAlignLeft		: "左对齐",
+DlgImgAlignAbsBottom: "绝对底边",
+DlgImgAlignAbsMiddle: "绝对居中",
+DlgImgAlignBaseline	: "基线",
+DlgImgAlignBottom	: "底边",
+DlgImgAlignMiddle	: "居中",
+DlgImgAlignRight	: "右对齐",
+DlgImgAlignTextTop	: "文本上方",
+DlgImgAlignTop		: "顶端",
+DlgImgPreview		: "预览",
+DlgImgAlertUrl		: "请输入图象地址",
+DlgImgLinkTab		: "链接",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash 属性",
+DlgFlashChkPlay		: "自动播放",
+DlgFlashChkLoop		: "循环",
+DlgFlashChkMenu		: "启用 Flash 菜单",
+DlgFlashScale		: "缩放",
+DlgFlashScaleAll	: "全部显示",
+DlgFlashScaleNoBorder	: "无边框",
+DlgFlashScaleFit	: "严格匹配",
+
+// Link Dialog
+DlgLnkWindowTitle	: "超链接",
+DlgLnkInfoTab		: "超链接信息",
+DlgLnkTargetTab		: "目标",
+
+DlgLnkType			: "超链接类型",
+DlgLnkTypeURL		: "超链接",
+DlgLnkTypeAnchor	: "页内锚点链接",
+DlgLnkTypeEMail		: "电子邮件",
+DlgLnkProto			: "协议",
+DlgLnkProtoOther	: "&lt;其它&gt;",
+DlgLnkURL			: "地址",
+DlgLnkAnchorSel		: "选择一个锚点",
+DlgLnkAnchorByName	: "按锚点名称",
+DlgLnkAnchorById	: "按锚点 ID",
+DlgLnkNoAnchors		: "&lt;此文档没有可用的锚点&gt;",
+DlgLnkEMail			: "地址",
+DlgLnkEMailSubject	: "主题",
+DlgLnkEMailBody		: "内容",
+DlgLnkUpload		: "上传",
+DlgLnkBtnUpload		: "发送到服务器上",
+
+DlgLnkTarget		: "目标",
+DlgLnkTargetFrame	: "&lt;框架&gt;",
+DlgLnkTargetPopup	: "&lt;弹出窗口&gt;",
+DlgLnkTargetBlank	: "新窗口 (_blank)",
+DlgLnkTargetParent	: "父窗口 (_parent)",
+DlgLnkTargetSelf	: "本窗口 (_self)",
+DlgLnkTargetTop		: "整页 (_top)",
+DlgLnkTargetFrameName	: "目标框架名称",
+DlgLnkPopWinName	: "弹出窗口名称",
+DlgLnkPopWinFeat	: "弹出窗口属性",
+DlgLnkPopResize		: "调整大小",
+DlgLnkPopLocation	: "地址栏",
+DlgLnkPopMenu		: "菜单栏",
+DlgLnkPopScroll		: "滚动条",
+DlgLnkPopStatus		: "状态栏",
+DlgLnkPopToolbar	: "工具栏",
+DlgLnkPopFullScrn	: "全屏 (IE)",
+DlgLnkPopDependent	: "依附 (NS)",
+DlgLnkPopWidth		: "宽",
+DlgLnkPopHeight		: "高",
+DlgLnkPopLeft		: "左",
+DlgLnkPopTop		: "右",
+
+DlnLnkMsgNoUrl		: "请输入超链接地址",
+DlnLnkMsgNoEMail	: "请输入电子邮件地址",
+DlnLnkMsgNoAnchor	: "请选择一个锚点",
+
+// Color Dialog
+DlgColorTitle		: "选择颜色",
+DlgColorBtnClear	: "清除",
+DlgColorHighlight	: "预览",
+DlgColorSelected	: "选择",
+
+// Smiley Dialog
+DlgSmileyTitle		: "插入表情图标",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "选择特殊符号",
+
+// Table Dialog
+DlgTableTitle		: "表格属性",
+DlgTableRows		: "行数",
+DlgTableColumns		: "列数",
+DlgTableBorder		: "边框",
+DlgTableAlign		: "对齐",
+DlgTableAlignNotSet	: "&lt;没有设置&gt;",
+DlgTableAlignLeft	: "左对齐",
+DlgTableAlignCenter	: "居中",
+DlgTableAlignRight	: "右对齐",
+DlgTableWidth		: "宽度",
+DlgTableWidthPx		: "像素",
+DlgTableWidthPc		: "百分比",
+DlgTableHeight		: "高度",
+DlgTableCellSpace	: "间距",
+DlgTableCellPad		: "边距",
+DlgTableCaption		: "标题",
+
+// Table Cell Dialog
+DlgCellTitle		: "单元格属性",
+DlgCellWidth		: "宽度",
+DlgCellWidthPx		: "像素",
+DlgCellWidthPc		: "百分比",
+DlgCellHeight		: "高度",
+DlgCellWordWrap		: "自动换行",
+DlgCellWordWrapNotSet	: "&lt;没有设置&gt;",
+DlgCellWordWrapYes	: "是",
+DlgCellWordWrapNo	: "否",
+DlgCellHorAlign		: "水平对齐",
+DlgCellHorAlignNotSet	: "&lt;没有设置&gt;",
+DlgCellHorAlignLeft	: "左对齐",
+DlgCellHorAlignCenter	: "居中",
+DlgCellHorAlignRight: "右对齐",
+DlgCellVerAlign		: "垂直对齐",
+DlgCellVerAlignNotSet	: "&lt;没有设置&gt;",
+DlgCellVerAlignTop	: "顶端",
+DlgCellVerAlignMiddle	: "居中",
+DlgCellVerAlignBottom	: "底部",
+DlgCellVerAlignBaseline	: "基线",
+DlgCellRowSpan		: "纵跨行数",
+DlgCellCollSpan		: "横跨列数",
+DlgCellBackColor	: "背景颜色",
+DlgCellBorderColor	: "边框颜色",
+DlgCellBtnSelect	: "选择...",
+
+// Find Dialog
+DlgFindTitle		: "查找",
+DlgFindFindBtn		: "查找",
+DlgFindNotFoundMsg	: "指定文本没有找到。",
+
+// Replace Dialog
+DlgReplaceTitle			: "替换",
+DlgReplaceFindLbl		: "查找:",
+DlgReplaceReplaceLbl	: "替换:",
+DlgReplaceCaseChk		: "区分大小写",
+DlgReplaceReplaceBtn	: "替换",
+DlgReplaceReplAllBtn	: "全部替换",
+DlgReplaceWordChk		: "全字匹配",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "您的浏览器安全设置不允许编辑器自动执行粘贴操作，请使用键盘快捷键(Ctrl+V)来完成。",
+PasteErrorCut	: "您的浏览器安全设置不允许编辑器自动执行剪切操作，请使用键盘快捷键(Ctrl+X)来完成。",
+PasteErrorCopy	: "您的浏览器安全设置不允许编辑器自动执行复制操作，请使用键盘快捷键(Ctrl+C)来完成。",
+
+PasteAsText		: "粘贴为无格式文本",
+PasteFromWord	: "从 MS Word 粘贴",
+
+DlgPasteMsg2	: "请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里，再按 <STRONG>确定</STRONG>。",
+DlgPasteIgnoreFont		: "忽略 Font 标签",
+DlgPasteRemoveStyles	: "清理 CSS 样式",
+DlgPasteCleanBox		: "清空上面内容",
+
+
+// Color Picker
+ColorAutomatic	: "自动",
+ColorMoreColors	: "其它颜色...",
+
+// Document Properties
+DocProps		: "页面属性",
+
+// Anchor Dialog
+DlgAnchorTitle		: "命名锚点",
+DlgAnchorName		: "锚点名称",
+DlgAnchorErrorName	: "请输入锚点名称",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "没有在字典里",
+DlgSpellChangeTo		: "更改为",
+DlgSpellBtnIgnore		: "忽略",
+DlgSpellBtnIgnoreAll	: "全部忽略",
+DlgSpellBtnReplace		: "替换",
+DlgSpellBtnReplaceAll	: "全部替换",
+DlgSpellBtnUndo			: "撤消",
+DlgSpellNoSuggestions	: "- 没有建议 -",
+DlgSpellProgress		: "正在进行拼写检查...",
+DlgSpellNoMispell		: "拼写检查完成：没有发现拼写错误",
+DlgSpellNoChanges		: "拼写检查完成：没有更改任何单词",
+DlgSpellOneChange		: "拼写检查完成：更改了一个单词",
+DlgSpellManyChanges		: "拼写检查完成：更改了 %1 个单词",
+
+IeSpellDownload			: "拼写检查插件还没安装，你是否想现在就下载？",
+
+// Button Dialog
+DlgButtonText	: "标签(值)",
+DlgButtonType	: "类型",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名称",
+DlgCheckboxValue	: "选定值",
+DlgCheckboxSelected	: "已勾选",
+
+// Form Dialog
+DlgFormName		: "名称",
+DlgFormAction	: "动作",
+DlgFormMethod	: "方法",
+
+// Select Field Dialog
+DlgSelectName		: "名称",
+DlgSelectValue		: "选定",
+DlgSelectSize		: "高度",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "允许多选",
+DlgSelectOpAvail	: "列表值",
+DlgSelectOpText		: "标签",
+DlgSelectOpValue	: "值",
+DlgSelectBtnAdd		: "新增",
+DlgSelectBtnModify	: "修改",
+DlgSelectBtnUp		: "上移",
+DlgSelectBtnDown	: "下移",
+DlgSelectBtnSetValue : "设为初始化时选定",
+DlgSelectBtnDelete	: "删除",
+
+// Textarea Dialog
+DlgTextareaName	: "名称",
+DlgTextareaCols	: "字符宽度",
+DlgTextareaRows	: "行数",
+
+// Text Field Dialog
+DlgTextName			: "名称",
+DlgTextValue		: "初始值",
+DlgTextCharWidth	: "字符宽度",
+DlgTextMaxChars		: "最多字符数",
+DlgTextType			: "类型",
+DlgTextTypeText		: "文本",
+DlgTextTypePass		: "密码",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名称",
+DlgHiddenValue	: "初始值",
+
+// Bulleted List Dialog
+BulletedListProp	: "项目列表属性",
+NumberedListProp	: "编号列表属性",
+DlgLstType			: "列表类型",
+DlgLstTypeCircle	: "圆圈",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "方块",
+DlgLstTypeNumbers	: "数字 (1, 2, 3)",
+DlgLstTypeLCase		: "小写字母 (a, b, c)",
+DlgLstTypeUCase		: "大写字母 (A, B, C)",
+DlgLstTypeSRoman	: "小写罗马数字 (i, ii, iii)",
+DlgLstTypeLRoman	: "大写罗马数字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "常规",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "颜色和边距",
+DlgDocMetaTab		: "Meta 数据",
+
+DlgDocPageTitle		: "页面标题",
+DlgDocLangDir		: "语言方向",
+DlgDocLangDirLTR	: "从左到右 (LTR)",
+DlgDocLangDirRTL	: "从右到左 (RTL)",
+DlgDocLangCode		: "语言代码",
+DlgDocCharSet		: "字符编码",
+DlgDocCharSetOther	: "其它字符编码",
+
+DlgDocDocType		: "文档类型",
+DlgDocDocTypeOther	: "其它文档类型",
+DlgDocIncXHTML		: "包含 XHTML 声明",
+DlgDocBgColor		: "背景颜色",
+DlgDocBgImage		: "背景图像",
+DlgDocBgNoScroll	: "不滚动背景图像",
+DlgDocCText			: "文本",
+DlgDocCLink			: "超链接",
+DlgDocCVisited		: "已访问的超链接",
+DlgDocCActive		: "活动超链接",
+DlgDocMargins		: "页面边距",
+DlgDocMaTop			: "上",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下",
+DlgDocMeIndex		: "页面索引关键字 (用半角逗号[,]分隔)",
+DlgDocMeDescr		: "页面说明",
+DlgDocMeAuthor		: "作者",
+DlgDocMeCopy		: "版权",
+DlgDocPreview		: "预览",
+
+// Templates Dialog
+Templates			: "模板",
+DlgTemplatesTitle	: "内容模板",
+DlgTemplatesSelMsg	: "请选择编辑器内容模板<br>(当前内容将会被清除替换):",
+DlgTemplatesLoading	: "正在加载模板列表，请稍等...",
+DlgTemplatesNoTpl	: "(没有模板)",
+
+// About Dialog
+DlgAboutAboutTab	: "关于",
+DlgAboutBrowserInfoTab	: "浏览器信息",
+DlgAboutVersion		: "版本",
+DlgAboutLicense		: "基于 GNU 通用公共许可证授权发布 ",
+DlgAboutInfo		: "要获得更多信息请访问 "
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/lang/zh.js 1.4.0sr5-1/fckeditor/editor/lang/zh.js
--- 1.3.11sr1/fckeditor/editor/lang/zh.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/lang/zh.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,475 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: zh.js
+ * 	Chinese Traditional language file.
+ * 
+ * File Authors:
+ * 		Zak Fong (zakfong@yahoo.com.tw)
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "隱藏面板",
+ToolbarExpand		: "顯示面板",
+
+// Toolbar Items and Context Menu
+Save				: "儲存",
+NewPage				: "開新檔案",
+Preview				: "預覽",
+Cut					: "剪下",
+Copy				: "複製",
+Paste				: "貼上",
+PasteText			: "貼為純文字格式",
+PasteWord			: "自 Word 貼上",
+Print				: "列印",
+SelectAll			: "全選",
+RemoveFormat		: "清除格式",
+InsertLinkLbl		: "超連結",
+InsertLink			: "插入/編輯超連結",
+RemoveLink			: "移除超連結",
+Anchor				: "插入/編輯錨點",
+InsertImageLbl		: "影像",
+InsertImage			: "插入/編輯影像",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "插入/編輯 Flash",
+InsertTableLbl		: "表格",
+InsertTable			: "插入/編輯表格",
+InsertLineLbl		: "水平線",
+InsertLine			: "插入水平線",
+InsertSpecialCharLbl: "特殊符號",
+InsertSpecialChar	: "插入特殊符號",
+InsertSmileyLbl		: "表情符號",
+InsertSmiley		: "插入表情符號",
+About				: "關於 FCKeditor",
+Bold				: "粗體",
+Italic				: "斜體",
+Underline			: "底線",
+StrikeThrough		: "刪除線",
+Subscript			: "下標",
+Superscript			: "上標",
+LeftJustify			: "靠左對齊",
+CenterJustify		: "置中",
+RightJustify		: "靠右對齊",
+BlockJustify		: "左右對齊",
+DecreaseIndent		: "減少縮排",
+IncreaseIndent		: "增加縮排",
+Undo				: "復原",
+Redo				: "重複",
+NumberedListLbl		: "編號清單",
+NumberedList		: "插入/移除編號清單",
+BulletedListLbl		: "項目清單",
+BulletedList		: "插入/移除項目清單",
+ShowTableBorders	: "顯示表格邊框",
+ShowDetails			: "顯示詳細資料",
+Style				: "樣式",
+FontFormat			: "格式",
+Font				: "字體",
+FontSize			: "大小",
+TextColor			: "文字顏色",
+BGColor				: "背景顏色",
+Source				: "原始碼",
+Find				: "尋找",
+Replace				: "取代",
+SpellCheck			: "拼字檢查",
+UniversalKeyboard	: "各國鍵盤",
+
+Form			: "表單",
+Checkbox		: "核取方塊",
+RadioButton		: "選項按鈕",
+TextField		: "文字方塊",
+Textarea		: "文字區域",
+HiddenField		: "隱藏欄位",
+Button			: "按鈕",
+SelectionField	: "清單/選單",
+ImageButton		: "影像按鈕",
+
+// Context Menu
+EditLink			: "編輯超連結",
+InsertRow			: "插入列",
+DeleteRows			: "刪除列",
+InsertColumn		: "插入欄",
+DeleteColumns		: "刪除欄",
+InsertCell			: "插入儲存格",
+DeleteCells			: "刪除儲存格",
+MergeCells			: "合併儲存格",
+SplitCell			: "分割儲存格",
+CellProperties		: "儲存格屬性",
+TableProperties		: "表格屬性",
+ImageProperties		: "影像屬性",
+FlashProperties		: "Flash 屬性",
+
+AnchorProp			: "錨點屬性",
+ButtonProp			: "按鈕屬性",
+CheckboxProp		: "核取方塊屬性",
+HiddenFieldProp		: "隱藏欄位屬性",
+RadioButtonProp		: "選項按鈕屬性",
+ImageButtonProp		: "影像按鈕屬性",
+TextFieldProp		: "文字方塊屬性",
+SelectionFieldProp	: "清單/選單屬性",
+TextareaProp		: "文字區域屬性",
+FormProp			: "表單屬性",
+
+FontFormats			: "一般;格式化;地址;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;段落 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "處理 XHTML 中，請稍候…",
+Done				: "完成",
+PasteWordConfirm	: "您想要貼上的文字似乎是自 Word 複製而來，請問您是否要先清除 Word 的格式後再行貼上？",
+NotCompatiblePaste	: "此指令僅在 Internet Explorer 5.5 或以上的版本有效。請問您是否同意不清除格式即貼上？",
+UnknownToolbarItem	: "未知工具列項目 \"%1\"",
+UnknownCommand		: "未知指令名稱 \"%1\"",
+NotImplemented		: "尚未安裝此指令",
+UnknownToolbarSet	: "工具列設定 \"%1\" 不存在",
+NoActiveX			: "You browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "確定",
+DlgBtnCancel		: "取消",
+DlgBtnClose			: "關閉",
+DlgBtnBrowseServer	: "瀏覽伺服器端",
+DlgAdvancedTag		: "進階",
+DlgOpOther			: "&lt;其他&gt;",
+DlgInfoTab			: "資訊",
+DlgAlertUrl			: "請插入 URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "&lt;尚未設定&gt;",
+DlgGenId			: "ID",
+DlgGenLangDir		: "語言方向",
+DlgGenLangDirLtr	: "由左而右 (LTR)",
+DlgGenLangDirRtl	: "由右而左 (RTL)",
+DlgGenLangCode		: "語言代碼",
+DlgGenAccessKey		: "存取鍵",
+DlgGenName			: "名稱",
+DlgGenTabIndex		: "定位順序",
+DlgGenLongDescr		: "詳細 URL",
+DlgGenClass			: "樣式表類別",
+DlgGenTitle			: "標題",
+DlgGenContType		: "內容類型",
+DlgGenLinkCharset	: "連結資源之編碼",
+DlgGenStyle			: "樣式",
+
+// Image Dialog
+DlgImgTitle			: "影像屬性",
+DlgImgInfoTab		: "影像資訊",
+DlgImgBtnUpload		: "上傳至伺服器",
+DlgImgURL			: "URL",
+DlgImgUpload		: "上傳",
+DlgImgAlt			: "替代文字",
+DlgImgWidth			: "寬度",
+DlgImgHeight		: "高度",
+DlgImgLockRatio		: "等比例",
+DlgBtnResetSize		: "重設為原大小",
+DlgImgBorder		: "邊框",
+DlgImgHSpace		: "水平距離",
+DlgImgVSpace		: "垂直距離",
+DlgImgAlign			: "對齊",
+DlgImgAlignLeft		: "靠左對齊",
+DlgImgAlignAbsBottom: "絕對下方",
+DlgImgAlignAbsMiddle: "絕對中間",
+DlgImgAlignBaseline	: "基準線",
+DlgImgAlignBottom	: "靠下對齊",
+DlgImgAlignMiddle	: "置中對齊",
+DlgImgAlignRight	: "靠右對齊",
+DlgImgAlignTextTop	: "文字上方",
+DlgImgAlignTop		: "靠上對齊",
+DlgImgPreview		: "預覽",
+DlgImgAlertUrl		: "請輸入影像 URL",
+DlgImgLinkTab		: "超連結",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash 屬性",
+DlgFlashChkPlay		: "自動播放",
+DlgFlashChkLoop		: "重複",
+DlgFlashChkMenu		: "開啟選單",
+DlgFlashScale		: "縮放",
+DlgFlashScaleAll	: "全部顯示",
+DlgFlashScaleNoBorder	: "無邊框",
+DlgFlashScaleFit	: "精確符合",
+
+// Link Dialog
+DlgLnkWindowTitle	: "超連結",
+DlgLnkInfoTab		: "超連結資訊",
+DlgLnkTargetTab		: "目標",
+
+DlgLnkType			: "超連接類型",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "本頁錨點",
+DlgLnkTypeEMail		: "電子郵件",
+DlgLnkProto			: "通訊協定",
+DlgLnkProtoOther	: "&lt;其他&gt;",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "請選擇錨點",
+DlgLnkAnchorByName	: "依錨點名稱",
+DlgLnkAnchorById	: "依元件 ID",
+DlgLnkNoAnchors		: "&lt;本文件尚無可用之錨點&gt;",
+DlgLnkEMail			: "電子郵件",
+DlgLnkEMailSubject	: "郵件主旨",
+DlgLnkEMailBody		: "郵件內容",
+DlgLnkUpload		: "上傳",
+DlgLnkBtnUpload		: "傳送至伺服器",
+
+DlgLnkTarget		: "目標",
+DlgLnkTargetFrame	: "&lt;框架&gt;",
+DlgLnkTargetPopup	: "&lt;快顯視窗&gt;",
+DlgLnkTargetBlank	: "新視窗 (_blank)",
+DlgLnkTargetParent	: "父視窗 (_parent)",
+DlgLnkTargetSelf	: "本視窗 (_self)",
+DlgLnkTargetTop		: "最上層視窗 (_top)",
+DlgLnkTargetFrameName	: "目標框架名稱",
+DlgLnkPopWinName	: "快顯視窗名稱",
+DlgLnkPopWinFeat	: "快顯視窗屬性",
+DlgLnkPopResize		: "可調整大小",
+DlgLnkPopLocation	: "網址列",
+DlgLnkPopMenu		: "選單列",
+DlgLnkPopScroll		: "捲軸",
+DlgLnkPopStatus		: "狀態列",
+DlgLnkPopToolbar	: "工具列",
+DlgLnkPopFullScrn	: "全螢幕 (IE)",
+DlgLnkPopDependent	: "從屬 (NS)",
+DlgLnkPopWidth		: "寬",
+DlgLnkPopHeight		: "高",
+DlgLnkPopLeft		: "左",
+DlgLnkPopTop		: "右",
+
+DlnLnkMsgNoUrl		: "請輸入欲連結的 URL",
+DlnLnkMsgNoEMail	: "請輸入電子郵件位址",
+DlnLnkMsgNoAnchor	: "請選擇錨點",
+
+// Color Dialog
+DlgColorTitle		: "請選擇顏色",
+DlgColorBtnClear	: "清除",
+DlgColorHighlight	: "預覽",
+DlgColorSelected	: "選擇",
+
+// Smiley Dialog
+DlgSmileyTitle		: "插入表情符號",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "請選擇特殊符號",
+
+// Table Dialog
+DlgTableTitle		: "表格屬性",
+DlgTableRows		: "列數",
+DlgTableColumns		: "欄數",
+DlgTableBorder		: "邊框",
+DlgTableAlign		: "對齊",
+DlgTableAlignNotSet	: "&lt;未設定&gt;",
+DlgTableAlignLeft	: "靠左對齊",
+DlgTableAlignCenter	: "置中",
+DlgTableAlignRight	: "靠右對齊",
+DlgTableWidth		: "寬度",
+DlgTableWidthPx		: "像素",
+DlgTableWidthPc		: "百分比",
+DlgTableHeight		: "高度",
+DlgTableCellSpace	: "間距",
+DlgTableCellPad		: "內距",
+DlgTableCaption		: "標題",
+
+// Table Cell Dialog
+DlgCellTitle		: "儲存格屬性",
+DlgCellWidth		: "寬度",
+DlgCellWidthPx		: "像素",
+DlgCellWidthPc		: "百分比",
+DlgCellHeight		: "高度",
+DlgCellWordWrap		: "自動換行",
+DlgCellWordWrapNotSet	: "&lt;尚未設定&gt;",
+DlgCellWordWrapYes	: "是",
+DlgCellWordWrapNo	: "否",
+DlgCellHorAlign		: "水平對齊",
+DlgCellHorAlignNotSet	: "&lt;尚未設定&gt;",
+DlgCellHorAlignLeft	: "靠左對齊",
+DlgCellHorAlignCenter	: "置中",
+DlgCellHorAlignRight: "靠右對齊",
+DlgCellVerAlign		: "垂直對齊",
+DlgCellVerAlignNotSet	: "&lt;尚未設定&gt;",
+DlgCellVerAlignTop	: "靠上對齊",
+DlgCellVerAlignMiddle	: "置中",
+DlgCellVerAlignBottom	: "靠下對齊",
+DlgCellVerAlignBaseline	: "基準線",
+DlgCellRowSpan		: "合併列數",
+DlgCellCollSpan		: "合併欄数",
+DlgCellBackColor	: "背景顏色",
+DlgCellBorderColor	: "邊框顏色",
+DlgCellBtnSelect	: "請選擇…",
+
+// Find Dialog
+DlgFindTitle		: "尋找",
+DlgFindFindBtn		: "尋找",
+DlgFindNotFoundMsg	: "未找到指定的文字。",
+
+// Replace Dialog
+DlgReplaceTitle			: "取代",
+DlgReplaceFindLbl		: "尋找:",
+DlgReplaceReplaceLbl	: "取代:",
+DlgReplaceCaseChk		: "大小寫須相符",
+DlgReplaceReplaceBtn	: "取代",
+DlgReplaceReplAllBtn	: "全部取代",
+DlgReplaceWordChk		: "全字相符",
+
+// Paste Operations / Dialog
+PasteErrorPaste	: "您的瀏覽器的安全性設定不允編輯器自動執行貼上動作。請使用快捷鍵 (Ctrl+V) 貼上。",
+PasteErrorCut	: "您的瀏覽器的安全性設定不允編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl+X) 剪下。",
+PasteErrorCopy	: "您的瀏覽器的安全性設定不允編輯器自動執行複製動作。請使用快捷鍵 (Ctrl+C) 複製。",
+
+PasteAsText		: "貼為純文字格式",
+PasteFromWord	: "自 Word 貼上",
+
+DlgPasteMsg2	: "請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>",
+DlgPasteIgnoreFont		: "移除字型設定",
+DlgPasteRemoveStyles	: "移除樣式設定",
+DlgPasteCleanBox		: "清除文字區域",
+
+
+// Color Picker
+ColorAutomatic	: "自動",
+ColorMoreColors	: "更多顏色…",
+
+// Document Properties
+DocProps		: "文件屬性",
+
+// Anchor Dialog
+DlgAnchorTitle		: "命名錨點",
+DlgAnchorName		: "錨點名稱",
+DlgAnchorErrorName	: "請輸入錨點名稱",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "不在字典中",
+DlgSpellChangeTo		: "更改為",
+DlgSpellBtnIgnore		: "忽略",
+DlgSpellBtnIgnoreAll	: "全部忽略",
+DlgSpellBtnReplace		: "取代",
+DlgSpellBtnReplaceAll	: "全部取代",
+DlgSpellBtnUndo			: "復原",
+DlgSpellNoSuggestions	: "- 無建議值 -",
+DlgSpellProgress		: "進行拼字檢查中…",
+DlgSpellNoMispell		: "拼字檢查完成：未發現拼字錯誤",
+DlgSpellNoChanges		: "拼字檢查完成：未更改任何單字",
+DlgSpellOneChange		: "拼字檢查完成：更改了 1 個單字",
+DlgSpellManyChanges		: "拼字檢查完成：更改了 %1 個單字",
+
+IeSpellDownload			: "尚未安裝拼字檢查元件。您是否想要現在下載？",
+
+// Button Dialog
+DlgButtonText	: "顯示文字 (值)",
+DlgButtonType	: "類型",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名稱",
+DlgCheckboxValue	: "選取值",
+DlgCheckboxSelected	: "已選取",
+
+// Form Dialog
+DlgFormName		: "名稱",
+DlgFormAction	: "動作",
+DlgFormMethod	: "方法",
+
+// Select Field Dialog
+DlgSelectName		: "名稱",
+DlgSelectValue		: "選取值",
+DlgSelectSize		: "大小",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "可多選",
+DlgSelectOpAvail	: "可用選項",
+DlgSelectOpText		: "顯示文字",
+DlgSelectOpValue	: "值",
+DlgSelectBtnAdd		: "新增",
+DlgSelectBtnModify	: "修改",
+DlgSelectBtnUp		: "上移",
+DlgSelectBtnDown	: "下移",
+DlgSelectBtnSetValue : "設為預設值",
+DlgSelectBtnDelete	: "刪除",
+
+// Textarea Dialog
+DlgTextareaName	: "名稱",
+DlgTextareaCols	: "字元寬度",
+DlgTextareaRows	: "列數",
+
+// Text Field Dialog
+DlgTextName			: "名稱",
+DlgTextValue		: "值",
+DlgTextCharWidth	: "字元寬度",
+DlgTextMaxChars		: "最多字元數",
+DlgTextType			: "類型",
+DlgTextTypeText		: "文字",
+DlgTextTypePass		: "密碼",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名稱",
+DlgHiddenValue	: "值",
+
+// Bulleted List Dialog
+BulletedListProp	: "項目清單屬性",
+NumberedListProp	: "編號清單屬性",
+DlgLstType			: "清單類型",
+DlgLstTypeCircle	: "圓圈",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "方塊",
+DlgLstTypeNumbers	: "數字 (1, 2, 3)",
+DlgLstTypeLCase		: "小寫字母 (a, b, c)",
+DlgLstTypeUCase		: "大寫字母 (A, B, C)",
+DlgLstTypeSRoman	: "小寫羅馬數字 (i, ii, iii)",
+DlgLstTypeLRoman	: "大寫羅馬數字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "一般",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "顯色與邊界",
+DlgDocMetaTab		: "Meta 資料",
+
+DlgDocPageTitle		: "頁面標題",
+DlgDocLangDir		: "語言方向",
+DlgDocLangDirLTR	: "由左而右 (LTR)",
+DlgDocLangDirRTL	: "由右而左 (RTL)",
+DlgDocLangCode		: "語言代碼",
+DlgDocCharSet		: "字元編碼",
+DlgDocCharSetOther	: "其他字元編碼",
+
+DlgDocDocType		: "文件類型",
+DlgDocDocTypeOther	: "其他文件類型",
+DlgDocIncXHTML		: "包含 XHTML 定義",
+DlgDocBgColor		: "背景顏色",
+DlgDocBgImage		: "背景影像",
+DlgDocBgNoScroll	: "浮水印",
+DlgDocCText			: "文字",
+DlgDocCLink			: "超連結",
+DlgDocCVisited		: "已瀏覽過的超連結",
+DlgDocCActive		: "作用中的超連結",
+DlgDocMargins		: "頁面邊界",
+DlgDocMaTop			: "上",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下",
+DlgDocMeIndex		: "文件索引關鍵字 (用半形逗號[,]分隔)",
+DlgDocMeDescr		: "文件說明",
+DlgDocMeAuthor		: "作者",
+DlgDocMeCopy		: "版權所有",
+DlgDocPreview		: "預覽",
+
+// Templates Dialog
+Templates			: "樣版",
+DlgTemplatesTitle	: "內容樣版",
+DlgTemplatesSelMsg	: "請選擇欲開啟的樣版<br> (原有的內容將會被清除):",
+DlgTemplatesLoading	: "讀取樣版清單中，請稍候…",
+DlgTemplatesNoTpl	: "(無樣版)",
+
+// About Dialog
+DlgAboutAboutTab	: "關於",
+DlgAboutBrowserInfoTab	: "瀏覽器資訊",
+DlgAboutVersion		: "版本",
+DlgAboutLicense		: "依據 GNU 較寬鬆公共許可證(LGPL)發佈",
+DlgAboutInfo		: "想獲得更多資訊請至 "
+}
\ No newline at end of file
Files 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/closewindow.gif and 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/closewindow.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/fckplugin.js 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/fckplugin.js
--- 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/fckplugin.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/fckplugin.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,29 @@
+// Register the related command.
+var FCKCloseWindow = function(name)
+{
+	this.Name = name;
+}
+
+
+FCKCloseWindow.prototype.Execute = function()
+{
+	parent.window.close();
+}
+
+// manage the plugins' button behavior
+FCKCloseWindow.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF;
+	// default behavior, sometimes you wish to have some kind of if statement here
+}
+
+
+FCKCommands.RegisterCommand( 'My_CloseWindow', new FCKCloseWindow('CloseWindow'));
+
+
+// Create the "Plaholder" toolbar button.
+var oCloseWindowItem = new FCKToolbarButton( 'My_CloseWindow', FCKLang.CloseWindow ) ; //opject_name, button_alt_text
+oCloseWindowItem.IconPath = FCKConfig.PluginsPath + 'CloseWindow/closewindow.gif' ;
+FCKToolbarItems.RegisterItem( 'CloseWindow', oCloseWindowItem ) ;
+
+
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/lang/cs.js 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/lang/cs.js
--- 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/lang/cs.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/lang/cs.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,22 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2004 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: en.js
+ * 	English language file for the sample plugin.
+ * 
+ * Version:  2.0 RC2
+ * Modified: 2004-11-22 11:20:42
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKLang.CloseWindow = 'Zavřít okno a přenést změny do hlavního okna';
+
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/lang/en.js 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/lang/en.js
--- 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/lang/en.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/lang/en.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,21 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2004 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: en.js
+ * 	English language file for the sample plugin.
+ * 
+ * Version:  2.0 RC2
+ * Modified: 2004-11-22 11:20:42
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKLang.CloseWindow = 'Close window and transport changes to main page.';
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/lang/nl.js 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/lang/nl.js
--- 1.3.11sr1/fckeditor/editor/plugins/CloseWindow/lang/nl.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/CloseWindow/lang/nl.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,21 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2004 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: en.js
+ * 	English language file for the sample plugin.
+ * 
+ * Version:  2.0 RC2
+ * Modified: 2004-11-22 11:20:42
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKLang.CloseWindow = 'Sluit scherm';
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fckplugin.js 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fckplugin.js
--- 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fckplugin.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fckplugin.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,32 @@
+// Register the related command.
+
+var FCKFullWindow = function(name) 
+{ 
+this.Name = name; 
+}
+
+
+FCKFullWindow.prototype.Execute = function() 
+{ 
+	var oDialogInfo = new Object() ;
+	oDialogInfo.Editor = window;
+	FCKDialog.Show(oDialogInfo, 'FullScreen', FCKConfig.PluginsPath + 'FullWindow/fullwindow.html?name=' + FCK.Name,
+                800, 780, window, true);
+    
+} 
+ 
+// manage the plugins' button behavior 
+FCKFullWindow.prototype.GetState = function() 
+{ 
+  return FCK_TRISTATE_OFF; 
+  // default behavior, sometimes you wish to have some kind of if statement here 
+} 
+
+FCKCommands.RegisterCommand( 'FullWindow', new FCKFullWindow('FullWindow'));
+
+// Create the "Plaholder" toolbar button.
+var oFullWindowItem = new FCKToolbarButton( "FullWindow", FCKLang.FullWindow ) ;
+oFullWindowItem.IconPath = FCKConfig.PluginsPath + 'FullWindow/fullwindow.gif' ;
+FCKToolbarItems.RegisterItem( 'FullWindow', oFullWindowItem ) ;
+
+
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fckplugin.txt 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fckplugin.txt
--- 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fckplugin.txt	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fckplugin.txt	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,32 @@
+// Register the related command.
+
+var FCKFullWindow = function(name) 
+{ 
+this.Name = name; 
+}
+
+
+FCKFullWindow.prototype.Execute = function() 
+{ 
+	//open window with new editor. parameter is not used now
+	//oDialog = new FCKDialog;
+	FCKDialog.Show('', 'FullScreen', FCKConfig.PluginsPath + 'FullWindow/fullwindow.html?name=' + FCK.Name,
+                640, 480, window, true);
+    FCK.EditorDocument.designMode = "off";
+} 
+ 
+// manage the plugins' button behavior 
+FCKFullWindow.prototype.GetState = function() 
+{ 
+  return FCK_TRISTATE_OFF; 
+  // default behavior, sometimes you wish to have some kind of if statement here 
+} 
+
+FCKCommands.RegisterCommand( 'My_FullWindow', new FCKFullWindow('FullWindow'));
+
+// Create the "Plaholder" toolbar button.
+var oFullWindowItem = new FCKToolbarButton( 'My_FullWindow', FCKLang.FullWindow ) ;
+oFullWindowItem.IconPath = FCKConfig.PluginsPath + 'FullWindow/fullwindow.gif' ;
+FCKToolbarItems.RegisterItem( 'FullWindow', oFullWindowItem ) ;
+
+
Files 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fullwindow.gif and 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fullwindow.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fullwindow.html 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fullwindow.html
--- 1.3.11sr1/fckeditor/editor/plugins/FullWindow/fullwindow.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/fullwindow.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,43 @@
+<html><head><title>FullWindow</title>
+<script src="../../../fckeditor.js"></script>
+
+<style>
+body { margin: 0; background: #efefde; }
+</style>
+
+</head>
+<body>
+<script>
+	if ( !dialogArguments )
+		dialogArguments = window.opener.FCKLastDialogInfo ;
+
+	var oEditor 	= dialogArguments.Editor;
+	var FCK			= oEditor.FCK ;
+	var FCKConfig	= oEditor.FCKConfig ;  
+	
+	var oFCKeditor = new FCKeditor('FCKeditor1', '100%', '100%' ,'NewToolbarClose') ;
+	oFCKeditor.BasePath = '../../../';
+	
+	//get content from opener fck
+	oFCKeditor.Value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) )
+
+  
+	var loadConfig = new Array('EditorAreaCSS', 'StylesXmlPath', 'AutoDetectLanguage', 'DefaultLanguage', 'LinkBrowserURL', 
+								 'ImageBrowserURL', 'SkinPath', 'BaseHref');
+	
+	
+	for(var i = 0; i < loadConfig.length; i++)
+		eval("oFCKeditor.Config['"+loadConfig[i]+"'] = FCKConfig."+loadConfig[i]+";");
+	
+	oFCKeditor.Create() ;
+  
+	window.onunload = closeWindow;
+	
+	function closeWindow(){
+		var oFCKeditor = FCKeditorAPI.GetInstance('FCKeditor1');
+		FCK.SetHTML(oFCKeditor.GetXHTML(FCKConfig.FormatSource));
+		oEditor.focus();
+	}
+
+</script>
+</body></html>
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/FullWindow/lang/cs.js 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/lang/cs.js
--- 1.3.11sr1/fckeditor/editor/plugins/FullWindow/lang/cs.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/lang/cs.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,22 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2004 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: en.js
+ * 	English language file for the sample plugin.
+ * 
+ * Version:  2.0 RC2
+ * Modified: 2004-11-22 11:20:42
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+ 
+FCKLang.FullWindow	= 'Otevřít editor v novém okně' ;
+
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/FullWindow/lang/en.js 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/lang/en.js
--- 1.3.11sr1/fckeditor/editor/plugins/FullWindow/lang/en.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/lang/en.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,20 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2004 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: en.js
+ * 	English language file for the sample plugin.
+ * 
+ * Version:  2.0 RC2
+ * Modified: 2004-11-22 11:20:42
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+FCKLang.FullWindow	= 'Open editor in new full window' ;
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/FullWindow/lang/nl.js 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/lang/nl.js
--- 1.3.11sr1/fckeditor/editor/plugins/FullWindow/lang/nl.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/FullWindow/lang/nl.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,20 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2004 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: en.js
+ * 	English language file for the sample plugin.
+ * 
+ * Version:  2.0 RC2
+ * Modified: 2004-11-22 11:20:42
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+FCKLang.FullWindow	= 'Open in volledig scherm' ;
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/placeholder/fck_placeholder.html 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/fck_placeholder.html
--- 1.3.11sr1/fckeditor/editor/plugins/placeholder/fck_placeholder.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/fck_placeholder.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_placeholder.html
+ * 	Placeholder Plugin.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<html>
+	<head>
+		<title>Placeholder Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script language="javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+var FCKPlaceholders = oEditor.FCKPlaceholders ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+	
+	LoadSelected() ;
+	
+	// Show the "Ok" button.
+	window.parent.SetOkButton( true ) ;	
+}
+
+var eSelected = oEditor.FCKSelection.GetSelectedElement() ;
+
+function LoadSelected()
+{
+	if ( !eSelected )
+		return ;
+
+	if ( eSelected.tagName == 'SPAN' && eSelected._fckplaceholder )
+		document.getElementById('txtName').value = eSelected._fckplaceholder ;
+	else
+		eSelected == null ;
+}
+
+function Ok()
+{
+	var sValue = document.getElementById('txtName').value ;
+	
+	if ( eSelected && eSelected._fckplaceholder == sValue )
+		return true ;
+
+	if ( sValue.length == 0 )
+	{
+		alert( FCKLang.PlaceholderErrNoName ) ;
+		return false ;
+	}
+	
+	if ( FCKPlaceholders.Exist( sValue ) )
+	{
+		alert( FCKLang.PlaceholderErrNameInUse ) ;
+		return false ;
+	}
+
+	FCKPlaceholders.Add( sValue ) ;
+	return true ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<table cellSpacing="0" cellPadding="0" align="center" border="0">
+						<tr>
+							<td>
+								<span fckLang="PlaceholderDlgName">Placeholder Name</span><br>
+								<input id="txtName" type="text">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/placeholder/fckplugin.js 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/fckplugin.js
--- 1.3.11sr1/fckeditor/editor/plugins/placeholder/fckplugin.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/fckplugin.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,177 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckplugin.js
+ * 	Plugin to insert "Placeholders" in the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Register the related command.
+FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 170 ) ) ;
+
+// Create the "Plaholder" toolbar button.
+var oPlaceholderItem = new FCKToolbarButton( 'Placeholder', FCKLang.PlaceholderBtn ) ;
+oPlaceholderItem.IconPath = FCKPlugins.Items['placeholder'].Path + 'placeholder.gif' ;
+FCKToolbarItems.RegisterItem( 'Placeholder', oPlaceholderItem ) ;
+
+
+// The object used for all Placeholder operations.
+var FCKPlaceholders = new Object() ;
+
+// Add a new placeholder at the actual selection.
+FCKPlaceholders.Add = function( name )
+{
+	var oSpan = FCK.CreateElement( 'SPAN' ) ;
+	this.SetupSpan( oSpan, name ) ;
+}
+
+FCKPlaceholders.SetupSpan = function( span, name )
+{
+	span.innerHTML = '[[ ' + name + ' ]]' ;
+
+	span.style.backgroundColor = '#ffff00' ;
+	span.style.color = '#000000' ;
+
+	if ( FCKBrowserInfo.IsGecko )
+		span.style.cursor = 'default' ;
+
+	span._fckplaceholder = name ;
+	span.contentEditable = false ;
+
+	// To avoid it to be resized.
+	span.onresizestart = function()
+	{
+		FCK.EditorWindow.event.returnValue = false ;
+		return false ;
+	}
+}
+
+// On Gecko we must do this trick so the user select all the SPAN when clicking on it.
+FCKPlaceholders._SetupClickListener = function()
+{
+	FCKPlaceholders._ClickListener = function( e )
+	{
+		if ( e.target.tagName == 'SPAN' && e.target._fckplaceholder )
+			FCKSelection.SelectNode( e.target ) ;
+	}
+
+	FCK.EditorDocument.addEventListener( 'click', FCKPlaceholders._ClickListener, true ) ;
+}
+
+// Open the Placeholder dialog on double click.
+FCKPlaceholders.OnDoubleClick = function( span )
+{
+	if ( span.tagName == 'SPAN' && span._fckplaceholder )
+		FCKCommands.GetCommand( 'Placeholder' ).Execute() ;
+}
+
+FCK.RegisterDoubleClickHandler( FCKPlaceholders.OnDoubleClick, 'SPAN' ) ;
+
+// Check if a Placholder name is already in use.
+FCKPlaceholders.Exist = function( name )
+{
+	var aSpans = FCK.EditorDocument.getElementsByTagName( 'SPAN' )
+
+	for ( var i = 0 ; i < aSpans.length ; i++ )
+	{
+		if ( aSpans[i]._fckplaceholder == name )
+			return true ;
+	}
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+	FCKPlaceholders.Redraw = function()
+	{
+		var aPlaholders = FCK.EditorDocument.body.innerText.match( /\[\[[^\[\]]+\]\]/g ) ;
+		if ( !aPlaholders )
+			return ;
+
+		var oRange = FCK.EditorDocument.body.createTextRange() ;
+
+		for ( var i = 0 ; i < aPlaholders.length ; i++ )
+		{
+			if ( oRange.findText( aPlaholders[i] ) )
+			{
+				var sName = aPlaholders[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+				oRange.pasteHTML( '<span style="color: #000000; background-color: #ffff00" contenteditable="false" _fckplaceholder="' + sName + '">' + aPlaholders[i] + '</span>' ) ;
+			}
+		}
+	}
+}
+else
+{
+	FCKPlaceholders.Redraw = function()
+	{
+		var oInteractor = FCK.EditorDocument.createTreeWalker( FCK.EditorDocument.body, NodeFilter.SHOW_TEXT, FCKPlaceholders._AcceptNode, true ) ;
+
+		var	aNodes = new Array() ;
+
+		while ( oNode = oInteractor.nextNode() )
+		{
+			aNodes[ aNodes.length ] = oNode ;
+		}
+
+		for ( var n = 0 ; n < aNodes.length ; n++ )
+		{
+			var aPieces = aNodes[n].nodeValue.split( /(\[\[[^\[\]]+\]\])/g ) ;
+
+			for ( var i = 0 ; i < aPieces.length ; i++ )
+			{
+				if ( aPieces[i].length > 0 )
+				{
+					if ( aPieces[i].indexOf( '[[' ) == 0 )
+					{
+						var sName = aPieces[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+
+						var oSpan = FCK.EditorDocument.createElement( 'span' ) ;
+						FCKPlaceholders.SetupSpan( oSpan, sName ) ;
+
+						aNodes[n].parentNode.insertBefore( oSpan, aNodes[n] ) ;
+					}
+					else
+						aNodes[n].parentNode.insertBefore( FCK.EditorDocument.createTextNode( aPieces[i] ) , aNodes[n] ) ;
+				}
+			}
+
+			aNodes[n].parentNode.removeChild( aNodes[n] ) ;
+		}
+		
+		FCKPlaceholders._SetupClickListener() ;
+	}
+
+	FCKPlaceholders._AcceptNode = function( node )
+	{
+		if ( /\[\[[^\[\]]+\]\]/.test( node.nodeValue ) )
+			return NodeFilter.FILTER_ACCEPT ;
+		else
+			return NodeFilter.FILTER_SKIP ;
+	}
+}
+
+FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKPlaceholders.Redraw ) ;
+
+// The "Redraw" method must be called on startup.
+FCKPlaceholders.Redraw() ;
+
+// We must process the SPAN tags to replace then with the real resulting value of the placeholder.
+FCKXHtml.TagProcessors['span'] = function( node, htmlNode )
+{
+	if ( htmlNode._fckplaceholder )
+		node = FCKXHtml.XML.createTextNode( '[[' + htmlNode._fckplaceholder + ']]' ) ;
+	else
+		FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+	return node ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/de.js 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/de.js
--- 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/de.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/de.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,23 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: de.js
+ * 	Placholder German language file.
+ * 
+ * File Authors:
+ * 		José Fontanil
+ */
+FCKLang.PlaceholderBtn			= 'Einfügen/editieren Platzhalter' ;
+FCKLang.PlaceholderDlgTitle		= 'Platzhalter Eigenschaften' ;
+FCKLang.PlaceholderDlgName		= 'Platzhalter Name' ;
+FCKLang.PlaceholderErrNoName	= 'Bitte den Namen des Platzhalters schreiben' ;
+FCKLang.PlaceholderErrNameInUse	= 'Der angegebene Namen ist schon in Gebrauch' ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/en.js 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/en.js
--- 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/en.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/en.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,23 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: en.js
+ * 	Placholder English language file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+FCKLang.PlaceholderBtn			= 'Insert/Edit Placeholder' ;
+FCKLang.PlaceholderDlgTitle		= 'Placeholder Properties' ;
+FCKLang.PlaceholderDlgName		= 'Placeholder Name' ;
+FCKLang.PlaceholderErrNoName	= 'Please type the placeholder name' ;
+FCKLang.PlaceholderErrNameInUse	= 'The specified name is already in use' ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/fr.js 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/fr.js
--- 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/fr.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/fr.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,23 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fr.js
+ * 	Placholder Italian language file.
+ * 
+ * File Authors:
+ * 		Hubert Garrido (liane@users.sourceforge.net)
+ */
+FCKLang.PlaceholderBtn			= 'Insérer/Modifier Substitut' ;
+FCKLang.PlaceholderDlgTitle		= 'Propriétés de Substitut' ;
+FCKLang.PlaceholderDlgName		= 'Nom de Substitut' ;
+FCKLang.PlaceholderErrNoName	= 'Veuillez saisir le nom de Substitut' ;
+FCKLang.PlaceholderErrNameInUse	= 'Ce nom est déjà utilisé' ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/it.js 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/it.js
--- 1.3.11sr1/fckeditor/editor/plugins/placeholder/lang/it.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/lang/it.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,23 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: it.js
+ * 	Placholder Italian language file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+FCKLang.PlaceholderBtn			= 'Aggiungi/Modifica Placeholder' ;
+FCKLang.PlaceholderDlgTitle		= 'Proprietà del Placeholder' ;
+FCKLang.PlaceholderDlgName		= 'Nome del Placeholder' ;
+FCKLang.PlaceholderErrNoName	= 'Digitare il nome del placeholder' ;
+FCKLang.PlaceholderErrNameInUse	= 'Il nome inserito è già in uso' ;
Files 1.3.11sr1/fckeditor/editor/plugins/placeholder/placeholder.gif and 1.4.0sr5-1/fckeditor/editor/plugins/placeholder/placeholder.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/plugins/tablecommands/fckplugin.js 1.4.0sr5-1/fckeditor/editor/plugins/tablecommands/fckplugin.js
--- 1.3.11sr1/fckeditor/editor/plugins/tablecommands/fckplugin.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/plugins/tablecommands/fckplugin.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,26 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fckplugin.js
+ * 	This plugin register the required Toolbar items to be able to insert the
+ * 	toolbar commands in the toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKToolbarItems.RegisterItem( 'TableInsertRow'		, new FCKToolbarButton( 'TableInsertRow'	, FCKLang.InsertRow ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteRows'		, new FCKToolbarButton( 'TableDeleteRows'	, FCKLang.DeleteRows ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertColumn'	, new FCKToolbarButton( 'TableInsertColumn'	, FCKLang.InsertColumn ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteColumns'	, new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertCell'		, new FCKToolbarButton( 'TableInsertCell'	, FCKLang.InsertCell ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteCells'	, new FCKToolbarButton( 'TableDeleteCells'	, FCKLang.DeleteCells ) ) ;
+FCKToolbarItems.RegisterItem( 'TableMergeCells'		, new FCKToolbarButton( 'TableMergeCells'	, FCKLang.MergeCells ) ) ;
+FCKToolbarItems.RegisterItem( 'TableSplitCell'		, new FCKToolbarButton( 'TableSplitCell'	, FCKLang.SplitCell ) ) ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/default/fck_contextmenu.css 1.4.0sr5-1/fckeditor/editor/skins/default/fck_contextmenu.css
--- 1.3.11sr1/fckeditor/editor/skins/default/fck_contextmenu.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/default/fck_contextmenu.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,243 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_contextmenu.css
+ * 	Styles used by the context menu and panels.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+.CM_ContextMenu, .CM_ContextMenu *
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.CM_ContextMenu
+{
+	border: 1px solid #8f8f73;
+	padding: 2px;
+	background-color: #ffffff;
+}
+
+.CM_Option, .CM_Over, .CM_Disabled
+{
+	padding: 0px 3px;
+	height: 18px;
+	cursor: default;
+}
+
+.CM_Option, .CM_Over
+{
+	cursor: hand;
+}
+
+.CM_Option .CM_Icon, .CM_Disabled .CM_Icon, .CM_Separator .CM_Icon
+{
+	background-color: #e3e3c7;
+}
+
+.CM_Option .CM_Icon IMG
+{
+	filter: alpha(opacity=70);
+	-moz-opacity:0.70;
+}
+
+.CM_Disabled 
+{
+	background-color: #ffffff;
+}
+
+.CM_Disabled .CM_Icon IMG, .CM_Disabled .CM_Label
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity:0.30;
+}
+
+.CM_Option .CM_Label, .CM_Over .CM_Label
+{
+	padding: 1px 10px 1px 3px;
+}
+
+.CM_Over
+{
+	color: #fff;
+	background-color: #8f8f73;
+}
+
+.CM_Over .CM_Icon
+{
+	background-color: #737357;
+}
+
+.CM_Separator TD
+{
+	height: 3px;
+}
+
+.CM_Separator .CM_Label DIV
+{
+	border-top: #b9b99d 1px solid;
+	margin-left: 2px;
+	margin-right: 3px;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+	border: #8f8f73 1px solid;
+	padding: 2px;
+	background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+	font-size: 11px;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+	border: #808080 1px solid;
+	position: static;
+}
+
+.ColorBox
+{
+	font-size: 1px;
+	width: 10px;
+	position: static;
+	height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+	cursor: default;
+}
+
+.ColorDeselected
+{
+	border: #ffffff 1px solid;
+	padding: 2px;
+	float: left;
+}
+
+.ColorSelected
+{
+	border: #330066 1px solid;
+	padding: 2px;
+	float: left;
+	background-color: #c4cdd6;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+	overflow-y: auto;
+	white-space: nowrap;
+	cursor: default;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+	margin-top: 2px;
+	margin-bottom: 2px;
+	background-position: left center;
+	padding-left: 11px;
+	padding-right: 3px;
+	padding-top: 2px;
+	padding-bottom: 2px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	width: 100%;
+	background-repeat: no-repeat;
+	border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+	border: #9a9afb 1px solid;
+	background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+	border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+	border: #b7b7a6 1px solid;
+	cursor: default;
+}
+
+.SC_FieldCaption
+{
+	overflow: visible;
+	padding-right: 5px;
+	padding-left: 5px;
+	filter: alpha(opacity=70);
+	-moz-opacity:0.75;
+	height: 23px;
+	background-color: #efefde;
+}
+
+.SC_FieldLabel
+{
+	white-space: nowrap;
+	padding: 2px;
+	width: 100%;
+	cursor: default;
+	background-color: #ffffff;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+.SC_FieldButton
+{
+	background-position: center center;
+	background-image: url(images/toolbar.buttonarrow.gif);
+	border-left: #b7b7a6 1px solid;
+	width: 14px;
+	background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity:0.30;
+}
+
+.SC_FieldOver
+{
+	border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+	border-left: #316ac5 1px solid;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/default/fck_dialog.css 1.4.0sr5-1/fckeditor/editor/skins/default/fck_dialog.css
--- 1.3.11sr1/fckeditor/editor/skins/default/fck_dialog.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/default/fck_dialog.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,129 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_dialog.css
+ * 	Styles used by the dialog boxes.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+body
+{
+	margin: 0px;
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f1f1e3;
+}
+
+.PopupBody
+{
+	margin: 0px;
+	padding: 0px;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #737357;
+	background-color: #e3e3c7;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border-right: #737357 1px solid;
+	border-top: #737357 1px solid;
+	border-left: #737357 1px solid;
+	color: #3b3b1f;
+	border-bottom: #737357 1px solid;
+	background-color: #c7c78f;
+}
+
+.DarkBackground
+{
+	background-color: #d7d79f;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #737357;
+	background-color: #e3e3c7;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #d5d59d 1px solid;
+	border-top: #d5d59d 1px solid;
+	border-left: #d5d59d 1px solid;
+	padding-right: 5px;
+	padding-left: 5px;
+	padding-bottom: 3px;
+	padding-top: 3px;
+	color: #737357;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #d5d59d 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f1f1e3;
+}
+
+.PopupSelectionBox
+{
+	border: #ff9933 1px solid;
+	background-color: #fffacd;
+	cursor: pointer;
+	cursor: hand;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/default/fck_editor.css 1.4.0sr5-1/fckeditor/editor/skins/default/fck_editor.css
--- 1.3.11sr1/fckeditor/editor/skins/default/fck_editor.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/default/fck_editor.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,148 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_editor.css
+ * 	Styles used by the editor IFRAME and Toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px 1px 1px 1px;
+	margin: 0px 0px 0px 0px;
+}
+
+#eWysiwygCell, .Source
+{
+	border: #696969 1px solid;
+}
+
+#eSourceField
+{
+	border: none;
+	padding: 5px;
+	font-family: Monospace;
+}
+
+/*
+	### Toolbar Styles
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+	background-color: #efefde;
+}
+
+.TB_End
+{
+	display: none;
+}
+
+.TB_ExpandImg
+{
+	background-image: url(images/toolbar.expand.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+	background-image: url(images/toolbar.collapse.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_ToolbarSet
+{
+	border-top: #efefde 1px outset;
+	border-bottom: #efefde 1px outset;
+}
+
+.TB_SideBorder
+{
+	background-color: #696969;
+}
+
+.TB_ToolbarSet, .TB_ToolbarSet *
+{
+	font-size: 11px;
+	cursor: default;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Expand, .TB_Collapse
+{
+	padding: 2px 2px 2px 2px;
+	border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+	border: #efefde 1px outset;
+	width: 5px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_Disabled, .TB_Combo_Off, .TB_Combo_Disabled
+{
+	border: #efefde 1px solid;
+	height: 21px;
+}
+
+.TB_Button_On
+{
+	border-color: #316ac5;
+	background-color: #c1d2ee;
+}
+
+.TB_Button_Off, .TB_Combo_Off
+{
+	filter: alpha(opacity=70);
+	-moz-opacity: 0.70;
+	background-color: #efefde;
+}
+
+.TB_Button_Disabled, .TB_Combo_Disabled
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity: 0.30;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+	background-color: #dff1ff;
+}
+
+.TB_Icon DIV
+{
+	width: 21px;
+	height: 21px;
+	background-position: 50% 50%;
+	background-repeat: no-repeat;
+}
+
+.TB_Text
+{
+	height: 21px;
+	padding-right: 5px;
+}
+
+.TB_ButtonArrow
+{
+	padding-right: 3px;
+}
+
+.TB_Break
+{
+	height: 23px;
+}
\ No newline at end of file
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.arrowright.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.arrowright.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.collapse.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.collapse.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.end.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.end.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.expand.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.expand.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.separator.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.separator.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/images/toolbar.start.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/images/toolbar.start.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/about.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/about.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/anchor.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/anchor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/bgcolor.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/bgcolor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/bold.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/bold.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/bulletedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/bulletedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/button.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/button.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/checkbox.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/checkbox.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/copy.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/copy.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/cut.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/cut.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/docprops.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/docprops.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/find.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/find.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/flash.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/flash.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/form.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/form.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/hiddenfield.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/hiddenfield.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/imagebutton.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/imagebutton.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/image.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/image.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/indent.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/indent.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/inserthorizontalrule.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/inserthorizontalrule.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/insertorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/insertorderedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/insertunorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/insertunorderedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/italic.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/italic.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/justifycenter.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/justifycenter.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/justifyfull.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/justifyfull.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/justifyleft.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/justifyleft.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/justifyright.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/justifyright.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/link.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/link.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/newpage.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/newpage.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/numberedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/numberedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/outdent.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/outdent.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/pagebreak.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/pagebreak.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/paste.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/paste.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/pastetext.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/pastetext.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/pasteword.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/pasteword.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/preview.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/preview.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/print.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/print.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/radio.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/radio.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/redo.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/redo.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/removeformat.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/removeformat.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/replace.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/replace.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/save.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/save.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/selectall.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/selectall.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/select.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/select.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/showdetails.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/showdetails.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/showtableborders.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/showtableborders.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/smiley.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/smiley.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/source.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/source.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/specialchar.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/specialchar.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/spellcheck.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/spellcheck.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/strikethrough.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/strikethrough.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/subscript.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/subscript.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/superscript.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/superscript.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tablecell.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tablecell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tabledeletecells.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tabledeletecells.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tabledeletecolumns.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tabledeletecolumns.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tabledeleterows.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tabledeleterows.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/table.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/table.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tableinsertcell.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tableinsertcell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tableinsertcolumn.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tableinsertcolumn.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tableinsertrow.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tableinsertrow.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tablemergecells.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tablemergecells.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/tablesplitcell.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/tablesplitcell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/templates.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/templates.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/textarea.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/textarea.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/textcolor.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/textcolor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/textfield.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/textfield.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/underline.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/underline.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/undo.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/undo.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/universalkey.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/universalkey.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/unlink.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/unlink.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/default/toolbar/unorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/default/toolbar/unorderedlist.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/skins/office2003/fck_contextmenu.css 1.4.0sr5-1/fckeditor/editor/skins/office2003/fck_contextmenu.css
--- 1.3.11sr1/fckeditor/editor/skins/office2003/fck_contextmenu.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/office2003/fck_contextmenu.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,248 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_contextmenu.css
+ * 	Styles used by the context menu.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+.CM_ContextMenu, .CM_ContextMenu *
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.CM_ContextMenu
+{
+	border: 1px solid #8f8f73;
+	padding: 2px;
+	background-color: #f7f8fd;
+}
+
+.CM_Option, .CM_Over, .CM_Disabled
+{
+	padding: 0px 3px;
+	height: 18px;
+	cursor: default;
+}
+
+.CM_Option, .CM_Over
+{
+	cursor: hand;
+}
+
+.CM_Option .CM_Icon, .CM_Disabled .CM_Icon, .CM_Separator .CM_Icon
+{
+	background-color: #d6dff7;
+}
+
+.CM_Option .CM_Icon IMG
+{
+	filter: alpha(opacity=70);
+	-moz-opacity: 0.70;
+}
+
+.CM_Disabled 
+{
+	background-color: #ffffff;
+}
+
+.CM_Disabled .CM_Icon IMG, .CM_Disabled .CM_Label
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity: 0.30;
+}
+
+.CM_Option .CM_Label, .CM_Over .CM_Label
+{
+	padding: 1px 10px 1px 3px;
+}
+
+.CM_Over
+{
+	color: #ffffff;
+	background-color: #7096FA;
+}
+
+.CM_Over .CM_Icon
+{
+	background-color: #466ca6;
+}
+
+.CM_Separator TD
+{
+	height: 3px;
+}
+
+.CM_Separator .CM_Label DIV
+{
+	border-top: #b9b99d 1px solid;
+	margin-left: 2px;
+	margin-right: 3px;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+	border: #8f8f73 1px solid;
+	padding: 2px;
+	background-color: #f7f8fd;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+	font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
+	font-size: 11px;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+	border: #808080 1px solid;
+	position: static;
+}
+
+.ColorBox
+{
+	font-size: 1px;
+	width: 10px;
+	position: static;
+	height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+	cursor: default;
+}
+
+.ColorDeselected
+{
+	border: #ffffff 1px solid;
+	padding: 2px;
+	float: left;
+}
+
+.ColorSelected *
+{
+	color: #ffffff;
+}
+
+.ColorSelected 
+{
+	border: #7096FA 1px solid;
+	padding: 2px;
+	float: left;
+	background-color: #7096FA;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+	overflow-y: auto;
+	white-space: nowrap;
+	cursor: default;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+	margin-top: 2px;
+	margin-bottom: 2px;
+	background-position: left center;
+	padding-left: 11px;
+	padding-right: 3px;
+	padding-top: 2px;
+	padding-bottom: 2px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	width: 100%;
+	background-repeat: no-repeat;
+	border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+	border: #9a9afb 1px solid;
+	background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+	border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+	border: #b7b7a6 1px solid;
+	cursor: default;
+}
+
+.SC_FieldCaption
+{
+	overflow: visible;
+	padding-right: 5px;
+	padding-left: 5px;
+	filter: alpha(opacity=70); 
+	-moz-opacity:0.75;
+	height: 23px;
+	background-color: #f7f8fd;
+}
+
+.SC_FieldLabel
+{
+	white-space: nowrap;
+	padding: 2px;
+	width: 100%;
+	cursor: default;
+	background-color: #ffffff;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+.SC_FieldButton
+{
+	background-position: center center;
+	background-image: url(images/toolbar.buttonarrow.gif);
+	border-left: #b7b7a6 1px solid;
+	width: 14px;
+	background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption
+{
+	filter: gray() alpha(opacity=30); 
+	-moz-opacity:0.30;
+}
+
+.SC_FieldOver
+{
+	border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+	border-left: #316ac5 1px solid;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/office2003/fck_dialog.css 1.4.0sr5-1/fckeditor/editor/skins/office2003/fck_dialog.css
--- 1.3.11sr1/fckeditor/editor/skins/office2003/fck_dialog.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/office2003/fck_dialog.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,127 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_dialog.css
+ * 	Styles used by the dialog boxes.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+body
+{
+	margin: 0px;
+	padding: 10px;
+	background-color: #f7f8fd;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f8fd;
+}
+
+.PopupBody
+{
+	margin: 0px;
+	padding: 0px;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #0e3460;
+	background-color: #8cb2fd;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	border-top: #466ca6 1px solid;
+	background-color: #8cb2fd;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #1c3460 1px solid;
+	color: #000a28;
+	background-color: #7096d3;
+}
+
+.DarkBackground
+{
+	background-color: #d7d79f;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #0e3460;
+	background-color: #8cb2fd;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #466ca6 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #466ca6 1px solid;
+	border-top: #466ca6 1px solid;
+	border-left: #466ca6 1px solid;
+	padding-right: 5px;
+	padding-left: 5px;
+	padding-bottom: 3px;
+	padding-top: 3px;
+	color: #0e3460;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #466ca6 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f7f8fd 1px solid;
+	background-color: #f7f8fd;
+}
+
+.PopupSelectionBox
+{
+	border: #1e90ff 1px solid;
+	background-color: #add8e6;
+	cursor: pointer;
+	cursor: hand;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/office2003/fck_editor.css 1.4.0sr5-1/fckeditor/editor/skins/office2003/fck_editor.css
--- 1.3.11sr1/fckeditor/editor/skins/office2003/fck_editor.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/office2003/fck_editor.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,141 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_editor.css
+ * 	Styles used by the editor IFRAME and Toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ * 		Aziz Oraij (aziz@oraij.com)
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px 1px 1px 1px;
+	margin: 0px 0px 0px 0px;
+}
+
+#eWysiwygCell, .Source
+{
+	border: #696969 1px solid;
+}
+
+#eSourceField
+{
+	border: none;
+	padding: 5px;
+	font-family: Monospace;
+}
+
+/*
+	### Toolbar Styles
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+	background-color: #f7f8fd;
+}
+
+.TB_Toolbar
+{
+	background-color: #d6dff7;
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+}
+
+.TB_ExpandImg
+{
+	background-image: url(images/toolbar.expand.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+	background-image: url(images/toolbar.collapse.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_ToolbarSet
+{
+	border-top: #efefde 1px outset;
+	border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet, .TB_ToolbarSet *
+{
+	font-size: 11px;
+	cursor: default;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_SideBorder
+{
+	background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+	padding: 2px 2px 2px 2px;
+	border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+	border: #efefde 1px outset;
+	width: 5px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_Disabled, .TB_Combo_Off, .TB_Combo_Disabled
+{
+	border: #efefde 1px solid;
+	height: 21px;
+}
+
+.TB_Button_On
+{
+	border-color: #316ac5;
+	background-color: #c1d2ee;
+}
+
+.TB_Button_Off, .TB_Combo_Off
+{
+	filter: alpha(opacity=70);
+	-moz-opacity: 0.70;
+	background-color: #f7f8fd;
+}
+
+.TB_Button_Disabled, .TB_Combo_Disabled
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity: 0.30;
+}
+
+.TB_Icon DIV
+{
+	width: 21px;
+	height: 21px;
+	background-position: 50% 50%;
+	background-repeat: no-repeat;
+}
+
+.TB_Text
+{
+	height: 21px;
+	padding-right: 5px;
+}
+
+.TB_Break
+{
+	height: 23px;
+}
\ No newline at end of file
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.bg.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.bg.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.end.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.end.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.expand.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.expand.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.separator.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.separator.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/images/toolbar.start.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/images/toolbar.start.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/about.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/about.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/anchor.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/anchor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/bgcolor.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/bgcolor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/bold.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/bold.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/bulletedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/bulletedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/button.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/button.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/checkbox.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/checkbox.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/copy.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/copy.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/cut.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/cut.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/docprops.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/docprops.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/find.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/find.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/flash.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/flash.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/fontstyleadv.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/fontstyleadv.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/form.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/form.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/hiddenfield.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/hiddenfield.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/hidden.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/hidden.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/imagebutton.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/imagebutton.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/image.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/image.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/indent.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/indent.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/input.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/input.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/inserthorizontalrule.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/inserthorizontalrule.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/insertorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/insertorderedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/insertunorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/insertunorderedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/italic.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/italic.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/justifycenter.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/justifycenter.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/justifyfull.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/justifyfull.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/justifyleft.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/justifyleft.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/justifyright.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/justifyright.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/link.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/link.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/mail.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/mail.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/new.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/new.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/newpage.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/newpage.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/numberedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/numberedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/open.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/open.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/outdent.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/outdent.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/pagebreak.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/pagebreak.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/paste.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/paste.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/pastetext.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/pastetext.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/pasteword.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/pasteword.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/preview.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/preview.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/print.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/print.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/radio.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/radio.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/redo.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/redo.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/removeformat.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/removeformat.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/replace.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/replace.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/save.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/save.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/selectall.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/selectall.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/select.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/select.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/showdetails.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/showdetails.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/showtableborders.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/showtableborders.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/smiley.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/smiley.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/source.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/source.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/specialchar.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/specialchar.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/spellcheck.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/spellcheck.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/strikethrough.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/strikethrough.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/subscript.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/subscript.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/superscript.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/superscript.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tablecell.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tablecell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tabledeletecells.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tabledeletecells.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tabledeletecolumns.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tabledeletecolumns.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tabledeleterows.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tabledeleterows.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/table.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/table.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tableinsertcell.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tableinsertcell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tableinsertcolumn.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tableinsertcolumn.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tableinsertrow.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tableinsertrow.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tablemergecells.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tablemergecells.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/tablesplitcell.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/tablesplitcell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/templates.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/templates.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/textarea.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/textarea.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/textcolor.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/textcolor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/textfield.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/textfield.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/underline.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/underline.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/undo.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/undo.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/universalkey.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/universalkey.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/unlink.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/unlink.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/office2003/toolbar/unorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/office2003/toolbar/unorderedlist.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/skins/silver/fck_contextmenu.css 1.4.0sr5-1/fckeditor/editor/skins/silver/fck_contextmenu.css
--- 1.3.11sr1/fckeditor/editor/skins/silver/fck_contextmenu.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/silver/fck_contextmenu.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,245 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_contextmenu.css
+ * 	Styles used by the context menu.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+.CM_ContextMenu, .CM_ContextMenu *
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.CM_ContextMenu
+{
+	border: 1px solid #8f8f73;
+	padding: 2px;
+	background-color: #f7f7f7;
+}
+
+.CM_Option, .CM_Over, .CM_Disabled
+{
+	padding: 0px 3px;
+	height: 18px;
+	cursor: default;
+}
+
+.CM_Option, .CM_Over
+{
+	cursor: hand;
+}
+
+.CM_Option .CM_Icon, .CM_Disabled .CM_Icon, .CM_Separator .CM_Icon
+{
+	background-color: #dedede;
+}
+
+.CM_Option .CM_Icon IMG
+{
+	filter: alpha(opacity=70);
+	-moz-opacity: 0.70;
+}
+
+.CM_Disabled 
+{
+	background-color: #ffffff;
+}
+
+.CM_Disabled .CM_Icon IMG, .CM_Disabled .CM_Label
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity: 0.30;
+}
+
+.CM_Option .CM_Label, .CM_Over .CM_Label
+{
+	padding: 1px 10px 1px 3px;
+}
+
+.CM_Over
+{
+	color: #ffffff;
+	background-color: #8a857d;
+}
+
+.CM_Over .CM_Icon
+{
+	background-color: #6c6761;
+}
+
+.CM_Separator TD
+{
+	height: 3px;
+}
+
+.CM_Separator .CM_Label DIV
+{
+	border-top: #b9b99d 1px solid;
+	margin-left: 2px;
+	margin-right: 3px;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+	border: #8f8f73 1px solid;
+	padding: 2px;
+	background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+	font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
+	font-size: 11px;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+	border: #808080 1px solid;
+	position: static;
+}
+
+.ColorBox
+{
+	font-size: 1px;
+	width: 10px;
+	position: static;
+	height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+	cursor: default;
+}
+
+.ColorDeselected
+{
+	border: #ffffff 1px solid;
+	padding: 2px;
+	float: left;
+}
+
+.ColorSelected
+{
+	border: #316ac5 1px solid;
+	padding: 2px;
+	float: left;
+	background-color: #c1d2ee;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+	overflow-y: auto;
+	white-space: nowrap;
+	cursor: default;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+	margin-top: 2px;
+	margin-bottom: 2px;
+	background-position: left center;
+	padding-left: 11px;
+	padding-right: 3px;
+	padding-top: 2px;
+	padding-bottom: 2px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	width: 100%;
+	background-repeat: no-repeat;
+	border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+	border: #9a9afb 1px solid;
+	background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+	border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+	border: #b7b7a6 1px solid;
+	cursor: default;
+	margin-top: 4px ;
+}
+
+.SC_FieldCaption
+{
+	padding-top: 4px ;
+	overflow: visible;
+	padding-right: 5px;
+	padding-left: 5px;
+	filter: alpha(opacity=70);
+	-moz-opacity:0.75;
+	height: 23px;
+	background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+	white-space: nowrap;
+	padding: 2px;
+	width: 100%;
+	cursor: default;
+	background-color: #ffffff;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+.SC_FieldButton
+{
+	background-position: center center;
+	background-image: url(images/toolbar.buttonarrow.gif);
+	border-left: #b7b7a6 1px solid;
+	width: 14px;
+	background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity:0.30;
+}
+
+.SC_FieldOver
+{
+	border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+	border-left: #316ac5 1px solid;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/silver/fck_dialog.css 1.4.0sr5-1/fckeditor/editor/skins/silver/fck_dialog.css
--- 1.3.11sr1/fckeditor/editor/skins/silver/fck_dialog.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/silver/fck_dialog.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,130 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_dialog.css
+ * 	Styles used by the dialog boxes.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+body
+{
+	margin: 0px;
+	padding: 10px;
+	background-color: #f7f7f7;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+	margin: 0px;
+	padding: 0px;
+}
+
+.PopupTitle
+{
+	padding-right: 10px;
+	padding-left: 10px;
+	font-weight: bold;
+	font-size: 14pt;
+	padding-bottom: 3px;
+	color: #504845;
+	padding-top: 3px;
+	background-color: #dedede;
+}
+
+.PopupButtons
+{
+	border-top: #cec6b5 1px solid;
+	background-color: #DEDEDE;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #7a7261 1px solid;
+	color: #504845;
+	background-color: #cec6b5;
+}
+
+.DarkBackground
+{
+	background-color: #d7d79f;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #504845;
+	background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #cec6b5 1px solid;
+	border-top: #cec6b5 1px solid;
+	border-left: #cec6b5 1px solid;
+	padding-right: 5px;
+	padding-left: 5px;
+	padding-bottom: 3px;
+	padding-top: 3px;
+	color: #504845;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #cec6b5 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+	border: #a9a9a9 1px solid;
+	background-color: #dcdcdc;
+	cursor: pointer;
+	cursor: hand;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/skins/silver/fck_editor.css 1.4.0sr5-1/fckeditor/editor/skins/silver/fck_editor.css
--- 1.3.11sr1/fckeditor/editor/skins/silver/fck_editor.css	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/skins/silver/fck_editor.css	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,157 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fck_editor.css
+ * 	Styles used by the editor IFRAME and Toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ * 		gazou[Fr]
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px 1px 1px 1px;
+	margin: 0px 0px 0px 0px;
+}
+
+#eWysiwygCell, .Source
+{
+	border: #696969 1px solid;
+}
+
+#eSourceField
+{
+	border: none;
+	padding: 5px;
+	font-family: Monospace;
+}
+
+/* 
+	### Toolbar Styles
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+	background-color: #f7f7f7;
+}
+
+.TB_End
+{
+	display: none;
+}
+
+.TB_ExpandImg
+{
+	background-image: url(images/toolbar.expand.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+	background-image: url(images/toolbar.collapse.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_ToolbarSet
+{
+	padding: 1px;
+	border-top: #efefde 1px outset;
+	border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet, .TB_ToolbarSet *
+{
+	font-size: 11px;
+	cursor: default;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_SideBorder
+{
+	background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+	padding: 2px 2px 2px 2px;
+	border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+	border: #efefde 1px outset;
+	width: 5px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_Disabled
+{
+	padding: 1px ;
+	margin: 1px ;
+	height: 21px;
+}
+
+.TB_Combo_Off, .TB_Combo_Disabled
+{
+	padding: 1px ;
+	margin: 2px ;
+	height: 21px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_Disabled
+{
+	border: #cec6b5 1px solid;
+}
+
+.TB_Button_On
+{
+	border-color: #316ac5;
+	background-color: #c1d2ee;
+}
+
+.TB_Button_Off
+{
+	background: #efefef url(images/toolbar.buttonbg.gif) repeat-x;
+}
+
+.TB_Button_Off, .TB_Combo_Off
+{
+	filter: alpha(opacity=70);
+	-moz-opacity: 0.70;
+}
+
+.TB_Button_Disabled, .TB_Combo_Disabled
+{
+	filter: gray() alpha(opacity=30);
+	-moz-opacity: 0.30;
+}
+
+.TB_Icon DIV
+{
+	width: 21px;
+	height: 21px;
+	background-position: 50% 50%;
+	background-repeat: no-repeat;
+}
+
+.TB_Text
+{
+	height: 21px;
+	padding-right: 5px;
+}
+
+.TB_Break
+{
+	height: 23px;
+}
\ No newline at end of file
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.collapse.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.collapse.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.end.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.end.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.expand.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.expand.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.separator.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.separator.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/images/toolbar.start.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/images/toolbar.start.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/about.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/about.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/anchor.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/anchor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/bgcolor.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/bgcolor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/bold.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/bold.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/bulletedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/bulletedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/button.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/button.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/checkbox.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/checkbox.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/copy.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/copy.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/cut.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/cut.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/docprops.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/docprops.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/find.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/find.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/flash.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/flash.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/form.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/form.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/hiddenfield.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/hiddenfield.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/imagebutton.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/imagebutton.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/image.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/image.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/indent.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/indent.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/inserthorizontalrule.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/inserthorizontalrule.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/insertorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/insertorderedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/insertunorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/insertunorderedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/italic.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/italic.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/justifycenter.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/justifycenter.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/justifyfull.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/justifyfull.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/justifyleft.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/justifyleft.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/justifyright.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/justifyright.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/link.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/link.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/newpage.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/newpage.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/numberedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/numberedlist.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/outdent.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/outdent.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/pagebreak.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/pagebreak.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/paste.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/paste.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/pastetext.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/pastetext.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/pasteword.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/pasteword.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/preview.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/preview.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/print.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/print.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/radio.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/radio.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/redo.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/redo.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/removeformat.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/removeformat.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/replace.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/replace.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/save.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/save.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/selectall.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/selectall.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/select.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/select.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/showdetails.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/showdetails.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/showtableborders.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/showtableborders.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/smiley.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/smiley.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/source.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/source.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/specialchar.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/specialchar.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/spellcheck.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/spellcheck.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/strikethrough.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/strikethrough.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/subscript.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/subscript.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/superscript.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/superscript.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tablecell.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tablecell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tabledeletecells.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tabledeletecells.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tabledeletecolumns.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tabledeletecolumns.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tabledeleterows.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tabledeleterows.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/table.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/table.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tableinsertcell.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tableinsertcell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tableinsertcolumn.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tableinsertcolumn.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tableinsertrow.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tableinsertrow.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tablemergecells.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tablemergecells.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/tablesplitcell.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/tablesplitcell.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/templates.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/templates.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/textarea.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/textarea.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/textcolor.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/textcolor.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/textfield.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/textfield.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/underline.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/underline.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/undo.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/undo.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/universalkey.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/universalkey.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/unlink.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/unlink.gif differ
Files 1.3.11sr1/fckeditor/editor/skins/silver/toolbar/unorderedlist.gif and 1.4.0sr5-1/fckeditor/editor/skins/silver/toolbar/unorderedlist.gif differ
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckcontextmenugroup.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckcontextmenugroup.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckcontextmenugroup.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckcontextmenugroup.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,71 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcontextmenugroup.js
+ * 	FCKContextMenuGroup Class: represents a group of items in the context 
+ * 	menu. Generaly a group of items is directly dependent of the same rules.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKContextMenuGroup = function( addSeparator, contextMenu, firstItemCommand, firstItemLabel, hasIcon )
+{
+	this.IsVisible = true ;
+	
+	// Array with all available context menu items of this group.
+	this.Items = new Array() ;
+	
+	if ( addSeparator )
+		this.Add( new FCKContextMenuSeparator() ) ;
+	
+	if ( contextMenu && firstItemCommand && firstItemLabel )
+		this.Add( new FCKContextMenuItem( contextMenu, firstItemCommand, firstItemLabel, hasIcon ) ) ;
+
+	// This OPTIONAL function checks if the group must be shown.
+	this.ValidationFunction = null ;
+}
+
+// Adds an item to the group's items collecion.
+FCKContextMenuGroup.prototype.Add = function( contextMenuItem )
+{
+	this.Items[ this.Items.length ] = contextMenuItem ;
+}
+
+// Creates the <TR> elements that represent the item in a table (usually the rendered context menu).
+FCKContextMenuGroup.prototype.CreateTableRows = function( table )
+{
+	for ( var i = 0 ; i < this.Items.length ; i++ )
+	{
+		this.Items[i].CreateTableRow( table ) ;
+	}
+}
+
+FCKContextMenuGroup.prototype.SetVisible = function( isVisible )
+{
+	for ( var i = 0 ; i < this.Items.length ; i++ )
+	{
+		this.Items[i].SetVisible( isVisible ) ;
+	}
+	
+	this.IsVisible = isVisible ;
+}
+
+FCKContextMenuGroup.prototype.RefreshState = function()
+{
+	if ( ! this.IsVisible ) return ;
+	
+	for ( var i = 0 ; i < this.Items.length ; i++ )
+	{
+		this.Items[i].RefreshState() ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckcontextmenuitem.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckcontextmenuitem.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckcontextmenuitem.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckcontextmenuitem.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,104 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcontextmenuitem.js
+ * 	FCKContextMenuItem Class: represents a item in the context menu.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKContextMenuItem = function( contextMenu, commandName, label, hasIcon )
+{
+	this.ContextMenu	= contextMenu ;
+	this.Command		= FCKCommands.GetCommand( commandName ) ;
+	this.Label			= label ? label : commandName ;
+	this.HasIcon		= hasIcon ? true : false ;
+}
+
+function FCKContextMenuItem_OnMouseOver()
+{
+	if ( this.className != 'CM_Disabled' )
+		this.className = 'CM_Over' ;
+}
+	
+function FCKContextMenuItem_OnMouseOut()
+{
+	if ( this.className != 'CM_Disabled' )
+		this.className = 'CM_Option' ;
+}
+	
+function FCKContextMenuItem_OnClick()
+{
+	if ( this.className != 'CM_Disabled' )
+	{
+		this.FCKContextMenuItem.ContextMenu.Hide() ;
+		this.FCKContextMenuItem.Command.Execute() ;
+	}
+	return false ;
+}
+
+FCKContextMenuItem.prototype.CreateTableRow = function( targetTable )
+{
+	// Creates the <TR> element.
+	this._Row = targetTable.insertRow(-1) ;
+	this._Row.className = 'CM_Disabled' ;
+	this._Row.FCKContextMenuItem = this ;
+	
+	this._Row.onmouseover	= FCKContextMenuItem_OnMouseOver ;
+	this._Row.onmouseout	= FCKContextMenuItem_OnMouseOut ;
+	this._Row.onclick		= FCKContextMenuItem_OnClick ;
+	
+	var oCell = this._Row.insertCell(-1) ;
+	oCell.className = 'CM_Icon' ;
+	
+	if ( this.HasIcon ) oCell.innerHTML = '<img alt="" src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="20" unselectable="on">' ;
+	
+	oCell = this._Row.insertCell(-1) ;
+	oCell.className		= 'CM_Label' ;
+	oCell.unselectable	= 'on' ;
+	oCell.noWrap		= true ;
+	oCell.innerHTML		= this.Label ;
+}
+
+FCKContextMenuItem.prototype.SetVisible = function( isVisible )
+{
+	this._Row.style.display = isVisible ? '' : 'none' ;
+}
+
+FCKContextMenuItem.prototype.RefreshState = function()
+{
+	switch ( this.Command.GetState() )
+	{
+		case FCK_TRISTATE_ON :
+		case FCK_TRISTATE_OFF :
+			this._Row.className = 'CM_Option' ;
+			break ;
+		default :
+			this._Row.className = 'CM_Disabled' ;
+			break ;
+	}
+} 
+
+/*
+Sample output.
+-----------------------------------------
+<tr class="CM_Disabled">
+	<td class="CM_Icon"><img alt="" src="icons/cut.gif" width="21" height="20" unselectable="on"></td>
+	<td class="CM_Label" unselectable="on">Cut</td>
+</tr>
+-----------------------------------------
+<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
+	<td class="CM_Icon"></td>
+	<td class="CM_Label">Do Something</td>
+</tr>
+*/
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckcontextmenuseparator.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckcontextmenuseparator.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckcontextmenuseparator.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckcontextmenuseparator.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,55 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcontextmenuseparator.js
+ * 	FCKContextMenuSeparator Class: represents a separator in the toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKContextMenuSeparator = function()
+{
+}
+
+FCKContextMenuSeparator.prototype.CreateTableRow = function( targetTable )
+{
+	// Creates the <TR> element.
+	this._Row = targetTable.insertRow(-1) ;
+	this._Row.className = 'CM_Separator' ;
+	
+	var oCell = this._Row.insertCell(-1) ;
+	oCell.className = 'CM_Icon' ;
+	
+	oCell = this._Row.insertCell(-1) ;
+	oCell.className = 'CM_Label' ;
+	oCell.innerHTML = '<div></div>' ;
+}
+
+FCKContextMenuSeparator.prototype.SetVisible = function( isVisible )
+{
+	this._Row.style.display = isVisible ? '' : 'none' ;
+}
+
+FCKContextMenuSeparator.prototype.RefreshState = function()
+{
+	// Do nothing... its state doesn't change.
+} 
+
+/*
+Sample output.
+-----------------------------------------
+<tr class="CM_Separator">
+	<td class="CM_Icon"></td>
+	<td class="CM_Label"><div></div></td>
+</tr>
+*/
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckevents.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckevents.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckevents.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckevents.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,50 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckevents.js
+ * 	FCKEvents Class: used to handle events is a advanced way.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKEvents ;
+
+if ( !( FCKEvents = NS.FCKEvents ) )
+{
+	FCKEvents = NS.FCKEvents = function( eventsOwner )
+	{
+		this.Owner = eventsOwner ;
+		this.RegisteredEvents = new Object() ;
+	}
+
+	FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
+	{
+		if ( ! this.RegisteredEvents[ eventName ] ) this.RegisteredEvents[ eventName ] = new Array() ;
+
+		this.RegisteredEvents[ eventName ][ this.RegisteredEvents[ eventName ].length ] = functionPointer ;
+	}
+
+	FCKEvents.prototype.FireEvent = function( eventName, params )
+	{
+		var bReturnValue = true ;
+
+		var oCalls = this.RegisteredEvents[ eventName ] ;
+		if ( oCalls )
+		{
+			for ( var i = 0 ; i < oCalls.length ; i++ )
+				bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
+		}
+
+		return bReturnValue ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckpanel_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckpanel_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckpanel_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckpanel_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,206 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckpanel_gecko.js
+ * 	FCKPanel Class: Creates and manages floating panels in Gecko Browsers.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKPanel = function( parentWindow )
+{
+	if ( parentWindow )
+		this.Window = parentWindow ;
+	else
+	{
+		this.Window = window ;
+
+		while ( this.Window != window.top )
+		{
+			// Try/Catch must be used to avoit an error when using a frameset
+			// on a different domain:
+			// "Permission denied to get property HTMLDocument.Body".
+			try
+			{
+				if ( this.Window.parent.document.body.tagName == 'FRAMESET' )
+					break ;
+			}
+			catch (e)
+			{
+				break ;
+			}
+
+			this.Window = this.Window.parent ;
+		}
+	}
+}
+
+FCKPanel.prototype.Create = function()
+{
+	this._IFrame = this.Window.document.createElement('iframe') ; 
+	this._IFrame.src = 'about:blank' ;
+    this._IFrame.frameBorder		= '0';
+    this._IFrame.scrolling			= 'no' ;
+    this._IFrame.style.left			= '0px' ;
+	this._IFrame.style.top			= '0px' ;
+    this._IFrame.width				= 10 ;
+	this._IFrame.height				= 10 ;
+    this._IFrame.style.position		= 'absolute';
+	this._IFrame.style.visibility	= 'hidden' ;
+
+	this._IFrame.IsFCKPanel	= true ;
+	this._IFrame.Panel		= this ;
+
+	this.Window.document.body.appendChild( this._IFrame ) ;
+	
+	this.Document = this._IFrame.contentWindow.document ;
+
+	// Initialize the IFRAME document body.
+	this.Document.open() ;
+	this.Document.write( '<html><head></head><body><\/body><\/html>' ) ;
+	this.Document.close() ;
+
+	// Remove the default margins.
+	this.Document.body.style.margin = this.Document.body.style.padding = '0px' ;
+
+	// Add the defined Style Sheet to the document.
+	if ( this.StyleSheet )
+		FCKTools.AppendStyleSheet( this.Document, this.StyleSheet ) ;
+
+
+	this.OuterDiv = this.Document.body.appendChild( this.Document.createElement('DIV') ) ;
+	this.OuterDiv.style.cssFloat = 'left' ;
+
+	this.PanelDiv = this.OuterDiv.appendChild( this.Document.createElement('DIV') ) ;
+	this.PanelDiv.className = 'FCK_Panel' ;
+
+	this.Created = true ;
+}
+
+FCKPanel.prototype.Show = function( panelX, panelY, relElement, width, height, autoSize  )
+{
+	if ( ! this.Created )
+		this.Create() ;
+
+	if ( width != null && autoSize && width < this.OuterDiv.offsetWidth )
+		this.PanelDiv.style.width = width ;
+
+	if ( height != null && autoSize && height < this.PanelDiv.offsetHeight )
+		this.PanelDiv.style.height = height + 'px' ;
+
+	var oPos = this.GetElementPosition( relElement ) ;
+
+	panelX += oPos.X ;
+	panelY += oPos.Y ;
+
+	if ( panelX + this.OuterDiv.offsetWidth > this.Window.innerWidth )
+	{
+		// The following line aligns the panel to the other side of the refElement.
+		// panelX = oPos.X - ( this.PanelDiv.offsetWidth - relElement.offsetWidth ) ;
+
+		panelX -= panelX + this.OuterDiv.offsetWidth - this.Window.innerWidth ;
+	}
+
+	// Set the context menu DIV in the specified location.
+	this._IFrame.style.left	= panelX + 'px' ;
+	this._IFrame.style.top	= panelY + 'px' ;
+
+	// Watch the "OnClick" event for all windows to close the Context Menu.
+	function SetOnClickListener( targetWindow, targetFunction )
+	{
+		// Try/Catch must be used to avoit an error when using a frameset
+		// on a different domain:
+		// "Permission denied to get property Window.frameElement".
+		try
+		{
+			if ( targetWindow == null || ( targetWindow.frameElement && targetWindow.frameElement.IsFCKPanel ) )
+				return ;
+
+			targetWindow.document.addEventListener( 'click', targetFunction, false ) ;
+		}
+		catch (e) {}
+
+		for ( var i = 0 ; i < targetWindow.frames.length ; i++ )
+			SetOnClickListener( targetWindow.frames[i], targetFunction ) ;
+	}
+	SetOnClickListener( window.top, FCKPanelEventHandlers.OnDocumentClick ) ;
+
+	this._IFrame.width	= this.OuterDiv.offsetWidth ;
+	this._IFrame.height = this.OuterDiv.offsetHeight ;
+
+	// Show it.
+	this._IFrame.style.visibility = '' ;
+}
+
+FCKPanel.prototype.GetElementPosition = function( el )
+{
+	// Initializes the Coordinates object that will be returned by the function.
+	var c = { X:0, Y:0 } ;
+
+	// Loop throw the offset chain.
+	while ( el )
+	{
+		c.X += el.offsetLeft ;
+		c.Y += el.offsetTop ;
+
+		if ( el.offsetParent == null && el.ownerDocument.defaultView != this.Window )
+			el = el.ownerDocument.defaultView.frameElement ;
+		else
+			el = el.offsetParent ;
+	}
+
+	// Return the Coordinates object
+	return c ;
+}
+
+FCKPanel.prototype.Hide = function()
+{
+	// There is a bug on Firefox over Mac. It doesn't hide the Panel
+	// scrollbars, so we must force it.
+	this.PanelDiv.style.overflow = 'visible' ;
+
+	this._IFrame.style.visibility = 'hidden' ;
+//	this._IFrame.style.left = this._IFrame.style.top = '0px' ;
+}
+
+var FCKPanelEventHandlers = new Object() ;
+
+FCKPanelEventHandlers.OnDocumentClick = function( e )
+{
+	var oWindow = e.target.ownerDocument.defaultView ;
+
+	if ( ! oWindow.IsFCKPanel )
+	{
+		function RemoveOnClickListener( targetWindow )
+		{
+			if ( targetWindow == null )
+				return ;
+
+			// Try/Catch must be used to avoit an error when using a frameset
+			// on a different domain:
+			// "Permission denied to get property Window.frameElement".
+			try
+			{
+				if ( targetWindow.frameElement && targetWindow.frameElement.IsFCKPanel )
+					targetWindow.frameElement.Panel.Hide() ;
+				else
+					targetWindow.document.removeEventListener( 'click', FCKPanelEventHandlers.OnDocumentClick, false ) ;
+			}
+			catch (e) {}
+
+			for ( var i = 0 ; i < targetWindow.frames.length ; i++ )
+				RemoveOnClickListener( targetWindow.frames[i] ) ;
+		}
+		RemoveOnClickListener( window.top ) ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckpanel_ie.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckpanel_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckpanel_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckpanel_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,78 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckpanel_ie.js
+ * 	FCKPanel Class: Creates and manages floating panels in IE Browsers.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKPanel = function( parentWindow )
+{
+	this.Window = parentWindow ? parentWindow : window ;
+}
+
+function FCKPanel_OnContextMenu() { return false ; }
+
+FCKPanel.prototype.Create = function()
+{
+	// Create the Popup that will hold the panel.
+	this._Popup = this.Window.createPopup() ;
+	
+	this.Document = this._Popup.document ;
+	
+	aCleanupDocs[ aCleanupDocs.length ] = this.Document ;
+	
+	this.Document.oncontextmenu = FCKPanel_OnContextMenu ;
+
+	if ( this.StyleSheet )
+		FCKTools.AppendStyleSheet( this.Document, this.StyleSheet ) ;
+		
+	// Create the main DIV that is used as the panel base.
+	this.PanelDiv = this.Document.body.appendChild( this.Document.createElement('DIV') ) ;
+	this.PanelDiv.className = 'FCK_Panel' ;
+	
+	this.Created = true ;
+}
+
+FCKPanel.prototype.Show = function( panelX, panelY, relElement, width, height, autoSize )
+{
+	if ( ! this.Created )
+		this._Create() ;
+	
+	// The offsetWidth and offsetHeight properties are not available if the 
+	// element is not visible. So we must "show" the popup with no size to
+	// be able to use that values in the second call.
+	this._Popup.show( panelX, panelY, 0, 0, relElement ) ;
+
+	if ( width == null || ( autoSize && width > this.PanelDiv.offsetWidth ) )
+		var iWidth = this.PanelDiv.offsetWidth ;
+	else
+		var iWidth = width ;
+
+	if ( height == null || ( autoSize && height > this.PanelDiv.offsetHeight ) )
+		var iHeight = this.PanelDiv.offsetHeight ;
+	else
+		var iHeight = height ;
+
+	this.PanelDiv.style.height = iHeight ;
+
+	// Second call: Show the Popup at the specified location.
+	this._Popup.show( panelX, panelY, iWidth, iHeight, relElement ) ;
+}
+
+FCKPanel.prototype.Hide = function()
+{
+	if ( this._Popup )
+		this._Popup.hide() ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckplugin.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckplugin.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckplugin.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckplugin.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckplugin.js
+ * 	FCKPlugin Class: Represents a single plugin.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Certifies that the "PluginsPath" configuration ends with a slash.
+if ( !FCKConfig.PluginsPath.endsWith('/') )
+	FCKConfig.PluginsPath += '/' ;
+
+var FCKPlugin = function( name, availableLangs, basePath )
+{
+	this.Name = name ;
+	this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ;
+	this.Path = this.BasePath + name + '/' ;
+	
+	if ( !availableLangs || availableLangs.length == 0 )
+		this.AvailableLangs = new Array() ;
+	else
+		this.AvailableLangs = availableLangs.split(',') ;
+}
+
+FCKPlugin.prototype.Load = function()
+{
+	// Load the language file, if defined.
+	if ( this.AvailableLangs.length > 0 )
+	{
+		var sLang ;
+		
+		// Check if the plugin has the language file for the active language.
+		if ( this.AvailableLangs.indexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 )
+			sLang = FCKLanguageManager.ActiveLanguage.Code ;
+		else
+			// Load the default language file (first one) if the current one is not available.
+			sLang = this.AvailableLangs[0] ;
+		
+		// Add the main plugin script.
+		FCKScriptLoader.AddScript( this.Path + 'lang/' + sLang + '.js' ) ;		
+	}
+		
+	// Add the main plugin script.
+	FCKScriptLoader.AddScript( this.Path + 'fckplugin.js' ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckspecialcombo.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckspecialcombo.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckspecialcombo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckspecialcombo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,280 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckspecialcombo.js
+ * 	FCKSpecialCombo Class: represents a special combo.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKSpecialCombo = function( caption )
+{
+	// Default properties values.
+	this.FieldWidth		= 80 ;
+	this.PanelWidth		= 130 ;
+	this.PanelMaxHeight	= 150 ;
+	this.Label			= '&nbsp;' ;
+	this.Caption		= caption ;
+	this.Tooltip		= caption ;
+	this.Style			= FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.Enabled = true ;
+	
+	this.Items = new Object() ;
+	
+	this._Panel = new FCKPanel() ;
+	this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
+	this._Panel.Create() ;
+	this._Panel.PanelDiv.className += ' SC_Panel' ;
+	this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+	
+	this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOver()
+{
+	this.className += ' SC_ItemOver' ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOut()
+{
+	this.className = this.originalClass ;
+}
+
+function FCKSpecialCombo_ItemOnClick()
+{
+	this.FCKSpecialCombo._Panel.Hide() ;
+
+	this.FCKSpecialCombo.SetLabel( this.FCKItemLabel ) ;
+
+	if ( typeof( this.FCKSpecialCombo.OnSelect ) == 'function' )
+		this.FCKSpecialCombo.OnSelect( this.FCKItemID, this ) ;
+}
+
+FCKSpecialCombo.prototype.AddItem = function( id, html, label )
+{
+	// <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>
+	var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+	oDiv.className = oDiv.originalClass = 'SC_Item' ;
+	oDiv.innerHTML = html ;
+	oDiv.FCKItemID = id ;
+	oDiv.FCKItemLabel = label ? label : id ;
+	oDiv.FCKSpecialCombo = this ;
+	oDiv.Selected = false ;
+
+	oDiv.onmouseover	= FCKSpecialCombo_ItemOnMouseOver ;
+	oDiv.onmouseout		= FCKSpecialCombo_ItemOnMouseOut ;
+	oDiv.onclick		= FCKSpecialCombo_ItemOnClick ;
+	
+	this.Items[ id.toString().toLowerCase() ] = oDiv ;
+	
+	return oDiv ;
+}
+
+FCKSpecialCombo.prototype.SelectItem = function( itemId )
+{
+	itemId = itemId ? itemId.toString().toLowerCase() : '' ;
+	
+	var oDiv = this.Items[ itemId ] ;
+	if ( oDiv )
+	{
+		oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;
+		oDiv.Selected = true ;
+	}
+}
+
+FCKSpecialCombo.prototype.DeselectAll = function()
+{
+	for ( var i in this.Items )
+	{
+		this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ;
+		this.Items[i].Selected = false ;
+	}
+}
+
+FCKSpecialCombo.prototype.SetLabelById = function( id )
+{
+	id = id ? id.toString().toLowerCase() : '' ;
+	
+	var oDiv = this.Items[ id ] ;
+	this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabel = function( text )
+{
+	this.Label = text.length == 0 ? '&nbsp;' : text ;
+
+	if ( this._LabelEl )
+		this._LabelEl.innerHTML = this.Label ;
+}
+
+FCKSpecialCombo.prototype.SetEnabled = function( isEnabled )
+{
+	this.Enabled = isEnabled ;
+	
+	this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ;
+}
+
+FCKSpecialCombo.prototype.Create = function( targetElement )
+{
+	this._OuterTable = targetElement.appendChild( document.createElement( 'TABLE' ) ) ;
+	this._OuterTable.cellPadding = 0 ;
+	this._OuterTable.cellSpacing = 0 ;
+	
+	this._OuterTable.insertRow(-1) ;
+	
+	var sClass ;
+	var bShowLabel ;
+	
+	switch ( this.Style )
+	{
+		case FCK_TOOLBARITEM_ONLYICON :
+			sClass = 'TB_ButtonType_Icon' ;
+			bShowLabel = false;
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			sClass = 'TB_ButtonType_Text' ;
+			bShowLabel = false;
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			bShowLabel = true;
+			break ;
+	}
+
+	if ( this.Caption && this.Caption.length > 0 && bShowLabel )
+	{
+		var oCaptionCell = this._OuterTable.rows[0].insertCell(-1) ;
+		oCaptionCell.unselectable = 'on' ;
+		oCaptionCell.innerHTML = this.Caption ;
+		oCaptionCell.className = 'SC_FieldCaption' ;
+	}
+	
+	// Create the main DIV element.
+	var oField = this._OuterTable.rows[0].insertCell(-1).appendChild( document.createElement( 'DIV' ) ) ;
+	if ( bShowLabel )
+	{
+		oField.className = 'SC_Field' ;
+		oField.style.width = this.FieldWidth + 'px' ;
+		oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldLabel" unselectable="on"><label unselectable="on">&nbsp;</label></td><td class="SC_FieldButton" unselectable="on">&nbsp;</td></tr></tbody></table>' ;
+
+		this._LabelEl = oField.getElementsByTagName('label')[0] ;
+		this._LabelEl.innerHTML = this.Label ;
+	}
+	else
+	{
+		oField.className = 'TB_Button_Off' ;
+		//oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldButton" style="border-left: none;" unselectable="on">&nbsp;</td></tr></tbody></table>' ;
+		oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;" unselectable="on"><tbody><tr><td class="SC_FieldButton" style="border-left: none;" unselectable="on">&nbsp;</td></tr></tbody></table>' ;
+		
+		// Gets the correct CSS class to use for the specified style (param).
+		oField.innerHTML ='<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' +
+				'<tr>' +
+					//'<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" unselectable="on"></td>' +
+					'<td class="TB_Text" unselectable="on">' + this.Caption + '</td>' +
+					'<td class="TB_ButtonArrow" unselectable="on"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
+				'</tr>' +
+			'</table>' ;
+	}
+
+
+	// Events Handlers
+
+	oField.SpecialCombo = this ;
+	
+	oField.onmouseover	= FCKSpecialCombo_OnMouseOver ;
+	oField.onmouseout	= FCKSpecialCombo_OnMouseOut ;
+	oField.onclick		= FCKSpecialCombo_OnClick ;
+}
+
+function FCKSpecialCombo_OnMouseOver()
+{
+	if ( this.SpecialCombo.Enabled )
+	{
+		switch ( this.SpecialCombo.Style )
+		{
+		case FCK_TOOLBARITEM_ONLYICON :
+			this.className = 'TB_Button_On';
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			this.className = 'TB_Button_On';
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			this.className = 'SC_Field SC_FieldOver' ;
+			break ;
+		}
+	}
+}
+	
+function FCKSpecialCombo_OnMouseOut()
+{
+	switch ( this.SpecialCombo.Style )
+	{
+		case FCK_TOOLBARITEM_ONLYICON :
+			this.className = 'TB_Button_Off';
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			this.className = 'TB_Button_Off';
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			this.className='SC_Field' ;
+			break ;
+	}
+}
+	
+function FCKSpecialCombo_OnClick( e )
+{
+	// For Mozilla we must stop the event propagation to avoid it hiding 
+	// the panel because of a click outside of it.
+	if ( e )
+	{
+		e.stopPropagation() ;
+		FCKPanelEventHandlers.OnDocumentClick( e ) ;
+	}
+
+	if ( this.SpecialCombo.Enabled )
+	{
+		var oPanel = this.SpecialCombo._Panel ;
+		
+		if ( typeof( this.SpecialCombo.OnBeforeClick ) == 'function' )
+			this.SpecialCombo.OnBeforeClick( this.SpecialCombo ) ;
+
+		if ( this.SpecialCombo._ItemsHolderEl.offsetHeight > this.SpecialCombo.PanelMaxHeight )
+			oPanel.PanelDiv.style.height = this.SpecialCombo.PanelMaxHeight + 'px' ;
+		else
+			oPanel.PanelDiv.style.height = this.SpecialCombo._ItemsHolderEl.offsetHeight + 'px' ;
+			
+		oPanel.PanelDiv.style.width = this.SpecialCombo.PanelWidth + 'px' ;
+		
+		if ( FCKBrowserInfo.IsGecko )
+			oPanel.PanelDiv.style.overflow = '-moz-scrollbars-vertical' ;
+
+		oPanel.Show( 0, this.offsetHeight, this, null, this.SpecialCombo.PanelMaxHeight, true ) ;
+	}
+
+	return false ;
+}
+
+/* 
+Sample Combo Field HTML output:
+
+<div class="SC_Field" style="width: 80px;">
+	<table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;">
+		<tbody>
+			<tr>
+				<td class="SC_FieldLabel"><label>&nbsp;</label></td>
+				<td class="SC_FieldButton">&nbsp;</td>
+			</tr>
+		</tbody>
+	</table>
+</div>
+*/
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckstyledef_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstyledef_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckstyledef_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstyledef_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,107 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckstyledef_gecko.js
+ * 	FCKStyleDef Class: represents a single stylke definition. (Gecko specific)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKStyleDef.prototype.ApplyToSelection = function()
+{
+	if ( FCKSelection.GetType() == 'Text' && !this.IsObjectElement )
+	{
+		var oSelection = FCK.EditorWindow.getSelection() ;
+		
+		// Create the main element.
+		var e = FCK.EditorDocument.createElement( this.Element ) ;
+		
+		for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
+		{
+			e.appendChild( oSelection.getRangeAt(i).extractContents() ) ;
+		}
+		
+		// Set the attributes.
+		this._AddAttributes( e ) ;
+		
+		// Remove the duplicated elements.
+		this._RemoveDuplicates( e ) ;
+
+		var oRange = oSelection.getRangeAt(0) ;		
+		oRange.insertNode( e ) ;
+	}
+	else
+	{
+		var oControl = FCKSelection.GetSelectedElement() ;
+		if ( oControl.tagName == this.Element )
+			this._AddAttributes( oControl ) ;
+	}
+}
+
+FCKStyleDef.prototype._AddAttributes = function( targetElement )
+{
+	for ( var a in this.Attributes )
+		targetElement.setAttribute( a, this.Attributes[a], 0 ) ;
+}
+
+FCKStyleDef.prototype._RemoveDuplicates = function( parent )
+{
+	for ( var i = 0 ; i < parent.childNodes.length ; i++ )
+	{
+		var oChild = parent.childNodes[i] ;
+		
+		if ( oChild.nodeType != 1 )
+			continue ;
+		
+		this._RemoveDuplicates( oChild ) ;
+		
+		if ( this.IsEqual( oChild ) )
+			FCKTools.RemoveOuterTags( oChild ) ;
+	}
+}
+
+FCKStyleDef.prototype.IsEqual = function( e )
+{
+	if ( e.tagName != this.Element )
+		return false ;
+	
+	for ( var a in this.Attributes )
+	{
+		if ( e.getAttribute( a ) != this.Attributes[a] )
+			return false ;
+	}
+	
+	return true ;
+}
+
+FCKStyleDef.prototype._RemoveMe = function( elementToCheck )
+{
+	if ( ! elementToCheck )
+		return ;
+
+	var oParent = elementToCheck.parentNode ;
+
+	if ( elementToCheck.nodeType == 1 && this.IsEqual( elementToCheck ) )
+	{
+		if ( this.IsObjectElement )
+		{
+			for ( var a in this.Attributes )
+				elementToCheck.removeAttribute( a, 0 ) ;
+			return ;
+		}
+		else
+			FCKTools.RemoveOuterTags( elementToCheck ) ;
+	}
+	
+	this._RemoveMe( oParent ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckstyledef_ie.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstyledef_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckstyledef_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstyledef_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,130 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckstyledef_ie.js
+ * 	FCKStyleDef Class: represents a single stylke definition. (IE specific)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKStyleDef.prototype.ApplyToSelection = function()
+{
+	var oSelection = FCK.EditorDocument.selection ;
+	
+	if ( oSelection.type == 'Text' )
+	{
+		var oRange = oSelection.createRange() ;
+		
+		// Create the main element.
+		var e = document.createElement( this.Element ) ;
+		e.innerHTML = oRange.htmlText ;
+		
+		// Set the attributes.
+		this._AddAttributes( e ) ;
+		
+		// Remove the duplicated elements.
+		this._RemoveDuplicates( e ) ;
+		
+		// Replace the selection with the resulting HTML.
+		oRange.pasteHTML( e.outerHTML ) ;
+	}
+	else if ( oSelection.type == 'Control' )
+	{
+		var oControl = FCKSelection.GetSelectedElement() ;
+		if ( oControl.tagName == this.Element )
+			this._AddAttributes( oControl ) ;
+	}
+}
+
+FCKStyleDef.prototype._AddAttributes = function( targetElement )
+{
+	for ( var a in this.Attributes )
+	{
+		if ( a.toLowerCase() == 'style' )
+			targetElement.style.cssText = this.Attributes[a] ;
+		else
+			targetElement.setAttribute( a, this.Attributes[a], 0 ) ;
+	}
+}
+
+FCKStyleDef.prototype._RemoveDuplicates = function( parent )
+{
+	for ( var i = 0 ; i < parent.children.length ; i++ )
+	{
+		var oChild = parent.children[i] ;
+		this._RemoveDuplicates( oChild ) ;
+		
+		if ( this.IsEqual( oChild ) )
+		{
+			oChild.insertAdjacentHTML( 'beforeBegin', oChild.innerHTML ) ;
+			oChild.parentElement.removeChild( oChild ) ;
+		}
+	}
+}
+
+FCKStyleDef.prototype.IsEqual = function( e )
+{
+	if ( e.tagName != this.Element )
+		return false ;
+	
+	for ( var a in this.Attributes )
+	{
+		switch ( a.toLowerCase() )
+		{
+			case 'style' :
+				if ( e.style.cssText.toLowerCase() != this.Attributes[a].toLowerCase() )
+					return false ;
+				break ;
+			case 'class' :
+				if ( e.getAttribute( 'className', 0 ) != this.Attributes[a] )
+					return false ;
+				break ;
+			default :
+				if ( e.getAttribute( a, 0 ) != this.Attributes[a] )
+					return false ;
+		}
+	}
+	
+	return true ;
+}
+
+FCKStyleDef.prototype._RemoveMe = function( elementToCheck )
+{
+	if ( ! elementToCheck )
+		return ;
+
+	var oParent = elementToCheck.parentElement ;
+
+	if ( this.IsEqual( elementToCheck ) )
+	{
+		if ( this.IsObjectElement )
+		{
+			for ( var a in this.Attributes )
+			{
+				switch ( a.toLowerCase() )
+				{
+					case 'class' :
+						elementToCheck.removeAttribute( 'className', 0 ) ;
+						break ;
+					default :
+						elementToCheck.removeAttribute( a, 0 ) ;
+				}
+			}
+			return ;
+		}
+		else
+			FCKTools.RemoveOuterTags( elementToCheck ) ;
+	}
+	
+	this._RemoveMe( oParent ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckstyledef.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstyledef.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckstyledef.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstyledef.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,55 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckstyledef.js
+ * 	FCKStyleDef Class: represents a single stylke definition.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKStyleDef = function( name, element )
+{
+	this.Name = name ;
+	this.Element = element.toUpperCase() ;
+	this.IsObjectElement = FCKRegexLib.ObjectElements.test( this.Element ) ;
+	this.Attributes = new Object() ;
+}
+
+FCKStyleDef.prototype.AddAttribute = function( name, value )
+{
+	this.Attributes[ name ] = value ;
+}
+
+FCKStyleDef.prototype.GetOpenerTag = function()
+{
+	var s = '<' + this.Element ;
+	
+	for ( var a in this.Attributes )
+		s += ' ' + a + '="' + this.Attributes[a] + '"' ;
+	
+	return s + '>' ;
+}
+
+FCKStyleDef.prototype.GetCloserTag = function()
+{
+	return '</' + this.Element + '>' ;
+}
+
+
+FCKStyleDef.prototype.RemoveFromSelection = function()
+{
+	if ( FCKSelection.GetType() == 'Control' )
+		this._RemoveMe( FCKSelection.GetSelectedElement() ) ;
+	else
+		this._RemoveMe( FCKSelection.GetParentElement() ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckstylesloader.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstylesloader.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckstylesloader.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckstylesloader.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,84 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckstylesloader.js
+ * 	FCKStylesLoader Class: this class define objects that are responsible
+ * 	for loading the styles defined in the XML file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKStylesLoader = function()
+{
+	this.Styles = new Object() ;
+	this.StyleGroups = new Object() ;
+	this.Loaded = false ;
+	this.HasObjectElements = false ;
+}
+
+FCKStylesLoader.prototype.Load = function( stylesXmlUrl )
+{
+	// Load the XML file into a FCKXml object.
+	var oXml = new FCKXml() ;
+	oXml.LoadUrl( stylesXmlUrl ) ;
+	
+	// Get the "Style" nodes defined in the XML file.
+	var aStyleNodes = oXml.SelectNodes( 'Styles/Style' ) ;
+	
+	// Add each style to our "Styles" collection.
+	for ( var i = 0 ; i < aStyleNodes.length ; i++ )
+	{
+		var sElement = aStyleNodes[i].attributes.getNamedItem('element').value.toUpperCase() ;
+	
+		// Create the style definition object.
+		var oStyleDef = new FCKStyleDef( aStyleNodes[i].attributes.getNamedItem('name').value, sElement ) ;
+		
+		if ( oStyleDef.IsObjectElement )
+			this.HasObjectElements = true ;
+		
+		// Get the attributes defined for the style (if any).
+		var aAttNodes = oXml.SelectNodes( 'Attribute', aStyleNodes[i] ) ;
+		
+		// Add the attributes to the style definition object.
+		for ( var j = 0 ; j < aAttNodes.length ; j++ )
+		{
+			var sAttName	= aAttNodes[j].attributes.getNamedItem('name').value ;
+			var sAttValue	= aAttNodes[j].attributes.getNamedItem('value').value ;
+
+			// IE changes the "style" attribute value when applied to an element
+			// so we must get the final resulting value (for comparision issues).
+			if ( sAttName.toLowerCase() == 'style' )
+			{
+				var oTempE = document.createElement( 'SPAN' ) ;
+				oTempE.style.cssText = sAttValue ;
+				sAttValue = oTempE.style.cssText ;
+			}
+			
+			oStyleDef.AddAttribute( sAttName, sAttValue ) ;
+		}
+
+		// Add the style to the "Styles" collection using it's name as the key.
+		this.Styles[ oStyleDef.Name ] = oStyleDef ;
+		
+		// Add the style to the "StyleGroups" collection.
+		var aGroup = this.StyleGroups[sElement] ;
+		if ( aGroup == null )
+		{
+			this.StyleGroups[sElement] = new Array() ;
+			aGroup = this.StyleGroups[sElement] ;
+		}
+		aGroup[aGroup.length] = oStyleDef ;
+	}
+	
+	this.Loaded = true ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,29 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarbreak_gecko.js
+ * 	FCKToolbarBreak Class: breaks the toolbars.
+ * 	It makes it possible to force the toolbar to brak to a new line.
+ * 	This is the Gecko specific implementation.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarBreak = function()
+{
+	var oBreakDiv = document.createElement( 'div' ) ;
+	
+	oBreakDiv.style.clear = oBreakDiv.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
+	
+	FCKToolbarSet.DOMElement.appendChild( oBreakDiv ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,31 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarbreak_ie.js
+ * 	FCKToolbarBreak Class: breaks the toolbars.
+ * 	It makes it possible to force the toolbar to brak to a new line.
+ * 	This is the IE specific implementation.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarBreak = function()
+{
+	var oBreakDiv = document.createElement( 'div' ) ;
+	
+	oBreakDiv.className = 'TB_Break' ;
+	
+	oBreakDiv.style.clear = FCKLang.Dir == 'rtl' ? 'left' : 'right' ;
+	
+	FCKToolbarSet.DOMElement.appendChild( oBreakDiv ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarbutton.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarbutton.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarbutton.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarbutton.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,148 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarbutton.js
+ * 	FCKToolbarButton Class: represents a button in the toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView, contextSensitive )
+{
+	this.Command			= FCKCommands.GetCommand( commandName ) ;
+	this.Label				= label ? label : commandName ;
+	this.Tooltip			= tooltip ? tooltip : ( label ? label : commandName) ;
+	this.Style				= style ? style : FCK_TOOLBARITEM_ONLYICON ;
+	this.SourceView			= sourceView ? true : false ;
+	this.ContextSensitive	= contextSensitive ? true : false ;
+	this.IconPath			= FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+	this.State				= FCK_UNKNOWN ;
+}
+
+FCKToolbarButton.prototype.CreateInstance = function( parentToolbar )
+{
+	this.DOMDiv = document.createElement( 'div' ) ;
+	this.DOMDiv.className = 'TB_Button_Off' ;
+
+	this.DOMDiv.FCKToolbarButton = this ;
+	
+	var sHtml =
+		'<table title="' + this.Tooltip + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' +
+			'<tr>' ;
+	
+	if ( this.Style != FCK_TOOLBARITEM_ONLYTEXT ) 
+		sHtml += '<td class="TB_Icon" unselectable="on"><img src="' + this.IconPath + '" width="21" height="21" unselectable="on"></td>' ;
+	
+	if ( this.Style != FCK_TOOLBARITEM_ONLYICON ) 
+		sHtml += '<td class="TB_Text" unselectable="on" nowrap>' + this.Label + '</td>' ;
+	
+	sHtml +=	
+			'</tr>' +
+		'</table>' ;
+	
+	this.DOMDiv.innerHTML = sHtml ;
+
+	var oCell = parentToolbar.DOMRow.insertCell(-1) ;
+	oCell.appendChild( this.DOMDiv ) ;
+	
+	this.RefreshState() ;
+}
+
+FCKToolbarButton.prototype.RefreshState = function()
+{
+/*
+	TODO: Delete this commend block on stable version.
+	// Gets the actual state.
+//	var eState ;
+
+//	if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
+//		eState = FCK_TRISTATE_DISABLED ;
+//	else
+*/
+	// Gets the actual state.
+	var eState = this.Command.GetState() ;
+	
+	// If there are no state changes than do nothing and return.
+	if ( eState == this.State ) return ;
+	
+	// Sets the actual state.
+	this.State = eState ;
+	
+	switch ( this.State )
+	{
+		case FCK_TRISTATE_ON :
+			this.DOMDiv.className = 'TB_Button_On' ;
+
+			this.DOMDiv.onmouseover	= FCKToolbarButton_OnMouseOnOver ;
+			this.DOMDiv.onmouseout	= FCKToolbarButton_OnMouseOnOut ;
+			this.DOMDiv.onclick		= FCKToolbarButton_OnClick ;
+			
+			break ;
+		case FCK_TRISTATE_OFF :
+			this.DOMDiv.className = 'TB_Button_Off' ;
+
+			this.DOMDiv.onmouseover	= FCKToolbarButton_OnMouseOffOver ;
+			this.DOMDiv.onmouseout	= FCKToolbarButton_OnMouseOffOut ;
+			this.DOMDiv.onclick		= FCKToolbarButton_OnClick ;
+			
+			break ;
+		default :
+			this.Disable() ;
+			break ;
+	}
+}
+
+function FCKToolbarButton_OnMouseOnOver()
+{
+	this.className = 'TB_Button_On TB_Button_On_Over' ;
+}
+
+function FCKToolbarButton_OnMouseOnOut()
+{
+	this.className = 'TB_Button_On' ;
+}
+	
+function FCKToolbarButton_OnMouseOffOver()
+{
+	this.className = 'TB_Button_On TB_Button_Off_Over' ;
+}
+
+function FCKToolbarButton_OnMouseOffOut()
+{
+	this.className = 'TB_Button_Off' ;
+}
+	
+function FCKToolbarButton_OnClick(e)
+{
+	this.FCKToolbarButton.Click(e) ;
+	return false ;
+}
+
+FCKToolbarButton.prototype.Click = function()
+{
+	this.Command.Execute() ;
+}
+
+FCKToolbarButton.prototype.Enable = function()
+{
+	this.RefreshState() ;
+}
+
+FCKToolbarButton.prototype.Disable = function()
+{
+	this.State = FCK_TRISTATE_DISABLED ;
+	this.DOMDiv.className = 'TB_Button_Disabled' ;
+	this.DOMDiv.onmouseover	= null ;
+	this.DOMDiv.onmouseout	= null ;
+	this.DOMDiv.onclick		= null ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,64 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarfontformatcombo.js
+ * 	FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarFontFormatCombo = function( tooltip, style )
+{
+	this.Command	= FCKCommands.GetCommand( 'FontFormat' ) ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+	
+	this.PanelWidth = 190 ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontFormatCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarFontFormatCombo.prototype.GetLabel = function()
+{
+	return FCKLang.FontFormat ;
+}
+
+FCKToolbarFontFormatCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+	// Get the format names from the language file.
+	var aNames = FCKLang['FontFormats'].split(';') ;
+	var oNames = {
+		p		: aNames[0],
+		pre		: aNames[1],
+		address	: aNames[2],
+		h1		: aNames[3],
+		h2		: aNames[4],
+		h3		: aNames[5],
+		h4		: aNames[6],
+		h5		: aNames[7],
+		h6		: aNames[8],
+		div		: aNames[9]
+	} ;
+
+	// Get the available formats from the configuration file.
+	var aTags = FCKConfig.FontFormats.split(';') ;
+	
+	for ( var i = 0 ; i < aTags.length ; i++ )
+	{
+		if ( aTags[i] == 'div' && FCKBrowserInfo.IsGecko )
+			continue ;
+		this._Combo.AddItem( aTags[i], '<' + aTags[i] + '>' + oNames[aTags[i]] + '</' + aTags[i] + '>', oNames[aTags[i]] ) ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,42 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarfontscombo.js
+ * 	FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarFontsCombo = function( tooltip, style )
+{
+	this.Command	= FCKCommands.GetCommand( 'FontName' ) ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontsCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarFontsCombo.prototype.GetLabel = function()
+{
+	return FCKLang.Font ;
+}
+
+FCKToolbarFontsCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+	var aFonts = FCKConfig.FontNames.split(';') ;
+	
+	for ( var i = 0 ; i < aFonts.length ; i++ )
+		this._Combo.AddItem( aFonts[i], '<span style="font-family: \'' + aFonts[i] + '\'; font-size: 12px;">' + aFonts[i] + '</span>' ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,47 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarfontsizecombo.js
+ * 	FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarFontSizeCombo = function( tooltip, style )
+{
+	this.Command	= FCKCommands.GetCommand( 'FontSize' ) ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontSizeCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarFontSizeCombo.prototype.GetLabel = function()
+{
+	return FCKLang.FontSize ;
+}
+
+FCKToolbarFontSizeCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+	targetSpecialCombo.FieldWidth = 70 ;
+	
+	var aSizes = FCKConfig.FontSizes.split(';') ;
+	
+	for ( var i = 0 ; i < aSizes.length ; i++ )
+	{
+		var aSizeParts = aSizes[i].split('/') ;
+		this._Combo.AddItem( aSizeParts[0], '<font size="' + aSizeParts[0] + '">' + aSizeParts[1] + '</font>', aSizeParts[1] ) ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbar.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbar.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbar.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbar.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,62 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbar.js
+ * 	FCKToolbar Class: represents a toolbar. A toolbar is not the complete
+ * 	toolbar set visible, but just a strip on it... a group of items.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbar = function()
+{
+	this.Items = new Array() ;
+	
+	var e = this.DOMTable = document.createElement( 'table' ) ;
+	e.className = 'TB_Toolbar' ;
+
+	// Sets the toolbar direction. IE uses "styleFloat" and Gecko uses "cssFloat".
+	e.style.styleFloat = e.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
+
+	e.cellPadding = 0 ;
+	e.cellSpacing = 0 ;
+	e.border = 0 ;
+
+	this.DOMRow = e.insertRow(-1) ;
+
+	var oCell = this.DOMRow.insertCell(-1) ;
+	oCell.className = 'TB_Start' ;
+	oCell.innerHTML = '<img src="' + FCKConfig.SkinPath + 'images/toolbar.start.gif" width="7" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">' ;
+
+	FCKToolbarSet.DOMElement.appendChild( e ) ;
+}
+
+FCKToolbar.prototype.AddItem = function( toolbarItem )
+{
+	this.Items[ this.Items.length ] = toolbarItem ;
+	toolbarItem.CreateInstance( this ) ;
+}
+
+FCKToolbar.prototype.AddSeparator = function()
+{
+	var oCell = this.DOMRow.insertCell(-1) ;
+	oCell.unselectable = 'on' ;
+	oCell.innerHTML = '<img src="' + FCKConfig.SkinPath + 'images/toolbar.separator.gif" width="5" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">' ;
+}
+
+FCKToolbar.prototype.AddTerminator = function()
+{
+	var oCell = this.DOMRow.insertCell(-1) ;
+	oCell.className = 'TB_End' ;
+	oCell.innerHTML = '<img src="' + FCKConfig.SkinPath + 'images/toolbar.end.gif" width="12" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">' ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,83 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarpanelbutton.js
+ * 	FCKToolbarPanelButton Class: represents a special button in the toolbar
+ * 	that shows a panel when pressed.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarPanelButton = function( commandName, label, tooltip, style )
+{
+	this.Command	= FCKCommands.GetCommand( commandName ) ;
+	this.Label		= label ? label : commandName ;
+	this.Tooltip	= tooltip ? tooltip : ( label ? label : commandName) ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ONLYICON ;
+	this.State		= FCK_UNKNOWN ;
+}
+
+FCKToolbarPanelButton.prototype.Click = function(e)
+{
+	// For Mozilla we must stop the event propagation to avoid it hiding 
+	// the panel because of a click outside of it.
+	if ( e )
+	{
+		e.stopPropagation() ;
+		FCKPanelEventHandlers.OnDocumentClick( e ) ;
+	}
+
+	if ( this.State != FCK_TRISTATE_DISABLED )
+	{
+		this.Command.Execute(0, this.DOMDiv.offsetHeight, this.DOMDiv) ;
+//			this.FCKToolbarButton.HandleOnClick( this, e ) ;
+	}
+		
+	return false ;
+}
+
+FCKToolbarPanelButton.prototype.CreateInstance = function( parentToolbar )
+{
+	this.DOMDiv = document.createElement( 'div' ) ;
+	this.DOMDiv.className = 'TB_Button_Off' ;
+
+	this.DOMDiv.FCKToolbarButton = this ;
+	
+	var sHtml =
+		'<table title="' + this.Tooltip + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' +
+			'<tr>' ;
+			
+	if ( this.Style != FCK_TOOLBARITEM_ONLYTEXT ) 
+		sHtml += '<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" unselectable="on"></td>' ;
+				
+	if ( this.Style != FCK_TOOLBARITEM_ONLYICON ) 
+		sHtml += '<td class="TB_Text" unselectable="on" nowrap>' + this.Label + '</td>' ;
+	
+	sHtml +=
+				'<td class="TB_ButtonArrow" unselectable="on"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
+			'</tr>' +
+		'</table>' ;
+	
+	this.DOMDiv.innerHTML = sHtml ;
+
+	var oCell = parentToolbar.DOMRow.insertCell(-1) ;
+	oCell.appendChild( this.DOMDiv ) ;
+	
+	this.RefreshState() ;
+}
+
+// The Panel Button works like a normal button so the refresh state functions
+// defined for the normal button can be reused here.
+FCKToolbarPanelButton.prototype.RefreshState	= FCKToolbarButton.prototype.RefreshState ;
+FCKToolbarPanelButton.prototype.Enable			= FCKToolbarButton.prototype.Enable ;
+FCKToolbarPanelButton.prototype.Disable			= FCKToolbarButton.prototype.Disable ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,117 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarspecialcombo.js
+ * 	FCKToolbarSpecialCombo Class: This is a "abstract" base class to be used
+ * 	by the special combo toolbar elements like font name, font size, paragraph format, etc...
+ * 	
+ * 	The following properties and methods must be implemented when inheriting from
+ * 	this class:
+ * 		- Property:	Command								[ The command to be executed ]
+ * 		- Method:	GetLabel()							[ Returns the label ]
+ * 		-			CreateItems( targetSpecialCombo )	[ Add all items in the special combo ]
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarSpecialCombo = function()
+{
+	this.SourceView			= false ;
+	this.ContextSensitive	= true ;
+}
+
+function FCKToolbarSpecialCombo_OnSelect( itemId, item )
+{
+	this.Command.Execute( itemId, item ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.CreateInstance = function( parentToolbar )
+{
+	this._Combo = new FCKSpecialCombo( this.GetLabel() ) ;
+	this._Combo.FieldWidth		= this.FieldWidth		!= null ? this.FieldWidth		: 100 ;
+	this._Combo.PanelWidth		= this.PanelWidth		!= null ? this.PanelWidth		: 150 ;
+	this._Combo.PanelMaxHeight	= this.PanelMaxHeight	!= null ? this.PanelMaxHeight	: 150 ;
+	
+	//this._Combo.Command.Name = this.Command.Name;
+//	this._Combo.Label	= this.Label ;
+	this._Combo.Tooltip	= this.Tooltip ;
+	this._Combo.Style	= this.Style ;
+	
+	this.CreateItems( this._Combo ) ;
+
+	this._Combo.Create( parentToolbar.DOMRow.insertCell(-1) ) ;
+
+	this._Combo.Command = this.Command ;
+	
+	this._Combo.OnSelect = FCKToolbarSpecialCombo_OnSelect ;
+}
+
+function FCKToolbarSpecialCombo_RefreshActiveItems( combo, value )
+{
+	combo.DeselectAll() ;
+	combo.SelectItem( value ) ;
+	combo.SetLabelById( value ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.RefreshState = function()
+{
+	// Gets the actual state.
+	var eState ;
+	
+//	if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
+//		eState = FCK_TRISTATE_DISABLED ;
+//	else
+//	{
+		var sValue = this.Command.GetState() ;
+
+		if ( sValue != FCK_TRISTATE_DISABLED )
+		{
+			eState = FCK_TRISTATE_ON ;
+			
+			if ( this.RefreshActiveItems )
+				this.RefreshActiveItems( this._Combo, sValue ) ;
+			else
+				FCKToolbarSpecialCombo_RefreshActiveItems( this._Combo, sValue ) ;
+		}
+		else
+			eState = FCK_TRISTATE_DISABLED ;
+//	}
+	
+	// If there are no state changes then do nothing and return.
+	if ( eState == this.State ) return ;
+	
+	if ( eState == FCK_TRISTATE_DISABLED )
+	{
+		this._Combo.DeselectAll() ;
+		this._Combo.SetLabel( '' ) ;
+	}
+
+	// Sets the actual state.
+	this.State = eState ;
+
+	// Updates the graphical state.
+	this._Combo.SetEnabled( eState != FCK_TRISTATE_DISABLED ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Enable = function()
+{
+	this.RefreshState() ;
+}
+
+FCKToolbarSpecialCombo.prototype.Disable = function()
+{
+	this.State = FCK_TRISTATE_DISABLED ;
+	this._Combo.DeselectAll() ;
+	this._Combo.SetLabel( '' ) ;
+	this._Combo.SetEnabled( false ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,94 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarstylecombo.js
+ * 	FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarStyleCombo = function( tooltip, style )
+{
+	this.Command	= FCKCommands.GetCommand( 'Style' ) ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarStyleCombo.prototype.GetLabel = function()
+{
+	return FCKLang.Style ;
+}
+
+FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+	// Add the Editor Area CSS to the Styles panel so the style classes are previewed correctly.
+	FCKTools.AppendStyleSheet( targetSpecialCombo._Panel.Document, FCKConfig.EditorAreaCSS ) ;
+
+	// For some reason Gecko is blocking inside the "RefreshVisibleItems" function.
+	if ( ! FCKBrowserInfo.IsGecko )
+		targetSpecialCombo.OnBeforeClick = this.RefreshVisibleItems ;
+
+	// Add the styles to the special combo.
+	for ( var s in this.Command.Styles )
+	{
+		var oStyle = this.Command.Styles[s] ;
+		var oItem ;
+		
+		if ( oStyle.IsObjectElement )
+			oItem = targetSpecialCombo.AddItem( s, s ) ;
+		else
+			oItem = targetSpecialCombo.AddItem( s, oStyle.GetOpenerTag() + s + oStyle.GetCloserTag() ) ;
+			
+		oItem.Style = oStyle ;
+	}
+}
+
+FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+	// Clear the actual selection.
+	targetSpecialCombo.DeselectAll() ;
+	
+	// Get the active styles.
+	var aStyles = this.Command.GetActiveStyles() ;
+	
+	if ( aStyles.length > 0 )
+	{
+		// Select the active styles in the combo.
+		for ( var i = 0 ; i < aStyles.length ; i++ )
+			targetSpecialCombo.SelectItem( aStyles[i].Name ) ;
+
+		// Set the combo label to the first style in the collection.
+		targetSpecialCombo.SetLabelById( aStyles[0].Name ) ;
+	}
+	else
+		targetSpecialCombo.SetLabel('') ;
+}
+
+FCKToolbarStyleCombo.prototype.RefreshVisibleItems = function( targetSpecialCombo )
+{
+	if ( FCKSelection.GetType() == 'Control' )
+		var sTagName = FCKSelection.GetSelectedElement().tagName ;
+
+	for ( var i in targetSpecialCombo.Items )
+	{
+		var oItem = targetSpecialCombo.Items[i] ;
+		if ( ( sTagName && oItem.Style.Element == sTagName ) || ( ! sTagName && ! oItem.Style.IsObjectElement ) )
+			oItem.style.display = '' ;
+		else
+			oItem.style.display = 'none' ;	// For some reason Gecko is blocking here.
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckxml_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckxml_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckxml_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckxml_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,71 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckxml_gecko.js
+ * 	FCKXml Class: class to load and manipulate XML files.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKXml ;
+
+if ( !( FCKXml = NS.FCKXml ) )
+{
+	FCKXml = NS.FCKXml = function()
+	{}
+
+	FCKXml.prototype.LoadUrl = function( urlToCall )
+	{
+		var oFCKXml = this ;
+
+		var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+		oXmlHttp.open( "GET", urlToCall, false ) ;
+		oXmlHttp.send( null ) ;
+		
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else
+			alert( 'Error loading "' + urlToCall + '"' ) ;
+	}
+
+	FCKXml.prototype.SelectNodes = function( xpath, contextNode )
+	{
+		var aNodeArray = new Array();
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument, 
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+		if ( xPathResult ) 
+		{
+			var oNode = xPathResult.iterateNext() ;
+ 			while( oNode )
+ 			{
+ 				aNodeArray[aNodeArray.length] = oNode ;
+ 				oNode = xPathResult.iterateNext();
+ 			}
+		} 
+		return aNodeArray ;
+	}
+
+	FCKXml.prototype.SelectSingleNode = function( xpath, contextNode ) 
+	{
+		var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+		if ( xPathResult && xPathResult.singleNodeValue )
+			return xPathResult.singleNodeValue ;
+		else	
+			return null ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/classes/fckxml_ie.js 1.4.0sr5-1/fckeditor/editor/_source/classes/fckxml_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/classes/fckxml_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/classes/fckxml_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,83 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckxml_ie.js
+ * 	FCKXml Class: class to load and manipulate XML files.
+ * 	(IE specific implementation)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKXml ;
+
+if ( !( FCKXml = NS.FCKXml ) )
+{
+	FCKXml = NS.FCKXml = function()
+	{
+		this.Error = false ;
+	}
+
+	FCKXml.prototype.LoadUrl = function( urlToCall )
+	{
+		this.Error = false ;
+
+		var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+
+		if ( !oXmlHttp )
+		{
+			this.Error = true ;
+			return ;
+		}
+
+		oXmlHttp.open( "GET", urlToCall, false ) ;
+		
+		oXmlHttp.send( null ) ;
+		
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 )
+		{
+			this.DOMDocument = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+			this.DOMDocument.async = false ;
+			this.DOMDocument.resolveExternals = false ;
+			this.DOMDocument.loadXML( oXmlHttp.responseText ) ;
+		}
+		else
+		{
+			this.Error = true ;
+			alert( 'Error loading "' + urlToCall + '"' ) ;
+		}
+	}
+
+	FCKXml.prototype.SelectNodes = function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return new Array() ;
+
+		if ( contextNode )
+			return contextNode.selectNodes( xpath ) ;
+		else
+			return this.DOMDocument.selectNodes( xpath ) ;
+	}
+
+	FCKXml.prototype.SelectSingleNode = function( xpath, contextNode ) 
+	{
+		if ( this.Error )
+			return ;
+			
+		if ( contextNode )
+			return contextNode.selectSingleNode( xpath ) ;
+		else
+			return this.DOMDocument.selectSingleNode( xpath ) ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fcknamedcommand.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fcknamedcommand.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fcknamedcommand.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fcknamedcommand.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,33 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcknamedcommand.js
+ * 	FCKNamedCommand Class: represents an internal browser command.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKNamedCommand = function( commandName )
+{
+	this.Name = commandName ;
+}
+
+FCKNamedCommand.prototype.Execute = function()
+{
+	FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKNamedCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandState( this.Name ) ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fck_othercommands.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fck_othercommands.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fck_othercommands.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fck_othercommands.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,275 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_othercommands.js
+ * 	Definition of other commands that are not available internaly in the
+ * 	browser (see FCKNamedCommand).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// ### General Dialog Box Commands.
+var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam )
+{
+	this.Name	= name ;
+	this.Title	= title ;
+	this.Url	= url ;
+	this.Width	= width ;
+	this.Height	= height ;
+
+	this.GetStateFunction	= getStateFunction ;
+	this.GetStateParam		= getStateParam ;
+}
+
+FCKDialogCommand.prototype.Execute = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height ) ;
+}
+
+FCKDialogCommand.prototype.GetState = function()
+{
+	if ( this.GetStateFunction )
+		return this.GetStateFunction( this.GetStateParam ) ;
+	else
+		return FCK_TRISTATE_OFF ;
+}
+
+// Generic Undefined command (usually used when a command is under development).
+var FCKUndefinedCommand = function()
+{
+	this.Name = 'Undefined' ;
+}
+
+FCKUndefinedCommand.prototype.Execute = function()
+{
+	alert( FCKLang.NotImplemented ) ;
+}
+
+FCKUndefinedCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### FontName
+var FCKFontNameCommand = function()
+{
+	this.Name = 'FontName' ;
+}
+
+FCKFontNameCommand.prototype.Execute = function( fontName )
+{
+	if (fontName == null || fontName == "")
+	{
+		// TODO: Remove font name attribute.
+	}
+	else
+		FCK.ExecuteNamedCommand( 'FontName', fontName ) ;
+}
+
+FCKFontNameCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandValue( 'FontName' ) ;
+}
+
+// ### FontSize
+var FCKFontSizeCommand = function()
+{
+	this.Name = 'FontSize' ;
+}
+
+FCKFontSizeCommand.prototype.Execute = function( fontSize )
+{
+	if ( typeof( fontSize ) == 'string' ) fontSize = parseInt(fontSize) ;
+
+	if ( fontSize == null || fontSize == '' )
+	{
+		// TODO: Remove font size attribute (Now it works with size 3. Will it work forever?)
+		FCK.ExecuteNamedCommand( 'FontSize', 3 ) ;
+	}
+	else
+		FCK.ExecuteNamedCommand( 'FontSize', fontSize ) ;
+}
+
+FCKFontSizeCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandValue( 'FontSize' ) ;
+}
+
+// ### FormatBlock
+var FCKFormatBlockCommand = function()
+{
+	this.Name = 'FormatBlock' ;
+}
+
+FCKFormatBlockCommand.prototype.Execute = function( formatName )
+{
+	if ( formatName == null || formatName == '' )
+		FCK.ExecuteNamedCommand( 'FormatBlock', '<P>' ) ;
+	else
+		FCK.ExecuteNamedCommand( 'FormatBlock', '<' + formatName + '>' ) ;
+}
+
+FCKFormatBlockCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandValue( 'FormatBlock' ) ;
+}
+
+// ### Preview
+var FCKPreviewCommand = function()
+{
+	this.Name = 'Preview' ;
+}
+
+FCKPreviewCommand.prototype.Execute = function()
+{
+     FCK.Preview() ;
+}
+
+FCKPreviewCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### Save
+var FCKSaveCommand = function()
+{
+	this.Name = 'Save' ;
+}
+
+FCKSaveCommand.prototype.Execute = function()
+{
+	// Get the linked field form.
+	var oForm = FCK.LinkedField.form ;
+
+	if ( typeof( oForm.onsubmit ) == 'function' )
+	{
+		var bRet = oForm.onsubmit() ;
+		if ( bRet != null && bRet === false )
+			return ;
+	}
+
+	// Submit the form.
+	oForm.submit() ;
+}
+
+FCKSaveCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### NewPage
+var FCKNewPageCommand = function()
+{
+	this.Name = 'NewPage' ;
+}
+
+FCKNewPageCommand.prototype.Execute = function()
+{
+	FCKUndo.SaveUndoStep() ;
+	FCK.SetHTML( '' ) ;
+	FCKUndo.Typing = true ;
+//	FCK.SetHTML( FCKBrowserInfo.IsGecko ? '&nbsp;' : '' ) ;
+//	FCK.SetHTML( FCKBrowserInfo.IsGecko ? GECKO_BOGUS : '' ) ;
+}
+
+FCKNewPageCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### Source button
+var FCKSourceCommand = function()
+{
+	this.Name = 'Source' ;
+}
+
+FCKSourceCommand.prototype.Execute = function()
+{
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		var iWidth	= FCKConfig.ScreenWidth * 0.65 ;
+		var iHeight	= FCKConfig.ScreenHeight * 0.65 ;
+		FCKDialog.OpenDialog( 'FCKDialog_Source', FCKLang.Source, 'dialog/fck_source.html', iWidth, iHeight, null, null, true ) ;
+	}
+	else
+	    FCK.SwitchEditMode() ;
+}
+
+FCKSourceCommand.prototype.GetState = function()
+{
+	return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ;
+}
+
+// ### Undo
+var FCKUndoCommand = function()
+{
+	this.Name = 'Undo' ;
+}
+
+FCKUndoCommand.prototype.Execute = function()
+{
+	if ( FCKBrowserInfo.IsIE )
+		FCKUndo.Undo() ;
+	else
+		FCK.ExecuteNamedCommand( 'Undo' ) ;
+}
+
+FCKUndoCommand.prototype.GetState = function()
+{
+	if ( FCKBrowserInfo.IsIE )
+		return ( FCKUndo.CheckUndoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+	else
+		return FCK.GetNamedCommandState( 'Undo' ) ;
+}
+
+// ### Redo
+var FCKRedoCommand = function()
+{
+	this.Name = 'Redo' ;
+}
+
+FCKRedoCommand.prototype.Execute = function()
+{
+	if ( FCKBrowserInfo.IsIE )
+		FCKUndo.Redo() ;
+	else
+		FCK.ExecuteNamedCommand( 'Redo' ) ;
+}
+
+FCKRedoCommand.prototype.GetState = function()
+{
+	if ( FCKBrowserInfo.IsIE )
+		return ( FCKUndo.CheckRedoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+	else
+		return FCK.GetNamedCommandState( 'Redo' ) ;
+}
+
+// ### Page Break
+var FCKPageBreakCommand = function()
+{
+	this.Name = 'PageBreak' ;
+}
+
+FCKPageBreakCommand.prototype.Execute = function()
+{
+	var oCenter = FCK.EditorDocument.createElement( 'CENTER' ) ;
+	oCenter.style.pageBreakAfter = 'always' ;
+	
+	var oFakeImage = FCKDocumentProcessors_CreateFakeImage( 'FCK__PageBreak', oCenter ) ;
+	oFakeImage	= FCK.InsertElement( oFakeImage ) ;
+}
+
+FCKPageBreakCommand.prototype.GetState = function()
+{
+	return 0 ; // FCK_TRISTATE_OFF
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckpasteplaintextcommand.js
+ * 	FCKPastePlainTextCommand Class: represents the 
+ * 	"Paste as Plain Text" command.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKPastePlainTextCommand = function() 
+{
+	this.Name = 'PasteText' ;
+}
+
+FCKPastePlainTextCommand.prototype.Execute = function()
+{
+	FCK.PasteAsPlainText() ;
+}
+
+FCKPastePlainTextCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandState( 'Paste' ) ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,36 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckpastewordcommand.js
+ * 	FCKPasteWordCommand Class: represents the "Paste from Word" command.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKPasteWordCommand = function() 
+{
+	this.Name = 'PasteWord' ;
+}
+
+FCKPasteWordCommand.prototype.Execute = function()
+{
+	FCK.PasteFromWord() ;
+}
+
+FCKPasteWordCommand.prototype.GetState = function()
+{
+	if ( FCKConfig.ForcePasteAsPlainText )
+		return FCK_TRISTATE_DISABLED ;
+	else
+		return FCK.GetNamedCommandState( 'Paste' ) ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,15 @@
+﻿var FCKSpellCheckCommand = function()
+{
+	this.Name = 'SpellCheck' ;
+	this.IsEnabled = ( FCKConfig.SpellChecker == 'SpellerPages' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+	return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,43 @@
+﻿var FCKSpellCheckCommand = function()
+{
+	this.Name = 'SpellCheck' ;
+	this.IsEnabled = ( FCKConfig.SpellChecker == 'ieSpell' || FCKConfig.SpellChecker == 'SpellerPages' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+	switch ( FCKConfig.SpellChecker )
+	{
+		case 'ieSpell' :
+			this._RunIeSpell() ;
+			break ;
+		
+		case 'SpellerPages' :
+			FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+			break ;
+	}
+}
+
+FCKSpellCheckCommand.prototype._RunIeSpell = function()
+{
+	try
+	{
+		var oIeSpell = new ActiveXObject( "ieSpell.ieSpellExtension" ) ;
+		oIeSpell.CheckAllLinkedDocuments( FCK.EditorDocument ) ;
+	}
+	catch( e )
+	{
+		if( e.number == -2146827859 )
+		{
+			if ( confirm( FCKLang.IeSpellDownload ) )
+				window.open( FCKConfig.IeSpellDownloadUrl , 'IeSpellDownload' ) ;
+		}
+		else
+			alert( 'Error Loading ieSpell: ' + e.message + ' (' + e.number + ')' ) ;
+	}
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+	return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckstylecommand.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckstylecommand.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fckstylecommand.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fckstylecommand.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckstylecommand.js
+ * 	FCKStyleCommand Class: represents the "Style" command.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKStyleCommand = function()
+{
+	this.Name = 'Style' ;
+
+	// Load the Styles defined in the XML file.
+	this.StylesLoader = new FCKStylesLoader() ;
+	this.StylesLoader.Load( FCKConfig.StylesXmlPath ) ;
+	this.Styles = this.StylesLoader.Styles ;
+}
+
+FCKStyleCommand.prototype.Execute = function( styleName, styleComboItem )
+{
+	FCKUndo.SaveUndoStep() ;
+
+	if ( styleComboItem.Selected )
+		styleComboItem.Style.RemoveFromSelection() ;
+	else
+		styleComboItem.Style.ApplyToSelection() ;
+
+	FCKUndo.SaveUndoStep() ;
+
+	FCK.Focus() ;
+	
+	FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCKStyleCommand.prototype.GetState = function()
+{
+	var oSelection = FCK.EditorDocument.selection ;
+	
+	if ( FCKSelection.GetType() == 'Control' )
+	{
+		var e = FCKSelection.GetSelectedElement() ;
+		if ( e )
+			return this.StylesLoader.StyleGroups[ e.tagName ] ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+	}
+
+	return FCK_TRISTATE_OFF ;
+}
+
+FCKStyleCommand.prototype.GetActiveStyles = function()
+{
+	var aActiveStyles = new Array() ;
+	
+	if ( FCKSelection.GetType() == 'Control' )
+		this._CheckStyle( FCKSelection.GetSelectedElement(), aActiveStyles, false ) ;
+	else
+		this._CheckStyle( FCKSelection.GetParentElement(), aActiveStyles, true ) ;
+		
+	return aActiveStyles ;
+}
+
+FCKStyleCommand.prototype._CheckStyle = function( element, targetArray, checkParent )
+{
+	if ( ! element )
+		return ;
+
+	if ( element.nodeType == 1 )
+	{
+		var aStyleGroup = this.StylesLoader.StyleGroups[ element.tagName ] ;
+		if ( aStyleGroup )
+		{
+			for ( var i = 0 ; i < aStyleGroup.length ; i++ )
+			{
+				if ( aStyleGroup[i].IsEqual( element ) )
+					targetArray[ targetArray.length ] = aStyleGroup[i] ;
+			}		
+		}
+	}
+	
+	if ( checkParent )
+		this._CheckStyle( element.parentNode, targetArray, checkParent ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fcktablecommand.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fcktablecommand.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fcktablecommand.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fcktablecommand.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,64 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktablecommand.js
+ * 	FCKPastePlainTextCommand Class: represents the 
+ * 	"Paste as Plain Text" command.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKTableCommand = function( command )
+{
+	this.Name = command ;
+}
+
+FCKTableCommand.prototype.Execute = function()
+{
+	FCKUndo.SaveUndoStep() ;
+	
+	switch ( this.Name )
+	{
+		case 'TableInsertRow' :
+			FCKTableHandler.InsertRow() ;
+			break ;
+		case 'TableDeleteRows' :
+			FCKTableHandler.DeleteRows() ;
+			break ;
+		case 'TableInsertColumn' :
+			FCKTableHandler.InsertColumn() ;
+			break ;
+		case 'TableDeleteColumns' :
+			FCKTableHandler.DeleteColumns() ;
+			break ;
+		case 'TableInsertCell' :
+			FCKTableHandler.InsertCell() ;
+			break ;
+		case 'TableDeleteCells' :
+			FCKTableHandler.DeleteCells() ;
+			break ;
+		case 'TableMergeCells' :
+			FCKTableHandler.MergeCells() ;
+			break ;
+		case 'TableSplitCell' :
+			FCKTableHandler.SplitCell() ;
+			break ;
+		default :
+			alert( FCKLang.UnknownCommand.replace( /%1/g, this.Name ) ) ;
+	}
+}
+
+FCKTableCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js
--- 1.3.11sr1/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,177 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktextcolorcommand.js
+ * 	FCKTextColorCommand Class: represents the text color comand. It shows the
+ * 	color selection panel.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// FCKTextColorCommand Contructor
+//		type: can be 'ForeColor' or 'BackColor'.
+var FCKTextColorCommand = function( type )
+{
+	this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ;
+	this.Type = type ;
+
+	/*	BEGIN ###
+		The panel should be created in the "Execute" method for best
+		memory use, but it not works in Gecko in that way.
+	*/
+
+	this._Panel = new FCKPanel() ;
+	this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
+	this._Panel.Create() ;
+
+	this._CreatePanelBody( this._Panel.Document, this._Panel.PanelDiv ) ;
+	
+	//	END ###
+}
+
+FCKTextColorCommand.prototype.Execute = function( panelX, panelY, relElement )
+{
+	/*
+		BEGIN ###
+		This is the right code to create the panel, but it is not
+		working well with Gecko, so it has been moved to the 
+		class contructor.
+	
+	// Create the Color Panel if needed.
+	if ( ! this._Panel )
+	{
+		this._Panel = new FCKPanel() ;
+		this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
+		this._Panel.Create() ;
+
+		this._CreatePanelBody( this._Panel.Document, this._Panel.PanelDiv ) ;
+	}
+		END ###
+	*/
+
+	// We must "cache" the actual panel type to be used in the SetColor method.
+	FCK._ActiveColorPanelType = this.Type ;
+
+	// Show the Color Panel at the desired position.
+	this._Panel.Show( panelX, panelY, relElement ) ;
+}
+
+FCKTextColorCommand.prototype.SetColor = function( color )
+{
+	if ( FCK._ActiveColorPanelType == 'ForeColor' )
+		FCK.ExecuteNamedCommand( 'ForeColor', color ) ;
+	else if ( FCKBrowserInfo.IsGecko )
+		FCK.ExecuteNamedCommand( 'hilitecolor', color ) ;
+	else
+		FCK.ExecuteNamedCommand( 'BackColor', color ) ;
+	
+	// Delete the "cached" active panel type.
+	delete FCK._ActiveColorPanelType ;
+}
+
+FCKTextColorCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+function FCKTextColorCommand_OnMouseOver()	{ this.className='ColorSelected' ; }
+
+function FCKTextColorCommand_OnMouseOut()	{ this.className='ColorDeselected' ; }
+
+function FCKTextColorCommand_OnClick()
+{
+	this.className = 'ColorDeselected' ;
+	this.Command.SetColor( '#' + this.Color ) ;
+	this.Command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_AutoOnClick()
+{
+	this.className = 'ColorDeselected' ;
+	this.Command.SetColor( '' ) ;
+	this.Command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_MoreOnClick()
+{
+	this.className = 'ColorDeselected' ;
+	this.Command._Panel.Hide() ;
+	FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, this.Command.SetColor ) ;
+}
+
+FCKTextColorCommand.prototype._CreatePanelBody = function( targetDocument, targetDiv )
+{
+	function CreateSelectionDiv()
+	{
+		var oDiv = targetDocument.createElement( "DIV" ) ;
+		oDiv.className		= 'ColorDeselected' ;
+		oDiv.onmouseover	= FCKTextColorCommand_OnMouseOver ;
+		oDiv.onmouseout		= FCKTextColorCommand_OnMouseOut ;
+		
+		return oDiv ;
+	}
+
+	// Create the Table that will hold all colors.
+	var oTable = targetDiv.appendChild( targetDocument.createElement( "TABLE" ) ) ;
+	oTable.style.tableLayout = 'fixed' ;
+	oTable.cellPadding = 0 ;
+	oTable.cellSpacing = 0 ;
+	oTable.border = 0 ;
+	oTable.width = 150 ;
+
+	var oCell = oTable.insertRow(-1).insertCell(-1) ;
+	oCell.colSpan = 8 ;
+
+	// Create the Button for the "Automatic" color selection.
+	var oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+	oDiv.innerHTML = 
+		'<table cellspacing="0" cellpadding="0" width="100%" border="0">\
+			<tr>\
+				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\
+				<td nowrap width="100%" align="center" unselectable="on">' + FCKLang.ColorAutomatic + '</td>\
+			</tr>\
+		</table>' ;
+
+	oDiv.Command = this ;
+	oDiv.onclick = FCKTextColorCommand_AutoOnClick ;
+
+	// Create an array of colors based on the configuration file.
+	var aColors = FCKConfig.FontColors.toString().split(',') ;
+
+	// Create the colors table based on the array.
+	var iCounter = 0 ;
+	while ( iCounter < aColors.length )
+	{
+		var oRow = oTable.insertRow(-1) ;
+		
+		for ( var i = 0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++ )
+		{
+			oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ;
+			oDiv.Color = aColors[iCounter] ;
+			oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>' ;
+
+			oDiv.Command = this ;
+			oDiv.onclick = FCKTextColorCommand_OnClick ;
+		}
+	}
+
+	// Create the Row and the Cell for the "More Colors..." button.
+	oCell = oTable.insertRow(-1).insertCell(-1) ;
+	oCell.colSpan = 8 ;
+
+	oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+	oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ;
+
+	oDiv.Command = this ;
+	oDiv.onclick = FCKTextColorCommand_MoreOnClick ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/globals/fck_constants.js 1.4.0sr5-1/fckeditor/editor/_source/globals/fck_constants.js
--- 1.3.11sr1/fckeditor/editor/_source/globals/fck_constants.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/globals/fck_constants.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,41 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_constants.js
+ * 	Defines some constants used by the editor. These constants are also 
+ * 	globally available in the page where the editor is placed.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Editor Instance Status.
+var FCK_STATUS_NOTLOADED	= window.parent.FCK_STATUS_NOTLOADED	= 0 ;
+var FCK_STATUS_ACTIVE		= window.parent.FCK_STATUS_ACTIVE		= 1 ;
+var FCK_STATUS_COMPLETE		= window.parent.FCK_STATUS_COMPLETE		= 2 ;
+
+// Tristate Operations.
+var FCK_TRISTATE_OFF		= window.parent.FCK_TRISTATE_OFF		= 0 ;
+var FCK_TRISTATE_ON			= window.parent.FCK_TRISTATE_ON			= 1 ;
+var FCK_TRISTATE_DISABLED	= window.parent.FCK_TRISTATE_DISABLED	= -1 ;
+
+// For unknown values.
+var FCK_UNKNOWN				= window.parent.FCK_UNKNOWN				= -1000 ;
+
+// Toolbar Items Style.
+var FCK_TOOLBARITEM_ONLYICON	= window.parent.FCK_TOOLBARITEM_ONLYICON	= 0 ;
+var FCK_TOOLBARITEM_ONLYTEXT	= window.parent.FCK_TOOLBARITEM_ONLYTEXT	= 1 ;
+var FCK_TOOLBARITEM_ICONTEXT	= window.parent.FCK_TOOLBARITEM_ICONTEXT	= 2 ;
+
+// Edit Mode
+var FCK_EDITMODE_WYSIWYG	= window.parent.FCK_EDITMODE_WYSIWYG	= 0 ;
+var FCK_EDITMODE_SOURCE		= window.parent.FCK_EDITMODE_SOURCE		= 1 ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/globals/fckeditorapi.js 1.4.0sr5-1/fckeditor/editor/_source/globals/fckeditorapi.js
--- 1.3.11sr1/fckeditor/editor/_source/globals/fckeditorapi.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/globals/fckeditorapi.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,45 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckeditorapi.js
+ * 	Create the FCKeditorAPI object that is available as a global object in
+ * 	the page where the editor is placed in.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKeditorAPI ;
+
+function FCKeditorAPI_GetInstance( instanceName )
+{
+	return this.__Instances[ instanceName ] ;
+}
+
+if ( !window.parent.FCKeditorAPI )
+{
+	// Make the FCKeditorAPI object available in the parent window.
+	FCKeditorAPI = window.parent.FCKeditorAPI = new Object() ;
+	FCKeditorAPI.__Instances = new Object() ;
+
+	// Set the current version.
+	FCKeditorAPI.Version = '2.1.1' ;
+
+	// Function used to get a instance of an existing editor present in the 
+	// page.
+	FCKeditorAPI.GetInstance = FCKeditorAPI_GetInstance ;
+}
+else
+	FCKeditorAPI = window.parent.FCKeditorAPI ;
+
+// Add the current instance to the FCKeditorAPI's instances collection.
+FCKeditorAPI.__Instances[ FCK.Name ] = FCK ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_1_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_1_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_1_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_1_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,273 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_1_gecko.js
+ * 	This is the first part of the "FCK" object creation. This is the main
+ * 	object that represents an editor instance.
+ * 	(Gecko specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCK.Description = "FCKeditor for Gecko Browsers" ;
+
+FCK.InitializeBehaviors = function()
+{
+	// Enable table borders visibility.
+	if ( FCKConfig.ShowBorders ) 
+	{
+		var oStyle = FCKTools.AppendStyleSheet( this.EditorDocument, FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css' ) ;
+		oStyle.setAttribute( '_fcktemp', 'true' ) ;
+	}
+
+	// Disable Right-Click
+	var oOnContextMenu = function( e )
+	{
+		e.preventDefault() ;
+		FCK.ShowContextMenu( e.clientX, e.clientY ) ;
+	}
+	this.EditorDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
+
+	// Handle pasting operations.
+	var oOnKeyDown = function( e )
+	{
+		// FCKDebug.Output( 'Which Key: ' +  e.which ) ;
+
+		// START iCM Modifications
+		/*
+		// Need to amend carriage return key handling so inserts block element tags rather than BR all the time
+		if ( e.which == 13 && !e.shiftKey && !e.ctrlKey && !e.altKey && !FCKConfig.UseBROnCarriageReturn && !FCK.Events.FireEvent( "OnEnter" ) )
+		{
+			e.preventDefault() ;
+			e.stopPropagation() ;
+		}
+		// Amend backspace handling so correctly removes empty block elements i.e. those block elements containing nothing or
+		// just the bogus BR node
+		if ( e.which == 8 && !e.shiftKey && !e.ctrlKey && !e.altKey && !FCKConfig.UserBROnCarriageReturn && !FCK.Events.FireEvent( "OnBackSpace" ) )
+		{
+			e.preventDefault() ;
+			e.stopPropagation() ;
+		}
+		*/
+		// END iCM Modifications
+
+		if ( e.ctrlKey && !e.shiftKey && !e.altKey )
+		{
+			var bPrevent = false ;
+			
+			switch ( e.which ) 
+			{
+				case 66 :	// B
+				case 98 :	// b
+					FCK.ExecuteNamedCommand( 'bold' ) ; bPrevent = true ;
+					break;
+				case 105 :	// i
+				case 73 :	// I
+					FCK.ExecuteNamedCommand( 'italic' ) ; bPrevent = true ;
+					break;
+				case 117 :	// u
+				case 85 :	// U
+					FCK.ExecuteNamedCommand( 'underline' ) ; bPrevent = true ;
+					break;
+				case 86 :	// V
+				case 118 :	// v
+					bPrevent = ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( "OnPaste" ) ) ;
+					break ;
+			}
+	
+			if ( bPrevent ) 
+			{
+				e.preventDefault() ;
+				e.stopPropagation() ;
+			}
+		}
+	}
+	this.EditorDocument.addEventListener( 'keypress', oOnKeyDown, true ) ;
+
+	this.ExecOnSelectionChange = function()
+	{
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+
+	this.ExecOnSelectionChangeTimer = function()
+	{
+		if ( FCK.LastOnChangeTimer )
+			window.clearTimeout( FCK.LastOnChangeTimer ) ;
+
+		FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
+	}
+
+	this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;
+
+	// On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
+	// slow. So, a timer has been implemented to solve performance issues when tipying to quickly.
+	this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;
+
+	this._DblClickListener = function( e )
+	{
+		FCK.OnDoubleClick( e.target ) ;
+		e.stopPropagation() ;
+	}
+	this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;
+
+	this._OnLoad = function()
+	{
+		if ( this._FCK_HTML )
+		{
+			this.document.body.innerHTML = this._FCK_HTML ;
+			this._FCK_HTML = null ;
+		}
+	}
+	this.EditorWindow.addEventListener( 'load', this._OnLoad, true ) ;
+
+//	var oEditorWindow_OnUnload = function()
+//	{
+//		FCK.EditorWindow.location = 'fckblank.html' ;
+//	}
+//	this.EditorWindow.addEventListener( 'unload', oEditorWindow_OnUnload, true ) ;
+
+//	var oEditorWindow_OnFocus = function()
+//	{
+//		FCK.MakeEditable() ;
+//	}
+//	this.EditorWindow.addEventListener( 'focus', oEditorWindow_OnFocus, true ) ;
+}
+
+FCK.MakeEditable = function()
+{
+	try 
+	{
+		FCK.EditorDocument.designMode = 'on' ;
+
+		// Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
+		FCK.EditorDocument.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ;
+	}
+	catch (e) {}
+}
+
+FCK.Focus = function()
+{
+	try
+	{
+//		window.focus() ;
+		FCK.EditorWindow.focus() ;
+	}
+	catch(e) {}
+}
+
+FCK.SetHTML = function( html, forceWYSIWYG )
+{
+	// Firefox can't handle correctly the editing of the STRONG and EM tags. 
+	// We must replace them with B and I.
+	html = html.replace( FCKRegexLib.StrongOpener, '<b$1' ) ;
+	html = html.replace( FCKRegexLib.StrongCloser, '<\/b>' ) ;
+	html = html.replace( FCKRegexLib.EmOpener, '<i$1' ) ;
+	html = html.replace( FCKRegexLib.EmCloser, '<\/i>' ) ;
+
+	if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		html = FCKConfig.ProtectedSource.Protect( html ) ;
+
+		// Gecko has a lot of bugs mainly when handling editing features.
+		// To avoid an Aplication Exception (that closes the browser!) we
+		// must first write the <HTML> contents with an empty body, and
+		// then insert the body contents.
+		// (Oh yes... it took me a lot of time to find out this workaround)
+
+		if ( FCKConfig.FullPage && FCKRegexLib.BodyContents.test( html ) )
+		{
+			// Add the <BASE> tag to the input HTML.
+			if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( html ) )
+				html = html.replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
+
+			html = html.replace( FCKRegexLib.HeadCloser, '<link href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" /></head>' ) ;
+
+			// Extract the BODY contents from the html.
+			var oMatch		= html.match( FCKRegexLib.BodyContents ) ;
+			var sOpener		= oMatch[1] ;	// This is the HTML until the <body...> tag, inclusive.
+			var sContents	= oMatch[2] ;	// This is the BODY tag contents.
+			var sCloser		= oMatch[3] ;	// This is the HTML from the </body> tag, inclusive.
+
+			var sHtml = sOpener + '&nbsp;' + sCloser ;
+
+			if ( !this._Initialized )
+			{
+				FCK.EditorDocument.designMode = "on" ;
+
+				// Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
+				FCK.EditorDocument.execCommand( "useCSS", false, !FCKConfig.GeckoUseSPAN ) ;
+
+				this._Initialized = true ;
+			}
+
+			this.EditorDocument.open() ;
+			this.EditorDocument.write( sHtml ) ;
+			this.EditorDocument.close() ;
+
+			if ( this.EditorDocument.body )
+				this.EditorDocument.body.innerHTML = sContents ;
+			else
+				this.EditorWindow._FCK_HTML = sContents ;
+
+			this.InitializeBehaviors() ;
+		}
+		else
+		{
+			/* TODO: Wait stable and remove it.
+			sHtml =
+				'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' +
+				'<html dir="' + FCKConfig.ContentLangDirection + '">' +
+				'<head><title></title>' +
+				'<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' +
+				'<link href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
+
+			sHtml += FCK.TempBaseTag ;
+
+			sHtml += '</head><body>&nbsp;</body></html>' ;
+			*/
+
+			if ( !this._Initialized )
+			{
+				this.EditorDocument.dir = FCKConfig.ContentLangDirection ;
+
+				var sHtml =
+					'<title></title>' +
+					'<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' +
+					'<link href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' +
+					FCK.TempBaseTag ;
+
+				this.EditorDocument.getElementsByTagName("HEAD")[0].innerHTML = sHtml ;
+
+				this.InitializeBehaviors() ;
+
+				this._Initialized = true ;
+			}
+
+			// On Gecko we must disable editing before setting the BODY innerHTML.
+//			FCK.EditorDocument.designMode = 'off' ;
+
+			if ( html.length == 0 )
+				FCK.EditorDocument.body.innerHTML = GECKO_BOGUS ;
+			else if ( FCKRegexLib.EmptyParagraph.test( html ) )
+				FCK.EditorDocument.body.innerHTML = html.replace( FCKRegexLib.TagBody, '>' + GECKO_BOGUS + '<' ) ;
+			else
+				FCK.EditorDocument.body.innerHTML = html ;
+			
+			FCK.MakeEditable() ;
+		}
+
+		FCK.OnAfterSetHTML() ;
+	}
+	else
+		document.getElementById('eSourceField').value = html ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_1_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_1_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_1_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_1_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,278 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_1_ie.js
+ * 	This is the first part of the "FCK" object creation. This is the main
+ * 	object that represents an editor instance.
+ * 	(IE specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
+
+// The behaviors should be pointed using the FullBasePath to avoid security
+// errors when using a differente BaseHref.
+FCK._BehaviorsStyle =
+	'<style type="text/css" _fcktemp="true"> \
+		INPUT { behavior: url(' + FCKConfig.FullBasePath + 'css/behaviors/hiddenfield.htc) ; } ' ;
+
+if ( FCKConfig.ShowBorders )
+	FCK._BehaviorsStyle += 'TABLE { behavior: url(' + FCKConfig.FullBasePath + 'css/behaviors/showtableborders.htc) ; }' ;
+
+// Disable resize handlers.
+var sNoHandlers = 'INPUT, TEXTAREA, SELECT, .FCK__Anchor, .FCK__PageBreak' ;
+
+if ( FCKConfig.DisableImageHandles )
+	sNoHandlers += ', IMG' ;
+
+if ( FCKConfig.DisableTableHandles )
+	sNoHandlers += ', TABLE' ;
+
+FCK._BehaviorsStyle += sNoHandlers + ' { behavior: url(' + FCKConfig.FullBasePath + 'css/behaviors/disablehandles.htc) ; }' ;
+
+FCK._BehaviorsStyle += '</style>' ;
+
+function Doc_OnMouseUp()
+{
+	if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
+	{
+		FCK.Focus() ;
+		FCK.EditorWindow.event.cancelBubble	= true ;
+		FCK.EditorWindow.event.returnValue	= false ;
+	}
+}
+
+function Doc_OnPaste()
+{
+	if ( FCK.Status == FCK_STATUS_COMPLETE )
+		return FCK.Events.FireEvent( "OnPaste" ) ;
+	else
+		return false ;
+}
+
+function Doc_OnContextMenu()
+{
+	var e = FCK.EditorWindow.event ;
+	
+	FCK.ShowContextMenu( e.screenX, e.screenY ) ;
+	return false ;
+}
+
+function Doc_OnKeyDown()
+{
+	var e = FCK.EditorWindow.event ;
+
+//	FCKDebug.Output( 'KeyCode: ' + e.keyCode ) ;
+
+	switch ( e.keyCode )
+	{
+		case 13 :	// ENTER
+			if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) )
+			{
+				Doc_OnKeyDownUndo() ;
+				
+				// We must ignore it if we are inside a List.
+				if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) )
+					return true ;
+
+				// Insert the <BR> (The &nbsp; must be also inserted to make it work)
+				FCK.InsertHtml( '<br>&nbsp;' ) ;
+
+				// Remove the &nbsp;
+				var oRange = FCK.EditorDocument.selection.createRange() ;
+				oRange.moveStart( 'character', -1 ) ;
+				oRange.select() ;
+				FCK.EditorDocument.selection.clear() ;
+
+				return false ;
+			}
+			break ;
+			
+		case 9 :	// TAB
+			if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) )
+			{
+				Doc_OnKeyDownUndo() ;
+				
+				FCK.InsertHtml( window.FCKTabHTML ) ;
+				return false ;
+			}
+			break ;
+		case 90 :	// Z
+			if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
+			{
+				FCKUndo.Undo() ;
+				return false ;
+			}
+			break ;
+		case 89 :	// Y
+			if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
+			{
+				FCKUndo.Redo() ;
+				return false ;
+			}
+			break ;
+	}
+	
+	if ( !( e.keyCode >=16 && e.keyCode <= 18 ) )
+		Doc_OnKeyDownUndo() ;
+	return true ;
+}
+
+function Doc_OnKeyDownUndo()
+{
+	if ( !FCKUndo.Typing )
+	{
+		FCKUndo.SaveUndoStep() ;
+		FCKUndo.Typing = true ;
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+	
+	FCKUndo.TypesCount++ ;
+
+	if ( FCKUndo.TypesCount > FCKUndo.MaxTypes )
+	{
+		FCKUndo.TypesCount = 0 ;
+		FCKUndo.SaveUndoStep() ;
+	}
+}
+
+function Doc_OnDblClick()
+{
+	FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
+	FCK.EditorWindow.event.cancelBubble = true ;
+}
+
+function Doc_OnSelectionChange()
+{
+	FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.InitializeBehaviors = function( dontReturn )
+{
+	// Set the focus to the editable area when clicking in the document area.
+	// TODO: The cursor must be positioned at the end.
+	this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
+
+	// Intercept pasting operations
+	this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+
+	// Disable Right-Click and shows the context menu.
+	this.EditorDocument.attachEvent('oncontextmenu', Doc_OnContextMenu ) ;
+
+	// Build the "TAB" key replacement (if necessary).
+	if ( FCKConfig.TabSpaces > 0 )
+	{
+		window.FCKTabHTML = '' ;
+		for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ )
+			window.FCKTabHTML += "&nbsp;" ;
+	}
+	this.EditorDocument.attachEvent("onkeydown", Doc_OnKeyDown ) ;
+
+	this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
+
+	// Catch cursor movements
+	this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
+
+	//Enable editing
+//	this.EditorDocument.body.contentEditable = true ;
+}
+
+FCK.Focus = function()
+{
+	try
+	{
+		if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+			FCK.EditorDocument.body.focus() ;
+		else
+			document.getElementById('eSourceField').focus() ;
+	}
+	catch(e) {}
+}
+
+FCK.SetHTML = function( html, forceWYSIWYG )
+{
+	if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		html = FCKConfig.ProtectedSource.Protect( html ) ;
+
+		var sHtml ;
+
+		if ( FCKConfig.FullPage )
+		{
+			var sHtml =
+				FCK._BehaviorsStyle +
+				'<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
+
+			if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( html ) )
+				sHtml += FCK.TempBaseTag ;
+
+			sHtml = html.replace( FCKRegexLib.HeadOpener, '$&' + sHtml ) ;
+		}
+		else
+		{
+			sHtml =
+				FCKConfig.DocType +
+				'<html dir="' + FCKConfig.ContentLangDirection + '"' ;
+			
+			if ( FCKConfig.IEForceVScroll )
+				sHtml += ' style="overflow-y: scroll"' ;
+			
+			sHtml +=
+				'><head><title></title>' +
+				'<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' +
+				'<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
+
+			sHtml += FCK._BehaviorsStyle ;
+			sHtml += FCK.TempBaseTag ;
+			sHtml += '</head><body>' + html  + '</body></html>' ;
+		}
+
+		this.EditorDocument.open( '', '_self', '', true ) ;
+		this.EditorDocument.write( sHtml ) ;
+		this.EditorDocument.close() ;
+
+		this.InitializeBehaviors() ;
+		this.EditorDocument.body.contentEditable = true ;
+
+		FCK.OnAfterSetHTML() ;
+	}
+	else
+		document.getElementById('eSourceField').value = html ;
+}
+
+FCK.InsertHtml = function( html )
+{
+	FCK.Focus() ;
+
+	FCKUndo.SaveUndoStep() ;
+
+	// Gets the actual selection.
+	var oSel = FCK.EditorDocument.selection ;
+
+	// Deletes the actual selection contents.
+	if ( oSel.type.toLowerCase() != "none" )
+		oSel.clear() ;
+
+	// Inset the HTML.
+	oSel.createRange().pasteHTML( html ) ;
+}
+
+FCK.SetInnerHtml = function( html )		// IE Only
+{
+	var oDoc = FCK.EditorDocument ;
+	// Using the following trick, any comment in the begining of the HTML will
+	// be preserved.
+	oDoc.body.innerHTML = '<div id="__fakeFCKRemove__">&nbsp;</div>' + html ;
+	oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_1.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_1.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_1.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_1.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,409 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_1.js
+ * 	This is the first part of the "FCK" object creation. This is the main
+ * 	object that represents an editor instance.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCK.Events	= new FCKEvents( FCK ) ;
+FCK.Toolbar	= null ;
+
+FCK.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' + FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ;
+
+FCK.StartEditor = function()
+{
+	// Get the editor's window and document (DOM)
+	this.EditorWindow	= window.frames[ 'eEditorArea' ] ;
+	this.EditorDocument	= this.EditorWindow.document ;
+
+	// TODO: Wait stable version and remove the following commented lines.
+	// The Base Path of the editor is saved to rebuild relative URL (IE issue).
+//	this.BaseUrl = this.EditorDocument.location.protocol + '//' + this.EditorDocument.location.host ;
+
+//	if ( FCKBrowserInfo.IsGecko )
+//		this.MakeEditable() ;
+
+	// Set the editor's startup contents
+	this.SetHTML( FCKTools.GetLinkedFieldValue() ) ;
+
+	// Attach the editor to the form onsubmit event
+	FCKTools.AttachToLinkedFieldFormSubmit( this.UpdateLinkedField ) ;
+
+	FCKUndo.SaveUndoStep() ;
+
+	this.SetStatus( FCK_STATUS_ACTIVE ) ;
+}
+
+function Window_OnFocus()
+{
+	FCK.Focus() ;
+}
+
+FCK.SetStatus = function( newStatus )
+{
+	this.Status = newStatus ;
+
+	if ( newStatus == FCK_STATUS_ACTIVE )
+	{
+		// Force the focus in the window to go to the editor.
+		window.onfocus = window.document.body.onfocus = Window_OnFocus ;
+
+		// Force the focus in the editor.
+		if ( FCKConfig.StartupFocus )
+			FCK.Focus() ;
+
+		// @Packager.Compactor.Remove.Start
+		var sBrowserSuffix = FCKBrowserInfo.IsIE ? "ie" : "gecko" ;
+
+		FCKScriptLoader.AddScript( '_source/internals/fck_2.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fck_2_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckselection.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckselection_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckpanel_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fcktablehandler.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fcktablehandler_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckxml_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckstyledef.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckstyledef_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckstylesloader.js' ) ;
+
+		FCKScriptLoader.AddScript( '_source/commandclasses/fcknamedcommand.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fck_othercommands.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fckspellcheckcommand_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fcktextcolorcommand.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fckpasteplaintextcommand.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fckpastewordcommand.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fcktablecommand.js' ) ;
+		FCKScriptLoader.AddScript( '_source/commandclasses/fckstylecommand.js' ) ;
+
+		FCKScriptLoader.AddScript( '_source/internals/fckcommands.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarbutton.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckspecialcombo.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarspecialcombo.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarfontscombo.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarfontsizecombo.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarstylecombo.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarpanelbutton.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fcktoolbaritems.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbar.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fcktoolbarbreak_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fcktoolbarset.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckdialog.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckdialog_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckcontextmenuitem.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckcontextmenuseparator.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckcontextmenugroup.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckcontextmenu.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckcontextmenu_' + sBrowserSuffix + '.js' ) ;
+		FCKScriptLoader.AddScript( '_source/classes/fckplugin.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fckplugins.js' ) ;
+		FCKScriptLoader.AddScript( '_source/internals/fck_last.js' ) ;
+		// @Packager.Compactor.Remove.End
+
+		/* @Packager.Compactor.RemoveLine
+
+		if ( FCKBrowserInfo.IsIE )
+			FCKScriptLoader.AddScript( 'js/fckeditorcode_ie_2.js' ) ;
+		else
+			FCKScriptLoader.AddScript( 'js/fckeditorcode_gecko_2.js' ) ;
+
+		@Packager.Compactor.RemoveLine */
+	}
+
+	this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
+}
+
+FCK.GetHTML = function( format )
+{
+	var sHTML ;
+
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		// TODO: Wait stable version and remove the following commented lines.
+//		if ( FCKBrowserInfo.IsIE )
+//			FCK.CheckRelativeLinks() ;
+
+		if ( FCKBrowserInfo.IsIE )
+			sHTML = this.EditorDocument.body.innerHTML.replace( FCKRegexLib.ToReplace, '$1' ) ;
+		else
+			sHTML = this.EditorDocument.body.innerHTML ;
+	}
+	else
+		sHTML = document.getElementById('eSourceField').value ;
+
+	if ( format )
+		return FCKCodeFormatter.Format( sHTML ) ;
+	else
+		return sHTML ;
+}
+
+FCK.GetXHTML = function( format )
+{
+	var bSource = ( FCK.EditMode == FCK_EDITMODE_SOURCE ) ;
+
+	if ( bSource )
+		this.SwitchEditMode() ;
+
+	// TODO: Wait stable version and remove the following commented lines.
+//	if ( FCKBrowserInfo.IsIE )
+//		FCK.CheckRelativeLinks() ;
+
+	var sXHTML ;
+	
+	if ( FCKConfig.FullPage )
+		sXHTML = FCKXHtml.GetXHTML( this.EditorDocument.getElementsByTagName( 'html' )[0], true, format ) ;
+	else
+	{
+		if ( FCKConfig.IgnoreEmptyParagraphValue && this.EditorDocument.body.innerHTML == '<P>&nbsp;</P>' )
+			sXHTML = '' ;
+		else
+			sXHTML = FCKXHtml.GetXHTML( this.EditorDocument.body, false, format ) ;
+	}
+
+	if ( bSource )
+		this.SwitchEditMode() ;
+
+	if ( FCKBrowserInfo.IsIE )
+		sXHTML = sXHTML.replace( FCKRegexLib.ToReplace, '$1' ) ;
+
+	if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+		sXHTML = FCK.DocTypeDeclaration + '\n' + sXHTML ;
+
+	if ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 )
+		sXHTML = FCK.XmlDeclaration + '\n' + sXHTML ;
+
+	return FCKConfig.ProtectedSource.Revert( sXHTML ) ;
+}
+
+FCK.UpdateLinkedField = function()
+{
+	if ( FCKConfig.EnableXHTML )
+		FCK.LinkedField.value = FCK.GetXHTML( FCKConfig.FormatOutput ) ;
+	else
+		FCK.LinkedField.value = FCK.GetHTML( FCKConfig.FormatOutput ) ;
+		
+	FCK.Events.FireEvent( 'OnAfterLinkedFieldUpdate' ) ;
+}
+
+FCK.ShowContextMenu = function( x, y )
+{
+	if ( this.Status != FCK_STATUS_COMPLETE )
+		return ;
+
+	FCKContextMenu.Show( x, y ) ;
+	this.Events.FireEvent( "OnContextMenu" ) ;
+}
+
+FCK.RegisteredDoubleClickHandlers = new Object() ;
+
+FCK.OnDoubleClick = function( element )
+{
+	var oHandler = FCK.RegisteredDoubleClickHandlers[ element.tagName ] ;
+	if ( oHandler )
+		oHandler( element ) ;
+}
+
+// Register objects that can handle double click operations.
+FCK.RegisterDoubleClickHandler = function( handlerFunction, tag )
+{
+	FCK.RegisteredDoubleClickHandlers[ tag.toUpperCase() ] = handlerFunction ;
+}
+
+FCK.OnAfterSetHTML = function()
+{
+	var oProcessor, i = 0 ;
+	while( ( oProcessor = FCKDocumentProcessors[i++] ) )
+		oProcessor.ProcessDocument( FCK.EditorDocument ) ;
+
+	this.Events.FireEvent( 'OnAfterSetHTML' ) ;
+}
+
+// Advanced document processors.
+
+var FCKDocumentProcessors = new Array() ;
+
+var FCKDocumentProcessors_CreateFakeImage = function( fakeClass, realElement )
+{
+	var oImg = FCK.EditorDocument.createElement( 'IMG' ) ;
+	oImg.className = fakeClass ;
+	oImg.src = FCKConfig.FullBasePath + 'images/spacer.gif' ;
+	oImg.setAttribute( '_fckfakelement', 'true', 0 ) ;
+	oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ;
+	return oImg ;
+}
+
+// Link Anchors
+var FCKAnchorsProcessor = new Object() ;
+FCKAnchorsProcessor.ProcessDocument = function( document )
+{
+	var aLinks = document.getElementsByTagName( 'A' ) ;
+
+	var oLink ;
+	var i = aLinks.length - 1 ;
+	while ( i >= 0 && ( oLink = aLinks[i--] ) )
+	{
+		// If it is anchor.
+		if ( oLink.name.length > 0 && ( !oLink.getAttribute('href') || oLink.getAttribute('href').length == 0 ) )
+		{
+			var oImg = FCKDocumentProcessors_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ;
+			oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+			
+			oLink.parentNode.insertBefore( oImg, oLink ) ;
+			oLink.parentNode.removeChild( oLink ) ;
+		}
+	}
+}
+
+FCKDocumentProcessors.addItem( FCKAnchorsProcessor ) ;
+
+// Page Breaks
+var FCKPageBreaksProcessor = new Object() ;
+FCKPageBreaksProcessor.ProcessDocument = function( document )
+{
+	var aCenters = document.getElementsByTagName( 'CENTER' ) ;
+
+	var oCenter ;
+	var i = aCenters.length - 1 ;
+	while ( i >= 0 && ( oCenter = aCenters[i--] ) )
+	{
+		if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.trim().length == 0 )
+		{
+			var oFakeImage = FCKDocumentProcessors_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ;
+			
+			oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ;
+			oCenter.parentNode.removeChild( oCenter ) ;
+		}
+	}
+}
+
+FCKDocumentProcessors.addItem( FCKPageBreaksProcessor ) ;
+
+// Flash Embeds.
+var FCKFlashProcessor = new Object() ;
+FCKFlashProcessor.ProcessDocument = function( document )
+{
+	/*
+	Sample code:
+	This is some <embed src="/UserFiles/Flash/Yellow_Runners.swf"></embed><strong>sample text</strong>. You are&nbsp;<a name="fred"></a> using <a href="http://www.fckeditor.net/">FCKeditor</a>.
+	*/
+
+	var aEmbeds = document.getElementsByTagName( 'EMBED' ) ;
+
+	var oEmbed ;
+	var i = aEmbeds.length - 1 ;
+	while ( i >= 0 && ( oEmbed = aEmbeds[i--] ) )
+	{
+		if ( oEmbed.src.endsWith( '.swf', true ) )
+		{
+			var oImg = FCKDocumentProcessors_CreateFakeImage( 'FCK__Flash', oEmbed.cloneNode(true) ) ;
+			oImg.setAttribute( '_fckflash', 'true', 0 ) ;
+			
+			FCKFlashProcessor.RefreshView( oImg, oEmbed ) ;
+
+			oEmbed.parentNode.insertBefore( oImg, oEmbed ) ;
+			oEmbed.parentNode.removeChild( oEmbed ) ;
+
+//			oEmbed.setAttribute( '_fckdelete', 'true', 0) ;
+//			oEmbed.style.display = 'none' ;
+//			oEmbed.hidden = true ;
+		}
+	}
+}
+
+FCKFlashProcessor.RefreshView = function( placholderImage, originalEmbed )
+{
+	if ( originalEmbed.width > 0 )
+		placholderImage.style.width = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.width ) ;
+		
+	if ( originalEmbed.height > 0 )
+		placholderImage.style.height = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.height ) ;
+}
+
+FCKDocumentProcessors.addItem( FCKFlashProcessor ) ;
+
+FCK.GetRealElement = function( fakeElement )
+{
+	var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ;
+
+	if ( fakeElement.getAttribute('_fckflash') )
+	{
+		if ( fakeElement.style.width.length > 0 )
+				e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ;
+		
+		if ( fakeElement.style.height.length > 0 )
+				e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ;
+	}
+	
+	return e ;
+}
+
+// START iCM MODIFICATIONS
+/*
+var FCKTablesProcessor = new Object() ;
+FCKTablesProcessor.ProcessDocument = function( document )
+{
+	FCKTablesProcessor.CheckTablesNesting( document ) ;
+}
+
+// Ensure that tables are not incorrectly nested within P, H1, H2, etc tags
+FCKTablesProcessor.CheckTablesNesting = function( document )
+{
+	var aTables = document.getElementsByTagName( "TABLE" ) ;
+	var oParentNode ;
+	
+	for ( var i=0; i<aTables.length; i++ )
+	{
+		FCKTablesProcessor.CheckTableNesting( aTables[i] ) ;
+	}
+}
+
+// Corrects nesting of the supplied table as necessary.
+// Also called by fck_table.html to check that a newly inserted table is correctly nested.
+FCKTablesProcessor.CheckTableNesting = function( oTableNode )
+{
+	var oParentBlockNode = FCKTools.GetParentBlockNode( oTableNode.parentNode ) ;
+	
+	if ( oParentBlockNode && !FCKRegexLib.TableBlockElements.test( oParentBlockNode.nodeName ) )
+	{
+		// Create a new tag which holds the content of the child nodes located before the table
+		var oNode1 = FCK.EditorDocument.createElement( oParentBlockNode.tagName ) ;
+		var oFragment1 = FCKTools.GetDocumentFragment( oParentBlockNode, oParentBlockNode.firstChild, oTableNode, true, false, true ) ;
+		oNode1.appendChild( oFragment1 ) ;
+		FCKTools.SetElementAttributes( oNode1, oParentBlockNode.attributes ) ; 	// Transfer across any class attributes, etc
+	
+		// Create a new tag which holds the content of the child nodes located after the table
+		var oNode2 = FCK.EditorDocument.createElement( oParentBlockNode.tagName );
+		var oFragment2 = FCKTools.GetDocumentFragment( oParentBlockNode, oTableNode, oParentBlockNode.lastChild, false, true, true ) ;
+		oNode2.appendChild( oFragment2 ) ;
+		FCKTools.SetElementAttributes( oNode2, oParentBlockNode.attributes ) ; 	// Transfer across any class attributes, etc
+		
+		// Create a document fragment that contains the two new elements with the table element inbetween
+		var oNewNode = FCK.EditorDocument.createDocumentFragment() ;
+		if ( !FCKTools.NodeIsEmpty( oNode1 ) )
+			oNewNode.appendChild( oNode1 ) ;
+		oNewNode.appendChild( oTableNode ) ;
+		if ( !FCKTools.NodeIsEmpty( oNode2 ) )
+			oNewNode.appendChild( oNode2 ) ; 
+		
+		// Replace the existing parent node with the nodes in the fragment
+		oParentBlockNode.parentNode.replaceChild( oNewNode, oParentBlockNode ) ;
+	}
+}		
+
+FCKDocumentProcessors.addItem( FCKTablesProcessor ) ;
+*/
+// END iCM MODIFICATIONS
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_2_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_2_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_2_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_2_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,469 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_2_gecko.js
+ * 	This is the second part of the "FCK" object creation. This is the main
+ * 	object that represents an editor instance.
+ * 	(Gecko specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// GetNamedCommandState overload for Gecko.
+FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
+FCK.GetNamedCommandState = function( commandName )
+{
+	switch ( commandName )
+	{
+		case 'Unlink' :
+			return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+		default :
+			return FCK._BaseGetNamedCommandState( commandName ) ;
+	}
+}
+
+// Named commands to be handled by this browsers specific implementation.
+FCK.RedirectNamedCommands = 
+{
+	Print	: true,
+	Paste	: true,
+	Cut		: true,
+	Copy	: true
+	// START iCM MODIFICATIONS
+	// Include list functions so we can ensure content is wrapped
+	// with P tags if not using BRs on carriage return, etc
+	/*
+	InsertOrderedList	: true,
+	InsertUnorderedList	: true
+	*/
+	// END iCM MODIFICATIONS
+}
+
+// ExecuteNamedCommand overload for Gecko.
+FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
+{
+	switch ( commandName )
+	{
+		case 'Print' :
+			FCK.EditorWindow.print() ;
+			break ;
+		case 'Paste' :
+			try			{ if ( FCK.Paste() ) FCK.ExecuteNamedCommand( 'Paste' ) ; }
+			catch (e)	{ alert( FCKLang.PasteErrorPaste ) ; }
+			break ;
+		case 'Cut' :
+			try			{ FCK.ExecuteNamedCommand( 'Cut' ) ; }
+			catch (e)	{ alert( FCKLang.PasteErrorCut ) ; }
+			break ;
+		case 'Copy' :
+			try			{ FCK.ExecuteNamedCommand( 'Copy' ) ; }
+			catch (e)	{ alert( FCKLang.PasteErrorCopy ) ; }
+			break ;
+			
+		// START iCM MODIFICATIONS
+		/*
+		case 'InsertOrderedList'   :
+		case 'InsertUnorderedList' :
+		
+			if ( !FCKConfig.UseBROnCarriageReturn && FCK.EditorDocument.queryCommandState( commandName ) )
+			{
+				// We're in a list item which is in the same type of list as the toolbar button clicked
+				// Therefore, move the selected list item out of the list as is done on an ENTER key within
+				// an empty list item.
+				var oSel = FCK.EditorWindow.getSelection() ;
+				var oSelNode = oSel.focusNode ;
+				var oLINode = FCKTools.GetElementAscensor( oSelNode, "LI" ) ;
+				FCK.ToggleListItem( oLINode, oSelNode ) ;
+			}
+			else
+			{
+				// Let the default handler do its stuff
+				FCK.Focus() ;
+				FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ; 
+			}
+			
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+			break ;
+		*/
+		// END iCM MODIFICATIONS
+			
+		default :
+			FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
+	}
+}
+
+FCK.AttachToOnSelectionChange = function( functionPointer )
+{
+	this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
+}
+
+FCK.Paste = function()
+{
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		FCK.PasteAsPlainText() ;	
+		return false ;
+	}
+/* For now, the AutoDetectPasteFromWord feature is IE only.
+	else if ( FCKConfig.AutoDetectPasteFromWord )
+	{
+		var sHTML = FCK.GetClipboardHTML() ;
+		var re = /<\w[^>]* class="?MsoNormal"?/gi ;
+		if ( re.test( sHTML ) )
+		{
+			if ( confirm( FCKLang["PasteWordConfirm"] ) )
+			{
+				FCK.PasteFromWord() ;
+				return false ;
+			}
+		}
+	}
+*/
+	else
+		return true ;
+}
+
+//**
+// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
+// selected content if any.
+FCK.InsertHtml = function( html )
+{
+	// Delete the actual selection.
+	var oSel = FCKSelection.Delete() ;
+	
+//	var oContainer	= oSel.getRangeAt(0).startContainer ;
+//	var iOffSet		= oSel.getRangeAt(0).startOffset ;
+	
+	// Get the first available range.
+	var oRange = oSel.getRangeAt(0) ;
+	
+//	var oRange = this.EditorDocument.createRange() ;
+//	oRange.setStart( oContainer, iOffSet ) ;
+//	oRange.setEnd( oContainer, iOffSet ) ;
+	
+	// Create a fragment with the input HTML.
+	var oFragment = oRange.createContextualFragment( html ) ;
+	
+	// Get the last available node.
+	var oLastNode = oFragment.lastChild ;
+
+	// Insert the fragment in the range.
+	oRange.insertNode(oFragment) ;
+	
+	// Set the cursor after the inserted fragment.
+	oRange.setEndAfter( oLastNode ) ;
+	oRange.setStartAfter( oLastNode ) ;
+	
+	oSel.removeAllRanges() ;
+	oSel = FCK.EditorWindow.getSelection() ;
+	oSel.addRange( oRange ) ;
+		
+	this.Focus() ;
+}
+
+FCK.InsertElement = function( element )
+{
+	// Deletes the actual selection.
+	var oSel = FCKSelection.Delete() ;
+	
+	// Gets the first available range.
+	var oRange = oSel.getRangeAt(0) ;
+	
+	// Inserts the element in the range.
+	oRange.insertNode( element ) ;
+	
+	// Set the cursor after the inserted fragment.
+	oRange.setEndAfter( element ) ;
+	oRange.setStartAfter( element ) ;
+
+	this.Focus() ;
+}
+
+FCK.PasteAsPlainText = function()
+{
+	// TODO: Implement the "Paste as Plain Text" code.
+	
+	FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
+	
+/*
+	var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
+	sText = sText.replace( /\n/g, '<BR>' ) ;
+	this.InsertHtml( sText ) ;	
+*/
+}
+/*
+FCK.PasteFromWord = function()
+{
+	// TODO: Implement the "Paste as Plain Text" code.
+	
+	FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+
+//	FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
+}
+*/
+FCK.GetClipboardHTML = function()
+{
+	return '' ;
+}
+
+FCK.CreateLink = function( url )
+{	
+	FCK.ExecuteNamedCommand( 'Unlink' ) ;
+	
+	if ( url.length > 0 )
+	{
+		// Generate a temporary name for the link.
+		var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+		
+		// Use the internal "CreateLink" command to create the link.
+		FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl ) ;
+
+		// Retrieve the just created link using XPath.
+		var oLink = document.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, 9, null).singleNodeValue ;
+		
+		if ( oLink )
+		{
+			oLink.href = url ;
+			return oLink ;
+		}
+	}
+}
+
+// START iCM Modifications
+/*
+// Ensure that behaviour of the ENTER key or the list toolbar button works correctly for a list item.
+// ENTER in empty list item at top of list should result in the empty list item being
+// removed and selection being moved out of the list into a P tag above it.
+// ENTER in empty list item at bottom of list should result in the empty list item being
+// removed and selection being moved out of the list into a P tag below it.
+// ENTER in empty list item in middle of the list should result in the list being split
+// into two and the selection being moved into a P tag between the two resulting lists.
+// Clicking the list toolbar button in a list item at top of list should result in the list item's contents being
+// moved out of the list into a P tag above it.
+// Clicking the list toolbar button in a list item at the bottom of list should result in the list item's contents being
+// moved out of the list into a P tag below it.
+// Clicking the list toolbar button in a list item in the middle of the list should result in the list being split
+// into two and the list item's contents being moved into a P tag between the two resulting lists.
+FCK.ToggleListItem = function( oLINode, oSelNode )
+{
+	var oListNode = FCKTools.GetElementAscensor( oLINode, "UL,OL" ) ;
+	var oRange = FCK.EditorDocument.createRange() ;	
+
+	// Create a new block element
+	var oBlockNode = FCK.EditorDocument.createElement( "P" ) ;
+	oBlockNode.innerHTML = oLINode.innerHTML ; // Transfer any list item contents
+	if ( FCKTools.NodeIsEmpty( oBlockNode ) )
+		oBlockNode.innerHTML = GECKO_BOGUS ; 			// Ensure it has some content, required for Gecko
+	if ( oLINode.className && oLINode.className != '' )
+		oBlockNode.className = oLINode.className ; 	// Transfer across any class attribute
+	
+	var oCursorNode = oBlockNode ;
+
+	// Then, perform list processing and locate the point at which the new P tag is to be inserted
+	if ( oListNode.childNodes[0] == oLINode )
+	{
+		// First LI was empty so want to leave list and insert P above it
+		oListNode.removeChild( oLINode );
+		// Need to insert a new P tag (or other suitable block element) just before the list
+		oRange.setStartBefore( oListNode ) ;
+		oRange.setEndBefore( oListNode ) ;
+	}
+	else if ( oListNode.childNodes[oListNode.childNodes.length-1] == oLINode )
+	{
+		// Last LI was empty so want to leave list and insert new block element in the parent
+		oListNode.removeChild( oLINode );
+		// Need to insert a new P tag (or other suitable block element) just after the list
+		oRange.setEndAfter( oListNode ) ;
+		oRange.setStartAfter( oListNode ) ;
+	}
+	else
+	{
+		// A middle LI was empty so want to break list into two and insert the new block/text node in between them
+		oListNode = FCKTools.SplitNode( oListNode, oSelNode, 0 ) ;				
+		oListNode.removeChild( oListNode.childNodes[0] ) ;
+		oRange.setStartBefore( oListNode ) ;
+		oRange.setEndBefore( oListNode ) ;
+	}
+
+	// Insert new block/text node
+	oRange.insertNode( oBlockNode ) ;
+	
+	// Ensure that we don't leave empty UL/OL tags behind
+	if ( oListNode.childNodes.length == 0 ) 
+		oListNode.parentNode.removeChild( oListNode ) ;
+	
+	// Reset cursor position to start of the new P tag's contents ready for typing
+	FCK.Selection.SetCursorPosition( oCursorNode ) ;
+}
+
+FCK.ListItemEnter = function( oLINode, oSelNode, nSelOffset )
+{
+	// Ensure that behaviour of ENTER key within an empty list element works correctly.
+	// ENTER in empty list item at top of list should result in the empty list item being
+	// removed and selection being moved out of the list into a P tag above it.
+	// ENTER in empty list item at bottom of list should result in the empty list item being
+	// removed and selection being moved out of the list into a P tag below it.
+	// ENTER in empty list item in middle of the list should result in the list being split
+	// into two and the selection being moved into a P tag between the two resulting lists.
+	if ( FCKTools.NodeIsEmpty( oLINode ) )
+	{
+		FCK.ToggleListItem( oLINode, oSelNode ) ;
+		return false ; // Job done, perform no default handling
+	}
+	
+	return true ; // If non-empty list item, let default handler do its stuff
+}
+
+FCK.ListItemBackSpace = function( oSelNode, nSelOffset )
+{
+	// Ensure that behaviour of BACKSPACE key within an empty list element works correctly.
+	// BACKSPACE in empty list item at top of list should result in the empty list item being
+	// removed and selection being moved out of the list into a P tag above it.
+	// Allow the default handler to do its stuff for backspace in other list elements.
+	var oListNode = oSelNode.parentNode ;
+	
+	if ( FCKTools.NodeIsEmpty( oSelNode ) && ( oListNode.childNodes[0] == oSelNode ) )
+	{
+		var oRange = FCK.EditorDocument.createRange() ;	
+	
+		// Create a new P element
+		var oBlockNode = FCK.EditorDocument.createElement( "P" ) ;
+		if ( FCKTools.NodeIsEmpty( oBlockNode ) ) 
+			oBlockNode.innerHTML = GECKO_BOGUS ; 			// Ensure it has some content, required for Gecko
+	
+		// First LI was empty so want to leave list and insert P above it
+		oListNode.removeChild( oSelNode );
+		oRange.setStartBefore( oListNode ) ;
+		oRange.setEndBefore( oListNode ) ;
+
+		// Insert new P tag
+		oRange.insertNode( oBlockNode ) ;
+		
+		// Ensure that we don't leave empty UL/OL tags behind
+		if ( oListNode.childNodes.length == 0 ) 
+			oListNode.parentNode.removeChild( oListNode ) ;
+		
+		// Reset cursor position to start of the new P tag's contents ready for typing
+		FCK.Selection.SetCursorPosition( oBlockNode ) ;
+		
+		return false ; // Job done, perform no default handling
+	}
+	
+	return true ; // Let default handler do its stuff if not backspacing in an empty first LI
+}
+
+FCK.Enter = function()
+{
+	// Remove any selected content before we begin so we end up with a single selection point
+	FCK.Selection.Delete() ;
+	
+	// Determine the current cursor (selection) point, the node it's within and the offset
+	// position of the cursor within that node
+	var oSel = FCK.EditorWindow.getSelection() ;
+	var nSelOffset = oSel.focusOffset;
+	var oSelNode = oSel.focusNode ;
+
+	// Guard against a null focus node.
+	if ( !oSelNode )
+		return false ;
+	
+	var oLINode = FCKTools.GetElementAscensor( oSelNode, "LI" ) ;
+	
+	if ( oLINode ) // An LI element is selected
+	{
+		// Handle list items separately as need to handle termination of the list, etc
+		return FCK.ListItemEnter( oLINode, oSelNode, nSelOffset ) ;
+	}
+	else if ( oSelNode.nodeType == 3 ) // A TEXT node is selected
+	{
+		// Split it at the selection point and ensure both halves have a suitable enclosing block element
+		var oParentBlockNode = FCKTools.GetParentBlockNode( oSelNode ) ;
+		var oBlockNode2 = FCKTools.SplitNode( oParentBlockNode ? oParentBlockNode : FCK.EditorDocument.body, oSelNode, nSelOffset ) ;
+			
+		FCK.Selection.SetCursorPosition( oBlockNode2 );		
+		
+		return false ;
+	} 
+	else // An ELEMENT node is selected
+	{
+		// Cater for ENTER being pressed after very last element in the editor e.g. pressing ENTER after table element at very end of the editor's content
+		if ( nSelOffset >= oSelNode.childNodes.length )	
+		{
+			var oBlockNode = FCK.EditorDocument.createElement( "P" ) ;
+			if ( FCKTools.NodeIsEmpty( oBlockNode ) )
+				oBlockNode.innerHTML = GECKO_BOGUS ;		// Ensure it has some content, required for Gecko			
+			oSelNode.appendChild( oBlockNode ) ;
+			FCK.Selection.SetCursorPosition( oBlockNode ) ;
+			return false ;
+		}
+		
+		var oBlockNode2 = FCKTools.SplitNode( oSelNode, oSelNode.childNodes[nSelOffset] ) ;
+			
+		FCK.Selection.SetCursorPosition( oBlockNode2 );		
+		
+		return false ;
+	}
+	
+	return true ;
+}
+
+FCK.BackSpace = function()
+{
+	var oSel = FCK.EditorWindow.getSelection() ;
+	var oSelNode = oSel.focusNode ;
+	var nSelOffset = oSel.focusOffset;
+	var oParentNode = null ;
+
+	// Guard against a null focus node.
+	if ( !oSelNode )
+		return false ;
+	
+	if ( oSelNode.nodeName.toUpperCase() == "LI" ) // An LI element is selected
+	{
+		// Handle list items separately as need to handle termination of the list, etc
+		return FCK.ListItemBackSpace( oSelNode, nSelOffset ) ;
+	}
+	else	
+	{
+		// If we are anything other than a TEXT node, move to the child indicated by the selection offset
+		if ( oSelNode.nodeType != 3 )
+		{
+			oSelNode = oSelNode.childNodes[nSelOffset] ;
+			nSelOffset = 0 ;
+		}
+		
+		// If we are the first child and the previous sibling of the parent is an empty block element (containing nothing or just the filler element)
+		// want the backspace to completely remove the empty block element
+		if ( !oSelNode.previousSibling && nSelOffset <= 0 )
+		{
+			oParentNode = oSelNode.parentNode ;
+			
+			if ( oParentNode && oParentNode.previousSibling && FCKRegexLib.BlockElements.test( oParentNode.previousSibling.nodeName ) )
+			{
+				if ( FCKTools.NodeIsEmpty( oParentNode.previousSibling ) )
+				{
+					var oRange = FCK.EditorDocument.createRange() ;
+					oRange.selectNode ( oParentNode.previousSibling );
+					oRange.deleteContents() ;
+					
+					// Don't do any default processing
+					return false ; 
+				}
+			}
+		}
+	}	
+	return true ; // Let default processing do its stuff
+}
+*/
+// END iCM Modifications
+
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_2_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_2_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_2_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_2_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,157 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_2_ie.js
+ * 	This is the second part of the "FCK" object creation. This is the main
+ * 	object that represents an editor instance.
+ * 	(IE specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+/*
+if ( FCKConfig.UseBROnCarriageReturn ) 
+{
+	// Named commands to be handled by this browsers specific implementation.
+	FCK.RedirectNamedCommands = 
+	{
+		InsertOrderedList	: true,
+		InsertUnorderedList	: true
+	}
+
+	FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
+	{
+		if ( commandName == 'InsertOrderedList' || commandName == 'InsertUnorderedList' )
+		{
+			if ( !(FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' )) )
+			{
+			}				
+		}
+
+		FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
+	}
+}
+*/
+
+FCK.Paste = function()
+{
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		FCK.PasteAsPlainText() ;	
+		return false ;
+	}
+	else if ( FCKConfig.AutoDetectPasteFromWord )
+	{
+		var sHTML = FCK.GetClipboardHTML() ;
+		var re = /<\w[^>]* class="?MsoNormal"?/gi ;
+		if ( re.test( sHTML ) )
+		{
+			if ( confirm( FCKLang["PasteWordConfirm"] ) )
+			{
+				FCK.PasteFromWord() ;
+				return false ;
+			}
+		}
+	}
+	else
+		return true ;
+}
+
+FCK.PasteAsPlainText = function()
+{
+	// Get the data available in the clipboard and encodes it in HTML.
+	var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
+
+	// Replace the carriage returns with <BR>
+	sText = sText.replace( /\n/g, '<BR>' ) ;
+	
+	// Insert the resulting data in the editor.
+	this.InsertHtml( sText ) ;	
+}
+/*
+FCK.PasteFromWord = function()
+{
+	FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
+}
+*/
+FCK.InsertElement = function( element )
+{
+	FCK.InsertHtml( element.outerHTML ) ;
+}
+
+FCK.GetClipboardHTML = function()
+{
+	var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
+	
+	if ( !oDiv )
+	{
+		var oDiv = document.createElement( 'DIV' ) ;
+		oDiv.id = '___FCKHiddenDiv' ;
+		oDiv.style.visibility	= 'hidden' ;
+		oDiv.style.overflow		= 'hidden' ;
+		oDiv.style.position		= 'absolute' ;
+		oDiv.style.width		= 1 ;
+		oDiv.style.height		= 1 ;
+	
+		document.body.appendChild( oDiv ) ;
+	}
+	
+	oDiv.innerHTML = '' ;
+	
+	var oTextRange = document.body.createTextRange() ;
+	oTextRange.moveToElementText( oDiv ) ;
+	oTextRange.execCommand( 'Paste' ) ;
+	
+	var sData = oDiv.innerHTML ;
+	oDiv.innerHTML = '' ;
+	
+	return sData ;
+}
+
+FCK.AttachToOnSelectionChange = function( functionPointer )
+{
+	this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
+}
+
+/*
+FCK.AttachToOnSelectionChange = function( functionPointer )
+{
+	FCK.EditorDocument.attachEvent( 'onselectionchange', functionPointer ) ;
+}
+*/
+
+FCK.CreateLink = function( url )
+{	
+	FCK.ExecuteNamedCommand( 'Unlink' ) ;
+
+	if ( url.length > 0 )
+	{
+		// Generate a temporary name for the link.
+		var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+		
+		// Use the internal "CreateLink" command to create the link.
+		FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl ) ;
+
+		// Loof for the just create link.
+		var oLinks = this.EditorDocument.links ;
+
+		for ( i = 0 ; i < oLinks.length ; i++ )
+		{
+			if ( oLinks[i].href == sTempUrl )
+			{
+				oLinks[i].href = url ;
+				return oLinks[i] ;
+			}
+		}
+	}
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_2.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_2.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_2.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_2.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,202 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_2.js
+ * 	This is the second part of the "FCK" object creation. This is the main
+ * 	object that represents an editor instance.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// This collection is used by the browser specific implementations to tell
+// wich named commands must be handled separately.
+FCK.RedirectNamedCommands = new Object() ;
+
+FCK.ExecuteNamedCommand = function( commandName, commandParameter )
+{
+	FCKUndo.SaveUndoStep() ;
+
+	if ( FCK.RedirectNamedCommands[ commandName ] != null )
+		FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ;
+	else
+	{
+		FCK.Focus() ;
+		FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ; 
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	}
+	
+	FCKUndo.SaveUndoStep() ;
+}
+
+FCK.GetNamedCommandState = function( commandName )
+{
+	try
+	{
+		if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )
+			return FCK_TRISTATE_DISABLED ;
+		else
+			return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+	}
+	catch ( e )
+	{
+		return FCK_TRISTATE_OFF ;
+	}
+}
+
+FCK.GetNamedCommandValue = function( commandName )
+{
+	var sValue = '' ;
+	var eState = FCK.GetNamedCommandState( commandName ) ;
+	
+	if ( eState == FCK_TRISTATE_DISABLED ) 
+		return null ;
+	
+	try
+	{
+		sValue = this.EditorDocument.queryCommandValue( commandName ) ;
+	}
+	catch(e) {}
+	
+	return sValue ? sValue : '' ;
+}
+
+FCK.PasteFromWord = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+}
+
+// TODO: Wait Stable and remove this block.
+//FCK.CleanAndPaste = function( html )
+//{
+	// Remove all SPAN tags
+//	html = html.replace(/<\/?SPAN[^>]*>/gi, "" );
+
+//	html = html.replace(/<o:p>&nbsp;<\/o:p>/g, "") ;
+//	html = html.replace(/<o:p><\/o:p>/g, "") ;
+	
+	// Remove mso-xxx styles.
+//	html = html.replace( /mso-.[^:]:.[^;"]/g, "" ) ;
+	
+	// Remove Class attributes
+//	html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+	
+	// Remove Style attributes
+//	html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ;
+	
+	// Remove Lang attributes
+//	html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+	
+	// Remove XML elements and declarations
+//	html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
+	
+	// Remove Tags with XML namespace declarations: <o:p></o:p>
+//	html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
+	
+	// Replace the &nbsp;
+//	html = html.replace(/&nbsp;/, " " );
+	// Replace the &nbsp; from the beggining.
+//	html = html.replace(/^&nbsp;[\s\r\n]*/, ""); 
+	
+	// Transform <P> to <DIV>
+//	var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ;	// Different because of a IE 5.0 error
+//	html = html.replace( re, "<div$2</div>" ) ;
+	
+//	FCK.InsertHtml( html ) ;
+//}
+
+FCK.Preview = function()
+{
+	var iWidth	= FCKConfig.ScreenWidth * 0.8 ;
+	var iHeight	= FCKConfig.ScreenHeight * 0.7 ;
+	var iLeft	= ( FCKConfig.ScreenWidth - iWidth ) / 2 ;
+	var oWindow = window.open( '', null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ;
+	
+	var sHTML ;
+	
+	if ( FCKConfig.FullPage )
+	{
+		if ( FCK.TempBaseTag.length > 0 )
+			sHTML = FCK.GetXHTML().replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
+		else
+			sHTML = FCK.GetXHTML() ;
+	}
+	else
+	{
+		sHTML = 
+			FCKConfig.DocType +
+			'<html dir="' + FCKConfig.ContentLangDirection + '">' +
+			'<head><title>' + FCKLang.Preview + '</title>' +
+			'<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' +
+			FCK.TempBaseTag +
+			'</head><body>' + 
+			FCK.GetXHTML() + 
+			'</body></html>' ;
+	}
+	
+	oWindow.document.write( sHTML );
+	oWindow.document.close();
+}
+
+FCK.SwitchEditMode = function()
+{
+	// Check if the actual mode is WYSIWYG.
+	var bWYSIWYG = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
+	
+	// Display/Hide the TRs.
+	document.getElementById('eWysiwyg').style.display	= bWYSIWYG ? 'none' : '' ;
+	document.getElementById('eSource').style.display	= bWYSIWYG ? '' : 'none' ;
+
+	// Update the HTML in the view output to show.
+	if ( bWYSIWYG )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			FCKUndo.SaveUndoStep() ;
+		document.getElementById('eSourceField').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
+	}
+	else
+		FCK.SetHTML( FCK.GetHTML(), true ) ;
+
+	// Updates the actual mode status.
+	FCK.EditMode = bWYSIWYG ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
+	
+	// Update the toolbar.
+	FCKToolbarSet.RefreshModeState() ;
+
+	// Set the Focus.
+	FCK.Focus() ;
+}
+
+FCK.CreateElement = function( tag )
+{
+	var e = FCK.EditorDocument.createElement( tag ) ;
+	return FCK.InsertElementAndGetIt( e ) ;
+}
+
+FCK.InsertElementAndGetIt = function( e )
+{
+	e.setAttribute( '__FCKTempLabel', 1 ) ;
+	
+	this.InsertElement( e ) ;
+	
+	var aEls = FCK.EditorDocument.getElementsByTagName( e.tagName ) ;
+	
+	for ( var i = 0 ; i < aEls.length ; i++ )
+	{
+		if ( aEls[i].getAttribute( '__FCKTempLabel' ) )
+		{
+			aEls[i].removeAttribute( '__FCKTempLabel' ) ;
+			return aEls[i] ;
+		}
+	}
+	return null ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckbrowserinfo.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckbrowserinfo.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckbrowserinfo.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckbrowserinfo.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,32 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckbrowserinfo.js
+ * 	Defines the FCKBrowserInfo object that hold some browser informations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKBrowserInfo ;
+
+if ( !( FCKBrowserInfo = NS.FCKBrowserInfo ) )
+{
+	FCKBrowserInfo = NS.FCKBrowserInfo = new Object() ;
+
+	var sAgent = navigator.userAgent.toLowerCase() ;
+
+	FCKBrowserInfo.IsIE			= ( sAgent.indexOf("msie") != -1 ) ;
+	FCKBrowserInfo.IsGecko		= !FCKBrowserInfo.IsIE ;
+	FCKBrowserInfo.IsSafari		= ( sAgent.indexOf("safari") != -1 ) ;
+	FCKBrowserInfo.IsNetscape	= ( sAgent.indexOf("netscape") != -1 ) ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckcodeformatter.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcodeformatter.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckcodeformatter.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcodeformatter.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,75 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcodeformatter.js
+ * 	Format the HTML.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKCodeFormatter ;
+
+if ( !( FCKCodeFormatter = NS.FCKCodeFormatter ) )
+{
+	FCKCodeFormatter = NS.FCKCodeFormatter = new Object() ;
+
+	FCKCodeFormatter.Regex = new Object() ;
+
+	// Regex for line breaks.
+	FCKCodeFormatter.Regex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi ;
+	FCKCodeFormatter.Regex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi ;
+
+	FCKCodeFormatter.Regex.NewLineTags	= /\<(BR|HR)[^\>]\>/gi ;
+
+	FCKCodeFormatter.Regex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
+
+	FCKCodeFormatter.Regex.LineSplitter = /\s*\n+\s*/g ;
+
+	// Regex for indentation.
+	FCKCodeFormatter.Regex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ;
+	FCKCodeFormatter.Regex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ;
+	FCKCodeFormatter.Regex.FormatIndentatorRemove = new RegExp( FCKConfig.FormatIndentator ) ;
+
+	FCKCodeFormatter.Format = function( html )
+	{
+		// Line breaks.
+		var sFormatted	= html.replace( this.Regex.BlocksOpener, '\n$&' ) ; ;
+		sFormatted		= sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ;
+		sFormatted		= sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ;
+		sFormatted		= sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ;
+		
+		// Indentation.
+		var sIndentation = '' ;
+		
+		var asLines = sFormatted.split( this.Regex.LineSplitter ) ;
+		sFormatted = '' ;
+		
+		for ( var i = 0 ; i < asLines.length ; i++ )
+		{
+			var sLine = asLines[i] ;
+			
+			if ( sLine.length == 0 )
+				continue ;
+			
+			if ( this.Regex.DecreaseIndent.test( sLine ) )
+				sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ;
+
+			sFormatted += sIndentation + sLine + '\n' ;
+			
+			if ( this.Regex.IncreaseIndent.test( sLine ) )
+				sIndentation += FCKConfig.FormatIndentator ;
+		}
+
+		return sFormatted.trim() ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckcommands.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcommands.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckcommands.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcommands.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,123 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcommands.js
+ * 	Define all commands available in the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKCommands = FCK.Commands = new Object() ;
+FCKCommands.LoadedCommands = new Object() ;
+
+FCKCommands.RegisterCommand = function( commandName, command )
+{
+	this.LoadedCommands[ commandName ] = command ;
+}
+
+FCKCommands.GetCommand = function( commandName )
+{
+	var oCommand = FCKCommands.LoadedCommands[ commandName ] ;
+	
+	if ( oCommand )
+		return oCommand ;
+
+	switch ( commandName )
+	{
+		case 'DocProps'		: oCommand = new FCKDialogCommand( 'DocProps'	, FCKLang.DocProps				, 'dialog/fck_docprops.html'	, 400, 390, FCKCommands.GetFullPageState ) ; break ;
+		case 'Templates'	: oCommand = new FCKDialogCommand( 'Templates'	, FCKLang.DlgTemplatesTitle		, 'dialog/fck_template.html'	, 380, 450 ) ; break ;
+		case 'Link'			: oCommand = new FCKDialogCommand( 'Link'		, FCKLang.DlgLnkWindowTitle		, 'dialog/fck_link.html'		, 400, 330, FCK.GetNamedCommandState, 'CreateLink' ) ; break ;
+		case 'Anchor'		: oCommand = new FCKDialogCommand( 'Anchor'		, FCKLang.DlgAnchorTitle		, 'dialog/fck_anchor.html'		, 370, 170 ) ; break ;
+		case 'BulletedList'	: oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp		, 'dialog/fck_listprop.html'	, 370, 170 ) ; break ;
+		case 'NumberedList'	: oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp		, 'dialog/fck_listprop.html'	, 370, 170 ) ; break ;
+		case 'About'		: oCommand = new FCKDialogCommand( 'About'		, FCKLang.About					, 'dialog/fck_about.html'		, 400, 330 ) ; break ;
+
+		case 'Find'			: oCommand = new FCKDialogCommand( 'Find'		, FCKLang.DlgFindTitle			, 'dialog/fck_find.html'		, 340, 170 ) ; break ;
+		case 'Replace'		: oCommand = new FCKDialogCommand( 'Replace'	, FCKLang.DlgReplaceTitle		, 'dialog/fck_replace.html'		, 340, 200 ) ; break ;
+
+		case 'Image'		: oCommand = new FCKDialogCommand( 'Image'		, FCKLang.DlgImgTitle			, 'dialog/fck_image.html'		, 450, 400 ) ; break ;
+		case 'Flash'		: oCommand = new FCKDialogCommand( 'Flash'		, FCKLang.DlgFlashTitle			, 'dialog/fck_flash.html'		, 450, 400 ) ; break ;
+		case 'SpecialChar'	: oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle	, 'dialog/fck_specialchar.html'	, 400, 300 ) ; break ;
+		case 'Smiley'		: oCommand = new FCKDialogCommand( 'Smiley'		, FCKLang.DlgSmileyTitle		, 'dialog/fck_smiley.html'		, FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
+		case 'Table'		: oCommand = new FCKDialogCommand( 'Table'		, FCKLang.DlgTableTitle			, 'dialog/fck_table.html'		, 400, 250 ) ; break ;
+		case 'TableProp'	: oCommand = new FCKDialogCommand( 'Table'		, FCKLang.DlgTableTitle			, 'dialog/fck_table.html?Parent', 400, 250 ) ; break ;
+		case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'	, FCKLang.DlgCellTitle			, 'dialog/fck_tablecell.html'	, 500, 250 ) ; break ;
+		case 'UniversalKey'	: oCommand = new FCKDialogCommand( 'UniversalKey', FCKLang.UniversalKeyboard	, 'dialog/fck_universalkey.html', 415, 300 ) ; break ;
+
+		case 'Style'		: oCommand = new FCKStyleCommand() ; break ;
+
+		case 'FontName'		: oCommand = new FCKFontNameCommand() ; break ;
+		case 'FontSize'		: oCommand = new FCKFontSizeCommand() ; break ;
+		case 'FontFormat'	: oCommand = new FCKFormatBlockCommand() ; break ;
+
+		case 'Source'		: oCommand = new FCKSourceCommand() ; break ;
+		case 'Preview'		: oCommand = new FCKPreviewCommand() ; break ;
+		case 'Save'			: oCommand = new FCKSaveCommand() ; break ;
+		case 'NewPage'		: oCommand = new FCKNewPageCommand() ; break ;
+		case 'PageBreak'	: oCommand = new FCKPageBreakCommand() ; break ;
+
+		case 'TextColor'	: oCommand = new FCKTextColorCommand('ForeColor') ; break ;
+		case 'BGColor'		: oCommand = new FCKTextColorCommand('BackColor') ; break ;
+
+		case 'PasteText'	: oCommand = new FCKPastePlainTextCommand() ; break ;
+		case 'PasteWord'	: oCommand = new FCKPasteWordCommand() ; break ;
+
+		case 'TableInsertRow'		: oCommand = new FCKTableCommand('TableInsertRow') ; break ;
+		case 'TableDeleteRows'		: oCommand = new FCKTableCommand('TableDeleteRows') ; break ;
+		case 'TableInsertColumn'	: oCommand = new FCKTableCommand('TableInsertColumn') ; break ;
+		case 'TableDeleteColumns'	: oCommand = new FCKTableCommand('TableDeleteColumns') ; break ;
+		case 'TableInsertCell'		: oCommand = new FCKTableCommand('TableInsertCell') ; break ;
+		case 'TableDeleteCells'		: oCommand = new FCKTableCommand('TableDeleteCells') ; break ;
+		case 'TableMergeCells'		: oCommand = new FCKTableCommand('TableMergeCells') ; break ;
+		case 'TableSplitCell'		: oCommand = new FCKTableCommand('TableSplitCell') ; break ;
+
+		case 'Form'			: oCommand = new FCKDialogCommand( 'Form'		, FCKLang.Form			, 'dialog/fck_form.html'		, 380, 230 ) ; break ;
+		case 'Checkbox'		: oCommand = new FCKDialogCommand( 'Checkbox'	, FCKLang.Checkbox		, 'dialog/fck_checkbox.html'	, 380, 230 ) ; break ;
+		case 'Radio'		: oCommand = new FCKDialogCommand( 'Radio'		, FCKLang.RadioButton	, 'dialog/fck_radiobutton.html'	, 380, 230 ) ; break ;
+		case 'TextField'	: oCommand = new FCKDialogCommand( 'TextField'	, FCKLang.TextField		, 'dialog/fck_textfield.html'	, 380, 230 ) ; break ;
+		case 'Textarea'		: oCommand = new FCKDialogCommand( 'Textarea'	, FCKLang.Textarea		, 'dialog/fck_textarea.html'	, 380, 230 ) ; break ;
+		case 'HiddenField'	: oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField	, 'dialog/fck_hiddenfield.html'	, 380, 230 ) ; break ;
+		case 'Button'		: oCommand = new FCKDialogCommand( 'Button'		, FCKLang.Button		, 'dialog/fck_button.html'		, 380, 230 ) ; break ;
+		case 'Select'		: oCommand = new FCKDialogCommand( 'Select'		, FCKLang.SelectionField, 'dialog/fck_select.html'		, 400, 380 ) ; break ;
+		case 'ImageButton'	: oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton	, 'dialog/fck_image.html?ImageButton', 450, 400 ) ; break ;
+
+		case 'SpellCheck'	: oCommand = new FCKSpellCheckCommand() ; break ;
+
+		case 'Undo'	: oCommand = new FCKUndoCommand() ; break ;
+		case 'Redo'	: oCommand = new FCKRedoCommand() ; break ;
+
+		// Generic Undefined command (usually used when a command is under development).
+		case 'Undefined'	: oCommand = new FCKUndefinedCommand() ; break ;
+		
+		// By default we assume that it is a named command.
+		default:
+			if ( FCKRegexLib.NamedCommands.test( commandName ) )
+				oCommand = new FCKNamedCommand( commandName ) ;
+			else
+			{
+				alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ;
+				return null ;
+			}
+	}
+	
+	FCKCommands.LoadedCommands[ commandName ] = oCommand ;
+	
+	return oCommand ;
+}
+
+// Gets the state of the "Document Properties" button. It must be enabled only
+// when "Full Page" editing is available.
+FCKCommands.GetFullPageState = function()
+{
+	return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckconfig.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckconfig.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckconfig.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckconfig.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,150 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckconfig.js
+ * 	Creates and initializes the FCKConfig object.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKConfig = FCK.Config = new Object() ;
+
+// Editor Base Path
+if ( document.location.protocol == 'file:' )
+{
+	FCKConfig.BasePath = document.location.pathname.substr(1) ;
+	FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
+	FCKConfig.BasePath = 'file://' + FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1) ;
+}
+else
+{
+	FCKConfig.BasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1) ;
+	FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ;
+}
+
+FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ;
+
+// There is a bug in Gecko. If the editor is hidden on startup, an error is 
+// thrown when trying to get the screen dimentions.
+try
+{
+	FCKConfig.ScreenWidth	= screen.width ;
+	FCKConfig.ScreenHeight	= screen.height ;
+}
+catch (e) 
+{
+	FCKConfig.ScreenWidth	= 800 ;
+	FCKConfig.ScreenHeight	= 600 ;
+}
+
+// Override the actual configuration values with the values passed throw the 
+// hidden field "<InstanceName>___Config".
+FCKConfig.ProcessHiddenField = function()
+{
+	this.PageConfig = new Object() ;
+
+	// Get the hidden field.
+	var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
+	
+	// Do nothing if the config field was not defined.
+	if ( ! oConfigField ) return ;
+
+	var aCouples = oConfigField.value.split('&') ;
+
+	for ( var i = 0 ; i < aCouples.length ; i++ )
+	{
+		if ( aCouples[i].length == 0 )
+			continue ;
+
+		var aConfig = aCouples[i].split( '=' ) ;
+		var sKey = unescape( aConfig[0] ) ;
+		var sVal = unescape( aConfig[1] ) ;
+
+		if ( sKey == 'CustomConfigurationsPath' )	// The Custom Config File path must be loaded immediately.
+			FCKConfig[ sKey ] = sVal ;
+			
+		else if ( sVal.toLowerCase() == "true" )	// If it is a boolean TRUE.
+			this.PageConfig[ sKey ] = true ;
+			
+		else if ( sVal.toLowerCase() == "false" )	// If it is a boolean FALSE.
+			this.PageConfig[ sKey ] = false ;
+			
+		else if ( ! isNaN( sVal ) )					// If it is a number.
+			this.PageConfig[ sKey ] = parseInt( sVal ) ;
+			
+		else										// In any other case it is a string.
+			this.PageConfig[ sKey ] = sVal ;
+	}
+}
+
+FCKConfig.LoadPageConfig = function()
+{
+	for ( var sKey in this.PageConfig )
+		FCKConfig[ sKey ] = this.PageConfig[ sKey ] ;
+}
+
+// Define toolbar sets collection.
+FCKConfig.ToolbarSets = new Object() ;
+
+// Defines the plugins collection.
+FCKConfig.Plugins = new Object() ;
+FCKConfig.Plugins.Items = new Array() ;
+
+FCKConfig.Plugins.Add = function( name, langs, path )
+{
+	FCKConfig.Plugins.Items.addItem( [name, langs, path] ) ;
+}
+
+// FCKConfig.ProtectedSource: object that holds a collection of Regular 
+// Expressions that defined parts of the raw HTML that must remain untouched
+// like custom tags, scripts, server side code, etc...
+FCKConfig.ProtectedSource = new Object() ;
+FCKConfig.ProtectedSource.RegexEntries = new Array() ;
+
+FCKConfig.ProtectedSource.Add = function( regexPattern )
+{
+	this.RegexEntries.addItem( regexPattern ) ;
+}
+
+FCKConfig.ProtectedSource.Protect = function( html )
+{
+	function _Replace( protectedSource )
+	{
+		var index = FCKTempBin.AddElement( protectedSource ) ;
+		return '<!--{PS..' + index + '}-->' ;
+	}
+	
+	for ( var i = 0 ; i < this.RegexEntries.length ; i++ )
+	{
+		html = html.replace( this.RegexEntries[i], _Replace ) ;
+	}
+	
+	return html ;
+}
+
+
+FCKConfig.ProtectedSource.Revert = function( html, clearBin )
+{
+	function _Replace( m, opener, index )
+	{
+		var protectedValue = clearBin ? FCKTempBin.RemoveElement( index ) : FCKTempBin.Elements[ index ] ;
+		// There could be protected source inside another one.
+		return FCKConfig.ProtectedSource.Revert( protectedValue, clearBin ) ;
+	}
+
+	return html.replace( /(<|&lt;)!--\{PS..(\d+)\}--(>|&gt;)/g, _Replace ) ;
+}
+
+// First of any other protection, we must protect all comments to avoid 
+// loosing them (of course, IE related).
+FCKConfig.ProtectedSource.Add( /<!--[\s\S]*?-->/g ) ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckcontextmenu_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcontextmenu_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckcontextmenu_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcontextmenu_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,90 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcontextmenu_gecko.js
+ * 	Context Menu operations. (Gecko specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// The Context Menu CSS must be added to the parent document.
+FCKTools.AppendStyleSheet( window.parent.document, FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
+
+FCKContextMenu.Show = function( x, y )
+{
+	if ( ! this._Document )
+	{
+		this._Document = window.parent.document ;
+	}
+
+	// Create the context menu if needed.
+	if ( !this._IsLoaded ) 
+	{
+		this.Reload() ;
+		this._Div.style.zIndex = 10000 ;
+		this._Div.oncontextmenu = function() { return false ; }
+	}
+	
+	this.RefreshState() ;
+
+	// Get the editor area and editor frames positions.	
+	var oCoordsA = FCKTools.GetElementPosition( FCK.EditorWindow.frameElement ) ;
+	var oCoordsB = FCKTools.GetElementPosition( window.frameElement ) ;
+	
+	x += oCoordsA.X + oCoordsB.X ;
+	y += oCoordsA.Y + oCoordsB.Y ;
+
+	// Verifies if the context menu is completely visible.
+	var iXSpace = x + this._Div.offsetWidth - this._Div.ownerDocument.defaultView.innerWidth ;
+	var iYSpace = y + this._Div.offsetHeight - this._Div.ownerDocument.defaultView.innerHeight ;
+	
+	if ( iXSpace > 0 ) x -= this._Div.offsetWidth ;
+	if ( iYSpace > 0 ) y -= this._Div.offsetHeight ;
+	
+	// Set the context menu DIV in the specified location.
+	this._Div.style.left	= x + 'px' ;
+	this._Div.style.top		= y + 'px' ;
+
+	// Watch the "OnClick" event for all windows to close the Context Menu.
+	var oActualWindow = FCK.EditorWindow ;
+	while ( oActualWindow )
+	{
+		oActualWindow.document.addEventListener( 'click', FCKContextMenu._OnDocumentClick, false ) ;
+		if ( oActualWindow != oActualWindow.parent )
+			oActualWindow = oActualWindow.parent ;
+		else if ( oActualWindow.opener == null ) 
+			oActualWindow = oActualWindow.opener ;
+		else
+			break ;
+	}
+	
+	// Show it.
+	this._Div.style.visibility	= '' ;
+}
+
+FCKContextMenu._OnDocumentClick = function( event )
+{
+	var e = event.target ;
+	while ( e )
+	{
+		if ( e == FCKContextMenu._Div ) return ;
+		e = e.parentNode ;
+	}
+	FCKContextMenu.Hide() ;
+}
+
+FCKContextMenu.Hide = function()
+{
+	this._Div.style.visibility = 'hidden' ;
+	this._Div.style.left = this._Div.style.top = '1px' ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckcontextmenu_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcontextmenu_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckcontextmenu_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcontextmenu_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,71 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcontextmenu_ie.js
+ * 	Context Menu operations. (IE specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+function FCKContextMenu_OnContextMenu() { return false ; }
+
+FCKContextMenu.Show = function( x, y )
+{
+	// Create the Popup used to show the menu (this is a IE 5.5+ feature).
+	if ( ! this._Popup )
+	{
+		this._Popup = window.createPopup() ;
+		this._Document = this._Popup.document ;
+		this._Document.createStyleSheet( FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
+		this._Document.oncontextmenu = FCKContextMenu_OnContextMenu ;
+
+		aCleanupDocs[ aCleanupDocs.length ] = this._Document ;
+	}
+
+	// Create the context menu if needed.
+	if ( !this._IsLoaded )
+	{
+		this.Reload() ;
+		this._Div.style.visibility = '' ;
+	}
+
+	this.RefreshState() ;
+
+	// IE doens't get the offsetWidth and offsetHeight values if the element is not visible.
+	// So the Popup must be "shown" with no size to be able to get these values.
+	this._Popup.show( x, y, 0, 0 ) ;
+
+	// This was the previous solution. It works well to.
+	// So a temporary element is created to get this for us.
+	/*
+	if ( !this._DivCopy )
+	{
+		this._DivCopy = document.createElement( 'DIV' ) ;
+		this._DivCopy.className			= 'CM_ContextMenu' ;
+		this._DivCopy.style.position	= 'absolute' ;
+		this._DivCopy.style.visibility	= 'hidden' ;
+		document.body.appendChild( this._DivCopy );
+	}
+
+	this._DivCopy.innerHTML = this._Div.innerHTML ;
+	*/
+
+	// Show the Popup at the specified location.
+	this._Popup.show( x, y, this._Div.offsetWidth, this._Div.offsetHeight ) ;
+}
+
+FCKContextMenu.Hide = function()
+{
+	if ( this._Popup )
+		this._Popup.hide() ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckcontextmenu.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcontextmenu.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckcontextmenu.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcontextmenu.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,232 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcontextmenu.js
+ * 	Defines the FCKContextMenu object that is responsible for all
+ * 	Context Menu operations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKContextMenu = new Object() ;
+
+// This property is internally used to indicate that the context menu has been created.
+FCKContextMenu._IsLoaded = false ;
+
+// This method creates the context menu inside a DIV tag. Take a look at the end of this file for a sample output.
+FCKContextMenu.Reload = function()
+{
+	// Create the Main DIV that holds the Context Menu.
+	this._Div = this._Document.createElement( 'DIV' ) ;
+	this._Div.className			= 'CM_ContextMenu' ;
+	this._Div.style.position	= 'absolute' ;
+	this._Div.style.visibility	= 'hidden' ;
+	this._Document.body.appendChild( this._Div );
+
+	// Create the main table for the menu items.
+	var oTable = this._Document.createElement( 'TABLE' ) ;
+	oTable.cellSpacing = 0 ;
+	oTable.cellPadding = 0 ;
+	oTable.border = 0 ;
+	this._Div.appendChild( oTable ) ;
+
+	// Load all configured groups.
+	this.Groups = new Object() ;
+	
+	for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
+	{
+		var sGroup = FCKConfig.ContextMenu[i] ;
+		this.Groups[ sGroup ] = this._GetGroup( sGroup ) ;
+		this.Groups[ sGroup ].CreateTableRows( oTable ) ;
+	}
+
+	this._IsLoaded = true ;
+}
+
+FCKContextMenu._GetGroup = function( groupName )
+{
+	var oGroup ;
+
+	switch ( groupName )
+	{
+		case 'Generic' :
+			// Generic items that are always available.
+			oGroup = new FCKContextMenuGroup() ;
+
+			oGroup.Add( new FCKContextMenuItem( this, 'Cut'		, FCKLang.Cut	, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'Copy'	, FCKLang.Copy	, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'Paste'	, FCKLang.Paste	, true ) ) ;
+
+			break ;
+
+		case 'Link' :
+			oGroup = new FCKContextMenuGroup() ;
+
+			oGroup.Add( new FCKContextMenuSeparator() ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'Link'	, FCKLang.EditLink	, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'Unlink'	, FCKLang.RemoveLink, true ) ) ;
+
+			break ;
+
+		case 'TableCell' :
+			oGroup = new FCKContextMenuGroup() ;
+
+			oGroup.Add( new FCKContextMenuSeparator() ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableInsertRow'		, FCKLang.InsertRow, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableDeleteRows'		, FCKLang.DeleteRows, true ) ) ;
+			oGroup.Add( new FCKContextMenuSeparator() ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableInsertColumn'	, FCKLang.InsertColumn, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableDeleteColumns'	, FCKLang.DeleteColumns, true ) ) ;
+			oGroup.Add( new FCKContextMenuSeparator() ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableInsertCell'		, FCKLang.InsertCell, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableDeleteCells'	, FCKLang.DeleteCells, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableMergeCells'		, FCKLang.MergeCells, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableSplitCell'		, FCKLang.SplitCell, true ) ) ;
+			oGroup.Add( new FCKContextMenuSeparator() ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableCellProp'		, FCKLang.CellProperties, true ) ) ;
+			oGroup.Add( new FCKContextMenuItem( this, 'TableProp'			, FCKLang.TableProperties, true ) ) ;
+
+			break ;
+
+		case 'Table' :
+			return new FCKContextMenuGroup( true, this, 'Table', FCKLang.TableProperties, true ) ;
+
+		case 'Image' :
+			return new FCKContextMenuGroup( true, this, 'Image', FCKLang.ImageProperties, true ) ;
+
+		case 'Flash' :
+			return new FCKContextMenuGroup( true, this, 'Flash', FCKLang.FlashProperties, true ) ;
+
+		case 'Form' :
+			return new FCKContextMenuGroup( true, this, 'Form', FCKLang.FormProp, true ) ;
+
+		case 'Checkbox' :
+			return new FCKContextMenuGroup( true, this, 'Checkbox', FCKLang.CheckboxProp, true ) ;
+
+		case 'Radio' :
+			return new FCKContextMenuGroup( true, this, 'Radio', FCKLang.RadioButtonProp, true ) ;
+
+		case 'TextField' :
+			return new FCKContextMenuGroup( true, this, 'TextField', FCKLang.TextFieldProp, true ) ;
+
+		case 'HiddenField' :
+			return new FCKContextMenuGroup( true, this, 'HiddenField', FCKLang.HiddenFieldProp, true ) ;
+
+		case 'ImageButton' :
+			return new FCKContextMenuGroup( true, this, 'ImageButton', FCKLang.ImageButtonProp, true ) ;
+
+		case 'Button' :
+			return new FCKContextMenuGroup( true, this, 'Button', FCKLang.ButtonProp, true ) ;
+
+		case 'Select' :
+			return new FCKContextMenuGroup( true, this, 'Select', FCKLang.SelectionFieldProp, true ) ;
+
+		case 'Textarea' :
+			return new FCKContextMenuGroup( true, this, 'Textarea', FCKLang.TextareaProp, true ) ;
+
+		case 'BulletedList' :
+			return new FCKContextMenuGroup( true, this, 'BulletedList', FCKLang.BulletedListProp, true ) ;
+
+		case 'NumberedList' :
+			return new FCKContextMenuGroup( true, this, 'NumberedList', FCKLang.NumberedListProp, true ) ;
+
+		case 'Anchor' :
+			return new FCKContextMenuGroup( true, this, 'Anchor', FCKLang.AnchorProp, true ) ;
+	}
+	
+	return oGroup ;
+}
+
+FCKContextMenu.RefreshState = function()
+{
+  	// Get the actual selected tag (if any).
+	var oTag = FCKSelection.GetSelectedElement() ;
+	var sTagName ;
+
+	if ( oTag )
+		sTagName = oTag.tagName ;
+
+	// Set items visibility.
+
+//	var bIsAnchor = ( sTagName == 'A' && oTag.name.length > 0 && oTag.href.length == 0 ) ;
+
+//	if ( this.Groups['Link'] )			this.Groups['Link'].SetVisible( !bIsAnchor && FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED ) ;
+	if ( this.Groups['Link'] )			this.Groups['Link'].SetVisible( FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED ) ;
+
+	if ( this.Groups['TableCell'] )		this.Groups['TableCell'].SetVisible( sTagName != 'TABLE' && FCKSelection.HasAncestorNode('TABLE') ) ;
+	if ( this.Groups['Table'] )			this.Groups['Table'].SetVisible( sTagName == 'TABLE' ) ;
+	
+	if ( this.Groups['Image'] )			this.Groups['Image'].SetVisible( sTagName == 'IMG' && !oTag.getAttribute('_fckfakelement') ) ;
+	if ( this.Groups['Flash'] )			this.Groups['Flash'].SetVisible( sTagName == 'IMG' && oTag.getAttribute('_fckflash') ) ;
+	if ( this.Groups['Anchor'] )		this.Groups['Anchor'].SetVisible( sTagName == 'IMG' && oTag.getAttribute('_fckanchor') ) ;
+
+	if ( this.Groups['BulletedList'] )	this.Groups['BulletedList'].SetVisible( FCKSelection.HasAncestorNode('UL') ) ;
+	if ( this.Groups['NumberedList'] )	this.Groups['NumberedList'].SetVisible( FCKSelection.HasAncestorNode('OL') ) ;
+
+	if ( this.Groups['Select'] )		this.Groups['Select'].SetVisible( sTagName == 'SELECT' ) ;
+	if ( this.Groups['Textarea'] )		this.Groups['Textarea'].SetVisible( sTagName == 'TEXTAREA' ) ;
+	if ( this.Groups['Form'] )			this.Groups['Form'].SetVisible( FCKSelection.HasAncestorNode('FORM') ) ;
+	if ( this.Groups['Checkbox'] )		this.Groups['Checkbox'].SetVisible(		sTagName == 'INPUT' && oTag.type == 'checkbox' ) ;
+	if ( this.Groups['Radio'] )			this.Groups['Radio'].SetVisible(		sTagName == 'INPUT' && oTag.type == 'radio' ) ;
+	if ( this.Groups['TextField'] )		this.Groups['TextField'].SetVisible(	sTagName == 'INPUT' && ( oTag.type == 'text' || oTag.type == 'password' ) ) ;
+	if ( this.Groups['HiddenField'] )	this.Groups['HiddenField'].SetVisible(	sTagName == 'INPUT' && oTag.type == 'hidden' ) ;
+	if ( this.Groups['ImageButton'] )	this.Groups['ImageButton'].SetVisible(	sTagName == 'INPUT' && oTag.type == 'image' ) ;
+	if ( this.Groups['Button'] )		this.Groups['Button'].SetVisible(		sTagName == 'INPUT' && ( oTag.type == 'button' || oTag.type == 'submit' || oTag.type == 'reset' ) ) ;
+
+	// Refresh the state of all visible items (active/disactive)
+	for ( var o in this.Groups )
+	{
+		this.Groups[o].RefreshState() ;
+	}
+}
+
+/*
+Sample Context Menu Output
+-----------------------------------------
+<div class="CM_ContextMenu">
+	<table cellSpacing="0" cellPadding="0" border="0">
+		<tr class="CM_Disabled">
+			<td class="CM_Icon"><img alt="" src="icons/cut.gif" width="21" height="20" unselectable="on"></td>
+			<td class="CM_Label" unselectable="on">Cut</td>
+		</tr>
+		<tr class="CM_Disabled">
+			<td class="CM_Icon"><img height="20" alt="" src="icons/copy.gif" width="21"></td>
+			<td class="CM_Label">Copy</td>
+		</tr>
+		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
+			<td class="CM_Icon"><img height="20" alt="" src="icons/paste.gif" width="21"></td>
+			<td class="CM_Label">Paste</td>
+		</tr>
+		<tr class="CM_Separator">
+			<td class="CM_Icon"></td>
+			<td class="CM_Label"><div></div></td>
+		</tr>
+		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
+			<td class="CM_Icon"><img height="20" alt="" src="icons/print.gif" width="21"></td>
+			<td class="CM_Label">Print</td>
+		</tr>
+		<tr class="CM_Separator">
+			<td class="CM_Icon"></td>
+			<td class="CM_Label"><div></div></td>
+		</tr>
+		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
+			<td class="CM_Icon"></td>
+			<td class="CM_Label">Do Something</td>
+		</tr>
+		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
+			<td class="CM_Icon"></td>
+			<td class="CM_Label">Just Testing</td>
+		</tr>
+	</table>
+</div>
+*/
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckcoreextensions.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcoreextensions.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckcoreextensions.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckcoreextensions.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckcoreextensions.js
+ * 	Some extensions to the Javascript Core.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Extends the Array object, creating a "addItem" method on it.
+Array.prototype.addItem = function( item )
+{
+	var i = this.length ;
+	this[ i ] = item ;
+	return i ;
+}
+
+Array.prototype.indexOf = function( value )
+{
+	for ( var i = 0 ; i < this.length ; i++ )
+	{
+		if ( this[i] == value )
+			return i ;
+	}
+	return -1 ;
+}
+
+String.prototype.startsWith = function( value )
+{
+	return ( this.substr( 0, value.length ) == value ) ;
+}
+
+// Extends the String object, creating a "endsWith" method on it.
+String.prototype.endsWith = function( value, ignoreCase )
+{
+	var L1 = this.length ;
+	var L2 = value.length ;
+	
+	if ( L2 > L1 )
+		return false ;
+
+	if ( ignoreCase )
+	{
+		var oRegex = new RegExp( value + '$' , 'i' ) ;
+		return oRegex.test( this ) ;
+	}
+	else
+		return ( L2 == 0 || this.substr( L1 - L2, L2 ) == value ) ;
+}
+
+String.prototype.remove = function( start, length )
+{
+	var s = '' ;
+	
+	if ( start > 0 )
+		s = this.substring( 0, start ) ;
+	
+	if ( start + length < this.length )
+		s += this.substring( start + length , this.length ) ;
+		
+	return s ;
+}
+
+String.prototype.trim = function()
+{
+	return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
+}
+
+String.prototype.ltrim = function()
+{
+	return this.replace( /^\s*/g, '' ) ;
+}
+
+String.prototype.rtrim = function()
+{
+	return this.replace( /\s*$/g, '' ) ;
+}
+
+String.prototype.replaceNewLineChars = function( replacement )
+{
+	return this.replace( /\n/g, replacement ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckdebug.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdebug.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckdebug.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdebug.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,39 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckdebug.js
+ * 	Debug window control and operations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKDebug = new Object() ;
+
+if ( FCKConfig.Debug )
+{
+	FCKDebug.Output = function( message, color )
+	{
+		if ( ! FCKConfig.Debug ) return ;
+		
+		if ( message != null && isNaN( message ) )
+			message = message.replace(/</g, "&lt;") ;
+
+		if ( !this.DebugWindow || this.DebugWindow.closed )
+			this.DebugWindow = window.open( 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ;
+		
+		if ( this.DebugWindow.Output)
+			this.DebugWindow.Output( message, color ) ;
+	}
+}
+else
+	FCKDebug.Output = function() {}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckdialog_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdialog_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckdialog_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdialog_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,91 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckdialog_gecko.js
+ * 	Dialog windows operations. (Gecko specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow, resizable )
+{
+	var iTop  = (FCKConfig.ScreenHeight - dialogHeight) / 2 ;
+	var iLeft = (FCKConfig.ScreenWidth  - dialogWidth)  / 2 ;
+
+	var sOption  = "location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,modal=yes,alwaysRaised=yes" +
+		",resizable="  + ( resizable ? 'yes' : 'no' ) +
+		",width="  + dialogWidth +
+		",height=" + dialogHeight +
+		",top="  + iTop +
+		",left=" + iLeft ;
+
+	if ( !parentWindow )
+		parentWindow = window ;
+	
+	var oWindow = parentWindow.open( '', 'FCKeditorDialog_' + dialogName, sOption, true ) ;
+	oWindow.moveTo( iLeft, iTop ) ;
+	oWindow.resizeTo( dialogWidth, dialogHeight ) ;
+	oWindow.focus() ;
+	oWindow.location.href = pageUrl ;
+	
+	oWindow.dialogArguments = dialogInfo ;
+	
+	// On some Gecko browsers (probably over slow connections) the 
+	// "dialogArguments" are not set to the target window so we must
+	// put it in the opener window so it can be used by the target one.
+	parentWindow.FCKLastDialogInfo = dialogInfo ;
+	
+	this.Window = oWindow ;
+	
+	// Try/Catch must be used to avoit an error when using a frameset 
+	// on a different domain: 
+	// "Permission denied to get property Window.releaseEvents".
+	try
+	{
+		window.top.captureEvents( Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS ) ;
+		window.top.parent.addEventListener( 'mousedown', this.CheckFocus, true ) ;
+		window.top.parent.addEventListener( 'mouseup', this.CheckFocus, true ) ;
+		window.top.parent.addEventListener( 'click', this.CheckFocus, true ) ;
+		window.top.parent.addEventListener( 'focus', this.CheckFocus, true ) ;
+	}
+	catch (e)
+	{}
+}
+
+FCKDialog.CheckFocus = function()
+{
+	// It is strange, but we have to check the FCKDialog existence to avoid a 
+	// random error: "FCKDialog is not defined".
+	if ( typeof( FCKDialog ) != "object" )
+		return false ;
+	
+	if ( FCKDialog.Window && !FCKDialog.Window.closed )
+		FCKDialog.Window.focus() ;
+	else
+	{
+		// Try/Catch must be used to avoit an error when using a frameset 
+		// on a different domain: 
+		// "Permission denied to get property Window.releaseEvents".
+		try
+		{
+			window.top.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS) ;
+			window.top.parent.removeEventListener( 'onmousedown', FCKDialog.CheckFocus, true ) ;
+			window.top.parent.removeEventListener( 'mouseup', FCKDialog.CheckFocus, true ) ;
+			window.top.parent.removeEventListener( 'click', FCKDialog.CheckFocus, true ) ;
+			window.top.parent.removeEventListener( 'onfocus', FCKDialog.CheckFocus, true ) ;
+		}
+		catch (e)
+		{}
+	}
+	return false ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckdialog_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdialog_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckdialog_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdialog_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,26 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckdialog_ie.js
+ * 	Dialog windows operations. (IE specific implementations)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow )
+{
+	if ( !parentWindow )
+		parentWindow = window ;
+
+	parentWindow.showModalDialog( pageUrl, dialogInfo, "dialogWidth:" + dialogWidth + "px;dialogHeight:" + dialogHeight + "px;help:no;scroll:no;status:no") ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckdialog.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdialog.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckdialog.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckdialog.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,34 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckdialog.js
+ * 	Dialog windows operations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKDialog = new Object() ;
+
+// This method opens a dialog window using the standard dialog template.
+FCKDialog.OpenDialog = function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
+{
+	// Setup the dialog info.
+	var oDialogInfo = new Object() ;
+	oDialogInfo.Title = dialogTitle ;
+	oDialogInfo.Page = dialogPage ;
+	oDialogInfo.Editor = window ;
+	oDialogInfo.CustomValue = customValue ;		// Optional
+	
+	var sUrl = FCKConfig.BasePath + 'fckdialog.html' ;
+	this.Show( oDialogInfo, dialogName, sUrl, width, height, parentWindow, resizable ) ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,66 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck.js
+ * 	Creation and initialization of the "FCK" object. This is the main object
+ * 	that represents an editor instance.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// FCK represents the active editor instance
+var FCK = new Object() ;
+FCK.Name			= FCKURLParams[ 'InstanceName' ] ;
+
+FCK.Status			= FCK_STATUS_NOTLOADED ;
+FCK.EditMode		= FCK_EDITMODE_WYSIWYG ;
+
+// There is a bug on IE... getElementById returns any META tag that has the
+// name set to the ID you are looking for. So the best way in to get the array
+// by names and look for the correct one.
+// As ASP.Net generates a ID that is different from the Name, we must also
+// look for the field based on the ID.
+
+var aElements = window.parent.document.getElementsByName( FCK.Name ) ;
+aElements[ aElements.length ] = window.parent.document.getElementById( FCK.Name ) ;
+var i = 0;
+while ( ( FCK.LinkedField = aElements[i++] ) )
+{
+	if ( FCK.LinkedField.tagName == 'INPUT' || FCK.LinkedField.tagName == 'TEXTAREA' )
+		break ;
+}
+
+var FCKTempBin = new Object() ;
+FCKTempBin.Elements = new Array() ;
+
+FCKTempBin.AddElement = function( element )
+{
+	var iIndex = FCKTempBin.Elements.length ;
+	FCKTempBin.Elements[ iIndex ] = element ;
+	return iIndex ;
+}
+
+FCKTempBin.RemoveElement = function( index )
+{
+	var e = FCKTempBin.Elements[ index ] ;
+	FCKTempBin.Elements[ index ] = null ;
+	return e ;
+}
+
+FCKTempBin.Reset = function()
+{
+	var i = 0 ;
+	while ( i < FCKTempBin.Elements.length )
+		FCKTempBin.Elements[ i++ ] == null ;
+	FCKTempBin.Elements.length = 0 ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcklanguagemanager.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcklanguagemanager.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcklanguagemanager.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcklanguagemanager.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,95 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcklanguagemanager.js
+ * 	Defines the FCKLanguageManager object that is used for language 
+ * 	operations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKLanguageManager.GetActiveLanguage = function()
+{
+	if ( FCKConfig.AutoDetectLanguage )
+	{
+		var sUserLang ;
+		
+		// IE accepts "navigator.userLanguage" while Gecko "navigator.language".
+		if ( navigator.userLanguage )
+			sUserLang = navigator.userLanguage.toLowerCase() ;
+		else if ( navigator.language )
+			sUserLang = navigator.language.toLowerCase() ;
+		else
+		{
+			// Firefox 1.0 PR has a bug: it doens't support the "language" property.
+			return FCKConfig.DefaultLanguage ;
+		}
+		
+		// Some language codes are set in 5 characters, 
+		// like "pt-br" for Brasilian Portuguese.
+		if ( sUserLang.length >= 5 )
+		{
+			sUserLang = sUserLang.substr(0,5) ;
+			if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+		}
+		
+		// If the user's browser is set to, for example, "pt-br" but only the 
+		// "pt" language file is available then get that file.
+		if ( sUserLang.length >= 2 )
+		{
+			sUserLang = sUserLang.substr(0,2) ;
+			if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+		}
+	}
+	
+	return this.DefaultLanguage ;
+}
+
+FCKLanguageManager.TranslateElements = function( targetDocument, tag, propertyToSet )
+{
+	var e = targetDocument.getElementsByTagName(tag) ;
+
+	for ( var i = 0 ; i < e.length ; i++ )
+	{
+		var sKey = e[i].getAttribute( 'fckLang' ) ;
+		
+		if ( sKey )
+		{
+			var s = FCKLang[ sKey ] ;
+			if ( s ) 
+				eval( 'e[i].' + propertyToSet + ' = s' ) ;
+		}
+	}
+}
+
+FCKLanguageManager.TranslatePage = function( targetDocument )
+{
+	this.TranslateElements( targetDocument, 'INPUT', 'value' ) ;
+	this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ;
+	this.TranslateElements( targetDocument, 'LABEL', 'innerHTML' ) ;
+	this.TranslateElements( targetDocument, 'OPTION', 'innerHTML' ) ;
+}
+
+if ( FCKLanguageManager.AvailableLanguages[ FCKConfig.DefaultLanguage ] )
+	FCKLanguageManager.DefaultLanguage = FCKConfig.DefaultLanguage ;
+else
+	FCKLanguageManager.DefaultLanguage = 'en' ;
+
+FCKLanguageManager.ActiveLanguage = new Object() ;
+FCKLanguageManager.ActiveLanguage.Code = FCKLanguageManager.GetActiveLanguage() ;
+FCKLanguageManager.ActiveLanguage.Name = FCKLanguageManager.AvailableLanguages[ FCKLanguageManager.ActiveLanguage.Code ] ;
+
+FCK.Language = FCKLanguageManager ;
+
+// Load the language file and start the editor.
+LoadLanguageFile() ;
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_last.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_last.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_last.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_last.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,67 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_last.js
+ * 	These are the last script lines executed in the editor loading process.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// This is the last file loaded to complete the editor initialization and activation
+
+// Just check if the document direction has been correctly applied (at fck_onload.js).
+if ( FCKLang && window.document.dir.toLowerCase() != FCKLang.Dir.toLowerCase() )
+	window.document.dir = FCKLang.Dir ;
+	
+// Activate pasting operations.
+if ( FCKConfig.ForcePasteAsPlainText )
+	FCK.Events.AttachEvent( "OnPaste", FCK.Paste ) ;
+
+// START iCM Modifications
+// Override default ENTER key handler for Gecko/Mozilla so 
+// it acts more like IE browsers.
+/*
+if ( FCKBrowserInfo.IsGecko && !FCKConfig.UseBROnCarriageReturn )
+{
+	FCK.Events.AttachEvent( "OnEnter", FCK.Enter ) ;
+	FCK.Events.AttachEvent( "OnBackSpace", FCK.BackSpace ) ;
+}
+*/
+// END iCM Modifications
+
+// Load Plugins.
+if ( FCKPlugins.ItemsCount > 0 )
+{
+	FCKScriptLoader.OnEmpty = CompleteLoading ;
+	FCKPlugins.Load() ;
+}
+else
+	CompleteLoading() ;
+
+function CompleteLoading()
+{
+	// Load the Toolbar
+	FCKToolbarSet.Name = FCKURLParams['Toolbar'] || 'Default' ;
+	FCKToolbarSet.Load( FCKToolbarSet.Name ) ;
+	FCKToolbarSet.Restart() ;
+
+	FCK.AttachToOnSelectionChange( FCKToolbarSet.RefreshItemsState ) ;
+	//FCK.AttachToOnSelectionChange( FCKSelection._Reset ) ;
+
+	FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+	// Call the special "FCKeditor_OnComplete" function that should be present in 
+	// the HTML page where the editor is located.
+	if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+		window.parent.FCKeditor_OnComplete( FCK ) ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcknamespace.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcknamespace.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcknamespace.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcknamespace.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcknamespace.js
+ * 	This file declares the namespace (object holder) where the common editor 
+ * 	objects and classes are defined.
+ * 	The namespace is located in the page the editor is running on, so it is
+ * 	shared by all editor instances.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var NS ;
+
+if ( !( NS = window.parent.__FCKeditorNS ) )
+	NS = window.parent.__FCKeditorNS = new Object() ;
+
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fck_onload.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_onload.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fck_onload.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fck_onload.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,228 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fck_onload.js
+ * 	This is the script that is called when the editor page is loaded inside
+ * 	its IFRAME. It's the editor startup.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Disable the context menu in the editor (areas outside the editor area).
+function Window_OnContextMenu( e )
+{
+	if ( e )
+		e.preventDefault() ;	// The Gecko way.
+	else
+	{
+		if ( event.srcElement == document.getElementById('eSourceField') )
+			return true ;
+	}
+
+	return false ;				// The IE way.
+}
+window.document.oncontextmenu = Window_OnContextMenu ;
+
+// Gecko browsers doens't calculate well that IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko )
+{
+	function Window_OnResize()
+	{
+		var oFrame = document.getElementById('eEditorArea') ;
+		oFrame.height = 0 ;
+
+		var oCell = document.getElementById( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? 'eWysiwygCell' : 'eSource' ) ;
+		var iHeight = oCell.offsetHeight ;
+
+		oFrame.height = iHeight - 2 ;
+	}
+	window.onresize = Window_OnResize ;
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+	var aCleanupDocs = new Array() ;
+	aCleanupDocs[0] = document ;
+
+	// On IE, some circular references must be cleared to avoid memory leak.
+	function Window_OnBeforeUnload()
+	{
+//		if ( typeof( FCKToolbarSet ) != 'undefined' )
+//			FCKToolbarSet.Collapse() ;
+
+		var d, e ;
+
+		var j = 0 ;
+		while ( ( d = aCleanupDocs[j++] ) )
+		{
+			var i = 0 ;
+			while ( ( e = d.getElementsByTagName("DIV").item(i++) ) )
+			{
+				if ( e.FCKToolbarButton )
+					e.FCKToolbarButton = null ;
+
+				if ( e.FCKSpecialCombo )
+					e.FCKSpecialCombo = null ;
+
+				if ( e.Command )
+					e.Command = null ;
+			}
+
+			i = 0 ;
+			while ( ( e = d.getElementsByTagName("TR").item(i++) ) )
+			{
+				if ( e.FCKContextMenuItem )
+					e.FCKContextMenuItem = null ;
+			}
+
+			aCleanupDocs[j] = null ;
+		}
+		
+		if ( typeof( FCKTempBin ) != 'undefined' )
+			FCKTempBin.Reset() ;
+	}
+	window.attachEvent( "onunload", Window_OnBeforeUnload ) ;
+}
+
+// The editor startup follows these steps:
+//		1. Load the editor main page (fckeditor.html).
+//		2. Load the main configuration file (fckconfig.js)
+//		3. Process the configurations set directly in the page code (just load then).
+//		4. Override the configurations with the custom config file (if set).
+//		5. Override the configurations with that ones set directly in the page code.
+//		6. Load the editor skin styles CSS files.
+//		7. Load the first part of tha main scripts.
+//		8. Load the language file.
+//		9. Start the editor.
+
+// Start the editor as soon as the window is loaded.
+function Window_OnLoad()
+{
+	// There is a bug on Netscape when rendering the frame. It goes over the
+	// right border. So we must correct it.
+	if ( FCKBrowserInfo.IsNetscape )
+		document.getElementById('eWysiwygCell').style.paddingRight = '2px' ;
+
+	LoadConfigFile() ;
+}
+window.onload = Window_OnLoad ;
+
+function LoadConfigFile()
+{
+	FCKScriptLoader.OnEmpty = ProcessHiddenField ;
+
+	// First of all load the configuration file.
+	FCKScriptLoader.AddScript( '../fckconfig.js' ) ;
+}
+
+function ProcessHiddenField()
+{
+	FCKConfig.ProcessHiddenField() ;
+
+	LoadCustomConfigFile() ;
+}
+
+function LoadCustomConfigFile()
+{
+	// Load the custom configurations file (if defined).
+	if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+	{
+		// Wait for the configuration file to be loaded to call the "LoadPageConfig".
+		FCKScriptLoader.OnEmpty = LoadPageConfig ;
+
+		FCKScriptLoader.AddScript( FCKConfig.CustomConfigurationsPath ) ;
+	}
+	else
+	{
+		// Load the page defined configurations immediately.
+		LoadPageConfig() ;
+	}
+}
+
+function LoadPageConfig()
+{
+	FCKConfig.LoadPageConfig() ;
+
+	// Load the styles for the configured skin.
+	LoadStyles() ;
+}
+
+function LoadStyles()
+{
+	if( window.console ) window.console.log( 'LoadStyles()' ) ;	// @Packager.Compactor.RemoveLine
+
+	FCKScriptLoader.OnEmpty = LoadScripts ;
+
+	// Load the active skin CSS.
+	FCKScriptLoader.AddScript( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+	FCKScriptLoader.AddScript( FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
+}
+
+function LoadScripts()
+{
+	if( window.console ) window.console.log( 'LoadScripts()' ) ;	// @Packager.Compactor.RemoveLine
+
+	FCKScriptLoader.OnEmpty = null ;
+
+	// @Packager.Compactor.Remove.Start
+	var sSuffix = FCKBrowserInfo.IsIE ? 'ie' : 'gecko' ;
+
+	FCKScriptLoader.AddScript( '_source/internals/fckdebug.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fcktools.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fckregexlib.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fcklanguagemanager.js' ) ;
+	FCKScriptLoader.AddScript( '_source/classes/fckevents.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fckxhtmlentities.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fckxhtml.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fckcodeformatter.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fckundo_' + sSuffix + '.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fck_1.js' ) ;
+	FCKScriptLoader.AddScript( '_source/internals/fck_1_' + sSuffix + '.js' ) ;
+	// @Packager.Compactor.Remove.End
+
+	/* @Packager.Compactor.RemoveLine
+	if ( FCKBrowserInfo.IsIE )
+		FCKScriptLoader.AddScript( 'js/fckeditorcode_ie_1.js' ) ;
+	else
+		FCKScriptLoader.AddScript( 'js/fckeditorcode_gecko_1.js' ) ;
+	@Packager.Compactor.RemoveLine */
+}
+
+function LoadLanguageFile()
+{
+	if( window.console ) window.console.log( 'LoadLanguageFile()' ) ;	// @Packager.Compactor.RemoveLine
+
+	FCKScriptLoader.OnEmpty = LoadEditor ;
+
+	if( window.console ) window.console.log( 'Active Language: ' + FCKLanguageManager.ActiveLanguage.Code ) ;	// @Packager.Compactor.RemoveLine
+
+	FCKScriptLoader.AddScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+}
+
+function LoadEditor()
+{
+	if( window.console ) window.console.log( 'LoadEditor()' ) ;	// @Packager.Compactor.RemoveLine
+
+	// Removes the OnEmpty listener.
+	FCKScriptLoader.OnEmpty = null ;
+
+	// Correct the editor layout to the correct language direction.
+	if ( FCKLang )
+		window.document.dir = FCKLang.Dir ;
+
+	// Starts the editor.
+	FCK.StartEditor() ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckplugins.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckplugins.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckplugins.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckplugins.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,44 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckplugins.js
+ * 	Defines the FCKPlugins object that is responsible for loading the Plugins.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKPlugins = FCK.Plugins = new Object() ;
+FCKPlugins.ItemsCount = 0 ;
+FCKPlugins.Loaded = false ;
+FCKPlugins.Items = new Object() ;
+
+// Set the defined plugins scripts paths.
+for ( var i = 0 ; i < FCKConfig.Plugins.Items.length ; i++ )
+{
+	var oItem = FCKConfig.Plugins.Items[i] ;
+	FCKPlugins.Items[ oItem[0] ] = new FCKPlugin( oItem[0], oItem[1], oItem[2] ) ;
+	FCKPlugins.ItemsCount++ ;
+}
+	
+FCKPlugins.Load = function()
+{
+	// Load all items.
+	for ( var s in this.Items )
+		this.Items[s].Load() ;
+	
+	// Mark as loaded.
+	this.Loaded = true ;
+	
+	// This is a self destroyable function (must be called once).
+	FCKPlugins.Load = null ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckregexlib.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckregexlib.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckregexlib.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckregexlib.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckregexlib.js
+ * 	These are some Regular Expresions used by the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKRegexLib = new Object() ;
+
+// This is the Regular expression used by the SetHTML method for the "&apos;" entity.
+FCKRegexLib.AposEntity		= /&apos;/gi ;
+
+// Used by the Styles combo to identify styles that can't be applied to text.
+FCKRegexLib.ObjectElements	= /^(?:IMG|TABLE|TR|TD|INPUT|SELECT|TEXTAREA|HR|OBJECT)$/i ;
+
+// START iCM MODIFICATIONS
+// Added TABLE and CAPTION to the block elements for ENTER key handling
+// Block Elements.
+/*
+FCKRegexLib.BlockElements	= /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD|TABLE|CAPTION)$/i ;
+*/
+// END iCM MODIFICATIONS
+FCKRegexLib.BlockElements	= /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD)$/i ;
+
+// Elements marked as empty "Empty" in the XHTML DTD.
+FCKRegexLib.EmptyElements	= /^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i ;
+
+// List all named commands (commands that can be interpreted by the browser "execCommand" method.
+FCKRegexLib.NamedCommands	= /^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i ;
+
+FCKRegexLib.BodyContents	= /([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i ;
+
+// Temporary text used to solve some browser specific limitations.
+FCKRegexLib.ToReplace		= /___fcktoreplace:([\w]+)/ig ;
+
+// Get the META http-equiv attribute from the tag.
+FCKRegexLib.MetaHttpEquiv	= /http-equiv\s*=\s*["']?([^"' ]+)/i ;
+
+FCKRegexLib.HasBaseTag		= /<base /i ;
+
+FCKRegexLib.HeadOpener		= /<head\s?[^>]*>/i ;
+FCKRegexLib.HeadCloser		= /<\/head\s*>/i ;
+
+FCKRegexLib.TableBorderClass = /\s*FCK__ShowTableBorders\s*/ ;
+
+// Validate element names.
+FCKRegexLib.ElementName = /^[A-Za-z_:][\w.-:]*$/ ;
+
+// Used in conjuction with the FCKConfig.ForceSimpleAmpersand configuration option.
+FCKRegexLib.ForceSimpleAmpersand = /___FCKAmp___/g ;
+
+// Get the closing parts of the tags with no closing tags, like <br/>... gets the "/>" part.
+FCKRegexLib.SpaceNoClose = /\/>/g ;
+
+FCKRegexLib.EmptyParagraph = /^<(p|div)>\s*<\/\1>$/i ;
+
+FCKRegexLib.TagBody = /></ ;
+
+// START iCM MODIFICATIONS
+/*
+// HTML table cell elements
+FCKRegexLib.TableCellElements	= /^(?:TD|TH)$/i ;
+// Block elements that can themselves contain block elements - used within the FCKTools.SplitNode
+// function. I know BODY isn't really a block element but means can do the check in one hit.
+FCKRegexLib.SpecialBlockElements	= /^(?:BODY|TH|TD|CAPTION)$/i ;
+// Block elements that can validly contain a nested table. Ditto above for the BODY entry.
+FCKRegexLib.TableBlockElements	= /^(?:BODY|DIV|LI|TD|TH)$/i ;
+// List elements
+FCKRegexLib.ListElements	= /^(?:OL|UL)$/i ;
+// Used to remove empty tags after the split process used on ENTER key press
+FCKRegexLib.EmptyElement = /<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|SPAN|A)[^\>]*>\s*<\/\1>/gi ;
+*/
+// END iCM MODIFICATIONS
+
+FCKRegexLib.StrongOpener = /<STRONG([ \>])/gi ;
+FCKRegexLib.StrongCloser = /<\/STRONG>/gi ;
+FCKRegexLib.EmOpener = /<EM([ \>])/gi ;
+FCKRegexLib.EmCloser = /<\/EM>/gi ;
+
+FCKRegexLib.GeckoEntitiesMarker = /#\?-\:/g ;
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckscriptloader.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckscriptloader.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckscriptloader.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckscriptloader.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,156 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckscriptloader.js
+ * 	Defines the FCKScriptLoader object that is used to dynamically load
+ * 	scripts in the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// This object is used to download scripts and css files sequentialy.
+// A file download is not started until the previous file was not completelly
+// downloaded.
+var FCKScriptLoader = new Object() ;
+FCKScriptLoader.IsLoading = false ;
+FCKScriptLoader.Queue = new Array() ;
+
+// Adds a script or css to the queue.
+FCKScriptLoader.AddScript = function( scriptPath )
+{
+	FCKScriptLoader.Queue[ FCKScriptLoader.Queue.length ] = scriptPath ;
+	
+	if ( !this.IsLoading )
+		this.CheckQueue() ;
+}
+
+// Checks the queue to see if there is something to load.
+// This function should not be called by code. It's a internal function
+// that's called recursively.
+FCKScriptLoader.CheckQueue = function() 
+{
+	// Check if the queue is not empty.
+	if ( this.Queue.length > 0 )
+	{
+		this.IsLoading = true ;
+		
+		// Get the first item in the queue
+		var sScriptPath = this.Queue[0] ;
+		
+		// Removes the first item from the queue
+		var oTempArray = new Array() ;
+		for ( i = 1 ; i < this.Queue.length ; i++ )
+			oTempArray[ i - 1 ] = this.Queue[ i ] ;
+		this.Queue = oTempArray ;
+		
+		this.LoadFile( sScriptPath ) ;
+	}
+	else
+	{
+		this.IsLoading = false ;
+		
+		// Call the "OnEmpty" event.
+		if ( this.OnEmpty ) 
+			this.OnEmpty() ;
+	}
+}
+
+if ( FCKBrowserInfo.IsSafari )
+{
+	FCKScriptLoader.LoadFile = function( filePath ) 
+	{
+		if ( filePath.lastIndexOf( '.css' ) > 0 )
+		{
+			this.CheckQueue() ;
+			return ;
+		}
+		
+		var oXmlRequest = new XMLHttpRequest() ;
+		
+		// Load the script synchronously.
+		oXmlRequest.open( "GET", filePath, false ) ;
+		oXmlRequest.send( null ) ;
+		
+		// Evaluate the script.
+		if ( oXmlRequest.status == 200 )
+		{
+			try
+			{
+				eval( oXmlRequest.responseText ) ;
+			}
+			catch ( e )
+			{
+				alert( 'Error parsing ' + filePath + ': ' + e.message ) ;
+			}
+		}
+		else
+			alert( 'Error loading ' + filePath ) ;
+			
+		this.CheckQueue() ;
+	}
+}
+else
+{
+	FCKScriptLoader.LoadFile = function( filePath ) 
+	{
+		//window.status = ( 'Loading ' + filePath + '...' ) ;
+
+		// Dynamically load the file (it can be a CSS or a JS)
+		var e ;
+		
+		// If is a CSS
+		if ( filePath.lastIndexOf( '.css' ) > 0 )
+		{
+			e = document.createElement( 'LINK' ) ;
+			e.rel	= 'stylesheet' ;
+			e.type	= 'text/css' ;
+		}
+		// It is a JS
+		else
+		{
+			e = document.createElement( "script" ) ;
+				e.type	= "text/javascript" ;
+		}
+		
+		// Add the new object to the HEAD.
+		document.getElementsByTagName("head")[0].appendChild( e ) ; 
+
+		// Start downloading it.
+		if ( e.tagName == 'LINK' )
+		{
+			// IE must wait for the file to be downloaded.
+			if ( FCKBrowserInfo.IsIE )
+				e.onload = FCKScriptLoader_OnLoad ;
+			// Gecko doens't fire any event when the CSS is loaded, so we 
+			// can't wait for it.
+			else
+				FCKScriptLoader.CheckQueue() ;
+				
+			e.href = filePath ;
+		}
+		else
+		{
+			// Gecko fires the "onload" event and IE fires "onreadystatechange"
+			e.onload = e.onreadystatechange = FCKScriptLoader_OnLoad ;
+			e.src = filePath ;
+		}
+	}
+
+	function FCKScriptLoader_OnLoad()
+	{
+		// Gecko doesn't have a "readyState" property
+		if ( this.tagName == 'LINK' || !this.readyState || this.readyState == 'loaded' )
+			// Load the next script available in the queue
+			FCKScriptLoader.CheckQueue() ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckselection_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckselection_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckselection_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckselection_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,164 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckselection_gecko.js
+ * 	Active selection functions. (Gecko specific implementation)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Get the selection type (like document.select.type in IE).
+FCKSelection.GetType = function()
+{
+//	if ( ! this._Type )
+//	{
+		// By default set the type to "Text".
+		this._Type = 'Text' ;
+
+		// Check if the actual selection is a Control (IMG, TABLE, HR, etc...).
+		var oSel = FCK.EditorWindow.getSelection() ;
+		if ( oSel && oSel.rangeCount == 1 )
+		{
+			var oRange = oSel.getRangeAt(0) ;
+			if ( oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 )
+				this._Type = 'Control' ;
+		}
+//	}
+	return this._Type ;
+}
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+	if ( this.GetType() == 'Control' )
+	{
+		var oSel = FCK.EditorWindow.getSelection() ;
+		return oSel.anchorNode.childNodes[ oSel.anchorOffset ] ;
+	}
+}
+
+FCKSelection.GetParentElement = function()
+{
+	if ( this.GetType() == 'Control' )
+		return FCKSelection.GetSelectedElement().parentElement ;
+	else
+	{
+		var oSel = FCK.EditorWindow.getSelection() ;
+		if ( oSel )
+		{
+			var oNode = oSel.anchorNode ;
+
+			while ( oNode && oNode.nodeType != 1 )
+				oNode = oNode.parentNode ;
+
+			return oNode ;
+		}
+	}
+}
+
+FCKSelection.SelectNode = function( element )
+{
+	FCK.Focus() ;
+
+	var oRange = FCK.EditorDocument.createRange() ;
+	oRange.selectNode( element ) ;
+
+	var oSel = FCK.EditorWindow.getSelection() ;
+	oSel.removeAllRanges() ;
+	oSel.addRange( oRange ) ;
+}
+
+FCKSelection.Collapse = function( toStart )
+{
+	var oSel = FCK.EditorWindow.getSelection() ;
+	
+	if ( toStart == null || toStart === true )
+		oSel.collapseToStart() ;
+	else
+		oSel.collapseToEnd() ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+	var oContainer = this.GetSelectedElement() ;
+	if ( ! oContainer && FCK.EditorWindow )
+	{
+		try		{ oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; }
+		catch(e){}
+	}
+
+	while ( oContainer )
+	{
+		if ( oContainer.nodeType == 1 && oContainer.tagName == nodeTagName ) return true ;
+		oContainer = oContainer.parentNode ;
+	}
+
+	return false ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+	var oNode ;
+
+	var oContainer = this.GetSelectedElement() ;
+	if ( ! oContainer )
+		oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ;
+
+	while ( oContainer )
+	{
+		if ( oContainer.tagName == nodeTagName ) 
+			return oContainer ;
+		oContainer = oContainer.parentNode ;
+	}
+	return null ;
+}
+
+FCKSelection.Delete = function()
+{
+	// Gets the actual selection.
+	var oSel = FCK.EditorWindow.getSelection() ;
+
+	// Deletes the actual selection contents.
+	for ( var i = 0 ; i < oSel.rangeCount ; i++ )
+	{
+		oSel.getRangeAt(i).deleteContents() ;
+	}
+
+	return oSel ;
+}
+// START iCM MODIFICATIONS
+/*
+// Move the cursor position (the selection point) to a specific offset within a specific node
+// If no offset specified, the start of the node is assumed
+FCKSelection.SetCursorPosition = function ( oNode, nOffset )
+{
+	if ( typeof nOffset == "undefined" ) nOffset = 0 ;
+
+	var oSel = FCK.EditorWindow.getSelection() ;
+	var oRange = FCK.EditorDocument.createRange() ;
+	
+	oRange.setStart( oNode, nOffset ) ;
+	oRange.collapse( true ) ;
+	
+	oSel.removeAllRanges() ;
+	oSel.addRange( oRange );
+	
+	if ( oNode.scrollIntoView )
+		oNode.scrollIntoView( false );	
+}
+*/
+// END iCM MODIFICATIONS
+
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckselection_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckselection_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckselection_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckselection_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,150 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckselection_ie.js
+ * 	Active selection functions. (IE specific implementation)
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Get the selection type.
+FCKSelection.GetType = function()
+{
+	return FCK.EditorDocument.selection.type ;
+}
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+	if ( this.GetType() == 'Control' )
+	{
+		var oRange = FCK.EditorDocument.selection.createRange() ;
+
+		if ( oRange && oRange.item )
+			return FCK.EditorDocument.selection.createRange().item(0) ;
+	}
+}
+
+FCKSelection.GetParentElement = function()
+{
+	switch ( this.GetType() )
+	{
+		case 'Control' :
+			return FCKSelection.GetSelectedElement().parentElement ;
+		case 'None' :
+			return ;
+		default :
+			return FCK.EditorDocument.selection.createRange().parentElement() ;
+	}
+}
+
+FCKSelection.SelectNode = function( node )
+{
+	FCK.Focus() ;
+	FCK.EditorDocument.selection.empty() ;
+	var oRange = FCK.EditorDocument.selection.createRange() ;
+	oRange.moveToElementText( node ) ;
+	oRange.select() ;
+}
+
+FCKSelection.Collapse = function( toStart )
+{
+	FCK.Focus() ;
+	var oRange = FCK.EditorDocument.selection.createRange() ;
+	oRange.collapse( toStart == null || toStart === true ) ;
+	oRange.select() ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+	var oContainer ;
+
+	if ( FCK.EditorDocument.selection.type == "Control" )
+	{
+		oContainer = this.GetSelectedElement() ;
+	}
+	else
+	{
+		var oRange  = FCK.EditorDocument.selection.createRange() ;
+		oContainer = oRange.parentElement() ;
+	}
+
+	while ( oContainer )
+	{
+		if ( oContainer.tagName == nodeTagName ) return true ;
+		oContainer = oContainer.parentNode ;
+	}
+
+	return false ;
+}
+
+// The "nodeTagName" parameter must be UPPER CASE.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+	var oNode ;
+
+	if ( FCK.EditorDocument.selection.type == "Control" )
+	{
+		var oRange = FCK.EditorDocument.selection.createRange() ;
+		for ( i = 0 ; i < oRange.length ; i++ )
+		{
+			if (oRange(i).parentNode)
+			{
+				oNode = oRange(i).parentNode ;
+				break ;
+			}
+		}
+	}
+	else
+	{
+		var oRange  = FCK.EditorDocument.selection.createRange() ;
+		oNode = oRange.parentElement() ;
+	}
+
+	while ( oNode && oNode.nodeName != nodeTagName )
+		oNode = oNode.parentNode ;
+
+	return oNode ;
+}
+
+FCKSelection.Delete = function()
+{
+	// Gets the actual selection.
+	var oSel = FCK.EditorDocument.selection ;
+
+	// Deletes the actual selection contents.
+	if ( oSel.type.toLowerCase() != "none" )
+	{
+		oSel.clear() ;
+	}
+
+	return oSel ;
+}
+// START iCM Modifications
+/*
+// Move the cursor position (the selection point) to a specific offset within a specific node
+// If no offset specified, the start of the node is assumed
+FCKSelection.SetCursorPosition = function ( oNode, nOffset )
+{
+	if ( typeof nOffset == "undefined" ) nOffset = 0 ;
+
+	FCK.Selection.SelectNode( oNode ) ; // Doesn't handle offsets currently but offset always zero at mo
+	FCK.Selection.Collapse( true ) ;
+	
+	oNode.scrollIntoView( false );	
+}
+*/
+// END iCM Modifications
+
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckselection.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckselection.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckselection.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckselection.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,22 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckselection.js
+ * 	Active selection functions.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKSelection = new Object() ;
+
+FCK.Selection = FCKSelection ;
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktablehandler_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktablehandler_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktablehandler_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktablehandler_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,48 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktablehandler_gecko.js
+ * 	Manage table operations (IE specific).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+	var aCells = new Array() ;
+
+	var oSelection = FCK.EditorWindow.getSelection() ;
+
+	// If the selection is a text.
+	if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 )
+	{
+		var oParent = FCKTools.GetElementAscensor( oSelection.anchorNode, 'TD' ) ;
+		
+		if ( oParent )
+		{
+			aCells[0] = oParent ;
+			return aCells ;
+		}	
+	}
+
+	for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
+	{
+		var oRange = oSelection.getRangeAt(i) ;
+		var oCell = oRange.startContainer.childNodes[ oRange.startOffset ] ;
+		
+		if ( oCell.tagName == 'TD' )
+			aCells[aCells.length] = oCell ;
+	}
+
+	return aCells ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktablehandler_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktablehandler_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktablehandler_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktablehandler_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,53 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktablehandler_ie.js
+ * 	Manage table operations (IE specific).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+	var aCells = new Array() ;
+
+	var oRange = FCK.EditorDocument.selection.createRange() ;
+	var oParent = oRange.parentElement() ;
+	
+	if ( oParent && oParent.tagName == "TD" )
+		aCells[0] = oParent ;
+	else
+	{
+		var oParent = FCKSelection.MoveToAncestorNode( "TABLE" ) ;
+		
+		if ( oParent )
+		{
+			// Loops throw all cells checking if the cell is, or part of it, is inside the selection
+			// and then add it to the selected cells collection.
+			for ( var i = 0 ; i < oParent.cells.length ; i++ )
+			{
+				var oCellRange = FCK.EditorDocument.selection.createRange() ;
+				oCellRange.moveToElementText( oParent.cells[i] ) ;
+				
+				if ( oRange.inRange( oCellRange ) 
+					|| ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
+					|| ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
+				{
+					aCells[aCells.length] = oParent.cells[i] ;
+				}
+			}
+		}
+	}
+	
+	return aCells ;
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktablehandler.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktablehandler.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktablehandler.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktablehandler.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,357 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktablehandler.js
+ * 	Manage table operations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKTableHandler = new Object() ;
+
+FCKTableHandler.InsertRow = function()
+{
+	// Get the row where the selection is placed in.	
+	var oRow = FCKSelection.MoveToAncestorNode("TR") ;
+	if ( !oRow ) return ;
+
+	// Create a clone of the row.
+	var oNewRow = oRow.cloneNode( true ) ;
+
+	// Insert the new row (copy) before of it.
+	oRow.parentNode.insertBefore( oNewRow, oRow ) ;
+
+	// Clean the row (it seems that the new row has been added after it).
+	FCKTableHandler.ClearRow( oRow ) ;
+}
+
+FCKTableHandler.DeleteRows = function( row )
+{
+	// If no row has been passed as a parameer,
+	// then get the row where the selection is placed in.	
+	if ( !row )
+		row = FCKSelection.MoveToAncestorNode("TR") ;
+	if ( !row ) return ;
+
+	// Get the row's table.	
+	var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
+
+	// If just one row is available then delete the entire table.
+	if ( oTable.rows.length == 1 ) 
+	{
+		FCKTableHandler.DeleteTable( oTable ) ;
+		return ;
+	}
+
+	// Delete the row.
+	row.parentNode.removeChild( row ) ;
+}
+
+FCKTableHandler.DeleteTable = function( table )
+{
+	// If no table has been passed as a parameer,
+	// then get the table where the selection is placed in.	
+	if ( !table )
+		table = FCKSelection.MoveToAncestorNode("TABLE") ;
+	if ( !table ) return ;
+
+	// Delete the table.
+	table.parentNode.removeChild( table ) ;
+}
+
+FCKTableHandler.InsertColumn = function()
+{
+	// Get the cell where the selection is placed in.
+	var oCell = FCKSelection.MoveToAncestorNode("TD") ;
+	if ( !oCell )
+	    oCell =  FCKSelection.MoveToAncestorNode("TH") ;
+
+	if ( !oCell ) return ;
+	
+	// Get the cell's table.
+	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+	// Get the index of the column to be created (based on the cell).
+	var iIndex = oCell.cellIndex + 1 ;
+
+	// Loop throw all rows available in the table.
+	for ( var i = 0 ; i < oTable.rows.length ; i++ )
+	{
+		// Get the row.
+		var oRow = oTable.rows[i] ;
+	
+		// If the row doens't have enought cells, ignore it.
+		if ( oRow.cells.length < iIndex )
+			continue ;
+		
+		oCell = oRow.cells[iIndex-1].cloneNode(false) ;
+		
+		if ( FCKBrowserInfo.IsGecko )
+			oCell.innerHTML = FCKBrowserInfo.IsGecko ? GECKO_BOGUS : '' ;
+		
+		// Get the cell that is placed in the new cell place.
+		var oBaseCell = oRow.cells[iIndex] ;
+
+		// If the cell is available (we are not in the last cell of the row).
+		if ( oBaseCell )
+			oRow.insertBefore( oCell, oBaseCell ) ;	// Insert the new cell just before of it.
+		else
+			oRow.appendChild( oCell ) ;				// Append the cell at the end of the row.
+	}
+}
+
+FCKTableHandler.DeleteColumns = function()
+{
+	// Get the cell where the selection is placed in.
+	var oCell = FCKSelection.MoveToAncestorNode("TD") ;
+	if ( !oCell ) return ;
+	
+	// Get the cell's table.	
+	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+	// Get the cell index.
+	var iIndex = oCell.cellIndex ;
+
+	// Loop throw all rows (from down to up, because it's possible that some
+	// rows will be deleted).
+	for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )
+	{
+		// Get the row.
+		var oRow = oTable.rows[i] ;
+		
+		// If the cell to be removed is the first one and the row has just one cell.
+		if ( iIndex == 0 && oRow.cells.length == 1 )
+		{
+			// Remove the entire row.
+			FCKTableHandler.DeleteRows( oRow ) ;
+			continue ;
+		}
+		
+		// If the cell to be removed exists the delete it.
+		if ( oRow.cells[iIndex] )
+			oRow.removeChild( oRow.cells[iIndex] ) ;
+	}
+}
+
+FCKTableHandler.InsertCell = function( cell )
+{
+	// Get the cell where the selection is placed in.
+	var oCell = cell ? cell : FCKSelection.MoveToAncestorNode("TD") ;
+	if ( !oCell ) return ;
+
+	// Create the new cell element to be added.
+	var oNewCell = FCK.EditorDocument.createElement("TD");
+	if ( FCKBrowserInfo.IsGecko )
+		oNewCell.innerHTML = GECKO_BOGUS ;
+//	oNewCell.innerHTML = "&nbsp;" ;
+
+	// If it is the last cell in the row.
+	if ( oCell.cellIndex == oCell.parentNode.cells.lenght - 1 )
+	{
+		// Add the new cell at the end of the row.
+		oCell.parentNode.appendChild( oNewCell ) ;
+	}
+	else
+	{
+		// Add the new cell before the next cell (after the active one).
+		oCell.parentNode.insertBefore( oNewCell, oCell.nextSibling ) ;
+	}
+	
+	return oNewCell ;
+}
+
+FCKTableHandler.DeleteCell = function( cell )
+{
+	// If this is the last cell in the row.
+	if ( cell.parentNode.cells.length == 1 )
+	{
+		// Delete the entire row.
+		FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell, 'TR' ) ) ;
+		return ;
+	}
+
+	// Delete the cell from the row.
+	cell.parentNode.removeChild( cell ) ;
+}
+
+FCKTableHandler.DeleteCells = function()
+{
+	var aCells = FCKTableHandler.GetSelectedCells() ;
+	
+	for ( var i = aCells.length - 1 ; i >= 0  ; i-- )
+	{
+		FCKTableHandler.DeleteCell( aCells[i] ) ;
+	}
+}
+
+FCKTableHandler.MergeCells = function()
+{
+	// Get all selected cells.
+	var aCells = FCKTableHandler.GetSelectedCells() ;
+	
+	// At least 2 cells must be selected.
+	if ( aCells.length < 2 )
+		return ;
+		
+	// The merge can occour only if the selected cells are from the same row.
+	if ( aCells[0].parentNode != aCells[aCells.length-1].parentNode )
+		return ;
+
+	// Calculate the new colSpan for the first cell.
+	var iColSpan = isNaN( aCells[0].colSpan ) ? 1 : aCells[0].colSpan ;
+
+	var sHtml = '' ;
+	
+	for ( var i = aCells.length - 1 ; i > 0  ; i-- )
+	{
+		iColSpan += isNaN( aCells[i].colSpan ) ? 1 : aCells[i].colSpan ;
+		
+		// Append the HTML of each cell.
+		sHtml = aCells[i].innerHTML + sHtml ;
+		
+		// Delete the cell.
+		FCKTableHandler.DeleteCell( aCells[i] ) ;
+	}
+	
+	// Set the innerHTML of the remaining cell (the first one).
+	aCells[0].colSpan = iColSpan ;
+	aCells[0].innerHTML += sHtml ;
+}
+
+FCKTableHandler.SplitCell = function()
+{
+	// Check that just one cell is selected, otherwise return.
+	var aCells = FCKTableHandler.GetSelectedCells() ;
+	if ( aCells.length != 1 )
+		return ;
+	
+	var aMap = this._CreateTableMap( aCells[0].parentNode.parentNode ) ;
+	var iCellIndex = FCKTableHandler._GetCellIndexSpan( aMap, aCells[0].parentNode.rowIndex , aCells[0] ) ;
+		
+	var aCollCells = this._GetCollumnCells( aMap, iCellIndex ) ;
+	
+	for ( var i = 0 ; i < aCollCells.length ; i++ )
+	{
+		if ( aCollCells[i] == aCells[0] )
+		{
+			var oNewCell = this.InsertCell( aCells[0] ) ;
+			if ( !isNaN( aCells[0].rowSpan ) && aCells[0].rowSpan > 1 )
+				oNewCell.rowSpan = aCells[0].rowSpan ;
+		}
+		else
+		{
+			if ( isNaN( aCollCells[i].colSpan ) )
+				aCollCells[i].colSpan = 2 ;
+			else
+				aCollCells[i].colSpan += 1 ;
+		}
+	}
+}
+
+// Get the cell index from a TableMap.
+FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell )
+{
+	if ( tableMap.length < rowIndex + 1 )
+		return null ;
+	
+	var oRow = tableMap[ rowIndex ] ;
+	
+	for ( var c = 0 ; c < oRow.length ; c++ )
+	{
+		if ( oRow[c] == cell )
+			return c ;
+	}
+	
+	return null ;
+}
+
+// Get the cells available in a collumn of a TableMap.
+FCKTableHandler._GetCollumnCells = function( tableMap, collumnIndex )
+{
+	var aCollCells = new Array() ;
+
+	for ( var r = 0 ; r < tableMap.length ; r++ )
+	{
+		var oCell = tableMap[r][collumnIndex] ;
+		if ( oCell && ( aCollCells.length == 0 || aCollCells[ aCollCells.length - 1 ] != oCell ) )
+			aCollCells[ aCollCells.length ] = oCell ;
+	}
+	
+	return aCollCells ;
+}
+
+// This function is quite hard to explain. It creates a matrix representing all cells in a table.
+// The difference here is that the "spanned" cells (colSpan and rowSpan) are duplicated on the matrix
+// cells that are "spanned". For example, a row with 3 cells where the second cell has colSpan=2 and rowSpan=3
+// will produce a bi-dimensional matrix with the following values (representing the cells):
+//		Cell1, Cell2, Cell2, Cell 3
+//		Cell4, Cell2, Cell2, Cell 5
+FCKTableHandler._CreateTableMap = function( table )
+{
+	var aRows = table.rows ;
+	
+	// Row and Collumn counters.
+	var r = -1 ;
+	
+	var aMap = new Array() ;
+	
+	for ( var i = 0 ; i < aRows.length ; i++ )
+	{
+		r++ ;
+		if ( !aMap[r] )
+			aMap[r] = new Array() ;
+		
+		var c = -1 ;
+		
+		for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
+		{
+			var oCell = aRows[i].cells[j] ;
+		
+			c++ ;
+			while ( aMap[r][c] )
+				c++ ;
+			
+			var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
+			var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
+
+			for ( var rs = 0 ; rs < iRowSpan ; rs++ )
+			{
+				if ( !aMap[r + rs] )
+					aMap[r + rs] = new Array() ;
+					
+				for ( var cs = 0 ; cs < iColSpan ; cs++ )
+				{
+					aMap[r + rs][c + cs] = aRows[i].cells[j] ;
+				}
+			}
+			
+			c += iColSpan - 1 ;
+		}
+	}
+	return aMap ;
+}
+
+FCKTableHandler.ClearRow = function( tr )
+{
+	// Get the array of row's cells.
+	var aCells = tr.cells ;
+
+	// Replace the contents of each cell with "nothing".
+	for ( var i = 0 ; i < aCells.length ; i++ ) 
+	{
+		if ( FCKBrowserInfo.IsGecko )
+			aCells[i].innerHTML = GECKO_BOGUS ;
+		else
+			aCells[i].innerHTML = '' ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktoolbaritems.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktoolbaritems.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktoolbaritems.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktoolbaritems.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,117 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbaritems.js
+ * 	Toolbar items definitions.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarItems = new Object() ;
+FCKToolbarItems.LoadedItems = new Object() ;
+
+FCKToolbarItems.RegisterItem = function( itemName, item )
+{
+	this.LoadedItems[ itemName ] = item ;
+}
+
+FCKToolbarItems.GetItem = function( itemName )
+{
+	var oItem = FCKToolbarItems.LoadedItems[ itemName ] ;
+
+	if ( oItem )
+		return oItem ;
+
+	switch ( itemName )
+	{
+		case 'Source'			: oItem = new FCKToolbarButton( 'Source'	, FCKLang.Source, null, FCK_TOOLBARITEM_ICONTEXT, true, true ) ; break ;
+		case 'DocProps'			: oItem = new FCKToolbarButton( 'DocProps'	, FCKLang.DocProps ) ; break ;
+		case 'Templates'		: oItem = new FCKToolbarButton( 'Templates'	, FCKLang.Templates ) ; break ;
+		case 'Save'				: oItem = new FCKToolbarButton( 'Save'		, FCKLang.Save, null, null, true ) ; break ;
+		case 'NewPage'			: oItem = new FCKToolbarButton( 'NewPage'	, FCKLang.NewPage, null, null, true  ) ; break ;
+		case 'Preview'			: oItem = new FCKToolbarButton( 'Preview'	, FCKLang.Preview, null, null, true  ) ; break ;
+		case 'About'			: oItem = new FCKToolbarButton( 'About'		, FCKLang.About, null, null, true  ) ; break ;
+
+		case 'Cut'				: oItem = new FCKToolbarButton( 'Cut'		, FCKLang.Cut, null, null, false, true ) ; break ;
+		case 'Copy'				: oItem = new FCKToolbarButton( 'Copy'		, FCKLang.Copy, null, null, false, true ) ; break ;
+		case 'Paste'			: oItem = new FCKToolbarButton( 'Paste'		, FCKLang.Paste, null, null, false, true ) ; break ;
+		case 'PasteText'		: oItem = new FCKToolbarButton( 'PasteText'	, FCKLang.PasteText, null, null, false, true ) ; break ;
+		case 'PasteWord'		: oItem = new FCKToolbarButton( 'PasteWord'	, FCKLang.PasteWord, null, null, false, true ) ; break ;
+		case 'Print'			: oItem = new FCKToolbarButton( 'Print'		, FCKLang.Print, null, null, false, true ) ; break ;
+		case 'SpellCheck'		: oItem = new FCKToolbarButton( 'SpellCheck', FCKLang.SpellCheck ) ; break ;
+		case 'Undo'				: oItem = new FCKToolbarButton( 'Undo'		, FCKLang.Undo, null, null, false, true ) ; break ;
+		case 'Redo'				: oItem = new FCKToolbarButton( 'Redo'		, FCKLang.Redo, null, null, false, true ) ; break ;
+		case 'SelectAll'		: oItem = new FCKToolbarButton( 'SelectAll'	, FCKLang.SelectAll ) ; break ;
+		case 'RemoveFormat'		: oItem = new FCKToolbarButton( 'RemoveFormat', FCKLang.RemoveFormat, null, null, false, true ) ; break ;
+
+		case 'Bold'				: oItem = new FCKToolbarButton( 'Bold'		, FCKLang.Bold, null, null, false, true ) ; break ;
+		case 'Italic'			: oItem = new FCKToolbarButton( 'Italic'	, FCKLang.Italic, null, null, false, true  ) ; break ;
+		case 'Underline'		: oItem = new FCKToolbarButton( 'Underline'	, FCKLang.Underline, null, null, false, true ) ; break ;
+		case 'StrikeThrough'	: oItem = new FCKToolbarButton( 'StrikeThrough'	, FCKLang.StrikeThrough, null, null, false, true ) ; break ;
+		case 'Subscript'		: oItem = new FCKToolbarButton( 'Subscript'		, FCKLang.Subscript, null, null, false, true ) ; break ;
+		case 'Superscript'		: oItem = new FCKToolbarButton( 'Superscript'	, FCKLang.Superscript, null, null, false, true ) ; break ;
+
+		case 'OrderedList'		: oItem = new FCKToolbarButton( 'InsertOrderedList'		, FCKLang.NumberedListLbl, FCKLang.NumberedList, null, false, true ) ; break ;
+		case 'UnorderedList'	: oItem = new FCKToolbarButton( 'InsertUnorderedList'	, FCKLang.BulletedListLbl, FCKLang.BulletedList, null, false, true ) ; break ;
+		case 'Outdent'			: oItem = new FCKToolbarButton( 'Outdent'	, FCKLang.DecreaseIndent, null, null, false, true ) ; break ;
+		case 'Indent'			: oItem = new FCKToolbarButton( 'Indent'	, FCKLang.IncreaseIndent, null, null, false, true ) ; break ;
+
+		case 'Link'				: oItem = new FCKToolbarButton( 'Link'		, FCKLang.InsertLinkLbl, FCKLang.InsertLink, null, false, true ) ; break ;
+		case 'Unlink'			: oItem = new FCKToolbarButton( 'Unlink'	, FCKLang.RemoveLink, null, null, false, true ) ; break ;
+		case 'Anchor'			: oItem = new FCKToolbarButton( 'Anchor'	, FCKLang.Anchor ) ; break ;
+
+		case 'Image'			: oItem = new FCKToolbarButton( 'Image'			, FCKLang.InsertImageLbl, FCKLang.InsertImage ) ; break ;
+		case 'Flash'			: oItem = new FCKToolbarButton( 'Flash'			, FCKLang.InsertFlashLbl, FCKLang.InsertFlash ) ; break ;
+		case 'Table'			: oItem = new FCKToolbarButton( 'Table'			, FCKLang.InsertTableLbl, FCKLang.InsertTable ) ; break ;
+		case 'SpecialChar'		: oItem = new FCKToolbarButton( 'SpecialChar'	, FCKLang.InsertSpecialCharLbl, FCKLang.InsertSpecialChar ) ; break ;
+		case 'Smiley'			: oItem = new FCKToolbarButton( 'Smiley'		, FCKLang.InsertSmileyLbl, FCKLang.InsertSmiley ) ; break ;
+		case 'PageBreak'		: oItem = new FCKToolbarButton( 'PageBreak'		, FCKLang.PageBreakLbl, FCKLang.PageBreak ) ; break ;
+		case 'UniversalKey'		: oItem = new FCKToolbarButton( 'UniversalKey'	, FCKLang.UniversalKeyboard ) ; break ;
+
+		case 'Rule'				: oItem = new FCKToolbarButton( 'InsertHorizontalRule', FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true ) ; break ;
+
+		case 'JustifyLeft'		: oItem = new FCKToolbarButton( 'JustifyLeft'	, FCKLang.LeftJustify, null, null, false, true ) ; break ;
+		case 'JustifyCenter'	: oItem = new FCKToolbarButton( 'JustifyCenter'	, FCKLang.CenterJustify, null, null, false, true ) ; break ;
+		case 'JustifyRight'		: oItem = new FCKToolbarButton( 'JustifyRight'	, FCKLang.RightJustify, null, null, false, true ) ; break ;
+		case 'JustifyFull'		: oItem = new FCKToolbarButton( 'JustifyFull'	, FCKLang.BlockJustify, null, null, false, true ) ; break ;
+
+		case 'Style'			: oItem = new FCKToolbarStyleCombo() ; break ;
+		case 'FontName'			: oItem = new FCKToolbarFontsCombo() ; break ;
+		case 'FontSize'			: oItem = new FCKToolbarFontSizeCombo() ; break ;
+		case 'FontFormat'		: oItem = new FCKToolbarFontFormatCombo() ; break ;
+
+		case 'TextColor'		: oItem = new FCKToolbarPanelButton( 'TextColor', FCKLang.TextColor ) ; break ;
+		case 'BGColor'			: oItem = new FCKToolbarPanelButton( 'BGColor'	, FCKLang.BGColor ) ; break ;
+
+		case 'Find'				: oItem = new FCKToolbarButton( 'Find'		, FCKLang.Find ) ; break ;
+		case 'Replace'			: oItem = new FCKToolbarButton( 'Replace'	, FCKLang.Replace ) ; break ;
+
+		case 'Form'				: oItem = new FCKToolbarButton( 'Form'			, FCKLang.Form ) ; break ;
+		case 'Checkbox'			: oItem = new FCKToolbarButton( 'Checkbox'		, FCKLang.Checkbox ) ; break ;
+		case 'Radio'			: oItem = new FCKToolbarButton( 'Radio'			, FCKLang.RadioButton ) ; break ;
+		case 'TextField'		: oItem = new FCKToolbarButton( 'TextField'		, FCKLang.TextField ) ; break ;
+		case 'Textarea'			: oItem = new FCKToolbarButton( 'Textarea'		, FCKLang.Textarea ) ; break ;
+		case 'HiddenField'		: oItem = new FCKToolbarButton( 'HiddenField'	, FCKLang.HiddenField ) ; break ;
+		case 'Button'			: oItem = new FCKToolbarButton( 'Button'		, FCKLang.Button ) ; break ;
+		case 'Select'			: oItem = new FCKToolbarButton( 'Select'		, FCKLang.SelectionField ) ; break ;
+		case 'ImageButton'		: oItem = new FCKToolbarButton( 'ImageButton'	, FCKLang.ImageButton ) ; break ;
+
+		default:
+			alert( FCKLang.UnknownToolbarItem.replace( /%1/g, itemName ) ) ;
+			return null ;
+	}
+
+	FCKToolbarItems.LoadedItems[ itemName ] = oItem ;
+
+	return oItem ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktoolbarset.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktoolbarset.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktoolbarset.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktoolbarset.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,166 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktoolbarset.js
+ * 	Defines the FCKToolbarSet object that is used to load and draw the 
+ * 	toolbar.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKToolbarSet = FCK.ToolbarSet = new Object() ;
+
+document.getElementById( 'ExpandHandle' ).title		= FCKLang.ToolbarExpand ;
+document.getElementById( 'CollapseHandle' ).title	= FCKLang.ToolbarCollapse ;
+
+FCKToolbarSet.Toolbars = new Array() ;
+
+// Array of toolbat items that are active only on WYSIWYG mode.
+FCKToolbarSet.ItemsWysiwygOnly = new Array() ;
+
+// Array of toolbar items that are sensitive to the cursor position.
+FCKToolbarSet.ItemsContextSensitive = new Array() ;
+
+FCKToolbarSet.Expand = function()
+{
+	document.getElementById( 'Collapsed' ).style.display = 'none' ;
+	document.getElementById( 'Expanded' ).style.display = '' ;
+	
+	if ( ! FCKBrowserInfo.IsIE )
+	{
+		// I had to use "setTimeout" because Gecko was not responding in a right
+		// way when calling window.onresize() directly.
+		window.setTimeout( "window.onresize()", 1 ) ;
+	}
+}
+
+FCKToolbarSet.Collapse = function()
+{
+	document.getElementById( 'Collapsed' ).style.display = '' ;
+	document.getElementById( 'Expanded' ).style.display = 'none' ;
+	
+	if ( ! FCKBrowserInfo.IsIE )
+	{
+		// I had to use "setTimeout" because Gecko was not responding in a right
+		// way when calling window.onresize() directly.
+		window.setTimeout( "window.onresize()", 1 ) ;
+	}
+}
+
+FCKToolbarSet.Restart = function()
+{
+	if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
+		this.Expand() ;
+	else
+		this.Collapse() ;
+	
+	document.getElementById( 'CollapseHandle' ).style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
+}
+
+FCKToolbarSet.Load = function( toolbarSetName )
+{
+	this.DOMElement = document.getElementById( 'eToolbar' ) ;
+	
+	var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
+	
+	if (! ToolbarSet)
+	{
+		alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
+		return ;
+	}
+	
+	this.Toolbars = new Array() ;
+	
+	for ( var x = 0 ; x < ToolbarSet.length ; x++ ) 
+	{
+		var oToolbarItems = ToolbarSet[x] ;
+		
+		var oToolbar ;
+		
+		if ( typeof( oToolbarItems ) == 'string' )
+		{
+			if ( oToolbarItems == '/' )
+				oToolbar = new FCKToolbarBreak() ;
+		}
+		else
+		{
+			oToolbar = new FCKToolbar() ;
+			
+			for ( var j = 0 ; j < oToolbarItems.length ; j++ ) 
+			{
+				var sItem = oToolbarItems[j] ;
+				
+				if ( sItem == '-')
+					oToolbar.AddSeparator() ;
+				else
+				{
+					var oItem = FCKToolbarItems.GetItem( sItem ) ;
+					if ( oItem )
+					{
+						oToolbar.AddItem( oItem ) ;
+
+						if ( !oItem.SourceView )
+							this.ItemsWysiwygOnly[this.ItemsWysiwygOnly.length] = oItem ;
+						
+						if ( oItem.ContextSensitive )
+							this.ItemsContextSensitive[this.ItemsContextSensitive.length] = oItem ;
+					}
+				}
+			}
+			
+			oToolbar.AddTerminator() ;
+		}
+
+		this.Toolbars[ this.Toolbars.length ] = oToolbar ;
+	}
+}
+
+FCKToolbarSet.RefreshModeState = function()
+{
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		// Enable all buttons that are available on WYSIWYG mode only.
+		for ( var i = 0 ; i < FCKToolbarSet.ItemsWysiwygOnly.length ; i++ )
+			FCKToolbarSet.ItemsWysiwygOnly[i].Enable() ;
+
+		// Refresh the buttons state.
+		FCKToolbarSet.RefreshItemsState() ;
+	}
+	else
+	{
+		// Refresh the buttons state.
+		FCKToolbarSet.RefreshItemsState() ;
+
+		// Disable all buttons that are available on WYSIWYG mode only.
+		for ( var i = 0 ; i < FCKToolbarSet.ItemsWysiwygOnly.length ; i++ )
+			FCKToolbarSet.ItemsWysiwygOnly[i].Disable() ;
+	}	
+}
+
+FCKToolbarSet.RefreshItemsState = function()
+{
+
+	for ( var i = 0 ; i < FCKToolbarSet.ItemsContextSensitive.length ; i++ )
+		FCKToolbarSet.ItemsContextSensitive[i].RefreshState() ;
+/*
+	TODO: Delete this commented block on stable version.
+	for ( var i = 0 ; i < FCKToolbarSet.Toolbars.length ; i++ )
+	{
+		var oToolbar = FCKToolbarSet.Toolbars[i] ;
+		for ( var j = 0 ; j < oToolbar.Items.length ; j++ )
+		{
+			oToolbar.Items[j].RefreshState() ;
+		}
+	}
+*/
+}
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktools_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktools_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktools_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktools_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,254 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktools_gecko.js
+ * 	Utility functions. (Gecko version).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Constant for the Gecko Bogus Node.
+var GECKO_BOGUS = '<br _moz_editor_bogus_node="TRUE">' ;
+
+// Appends a CSS file to a document.
+FCKTools.AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+	var e = documentElement.createElement( 'LINK' ) ;
+	e.rel	= 'stylesheet' ;
+	e.type	= 'text/css' ;
+	e.href	= cssFileUrl ;
+	documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
+	return e ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+	// Loop throw all attributes in the element
+	for ( var i = 0 ; i < element.attributes.length ; i++ )
+	{
+		// Remove the element by name.
+		element.removeAttribute( element.attributes[i].name, 0 ) ;	// 0 : Case Insensitive
+	}
+}
+
+// Returns an Array of strings with all defined in the elements inside another element.
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+	// Create the array that will hold all Ids.
+	var aIds = new Array() ;
+	
+	// Define a recursive function that search for the Ids.
+	var fGetIds = function( parent )
+	{
+		for ( var i = 0 ; i < parent.childNodes.length ; i++ )
+		{
+			var sId = parent.childNodes[i].id ;
+			
+			// Check if the Id is defined for the element.
+			if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
+			
+			// Recursive call.
+			fGetIds( parent.childNodes[i] ) ;
+		}
+	}
+	
+	// Start the recursive calls.
+	fGetIds( parentElement ) ;
+
+	return aIds ;
+}
+
+FCKTools.RemoveOuterTags = function( e )
+{
+	var oFragment = e.ownerDocument.createDocumentFragment() ;
+			
+	for ( var i = 0 ; i < e.childNodes.length ; i++ )
+		oFragment.appendChild( e.childNodes[i] ) ;
+			
+	e.parentNode.replaceChild( oFragment, e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+	switch ( object )
+	{
+		case 'XmlHttp' :
+			return new XMLHttpRequest() ;
+		case 'DOMDocument' :
+			return document.implementation.createDocument( '', '', null ) ;
+	}
+	return null ;
+}
+// START iCM Modifications
+/*
+// Starting at the specified node, find the first inline node of the sequence
+// For example, assume we have the following elements : <p>Some text <span>some more text</span> and <a href="href">some link</a> yet some more text</p>
+// If the "some link" text node is the one specified, then the "Some text" text node will be the first inline node returned.
+FCKTools.GetFirstInlineNode = function( oNode )
+{
+	if ( FCKRegexLib.BlockElements.test( oNode.nodeName ) )
+		return oNode ;
+	else if ( oNode.previousSibling && !FCKRegexLib.BlockElements.test( oNode.previousSibling.nodeName ) )
+		return FCKTools.GetFirstInlineNode( oNode.previousSibling ) ;
+	else if ( oNode.parentNode && !FCKRegexLib.BlockElements.test( oNode.parentNode.nodeName ) && oNode.parentNode.nodeName.toUpperCase() != "BODY" )
+		return FCKTools.GetFirstInlineNode( oNode.parentNode ) ;
+	else 
+		return oNode ;
+}
+
+// Starting at the specified node, find the last inline node of the sequence
+// For example, assume we have the following elements : <p>Some text <span>some more text</span> and <a href="href">some link</a> yet some more text</p>
+// If the "some link" text node is the one specified, then the " yet some more text" text node will be the last inline node returned.
+FCKTools.GetLastInlineNode = function( oNode )
+{
+	if ( FCKRegexLib.BlockElements.test( oNode.nodeName ) )
+		return oNode ;
+	else if ( oNode.nextSibling && !FCKRegexLib.BlockElements.test( oNode.nextSibling.nodeName ) )
+		return FCKTools.GetLastInlineNode( oNode.nextSibling ) ;
+	else if ( oNode.parentNode && !FCKRegexLib.BlockElements.test( oNode.parentNode.nodeName ) && oNode.parentNode.nodeName.toUpperCase() != "BODY" )
+		return FCKTools.GetLastInlineNode( oNode.parentNode ) ;
+	else
+		return oNode ;
+}
+
+
+// Split the supplied parent at the specified child and (optionally) offset.
+// Ensure that enclosing block elements are created where missing but that existing 
+// block elements (table for example) don't get incorrectly nested. 
+FCKTools.SplitNode = function( oParentBlockNode, oChildNode, nOffset )
+{
+	if ( typeof nOffset == "undefined" ) nOffset = 0 ;
+
+	var oFragment = FCK.EditorDocument.createDocumentFragment() ;
+	var oRange = FCK.EditorDocument.createRange() ;
+
+	if ( FCKRegexLib.ListElements.test( oParentBlockNode.nodeName ) )
+	{
+		// Treat OL/UL parents differently as want to split at the specified
+		// child LI node to create to OL/UL lists.
+		oStartNode = oParentBlockNode.firstChild ;
+		oEndNode = oParentBlockNode.lastChild ;
+	}
+	else
+	{
+		// Locate the inline nodes adjacent to the specified child node so that these can
+		// be kept together.
+		oStartNode = FCKTools.GetFirstInlineNode( oChildNode ) ;
+		oEndNode = FCKTools.GetLastInlineNode( oChildNode ) ;
+	}
+
+	// Create a new tag which holds the content of the affected node(s) located before (but not including) the child node and offset
+	if ( FCKRegexLib.BlockElements.test( oStartNode.nodeName ) && !FCKRegexLib.ListElements.test( oParentBlockNode.nodeName ) )
+	{
+		// First element of the bunch is already a block element so we don't want to wrap it with a new block element.
+		// Just use this first node provided it is not the same as the last node (to prevent duplication), otherwise
+		// create a new empty P element.
+		if ( oStartNode != oEndNode )
+		{
+			oBlockNode1 = oStartNode.cloneNode( true ) ;
+		}
+		else
+		{
+			oBlockNode1 = FCK.EditorDocument.createElement( "P" ) ;
+			oBlockNode1.innerHTML = GECKO_BOGUS ;
+			
+			if ( !FCKRegexLib.SpecialBlockElements.test( oParentBlockNode.nodeName ) )
+				FCKTools.SetElementAttributes( oBlockNode1, oParentBlockNode.attributes ) ;  // Transfer across any class attributes, etc
+		}
+	}
+	else
+	{
+		// First element of the bunch is not a block element (or it is a LI element which is a special case).
+		// So ensure all of the inline nodes before the selection are wrapped with a suitable block element.
+		var oBlockNode1 = FCK.EditorDocument.createElement( FCKRegexLib.SpecialBlockElements.test( oParentBlockNode.nodeName ) ? "P" : oParentBlockNode.tagName ) ;
+		oRange.setStartBefore( oStartNode ) ;
+		if ( nOffset == 0 )
+			oRange.setEndBefore( oChildNode ) ;
+		else
+			oRange.setEnd( oChildNode, nOffset ) ;
+		oBlockNode1.appendChild( oRange.cloneContents() ) ;
+		oBlockNode1.innerHTML = oBlockNode1.innerHTML.replace(/[\x00-\x1F]/g, "") ; // Prevent any control characters returned within the innerHTML from causing problems
+		if ( FCKTools.NodeIsEmpty( oBlockNode1 ) )
+			oBlockNode1.innerHTML = GECKO_BOGUS ;		// Ensure it has some content, required for Gecko
+		else
+			oBlockNode1.innerHTML = oBlockNode1.innerHTML.replace( FCKRegexLib.EmptyElement, "" ) ; // Strip out any empty tags that may have been generated by the split
+		if ( !FCKRegexLib.SpecialBlockElements.test( oParentBlockNode.nodeName ) )
+			FCKTools.SetElementAttributes( oBlockNode1, oParentBlockNode.attributes ) ; 	// Transfer across any class attributes, etc
+	}
+
+	// Create a new tag which holds the content of the affected node(s) located after (and including) the child node
+	if ( FCKRegexLib.BlockElements.test( oEndNode.nodeName ) && !FCKRegexLib.ListElements.test( oParentBlockNode.nodeName ) )
+	{
+		// Last element of the bunch is already a block element so we don't want to wrap it with a new block element.
+		oBlockNode2 = oEndNode.cloneNode( true ) ;
+	}
+	else
+	{
+		// Last element of the bunch is not a block element (or it is a LI element which is a special case).
+		// So ensure all of the inline nodes after and including the child/offset are wrapped with a suitable block element.
+		var oBlockNode2 = FCK.EditorDocument.createElement( FCKRegexLib.SpecialBlockElements.test( oParentBlockNode.nodeName ) ? "P" : oParentBlockNode.tagName );
+		oRange.setEndAfter( oEndNode );
+		if ( nOffset == 0 )
+			oRange.setStartBefore( oChildNode ) ;
+		else
+			oRange.setStart( oChildNode, nOffset );
+		oBlockNode2.appendChild( oRange.cloneContents() ) ;
+		oBlockNode2.innerHTML = oBlockNode2.innerHTML.replace(/[\x00-\x1F]/g, "") ;  // Prevent any control characters returned within the innerHTML from causing problems
+		if ( FCKTools.NodeIsEmpty( oBlockNode2 ) ) 
+			oBlockNode2.innerHTML = GECKO_BOGUS ; 			// Ensure it has some content, required for Gecko
+		else
+			oBlockNode2.innerHTML = oBlockNode2.innerHTML.replace( FCKRegexLib.EmptyElement, "" ) ; // Strip out any empty tags that may have been generated by the split
+		if ( !FCKRegexLib.SpecialBlockElements.test( oParentBlockNode.nodeName ) )
+			FCKTools.SetElementAttributes( oBlockNode2, oParentBlockNode.attributes ) ; 	// Transfer across any class attributes, etc
+	}
+	
+	// Insert the resulting nodes into a document fragment
+	oFragment.appendChild( oBlockNode1 );
+	oFragment.appendChild( oBlockNode2 );
+	
+	// Replace the affected nodes with the new nodes (fragment)
+	FCKTools.ReplaceNodes( oParentBlockNode, oStartNode, oEndNode, oFragment ) ;	
+	
+	// Return the second node so it can be used for setting cursor position, etc
+	return oBlockNode2 ;
+}
+
+// Function that replaces the specified range of nodes (inclusive) within the supplied parent
+// with the nodes stored in the supplied document fragment.
+FCKTools.ReplaceNodes = function( oParentBlockNode, oStartNode, oEndNode, oFragment )
+{
+	var oRange = FCK.EditorDocument.createRange() ;
+	
+	// Delete the affected node(s)
+	if ( !FCKRegexLib.SpecialBlockElements.test( oParentBlockNode.nodeName ) && (oParentBlockNode.firstChild == oStartNode) && (oParentBlockNode.lastChild == oEndNode) )
+	{
+		// Entire parent block node is to be replaced so insert the two new block elements before it 
+		// and then remove the old node
+		oRange.selectNode ( oParentBlockNode );
+	}
+	else
+	{
+		// Only part of the parent block node is to be replaced so insert the two new block elements
+		// before the first inline node of the affected content and then remove the old nodes
+		oRange.setEndAfter( oEndNode ) ;
+		oRange.setStartBefore( oStartNode ) ;
+	}
+	
+	// Insert the replacement nodes
+	oRange.deleteContents() ;
+	oRange.insertNode( oFragment ) ;
+}
+*/
+// END iCM Modifications
+
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktools_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktools_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktools_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktools_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,77 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktools_ie.js
+ * 	Utility functions. (IE version).
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// Appends a CSS file to a document.
+FCKTools.AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+	return documentElement.createStyleSheet( cssFileUrl ) ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+	element.clearAttributes() ;
+}
+
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+	var aIds = new Array() ;
+	for ( var i = 0 ; i < parentElement.all.length ; i++ )
+	{
+		var sId = parentElement.all[i].id ;
+		if ( sId && sId.length > 0 )
+			aIds[ aIds.length ] = sId ;
+	}
+	return aIds ;
+}
+
+FCKTools.RemoveOuterTags = function( e )
+{
+	e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ;
+	e.parentNode.removeChild( e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+	var aObjs ;
+	
+	switch ( object )
+	{
+		case 'XmlHttp' :
+			aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ;
+			break ;
+				
+		case 'DOMDocument' :
+			aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ;
+			break ;
+	}
+
+	for ( var i = 0 ; i < 2 ; i++ )
+	{
+		try { return new ActiveXObject( aObjs[i] ) ; }
+		catch (e) 
+		{}
+	}
+	
+	if ( FCKLang.NoActiveX )
+	{
+		alert( FCKLang.NoActiveX ) ;
+		FCKLang.NoActiveX = null ;
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fcktools.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktools.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fcktools.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fcktools.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,286 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fcktools.js
+ * 	Utility functions.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKTools = new Object() ;
+
+//**
+// FCKTools.GetLinkedFieldValue: Gets the value of the hidden INPUT element
+// that is associated to the editor. This element has its ID set to the 
+// editor's instance name so the user reffers to the instance name when getting
+// the posted data.
+FCKTools.GetLinkedFieldValue = function()
+{
+	return FCK.LinkedField.value ;
+}
+
+//**
+// FCKTools.AttachToLinkedFieldFormSubmit: attaches a function call to the 
+// submit event of the linked field form. This function us generally used to
+// update the linked field value before submitting the form.
+FCKTools.AttachToLinkedFieldFormSubmit = function( functionPointer )
+{
+	// Gets the linked field form
+	var oForm = FCK.LinkedField.form ;
+	
+	// Return now if no form is available
+	if (!oForm) return ;
+
+	// Attaches the functionPointer call to the onsubmit event
+	if ( FCKBrowserInfo.IsIE )
+		oForm.attachEvent( "onsubmit", functionPointer ) ;
+	else
+		oForm.addEventListener( 'submit', functionPointer, true ) ;
+	
+	//**
+	// Attaches the functionPointer call to the submit method 
+	// This is done because IE doesn't fire onsubmit when the submit method is called
+	// BEGIN --
+	
+	// Creates a Array in the form object that will hold all Attached function call
+	// (in the case there are more than one editor in the same page)
+	if (! oForm.updateFCKeditor) oForm.updateFCKeditor = new Array() ;
+	
+	// Adds the function pointer to the array of functions to call when "submit" is called
+	oForm.updateFCKeditor[oForm.updateFCKeditor.length] = functionPointer ;
+
+	// Switches the original submit method with a new one that first call all functions
+	// on the above array and the call the original submit
+	// IE sees it oForm.submit function as an 'object'.
+	if (! oForm.originalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) )
+	{
+		// Creates a copy of the original submit
+		oForm.originalSubmit = oForm.submit ;
+		
+		// Creates our replacement for the submit
+		oForm.submit = FCKTools_SubmitReplacer ;
+	}
+	// END --
+}
+
+function FCKTools_SubmitReplacer()
+{
+	if (this.updateFCKeditor)
+	{
+		// Calls all functions in the functions array
+		for (var i = 0 ; i < this.updateFCKeditor.length ; i++)
+			this.updateFCKeditor[i]() ;
+	}
+	// Calls the original "submit"
+	this.originalSubmit() ;
+}
+
+//**
+// FCKTools.AddSelectOption: Adds a option to a SELECT element.
+FCKTools.AddSelectOption = function( targetDocument, selectElement, optionText, optionValue )
+{
+	var oOption = targetDocument.createElement("OPTION") ;
+
+	oOption.text	= optionText ;
+	oOption.value	= optionValue ;	
+
+	selectElement.options.add(oOption) ;
+
+	return oOption ;
+}
+
+FCKTools.RemoveAllSelectOptions = function( selectElement )
+{
+	for ( var i = selectElement.options.length - 1 ; i >= 0 ; i-- )
+	{
+		selectElement.options.remove(i) ;
+	}
+}
+
+FCKTools.SelectNoCase = function( selectElement, value, defaultValue )
+{
+	var sNoCaseValue = value.toString().toLowerCase() ;
+	
+	for ( var i = 0 ; i < selectElement.options.length ; i++ )
+	{
+		if ( sNoCaseValue == selectElement.options[i].value.toLowerCase() )
+		{
+			selectElement.selectedIndex = i ;
+			return ;
+		}
+	}
+	
+	if ( defaultValue != null ) FCKTools.SelectNoCase( selectElement, defaultValue ) ;
+}
+
+FCKTools.HTMLEncode = function( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&/g, "&amp;" ) ;
+	text = text.replace( /"/g, "&quot;" ) ;
+	text = text.replace( /</g, "&lt;" ) ;
+	text = text.replace( />/g, "&gt;" ) ;
+	text = text.replace( /'/g, "&#39;" ) ;
+
+	return text ;
+}
+
+//**
+// FCKTools.GetResultingArray: Gets a array from a string (where the elements 
+// are separated by a character), a fuction (that returns a array) or a array.
+FCKTools.GetResultingArray = function( arraySource, separator )
+{
+	switch ( typeof( arraySource ) )
+	{
+		case "string" :
+			return arraySource.split( separator ) ;
+		case "function" :
+			return separator() ;
+		default :
+			if ( isArray( arraySource ) ) return arraySource ;
+			else return new Array() ;
+	}
+}
+
+FCKTools.GetElementPosition = function( el )
+{
+	// Initializes the Coordinates object that will be returned by the function.
+	var c = { X:0, Y:0 } ;
+	
+	// Loop throw the offset chain.
+	while ( el )
+	{
+		c.X += el.offsetLeft ;
+		c.Y += el.offsetTop ;
+		
+		el = el.offsetParent ;
+	}
+	
+	// Return the Coordinates object
+	return c ;
+}
+
+// START iCM MODIFICATIONS
+// Amended to accept a list of one or more ascensor tag names
+// Amended to check the element itself before working back up through the parent hierarchy
+FCKTools.GetElementAscensor = function( element, ascensorTagNames )
+{
+//	var e = element.parentNode ;
+	var e = element ;
+	var lstTags = "," + ascensorTagNames.toUpperCase() + "," ;
+
+	while ( e )
+	{
+		if ( lstTags.indexOf( "," + e.nodeName.toUpperCase() + "," ) != -1 )
+			return e ;
+
+		e = e.parentNode ;
+	}
+	return null ;
+}
+// END iCM MODIFICATIONS
+
+FCKTools.Pause = function( miliseconds )
+{
+	var oStart = new Date() ;
+
+	while (true)
+	{ 
+		var oNow = new Date() ;
+		if ( miliseconds < oNow - oStart ) 
+			return ;
+	}
+}
+
+FCKTools.ConvertStyleSizeToHtml = function( size )
+{
+	return size.endsWith( '%' ) ? size : parseInt( size ) ;
+}
+
+FCKTools.ConvertHtmlSizeToStyle = function( size )
+{
+	return size.endsWith( '%' ) ? size : ( size + 'px' ) ;
+}
+// START iCM MODIFICATIONS
+/*
+// Transfers the supplied attributes to the supplied node
+FCKTools.SetElementAttributes = function( oElement, oAttributes ) 
+{
+	for ( var i = 0; i < oAttributes.length; i++ ) 
+	{
+		if ( oAttributes[i].specified ) // Needed for IE which always returns all attributes whether set or not
+			oElement.setAttribute( oAttributes[i].nodeName, oAttributes[i].nodeValue, 0 ) ;
+	}
+}
+
+// Get immediate block node (P, H1, for example) for the supplied node - the supplied node may itself be a block node in which
+// case it will be returned. If no block node found, returns null.
+FCKTools.GetParentBlockNode = function( oNode )
+{
+	if ( oNode.nodeName.toUpperCase() == "BODY" )
+		return null ;
+	else if ( oNode.nodeType == 1 && FCKRegexLib.BlockElements.test(oNode.tagName) )
+		return oNode ;
+	else
+		return FCKTools.GetParentBlockNode( oNode.parentNode ) ;
+}
+
+// Run through any children of the supplied node. If there are none, or they only comprise 
+// empty text nodes and BR nodes, then the node is effectively empty.
+// Sometimes (on Gecko) a seemingly empty node is coming back with several children that are solely
+// empty text nodes and BRs e.g. the first item in an OL list, for example, when 
+// UseBROnCarriageReturn is set to false. 
+// Seems to be due to the use of the <br _moz_editor_bogus_node="TRUE"> (GECKO_BOGUS) as fillers both
+// in fck_gecko_1.js when html is empty and in ENTER key handler ? If normal BR tags are
+// used instead this doesn't seem to happen....
+FCKTools.NodeIsEmpty = function( oNode )
+{
+	var oSibling = oNode.childNodes[0] ;
+	while ( oSibling )
+	{
+		if ( ( oSibling.nodeType != 1 && oSibling.nodeType != 3 ) || ( oSibling.nodeType == 1 && oSibling.nodeName.toUpperCase() != "BR" ) || ( oSibling.nodeType == 3 && oSibling.nodeValue && oSibling.nodeValue.trim() != '' ) )
+			return false ;
+		
+		oSibling = oSibling.nextSibling ;
+	}
+
+	return true ;
+}
+
+// Returns a document fragment that contains a copy of the specified range of nodes
+FCKTools.GetDocumentFragment = function( oParentNode, oFromNode, oToNode, bIncludeFromNode, bIncludeToNode, bClone )
+{	
+	if ( typeof bIncludeFromNode == "undefined" )  bIncludeFromNode = true ;
+	if ( typeof bIncludeToNode == "undefined" )  bIncludeToNode = true ;
+	if ( typeof bClone == "undefined" )  bClone = true ;
+
+	var oFragment = FCK.EditorDocument.createDocumentFragment() ;
+	
+	var oNode = oFromNode ;
+	while ( oNode && oNode != oToNode )
+	{
+		if ( oNode != oFromNode || bIncludeFromNode )
+			oFragment.appendChild( bClone ? oNode.cloneNode( true ) : oNode ) ;
+			
+		oNode = oNode.nextSibling ;
+	}
+
+	if ( oNode && (oFromNode != oToNode && bIncludeToNode) )
+		oFragment.appendChild( bClone ? oNode.cloneNode( true ) : oNode ) ; // Include To Node
+
+	return oFragment ;
+}
+*/
+// END iCM MODIFICATIONS
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckundo_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckundo_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckundo_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckundo_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+﻿var FCKUndo = new Object() ;
+
+FCKUndo.SaveUndoStep = function()
+{}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckundo_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckundo_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckundo_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckundo_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,97 @@
+﻿var FCKUndo = new Object() ;
+
+FCKUndo.SavedData = new Array() ;
+FCKUndo.CurrentIndex = -1 ;
+FCKUndo.TypesCount = FCKUndo.MaxTypes = 25 ;
+FCKUndo.Typing = false ;
+
+FCKUndo.SaveUndoStep = function()
+{
+	// Shrink the array to the current level.
+	FCKUndo.SavedData = FCKUndo.SavedData.slice( 0, FCKUndo.CurrentIndex + 1 ) ;
+
+	// Get the Actual HTML.
+	var sHtml = FCK.EditorDocument.body.innerHTML ;
+
+	// Cancel operation if the new step is identical to the previous one.
+	if ( FCKUndo.CurrentIndex >= 0 && sHtml == FCKUndo.SavedData[ FCKUndo.CurrentIndex ][0] )
+		return ;
+
+	// If we reach the Maximun number of undo levels, we must remove the first
+	// entry of the list shifting all elements.
+	if ( FCKUndo.CurrentIndex + 1 >= FCKConfig.MaxUndoLevels )
+		FCKUndo.SavedData.shift() ;
+	else
+		FCKUndo.CurrentIndex++ ;
+
+	// Get the actual selection.
+	var sBookmark ;
+	if ( FCK.EditorDocument.selection.type == 'Text' )
+		sBookmark = FCK.EditorDocument.selection.createRange().getBookmark() ;
+
+	// Save the new level in front of the actual position.
+	FCKUndo.SavedData[ FCKUndo.CurrentIndex ] = [ sHtml, sBookmark ] ;
+
+	FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCKUndo.CheckUndoState = function()
+{
+	return ( FCKUndo.Typing || FCKUndo.CurrentIndex > 0 ) ;
+}
+
+FCKUndo.CheckRedoState = function()
+{
+	return ( !FCKUndo.Typing && FCKUndo.CurrentIndex < ( FCKUndo.SavedData.length - 1 ) ) ;
+}
+
+FCKUndo.Undo = function()
+{
+	if ( FCKUndo.CheckUndoState() )
+	{
+		// If it is the first step.
+		if ( FCKUndo.CurrentIndex == ( FCKUndo.SavedData.length - 1 ) )
+		{
+			// Save the actual state for a possible "Redo" call.
+			FCKUndo.SaveUndoStep() ;
+		}
+
+		// Go a step back.
+		FCKUndo._ApplyUndoLevel( --FCKUndo.CurrentIndex ) ;
+
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+}
+
+FCKUndo.Redo = function()
+{
+	if ( FCKUndo.CheckRedoState() )
+	{
+		// Go a step forward.
+		FCKUndo._ApplyUndoLevel( ++FCKUndo.CurrentIndex ) ;
+
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+}
+
+FCKUndo._ApplyUndoLevel = function(level)
+{
+	var oData = FCKUndo.SavedData[ level ] ;
+	
+	if ( !oData )
+		return ;
+
+	// Update the editor contents with that step data.
+	FCK.SetInnerHtml( oData[0] ) ;
+//	FCK.EditorDocument.body.innerHTML = oData[0] ;
+
+	if ( oData[1] ) 
+	{
+		var oRange = FCK.EditorDocument.selection.createRange() ;
+		oRange.moveToBookmark( oData[1] ) ;
+		oRange.select() ;
+	}
+	
+	FCKUndo.TypesCount = 0 ; 
+	FCKUndo.Typing = false ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckurlparams.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckurlparams.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckurlparams.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckurlparams.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,32 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckurlparams.js
+ * 	Defines the FCKURLParams object that is used to get all parameters
+ * 	passed by the URL QueryString (after the "?").
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// #### URLParams: holds all URL passed parameters (like ?Param1=Value1&Param2=Value2)
+var FCKURLParams = new Object() ;
+
+var aParams = document.location.search.substr(1).split('&') ;
+for ( var i = 0 ; i < aParams.length ; i++ )
+{
+	var aParam = aParams[i].split('=') ;
+	var sParamName  = aParam[0] ;
+	var sParamValue = aParam[1] ;
+
+	FCKURLParams[ sParamName ] = sParamValue ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtmlentities.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtmlentities.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtmlentities.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtmlentities.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,322 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckxhtmlentities.js
+ * 	This file define the HTML entities handled by the editor.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKXHtmlEntities = new Object() ;
+
+if ( FCKConfig.ProcessHTMLEntities )
+{
+	FCKXHtmlEntities.Entities = {
+		// Latin-1 Entities
+		' ':'nbsp',
+		'¡':'iexcl',
+		'¢':'cent',
+		'£':'pound',
+		'¤':'curren',
+		'¥':'yen',
+		'¦':'brvbar',
+		'§':'sect',
+		'¨':'uml',
+		'©':'copy',
+		'ª':'ordf',
+		'«':'laquo',
+		'¬':'not',
+		'­':'shy',
+		'®':'reg',
+		'¯':'macr',
+		'°':'deg',
+		'±':'plusmn',
+		'²':'sup2',
+		'³':'sup3',
+		'´':'acute',
+		'µ':'micro',
+		'¶':'para',
+		'·':'middot',
+		'¸':'cedil',
+		'¹':'sup1',
+		'º':'ordm',
+		'»':'raquo',
+		'¼':'frac14',
+		'½':'frac12',
+		'¾':'frac34',
+		'¿':'iquest',
+		'×':'times',
+		'÷':'divide',
+
+		// Symbols and Greek Letters 
+
+		'ƒ':'fnof',
+		'•':'bull',
+		'…':'hellip',
+		'′':'prime',
+		'″':'Prime',
+		'‾':'oline',
+		'⁄':'frasl',
+		'℘':'weierp',
+		'ℑ':'image',
+		'ℜ':'real',
+		'™':'trade',
+		'ℵ':'alefsym',
+		'←':'larr',
+		'↑':'uarr',
+		'→':'rarr',
+		'↓':'darr',
+		'↔':'harr',
+		'↵':'crarr',
+		'⇐':'lArr',
+		'⇑':'uArr',
+		'⇒':'rArr',
+		'⇓':'dArr',
+		'⇔':'hArr',
+		'∀':'forall',
+		'∂':'part',
+		'∃':'exist',
+		'∅':'empty',
+		'∇':'nabla',
+		'∈':'isin',
+		'∉':'notin',
+		'∋':'ni',
+		'∏':'prod',
+		'∑':'sum',
+		'−':'minus',
+		'∗':'lowast',
+		'√':'radic',
+		'∝':'prop',
+		'∞':'infin',
+		'∠':'ang',
+		'∧':'and',
+		'∨':'or',
+		'∩':'cap',
+		'∪':'cup',
+		'∫':'int',
+		'∴':'there4',
+		'∼':'sim',
+		'≅':'cong',
+		'≈':'asymp',
+		'≠':'ne',
+		'≡':'equiv',
+		'≤':'le',
+		'≥':'ge',
+		'⊂':'sub',
+		'⊃':'sup',
+		'⊄':'nsub',
+		'⊆':'sube',
+		'⊇':'supe',
+		'⊕':'oplus',
+		'⊗':'otimes',
+		'⊥':'perp',
+		'⋅':'sdot',
+		'◊':'loz',
+		'♠':'spades',
+		'♣':'clubs',
+		'♥':'hearts',
+		'♦':'diams',
+
+		// Other Special Characters 
+
+		'"':'quot',
+	//	'&':'amp',		// This entity is automatically handled by the XHTML parser.
+	//	'<':'lt',		// This entity is automatically handled by the XHTML parser.
+	//	'>':'gt',		// This entity is automatically handled by the XHTML parser.
+		'ˆ':'circ',
+		'˜':'tilde',
+		' ':'ensp',
+		' ':'emsp',
+		' ':'thinsp',
+		'‌':'zwnj',
+		'‍':'zwj',
+		'‎':'lrm',
+		'‏':'rlm',
+		'–':'ndash',
+		'—':'mdash',
+		'‘':'lsquo',
+		'’':'rsquo',
+		'‚':'sbquo',
+		'“':'ldquo',
+		'”':'rdquo',
+		'„':'bdquo',
+		'†':'dagger',
+		'‡':'Dagger',
+		'‰':'permil',
+		'‹':'lsaquo',
+		'›':'rsaquo',
+		'€':'euro'
+	} ;
+
+	FCKXHtmlEntities.Chars = '' ;
+
+	// Process Base Entities.
+	for ( var e in FCKXHtmlEntities.Entities )
+		FCKXHtmlEntities.Chars += e ;
+
+	// Include Latin Letters Entities.
+	if ( FCKConfig.IncludeLatinEntities )
+	{
+		var oEntities = {
+			'À':'Agrave',
+			'Á':'Aacute',
+			'Â':'Acirc',
+			'Ã':'Atilde',
+			'Ä':'Auml',
+			'Å':'Aring',
+			'Æ':'AElig',
+			'Ç':'Ccedil',
+			'È':'Egrave',
+			'É':'Eacute',
+			'Ê':'Ecirc',
+			'Ë':'Euml',
+			'Ì':'Igrave',
+			'Í':'Iacute',
+			'Î':'Icirc',
+			'Ï':'Iuml',
+			'Ð':'ETH',
+			'Ñ':'Ntilde',
+			'Ò':'Ograve',
+			'Ó':'Oacute',
+			'Ô':'Ocirc',
+			'Õ':'Otilde',
+			'Ö':'Ouml',
+			'Ø':'Oslash',
+			'Ù':'Ugrave',
+			'Ú':'Uacute',
+			'Û':'Ucirc',
+			'Ü':'Uuml',
+			'Ý':'Yacute',
+			'Þ':'THORN',
+			'ß':'szlig',
+			'à':'agrave',
+			'á':'aacute',
+			'â':'acirc',
+			'ã':'atilde',
+			'ä':'auml',
+			'å':'aring',
+			'æ':'aelig',
+			'ç':'ccedil',
+			'è':'egrave',
+			'é':'eacute',
+			'ê':'ecirc',
+			'ë':'euml',
+			'ì':'igrave',
+			'í':'iacute',
+			'î':'icirc',
+			'ï':'iuml',
+			'ð':'eth',
+			'ñ':'ntilde',
+			'ò':'ograve',
+			'ó':'oacute',
+			'ô':'ocirc',
+			'õ':'otilde',
+			'ö':'ouml',
+			'ø':'oslash',
+			'ù':'ugrave',
+			'ú':'uacute',
+			'û':'ucirc',
+			'ü':'uuml',
+			'ý':'yacute',
+			'þ':'thorn',
+			'ÿ':'yuml',
+			'Œ':'OElig',
+			'œ':'oelig',
+			'Š':'Scaron',
+			'š':'scaron',
+			'Ÿ':'Yuml'
+		} ; 
+		
+		for ( var e in oEntities )
+		{
+			FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+			FCKXHtmlEntities.Chars += e ;
+		}
+		
+		oEntities = null ;
+	}
+
+	// Include Greek Letters Entities.
+	if ( FCKConfig.IncludeGreekEntities )
+	{
+		var oEntities = {
+			'Α':'Alpha',
+			'Β':'Beta',
+			'Γ':'Gamma',
+			'Δ':'Delta',
+			'Ε':'Epsilon',
+			'Ζ':'Zeta',
+			'Η':'Eta',
+			'Θ':'Theta',
+			'Ι':'Iota',
+			'Κ':'Kappa',
+			'Λ':'Lambda',
+			'Μ':'Mu',
+			'Ν':'Nu',
+			'Ξ':'Xi',
+			'Ο':'Omicron',
+			'Π':'Pi',
+			'Ρ':'Rho',
+			'Σ':'Sigma',
+			'Τ':'Tau',
+			'Υ':'Upsilon',
+			'Φ':'Phi',
+			'Χ':'Chi',
+			'Ψ':'Psi',
+			'Ω':'Omega',
+			'α':'alpha',
+			'β':'beta',
+			'γ':'gamma',
+			'δ':'delta',
+			'ε':'epsilon',
+			'ζ':'zeta',
+			'η':'eta',
+			'θ':'theta',
+			'ι':'iota',
+			'κ':'kappa',
+			'λ':'lambda',
+			'μ':'mu',
+			'ν':'nu',
+			'ξ':'xi',
+			'ο':'omicron',
+			'π':'pi',
+			'ρ':'rho',
+			'ς':'sigmaf',
+			'σ':'sigma',
+			'τ':'tau',
+			'υ':'upsilon',
+			'φ':'phi',
+			'χ':'chi',
+			'ψ':'psi',
+			'ω':'omega'
+		} ;
+
+		for ( var e in oEntities )
+		{
+			FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+			FCKXHtmlEntities.Chars += e ;
+		}
+
+		oEntities = null ;
+	}
+
+	// Create and Compile the Regex used to separate the entities from the text.
+	FCKXHtmlEntities.EntitiesRegex = new RegExp('','') ;
+	FCKXHtmlEntities.EntitiesRegex.compile( '[' + FCKXHtmlEntities.Chars + ']|[^' + FCKXHtmlEntities.Chars + ']+', 'g' ) ;
+}
+else
+{
+	// Even if we are not processing the entities, we must respect the &nbsp;.
+	FCKXHtmlEntities.Entities = { ' ':'nbsp' } ;
+	FCKXHtmlEntities.EntitiesRegex = /[ ]|[^ ]+/g ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtml_gecko.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtml_gecko.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtml_gecko.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtml_gecko.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,74 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckxhtml_gecko.js
+ * 	Defines the FCKXHtml object, responsible for the XHTML operations.
+ * 	Gecko specific.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+	// Create the XMLSerializer.
+	var oSerializer = new XMLSerializer() ;
+
+	// Return the serialized XML as a string.
+	// Due to a BUG on Gecko, the special chars sequence "#?-:" must be replaced with "&"
+	// for the XHTML entities.
+	return oSerializer.serializeToString( this.MainNode ).replace( FCKRegexLib.GeckoEntitiesMarker, '&' ) ;
+}
+
+// There is a BUG on Gecko... createEntityReference returns null.
+// So we use a trick to append entities on it.
+FCKXHtml._AppendEntity = function( xmlNode, entity )
+{
+	xmlNode.appendChild( this.XML.createTextNode( '#?-:' + entity + ';' ) ) ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node )
+{
+	var aAttributes = htmlNode.attributes ;
+	
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+		
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName.toLowerCase() ;
+			var sAttValue ;
+
+			// The "_fckxhtmljob" attribute is used to mark the already processed elements.
+			if ( sAttName == '_fckxhtmljob' )
+				continue ;
+			// There is a bug in Mozilla that returns '_moz_xxx' attributes as specified.
+			else if ( sAttName.indexOf( '_moz' ) == 0 )
+				continue ;
+			// There are one cases (on Gecko) when the oAttribute.nodeValue must be used:
+			//		- for the "class" attribute
+			else if ( sAttName == 'class' )
+				sAttValue = oAttribute.nodeValue ;
+			// XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked".
+			else if ( oAttribute.nodeValue === true )
+				sAttValue = sAttName ;
+			else
+				sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;	// We must use getAttribute to get it exactly as it is defined.
+
+			if ( FCKConfig.ForceSimpleAmpersand && sAttValue.replace )
+				sAttValue = sAttValue.replace( /&/g, '___FCKAmp___' ) ;
+			
+			this._AppendAttribute( node, sAttName, sAttValue ) ;
+		}
+	}
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtml_ie.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtml_ie.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtml_ie.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtml_ie.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,197 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckxhtml_ie.js
+ * 	Defines the FCKXHtml object, responsible for the XHTML operations.
+ * 	IE specific.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+	return this.MainNode.xml ;
+}
+
+FCKXHtml._AppendEntity = function( xmlNode, entity )
+{
+	xmlNode.appendChild( this.XML.createEntityReference( entity ) ) ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName )
+{
+	var aAttributes = htmlNode.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName.toLowerCase() ;
+			var sAttValue ;
+
+			// The "_fckxhtmljob" attribute is used to mark the already processed elements.
+			if ( sAttName == '_fckxhtmljob' )
+				continue ;
+			// The following must be done because of a bug on IE regarding the style
+			// attribute. It returns "null" for the nodeValue.
+			else if ( sAttName == 'style' )
+				sAttValue = htmlNode.style.cssText ;
+			// There are two cases when the oAttribute.nodeValue must be used:
+			//		- for the "class" attribute
+			//		- for events attributes (on IE only).
+			else if ( sAttName == 'class' || sAttName.indexOf('on') == 0 )
+				sAttValue = oAttribute.nodeValue ;
+			else if ( nodeName == 'body' && sAttName == 'contenteditable' )
+				continue ;
+			// XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked".
+			else if ( oAttribute.nodeValue === true )
+				sAttValue = sAttName ;
+			// We must use getAttribute to get it exactly as it is defined.
+			else if ( ! (sAttValue = htmlNode.getAttribute( sAttName, 2 ) ) )
+				sAttValue = oAttribute.nodeValue ;
+
+			if ( FCKConfig.ForceSimpleAmpersand && sAttValue.replace )
+				sAttValue = sAttValue.replace( /&/g, '___FCKAmp___' ) ;
+
+			this._AppendAttribute( node, sAttName, sAttValue ) ;
+		}
+	}
+}
+
+FCKXHtml.TagProcessors['meta'] = function( node, htmlNode )
+{
+	var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ;
+
+	if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 )
+	{
+		// Get the http-equiv value from the outerHTML.
+		var sHttpEquiv = htmlNode.outerHTML.match( FCKRegexLib.MetaHttpEquiv ) ;
+
+		if ( sHttpEquiv )
+		{
+			sHttpEquiv = sHttpEquiv[1] ;
+			FCKXHtml._AppendAttribute( node, 'http-equiv', sHttpEquiv ) ;
+		}
+	}
+
+	return node ;
+}
+
+// IE automaticaly changes <FONT> tags to <FONT size=+0>.
+FCKXHtml.TagProcessors['font'] = function( node, htmlNode )
+{
+	if ( node.attributes.length == 0 )
+		node = FCKXHtml.XML.createDocumentFragment() ;
+
+	FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// IE doens't see the value attribute as an attribute for the <INPUT> tag.
+FCKXHtml.TagProcessors['input'] = function( node, htmlNode )
+{
+	if ( htmlNode.name )
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+	if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) )
+		FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ;
+
+	return node ;
+}
+
+// IE ignores the "SELECTED" attribute so we must add it manually.
+FCKXHtml.TagProcessors['option'] = function( node, htmlNode )
+{
+	if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) )
+		FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ;
+
+	FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// There is a BUG in IE regarding the ABBR tag.
+FCKXHtml.TagProcessors['abbr'] = function( node, htmlNode )
+{
+	var oNextNode = htmlNode.nextSibling ;
+
+	while ( true )
+	{
+		if ( oNextNode && oNextNode.nodeName != '/ABBR' )
+		{
+			FCKXHtml._AppendNode( node, oNextNode ) ;
+			oNextNode = oNextNode.nextSibling ;
+		}
+		else
+			break ;
+	}
+
+	return node ;
+}
+
+// IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually.
+FCKXHtml.TagProcessors['area'] = function( node, htmlNode )
+{
+	if ( ! node.attributes.getNamedItem( 'coords' ) )
+	{
+		var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
+		if ( sCoords && sCoords != '0,0,0' )
+			FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ;
+	}
+
+	if ( ! node.attributes.getNamedItem( 'shape' ) )
+	{
+		var sCoords = htmlNode.getAttribute( 'shape', 2 ) ;
+		if ( sCoords && sCoords.length > 0 )
+			FCKXHtml._AppendAttribute( node, 'shape', sCoords ) ;
+	}
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['label'] = function( node, htmlNode )
+{
+	if ( htmlNode.htmlFor.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ;
+
+	FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['form'] = function( node, htmlNode )
+{
+	if ( htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset != 'UNKNOWN' )
+		FCKXHtml._AppendAttribute( node, 'accept-charset', htmlNode.acceptCharset ) ;
+
+	if ( htmlNode.name ) 
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; 
+
+	FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// IE doens't hold the name attribute as an attribute for the <TEXTAREA> and <SELECT> tags.
+FCKXHtml.TagProcessors['textarea'] = FCKXHtml.TagProcessors['select'] = function( node, htmlNode )
+{ 
+	if ( htmlNode.name ) 
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; 
+
+	FCKXHtml._AppendChildNodes( node, htmlNode ) ; 
+ 
+	return node ; 
+} 
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtml.js 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtml.js
--- 1.3.11sr1/fckeditor/editor/_source/internals/fckxhtml.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/editor/_source/internals/fckxhtml.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,354 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+ * 
+ * File Name: fckxhtml.js
+ * 	Defines the FCKXHtml object, responsible for the XHTML operations.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+var FCKXHtml = new Object() ;
+
+FCKXHtml.CurrentJobNum = 0 ;
+
+FCKXHtml.GetXHTML = function( node, includeNode, format )
+{
+	// Special blocks are blocks of content that remain untouched during the
+	// process. It is used for SCRIPTs and STYLEs.
+	FCKXHtml.SpecialBlocks = new Array() ;
+
+	// Create the XML DOMDocument object.
+	this.XML = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+
+	// Add a root element that holds all child nodes.
+	this.MainNode = this.XML.appendChild( this.XML.createElement( 'xhtml' ) ) ;
+
+	FCKXHtml.CurrentJobNum++ ;
+
+	if ( includeNode )
+		this._AppendNode( this.MainNode, node ) ;
+	else
+		this._AppendChildNodes( this.MainNode, node, false ) ;
+
+	// Get the resulting XHTML as a string.
+	var sXHTML = this._GetMainXmlString() ;
+
+	// Strip the "XHTML" root node.
+	sXHTML = sXHTML.substr( 7, sXHTML.length - 15 ).trim() ;
+	
+	// Remove the trailing <br> added by Gecko.
+	if ( FCKBrowserInfo.IsGecko )
+		sXHTML = sXHTML.replace( /<br\/>$/, '' ) ;
+
+	// Add a space in the tags with no closing tags, like <br/> -> <br />
+	sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, ' />');
+
+	if ( FCKConfig.ForceSimpleAmpersand )
+		sXHTML = sXHTML.replace( FCKRegexLib.ForceSimpleAmpersand, '&' ) ;
+
+	if ( format )
+		sXHTML = FCKCodeFormatter.Format( sXHTML ) ;
+
+	// Now we put back the SpecialBlocks contents.
+	for ( var i = 0 ; i < FCKXHtml.SpecialBlocks.length ; i++ )
+	{
+		var oRegex = new RegExp( '___FCKsi___' + i ) ;
+		sXHTML = sXHTML.replace( oRegex, FCKXHtml.SpecialBlocks[i] ) ;
+	}
+
+	this.XML = null ;
+
+	return sXHTML
+}
+
+FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue )
+{
+	try
+	{
+		// Create the attribute.
+		var oXmlAtt = this.XML.createAttribute( attributeName ) ;
+
+		oXmlAtt.value = attributeValue ? attributeValue : '' ;
+
+		// Set the attribute in the node.
+		xmlNode.attributes.setNamedItem( oXmlAtt ) ;
+	}
+	catch (e)
+	{}
+}
+
+FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode, isBlockElement )
+{
+	var iCount = 0 ;
+	
+	if ( htmlNode.hasChildNodes() )
+	{
+		// Get all children nodes.
+		var oChildren = htmlNode.childNodes ;
+
+		for ( var i = 0 ; i < oChildren.length ; i++ )
+		{
+			if ( this._AppendNode( xmlNode, oChildren[i] ) )
+				iCount++ ;
+		}
+	}
+	
+	if ( iCount == 0 )
+	{
+		if ( isBlockElement && FCKConfig.FillEmptyBlocks )
+		{
+			this._AppendEntity( xmlNode, 'nbsp' ) ;
+			return ;
+		}
+
+		// We can't use short representation of empty elements that are not marked
+		// as empty in th XHTML DTD.
+		if ( !FCKRegexLib.EmptyElements.test( htmlNode.nodeName ) )
+			xmlNode.appendChild( this.XML.createTextNode('') ) ;
+	}
+}
+
+FCKXHtml._AppendNode = function( xmlNode, htmlNode )
+{
+	switch ( htmlNode.nodeType )
+	{
+		// Element Node.
+		case 1 :
+			if ( htmlNode.getAttribute('_fckfakelement') )
+				return FCKXHtml._AppendNode( xmlNode, FCK.GetRealElement( htmlNode ) ) ;
+		
+			// Mozilla insert custom nodes in the DOM.
+			if ( FCKBrowserInfo.IsGecko && htmlNode.hasAttribute('_moz_editor_bogus_node') )
+				return false ;
+			
+			if ( htmlNode.getAttribute('_fckdelete') )
+				return false ;
+
+			// Create the Element.
+			var sNodeName = htmlNode.nodeName ;
+
+			// Check if the node name is valid, otherwise ignore this tag.
+			if ( !FCKRegexLib.ElementName.test( sNodeName ) )
+				return false ;
+
+			sNodeName = sNodeName.toLowerCase() ;
+
+			if ( FCKBrowserInfo.IsGecko && sNodeName == 'br' && htmlNode.hasAttribute('type') && htmlNode.getAttribute( 'type', 2 ) == '_moz' )
+				return false ;
+
+			// The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML).
+			// So here, the "mark" is checked... if the element is Ok, then mark it.
+			if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )
+				return false ;
+			else
+				htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;
+
+			// If the nodeName starts with a slash, it is a orphan closing tag.
+			// On some strange cases, the nodeName is empty, even if the node exists.
+//			if ( sNodeName.length == 0 || sNodeName.substr(0,1) == '/' )
+//				break ;
+
+			var oNode = this._CreateNode( sNodeName ) ;
+			
+			// Add all attributes.
+			FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode, sNodeName ) ;
+
+			// Tag specific processing.
+			var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ] ;
+
+			if ( oTagProcessor )
+			{
+				oNode = oTagProcessor( oNode, htmlNode ) ;
+				if ( !oNode ) break ;
+			}
+			else
+				this._AppendChildNodes( oNode, htmlNode, FCKRegexLib.BlockElements.test( sNodeName ) ) ;
+
+			xmlNode.appendChild( oNode ) ;
+
+			break ;
+
+		// Text Node.
+		case 3 :
+			this._AppendTextNode( xmlNode, htmlNode.nodeValue.replaceNewLineChars(' ') ) ;
+			break ;
+
+		// Comment
+		case 8 :
+			try { xmlNode.appendChild( this.XML.createComment( htmlNode.nodeValue ) ) ; }
+			catch (e) { /* Do nothing... probably this is a wrong format comment. */ }
+			break ;
+
+		// Unknown Node type.
+		default :
+			xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ;
+			break ;
+	}
+	return true ;
+}
+
+if ( FCKConfig.ForceStrongEm )
+{
+	FCKXHtml._CreateNode = function( nodeName )
+	{
+		switch ( nodeName )
+		{
+			case 'b' :
+				nodeName = 'strong' ;
+				break ;
+			case 'i' :
+				nodeName = 'em' ;
+				break ;
+		}
+		return this.XML.createElement( nodeName ) ;
+	}
+}
+else
+{
+	FCKXHtml._CreateNode = function( nodeName )
+	{
+		return this.XML.createElement( nodeName ) ;
+	}
+}
+
+// Append an item to the SpecialBlocks array and returns the tag to be used.
+FCKXHtml._AppendSpecialItem = function( item )
+{
+	return '___FCKsi___' + FCKXHtml.SpecialBlocks.addItem( item ) ;
+}
+
+//if ( FCKConfig.ProcessHTMLEntities )
+//{
+	FCKXHtml._AppendTextNode = function( targetNode, textValue )
+	{
+		// We can't just replace the special chars with entities and create a
+		// text node with it. We must split the text isolating the special chars
+		// and add each piece a time.
+		var asPieces = textValue.match( FCKXHtmlEntities.EntitiesRegex ) ;
+
+		if ( asPieces )
+		{
+			for ( var i = 0 ; i < asPieces.length ; i++ )
+			{
+				if ( asPieces[i].length == 1 )
+				{
+					var sEntity = FCKXHtmlEntities.Entities[ asPieces[i] ] ;
+					if ( sEntity != null )
+					{
+						this._AppendEntity( targetNode, sEntity ) ;
+						continue ;
+					}
+				}
+				targetNode.appendChild( this.XML.createTextNode( asPieces[i] ) ) ;
+			}
+		}
+	}
+//}
+//else
+//{
+//	FCKXHtml._AppendTextNode = function( targetNode, textValue )
+//	{
+//		targetNode.appendChild( this.XML.createTextNode( textValue ) ) ;
+//	}
+//}
+
+// An object that hold tag specific operations.
+FCKXHtml.TagProcessors = new Object() ;
+
+FCKXHtml.TagProcessors['img'] = function( node )
+{
+	// The "ALT" attribute is required in XHTML.
+	if ( ! node.attributes.getNamedItem( 'alt' ) )
+		FCKXHtml._AppendAttribute( node, 'alt', '' ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['script'] = function( node, htmlNode )
+{
+	// The "TYPE" attribute is required in XHTML.
+	if ( ! node.attributes.getNamedItem( 'type' ) )
+		FCKXHtml._AppendAttribute( node, 'type', 'text/javascript' ) ;
+
+	node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.text ) ) ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['style'] = function( node, htmlNode )
+{
+	// The "_fcktemp" attribute is used to mark the <STYLE> used by the editor
+	// to set some behaviors.
+	if ( htmlNode.getAttribute( '_fcktemp' ) )
+		return null ;
+
+	// The "TYPE" attribute is required in XHTML.
+	if ( ! node.attributes.getNamedItem( 'type' ) )
+		FCKXHtml._AppendAttribute( node, 'type', 'text/css' ) ;
+
+	node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.innerHTML ) ) ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['title'] = function( node, htmlNode )
+{
+	node.appendChild( FCKXHtml.XML.createTextNode( FCK.EditorDocument.title ) ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['base'] = function( node, htmlNode )
+{
+	// The "_fcktemp" attribute is used to mark the <BASE> tag when the editor
+	// automatically sets it using the FCKConfig.BaseHref configuration.
+	if ( htmlNode.getAttribute( '_fcktemp' ) )
+		return null ;
+
+	// IE duplicates the BODY inside the <BASE /> tag (don't ask me why!).
+	// This tag processor does nothing... in this way, no child nodes are added
+	// (also because the BASE tag must be empty).
+	return node ;
+}
+
+FCKXHtml.TagProcessors['link'] = function( node, htmlNode )
+{
+	// The "_fcktemp" attribute is used to mark the fck_internal.css <LINK>
+	// reference.
+	if ( htmlNode.getAttribute( '_fcktemp' ) )
+		return null ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['table'] = function( node, htmlNode )
+{
+	// There is a trick to show table borders when border=0. We add to the
+	// table class the FCK__ShowTableBorders rule. So now we must remove it.
+
+	var oClassAtt = node.attributes.getNamedItem( 'class' ) ;
+
+	if ( oClassAtt && FCKRegexLib.TableBorderClass.test( oClassAtt.nodeValue ) )
+	{
+		var sClass = oClassAtt.nodeValue.replace( FCKRegexLib.TableBorderClass, '' ) ;
+
+		if ( sClass.length == 0 )
+			node.attributes.removeNamedItem( 'class' ) ;
+		else
+			FCKXHtml._AppendAttribute( node, 'class', sClass ) ;
+	}
+
+	FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+	return node ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/fckconfig.js 1.4.0sr5-1/fckeditor/fckconfig.js
--- 1.3.11sr1/fckeditor/fckconfig.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/fckconfig.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,201 @@
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ *         http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ *         http://www.fckeditor.net/
+ * 
+ * File Name: fckconfig.js
+ *     Editor configuration settings.
+ *     See the documentation for more info.
+ * 
+ * File Authors:
+ *         Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+FCKConfig.CustomConfigurationsPath = '' ;
+
+FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;
+
+FCKConfig.DocType = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' ;
+
+FCKConfig.BaseHref = '' ;
+
+FCKConfig.FullPage = false ;
+
+FCKConfig.Debug = false ;
+
+FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/office2003/' ;
+
+FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ;
+
+// FCKConfig.Plugins.Add( 'placeholder', 'en,it' ) ;
+
+FCKConfig.ProtectedSource.Add( /<script[\s\S]*?\/script>/gi ) ;	// <SCRIPT> tags.
+// FCKConfig.ProtectedSource.Add( /<%[\s\S]*?%>/g ) ;	// ASP style server side code <%...%>
+// FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ;	// PHP style server side code <?...?>
+// FCKConfig.ProtectedSource.Add( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ) ;	// ASP.Net style tags <asp:control>
+
+FCKConfig.AutoDetectLanguage    = true ;
+FCKConfig.DefaultLanguage        = 'en' ;
+FCKConfig.ContentLangDirection    = 'ltr' ;
+
+FCKConfig.EnableXHTML        = true ;    // Unsupported: Do not change.
+FCKConfig.EnableSourceXHTML    = true ;
+
+FCKConfig.ProcessHTMLEntities    = true ;
+FCKConfig.IncludeLatinEntities    = true ;
+FCKConfig.IncludeGreekEntities    = true ;
+
+FCKConfig.FillEmptyBlocks    = true ;
+
+FCKConfig.FormatSource        = true ;
+FCKConfig.FormatOutput        = true ;
+FCKConfig.FormatIndentator    = '    ' ;
+
+// Determine how Bold and Italic emphasis are treated - what html format to use.
+FCKConfig.ForceStrongEm = false ;   // Setting of True use <strong> else <b> tag
+FCKConfig.GeckoUseSPAN  = false ;   // Setting of True use <span> tags
+
+FCKConfig.StartupFocus    = true ;
+FCKConfig.ForcePasteAsPlainText    = false ;
+FCKConfig.AutoDetectPasteFromWord = true ;	// IE only.
+FCKConfig.ForceSimpleAmpersand    = false ;
+FCKConfig.TabSpaces        = 0 ;
+FCKConfig.ShowBorders    = true ;
+FCKConfig.UseBROnCarriageReturn    = false ;
+FCKConfig.ToolbarStartExpanded    = true ;
+FCKConfig.ToolbarCanCollapse    = true ;
+FCKConfig.IEForceVScroll = false ;
+FCKConfig.IgnoreEmptyParagraphValue = true ;
+
+FCKConfig.Plugins.Add( 'FullWindow' ) ;
+FCKConfig.Plugins.Add( 'CloseWindow' ) ;
+
+FCKConfig.ToolbarSets["NewToolbarClose"] = [
+    ['Source','-','Undo','Redo','-','Link','Unlink','-','Bold','Italic','Underline','StrikeThrough',
+    '-','JustifyLeft','JustifyCenter','JustifyRight','JustifyFull',
+    '-','OrderedList','UnorderedList','Outdent','Indent'],
+    ['PasteText','PasteWord','-','FontName','FontSize','TextColor','BGColor','-','Rule','-','Image','Table','CloseWindow','-','About']
+] ;
+FCKConfig.ToolbarSets["editor-toolbar1"] = [
+    ['Source','-','Undo','Redo','-','Link','Unlink','-','Bold','Italic',
+    '-','JustifyLeft','JustifyCenter','JustifyRight',
+    '-','OrderedList','UnorderedList','Outdent','Indent','FullWindow','About']
+] ;
+
+
+FCKConfig.ToolbarSets["editor-toolbar2"] = [
+    ['Source','-','Undo','Redo','-','Link','Unlink','-','Bold','Italic','Underline','StrikeThrough',
+    '-','JustifyLeft','JustifyCenter','JustifyRight','JustifyFull',
+    '-','OrderedList','UnorderedList','Outdent','Indent'],
+    ['PasteText','PasteWord','-','FontName','FontSize','TextColor','BGColor','-','Rule','-','Image','Table','FullWindow','-','About']
+] ;
+
+FCKConfig.ToolbarSets["editor-toolbar3"] = [
+    ['Source','Templates','-','Cut','Copy','Paste','PasteText','PasteWord','-',
+    'Undo','Redo','-','Link','Unlink','-','SpellCheck','Rule','-',
+    'Bold','Italic','Underline','StrikeThrough','-','Image','Table'],
+    ['TextColor','BGColor','-','JustifyLeft','JustifyCenter','JustifyRight','-',
+    'OrderedList','UnorderedList','-','Outdent','Indent','FontName','FontSize','-','About']
+] ;
+
+FCKConfig.ToolbarSets["editor-toolbar4"] = [
+    ['Source','Templates','-','Cut','Copy','Paste','PasteText','PasteWord','-',
+    'Find','Replace','-','Undo','Redo','-','RemoveFormat','-','Link','Unlink','-',
+    'Image','SpecialChar','-','Print','SpellCheck'],
+    ['Table','Rule','Bold','Italic','Underline','StrikeThrough','-',
+    'Subscript','Superscript','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','-',
+    'OrderedList','UnorderedList','-','Outdent','Indent','-','TextColor','BGColor','-','About'],
+    ['Style','-','FontFormat','-','FontName','-','FontSize']
+] ;
+FCKConfig.ToolbarSets["Default"] = [
+    ['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
+    ['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
+    ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
+    ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
+    ['OrderedList','UnorderedList','-','Outdent','Indent'],
+    ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
+    ['Link','Unlink','Anchor'],
+    ['Image','Flash','Table'],
+	['Rule','Smiley','SpecialChar','UniversalKey'],
+    ['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
+    '/',
+    ['Style','FontFormat','FontName','FontSize'],
+    ['TextColor','BGColor'],
+    ['About']
+] ;
+
+FCKConfig.ToolbarSets["Basic"] = [
+    ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
+] ;
+
+FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ;
+
+FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ;
+
+FCKConfig.FontNames        = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
+FCKConfig.FontSizes        = '1/xx-small;2/x-small;3/small;4/medium;5/large;6/x-large;7/xx-large' ;
+FCKConfig.FontFormats    = 'p;div;pre;address;h1;h2;h3;h4;h5;h6' ;
+
+FCKConfig.StylesXmlPath        = FCKConfig.EditorPath + 'fckstyles.xml' ;
+FCKConfig.TemplatesXmlPath    = FCKConfig.EditorPath + 'fcktemplates.xml' ;
+
+FCKConfig.SpellChecker            = 'ieSpell' ;    // 'ieSpell' | 'SpellerPages'
+FCKConfig.IeSpellDownloadUrl    = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ;
+
+FCKConfig.MaxUndoLevels = 15 ;
+
+FCKConfig.DisableImageHandles = false ;
+FCKConfig.DisableTableHandles = false ;
+
+FCKConfig.LinkDlgHideTarget        = false ;
+FCKConfig.LinkDlgHideAdvanced    = false ;
+
+FCKConfig.ImageDlgHideLink        = false ;
+FCKConfig.ImageDlgHideAdvanced    = false ;
+
+FCKConfig.FlashDlgHideAdvanced    = false ;
+
+FCKConfig.LinkBrowser = false;
+FCKConfig.LinkBrowserURL = '';
+FCKConfig.LinkBrowserWindowWidth    = screen.width * 0.7 ;    // 70%
+FCKConfig.LinkBrowserWindowHeight    = screen.height * 0.7 ;    // 70%
+
+FCKConfig.ImageBrowser = false;
+FCKConfig.ImageBrowserURL = '';
+FCKConfig.ImageBrowserWindowWidth  = screen.width * 0.7 ;    // 70% ;
+FCKConfig.ImageBrowserWindowHeight = screen.height * 0.7 ;    // 70% ;
+
+FCKConfig.FlashBrowser = false;
+FCKConfig.FlashBrowserURL = '';
+FCKConfig.FlashBrowserWindowWidth  = screen.width * 0.7 ;    //70% ;
+FCKConfig.FlashBrowserWindowHeight = screen.height * 0.7 ;    //70% ;
+
+/*
+FCKConfig.LinkUpload = false ;
+FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/php/upload.php' ;
+FCKConfig.LinkUploadAllowedExtensions    = "" ;            // empty for all
+FCKConfig.LinkUploadDeniedExtensions    = ".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$" ;    // empty for no one
+
+FCKConfig.ImageUpload = true ;
+FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/php/upload.php?Type=Image' ;
+FCKConfig.ImageUploadAllowedExtensions    = ".(jpg|gif|jpeg|png)$" ;        // empty for all
+FCKConfig.ImageUploadDeniedExtensions    = "" ;                            // empty for no one
+
+FCKConfig.FlashUpload = true ;
+FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/php/upload.php?Type=Flash' ;
+FCKConfig.FlashUploadAllowedExtensions    = ".(swf|fla)$" ;        // empty for all
+FCKConfig.FlashUploadDeniedExtensions    = "" ;                    // empty for no one
+*/
+
+FCKConfig.SmileyPath    = FCKConfig.BasePath + 'images/smiley/msn/' ;
+FCKConfig.SmileyImages    = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
+FCKConfig.SmileyColumns = 8 ;
+FCKConfig.SmileyWindowWidth        = 320 ;
+FCKConfig.SmileyWindowHeight    = 240 ;
+
+if( window.console ) window.console.log( 'Config is loaded!' ) ;    // @Packager.Compactor.RemoveLine
diff -ruN 1.3.11sr1/fckeditor/fckeditor.js 1.4.0sr5-1/fckeditor/fckeditor.js
--- 1.3.11sr1/fckeditor/fckeditor.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/fckeditor.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,172 @@
+﻿/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fckeditor.js
+ * 	This is the integration file for JavaScript.
+ * 
+ * 	It defines the FCKeditor class that can be used to create editor
+ * 	instances in a HTML page in the client side. For server side
+ * 	operations, use the specific integration system.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+// FCKeditor Class
+var FCKeditor = function( instanceName, width, height, toolbarSet, value )
+{
+	// Properties
+	this.InstanceName	= instanceName ;
+	this.Width			= width			|| '100%' ;
+	this.Height			= height		|| '200' ;
+	this.ToolbarSet		= toolbarSet	|| 'Default' ;
+	this.Value			= value			|| '' ;
+	this.BasePath		= '/fckeditor/' ;
+	this.CheckBrowser	= true ;
+	this.DisplayErrors	= true ;
+	this.EnableSafari	= false ;		// This is a temporary property, while Safari support is under development.
+
+	this.Config			= new Object() ;
+
+	// Events
+	this.OnError		= null ;	// function( source, errorNumber, errorDescription )
+}
+
+FCKeditor.prototype.Create = function()
+{
+	// Check for errors
+	if ( !this.InstanceName || this.InstanceName.length == 0 )
+	{
+		this._ThrowError( 701, 'You must specify a instance name.' ) ;
+		return ;
+	}
+
+	document.write( '<div>' ) ;
+
+	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+	{
+		document.write( '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" />' ) ;
+		document.write( this._GetConfigHtml() ) ;
+		document.write( this._GetIFrameHtml() ) ;
+	}
+	else
+	{
+		var sWidth  = this.Width.toString().indexOf('%')  > 0 ? this.Width  : this.Width  + 'px' ;
+		var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
+		document.write('<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" wrap="virtual">' + this._HTMLEncode( this.Value ) + '<\/textarea>') ;
+	}
+
+	document.write( '</div>' ) ;
+}
+
+FCKeditor.prototype.ReplaceTextarea = function()
+{
+	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+	{
+		var oTextarea = document.getElementById( this.InstanceName ) ;
+		
+		if ( !oTextarea )
+			oTextarea = document.getElementsByName( this.InstanceName )[0] ;
+		
+		if ( !oTextarea || oTextarea.tagName != 'TEXTAREA' )
+		{
+			alert( 'Error: The TEXTAREA id "' + this.InstanceName + '" was not found' ) ;
+			return ;
+		}
+
+		oTextarea.style.display = 'none' ;
+		this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
+		this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
+	}
+}
+
+FCKeditor.prototype._InsertHtmlBefore = function( html, element )
+{
+	if ( element.insertAdjacentHTML )	// IE
+		element.insertAdjacentHTML( 'beforeBegin', html ) ;
+	else								// Gecko
+	{
+		var oRange = document.createRange() ;
+		oRange.setStartBefore( element ) ;
+		var oFragment = oRange.createContextualFragment( html );
+		element.parentNode.insertBefore( oFragment, element ) ;
+	}
+}
+
+FCKeditor.prototype._GetConfigHtml = function()
+{
+	var sConfig = '' ;
+	for ( var o in this.Config )
+	{
+		if ( sConfig.length > 0 ) sConfig += '&amp;' ;
+		sConfig += escape(o) + '=' + escape( this.Config[o] ) ;
+	}
+
+	return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" />' ;
+}
+
+FCKeditor.prototype._GetIFrameHtml = function()
+{
+	var sFile = (/fcksource=true/i).test( window.top.location.search ) ? 'fckeditor.original.html' : 'fckeditor.html' ;
+	var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + this.InstanceName ;
+	if (this.ToolbarSet) sLink += '&Toolbar=' + this.ToolbarSet ;
+
+	return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="no" scrolling="no"></iframe>' ;
+}
+
+FCKeditor.prototype._IsCompatibleBrowser = function()
+{
+	var sAgent = navigator.userAgent.toLowerCase() ;
+
+	// Internet Explorer
+	if ( sAgent.indexOf("msie") != -1 && sAgent.indexOf("mac") == -1 && sAgent.indexOf("opera") == -1 )
+	{
+		var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
+		return ( sBrowserVersion >= 5.5 ) ;
+	}
+	// Gecko
+	else if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 )
+		return true ;
+	// Safari
+	else if ( this.EnableSafari && sAgent.indexOf( 'safari' ) != -1 )
+		return ( sAgent.match( /safari\/(\d+)/ )[1] >= 312 ) ;	// Build must be at least 312 (1.3)
+	else
+		return false ;
+}
+
+FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
+{
+	this.ErrorNumber		= errorNumber ;
+	this.ErrorDescription	= errorDescription ;
+
+	if ( this.DisplayErrors )
+	{
+		document.write( '<div style="COLOR: #ff0000">' ) ;
+		document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
+		document.write( '</div>' ) ;
+	}
+
+	if ( typeof( this.OnError ) == 'function' )
+		this.OnError( this, errorNumber, errorDescription ) ;
+}
+
+FCKeditor.prototype._HTMLEncode = function( text )
+{
+	if ( typeof( text ) != "string" )
+		text = text.toString() ;
+
+	text = text.replace(/&/g, "&amp;") ;
+	text = text.replace(/"/g, "&quot;") ;
+	text = text.replace(/</g, "&lt;") ;
+	text = text.replace(/>/g, "&gt;") ;
+	text = text.replace(/'/g, "&#39;") ;
+
+	return text ;
+}
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/fckeditor.php 1.4.0sr5-1/fckeditor/fckeditor.php
--- 1.3.11sr1/fckeditor/fckeditor.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/fckeditor.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,160 @@
+<?php 
+/*
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fckeditor.php
+ * 	This is the integration file for PHP.
+ * 	
+ * 	It defines the FCKeditor class that can be used to create editor
+ * 	instances in PHP pages on server side.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+ */
+
+class FCKeditor
+{
+	var $InstanceName ;
+	var $BasePath ;
+	var $Width ;
+	var $Height ;
+	var $ToolbarSet ;
+	var $Value ;
+	var $Config ;
+
+	// PHP 5 Constructor (by Marcus Bointon <coolbru@users.sourceforge.net>)
+	function __construct( $instanceName )
+ 	{
+		$this->InstanceName	= $instanceName ;
+		$this->BasePath		= '/FCKeditor/' ;
+		$this->Width		= '100%' ;
+		$this->Height		= '200' ;
+		$this->ToolbarSet	= 'Default' ;
+		$this->Value		= '' ;
+
+		$this->Config		= array() ;
+	}
+	
+	// PHP 4 Contructor
+	function FCKeditor( $instanceName )
+	{
+		$this->__construct( $instanceName ) ;
+	}
+
+	function Create()
+	{
+		echo $this->CreateHtml() ;
+	}
+	
+	function CreateHtml()
+	{
+		$HtmlValue = htmlspecialchars( $this->Value ) ;
+
+		$Html = '<div>' ;
+		
+		if ( $this->IsCompatible() )
+		{
+			if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" )
+				$File = 'fckeditor.original.html' ;
+			else
+				$File = 'fckeditor.html' ;
+
+			$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ;
+			
+			if ( $this->ToolbarSet != '' )
+				$Link .= "&amp;Toolbar={$this->ToolbarSet}" ;
+
+			// Render the linked hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" />" ;
+
+			// Render the configurations hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" />" ;
+
+			// Render the editor IFRAME.
+			$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"no\" scrolling=\"no\"></iframe>" ;
+		}
+		else
+		{
+			if ( strpos( $this->Width, '%' ) === false )
+				$WidthCSS = $this->Width . 'px' ;
+			else
+				$WidthCSS = $this->Width ;
+
+			if ( strpos( $this->Height, '%' ) === false )
+				$HeightCSS = $this->Height . 'px' ;
+			else
+				$HeightCSS = $this->Height ;
+
+			$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\" wrap=\"virtual\">{$HtmlValue}</textarea>" ;
+		}
+
+		$Html .= '</div>' ;
+		
+		return $Html ;
+	}
+
+	function IsCompatible()
+	{
+		global $HTTP_USER_AGENT ;
+
+		if ( isset( $HTTP_USER_AGENT ) )
+			$sAgent = $HTTP_USER_AGENT ;
+		else
+			$sAgent = $_SERVER['HTTP_USER_AGENT'] ;
+
+		if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false )
+		{
+			$iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ;
+			return ($iVersion >= 5.5) ;
+		}
+		else if ( strpos($sAgent, 'Gecko/') !== false )
+		{
+			$iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
+			return ($iVersion >= 20030210) ;
+		}
+		else
+			return false ;
+	}
+
+	function GetConfigFieldString()
+	{
+		$sParams = '' ;
+		$bFirst = true ;
+
+		foreach ( $this->Config as $sKey => $sValue )
+		{
+			if ( $bFirst == false )
+				$sParams .= '&amp;' ;
+			else
+				$bFirst = false ;
+			
+			if ( $sValue === true )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
+			else if ( $sValue === false )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
+			else
+				$sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
+		}
+		
+		return $sParams ;
+	}
+
+	function EncodeConfig( $valueToEncode )
+	{
+		$chars = array( 
+			'&' => '%26', 
+			'=' => '%3D', 
+			'"' => '%22' ) ;
+
+		return strtr( $valueToEncode,  $chars ) ;
+	}
+}
+
+?>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/fckstyles.xml 1.4.0sr5-1/fckeditor/fckstyles.xml
--- 1.3.11sr1/fckeditor/fckstyles.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/fckstyles.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * File Name: fckstyles.xml
+ * 	This is the sample style definitions file. It makes the styles combo
+ * 	completely customizable.
+ * 	See FCKConfig.StylesXmlPath in the configuration file.
+ * 
+ * File Authors:
+ * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
+-->
+<Styles>
+	<Style name="Image on Left" element="img">
+		<Attribute name="style" value="padding: 5px; margin-right: 5px" />
+		<Attribute name="border" value="2" />
+		<Attribute name="align" value="left" />
+	</Style>
+	<Style name="Image on Right" element="img">
+		<Attribute name="style" value="padding: 5px; margin-left: 5px" />
+		<Attribute name="border" value="2" />
+		<Attribute name="align" value="right" />
+	</Style>
+	<Style name="Custom Bold" element="span">
+		<Attribute name="style" value="font-weight: bold;" />
+	</Style>
+	<Style name="Custom Italic" element="em" />
+	<Style name="Title" element="span">
+		<Attribute name="class" value="Title" />
+	</Style>
+	<Style name="Code" element="span">
+		<Attribute name="class" value="Code" />
+	</Style>
+	<Style name="Title H3" element="h3" />
+	<Style name="Custom Ruler" element="hr">
+		<Attribute name="size" value="1" />
+		<Attribute name="color" value="#ff0000" />
+	</Style>
+</Styles>
\ No newline at end of file
diff -ruN 1.3.11sr1/fckeditor/fcktemplates.xml 1.4.0sr5-1/fckeditor/fcktemplates.xml
--- 1.3.11sr1/fckeditor/fcktemplates.xml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/fcktemplates.xml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<Templates imagesBasePath="fck_template/images/">
+	<Template title="Image and Title" image="template1.gif">
+		<Description>One main image with a title and text that surround the image.</Description>
+		<Html>
+			<![CDATA[
+				<img style="MARGIN-RIGHT: 10px" height="100" alt="" width="100" align="left"/>
+				<h3>Type the title here</h3>
+				Type the text here
+			]]>
+		</Html>
+	</Template>
+	<Template title="Strange Template" image="template2.gif">
+		<Description>A template that defines two colums, each one with a title, and some text.</Description>
+		<Html>
+			<![CDATA[
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tbody>
+						<tr>
+							<td width="50%">
+							<h3>Title 1</h3>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
+							<td width="50%">
+							<h3>Title 2</h3>
+							</td>
+						</tr>
+						<tr>
+							<td>Text 1</td>
+							<td>&nbsp;</td>
+							<td>Text 2</td>
+						</tr>
+					</tbody>
+				</table>
+				More text goes here.
+			]]>
+		</Html>
+	</Template>
+	<Template title="Text and Table" image="template3.gif">
+		<Description>A title with some text and a table.</Description>
+		<Html>
+			<![CDATA[
+				<table align="left" width="80%" border="0" cellspacing="0" cellpadding="0"><tr><td>
+					<h3>Title goes here</h3>
+					<p>
+					<table style="FLOAT: right" cellspacing="0" cellpadding="0" width="150" border="1">
+						<tbody>
+							<tr>
+								<td align="center" colspan="3"><strong>Table title</strong></td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+						</tbody>
+					</table>
+					Type the text here</p>
+				</td></tr></table>
+			]]>
+		</Html>
+	</Template>
+</Templates>
diff -ruN 1.3.11sr1/fckeditor/license.txt 1.4.0sr5-1/fckeditor/license.txt
--- 1.3.11sr1/fckeditor/license.txt	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/license.txt	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,458 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff -ruN 1.3.11sr1/fckeditor/_whatsnew.html 1.4.0sr5-1/fckeditor/_whatsnew.html
--- 1.3.11sr1/fckeditor/_whatsnew.html	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/fckeditor/_whatsnew.html	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,2132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for internet
+ * Copyright (C) 2003-2005 Frederico Caldeira Knabben
+ * 
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * For further information visit:
+ * 		http://www.fckeditor.net/
+ * 
+ * "Support Open Source software. What about a donation today?"
+-->
+<html>
+	<head>
+		<title>FCKeditor - What's New?</title>
+		<style>
+			BODY { FONT-FAMILY: Arial, Verdana, Sans-Serif }
+			P { MARGIN-LEFT: 20px }
+			</style>
+	</head>
+	<body>
+		<H3>
+			Version 2.1.1</H3>
+		<P>New Features and Improvements:</P>
+		<UL>
+			<LI>
+				The new "<STRONG>Insert Page Break</STRONG>"&nbsp;command (for printing)&nbsp;has been introduced.*
+  <LI>The editor package now has a root directory called "FCKeditor".</LI></UL>
+		<P>Fixed Bugs:</P>
+		<UL>
+			<LI>
+				[<A 
+  href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1326285&amp;group_id=75348&amp;atid=543653" 
+  target="_blank">SF BUG-1326285</A>] [<A 
+  href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1316430&amp;group_id=75348&amp;atid=543653" 
+  target="_blank">SF BUG-1316430</A>] [<A 
+  href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1323662&amp;group_id=75348&amp;atid=543653" 
+  target="_blank">SF BUG-1323662</A>] [<A 
+  href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1326223&amp;group_id=75348&amp;atid=543653" 
+  target="_blank">SF BUG-1326223</A>] We are doing a little step back with this 
+  version. The ENTER and BACKSPACE behavior changes for Firefox have been 
+  remove. It is a nice feature, but we need much more testing&nbsp;on it. It 
+  introduced some bugs and so its preferable to not have that feature, avoiding 
+  problems (even if that feature was intended to solve some issues).
+  <LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1289372&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1275714</A>] Comments in the beginning of the 
+			source are now preserved when using the "undo" and "redo" commands.
+			<LI>
+				The "undo" and "redo" commands now work for the Style 
+  command.
+  <LI>An error in the execution of the pasting commands on 
+  Firefox has been fixed.
+  <LI>[<A 
+  href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1326184&amp;group_id=75348" 
+  target="_blank">SF BUG-1326184</A>] No strange (invalid) entities are created 
+  when using Firefox. Also, the &amp;nbsp; used by the FillEmptyBlocks setting 
+  is maintained even if you disable the ProcessHTMLEntities setting.</LI></UL>
+		<P>* This version has been partially sponsored by <A href="http://www.acttive.com.br/" target="_blank">
+				Acctive Software&nbsp;S.A.</A>.</P>
+		<H3>Version 2.1</H3>
+		<P>New Features and Improvements:</P>
+		<UL>
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1200328&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1200328</A>] The editor now offers a way to 
+			"protect" part of the source to remain untouched while editing or changing 
+			views.&nbsp;Just use the "FCKConfig.ProtectedSource" object to configure it and 
+			customize to your needs. It is based on regular expressions. See fckconfig.js 
+			for some samples.
+			<LI>
+				The editor now offers native support for <STRONG>Lasso</STRONG>. Thanks and 
+			welcome&nbsp;to our new developer Jason Huck.
+			<LI>
+				New language files are available:
+				<UL>
+					<LI>
+						<STRONG>Faraose</STRONG>
+					(by Smin Lassaberg and&nbsp;Helgi Arnthorsson)
+					<LI>
+						<STRONG>Malay</STRONG>
+					(by Fairul Izham Mohd Mokhlas)
+					<LI>
+						<STRONG>Mongolian</STRONG>
+					(by Lkamtseren Odonbaatar)
+					<LI>
+						<STRONG>Vietnamese</STRONG> (by Phan Binh Giang)</LI></UL>
+			<LI>
+			A new configurable&nbsp;ColdFusion connector is available. Thanks to Mark 
+			Woods. Many enhancements has been introduced with it.
+			<LI>
+			The PHP connector for the default File Browser now sorts the folders and files 
+			names.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1289372&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1289372</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1282758&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1282758</A>] In the PHP connector it is now 
+			possible to set the absolute (server) path to the User Files directory, 
+			avoiding problems with Virtual Directories, Symbolic Links or Aliases. Take a 
+			look at the config.php file.
+			<LI>
+			The ASP.Net uploader (for Quick Uploads) has been added to the package.
+			<LI>
+				A new way to define <STRONG>simple "combo" toolbar items</STRONG>
+			, like Style and Font, has been introduced.&nbsp;Thanks&nbsp;to Steve 
+			Lineberry.&nbsp;See sample06.html and the "simplecommands" plugin&nbsp;to fully 
+			understand it.
+			<LI>
+			A new test case has been added that shows how to set the editor background 
+			dynamically without using a CSS.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155906&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155906</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1110116&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1110116</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1216332&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1216332</A>] The "AutoDetectPasteFromWord" 
+			configuration option is back (IE only feature).
+			<LI>
+			The&nbsp;new "OnAfterLinkedFieldUpdate" event has been introduced. If is fired 
+			when the editor updates its hidden associated field.
+			<LI>
+			Attention: The color of the right border of the toolbar (left on RTL 
+			interfaces) has been moved from code to the CSS (TB_SideBorder class). Update 
+			your custom skins.
+			<LI>
+			A&nbsp;sample "htaccess.txt" file has been added to the editor's package to 
+			show how to configure some Linux sites that could present problems on Firefox 
+			with "Illegal characters" errors. Respectively the "﻿" chars.
+			<LI>
+			With the JavaScript, ASP and PHP integration files, you can set the QueryString 
+			value "fcksource=true" to load the editor using the source files (located in 
+			the _source directory) instead of the compressed ones. Thanks to Kae Verens for 
+			the suggestion.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1246623&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1246623</A>] The new configuration option 
+			"ForceStrongEm" has been introduced so you can force the editor to convert all 
+			&lt;B&gt; and &lt;I&gt; tags to &lt;STRONG&gt; and &lt;EM&gt; respectively.
+			<LI>
+				A nice contribution has been done by Goss Interactive Ltd:
+				<UL>
+					<LI>
+						[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1246949&amp;group_id=75348&amp;atid=543653"
+							target="_blank">SF BUG-1246949</A>] Implemented ENTER key and BACKSPACE key 
+						handlers for Gecko so that P tags (or an appropriate block element) get 
+						inserted instead of BR tags when not in the UseBROnCarriageReturn config mode.
+						<BR>
+						The ENTER key handling has been written to function much the same as the ENTER 
+						key handling on IE : as soon as the ENTER key is pressed, existing content will 
+						be wrapped with a suitable block element (P tag) as appropriate and a new block 
+						element (P tag) will be started.
+						<BR>
+					The ENTER key handler also caters for pressing ENTER within empty list items - 
+					ENTER in an empty item at the top of a list will remove that list item and 
+					start a new P tag above the list; ENTER in an empty item at the bottom of a 
+					list will remove that list item and start a new P tag below the list; ENTER in 
+					an empty item in the middle of a list will remove that list item, split the 
+					list into two, and start a new P tag between the two lists.
+					<LI>
+					Any tables that are found to be incorrectly nested within a block element (P 
+					tag) will be moved out of the block element when loaded into the editor. This 
+					is required for the new ENTER/BACKSPACE key handlers and it also avoids 
+					non-compliant HTML.&nbsp;
+					<LI>
+						The InsertOrderedList and InsertUnorderedList commands have been overridden on 
+						Gecko to ensure that block elements (P tags) are placed around a list item's 
+						content when it is moved out of the list due to clicking on the editor's list 
+						toolbar buttons (when not in the UseBROnCarriageReturn config mode).
+					</LI>
+				</UL>
+			</LI>
+		</UL>
+		<P>Fixed Bugs:</P>
+		<UL>
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1253255&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1253255</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1253255&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1265520</A>] Due to changes on version 2.0, the 
+			anchor list was not anymore visible in the link dialog window. It has been 
+			fixed.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1242979&amp;group_id=75348"
+					target="_blank">SF BUG-1242979</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1251354&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1251354</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1256178&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1256178</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1274841&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1274841</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1303949&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1303949</A>] Due to a bug on Firefox, some keys 
+			stopped working on startup over Firefox. It has been fixed.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1251373&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1251373</A>
+			] The above fix also has&nbsp;corrected some strange behaviors on Firefox.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1144258"
+					target="_blank">SF BUG-1144258</A>] [<A href="https://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1092081"
+					target="_blank">SF BUG-1092081</A>] The File Browsers now run on 
+			the&nbsp;same server session used in the page where the editor is placed in (IE 
+			issue). Thanks to Simone Chiaretta.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1305619&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1305619</A>
+			] No more repeated login dialogs when running the editor with Windows 
+			Integrated Security with IIS.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1245304&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1245304</A>] The Test Case 004 is now working 
+			correctly. It has been changed to set the editor hidden at startup.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1290610&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1290610</A>
+			] Over HTTPS, there were some warnings when loading the Images, Flash and Link 
+			dialogs. Fixed.
+			<LI>
+			Due to Gecko bugs, two errors were thrown when loading the editor in a hidden 
+			div. Workarounds have been introduced. In any case, the testcase 004 hack is 
+			needed when showing the editor (as in a tabbed interface).
+			<LI>
+			An invalid path in the dialogs CSS file has been corrected.
+			<LI>
+			On IE, the Undo/Redo can now be controlled using the Ctrl+Z and Ctrl+Y shortcut 
+			keys.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1295538&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1295538</A>
+			] A few Undo/Redo fixes for IE have been done.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1247070&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1247070</A>] On Gecko, it is now possible to use 
+			the shortcut keys for Bold (CTRL+B), Italic (CTRL+I) and Underline (CTRL+U), 
+			like in IE.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1274303&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1274303</A>] The "Insert Column" command is now 
+			working correctly on TH cells. It also copies any attribute applied to the 
+			source cells.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1287070&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1287070</A>
+			] In the Universal Keyboard, the Arabic keystrokes translator is now working 
+			with Firefox. Thanks again to Abdul-Aziz Al-Oraij.
+			<LI>
+			The editor now handles AJAX requests with HTTP status 304.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157780&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1157780</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229077&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1229077</A>] Weird comments are now handled 
+			correctly (ignored on some cases).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155774&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155774</A>] A spelling error in the Bulleted 
+			List Properties dialog has been corrected.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1272018&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1272018</A>] The ampersand character can now be 
+			added from the Special Chars dialog.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1263161&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1263161</A>] A small fix has been applied to the 
+			sampleposteddata.php file. Thanks to Mike Wallace.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1241504&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1241504</A>] The editor now looks also for the 
+			ID of the hidden linked field.
+			<LI>
+			The caption property on tables is now working on Gecko. Thanks to Helen Somers 
+			(Goss Interactive Ltd).
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1297431&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1297431</A>] With IE, the editor now works 
+			locally when its files are placed in a directory path that contains spaces.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1279551&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1279551</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1242105&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1242105</A>] On IE, some features are dependant 
+			of ActiveX components (secure... distributed&nbsp;with IE itself). Some 
+			security setting could avoid the usage of those components and the editor would 
+			stop working. Now a message is shown, indicating the use the minimum necessary 
+			settings need&nbsp;by the editor to run.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1298880&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1298880</A>] Firefox can't handle the STRONG and 
+			EM tags. Those tags are now converted to B and I so it works accordingly.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1271723&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1271723</A>] On IE, it is now possible to select 
+			the text and work correctly in the contents of absolute positioned/dimensioned 
+			divs.
+			<LI>
+			On IE, there is no need to click twice in the editor to&nbsp;activate the 
+			cursor in the editing area.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1221621&amp;group_id=75348"
+					target="_blank">SF BUG-1221621</A>] Many "warnings" in the Firefox 
+			console are not thrown anymore.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1295526&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1295526</A>] While&nbsp;editing on "FullPage" 
+			mode the basehref is now active for CSS "link" tags.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1222584&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1222584</A>] A small fix to the PHP connector 
+			has been applied.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1281313&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1281313</A>] A few small changes to avoid 
+			problems with Plone. Thanks to Jean-mat.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1275911&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1275911</A>] A check for double dots sequences on 
+				directory names on creation has been introduced to the PHP and ASP connectors.</LI></UL>
+		<H3>Version 2.0</H3>
+		<P>New Features and Improvements:</P>
+		<UL>
+			<LI>
+				The&nbsp;new "<STRONG>Flash</STRONG>" command is available. Now you can 
+			easily handle Flash content, over IE and Gecko, including server browser 
+			integration and context menu support. Due to limitations of the browsers, it is 
+			not possible to see the preview of the movie while editing, so a nice 
+			"placeholder" is used instead. *
+			<LI>
+				A&nbsp;"<STRONG>Quick Upload</STRONG>
+			" option is now available in the link, image and flash dialog windows, so the 
+			user don't need to go (or have) the File Browser for this operations. The ASP 
+			and PHP uploader&nbsp;are included.&nbsp;Take a look at the configuration 
+			file.***
+			<LI>
+				Added support for <STRONG>Active FoxPro Pages</STRONG>
+			. Thanks to our new developer, Snke Freitag.
+			<LI>
+				It is now possible to <STRONG>disable the size handles</STRONG>
+			for images and tables (IE only feature). Take a look at the DisableImageHandles 
+			and DisableTableHandles configuration options.
+			<LI>
+			The handles on form fields&nbsp;(small squares around them) and the inline 
+			editing of&nbsp;its contents&nbsp;have been disabled. This makes it easier to 
+			users to use the controls.
+			<LI>
+			A much better support for Word pasting operations has been introduced. Now it 
+			uses a dialog box, in this way we have better results and more control.**
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1225372&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1225372</A>] A small change has been done to the 
+				PHP integration file. The generic __construct constructor has been added for 
+				better PHP 5 sub-classing&nbsp;compatibility (backward compatible). Thanks to 
+				Marcus Bointon.</LI></UL>
+		<P>Fixed Bugs:</P>
+		<UL>
+			<LI>
+			ATTENTION: Some security changes have been made to the connectors. Now you must 
+			explicitly enable the connector you want to use. Please test your application 
+			before deploying this update.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1211591"
+					target="_blank">SF BUG-1211591</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1204273&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1204273</A>] The connectors have been changed so 
+			it is not possible to use ".." on directory names.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1219734&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1219734</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1219728&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1219728</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1208654&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1208654</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205442&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1205442</A>] There was an error in the page 
+			unload on some cases that has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1209708"
+					target="_blank">SF BUG-1209708</A>] [<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1214125"
+					target="_blank">SF BUG-1214125</A>] The undo on IE is now working 
+			correctly when the user starts typing.
+			<LI>
+			The preview now loads "Full Page" editing correctly. It also uses the same 
+			XHTML code produced by the final output.
+			<LI>
+			The "Templates" dialog was not working on some very specific (and strange) 
+			occasions over IE.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1199631&amp;group_id=75348"
+					target="_blank">SF BUG-1199631</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1171944&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1171944</A>] A new option is available to avoid 
+			a bad IE behavior that shows the horizontal scrollbar even when not needed. You 
+			can now force the vertical scrollbar to be always visible. Just set the 
+			"IEForceVScroll" configuration option to "true". Thanks to Grant Bartlett.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212026&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1212026</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1228860&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1228860</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1211775&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1211775</A>] [<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1199824"
+					target="_blank">SF BUG-1199824</A>] An error in the Packager has been 
+			corrected.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1163669"
+					target="_blank">SF BUG-1163669</A>] The XHTML processor now adds a 
+			space before the closing slash of tags that don't have a closing tag, like 
+			&lt;br /&gt;.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1213733&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1213733</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1216866&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1216866</A>]&nbsp;[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1209673&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1209673</A>]&nbsp;[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155454&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155454</A>]&nbsp;[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1187936&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1187936</A>
+			]&nbsp;Now, on Gecko, the source is opened in a dialog window to avoid fatal 
+			errors (Gecko bugs).
+			<LI>
+			Some pages have been changed to avoid importing errors on Plone. Thanks to 
+			Arthur Kalmenson.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1171606&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1171606</A>] There&nbsp;is a bug on IE that 
+			makes the editor to not work if the instance name matches a meta tag name. 
+			Fixed.
+			<LI>
+			On Firefox, the source code is now opened in a dialog box, to avoid error on 
+			pages with more than one editor.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1225703&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1225703</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1214941&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1214941</A>] The "ForcePasteAsPlainText" 
+			configuration option is now working correctly on Gecko browsers. Thanks to 
+			Manuel Polo.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1228836&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1228836</A>] The "Show Table Borders" feature is 
+			now working on Gecko browsers.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212529&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1212529</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212517&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1212517</A>] The default File Browser now 
+			accepts connectors with querystring parameters (with "?"). Thanks to Tomas 
+			Jucius.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1233318&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1233318</A>] A JavaScript error thrown when 
+			using the Print command has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229696&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1229696</A>] A regular expression has been 
+			escaped to avoid problems when opening the code in some editors. It has been 
+			moved to a&nbsp;dialog window.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1231978&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1231978</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1228939&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1228939</A>] The Preview window is now using the 
+			Content Type and Base href.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1232056&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1232056</A>] The&nbsp;anchor icon is now working 
+			correctly on IE.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1232056&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1202468</A>] The anchor icon is now available on 
+			Gecko too.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1236279&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1236279</A>] A security warning has been 
+			corrected when using the File Browser over HTTPS.
+			<LI>
+			The ASP implementation now avoid errors when setting the editor value to null 
+			values.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1237359&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1237359</A>] The trailing &lt;BR&gt; added by 
+			Gecko at the end of the source is now removed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1170828"
+					target="_blank">SF BUG-1170828</A>] No more &amp;nbsp; is added to the 
+			source when using the "New Page" button.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1165264&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1165264</A>] A&nbsp;new configuration option has 
+			been included to force the editor to ignore empty paragraph 
+			values&nbsp;(&lt;p&gt;&amp;nbsp;&lt;/p&gt;), returning empty ("").
+			<LI>
+			No more &amp;nbsp; is added when creating a table or adding columns, rows or 
+			cells.
+			<LI>
+			The &lt;TD&gt; tags are now included in the FillEmptyBlocks configuration 
+			handling.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1224829&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1224829</A>] A small bug in the "Find" dialog 
+			has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1221307&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1221307</A>] A small bug in the "Image" dialog 
+			has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1219981&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1219981</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155726&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155726</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1178473&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1178473</A>] It is handling the &lt;FORM&gt;, 
+			&lt;TEXTAREA&gt; and &lt;SELECT&gt; tags "name" attribute correctly. Thanks to 
+			thc33.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205403&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1205403</A>] The checkbox and radio button 
+			values are now handled correctly in their dialog windows. Thanks to thc33.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1236626&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1236626</A>] The toolbar now doesn't need to 
+			collapse when unloading the page (IE only).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212559&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1212559</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1017231&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1017231</A>] The "Save" button now calls the 
+			"onsubmit" event before posting the form. The submit can be cancelled if the 
+			onsubmit returns "false".
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1215823&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1215823</A>] The editor now works correctly on 
+			Firefox if it values is set to "&lt;p&gt;&lt;/p&gt;".
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1217546&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1217546</A>] No error is thrown when "pasting as 
+			plain text" and no text is available for pasting (as an image for example).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1207031&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1207031</A>] [<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1223978"
+					target="_blank">SF BUG-1223978</A>] The context menu is now available 
+			in the source view.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1213871"
+					target="_blank">SF BUG-1213871</A>] Undo has been added to table 
+			creation and table operation commands.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205211&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1205211</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229941&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1229941</A>] Small bug in the mcpuk file 
+				browser&nbsp;have been corrected.</LI></UL>
+		<P>* This version has been partially sponsored by <A href="http://www.infineon.com/" target="_blank">
+				Infineon Technologies AG</A>.<BR>
+			** This version has been partially sponsored by <a href="http://www.visualsoft.co.uk">
+				Visualsoft</a> <a href="http://www.visualsoft.co.uk/websolutions.html">Web 
+				Solutions</a>.<BR>
+			*** This version has been partially sponsored by <A href="http://www.webcrossing.com" target="_blank">
+				Web Crossing, Inc</A>.</P>
+		<H3>Version 2.0&nbsp;FC (Final Candidate)</H3>
+		<P>New Features and Improvements:</P>
+		<UL>
+			<LI>
+				A new tab called "<STRONG>Link</STRONG>" is available in the<STRONG> Image Dialog</STRONG>
+			window. In this way you can insert or modify the image link directly from that 
+			dialog.*
+			<LI>
+				The new "<STRONG>Templates</STRONG>" command is now available. Now the user 
+			can select from a list of pre-build HTML and fill the editor with it. Take a 
+			look at the "_docs" for more info.**
+			<LI>
+				The <A href="http://mcpuk.net/fbxp/" target="_blank">mcpuk's</A>
+			File Browser for PHP has been included in the package. He became the official 
+			developer of the File Manager for FCKeditor, so we can expect good news in the 
+			future.
+			<LI>
+				New configuration options are available to <STRONG>hide tabs</STRONG> from the <STRONG>
+					Image</STRONG> Dialog&nbsp;and <STRONG>Link</STRONG>
+			Dialog windows: LinkDlgHideTarget, LinkDlgHideAdvanced, ImageDlgHideLink and 
+			ImageDlgHideAdvanced.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1189442&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1189442</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1187164&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1187164</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1185905&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1185905</A>] It is now possible to configure the 
+				editor to <STRONG>not convert Greek</STRONG> or special&nbsp;<STRONG>Latin </STRONG>
+			letters to ther specific HTML entities. You can also configure it to not 
+			convert any character at all. Take a look at the "ProcessHTMLEntities", 
+			"IncludeLatinEntities" and "IncludeGreekEntities" configuration options.
+			<LI>
+				New language files are available:
+				<UL>
+					<LI>
+						<STRONG>Basque</STRONG>
+					(by Ibon Igartua)
+					<LI>
+						<STRONG>English (Australia / United Kingdom)</STRONG>
+					(by Christopher Dawes)
+					<LI>
+						<STRONG>Ukrainian</STRONG> (by Alexander Pervak)</LI></UL>
+			<LI>
+			The version and date information have been removed from the files headers to 
+			avoid unecessary diffs in source control systems when new versions are released 
+			(from now on).
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1159854&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1159854</A>] Ther HTML output rendered by the 
+			server side integration files are now XHTML compatible.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181823&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1181823</A>] It is now possible to set the 
+			desired DOCTYPE to use when edit HTML fragments (not in Full Page mode).
+			<LI>
+				There is now an optional way to implement different "mouse over" effects to the 
+				buttons when they are "on" of "off".</LI></UL>
+		<P>Fixed Bugs:</P>
+		<UL>
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1162200&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1162200</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1161633&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1161633</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1050293&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1050293</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1058948&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1058948</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1109120&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1109120</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155408&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155408</A>] The IE memory leak bug has been 
+			solved. The code has been completely reviewed and many memory usage 
+			improvements have been done.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1179645&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1179645</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1183252&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1183252</A> ] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1166779&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1181647</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155627&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155627</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155782&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155782</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155750&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155750</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157166&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1157166</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157857&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1157857</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1158121&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1158121</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1177153&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1177153</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1175847&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1175847</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155747&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1155747</A>] There was a loading problem in 
+			Gecko browsers in some cases. It has been solved.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1161147&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1161147</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157635&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1157635</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1149805&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1149805</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1124600&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1124600</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1117535&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1117535</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1118145&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1118145</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1098113&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1098113</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092272&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1092272</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1086416&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1086416</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1027952&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1027952</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=978441&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-978441</A>
+			] A custom Undo/Redo system has been implemented for IE.
+			<LI>
+			The editor startup execution is now made in the right order (so configurations 
+			override works correctly).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1166779&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1166779</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1166651&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1166651</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1066198&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1066198</A>]&nbsp;[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090388&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1090388</A>
+			]&nbsp;No more "illegible" characters in the toolbar when "ClearType" is 
+			active.
+			<LI>
+			It is now possible to set the "width" style of the BODY tag in the 
+			EditorAreaCSS to limit the editing area size.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1113620&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1113620</A>] In IE, the editor doesn't generate 
+			new entries in the browser history anymore.
+			<LI>
+			The editor now uses the same method used on version RC2 to load its contents on 
+			Gecko. It is now possible to have more than one editor in the page. This change 
+			has a negative impact: the BaseHref property is not working.
+			<LI>
+			Changes have been made to make the editor work with PHP versions&nbsp;older 
+			than&nbsp;2.1.0.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1190835&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1190835</A>] [<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1196547&amp;group_id=75348"
+					target="_blank">SF BUG-1196547</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156863&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1156863</A>] The "Insert Horizontal Line" 
+			command is now working correctly. Thanks to Hector Raul Colonia Coral.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1101861&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1101861</A>] The editor now shows a normal 
+			textarea correctly (as expected) on Safari browsers (and all "like Gecko" 
+			browsers). Thanks to Bob Paul.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1182224&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1182224</A>] The PHP connector can now handle 
+			file extensions in upper case,&nbsp;like JPG or Gif, correctly. Thanks to Georg 
+			Ivancsic.
+			<LI>
+			The "sample06.html" is now working correctly with Gecko browsers.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156660&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1156660</A>] Some fixes have been applied to the 
+			Universal Keyboard. Thanks to Abdul-Aziz Al-Oraij.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1192881&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1192881</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1185006&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1185006</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156068&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1156068</A>] The "Browse Server" button is now 
+			working correctly for the Background Image in the "Document Properties" dialog 
+			window (full page editing). The active "BaseHref" is also set to the preview 
+			window.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1191704&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1191704</A>] Invalid HTML tags (according to the 
+			W3C naming standards for XHTML) are ignored with no errors.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1185911&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1185911</A>] The Greek language file name has 
+			been corrected to "el.js".
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181572&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1181572</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1158421&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1158421</A>] The "Print" button is now active on 
+			startup.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181572&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1165219</A>] No error occours when the user 
+			defines just one color to the FontColors on "in page" configurations.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1162957&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1162957</A>] The small problem with Zope 
+			(ZPT)&nbsp;has been solved.
+			<LI>
+				Some small RTL / LTR corrections has been done in the interface and the Farsi 
+				language has been added to the Universal Keyboard. Thanks to Silver 
+				Baghdasarian.</LI></UL>
+		<P>* This version has been partially sponsored by the <A href="http://www.hamilton.edu">
+				Hamilton College</A>.<BR>
+			** This version has been partially sponsored by <A href="http://www.infineon.com/" target="_blank">
+				Infineon Technologies AG</A>.</P>
+		<H3>Version 2.0 RC3 (Release Candidate 3)</H3>
+		<P>New Features and Improvements:</P>
+		<UL>
+			<LI>
+				The editor now offers native <STRONG>Perl integration</STRONG>! Thanks and 
+			welcome to Takashi Yamaguchi, our official Perl developer.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1026584&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1026584</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1112692&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1112692</A>] <STRONG>Formatting </STRONG>has 
+				been introduced to the <STRONG>Source View</STRONG>. The output HTML can 
+			also be formatted. You can choose to use spaces or tab for indentation. See the 
+			configuration file.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1031492&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1031492</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1004293&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1004293</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=784281&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-784281</A>] It is now possible to edit <STRONG>full 
+					HTML pages</STRONG>
+			with the editor. Use the "FullPage" configuration setting to activate it.
+			<LI>
+				The&nbsp;new toolbar command, "<STRONG>Document Properties</STRONG>"&nbsp;is 
+			available to edit document header info, title, colors, background, etc... Full 
+			page editing must be enabled.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1151448&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1151448</A>] <STRONG>Spell Check</STRONG> is now 
+				available. You can use <STRONG>ieSpell</STRONG> or <STRONG>Speller Pages</STRONG>
+			right from FCKeditor. More info about configuration can be found in the _docs 
+			folder.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1041686&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1041686</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1086386&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1086386</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1124602&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1124602</A>] New "<STRONG>Insert Anchor</STRONG>" 
+			command has been introduced. (The anchor icon is visible only over&nbsp;IE for 
+			now).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1123816&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1123816</A>] It is now possible to configure the 
+				editor to <STRONG>show "fake" table borders</STRONG>
+			when the border size is set to zero. (It is working only on IE for now).
+			<LI>
+				<STRONG>Numbered</STRONG> and <STRONG>Bulleted</STRONG> lists can now be <STRONG>configured</STRONG>
+			. Just right click on then.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088608&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1088608</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1144047&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1144047</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1149808&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1149808</A>] A new configuration setting is 
+				available, "<STRONG>BaseHref</STRONG>
+			", to set the URL used to resolve relative links.
+			<LI>
+				It is now possible to set&nbsp;the <STRONG>content language direction</STRONG>
+			. See the "FCKConfig.ContentLangDirection" configurations setting.
+			<LI>
+				All <STRONG>Field Commands</STRONG> available on version 1.6 have been upgraded 
+				and&nbsp;included in this version: <STRONG>form</STRONG>, <STRONG>checkbox</STRONG>,
+				<STRONG>radio button</STRONG>, <STRONG>text field</STRONG>, text <STRONG>area</STRONG>,
+				<STRONG>select field</STRONG>, <STRONG>button</STRONG>, <STRONG>image button</STRONG>
+				and <STRONG>hidden field</STRONG>
+			.
+			<LI>
+				<STRONG>Context menu</STRONG> options (right-click) has been added for: <STRONG>anchors</STRONG>,
+				<STRONG>select field</STRONG>, <STRONG>textarea</STRONG>, <STRONG>checkbox</STRONG>,
+				<STRONG>radio button</STRONG>, <STRONG>text field</STRONG>, <STRONG>hidden field</STRONG>,
+				<STRONG>textarea</STRONG>, <STRONG>button</STRONG>, <STRONG>image button</STRONG>,
+				<STRONG>form</STRONG>, <STRONG>bulleted list</STRONG> and <STRONG>numbered list</STRONG>
+			.
+			<LI>
+				The "<STRONG>Universal Keyboard</STRONG>" has been converted from version 
+			1.6 to this one and it's now available.
+			<LI>
+				It is now possible to <STRONG>configure</STRONG> the items to be shown in the <STRONG>
+					context menu</STRONG>
+			. Just use the FCKConfig.ContextMenu option&nbsp;at fckconfig.js.
+			<LI>
+				A new configuration (FillEmptyBlocks)&nbsp;is available to force the editor to <STRONG>
+					automatically insert a &amp;nbsp;</STRONG>
+			on empty block elements (p, div, pre, h1, etc...) to avoid differences from the 
+			editing and the final result. (Actually, the editor automatically "grows" empty 
+			elements to make the user able to enter text on it). Attention: the extra 
+			&amp;nbsp; will be added when switching from WYSIWYG to Source View, so the 
+			user may see an additional space on empty blocks. (XHTML support must be 
+			enabled).
+			<LI>
+				It is now possible to configure the <STRONG>toolbar</STRONG> to "<STRONG>break</STRONG>
+			" between two toolbar strips. Just insert a "/" between then. Take a look at 
+			fckconfig.js for a sample.
+			<LI>
+				New Language files are available:
+				<UL>
+					<LI>
+						<STRONG>Brazilian Portuguese</STRONG>
+					(by Carlos Alberto Tomatis Loth)
+					<LI>
+						<STRONG>Bulgarian</STRONG>
+					(by Miroslav Ivanov)
+					<LI>
+						<STRONG>Esperanto</STRONG>
+					(by Tim Morley)
+					<LI>
+						<STRONG>Galician</STRONG>
+					(by Fernando Riveiro Lopez)
+					<LI>
+						<STRONG>Japanese</STRONG>
+					( by Takashi Yamaguchi)
+					<LI>
+						<STRONG>Persian</STRONG>
+					(by Hamed Taj-Abadi)
+					<LI>
+						<STRONG>Romanian</STRONG>
+					(by Adrian Nicoara)
+					<LI>
+						<STRONG>Slovak</STRONG>
+					(by Gabriel Kiss)
+					<LI>
+						<STRONG>Thai </STRONG>
+					(by Audy Charin Arsakit)
+					<LI>
+						<STRONG>Turkish</STRONG>
+					(by Reha Bier)
+					<LI>
+						The Chinese Traditional has been set as the default (zn) instead of zn-tw.</LI></UL>
+			<LI>
+			Warning: All toolbar image images have been changed. The "button." prefix has 
+			been removed. If you have your custom skin, please rename your files.
+			<LI>
+				A new plugin is available in the package: "<STRONG>Placeholders</STRONG>". 
+			In this way you can insert non editable tags in your document to be processed 
+			on server side (very specific usage).
+			<LI>
+			The ASPX files are no longer available in this package. They have been moved to 
+			the FCKeditor.Net package. In this way the ASP.Net integration is much better 
+			organized.
+			<LI>
+			The FCKeditor.Packager program is now part of the main package. It is not 
+			anymore&nbsp;distributed separately.
+			<LI>
+			The PHP connector now sets the uploaded file permissions (chmod)&nbsp;to 0777.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090215&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1090215</A>] It's now possible to give back 
+			more info from your custom image browser calling the SetUrl( url [, width] [, 
+			height] [, alt] ). Thanks to Ben Noblet.
+			<LI>
+			The package files now maintain their original "Last Modified" date, so 
+			incremental FTP uploads can be used to update to&nbsp;new versions of the 
+			editor (from now on).
+			<LI>
+				The "Source" view now forces its contents to be written in "Left to Right" 
+				direction even when the editor interface language is running a RTL language 
+				(like Arabic, Hebrew or Persian).</LI>
+		</UL>
+		<P>Fixed Bugs:</P>
+		<UL>
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1124220&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1124220</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1119894&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1119894</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090986&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1090986</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1100408&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1100408</A>] The editor now works correctly when 
+			starting with an empty value and switching to the Source mode.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1119380&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1119380</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1115750&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1115750</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1101808&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1101808</A>] The problem with the scrollbar and 
+			the toolbar combos (Style, Font, etc...) over Mac has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1098460&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1098460</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1076544&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1076544</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077845&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1077845</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092395&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1092395</A>] A new upload class has been 
+			included for the ASP File Manager Connector. It uses the "ADODB.Stream" object. 
+			Many thanks to "NetRube".
+			<LI>
+			I small correction has been made to the ColdFusion integration files. Thanks to 
+			Hendrik Kramer.
+			<LI>
+			There was a very specific problem when the editor was running over a FRAME 
+			executed on another domain.
+			<LI>
+			The performance problem on Gecko while typing&nbsp;quickly has been solved.
+			<LI>
+			The &lt;br type= "_moz"&gt;is not anymore shown on XHTML source.
+			<LI>
+			It has been introduced a mechanism to avoid automatic contents duplication on 
+			very specific occasions (bad formatted HTML).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1146407&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1146407</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1145800&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1145800</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1118803&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1118803</A>
+			] Other&nbsp;issues in the XHTML processor have been solved.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1143969&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1143969</A>] The editor now accepts the 
+			"accept-charset" attribute in the FORM tag (IE specific bug).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1122742&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1122742</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1089548&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1089548</A>
+			] Now, the contents of the SCRIPT and STYLE tags remain untouched.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1114748&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1114748</A>] The PHP File Manager Connector now 
+			sets the new folders permissions (chmod)&nbsp;to 0777 correctly.
+			<LI>
+			The PHP File Manager Connector now has a configuration file 
+			(editor/filemanager/browser/default/connectors/php/config.php) to set some 
+			security preferences.
+			<LI>
+			The&nbsp;ASP File Manager Connector now has a configuration file 
+			(editor/filemanager/browser/default/connectors/asp/config.asp) to set some 
+			security preferences.
+			<LI>
+			A small bug in the toolbar rendering (strips auto position) has been corrected.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1093732&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1093732</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1091377&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1091377</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083044&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1083044</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1096307&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1096307</A>] The configurations are now encoded 
+			so a user can use values that has special chars (&amp;=/).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1103688&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1103688</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092331&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1092331</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088220&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1088220</A>] PHP samples now use PHP_SELF to 
+			automatically discover the editor's base path.
+			<LI>
+			Some small wrapping problems with some labels in the Image and Table dialog 
+			windows have been fixed.
+			<LI>
+			All .js files are now encoded in UTF-8 format with the BOM (byte order mask) to 
+			avoid some errors on specific Linux installations.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1114449&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1114449</A>] The editor packager program has 
+			been modified so now it is possible to use the source files to run the editor 
+			as described in the documentation. The new packager must be downloaded.
+			<LI>
+			A small problem with the editor focus while in&nbsp;source&nbsp;mode has been 
+			corrected. Thanks to Eric (ric1607).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1108167&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1108167</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085149&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1085149</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1151296&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1151296</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1082433&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1082433</A>] No more IFRAMEs without src 
+			attribute. Now it points to a blank page located in the editor's package. In 
+			this way we avoid security warnings when using the editor over HTTPS. Thanks to 
+			Guillermo Bozovich.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1117779&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1117779</A>] The editor now works well if you 
+			have more than one element named "submit"&nbsp;on its form (even if it is not 
+			correct to have this situation).
+			<LI>
+			The XHTML processor was duplicating the text on some specific situation. It has 
+			been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090213&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-1090213</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1098929&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF Patch-1098929</A>] With ASP, the editor now works 
+			correctly on pages using "Option Explicit". Thanks to Ben Noblet.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1100759&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1100759</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1029125&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1029125</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=966130&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-966130</A>] The editor was not working with old 
+			IE 5.5 browsers. There was a problem with the XML parser. It has been fixed.
+			<LI>
+			The localization engine is now working correctly over IE 5.5 browsers.
+			<LI>
+			Some commands where not working well over IE 5.5 (emoticons, image,...). It has 
+			been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1146441&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1146441</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1149777&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1149777</A>] The editor now uses the TEXTAREA 
+			id&nbsp;in the ReplaceTextarea function. If the id is now found, it uses the 
+			"name". The docs have been updated.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1144297&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1144297</A>] Some corrections have been made to 
+			the Dutch language file. Thanks to Erwin Dondorp.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1121365&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1121365</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090102&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1090102</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1152171&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1152171</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1102907&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1102907</A>] There is no problem now to start 
+			the editor with values like "&lt;div&gt;&lt;/div&gt;" or "&lt;p&gt;&lt;/p&gt;".
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1114059&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1114059</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1041861&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1041861</A>] The click on the disabled options 
+			in the Context Menu has no effects now.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1152617&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1152617</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1102441&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1102441</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1095312&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1095312</A>] Some problems when setting the 
+			editor source to very specific values has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1093514&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1093514</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1089204&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1089204</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077609&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1077609</A>] The editor now runs correctly if 
+			called directly (locally)&nbsp;without a server installation (just opening the 
+			HTML sample files).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088248&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1088248</A>] The editor now uses a different 
+			method to load its contents. In this way the URLs remain untouched.
+			<LI>
+				The PHP integration file now detects Internet Explorer 5.5 correctly.</LI></UL>
+		<h3>Version 2.0 RC2 (Release Candidate 2)</h3>
+		<ul>
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1042034&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1042034</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1075961&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1075961</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083200&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1083200</A>] A new dialog window for the <STRONG>table 
+					cell properties</STRONG>
+			is now available (right-click).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1042034&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1042034</A>] The new "<STRONG>Split Cell</STRONG>
+			", to split a table cell in two columns, has been introduced (right-click).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1042034&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1042034</A>] The new "<STRONG>Merge Cells</STRONG>", 
+			to merge table cells (in the same row), has been introduced (right-click).
+			<LI>
+				The "fake" <STRONG>TAB key support</STRONG>
+			(available by default over Gecko browsers is now available over IE too. You can 
+			set the number of spaces to add setting the FCKConfig.TabSpaces configuration 
+			setting. Set it to 0 (zero) to disable this feature (IE).
+			<LI>
+				It now possible to tell IE to send a <STRONG>&lt;BR&gt;</STRONG> when the user 
+				presses the <STRONG>Enter key</STRONG>. Take a look at the 
+			FCKConfig.UseBROnCarriageReturn configuration setting.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085422&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1085422</A>] <STRONG>ColdFusion</STRONG>: The <STRONG>
+					File Manager connector</STRONG>
+			is now available! (Thanks to Hendrik Kramer).
+			<LI>
+				The editor is now available in <STRONG>29 languages!</STRONG> The new language 
+				files available are:&nbsp;
+				<UL>
+					<LI>
+						[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1067775&amp;group_id=75348&amp;atid=543656"
+							target="_blank">SF Feature-1067775</A>] <STRONG>Chinese Simplified and 
+							Traditional</STRONG>
+					(Taiwan and Hong Kong) (by NetRube).
+					<LI>
+						<STRONG>Czech</STRONG>
+					(by David Hork).
+					<LI>
+						<STRONG>Danish</STRONG>
+					(by Jesper Michelsen).
+					<LI>
+						<STRONG>Dutch</STRONG>
+					(by Bram Crins).
+					<LI>
+						<STRONG>German</STRONG>
+					(by Maik Unruh).
+					<LI>
+						<STRONG>Portuguese</STRONG>
+					(Portugal) (by Francisco Pereira).
+					<LI>
+						<STRONG>Russian</STRONG>
+					(by Andrey Grebnev).
+					<LI>
+						<STRONG>Slovenian</STRONG> (by Boris Volaric).</LI></UL>
+			<LI>
+				Updates to the <STRONG>French</STRONG>
+			language files (by Hubert Garrido).
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085816&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1085816</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083743&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1083743</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1078783&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1078783</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077861&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1077861</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077861&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1037404</A>] Many&nbsp;small bugs&nbsp;in the XHTML 
+				processor has been corrected (workarounds to browser specific bugs). These are 
+				some things to consider regarding the changes:
+				<UL>
+					<LI>
+						[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083744&amp;group_id=75348&amp;atid=543653"
+							target="_blank">SF BUG-1083744</A>] On Gecko browsers, any element 
+					attribute that the name starts with "_moz" will be ignored.
+					<LI>
+						[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1060073&amp;group_id=75348&amp;atid=543653"
+							target="_blank">SF BUG-1060073</A>] The &lt;STYLE&gt; and &lt;SCRIPT&gt; 
+						elements contents will be handled as is, without CDATA tag surrounding. This 
+						may break XHTML validation. In any case the use of external files for scripts 
+						and styles is recommended (W3C recommendation).</LI></UL>
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088310&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1088310</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1078837&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1078837</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=999792&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-999792</A>] URLs now remain untouched when 
+			initializing the editor or switching from WYSYWYG to Source and vice versa.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1082323&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1082323</A>] The&nbsp;problem in the ASP and PHP 
+			connectors when handling non "strange" chars in file names has been corrected.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085034&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1085034</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1076796&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1076796</A>] Some bugs in the PHP connector have 
+			been corrected.
+			<LI>
+			A&nbsp;problem with the "Format" command on IE browsers on languages different 
+			of English has been solved. The negative side of this correction is that due to 
+			a IE bad design it is not possible to update the "Format" combo while moving 
+			throw the text (context sensitive).
+			<LI>
+			On Gecko browsers, when selecting an image and executing the "New Page" 
+			command, the image handles still appear, even if the image is not available 
+			anymore (this is a Gecko bug). When clicking in&nbsp;a "phanton" randle, the 
+			browser crashes. It doesn't&nbsp;happen (the crash)&nbsp;anymore.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1082197&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1082197</A>] On ASP, the bug in the browser 
+			detection system for Gecko browsers has been corrected. Thanks to Alex Varga.
+			<LI>
+			Again on ASP, the browser detection for IE had some problems on servers that 
+			use comma for decimal separators on numbers. It has been corrected. Thanks to 
+			Agrotic.
+			<LI>
+			No error is thrown now when&nbsp;non existing&nbsp;language is configured in 
+			the editor. The English language file is loaded in that case.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077747&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1077747</A>] The missing images on the 
+			Office2003 and Silver skins are now included in the package.
+			<LI>
+			On some Gecko browsers, the dialog window was not loading correctly. I couldn't 
+			reproduce the problem, but a fix has been applied based on users tests.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1004078&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1004078</A>] ColdFusion: The "config" 
+			structure/hash table with keys and values is in ColdFusion not(!) case 
+			sensitive. All keys returned by ColdFusion are in upper case format. Because 
+			the FCKeditor configuration keys must be case sensitive, we had to match all 
+			structure/hash keys with a list of the correct configuration names in mixed 
+			case. This has been added to the fckeditor.cfc and fckeditor.cfm.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1075166&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1075166</A>] ColdFusion: The "fallback" variant 
+			of the texteditor (&lt;textarea&gt;) has a bug in the fckeditor.cfm. This has 
+			been fixed.
+			<LI>
+			A typo in the Polish language file has been corrected. Thanks to Pawel Tomicki.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1086370&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1086370</A>] A small coding type in the Link dialog 
+				window has been corrected.</LI>
+		</ul>
+		<h3>Version 2.0 RC1 (Release Candidate 1)</h3>
+		<ul>
+			<li>
+				<strong>ASP</strong>
+			support is now available (including the&nbsp;File Manager connector).
+			<li>
+				<strong>PHP</strong>
+			support is now available (including the File Manager connector).
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1063217&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1063217</a>] The new advanced&nbsp;<strong>Style</strong>
+			command is available in the toolbar: full preview, context sensitive, style 
+			definitions are loaded from a XML file (see documentation for more 
+			instructions).
+			<li>
+				The <strong>Font Format</strong>, <strong>Font Name</strong> and <strong>Font Size</strong>
+				toolbar command now show a <strong>preview</strong>
+			of the available options.
+			<li>
+				The new <strong>Find</strong> and <strong>Replace</strong>
+			features has been introduced.
+			<li>
+				A new <strong>Plug-in</strong>
+			system has been developed. Now it is quite easy to customize the editor to your 
+			needs. (Take a look at the html/sample06.html file).
+			<li>
+				The editor now handles <strong>HTML entities</strong>
+			in the right way (XHTML support must be set to "true"). It handles all entities 
+			defined in the W3C&nbsp;XHTML DTD file.
+			<li>
+				A new "_docs" folder has been introduced for the <strong>documentation</strong>. 
+			It is not yet complete, but I hope the community will help us to fill it 
+			better.
+			<li>
+			It is now possible (even if it is not recommended by the W3C) to force the use 
+			of simple ampersands (&amp;) on attributes (like the links href) instead of its 
+			entity &amp;amp;. Just set FCKConfig.ForceSimpleAmpersand = true in 
+			the&nbsp;configuration file.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1026866&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1026866</a>] The "<strong>EditorAreaCSS</strong>" 
+			configuration option has been introduced. In this way you can set the CSS to 
+			use in the editor (editable area).
+			<li>
+			The editing area is not anymore clipped if the toolbar is too large and exceeds 
+			the window width.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1064902&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1064902</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1033933&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1033933</a>] The editor <strong>interface</strong> is 
+				now completely <strong>localizable</strong>. The version ships with 19 
+				languages including: <b>Arabic</b>, <b>Bosnian</b>, <b>Catalan</b>, <b>English</b>,
+				<b>Spanish</b>, <b>Estonian</b>, <b>Finnish</b>, <b>French</b>, <b>Greek</b>, <b>Hebrew</b>,
+				<b>Croatian</b>, <b>Italian</b>, <b>Korean</b>, <b>Lithuanian</b>, <b>Norwegian</b>,
+				<STRONG>Polish</STRONG>, <STRONG>Serbian (Cyrillic)</STRONG>, <STRONG>Serbian 
+					(Latin)</STRONG> and <STRONG>Swedish</STRONG>.<li>[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1027858&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1027858</a>] Firefox 1.0 
+			PR&nbsp;introduced&nbsp;a bug that made the editor stop working on it. A 
+			workaround has been developed to fix the problem.
+			<li>
+			There was a positioning problem over IE&nbsp;with the color panel. It has been 
+			corrected.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1049842&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1049842</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1033832&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1033832</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1028623&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1028623</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1026610&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1026610</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1064498&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1064498</a>] The combo commands in the toolbar 
+			were not opening in the right way. It has been fixed.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1053399&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1053399</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=965318&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-965318</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1018296&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1018296</a>] The toolbar buttons icons were not 
+			showing on some IE and Firefox/Mac installations. It has been fixed.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1054621&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1054621</a>] Color pickers are now working with 
+			the "office2003" and "silver" skins.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1054108&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1054108</a>] IE doesnt recognize the 
+			"&amp;apos;" entity for apostrophes, so a workaround has been developed to 
+			replace it with "&amp;#39;" (its numeric entity representation).
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=983434&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-983434</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=983398&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-983398</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1028103&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1028103</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1072496&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1072496</a>] The problem with elements with name 
+			"submit" inside the editor's form has been solved.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1018743&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1018743</a>] The problem with Gecko when 
+			collapsing the toolbar while in source mode has been fixed.
+			<li>
+				[<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1065268&amp;group_id=75348"
+					target="_blank">SF BUG-1065268</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1034354&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1034354</a>] The XHTML processor now doesnt use 
+			the minimized tag syntax (like &lt;br/&gt;) for empty elements that are not 
+			marked as EMPTY in the W3C XHTML DTD specifications.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1029654&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1029654</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1046500&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1046500</a>] Due to a bug on Gecko there was a 
+			problem when creating links. It has been fixed.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1065973&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1065973</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=999792&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-999792</a>] The editor now handles relative URLs 
+			in IE. In effect IE transform all relative URLs to absolute links, pointing to 
+			the site the editor is running. So now the editor removes the protocol and host 
+			part of the link if it matches the running server.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1071824&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1071824</a>] The color dialog box bug has been 
+			fixed.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1052856&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1052856</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1046493&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1046493</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1023530&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1023530</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1025978&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1025978</a>] The editor now doesnt throw an 
+			error if no selection was made and the create link command is used.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1036756&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1036756</a>] The XHTML processor has been 
+			reviewed.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1029101&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1029101</a>] The Paste from Word feature is 
+			working correctly.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1034623&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1034623</a>] There is an IE bug when setting the 
+			editor value to "&lt;p&gt;&lt;hr&gt;&lt;/p&gt;". A workaround has been 
+			developed.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1052695&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1052695</a>] There are some rendering 
+			differences between Netscape and Mozilla. (Actually that is a bug on both 
+			browsers). A workaround has been developed to solve it.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1073053&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1073053</a>] [<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1050394&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1050394</a>] The editor doesnt throw errors 
+			when hidden.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1066321&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1066321</a>] Scrollbars should not appear on 
+			dialog boxes (at least for the Image and Link ones).
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1046490&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1046490</a>] Dialogs now are forced to show on 
+			foreground over Mac.
+			<li>
+				[<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1073955&amp;group_id=75348"
+					target="_blank">SF BUG-1073955</a>] A small bug in the image dialog 
+			window has been corrected.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1049534&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1049534</a>] The Resources Browser window is now 
+			working well over Gecko browsers.
+			<li>
+				[<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1036675&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1036675</a>] The Resources Browser window now 
+				displays the server error on bad installations.</li></ul>
+		<H3>Version 2.0 Beta 2</H3>
+		<UL>
+			<LI>
+				There is a new configuration - "<STRONG>GeckoUseSPAN</STRONG>" - that can 
+			be used to tell Gecko browsers to use &lt;SPAN style...&gt; or &lt;B&gt;, 
+			&lt;I&gt; and &lt;U&gt; for the bold, italic and underline commands.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1002622&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-1002622</A>] New <STRONG>Text Color</STRONG> and&nbsp;<STRONG>Background 
+					Color</STRONG>
+			&nbsp;commands have been added to the editor.
+			<LI>
+			On Gecko browsers, a message is shown when,&nbsp;because of&nbsp;security 
+			settings,&nbsp;the user&nbsp;is not able to&nbsp;cut, copy or paste data from 
+			the clipboard using the toolbar buttons or the context menu.
+			<LI>
+				The new "<STRONG>Paste as Plain Text</STRONG>
+			" command has been introduced.
+			<LI>
+				The new "<STRONG>Paste from Word</STRONG>
+			" command has been introduced.
+			<LI>
+			A new configuration named&nbsp;"StartupFocus" can be used to tell the editor to 
+			get the focus when the page is loaded.
+			<LI>
+				All <STRONG>Java </STRONG>
+			integration files has been moved to a new separated package.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1016781&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1016781</A>] <STRONG>Table operations</STRONG> are 
+				now working when right click inside a table. The following commands has been 
+				introduced: <STRONG>Insert Row</STRONG>, <STRONG>Delete Row</STRONG>, <STRONG>Insert 
+					Column</STRONG>, <STRONG>Delete Column</STRONG>, <STRONG>Insert Cell</STRONG>
+				and <STRONG>Delete Cells</STRONG>
+			.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=965067&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-965067</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1010379&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1010379</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=977713&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-977713</A>] XHTML support was not working with 
+			FireFox, blocking the editor when submitting data. It has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1007547&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1007547</A> ] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=974595&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-974595</A>
+			]&nbsp;The "FCKLang not defined" error when loading has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1021028&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-1021028</A>] If the editor doesn't have the 
+			focus, some commands were been executed outside the editor in the place where 
+			the focus is. It has been fixed.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=981191&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-981191</A>] We are now using &lt;!--- ---&gt; for 
+				ColdFusion comments.</LI></UL>
+		<H3>Version 2.0 Beta 1</H3>
+		<P>This is the first beta of the 2.x series. It brings a lot of new and important 
+			things. Beta versions will be released until all features available on version 
+			1.x will be introduced in the 2.0.<BR>
+			<BR>
+			<STRONG>Note:</STRONG> As it is a beta, it is not yet completely developed. 
+			Future versions can bring new features that can break backward compatibility 
+			with this version.
+		</P>
+		<UL>
+			<LI>
+				Gecko browsers (<STRONG>Mozilla</STRONG> and <STRONG>Netscape</STRONG>) 
+			support.
+			<LI>
+				<STRONG>Quick startup</STRONG>
+			response times.
+			<LI>
+				Complete <STRONG>XHTML</STRONG>
+			1.0 support.
+			<LI>
+				<STRONG>Advanced link</STRONG> dialog box:
+				<UL>
+					<LI>
+					Target selection.
+					<LI>
+					Popup configurator.
+					<LI>
+					E-Mail link.
+					<LI>
+						Anchor selector.
+					</LI>
+				</UL>
+			<LI>
+				New <STRONG>File Manager</STRONG>.
+			<LI>
+				New dialog box system, with <STRONG>tabbed dialogs</STRONG>
+			support.
+			<LI>
+				New <STRONG>context menus</STRONG>
+			with icons.
+			<LI>
+			New toolbar with "expand/collapse" feature.
+			<LI>
+				<STRONG>Skins</STRONG>
+			support.
+			<LI>
+				<STRONG>Right to left languages</STRONG> support.
+			</LI>
+		</UL>
+		<H3>Version 1.6.1</H3>
+		<UL>
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=862364&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-862364</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=812733&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-812733</A>] There was a problem when the user 
+			tried to delete the last row, collumn or cell in a table. It has been 
+			corrected.*
+			<LI>
+			New Estonian language file. Thanks to Kristjan Kivikangur
+			<LI>
+			New Croatian language file. Thanks to Alex Varga.
+			<LI>
+			Updated language file for Czech. Thanks to Plachow.
+			<LI>
+			Updated language file for Chineze (zh-cn). Thanks to Yanglin.
+			<LI>
+				Updated language file for Catalan. Thanks to Jordi Cerdan.</LI></UL>
+		<P>* This version has been partially sponsored by <A href="http://www.genuitec.com/">Genuitec, 
+				LLC</A>.</P>
+		<H3>Version 1.6</H3>
+		<UL>
+			<LI>
+				<STRONG>Context Menu</STRONG> support for <STRONG>form</STRONG>
+			elements.*
+			<LI>
+				New <STRONG>"Selection Field" command</STRONG>
+			with advanced dialog box for options definitions.*
+			<LI>
+				New <STRONG>"Image Button" command</STRONG>
+			is available.*
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=936196&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-936196</A>] Many form elements <STRONG>bugs has been 
+					fixed</STRONG> and <STRONG>many improvements</STRONG>
+			has been done.*
+			<LI>
+				New <STRONG>Java Integration Module</STRONG>. There is a complete Java API 
+			and Tag Library implementations. Take a look at the _jsp directory. Thanks to 
+			Simone Chiaretta and Hao Jiang.
+			<LI>
+				The <STRONG>Word Spell Checker</STRONG>
+			can be used. To be able to run it, your browser security configuration 
+			"Initialize and script ActiveX controls not marked as safe" must be set to 
+			"Enable" or "Prompt". And easier and more secure way to do that is to add your 
+			site in the list of trusted sites. IeSpell can still be used. Take a look at 
+			the fck_config.js file for some configuration options. Thanks to EdwardRF.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=748807&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-748807</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=801030&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-801030</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=880684&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-880684</A>] New "<STRONG>Anchor" command</STRONG>, 
+			including context menu support. Thanks to G.Meijer.
+			<LI>
+			Special characters are replaced with their decimal HTML entities when the XHMTL 
+			support is enabled (only over IE5.5+).
+			<LI>
+				New <STRONG>Office 2003 Style</STRONG> toolbar icons are available. Just 
+				uncomment the config.ToolbarImagesPath key in the fck_config.js file. Thanks to 
+				Abdul-Aziz A. Al-Oraij. <STRONG>Attention</STRONG>: the default toolbar 
+			items have been moved to the "images/toolbar/default" directory.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=934566&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-934566</A>] <STRONG>Double click support</STRONG>
+			for Images, Tables, Links, Anchors and all Form elements. Thanks to Top Man.
+			<LI>
+				New <STRONG>"New Page" command</STRONG>
+			to start a typing from scratch. Thanks to Abdul-Aziz A. Al-Oraij.
+			<LI>
+				New <STRONG>"Replace" command</STRONG>. Thanks to Abdul-Aziz A. Al-Oraij.
+			<LI>
+				New <STRONG>"Advanced Font Style" command</STRONG>. Thanks to Abdul-Aziz A. 
+			Al-Oraij.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=738193&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-738193</A>] New <STRONG>"Save" command</STRONG>. 
+			It can be used to simulate a save action, but in fact it just submits the form 
+			where the editor is placed in. Thanks to Abdul-Aziz A. Al-Oraij.
+			<LI>
+				New <STRONG>"Universal Keyboard" command</STRONG>. This 22 charsets are 
+			available: Arabic, Belarusian, Bulgarian, Croatian, Czech, Danish, Finnish, 
+			French, Greek, Hebrew, Hungarian, Diacritical, Macedonian, Norwegian, Polish, 
+			Russian, Serbian (Cyrillic), Serbian (Latin), Slovak, Spanish, Ukrainian and 
+			Vietnamese. Includes a keystroke listener to type Arabic on none Arabic OS or 
+			machine. Thanks to Abdul-Aziz A. Al-Oraij.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=935358&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-935358</A>] New <STRONG>"Preview" command</STRONG>. 
+			Context menu option is included and can be deactivated throw the 
+			config.ShowPreviewContextMenu configuration. Thanks to Ben Ramsey.
+			<LI>
+				New "<STRONG>Table Auto Format</STRONG>" context menu command. Hack a 
+			little the fck_config.js and the fck_editorarea.css files. Thanks to Alexandros 
+			Lezos.
+			<LI>
+				New "<STRONG>Bulleted List Properties</STRONG>
+			" context menu to define its type and class. Thanks to Alexandros Lezos.
+			<LI>
+				The <STRONG>image dialog</STRONG> box has been a <STRONG>redesigned</STRONG>
+			. Thanks to Mark Fierling.
+			<LI>
+				Images now always have the <STRONG>"alt" attribute</STRONG>
+			set, even when it's value is empty. Thanks to Andreas Barnet.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=942250&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-942250</A>] You can set on fck_config.js to <STRONG>automatically 
+					clean Word</STRONG>
+			pasting operations without a user confirmation.
+			<LI>
+			Forms element dialogs and other localization pending labels has been updated.
+			<LI>
+				A new <STRONG>Lithuanian</STRONG>
+			language file is available. Thanks to Tauras Paliulis.
+			<LI>
+				A new <STRONG>Hebrew</STRONG>
+			language file is available. Thanks to Ophir Radnitz.
+			<LI>
+				A new <STRONG>Serbian</STRONG>
+			language file is available. Thanks to Zoran Subic.
+			<LI>
+				<STRONG>Danish</STRONG>
+			language file updates. Thanks to Flemming Jensen.
+			<LI>
+				<STRONG>Catalan</STRONG>
+			language file updates. Thanks to Jordi Cerdan.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=936514&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-936514</A>] [<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=918716&amp;group_id=75348">SF 
+					BUG-918716</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=931037&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-931037</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=865864&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-865864</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=915410&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-915410</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=918716&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-918716</A>] Some <STRONG>languages files</STRONG> were not saved on <STRONG>
+					UTF-8</STRONG>
+			format causing some javascript errors on loading the editor or making 
+			"undefined" to show on editor labels. This problem was solved.
+			<LI>
+			Updates on the testsubmit.php file. Thanks to Geat and Gabriel Schillaci
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=924620&amp;group_id=75348">SF 
+					BUG-924620</A>] There was a problem when setting a name to an editor 
+			instance when the name is used by another tag. For example when using 
+			"description" as the name in a page with the &lt;META name="description"&gt; 
+			tag.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=935018&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-935018</A>] The "buletted" typo has been corrected.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=902122&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-902122</A>] Wrong css and js file references have been corrected.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=918942&amp;group_id=75348&amp;atid=543653">SF 
+					BUG-918942</A>] All dialog boxes now accept Enter and Escape keys as Ok and 
+				Cancel buttons.</LI></UL>
+		<P>* This version has been partially sponsored by <A href="http://www.genuitec.com/">Genuitec, 
+				LLC</A>.</P>
+		<H3>Version 1.5</H3>
+		<UL>
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543656&amp;aid=913777&amp;group_id=75348"
+					target="_blank">SF Feature-913777</A>] <STRONG>New Form Commands</STRONG>
+			are now available! Special thanks to G.Meijer.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=861149&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-861149</A>] <STRONG>Print Command</STRONG>
+			is now available!
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=743546&amp;group_id=75348"
+					target="_blank">SF BUG-743546</A>] The <STRONG>XHTML content duplication 
+					problem </STRONG>has been <STRONG>solved</STRONG>
+			. Thanks to Paul Hutchison.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=875853&amp;group_id=75348"
+					target="_blank">SF BUG-875853</A>] The <STRONG>image dialog box</STRONG>
+			now gives precedence for width and height values set as styles. In this way a 
+			user can change the size of the image directly inside the editor and the 
+			changes will be reflected in the dialog box.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543656&amp;aid=913777&amp;group_id=75348"
+					target="_blank">SF Feature-788368</A>] The sample <STRONG>file upload </STRONG>
+				manager for ASPX now uses <STRONG>guids</STRONG>
+			for the file name generation. In this way a support XML file is not needed 
+			anymore.
+			<LI>
+				It's possible now to <STRONG>programmatically change the Base Path</STRONG> of 
+				the editor if it's installed in a directory different of "/FCKeditor/". 
+				Something like this:<BR>
+				oFCKeditor.BasePath = '/FCKeditor/' ;<BR>
+			Take a look at the _test directory for samples.
+			<LI>
+			There was a little bug in the TAB feature that moved the insertion point if 
+			there were any object (images, tables) in the content. It has been fixed.
+			<LI>
+				The problem with <STRONG>accented and international characters</STRONG>
+			on the PHP test page was solved.
+			<LI>
+				A new <STRONG>Chinese (Taiwan)</STRONG>
+			language file is available. Thanks to Nil.
+			<LI>
+				A new <STRONG>Slovenian</STRONG>
+			language file is available. Thanks to Pavel Rotar.
+			<LI>
+				A new <STRONG>Catalan</STRONG>
+			language file is available. Thanks to Jordi Cerdan.
+			<LI>
+				A new <STRONG>Arabic</STRONG>
+			language file is available. Thanks to Abdul-Aziz A. Al-Oraij.
+			<LI>
+				Small corrections on the <STRONG>Norwegian</STRONG>
+			language file.
+			<LI>
+			A Java version for the test results (testsubmit.jsp) is now available. Thanks 
+			to Pritpal Dhaliwal.
+			<LI>
+			When using Javascript to create a editor instance it's possible now to easily 
+			get the editor's value calling oFCKeditor.GetValue() (eg.). Better Javascript 
+			API interfaces will be available on version 2.0.
+			<LI>
+				If <STRONG>XHTML</STRONG>
+			is enabled the editor cleans the HTML before showing it on the Source View, so 
+			the exact result can be viewed by the user. This option can be activated 
+			setting config.EnableSourceXHTML = true in the fck_config.js file.
+			<LI>
+				The <STRONG>JS integration object</STRONG> now escapes all configuration 
+				settings, in this way a user can use <STRONG>reserved chars</STRONG> on it. For 
+				example:
+				<BR>
+			oFCKeditor.Config["ImageBrowserURL"] = 
+			'/imgs/browse.asp?filter=abc*.jpg&amp;userid=1';
+			<LI>
+				A minimal browse server sample is now available in ASP. Thanks to Andreas 
+				Barnet.
+			</LI>
+		</UL>
+		<H3>Version 1.4</H3>
+		<UL>
+			<LI>
+				<STRONG>ATTENTION: For PHP users</STRONG>: The editor was changed and now uses <STRONG>
+					htmlspecialchars</STRONG> instead of <STRONG>htmlentities</STRONG>
+			when handling the initial value. It should works well, but please make some 
+			tests before upgrading definitively. If there is any problem just uncomment the 
+			line in the fckeditor.php file (and send me a message!).
+			<LI>
+				The editor is now integrated with <STRONG>ieSpell</STRONG> (<A href="http://www.iespell.com">http://www.iespell.com</A>) 
+				for <STRONG>Spell Checking</STRONG>. You can configure the download URL in 
+			then fck_config.js file. Thanks to Sanjay Sharma. (ieSpell is free for personal 
+			use but must be paid for commercial use)
+			<LI>
+				<STRONG>Table</STRONG> and <STRONG>table cell</STRONG> dialogs has been 
+				changed. Now you can <STRONG>select the class</STRONG>
+			you want to be applied. Thanks to Alexander Lezos.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=865378&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-865378</A>]A new <STRONG>upload support is available 
+					for ASP</STRONG>. It uses the /UserImages/ folder in the root of the 
+			web site as the files container and a counter controlled by the upload.cnt 
+			file. Both must have write permissions set to the IUSR_xxx user. Thanks to Trax 
+			and Juanjo.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=798128&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-798128</A>] The user (programmer) can now define a <STRONG>
+					custom separator</STRONG>
+			for the list items of a combo in the toolbar. Thanks to Wulff D. Heiss.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=741963&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-741963</A>][<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=878941&amp;group_id=75348&amp;atid=543656"
+					target="_blank">SF Feature-878941</A>][<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=869389&amp;group_id=75348&amp;atid=543655"
+					target="_blank">SF Patch-869389</A>] A minimal support for a fake <STRONG>TAB 
+					is now available</STRONG>, even if HTML has no support for TAB. Now 
+			when the user presses the TAB key a configurable number of spaces (&amp;nbsp;) 
+			is added. Take a look at config.TabSpaces on the fck_config.js file. No action 
+			is performed if it is set to zero. The default value is 4. Thanks to Phil 
+			Hassey.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=782779&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-782779</A>][<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=790939&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-790939</A>] The problem with big images has been 
+			corrected. Thanks to Raver.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853374&amp;group_id=75348"
+					target="_blank">SF BUG-862975</A>] Now the editor does nothing if no 
+			image is selected in the image dialog box and the OK button is hit.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=851609&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-851609</A>] The problem with ASP and null values 
+			has been solved.
+			<LI>
+				<STRONG>Norwegean</STRONG>
+			language pack. Thanks to Martin Kronstad.
+			<LI>
+				<STRONG>Hungarian</STRONG>
+			language pack. Thanks to Balzs Szab.
+			<LI>
+				<STRONG>Bosnian</STRONG>
+			language pack. Thanks to Trax.
+			<LI>
+				<STRONG>Japanese</STRONG>
+			language pack. Thanks to Kato Yuichiro.
+			<LI>
+				Updates on the <STRONG>Polish</STRONG>
+			language pack. Thanks to Norbert Neubauer.
+			<LI>
+				The <STRONG>Chinese (Taiwan)</STRONG> (zh-tw) has been removed from the package 
+				because it's corrupt. I'm sorry. I hope someone could send me a good version 
+				soon.
+			</LI>
+		</UL>
+		<H3>Version 1.3.1</H3>
+		<UL>
+			<LI>
+				It's now possible to configure the editor the insert a <STRONG>&lt;BR&gt; tag 
+					instead of &lt;P&gt;</STRONG> when the user presses the <STRONG>&lt;Enter&gt;</STRONG>
+				key. Take a look at the fck_config.js configuration file for the "<STRONG>UseBROnCarriageReturn</STRONG>" 
+			key. This option is disabled by default.
+			<LI>
+				<STRONG>Icelandic</STRONG>
+			language pack. Thanks to Andri skarsson.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853374&amp;group_id=75348">SF 
+					BUG-853374</A>] On IE 5.0 there was a little error introduced with 
+			version 1.3 on initialization. It was corrected.
+			<LI>
+				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853372&amp;group_id=75348">SF 
+					BUG-853372</A>] On IE 5.0 there was a little error introduced with 
+			version 1.3 when setting the focus in the editor. It was corrected.
+			<LI>
+				Minor errors on the language file for <STRONG>english</STRONG>
+			has been corrected. Thanks to Anders Madsen.
+			<LI>
+				Minor errors on the language file for <STRONG>danish</STRONG> has been 
+				corrected. Thanks to Martin Johansen.
+			</LI>
+		</UL>
+		<H3>Version 1.3</H3>
+		<UL>
+			<LI>
+				Language support for <STRONG>Danish, Polish, Simple Chinese, Slovak, Swedish and 
+					Turkish</STRONG>.
+			<LI>
+				Language updates for <STRONG>Romanian</STRONG>.
+			<LI>
+				It's now possible to <STRONG>override</STRONG> any of the <STRONG>editor's 
+					configurations</STRONG>
+			(for now it's implemented just for JavaScript, ASPX and HTC modules). See 
+			_test/test.html for a sample. I'm now waiting for the Community for the ASP, 
+			CFM and PHP versions.
+			<LI>
+				A new method is available for <STRONG>PHP</STRONG> users. It's called <STRONG>ReturnFCKeditor</STRONG>. 
+				It works exactly like CreateFCKeditor, but it <STRONG>returns a string with the 
+					HTML</STRONG>
+			for the editor instead of output it (echo). This feature is useful for people 
+			who are working with Smarty Templates or something like that. Thanks to Timothy 
+			J. Finucane.
+			<LI>
+				Many people have had problems with <STRONG>international characters</STRONG> over
+				<STRONG>PHP</STRONG>. I had also the same problem. PHP have strange problems 
+				with character encoding. The code hasn't been changed but just saved again with 
+				Western European encoding. <STRONG>Now it works well</STRONG> in my system.<BR>
+			Take a look also at the "default_charset" configuration option at the php.ini 
+			file. It doesn't seem to be an editor's problem but a PHP issue.
+			<LI>
+				The "<STRONG>testsubmit.php</STRONG>" file now strips the "<STRONG>Magic Quotes</STRONG>
+			" that are automatically added by PHP on form posts.
+			<LI>
+				A <STRONG>new language</STRONG> integration module is available for <STRONG>ASP/Jscript</STRONG>. 
+			Thanks to Dimiter Naydenov.
+			<LI>
+				<STRONG>New configuration</STRONG> options are available to <STRONG>customize the 
+					Target</STRONG> combo box in the <STRONG>Insert/Modify Link</STRONG>
+			dialog box. Now you can hide it, or set which options are available in the 
+			combo box. Take a look at the fck_config.js file.
+			<LI>
+				The <STRONG>Text as Plain Text</STRONG> toolbar <STRONG>icon</STRONG> has been 
+				changed <STRONG>to avoid confusion</STRONG>
+			with the Normal Paste or. Thanks to Kaupo Kalda.
+			<LI>
+				The file <STRONG>dhtmled.cab has been removed</STRONG>
+			from the package. It's not needed to the editor to work and caused some 
+			confusion for a few users.
+			<LI>
+				The <STRONG>editor's content</STRONG> now <STRONG>doesn't loose the focus</STRONG>
+			when the user clicks with the mouse in a toolbar button.
+			<LI>
+				On <STRONG>drag-and-drop</STRONG> operations the data to be inserted in the 
+				editor is now <STRONG>converted to plain text</STRONG> when the "<STRONG>ForcePasteAsPlainText</STRONG>" 
+				configuration is set to <STRONG>true</STRONG>.
+			<LI>
+				The <STRONG>image browser</STRONG> sample in PHP now <STRONG>sorts the files</STRONG>
+			by name. Thanks to Sergey Lupashko.
+			<LI>
+				Two <STRONG>new configuration</STRONG> options are available to <STRONG>turn on/off 
+					by default</STRONG> the "<STRONG>Show Borders</STRONG>" and "<STRONG>Show 
+					Details</STRONG>" commands.
+			<LI>
+				Some <STRONG>characters have been removed</STRONG> from the "<STRONG>Insert Special 
+					Chars</STRONG>" dialog box because they were causing encoding problems 
+			in some languages. Thanks to Abomb Hua.
+			<LI>
+				<STRONG>JSP</STRONG> versions of the <STRONG>image and file upload and browsing</STRONG>
+				features. Thanks to Simone Chiaretta.</LI></UL>
+		<H3>Version 1.2.4</H3>
+		<UL>
+			<LI>
+				Language support for <STRONG>Spanish, Finnish, Romanian and Korean</STRONG>.
+			<LI>
+				Language updates for <STRONG>German</STRONG>.
+			<LI>
+				New <STRONG>Zoom</STRONG> toolbar option. (<A href="https://sourceforge.net/forum/forum.php?thread_id=904116&amp;forum_id=257180">Thanks 
+					to "mtn_roadie"</A>)</LI></UL>
+		<H3>Version 1.2.2</H3>
+		<UL>
+			<LI>
+				Language support for <STRONG>French</STRONG>.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=782779&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-782779</A>] Version 1.2 introduced a bug on the 
+				image dialog window: when changing the image, no update was done. This bug is 
+				now fixed.
+			</LI>
+		</UL>
+		<H3>Version 1.2</H3>
+		<UL>
+			<LI>
+				Enhancements to the <STRONG>Word cleaning</STRONG>
+			feature (Thanks to Karl von Randow).
+			<LI>
+				The <STRONG>Table dialog box</STRONG>
+			now handles the Style width and height set in the table (Thanks to Roberto 
+			Arruda). There where many problems on prior version when people changed 
+			manually the table's size, dragging the size handles, and then it was not 
+			possible to set a new size using the table dialog box.
+			<LI>
+				For the <STRONG>Image dialog box:</STRONG>
+				<UL>
+					<LI>
+					No image is shown in the preview pane if no image has been set.
+					<LI>
+						If no HSpace is set in the image a "-1" value was shown in the dialog box. Now, 
+						nothing is shown if the value is negative.
+					</LI>
+				</UL>
+			<LI>
+				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=739630&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-739630</A>] Image with link lost the link when 
+			changing its properties. The problem is solved.
+			<LI>
+				Due to some problems in the XHTML cleaning (content duplication when the source 
+				HTML is dirty and malformed), the <STRONG>XHTML support is turned off by default</STRONG>
+			from this version. You can still change this behavior and turn it on in the 
+			configuration file.
+			<LI>
+				Some little updates on the <STRONG>English </STRONG>
+			language file.
+			<LI>
+			A few addition of missing entries on all languages files (translations for 
+			these changes are pending).
+			<LI>
+				Language files has been added for the following languages:
+				<UL>
+					<LI>
+						<STRONG>Brazilian Portuguese</STRONG>
+					(pt-br)
+					<LI>
+						<STRONG>Czech</STRONG>
+					(cz)
+					<LI>
+						<STRONG>Dutch</STRONG>
+					(nl)
+					<LI>
+						<STRONG>Russian</STRONG>
+					(ru)
+					<LI>
+						<STRONG>Chinese (Taiwan)</STRONG>
+					(zh-tw)
+					<LI>
+						<STRONG>Greek</STRONG>
+					(gr)
+					<LI>
+						<STRONG>German</STRONG> (de)</LI></UL>
+			</LI>
+		</UL>
+		<H3>Version 1.1</H3>
+		<UL>
+			<LI>
+				The "<STRONG>Multi Language</STRONG>" system is now available. This version 
+				ships with English and Italian versions completed. Other languages will be 
+				available soon. The editor automatically detects the client language and sets 
+				all labels, tooltips and dialog boxes to it, if available. The auto detection 
+				and the default language can be set in the <STRONG>fck_config.file</STRONG>.
+			<LI>
+				Two files can now be created to isolate customizations code from the original 
+				source code of the editor: <STRONG>fckeditor.config.js</STRONG> and <STRONG>fckeditor.custom.js</STRONG>. 
+			Create these files in the root folder of your web site, if needed. The first 
+			one can be used to add or override configurations set on fck_config.js. The 
+			second one is used for custom actions and behaviors.
+			<LI>
+			A problem with relative links and images like "/test/test.doc" has been solved. 
+			In prior versions, only with XHTML support enabled, the URL was changed to 
+			something like "http://www.mysite.xxx/test/test.doc" (The domain was 
+			automatically added). Now the XHTML cleaning procedure gets the URLs exactly 
+			how they are defined in the editors HTML.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=742168&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-742168</A>] Mouse drag and drop from toolbar 
+			buttons has been disabled.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=768210&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-768210</A>] HTML entities, like <STRONG>&amp;lt;</STRONG>, 
+			were not load correctly. The problem is solved.
+			<LI>
+				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=748812&amp;group_id=75348&amp;atid=543653"
+					target="_blank">SF BUG-748812</A>] The link dialog window doesn't open when 
+				the link button is grayed.
+			</LI>
+		</UL>
+		<H3>Version 1.0</H3>
+		<UL>
+			<LI>
+			Three new options are available in the configuration file to set what file 
+			types are allowed / denied to be uploaded from the "Insert Link" and "Insert 
+			Image" dialog boxes.
+			<LI>
+			Upload options, for links and images, are automatically hidden on IE 5.0 
+			browsers (it's not compatible).
+			<LI>
+			[SF BUG-734894] Fixed a problem on XHTML cleaning: the value on INPUT fields 
+			were lost.
+			<LI>
+			[SF BUG-713797] Fixed some image dialog errors when trying to set image 
+			properties when no image is available.
+			<LI>
+			[SF BUG-736414] Developed a workaround for a DHTML control bug when loading in 
+			the editor some HTML started with &lt;p&gt;&lt;hr&gt;&lt;/p&gt;.
+			<LI>
+			[SF BUG-737143] Paste from Word cleaning changed to solve some IE 5.0 errors. 
+			This feature is still not available over IE 5.0.
+			<LI>
+			[SF BUG-737233] CSS mappings are now OK on the PHP image browser module.
+			<LI>
+			[SF BUG-737495] The image preview in the image dialog box is now working 
+			correctly.
+			<LI>
+			[SF BUG-737532] The editor automatically switches to WYSIWYG mode when the form 
+			is posted.
+			<LI>
+				[SF BUG-739571] The editor is now working well over Opera (as for Netscape, a 
+				TEXTAREA is shown).
+			</LI>
+		</UL>
+		<H3>Version 1.0 Final Candidate</H3>
+		<UL>
+			<LI>
+			A new dialog box for the "Link" command is available. Now you can upload and 
+			browse the server exactly like the image dialog box. It's also possible to 
+			define the link title and target window (_blank, _self, _parent and _top). As 
+			with the image dialog box, a sample (and simple) file server browser is 
+			available.
+			<LI>
+			A new configuration option is available to force every paste action to be 
+			handled as plain text. See "config.ForcePasteAsPlainText" in fck_config.js.
+			<LI>
+			A new Toolbar button is available: "Paste from Word". It automatically cleans 
+			the clipboard content before pasting (removesWord styles, classes, xml stuff, 
+			etc...). This command is available for IE 5.5 and more. For IE 5.0 users, a 
+			message is displayed advising that the text will not be cleaned before pasting.
+			<LI>
+			The editor automatically detects Word clipboard data on pasting operations and 
+			asks the user to clean it before pasting. This option is turned on by default 
+			but it can be configured. See "config.AutoDetectPasteFromWord" in 
+			fck_config.js.
+			<LI>
+			Table properties are now available in cells' right click context menu.
+			<LI>
+				It's now possible to edit cells advanced properties from it's right click 
+				context menu.
+			</LI>
+		</UL>
+		<H3>Version 1.0 Release Candidate 1 (RC1)</H3>
+		<UL>
+			<LI>
+			Some performance improvements.
+			<LI>
+			The file dhtmled.cab has been added to the package for clients ho needs to 
+			install the Microsoft DHTML Editor component.
+			<LI>
+			[SF BUG-713952] The format command options are localized, so it depends on the 
+			IE language to work. Until version 0.9.5 it was working only over English IE 
+			browsers. Now the options are load dynamically on the client using the client's 
+			language.
+			<LI>
+			[SF BUG-712103] The style command is localized, so it depends on the IE 
+			language to work. Until version 0.9.5 it was working only over English IE 
+			browsers. Now it configures itself using the client's language.
+			<LI>
+				[SF BUG-726137] On version 0.9.5, some commands (special chars, image, 
+				emoticons, ...) remove the next available character before inserting the 
+				required content even if no selection was made in the editor. Now the editor 
+				replaces only the selected content (if available).
+			</LI>
+		</UL>
+		<H3>Version 0.9.5 beta</H3>
+		<UL>
+			<LI>
+			XHTML support is now available! It can be enabled/disabled in the fck_config.js 
+			file.
+			<LI>
+			"Show Table Borders" option: show borders for tables with borders size set to 
+			zero.
+			<LI>
+			"Show Details" option: show hidden elements (comments, scripts, paragraphs, 
+			line breaks)
+			<LI>
+			IE behavior integration module. Thanks to Daniel Shryock.
+			<LI>
+			"Find" option: to find text in the document.
+			<LI>
+			More performance enhancements.
+			<LI>
+			New testsubmit.php file. Thansk to Jim Michaels.
+			<LI>
+			Two initial PHP upload manager implementations (not working yet). Thanks to 
+			Frederic Tyndiuk and Christian Liljedahl.
+			<LI>
+			Initial PHP image browser implementation (not working yet). Thanks to Frederic 
+			Tyndiuk.
+			<LI>
+				Initial CFM upload manager implementation. Thanks to John Watson.
+			</LI>
+		</UL>
+		<H3>Version 0.9.4 beta</H3>
+		<UL>
+			<LI>
+			ColdFusion module integration is now available! Thanks to John Watson.
+			<LI>
+			"Insert Smiley" toolbar option! Thanks to Fredox. Take a look at fck_config.js 
+			for configuration options.
+			<LI>
+			"Paste as plain text" toolbar option!
+			<LI>
+			Right click support for links (edit / remove).
+			<LI>
+			Buttons now are shown in gray when disabled.
+			<LI>
+			Buttons are shown just when the image is downloaded (no more "red x" while 
+			waiting for it).
+			<LI>
+			The toolbar background color can be set with a CSS style (see fck_editor.css).
+			<LI>
+				Toolbar images have been reviewed:
+				<UL>
+					<LI>
+					Now they are transparent.
+					<LI>
+					No more over...gif for every button (so the editor loads quicker).
+					<LI>
+						Buttons states are controlled with CSS styles. (see fck_editor.css).</LI></UL>
+			<LI>
+			Internet Explorer 5.0 compatibility, except for the image uploading popup.
+			<LI>
+			Optimizations when loading the editor.
+			<LI>
+			[SF BUG-709544] - Toolbar buttons wait for the images to be downloaded to start 
+			watching and responding the user actions (turn buttons on/off when the user 
+			changes position inside the editor).
+			<LI>
+			Javascript integration is now Object Oriented. CreateFCKeditor function is not 
+			available anymore. Take a look in test.html.
+			<LI>
+				Two new configuration options, ImageBrowser and ImageUpload, are available to 
+				turn on and off the image upload and image browsing options in the Image dialog 
+				box. This options can be hidden for a specific editor instance throw specific 
+				URL parameter in the editors IFRAME (upload=true/false&amp;browse=true/false). 
+				All specific language integration modules handle this option. For sample see 
+				the _test directory.
+			</LI>
+		</UL></SPAN>
+	</body>
+</html>
diff -ruN 1.3.11sr1/getimage.php 1.4.0sr5-1/getimage.php
--- 1.3.11sr1/getimage.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/getimage.php	2006-08-08 02:53:59.000000000 -0500
@@ -2,15 +2,15 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | getimage.php                                                              |
 // |                                                                           |
 // | Shows images outside of the webtree                                       |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2004 by the following authors:                              |
+// | Copyright (C) 2004-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -29,7 +29,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: getimage.php,v 1.5 2004/01/11 19:15:13 dhaun Exp $
+// $Id: getimage.php,v 1.6.2.1 2006/05/27 15:38:45 dhaun Exp $
 
 /**
 * For really strict webhosts, this file an be used to show images in pages that
@@ -58,17 +58,17 @@
                                  );
                                  
 $mode = '';
-if (isset($HTTP_GET_VARS['mode'])) {
-    $mode = $HTTP_GET_VARS['mode'];
+if (isset($_GET['mode'])) {
+    $mode = $_GET['mode'];
 }
 $image = '';
-if (isset($HTTP_GET_VARS['image'])) {
-    $image = $HTTP_GET_VARS['image'];
+if (isset($_GET['image'])) {
+    $image = COM_applyFilter ($_GET['image']);
 }
 if (strstr($image, '..')) {
-    // Can you believe this, some jackass tried to relative pathing to access files they
-    // shouldn't have access to?
-    COM_errorLog('Someone tried to illegally access files using getimage.php');
+    // Can you believe this, some jackass tried to relative pathing to access
+    // files they shouldn't have access to?
+    COM_accessLog('Someone tried to illegally access files using getimage.php');
     exit;
 }
 
@@ -78,6 +78,9 @@
     case 'articles':
         $downloader->setPath($_CONF['path_images'] . 'articles/');
         break;
+    case 'topics':
+        $downloader->setPath($_CONF['path_images'] . 'topics/');
+        break;
     case 'userphotos':
         $downloader->setPath($_CONF['path_images'] . 'userphotos/');
         break;
@@ -89,12 +92,12 @@
 // Let's see if we don't have a legit file.  If not bail
 if (is_file($downloader->getPath() . $image)) {
     if ($mode == 'show') {
-        echo '<html><body><img src="' . $_CONF['site_url'] . '/getimage.php?mode=articles&amp;image=' . $image . '" alt="" /></body></html>';
+        echo '<html><body><img src="' . $_CONF['site_url'] . '/getimage.php?mode=articles&amp;image=' . $image . '" alt=""></body></html>';
     } else {
         $downloader->downloadFile($image);
     }
 } else {
-    $display = COM_errorLog('File, ' . $downloader->getPath() . $image . ', was not found in getimage.php');
+    $display = COM_errorLog('File, ' . $image . ', was not found in getimage.php');
 
     if ($mode == 'show') {
         echo COM_siteHeader ('menu') . $display . COM_siteFooter ();
diff -ruN 1.3.11sr1/images/articles/index.html 1.4.0sr5-1/images/articles/index.html
--- 1.3.11sr1/images/articles/index.html	2004-12-31 10:02:24.000000000 -0600
+++ 1.4.0sr5-1/images/articles/index.html	2006-08-08 02:39:06.000000000 -0500
@@ -1 +0,0 @@
-<html><body></body></html>
Files 1.3.11sr1/images/buttons/cms-geeklog.png and 1.4.0sr5-1/images/buttons/cms-geeklog.png differ
Files 1.3.11sr1/images/buttons/geeklog-badge.gif and 1.4.0sr5-1/images/buttons/geeklog-badge.gif differ
Files 1.3.11sr1/images/icons/ping.gif and 1.4.0sr5-1/images/icons/ping.gif differ
diff -ruN 1.3.11sr1/images/library/File/test.pdf 1.4.0sr5-1/images/library/File/test.pdf
--- 1.3.11sr1/images/library/File/test.pdf	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/images/library/File/test.pdf	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+%PDF-1.2 
%
+ 
8 0 obj
<<
/Length 9 0 R
/Filter /FlateDecode 
>>
stream
+H%=
+0OQk]7
GoB _2	=B̤Qu>kpN+ΕC+&	ra[Jq?HB/~F
endstream
endobj
9 0 obj
102
endobj
4 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F0 6 0 R 
>>
/ProcSet 2 0 R
>>
/Contents 8 0 R
>>
endobj
6 0 obj
<<
/Type /Font
/Subtype /TrueType
/Name /F0
/BaseFont /TimesNewRoman
/FirstChar 32
/LastChar 255
/Widths [ 250 333 408 500 500 833 778 180 333 333 500 564 250 333 250 278 
500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 
921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 
556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 
333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 
500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 778 
500 778 333 500 444 1000 500 500 333 1000 556 333 889 778 611 778 
778 333 333 444 444 350 500 1000 333 980 389 333 722 778 444 722 
250 333 500 500 500 500 200 500 333 760 276 500 564 333 760 500 
400 549 300 300 333 576 453 250 333 300 310 500 750 750 750 444 
722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 
722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 
444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 
500 500 500 500 500 500 500 549 500 500 500 500 500 500 500 500 
]
/Encoding /WinAnsiEncoding
/FontDescriptor 7 0 R
>>
endobj
7 0 obj
<<
/Type /FontDescriptor
/FontName /TimesNewRoman
/Flags 34
/FontBBox [ -250 -216 1172 1000 ]
/MissingWidth 325
/StemV 73
/StemH 73
/ItalicAngle 0
/CapHeight 891
/XHeight 446
/Ascent 891
/Descent -216
/Leading 149
/MaxWidth 977
/AvgWidth 401
>>
endobj
2 0 obj
[ /PDF /Text  ]
endobj
5 0 obj
<<
/Kids [4 0 R ]
/Count 1
/Type /Pages
/MediaBox [ 0 0 612 792 ]
>>
endobj
1 0 obj
<<
/Creator <FEFF0074006500730074002E0064006F00630020002D0020004D006900630072006F0073006F0066007400200057006F00720064>
/CreationDate (D:20050523104035)
/Title <FEFF0074006500730074002E005000440046>
/Author <FEFF0042006C00610069006E0065>
/Producer (Acrobat PDFWriter 4.0 for Windows NT)
>>
endobj
3 0 obj
<<
/Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 10
0000000000 65535 f 
0000001798 00000 n 
0000001683 00000 n 
0000002102 00000 n 
0000000216 00000 n 
0000001714 00000 n 
0000000334 00000 n 
0000001423 00000 n 
0000000019 00000 n 
0000000197 00000 n 
trailer
<<
/Size 10
/Root 3 0 R
/Info 1 0 R
/ID [<82f80ec07a366ac6f8a9bf48d1c23b7d><82f80ec07a366ac6f8a9bf48d1c23b7d>]
>>
startxref
2151
%%EOF
\ No newline at end of file
Files 1.3.11sr1/images/library/Image/icons/ai.gif and 1.4.0sr5-1/images/library/Image/icons/ai.gif differ
Files 1.3.11sr1/images/library/Image/icons/avi.gif and 1.4.0sr5-1/images/library/Image/icons/avi.gif differ
Files 1.3.11sr1/images/library/Image/icons/bmp.gif and 1.4.0sr5-1/images/library/Image/icons/bmp.gif differ
Files 1.3.11sr1/images/library/Image/icons/cs.gif and 1.4.0sr5-1/images/library/Image/icons/cs.gif differ
Files 1.3.11sr1/images/library/Image/icons/default.icon.gif and 1.4.0sr5-1/images/library/Image/icons/default.icon.gif differ
Files 1.3.11sr1/images/library/Image/icons/dll.gif and 1.4.0sr5-1/images/library/Image/icons/dll.gif differ
Files 1.3.11sr1/images/library/Image/icons/doc.gif and 1.4.0sr5-1/images/library/Image/icons/doc.gif differ
Files 1.3.11sr1/images/library/Image/icons/exe.gif and 1.4.0sr5-1/images/library/Image/icons/exe.gif differ
Files 1.3.11sr1/images/library/Image/icons/fla.gif and 1.4.0sr5-1/images/library/Image/icons/fla.gif differ
Files 1.3.11sr1/images/library/Image/icons/gif.gif and 1.4.0sr5-1/images/library/Image/icons/gif.gif differ
Files 1.3.11sr1/images/library/Image/icons/htm.gif and 1.4.0sr5-1/images/library/Image/icons/htm.gif differ
Files 1.3.11sr1/images/library/Image/icons/html.gif and 1.4.0sr5-1/images/library/Image/icons/html.gif differ
Files 1.3.11sr1/images/library/Image/icons/jpg.gif and 1.4.0sr5-1/images/library/Image/icons/jpg.gif differ
Files 1.3.11sr1/images/library/Image/icons/js.gif and 1.4.0sr5-1/images/library/Image/icons/js.gif differ
Files 1.3.11sr1/images/library/Image/icons/mdb.gif and 1.4.0sr5-1/images/library/Image/icons/mdb.gif differ
Files 1.3.11sr1/images/library/Image/icons/mp3.gif and 1.4.0sr5-1/images/library/Image/icons/mp3.gif differ
Files 1.3.11sr1/images/library/Image/icons/pdf.gif and 1.4.0sr5-1/images/library/Image/icons/pdf.gif differ
Files 1.3.11sr1/images/library/Image/icons/ppt.gif and 1.4.0sr5-1/images/library/Image/icons/ppt.gif differ
Files 1.3.11sr1/images/library/Image/icons/rdp.gif and 1.4.0sr5-1/images/library/Image/icons/rdp.gif differ
Files 1.3.11sr1/images/library/Image/icons/swf.gif and 1.4.0sr5-1/images/library/Image/icons/swf.gif differ
Files 1.3.11sr1/images/library/Image/icons/swt.gif and 1.4.0sr5-1/images/library/Image/icons/swt.gif differ
Files 1.3.11sr1/images/library/Image/icons/txt.gif and 1.4.0sr5-1/images/library/Image/icons/txt.gif differ
Files 1.3.11sr1/images/library/Image/icons/vsd.gif and 1.4.0sr5-1/images/library/Image/icons/vsd.gif differ
Files 1.3.11sr1/images/library/Image/icons/xls.gif and 1.4.0sr5-1/images/library/Image/icons/xls.gif differ
Files 1.3.11sr1/images/library/Image/icons/xml.gif and 1.4.0sr5-1/images/library/Image/icons/xml.gif differ
Files 1.3.11sr1/images/library/Image/icons/zip.gif and 1.4.0sr5-1/images/library/Image/icons/zip.gif differ
Files 1.3.11sr1/images/library/Image/image1.jpg and 1.4.0sr5-1/images/library/Image/image1.jpg differ
Files 1.3.11sr1/images/library/Image/image2.jpg and 1.4.0sr5-1/images/library/Image/image2.jpg differ
Files 1.3.11sr1/images/library/Image/image3.jpg and 1.4.0sr5-1/images/library/Image/image3.jpg differ
diff -ruN 1.3.11sr1/images/userphotos/index.html 1.4.0sr5-1/images/userphotos/index.html
--- 1.3.11sr1/images/userphotos/index.html	2004-12-31 10:02:24.000000000 -0600
+++ 1.4.0sr5-1/images/userphotos/index.html	2006-08-08 02:39:06.000000000 -0500
@@ -1 +0,0 @@
-<html><body></body></html>
diff -ruN 1.3.11sr1/index.php 1.4.0sr5-1/index.php
--- 1.3.11sr1/index.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/index.php	2006-08-08 02:53:59.000000000 -0500
@@ -32,24 +32,24 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: index.php,v 1.69 2004/11/06 17:16:56 blaine Exp $
+// $Id: index.php,v 1.75 2005/12/03 12:45:29 ospiess Exp $
 
 require_once ('lib-common.php');
 require_once ($_CONF['path_system'] . 'lib-story.php');
 
 $newstories = false;
 $displayall = false;
-if (isset ($HTTP_GET_VARS['display']) && empty ($topic)) {
-    if ($HTTP_GET_VARS['display'] == 'new') {
+if (isset ($_GET['display']) && empty ($topic)) {
+    if ($_GET['display'] == 'new') {
         $newstories = true;
-    } else if ($HTTP_GET_VARS['display'] == 'all') {
+    } else if ($_GET['display'] == 'all') {
         $displayall = true;
     }
 }
 
 $page = 1;
-if (isset ($HTTP_GET_VARS['page'])) {
-    $page = COM_applyFilter ($HTTP_GET_VARS['page'], true);
+if (isset ($_GET['page'])) {
+    $page = COM_applyFilter ($_GET['page'], true);
     if ($page == 0) {
         $page = 1;
     }
@@ -67,8 +67,8 @@
 }
 
 $display .= COM_siteHeader();
-if (isset ($HTTP_GET_VARS['msg'])) {
-    $display .= COM_showMessage (COM_applyFilter ($HTTP_GET_VARS['msg'], true),COM_applyFilter ($HTTP_GET_VARS['plugin']));
+if (isset ($_GET['msg'])) {
+    $display .= COM_showMessage (COM_applyFilter ($_GET['msg'], true),COM_applyFilter ($_GET['plugin']));
 }
 
 
@@ -123,23 +123,26 @@
 // solely
 COM_featuredCheck();
 
-$archivetid = ' '; // this would be invalid as a topic id
+// Retrieve the archive topic - currently only one supported
+$archivetid = DB_getItem ($_TABLES['topics'], 'tid', "archive_flag='1'");
 
 // Scan for any stories that have expired and should be archived or deleted
-$expiresql = DB_query ("SELECT sid,tid,title,expire,statuscode FROM {$_TABLES['stories']} WHERE (expire <= NOW()) AND (statuscode = " . STORY_ARCHIVE_ON_EXPIRE . " OR statuscode = " . STORY_DELETE_ON_EXPIRE . ")");
+$asql = "SELECT sid,tid,title,expire,statuscode FROM {$_TABLES['stories']} ";
+$asql .= 'WHERE (expire <= NOW()) AND (statuscode = ' . STORY_DELETE_ON_EXPIRE;
+if (empty ($archivetid)) {
+    $asql .= ')';
+} else {
+    $asql .= ' OR statuscode = ' . STORY_ARCHIVE_ON_EXPIRE . ") AND tid != '$archivetid'";
+}
+$expiresql = DB_query ($asql);
 while (list ($sid, $expiretopic, $title, $expire, $statuscode) = DB_fetchArray ($expiresql)) {
     if ($statuscode == STORY_ARCHIVE_ON_EXPIRE) {
-        if ($archivetid == ' ') {
-            // Retrieve the archive topic - currently only one supported
-            $archivetid = DB_getItem ($_TABLES['topics'], 'tid',
-                                      "archive_flag='1'");
-        }
-        if (!empty ($archivetid)) {
-            COM_errorLOG("Archive Story: $sid, Topic:$archivetid, Title: $title. Expired :$expire");
+        if (!empty ($archivetid) ) {
+            COM_errorLOG("Archive Story: $sid, Topic: $archivetid, Title: $title, Expired: $expire");
             DB_query ("UPDATE {$_TABLES['stories']} SET tid = '$archivetid', frontpage = '0', featured = '0' WHERE sid='{$sid}'");
         }
     } else if ($statuscode == STORY_DELETE_ON_EXPIRE) {
-        COM_errorLOG("Delete Story and comments: $sid, Topic:$expiretopic, Title: $title. Expired :$expire");
+        COM_errorLOG("Delete Story and comments: $sid, Topic: $expiretopic, Title: $titler, Expired: $expire");
         STORY_deleteImages ($sid);
         DB_query("DELETE FROM {$_TABLES['comments']} WHERE sid='{$sid}' AND type = 'article'");
         DB_query("DELETE FROM {$_TABLES['stories']} WHERE sid='{$sid}'");
diff -ruN 1.3.11sr1/javascript/advanced_editor.js 1.4.0sr5-1/javascript/advanced_editor.js
--- 1.3.11sr1/javascript/advanced_editor.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/javascript/advanced_editor.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,74 @@
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2003,2004,2005 by the following authors:                    |
+// | Version 1.0    Date: Jun 4, 2005                                          |
+// | Authors:   Blaine Lang - blaine@portalparts.com                           |
+// |                                                                           |
+// | Javascript functions for Geeklog Advanced Editor                          |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+
+    function enablearchive(obj) {
+        var f = obj.form;               // all elements have their parent form in "form"
+        var disable = obj.checked;      // Disable when checked
+        if (f.elements["archiveflag"].checked==true && f.elements["storycode11"].checked==false) {
+            f.elements["storycode10"].checked=true;
+        }
+        f.elements["storycode10"].disabled=!disable;
+        f.elements["storycode11"].disabled=!disable;
+        f.elements["expire_month"].disabled=!disable;
+        f.elements["expire_day"].disabled=!disable;
+        f.elements["expire_year"].disabled=!disable;
+        f.elements["expire_hour"].disabled=!disable;
+        f.elements["expire_minute"].disabled=!disable;
+        f.elements["expire_ampm"].disabled=!disable;
+    }
+
+    function showhideEditorDiv(option) {
+        var obj = document.getElementById('adveditor');
+        var divarray1 = new Array('text_editor','html_editor');
+        var divarray = new Array('publish','images','archive','perms');
+
+        if (option != 'preview') {
+            for (i=0; i < divarray.length; i++) {
+                div = 'se_' + divarray[i];
+                if (option != 'all' && option != divarray[i]) {
+                    document.getElementById(div).style.display = 'none';
+                } else {
+                    document.getElementById(div).style.display = '';
+                }
+            }
+        }
+
+        if (option == 'editor' || option == 'all') {
+            document.getElementById('editor_mode').style.display = '';
+            if (document.getElementById('sel_editmode').value == 'html') {
+                document.getElementById('text_editor').style.display = 'none';
+                document.getElementById('html_editor').style.display = '';
+            } else {
+                document.getElementById('text_editor').style.display = '';
+                document.getElementById('html_editor').style.display = 'none';
+            }
+            if (option == 'all') {
+                document.getElementById('se_options').style.display = '';
+            } else {
+                document.getElementById('se_options').style.display = 'none';
+            }
+
+        } else if (option == 'preview') {
+            if (document.getElementById('preview').style.display == 'none') {
+                document.getElementById('preview').style.display = '';
+            } else {
+                document.getElementById('preview').style.display = 'none';
+            }
+
+        } else {
+            document.getElementById('se_options').style.display = '';
+            document.getElementById('text_editor').style.display = 'none';
+            document.getElementById('html_editor').style.display = 'none';
+            document.getElementById('editor_mode').style.display = 'none';
+        }
+        document.getElementById('navcontainer').scrollIntoView(true);
+
+    }
+ 
\ No newline at end of file
diff -ruN 1.3.11sr1/javascript/moveusers.js 1.4.0sr5-1/javascript/moveusers.js
--- 1.3.11sr1/javascript/moveusers.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/javascript/moveusers.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,120 @@
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | Set of javascript functions to support the user-move feature              |
+// | where two selectboxes are presented                                       |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2003,2004 by the following authors:                         |
+// |                                                                           |
+// | Authors:   Matt Kruse  - matt@mattkruse.com                               |
+// |            Blaine Lang - blaine@portalparts.com                           |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+
+// -------------------------------------------------------------------
+// setUsers(select_form)
+// Used in the Group Admin function to edit the list of included site members
+// Used to set a hidden form variable to the result of all the values in the source selectbox
+// -------------------------------------------------------------------
+function setUsers(f) { 
+	var destVals = new Array(), opt = 0, separator = "|", d = f.fieldTo; 
+	while (d[opt]) 
+        destVals[opt] = d[opt++].value;
+        if(d[opt] > 1) {
+            f.groupmembers.value = separator + destVals.join(separator); 
+        } else {
+            f.groupmembers.value = destVals.join(separator); 
+        }
+        return true; 
+}
+
+// -------------------------------------------------------------------
+// sortSelect(select_object)
+//   Pass this function a SELECT object and the options will be sorted
+//   by their text (display) values
+// -------------------------------------------------------------------
+function sortSelect(obj) {
+    var o = new Array();
+    if (obj.options==null) { return; }
+    for (var i=0; i<obj.options.length; i++) {
+        o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
+        }
+    if (o.length==0) { return; }
+    o = o.sort( 
+        function(a,b) { 
+            if ((a.text+"") < (b.text+"")) { return -1; }
+            if ((a.text+"") > (b.text+"")) { return 1; }
+            return 0;
+            } 
+        );
+
+    for (var i=0; i<o.length; i++) {
+        obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
+        }
+    }
+
+// -------------------------------------------------------------------
+// moveSelectedOptions(select_object,select_object[,autosort(true/false)[,regex]])
+//  This function moves options between select boxes. Works best with
+//  multi-select boxes to create the common Windows control effect.
+//  Passes all selected values from the first object to the second
+//  object and re-sorts each box.
+//  If a third argument of 'false' is passed, then the lists are not
+//  sorted after the move.
+//  If a fourth string argument is passed, this will function as a
+//  Regular Expression to match against the TEXT or the options. If 
+//  the text of an option matches the pattern, it will NOT be moved.
+//  It will be treated as an unmoveable option.
+//  You can also put this into the <SELECT> object as follows:
+//    onDblClick="moveSelectedOptions(this,this.form.target)
+//  This way, when the user double-clicks on a value in one box, it
+//  will be transferred to the other (in browsers that support the 
+//  onDblClick() event handler).
+// -------------------------------------------------------------------
+function moveSelectedOptions(from,to) {
+    // Unselect matching options, if required
+    if (arguments.length>3) {
+        var regex = arguments[3];
+        if (regex != "") {
+            unSelectMatchingOptions(from,regex);
+            }
+        }
+    // Move them over
+    for (var i=0; i<from.options.length; i++) {
+        var o = from.options[i];
+        if (o.selected) {
+            to.options[to.options.length] = new Option( o.text, o.value, false, false);
+            }
+        }
+    // Delete them from original
+    for (var i=(from.options.length-1); i>=0; i--) {
+        var o = from.options[i];
+        if (o.selected) {
+            from.options[i] = null;
+            }
+        }
+    if ((arguments.length<3) || (arguments[2]==true)) {
+        sortSelect(from);
+        sortSelect(to);
+        }
+    from.selectedIndex = -1;
+    to.selectedIndex = -1;
+    }
\ No newline at end of file
diff -ruN 1.3.11sr1/javascript/staticpages_fckeditor.js 1.4.0sr5-1/javascript/staticpages_fckeditor.js
--- 1.3.11sr1/javascript/staticpages_fckeditor.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/javascript/staticpages_fckeditor.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,39 @@
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2003,2004 by the following authors:                         |
+// | Version 1.0    Date: Jun 4, 2005                                          |
+// | Authors:   Blaine Lang - blaine@portalparts.com                           |
+// |                                                                           |
+// | Javascript functions for FCKEditor Integration into Geeklog                |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+
+    window.onload = function() {
+        var oFCKeditor1 = new FCKeditor( 'sp_content' ) ;
+        oFCKeditor1.BasePath = geeklogEditorBasePath;
+        oFCKeditor1.ToolbarSet = 'editor-toolbar3' ;
+        oFCKeditor1.Height = 200 ;
+        oFCKeditor1.ReplaceTextarea() ;
+    }
+
+    function changeHTMLAreaSize(option) {
+        var size = 0;
+        var size = document.getElementById('sp_content___Frame').height;
+        if (option == 'larger') {
+            document.getElementById('sp_content___Frame').height = +(size) + 50;
+
+        } else if (option == 'smaller') {
+            document.getElementById('sp_content___Frame').height = +(size) - 50;
+        }
+    }
+
+   function changeToolbar(toolbar) {
+        var basePath= geeklogEditorBasePath ;
+        var instanceName='sp_content';
+        editor_frame = document.getElementById(instanceName+'___Frame');
+        //alert(editor_frame.src);
+        if (editor_frame!=null) {
+            editor_frame.src=basePath+'editor/fckeditor.html?InstanceName='+instanceName+'&Toolbar='+toolbar;
+            //editor_frame.src='http://localhost/geekcvs/fckeditor/editor/fckeditor.html?InstanceName=sp_content&Toolbar=editor-toolbar1';
+        }
+   }
\ No newline at end of file
diff -ruN 1.3.11sr1/javascript/storyeditor_fckeditor.js 1.4.0sr5-1/javascript/storyeditor_fckeditor.js
--- 1.3.11sr1/javascript/storyeditor_fckeditor.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/javascript/storyeditor_fckeditor.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,113 @@
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2003,2004 by the following authors:                         |
+// | Version 1.0    Date: Jun 4, 2005                                          |
+// | Authors:   Blaine Lang - blaine@portalparts.com                           |
+// |                                                                           |
+// | Javascript functions for FCKEditor Integration into Geeklog                |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+    window.onload = function() {
+        var oFCKeditor1 = new FCKeditor( 'introhtml' ) ;
+        oFCKeditor1.BasePath = geeklogEditorBasePath;
+        oFCKeditor1.ToolbarSet = 'editor-toolbar1' ;
+        oFCKeditor1.Height = 200 ;
+        oFCKeditor1.ReplaceTextarea() ;
+
+        var oFCKeditor2 = new FCKeditor( 'bodyhtml' ) ;
+        oFCKeditor2.BasePath = geeklogEditorBasePath ;
+        oFCKeditor2.ToolbarSet = 'editor-toolbar1' ;
+        oFCKeditor2.Height = 200 ;
+        oFCKeditor2.ReplaceTextarea() ;
+
+    }
+
+    function change_editmode(obj) {
+        if (obj.value == 'html') {
+            document.getElementById('text_editor').style.display='none';
+            document.getElementById('html_editor').style.display='';
+            swapEditorContent('html','intro');
+            swapEditorContent('html','body');
+        } else {
+            document.getElementById('text_editor').style.display='';
+            document.getElementById('html_editor').style.display='none';
+            swapEditorContent('text','intro');
+            swapEditorContent('text','body');
+        }
+    }
+
+    function changeHTMLTextAreaSize(element, option) {
+        var size = 0;
+        var size = document.getElementById(element + '___Frame').height;
+        if (option == 'larger') {
+            document.getElementById(element + '___Frame').height = +(size) + 50;
+
+        } else if (option == 'smaller') {
+            document.getElementById(element + '___Frame').height = +(size) - 50;
+        }
+    }
+
+    function changeTextAreaSize(element, option) {
+        var size = 0;
+        var size = document.getElementById(element).rows;
+        if (option == 'larger') {
+            document.getElementById(element).rows = +(size) + 3;
+        } else if (option == 'smaller') {
+            document.getElementById(element).rows = +(size) - 3;
+        }
+    }
+
+
+    function getEditorContent(instanceName) {
+        editor_frame = document.getElementById(instanceName+'___Frame');
+        editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea');
+        if (editor_source!=null) {
+            return editor_source.contentWindow.document.body.innerHTML;
+        } else {
+            return '';
+        }
+    }
+
+    function swapEditorContent(curmode,instance) {
+        var content = '';
+        if (instance == 'intro' )  {
+            editor_frame = document.getElementById('introhtml___Frame');
+        } else {
+            editor_frame = document.getElementById('bodyhtml___Frame');
+        }
+        editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea');
+
+        if (curmode == 'html') {
+            if (instance == 'intro' )  {
+                content = document.getElementById('introtext').value;
+            } else {
+                content = document.getElementById('bodytext').value;
+            }
+            editor_source.contentWindow.document.body.innerHTML = content;
+        } else {
+            content = editor_source.contentWindow.document.body.innerHTML;
+            if (instance == 'intro' )  {
+                document.getElementById('introtext').value = content;
+            } else {
+                document.getElementById('bodytext').value = content;
+            }
+        }
+    }
+
+    function set_postcontent() {
+        if (document.getElementById('sel_editmode').value == 'html') {
+            document.getElementById('introtext').value = getEditorContent('introhtml');
+            document.getElementById('bodytext').value = getEditorContent('bodyhtml');
+        }
+    }
+
+   function changeToolbar(toolbar) {
+        var basePath= geeklogEditorBasePath ;
+        var instanceName='introhtml';
+        editor_frame = document.getElementById(instanceName+'___Frame');
+        //alert(editor_frame.src);
+        if (editor_frame!=null) {
+            editor_frame.src=basePath+'editor/fckeditor.html?InstanceName='+instanceName+'&Toolbar='+toolbar;
+            //editor_frame.src='http://localhost/geekcvs/fckeditor/editor/fckeditor.html?InstanceName=introhtml&Toolbar=editor-toolbar1';
+        }
+   }
\ No newline at end of file
diff -ruN 1.3.11sr1/javascript/submitcomment_fckeditor.js 1.4.0sr5-1/javascript/submitcomment_fckeditor.js
--- 1.3.11sr1/javascript/submitcomment_fckeditor.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/javascript/submitcomment_fckeditor.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,59 @@
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2003,2004 by the following authors:                         |
+// | Version 1.0    Date: Jun 4, 2005                                          |
+// | Authors:   Blaine Lang - blaine@portalparts.com                           |
+// |                                                                           |
+// | Javascript functions for FCKEditor Integration into Geeklog                |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+    window.onload = function() {
+        var oFCKeditor1 = new FCKeditor( 'comment_html' ) ;
+        oFCKeditor1.BasePath = geeklogEditorBasePath;
+        oFCKeditor1.ToolbarSet = 'editor-toolbar1' ;
+        oFCKeditor1.Height = 200 ;
+        oFCKeditor1.ReplaceTextarea() ;
+    }
+
+    function change_editmode(obj) {
+        if (obj.value == 'html') {
+            document.getElementById('text_editor').style.display='none';
+            document.getElementById('html_editor').style.display='';
+            swapEditorContent('html');
+        } else {
+            document.getElementById('text_editor').style.display='';
+            document.getElementById('html_editor').style.display='none';
+            swapEditorContent('text');
+        }
+    }
+
+
+    function getEditorContent(instanceName) {
+        editor_frame = document.getElementById(instanceName+'___Frame');
+        editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea');
+        if (editor_source!=null) {
+            return editor_source.contentWindow.document.body.innerHTML;
+        } else {
+            return '';
+        }
+    }
+
+    function swapEditorContent(curmode) {
+        var content = '';
+        editor_frame = document.getElementById('comment___Frame');
+        editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea');
+
+        if (curmode == 'html') {
+            content = document.getElementById('comment_text').value;
+            editor_source.contentWindow.document.body.innerHTML = content;
+        } else {
+            content = editor_source.contentWindow.document.body.innerHTML;
+            document.getElementById('comment_text').value = content;
+        }
+    }
+
+    function set_postcontent() {
+        if (document.getElementById('sel_editmode').value == 'html') {
+            document.getElementById('comment_text').value = getEditorContent('comment_html');
+        }
+    }
diff -ruN 1.3.11sr1/javascript/submitstory_fckeditor.js 1.4.0sr5-1/javascript/submitstory_fckeditor.js
--- 1.3.11sr1/javascript/submitstory_fckeditor.js	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/javascript/submitstory_fckeditor.js	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,92 @@
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2003,2004 by the following authors:                         |
+// | Version 1.0    Date: Jun 4, 2005                                          |
+// | Authors:   Blaine Lang - blaine@portalparts.com                           |
+// |                                                                           |
+// | Javascript functions for FCKEditor Integration into Geeklog                |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+
+
+    window.onload = function() {
+        var oFCKeditor1 = new FCKeditor( 'introhtml' ) ;
+        oFCKeditor1.BasePath = geeklogEditorBasePath;
+        oFCKeditor1.ToolbarSet = 'editor-toolbar1' ;
+        oFCKeditor1.Height = 200 ;
+        oFCKeditor1.ReplaceTextarea() ;
+    }
+
+    function change_editmode(obj) {
+        if (obj.value == 'html') {
+            document.getElementById('text_editor').style.display='none';
+            document.getElementById('html_editor').style.display='';
+            swapEditorContent('html');
+        } else {
+            document.getElementById('text_editor').style.display='';
+            document.getElementById('html_editor').style.display='none';
+            swapEditorContent('text');
+        }
+    }
+
+    function changeHTMLTextAreaSize(element, option) {
+        var size = 0;
+        var size = document.getElementById(element + '___Frame').height;
+        if (option == 'larger') {
+            document.getElementById(element + '___Frame').height = +(size) + 50;
+
+        } else if (option == 'smaller') {
+            document.getElementById(element + '___Frame').height = +(size) - 50;
+        }
+    }
+
+    function changeTextAreaSize(element, option) {
+        var size = 0;
+        var size = document.getElementById(element).rows;
+        if (option == 'larger') {
+            document.getElementById(element).rows = +(size) + 3;
+        } else if (option == 'smaller') {
+            document.getElementById(element).rows = +(size) - 3;
+        }
+    }
+
+
+    function getEditorContent(instanceName) {
+        editor_frame = document.getElementById(instanceName+'___Frame');
+        editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea');
+        if (editor_source!=null) {
+            return editor_source.contentWindow.document.body.innerHTML;
+        } else {
+            return '';
+        }
+    }
+
+    function swapEditorContent(curmode) {
+        var content = '';
+        editor_frame = document.getElementById('introhtml___Frame');
+        editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea');
+
+        if (curmode == 'html') {
+            content = document.getElementById('introtext').value;
+            editor_source.contentWindow.document.body.innerHTML = content;
+        } else {
+            content = editor_source.contentWindow.document.body.innerHTML;
+            document.getElementById('introtext').value = content;
+        }
+    }
+
+    function set_postcontent() {
+        if (document.getElementById('sel_editmode').value == 'html') {
+            document.getElementById('introtext').value = getEditorContent('introhtml');
+        }
+    }
+
+   function changeToolbar(toolbar) {
+        var basePath= "{site_url}/fckeditor/" ;
+        var instanceName='introhtml';
+        editor_frame = document.getElementById(instanceName+'___Frame');
+        //alert(editor_frame.src);
+        if (editor_frame!=null) {
+            //editor_frame.src=basePath+'editor/fckeditor.html?InstanceName='+instanceName+'&Toolbar='+toolbar;
+            editor_frame.src='http://localhost/geekcvs/fckeditor/editor/fckeditor.html?InstanceName=introhtml&Toolbar=editor-toolbar1';
+        }
+   }
\ No newline at end of file
diff -ruN 1.3.11sr1/layout/professional/admin/block/blockeditor.thtml 1.4.0sr5-1/layout/professional/admin/block/blockeditor.thtml
--- 1.3.11sr1/layout/professional/admin/block/blockeditor.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/block/blockeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -38,7 +38,7 @@
                                         </tr>
                                         <tr>
                                             <td align="right">{lang_blockorder}:</td>
-                                            <td><input type="text" size="3" name="blockorder" value="{block_order}"> 0 - 255</td>
+                                            <td><input type="text" size="4" name="blockorder" value="{block_order}"> 0 - 9999</td>
 		                                </tr>
                                         <tr>
                                             <td align="right">{lang_blocktype}:</td>
@@ -72,6 +72,10 @@
                                             <td><input type="text" size="50" maxlength="{max_url_length}" name="rdfurl" value="{block_rdfurl}"></td>
                                         </tr>
                                         <tr>
+                                            <td align="right">{lang_rdflimit}:</td>
+                                            <td><input type="text" size="3" maxlength="3" name="rdflimit" value="{block_rdflimit}"></td>
+                                        </tr>
+                                        <tr>
                                             <td align="right">{lang_lastrdfupdate}:</td>
                                             <td><input type="text" size="19" name="rdfupdated" value="{block_rdfupdated}"></td>
                                         </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/block/defaultblockeditor.thtml 1.4.0sr5-1/layout/professional/admin/block/defaultblockeditor.thtml
--- 1.3.11sr1/layout/professional/admin/block/defaultblockeditor.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/block/defaultblockeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -18,7 +18,13 @@
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_topic}:</td>
-                                        <td>{lang_all}<input type="hidden" name="tid" value="all"></td>
+                                        <td>
+                                            <select name="tid">
+                                                <option value="all" {all_selected}>{lang_all}</option>
+                                                <option value="homeonly" {homeonly_selected}>{lang_homeonly}</option>
+                                                {topic_options}
+                                            </select>
+                                        </td>
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_side}:</td>
@@ -31,7 +37,7 @@
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_blockorder}:</td>
-                                        <td><input type="text" size="3" name="blockorder" value="{block_order}"> 0 - 255</td>
+                                        <td><input type="text" size="4" name="blockorder" value="{block_order}"> 0 - 9999</td>
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_blocktype}:</td>
diff -ruN 1.3.11sr1/layout/professional/admin/block/listblocks.thtml 1.4.0sr5-1/layout/professional/admin/block/listblocks.thtml
--- 1.3.11sr1/layout/professional/admin/block/listblocks.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/block/listblocks.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,18 +0,0 @@
-<table border="0" cellspacing="0" cellpadding=2 width="100%">
-    <tr>
-        <td rowspan="2"><img src="{site_url}/images/icons/block.gif" alt=""></td>
-        <td>[ <a href="{site_admin_url}/block.php?mode=edit">{lang_newblock}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-    </tr>
-    <tr>
-        <td>{lang_instructions}</td>
-    </tr>
-</table>
-<p />
-<table  width="100%" border="0" cellspacing="1" cellpadding="3">
-    {blocklist_item}
-</table><br>
-<table width="100%" border="0" cellspacing="0" cellpadding="3">
-    <tr>
-        <td align="center">{previouspage_link} {nextpage_link}</td>
-    </tr>
-</table>
\ No newline at end of file
diff -ruN 1.3.11sr1/layout/professional/admin/block/listitem.thtml 1.4.0sr5-1/layout/professional/admin/block/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/block/listitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/block/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
-<tr>
-<td class="globalCellText" align="center">{block_order}</td>
-<td width="45" class="globalCellText" align="left">
-    <img src="{layout_url}/images/admin/{blockcontrol_image}" width="45" height="20" border="0" usemap="#arrow{block_id}" alt="">
-        <map name="arrow{block_id}">
-            <area coords="0,0,12,20"  title="{upTitleMsg}" href="{site_admin_url}/block.php?mode=move&amp;bid={block_id}&amp;where=up" alt="{upTitleMsg}">
-            <area coords="13,0,29,20" title="{moveTitleMsg}"  href="{site_admin_url}/block.php?mode=move&amp;bid={block_id}&amp;where={switchside}" alt="{moveTitleMsg}">
-            <area coords="30,0,43,20" title="{dnTitleMsg}"  href="{site_admin_url}/block.php?mode=move&amp;bid={block_id}&amp;where=dn" alt="{dnTitleMsg}">
-        </map>
-    </td>
-<td class="globalCellText" align="left">
-    <a href="{site_admin_url}/block.php?mode=edit&amp;bid={block_id}">{block_title}</a>
-</td>
-<td class="globalCellText" align="center">{block_access}</td>
-<td class="globalCellText" align="center">{block_type}</td>
-<td class="globalCellText" align="center">{block_topic}</td>
-<td class="globalCellText" align="center">
-<form action="{site_admin_url}/block.php" method="post">
-  <input type="checkbox" name="blkenable" onclick="submit()" value="{block_id}" {enabled}><input type="hidden" name="blkChange" value="{block_id}">
- </td></form>
-</tr>
diff -ruN 1.3.11sr1/layout/professional/admin/block/listside.thtml 1.4.0sr5-1/layout/professional/admin/block/listside.thtml
--- 1.3.11sr1/layout/professional/admin/block/listside.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/block/listside.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,8 +0,0 @@
-                                <tr class="blocktitle" align="center">
-                                    <td colspan="2" align="center">{side}</td>
-                                    <td align="left">{lang_blocktitle}</td>
-                                    <td>{lang_access}</td>
-                                    <td>{lang_blocktype}</td>
-                                    <td>{lang_blocktopic}</td>
-                                    <td>{lang_enabled}</td>
-                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/database/listbackups.thtml 1.4.0sr5-1/layout/professional/admin/database/listbackups.thtml
--- 1.3.11sr1/layout/professional/admin/database/listbackups.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/database/listbackups.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,8 +0,0 @@
-<table width="100%" border="0">
-<tr>
-  <th align="left">{lang_backupfile}</th>
-  <th align="right">{lang_backupsize}</th>
-</tr>
-{backup_item}
-</table>
-<p>{number_backups}</p>
diff -ruN 1.3.11sr1/layout/professional/admin/database/listitem.thtml 1.4.0sr5-1/layout/professional/admin/database/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/database/listitem.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/database/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,4 +0,0 @@
-<tr>
-  <td align="left">{backup_file}</td>
-  <td align="right">{backup_size} <b>{lang_bytes}</b></td>
-</tr>
diff -ruN 1.3.11sr1/layout/professional/admin/event/eventeditor.thtml 1.4.0sr5-1/layout/professional/admin/event/eventeditor.thtml
--- 1.3.11sr1/layout/professional/admin/event/eventeditor.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/event/eventeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -119,6 +119,20 @@
                                         <td align="right" valign="top"><b>{lang_eventdescription}:</b></td>
                                         <td><textarea name="description" cols="50" rows="8">{event_description}</textarea></td>
                                     </tr>
+                                    <tr valign="top">
+                                        <td align="right"><b>{lang_postmode}:</b></td>
+                                        <td>
+                                            <select name="postmode">
+                                                {post_options}
+                                            </select>
+                                            <br>
+                                            {lang_allowed_html}
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right"><b>{lang_hits}:</b></td>
+                                        <td>{hits}</td>
+                                    </tr>
                                     <tr>
                                         <td colspan="2"><hr></td>
                                     </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/event/eventlist.thtml 1.4.0sr5-1/layout/professional/admin/event/eventlist.thtml
--- 1.3.11sr1/layout/professional/admin/event/eventlist.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/event/eventlist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,23 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding=2 width="100%">
-                                <tr>
-                                    <td rowspan="2">
-                                        <img src="{layout_url}/images/icons/event.gif" alt="">
-                                    </td>
-                                    <td>[ <a href="{site_admin_url}/event.php?mode=edit">{lang_newevent}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-                                </tr>
-                                <tr>
-                                    <td>{lang_instructions}</td>
-                                </tr>
-                            </table>
-                            <table border="0" cellspacing="0" cellpadding=2 width="100%">
-                                <tr>
-                                    <th>#</th>
-                                    <th>&nbsp;</th>
-                                    <th align="left">{lang_eventtitle}</th>
-                                    <th>{lang_access}</th>
-                                    <th>{lang_startdate}</th>
-                                    <th>{lang_enddate}</th>
-                                </tr>
-                                {event_row}
-                                <tr><td colspan="6">{google_paging}</td></tr>
-                            </table>
diff -ruN 1.3.11sr1/layout/professional/admin/event/listitem.thtml 1.4.0sr5-1/layout/professional/admin/event/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/event/listitem.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/event/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,12 +0,0 @@
-                                <tr align="center">
-                                    <td>{row_num}</td>
-                                    <td>
-                                        [<a href="{site_admin_url}/event.php?mode=clone&amp;eid={event_id}">C</a>]
-                                    </td>
-                                    <td align="left">
-                                        <a href="{site_admin_url}/event.php?mode=edit&amp;eid={event_id}">{event_title}</a>
-                                    </td>
-                                    <td>{event_access}</td>
-                                    <td>{event_startdate}</td>
-                                    <td>{event_enddate}</td>
-                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/group/grouplist.thtml 1.4.0sr5-1/layout/professional/admin/group/grouplist.thtml
--- 1.3.11sr1/layout/professional/admin/group/grouplist.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/group/grouplist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,21 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <td rowspan="2">
-                                        <img src="{layout_url}/images/icons/group.gif" alt="">
-                                    </td>
-                                    <td>[ <a href="{site_admin_url}/group.php?mode=edit">{lang_newgroup}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]
-                                    </td>
-                                </tr>
-                                <tr>
-                                    <td>{lang_instructions}</td>
-                                </tr>
-                            </table>
-                            <table border="0" cellspacing="0" cellpadding=2 width="100%">
-                                <tr>
-                                    <th align="left">{lang_groupname}</th>
-                                    <th align="left">{lang_description}</th>
-                                    <th>{lang_coregroup}</th>
-                                    <th>{lang_list_users}</th>
-                                </tr>
-                                {group_row}
-                            </table>
diff -ruN 1.3.11sr1/layout/professional/admin/group/groupmembers.thtml 1.4.0sr5-1/layout/professional/admin/group/groupmembers.thtml
--- 1.3.11sr1/layout/professional/admin/group/groupmembers.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/group/groupmembers.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,6 +1,19 @@
-<script type="text/JavaScript" src="{site_url}/library.js"></script>
-<center><table width="85%" cellspacing="0" cellpadding="0" border="0">
-<form name="groupusers" action="{phpself}?group={groupid}" method="post"> 
+<script type="text/JavaScript" src="{site_url}/javascript/moveusers.js"></script>
+<table border="0" cellspacing="0" cellpadding="2" width="100%" style="margin:5px 0px 10px 0px;">
+    <tr>
+        <td rowspan="2">
+            <img src="{layout_url}/images/icons/group.png" alt="">
+        </td>
+        <td>[ <a href="{site_admin_url}/group.php">{lang_grouplist}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]
+        </td>
+    </tr>
+    <tr>
+        <td>{lang_instructions}</td>
+    </tr>
+</table>
+<div style="border: 1px solid grey">
+<form name="groupusers" action="{phpself}?group={groupid}" method="post" style="margin:0px;"> 
+<table width="100%" cellspacing="0" cellpadding="0" border="0" class="pluginBG" style="padding:15px;">
     <tr align="middle">
         <td class="blocktitle" style="padding:5px; text-align:middle;">{LANG_sitemembers}</th>
         <td>&nbsp;</th>
@@ -27,5 +40,6 @@
         <input type="button" value="{lang_cancel}" onclick="javascript:history.go(-1)">&nbsp;&nbsp;
         <input type="submit" value="{lang_save}" onclick="return setUsers(this.form)">
         </td></tr>
-</table></center> 
+</table>
 </form>
+</div>
diff -ruN 1.3.11sr1/layout/professional/admin/group/listitem.thtml 1.4.0sr5-1/layout/professional/admin/group/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/group/listitem.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/group/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,6 +0,0 @@
-  <tr>
-    <td><a href="{site_admin_url}/group.php?mode=edit&amp;grp_id={group_id}">{group_name}</a></td>
-    <td>{group_description}</td>
-    <td align="center">{group_core}</td>
-    <td align="center"><a href="{site_admin_url}/group.php?mode=listusers&amp;grp_id={group_id}">{lang_list}</a>&nbsp;&nbsp;<a href="{site_admin_url}/group.php?mode=editusers&amp;grp_id={group_id}">{lang_edit}</a></td>
-  </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/link/linkeditor.thtml 1.4.0sr5-1/layout/professional/admin/link/linkeditor.thtml
--- 1.3.11sr1/layout/professional/admin/link/linkeditor.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/link/linkeditor.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,79 +0,0 @@
-                                <form action="{site_admin_url}/link.php" method="post">
-                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                        <tr>
-                                            <td align="right">{lang_linktitle}:</td>
-                                            <td>
-                                                <input type="text" size="48" maxlength="96" name="title" value="{link_title}">
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_linkurl}:</td>
-                                            <td>
-                                                <input type="text" size="48" maxlength="{max_url_length}" name="url" value="{link_url}"> {lang_includehttp}
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_category}:</td>
-                                            <td>
-                                                <select name="categorydd">
-                                                    {category_options}
-                                                </select>
-                                                {lang_ifotherspecify}: <input type="text" name="category" size="12" maxlength="32">
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_linkhits}:</td>
-                                            <td>
-                                                <input type="text" size="11" name="hits" value="{link_hits}">
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right" valign="top">{lang_linkdescription}:</td>
-                                            <td>
-                                                <textarea name="description" cols="50" rows="8">{link_description}</textarea>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"><hr><td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"><b>{lang_accessrights}</b></td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_owner}:</td>
-                                            <td>{owner_username}<input type="hidden" name="owner_id" value="{link_ownerid}"></td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_group}:</td>
-                                            <td>
-                                                {group_dropdown}
-                                            </td>
-                                        <tr>
-                                        <tr>
-                                            <td colspan="2"><b>{lang_permissions}</b>:</td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"></td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2">{lang_permissionskey}</td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2">
-                                                {permissions_editor}
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2">{lang_lockmsg}<td>
-                                        </tr>
-                                        <tr><td>&nbsp;</td></tr>
-                                        <tr>
-                                            <td colspan="2">
-                                                <input type="submit" value="{lang_save}" name="mode"> 
-                                                <input type="submit" value="{lang_cancel}" name="mode"> 
-                                                <input type="hidden" name="lid" value="{link_id}">
-                                                {delete_option}
-                                            </td>
-                                        </tr>
-                                    </table>
-                                </form>
diff -ruN 1.3.11sr1/layout/professional/admin/link/linklist.thtml 1.4.0sr5-1/layout/professional/admin/link/linklist.thtml
--- 1.3.11sr1/layout/professional/admin/link/linklist.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/link/linklist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,22 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding=2 width="100%">
-                                <tr>
-                                    <td rowspan="2"><img src="{layout_url}/images/icons/link.gif" alt=""></td>
-                                    <td>[ <a href="{site_admin_url}/link.php?mode=edit">{lang_newlink}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-                                </tr>
-                                <tr>
-                                    <td colspan="2">{lang_instructions}</td>
-                                </tr>
-                            </table>
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <th>#</th>
-                                    <th align="left">{lang_linktitle}</th>
-                                    <th>{lang_access}</th>
-                                    <th>{lang_linkcategory}</th>
-                                    <th align="left">{lang_linkurl}</th>
-                                </tr>
-                                {link_row}
-                                <tr>
-                                    <td colspan="5">{google_paging}</td>
-                                </tr>
-                            </table>
diff -ruN 1.3.11sr1/layout/professional/admin/link/listitem.thtml 1.4.0sr5-1/layout/professional/admin/link/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/link/listitem.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/link/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,9 +0,0 @@
-                                <tr align="center">
-                                    <td align="left">{row_num}</td>
-                                    <td align="left">
-                                        <a href="{site_admin_url}/link.php?mode=edit&amp;lid={link_id}">{link_name}</a>
-                                    </td>
-                                    <td>{link_access}</td>
-                                    <td>{link_category}</td>
-                                    <td align="left"><a href="{link_url}">{link_url}</a></td>
-                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/lists/field.thtml 1.4.0sr5-1/layout/professional/admin/lists/field.thtml
--- 1.3.11sr1/layout/professional/admin/lists/field.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/field.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+                                    <td class="admin-list-field" {colspan}>{itemtext}</td>
diff -ruN 1.3.11sr1/layout/professional/admin/lists/header.thtml 1.4.0sr5-1/layout/professional/admin/lists/header.thtml
--- 1.3.11sr1/layout/professional/admin/lists/header.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/header.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<th class="admin-list-headerfield" {mouse_over} {on_click}>{header_text}{img_arrow}</th>
diff -ruN 1.3.11sr1/layout/professional/admin/lists/listitem.thtml 1.4.0sr5-1/layout/professional/admin/lists/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/lists/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/listitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,3 @@
+                                <tr class="pluginRow{cssid}" onMouseOver="className='pluginRollOver';" onMouseOut="className='pluginRow{cssid}';">
+                                    {item_field}
+                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/lists/list.thtml 1.4.0sr5-1/layout/professional/admin/lists/list.thtml
--- 1.3.11sr1/layout/professional/admin/lists/list.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/list.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,9 @@
+                            {top_menu}
+                            <table class="admin-list-table">
+                                <tr style="background:#FFFFFF;">
+                                 {header_row}
+                                </tr>
+                                {item_row}
+                            </table>
+                            <center><b>{message}</b></center><br>
+                            {google_paging}
diff -ruN 1.3.11sr1/layout/professional/admin/lists/menufields.thtml 1.4.0sr5-1/layout/professional/admin/lists/menufields.thtml
--- 1.3.11sr1/layout/professional/admin/lists/menufields.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/menufields.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+<a href="{menu_url}">{menu_text}</a> {line}
diff -ruN 1.3.11sr1/layout/professional/admin/lists/topmenu_nosearch.thtml 1.4.0sr5-1/layout/professional/admin/lists/topmenu_nosearch.thtml
--- 1.3.11sr1/layout/professional/admin/lists/topmenu_nosearch.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/topmenu_nosearch.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,12 @@
+                            <table border="0" cellspacing="0" cellpadding="2" width="100%" style="margin-top:5px;">
+                                <tr>
+                                    <td rowspan="2">
+                                        <img src="{icon}" alt="">
+                                    </td>
+                                    <td>[ {menu_fields} ]
+                                    </td>
+                                </tr>
+                                <tr>
+                                    <td>{lang_instructions}</td>
+                                </tr>
+                            </table>
diff -ruN 1.3.11sr1/layout/professional/admin/lists/topmenu.thtml 1.4.0sr5-1/layout/professional/admin/lists/topmenu.thtml
--- 1.3.11sr1/layout/professional/admin/lists/topmenu.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/lists/topmenu.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,31 @@
+                            <table border="0" cellspacing="0" cellpadding="2" width="100%" style="margin-top:5px;">
+                                <tr>
+                                    <td rowspan="2">
+                                        <img src="{icon}" alt="">
+                                    </td>
+                                    <td>[ {menu_fields} ]
+                                    </td>
+                                </tr>
+                                <tr>
+                                    <td>{lang_instructions}</td>
+                                </tr>
+                                <tr>
+                                    <td colspan="2" align="center">
+                                        <form action="{form_url}" method="post">
+                                            {filter}
+                                            {lang_search}: <input type="text" size="20" name="q" value="{last_query}">
+                                            &nbsp;&nbsp;{lang_limit_results}:
+                                                <select name="query_limit">
+                                                    <option value="10" {10_selected}>10</option>
+                                                    <option value="20" {20_selected}>20</option>
+                                                    <option value="50" {50_selected}>50</option>
+                                                    <option value="75" {75_selected}>75</option>
+                                                    <option value="100" {100_selected}>100</option>
+                                                    <option value="200" {200_selected}>200</option>
+                                                    <option value="500" {500_selected}>500</option>
+                                                </select>
+                                            <input type="submit" value="{lang_submit}">
+                                        </form>
+                                    </td>
+                                </tr>
+                            </table>
diff -ruN 1.3.11sr1/layout/professional/admin/mail/mailform.thtml 1.4.0sr5-1/layout/professional/admin/mail/mailform.thtml
--- 1.3.11sr1/layout/professional/admin/mail/mailform.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/mail/mailform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,7 +1,12 @@
 <form action="{php_self}" method="POST">
 <input type="hidden" name="mail" value="mail">
 {startblock_email}
-    <p>{lang_note}</p>
+    <table border="0" cellspacing="0" cellpadding="2" width="100%" style="margin:5px 0px 10px 0px;">
+        <tr>
+            <td><img src="{layout_url}/images/icons/mail.png" alt=""></td>
+            <td>{lang_note}</td>
+        </tr>
+    </table>
     <table border="0" cellpadding="2" cellspacing="0">
         <tr>
             <td align="right">{lang_to}:</td>
diff -ruN 1.3.11sr1/layout/professional/admin/moderation/ccitem.thtml 1.4.0sr5-1/layout/professional/admin/moderation/ccitem.thtml
--- 1.3.11sr1/layout/professional/admin/moderation/ccitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/moderation/ccitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,5 +1,5 @@
-<td>
-    <a href="{page_url}"><img src="{page_image}" border="0" alt=""><br> 
-        {option_label}
-    </a>
-</td>
+        <td align="center" width="{cell_width}">
+            <a href="{page_url}"><img src="{page_image}" border="0" alt=""><br> 
+                {option_label}
+            </a>
+        </td>
diff -ruN 1.3.11sr1/layout/professional/admin/moderation/ccrow.thtml 1.4.0sr5-1/layout/professional/admin/moderation/ccrow.thtml
--- 1.3.11sr1/layout/professional/admin/moderation/ccrow.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/moderation/ccrow.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,3 @@
+    <tr align="center" valign="bottom">
+{cc_main_options}
+    </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/moderation/itemlistrows.thtml 1.4.0sr5-1/layout/professional/admin/moderation/itemlistrows.thtml
--- 1.3.11sr1/layout/professional/admin/moderation/itemlistrows.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/moderation/itemlistrows.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,13 +0,0 @@
-                                    <tr>
-					<td><a href="{edit_submission_url}">{lang_edit}</a></td>
-                                        <td>{data_col1}</td>
-                                        <td>{data_col2}</td>
-                                        <td>{data_col3}</td>
-                                        <td align="center">
-                                            <input type="radio" name="action[{cur_row}]" value="delete">
-                                        </td>
-                                        <td align="center">
-                                            <input type="radio" name="action[{cur_row}]" value="approve">
-                                            <input type="hidden" name="id[{cur_row}]" value="{item_id}">
-                                        </td>
-                                    </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/moderation/itemlist.thtml 1.4.0sr5-1/layout/professional/admin/moderation/itemlist.thtml
--- 1.3.11sr1/layout/professional/admin/moderation/itemlist.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/moderation/itemlist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,22 +0,0 @@
-                            <form action="{form_action}" method="POST">
-                                <input type="hidden" name="type" value="{item_type}">
-                                <input type="hidden" name="count" value="{num_rows}">
-                                <input type="hidden" name="mode" value="moderation">
-                                <table cellpadding="0" cellspacing="3" border="0" width="100%">
-                                    <tr>
-                                        <td>&nbsp;</td>
-                                        <td><b>{heading_col1}</b></td>
-                                        <td><b>{heading_col2}</b></td>
-                                        <td><b>{heading_col3}</b></td>
-                                        <td align="center"><b>{lang_approve}</b></td>
-                                        <td align="center"><b>{lang_delete}</b></td>
-                                    </tr>
-                                    {list_of_items}
-                                    <!-- repeated -->
-                                    <tr>
-                                        <td colspan="8" align="center">
-                                            <input type="submit" value="{lang_submit}">
-                                        </td>
-                                    </tr>
-                                </table>
-                            </form>
diff -ruN 1.3.11sr1/layout/professional/admin/moderation/moderation.thtml 1.4.0sr5-1/layout/professional/admin/moderation/moderation.thtml
--- 1.3.11sr1/layout/professional/admin/moderation/moderation.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/moderation/moderation.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,8 +1,3 @@
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr align="center" valign="top">
-                                    {cc_main_options}
-                                </tr>
-                                <tr align="center" valign="top">
-                                    {plugin_options}
-                                </tr>
-                            </table>
+<table border="0" cellspacing="0" cellpadding="2" width="100%">
+{cc_rows}
+</table>
diff -ruN 1.3.11sr1/layout/professional/admin/plugins/listitem.thtml 1.4.0sr5-1/layout/professional/admin/plugins/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/plugins/listitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/plugins/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,10 +0,0 @@
-									<tr align="center">
-                                        <td align="left">{row_num}</a> 
-                                        </td>
-                                        <td align="left">
-                                            <a href="{site_admin_url}/plugins.php?mode=edit&amp;pi_name={pi_name}">{pi_name}</a>
-                                        </td>
-                                        <td>{pi_installed_version}&nbsp;/&nbsp;{pi_code_version}</td>
-                                        <td>{pi_gl_version}</td>
-                                        <td>{pi_enabled}</td>
-                                    </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/plugins/newlistitem.thtml 1.4.0sr5-1/layout/professional/admin/plugins/newlistitem.thtml
--- 1.3.11sr1/layout/professional/admin/plugins/newlistitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/plugins/newlistitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,5 +1,5 @@
-  <tr>
+  <tr class="pluginRow{cssid}" >
     <td align="left">{row_num}</td>
-    <td align="left">{pi_name}</td>
-    <td>{start_install_anchortag}{lang_install}{end_install_anchortag}</td>
+    <td align="left" width="30%" style="padding-left:5px;" nowrap>{pi_name}</td>
+    <td style="padding-left:10px;">{start_install_anchortag}{lang_install}{end_install_anchortag}</td>
 </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/plugins/newpluginlist.thtml 1.4.0sr5-1/layout/professional/admin/plugins/newpluginlist.thtml
--- 1.3.11sr1/layout/professional/admin/plugins/newpluginlist.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/plugins/newpluginlist.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,11 +1,9 @@
 {start_block_newlist}
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
+<table cellpadding="3" cellspacing="1" border="0" width="100%">
   <tr>
-    <th align="left">#</th>
-    <th align="left">{lang_pluginname}</th>
+    <th align="left" width="5%">#</th>
+    <th colspan="2" align="left">{lang_pluginname}</th>
   </tr>
-  <tr>
     {plugin_list}
-  <tr>
 </table>
 {end_block}
diff -ruN 1.3.11sr1/layout/professional/admin/plugins/pluginlist.thtml 1.4.0sr5-1/layout/professional/admin/plugins/pluginlist.thtml
--- 1.3.11sr1/layout/professional/admin/plugins/pluginlist.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/plugins/pluginlist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,27 +0,0 @@
-                                {start_block_pluginlist}
-                                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                    <tr>
-                                        <td rowspan="2">
-                                            <img src="{layout_url}/images/admin/plugins.gif" alt="">
-                                        </td>
-                                        <td>[ <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-                                    </tr>
-                                    <tr>
-                                        <td>{lang_instructions}</td>
-                                    </tr>
-                                </table><p>
-                                <table cellpadding="0" cellspacing="3" border="0" width="100%">
-                                    <tr>
-                                        <th align="left">#</th>
-                                        <th align="left">{lang_pluginname}</th>
-                                        <th>{lang_pluginversion}</th>
-                                        <th>{lang_geeklogversion}</th>
-                                        <th>{lang_enabled}</th>
-                                    </tr>
-                                    {plugin_list}
-                                    <tr>
-                                        <td colspan="6">{lang_nopluginsinstalled}</td>
-                                    </tr>
-                                </table>
-                                {google_paging}
-                                {end_block}
diff -ruN 1.3.11sr1/layout/professional/admin/poll/listitem.thtml 1.4.0sr5-1/layout/professional/admin/poll/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/poll/listitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/poll/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,10 +0,0 @@
-                                <tr align="center">
-                                    <td>{row_num}</td>
-                                    <td align="left">
-                                        <a href="{site_admin_url}/poll.php?mode=edit&amp;qid={question_id}">{poll_question}</a>
-                                    </td>
-                                    <td>{poll_access}</td>
-                                    <td>{poll_votes}</td>
-                                    <td>{poll_createdate}</td>
-                                    <td>{poll_homepage}</td>
-                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/poll/pollansweroption.thtml 1.4.0sr5-1/layout/professional/admin/poll/pollansweroption.thtml
--- 1.3.11sr1/layout/professional/admin/poll/pollansweroption.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/poll/pollansweroption.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1 +0,0 @@
-<input type="text" name="answer[]" value="{answer_text}" size="30" maxlength="255"> / <input type="text" name="votes[]" value="{answer_votes}" size="5"><BR>
diff -ruN 1.3.11sr1/layout/professional/admin/poll/polleditor.thtml 1.4.0sr5-1/layout/professional/admin/poll/polleditor.thtml
--- 1.3.11sr1/layout/professional/admin/poll/polleditor.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/poll/polleditor.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,75 +0,0 @@
-                                <form action="{site_admin_url}/poll.php" method="post">
-                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                        <tr>
-                                            <td align="right">{lang_pollid}:</td>
-                                            <td><input type="text" name="qid" value="{poll_id}" size="20"> {lang_donotusespaces}</td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_question}:</td>
-                                            <td><input type="text" name="question" value="{poll_question}" size="50" maxlength="255"></td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_mode}:</td>
-                                            <td>
-                                                <select name="commentcode">
-                                                    {comment_options}
-                                                </select>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_appearsonhomepage}:</td>
-                                            <td><input type="checkbox" name="mainpage" {poll_display}></td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"><hr><td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right" valign="top">{lang_answersvotes}:</td>
-                                            <td>
-                                                {answer_option}
-                                                <input type="text" name="answer[]" value="{answer_text}" size="30" maxlength="255"> / <input type="text" name="votes[]" value="{answer_votes}" size="5"><BR>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"><hr><td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"><b>{lang_accessrights}</b></td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_owner}:</td>
-                                            <td>{owner_username}<input type="hidden" name="owner_id" value="{owner_id}"></td>
-                                        </tr>
-                                        <tr>
-                                            <td align="right">{lang_group}:</td>
-                                            <td>
-                                                {group_dropdown}
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"><b>{lang_permissions}</b>:</td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2"></td>
-                                        <tr>
-                                        <tr>
-                                            <td colspan="2">{lang_permissionskey}</td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2">
-                                                {permissions_editor}
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td colspan="2">{lang_permissions_msg}</td>
-                                        </tr>
-                                        <tr><td>&nbsp;</td></tr>
-                                        <tr>
-                                            <td colspan="2">
-                                                <input type="submit" name="mode" value="{lang_save}">
-                                                <input type="submit" name="mode" value="{lang_cancel}"> 
-                                                {delete_option}
-                                            </td>
-                                        </tr>
-                                    </table>
-                                </form>
diff -ruN 1.3.11sr1/layout/professional/admin/poll/polllist.thtml 1.4.0sr5-1/layout/professional/admin/poll/polllist.thtml
--- 1.3.11sr1/layout/professional/admin/poll/polllist.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/poll/polllist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,24 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <td rowspan="2">
-                                        <img src="{layout_url}/images/icons/poll.gif" alt="">
-                                    </td>
-                                    <td>[ <a href="{site_admin_url}/poll.php?mode=edit">{lang_newpoll}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]
-                                    </td>
-                                </tr>
-                                <tr>
-                                    <td>{lang_instructions}</td>
-                                </tr>
-                            </table>
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <th>#</th>
-                                    <th align="left">{lang_question}</th>
-                                    <th>{lang_access}</th>
-                                    <th>{lang_voters}</th>
-                                    <th>{lang_pollcreated}</th>
-                                    <th>{lang_appearsonhomepage}</th>
-                                </tr>
-                                {poll_row}
-                            </table>
-                            {google_paging}
diff -ruN 1.3.11sr1/layout/professional/admin/story/listitem.thtml 1.4.0sr5-1/layout/professional/admin/story/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/story/listitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/story/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
-                                <tr align="center">
-                                    <td align="left">
-                                        <a href="{site_admin_url}/story.php?mode=edit&amp;sid={story_id}">{row_num}</a>
-                                    </td>
-                                    <td align="left">
-                                        <a href="{article_url}">{story_title}</a>
-                                    </td>
-                                    <td align="center">{story_access}</td>
-                                    <td>{story_draft}</td>
-                                    <td>{story_author}</td>
-                                    <td>{story_date}</td>
-                                    <td>{story_topic}</td>
-                                    <td>{story_feature}</td>
-                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/story/liststories.thtml 1.4.0sr5-1/layout/professional/admin/story/liststories.thtml
--- 1.3.11sr1/layout/professional/admin/story/liststories.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/story/liststories.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,30 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding=2 width="100%">
-                                <tr>
-                                    <FORM ACTION="{site_admin_url}/story.php" METHOD="POST">
-                                    <td rowspan="2"><img src="{layout_url}/images/icons/story.gif" alt=""></td>
-                                    <td>[ <a href="{site_admin_url}/story.php?mode=edit">{lang_newstory}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-                                    <td align="center" valign="middle">{lang_topic}:&nbsp;</td>
-                                    <td align="left" valign="middle">{topic_selection}&nbsp;</td>
-                                </td>
-                                </tr>
-                                </FORM>
-                                <tr>
-                                    <td colspan="3">{lang_instructions}</td>
-                                </tr>
-                            </table>
-                                <table cellpadding="0" cellspacing="3" border="0" width="100%">
-                                <tr>
-                                    <th align="left">#</th>
-                                    <th align="left">{lang_title}</th>
-                                    <th>{lang_access}</th>
-                                    <th>{lang_draft}</th>
-                                    <th>{lang_author}</th>
-                                    <th>{lang_date}</th>
-                                    <th>{lang_topic}</th>
-                                    <th>{lang_featured}</th>
-                                </tr>
-                                {storylist_item}
-                                <tr>
-                                    <td colspan="8">{google_paging}</td>
-                                </tr>
-                            </table>
\ No newline at end of file
diff -ruN 1.3.11sr1/layout/professional/admin/story/storyeditor_advanced.thtml 1.4.0sr5-1/layout/professional/admin/story/storyeditor_advanced.thtml
--- 1.3.11sr1/layout/professional/admin/story/storyeditor_advanced.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/story/storyeditor_advanced.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,330 @@
+<!-- Hide the Advanced Editor as Javascript is required. If JS is not enabled then the message below in the <nonscript> tags will be displayed -->
+<noscript>
+    <div class="pluginAlert" style="border:1px dashed #ccc;text-align:center;margin-top:10px;padding:15px;">{lang_nojavascript}
+    <p>{no_javascript_return_link}</p>
+    </div>
+</noscript>
+<script type="text/javascript">
+    // Setup editor path for FCKeditor JS Functions
+    geeklogEditorBasePath = "{site_url}/fckeditor/" ;
+</script>
+<script type="text/JavaScript" src="{site_url}/javascript/advanced_editor.js"></script>
+<script type="text/JavaScript" src="{site_url}/javascript/storyeditor_fckeditor.js"></script>
+<br>
+<div id="advanced_editor" style="display:none;">
+<!-- Hide the Advanced Editor as Javascript is required. If JS is enabled then the JS below will un-hide it -->
+<script type="text/javascript">
+    document.getElementById('advanced_editor').style.display=''
+</script>
+{navbar}
+                            <form name="frmstory" action="{site_admin_url}/story.php" method="post" enctype="multipart/form-data" onSubmit='set_postcontent();'>
+                                <table id='adveditor' border="0" cellspacing="0" cellpadding="3" width="100%" style="margin-top:10px;border:1px solid #ECE9D8;">
+                                    <tr>
+                                        <td width="20%" align="right">{lang_author}:</td>
+                                        <td>{story_author}<input type="hidden" name="uid" value="{story_uid}"></td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right">{lang_title}:</td>
+                                        <td><input type="text" size="48" maxlength="255" name="title" value="{story_title}"></td>
+                                    </tr>
+                                    <tr>
+                                        <td valign="top" align="right">{lang_sid}:</td>
+                                        <td><input type="text" size="48" maxlength="40" name="sid" value="{story_id}"></td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right">{lang_topic}:</td>
+                                        <td>
+                                            <select name="tid">
+                                                {topic_options}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right" nowrap>Story Stats:</td>
+                                        <td>
+                                          <table border="0" cellspacing="0" cellpadding="3" width="50%">
+                                            <tr>
+                                                <td align="right">{lang_hits}:</td>
+                                                <td><input type="hidden" name="hits" value="{story_hits}">{story_hits}</td>
+                                                <td align="right">{lang_comments}:</td>
+                                                <td><input type="hidden" name="comments" value="{story_comments}">{story_comments}</td>
+                                                <td align="right">{lang_emails}:</td>
+                                                <td><input type="hidden" name="numemails" value="{story_emails}">{story_emails}</td>
+                                            </tr>
+                                         </table>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right">{lang_show_topic_icon}:</td>
+                                        <td>
+                                            <input type="checkbox" name="show_topic_icon" {show_topic_icon_checked}>
+                                            <span style="padding-left:30px;padding-right:5px;">{lang_draft}:</span><input type="checkbox" name="draft_flag" {is_checked}>
+                                        </td>
+                                    </tr>
+                                </table>
+                                <!-- Basic textarea field - no editor -->
+                                <table border="0" cellspacing="0" cellpadding="3" width="100%" id="text_editor" style="margin-top:10px;border:1px solid #ECE9D8;display:{show_texteditor};">
+                                    <tr>
+                                        <td>{lang_introtext}:
+                                            <span style="padding-left:10px;">
+                                                <img src="{layout_url}/images/expand.gif" border="0" TITLE="{lang_expandhelp}" onclick="changeTextAreaSize('introtext','larger');">
+                                                <span style="padding-left:5px;"><img src="{layout_url}/images/collapse.gif" border="0" TITLE="{lang_reducehelp}" onclick="changeTextAreaSize('introtext','smaller');"></span>
+                                            </span>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td style="padding:5px 10px 5px 10px;"><textarea id="introtext" name="introtext" rows="14" style="width:100%;">{story_introtext}</textarea></td>
+                                    </tr>
+                                    <tr>
+                                        <td>{lang_bodytext}:
+                                            <span style="padding-left:10px;">
+                                                <img src="{layout_url}/images/expand.gif" border="0" TITLE="{lang_expandhelp}" onclick="changeTextAreaSize('bodytext','larger');">
+                                                <span style="padding-left:5px;"><img src="{layout_url}/images/collapse.gif" border="0" TITLE="{lang_reducehelp}" onclick="changeTextAreaSize('bodytext','smaller');"></span>
+                                            </span>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td style="padding:5px 10px 5px 10px;"><textarea id="bodytext" name="bodytext" rows="14" style="width:100%;">{story_bodytext}</textarea></td>
+                                    </tr>
+                                </table>
+                                <!-- Rich Text Editor --->
+                                <table border="0" cellspacing="0" cellpadding="3" width="100%" id="html_editor" style="margin-top:10px;border:1px solid #ECE9D8;display:{show_htmleditor};">
+                                     <tr>
+                                        <td style="padding-left:15px;">{lang_introtext}:
+                                            <span style="padding-left:10px;">
+                                                <img src="{layout_url}/images/expand.gif" border="0" TITLE="{lang_expandhelp}" onclick="changeHTMLTextAreaSize('introhtml','larger');">
+                                                <span style="padding-left:5px;"><img src="{layout_url}/images/collapse.gif" border="0" TITLE="{lang_reducehelp}" onclick="changeHTMLTextAreaSize('introhtml','smaller');"></span>
+                                                <!-- BL: Not supported yet. Works in Firefox but not in IE
+                                                <span style="padding-left:15px;">{lang_toolbar}:&nbsp;
+                                                  <select id="fckeditor_toolbar_selector" name="fckeditor_toolbar_selector" onchange="changeToolbar(this.value);">
+                                                       <option value="editor-toolbar1">{toolbar1}</option>
+                                                       <option value="editor-toolbar2">{toolbar2}</option>
+                                                       <option value="editor-toolbar3">{toolbar3}</option>
+                                                       <option value="editor-toolbar4">{toolbar4}</option>
+                                                       <option value="Default">{toolbar5}</option>
+                                                       
+                                                  </select>
+                                                </span>
+                                                -->
+                                            </span>
+                                        </td>
+                                    <tr>
+                                        <td style="padding:5px 10px 5px 10px;"><textarea id="introhtml" name="introhtml" cols="90" rows="12">{story_introtext}</textarea></td>
+                                    </tr>
+                                    <tr>
+                                        <td style="padding-left:15px;">{lang_bodytext}:
+                                            <span style="padding-left:10px;">
+                                                <img src="{layout_url}/images/expand.gif" border="0" TITLE="lang_expandhelp" onclick="changeHTMLTextAreaSize('bodyhtml','larger');">
+                                                <span style="padding-left:5px;"><img src="{layout_url}/images/collapse.gif" border="0" TITLE="{lang_reducehelp}" onclick="changeHTMLTextAreaSize('bodyhtml','smaller');"></span>
+                                            </span>
+                                        </td>
+                                    <tr>
+                                        <td style="padding:5px 10px 5px 10px;"><textarea id="bodyhtml" name="bodyhtml" cols="90" rows="20">{story_bodytext}</textarea></td>
+                                    </tr>
+                                </table>
+                                <table border="0" cellspacing="0" cellpadding="3" width="100%" id="editor_mode" style="margin-top:10px;border:1px solid #ECE9D8;display:{show_htmleditor};">
+                                    <tr valign="top">
+                                        <td width="10%" style=padding-left:20px;" nowrap><b>{lang_postmode}:</b></td>
+                                        <td style="padding-left:20px;" nowrap>
+                                            <select id="sel_editmode" name="postmode" {change_editormode}>
+                                                {post_options}
+                                            </select>
+                                        </td>
+                                     </tr>
+                                     <tr>
+                                        <td colspan="2" style=padding:5px;">{lang_allowed_html}</td>
+                                    </tr>
+                                </table>
+                                <table id="se_options" border="0" cellspacing="0" cellpadding="3" width="100%" style="margin-top:10px;border:1px solid #ECE9D8;display:none;">
+                                    <tr>
+                                        <td colspan="2" style="padding:10px;">
+                                            <div  id="se_publish" style="display:none;">
+                                                <fieldset><legend>{lang_publishdate}</legend>
+                                                    <table border="0" cellspacing="0" cellpadding="3" width="100%">
+                                                        <tr>
+                                                            <td align="right" valign="top">{lang_date}:</td>
+                                                            <td>
+                                                                <select name="publish_month">
+                                                                    {publish_month_options}
+                                                                </select>
+                                                                /
+                                                                <select name="publish_day">
+                                                                    {publish_day_options}
+                                                                </select>
+                                                                /
+                                                                <select name="publish_year">
+                                                                    {publish_year_options}
+                                                                </select>&nbsp;&nbsp;
+                                                                <select name="publish_hour">
+                                                                    {publish_hour_options}
+                                                                </select>
+                                                                :
+                                                                <select name="publish_minute">
+                                                                    {publish_minute_options}
+                                                                </select>
+                                                                <select name="publish_ampm">
+                                                                    <option value="am" {publisham_selected}>am</option>
+                                                                    <option value="pm" {publishpm_selected}>pm</option>
+                                                                </select><br>
+                                                                <input type="hidden" name="publish_second" value="{publish_second}">
+                                                                <br>{publish_date_explanation}
+                                                            </td>
+                                                        </tr>
+                                                    </table>
+                                                </fieldset>
+                                                <fieldset style="margin-top:10px;"><legend>{lang_publishoptions}</legend>
+                                                    <table border="0" cellspacing="3" cellpadding="3" width="100%">
+                                                        <tr>
+                                                            <td>
+                                                                <select name="featured">
+                                                                    {featured_options}
+                                                                </select>
+                                                            </td>
+                                                            <td width="75%">
+                                                                <select name="frontpage">
+                                                                    {frontpage_options}
+                                                                </select>
+                                                            </td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td>
+                                                                <select name="commentcode">
+                                                                    {comment_options}
+                                                                </select>
+                                                            </td>
+                                                            <td>
+                                                                <select name="trackbackcode">
+                                                                    {trackback_options}
+                                                                </select>
+                                                            </td>
+                                                        </tr>
+                                                    </table>
+                                                </fieldset>
+                                            </div>
+                                            <div  id="se_images" style="display:none;">
+                                                <fieldset style="margin-top:10px;"><legend>{lang_images}</legend>
+                                                    <table border="0" cellspacing="0" cellpadding="3" width="100%">
+                                                        <tr>
+                                                            <td style="padding:10px;">
+                                                                {saved_images}
+                                                                {image_form_elements}
+                                                            </td>
+                                                        </tr>
+                                                    </table>
+                                                </fieldset>
+                                            </div>
+                                            <div  id="se_archive" style="display:none;">
+                                                <fieldset style="margin-top:10px;"><legend>{lang_archivetitle}</legend>
+                                                    <table border="0" cellspacing="0" cellpadding="3" width="100%">
+                                                        <tr>
+                                                            <td width="20%" style="text-align:right;padding-right:5px;">{lang_option}:</td>
+                                                            <td width="20%">{lang_enabled}:<input type="checkbox" name="archiveflag" value="1" {is_checked2} onclick="enablearchive(this);"></td>
+                                                            <td style="text-align:left;">
+                                                                <label for="storycode10"> 
+                                                                    <input type="radio" name="statuscode" id="storycode10" value="10" {is_checked3} {archivedisabled}>{lang_optionarchive}
+                                                                </label>&nbsp; 
+                                                            <label for="storycode11"> 
+                                                                <input type="radio" name="statuscode" id="storycode11" value="11" {is_checked4} {archivedisabled}>{lang_optiondelete}
+                                                            </label>
+                                                        </tr>
+                                                        <tr>
+                                                            <td style="text-align:right;vertical-align:top;padding-right:5px;">{lang_date}:</td>
+                                                            <td colspan="2">
+                                                                <select id="expire_month" name="expire_month" {archivedisabled}>
+                                                                    {expire_month_options}
+                                                                </select>
+                                                                <select name="expire_day" {archivedisabled}>
+                                                                    {expire_day_options}
+                                                                </select>
+                                                                <select name="expire_year" {archivedisabled}>
+                                                                    {expire_year_options}
+                                                                </select>
+                                                                <select name="expire_hour" {archivedisabled}>
+                                                                    {expire_hour_options}
+                                                                </select>&nbsp;:
+                                                                <select name="expire_minute" {archivedisabled}>
+                                                                    {expire_minute_options}
+                                                                </select>
+                                                                <select name="expire_ampm" {archivedisabled}>
+                                                                    <option value="am" {expiream_selected}>am</option>
+                                                                    <option value="pm" {expirepm_selected}>pm</option>
+                                                                </select><br>
+                                                                <input type="hidden" name="expire_second" value="{expire_second}">
+                                                            </td>
+                                                        </tr>
+                                                    </table>
+                                                </fieldset>
+                                            </div>
+                                            <div  id="se_perms" style="display:none;">
+                                                <fieldset style="margin-top:10px;"><legend>{lang_permissions}</legend>
+                                                    <table border="0" cellspacing="0" cellpadding="3" width="100%">
+                                                        <tr>
+                                                            <td style="padding-left:20px;" width="10%">{lang_owner}:</td>
+                                                            <td>{owner_username}<input type="hidden" name="owner_id" value="{owner_id}"></td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td style="padding-left:20px;" width="10%">{lang_group}:</td>
+                                                            <td>
+                                                                {group_dropdown}
+                                                            </td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td colspan="2">&nbsp;</td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td colspan="2"><b>{lang_permissions}</b>:</td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td colspan="2">{lang_perm_key}</td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td colspan="2">
+                                                                {permissions_editor}
+                                                            </td>
+                                                        </tr>
+                                                        <tr>
+                                                            <td colspan="2">{permissions_msg}</td>
+                                                        </tr>
+                                                    </table>
+                                                </fieldset>
+                                            </div>
+                                        </td>
+                                    </tr>
+                                </table>
+                                <table id="bottom" border="0" cellspacing="0" cellpadding="3" width="100%" style="margin-top:20px;">
+                                    <tr>
+                                        <td colspan="2" style="padding-left:20px;">
+                                            <input type="submit" value="{lang_save}" name="mode">
+                                            <span style="padding-right:10px;padding-left:10px;"><input type="submit" value="{lang_preview}" name="mode"></span>
+                                            <span style="padding-right:50px;"><input type="submit" value="{lang_cancel}" name="mode"></span>
+                                            {delete_option}
+                                            {submission_option}
+                                            <input type="hidden" name="old_sid" value="{old_story_id}">
+                                        </td>
+                                    </tr>
+                                </table>
+                            </form>
+<table border="0" width="99%" id="preview" style="border:1px dashed grey;padding:5px;margin:10px;display:{show_preview};">
+    <tr>
+        <td>
+            {preview_content}
+        </td.
+    </tr>
+</table>
+
+<script>
+<!-- This code will only be executed by a browser that suppports Javascript -->
+
+var jstest = {showarchivedisabled};
+if (jstest) {
+    document.frmstory.expire_month.disabled=true;
+    document.frmstory.expire_day.disabled=true;
+    document.frmstory.expire_year.disabled=true;
+    document.frmstory.expire_hour.disabled=true;
+    document.frmstory.expire_minute.disabled=true;
+    document.frmstory.expire_ampm.disabled=true;
+    document.frmstory.storycode10.disabled=true;
+    document.frmstory.storycode11.disabled=true;
+}
+</script>
+</div>
diff -ruN 1.3.11sr1/layout/professional/admin/story/storyeditor.thtml 1.4.0sr5-1/layout/professional/admin/story/storyeditor.thtml
--- 1.3.11sr1/layout/professional/admin/story/storyeditor.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/story/storyeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -121,16 +121,19 @@
                                          </td>
                                     </tr>
                                     <tr>
-                                        <td align="right">{lang_mode}:</td>
+                                        <td valign="top" align="right">{lang_mode}:</td>
                                         <td>
-                                            <select name="commentcode">
-                                                {comment_options}
-                                            </select> 
                                             <select name="featured">
                                                 {featured_options}
                                             </select> 
                                             <select name="frontpage">
                                                 {frontpage_options}
+                                            </select><br>
+                                            <select name="commentcode">
+                                                {comment_options}
+                                            </select>
+                                            <select name="trackbackcode">
+                                                {trackback_options}
                                             </select>
                                         </td>
                                     </tr>
@@ -140,11 +143,11 @@
                                     </tr>
                                     <tr>
                                         <td valign="top" align="right">{lang_introtext}:</td>
-                                        <td><textarea name="introtext" cols="50" rows="12">{story_introtext}</textarea></td>
+                                        <td><textarea name="introtext" cols="90" rows="12">{story_introtext}</textarea></td>
                                     </tr>
                                     <tr>
                                         <td valign="top" align="right">{lang_bodytext}:</td>
-                                        <td><textarea name="bodytext" cols="50" rows="15">{story_bodytext}</textarea></td>
+                                        <td><textarea name="bodytext" cols="90" rows="20">{story_bodytext}</textarea></td>
                                     </tr>
                                     <tr valign="top">
                                         <td align="right"><b>{lang_postmode}:</b></td>
@@ -165,16 +168,15 @@
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_hits}:</td>
-                                        <td><input type="hidden" name="hits" value="{story_hits}">{story_hits}</td>
-                                    </tr>
-                                    <tr>
-                                        <td align="right">{lang_comments}:</td>
-                                        <td><input type="hidden" name="comments" value="{story_comments}">{story_comments}</td>
-                                    </tr>
-                                    <tr>
-                                        <td align="right">{lang_emails}:</td>
-                                        <td><input type="hidden" name="numemails" value="{story_emails}">{story_emails} 
-                                        </td>
+                                        <td><table border="0" cellspacing="0" cellpadding="0" width="100%"><tr>
+                                        <td align="left"><input type="hidden" name="hits" value="{story_hits}">{story_hits}</td>
+                                        <td>{lang_comments}:
+                                        <input type="hidden" name="comments" value="{story_comments}">{story_comments}</td>
+                                        <td>{lang_trackbacks}:
+                                        <input type="hidden" name="trackbacks" value="{story_trackbacks}">{story_trackbacks}</td>
+                                        <td align="right">{lang_emails}:
+                                        <input type="hidden" name="numemails" value="{story_emails}">{story_emails}</td>
+                                        </tr></table></td>
                                     </tr>
                                     <tr>
                                         <td colspan="2"><hr></td>
@@ -213,18 +215,19 @@
                                     <tr>
                                         <td colspan="2">
                                             <input type="submit" value="{lang_save}" name="mode">
-                                            <input type="submit" value="{lang_preview}" name="mode"> 
-                                            <input type="submit" value="{lang_cancel}" name="mode"> 
+                                            <input type="submit" value="{lang_preview}" name="mode">
+                                            <input type="submit" value="{lang_cancel}" name="mode">
                                             {delete_option}
                                             {submission_option}
                                             <input type="hidden" name="old_sid" value="{old_story_id}">
+                                            <input type="hidden" name="editopt" value="default">
                                         </td>
                                     </tr>
                                 </table>
                             </form>
 <script>
 <!-- This code will only be executed by a browser that suppports Javascript -->
-var jstest = {showarchivedisabled}
+var jstest = {showarchivedisabled};
 if (jstest) {
     document.frmstory.expire_month.disabled=true;
     document.frmstory.expire_day.disabled=true;
diff -ruN 1.3.11sr1/layout/professional/admin/syndication/feededitor.thtml 1.4.0sr5-1/layout/professional/admin/syndication/feededitor.thtml
--- 1.3.11sr1/layout/professional/admin/syndication/feededitor.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/syndication/feededitor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -19,6 +19,16 @@
   <td>{feed_topic}</td>
 </tr>
 <tr>
+    <td align="right">{lang_header_topic}:</td>
+    <td>
+        <select name="header_tid">
+        <option value="none" {none_selected}>{lang_header_none}</option>
+        <option value="all" {all_selected}>{lang_header_all}</option>
+        {header_topic_options}
+        </select>
+    </td>
+</tr>
+<tr>
   <td align="right">{lang_format}:</td>
   <td>{feed_format}</td>
 </tr>
@@ -35,6 +45,10 @@
   <td><textarea name="description" cols="50" rows="8">{feed_description}</textarea></td>
 </tr>
 <tr>
+  <td align="right" valign="top">{lang_feedlogo}:</td>
+  <td><input type="text" maxlength="255" size="40" name="feedlogo" value="{feed_logo}"/> <small>{lang_feedlogo_explain}</small></td>
+</tr>
+<tr>
   <td align="right">{lang_filename}:</td>
   <td><input type="text" size="40" name="filename" value="{feed_filename}"></td>
 </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/syndication/listfeeds.thtml 1.4.0sr5-1/layout/professional/admin/syndication/listfeeds.thtml
--- 1.3.11sr1/layout/professional/admin/syndication/listfeeds.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/syndication/listfeeds.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,24 +0,0 @@
-<table border="0" cellspacing="0" cellpadding=2 width="100%">
-<tr>
-  <td rowspan="2"><img src="{site_url}/images/icons/feed.gif" alt=""></td>
-  <td>[ <a href="{site_admin_url}/syndication.php?mode=edit">{lang_newfeed}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
-</tr>
-<tr>
-  <td>{lang_instructions}</td>
-</tr>
-</table>
-<table cellpadding="0" cellspacing="3" border="0" width="100%">
-<tr>
-  <th align="left">{lang_title}</th>
-  <th>{lang_type}</th>
-  <th>{lang_format}</th>
-  <th>{lang_filename}</th>
-  <th>{lang_updated}</th>
-  <th>{lang_enabled}</th>
-</tr>
-{feedlist_items}
-<tr>
-  <td colspan="6">{google_paging}</td>
-</tr>
-</table>
-
diff -ruN 1.3.11sr1/layout/professional/admin/syndication/listitem.thtml 1.4.0sr5-1/layout/professional/admin/syndication/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/syndication/listitem.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/syndication/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,10 +0,0 @@
-<tr align="center">
-  <td align="left">
-    <a href="{site_admin_url}/syndication.php?mode=edit&amp;fid={feed_id}">{feed_title}</a>
-  </td>
-  <td align="center">{feed_type}</td>
-  <td>{feed_format}</td>
-  <td>{feed_filename_and_link}</td>
-  <td>{feed_updated}</td>
-  <td>{feed_enabled}</td>
-</tr>
diff -ruN 1.3.11sr1/layout/professional/admin/topic/topiceditor.thtml 1.4.0sr5-1/layout/professional/admin/topic/topiceditor.thtml
--- 1.3.11sr1/layout/professional/admin/topic/topiceditor.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/topic/topiceditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,4 +1,4 @@
-                            <form action="{site_admin_url}/topic.php" method="post">
+                            <form action="{site_admin_url}/topic.php" method="post" enctype="multipart/form-data">
                                 <table border="0" cellspacing="0" cellpadding=2 width="100%">
                                     <tr>
                                         <td align="right">{lang_topicid}:</td>
@@ -20,13 +20,17 @@
                                         <td align="right">{lang_topicimage}:</td>
                                         <td><input type="text" size="48" maxlength="{max_url_length}" name="imageurl" value="{image_url}"></td>
                                     </tr>
+									<tr>
+										<td align="right">{lang_uploadimage}:</td>
+										<td><input type="file" name="newicon"> ({lang_maxsize} {icon_dimensions})</td>
+									</tr>
                                     <tr>
                                         <td align="right">{lang_defaulttopic}:</td>
                                         <td><input type="checkbox" name="is_default" {default_checked}> ({lang_defaulttext})</td>
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_archivetopic}:</td>
-                                        <td><input type="checkbox" name="is_archive" value="1" {archive_checked} {archive_disabled}> ({lang_archivetext})</td>
+                                        <td><input type="checkbox" name="is_archive" {archive_checked} {archive_disabled}> ({lang_archivetext})</td>
                                     </tr>
                                     <tr>
                                         <td colspan="2"><hr><td>
diff -ruN 1.3.11sr1/layout/professional/admin/topic/topiclist.thtml 1.4.0sr5-1/layout/professional/admin/topic/topiclist.thtml
--- 1.3.11sr1/layout/professional/admin/topic/topiclist.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/topic/topiclist.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -2,7 +2,7 @@
                                 <table border="0" cellspacing="0" cellpadding=2 width="100%">
                                     <tr>
                                         <td rowspan="2">
-                                            <img src="{layout_url}/images/icons/topic.gif" alt="">
+                                            <img src="{layout_url}/images/icons/topic.png" alt="">
                                         </td>
                                         <td>[ <a href="{site_admin_url}/topic.php?mode=edit">{lang_newtopic}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]</td>
                                     </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/autodetectitem.thtml 1.4.0sr5-1/layout/professional/admin/trackback/autodetectitem.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/autodetectitem.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/autodetectitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+    <tr class="pluginRow{cssid}">
+        <td class="admin-list-field"><a href="{autodetect_link}">{link_text}</a></td>
+        <td class="admin-list-field">{link_url}</td>
+    </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/autodetectlist.thtml 1.4.0sr5-1/layout/professional/admin/trackback/autodetectlist.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/autodetectlist.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/autodetectlist.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+<p>{lang_trackback_explain}</p>
+
+<table class="admin-list-table">
+    {autodetect_items}
+</table>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/pingbackform.thtml 1.4.0sr5-1/layout/professional/admin/trackback/pingbackform.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/pingbackform.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/pingbackform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,22 @@
+<form action="{site_admin_url}/trackback.php" method="POST">
+    <p>{lang_explain}</p>
+    <table border="0" cellspacing="0" cellpadding="2" width="100%">
+        <tr>
+            <td align="right"><b>{lang_pingback_url}:</b></td>
+            <td>
+                <input type="text" size="50" maxsize="{max_url_length}" name="target" value="{target_url}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right">{lang_site_url}:</td>
+            <td>
+                <b>{site_url}</b>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2">
+                <input type="submit" value="{lang_send}" name="mode[2]">
+            </td>
+        </tr>
+    </table>
+</form>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/pingbackitem.thtml 1.4.0sr5-1/layout/professional/admin/trackback/pingbackitem.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/pingbackitem.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/pingbackitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+    <tr class="pluginRow{cssid}">
+        <td class="admin-list-field"><a href="{url_to_ping}">{link_text}</a> ({host_name})</td>
+        <td class="admin-list-field">{pingback_result}</td>
+        <td class="admin-list-field">{resend}</td>
+    </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/pingbacklist.thtml 1.4.0sr5-1/layout/professional/admin/trackback/pingbacklist.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/pingbacklist.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/pingbacklist.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<p>{lang_results}:</p>
+<table class="admin-list-table">
+    {pingback_results}
+</table>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/pingform.thtml 1.4.0sr5-1/layout/professional/admin/trackback/pingform.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/pingform.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/pingform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,20 @@
+{lang_ping_explain}
+{ping_results}
+<form action="{php_self}" method="POST">
+    <table border="0" cellspacing="0" cellpadding="2" width="100%">
+        <tr>
+            <td align="center">{pingback_button}</td>
+            <td>{lang_pingback_short} </td>
+        </tr>
+        <tr>
+            <td align="center">{ping_button}</td>
+            <td>{lang_ping_short} </td>
+        </tr>
+        <tr>
+            <td align="center">{trackback_button}</td>
+            <td>{lang_trackback_short} </td>
+        </tr>
+    </table>
+    {hidden_input_fields}
+    <p class="warningsmall" align="center">{lang_may_take_a_while}</p>
+</form>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/pingitem.thtml 1.4.0sr5-1/layout/professional/admin/trackback/pingitem.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/pingitem.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/pingitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+    <tr class="pluginRow{cssid}">
+        <td class="admin-list-field"><a href="{service_url}">{service_name}</a></td>
+        <td class="admin-list-field">{ping_result}</td>
+        <td class="admin-list-field">{resend}</td>
+    </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/pinglist.thtml 1.4.0sr5-1/layout/professional/admin/trackback/pinglist.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/pinglist.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/pinglist.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<p>{lang_results}:</p>
+<table class="admin-list-table">
+    {ping_results}
+</table>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/serviceeditor.thtml 1.4.0sr5-1/layout/professional/admin/trackback/serviceeditor.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/serviceeditor.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/serviceeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,41 @@
+<form action="{site_admin_url}/trackback.php" method="POST">
+    <table border="0" cellspacing="0" cellpadding="2" width="100%">
+        <tr>
+            <td align="right">{lang_name}:</td>
+            <td>
+                <input type="text" size="48" maxlength="80" name="service_name" value="{service_name}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right">{lang_enabled}:</td>
+            <td><input type="checkbox" name="is_enabled" {is_enabled}></td>
+        </tr>
+        <tr>
+            <td align="right">{lang_site_url}:</td>
+            <td>
+                <input type="text" size="50" maxsize="{max_url_length}" name="service_site_url" value="{service_site_url}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right">{lang_ping_url}:</td>
+            <td>
+                <input type="text" size="50" maxsize="{max_url_length}" name="service_ping_url" value="{service_ping_url}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right" valign="top">{lang_method}:</td>
+            <td>
+                <input type="radio" name="method" value="standard" {standard_is_checked}> {lang_method_standard} (<code>weblogUpdates.ping</code>)<br>
+                <input type="radio" name="method" value="extended" {extended_is_checked}> {lang_method_extended} (<code>weblogUpdates.extendedPing</code>)
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2">
+                <input type="submit" value="{lang_save}" name="servicemode[0]">
+                <input type="submit" value="{lang_cancel}" name="servicemode[1]">
+                {delete_option}
+                <input type="hidden" value="{service_id}" name="service_id">
+            </td>
+        </tr>
+    </table>
+</form>
diff -ruN 1.3.11sr1/layout/professional/admin/trackback/trackbackeditor.thtml 1.4.0sr5-1/layout/professional/admin/trackback/trackbackeditor.thtml
--- 1.3.11sr1/layout/professional/admin/trackback/trackbackeditor.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/trackback/trackbackeditor.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,42 @@
+<form action="{site_admin_url}/trackback.php" method="POST">
+    <p>{lang_explain}</p>
+    <table border="0" cellspacing="0" cellpadding="2" width="100%">
+        <tr>
+            <td align="right"><b>{lang_trackback_url}:</b></td>
+            <td>
+                <input type="text" size="50" maxsize="{max_url_length}" name="target" value="{target_url}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right">{lang_blog_name}:</td>
+            <td>
+                <input type="text" size="48" maxlength="80" name="blog_name" value="{blog_name}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right"><b>{lang_entry_url}:</b></td>
+            <td>
+                <input type="text" size="50" maxsize="{max_url_length}" name="url" value="{url}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right">{lang_title}:</td>
+            <td>
+                <input type="text" size="48" maxlength="255" name="title" value="{title}">
+            </td>
+        </tr>
+        <tr>
+            <td align="right" valign="top">{lang_excerpt}:</td>
+            <td>
+                <textarea name="excerpt" cols="50" rows="8">{excerpt}</textarea><br>
+                <p class="warningsmall">{lang_excerpt_truncated}</p>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2">
+                <input type="submit" value="{lang_send}" name="mode[0]">
+                <input type="submit" value="{lang_preview}" name="mode[1]">
+            </td>
+        </tr>
+    </table>
+</form>
diff -ruN 1.3.11sr1/layout/professional/admin/user/edituser.thtml 1.4.0sr5-1/layout/professional/admin/user/edituser.thtml
--- 1.3.11sr1/layout/professional/admin/user/edituser.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/user/edituser.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,4 +1,4 @@
-                            <form action="{site_admin_url}/user.php" name="storyeditor" method="post">
+                            <form action="{site_admin_url}/user.php" method="post">
                                 <table border="0" cellspacing="0" cellpadding="3" width="100%">
                                     <tr>
                                         <td align="right">{lang_userid}:</td>
@@ -16,7 +16,7 @@
                                     <tr>
                                         <td align="right" valign="top">{lang_username}:</td>
                                         <td>
-                                            <input type="text" size="16" name="username" value="{username}"> {do_not_use_spaces}<br>
+                                            <input type="text" size="16" maxlength="16" name="username" value="{username}"> {do_not_use_spaces}<br>
                                             {user_photo}<br>
                                             {lang_delete_photo} {delete_photo_option}
                                         </td>
@@ -30,6 +30,10 @@
                                         <td><input type="password" size="16" name="passwd" value=""></td>
                                     </tr>
                                     <tr>
+                                        <td align="right">{lang_password_conf}:</td>
+                                        <td><input type="password" size="16" name="passwd_conf" value=""></td>
+                                    </tr>
+                                    <tr>
                                         <td align="right">{lang_emailaddress}:</td>
                                         <td><input type="text" size="48" maxlength="255" name="email" value="{user_email}"></td>
                                     </tr>
@@ -38,6 +42,10 @@
                                         <td><input type="text" size="48" maxlength="255" name="homepage" value="{user_homepage}"></td>
                                     </tr>
                                     <tr>
+                                        <td align="right">{lang_user_status}:</td>
+                                        <td>{user_status}</td>
+                                    </tr>
+                                    <tr>
                                         <td colspan="2"><hr></td>
                                     </tr>
                                     {group_edit}
@@ -45,7 +53,6 @@
                                     <tr>
                                         <td colspan="2">
                                             <input type="submit" value="{lang_save}" name="mode"> 
-                                            {change_password_option}
                                             {delete_option}
                                             <input type="submit" value="{lang_cancel}" name="mode"> 
                                         </td>
diff -ruN 1.3.11sr1/layout/professional/admin/user/listitem.thtml 1.4.0sr5-1/layout/professional/admin/user/listitem.thtml
--- 1.3.11sr1/layout/professional/admin/user/listitem.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/user/listitem.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,5 +0,0 @@
-                                <tr align="center">
-                                    <td align="left"><a href="{site_url}/users.php?mode=profile&amp;uid={user_id}"><img src="{layout_url}/images/person.gif" border="0" alt=""></a>&nbsp;<a href="{site_admin_url}/user.php?mode=edit&amp;uid={user_id}">{username}</a></td>
-                                    <td>{user_fullname}</td>
-                                    <td>{user_email}</td>
-                                </tr>
diff -ruN 1.3.11sr1/layout/professional/admin/user/plainlist.thtml 1.4.0sr5-1/layout/professional/admin/user/plainlist.thtml
--- 1.3.11sr1/layout/professional/admin/user/plainlist.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/user/plainlist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,9 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <th align="left">{lang_username}</th>
-                                    <th>{lang_fullname}</th>
-                                    <th>{lang_emailaddress}</th>
-                                </tr>
-                                {user_row}
-                            </table>
-                            <p align="center">{google_paging}</p>
diff -ruN 1.3.11sr1/layout/professional/admin/user/userslist.thtml 1.4.0sr5-1/layout/professional/admin/user/userslist.thtml
--- 1.3.11sr1/layout/professional/admin/user/userslist.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/admin/user/userslist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,39 +0,0 @@
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <td rowspan="2">
-                                        <img src="{layout_url}/images/icons/user.gif" alt="">
-                                    </td>
-                                    <td>[ <a href="{site_admin_url}/user.php?mode=edit">{lang_newuser}</a> | <a href="{site_admin_url}/user.php?mode=importform">{lang_batchadd}</a> | <a href="{site_admin_url}">{lang_adminhome}</a> ]
-                                    </td>
-                                </tr>
-                                <tr>
-                                    <td>{lang_instructions}</td>
-                                </tr>
-                                <tr>
-                                    <td colspan="2" align="center">
-                                        <form action="{site_admin_url}/user.php" method="post">
-                                            {lang_search}: <input type="text" size="20" name="q" value="{last_query}">
-                                            &nbsp;&nbsp;{lang_limit_results}:
-                                                <select name="query_limit">
-                                                    <option value="10" {10_selected}>10</option>
-                                                    <option value="20" {20_selected}>20</option>
-                                                    <option value="50" {50_selected}>50</option>
-                                                    <option value="75" {75_selected}>75</option>
-                                                    <option value="100" {100_selected}>100</option>
-                                                    <option value="200" {200_selected}>200</option>
-                                                    <option value="500" {500_selected}>500</option>
-                                                </select>
-                                            <input type="submit" value="{lang_submit}">
-                                        </form>
-                                    </td>
-                                </tr>
-                            </table>
-                            <table border="0" cellspacing="0" cellpadding="2" width="100%">
-                                <tr>
-                                    <th align="left">{lang_username}</th>
-                                    <th>{lang_fullname}</th>
-                                    <th>{lang_emailaddress}</th>
-                                </tr>
-                                {user_row}
-                            </table>
-                            {google_paging}
diff -ruN 1.3.11sr1/layout/professional/advanced_editor_header.thtml 1.4.0sr5-1/layout/professional/advanced_editor_header.thtml
--- 1.3.11sr1/layout/professional/advanced_editor_header.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/advanced_editor_header.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+
+<!-- Load Advanced Editor -->
+<link rel="stylesheet" type="text/css" href="{site_url}/fckeditor/editor/css/fck_editorarea.css">
+<script type="text/javascript" src="{site_url}/fckeditor/fckeditor.js"></script>
+<!-- End of Editor Load -->
\ No newline at end of file
diff -ruN 1.3.11sr1/layout/professional/archivestorytext.thtml 1.4.0sr5-1/layout/professional/archivestorytext.thtml
--- 1.3.11sr1/layout/professional/archivestorytext.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/archivestorytext.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,23 +1,27 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
     <tr>
-      <td width="100%" class="story-title"><img src="{site_url}/images/speck.gif" width="1" height="0" alt=""><h2><a href="{article_url}" class="non-ul">{story_title}</a></h2></td>
+      <td width="100%" class="story-title"><img src="{site_url}/images/speck.gif" width="1" height="0" alt=""><h2>{start_storylink_anchortag}{story_title}{end_storylink_anchortag}</h2></td>
       <td class="story-title" width="5%" align="right" nowrap>&nbsp;{email_icon}&nbsp;{print_icon}&nbsp;{pdf_icon}</td>
     </tr>
     <tr>
-      <td class="story-box" colspan="2"><table border="0" cellpadding="3" cellspacing="0" width="100%"><tr><td class="story-information" width="100%">{story_date}<br>{lang_contributed_by} {start_contributedby_anchortag}{contributedby_user}{end_contributedby_anchortag}<br>{lang_views}: {story_hits}</td></tr>
-                            
-                                <tr>
-                                    <td>
-                                        <p>{story_anchortag_and_image}{story_introtext}</p>
-                                    </td></tr></table>
-                                	<table border="0" cellpadding="3" cellspacing="0" width="100%">
-
-						
-							<tr><td align="center">{edit_link}<br>
-							  {readmore_link} {start_comments_anchortag}{comments_text}{end_comments_anchortag}<br>
-{recent_post_anchortag}<br></td></tr>
-							
-							</table></td>
+      <td class="story-box" colspan="2">
+            <table border="0" cellpadding="3" cellspacing="0" width="100%">
+                <tr><td class="story-information" width="100%">
+                        {story_date}<br>
+                        {lang_contributed_by} {start_contributedby_anchortag}{contributedby_user}{end_contributedby_anchortag}<br>
+                        {lang_views} {story_hits}
+                </td></tr>
+                <tr><td>{story_anchortag_and_image}{story_introtext}</td></tr>
+            </table>
+            <table border="0" cellpadding="3" cellspacing="0" width="100%">
+              <tr><td align="center">{edit_link}&nbsp;{page_selector}<br>
+                                     {readmore_link} {post_comment_link}<br>
+                                     {start_comments_anchortag}{comments_with_count}{end_comments_anchortag} {start_trackbacks_anchortag}{trackbacks_with_count}{end_trackbacks_anchortag}
+              </td></tr>
+            </table>
+      </td>
     </tr>
   </table>
-<table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider"><tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr></table> 
+<table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider">
+    <tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr>
+</table> 
diff -ruN 1.3.11sr1/layout/professional/article/a1 1.4.0sr5-1/layout/professional/article/a1
--- 1.3.11sr1/layout/professional/article/a1	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/article/a1	1969-12-31 18:00:00.000000000 -0600
@@ -1,10 +0,0 @@
-                            {formatted_article}<br>
-                            {commentbar}
-			            </td>
-                        <td>
-                            <img src="{site_url}/images/speck.gif" height="1" width="10" alt="">
-                        </td>
-        		        <td valign="top" width="160">
-                            {whats_related_story_options}<br>
-                            <img src="{site_url}/images/speck.gif" width="160" height="1" alt="">
-	
diff -ruN 1.3.11sr1/layout/professional/article/article.thtml 1.4.0sr5-1/layout/professional/article/article.thtml
--- 1.3.11sr1/layout/professional/article/article.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/article/article.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,6 +1,7 @@
-        {formatted_article}
+        {formatted_article} {send_trackback_link}
         <table border="0" width="100%">
             <tr><td valign="top">{whats_related}</td>
                 <td valign="top">{story_options}</td></tr>
         </table>
+        {trackback}
         {commentbar}
diff -ruN 1.3.11sr1/layout/professional/blockfooter-message.thtml 1.4.0sr5-1/layout/professional/blockfooter-message.thtml
--- 1.3.11sr1/layout/professional/blockfooter-message.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockfooter-message.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,2 @@
+</td>
+      </tr></table><br>
diff -ruN 1.3.11sr1/layout/professional/blockheader-left.thtml 1.4.0sr5-1/layout/professional/blockheader-left.thtml
--- 1.3.11sr1/layout/professional/blockheader-left.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockheader-left.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -2,5 +2,5 @@
   <tr>
     <td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr><td height="22" colspan="3" align="left" valign="middle" class="block-title-left">{block_title}<td align="right">{block_help}</td>
-	</tr><tr><td width="100%" class="block-info-left">
+    <tr><td height="22" align="left" valign="middle" class="block-title-left">{block_title}</td><td align="right">{block_help}</td>
+	</tr><tr><td colspan="2" width="100%" class="block-info-left">
diff -ruN 1.3.11sr1/layout/professional/blockheader-message.thtml 1.4.0sr5-1/layout/professional/blockheader-message.thtml
--- 1.3.11sr1/layout/professional/blockheader-message.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockheader-message.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,8 @@
+<table border="0" cellpadding="0" cellspacing="0" width="95%" style="margin:10px;border:1px solid black;">
+    <tr>
+        <td class="blocktitle" width="10" style="border:0px;background:url({layout_url}/images/header-bg.png) #1A3955;">{showhide}</td>
+        <td class="blocktitle" width="90%" align="left" style="border:0px;color:white;background:url({layout_url}/images/header-bg.png) #1A3955;padding:6px 3px 3px 3px;font-weight: bold;">{block_title}</td>
+        <td class="blocktitle" width="20" valign="middle" style="border:0px;text-align:right;background:url({layout_url}/images/header-bg.png) #1A3955;" nowrap>{block_help}&nbsp;</td>
+    </tr>
+    <tr>
+        <td width="100%" colspan="3" style="padding:5px 15px 5px 15px;border-top:3px solid black;padding-bottom:5px;background:#E7E7E7;font-weight:bold;">
diff -ruN 1.3.11sr1/layout/professional/blockheader-related.thtml 1.4.0sr5-1/layout/professional/blockheader-related.thtml
--- 1.3.11sr1/layout/professional/blockheader-related.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockheader-related.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -2,5 +2,5 @@
   <tr>
     <td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr><td height="22" colspan="3" align="left" valign="middle" class="block-title">{block_title}<td align="right">{block_help}</td>
-	</tr><tr><td width="100%" class="block-info">
+    <tr><td height="22" align="left" valign="middle" class="block-title">{block_title}</td><td align="right">{block_help}</td>
+	</tr><tr><td colspan="2" width="100%" class="block-info">
diff -ruN 1.3.11sr1/layout/professional/blockheader-right.thtml 1.4.0sr5-1/layout/professional/blockheader-right.thtml
--- 1.3.11sr1/layout/professional/blockheader-right.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockheader-right.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -2,5 +2,5 @@
   <tr>
     <td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr><td height="22" colspan="3" align="left" valign="middle" class="block-title-right">{block_title}<td align="right">{block_help}</td>
-	</tr><tr><td width="100%" class="block-info-right">
+    <tr><td height="22" align="left" valign="middle" class="block-title-right">{block_title}</td><td align="right">{block_help}</td>
+	</tr><tr><td colspan="2" width="100%" class="block-info-right">
diff -ruN 1.3.11sr1/layout/professional/blockheader.thtml 1.4.0sr5-1/layout/professional/blockheader.thtml
--- 1.3.11sr1/layout/professional/blockheader.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockheader.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -2,5 +2,5 @@
   <tr>
     <td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr><td height="22" colspan="3" align="left" valign="middle" class="block-title">{block_title}<td align="right">{block_help}</td>
-	</tr><tr><td width="100%" class="block-info">
+    <tr><td height="22" align="left" valign="middle" class="block-title">{block_title}</td><td align="right">{block_help}</td>
+	</tr><tr><td colspan="2" width="100%" class="block-info">
diff -ruN 1.3.11sr1/layout/professional/blockservices.thtml 1.4.0sr5-1/layout/professional/blockservices.thtml
--- 1.3.11sr1/layout/professional/blockservices.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/blockservices.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,2 @@
+<b><label for="service">{lang_service}</label>:</b><br>
+{select_service}<br>
Files 1.3.11sr1/layout/professional/calendar/.calendar.thtml.swp and 1.4.0sr5-1/layout/professional/calendar/.calendar.thtml.swp differ
diff -ruN 1.3.11sr1/layout/professional/comment/commentbar.thtml 1.4.0sr5-1/layout/professional/comment/commentbar.thtml
--- 1.3.11sr1/layout/professional/comment/commentbar.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/comment/commentbar.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,15 +1,20 @@
 <table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider"><tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr></table>
 <a name="comments"></a>
 <table cellspacing="0" cellpadding="0" border="0" width="100%">
-  <tr><td align="center" class="commentbar1"><b><a href="{story_link}" class="non-ul">{story_title}</a></b> | {num_comments} {lang_comments} | {user_nullname} <a href="{login_logout_url}" class="commentbar1">{lang_login_logout}</a></td></tr>
+  <tr><td align="center" class="commentbar1"><b>{start_storylink_anchortag}{story_title}{end_storylink_anchortag}</b> | {num_comments} {lang_comments} | {user_nullname} <a href="{login_logout_url}" class="commentbar1">{lang_login_logout}</a></td></tr>
   <tr>
     <td align="center" class="commentbar2">
-      <form action="{parent_url}" method="POST">
+      <form style="display: inline" action="{parent_url}" method="POST">
         {hidden_field}
         {order_selector}
         {mode_selector}
         <input type="submit" value="{lang_refresh}">
         <input type="hidden" name="type" value="{comment_type}">
+      </form>
+      <form style="display: inline" action="{site_url}/comment.php" method="POST">
+        <input type="hidden" name="sid" value="{sid}">
+        <input type="hidden" name="pid" value="0">
+        <input type="hidden" name="type" value="{comment_type}">
         <input type="submit" name="reply" value="{lang_reply}">
       </form>
     </td>
diff -ruN 1.3.11sr1/layout/professional/comment/commentform_advanced.thtml 1.4.0sr5-1/layout/professional/comment/commentform_advanced.thtml
--- 1.3.11sr1/layout/professional/comment/commentform_advanced.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/comment/commentform_advanced.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,60 @@
+ <script type="text/javascript">
+    // Setup editor path for FCKeditor JS Functions
+    geeklogEditorBasePath = "{site_url}/fckeditor/" ;
+</script>
+<script type="text/JavaScript" src="{site_url}/javascript/submitcomment_fckeditor.js"></script>
+
+                                {start_block_postacomment}
+                                            <form action="{site_url}/comment.php" method="post" onSubmit='set_postcontent();'>
+                                                <table cellspacing="0" cellpadding="3" border="0" width="100%">
+                                                    <tr>
+                                                        <td align="right"><b>{lang_username}:</b></td>
+                                                        <td>
+                                                            <input type="hidden" name="sid" value="{sid}">
+                                                            <input type="hidden" name="pid" value="{pid}">
+                                                            <input type="hidden" name="type" value="{type}">
+                                                            <input type="hidden" name="comment" value="">
+                                                            <input type="hidden" name="uid" value="{uid}">{username} [ <a href="{action_url}">{lang_logoutorcreateaccount}</a> ]
+                                                        </td>
+                                                    </tr>
+                                                    <tr>
+                                                        <td align="right"><b>{lang_title}:</b></td>
+                                                        <td><input type="text" name="title" size="32" value="{title}" maxlength="96"></td>
+                                                    </tr>
+                                                    <tr>
+                                                        <td align="right" valign="top"><b>{lang_comment}:</b></td>
+                                                        <td>
+                                                            <div id="text_editor" style="display:{show_texteditor};">
+                                                                <textarea id="comment_text" name="comment" cols="60" rows="10">{comment}</textarea>
+                                                            </div>
+                                                            <div  id="html_editor" style="display:{show_htmleditor};">
+                                                                <textarea id="comment_html" name="comment_html" rows="10">{comment}</textarea>
+                                                            </div>
+                                                        </td>
+                                                    </tr>
+                                                    <tr valign="top">
+                                                        <td align="right"><b>{lang_postmode}:</b></td>
+                                                        <td>
+                                                            <select id="sel_editmode" name="postmode" onChange="change_editmode(this);">
+                                                                {postmode_options}
+                                                            </select><br>
+                                                            <span class="warningsmall">{allowed_html}</span>
+                                                        </td>
+                                                    </tr>
+                                                    <tr>
+                                                        <td colspan="2"><hr></td>
+                                                    </tr>
+                                                    <tr>
+                                                        <td colspan="2"><b>{lang_importantstuff}</b><ul>
+                                                            <li>{lang_instr_line1}</li>
+                                                            <li>{lang_instr_line2}</li>
+                                                            <li>{lang_instr_line3}</li>
+                                                            <li>{lang_instr_line4}</li>
+                                                            <li>{lang_instr_line5}</li></ul>
+                                                            <input type="submit" name="mode" value="{lang_preview}">
+                                                            {save_option}
+                                                        </td>
+                                                    </tr>
+                                                </table>
+                                            </form>
+                                {end_block}
diff -ruN 1.3.11sr1/layout/professional/comment/comment.thtml 1.4.0sr5-1/layout/professional/comment/comment.thtml
--- 1.3.11sr1/layout/professional/comment/comment.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/comment/comment.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,10 +1,11 @@
 <div class="comment" style="padding-left: {indent}px">
-    <div class="commenttitle">{title}</div>
-    <div>{lang_authoredby}
-{start_author_anchortag}{author}{end_author_anchortag} {lang_on}
+  <div class="commenttitle">{title}</div>
+  <div>{lang_authoredby} {start_author_anchortag}{author}{end_author_anchortag} {lang_on}
 {date}</div>
-    <div style="verticle-align: top">{comments}</div>
-    <div><span {hide_if_preview}>[ <a
-href="{site_url}/comment.php?sid={sid}&amp;pid={pid}&amp;title={title}&amp;type={type}">{lang_replytothis}</a>
-{parent_link} {delete_option}]</span></div>
+  <div style="verticle-align: top">{comments}</div>
+  <div>
+   <span {hide_if_preview}>
+    [ <a href="{reply_link}">{lang_replytothis}</a> {parent_link} {delete_option} | <a href="{site_url}/comment.php?mode=view&amp;cid={cid}" rel="self bookmark" title="{lang_permlink}">#</a> ]
+   </span>
+  </div>
 </div>
diff -ruN 1.3.11sr1/layout/professional/comment/thread.thtml 1.4.0sr5-1/layout/professional/comment/thread.thtml
--- 1.3.11sr1/layout/professional/comment/thread.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/comment/thread.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,6 +1,6 @@
 <div style="padding-left: {indent}px">
-  <ul><li>
-    <a href="{site_url}/comment.php?mode=display&amp;order={order}&amp;pid={pid}">{title}</a>
+  <ul style="margin: 0; padding: 0"><li>
+    <a href="{site_url}/comment.php?mode=display&amp;format=threaded&amp;order={order}&amp;pid={pid}">{title}</a>
     - {lang_authoredby} {start_author_anchortag}{author}{end_author_anchortag} {lang_on} {date}
   </li></ul>
 </div>
diff -ruN 1.3.11sr1/layout/professional/featuredstorytext.thtml 1.4.0sr5-1/layout/professional/featuredstorytext.thtml
--- 1.3.11sr1/layout/professional/featuredstorytext.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/featuredstorytext.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,23 +1,31 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
     <tr>
-      <td width="100%" class="story-title-featured"><img src="{site_url}/images/speck.gif" width="1" height="0" alt=""><h1><a href="{article_url}" class="non-ul">{story_title}</a></h1></td>
+      <td width="100%" class="story-title-featured"><img src="{site_url}/images/speck.gif" width="1" height="0" alt=""><h1>{start_storylink_anchortag}{story_title}{end_storylink_anchortag}</h1></td>
       <td class="story-title-featured" width="5%" align="right" nowrap>&nbsp;{email_icon}&nbsp;{print_icon}&nbsp;{pdf_icon}</td>
     </tr>
     <tr>
-      <td class="story-box" colspan="2"><table border="0" cellpadding="3" cellspacing="0" width="100%"><tr><td class="story-information" width="100%">{story_date}<br>{lang_contributed_by} {start_contributedby_anchortag}{contributedby_user}{end_contributedby_anchortag}<br>{lang_views}: {story_hits}</td></tr>
-                            
-                                <tr>
-                                    <td>
-                                        <p>{story_anchortag_and_image}{story_introtext}</p>
-                                    </td></tr></table>
-                                	<table border="0" cellpadding="3" cellspacing="0" width="100%">
-
-						
-							<tr><td align="center">{edit_link}<br>
-							  {readmore_link} {start_comments_anchortag}{comments_text}{end_comments_anchortag}<br>
-{recent_post_anchortag}<br></td></tr>
-							
-							</table></td>
+      <td class="story-box" colspan="2">
+            <table border="0" cellpadding="3" cellspacing="0" width="100%">
+                <tr>
+                  <td class="story-information" width="100%">
+                      {story_date}<br>
+                      {lang_contributed_by} {start_contributedby_anchortag}{contributedby_user}{end_contributedby_anchortag}<br>
+                      {lang_views} {story_hits}
+                  </td>
+                </tr>
+                <tr>
+                  <td>{story_anchortag_and_image}{story_introtext}</td>
+                </tr>
+            </table>
+            <table border="0" cellpadding="3" cellspacing="0" width="100%">
+              <tr><td align="center">{edit_link}&nbsp;{page_selector}<br>
+                                     {readmore_link} {post_comment_link}<br>
+                                     {start_comments_anchortag}{comments_with_count}{end_comments_anchortag} {start_trackbacks_anchortag}{trackbacks_with_count}{end_trackbacks_anchortag}
+              </td></tr>
+            </table>
+      </td>
     </tr>
-  </table>
-<table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider"><tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr></table> 
+</table>
+<table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider">
+    <tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr>
+</table> 
diff -ruN 1.3.11sr1/layout/professional/functions.php 1.4.0sr5-1/layout/professional/functions.php
--- 1.3.11sr1/layout/professional/functions.php	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/functions.php	2006-08-08 02:39:06.000000000 -0500
@@ -1,5 +1,11 @@
 <?php
 
+if (strpos ($_SERVER['PHP_SELF'], 'functions.php') !== false) {
+    die ('This file can not be used on its own!');
+}
+
+$_IMAGE_TYPE = 'png';
+
 $result = DB_query ("SELECT onleft,name FROM {$_TABLES['blocks']} WHERE is_enabled = 1");
 $nrows = DB_numRows ($result);
 for ($i = 0; $i < $nrows; $i++) {
@@ -11,6 +17,8 @@
     }
 }
 
+$_BLOCK_TEMPLATE['_msg_block'] = 'blockheader-message.thtml,blockfooter-message.thtml';
+
 $_BLOCK_TEMPLATE['customlogin'] = 'customlogin-header.thtml,customlogin-footer.thtml';
 $_BLOCK_TEMPLATE['whats_related_block'] = 'blockheader-related.thtml,blockfooter-related.thtml';
 $_BLOCK_TEMPLATE['story_options_block'] = 'blockheader-related.thtml,blockfooter-related.thtml';
diff -ruN 1.3.11sr1/layout/professional/header.thtml 1.4.0sr5-1/layout/professional/header.thtml
--- 1.3.11sr1/layout/professional/header.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/header.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,17 +1,30 @@
-<?php header ('Content-Type: text/html; charset={charset}'); ?>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
 <title>{page_title}</title>
-<meta name="ROBOTS" content="INDEX,FOLLOW">
 <!-- link rel="SHORTCUT ICON" href="{site_url}/favicon.ico" -->
 <!--
 <meta http-equiv="Pragma" content="no-cache">
 -->
 <link rel="stylesheet" type="text/css" href="{css_url}" title="{theme}">
+{feed_url}
 {plg_headercode}
+{advanced_editor}
+
+<script type="text/javascript">
+    function delconfirm()
+    {
+        if (confirm("Do you really want to delete this item?"))
+        {
+          return true;
+        } else {
+          return false;
+        }
+    }
+</script>
 </head>
-<body>
+
+<body class="sitebody" dir="{direction}">
 <table width="99%" align="center" border="0" cellspacing="0" cellpadding="0" class="header-envelope">
     <tr>
         <td>
Files 1.3.11sr1/layout/professional/images/admin/block.gif and 1.4.0sr5-1/layout/professional/images/admin/block.gif differ
Files 1.3.11sr1/layout/professional/images/admin/block-left.gif and 1.4.0sr5-1/layout/professional/images/admin/block-left.gif differ
Files 1.3.11sr1/layout/professional/images/admin/block-left.png and 1.4.0sr5-1/layout/professional/images/admin/block-left.png differ
Files 1.3.11sr1/layout/professional/images/admin/block-right.gif and 1.4.0sr5-1/layout/professional/images/admin/block-right.gif differ
Files 1.3.11sr1/layout/professional/images/admin/block-right.png and 1.4.0sr5-1/layout/professional/images/admin/block-right.png differ
Files 1.3.11sr1/layout/professional/images/admin/event.gif and 1.4.0sr5-1/layout/professional/images/admin/event.gif differ
Files 1.3.11sr1/layout/professional/images/admin/link.gif and 1.4.0sr5-1/layout/professional/images/admin/link.gif differ
Files 1.3.11sr1/layout/professional/images/admin/logout.gif and 1.4.0sr5-1/layout/professional/images/admin/logout.gif differ
Files 1.3.11sr1/layout/professional/images/admin/poll.gif and 1.4.0sr5-1/layout/professional/images/admin/poll.gif differ
Files 1.3.11sr1/layout/professional/images/admin/story.gif and 1.4.0sr5-1/layout/professional/images/admin/story.gif differ
Files 1.3.11sr1/layout/professional/images/admin/topic.gif and 1.4.0sr5-1/layout/professional/images/admin/topic.gif differ
Files 1.3.11sr1/layout/professional/images/admin/user.gif and 1.4.0sr5-1/layout/professional/images/admin/user.gif differ
Files 1.3.11sr1/layout/professional/images/bararrowdown.png and 1.4.0sr5-1/layout/professional/images/bararrowdown.png differ
Files 1.3.11sr1/layout/professional/images/bararrowup.png and 1.4.0sr5-1/layout/professional/images/bararrowup.png differ
Files 1.3.11sr1/layout/professional/images/button_help.gif and 1.4.0sr5-1/layout/professional/images/button_help.gif differ
Files 1.3.11sr1/layout/professional/images/button_help.png and 1.4.0sr5-1/layout/professional/images/button_help.png differ
Files 1.3.11sr1/layout/professional/images/button_login.gif and 1.4.0sr5-1/layout/professional/images/button_login.gif differ
Files 1.3.11sr1/layout/professional/images/button_register.gif and 1.4.0sr5-1/layout/professional/images/button_register.gif differ
Files 1.3.11sr1/layout/professional/images/collapse.gif and 1.4.0sr5-1/layout/professional/images/collapse.gif differ
Files 1.3.11sr1/layout/professional/images/copy.png and 1.4.0sr5-1/layout/professional/images/copy.png differ
Files 1.3.11sr1/layout/professional/images/edit.gif and 1.4.0sr5-1/layout/professional/images/edit.gif differ
Files 1.3.11sr1/layout/professional/images/edit.png and 1.4.0sr5-1/layout/professional/images/edit.png differ
Files 1.3.11sr1/layout/professional/images/expand.gif and 1.4.0sr5-1/layout/professional/images/expand.gif differ
Files 1.3.11sr1/layout/professional/images/icons/block.gif and 1.4.0sr5-1/layout/professional/images/icons/block.gif differ
Files 1.3.11sr1/layout/professional/images/icons/block.png and 1.4.0sr5-1/layout/professional/images/icons/block.png differ
Files 1.3.11sr1/layout/professional/images/icons/database.png and 1.4.0sr5-1/layout/professional/images/icons/database.png differ
Files 1.3.11sr1/layout/professional/images/icons/delete_event.gif and 1.4.0sr5-1/layout/professional/images/icons/delete_event.gif differ
Files 1.3.11sr1/layout/professional/images/icons/delete_event.png and 1.4.0sr5-1/layout/professional/images/icons/delete_event.png differ
Files 1.3.11sr1/layout/professional/images/icons/docs.png and 1.4.0sr5-1/layout/professional/images/icons/docs.png differ
Files 1.3.11sr1/layout/professional/images/icons/event.gif and 1.4.0sr5-1/layout/professional/images/icons/event.gif differ
Files 1.3.11sr1/layout/professional/images/icons/event.png and 1.4.0sr5-1/layout/professional/images/icons/event.png differ
Files 1.3.11sr1/layout/professional/images/icons/geeklog.gif and 1.4.0sr5-1/layout/professional/images/icons/geeklog.gif differ
Files 1.3.11sr1/layout/professional/images/icons/group.gif and 1.4.0sr5-1/layout/professional/images/icons/group.gif differ
Files 1.3.11sr1/layout/professional/images/icons/group.png and 1.4.0sr5-1/layout/professional/images/icons/group.png differ
Files 1.3.11sr1/layout/professional/images/icons/link.gif and 1.4.0sr5-1/layout/professional/images/icons/link.gif differ
Files 1.3.11sr1/layout/professional/images/icons/logout.gif and 1.4.0sr5-1/layout/professional/images/icons/logout.gif differ
Files 1.3.11sr1/layout/professional/images/icons/logout.png and 1.4.0sr5-1/layout/professional/images/icons/logout.png differ
Files 1.3.11sr1/layout/professional/images/icons/mail.png and 1.4.0sr5-1/layout/professional/images/icons/mail.png differ
Files 1.3.11sr1/layout/professional/images/icons/plugins.gif and 1.4.0sr5-1/layout/professional/images/icons/plugins.gif differ
Files 1.3.11sr1/layout/professional/images/icons/plugins.png and 1.4.0sr5-1/layout/professional/images/icons/plugins.png differ
Files 1.3.11sr1/layout/professional/images/icons/poll.gif and 1.4.0sr5-1/layout/professional/images/icons/poll.gif differ
Files 1.3.11sr1/layout/professional/images/icons/story.gif and 1.4.0sr5-1/layout/professional/images/icons/story.gif differ
Files 1.3.11sr1/layout/professional/images/icons/story.png and 1.4.0sr5-1/layout/professional/images/icons/story.png differ
Files 1.3.11sr1/layout/professional/images/icons/syndication.png and 1.4.0sr5-1/layout/professional/images/icons/syndication.png differ
Files 1.3.11sr1/layout/professional/images/icons/themes.gif and 1.4.0sr5-1/layout/professional/images/icons/themes.gif differ
Files 1.3.11sr1/layout/professional/images/icons/topic.gif and 1.4.0sr5-1/layout/professional/images/icons/topic.gif differ
Files 1.3.11sr1/layout/professional/images/icons/topic.png and 1.4.0sr5-1/layout/professional/images/icons/topic.png differ
Files 1.3.11sr1/layout/professional/images/icons/trackback.png and 1.4.0sr5-1/layout/professional/images/icons/trackback.png differ
Files 1.3.11sr1/layout/professional/images/icons/user.gif and 1.4.0sr5-1/layout/professional/images/icons/user.gif differ
Files 1.3.11sr1/layout/professional/images/icons/user.png and 1.4.0sr5-1/layout/professional/images/icons/user.png differ
Files 1.3.11sr1/layout/professional/images/icons/versioncheck.png and 1.4.0sr5-1/layout/professional/images/icons/versioncheck.png differ
Files 1.3.11sr1/layout/professional/images/list.png and 1.4.0sr5-1/layout/professional/images/list.png differ
Files 1.3.11sr1/layout/professional/images/logo.gif and 1.4.0sr5-1/layout/professional/images/logo.gif differ
Files 1.3.11sr1/layout/professional/images/logo.png and 1.4.0sr5-1/layout/professional/images/logo.png differ
Files 1.3.11sr1/layout/professional/images/mail.gif and 1.4.0sr5-1/layout/professional/images/mail.gif differ
Files 1.3.11sr1/layout/professional/images/mail.png and 1.4.0sr5-1/layout/professional/images/mail.png differ
Files 1.3.11sr1/layout/professional/images/print.gif and 1.4.0sr5-1/layout/professional/images/print.gif differ
Files 1.3.11sr1/layout/professional/images/print.png and 1.4.0sr5-1/layout/professional/images/print.png differ
Files 1.3.11sr1/layout/professional/images/sendping.png and 1.4.0sr5-1/layout/professional/images/sendping.png differ
Files 1.3.11sr1/layout/professional/images/smallcamera.gif and 1.4.0sr5-1/layout/professional/images/smallcamera.gif differ
Files 1.3.11sr1/layout/professional/images/smallcamera.png and 1.4.0sr5-1/layout/professional/images/smallcamera.png differ
Files 1.3.11sr1/layout/professional/images/sysmessage.gif and 1.4.0sr5-1/layout/professional/images/sysmessage.gif differ
Files 1.3.11sr1/layout/professional/images/sysmessage.png and 1.4.0sr5-1/layout/professional/images/sysmessage.png differ
diff -ruN 1.3.11sr1/layout/professional/loginform.thtml 1.4.0sr5-1/layout/professional/loginform.thtml
--- 1.3.11sr1/layout/professional/loginform.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/loginform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,8 +1,10 @@
 <form action="{site_url}/users.php" method="POST">
-  <b>{lang_username}:</b><br>
-  <input type="text" size="10" name="loginname" value=""><br>
-  <b>{lang_password}:</b><br>
-  <input type="password" size="10" name="passwd"><br>
+  <b><label for="loginname">{lang_username}</label>:</b><br>
+  <input type="text" size="10" name="loginname" value="" id="loginname"><br>
+  {services}
+  <b><label for="passwd">{lang_password}</label>:</b><br>
+  <input type="password" size="10" name="passwd" id="passwd"><br>
   <input type="submit" value="{lang_login}">
 </form>
-{lang_signup}
+{lang_signup}<br>
+{lang_forgetpassword}
Files 1.3.11sr1/layout/professional/navbar/images/button.gif and 1.4.0sr5-1/layout/professional/navbar/images/button.gif differ
Files 1.3.11sr1/layout/professional/navbar/images/button_over.gif and 1.4.0sr5-1/layout/professional/navbar/images/button_over.gif differ
diff -ruN 1.3.11sr1/layout/professional/navbar/menuitem.thtml 1.4.0sr5-1/layout/professional/navbar/menuitem.thtml
--- 1.3.11sr1/layout/professional/navbar/menuitem.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/navbar/menuitem.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1 @@
+        <li {cssactive}><a href="{link}{parms}"{onclick}{csscurrent}><span style="padding-top:5px;">{label}</span></a></li>
diff -ruN 1.3.11sr1/layout/professional/navbar/navbar.thtml 1.4.0sr5-1/layout/professional/navbar/navbar.thtml
--- 1.3.11sr1/layout/professional/navbar/navbar.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/navbar/navbar.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+<div id="navcontainer">
+    <ul id="navlist" style="padding-left:15px;">
+{menuitems}
+    </ul>
+</div>
\ No newline at end of file
diff -ruN 1.3.11sr1/layout/professional/pdfgenerator/pdf_form.thtml 1.4.0sr5-1/layout/professional/pdfgenerator/pdf_form.thtml
--- 1.3.11sr1/layout/professional/pdfgenerator/pdf_form.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pdfgenerator/pdf_form.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,12 +0,0 @@
-<p>
-{lang_error_msg}
-</p>
-<p>
-<h2>{lang_pdf_generator}</h2>
-{lang_instructions}
-</p>
-<form method="GET" action="{site_url}/pdfgenerator.php">
-    <input type="hidden" name="pageType" value="2" />
-	{lang_URL}:&nbsp;&nbsp;<input type="text" size="50" name="pageData" />
-	&nbsp;&nbsp;<input type="submit" value="{lang_generate_pdf}" />
-</form>
diff -ruN 1.3.11sr1/layout/professional/pdfgenerator/pdf.thtml 1.4.0sr5-1/layout/professional/pdfgenerator/pdf.thtml
--- 1.3.11sr1/layout/professional/pdfgenerator/pdf.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pdfgenerator/pdf.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,10 +0,0 @@
-           <b>{lang_loading_document}</b>
-		   <br /><br />
-           {lang_please_wait}
-           <br /><br />
-           {lang_right_click}
-           <br /><br />
-           {page_text}
-           <br /><br />
-           <a href="{pdf_url}">PDF</a>
-           {meta_tag}
diff -ruN 1.3.11sr1/layout/professional/pollbooth/pollanswer.thtml 1.4.0sr5-1/layout/professional/pollbooth/pollanswer.thtml
--- 1.3.11sr1/layout/professional/pollbooth/pollanswer.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/pollanswer.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1 +0,0 @@
-  <input type="radio" name="aid" value="{answer_id}">{answer_text}<br>
diff -ruN 1.3.11sr1/layout/professional/pollbooth/pollblock.thtml 1.4.0sr5-1/layout/professional/pollbooth/pollblock.thtml
--- 1.3.11sr1/layout/professional/pollbooth/pollblock.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/pollblock.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,8 +0,0 @@
-<b>{poll_question}</b>
-<form action="{poll_vote_url}" name="Vote" method="POST">
-  <input type="hidden" name="qid" value="{poll_id}">
-  {poll_answers}
-  <input type="submit" value="{lang_vote}">
-  <a href="{poll_results_url}">{lang_results}</a>
-</form>
-<span class="block-vote">{num_votes} {lang_votes}{poll_comments}</span><br>
diff -ruN 1.3.11sr1/layout/professional/pollbooth/pollcomments.thtml 1.4.0sr5-1/layout/professional/pollbooth/pollcomments.thtml
--- 1.3.11sr1/layout/professional/pollbooth/pollcomments.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/pollcomments.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1 +0,0 @@
- | <a href="{poll_comments_url}">{num_comments} {lang_comments}</a>
diff -ruN 1.3.11sr1/layout/professional/pollbooth/polllist.thtml 1.4.0sr5-1/layout/professional/pollbooth/polllist.thtml
--- 1.3.11sr1/layout/professional/pollbooth/polllist.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/polllist.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1 +0,0 @@
-                            <br>{item_num}. <a href="{poll_url}">{poll_question}</a> ({poll_votes} {lang_votes}){ending_br} 
diff -ruN 1.3.11sr1/layout/professional/pollbooth/pollresult.thtml 1.4.0sr5-1/layout/professional/pollbooth/pollresult.thtml
--- 1.3.11sr1/layout/professional/pollbooth/pollresult.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/pollresult.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,6 +0,0 @@
-<br><b>{poll_question}</b><br><br>
-<table border="0" cellpadding="3" cellspacing="0" align="center">
-{poll_votes}
-</table>
-<div class="block-vote-results" align="left"><br><a href="{site_url}/pollbooth.php">{lang_pollquestions}</a></div>
-<div class="block-vote-results" align="right">{num_votes} {lang_votes} {poll_comments}</div>
\ No newline at end of file
diff -ruN 1.3.11sr1/layout/professional/pollbooth/pollvotes_bar.thtml 1.4.0sr5-1/layout/professional/pollbooth/pollvotes_bar.thtml
--- 1.3.11sr1/layout/professional/pollbooth/pollvotes_bar.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/pollvotes_bar.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,4 +0,0 @@
-<tr>
-  <td align="right"><b>{answer_text}</b></td>
-  <td><img src="{layout_url}/images/bar.gif" width="{bar_width}" height="10" align="bottom" alt=""> {answer_num} ({answer_percent}%)</td>
-</tr>
diff -ruN 1.3.11sr1/layout/professional/pollbooth/pollvotes_num.thtml 1.4.0sr5-1/layout/professional/pollbooth/pollvotes_num.thtml
--- 1.3.11sr1/layout/professional/pollbooth/pollvotes_num.thtml	2004-12-31 10:02:59.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/pollbooth/pollvotes_num.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,4 +0,0 @@
-<tr>
-  <td align="right"><b>{answer_text}</b></td>
-  <td>{answer_percent}% </td>
-</tr>
diff -ruN 1.3.11sr1/layout/professional/preferences/profile.thtml 1.4.0sr5-1/layout/professional/preferences/profile.thtml
--- 1.3.11sr1/layout/professional/preferences/profile.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/preferences/profile.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -9,12 +9,24 @@
       value="{fullname_value}"></td>
   </tr>
   <tr valign="top">
+    <td align="right"><b>{lang_old_password}</b><br>
+      <small>{lang_old_password_text}</small></td>
+    <td><input type="password" name="old_passwd" size="32" maxlength="32"
+      value=""></td>
+  </tr>
+  <tr valign="top">
     <td align="right"><b>{lang_password}</b><br>
       <small>{lang_password_text}</small></td>
     <td><input type="password" name="passwd" size="32" maxlength="32"
       value="{password_value}"></td>
   </tr>
   <tr valign="top">
+    <td align="right"><b>{lang_password_conf}</b><br>
+      <small>{lang_password_text_conf}</small></td>
+    <td><input type="password" name="passwd_conf" size="32" maxlength="32"
+      value="{password_value}"></td>
+  </tr>
+  <tr valign="top">
     <td align="right"><b>{lang_cooktime}</b><br>
       <small>{lang_cooktime_text}</small></td>
     <td>{cooktime_selector}</td>
diff -ruN 1.3.11sr1/layout/professional/profiles/contactauthorform.thtml 1.4.0sr5-1/layout/professional/profiles/contactauthorform.thtml
--- 1.3.11sr1/layout/professional/profiles/contactauthorform.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/profiles/contactauthorform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -17,15 +17,15 @@
                                                                 </tr>
                                                                 <tr>
                                                                     <td align="right"><b>{lang_toname}:</b></td>
-                                                                    <td><input type="text" name="to" size="30" maxlength="96" value=""></td>
+                                                                    <td><input type="text" name="to" size="30" maxlength="96" value="{toname}"></td>
                                                                 </tr>
                                                                 <tr>
                                                                     <td align="right"><b>{lang_toemailaddress}:</b></td>
-                                                                    <td><input type="text" name="toemail" size="30" maxlength="96" value=""></td>
+                                                                    <td><input type="text" name="toemail" size="30" maxlength="96" value="{toemail}"></td>
                                                                 </tr>
                                                                 <tr>
                                                                     <td align="right" valign="top"><b>{lang_shortmessage}:</b></td>
-                                                                    <td><textarea name="shortmsg" rows="8" cols="60"></textarea></td>
+                                                                    <td><textarea name="shortmsg" rows="8" cols="60">{shortmsg}</textarea></td>
                                                                 </tr>
                                                                 <tr>
                                                                     <td colspan="2" class="warning" align="center"><br>{lang_warning}<br><br>
diff -ruN 1.3.11sr1/layout/professional/search/resultrow.thtml 1.4.0sr5-1/layout/professional/search/resultrow.thtml
--- 1.3.11sr1/layout/professional/search/resultrow.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/search/resultrow.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,3 +1,3 @@
-                                <tr>
+                                <tr class="pluginRow{cssid}">
                                     {data_cols}
                                 </tr>
diff -ruN 1.3.11sr1/layout/professional/search/searchblock.thtml 1.4.0sr5-1/layout/professional/search/searchblock.thtml
--- 1.3.11sr1/layout/professional/search/searchblock.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/search/searchblock.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -5,5 +5,5 @@
                                         {headings}
                                     </tr>
                                     {results}
-                                </table><BR>
+                                </table><br>
                                 {end_block}
diff -ruN 1.3.11sr1/layout/professional/search/searchform.thtml 1.4.0sr5-1/layout/professional/search/searchform.thtml
--- 1.3.11sr1/layout/professional/search/searchform.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/search/searchform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -3,17 +3,17 @@
                                 <table border="0" cellspacing="0" cellpadding="3">
                                     <tr>
                                         <td align="right">{lang_keywords}:</td>
-                                        <td><input type="text" name="query" size="35" maxlength="35">
+                                        <td><input type="text" name="query" size="35" maxlength="35" value="{query}">
                                         <select name="keyType">
-                                            <option value="phrase">{lang_exact_phrase}</option>
-                                            <option value="all">{lang_all_words}</option>
-                                            <option value="any">{lang_any_word}</option>
+                                            <option value="phrase" {key_phrase_selected}>{lang_exact_phrase}</option>
+                                            <option value="all" {key_all_selected}>{lang_all_words}</option>
+                                            <option value="any" {key_any_selected}>{lang_any_word}</option>
                                         </select></td>
                                     </tr>
                                     <tr>
                                         <td align="right">{lang_date}:</td>
                                         <td>
-                                            <input type="text" name="datestart" size="10" maxlength="10"> {lang_to} <input type="text" name="dateend" size="10" maxlength="10"> {date_format} 
+                                            <input type="text" name="datestart" size="10" maxlength="10" value="{datestart}"> {lang_to} <input type="text" name="dateend" size="10" maxlength="10" value="{dateend}"> {date_format} 
                                         </td>
                                     </tr>
                                     <tr>
@@ -29,21 +29,30 @@
                                         <td align="right">{lang_type}:</td>
                                         <td>
                                             <select name="type">
-                                                <option selected="selected" value="all">{lang_all}</option>
-                                                <option value="stories">{lang_stories}</option>
-                                                <option value="comments">{lang_comments}</option>
-                                                <option value="links">{lang_links}</option>
-                                                <option value="events">{lang_events}</option>
+                                                <option value="all" {type_all_selected}>{lang_all}</option>
+                                                <option value="stories" {stories_selected}>{lang_stories}</option>
+                                                <option value="comments" {comments_selected}>{lang_comments}</option>
+                                                <option value="events" {events_selected}>{lang_events}</option>
 						                        {plugin_types}
                                             </select>
                                         </td>
                                     </tr>
                                     {author_form_element}
                                     <tr>
+                                        <td align="right">{lang_results}:</td>
+                                        <td>
+                                        <select name="results">
+                                            <option value="10" {10_selected}>10</option>
+                                            <option value="15" {15_selected}>15</option>
+                                            <option value="25" {25_selected}>25</option>
+                                            <option value="50" {50_selected}>50</option>
+                                        </select>&nbsp; {lang_per_page}</td>
+                                    </tr>
+                                    <tr>
                                         <td colspan="2">
                                             <input type="submit" value="{lang_search}">
                                             <input type="hidden" name="mode" value="search">
                                         </td>
                                     </tr>
                                 </table>
-                            </form>
\ No newline at end of file
+                            </form>
diff -ruN 1.3.11sr1/layout/professional/search/searchresults.thtml 1.4.0sr5-1/layout/professional/search/searchresults.thtml
--- 1.3.11sr1/layout/professional/search/searchresults.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/search/searchresults.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,3 +1,3 @@
-                            <span class = basic> {lang_matchesfor} {lang_found} <b>{num_matches}</b> ({search_time} {lang_seconds})</span><br /><br />
+                            <p class="basic"> {lang_matchesfor} {lang_found} <b>{num_matches}</b> ({search_time} {lang_seconds}). {refine_search}</p>
                             {search_blocks}
-                            {search_pager}
\ No newline at end of file
+                            {search_pager}
diff -ruN 1.3.11sr1/layout/professional/stats/singlesummary.thtml 1.4.0sr5-1/layout/professional/stats/singlesummary.thtml
--- 1.3.11sr1/layout/professional/stats/singlesummary.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/stats/singlesummary.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,6 @@
+                                <tr>
+                                    <td>
+                                        {item_text}
+                                    </td>
+                                    <td align="right">{item_stat}</td>
+                                </tr>
diff -ruN 1.3.11sr1/layout/professional/stats/sitestatistics.thtml 1.4.0sr5-1/layout/professional/stats/sitestatistics.thtml
--- 1.3.11sr1/layout/professional/stats/sitestatistics.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/stats/sitestatistics.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -4,19 +4,16 @@
                                     <td align="right">{total_hits}</td>
                                 </tr>
                                 <tr>
-                                    <td>{lang_stories_comments}</td>
-                                    <td align="right">{total_stories} ({total_comments})</td>
-                                </tr>
-                                <tr>
-                                    <td>{lang_polls_answers}</td>
-                                    <td align="right">{total_polls} ({total_answers})</td>
+                                    <td>{lang_active_users}</td>
+                                    <td align="right">{active_users}</td>
                                 </tr>
                                 <tr>
-                                    <td>{lang_links_clicks}</td>
-                                    <td align="right">{total_links} ({total_clicks})</td>
+                                    <td>{lang_stories_comments}</td>
+                                    <td align="right">{total_stories} ({total_comments})</td>
                                 </tr>
                                 <tr>
                                     <td>{lang_events}</td>
                                     <td align="right">{total_events}</td>
                                 </tr>
+                                {summary_row}
                             </table>
diff -ruN 1.3.11sr1/layout/professional/stats/stats.thtml 1.4.0sr5-1/layout/professional/stats/stats.thtml
--- 1.3.11sr1/layout/professional/stats/stats.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/stats/stats.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,5 +0,0 @@
-                            {site_statistics}
-                            {user_stats}
-                            {story_stats}
-                            {poll_stats}
-                            {link_stats}
diff -ruN 1.3.11sr1/layout/professional/storytext.thtml 1.4.0sr5-1/layout/professional/storytext.thtml
--- 1.3.11sr1/layout/professional/storytext.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/storytext.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1,23 +1,27 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
     <tr>
-      <td width="100%" class="story-title"><img src="{site_url}/images/speck.gif" width="1" height="0" alt=""><h2><a href="{article_url}" class="non-ul">{story_title}</a></h2></td>
+      <td width="100%" class="story-title"><img src="{site_url}/images/speck.gif" width="1" height="0" alt=""><h2>{start_storylink_anchortag}{story_title}{end_storylink_anchortag}</h2></td>
       <td class="story-title" width="5%" align="right" nowrap>&nbsp;{email_icon}&nbsp;{print_icon}&nbsp;{pdf_icon}</td>
     </tr>
     <tr>
-      <td class="story-box" colspan="2"><table border="0" cellpadding="3" cellspacing="0" width="100%"><tr><td class="story-information" width="100%">{story_date}<br>{lang_contributed_by} {start_contributedby_anchortag}{contributedby_user}{end_contributedby_anchortag}<br>{lang_views}: {story_hits}</td></tr>
-                            
-                                <tr>
-                                    <td>
-                                        <p>{story_anchortag_and_image}{story_introtext}</p>
-                                    </td></tr></table>
-                                	<table border="0" cellpadding="3" cellspacing="0" width="100%">
-
-						
-							<tr><td align="center">{edit_link}<br>
-							  {readmore_link} {start_comments_anchortag}{comments_text}{end_comments_anchortag}<br>
-{recent_post_anchortag}<br></td></tr>
-							
-							</table></td>
+      <td class="story-box" colspan="2">
+            <table border="0" cellpadding="3" cellspacing="0" width="100%">
+                <tr><td class="story-information" width="100%">
+                        {story_date}<br>
+                        {lang_contributed_by} {start_contributedby_anchortag}{contributedby_user}{end_contributedby_anchortag}<br>
+                        {lang_views} {story_hits}
+                </td></tr>
+                <tr><td>{story_anchortag_and_image}{story_introtext}</td></tr>
+            </table>
+            <table border="0" cellpadding="3" cellspacing="0" width="100%">
+              <tr><td align="center">{edit_link}&nbsp;{page_selector}<br>
+                                     {readmore_link} {post_comment_link}<br>
+                                     {start_comments_anchortag}{comments_with_count}{end_comments_anchortag} {start_trackbacks_anchortag}{trackbacks_with_count}{end_trackbacks_anchortag}
+              </td></tr>
+            </table>
+      </td>
     </tr>
   </table>
-<table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider"><tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr></table> 
+<table cellspacing="0" cellpadding="0" align="center" width="100%" class="block-divider">
+    <tr><td><img src="{site_url}/images/speck.gif" width="1" height="2" alt=""></td></tr>
+</table> 
diff -ruN 1.3.11sr1/layout/professional/style.css 1.4.0sr5-1/layout/professional/style.css
--- 1.3.11sr1/layout/professional/style.css	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/style.css	2006-08-08 02:39:06.000000000 -0500
@@ -34,10 +34,12 @@
   background:transparent;
   color:#FF0000
 }
-body {
+.sitebody {
   background:#FFFFFF;
   color:#000000;
   font:100% tahoma,verdana,helvetica,arial,sans-serif;
+  padding:0px;
+  margin:0px;
   /*
     scrollbar-3dlight-color:#D1D7DC;
     scrollbar-arrow-color:#006699;
@@ -47,7 +49,6 @@
     scrollbar-shadow-color:#DEE3E7;
     scrollbar-track-color:#EFEFEF;
   */
-  margin:0px
 }
 h1 {
   font-size: 125%;
@@ -55,6 +56,9 @@
 h2 {
   font-size: 100%;
 }
+img {
+  border: 0;
+}
 input, submit {
   color:#000000;
   font:82% Tahoma,verdana,helvetica,arial,sans-serif
@@ -73,7 +77,27 @@
 }
 th {
   color:#000000;
-  font:bold smaller Tahoma,verdana,helvetica,arial,sans-serif
+  background-color: #DAE0ED;
+  font:bold smaller Tahoma,verdana,helvetica,arial,sans-serif;
+  padding-left:3px;
+}
+.admin-list-table {
+  width:100%;
+  text-align:left;
+  border-spacing:1px;
+}
+.admin-list-table form {
+  margin:0px;
+}
+.admin-list-field {
+  text-align:left;
+  padding-left:5px;
+  padding-right:5px;
+}
+.admin-list-headerfield {
+  text-align:left;
+  padding-left:5px;
+  padding-right:5px;
 }
 .block-divider {
   background:#FFFFFF;
@@ -449,6 +473,12 @@
 .pagenav {
   text-align: center;
 }
+.row-even {
+  background-color: #E7E7E7;
+}
+.row-odd {
+  background-color: #FFFFFF;
+}
 .searchauth {
   background:transparent;
   color:#000000;
@@ -523,112 +553,93 @@
   border:1px solid #7B9EBD
 }
 
-/******************   NEW CSS ADDED FOR FORUM Ver 2.3 ************************/
 
-TD.navbar      {
-    color: #FFFFFF;
-    background-color: #666666;
-    font-family: Verdana, sans-serif;
-    font-size: 10px;
-    line-height: 32px;
-    vertical-align: middle;
-    text-align: center;
-    font-weight: bold;
-    }
+/* Default Plugin CSS Declarations */
+/* Recommended CSS to be used by Plugin Authors - allows easier site themeing */
 
-TD.navbar a:link, TD.navbar a:visited { 
-    color: #FFFFFF;
-    font-style: normal;
-    font-weight: normal;
-    font-size: 10px;
-    font-family: Verdana, sans-serif;
-    text-decoration: none;
-    padding: 2px
-    }
+.plugin                { color: #000; background-color: #EFEFEF; font-weight: normal; font-size: 12pt; font-family: Verdana, sans-serif; border:1px solid #CCC }
+.plugin th             { color: #000; font-size: .9em; background-color: #B7C1DC; padding:5px; text-align:left;}
+.plugin tr             { vertical-align:top; }
+.plugin td             { padding:2px 5px 2px 5px; }
+.pluginBG              { background-color: #EFEFEF; }
+.pluginAltBG           { background-color: #1C1E2D; }
+.pluginTitle           { color: #1C1E2D; background-color:#EFEFEF; font-weight: bold; font-size: 85%; font-family: Verdana, sans-serif; }
+.pluginHeader          { color: #1A3955; font-weight: bolder; font-size: 95%; background-color: #CCC; padding:5px; }
+.pluginFooter          { background-color:#EFEFEF; }
+.pluginAlert           { padding:5px 15px 5px 15px; color:#D8010E; background-color: #FEF1B4; font-weight:bold;}
+.pluginInfo            { padding:5px 15px 5px 15px; color:#707070; background-color: #FEF1B4; font-size: 8pt; font-weight:normal;}
+.pluginSubTable        { color: #000; background-color: #CCC; font-weight: normal; font-size: 12pt; font-family: Verdana, sans-serif; border:1px solid #CCC }
+.pluginSubTable th     { color: #000; font-size: .7em; background-color: #C9D1E4; padding:5px; text-align:left;}
+.pluginSubTable tr     { vertical-align:top; }
+.pluginSolidOutline    { background-color: #396998; }
+.pluginSolidFill       { background-color: #1A3955; }
+.pluginCellTitle       { color: #1C1E2D; font-weight: bold; font-size: 80%; font-family: Verdana, sans-serif; background-color: #E5E5EA; }
+.pluginCellFill        { background-color: #E5E5EA; }
+.pluginCellText        { color: #000; font-weight: normal; font-size: 75%; font-family: Verdana, sans-serif; background-color: #F7F7F7; }
+.pluginTinyText        { font-size:70%; }
+.pluginSmallText       { font-size:80%; }
+.pluginMediumText      { font-size:85%; }
+.pluginLargeText       { font-size:90%; }
+.pluginAltText         { color: #FFF }
+
+.pluginRow1 td         { background-color: #EFEFEF; }
+.pluginRow2 td         { background-color: #D9D9D9; }
+
+.pluginRollOver         { color: #1C1E2D; background-color: #FFFF8F; }
+.pluginRollOut          { color: #1C1E2D; background-color: #F7F7F7; }
+
+.pluginLinks A:link     { color: #0000FF; font-style: normal; font-weight: normal; text-decoration: none }
+.pluginLinks A:visited  { color: #1E1E8E; font-style: normal; font-weight: normal; text-decoration: none }
+.pluginLinks A:hover    { color: #0000FF; font-style: normal; font-weight: normal; text-decoration: underline }
+.pluginBreadCrumbs, .pluginBreadCrumbs A:link     { color: #EFEFEF; font-style: normal; font-weight: normal; text-decoration: none }
+.pluginBreadCrumbs A:visited  { color: #EFEFEF; font-style: normal; font-weight: normal; text-decoration: none }
+.pluginBreadCrumbs A:hover    { color: #FFD700; font-style: normal; font-weight: normal; text-decoration: none }
 
-TD.navbar a:hover { 
-    color: #FFCC00;
-    font-style: normal;
-    font-weight: normal;
-    font-size: 10px;
-    font-family: Verdana, sans-serif;
+A.pluginButton:link, A.pluginButton:visited {
+    color: #000;
+    text-align: center;
+    padding-top: 2px;
+    display: block;
+    height: 19px;
     text-decoration: none;
-    padding: 2px;
-    }
+    background-color: transparent;
+}
+A.pluginButton:hover { 
+    color: blue; 
+    text-align: center; 
+    padding-top: 2px; 
+    background: center url(navbar/images/button_over.gif); 
+    background-repeat: repeat-x; 
+    display: block; 
+    height: 19px; 
+    text-decoration: none; 
+    background-color: 
+    transparent;
+}
 
-#forumheading          { text-align:left; background-color: #FFFFFF; }
-.forumtext             { color: #000; }
-.forumclass1           { text-align:left; background-color: #BFBFBF; }
-.forumclass2           { text-align:left; background-color: #CCCCCC; }
-.forumclass3           { text-align:left; background-color: #EFEFEF; }
-.forumclass4           { text-align:left; background-color: #CCCCCC; }
-.forumoutline          { background-color: #CCCCCC; }
-
-/* These CSS declarations for links are used in a few places but are here for theme designers to use if needed - can be added to templates  */
-.forumlinks A:link            { color: #000000; font-style: normal; font-size: 11px; font-family: Verdana, sans-serif; text-decoration: underline }
-.forumlinks A:visited        { color: #000000; font-style: normal; font-size: 11px; font-family: Verdana, sans-serif; text-decoration: underline }
-.forumlinks A:hover            { color: #000000; font-style: normal; font-size: 11px; font-family: Verdana, sans-serif; text-decoration: underline }
-
-/* alternate table row colours */
-.forumAlt1   { background-color: #F5F5F5; }
-.forumAlt2   { background-color: #FFFFFF; }
-
-.quotebox   { 
-     border-style: ridge; 
-     background-color: #ECE9D8; 
-     padding:10px;
-     margin: 0px;
-     }
-
-.quotetext {
-     color:#000; 
-     font-weight: normal; 
-     background-color: #ECE9D8; 
-     font-family: Verdana, sans-serif; 
-     font-size: 9px; 
-     }
 
-.forumCode  { 
-    background-color: #ECE9D8; 
-    color: #000;
-    width: 470px;
-    height: 160px;
-    overflow: auto;
-    font-size: 11px;
-    min-height: 50px;
-    max-height: 120px;
-    margin: 5px 0px 5px 5px;
-    padding:5px;
-    border: 1px dashed black;
-    }
-
-.forumTitle   {
-    color: #000000;
-    background-color: #EFEFEF;
-    font-weight: bold;
-    font-size: 12px;
-    line-height: 14pt;
-    font-family: Verdana, Helvetica, sans-serif; }
-
-TD.forumRollOver  { 
-    text-align:left;
-    background-color: #FFFFFF; 
-    font-family: Verdana, Helvetica, sans-serif; 
-    color: #000033  
-    }
-TD.forumRollOut   { 
-    text-align:left;
-    background-color: #EFEFEF; 
-    font-family: Verdana, Helvetica, sans-serif; 
-    color: #000033  
-    }
-
-.cblockTitle    {
-    color: #FFFFFF;
-    background-color: #506790;
-    font-weight: bold;
-    font-size: 12px;
-    line-height: 16pt;
-    padding-left:5px;
-    font-family: Verdana, Helvetica, sans-serif;
-}
+/* Navbar Class CSS */
+#navcontainer a { text-decoration: none; }
+#navcontainer ul  {
+    margin: 0px;
+    list-style-type: none;
+    position: relative;
+    border: 0px;
+    background-color: #667AB3;
+    padding: 5px 0px 0px 0px;
+    height:26px;
+}
+
+#navcontainer li { float: left; display: inline; margin:0px; padding-top:6px; padding-bottom:5px;}
+#navcontainer ul a,
+#navcontainer ul a:link,
+#navcontainer ul a:visited  { background-color: #4358E1; border:0px solid #4358E1; color: white; padding: 5px; margin:2px; }
+#navcontainer ul a:hover,
+#navcontainer ul a:focus  { background-color: #55516B; border: 0px solid black; padding-bottom:7px; color: white; }
+
+/* current Link */
+#navcontainer ul a#current { background-color: #F2F2F2; border: 0px solid black; padding-bottom:7px; color: #4358E1; }
+#navcontainer ul a#current:link,
+#navcontainer ul a#current:visited { font-weight: bold; }
+
+/* End of Default Plugin CSS Declarations */
diff -ruN 1.3.11sr1/layout/professional/submit/submitlink.thtml 1.4.0sr5-1/layout/professional/submit/submitlink.thtml
--- 1.3.11sr1/layout/professional/submit/submitlink.thtml	2004-12-31 10:02:58.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/submit/submitlink.thtml	1969-12-31 18:00:00.000000000 -0600
@@ -1,35 +0,0 @@
-                            <form action="{site_url}/submit.php" method="post">
-                                <table border="0" cellspacing="0" cellpadding="3">
-                                    <tr>
-                                        <td align="right"><b>{lang_title}:</b></td>
-                                        <td><input type="text" size="36" maxlength="96" name="title"></td>
-                                    </tr>
-                                    <tr>
-                                        <td align="right"><b>{lang_link}:</b></td>
-                                        <td><input type="text" size="36" maxlength="{max_url_length}" name="url" value="http://"></td>
-                                    </tr>
-                                    <tr>
-                                        <td align="right"><b>{lang_category}:</b></td>
-                                        <td>
-                                            <select name="categorydd">
-                                                {link_category_options}<option>{lang_other}</option>
-                                            </select> 
-                                            <b>{lang_ifother}:</b> <input type="text" name="category" size="12" maxlength="32">
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td align="right"><b>{lang_description}:</b></td>
-                                        <td><textarea name="description" cols="45" rows="8"></textarea></td>
-                                    </tr>
-                                    <tr>
-                                        <td align="center" colspan="2">{lang_htmlnotallowed}</td>
-                                    </tr>
-                                    <tr>
-                                        <td align="center" colspan="2">
-                                            <input type="hidden" name="mode" value="{lang_submit}">
-                                            <input type="hidden" name="type" value="link">
-                                            <input type="submit" value="{lang_submit}">
-                                        </td>
-                                    </tr>
-                                </table>
-                            </form>
diff -ruN 1.3.11sr1/layout/professional/submit/submitstory_advanced.thtml 1.4.0sr5-1/layout/professional/submit/submitstory_advanced.thtml
--- 1.3.11sr1/layout/professional/submit/submitstory_advanced.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/submit/submitstory_advanced.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,56 @@
+<script type="text/javascript">
+    // Setup editor path for FCKeditor JS Functions
+    geeklogEditorBasePath = "{site_url}/fckeditor/" ;
+</script>
+<script type="text/JavaScript" src="{site_url}/javascript/submitstory_fckeditor.js"></script>
+
+                            <form action="{site_url}/submit.php" method="post" onSubmit='set_postcontent();'>
+                                <table border="0" cellspacing="0" cellpadding="3">
+                                    <tr>
+                                        <td align="right"><b>{lang_username}:</b></td>
+                                        <td>{story_username} [ <a href="{status_url}">{lang_loginout}</a>{seperator}{create_account} ]</td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right"><b>{lang_title}:</b></td>
+                                        <td><input type="text" size="36" maxlength="96" name="title" value="{story_title}"></td>
+                                    </tr>
+                                    <tr>
+                                        <td align="right"><b>{lang_topic}:</b></td>
+                                        <td>
+                                            <select name=tid>
+                                                {story_topic_options}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr valign="top">
+                                        <td align="right"><b>{lang_story}:</b></td>
+                                        <td>
+                                            <div id="text_editor" style="display:{show_texteditor};">
+                                                <textarea id="introtext" name="introtext" cols="45" rows="15">{story_introtext}</textarea>
+                                            </div>
+                                            <div  id="html_editor" style="display:{show_htmleditor};">
+                                                <textarea id="introhtml" name="introhtml" cols="45" rows="15">{story_introtext}</textarea>
+                                            </div>
+                                        </td>
+                                    </tr>
+                                    <tr valign="top">
+                                        <td align="right"><b>{lang_postmode}:</b></td>
+                                        <td>
+                                            <select id="sel_editmode" name="postmode" {change_editormode}>
+                                                {story_postmode_options}
+                                            </select>
+                                            <br><span class="warningsmall">{allowed_html}</span>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td align="center" colspan="2">
+                                            <input type="hidden" name="type" value=story>
+                                            <input type="hidden" name="uid" value="{story_uid}">
+                                            <input type="hidden" name="sid" value="{story_sid}">
+                                            <input type="hidden" name="date" value="{story_date}">
+                                            {save_button}
+                                            <input name="mode" type="submit" value="{lang_preview}">
+                                        </td>
+                                    </tr>
+                                </table>
+                            </form>
diff -ruN 1.3.11sr1/layout/professional/trackback/formattedcomment.thtml 1.4.0sr5-1/layout/professional/trackback/formattedcomment.thtml
--- 1.3.11sr1/layout/professional/trackback/formattedcomment.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/trackback/formattedcomment.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,5 @@
+<p>
+<a href="{trackback_url}">{trackback_title}</a> {trackback_from_blog_name}<br>
+{trackback_excerpt_readmore}{excerpt_br}
+{lang_tracked_on} {trackback_date} {delete_option}
+</p>
diff -ruN 1.3.11sr1/layout/professional/trackback/trackbackcomment.thtml 1.4.0sr5-1/layout/professional/trackback/trackbackcomment.thtml
--- 1.3.11sr1/layout/professional/trackback/trackbackcomment.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/trackback/trackbackcomment.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,3 @@
+<p>
+  {formatted_comment}
+</p>
diff -ruN 1.3.11sr1/layout/professional/trackback/trackback.thtml 1.4.0sr5-1/layout/professional/trackback/trackback.thtml
--- 1.3.11sr1/layout/professional/trackback/trackback.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/trackback/trackback.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<h2><a name="trackback">{lang_trackback}</a></h2>
+<p>{lang_trackback_url} {trackback_url}</p>
+{lang_trackback_comments_no_link}
+{trackback_comments}
diff -ruN 1.3.11sr1/layout/professional/users/loginform.thtml 1.4.0sr5-1/layout/professional/users/loginform.thtml
--- 1.3.11sr1/layout/professional/users/loginform.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/users/loginform.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -5,16 +5,17 @@
                                                         <form action="{site_url}/users.php" method="post">
                                                             <table border="0" cellspacing="0" cellpadding="3">
                                                                 <tr>
-                                                                    <td colspan="2">{lang_message}</td>
+                                                                    <td colspan="2">{lang_message}  {lang_newreglink}</td>
                                                                 </tr>
                                                                 <tr>
-                                                                    <td align="right"><b>{lang_username}:</b></td>
+                                                                    <td align="right"><b><label for="loginname">{lang_username}</label>:</b></td>
                                                                     <td><input type="text" size="16" name="loginname"></td>
                                                                 </tr>
+                                                                {services}
                                                                 <tr>
-                                                                    <td align="right"><b>{lang_password}:</b></td>
+                                                                    <td align="right"><b><label for="passwd">{lang_password}</label>:</b></td>
                                                                     <td><input type="password" name="passwd" size="16">
-									&nbsp;<a href="{site_url}/users.php?mode=getpassword">{lang_forgetpassword}</a>
+                                                                        &nbsp;<a href="{site_url}/users.php?mode=getpassword">{lang_forgetpassword}</a>
                                                                     </td>
                                                                 </tr>
                                                                 <tr>
@@ -29,4 +30,3 @@
                                                 </tr>
                                             </table>
                                             {end_block}
-
diff -ruN 1.3.11sr1/layout/professional/users/newpassword.thtml 1.4.0sr5-1/layout/professional/users/newpassword.thtml
--- 1.3.11sr1/layout/professional/users/newpassword.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/users/newpassword.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -8,7 +8,11 @@
   </tr>
   <tr>
     <td align="right">{lang_newpassword}:</td>
-    <td align="left"><input type="password" name="passwd" size="16">
+    <td align="left"><input type="password" name="passwd" size="16"></td>
+  </tr>
+  <tr>
+    <td align="right">{lang_newpassword_conf}:</td>
+    <td align="left"><input type="password" name="passwd_conf" size="16"></td>
   </tr>
   <tr>
     <td colspan="2" align="center">
diff -ruN 1.3.11sr1/layout/professional/users/profile.thtml 1.4.0sr5-1/layout/professional/users/profile.thtml
--- 1.3.11sr1/layout/professional/users/profile.thtml	2004-12-31 10:03:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/users/profile.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -1 +1,75 @@
-                            {start_block_userprofile} <table border="0" cellspacing="0" cellpadding="3"> <tr valign="top"> <td align="right"><b>{lang_username}:</b></td> <td>{username} ({user_fullname})<br> {user_photo}</td> </tr> <tr valign="top"> <td align="right"><b>{lang_membersince}:</b></td> <td>{user_regdate}</td> </tr> <tr valign="top"> <td align="right"><b>{lang_email}:</b></td> <td><a href="{site_url}/profiles.php?uid={user_id}">{lang_sendemail}</a></td> </tr> <tr valign="top"> <td align="right"><b>{lang_homepage}:</b></td> <td><a href="{user_homepage}">{user_homepage}</a></td> </tr><tr valign="top"> <td align="right"><b>{lang_location}:</b></td> <td>{user_location}</td> </tr><tr valign="top"> <td align="right"><b>{lang_bio}:</b></td> <td>{user_bio}</td> </tr> <tr valign="top"> <td align="right"><b>{lang_pgpkey}:</b></td> <td>{user_pgp}</td> </tr> </table> {end_block} {start_block_last10stories} <table border="0" cellpadding="3" cellspacing="0" width="100%"> <tr> <td> <table border="0" cellspacing="0" cellpadding="3"> {story_row} </table> </td> </tr> </table> {end_block} {start_block_last10comments} <table border="0" cellpadding="3" cellspacing="0" width="100%"> <tr> <td> <table border="0" cellspacing="0" cellpadding="3"> {comment_row} </table> </td> </tr> </table> {end_block} {start_block_postingstats} <table border="0" cellpadding="3" cellspacing="0" width="100%"> <tr> <td> <table border="0" cellspacing="0" cellpadding="3" width="100%"> <tr> <td>{lang_number_stories}</td><td>{number_stories}</td> </tr> <tr> <td>{lang_number_comments}</td><td>{number_comments}</td> </tr> <tr> <td colspan="2"><a href="{site_url}/search.php?query=&amp;datestart=&amp;dateend=&amp;topic=0&amp;type=all&amp;author={user_id}&amp;mode=search">{lang_all_postings_by}</a></td> </tr> </table> </td> </tr> </table> {end_block} 
+{start_block_userprofile}
+    <table border="0" cellspacing="0" cellpadding="3">
+        <tr valign="top">
+            <td align="right"><b>{lang_username}:</b></td>
+            <td>{username} ({user_fullname})<br> {user_photo}</td>
+        </tr>
+        <tr valign="top">
+            <td align="right"><b>{lang_membersince}:</b></td>
+            <td>{user_regdate}</td>
+        </tr>
+        <tr valign="top">
+            <td align="right"><b>{lang_email}:</b></td>
+            <td><a href="{site_url}/profiles.php?uid={user_id}">{lang_sendemail}</a></td>
+        </tr>
+        <tr valign="top">
+            <td align="right"><b>{lang_homepage}:</b></td>
+            <td><a href="{user_homepage}">{user_homepage}</a></td>
+        </tr>
+        <tr valign="top">
+            <td align="right"><b>{lang_location}:</b></td>
+            <td>{user_location}</td>
+        </tr>
+        <tr valign="top">
+            <td align="right"><b>{lang_bio}:</b></td>
+            <td>{user_bio}</td>
+        </tr>
+        <tr valign="top">
+            <td align="right"><b>{lang_pgpkey}:</b></td>
+            <td>{user_pgp}</td>
+        </tr>
+    </table>
+{end_block}
+{start_block_last10stories}
+    <table border="0" cellpadding="3" cellspacing="0" width="100%">
+        <tr>
+            <td>
+                <table border="0" cellspacing="0" cellpadding="3">
+                    {story_row}
+                </table>
+            </td>
+        </tr>
+    </table>
+{end_block}
+{start_block_last10comments}
+    <table border="0" cellpadding="3" cellspacing="0" width="100%">
+        <tr>
+            <td>
+                <table border="0" cellspacing="0" cellpadding="3">
+                    {comment_row}
+                </table>
+            </td>
+        </tr>
+    </table>
+{end_block}
+{start_block_postingstats}
+    <table border="0" cellpadding="3" cellspacing="0" width="100%">
+        <tr>
+            <td>
+                <table border="0" cellspacing="0" cellpadding="3" width="100%">
+                    <tr>
+                        <td>{lang_number_stories}</td>
+                        <td>{number_stories}</td>
+                    </tr>
+                    <tr>
+                        <td>{lang_number_comments}</td>
+                        <td>{number_comments}</td>
+                    </tr>
+                    <tr>
+                        <td colspan="2"><a href="{site_url}/search.php?query=&amp;datestart=&amp;dateend=&amp;topic=0&amp;type=all&amp;author={user_id}&amp;mode=search">{lang_all_postings_by}</a></td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    </table>
+{end_block} 
diff -ruN 1.3.11sr1/layout/professional/users/services.thtml 1.4.0sr5-1/layout/professional/users/services.thtml
--- 1.3.11sr1/layout/professional/users/services.thtml	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/layout/professional/users/services.thtml	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,4 @@
+<tr>
+	<td align="right"><b><label for="service">{lang_service}</label>:</b></td>
+  <td>{select_service}</td>
+</tr>
\ No newline at end of file
diff -ruN 1.3.11sr1/lib-common.php 1.4.0sr5-1/lib-common.php
--- 1.3.11sr1/lib-common.php	2005-08-12 14:15:52.000000000 -0500
+++ 1.4.0sr5-1/lib-common.php	2006-08-08 02:55:55.000000000 -0500
@@ -2,19 +2,19 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | lib-common.php                                                            |
 // |                                                                           |
 // | Geeklog common library.                                                   |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
-// |          Vincent Furia     - vinny01@users.sourceforge.net                |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// |          Vincent Furia     - vinny01 AT users DOT sourceforge DOT net     |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -33,7 +33,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: lib-common.php,v 1.408.2.1 2005/07/02 16:23:00 dhaun Exp $
+// $Id: lib-common.php,v 1.514 2006/02/18 14:18:29 dhaun Exp $
 
 // Prevent PHP from reporting uninitialized variables
 error_reporting( E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR );
@@ -94,7 +94,7 @@
 }
 
 // this file can't be used on its own - redirect to index.php
-if( eregi( 'lib-common.php', $HTTP_SERVER_VARS['PHP_SELF'] ))
+if( eregi( 'lib-common.php', $_SERVER['PHP_SELF'] ))
 {
     echo COM_refresh( $_CONF['site_url'] . '/index.php' );
     exit;
@@ -242,20 +242,28 @@
 // way if user logged in and set theme and then logged out we would still know
 // which theme to show them.
 
-if( !empty( $HTTP_POST_VARS['usetheme'] ) && is_dir( $_CONF['path_themes']
-        . $HTTP_POST_VARS['usetheme'] ))
+$usetheme = '';
+if( isset( $_POST['usetheme'] ))
 {
-    $_CONF['theme'] = $HTTP_POST_VARS['usetheme'];
-    $_CONF['path_layout'] = $_CONF['path_themes'] . $_CONF['theme'] . '/';      
-    $_CONF['layout_url'] = $_CONF['site_url'] . '/layout/' . $_CONF['theme'];   
+    $usetheme = preg_replace( '/[^a-zA-Z0-9\-_\.]/', '', $_POST['usetheme'] );
+    $usetheme = str_replace( '..', '', $usetheme );
+}
+if( !empty( $usetheme ) && is_dir( $_CONF['path_themes'] . $usetheme ))
+{
+    $_CONF['theme'] = $usetheme;
+    $_CONF['path_layout'] = $_CONF['path_themes'] . $_CONF['theme'] . '/';
+    $_CONF['layout_url'] = $_CONF['site_url'] . '/layout/' . $_CONF['theme'];
 }
 else if( $_CONF['allow_user_themes'] == 1 )
 {
-    if( isset( $HTTP_COOKIE_VARS[$_CONF['cookie_theme']]) && empty($_USER['theme'] ))
+    if( isset( $_COOKIE[$_CONF['cookie_theme']] ) && empty( $_USER['theme'] ))
     {
-        if( is_dir( $_CONF['path_themes'] . $HTTP_COOKIE_VARS[$_CONF['cookie_theme']] ))
+        $theme = preg_replace( '/[^a-zA-Z0-9\-_\.]/', '',
+                               $_COOKIE[$_CONF['cookie_theme']] );
+        $theme = str_replace( '..', '', $theme );
+        if( is_dir( $_CONF['path_themes'] . $theme ))
         {
-            $_USER['theme'] = $HTTP_COOKIE_VARS[$_CONF['cookie_theme']];
+            $_USER['theme'] = $theme;
         }
     }
 
@@ -285,14 +293,24 @@
     require_once( $_CONF['path_layout'] . 'functions.php' );
 }
 
+// themes can now specify the default image type
+// fall back to 'gif' if they don't
+
+if( empty( $_IMAGE_TYPE ))
+{
+    $_IMAGE_TYPE = 'gif';
+}
+
 // Similarly set language
 
-if( isset( $HTTP_COOKIE_VARS[$_CONF['cookie_language']]) && empty( $_USER['language'] ))
+if( isset( $_COOKIE[$_CONF['cookie_language']] ) && empty( $_USER['language'] ))
 {
-    if( is_file( $_CONF['path_language'] . $HTTP_COOKIE_VARS[$_CONF['cookie_language']] . '.php' ))
+    $language = preg_replace( '/[^a-z0-9\-_]/', '',
+                              $_COOKIE[$_CONF['cookie_language']] );
+    if( is_file( $_CONF['path_language'] . $language . '.php' ))
     {
-        $_USER['language'] = $HTTP_COOKIE_VARS[$_CONF['cookie_language']];
-        $_CONF['language'] = $HTTP_COOKIE_VARS[$_CONF['cookie_language']];
+        $_USER['language'] = $language;
+        $_CONF['language'] = $language;
     }
 }
 else if( !empty( $_USER['language'] ))
@@ -307,7 +325,7 @@
 if( empty( $_USER['uid'] ) OR $_USER['uid'] == 1 )
 {
     // The following code handles anonymous users so they show up properly
-    DB_query( "DELETE FROM {$_TABLES['sessions']} WHERE remote_ip = '{$HTTP_SERVER_VARS['REMOTE_ADDR']}' AND uid = 1" );
+    DB_query( "DELETE FROM {$_TABLES['sessions']} WHERE remote_ip = '{$_SERVER['REMOTE_ADDR']}' AND uid = 1" );
 
     $tries = 0;
     do
@@ -318,7 +336,7 @@
         $curtime = time();
 
         // Insert anonymous user session
-        $result = DB_query( "INSERT INTO {$_TABLES['sessions']} (sess_id, start_time, remote_ip, uid) VALUES ($sess_id, $curtime, '{$HTTP_SERVER_VARS['REMOTE_ADDR']}', 1)", 1 );
+        $result = DB_query( "INSERT INTO {$_TABLES['sessions']} (sess_id, start_time, remote_ip, uid) VALUES ($sess_id, $curtime, '{$_SERVER['REMOTE_ADDR']}', 1)", 1 );
         $tries++;
     }
     while(( $result === false) && ( $tries < 5 ));
@@ -358,13 +376,13 @@
 
 $_RIGHTS = explode( ',', SEC_getUserPermissions() );
 
-if( isset( $HTTP_GET_VARS['topic'] ))
+if( isset( $_GET['topic'] ))
 {
-    $topic = COM_applyFilter( $HTTP_GET_VARS['topic'] );
+    $topic = COM_applyFilter( $_GET['topic'] );
 }
-else if( isset( $HTTP_POST_VARS['topic'] ))
+else if( isset( $_POST['topic'] ))
 {
-    $topic = COM_applyFilter( $HTTP_POST_VARS['topic'] );
+    $topic = COM_applyFilter( $_POST['topic'] );
 }
 else
 {
@@ -450,12 +468,13 @@
 /**
 * Gets all installed themes
 *
-* Gets all directory names in /path/to/geeklog/themes/ and returns all the
-* directories
+* Returns a list of all the directory names in $_CONF['path_themes'], i.e.
+* a list of all the theme names.
+*
+* @param    bool    $all    if true, return all themes even if users aren't allowed to change their default themes
+* @return   array           All installed themes
 *
-* @return   array   All installed themes
 */
-
 function COM_getThemes( $all = false )
 {
     global $_CONF;
@@ -503,11 +522,12 @@
     if( empty( $_CONF['menu_elements'] ))
     {
         $_CONF['menu_elements'] = array( // default set of links
-                'contribute', 'links', 'polls', 'calendar', 'search', 'stats',
-                'plugins' );
+                'contribute', 'calendar', 'search', 'stats',
+                'directory', 'plugins' );
     }
 
     $anon = ( empty( $_USER['uid'] ) || ( $_USER['uid'] <= 1 )) ? true : false;
+    $menuCounter = 0;
     $allowedCounter = 0;
     $counter = 0;
 
@@ -596,26 +616,32 @@
                     {
                         $header->parse( 'menu_elements', 'menuitem', true );
                     }
+                    $menuCounter++;
                 }
                 $url = '';
                 $label = '';
                 break;
 
-            case 'home':
-                $url = $_CONF['site_url'] . '/';
-                $label = $LANG01[90];
-                break;
-
-            case 'links':
-                $url = $_CONF['site_url'] . '/links.php';
-                $label = $LANG01[72];
-                if( $anon &&
-                    ( $_CONF['loginrequired'] || $_CONF['linksloginrequired'] ))
+            case 'directory':
+                $url = $_CONF['site_url'] . '/directory.php';
+                if( !empty( $topic ))
+                {
+                    $url = COM_buildUrl( $url . '?topic='
+                                         . urlencode( $topic ));
+                }
+                $label = $LANG01[117];
+                if( $anon && ( $_CONF['loginrequired'] ||
+                        $_CONF['directoryloginrequired'] ))
                 {
                     $allowed = false;
                 }
                 break;
 
+            case 'home':
+                $url = $_CONF['site_url'] . '/';
+                $label = $LANG01[90];
+                break;
+
             case 'plugins':
                 for( $i = 1; $i <= $num_plugins; $i++ )
                 {
@@ -631,6 +657,7 @@
                     {
                         $header->parse( 'menu_elements', 'menuitem', true );
                     }
+                    $menuCounter++;
 
                     next( $plugin_menu );
                 }
@@ -638,16 +665,6 @@
                 $label = '';
                 break;
 
-            case 'polls':
-                $url = $_CONF['site_url'] . '/pollbooth.php';
-                $label = $LANG01[73];
-                if( $anon &&
-                    ( $_CONF['loginrequired'] || $_CONF['pollsloginrequired'] ))
-                {
-                    $allowed = false;
-                }
-                break;
-
             case 'prefs':
                 $url = $_CONF['site_url'] . '/usersettings.php?mode=edit';
                 $label = $LANG01[48];
@@ -672,6 +689,11 @@
                     $allowed = false;
                 }
                 break;
+
+            default: // unknown entry
+                $url = '';
+                $label = '';
+                break;
         }
 
         if( !empty( $url ) && !empty( $label ))
@@ -686,6 +708,7 @@
             {
                 $header->parse( 'menu_elements', 'menuitem', true );
             }
+            $menuCounter++;
 
             if( $allowed )
             {
@@ -703,6 +726,10 @@
         }
     }
 
+    if( $menuCounter == 0 )
+    {
+        $header->parse( 'menu_elements', 'menuitem_none', true );
+    }
     if( $allowedCounter == 0 )
     {
         $header->parse( 'allowed_menu_elements', 'menuitem_none', true );
@@ -717,10 +744,11 @@
 *
 * Programming Note:
 *
-* The two functions COM_siteHeader and COM_siteFooter provide the framework for page display
-* in Geeklog.  COM_siteHeader controls the display of the Header and left blocks and COM_siteFooter
-* controls the dsiplay of the right blocks and the footer.  You use them like a sandwich.  Thus the
-* following code will display a Geeklog page with both right and left blocks displayed.
+* The two functions COM_siteHeader and COM_siteFooter provide the framework for
+* page display in Geeklog.  COM_siteHeader controls the display of the Header
+* and left blocks and COM_siteFooter controls the dsiplay of the right blocks
+* and the footer.  You use them like a sandwich.  Thus the following code will
+* display a Geeklog page with both right and left blocks displayed.
 *
 * -------------------------------------------------------------------------------------
 * <?php
@@ -731,8 +759,9 @@
 * echo $display;
 * ? >
 * ---------------------------------------------------------------------------------------
-* Note that the default for the header is to display the left blocks and the default of the
-* footer is to not display the right blocks.
+*
+* Note that the default for the header is to display the left blocks and the
+* default of the footer is to not display the right blocks.
 *
 * This sandwich produces code like this (greatly simplified)
 *
@@ -749,15 +778,16 @@
 *
 * @param    string  $what       If 'none' then no left blocks are returned, if 'menu' (default) then right blocks are returned
 * @param    string  $pagetitle  optional content for the page's <title>
+* @param    string  $headercode optional code to go into the page's <head>
 * @return   string              Formatted HTML containing the site header
 * @see function COM_siteFooter
 *
 */
 
-function COM_siteHeader( $what = 'menu', $pagetitle = '' )
+function COM_siteHeader( $what = 'menu', $pagetitle = '', $headercode = '' )
 {
     global $_CONF, $_TABLES, $_USER, $LANG01, $LANG_BUTTONS, $LANG_CHARSET,
-           $topic, $_COM_VERBOSE, $HTTP_POST_VARS, $HTTP_GET_VARS;
+           $LANG_DIRECTION, $_IMAGE_TYPE, $topic, $_COM_VERBOSE;
 
     // If the theme implemented this for us then call their version instead.
 
@@ -768,6 +798,18 @@
         return $function( $what, $pagetitle );
     }
 
+    // send out the charset header
+
+    if( empty( $LANG_CHARSET )) {
+        $charset = $_CONF['default_charset'];
+        if( empty( $charset )) {
+            $charset = 'iso-8859-1';
+        }
+    } else {
+        $charset = $LANG_CHARSET;
+    }
+    header ('Content-Type: text/html; charset=' . $charset);
+
     // If we reach here then either we have the default theme OR
     // the current theme only needs the default variable substitutions
 
@@ -781,19 +823,25 @@
         ));
 
     // get topic if not on home page
-    if( !isset( $HTTP_GET_VARS['topic'] ))
+    if( !isset( $_GET['topic'] ))
     {
-        if( isset( $HTTP_GET_VARS['story'] ))
+        if( isset( $_GET['story'] ))
+        {
+            $sid = COM_applyFilter( $_GET['story'] );
+        }
+        elseif( isset( $_GET['sid'] ))
         {
-            $sid = COM_applyFilter( $HTTP_GET_VARS['story'] );
+            $sid = COM_applyFilter( $_GET['sid'] );
         }
-        elseif( isset( $HTTP_GET_VARS['sid'] ))
+        elseif( isset( $_POST['story'] ))
         {
-            $sid = COM_applyFilter( $HTTP_GET_VARS['sid'] );
+            $sid = COM_applyFilter( $_POST['story'] );
         }
-        elseif( isset( $HTTP_POST_VARS['story'] ))
+        if( empty( $sid ) && $_CONF['url_rewrite'] &&
+                ( strpos( $_SERVER['PHP_SELF'], 'article.php' ) !== false ))
         {
-            $sid = COM_applyFilter( $HTTP_POST_VARS['story'] );
+            COM_setArgNames( array( 'story', 'mode' ));
+            $sid = COM_applyFilter( COM_getArgument( 'story' ));
         }
         if( !empty( $sid ))
         {
@@ -802,8 +850,39 @@
     }
     else
     {
-        $topic = COM_applyFilter( $HTTP_GET_VARS['topic'] );
+        $topic = COM_applyFilter( $_GET['topic'] );
+    }
+
+    $feed_url = '';
+    if( $_CONF['backend'] == 1 ) // add feed-link to header if applicable
+    {
+        $baseurl = SYND_getFeedUrl();
+
+        $sql = 'SELECT format, filename, title FROM '
+             . $_TABLES['syndication'] . " WHERE (header_tid = 'all')";
+        if( !empty( $topic ))
+        {
+            $sql .= " OR (header_tid = '" . addslashes( $topic ) . "')";
+        }
+        $result = DB_query( $sql );
+        $numRows = DB_numRows( $result );
+        for( $i = 0; $i < $numRows; $i++ )
+        {
+            $A = DB_fetchArray( $result );
+            if ( !empty( $A['filename'] ))
+            {
+                $format = explode( '-', $A['format'] );
+                $format_type = strtolower( $format[0] );
+                $format_name = ucwords( $format[0] );
+
+                $feed_url .= '<link rel="alternate" type="application/'
+                          . $format_type . '+xml" title="' . $format_name
+                          . ' Feed: ' . $A['title'] . '" href="' . $baseurl
+                          . $A['filename'] . '">' . LB;
+            }
+        }
     }
+    $header->set_var( 'feed_url', $feed_url );
 
     if( empty( $pagetitle ) && isset( $_CONF['pagetitle'] ))
     {
@@ -817,8 +896,8 @@
         }
         else
         {
-            $pagetitle = DB_getItem( $_TABLES['topics'], 'topic',
-                                     "tid = '$topic'" );
+            $pagetitle = stripslashes( DB_getItem( $_TABLES['topics'], 'topic',
+                                                   "tid = '$topic'" ));
         }
     }
     if( !empty( $pagetitle ))
@@ -827,7 +906,21 @@
     }
     $header->set_var( 'page_title', $_CONF['site_name'] . $pagetitle );
 
-    $header->set_var( 'background_image', $_CONF['layout_url'] . '/images/bg.gif' );
+    if( isset( $_CONF['advanced_editor'] ) && ( $_CONF['advanced_editor'] == 1 )
+            && file_exists( $_CONF['path_layout']
+                            . 'advanced_editor_header.thtml' ))
+    {
+        $header->set_file( 'editor'  , 'advanced_editor_header.thtml');
+        $header->parse( 'advanced_editor', 'editor' );
+
+    }
+    else
+    {
+         $header->set_var( 'advanced_editor', '' );
+    }
+
+    $header->set_var( 'background_image', $_CONF['layout_url']
+                                          . '/images/bg.' . $_IMAGE_TYPE );
     $header->set_var( 'site_url', $_CONF['site_url'] );
     $header->set_var( 'layout_url', $_CONF['layout_url'] );
     $header->set_var( 'site_mail', "mailto:{$_CONF['site_mail']}" );
@@ -849,7 +942,8 @@
 
     $header->set_var( 'welcome_msg', $msg );
     $header->set_var( 'datetime', $curtime[0] );
-    $header->set_var( 'site_logo', $_CONF['layout_url'] . '/images/logo.gif' );
+    $header->set_var( 'site_logo', $_CONF['layout_url']
+                                   . '/images/logo.' . $_IMAGE_TYPE );
     $header->set_var( 'css_url', $_CONF['layout_url'] . '/style.css' );
     $header->set_var( 'theme', $_CONF['theme'] );
 
@@ -868,18 +962,26 @@
     }
 
     $header->set_var( 'charset', $charset );
+    if( empty( $LANG_DIRECTION ))
+    {
+        // default to left-to-right
+        $header->set_var( 'direction', 'ltr' );
+    }
+    else
+    {
+        $header->set_var( 'direction', $LANG_DIRECTION );
+    }
 
     // Now add variables for buttons like e.g. those used by the Yahoo theme
     $header->set_var( 'button_home', $LANG_BUTTONS[1] );
     $header->set_var( 'button_contact', $LANG_BUTTONS[2] );
     $header->set_var( 'button_contribute', $LANG_BUTTONS[3] );
-    $header->set_var( 'button_links', $LANG_BUTTONS[4] );
-    $header->set_var( 'button_polls', $LANG_BUTTONS[5] );
     $header->set_var( 'button_calendar', $LANG_BUTTONS[6] );
     $header->set_var( 'button_sitestats', $LANG_BUTTONS[7] );
     $header->set_var( 'button_personalize', $LANG_BUTTONS[8] );
     $header->set_var( 'button_search', $LANG_BUTTONS[9] );
     $header->set_var( 'button_advsearch', $LANG_BUTTONS[10] );
+    $header->set_var( 'button_directory', $LANG_BUTTONS[11] );
 
     // Get plugin menu options
     $plugin_menu = PLG_getMenuItems();
@@ -957,7 +1059,7 @@
 
     // Call any plugin that may want to include extra Meta tags
     // or Javascript functions
-    $header->set_var( 'plg_headercode', PLG_getHeaderCode() );
+    $header->set_var( 'plg_headercode', $headercode . PLG_getHeaderCode() );
 
     // Call to plugins to set template variables in the header
     PLG_templateSetVars( 'header', $header );
@@ -990,10 +1092,22 @@
 * @return   string  Formated HTML containing site footer and optionally right blocks
 *
 */
-function COM_siteFooter( $rightblock = false, $custom = '' )
+function COM_siteFooter( $rightblock = -1, $custom = '' )
 {
     global $_CONF, $_TABLES, $LANG01, $_PAGE_TIMER, $topic;
 
+    if( $rightblock < 0 )
+    {
+        if( isset( $_CONF['show_right_blocks'] ))
+        {
+            $rightblock = $_CONF['show_right_blocks'];
+        }
+        else
+        {
+            $rightblock = false;
+        }
+    }
+
     // If the theme implemented this for us then call their version instead.
 
     $function = $_CONF['theme'] . '_siteFooter';
@@ -1048,14 +1162,14 @@
      * function or custom function.
      * This can be used to take control over what blocks are then displayed
      */
-    if( is_array( $custom )) 
+    if( is_array( $custom ))
     {
         $function = $custom['0'];
         if( function_exists( $function ))
         {
             $rblocks = $function( $custom['1'], 'right' );
         }
-    } 
+    }
     elseif( $rightblock )
     {
         $rblocks = COM_showBlocks( 'right', $topic );
@@ -1116,6 +1230,9 @@
     $footer->set_var( 'execution_time', $exectime );
     $footer->set_var( 'execution_textandtime', $exectext );
 
+    // Call to plugins to set template variables in the footer
+    PLG_templateSetVars( 'footer', $footer );
+
     // Actually parse the template and make variable substitutions
     $footer->parse( 'index_footer', 'footer' );
 
@@ -1146,7 +1263,7 @@
 
 function COM_startBlock( $title='', $helpfile='', $template='blockheader.thtml' )
 {
-    global $_CONF, $LANG01;
+    global $_CONF, $LANG01, $_IMAGE_TYPE;
 
     $block = new Template( $_CONF['path_layout'] );
     $block->set_file( 'block', $template );
@@ -1157,17 +1274,18 @@
 
     if( !empty( $helpfile ))
     {
+        $helpimg = $_CONF['layout_url'] . '/images/button_help.' . $_IMAGE_TYPE;
         if( !stristr( $helpfile, 'http://' ))
         {
             $help = '<a class="blocktitle" href="' . $_CONF['site_url'] . '/help/' . $helpfile
-                . '" target="_blank"><img src="' . $_CONF['layout_url']
-                . '/images/button_help.gif" border="0" alt="?"></a>';
+                . '" target="_blank"><img src="' . $helpimg
+                . '" border="0" alt="?"></a>';
         }
         else
         {
             $help = '<a class="blocktitle" href="' . $helpfile
-                . '" target="_blank"><img src="' . $_CONF['layout_url']
-                . '/images/button_help.gif" border="0" alt="?"></a>';
+                . '" target="_blank"><img src="' . $helpimg
+                . '" border="0" alt="?"></a>';
         }
 
         $block->set_var( 'block_help', $help );
@@ -1217,8 +1335,31 @@
 */
 function COM_optionList( $table, $selection, $selected='', $sortcol=1, $where='' )
 {
+    global $_DB_table_prefix;
+
     $retval = '';
 
+    $LangTableName = '';
+    if( substr( $table, 0, strlen( $_DB_table_prefix )) == $_DB_table_prefix )
+    {
+        $LangTableName = 'LANG_' . substr( $table, strlen( $_DB_table_prefix ));
+    }
+    else
+    {
+        $LangTableName = 'LANG_' . $table;
+    }
+
+    global $$LangTableName;
+
+    if( isset( $$LangTableName ))
+    {
+        $LangTable = $$LangTableName;
+    }
+    else
+    {
+        $LangTable = array();
+    }
+
     $tmp = str_replace( 'DISTINCT ', '', $selection );
     $select_set = explode( ',', $tmp );
 
@@ -1251,7 +1392,16 @@
             $retval .= ' selected="selected"';
         }
 
-        $retval .= '>' . $A[1] . '</option>' . LB;
+        $retval .= '>';
+        if( empty( $LangTable[$A[0]] ))
+        {
+            $retval .= $A[1];
+        }
+        else
+        {
+            $retval .= $LangTable[$A[0]];
+        }
+        $retval .= '</option>' . LB;
     }
 
     return $retval;
@@ -1422,16 +1572,33 @@
 * of an article with a future publish date reaching it's
 * publish time and if so updates the RDF file.
 *
+* @param    string  $updated_type   (optional) feed type to update
+* @param    string  $updated_topic  (optional) feed topic to update
+* @param    string  $updated_id     (optional) feed id to update
+*
+* @note When called without parameters, this will only check for new entries to
+*       include in the feeds. Pass the $updated_XXX parameters when the content
+*       of an existing entry has changed.
+*
 * @see file lib-syndication.php
 *
 */
-function COM_rdfUpToDateCheck()
+function COM_rdfUpToDateCheck( $updated_type = '', $updated_topic = '', $updated_id = '' )
 {
     global $_CONF, $_TABLES;
 
     if( $_CONF['backend'] > 0 )
     {
-        $result = DB_query( "SELECT fid,type,topic,limits,update_info FROM {$_TABLES['syndication']} WHERE is_enabled = 1" );
+        if( !empty( $updated_type ) && ( $updated_type != 'geeklog' ))
+        {
+            // when a plugin's feed is to be updated, skip Geeklog's own feeds
+            $sql = "SELECT fid,type,topic,limits,update_info FROM {$_TABLES['syndication']} WHERE (is_enabled = 1) AND (type <> 'geeklog')";
+        }
+        else
+        {
+            $sql = "SELECT fid,type,topic,limits,update_info FROM {$_TABLES['syndication']} WHERE is_enabled = 1";
+        }
+        $result = DB_query( $sql );
         $num = DB_numRows( $result );
         for( $i = 0; $i < $num; $i++)
         {
@@ -1440,13 +1607,15 @@
             $is_current = true;
             if( $A['type'] == 'geeklog' )
             {
-                $is_current = SYND_feedUpdateCheck( $A['type'], $A['fid'],
-                        $A['topic'], $A['update_info'], $A['limits'] );
+                $is_current = SYND_feedUpdateCheck( $A['topic'],
+                                $A['update_info'], $A['limits'],
+                                $updated_topic, $updated_id );
             }
             else
             {
                 $is_current = PLG_feedUpdateCheck( $A['type'], $A['fid'],
-                        $A['topic'], $A['update_info'], $A['limits'] );
+                                $A['topic'], $A['update_info'], $A['limits'],
+                                $updated_type, $updated_topic, $updated_id );
             }
             if( !$is_current )
             {
@@ -1563,7 +1732,7 @@
 
 function COM_accessLog( $logentry )
 {
-    global $_CONF, $_USER, $LANG01, $HTTP_SERVER_VARS;
+    global $_CONF, $_USER, $LANG01;
 
     $retval = '';
 
@@ -1577,11 +1746,11 @@
 
     if( isset( $_USER['uid'] ))
     {
-        $byuser = $_USER['uid'] . '@' . $HTTP_SERVER_VARS['REMOTE_ADDR'];
+        $byuser = $_USER['uid'] . '@' . $_SERVER['REMOTE_ADDR'];
     }
     else
     {
-        $byuser = 'anon@' . $HTTP_SERVER_VARS['REMOTE_ADDR'];
+        $byuser = 'anon@' . $_SERVER['REMOTE_ADDR'];
     }
 
     fputs( $file, "$timestamp ($byuser) - $logentry\n" );
@@ -1590,321 +1759,6 @@
 }
 
 /**
-* Shows a poll form
-*
-* Shows an HTML formatted poll for the given question ID
-*
-* @param      string      $qid      ID for poll question
-* @see function COM_pollResults
-* @see function COM_showPoll
-* @return       string  HTML Formatted Poll
-*
-*/
-
-function COM_pollVote( $qid )
-{
-    global $_CONF, $_TABLES, $LANG01, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS;
-
-    $retval = '';
-
-    $question = DB_query( "SELECT question,voters,commentcode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid='$qid'" );
-    $Q = DB_fetchArray( $question );
-
-    if( SEC_hasAccess( $Q['owner_id'], $Q['group_id'], $Q['perm_owner'], $Q['perm_group'], $Q['perm_members'], $Q['perm_anon'] ) == 0 )
-    {
-        return $retval;
-    }
-
-    $nquestion = DB_numRows( $question );
-    $fields = array( 'ipaddress', 'qid' );
-    $values = array( $HTTP_SERVER_VARS['REMOTE_ADDR'], $qid );
-    $id = DB_count( $_TABLES['pollvoters'], $fields, $values );
-
-    if( empty( $HTTP_COOKIE_VARS[$qid] ) && $id == 0 )
-    {
-        if( $nquestion == 1 )
-        {
-            $answers = DB_query( "SELECT answer,aid FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY aid" );
-            $nanswers = DB_numRows( $answers );
-
-            if( $nanswers > 0 )
-            {
-                $poll = new Template( $_CONF['path_layout'] . 'pollbooth' );
-                $poll->set_file( array( 'panswer' => 'pollanswer.thtml',
-                                        'block' => 'pollblock.thtml',
-                                        'comments' => 'pollcomments.thtml' ));
-                $poll->set_var( 'site_url', $_CONF['site_url'] );
-                $poll->set_var( 'layout_url', $_CONF['layout_url'] );
-
-                $poll->set_var( 'poll_question', $Q['question'] );
-                $poll->set_var( 'poll_id', $qid );
-                $poll->set_var( 'num_votes', $Q['voters'] );
-                $poll->set_var( 'poll_vote_url', $_CONF['site_url']
-                        . '/pollbooth.php');
-                $poll->set_var( 'poll_results_url', $_CONF['site_url']
-                        . '/pollbooth.php?qid=' . $qid . '&amp;aid=-1');
-
-                $poll->set_var( 'lang_vote', $LANG01[56] );
-                $poll->set_var( 'lang_votes', $LANG01[8] );
-                $poll->set_var( 'lang_results', $LANG01[6] );
-
-                for( $i = 1; $i <= $nanswers; $i++ )
-                {
-                    $A = DB_fetchArray( $answers );
-                    $poll->set_var( 'answer_id', $A['aid'] );
-                    $poll->set_var( 'answer_text', $A['answer'] );
-                    $poll->parse( 'poll_answers', 'panswer', true );
-                }
-
-                if( $Q['commentcode'] >= 0 )
-                {
-                    $poll->set_var( 'num_comments',
-                            DB_count( $_TABLES['comments'], 'sid', $qid ));
-                    $poll->set_var( 'lang_comments', $LANG01[3] );
-                    $poll->set_var( 'poll_comments_url', $_CONF['site_url'] .
-                        '/pollbooth.php?qid=' . $qid . '&amp;aid=-1#comments');
-                    $poll->parse( 'poll_comments', 'comments', true );
-                }
-                else
-                {
-                    $poll->set_var( 'poll_comments', '' );
-                    $poll->set_var( 'poll_comments_url', '' );
-                }
-
-                $title = DB_getItem( $_TABLES['blocks'], 'title',
-                                     "name='poll_block'" );
-                $retval = COM_startBlock( $title, '',
-                              COM_getBlockTemplate( 'poll_block', 'header' ))
-                        . $poll->finish( $poll->parse( 'output', 'block' ))
-                        . COM_endBlock( COM_getBlockTemplate( 'poll_block', 'footer' )) . LB;
-            }
-        }
-    }
-    else
-    {
-        $retval .= COM_pollResults( $qid );
-    }
-
-    return $retval;
-}
-
-/**
-* This shows a poll
-*
-* This will determine if a user needs to see the poll form OR the poll
-* result.
-*
-* @param        int        $sise       Size in pixels of poll results
-* @param        string     $qid        Question ID to show (optional)
-* @see function COM_pollVote
-* @see function COM_pollResults
-* @return    String  HTML Formated string of Poll
-*
-*/
-
-function COM_showPoll( $size, $qid='' )
-{
-    global $_CONF, $_TABLES, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS;
-
-    $retval = '';
-
-    DB_query( "DELETE FROM {$_TABLES['pollvoters']} WHERE date < unix_timestamp() - {$_CONF['polladdresstime']}" );
-
-    if( !empty( $qid ))
-    {
-        $pcount = DB_count( $_TABLES['pollvoters'], array( 'ipaddress', 'qid' ),
-                            array( $HTTP_SERVER_VARS['REMOTE_ADDR'], $qid ));
-
-        if( empty( $HTTP_COOKIE_VARS[$qid]) && $pcount == 0 )
-        {
-            $retval .= COM_pollVote( $qid );
-        }
-        else
-        {
-            $retval .= COM_pollResults( $qid, $size );
-        }
-    }
-    else
-    {
-        $result = DB_query( "SELECT qid from {$_TABLES['pollquestions']} WHERE display = 1 ORDER BY date DESC" );
-        $nrows = DB_numRows( $result );
-
-        if( $nrows > 0 )
-        {
-            for( $i = 1; $i <= $nrows; $i++ )
-            {
-                $Q = DB_fetchArray( $result );
-                $qid = $Q['qid'];
-                $id = array( 'ipaddress', 'qid' );
-                $value = array( $HTTP_SERVER_VARS['REMOTE_ADDR'], $qid );
-                $pcount = DB_count( $_TABLES['pollvoters'], $id, $value );
-
-                if( !isset( $HTTP_COOKIE_VARS[$qid]) && $pcount == 0 )
-                {
-                    $retval .= COM_pollVote( $qid );
-                }
-                else
-                {
-                    $retval .= COM_pollResults( $qid, $size );
-                }
-            }
-        }
-    }
-
-    return $retval;
-}
-
-/**
-* Shows the results of a poll
-*
-* Shows the poll results for a give poll question
-*
-* @param        string      $qid        ID for poll question to show
-* @param        int         $scale      Size in pixels to scale formatted results to
-* @param        string      $order      'ASC' or 'DESC' for Comment ordering (SQL statment ordering)
-* @param        string      $mode       Comment Mode possible values 'nocomment', 'flat', 'nested', 'threaded'
-* @see COM_pollVote
-* @see COM_showPoll
-* @return     string   HTML Formated Poll Results
-*
-*/
-function COM_pollResults( $qid, $scale=400, $order='', $mode='' )
-{
-    global $_TABLES, $LANG01, $LANG07, $_CONF, $_COM_VERBOSE;
-
-    $retval = '';
-
-    $question = DB_query( "SELECT question,voters,commentcode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['pollquestions']} WHERE qid='$qid'" );
-    $Q = DB_fetchArray( $question );
-
-    if( SEC_hasAccess( $Q['owner_id'], $Q['group_id'], $Q['perm_owner'], $Q['perm_group'], $Q['perm_members'], $Q['perm_anon']) == 0 )
-    {
-        return $retval;
-    }
-
-    $nquestion = DB_numRows( $question );
-
-    if( $nquestion == 1 )
-    {
-        if( $_CONF['answerorder'] == 'voteorder' )
-        {
-            $answers = DB_query( "SELECT votes,answer FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY votes DESC" );
-        }
-        else
-        {
-            $answers = DB_query( "SELECT votes,answer FROM {$_TABLES['pollanswers']} WHERE qid='$qid' ORDER BY aid" );
-        }
-
-        $nanswers = DB_numRows( $answers );
-
-        if( $_COM_VERBOSE )
-        {
-            COM_errorLog( "got $answers answers in COM_pollResults", 1 );
-        }
-
-        if( $nanswers > 0 )
-        {
-            $title = DB_getItem( $_TABLES['blocks'], 'title', "name='poll_block'" );
-
-            if( $scale < 120 ) // assume we're in the poll block
-            {
-                $retval .= COM_startBlock( $title, '',
-                        COM_getBlockTemplate( 'poll_block', 'header' ));
-            }
-            else // assume we're in pollbooth.php
-            {
-                $retval .= COM_startBlock( $title );
-            }
-
-            $poll = new Template( $_CONF['path_layout'] . 'pollbooth' );
-            $poll->set_file( array( 'result' => 'pollresult.thtml',
-                                    'comments' => 'pollcomments.thtml',
-                                    'votes_bar' => 'pollvotes_bar.thtml',
-                                    'votes_num' => 'pollvotes_num.thtml' ));
-            $poll->set_var( 'site_url', $_CONF['site_url'] );
-            $poll->set_var( 'layout_url', $_CONF['layout_url'] );
-
-            $poll->set_var( 'poll_question', $Q['question'] );
-            $poll->set_var( 'poll_id', $qid );
-            $poll->set_var( 'num_votes', $Q['voters'] );
-
-            $poll->set_var( 'lang_votes', $LANG01[8] );
-
-            for( $i = 1; $i <= $nanswers; $i++ )
-            {
-                $A = DB_fetchArray( $answers );
-
-                if( $Q['voters'] == 0 )
-                {
-                    $percent = 0;
-                }
-                else
-                {
-                    $percent = $A['votes'] / $Q['voters'];
-                }
-
-                $poll->set_var( 'answer_text', $A['answer'] );
-                $poll->set_var( 'answer_counter', $i );
-                $poll->set_var( 'answer_odd', (( $i - 1 ) % 2 ));
-                $poll->set_var( 'answer_num', $A['votes'] );
-                $poll->set_var( 'answer_percent',
-                                sprintf( '%.2f', $percent * 100 ));
-                if( $scale < 120 )
-                {
-                    $poll->parse( 'poll_votes', 'votes_num', true );
-                }
-                else
-                {
-                    $width = $percent * $scale;
-                    $poll->set_var( 'bar_width', $width );
-                    $poll->parse( 'poll_votes', 'votes_bar', true );
-                }
-            }
-
-            if( $Q['commentcode'] >= 0 )
-            {
-                $poll->set_var( 'num_comments',
-                        DB_count( $_TABLES['comments'], 'sid', $qid ));
-                $poll->set_var( 'lang_comments', $LANG01[3] );
-                $poll->set_var( 'poll_comments_url', $_CONF['site_url'] .
-                        '/pollbooth.php?qid=' . $qid . '&amp;aid=-1#comments');
-                $poll->parse( 'poll_comments', 'comments', true );
-            }
-            else
-            {
-                $poll->set_var( 'poll_comments_url', '' );
-                $poll->set_var( 'poll_comments', '' );
-            }
-
-            $poll->set_var( 'lang_pollquestions', $LANG07[6] );
-
-            $retval .= $poll->finish( $poll->parse( 'output', 'result' ));
-
-            if( $scale < 120)
-            {
-                $retval .= COM_endBlock( COM_getBlockTemplate( 'poll_block',
-                        'footer' ));
-            }
-            else
-            {
-                $retval .= COM_endBlock();
-            }
-            if( $scale > 399 && $Q['commentcode'] >= 0 )
-            {
-                $delete_option = ( SEC_hasRights( 'poll.edit' ) &&
-                    SEC_hasAccess( $Q['owner_id'], $Q['group_id'],
-                    $Q['perm_owner'], $Q['perm_group'], $Q['perm_members'],
-                    $Q['perm_anon'] ) == 3 ? true : false );
-                $retval .= COM_userComments( $qid, $Q['question'], 'poll',
-                                             $order, $mode, 0, 1, false, $delete_option ); 
-            }
-        }
-    }
-
-    return $retval;
-}
-
-/**
 * Shows all available topics
 *
 * Show the topics in the system the user has access to and prints them in HTML.
@@ -1917,11 +1771,11 @@
 
 function COM_showTopics( $topic='' )
 {
-    global $_CONF, $_TABLES, $_USER, $LANG01, $HTTP_SERVER_VARS,
-           $_THEME_URL, $_BLOCK_TEMPLATE, $page, $newstories;
+    global $_CONF, $_TABLES, $_USER, $LANG01, $_BLOCK_TEMPLATE,
+           $page, $newstories;
 
     $sql = "SELECT tid,topic,imageurl FROM {$_TABLES['topics']}";
-    if( $_USER['uid'] > 1 )
+    if( !empty( $_USER['uid'] ) && ( $_USER['uid'] > 1 ))
     {
         $tids = DB_getItem( $_TABLES['userindex'], 'tids',
                             "uid = '{$_USER['uid']}'" );
@@ -2034,7 +1888,7 @@
                 }
                 else
                 {
-                    $countstring .= $storycount[$A['tid']];
+                    $countstring .= COM_numberFormat( $storycount[$A['tid']] );
                 }
             }
 
@@ -2044,10 +1898,13 @@
                 {
                     $countstring .= '/';
                 }
-                if( empty( $submissioncount[$A['tid']] ) ) {
+                if( empty( $submissioncount[$A['tid']] ))
+                {
                     $countstring .= 0;
-                } else {
-                    $countstring .= $submissioncount[$A['tid']];
+                }
+                else
+                {
+                    $countstring .= COM_numberFormat( $submissioncount[$A['tid']] );
                 }
             }
 
@@ -2058,16 +1915,9 @@
         $topicimage = '';
         if( !empty( $A['imageurl'] ))
         {
-            if( isset( $_THEME_URL ))
-            {
-                $imagebase = $_THEME_URL;
-            }
-            else
-            {
-                $imagebase = $_CONF['site_url'];
-            }
-            $topicimage = '<img src="' . $imagebase . $A['imageurl'] . '" alt="'
-                        . $topicname . '" title="' . $topicname . '">';
+            $imageurl = COM_getTopicImageUrl( $A['imageurl'] );
+            $topicimage = '<img src="' . $imageurl . '" alt="' . $topicname
+                        . '" title="' . $topicname . '" border="0">';
         }
         $sections->set_var( 'topic_image', $topicimage );
 
@@ -2097,11 +1947,11 @@
 
 function COM_userMenu( $help='', $title='' )
 {
-    global $_TABLES, $_USER, $_CONF, $LANG01, $_BLOCK_TEMPLATE, $HTTP_SERVER_VARS;
+    global $_TABLES, $_USER, $_CONF, $LANG01, $LANG04, $_BLOCK_TEMPLATE;
 
     $retval = '';
 
-    if( $_USER['uid'] > 1 )
+    if( !empty( $_USER['uid'] ) && ( $_USER['uid'] > 1 ))
     {
         $usermenu = new Template( $_CONF['path_layout'] );
         if( isset( $_BLOCK_TEMPLATE['useroption'] ))
@@ -2121,7 +1971,8 @@
 
         if( empty( $title ))
         {
-            $title = DB_getItem( $_TABLES['blocks'], 'title', "name='user_block'" );
+            $title = DB_getItem( $_TABLES['blocks'], 'title',
+                                 "name='user_block'" );
         }
 
         // what's our current URL?
@@ -2223,8 +2074,48 @@
         $login->set_var( 'layout_url', $_CONF['layout_url'] );
         $login->set_var( 'lang_username', $LANG01[21] );
         $login->set_var( 'lang_password', $LANG01[57] );
+        $login->set_var( 'lang_forgetpassword', $LANG01[119] );
         $login->set_var( 'lang_login', $LANG01[58] );
-        $login->set_var( 'lang_signup', $LANG01[59] );
+        if( $_CONF['disable_new_user_registration'] == 1 )
+        {
+            $login->set_var( 'lang_signup', '' );
+        }
+        else
+        {
+            $login->set_var( 'lang_signup', $LANG01[59] );
+        }
+        if( $_CONF['remoteauthentication'] && !$_CONF['usersubmission'] )
+        {
+            // Build select
+            $select = '<select name="service" id="service"><option value="">' .
+                            $_CONF['site_name'] . '</option>';
+            if( is_dir( $_CONF['path_system'] . 'classes/authentication/' ))
+            {
+                $folder = opendir( $_CONF['path_system']
+                                   . 'classes/authentication/' );
+                while(( $filename = @readdir( $folder )) !== false )
+                {
+                    $strpos = strpos( $filename, '.auth.class.php' );
+                    if( $strpos )
+                    {
+                        $service = substr( $filename, 0, $strpos );
+                        $select .= '<option value="' . $service . '">'
+                                . $service . '</option>';
+                    }
+                }
+            }
+            $select .= '</select>';
+            $login->set_file( 'services', 'blockservices.thtml' );
+            $login->set_var( 'lang_service', $LANG04[121] );
+            $login->set_var( 'select_service', $select );
+            $login->parse( 'output', 'services' );
+            $login->set_var( 'services',
+                             $login->finish( $login->get_var( 'output' )));
+        }
+        else
+        {
+            $login->set_var( 'services', '' );
+        }
         $retval .= $login->parse( 'output', 'form' );
 
         $retval .= COM_endBlock( COM_getBlockTemplate( 'user_block', 'footer' ));
@@ -2247,7 +2138,7 @@
 
 function COM_adminMenu( $help = '', $title = '' )
 {
-    global $_TABLES, $_USER, $_CONF, $LANG01, $_BLOCK_TEMPLATE, $LANG_PDF, $HTTP_SERVER_VARS;
+    global $_TABLES, $_USER, $_CONF, $LANG01, $_BLOCK_TEMPLATE, $LANG_PDF;
 
     $retval = '';
 
@@ -2259,7 +2150,7 @@
     $plugin_options = PLG_getAdminOptions();
     $nrows = count( $plugin_options );
 
-    if( SEC_isModerator() OR SEC_hasrights( 'story.edit,block.edit,topic.edit,link.edit,event.edit,poll.edit,user.edit,plugin.edit,user.mail', 'OR' ) OR ( $nrows > 0 ))
+    if( SEC_isModerator() OR SEC_hasrights( 'story.edit,block.edit,topic.edit,event.edit,user.edit,plugin.edit,user.mail', 'OR' ) OR ( $nrows > 0 ))
     {
         // what's our current URL?
         $thisUrl = COM_getCurrentURL();
@@ -2345,17 +2236,13 @@
                 $num += DB_count( $_TABLES['eventsubmission'] );
             }
 
-            if( SEC_hasrights( 'link.edit' ))
-            {
-                $num += DB_count( $_TABLES['linksubmission'] );
-            }
 
             if( $_CONF['usersubmission'] == 1 )
             {
                 if( SEC_hasrights( 'user.edit' ) && SEC_hasrights( 'user.delete' ))
                 {
                     $emptypwd = md5( '' );
-                    $num += DB_count( $_TABLES['users'], 'passwd', $emptypwd );
+                    $num += DB_count( $_TABLES['users'], 'status', '2' );
                 }
             }
 
@@ -2366,10 +2253,10 @@
             $url = $_CONF['site_admin_url'] . '/moderation.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[10] );
-            $adminmenu->set_var( 'option_count', $num );
-
-            $retval .= $adminmenu->parse( 'item',
+            $adminmenu->set_var( 'option_count', COM_numberFormat( $num ));
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[10]] = $menu_item;
         }
 
         if( SEC_hasrights( 'story.edit' ))
@@ -2387,9 +2274,11 @@
                 $N = DB_fetchArray( $nresult );
                 $numstories = $N['count'];
             }
-            $adminmenu->set_var( 'option_count', $numstories );
-            $retval .= $adminmenu->parse( 'item',
+            $adminmenu->set_var( 'option_count',
+                                 COM_numberFormat( $numstories ));
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[11]] = $menu_item;
         }
 
         if( SEC_hasrights( 'block.edit' ))
@@ -2397,10 +2286,12 @@
             $url = $_CONF['site_admin_url'] . '/block.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[12] );
-            $adminmenu->set_var( 'option_count', DB_count( $_TABLES['blocks'] ));
+            $adminmenu->set_var( 'option_count',
+                    COM_numberFormat( DB_count( $_TABLES['blocks'] )));
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[12]] = $menu_item;
         }
 
         if( SEC_hasrights( 'topic.edit' ))
@@ -2408,21 +2299,12 @@
             $url = $_CONF['site_admin_url'] . '/topic.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[13] );
-            $adminmenu->set_var( 'option_count', DB_count( $_TABLES['topics'] ));
+            $adminmenu->set_var( 'option_count',
+                    COM_numberFormat( DB_count( $_TABLES['topics'] )));
 
-            $retval .= $adminmenu->parse( 'item',
-                    ( $thisUrl == $url ) ? 'current' : 'option' );
-        }
-
-        if( SEC_hasrights( 'link.edit' ))
-        {
-            $url = $_CONF['site_admin_url'] . '/link.php';
-            $adminmenu->set_var( 'option_url', $url );
-            $adminmenu->set_var( 'option_label', $LANG01[14] );
-            $adminmenu->set_var( 'option_count', DB_count( $_TABLES['links'] ));
-
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[13]] = $menu_item;
         }
 
         if( SEC_hasrights( 'event.edit' ))
@@ -2430,21 +2312,12 @@
             $url = $_CONF['site_admin_url'] . '/event.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[15] );
-            $adminmenu->set_var( 'option_count', DB_count( $_TABLES['events'] ));
+            $adminmenu->set_var( 'option_count',
+                    COM_numberFormat( DB_count( $_TABLES['events'] )));
 
-            $retval .= $adminmenu->parse( 'item',
-                    ( $thisUrl == $url ) ? 'current' : 'option' );
-        }
-
-        if( SEC_hasrights( 'poll.edit' ))
-        {
-            $url = $_CONF['site_admin_url'] . '/poll.php';
-            $adminmenu->set_var( 'option_url', $url );
-            $adminmenu->set_var( 'option_label', $LANG01[16] );
-            $adminmenu->set_var( 'option_count', DB_count( $_TABLES['pollquestions'] ));
-
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[15]] = $menu_item;
         }
 
         if( SEC_hasrights( 'user.edit' ))
@@ -2452,10 +2325,12 @@
             $url = $_CONF['site_admin_url'] . '/user.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[17] );
-            $adminmenu->set_var( 'option_count', ( DB_count( $_TABLES['users'] ) -1 ));
+            $adminmenu->set_var( 'option_count',
+                    COM_numberFormat( DB_count( $_TABLES['users'] ) -1 ));
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[17]] = $menu_item;
         }
 
         if( SEC_hasrights( 'group.edit' ))
@@ -2468,10 +2343,12 @@
             $url = $_CONF['site_admin_url'] . '/group.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[96] );
-            $adminmenu->set_var( 'option_count', $A['count'] );
+            $adminmenu->set_var( 'option_count',
+                                 COM_numberFormat( $A['count'] ));
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[96]] = $menu_item;
         }
 
         if( SEC_hasrights( 'user.mail' ))
@@ -2481,8 +2358,9 @@
             $adminmenu->set_var( 'option_label', $LANG01[105] );
             $adminmenu->set_var( 'option_count', 'N/A' );
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[105]] = $menu_item;
         }
 
         if(( $_CONF['backend'] == 1 ) && SEC_inGroup( 'Root' ))
@@ -2490,22 +2368,46 @@
             $url = $_CONF['site_admin_url'] . '/syndication.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[38] );
-            $count = DB_count( $_TABLES['syndication'] );
+            $count = COM_numberFormat( DB_count( $_TABLES['syndication'] ));
             $adminmenu->set_var( 'option_count', $count );
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
+                    ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[38]] = $menu_item;
+        }
+
+        if(( $_CONF['trackback_enabled'] || $_CONF['pingback_enabled'] ||
+                $_CONF['ping_enabled'] ) && SEC_hasRights( 'story.ping' ))
+        {
+            $url = $_CONF['site_admin_url'] . '/trackback.php';
+            $adminmenu->set_var( 'option_url', $url );
+            $adminmenu->set_var( 'option_label', $LANG01[116] );
+            if( $_CONF['ping_enabled'] )
+            {
+                $count = COM_numberFormat( DB_count( $_TABLES['pingservice'] ));
+                $adminmenu->set_var( 'option_count', $count );
+            }
+            else
+            {
+                $adminmenu->set_var( 'option_count', 'N/A' );
+            }
+
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[116]] = $menu_item;
         }
 
-        if( SEC_hasrights( 'plugin.edit' ))
+        if( SEC_hasRights( 'plugin.edit' ))
         {
             $url = $_CONF['site_admin_url'] . '/plugins.php';
             $adminmenu->set_var( 'option_url', $url );
             $adminmenu->set_var( 'option_label', $LANG01[77] );
-            $adminmenu->set_var( 'option_count', DB_count( $_TABLES['plugins'] ));
+            $adminmenu->set_var( 'option_count',
+                    COM_numberFormat( DB_count( $_TABLES['plugins'] )));
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[77]] = $menu_item;
         }
 
         // This will show the admin options for all installed plugins (if any)
@@ -2523,11 +2425,13 @@
             }
             else
             {
-                $adminmenu->set_var( 'option_count', $plg->numsubmissions );
+                $adminmenu->set_var( 'option_count',
+                                     COM_numberFormat( $plg->numsubmissions ));
             }
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $plg->adminurl ) ? 'current' : 'option', true );
+            $link_array[$plg->adminlabel] = $menu_item;
 
             next( $plugin_options );
         }
@@ -2539,8 +2443,9 @@
             $adminmenu->set_var( 'option_label', $LANG01[103] );
             $adminmenu->set_var( 'option_count', 'N/A' );
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG01[103]] = $menu_item;
         }
 
         // Add PDF Generator Link if the feature is enabled
@@ -2551,16 +2456,19 @@
             $adminmenu->set_var( 'option_label', $LANG_PDF[9] );
             $adminmenu->set_var( 'option_count', 'N/A' );
 
-            $retval .= $adminmenu->parse( 'item',
+            $menu_item = $adminmenu->parse( 'item',
                     ( $thisUrl == $url ) ? 'current' : 'option' );
+            $link_array[$LANG_PDF[9]] = $menu_item;
         }
 
         if( $_CONF['link_documentation'] == 1 )
         {
-            $adminmenu->set_var( 'option_url', $_CONF['site_url'] . '/docs/' );
+            $adminmenu->set_var( 'option_url',
+                                 $_CONF['site_url'] . '/docs/index.html' );
             $adminmenu->set_var( 'option_label', $LANG01[113] );
             $adminmenu->set_var( 'option_count', 'N/A' );
-            $retval .= $adminmenu->parse( 'item', 'option' );
+            $menu_item = $adminmenu->parse( 'item', 'option' );
+            $link_array[$LANG01[113]] = $menu_item;
         }
 
         if( SEC_inGroup( 'Root' ))
@@ -2570,9 +2478,18 @@
             $adminmenu->set_var( 'option_label', $LANG01[107] );
             $adminmenu->set_var( 'option_count', VERSION );
 
-            $retval .= $adminmenu->parse( 'item', 'option' );
+            $menu_item = $adminmenu->parse( 'item', 'option' );
+            $link_array[$LANG01[107]] = $menu_item;
+        }
+        if ($_CONF['sort_admin'] )
+        {
+            ksort($link_array);
+        }
+        reset($link_array);
+        while (list($key, $val) = each($link_array))
+        {
+          $retval .= "$val\n";
         }
-
         $retval .= COM_endBlock( COM_getBlockTemplate( 'admin_block', 'footer' ));
     }
 
@@ -2596,571 +2513,13 @@
 }
 
 /**
-* This function displays the comment control bar
-*
-* Prints the control that allows the user to interact with Geeklog Comments
-*
-* @param        string      $sid        ID of item in question
-* @param        string      $title      Title of item
-* @param        string      $type       Type of item (i.e. story, photo, etc)
-* @param        string      $order      Order that comments are displayed in
-* @param        string      $mode       Mode (nested, flat, etc.)
-* @see COM_userComments
-* @see COM_commentChildren
-* @return     string   HTML Formated comment bar
-*
-*/
-function COM_commentBar( $sid, $title, $type, $order, $mode )
-{
-    global $_CONF, $_TABLES, $_USER, $LANG01, $_REQUEST, $HTTP_SERVER_VARS;
-
-    $page = array_pop( explode( '/', $HTTP_SERVER_VARS['PHP_SELF'] ));
-    $nrows = DB_count( $_TABLES['comments'], 'sid', $sid );
-
-    $commentbar = new Template( $_CONF['path_layout'] . 'comment' );
-    $commentbar->set_file( array( 'commentbar' => 'commentbar.thtml' ));
-    $commentbar->set_var( 'site_url', $_CONF['site_url'] );
-    $commentbar->set_var( 'layout_url', $_CONF['layout_url'] );
-
-    $commentbar->set_var( 'lang_comments', $LANG01[3] );
-    $commentbar->set_var( 'lang_refresh', $LANG01[39] );
-    $commentbar->set_var( 'lang_reply', $LANG01[25] );
-    $commentbar->set_var( 'lang_disclaimer', $LANG01[26] );
-
-    $commentbar->set_var( 'story_title', stripslashes( $title ));
-    $commentbar->set_var( 'num_comments', $nrows );
-    $commentbar->set_var( 'comment_type', $type );
-
-    if( $type == 'poll' )
-    {
-        $commentbar->set_var( 'story_link', $_CONF['site_url']
-                . "/pollbooth.php?scale=400&amp;qid=$sid&amp;aid=-1" );
-    }
-    else if( $type == 'article' )
-    {
-        $articleUrl = COM_buildUrl( $_CONF['site_url'] . '/article.php?story='
-                                    . $sid );
-        $commentbar->set_var( 'story_link', $articleUrl );
-        $commentbar->set_var( 'article_url', $articleUrl );
-    }
-    else
-    {
-        $commentbar->set_var( 'story_link', $_CONF['site_url']
-                . "/comment.php?type=$type&amp;cid=$sid" );
-    }
-
-    if( $_USER['uid'] > 1 )
-    {
-        $username = $_USER['username'];
-        $fullname = DB_getItem( $_TABLES['users'], 'fullname',
-                                "uid = '{$_USER['uid']}'" ); 
-    }
-    else
-    {
-        $result = DB_query( "SELECT username,fullname FROM {$_TABLES['users']} WHERE uid = 1" );
-        $N = DB_fetchArray( $result );
-        $username = $N['username'];
-        $fullname = $N['fullname'];
-    }
-    if( empty( $fullname ))
-    {
-        $fullname = $username;
-    }
-    $commentbar->set_var( 'user_name', $username );   
-    $commentbar->set_var( 'user_fullname', $fullname );    
-
-    if( !empty( $_USER['username'] ))
-    {
-        $commentbar->set_var( 'user_nullname', $username );
-        $commentbar->set_var( 'login_logout_url',
-                              $_CONF['site_url'] . '/users.php?mode=logout' );
-        $commentbar->set_var( 'lang_login_logout', $LANG01[35] );
-    }
-    else
-    {
-        $commentbar->set_var( 'user_nullname', '' );
-        $commentbar->set_var( 'login_logout_url',
-                              $_CONF['site_url'] . '/users.php?mode=new' );
-        $commentbar->set_var( 'lang_login_logout', $LANG01[61] );
-    }
-
-    if( $page == 'comment.php' ) 
-    {
-        $commentbar->set_var( 'parent_url', 
-                              $_CONF['site_url'] . '/comment.php' );
-        $hidden = '';
-        if( $_REQUEST['mode'] == 'view' )
-        {
-            $hidden .= '<input type="hidden" name="cid" value="' . $_REQUEST['cid'] . '">';
-            $hidden .= '<input type="hidden" name="pid" value="' . $_REQUEST['cid'] . '">';
-        }
-        else if( $_REQUEST['mode'] == 'display' )
-        {
-            $hidden .= '<input type="hidden" name="pid" value="' . $_REQUEST['pid'] . '">';
-        }
-        else /* This is likely a plugin (or a mistake) */
-        {
-            $hidden .= '<input type="hidden" name="cid" value="' . $sid . '">';
-        }
-        $commentbar->set_var( 'hidden_field', $hidden . 
-                '<input type="hidden" name="mode" value="' . $_REQUEST['mode'] . '">' );
-    }
-    else if( $type == 'poll' )
-    {
-        $commentbar->set_var( 'parent_url', 
-                              $_CONF['site_url'] . '/pollbooth.php' );
-        $commentbar->set_var( 'hidden_field',         
-                '<input type="hidden" name="scale" value="400">' .
-                '<input type="hidden" name="qid" value="' . $sid . '">' .
-                '<input type="hidden" name="aid" value="-1">' );
-    }
-    else
-    {
-        $commentbar->set_var( 'parent_url',
-                              $_CONF['site_url'] . '/article.php' );
-        $commentbar->set_var( 'hidden_field',
-                '<input type="hidden" name="story" value="' . $sid . '">' );
-    }
-
-    // Order
-    $selector = '<select name="order">' . LB
-              . COM_optionList( $_TABLES['sortcodes'], 'code,name', $order )
-              . LB . '</select>';
-    $commentbar->set_var( 'order_selector', $selector);
-
-    // Mode
-    if( $page == 'comment.php' ) 
-    {
-        $selector = '<select name="format">';
-    }
-    else
-    {
-        $selector = '<select name="mode">';
-    }
-    $selector .= LB
-               . COM_optionList( $_TABLES['commentmodes'], 'mode,name', $mode )
-               . LB . '</select>';
-    $commentbar->set_var( 'mode_selector', $selector);
-
-    return $commentbar->finish( $commentbar->parse( 'output', 'commentbar' ));
-}    
-
-
-/**
-* This function prints &$comments (db results set of comments) in comment format
-* -For previews, &$comments is assumed to be an associative array containing
-*  data for a single comment.
-* 
-* @param     array      &$comments Database result set of comments to be printed
-* @param     string     $mode      'flat', 'threaded', etc
-* @param     string     $type      Type of item (article, poll, etc.)
-* @param     string     $order     How to order the comments 'ASC' or 'DESC'
-* @param     boolean    $delete_option   if current user can delete comments
-* @param     boolean    $preview   Preview display (for edit) or not
-* @return    string     HTML       Formated Comment 
-*
-*/
-function COM_getComment( &$comments, $mode, $type, $order, $delete_option = false, $preview = false )
-{
-    global $_CONF, $_TABLES, $_USER, $LANG01, $query;
-
-    $indent = 0;  // begin with 0 indent
-    $level = array(); // used to track depth
-    $retval = ''; // initialize return value
-
-    $template = new Template( $_CONF['path_layout'] . 'comment' );
-    $template->set_file( array( 'comment' => 'comment.thtml',
-                                'thread'  => 'thread.thtml'  ));
-
-    // generic template variables
-    $template->set_var( 'site_url', $_CONF['site_url'] );
-    $template->set_var( 'layout_url', $_CONF['layout_url'] );
-    $template->set_var( 'lang_replytothis', $LANG01[43] );
-    $template->set_var( 'lang_reply', $LANG01[25] );
-    $template->set_var( 'lang_authoredby', $LANG01[42] );
-    $template->set_var( 'lang_on', $LANG01[36] );
-    $template->set_var( 'order', $order );    
-
-    // Make sure we have a default value for comment indentation
-    if( !isset( $_CONF['comment_indent'] ))
-    {
-        $_CONF['comment_indent'] = 25;
-    }
-
-    if( $preview )
-    {
-        $A = $comments;   
-        $mode = 'flat';
-    }
-    else
-    {
-        $A = DB_fetchArray($comments);
-    }
-
-    if( empty( $A ) )
-    {
-        return '';
-    }
-
-    do
-    {
-        // determines indentation for current comment
-        if( $mode == 'threaded' || $mode == 'nested' )
-        {
-            $indent = ($A['indent'] - $A['pindent']) * $_CONF['comment_indent'];
-        }
-
-        // comment variables
-        $template->set_var( 'indent', $indent );
-        $template->set_var( 'author', $A['username'] );
-        $template->set_var( 'author_id', $A['uid'] );
-
-        if( $A['uid'] > 1 )
-        {
-            if( empty( $A['fullname'] ))
-            {
-                $template->set_var( 'author_fullname', $A['username'] );
-                $alttext = $A['username'];
-            }
-            else
-            {
-                $template->set_var( 'author_fullname', $A['fullname'] );
-                $alttext = $A['fullname'];
-            }
-
-            if( !empty( $A['photo'] ))
-            {
-                $template->set_var( 'author_photo', '<img src="'
-                                    . $_CONF['site_url']
-                                    . '/images/userphotos/' . $A['photo']
-                                    . '" alt="' . $alttext . '">' );
-                $template->set_var( 'camera_icon', '<a href="'
-                        . $_CONF['site_url']
-                        . '/users.php?mode=profile&amp;uid=' . $A['uid']
-                        . '"><img src="' . $_CONF['layout_url']
-                        . '/images/smallcamera.gif" border="0" alt=""></a>' );
-            }
-            else
-            {
-                $template->set_var( 'author_photo', '' );
-                $template->set_var( 'camera_icon', '' );
-            }
-
-            $template->set_var( 'start_author_anchortag', '<a href="'
-                    . $_CONF['site_url'] . '/users.php?mode=profile&amp;uid='
-                    . $A['uid'] . '">' );
-            $template->set_var( 'end_author_anchortag', '</a>' );
-        }
-        else
-        {
-            $template->set_var( 'author_fullname', $A['username'] );
-            $template->set_var( 'author_photo', '' );
-            $template->set_var( 'camera_icon', '' );
-            $template->set_var( 'start_author_anchortag', '' );
-            $template->set_var( 'end_author_anchortag', '' );
-        }
-
-        // hide reply link from anonymous users if they can't post replies
-        $hidefromanon = false;
-        if( empty( $_USER['username'] ) && (( $_CONF['loginrequired'] == 1 ) || ( $_CONF['commentsloginrequired'] == 1 )))
-        {
-            $hidefromanon = true;
-        }
-
-        // this will hide HTML that should not be viewed in preview mode
-        if( $preview || $hidefromanon )
-        {
-            $template->set_var( 'hide_if_preview', 'style="display:none"' );
-        }
-        else
-        {
-            $template->set_var( 'hide_if_preview', '' );
-        }
-
-        // for threaded mode, add a link to comment parent
-        if( $mode == 'threaded' && $A['pid'] != 0 && $indent == 0 )
-        {
-            $result = DB_query( "SELECT title,pid from {$_TABLES['comments']} where cid = '{$A['pid']}'" );
-            $P = DB_fetchArray( $result );
-            if ($P['pid'] != 0) {
-                $plink = $_CONF['site_url'] . '/comment.php?mode=display&amp;sid='
-                       . $A['sid'] . '&amp;title=' . rawurlencode( $P['title'] )
-                       . '&amp;type=' . $type . '&amp;order=' . $order . '&amp;pid='
-                       . $P['pid'];
-            } else {
-                $plink = $_CONF['site_url'] . '/comment.php?mode=view&amp;sid='
-                       . $A['sid'] . '&amp;title=' . rawurlencode( $P['title'] )
-                       . '&amp;type=' . $type . '&amp;order=' . $order . '&amp;cid='
-                       . $A['pid'] . '&amp;format=threaded';
-            }
-            $template->set_var( 'parent_link', "| <a href=\"$plink\">{$LANG01[44]}</a>");
-        }
-        else
-        {
-            $template->set_var( 'parent_link', '');
-        }
-
-        $template->set_var( 'date', strftime( $_CONF['date'], $A['nice_date'] ));
-        $template->set_var( 'sid', $A['sid'] );
-        $template->set_var( 'type', $A['type'] );
-
-        // If deletion is allowed, displays delete link
-        if( $delete_option )
-        {
-            $deloption = '| <a href="' . $_CONF['site_url']
-                       . '/comment.php?mode=delete&amp;cid='
-                       . $A['cid'] . '&amp;sid=' . $A['sid'] . '&amp;type='
-                       . $type . '">' . $LANG01[28] . '</a> ';
-            if( !empty( $A['ipaddress'] ))
-            {
-                if( empty( $_CONF['ip_lookup'] ))
-                {
-                    $deloption .= '| ' . $A['ipaddress'] . ' ';
-                }
-                else
-                {
-                    $iplookup = str_replace( '*', $A['ipaddress'],
-                                             $_CONF['ip_lookup'] );
-                    $deloption .= '| <a href="' . $iplookup . '">'
-                               . $A['ipaddress'] . '</a> ';
-                }
-            }
-            $template->set_var( 'delete_option', $deloption );
-        }
-        else if( !empty( $_USER['username'] ))
-        {
-            $reportthis = ' | <a href="' . $_CONF['site_url']
-                        . '/comment.php?mode=report&amp;cid=' . $A['cid']
-                        . '&amp;type=' . $type . '" title="' . $LANG01[110]
-                        . '">' . $LANG01[109] . '</a> ';
-            $template->set_var( 'delete_option', $reportthis );
-        }
-        else
-        {
-            $template->set_var( 'delete_option', '' );
-        }
-
-        $A['title'] = stripslashes( $A['title'] );
-        $A['title'] = htmlspecialchars( $A['title'] );
-        $A['title'] = str_replace( '$', '&#36;', $A['title'] );
-
-        // and finally: format the actual text of the comment
-        $A['comment'] = stripslashes( $A['comment'] );
-        if( preg_match( '/<.*>/', $A['comment'] ) == 0 )
-        {
-            $A['comment'] = nl2br( $A['comment'] );
-        }
-
-        // highlight search terms if specified
-        if( !empty( $query ))
-        {
-            $A['comment'] = COM_highlightQuery( $A['comment'], $query );
-        }
-
-        $A['comment'] = str_replace( '$', '&#36;',  $A['comment'] );
-        $A['comment'] = str_replace( '{', '&#123;', $A['comment'] );
-        $A['comment'] = str_replace( '}', '&#125;', $A['comment'] );
-
-        // Replace any plugin autolink tags
-        $A['comment'] = PLG_replaceTags( $A['comment'] );
-
-        $template->set_var( 'title', $A['title'] );
-        $template->set_var( 'comments', $A['comment'] );
-
-        // parse the templates
-        if( $mode == 'threaded' && $indent > 0 )
-        {
-            $template->set_var( 'pid', $A['pid'] );
-            $retval .= $template->parse( 'output', 'thread' );   
-        }
-        else
-        {
-            $template->set_var( 'pid', $A['cid'] );
-            $retval .= $template->parse( 'output', 'comment' ); 
-        }
-    }
-    while( $A = DB_fetchArray( $comments ));
-
-    return $retval;
-}
-
-/**
-* This function displays the comments in a high level format.
-*
-* Begins displaying user comments for an item
-*
-* @param        string      $sid       ID for item to show comments for
-* @param        string      $title     Title of item
-* @param        string      $type      Type of item (article, poll, etc.)
-* @param        string      $order     How to order the comments 'ASC' or 'DESC'
-* @param        string      $mode      comment mode (nested, flat, etc.)
-* @param        int         $pid       id of parent comment
-* @param        int         $page      page number of comments to display
-* @param        boolean     $cid       true if $pid should be interpreted as a cid instead
-* @param        boolean     $delete_option   if current user can delete comments
-* @see function COM_commentBar
-* @see function COM_commentChildren
-* @return     string  HTML Formated Comments
-*
-*/
-function COM_userComments( $sid, $title, $type='article', $order='', $mode='', $pid = 0, $page = 1, $cid = false, $delete_option = false )
-{
-    global $_CONF, $_TABLES, $_USER, $LANG01;
-
-    if( !empty( $_USER['uid'] ) )
-    {
-        $result = DB_query( "SELECT commentorder,commentmode,commentlimit FROM {$_TABLES['usercomment']} WHERE uid = '{$_USER['uid']}'" );
-        $U = DB_fetchArray( $result );
-        if( empty( $order ) ) 
-        {
-            $order = $U['commentorder'];
-        }
-        if( empty( $mode ) ) 
-        {
-            $mode = $U['commentmode'];
-        }
-        $limit = $U['commentlimit'];
-    }
-
-    if( $order != 'ASC' && $order != 'DESC' )
-    {
-        $order = 'ASC';
-    }
-
-    if( empty( $mode ))
-    {
-        $mode = $_CONF['comment_mode'];
-    }
-
-    if( empty( $limit ))
-    {
-        $limit = $_CONF['comment_limit'];
-    }
-    
-    if( !is_numeric($page) || $page < 1 )
-    {
-        $page = 1;
-    }
-
-    $start = $limit * ( $page - 1 );
-
-    $template = new Template( $_CONF['path_layout'] . 'comment' );
-    $template->set_file( array( 'commentarea' => 'startcomment.thtml' ));
-    $template->set_var( 'site_url', $_CONF['site_url'] );
-    $template->set_var( 'layout_url', $_CONF['layout_url'] );
-    $template->set_var( 'commentbar',
-                        COM_commentBar( $sid, $title, $type, $order, $mode));
-    
-    if( $mode == 'nested' or $mode == 'threaded' or $mode == 'flat' )
-    {
-        // build query
-        switch( $mode )
-        {
-            case 'flat':
-                if( $cid )
-                {
-                    $count = 1;
-
-                    $q = "SELECT c.*, u.username, u.fullname, u.photo, " 
-                         . "unix_timestamp(c.date) AS nice_date "
-                       . "FROM {$_TABLES['comments']} as c, {$_TABLES['users']} as u "
-                       . "WHERE c.uid = u.uid AND c.cid = $pid";
-                }
-                else
-                {
-                    $count = DB_count( $_TABLES['comments'], 'sid', $sid );
-            
-                    $q = "SELECT c.*, u.username, u.fullname, u.photo, " 
-                         . "unix_timestamp(c.date) AS nice_date "
-                       . "FROM {$_TABLES['comments']} as c, {$_TABLES['users']} as u "
-                       . "WHERE c.uid = u.uid AND c.sid = '$sid' "
-                       . "ORDER BY date $order LIMIT $start, $limit";
-                }
-                break;
-
-            case 'nested':
-            case 'threaded':
-            default:
-                if( $order == 'DESC' )
-                {
-                    $cOrder = 'c.rht DESC';
-                }
-                else
-                {
-                    $cOrder = 'c.lft ASC'; 
-                }                            
-
-                // We can simplify the query, and hence increase performance
-                // when pid = 0 (when fetching all the comments for a given sid)
-                if( $cid )
-                {
-                    // count the total number of applicable comments
-                    $q2 = "SELECT COUNT(*) "
-                        . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2 "
-                        . "WHERE c.sid = '$sid' AND (c.lft >= c2.lft AND c.lft <= c2.rht) "
-                        . "AND c2.cid = $pid";
-                    $result = DB_query( $q2 );
-                    list( $count ) = DB_fetchArray( $result );
-
-                    $q = "SELECT c.*, u.username, u.fullname, u.photo, c2.indent as pindent, " 
-                         . "unix_timestamp(c.date) AS nice_date "
-                       . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2, "
-                         . "{$_TABLES['users']} as u "
-                       . "WHERE c.sid = '$sid' AND (c.lft >= c2.lft AND c.lft <= c2.rht) "
-                         . "AND c2.cid = $pid AND c.uid = u.uid "
-                       . "ORDER BY $cOrder LIMIT $start, $limit";
-                }
-                else
-                {
-                    if( $pid == 0 )
-                    {
-                        // count the total number of applicable comments
-                        $count = DB_count( $_TABLES['comments'], 'sid', $sid );
-
-                        $q = "SELECT c.*, u.username, u.fullname, u.photo, 0 as pindent, " 
-                             . "unix_timestamp(c.date) AS nice_date "
-                           . "FROM {$_TABLES['comments']} as c, {$_TABLES['users']} as u "
-                           . "WHERE c.sid = '$sid' AND c.uid = u.uid "
-                           . "ORDER BY $cOrder LIMIT $start, $limit";
-                    }
-                    else
-                    {
-                        // count the total number of applicable comments
-                        $q2 = "SELECT COUNT(*) "
-                            . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2 "
-                            . "WHERE c.sid = '$sid' AND (c.lft > c2.lft AND c.lft < c2.rht) "
-                            . "AND c2.cid = $pid";
-                        $result = DB_query($q2);
-                        list($count) = DB_fetchArray($result);
-
-                        $q = "SELECT c.*, u.username, u.fullname, u.photo, c2.indent + 1 as pindent, " 
-                             . "unix_timestamp(c.date) AS nice_date "
-                           . "FROM {$_TABLES['comments']} as c, {$_TABLES['comments']} as c2, "
-                             . "{$_TABLES['users']} as u "
-                           . "WHERE c.sid = '$sid' AND (c.lft > c2.lft AND c.lft < c2.rht) "
-                             . "AND c2.cid = $pid AND c.uid = u.uid "
-                           . "ORDER BY $cOrder LIMIT $start, $limit";
-                    }
-                }
-                break;
-        }
-
-        $thecomments = '';
-        $result = DB_query( $q );
-        $thecomments .= COM_getComment( $result, $mode, $type, $order,
-                                        $delete_option );
-        
-        // Pagination
-        $tot_pages =  ceil( $count / $limit );
-        $pLink = $_CONF['site_url'] . "/article.php?story=$sid&amp;type=$type&amp;order=$order&amp;mode=$mode";
-        $template->set_var( 'pagenav',
-                         COM_printPageNavigation($pLink, $page, $tot_pages));
-        
-        $template->set_var( 'comments', $thecomments );
-        $retval = $template->parse( 'output', 'commentarea' );
-    }
+ * DEPRECIATED -- see CMT_userComments in lib-comment.php
+ */
+function COM_userComments( $sid, $title, $type='article', $order='', $mode='', $pid = 0, $page = 1, $cid = false, $delete_option = false ) {
+    global $_CONF;
 
-    return $retval;
+    require_once $_CONF['path_system'] . 'lib-comment.php';
+    return CMT_userComments( $sid, $title, $type, $order, $mode, $pid, $page, $cid, $delete_option );
 }
 
 /**
@@ -3267,7 +2626,7 @@
 {
     global $_CONF;
 
-    $str = stripslashes($str);
+    $str = stripslashes( $str );
 
     // Get rid of any newline characters
     $str = preg_replace( "/\n/", '', $str );
@@ -3304,21 +2663,28 @@
     }
     while( $start_pos !== false );
 
+    if( isset( $_CONF['skip_html_filter_for_root'] ) &&
+             ( $_CONF['skip_html_filter_for_root'] == 1 ) &&
+            SEC_inGroup( 'Root' ))
+    {
+        return $str;
+    }
+
     // strip_tags() gets confused by HTML comments ...
     $str = preg_replace( '/<!--.+?-->/', '', $str );
 
-    $filter = new kses;
+    $filter = new kses4;
     if( isset( $_CONF['allowed_protocols'] ) && is_array( $_CONF['allowed_protocols'] ) && ( sizeof( $_CONF['allowed_protocols'] ) > 0 ))
     {
-        $filter->Protocols( $_CONF['allowed_protocols'] );
+        $filter->SetProtocols( $_CONF['allowed_protocols'] );
     }
     else
     {
-        $filter->Protocols( array( 'http:', 'https:', 'ftp:' ));
+        $filter->SetProtocols( array( 'http:', 'https:', 'ftp:' ));
     }
 
     if( empty( $permissions) || !SEC_hasRights( $permissions ) ||
-            empty( $_CONF['admin_html'] ))       
+            empty( $_CONF['admin_html'] ))
     {
         $html = $_CONF['user_html'];
     }
@@ -3412,12 +2778,9 @@
 {
     $formatted_name = $name;
 
-    $formatted_name = str_replace( ':', '', $formatted_name );
-    $formatted_name = str_replace( '"', '\\"', $formatted_name );
-
-    if(( $name != $formatted_name ) ||
-        ( strpos( $formatted_name, '.' ) !== false ))
+    if( eregi( '[^0-9a-z ]', $formatted_name ))
     {
+        $formatted_name = str_replace( '"', '\\"', $formatted_name );
         $formatted_name = '"' . $formatted_name . '"';
     }
 
@@ -3444,6 +2807,15 @@
 
     static $mailobj;
 
+    if( empty( $from ))
+    {
+        $from = COM_formatEmailAddress( $_CONF['site_name'], $_CONF['site_mail']);
+    }
+
+    $to = substr( $to, 0, strcspn( $to, "\r\n" ));
+    $from = substr( $from, 0, strcspn( $from, "\r\n" ));
+    $subject = substr( $subject, 0, strcspn( $subject, "\r\n" ));
+
     if( function_exists( 'CUSTOM_mail' ))
     {
         return CUSTOM_mail( $to, $subject, $message, $from, $html, $priority );
@@ -3478,11 +2850,6 @@
     else
     {
         $charset = $LANG_CHARSET;
-    }    
-
-    if( empty( $from ))
-    {
-        $from = COM_formatEmailAddress( $_CONF['site_name'], $_CONF['site_mail']);
     }
 
     $headers = array();
@@ -3510,7 +2877,7 @@
         $headers['Content-Type'] = 'text/plain; charset=' . $charset;
     }
     $headers['Subject'] = $subject;
-    if( $priority > 0 )    
+    if( $priority > 0 )
     {
         $headers['X-Priority'] = $priority;
     }
@@ -3538,7 +2905,7 @@
 {
     global $_TABLES, $_CONF;
 
-    $sql = "SELECT sid,tid,title,comments,UNIX_TIMESTAMP(date) AS day FROM {$_TABLES['stories']} WHERE (perm_anon = 2) AND (date <= NOW()) AND (draft_flag = 0)" . COM_getTopicSQL( 'AND', 1 ) . " ORDER BY featured DESC, date DESC LIMIT {$_CONF['limitnews']}, {$_CONF['limitnews']}";
+    $sql = "SELECT sid,tid,title,comments,UNIX_TIMESTAMP(date) AS day FROM {$_TABLES['stories']} WHERE (perm_anon = 2) AND (frontpage = 1) AND (date <= NOW()) AND (draft_flag = 0)" . COM_getTopicSQL( 'AND', 1 ) . " ORDER BY featured DESC, date DESC LIMIT {$_CONF['limitnews']}, {$_CONF['limitnews']}";
     $result = DB_query( $sql );
     $nrows = DB_numRows( $result );
 
@@ -3577,7 +2944,7 @@
 
             $oldnews[] = '<a href="' . COM_buildUrl( $_CONF['site_url']
                 . '/article.php?story=' . $A['sid'] ) . '">' . $A['title']
-                . '</a> (' . $A['comments'] . ')';
+                . '</a> (' . COM_numberFormat( $A['comments'] ) . ')';
         }
 
         if( !empty( $oldnews ))
@@ -3598,7 +2965,7 @@
 * This shows a single block and is typically called from
 * COM_showBlocks OR from plugin code
 *
-* @param        string      $name       Logical name of block (not same as title) -- 'user_block', 'admin_block', 'section_block', 'events_block', 'poll_block', 'whats_new_block'.
+* @param        string      $name       Logical name of block (not same as title) -- 'user_block', 'admin_block', 'section_block', 'events_block', 'whats_new_block'.
 * @param        string      $help       Help file location
 * @param        string      $title      Title shown in block header
 * @see function COM_showBlocks
@@ -3649,13 +3016,6 @@
             }
             break;
 
-        case 'poll_block':
-            if( !$_USER['noboxes'] )
-            {
-                $retval .= COM_showPoll( 60 );
-            }
-            break;
-
         case 'whats_new_block':
             if( !$_USER['noboxes'] )
             {
@@ -3684,7 +3044,7 @@
 
 function COM_showBlocks( $side, $topic='', $name='all' )
 {
-    global $_TABLES, $_CONF, $_USER, $LANG21, $HTTP_SERVER_VARS, $topic, $page, $newstories;
+    global $_CONF, $_TABLES, $_USER, $LANG21, $topic, $page, $newstories;
 
     $retval = '';
 
@@ -3693,7 +3053,8 @@
     {
         if( !empty( $_USER['uid'] ))
         {
-            $result = DB_query( "SELECT boxes,noboxes FROM {$_TABLES['userindex']} WHERE uid = '{$_USER['uid']}'" );
+            $result = DB_query( "SELECT boxes,noboxes FROM {$_TABLES['userindex']} "
+                               ."WHERE uid = '{$_USER['uid']}'" );
             list($_USER['boxes'], $_USER['noboxes']) = DB_fetchArray( $result );
         }
         else
@@ -3705,11 +3066,13 @@
 
     if( $side == 'left' )
     {
-        $sql = "SELECT *,UNIX_TIMESTAMP(rdfupdated) as date FROM {$_TABLES['blocks']} WHERE onleft = 1 AND is_enabled = 1";
+        $sql = "SELECT *,UNIX_TIMESTAMP(rdfupdated) AS date "
+              ."FROM {$_TABLES['blocks']} WHERE onleft = 1 AND is_enabled = 1";
     }
     else
     {
-        $sql = "SELECT *,UNIX_TIMESTAMP(rdfupdated) as date FROM {$_TABLES['blocks']} WHERE onleft = 0 AND is_enabled = 1";
+        $sql = "SELECT *,UNIX_TIMESTAMP(rdfupdated) AS date "
+              ."FROM {$_TABLES['blocks']} WHERE onleft = 0 AND is_enabled = 1";
     }
 
     if( !empty( $topic ))
@@ -3740,20 +3103,46 @@
     $result = DB_query( $sql );
     $nrows = DB_numRows( $result );
 
+    // convert result set to an array of associated arrays
+    $blocks = array();
     for( $i = 1; $i <= $nrows; $i++ )
     {
-        $A = DB_fetchArray( $result );
+        $blocks[] = DB_fetchArray( $result );
+    }
+
+    // Check and see if any plugins have blocks to show
+    $pluginBlocks = PLG_getBlocks( $side, $topic, $name );
+    $blocks = array_merge( $blocks, $pluginBlocks );
+
+    // sort the resulting array by block order
+    $column = 'blockorder';
+    $sortedBlocks = $blocks;
+    for( $i = 0; $i < sizeof( $sortedBlocks )-1; $i++ )
+    {
+        for ($j=0; $j<sizeof($sortedBlocks)-1-$i; $j++)
+        {
+            if ($sortedBlocks[$j][$column] > $sortedBlocks[$j+1][$column])
+            {
+                $tmp = $sortedBlocks[$j];
+                $sortedBlocks[$j] = $sortedBlocks[$j + 1];
+                $sortedBlocks[$j + 1] = $tmp;
+            }
+        }
+    }
+    $blocks = $sortedBlocks;
 
-        if( SEC_hasAccess( $A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon']) > 0 )
+    // Loop though resulting sorted array aand pass associative arays to COM_formatBlock
+    foreach( $blocks as $A )
+    {
+        if( SEC_hasAccess( $A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon']) > 0 or $A['type'] == 'dynamic' )
         {
-            $retval .= COM_formatBlock( $A, $_USER['noboxes'] );
+           $retval .= COM_formatBlock( $A, $_USER['noboxes'] );
         }
     }
 
     return $retval;
 }
 
-
 /**
 * Formats a Geeklog block
 *
@@ -3767,13 +3156,12 @@
 */
 function COM_formatBlock( $A, $noboxes = false )
 {
-    global $_CONF, $_TABLES, $_USER, $LANG21, $HTTP_SERVER_VARS,
-           $topic, $page, $newstories;
+    global $_CONF, $_TABLES, $_USER, $LANG21, $topic, $page, $newstories;
 
     $retval = '';
     if( $A['type'] == 'portal' )
     {
-        if( COM_rdfCheck( $A['bid'], $A['rdfurl'], $A['date'] ))
+        if( COM_rdfCheck( $A['bid'], $A['rdfurl'], $A['date'], $A['rdflimit'] ))
         {
             $A['content'] = DB_getItem( $_TABLES['blocks'], 'content',
                                         "bid = '{$A['bid']}'");
@@ -3818,6 +3206,7 @@
     if( !empty( $A['content'] ) && !$_USER['noboxes'] )
     {
         $blockcontent = stripslashes( $A['content'] );
+        $blockcontent = str_replace( array( '<?', '?>' ), '', $blockcontent );
 
         // Hack: If the block content starts with a '<' assume it
         // contains HTML and do not call nl2br() which would only add
@@ -3833,6 +3222,7 @@
                 . $blockcontent . LB
                 . COM_endBlock( COM_getBlockTemplate( $A['name'], 'footer' ));
     }
+
     return $retval;
 }
 
@@ -3842,21 +3232,22 @@
 *
 * Updates RDF/RSS block if needed
 *
-* @param        string      $bid        Block ID
-* @param        string      $rdfurl     URL to get headlines from
-* @param        string      $date       Last time the headlines were imported
-* @see function COM_rdfImport
+* @param    string  $bid            Block ID
+* @param    string  $rdfurl         URL to get headlines from
+* @param    string  $date           Last time the headlines were imported
+* @param    string  $maxheadlines   max. number of headlines to import
 * @return   void
+* @see function COM_rdfImport
+*
 */
-
-function COM_rdfCheck( $bid, $rdfurl, $date )
+function COM_rdfCheck( $bid, $rdfurl, $date, $maxheadlines = 0 )
 {
     $retval = false;
     $nextupdate = $date + 3600;
 
     if( $nextupdate < time() )
     {
-        COM_rdfImport( $bid, $rdfurl );
+        COM_rdfImport( $bid, $rdfurl, $maxheadlines );
         $retval = true;
     }
 
@@ -3864,178 +3255,89 @@
 }
 
 /**
-* Imports an RDF/RSS block
-*
-* This will pull content from another site and store it in the database
-* to be shown within a portal block
-*
-* new RDF parser provided by Roger Webster
-*
-*/
-
-$RDFinsideitem = false;
-$RDFtag = '';
-$RDFtitle = '';
-$RDFlink = '';
-$RDFheadlines = array();
-
-function COM_rdfStartElement( $parser, $name, $attrs )
-{
-    global $RDFinsideitem, $RDFtag;
-
-    if( $RDFinsideitem )
-    {
-        $RDFtag = $name;
-    }
-    elseif( $name == 'ITEM' )
-    {
-        $RDFinsideitem = true;
-    }
-}
-
-function COM_rdfEndElement( $parser, $name )
-{
-    global $RDFinsideitem, $RDFtag, $RDFtitle, $RDFlink, $RDFheadlines;
-
-    if( $name == 'ITEM' )
-    {
-        $RDFtitle = str_replace( '$', '&#36;', $RDFtitle );
-        $RDFheadlines[] = '<a href="' . addslashes( trim( $RDFlink )) . '">' . addslashes( trim( $RDFtitle )) . '</a>';
-        $RDFtitle = '';
-        $RDFlink = '';
-        $RDFinsideitem = false;
-    }
-}
-
-function COM_rdfCharacterData( $parser, $data )
-{
-    global $RDFinsideitem, $RDFtag, $RDFtitle, $RDFlink;
-
-    if( $RDFinsideitem )
-    {
-        switch( $RDFtag )
-        {
-            case 'TITLE':
-                $RDFtitle .= $data;
-                break;
-
-            case 'LINK':
-                $RDFlink .= $data;
-                break;
-        }
-    }
-}
-
-/**
-* This is the actual RDF parser (the above are just helper functions)
+* Syndication import function. Imports headline data to a portal block.
 *
-* @param        string      $bid        Block ID
-* @param        string      $rdfurl     URL to get content from
+* Rewritten December 19th 2004 by Michael Jervis (mike@fuckingbrit.com). Now
+* utilises a Factory Pattern to open a URL and automaticaly retreive a feed
+* object populated with feed data. Then import it into the portal block.
+*
+* @param    string  $bid            Block ID
+* @param    string  $rdfurl         URL to get content from
+* @param    int     $maxheadlines   Maximum number of headlines to display
+* @return   void
 * @see function COM_rdfCheck
 *
 */
-
-function COM_rdfImport( $bid, $rdfurl )
+function COM_rdfImport( $bid, $rdfurl, $maxheadlines = 0 )
 {
-    global $_CONF, $_TABLES, $LANG21,
-           $RDFinsideitem, $RDFtag, $RDFtitle, $RDFlink, $RDFheadlines;
+    global $_CONF, $_TABLES, $LANG21;
 
-    $RDFinsideitem = false;
-    $RDFtag = '';
-    $RDFtitle = '';
-    $RDFlink = '';
-    $RDFheadlines = array();
-
-    $maxheadlines = 0; // set to something > 0 to limit max. number of headlines
-
-    $update = date( 'Y-m-d H:i:s' );
-
-    $result = DB_change( $_TABLES['blocks'], 'rdfupdated', $update,
-                         'bid', $bid );
-    clearstatcache();
-
-    $rdferror = false;
-    $xml_parser = xml_parser_create();
-    @xml_parser_set_option( $xml_parser, XML_OPTION_TARGET_ENCODING,
-                            $_CONF['default_charset'] );
-    xml_set_element_handler( $xml_parser, 'COM_rdfStartElement',
-                             'COM_rdfEndElement');
-    xml_set_character_data_handler( $xml_parser, 'COM_rdfCharacterData' );
-
-    if( $fp = @fopen( $rdfurl, 'r' ))
-    {
-        $startoffeed = true;
-        while( $data = fread( $fp, 4096 ))
+    // Import the feed handling classes:
+    require_once( $_CONF['path_system']
+                  . '/classes/syndication/parserfactory.class.php' );
+    require_once( $_CONF['path_system']
+                  . '/classes/syndication/feedparserbase.class.php' );
+
+    // Load the actual feed handlers:
+    $factory = new FeedParserFactory( $_CONF['path_system']
+                                      . '/classes/syndication/' );
+    $factory->userAgent = 'GeekLog/' . VERSION;
+    $feed = $factory->reader( $rdfurl, $_CONF['default_charset'] );
+
+    // Aquire a reader:
+    if( $feed )
+    {
+        /* We have located a reader, and populated it with the information from
+         * the syndication file. Now we will sort out our display, and update
+         * the block.
+         */
+        if( $maxheadlines == 0 )
         {
-            if( $startoffeed )
+            if( !empty( $_CONF['syndication_max_headlines'] ))
             {
-                $data = ltrim( $data );
-                if( empty( $data ))
-                {
-                    break;
-                }
-                $startoffeed = false;
+                $maxheadlines = $_CONF['syndication_max_headlines'];
             }
-            if( !xml_parse( $xml_parser, $data, feof( $fp )))
+            else
             {
-                $errmsg = sprintf(
-                    'Parse error in %s: %s at line %d',
-                    $rdfurl,
-                    xml_error_string( xml_get_error_code( $xml_parser )),
-                    xml_get_current_line_number( $xml_parser )
-                    );
-
-                COM_errorLog( $errmsg, 1 );
-                $rdferror = true;
-                $result = DB_change( $_TABLES['blocks'], 'content',
-                                     addslashes( $LANG21[4] ), 'bid', $bid );
-                break;
+                $maxheadlines = count( $feed->articles );
             }
         }
-        if( $startoffeed && empty( $data ))
-        {
-            $errmsg = sprintf( 'The feed at %s exists but is currently empty.',
-                               $rdfurl );
-            COM_errorLog( $errmsg, 1 );
-            $rdferror = true;
-            $result = DB_change( $_TABLES['blocks'], 'content',
-                                 addslashes( $LANG21[4] ), 'bid', $bid );
-        }
 
-        fclose( $fp );
-        xml_parser_free( $xml_parser );
+        $update = date( 'Y-m-d H:i:s' );
+        $result = DB_change( $_TABLES['blocks'], 'rdfupdated', $update,
+                                                 'bid', $bid );
 
-        if( !$rdferror )
+        // format articles for display
+        for( $i = 0; $i < $maxheadlines; $i++ )
         {
-            if( $maxheadlines > 0 )
+            if( empty( $feed->articles[$i]['title'] ))
             {
-                $RDFheadlines = array_slice( $RDFheadlines, 0, $maxheadlines );
+                $feed->articles[$i]['title'] = $LANG21[61];
             }
-            $blockcontent = COM_makeList( $RDFheadlines, 'list-feed' );
-            $RDFheadlines = array();
-            $blockcontent = preg_replace( "/(\015\012)|(\015)|(\012)/", '',
-                                          $blockcontent );
-            $result = DB_change( $_TABLES['blocks'], 'content', $blockcontent,
-                                 'bid', $bid);
-        }
-    }
-    else
-    {
-        $errmsg = sprintf( 'Geeklog can not reach the feed at %s.', $rdfurl );
 
-        if( !@ini_get( 'allow_url_fopen' ))
-        {
-            $errmsg = 'Sorry, your webserver configuration does not allow reading of remote files (allow_url_fopen = off).';
+            $content = '<a href="' . $feed->articles[$i]['link'] . '">'
+                     . $feed->articles[$i]['title'] . '</a>';
+            $articles[] = $content;
         }
 
-        COM_errorLog( $errmsg, 1 );
-        $rdferror = true;
+        // build a list
+        $content = COM_makeList( $articles, 'list-feed' );
+        $content = preg_replace( "/(\015\012)|(\015)|(\012)/", '', $content );
 
+        // Standard theme based function to put it in the block
+        $result = DB_change( $_TABLES['blocks'], 'content',
+                             addslashes( $content ), 'bid', $bid );
+    }
+    else
+    {
+        // failed to aquire info, 0 out the block and log an error
+        COM_errorLog( "Unable to aquire feed reader for $rdfurl", 1 );
         $result = DB_change( $_TABLES['blocks'], 'content',
                              addslashes( $LANG21[4] ), 'bid', $bid );
     }
 }
 
+
 /**
 * Returns what HTML is allowed in content
 *
@@ -4053,11 +3355,25 @@
     global $_CONF, $LANG01;
 
     $retval = '';
+
+    if( isset( $_CONF['skip_html_filter_for_root'] ) &&
+             ( $_CONF['skip_html_filter_for_root'] == 1 ) &&
+            SEC_inGroup( 'Root' ))
+    {
+        if( !$list_only )
+        {
+            $retval .= '<span class="warningsmall">' . $LANG01[123] . '</span>';
+        }
+
+        return $retval;
+    }
+
     if( !$list_only )
     {
         $retval .= '<span class="warningsmall">' . $LANG01[31] . ' ';
     }
 
+    $allow_page_break = false;
     if( empty( $permissions ) || !SEC_hasRights( $permissions ) ||
             empty( $_CONF['admin_html'] ))
     {
@@ -4067,6 +3383,18 @@
     {
         $html = array_merge_recursive( $_CONF['user_html'],
                                        $_CONF['admin_html'] );
+        if( $_CONF['allow_page_breaks'] == 1 )
+        {
+            $perms = explode( ',', $permissions );
+            foreach( $perms as $p )
+            {
+                if( substr( $p, 0, 6 ) == 'story.' )
+                {
+                    $allow_page_break = true;
+                    break;
+                }
+            }
+        }
     }
 
     foreach( $html as $tag => $attr )
@@ -4076,6 +3404,11 @@
 
     $retval .= '[code]';
 
+    if( $allow_page_break )
+    {
+        $retval .= ', [page_break]';
+    }
+
     // list autolink tags
     $autotags = PLG_collectTags();
     foreach( $autotags as $tag => $module )
@@ -4131,25 +3464,43 @@
 * should be displayed.
 *
 * @param    int  $uid  site member id
-* @return   string     username or fullname - default is username
+* @param    string  $username   Username, if this is set no lookup is done.
+* @param    string  $fullname   Users full name.
+* @param    string  $service    Remote login service.
+* @return   string  Username, fullname or username@Service
 *
 */
-function COM_getDisplayName( $uid = '' )
+function COM_getDisplayName( $uid = '', $username='', $fullname='', $remoteusername='', $remoteservice='' )
 {
     global $_CONF, $_TABLES, $_USER;
- 
+
     if ($uid == '')
     {
-        $uid = $_USER['uid'];
+        if( empty( $_USER['uid'] ) || ( $_USER['uid'] <= 1 ))
+        {
+            $uid = 1;
+        }
+        else
+        {
+            $uid = $_USER['uid'];
+        }
+    }
+
+    if( empty( $username ))
+    {
+        $query = DB_query( "SELECT username, fullname, remoteusername, remoteservice FROM {$_TABLES['users']} WHERE uid='$uid'" );
+        list( $username, $fullname, $remoteusername, $remoteservice ) = DB_fetchArray( $query );
     }
 
-     $query = DB_query( "SELECT username, fullname FROM {$_TABLES['users']} WHERE uid='$uid'" );
-    list( $username, $fullname ) = DB_fetchArray( $query );
- 
-    if( $fullname != '' AND $_CONF['show_fullname'] == 1 )
+    if( !empty( $fullname ) && ($_CONF['show_fullname'] == 1 ))
     {
         return $fullname;
     }
+    else if( $_CONF['remoteauthentication'] && $_CONF['show_servicename'] &&
+                    !empty( $remoteusername ))
+    {
+        return "$remoteusername@$remoteservice";
+    }
 
     return $username;
 }
@@ -4209,10 +3560,13 @@
         . "WHERE dateend >= NOW() AND (TO_DAYS(datestart) - TO_DAYS(NOW()) < $range) "
         . 'ORDER BY datestart,timestart';
 
-    $personaleventsql = 'SELECT eid,title,url,datestart,dateend,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon '
-        . "FROM {$_TABLES['personal_events']} "
-        . "WHERE uid = {$_USER['uid']} AND dateend >= NOW() AND (TO_DAYS(datestart) - TO_DAYS(NOW()) < $range) "
-        . 'ORDER BY datestart, dateend';
+    if(( $_CONF['personalcalendars'] == 1 ) && !empty( $_USER['uid'] ))
+    {
+        $personaleventsql = 'SELECT eid,title,url,datestart,dateend,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon '
+            . "FROM {$_TABLES['personal_events']} "
+            . "WHERE uid = {$_USER['uid']} AND dateend >= NOW() AND (TO_DAYS(datestart) - TO_DAYS(NOW()) < $range) "
+            . 'ORDER BY datestart, dateend';
+    }
 
     $allEvents = DB_query( $eventSql );
     $numRows = DB_numRows( $allEvents );
@@ -4509,7 +3863,7 @@
 
             if( $_CONF['emailstorieslength'] > 0 )
             {
-                $storytext = COM_undoSpecialChars( stripslashes( strip_tags( $S['introtext'] )));
+                $storytext = COM_undoSpecialChars( strip_tags( PLG_replaceTags( stripslashes( $S['introtext'] ))));
 
                 if( $_CONF['emailstorieslength'] > 1 )
                 {
@@ -4539,42 +3893,29 @@
 }
 
 /**
-* Shows any new information in block
+* Shows any new information in a block
 *
 * Return the HTML that shows any new stories, comments, etc
 *
-* @param        string      $help       Help file for block
-* @param        string      $title      Title used in block header
-* @return     string  Return the HTML that shows any new stories, comments, etc
+* @param    string  $help   Help file for block
+* @param    string  $title  Title used in block header
+* @return   string  Return the HTML that shows any new stories, comments, etc
 *
 */
 
-function COM_whatsNewBlock( $help='', $title='' )
+function COM_whatsNewBlock( $help = '', $title = '' )
 {
-    global $_CONF, $_TABLES, $_USER, $LANG01, $page, $newstories;
+    global $_CONF, $_TABLES, $_USER, $LANG01, $LANG_WHATSNEW, $page, $newstories;
 
     $retval = COM_startBlock( $title, $help,
                        COM_getBlockTemplate( 'whats_new_block', 'header' ));
 
     $topicsql = '';
-    if(( $_CONF['hidenewstories'] == 0 ) || ( $_CONF['hidenewcomments'] == 0 ))
+    if(( $_CONF['hidenewstories'] == 0 ) || ( $_CONF['hidenewcomments'] == 0 )
+            || ( $_CONF['trackback_enabled']
+            && ( $_CONF['hidenewtrackbacks'] == 0 )))
     {
-        $tresult = DB_query( "SELECT tid FROM {$_TABLES['topics']}"
-                             . COM_getPermSQL() );
-        $trows = DB_numRows( $tresult );
-        if( $trows > 0 )
-        {
-            $tids = array();
-            for( $i = 0; $i < $trows; $i++ )
-            {
-                $T = DB_fetchArray( $tresult );
-                $tids[] = $T['tid'];
-            }
-            if( sizeof( $tids ) > 0 )
-            {
-                $topicsql = " AND (tid IN ('" . implode( "','", $tids ) . "'))";
-            }
-        }
+        $topicsql = COM_getTopicSql ('AND', 0, $_TABLES['stories']);
     }
 
     if( $_CONF['hidenewstories'] == 0 )
@@ -4595,33 +3936,17 @@
 
         if( $nrows > 0 )
         {
-            $hours = (( $_CONF['newstoriesinterval'] / 60 ) / 60 );
-            if( $nrows == 1 )
+            $newmsg = COM_formatTimeString( $LANG_WHATSNEW['new_string'],
+                        $_CONF['newstoriesinterval'], $LANG01[11], $nrows);
+
+            if( $newstories && ( $page < 2 ))
             {
-                $newmsg = '1 ' . $LANG01[81] . ' ' . $hours . ' ' . $LANG01[82];
-                if( $newstories && ( $page < 2 ))
-                {
-                    $retval .= $newmsg . '<br>';
-                }
-                else
-                {
-                    $retval .= '<a href="' . $_CONF['site_url']
-                        . '/index.php?display=new">' . $newmsg . '</a><br>';
-                }
+                $retval .= $newmsg . '<br>';
             }
             else
             {
-                $newmsg = $nrows . ' ' . $LANG01[80] . ' ' . $hours . ' '
-                    . $LANG01[82];
-                if( $newstories && ( $page < 2 ))  
-                {
-                    $retval .= $newmsg . '<br>';
-                }
-                else 
-                {
-                    $retval .= '<a href="' . $_CONF['site_url']
-                        . '/index.php?display=new">' . $newmsg . '</a><br>';
-                }
+                $retval .= '<a href="' . $_CONF['site_url']
+                    . '/index.php?display=new">' . $newmsg . '</a><br>';
             }
         }
         else
@@ -4629,7 +3954,8 @@
             $retval .= $LANG01[100] . '<br>';
         }
 
-        if(( $_CONF['hidenewcomments'] == 0 ) || ( $_CONF['hidenewlinks'] == 0 )
+        if(( $_CONF['hidenewcomments'] == 0 ) || ( $_CONF['trackback_enabled']
+                && ( $_CONF['hidenewtrackbacks'] == 0 ))
                 || ( $_CONF['hidenewplugins'] == 0 ))
         {
             $retval .= '<br>';
@@ -4639,7 +3965,10 @@
     if( $_CONF['hidenewcomments'] == 0 )
     {
         // Go get the newest comments
-        $retval .= '<b>' . $LANG01[83] . '</b> <small>' . $LANG01[85] . '</small><br>';
+        $retval .= '<b>' . $LANG01[83] . '</b> <small>'
+                . COM_formatTimeString( $LANG_WHATSNEW['new_last'],
+                                        $_CONF['newcommentsinterval'] )
+                . '</small><br>';
 
         $stwhere = '';
 
@@ -4653,21 +3982,7 @@
         {
             $stwhere .= "({$_TABLES['stories']}.perm_anon IS NOT NULL)";
         }
-
-        $powhere = '';
-
-        if( !empty( $_USER['uid'] ))
-        {
-            $powhere .= "({$_TABLES['pollquestions']}.owner_id IS NOT NULL AND {$_TABLES['pollquestions']}.perm_owner IS NOT NULL) OR ";
-            $powhere .= "({$_TABLES['pollquestions']}.group_id IS NOT NULL AND {$_TABLES['pollquestions']}.perm_group IS NOT NULL) OR ";
-            $powhere .= "({$_TABLES['pollquestions']}.perm_members IS NOT NULL)";
-        }
-        else
-        {
-            $powhere .= "({$_TABLES['pollquestions']}.perm_anon IS NOT NULL)";
-        }
-
-        $sql = "SELECT DISTINCT count(*) AS dups, type, question, {$_TABLES['stories']}.title, {$_TABLES['stories']}.sid, qid, max({$_TABLES['comments']}.date) as lastdate FROM {$_TABLES['comments']} LEFT JOIN {$_TABLES['stories']} ON (({$_TABLES['stories']}.sid = {$_TABLES['comments']}.sid)" . COM_getPermSQL( 'AND', 0, 2, $_TABLES['stories'] ) . " AND ({$_TABLES['stories']}.draft_flag = 0)" . $topicsql . ") LEFT JOIN {$_TABLES['pollquestions']} ON ((qid = {$_TABLES['comments']}.sid)" . COM_getPermSQL( 'AND', 0, 2, $_TABLES['pollquestions'] ) . ") WHERE ({$_TABLES['comments']}.date >= (DATE_SUB(NOW(), INTERVAL {$_CONF['newcommentsinterval']} SECOND))) AND ((({$stwhere})) OR (({$powhere}))) GROUP BY {$_TABLES['comments']}.sid ORDER BY 7 DESC LIMIT 15";
+        $sql = "SELECT DISTINCT count(*) AS dups, type, {$_TABLES['stories']}.title, {$_TABLES['stories']}.sid, max({$_TABLES['comments']}.date) as lastdate FROM {$_TABLES['comments']} LEFT JOIN {$_TABLES['stories']} ON (({$_TABLES['stories']}.sid = {$_TABLES['comments']}.sid)" . COM_getPermSQL( 'AND', 0, 2, $_TABLES['stories'] ) . " AND ({$_TABLES['stories']}.draft_flag = 0)" . $topicsql . ") WHERE ({$_TABLES['comments']}.date >= (DATE_SUB(NOW(), INTERVAL {$_CONF['newcommentsinterval']} SECOND))) AND ((({$stwhere}))) GROUP BY {$_TABLES['comments']}.sid ORDER BY 5 DESC LIMIT 15";
 
         $result = DB_query( $sql );
 
@@ -4677,54 +3992,35 @@
         {
             $newcomments = array();
 
-            for( $x = 1; $x <= $nrows; $x++ )
+            for( $x = 0; $x < $nrows; $x++ )
             {
                 $A = DB_fetchArray( $result );
 
                 if(( $A['type'] == 'article' ) || empty( $A['type'] ))
                 {
-                    $itemlen = strlen( $A['title'] );
-                    $titletouse = stripslashes( $A['title'] );
+                    $titletouse = COM_undoSpecialChars( stripslashes( $A['title'] ));
+                    $itemlen = strlen( $titletouse );
                     $urlstart = '<a href="' . COM_buildUrl( $_CONF['site_url']
                         . '/article.php?story=' . $A['sid'] ) . '#comments' . '"';
                 }
-                else if( $A['type'] == 'poll' )
-                {
-                    $itemlen = strlen( $A['question'] );
-                    $titletouse = $A['question'];
-                    $urlstart = '<a href="' . $_CONF['site_url'] . '/pollbooth.php?qid=' . $A['qid'] . '&amp;aid=-1#comments"';
-                }
 
+                // Trim the length if over 20 characters
                 if( $itemlen > 20 )
                 {
                     $urlstart .= ' title="' . htmlspecialchars( $titletouse ) . '">';
+                    $titletouse = substr( $titletouse, 0, 17 ) . '...';
                 }
                 else
                 {
                     $urlstart .= '>';
                 }
 
-                // Trim the length if over 20 characters
-                if( $itemlen > 20 )
-                {
-                    $titletouse = substr( $titletouse, 0, 17 );
-                    $acomment = str_replace( '$', '&#36;', $titletouse ) . '...';
-                    $acomment = str_replace( ' ', '&nbsp;', $acomment );
+                $acomment = str_replace( '$', '&#36;', $titletouse );
+                $acomment = str_replace( ' ', '&nbsp;', $acomment );
 
-                    if( $A['dups'] > 1 )
-                    {
-                        $acomment .= ' [+' . $A['dups'] . ']';
-                    }
-                }
-                else
+                if( $A['dups'] > 1 )
                 {
-                    $acomment = str_replace( '$', '&#36;', $titletouse );
-                    $acomment = str_replace( ' ', '&nbsp;', $acomment );
-
-                    if( $A['dups'] > 1 )
-                    {
-                        $acomment .= ' [+' . $A['dups'] . ']';
-                    }
+                    $acomment .= ' [+' . $A['dups'] . ']';
                 }
 
                 $newcomments[] = $urlstart . $acomment . '</a>';
@@ -4736,56 +4032,66 @@
         {
             $retval .= $LANG01[86] . '<br>' . LB;
         }
-
-        if(( $_CONF['hidenewlinks'] == 0 ) || ( $_CONF['hidenewplugins'] == 0 ))
+        if(( $_CONF['hidenewplugins'] == 0 )
+                || ( $_CONF['trackback_enabled']
+                && ( $_CONF['hidenewtrackbacks'] == 0 )))
         {
             $retval .= '<br>';
         }
     }
 
-    if( $_CONF['hidenewlinks'] == 0 )
+    if( $_CONF['trackback_enabled'] && ( $_CONF['hidenewtrackbacks'] == 0 ))
     {
-        // Get newest links
-        $retval .= '<b>' . $LANG01[84] . '</b> <small>' . $LANG01[87] . '</small><br>';
+        $retval .= '<b>' . $LANG01[114] . '</b> <small>'
+                . COM_formatTimeString( $LANG_WHATSNEW['new_last'],
+                                        $_CONF['newtrackbackinterval'] )
+                . '</small><br>';
 
-        $sql = "SELECT lid,title FROM {$_TABLES['links']} WHERE (date >= (date_sub(NOW(), INTERVAL {$_CONF['newlinksinterval']} SECOND)))" . COM_getPermSQL( 'AND' ) . ' ORDER BY date DESC LIMIT 15';
+        $sql = "SELECT DISTINCT COUNT(*) AS count,{$_TABLES['stories']}.title,t.sid,max(t.date) AS lastdate FROM {$_TABLES['trackback']} AS t,{$_TABLES['stories']} WHERE (t.type = 'article') AND (t.sid = {$_TABLES['stories']}.sid) AND (t.date >= (DATE_SUB(NOW(), INTERVAL {$_CONF['newtrackbackinterval']} SECOND)))" . COM_getPermSQL( 'AND', 0, 2, $_TABLES['stories'] ) . " AND ({$_TABLES['stories']}.draft_flag = 0)" . $topicsql . " GROUP BY t.sid ORDER BY lastdate DESC LIMIT 15";
         $result = DB_query( $sql );
-        $nrows = DB_numRows( $result );
 
+        $nrows = DB_numRows( $result );
         if( $nrows > 0 )
         {
-            $newlinks = array();
-            for( $x = 0; $x < $nrows; $x++ )
+            $newcomments = array();
+
+            for( $i = 0; $i < $nrows; $i++ )
             {
                 $A = DB_fetchArray( $result );
-                $A['title'] = stripslashes( $A['title'] );
 
-                // redirect link via portal.php so we can count the clicks
-                $lcount = COM_buildUrl( $_CONF['site_url']
-                        . '/portal.php?what=link&amp;item=' . $A['lid'] );
-
-                // Trim the length if over 16 characters
-                $itemlen = strlen( $A['title'] );
-                if( $itemlen > 16 )
-                {
-                    $newlinks [] = '<a href="' . $lcount . '" title="'
-                        . $A['title'] . '">' . substr( $A['title'], 0, 16 )
-                        . '...</a>' . LB;
+                $titletouse = COM_undoSpecialChars( stripslashes( $A['title'] ));
+                $itemlen = strlen( $titletouse );
+                $urlstart = '<a href="' . COM_buildUrl( $_CONF['site_url']
+                    . '/article.php?story=' . $A['sid'] ) . '#trackback' . '"';
+
+                // Trim the length if over 20 characters
+                if( $itemlen > 20 )
+                {
+                    $urlstart .= ' title="' . htmlspecialchars( $titletouse ) . '">';
+                    $titletouse = substr( $titletouse, 0, 17 ) . '...';
                 }
                 else
                 {
-                    $newlinks[] = '<a href="' . $lcount . '">'
-                        . substr( $A['title'], 0, $itemlen ) . '</a>' . LB;
+                    $urlstart .= '>';
+                }
+
+                $acomment = str_replace( '$', '&#36;', $titletouse );
+                $acomment = str_replace( ' ', '&nbsp;', $acomment );
+
+                if( $A['count'] > 1 )
+                {
+                    $acomment .= ' [+' . $A['count'] . ']';
                 }
+
+                $newcomments[] = $urlstart . $acomment . '</a>';
             }
 
-            $retval .= COM_makeList( $newlinks, 'list-new-links' );
+            $retval .= COM_makeList( $newcomments, 'list-new-trackbacks' );
         }
         else
         {
-            $retval .= $LANG01[88] . '<br>' . LB;
+            $retval .= $LANG01[115] . '<br>' . LB;
         }
-
         if( $_CONF['hidenewplugins'] == 0 )
         {
             $retval .= '<br>';
@@ -4794,14 +4100,14 @@
 
     if( $_CONF['hidenewplugins'] == 0 )
     {
-        list( $headlines, $bylines, $content ) = PLG_getWhatsNew();
+        list( $headlines, $smallheadlines, $content ) = PLG_getWhatsNew();
         $plugins = sizeof( $headlines );
         if( $plugins > 0 )
         {
             for( $i = 0; $i < $plugins; $i++ )
             {
                 $retval .= '<b>' . $headlines[$i] . '</b> <small>'
-                        . $bylines[$i] . '</small><br>';
+                        . $smallheadlines[$i] . '</small><br>';
                 if( is_array( $content[$i] ))
                 {
                     $retval .= COM_makeList( $content[$i], 'list-new-plugins' );
@@ -4825,6 +4131,54 @@
 }
 
 /**
+* Creates the string that indicates the timespan in which new items were found
+*
+* @param    string  $time_string    template string
+* @param    int     $time           number of seconds in which results are found
+* @param    string  $type           type (translated string) of new item
+* @param    int     $amount         amount of things that have been found.
+*/
+function COM_formatTimeString( $time_string, $time, $type = '', $amount = 0 )
+{
+    global $LANG_WHATSNEW;
+
+    $retval = $time_string;
+
+    // This is the amount you have to divide the previous by to get the
+    // different time intervals: hour, day, week, months
+    $time_divider = array ( 60, 60, 24, 7, 30 );
+
+    // These are the respective strings to the numbers above. They have to match
+    // the strings in $LANG_WHATSNEW (i.e. these are the keys for the array -
+    // the actual text strings are taken from the language file).
+    $times_description = array ( 'minutes', 'hours', 'days', 'weeks', 'months' );
+    $time_description = array ( 'minute', 'hour', 'day', 'week', 'month' );
+
+    for ( $s = 0; $s < count( $time_divider ); $s++ )
+    {
+        $time = $time / $time_divider[$s];
+        if ( $time < $time_divider[$s + 1] )
+        {
+            if ( $time == 1 )
+            {
+                $time_str = $time_description[$s];
+            }
+            else
+            {
+                $time_str = $times_description[$s];
+            }
+            $fields = array( '%n', '%i', '%t', '%s' );
+            $values = array( $amount, $type, $time, $LANG_WHATSNEW[$time_str] );
+            $retval = str_replace( $fields, $values, $retval );
+            break;
+        }
+    }
+
+    return $retval;
+}
+
+
+/**
 * Displays a message on the webpage
 *
 * Pulls $msg off the URL string and gets the corresponding message and returns
@@ -4837,7 +4191,7 @@
 
 function COM_showMessage( $msg, $plugin='' )
 {
-    global $_CONF, $MESSAGE;
+    global $_CONF, $MESSAGE, $_IMAGE_TYPE;
 
     $retval = '';
 
@@ -4864,9 +4218,10 @@
         $timestamp = strftime( $_CONF['daytime'] );
         $retval .= COM_startBlock( $MESSAGE[40] . ' - ' . $timestamp, '',
                            COM_getBlockTemplate( '_msg_block', 'header' ))
-            . '<table><tr><td><img src="' . $_CONF['layout_url']
-            . '/images/sysmessage.gif" border="0" align="top" alt=""></td>'
-            . '<td style="padding:5px;">' . $message . '</td></tr></table>'
+            . '<p style="padding:5px"><img src="' . $_CONF['layout_url']
+            . '/images/sysmessage.' . $_IMAGE_TYPE . '" border="0" align="left"'
+            . ' alt="" style="padding-right:5px; padding-bottom:3px">'
+            . $message . '</p>'
             . COM_endBlock( COM_getBlockTemplate( '_msg_block', 'footer' ));
     }
 
@@ -4880,32 +4235,53 @@
 * @param        string      $base_url       base url to use for all generated links
 * @param        int         $curpage        current page we are on
 * @param        int         $num_pages      Total number of pages
+* @param        string      $page_str       page-variable name AND '='
+* @param        bool        $do_rewrite     if true, url-rewriting is respected
+* @param        string      $msg            to be displayed with the navigation
+* @param        string      $open_ended     replace next/last links with this
 * @return   string   HTML formatted widget
 */
-
-function COM_printPageNavigation( $base_url, $curpage, $num_pages )
+function COM_printPageNavigation( $base_url, $curpage, $num_pages,
+                                  $page_str='page=', $do_rewrite=false, $msg='',
+                                  $open_ended = '')
 {
     global $LANG05;
 
-    $hasargs = strstr( $base_url, '?' );
+    $retval = '';
 
-    if( $num_pages < 2 ) 
+    if( $num_pages < 2 )
     {
         return;
     }
 
-    $retval = '';
+    if( !$do_rewrite )
+    {
+        $hasargs = strstr( $base_url, '?' );
+        if( $hasargs )
+        {
+            $sep = '&amp;';
+        }
+        else
+        {
+            $sep = '?';
+        }
+    }
+    else
+    {
+        $sep = '/';
+        $page_str = '';
+    }
 
     if( $curpage > 1 )
     {
-        if( $hasargs )
+        $retval .= '<a href="' . $base_url . '">' . $LANG05[7] . '</a> | ';
+        $pg = '';
+        if( ( $curpage - 1 ) > 1 )
         {
-            $retval .= '<a href="' . $base_url . '&amp;page=1">' . $LANG05[7] . '</a> | ';
-            $retval .= '<a href="' . $base_url . '&amp;page=' . ( $curpage - 1 ) . '">' . $LANG05[6] . '</a> | ';
-        } else {
-            $retval .= '<a href="' . $base_url . '?page=1">' . $LANG05[7] . '</a> | ';
-            $retval .= '<a href="' . $base_url . '?page=' . ( $curpage - 1 ) . '">' . $LANG05[6] . '</a> | ';
+            $pg = $sep . $page_str . ( $curpage - 1 );
         }
+        $retval .= '<a href="' . $base_url . $pg . '">' . $LANG05[6]
+                . '</a> | ';
     }
     else
     {
@@ -4926,37 +4302,40 @@
         }
         else
         {
-            if( $hasargs )
+            $pg = '';
+            if( $pgcount > 1 )
             {
-                $retval .= '<a href="' . $base_url . '&amp;page=' . $pgcount . '">' . $pgcount . '</a> ';
-            }
-            else
-            {
-                $retval .= '<a href="' . $base_url . '?page=' . $pgcount . '">' . $pgcount . '</a> ';
+                $pg = $sep . $page_str . $pgcount;
             }
+            $retval .= '<a href="' . $base_url . $pg . '">' . $pgcount
+                    . '</a> ';
         }
     }
 
-    if( $curpage == $num_pages )
+    if( !empty( $open_ended ))
+    {
+        $retval .= '| ' . $open_ended;
+    }
+    else if( $curpage == $num_pages )
     {
         $retval .= '| ' . $LANG05[5] . ' ';
         $retval .= '| ' . $LANG05[8];
     }
     else
     {
-        if( $hasargs )
-        {
-            $retval .= '| <a href="' . $base_url . '&amp;page=' . ( $curpage + 1 ) . '">' . $LANG05[5] . '</a> ';
-            $retval .= '| <a href="' . $base_url . '&amp;page=' . $num_pages . '">' . $LANG05[8] . '</a>';
-        } else {
-            $retval .= '| <a href="' . $base_url . '?page=' . ( $curpage + 1 ) . '">' . $LANG05[5] . '</a> ';
-            $retval .= '| <a href="' . $base_url . '?page=' . $num_pages . '">' . $LANG05[8] . '</a>';
-        }
+        $retval .= '| <a href="' . $base_url . $sep . $page_str
+                . ( $curpage + 1 ) . '">' . $LANG05[5] . '</a> ';
+        $retval .= '| <a href="' . $base_url . $sep . $page_str . $num_pages
+                . '">' . $LANG05[8] . '</a>';
     }
 
     if( !empty( $retval ))
     {
-        $retval = '<div class="pagenav">' . $retval . '</div>';
+        if( !empty( $msg ))
+        {
+            $msg .=  ' ';
+        }
+        $retval = '<div class="pagenav">' . $msg . $retval . '</div>';
     }
 
     return $retval;
@@ -4980,7 +4359,7 @@
 
     // Get display format for time
 
-    if( $_USER['uid'] > 1 )
+    if( !empty( $_USER['uid'] ) && ( $_USER['uid'] > 1 ))
     {
         if( empty( $_USER['format'] ))
         {
@@ -5054,19 +4433,20 @@
 
 function phpblock_whosonline()
 {
-    global $_CONF, $_TABLES, $_USER, $LANG01;
+    global $_CONF, $_TABLES, $_USER, $LANG01, $_IMAGE_TYPE;
 
     $retval = '';
 
     $expire_time = time() - $_CONF['whosonline_threshold'];
 
-    if( $_CONF['whosonline_fullname'] == 1 )
+    $byname = 'username';
+    if( $_CONF['show_fullname'] == 1 )
     {
-        $byname = 'fullname,username';
+        $byname .= ',fullname';
     }
-    else
+    if( $_CONF['remoteauthentication'] )
     {
-        $byname = 'username';
+        $byname .= ',remoteusername,remoteservice';
     }
 
     $result = DB_query( "SELECT DISTINCT {$_TABLES['sessions']}.uid,{$byname},photo,showonline FROM {$_TABLES['sessions']},{$_TABLES['users']},{$_TABLES['userprefs']} WHERE {$_TABLES['users']}.uid = {$_TABLES['sessions']}.uid AND {$_TABLES['users']}.uid = {$_TABLES['userprefs']}.uid AND start_time >= $expire_time AND {$_TABLES['sessions']}.uid <> 1 ORDER BY {$byname}" );
@@ -5081,13 +4461,20 @@
 
         if( $A['showonline'] == 1 )
         {
-            $username = $A['username'];
-            if( $_CONF['whosonline_fullname'] == 1 )
+            $fullname = '';
+            if( $_CONF['show_fullname'] == 1 )
             {
-                if( !empty( $A['fullname'] ))
-                {
-                    $username = $A['fullname'];
-                }
+                $fullname = $A['fullname'];
+            }
+            if( $_CONF['remoteauthentication'] )
+            {
+                $username = COM_getDisplayName( $A['uid'], $A['username'],
+                        $fullname, $A['remoteusername'], $A['remoteservice'] );
+            }
+            else
+            {
+                $username = COM_getDisplayName( $A['uid'], $A['username'],
+                                                $fullname );
             }
             $retval .= '<a href="' . $_CONF['site_url']
                     . '/users.php?mode=profile&amp;uid=' . $A['uid'] . '">'
@@ -5098,7 +4485,8 @@
                 $retval .= '&nbsp;<a href="' . $_CONF['site_url']
                         . '/users.php?mode=profile&amp;uid=' . $A['uid']
                         . '"><img src="' . $_CONF['layout_url']
-                        . '/images/smallcamera.gif" border="0" alt=""></a>';
+                        . '/images/smallcamera.' . $_IMAGE_TYPE
+                        . '" border="0" alt=""></a>';
             }
             $retval .= '<br>';
             $num_reg++;
@@ -5392,16 +4780,26 @@
 * Check if speed limit applies for current IP address.
 *
 * @param type   string   type of speed limit to check, e.g. 'submit', 'comment'
+* @param max    int      max number of allowed tries within speed limit
 * @return       int      0 = does not apply, else: seconds since last post
 */
-function COM_checkSpeedlimit( $type = 'submit' )
+function COM_checkSpeedlimit( $type = 'submit', $max = 1 )
 {
-    global $_TABLES, $HTTP_SERVER_VARS;
+    global $_TABLES;
 
     $last = 0;
 
-    $date = DB_getItem( $_TABLES['speedlimit'], 'date',
-            "(type = '$type') AND (ipaddress = '{$HTTP_SERVER_VARS['REMOTE_ADDR']}')" );
+    $res  = DB_query( "SELECT date FROM {$_TABLES['speedlimit']} WHERE (type = '$type') AND (ipaddress = '{$_SERVER['REMOTE_ADDR']}') ORDER BY date ASC" );
+
+    // If the number of allowed tries has not been reached,
+    // return 0 (didn't hit limit)
+    if( DB_numRows( $res ) < $max )
+    {
+        return $last;
+    }
+
+    list( $date ) = DB_fetchArray( $res );
+
     if( !empty( $date ))
     {
         $last = time() - $date;
@@ -5423,10 +4821,10 @@
 */
 function COM_updateSpeedlimit( $type = 'submit' )
 {
-    global $_TABLES, $HTTP_SERVER_VARS;
+    global $_TABLES;
 
     DB_save( $_TABLES['speedlimit'], 'ipaddress,date,type',
-             "'{$HTTP_SERVER_VARS['REMOTE_ADDR']}',unix_timestamp(),'$type'" );
+             "'{$_SERVER['REMOTE_ADDR']}',unix_timestamp(),'$type'" );
 }
 
 /**
@@ -5640,7 +5038,7 @@
 
     $sql .= ')';
 
-    return $sql;   
+    return $sql;
 }
 
 /**
@@ -5649,10 +5047,13 @@
 * Creates part of an SQL expression that can be used to only request stories
 * from topics to which the user has access to.
 *
-* @param        string      $type     part of the SQL expr. e.g. 'WHERE', 'AND'
-* @param        int         $u_id     user id or 0 = current user
-* @param        string      $table    table name if ambiguous (e.g. in JOINs)
-* @return       string      SQL expression string (may be empty)
+* Note that this function does an SQL request, so you should cache
+* the resulting SQL expression if you need it more than once.
+*
+* @param    string  $type   part of the SQL expr. e.g. 'WHERE', 'AND'
+* @param    int     $u_id   user id or 0 = current user
+* @param    string  $table  table name if ambiguous (e.g. in JOINs)
+* @return   string          SQL expression string (may be empty)
 *
 */
 function COM_getTopicSQL( $type = 'WHERE', $u_id = 0, $table = '' )
@@ -5735,8 +5136,6 @@
 */
 function COM_applyFilter( $parameter, $isnumeric = false )
 {
-    global $HTTP_SERVER_VARS;
-
     $log_manipulation = false; // set to true to log when the filter applied
 
     $p = COM_stripslashes( $parameter );
@@ -5746,7 +5145,7 @@
     if( $isnumeric )
     {
         // Note: PHP's is_numeric() accepts values like 4e4 as numeric
-        if( !is_numeric( $p ) || ( preg_match( '/^([0-9]+)$/', $p ) == 0 ))
+        if( !is_numeric( $p ) || ( preg_match( '/^-?\d+$/', $p ) == 0 ))
         {
             $p = 0;
         }
@@ -5767,7 +5166,7 @@
     {
         if( strcmp( $p, $parameter ) != 0 )
         {
-            COM_errorLog( "Filter applied: >> $parameter << filtered to $p [IP {$HTTP_SERVER_VARS['REMOTE_ADDR']}]", 1);
+            COM_errorLog( "Filter applied: >> $parameter << filtered to $p [IP {$_SERVER['REMOTE_ADDR']}]", 1);
         }
     }
 
@@ -5823,6 +5222,13 @@
     // escape all the other PCRE special characters
     $query = preg_quote( $query );
 
+    // ugly workaround:
+    // Using the /e modifier in preg_replace will cause all double quotes to
+    // be returned as \" - so we replace all \" in the result with unescaped
+    // double quotes. Any actual \" in the original text therefore have to be
+    // turned into \\" first ...
+    $text = str_replace( '\\"', '\\\\"', $text );
+
     $mywords = explode( ' ', $query );
     foreach( $mywords as $searchword )
     {
@@ -5832,6 +5238,9 @@
         }
     }
 
+    // ugly workaround, part 2
+    $text = str_replace( '\\"', '"', $text );
+
     return $text;
 }
 
@@ -5841,7 +5250,7 @@
 * This will takes either unixtimestamps or English dates as input and will
 * automatically do the date diff on the more recent of the two dates (e.g. the
 * order of the two dates given doesn't matter).
-* 
+*
 * @author Tony Bibbs <tony.bibbs@iowa.gov
 * @access public
 * @param string $interval Can be:
@@ -5948,42 +5357,42 @@
 */
 function COM_getCurrentURL()
 {
-    global $_CONF, $HTTP_SERVER_VARS;
+    global $_CONF;
 
     $thisUrl = '';
 
-    if( empty( $HTTP_SERVER_VARS['SCRIPT_URI'] ))
+    if( empty( $_SERVER['SCRIPT_URI'] ))
     {
-        if( !empty( $HTTP_SERVER_VARS['DOCUMENT_URI'] ))
+        if( !empty( $_SERVER['DOCUMENT_URI'] ))
         {
-            $thisUrl = $HTTP_SERVER_VARS['DOCUMENT_URI'];
+            $thisUrl = $_SERVER['DOCUMENT_URI'];
         }
     }
     else
     {
-        $thisUrl = $HTTP_SERVER_VARS['SCRIPT_URI'];
+        $thisUrl = $_SERVER['SCRIPT_URI'];
     }
-    if( !empty( $thisUrl ) && !empty( $HTTP_SERVER_VARS['QUERY_STRING'] ))
+    if( !empty( $thisUrl ) && !empty( $_SERVER['QUERY_STRING'] ))
     {
-        $thisUrl .= '?' . $HTTP_SERVER_VARS['QUERY_STRING'];
+        $thisUrl .= '?' . $_SERVER['QUERY_STRING'];
     }
     if( empty( $thisUrl ))
     {
-        $requestUri = $HTTP_SERVER_VARS['REQUEST_URI'];
-        if( empty( $HTTP_SERVER_VARS['REQUEST_URI'] ))
+        $requestUri = $_SERVER['REQUEST_URI'];
+        if( empty( $_SERVER['REQUEST_URI'] ))
         {
             // on a Zeus webserver, prefer PATH_INFO over SCRIPT_NAME
-            if( empty( $HTTP_SERVER_VARS['PATH_INFO'] ))
+            if( empty( $_SERVER['PATH_INFO'] ))
             {
-                $requestUri = $HTTP_SERVER_VARS['SCRIPT_NAME'];
+                $requestUri = $_SERVER['SCRIPT_NAME'];
             }
             else
             {
-                $requestUri = $HTTP_SERVER_VARS['PATH_INFO'];
+                $requestUri = $_SERVER['PATH_INFO'];
             }
-            if( !empty( $HTTP_SERVER_VARS['QUERY_STRING'] ))
+            if( !empty( $_SERVER['QUERY_STRING'] ))
             {
-                $requestUri .= '?' . $HTTP_SERVER_VARS['QUERY_STRING'];     
+                $requestUri .= '?' . $_SERVER['QUERY_STRING'];
             }
         }
 
@@ -6019,20 +5428,20 @@
 */
 function COM_isFrontpage()
 {
-    global $_CONF, $HTTP_SERVER_VARS, $topic, $page, $newstories;
+    global $_CONF, $topic, $page, $newstories;
 
     // Note: We can't use $PHP_SELF here since the site may not be in the
     // DocumentRoot
     $isFrontpage = false;
 
     // on a Zeus webserver, prefer PATH_INFO over SCRIPT_NAME
-    if( empty( $HTTP_SERVER_VARS['PATH_INFO'] ))
+    if( empty( $_SERVER['PATH_INFO'] ))
     {
-        $scriptName = $HTTP_SERVER_VARS['SCRIPT_NAME'];
+        $scriptName = $_SERVER['SCRIPT_NAME'];
     }
     else
     {
-        $scriptName = $HTTP_SERVER_VARS['PATH_INFO'];
+        $scriptName = $_SERVER['PATH_INFO'];
     }
 
     preg_match( '/\/\/[^\/]*(.*)/', $_CONF['site_url'], $pathonly );
@@ -6065,8 +5474,32 @@
     return $id;
 }
 
+/** Converts a number for output into a formatted number with thousands-
+*         separator, comma-separator and fixed decimals if necessary
+*
+*        @param        float        $number        Number that will be formatted
+*        @return        string                        formatted number
+*/
+function COM_numberFormat( $number )
+{
+    global $_CONF;
+
+    if( $number - abs( $number ) > 0 ) // number has decimals
+    {
+        $dc = $_CONF['decimal_count'];
+    }
+    else
+    {
+        $dc = 0;
+    }
+    $ts = $_CONF['thousand_separator'];
+    $ds = $_CONF['decimal_separator'];
+
+    return number_format( $number, $dc, $ds, $ts );
+}
+
 /**
-* Convert a text based date YYYY-MM-DD to a unix timestamp integer value 
+* Convert a text based date YYYY-MM-DD to a unix timestamp integer value
 *
 * @param    string  $date   Date in the format YYYY-MM-DD
 * @param    string  $time   Option time in the format HH:MM::SS
@@ -6101,10 +5534,111 @@
     return $timestamp;
 }
 
+/**
+* Get the HTML for an image with height & width
+*
+* @param    string  $file   full path to the file
+* @return   string          html that will be included in the img-tag
+*/
+function COM_getImgSizeAttributes( $file )
+{
+    $dimensions = GetImageSize( $file );
+    if( !empty( $dimensions[0] ) AND !empty( $dimensions[1] ))
+    {
+        $sizeattributes = 'width="' . $dimensions[0]
+                        . '" height="' . $dimensions[1] . '" ';
+    }
+    else
+    {
+        $sizeattributes = '';
+    }
+
+    return $sizeattributes;
+}
+
+/**
+* Display a message and abort
+*
+* @param    int     $msg            message number
+* @param    string  $plugin         plugin name, if applicable
+* @param    int     $http_status    HTTP status code to send with the message
+* @param    string  $http_text      Textual version of the HTTP status code
+*
+* @note Displays the message and aborts the script.
+*
+*/
+function COM_displayMessageAndAbort( $msg, $plugin = '', $http_status = 200, $http_text = 'OK')
+{
+    $display = COM_siteHeader( 'menu' )
+             . COM_showMessage( $msg, $plugin )
+             . COM_siteFooter( true );
+
+    if( $http_status != 200 )
+    {
+        header( "HTTP/1.1 $http_status $http_text" );
+        header( "Status: $http_status $http_text" );
+    }
+    echo $display;
+    exit;
+}
+
+/**
+* Return full URL of of topic icon
+*
+* @param    string  $imageurl   (relative) topic icon URL
+* @return   string              Full URL
+*
+*/
+function COM_getTopicImageUrl( $imageurl )
+{
+    global $_CONF, $_THEME_URL;
+
+    $iconurl = '';
+
+    if( !empty( $imageurl ))
+    {
+        if( isset( $_THEME_URL ))
+        {
+            $iconurl = $_THEME_URL . $imageurl;
+        }
+        else
+        {
+            $stdImageLoc = true;
+            if( !strstr( $_CONF['path_images'], $_CONF['path_html'] ))
+            {
+                $stdImageLoc = false;
+            }
+
+            if( $stdImageLoc )
+            {
+                $iconurl = $_CONF['site_url'] . $imageurl;
+            }
+            else
+            {
+                $t = explode( '/', $imageurl );
+                $topicicon = $t[count( $t ) - 1];
+                $iconurl = $_CONF['site_url']
+                         . '/getimage.php?mode=topics&amp;image=' . $topicicon;
+            }
+        }
+    }
+
+    return $iconurl;
+}
+
 // Now include all plugin functions
 foreach( $_PLUGINS as $pi_name )
 {
     require_once( $_CONF['path'] . 'plugins/' . $pi_name . '/functions.inc' );
 }
 
+// Check and see if any plugins (or custom functions)
+// have scheduled tasks to perform
+if(( DB_getItem( $_TABLES['vars'], 'value', "name='last_scheduled_run'" )
+        + $_CONF['cron_schedule_interval'] ) <= time())
+{
+    PLG_runScheduledTask();
+    DB_query( "UPDATE {$_TABLES['vars']} SET value=UNIX_TIMESTAMP() WHERE name='last_scheduled_run'" );
+}
+
 ?>
diff -ruN 1.3.11sr1/library.js 1.4.0sr5-1/library.js
--- 1.3.11sr1/library.js	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/library.js	1969-12-31 18:00:00.000000000 -0600
@@ -1,120 +0,0 @@
-/* Reminder: always indent with 4 spaces (no tabs). */
-// +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
-// +---------------------------------------------------------------------------+
-// | index.php                                                                 |
-// | Geeklog homepage.                                                         |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-// | Copyright (C) 2003,2004 by the following authors:                         |
-// |                                                                           |
-// | Authors:   Matt Kruse  - matt@mattkruse.com                               |
-// |            Blaine Lang - blaine@portalparts.com                           |
-// +---------------------------------------------------------------------------+
-// |                                                                           |
-// | This program is free software; you can redistribute it and/or             |
-// | modify it under the terms of the GNU General Public License               |
-// | as published by the Free Software Foundation; either version 2            |
-// | of the License, or (at your option) any later version.                    |
-// |                                                                           |
-// | This program is distributed in the hope that it will be useful,           |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
-// | GNU General Public License for more details.                              |
-// |                                                                           |
-// | You should have received a copy of the GNU General Public License         |
-// | along with this program; if not, write to the Free Software Foundation,   |
-// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-
-
-// -------------------------------------------------------------------
-// setUsers(select_form)
-// Used in the Group Admin function to edit the list of included site members
-// Used to set a hidden form variable to the result of all the values in the source selectbox
-// -------------------------------------------------------------------
-function setUsers(f) { 
-	var destVals = new Array(), opt = 0, separator = "|", d = f.fieldTo; 
-	while (d[opt]) 
-        destVals[opt] = d[opt++].value;
-        if(d[opt] > 1) {
-            f.groupmembers.value = separator + destVals.join(separator); 
-        } else {
-            f.groupmembers.value = destVals.join(separator); 
-        }
-        return true; 
-}
-
-// -------------------------------------------------------------------
-// sortSelect(select_object)
-//   Pass this function a SELECT object and the options will be sorted
-//   by their text (display) values
-// -------------------------------------------------------------------
-function sortSelect(obj) {
-    var o = new Array();
-    if (obj.options==null) { return; }
-    for (var i=0; i<obj.options.length; i++) {
-        o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
-        }
-    if (o.length==0) { return; }
-    o = o.sort( 
-        function(a,b) { 
-            if ((a.text+"") < (b.text+"")) { return -1; }
-            if ((a.text+"") > (b.text+"")) { return 1; }
-            return 0;
-            } 
-        );
-
-    for (var i=0; i<o.length; i++) {
-        obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
-        }
-    }
-
-// -------------------------------------------------------------------
-// moveSelectedOptions(select_object,select_object[,autosort(true/false)[,regex]])
-//  This function moves options between select boxes. Works best with
-//  multi-select boxes to create the common Windows control effect.
-//  Passes all selected values from the first object to the second
-//  object and re-sorts each box.
-//  If a third argument of 'false' is passed, then the lists are not
-//  sorted after the move.
-//  If a fourth string argument is passed, this will function as a
-//  Regular Expression to match against the TEXT or the options. If 
-//  the text of an option matches the pattern, it will NOT be moved.
-//  It will be treated as an unmoveable option.
-//  You can also put this into the <SELECT> object as follows:
-//    onDblClick="moveSelectedOptions(this,this.form.target)
-//  This way, when the user double-clicks on a value in one box, it
-//  will be transferred to the other (in browsers that support the 
-//  onDblClick() event handler).
-// -------------------------------------------------------------------
-function moveSelectedOptions(from,to) {
-    // Unselect matching options, if required
-    if (arguments.length>3) {
-        var regex = arguments[3];
-        if (regex != "") {
-            unSelectMatchingOptions(from,regex);
-            }
-        }
-    // Move them over
-    for (var i=0; i<from.options.length; i++) {
-        var o = from.options[i];
-        if (o.selected) {
-            to.options[to.options.length] = new Option( o.text, o.value, false, false);
-            }
-        }
-    // Delete them from original
-    for (var i=(from.options.length-1); i>=0; i--) {
-        var o = from.options[i];
-        if (o.selected) {
-            from.options[i] = null;
-            }
-        }
-    if ((arguments.length<3) || (arguments[2]==true)) {
-        sortSelect(from);
-        sortSelect(to);
-        }
-    from.selectedIndex = -1;
-    to.selectedIndex = -1;
-    }
\ No newline at end of file
Files 1.3.11sr1/links/images/links.png and 1.4.0sr5-1/links/images/links.png differ
diff -ruN 1.3.11sr1/links/index.php 1.4.0sr5-1/links/index.php
--- 1.3.11sr1/links/index.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/links/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,279 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Links Plugin 1.0                                                          |
+// +---------------------------------------------------------------------------+
+// | /links/index.php                                                          |
+// |                                                                           |
+// | This is the links page                                                    |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
+// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
+// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
+// |          Tom Willett       - tomw@pigstye.net                             |
+// |          Trinity Bays      - trinity@steubentech.com                      |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+/** 
+ * This is the links page   
+ * 
+ * @package Links
+ * @subpackage public_html
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+// $Id: index.php,v 1.7 2005/12/28 10:11:52 dhaun Exp $
+
+require_once ('../lib-common.php');
+
+// MAIN
+
+$display = COM_siteHeader ('menu', $LANG_LINKS[114]);
+
+if (empty ($_USER['username']) &&
+    (($_CONF['loginrequired'] == 1) || ($_LI_CONF['linksloginrequired'] == 1))) {
+    $display .= COM_startBlock ($LANG_LOGIN[1], '',
+                                COM_getBlockTemplate ('_msg_block', 'header'));
+    $login = new Template ($_CONF['path_layout'] . 'submit');
+    $login->set_file (array ('login' => 'submitloginrequired.thtml'));
+    $login->set_var ('login_message', $LANG_LOGIN[2]);
+    $login->set_var ('site_url', $_CONF['site_url']);
+    $login->set_var ('lang_login', $LANG_LOGIN[3]);
+    $login->set_var ('lang_newuser', $LANG_LOGIN[4]);
+    $login->parse ('output', 'login');
+    $display .= $login->finish ($login->get_var ('output'));
+    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+} else {
+    $category = '';
+    if (isset ($_GET['category'])) {
+        $category = strip_tags (COM_stripslashes ($_GET['category']));
+    }
+    $page = 0;
+    if (isset ($_GET['page'])) {
+        $page = COM_applyFilter ($_GET['page'], true);
+    }
+
+    $display .= COM_startBlock ($LANG_LINKS[114]);
+
+    $linklist = new Template ($_CONF['path'] . 'plugins/links/templates/');
+    $linklist->set_file (array ('linklist' => 'links.thtml',
+                                'catlinks' => 'categorylinks.thtml',
+                                'link'     => 'linkdetails.thtml',
+                                'catnav'   => 'categorynavigation.thtml',
+                                'catrow'   => 'categoryrow.thtml',
+                                'catcol'   => 'categorycol.thtml',
+                                'actcol'   => 'categoryactivecol.thtml',
+                                'pagenav'  => 'pagenavigation.thtml'));
+
+    if ($_LI_CONF['linkcols'] > 0) {
+        $result = DB_query ("SELECT DISTINCT category FROM {$_TABLES['links']}" . COM_getPermSQL () . " ORDER BY category");
+        $nrows  = DB_numRows ($result);
+        if ($nrows > 0) {
+            $linklist->set_var ('lang_categories', $LANG_LINKS_ADMIN[14]);
+            for ($i = 1; $i <= $nrows; $i++) {
+                $C = DB_fetchArray($result);
+                $cat = addslashes ($C['category']);
+                $result1 = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['links']} WHERE category = '{$cat}'" . COM_getPermSQL ('AND'));
+                $D = DB_fetchArray ($result1);
+                if (empty ($C['category'])) {
+                    $linklist->set_var ('category_name', $LANG_LINKS_ADMIN[7]);
+                } else {
+                    $linklist->set_var ('category_name', $C['category']);
+                }
+                $linklist->set_var ('category_link', $_CONF['site_url'] .
+                    '/links/index.php?category=' . urlencode ($C['category']));
+                $linklist->set_var ('category_count',
+                                    COM_numberFormat ($D['count']));
+                $linklist->set_var ('width', floor (100 / $_LI_CONF['linkcols']));
+                if (!empty ($category) && ($category == $C['category'])) {
+                    $linklist->parse ('category_col', 'actcol', true);
+                } else {
+                    $linklist->parse ('category_col', 'catcol', true);
+                }
+                if ($i % $_LI_CONF['linkcols'] == 0) {
+                    $linklist->parse ('category_row', 'catrow', true);
+                    $linklist->set_var ('category_col', '');
+                }
+            }
+            if ($nrows % $_LI_CONF['linkcols'] != 0) {
+                $linklist->parse ('category_row', 'catrow', true);
+            }
+            $linklist->parse ('category_navigation', 'catnav', true);
+        } else {
+            $linklist->set_var ('category_navigation', '');
+        }
+    } else {
+        $linklist->set_var ('category_navigation', '');
+    }
+
+    $linklist->set_var ('site_url', $_CONF['site_url']);
+    $linklist->set_var ('lang_addalink', $LANG_LINKS[116]);
+
+    $sql = "SELECT lid,category,url,description,title,hits,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']}";
+    if ($_LI_CONF['linkcols'] > 0) {
+        if (!empty ($category)) {
+            $sql .= " WHERE category = '" . addslashes ($category) . "'";
+        } else {
+            $sql .= " WHERE category = ''";
+        }
+        $sql .= COM_getPermSQL ('AND');
+    } else {
+        $sql .= COM_getPermSQL ();
+    }
+    $sql .= ' ORDER BY category ASC,title';
+    $result = DB_query ($sql);
+    $nrows = DB_numRows ($result);
+    if ($nrows == 0) {
+        $page = 0;
+        $end = 10;
+
+        $result = DB_query ("SELECT lid,url,title,description,hits,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE (hits > 0)" . COM_getPermSQL ('AND') . " ORDER BY hits DESC LIMIT 10");
+        $nrows  = DB_numRows ($result);
+        if ($nrows > 0) {
+            $linklist->set_var ('link_details', '');
+            $linklist->set_var ('link_category', $LANG_LINKS_STATS['stats_headline']);
+            for ($i = 0; $i < $nrows; $i++) {
+                $A = DB_fetchArray ($result);
+                $linklist->set_var ('link_url', COM_buildUrl ($_CONF['site_url']
+                    . '/links/portal.php?what=link&amp;item=' . $A['lid']));
+                $linklist->set_var ('link_actual_url', $A['url']);
+                $linklist->set_var ('link_name', stripslashes($A['title']));
+                $linklist->set_var ('link_hits', COM_numberFormat ($A['hits']));
+                $linklist->set_var ('link_description',
+                        nl2br (stripslashes ($A['description'])));
+                if ((SEC_hasAccess ($A['owner_id'], $A['group_id'],
+                        $A['perm_owner'], $A['perm_group'], $A['perm_members'],
+                        $A['perm_anon']) == 3) && SEC_hasRights('links.edit')) {
+                    $editurl = $_CONF['site_admin_url']
+                             . '/plugins/links/index.php?mode=edit&amp;lid=' . $A['lid'];
+                    $linklist->set_var ('link_edit', '<a href="' . $editurl
+                            . '">' . $LANG01[4] . '</a>');
+                    $linklist->set_var ('edit_icon', '<a href="' . $editurl
+                            . '"><img src="' . $_CONF['layout_url']
+                            . '/images/edit.gif" alt="' . $LANG01[4]
+                            . '" title="' . $LANG01[4] . '" border="0"></a>');
+                } else {
+                    $linklist->set_var ('link_edit', '');
+                    $linklist->set_var ('edit_icon', '');
+                }
+                $linklist->parse ('link_details', 'link', true);
+            }
+            $linklist->parse ('category_links', 'catlinks', true);
+        }
+    } else {
+        if ($_LI_CONF['linksperpage'] == 0) {
+            $start = 1;
+            $end = $nrows + 1;
+        } else {
+            if ($page > 0) {
+                $start = (($page - 1) * $_LI_CONF['linksperpage']) + 1;
+            } else {
+                $page = 1;
+                $start = 1;
+            }
+            $end = $start + $_LI_CONF['linksperpage'];
+            if ($nrows < $end) {
+                $end = $nrows + 1;
+            }
+        }
+
+        $currentcategory = '';
+        for ($i = 1; $i < $end; $i++) {
+            $A = DB_fetchArray ($result);
+            if ($i >= $start) {
+                if ((strcasecmp ($A['category'], $currentcategory) != 0) AND ($i > $start)) {
+                    // print the category and link
+                    $linklist->parse ('category_links', 'catlinks', true);
+                    $linklist->set_var ('link_details','');
+                    $currentcategory = $A['category'];
+                    $linklist->set_var ('link_category', $currentcategory);
+                } else if (strcasecmp ($A['category'], $currentcategory) != 0) {
+                    $currentcategory = $A['category'];
+                    $linklist->set_var ('link_category',$currentcategory);
+                }
+                $linklist->set_var ('link_url', COM_buildUrl ($_CONF['site_url']
+                    . '/links/portal.php?what=link&amp;item=' . $A['lid']));
+                $linklist->set_var ('link_actual_url', $A['url']);
+                $linklist->set_var ('link_name', stripslashes ($A['title']));
+                $linklist->set_var ('link_hits', COM_numberFormat ($A['hits']));
+                $linklist->set_var ('link_description',
+                        nl2br (stripslashes ($A['description'])));
+                if ((SEC_hasAccess ($A['owner_id'], $A['group_id'],
+                        $A['perm_owner'], $A['perm_group'], $A['perm_members'],
+                        $A['perm_anon']) == 3) && SEC_hasRights('links.edit')) {
+                    $editurl = $_CONF['site_admin_url']
+                             . '/plugins/links/index.php?mode=edit&amp;lid='
+                             . $A['lid'];
+                    $linklist->set_var ('link_edit', '<a href="' . $editurl
+                            . '">' . $LANG01[4] . '</a>');
+                    $linklist->set_var ('edit_icon', '<a href="' . $editurl
+                            . '"><img src="' . $_CONF['layout_url']
+                            . '/images/edit.gif" alt="' . $LANG01[4]
+                            . '" title="' . $LANG01[4] . '" border="0"></a>');
+                } else {
+                    $linklist->set_var ('link_edit', '');
+                    $linklist->set_var ('edit_icon', '');
+                }
+                $linklist->parse ('link_details', 'link', true);
+            }
+        }
+        $linklist->parse ('category_links', 'catlinks', true);
+    }
+
+    if ($_LI_CONF['linksperpage'] > 0) {
+        $pages = (int) ($nrows / $_LI_CONF['linksperpage']);
+        if (($nrows % $_LI_CONF['linksperpage']) > 0 ) {
+            $pages++;
+        }
+    }
+    if ($pages > 0) {
+        if (($_LI_CONF['linkcols'] > 0) && isset ($currentcategory)) {
+            $catlink = '?category=' . urlencode ($currentcategory);
+        } else {
+            $catlink = '';
+        }
+        $linklist->set_var ('page_navigation',
+            COM_printPageNavigation ($_CONF['site_url'] . '/links/index.php' .
+                                     $catlink, $page, $pages));
+    } else {
+        $linklist->set_var ('page_navigation', '');
+    }
+
+    $linklist->parse ('output', 'linklist');
+    $display .= $linklist->finish ($linklist->get_var ('output'));
+    $display .= COM_endBlock ();
+}
+
+$display .= COM_siteFooter ();
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/links/portal.php 1.4.0sr5-1/links/portal.php
--- 1.3.11sr1/links/portal.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/links/portal.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,85 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | portal.php                                                                |
+// |                                                                           |
+// | Geeklog portal page that tracks link click throughs.                      |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2004 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
+// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
+// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
+// |          Dirk Haun         - dirk@haun-online.de                          |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+
+/** 
+ * Geeklog portal page that tracks link click throughs. 
+ * 
+ * @package Links
+ * @subpackage public_html
+ * @filesource
+ * @version 1.0
+ * @since GL 1.4.0
+ * @copyright Copyright &copy; 2005
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
+ * @author Trinity Bays <trinity93@steubentech.com>
+ * @author Tony Bibbs <tony@tonybibbs.com>
+ * @author Tom Willett <twillett@users.sourceforge.net>
+ * @author Blaine Lang <langmail@sympatico.ca>
+ * @author Dirk Haun <dirk@haun-online.de>
+ * 
+ */
+
+// $Id: portal.php,v 1.2 2005/11/26 06:37:32 trinity Exp $
+
+require_once('./../lib-common.php');
+
+// MAIN
+
+$url = '';
+
+COM_setArgNames (array ('what', 'item'));
+$what = COM_getArgument ('what');
+
+if ($what == 'link') {
+
+    $item = COM_applyFilter (COM_getArgument ('item'));
+
+    if (!empty ($item)) {
+        $url = DB_getItem ($_TABLES['links'], 'url', "lid = '{$item}'");
+        if (!empty ($url)) {
+            DB_change ($_TABLES['links'], 'hits','hits + 1', 'lid',$item, '', true);
+        }
+    }
+}
+
+if (empty ($url)) {
+    $url = $_CONF['site_url'];
+}
+
+header ('HTTP/1.1 301 Moved');
+header ('Location: ' . $url);
+header ('Connection: close');
+
+?>
diff -ruN 1.3.11sr1/links.php 1.4.0sr5-1/links.php
--- 1.3.11sr1/links.php	2004-12-31 10:03:29.000000000 -0600
+++ 1.4.0sr5-1/links.php	1969-12-31 18:00:00.000000000 -0600
@@ -1,253 +0,0 @@
-<?php
-
-/* Reminder: always indent with 4 spaces (no tabs). */
-// +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
-// +---------------------------------------------------------------------------+
-// | links.php                                                                 |
-// |                                                                           |
-// | This is the links page                                                    |
-// +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
-// |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Tom Willett       - tomw@pigstye.net                             |
-// +---------------------------------------------------------------------------+
-// |                                                                           |
-// | This program is free software; you can redistribute it and/or             |
-// | modify it under the terms of the GNU General Public License               |
-// | as published by the Free Software Foundation; either version 2            |
-// | of the License, or (at your option) any later version.                    |
-// |                                                                           |
-// | This program is distributed in the hope that it will be useful,           |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
-// | GNU General Public License for more details.                              |
-// |                                                                           |
-// | You should have received a copy of the GNU General Public License         |
-// | along with this program; if not, write to the Free Software Foundation,   |
-// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-//
-// $Id: links.php,v 1.37 2004/12/14 22:34:35 dhaun Exp $
-
-require_once ('lib-common.php');
-
-// MAIN
-
-$display = COM_siteHeader ('menu', $LANG06[1]);
-
-if (empty ($_USER['username']) &&
-    (($_CONF['loginrequired'] == 1) || ($_CONF['linksloginrequired'] == 1))) {
-    $display .= COM_startBlock ($LANG_LOGIN[1], '',
-                                COM_getBlockTemplate ('_msg_block', 'header'));
-    $login = new Template ($_CONF['path_layout'] . 'submit');
-    $login->set_file (array ('login' => 'submitloginrequired.thtml'));
-    $login->set_var ('login_message', $LANG_LOGIN[2]);
-    $login->set_var ('site_url', $_CONF['site_url']);
-    $login->set_var ('lang_login', $LANG_LOGIN[3]);
-    $login->set_var ('lang_newuser', $LANG_LOGIN[4]);
-    $login->parse ('output', 'login');
-    $display .= $login->finish ($login->get_var ('output'));
-    $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-} else {
-    $category = strip_tags (COM_stripslashes ($_GET['category']));
-    $page = COM_applyFilter ($_GET['page'], true);
-
-    $display .= COM_startBlock ($LANG06[1]);
-
-    $linklist = new Template ($_CONF['path_layout'] . 'links');
-    $linklist->set_file (array ('linklist' => 'links.thtml',
-                                'catlinks' => 'categorylinks.thtml',
-                                'link'     => 'linkdetails.thtml',
-                                'catnav'   => 'categorynavigation.thtml',
-                                'catrow'   => 'categoryrow.thtml',
-                                'catcol'   => 'categorycol.thtml',
-                                'actcol'   => 'categoryactivecol.thtml',
-                                'pagenav'  => 'pagenavigation.thtml'));
-
-    if ($_CONF['linkcols'] > 0) {
-        $result = DB_query ("SELECT DISTINCT category FROM {$_TABLES['links']}" . COM_getPermSQL () . " ORDER BY category");
-        $nrows  = DB_numRows ($result);
-        if ($nrows > 0) {
-            $linklist->set_var ('lang_categories', $LANG23[14]);
-            for ($i = 1; $i <= $nrows; $i++) {
-                $C = DB_fetchArray($result);
-                $cat = addslashes ($C['category']);
-                $result1 = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['links']} WHERE category = '{$cat}'" . COM_getPermSQL ('AND'));
-                $D = DB_fetchArray ($result1);
-                if (empty ($C['category'])) {
-                    $linklist->set_var ('category_name', $LANG23[7]);
-                } else {
-                    $linklist->set_var ('category_name', $C['category']);
-                }
-                $linklist->set_var ('category_link', $_CONF['site_url'] .
-                    '/links.php?category=' . urlencode ($C['category']));
-                $linklist->set_var ('category_count', $D['count']);
-                $linklist->set_var ('width', floor (100 / $_CONF['linkcols']));
-                if (!empty ($category) && ($category == $C['category'])) {
-                    $linklist->parse ('category_col', 'actcol', true);
-                } else {
-                    $linklist->parse ('category_col', 'catcol', true);
-                }
-                if ($i % $_CONF['linkcols'] == 0) {
-                    $linklist->parse ('category_row', 'catrow', true);
-                    $linklist->set_var ('category_col', '');
-                }
-            }
-            if ($nrows % $_CONF['linkcols'] != 0) {
-                $linklist->parse ('category_row', 'catrow', true);
-            }
-            $linklist->parse ('category_navigation', 'catnav', true);
-        } else {
-            $linklist->set_var ('category_navigation', '');
-        }
-    } else {
-        $linklist->set_var ('category_navigation', '');
-    }
-
-    $linklist->set_var ('site_url', $_CONF['site_url']);
-    $linklist->set_var ('lang_addalink', $LANG06[3]);
-
-    $sql = "SELECT lid,category,url,description,title,hits,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']}";
-    if ($_CONF['linkcols'] > 0) {
-        if (!empty ($category)) {
-            $sql .= " WHERE category = '" . addslashes ($category) . "'";
-        } else {
-            $sql .= " WHERE category = ''";
-        }
-        $sql .= COM_getPermSQL ('AND');
-    } else {
-        $sql .= COM_getPermSQL ();
-    }
-    $sql .= ' ORDER BY category ASC,title';
-    $result = DB_query ($sql);
-    $nrows = DB_numRows ($result);
-    if ($nrows == 0) {
-        $page = 0;
-        $end = 10;
-
-        $result = DB_query ("SELECT lid,url,title,description,hits,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['links']} WHERE (hits > 0)" . COM_getPermSQL ('AND') . " ORDER BY hits DESC LIMIT 10");
-        $nrows  = DB_numRows ($result);
-        if ($nrows > 0) {
-            $linklist->set_var ('link_details', '');
-            $linklist->set_var ('link_category', $LANG10[18]);
-            for ($i = 0; $i < $nrows; $i++) {
-                $A = DB_fetchArray ($result);
-                $linklist->set_var ('link_url', COM_buildUrl ($_CONF['site_url']
-                    . '/portal.php?what=link&amp;item=' . $A['lid']));
-                $linklist->set_var ('link_actual_url', $A['url']);
-                $linklist->set_var ('link_name', stripslashes($A['title']));
-                $linklist->set_var ('link_hits', $A['hits']);
-                $linklist->set_var ('link_description',
-                        nl2br (stripslashes ($A['description'])));
-                if ((SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                        $A['perm_owner'], $A['perm_group'], $A['perm_members'],
-                        $A['perm_anon']) == 3) && SEC_hasRights ('link.edit')) {
-                    $editurl = $_CONF['site_admin_url']
-                             . '/link.php?mode=edit&amp;lid=' . $A['lid'];
-                    $linklist->set_var ('link_edit', '<a href="' . $editurl
-                            . '">' . $LANG01[4] . '</a>');
-                    $linklist->set_var ('edit_icon', '<a href="' . $editurl
-                            . '"><img src="' . $_CONF['layout_url']
-                            . '/images/edit.gif" alt="' . $LANG01[4]
-                            . '" title="' . $LANG01[4] . '" border="0"></a>');
-                } else {
-                    $linklist->set_var ('link_edit', '');
-                    $linklist->set_var ('edit_icon', '');
-                }
-                $linklist->parse ('link_details', 'link', true);
-            }
-            $linklist->parse ('category_links', 'catlinks', true);
-        }
-    } else {
-        if ($_CONF['linksperpage'] == 0) {
-            $start = 1;
-            $end = $nrows + 1;
-        } else {
-            if ($page > 0) {
-                $start = (($page - 1) * $_CONF['linksperpage']) + 1;
-            } else {
-                $page = 1;
-                $start = 1;
-            }
-            $end = $start + $_CONF['linksperpage'];
-            if ($nrows < $end) {
-                $end = $nrows + 1;
-            }
-        }
-
-        $currentcategory = '';
-        for ($i = 1; $i < $end; $i++) {
-            $A = DB_fetchArray ($result);
-            if ($i >= $start) {
-                if ((strcasecmp ($A['category'], $currentcategory) != 0) AND ($i > $start)) {
-                    // print the category and link
-                    $linklist->parse ('category_links', 'catlinks', true);
-                    $linklist->set_var ('link_details','');
-                    $currentcategory = $A['category'];
-                    $linklist->set_var ('link_category', $currentcategory);
-                } else if (strcasecmp ($A['category'], $currentcategory) != 0) {
-                    $currentcategory = $A['category'];
-                    $linklist->set_var ('link_category',$currentcategory);
-                }
-                $linklist->set_var ('link_url', COM_buildUrl ($_CONF['site_url']
-                    . '/portal.php?what=link&amp;item=' . $A['lid']));
-                $linklist->set_var ('link_actual_url', $A['url']);
-                $linklist->set_var ('link_name', stripslashes ($A['title']));
-                $linklist->set_var ('link_hits', $A['hits']);
-                $linklist->set_var ('link_description',
-                        nl2br (stripslashes ($A['description'])));
-                if ((SEC_hasAccess ($A['owner_id'], $A['group_id'],
-                        $A['perm_owner'], $A['perm_group'], $A['perm_members'],
-                        $A['perm_anon']) == 3) && SEC_hasRights ('link.edit')) {
-                    $editurl = $_CONF['site_admin_url']
-                             . '/link.php?mode=edit&amp;lid=' . $A['lid'];
-                    $linklist->set_var ('link_edit', '<a href="' . $editurl
-                            . '">' . $LANG01[4] . '</a>');
-                    $linklist->set_var ('edit_icon', '<a href="' . $editurl
-                            . '"><img src="' . $_CONF['layout_url']
-                            . '/images/edit.gif" alt="' . $LANG01[4]
-                            . '" title="' . $LANG01[4] . '" border="0"></a>');
-                } else {
-                    $linklist->set_var ('link_edit', '');
-                    $linklist->set_var ('edit_icon', '');
-                }
-                $linklist->parse ('link_details', 'link', true);
-            }
-        }
-        $linklist->parse ('category_links', 'catlinks', true);
-    }
-
-    if ($_CONF['linksperpage'] > 0) {
-        $pages = (int) ($nrows / $_CONF['linksperpage']);
-        if (($nrows % $_CONF['linksperpage']) > 0 ) {
-            $pages++;
-        }
-    }
-    if ($pages > 0) {
-        if (($_CONF['linkcols'] > 0) && isset ($currentcategory)) {
-            $catlink = '?category=' . urlencode ($currentcategory);
-        } else {
-            $catlink = '';
-        }
-        $linklist->set_var ('page_navigation',
-            COM_printPageNavigation ($_CONF['site_url'] . '/links.php' .
-                                     $catlink, $page, $pages));
-    } else {
-        $linklist->set_var ('page_navigation', '');
-    }
-
-    $linklist->parse ('output', 'linklist');
-    $display .= $linklist->finish ($linklist->get_var ('output'));
-    $display .= COM_endBlock ();
-}
-
-$display .= COM_siteFooter ();
-
-echo $display;
-
-?>
diff -ruN 1.3.11sr1/pingback.php 1.4.0sr5-1/pingback.php
--- 1.3.11sr1/pingback.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/pingback.php	2006-08-08 02:53:59.000000000 -0500
@@ -0,0 +1,303 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | pingback.php                                                              |
+// |                                                                           |
+// | Handle pingbacks for stories and plugins.                                 |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2005-2006 by the following authors:                         |
+// |                                                                           |
+// | Author: Dirk Haun - dirk AT haun-online DOT de                            |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// 
+// $Id: pingback.php,v 1.12 2006/01/15 18:57:16 dhaun Exp $
+
+require_once ('lib-common.php');
+
+// once received, we're handling pingbacks like trackbacks,
+// so we use the trackback library even when trackback may be disabled
+require_once ($_CONF['path_system'] . 'lib-trackback.php');
+
+// PEAR class to handle XML-RPC
+require_once ('XML/RPC/Server.php');
+
+// Note: Error messages are hard-coded in English since there is no way of
+// knowing which language the sender of the pingback may prefer.
+$PNB_ERROR = array (
+    'success'     => 'Thank you.', // success message; not an error ...
+    'skipped'     => '(skipped)',  // not an error
+    'spam'        => 'Spam detected.',
+    'speedlimit'  => 'Your last pingback was %d seconds ago. This site requires at least %d seconds between pingbacks.',
+    'disabled'    => 'Pingback is disabled.',
+    'uri_invalid' => 'Invalid targetURI.',
+    'no_access'   => 'Access denied.',
+    'multiple'    => 'Multiple posts not allowed.'
+);
+
+
+/**
+* Handle a pingback for an entry.
+*
+* Also takes care of the speedlimit and spam. Assumes that the caller of this
+* function has already checked permissions!
+*
+* @param    string  $id     ID of entry that got pinged
+* @param    string  $type   type of that entry ('article' for stories, etc.)
+* @return   object          XML-RPC response
+*
+*/
+function PNB_handlePingback ($id, $type, $url)
+{
+    global $_CONF, $_TABLES, $PNB_ERROR;
+
+    require_once ('HTTP/Request.php');
+
+    // handle pingbacks to articles on our own site
+    $skip_speedlimit = false;
+    if ($_SERVER['REMOTE_ADDR'] == $_SERVER['SERVER_ADDR']) {
+        if (!isset ($_CONF['pingback_self'])) {
+            $_CONF['pingback_self'] = 0; // default: skip self-pingbacks
+        }
+
+        if ($_CONF['pingback_self'] == 0) {
+            return new XML_RPC_Response (new XML_RPC_Value ($PNB_ERROR['skipped']));
+        } else if ($_CONF['pingback_self'] == 2) {
+            $skip_speedlimit = true;
+        }
+    }
+
+    COM_clearSpeedlimit ($_CONF['commentspeedlimit'], 'pingback');
+    if (!$skip_speedlimit) {
+        $last = COM_checkSpeedlimit ('pingback');
+        if ($last > 0) {
+            return new XML_RPC_Response (0, 49,
+                    sprintf ($PNB_ERROR['speedlimit'], $last,
+                             $_CONF['commentspeedlimit']));
+        }
+    }
+
+    // See if we can read the page linking to us and extract at least
+    // the page's title out of it ...
+    $title = '';
+    $req =& new HTTP_Request ($url);
+    $req->addHeader ('User-Agent', 'GeekLog ' . VERSION);
+    if (!PEAR::isError ($req->sendRequest ())) {
+        if ($req->getResponseCode () == 200) {
+            preg_match (':<title>(.*)</title>:i', $req->getResponseBody (),
+                        $content);
+            if (empty ($content[1])) {
+                $title = ''; // no title found
+            } else {
+                $title = trim (COM_undoSpecialChars ($content[1]));
+            }
+
+            // we could also run the rest of the other site's page
+            // through the spam filter here ...
+        }
+    }
+    // else: silently ignore errors - we'll simply do without the title
+
+    // check for spam first
+    $saved = TRB_checkForSpam ($url, $title);
+
+    // update speed limit in any case
+    COM_updateSpeedlimit ('pingback');
+
+    if ($saved == TRB_SAVE_SPAM) {
+        return new XML_RPC_Response (0, 49, $PNB_ERROR['spam']);
+    }
+
+    // save as a trackback comment
+    $saved = TRB_saveTrackbackComment ($id, $type, $url, $title);
+
+    if ($saved == TRB_SAVE_REJECT) {
+        return new XML_RPC_Response (0, 49, $PNB_ERROR['multiple']);
+    }
+
+    if (isset ($_CONF['notification']) &&
+            in_array ('pingback', $_CONF['notification'])) {                  
+        TRB_sendNotificationEmail ($saved, 'pingback');                               
+    }
+
+    return new XML_RPC_Response (new XML_RPC_Value ($PNB_ERROR['success']));
+}
+
+/**
+* Check if the targetURI really points to us
+*
+* @param    string  $url    targetURI, a URL on our site
+* @return   bool            true = is a URL on our site
+*
+*/
+function PNB_validURL ($url)
+{
+    global $_CONF;
+
+    $retval = false;
+
+    if (substr ($url, 0, strlen ($_CONF['site_url'])) == $_CONF['site_url']) {
+        $retval = true;
+    }
+
+    return $retval;
+}
+
+/**
+* Try to determine what has been pinged
+*
+* Checks if the URL contains 'article.php' for articles. Otherwise tries to
+* figure out if a plugin's page has been pinged.
+*
+* @param    string  $url    targetURI, a URL on our site
+* @return   string          'article' or plugin name or empty string for error
+*
+*/
+function PNB_getType ($url)
+{
+    global $_CONF, $_TABLES;
+
+    $retval = '';
+
+    $part = substr ($url, strlen ($_CONF['site_url']) + 1);
+    if (substr ($part, 0, strlen ('article.php')) == 'article.php') {
+        $retval = 'article';
+    } else {
+        $parts = explode ('/', $part);
+        if (strpos ($parts[0], '?') === false) {
+            $plugin = addslashes ($parts[0]);
+            if (DB_getItem ($_TABLES['plugins'], 'pi_enabled',
+                            "pi_name = '$plugin'") == 1) {
+                $retval = $parts[0];
+            }
+        }
+    }
+
+    return $retval;
+}
+
+/**
+* Extract story ID (sid) from the URL
+*
+* Accepts rewritten and old-style URLs. Also checks permissions.
+*
+* @param    string  $url    targetURI, a URL on our site
+* @return   string          story ID or empty string for error
+*
+*/
+function PNB_getSid ($url)
+{
+    global $_CONF, $_TABLES;
+
+    $retval = '';
+
+    $sid = '';
+    $params = substr ($url, strlen ($_CONF['site_url'] . '/article.php'));
+    if (substr ($params, 0, 1) == '?') { // old-style URL
+        $pos = strpos ($params, 'story=');
+        if ($pos !== false) {
+            $part = substr ($params, $pos + strlen ('story='));
+            $parts = explode ('&', $part);
+            $sid = $parts[0];
+        }
+    } else if (substr ($params, 0, 1) == '/') { // rewritten URL
+        $parts = explode ('/', substr ($params, 1));
+        $sid = $parts[0];
+    }
+    if (!empty ($sid)) {
+        $parts = explode ('#', $sid);
+        $sid = $parts[0];
+    }
+
+    // okay, so we have a SID - but are they allowed to access the story?
+    if (!empty ($sid)) {
+        $testsid = addslashes ($sid);
+        $result = DB_query ("SELECT trackbackcode FROM {$_TABLES['stories']} WHERE sid = '$testsid'" . COM_getPermSql ('AND') . COM_getTopicSql ('AND'));
+        if (DB_numRows ($result) == 1) {
+            $A = DB_fetchArray ($result);
+            if ($A['trackbackcode'] == 0) {
+                $retval = $sid;
+            }
+        }
+    }
+
+    return $retval;
+}
+
+/**
+* We've received a pingback - handle it ...
+*
+* @param    object  $params     parameters of the pingback XML-RPC call
+* @return   object              XML-RPC response
+*
+*/
+function PNB_receivePing ($params)
+{
+    global $_CONF, $_TABLES, $PNB_ERROR;
+
+    if (!$_CONF['pingback_enabled']) {
+        return new XML_RPC_Response (0, 33, $PNB_ERROR['disabled']);
+    }
+
+    $s = $params->getParam (0);
+    $p1 = $s->scalarval (); // the page linking to us
+
+    if (is_array ($p1)) {
+        // WordPress sends the 2 URIs as an array ...
+        $sourceURI = $p1[0]->scalarval ();
+        $targetURI = $p1[1]->scalarval ();
+    } else {
+        $sourceURI = $p1;
+
+        $s = $params->getParam (1);
+        $targetURI = $s->scalarval (); // the page being linked to (on our site)
+    }
+
+    if (!PNB_validURL ($targetURI)) {
+        return new XML_RPC_Response (0, 33, $PNB_ERROR['uri_invalid']);
+    }
+
+    $type = PNB_getType ($targetURI);
+    if (empty ($type)) {
+        return new XML_RPC_Response (0, 33, $PNB_ERROR['uri_invalid']);
+    }
+
+    if ($type == 'article') {
+        $id = PNB_getSid ($targetURI);
+    } else {
+        $id = PLG_handlePingComment ($type, $targetURI, 'acceptByURI');
+    }
+    if (empty ($id)) {
+        return new XML_RPC_Response (0, 49, $PNB_ERROR['no_access']);
+    }
+
+    return PNB_handlePingback ($id, $type, $sourceURI);
+}
+
+
+// MAIN
+
+// fire up the XML-RPC server - it does all the work for us
+$s = new XML_RPC_Server ( array (
+        'pingback.ping' => array ('function'  => 'PNB_receivePing')
+     ));
+
+?>
diff -ruN 1.3.11sr1/pollbooth.php 1.4.0sr5-1/pollbooth.php
--- 1.3.11sr1/pollbooth.php	2004-12-31 10:03:29.000000000 -0600
+++ 1.4.0sr5-1/pollbooth.php	1969-12-31 18:00:00.000000000 -0600
@@ -1,230 +0,0 @@
-<?php
-
-/* Reminder: always indent with 4 spaces (no tabs). */
-// +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
-// +---------------------------------------------------------------------------+
-// | pollbooth.php                                                            |
-// |                                                                           |
-// | This is the pollbooth page.                                               |
-// +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
-// |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
-// +---------------------------------------------------------------------------+
-// |                                                                           |
-// | This program is free software; you can redistribute it and/or             |
-// | modify it under the terms of the GNU General Public License               |
-// | as published by the Free Software Foundation; either version 2            |
-// | of the License, or (at your option) any later version.                    |
-// |                                                                           |
-// | This program is distributed in the hope that it will be useful,           |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
-// | GNU General Public License for more details.                              |
-// |                                                                           |
-// | You should have received a copy of the GNU General Public License         |
-// | along with this program; if not, write to the Free Software Foundation,   |
-// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
-// |                                                                           |
-// +---------------------------------------------------------------------------+
-//
-// $Id: pollbooth.php,v 1.30 2004/08/15 12:06:07 dhaun Exp $
-
-require_once ('lib-common.php');
-
-// number of polls to list per page
-define ('POLLS_PER_PAGE', 50);
-
-/**
-* Saves a user's vote
-*
-* Saves the users vote, if allowed for the poll $qid.
-* NOTE: all data comes from form post
-*
-* @param    string   $qid   poll id
-* @param    int      $aid   selected answer
-* @return   string   HTML for poll results
-*
-*/
-function pollsave($qid = '', $aid = 0) 
-{
-    global $_TABLES, $LANG07, $HTTP_SERVER_VARS;
-
-    $pcount = DB_count ($_TABLES['pollvoters'], array ('ipaddress', 'qid' ),
-                        array ($HTTP_SERVER_VARS['REMOTE_ADDR'], $qid));
-    if ($pcount > 0) {
-        exit;
-    }
-
-    DB_change($_TABLES['pollquestions'],'voters',"voters + 1",'qid',$qid,'',true);
-    $id[1] = 'qid';
-    $value[1] = $qid;
-    $id[2] = 'aid';
-    $value[2] = $aid;
-    // This call to DB-change will properly supress the insertion of quoes around $value in the sql
-    DB_change($_TABLES['pollanswers'],'votes',"votes + 1",$id,$value, '', true);
-    // This always does an insert so no need to provide key_field and key_value args
-    DB_save($_TABLES['pollvoters'],'ipaddress,date,qid',"'{$HTTP_SERVER_VARS['REMOTE_ADDR']}'," . time() . ",'$qid'");
-    $retval .= COM_startBlock ($LANG07[1], '',
-                       COM_getBlockTemplate ('_msg_block', 'header'))
-        . $LANG07[2] . ' "'
-        . DB_getItem ($_TABLES['pollquestions'], 'question', "qid = '{$qid}'")
-        . '"'
-        . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
-        . COM_pollResults($qid);
-
-    return $retval;
-}
-
-/**
-* Shows all polls in system
-*
-* List all the polls on the system if no $qid is provided
-*
-* @param    int     $page   page to display
-* @return   string          HTML for poll listing
-*
-*/
-function polllist ($page = 1) 
-{
-    global $_CONF, $_TABLES, $_USER, $_GROUPS, $LANG07, $LANG10, $LANG_LOGIN;
-
-    if ($page < 1) {
-        $page = 1;
-    }
-
-    if (empty ($_USER['username']) &&
-        (($_CONF['loginrequired'] == 1) || ($_CONF['pollsloginrequired'] == 1))) {
-        $retval = COM_startBlock ($LANG_LOGIN[1], '',
-                          COM_getBlockTemplate ('_msg_block', 'header'));
-        $login = new Template($_CONF['path_layout'] . 'submit'); 
-        $login->set_file (array ('login'=>'submitloginrequired.thtml'));
-        $login->set_var ('login_message', $LANG_LOGIN[2]);
-        $login->set_var ('site_url', $_CONF['site_url']);
-        $login->set_var ('lang_login', $LANG_LOGIN[3]);
-        $login->set_var ('lang_newuser', $LANG_LOGIN[4]);
-        $login->parse ('output', 'login');
-        $retval .= $login->finish ($login->get_var('output'));
-        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
-    } else {
-        $limit = (POLLS_PER_PAGE * $page) - POLLS_PER_PAGE;
-        $sql = "SELECT qid,question,voters FROM {$_TABLES['pollquestions']}"
-             . COM_getPermSQL () . " ORDER BY date DESC LIMIT $limit," . POLLS_PER_PAGE;
-        $result = DB_query($sql);
-        $nrows = DB_numRows($result);
-        $retval = COM_startBlock($LANG07[4]);
-        if ($nrows > 0) {
-            $pollitem = new Template($_CONF['path_layout'] . 'pollbooth');
-            $pollitem->set_file('pollitem', 'polllist.thtml');
-            for ($i = 0; $i < $nrows; $i++) {
-                $Q = DB_fetchArray($result);
-                $pcount = (POLLS_PER_PAGE * ($page - 1)) + $i + 1;
-                $pollitem->set_var('item_num', $pcount);
-                $pollitem->set_var('poll_url', $_CONF['site_url'].'/pollbooth.php?qid=' . $Q['qid'] . '&amp;aid=-1');
-                $pollitem->set_var('poll_question', stripslashes($Q['question']));
-                $pollitem->set_var('poll_votes', $Q['voters']);
-                $pollitem->set_var('lang_votes', $LANG07[5]);
-                if ($i == $nrows) {
-                    $pollitem->set_var('ending_br', '<br><br>');
-                } else {
-                    $pollitem->set_var('ending_br', '');
-                }
-                $pollitem->parse('output', 'pollitem');
-                $retval .= $pollitem->finish($pollitem->get_var('output'));
-            }
-
-            $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
-            $A = DB_fetchArray ($result);
-            $numpolls = $A['count'];
-            if ($numpolls > POLLS_PER_PAGE) {
-                $baseurl = $_CONF['site_url'] . '/pollbooth.php';
-                $numpages = ceil ($numpolls / POLLS_PER_PAGE);
-                $retval .= COM_printPageNavigation ($baseurl, $page, $numpages);
-            }
-        } else {
-            $retval .= $LANG10[17];
-        }
-        $retval .= COM_endBlock();
-    }
-
-    return $retval;
-}
-
-// MAIN
-//
-// no qid will load a list of polls
-// no aid will let you vote on the select poll
-// an aid greater than 0 will save a vote for that answer on the selected poll
-// an aid of -1 will display the select poll
-
-$display = '';
-
-if (isset ($HTTP_POST_VARS['reply'])
-        && ($HTTP_POST_VARS['reply'] == $LANG01[25])) {
-    $display .= COM_refresh ($_CONF['site_url'] . '/comment.php?sid='
-             . $HTTP_POST_VARS['qid'] . '&pid=' . $HTTP_POST_VARS['pid']
-             . '&type=' . $HTTP_POST_VARS['type']);
-    echo $display;
-    exit;			
-}
-
-if (isset ($HTTP_POST_VARS['qid'])) {
-    $qid = COM_applyFilter ($HTTP_POST_VARS['qid']);
-    $aid = COM_applyFilter ($HTTP_POST_VARS['aid'], true);
-} else {
-    $qid = COM_applyFilter ($HTTP_GET_VARS['qid']);
-    $aid = COM_applyFilter ($HTTP_GET_VARS['aid']);
-    if ($aid > 0) { // you can't vote with a GET request
-        $aid = -1;
-    }
-}
-if (isset ($HTTP_POST_VARS['order'])) {
-    $order = COM_applyFilter ($HTTP_POST_VARS['order']);
-} else {
-    $order = COM_applyFilter ($HTTP_GET_VARS['order']);
-}
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = COM_applyFilter ($HTTP_POST_VARS['mode']);
-} else {
-    $mode = COM_applyFilter ($HTTP_GET_VARS['mode']);
-}
-
-if (empty($qid)) {
-    if (isset ($HTTP_GET_VARS['page'])) {
-        $page = COM_applyFilter ($HTTP_GET_VARS['page'], true);
-    } else {
-        $page = 1;
-    }
-    $display .= COM_siteHeader ('menu', $LANG07[4]) . polllist ($page);
-} else if ($aid == 0) {
-    $display .= COM_siteHeader();
-    if (empty($HTTP_COOKIE_VARS[$qid])) {
-        $display .= COM_pollVote($qid);
-    } else {
-        $display .= COM_pollResults($qid,400,$order,$mode);
-    }
-} else if (($aid > 0) && ($aid <= $_CONF['maxanswers']) &&
-        empty($HTTP_COOKIE_VARS[$qid])) {
-    setcookie ($qid, $aid, time() + $_CONF['pollcookietime'],
-               $_CONF['cookie_path'], $_CONF['cookiedomain'],
-               $_CONF['cookiesecure']);
-    $display .= COM_siteHeader() . pollsave($qid, $aid);
-} else {
-    $question = DB_query ("SELECT question FROM {$_TABLES['pollquestions']} WHERE qid='$qid'" . COM_getPermSql ('AND'));
-    $Q = DB_fetchArray ($question);
-    if (empty ($Q['question'])) {
-        $display .= COM_siteHeader ('menu', $LANG07[4]) . polllist ($page);
-    } else {
-        $display .= COM_siteHeader ('menu', $Q['question'])
-                 . COM_pollResults ($qid, 400, $order, $mode);
-    }
-}
-$display .= COM_siteFooter();
-
-echo $display;
-
-?>
Files 1.3.11sr1/polls/images/polls.png and 1.4.0sr5-1/polls/images/polls.png differ
diff -ruN 1.3.11sr1/polls/index.php 1.4.0sr5-1/polls/index.php
--- 1.3.11sr1/polls/index.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/polls/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -0,0 +1,200 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.4                                                               |
+// +---------------------------------------------------------------------------+
+// | pollbooth.php                                                            |
+// |                                                                           |
+// | This is the pollbooth page.                                               |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2000-2005 by the following authors:                         |
+// |                                                                           |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+//
+// $Id: index.php,v 1.14 2005/12/22 14:39:47 ospiess Exp $
+
+require_once ('../lib-common.php');
+
+// number of polls to list per page
+define ('POLLS_PER_PAGE', 50);
+
+/**
+* Saves a user's vote
+*
+* Saves the users vote, if allowed for the poll $qid.
+* NOTE: all data comes from form post
+*
+* @param    string   $qid   poll id
+* @param    int      $aid   selected answer
+* @return   string   HTML for poll results
+*
+*/
+function pollsave($qid = '', $aid = 0) 
+{
+    global $_TABLES, $LANG_POLLS;
+
+    $retval = '';
+
+    $pcount = DB_count ($_TABLES['pollvoters'], array ('ipaddress', 'qid' ),
+                        array ($_SERVER['REMOTE_ADDR'], $qid));
+    if ($pcount > 0) {
+        exit;
+    }
+
+    DB_change($_TABLES['pollquestions'],'voters',"voters + 1",'qid',$qid,'',true);
+    $id[1] = 'qid';
+    $value[1] = $qid;
+    $id[2] = 'aid';
+    $value[2] = $aid;
+    // This call to DB-change will properly supress the insertion of quoes around $value in the sql
+    DB_change($_TABLES['pollanswers'],'votes',"votes + 1",$id,$value, '', true);
+    // This always does an insert so no need to provide key_field and key_value args
+    DB_save($_TABLES['pollvoters'],'ipaddress,date,qid',"'{$_SERVER['REMOTE_ADDR']}'," . time() . ",'$qid'");
+    $retval .= COM_startBlock ($LANG_POLLS['savedvotetitle'], '',
+                       COM_getBlockTemplate ('_msg_block', 'header'))
+        . $LANG_POLLS['savedvotemsg'] . ' "'
+        . DB_getItem ($_TABLES['pollquestions'], 'question', "qid = '{$qid}'")
+        . '"'
+        . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
+        . POLLS_pollResults($qid);
+
+    return $retval;
+}
+
+// MAIN
+//
+// no qid will load a list of polls
+// no aid will let you vote on the select poll
+// an aid greater than 0 will save a vote for that answer on the selected poll
+// an aid of -1 will display the select poll
+
+$display = '';
+
+if (isset ($_POST['reply'])
+        && ($_POST['reply'] == $LANG01[25])) {
+    $display .= COM_refresh ($_CONF['site_url'] . '/comment.php?sid='
+             . $_POST['qid'] . '&pid=' . $_POST['pid']
+             . '&type=' . $_POST['type']);
+    echo $display;
+    exit;			
+}
+
+$qid = 0;
+$aid = -1;
+if (isset ($_POST['qid'])) {
+    $qid = COM_applyFilter ($_POST['qid']);
+    if (isset ($_POST['aid'])) {
+        $aid = COM_applyFilter ($_POST['aid'], true);
+    }
+} else {
+    if (isset ($_GET['qid'])) {
+        $qid = COM_applyFilter ($_GET['qid']);
+    }
+    if (isset ($_GET['aid'])) {
+        $aid = COM_applyFilter ($_GET['aid'], true);
+        if ($aid > 0) { // you can't vote with a GET request
+            $aid = -1;
+        }
+    }
+}
+$order = '';
+if (isset ($_REQUEST['order'])) {
+    $order = COM_applyFilter ($_REQUEST['order']);
+}
+$mode = '';
+if (isset ($_REQUEST['mode'])) {
+    $mode = COM_applyFilter ($_REQUEST['mode']);
+}
+
+if (empty($qid)) {
+    $display .= COM_siteHeader ('menu', $LANG_POLLS['pollstitle']);
+    if (empty ($_USER['username']) && (($_CONF['loginrequired'] == 1) ||
+            ($_PO_CONF['pollsloginrequired'] == 1))) {
+        $retval = COM_startBlock ($LANG_LOGIN[1], '',
+                          COM_getBlockTemplate ('_msg_block', 'header'));
+        $login = new Template($_CONF['path_layout'] . 'submit');
+        $login->set_file (array ('login'=>'submitloginrequired.thtml'));
+        $login->set_var ('login_message', $LANG_LOGIN[2]);
+        $login->set_var ('site_url', $_CONF['site_url']);
+        $login->set_var ('lang_login', $LANG_LOGIN[3]);
+        $login->set_var ('lang_newuser', $LANG_LOGIN[4]);
+        $login->parse ('output', 'login');
+        $retval .= $login->finish ($login->get_var('output'));
+        $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+    } else {
+        require_once( $_CONF['path_system'] . 'lib-admin.php' );
+        $header_arr = array(      # dislay 'text' and use table field 'field'
+                        array('text' => $LANG25[9], 'field' => 'question', 'sort' => true),
+                        array('text' => $LANG25[20], 'field' => 'voters', 'sort' => true),
+                        array('text' => $LANG25[3], 'field' => 'unixdate', 'sort' => true),
+                        array('text' => $LANG_POLLS['open_poll'], 'field' => 'display', 'sort' => true)
+        );
+
+        $defsort_arr = array('field' => 'unixdate', 'direction' => 'desc');
+
+        $menu_arr = array ();
+
+        $text_arr = array('has_menu' =>  false,
+                          'title' => $LANG_POLLS['pollstitle'], 'instructions' => "",
+                          'icon' => '', 'form_url' => '');
+
+        $query_arr = array('table' => 'pollquestions',
+                           'sql' => $sql = "SELECT *,UNIX_TIMESTAMP(date) as unixdate, display FROM {$_TABLES['pollquestions']} WHERE 1",
+                           'query_fields' => array('question'),
+                           'default_filter' => COM_getPermSQL (),
+                           'query' => $_REQUEST['q'],
+                           'query_limit' => COM_applyFilter ($_REQUEST['query_limit'], true));
+
+        $display .= ADMIN_list ("polls", "plugin_getListField_polls", $header_arr, $text_arr,
+                                $query_arr, $menu_arr, $defsort_arr);
+    }
+    
+} else if ($aid == 0) {
+    $display .= COM_siteHeader();
+    if (empty($_COOKIE[$qid])) {
+        $display .= POLLS_pollVote($qid);
+    } else {
+        $display .= POLLS_pollResults($qid,400,$order,$mode);
+    }
+} else if (($aid > 0) && ($aid <= $_PO_CONF['maxanswers']) &&
+        empty($_COOKIE[$qid])) {
+    setcookie ($qid, $aid, time() + $_PO_CONF['pollcookietime'],
+               $_CONF['cookie_path'], $_CONF['cookiedomain'],
+               $_CONF['cookiesecure']);
+    $display .= COM_siteHeader() . pollsave($qid, $aid);
+} else {
+    $question = DB_query ("SELECT question FROM {$_TABLES['pollquestions']} WHERE qid='$qid'" . COM_getPermSql ('AND'));
+    $Q = DB_fetchArray ($question);
+    if (empty ($Q['question'])) {
+        $display .= COM_siteHeader ('menu', $LANG_POLLS['pollstitle']) . polllist ($page);
+    } else {
+        $display .= COM_siteHeader ('menu', $Q['question'])
+                 . POLLS_pollResults ($qid, 400, $order, $mode);
+    }
+}
+$display .= COM_siteFooter();
+
+echo $display;
+
+?>
diff -ruN 1.3.11sr1/profiles.php 1.4.0sr5-1/profiles.php
--- 1.3.11sr1/profiles.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/profiles.php	2006-08-08 02:53:59.000000000 -0500
@@ -2,19 +2,19 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | profiles.php                                                              |
-// | This pages let's GL user communicate with each other without risk of      |
-// | their email address being intercepted by spammers.                        |
 // |                                                                           |
+// | This pages lets GL users communicate with each other without risk of      |
+// | their email address being intercepted by spammers.                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -33,7 +33,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: profiles.php,v 1.38 2004/10/19 10:53:18 dhaun Exp $
+// $Id: profiles.php,v 1.46 2005/12/28 10:11:50 dhaun Exp $
 
 require_once ('lib-common.php');
 
@@ -130,9 +130,9 @@
 * @return   string              HTML for the contact form
 *
 */
-function contactform($uid, $subject='', $message='') 
+function contactform ($uid, $subject = '', $message = '') 
 {
-    global $_CONF, $_TABLES, $_USER, $LANG08, $LANG_LOGIN, $HTTP_COOKIE_VARS;
+    global $_CONF, $_TABLES, $_USER, $LANG08, $LANG_LOGIN;
 
     $retval = '';
 
@@ -157,20 +157,30 @@
         } else {
             $isAdmin = false;
         }
+
+        $displayname = COM_getDisplayName ($uid);
         if ((($P['emailfromadmin'] == 1) && $isAdmin) ||
             (($P['emailfromuser'] == 1) && !$isAdmin)) {
 
-            $username = DB_getItem ($_TABLES['users'], 'username',
-                                    "uid = '$uid'");
-            $retval = COM_startBlock ($LANG08[10] . ' ' . $username);
+            $retval = COM_startBlock ($LANG08[10] . ' ' . $displayname);
             $mail_template = new Template ($_CONF['path_layout'] . 'profiles');
             $mail_template->set_file ('form', 'contactuserform.thtml');	
             $mail_template->set_var ('site_url', $_CONF['site_url']);
             $mail_template->set_var ('lang_description', $LANG08[26]);
             $mail_template->set_var ('lang_username', $LANG08[11]);
-            $mail_template->set_var ('username', $_USER['username']);
+            if (empty ($_USER['username'])) {
+                $mail_template->set_var ('username', '');
+            } else {
+                $mail_template->set_var ('username',
+                        COM_getDisplayName ($_USER['uid'], $_USER['username'],
+                                            $_USER['fullname']));
+            }
             $mail_template->set_var ('lang_useremail', $LANG08[12]);
-            $mail_template->set_var ('useremail', $_USER['email']);
+            if (empty ($_USER['email'])) {
+                $mail_template->set_var ('useremail', '');
+            } else {
+                $mail_template->set_var ('useremail', $_USER['email']);
+            }
             $mail_template->set_var ('lang_subject', $LANG08[13]);
             $mail_template->set_var ('subject', $subject);
             $mail_template->set_var ('lang_message', $LANG08[14]);
@@ -182,9 +192,7 @@
             $retval .= $mail_template->finish ($mail_template->get_var ('output'));
             $retval .= COM_endBlock ();
         } else {
-            $username = DB_getItem ($_TABLES['users'], 'username',
-                                    "uid = '$uid'");
-            $retval = COM_startBlock ($LANG08[10] . ' ' . $username, '',
+            $retval = COM_startBlock ($LANG08[10] . ' ' . $displayname, '',
                               COM_getBlockTemplate ('_msg_block', 'header'));
             $retval .= $LANG08[35];
             $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block',
@@ -240,14 +248,22 @@
         return $retval;
     }
 
- 	$sql = "SELECT uid,title,introtext,bodytext,UNIX_TIMESTAMP(date) AS day FROM {$_TABLES['stories']} WHERE sid = '$sid'";
- 	$result = DB_query ($sql);
- 	$A = DB_fetchArray ($result);
+    $sql = "SELECT uid,title,introtext,bodytext,UNIX_TIMESTAMP(date) AS day FROM {$_TABLES['stories']} WHERE sid = '$sid'";
+    $result = DB_query ($sql);
+    $A = DB_fetchArray ($result);
     $shortmsg = COM_stripslashes ($shortmsg);
- 	$mailtext = sprintf ($LANG08[23], $from, $fromemail) . LB;
-	if (strlen ($shortmsg) > 0) {
-		$mailtext .= LB . sprintf ($LANG08[28], $from) . $shortmsg . LB;
-	}
+    $mailtext = sprintf ($LANG08[23], $from, $fromemail) . LB;
+    if (strlen ($shortmsg) > 0) {
+        $mailtext .= LB . sprintf ($LANG08[28], $from) . $shortmsg . LB;
+    }
+
+    // just to make sure this isn't an attempt at spamming users ...
+    $result = PLG_checkforSpam ($mailtext, $_CONF['spamx']);
+    if ($result > 0) {
+        COM_updateSpeedlimit ('mail');
+        COM_displayMessageAndAbort ($result, 'spamx', 403, 'Forbidden');
+    }
+
     $mailtext .= '------------------------------------------------------------'
               . LB . LB
               . COM_undoSpecialChars (stripslashes ($A['title'])) . LB
@@ -269,7 +285,7 @@
     $mailfrom = COM_formatEmailAddress ($from, $fromemail);
  	$subject = COM_undoSpecialChars(strip_tags(stripslashes('Re: '.$A['title'])));
 
-    COM_mail ($toemail, $subject, $mailtext, $mailfrom);
+    COM_mail ($mailto, $subject, $mailtext, $mailfrom);
     COM_updateSpeedlimit ('mail');
 
 	// Increment numemails counter for story
@@ -285,13 +301,14 @@
 * @return   string          HTML for email story form
 *
 */
-function mailstoryform($sid)
+function mailstoryform ($sid, $to = '', $toemail = '', $from = '',
+                        $fromemail = '', $shortmsg = '', $msg = 0) 
 {
-    global $_TABLES, $HTTP_COOKIE_VARS, $_CONF, $LANG08, $_USER, $LANG_LOGIN;
+    global $_CONF, $_TABLES, $_USER, $LANG08, $LANG_LOGIN;
 
     $retval = '';
 
-    if (empty($_USER['username']) &&
+    if (empty ($_USER['username']) &&
         (($_CONF['loginrequired'] == 1) || ($_CONF['emailstoryloginrequired'] == 1))) {
         $retval = COM_startBlock ($LANG_LOGIN[1], '',
                           COM_getBlockTemplate ('_msg_block', 'header'));
@@ -308,11 +325,17 @@
         return $retval;
     }
 
-    if (!empty ($_USER['username'])) {
-        $result = DB_query("SELECT email FROM {$_TABLES['users']} WHERE uid = {$_USER['uid']}");
-        $A = DB_fetchArray($result);
-        $from = $_USER['username'];
-        $fromemail = $A['email'];
+    if ($msg > 0) {
+        $retval .= COM_showMessage ($msg);
+    }
+
+    if (empty ($from) && empty ($fromemail)) {
+        if (!empty ($_USER['username'])) {
+            $from = COM_getDisplayName ($_USER['uid'], $_USER['username'],
+                                        $_USER['fullname']);
+            $fromemail = DB_getItem ($_TABLES['users'], 'email',
+                                     "uid = {$_USER['uid']}");
+        }
     }
 
     $mail_template = new Template($_CONF['path_layout'] . 'profiles');
@@ -324,8 +347,11 @@
     $mail_template->set_var('lang_fromemailaddress', $LANG08[21]);
     $mail_template->set_var('email', $fromemail);
     $mail_template->set_var('lang_toname', $LANG08[18]);
+    $mail_template->set_var('toname', $to);
     $mail_template->set_var('lang_toemailaddress', $LANG08[19]);
+    $mail_template->set_var('toemail', $toemail);
     $mail_template->set_var('lang_shortmessage', $LANG08[27]);
+    $mail_template->set_var('shortmsg', $shortmsg);
     $mail_template->set_var('lang_warning', $LANG08[22]);
     $mail_template->set_var('lang_sendmessage', $LANG08[16]);
     $mail_template->set_var('story_id',$sid);
@@ -340,28 +366,28 @@
 // MAIN
 $display = '';
 
-if (isset ($HTTP_POST_VARS['what'])) {
-    $what = COM_applyFilter ($HTTP_POST_VARS['what']);
-} else if (isset ($HTTP_GET_VARS['what'])) {
-    $what = COM_applyFilter ($HTTP_GET_VARS['what']);
+if (isset ($_POST['what'])) {
+    $what = COM_applyFilter ($_POST['what']);
+} else if (isset ($_GET['what'])) {
+    $what = COM_applyFilter ($_GET['what']);
 } else {
     $what = '';
 }
 
 switch ($what) {
     case 'contact':
-        $uid = COM_applyFilter ($HTTP_POST_VARS['uid'], true);
+        $uid = COM_applyFilter ($_POST['uid'], true);
         if ($uid > 1) {
-            $display .= contactemail ($uid, $HTTP_POST_VARS['author'],
-                    $HTTP_POST_VARS['authoremail'], $HTTP_POST_VARS['subject'],
-                    $HTTP_POST_VARS['message']);
+            $display .= contactemail ($uid, $_POST['author'],
+                    $_POST['authoremail'], $_POST['subject'],
+                    $_POST['message']);
         } else {
             $display .= COM_refresh ($_CONF['site_url'] . '/index.php');
         }
         break;
 
     case 'emailstory':
-        $sid = COM_applyFilter ($HTTP_GET_VARS['sid']);
+        $sid = COM_applyFilter ($_GET['sid']);
         if (empty ($sid)) {
             $display = COM_refresh ($_CONF['site_url'] . '/index.php');
         } else if ($_CONF['hideemailicon'] == 1) {
@@ -375,25 +401,47 @@
         break;
 
     case 'sendstory':
-        $sid = COM_applyFilter ($HTTP_POST_VARS['sid']);
+        $sid = COM_applyFilter ($_POST['sid']);
         if (empty ($sid)) {
             $display = COM_refresh ($_CONF['site_url'] . '/index.php');
         } else {
-            $display .= mailstory ($sid, $HTTP_POST_VARS['to'],
-                    $HTTP_POST_VARS['toemail'], $HTTP_POST_VARS['from'],
-                    $HTTP_POST_VARS['fromemail'], $HTTP_POST_VARS['shortmsg']);
+            if (empty ($_POST['toemail']) || empty ($_POST['fromemail'])
+                    || !COM_isEmail ($_POST['toemail'])
+                    || !COM_isEmail ($_POST['fromemail'])) {
+                $display .= COM_siteHeader ('menu', $LANG08[17])
+                         . mailstoryform ($sid, $_POST['to'], $_POST['toemail'],
+                                          $_POST['from'], $_POST['fromemail'],
+                                          $_POST['shortmsg'], 52)
+                         . COM_siteFooter ();
+            } else if (empty ($_POST['to']) || empty ($_POST['from']) ||
+                    empty ($_POST['shortmsg'])) {
+                $display .= COM_siteHeader ('menu', $LANG08[17])
+                         . mailstoryform ($sid, $_POST['to'], $_POST['toemail'],
+                                          $_POST['from'], $_POST['fromemail'],
+                                          $_POST['shortmsg'])
+                         . COM_siteFooter ();
+            } else {
+                $display .= mailstory ($sid, $_POST['to'], $_POST['toemail'],
+                    $_POST['from'], $_POST['fromemail'], $_POST['shortmsg']);
+            }
         }
         break;
 
     default:
-        if (isset ($HTTP_GET_VARS['uid'])) {
-            $uid = COM_applyFilter ($HTTP_GET_VARS['uid'], true);
+        if (isset ($_GET['uid'])) {
+            $uid = COM_applyFilter ($_GET['uid'], true);
         } else {
             $uid = 0;
         }
         if ($uid > 1) {
+            $subject = '';
+            if (isset ($_GET['subject'])) {
+                $subject = strip_tags ($_GET['subject']);
+                $subject = substr ($subject, 0, strcspn ($subject, "\r\n"));
+                $subject = htmlspecialchars (trim ($subject), ENT_QUOTES);
+            }
             $display .= COM_siteHeader ('menu', $LANG04[81])
-                     . contactform ($uid)
+                     . contactform ($uid, $subject)
                      . COM_siteFooter ();
         } else {
             $display .= COM_refresh ($_CONF['site_url'] . '/index.php');
diff -ruN 1.3.11sr1/robots.txt 1.4.0sr5-1/robots.txt
--- 1.3.11sr1/robots.txt	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/robots.txt	2006-08-08 02:53:59.000000000 -0500
@@ -0,0 +1,6 @@
+User-agent: *
+Disallow: /comment.php
+Disallow: /docs
+Disallow: /pingback.php
+Disallow: /submit.php
+Disallow: /trackback.php
diff -ruN 1.3.11sr1/search.php 1.4.0sr5-1/search.php
--- 1.3.11sr1/search.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/search.php	2006-08-08 02:53:59.000000000 -0500
@@ -8,11 +8,11 @@
 // |                                                                           |
 // | Geeklog search tool.                                                      |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,14 +31,14 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: search.php,v 1.56 2004/12/10 10:33:30 dhaun Exp $
+// $Id: search.php,v 1.57 2005/11/14 11:36:41 dhaun Exp $
 
 require_once('lib-common.php');
 require_once($_CONF['path_system'] . 'classes/search.class.php');
 
 $searchObj = new Search();
 
-if ($_GET['mode'] == 'search') {
+if (isset ($_GET['mode']) && ($_GET['mode'] == 'search')) {
     $display = COM_siteHeader('menu', $LANG09[11]);
     $display .= $searchObj->doSearch();
 } else {
Files 1.3.11sr1/staticpages/images/staticpages.gif and 1.4.0sr5-1/staticpages/images/staticpages.gif differ
Files 1.3.11sr1/staticpages/images/staticpages.png and 1.4.0sr5-1/staticpages/images/staticpages.png differ
diff -ruN 1.3.11sr1/staticpages/index.php 1.4.0sr5-1/staticpages/index.php
--- 1.3.11sr1/staticpages/index.php	2004-12-31 10:02:24.000000000 -0600
+++ 1.4.0sr5-1/staticpages/index.php	2006-08-08 02:39:06.000000000 -0500
@@ -2,17 +2,17 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Static Page Geeklog Plugin 1.4.1                                          |
+// | Static Page Geeklog Plugin 1.4.2                                          |
 // +---------------------------------------------------------------------------+
 // | index.php                                                                 |
 // |                                                                           |
 // | This is the main page for the Geeklog Static Page Plugin                  |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs       - tony@tonybibbs.com                            |
-// |          Tom Willett      - twillett@users.sourceforge.net                |
-// |          Dirk Haun        - dirk@haun-online.de                           |
+// | Authors: Tony Bibbs       - tony AT tonybibbs DOT com                     |
+// |          Tom Willett      - twillett AT users DOT sourceforge DOT net     |
+// |          Dirk Haun        - dirk AT haun-online DOT de                    |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -31,7 +31,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: index.php,v 1.23 2004/09/28 15:26:45 dhaun Exp $
+// $Id: index.php,v 1.26 2005/12/28 10:11:53 dhaun Exp $
 
 require_once ('../lib-common.php');
 
@@ -85,7 +85,7 @@
 */
 function display_page ($page, $A, $noboxes)
 {
-    global $_CONF, $LANG01, $LANG11, $LANG_STATIC;
+    global $_CONF, $LANG01, $LANG11, $LANG_STATIC, $_IMAGE_TYPE;
 
     $retval = '';
 
@@ -109,15 +109,15 @@
                 . ' ' . $curtime[0]; 
 
         if ($_CONF['hideprintericon'] == 0) {
-            $retval .= ' <a href="' . COM_buildURL ($_CONF['site_url'] . '/staticpages/index.php?page=' . $page . '&amp;mode=print') . '"><img src="' . $_CONF['layout_url'] . '/images/print.gif" alt="' . $LANG01[65] . '" title="' . $LANG_STATIC['printable_format'] . '" border="0"></a>';
+            $retval .= ' <a href="' . COM_buildURL ($_CONF['site_url'] . '/staticpages/index.php?page=' . $page . '&amp;mode=print') . '"><img src="' . $_CONF['layout_url'] . '/images/print.' . $_IMAGE_TYPE . '" alt="' . $LANG01[65] . '" title="' . $LANG_STATIC['printable_format'] . '" border="0"></a>';
         }
 
         if ((SEC_hasAccess ($A['owner_id'], $A['group_id'], $A['perm_owner'],
                 $A['perm_group'], $A['perm_members'], $A['perm_anon']) == 3) &&
                 SEC_hasRights ('staticpages.edit')) {
-            $retval .= '<br><a href="' . COM_buildURL ($_CONF['site_admin_url']
+            $retval .= '<br><a href="' . $_CONF['site_admin_url']
                     . '/plugins/staticpages/index.php?mode=edit&amp;sp_id='
-                    . $page) . '">';
+                    . $page . '">';
             $retval .= $LANG_STATIC['edit'] . '</a>';
         }
         $retval .= '</p>';
@@ -164,7 +164,7 @@
     $print->set_var ('sp_title', stripslashes ($A['sp_title']));
     $print->set_var ('sp_content',
             render_content (stripslashes ($A['sp_content']), $A['sp_php']));
-    $print->set_var ('sp_hits', $A['sp_hits']);
+    $print->set_var ('sp_hits', COM_numberFormat ($A['sp_hits']));
     $print->parse ('output', 'print');
 
     return $print->finish ($print->get_var ('output'));
diff -ruN 1.3.11sr1/stats.php 1.4.0sr5-1/stats.php
--- 1.3.11sr1/stats.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/stats.php	2006-08-08 02:53:59.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | stats.php                                                                 |
 // |                                                                           |
 // | Geeklog system statistics page.                                           |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2005 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,9 +32,10 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: stats.php,v 1.32 2004/09/05 19:19:50 dhaun Exp $
+// $Id: stats.php,v 1.45 2005/12/22 14:39:47 ospiess Exp $
 
 require_once('lib-common.php');
+require_once( $_CONF['path_system'] . 'lib-admin.php' );
 
 $display = '';
 
@@ -59,205 +60,220 @@
 
 // MAIN
 
-$display .= COM_siteHeader ('menu', $LANG10[1]) . COM_startBlock ($LANG10[1]);
-
-$stat_templates = new Template($_CONF['path_layout'] . 'stats');
-$stat_templates->set_file(array('stats'=>'stats.thtml',
-                            'sitestats'=>'sitestatistics.thtml',
-                            'itemstats'=>'itemstatistics.thtml',
-                            'statrow'=>'singlestat.thtml'));
+$display .= COM_siteHeader ('menu', $LANG10[1]);
 
 // Overall Site Statistics
 
-$totalhits = DB_getItem($_TABLES['vars'],'value',"name = 'totalhits'");
-$stat_templates->set_var('lang_totalhitstosystem',$LANG10[2]);
-$stat_templates->set_var('total_hits', $totalhits);
-
-$id = array('draft_flag','date');
-$values = array('0','NOW()');	
-$result = DB_query("SELECT count(*) AS count,SUM(comments) as ccount FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND'));
-$A = DB_fetchArray($result);
-$total_stories = $A['count'];
-$comments = $A['ccount'];
-if (empty ($comments)) {
-    $comments = 0;
+$header_arr = array(
+    array('text' => $LANG10[1], 'field' => 'title'),
+    array('text' => "", 'field' => 'stats'),
+);
+$data_arr = array();
+$text_arr = array('has_menu'     =>  false,
+                  'title'        => $LANG10[1],
+);
+
+$totalhits = DB_getItem ($_TABLES['vars'], 'value', "name = 'totalhits'");
+$data_arr[] = array('title' => $LANG10[2], 'stats' => COM_NumberFormat ($totalhits));
+
+if ($_CONF['lastlogin']) {
+    // if we keep track of the last login date, count the number of users
+    // that have logged in during the last 4 weeks
+    $result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['users']} AS u,{$_TABLES['userinfo']} AS i WHERE (u.uid > 1) AND (u.uid = i.uid) AND (lastlogin <> '') AND (lastlogin >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 28 DAY)))");
+    list($active_users) = DB_fetchArray ($result);
+} else {
+    // otherwise, just count all users with status 'active'
+    // (i.e. those that logged in at least once and have not been banned since)
+    $active_users = DB_count ($_TABLES['users'], 'status', 3);
+    $active_users--; // don't count the anonymous user account
 }
-$stat_templates->set_var('lang_stories_comments',$LANG10[3]);
-$stat_templates->set_var('total_stories',$total_stories);
-$stat_templates->set_var('total_comments',$comments);
-
-$result = DB_query ("SELECT count(*) AS count FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
-$A = DB_fetchArray($result);
-$total_polls = $A['count'];
-$result = DB_query ("SELECT qid FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ());
-$nrows = DB_numRows ($result);
-if ($nrows > 0) {
-    $questions = '';
-    for ($i = 1; $i <= $nrows; $i++) {
-        $A = DB_fetchArray($result);
-        if ($i > 1) {
-            $questions .= ',';
+$data_arr[] = array('title' => $LANG10[27], 'stats' => COM_NumberFormat ($active_users));
+
+$topicsql = COM_getTopicSql ('AND');
+
+$id = array ('draft_flag', 'date');
+$values = array ('0', 'NOW()');	
+$result = DB_query ("SELECT COUNT(*) AS count,SUM(comments) AS ccount FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND') . $topicsql);
+$A = DB_fetchArray ($result);
+if (empty ($A['ccount'])) {
+    $A['ccount'] = 0;
+}
+$data_arr[] = array('title' => $LANG10[3],
+                    'stats' => COM_NumberFormat ($A['count'])
+                           . " (". COM_NumberFormat ($A['ccount']) . ")");
+
+$result = DB_query ("SELECT COUNT(*) AS count FROM {$_TABLES['events']}" . COM_getPermSQL ());
+$A = DB_fetchArray ($result);
+$data_arr[] = array('title' => $LANG10[6], 'stats' => COM_NumberFormat ($A['count']));
+
+// new stats plugin API call
+$plg_stats = PLG_getPluginStats (3);
+if (count ($plg_stats) > 0) {
+    foreach ($plg_stats as $pstats) {
+        if (is_array ($pstats[0])) {
+            foreach ($pstats as $pmstats) {
+                $data_arr[] = array('title' => $pmstats[0], 'stats' => $pmstats[1]);
+            }
+        } else {
+            $data_arr[] = array('title' => $pstats[0], 'stats' => $pstats[1]);
         }
-        $questions .= "'" . $A['qid'] . "'";
     }
-    $result = DB_query ("SELECT SUM(votes) FROM {$_TABLES['pollanswers']} WHERE qid IN ({$questions})");
-    $A = DB_fetchArray($result, true);
-    $total_answers = $A[0];
-} else {
-    $total_answers = 0;
-}
-$stat_templates->set_var('lang_polls_answers',$LANG10[4]);
-$stat_templates->set_var('total_polls',$total_polls);
-$stat_templates->set_var('total_answers', $total_answers);
-
-$result = DB_query ("SELECT count(*) AS count,SUM(hits) AS clicks FROM {$_TABLES['links']}" . COM_getPermSQL ());
-$A = DB_fetchArray($result);
-$total_links = $A['count'];
-$total_clicks = $A['clicks'];
-if (empty ($total_clicks)) {
-    $total_clicks = 0;
 }
-$stat_templates->set_var('lang_links_clicks',$LANG10[5]);
-$stat_templates->set_var('total_links',$total_links);
-$stat_templates->set_var('total_clicks',$total_clicks);
-
-$result = DB_query ("SELECT count(*) AS count FROM {$_TABLES['events']}" . COM_getPermSQL ());
-$A = DB_fetchArray($result);
-$total_events = $A['count'];
-$stat_templates->set_var('lang_events',$LANG10[6]);
-$stat_templates->set_var('total_events',$total_events);
-
-$stat_templates->parse('site_statistics','sitestats',true);
-$stat_templates->parse('output','stats');
-$display .= $stat_templates->finish($stat_templates->get_var('output'));
 
-// Get overall plugin statistics for inclusion
-$display .= PLG_getPluginStats(1);
+$display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
 
-$display .= COM_endBlock();
+// old stats plugin API call, for backward compatibilty
+$display .= PLG_getPluginStats (1);
 
 // Detailed story statistics
 
-$result = DB_query("SELECT sid,title,hits FROM {$_TABLES["stories"]} WHERE (draft_flag = 0) AND (date <= NOW()) AND (Hits > 0)" . COM_getPermSQL ('AND') . " ORDER BY Hits desc LIMIT 10");
+$result = DB_query("SELECT sid,title,hits FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW()) AND (Hits > 0)" . COM_getPermSQL ('AND') . $topicsql . " ORDER BY hits DESC LIMIT 10");
 $nrows  = DB_numRows($result);
 
-$display .= COM_startBlock($LANG10[7]);
 if ($nrows > 0) {
-    $stat_templates->set_var('item_label',$LANG10[8]);
-    $stat_templates->set_var('stat_name',$LANG10[9]);
+    $header_arr = array(
+        array('text' => $LANG10[8], 'field' => 'sid'),
+        array('text' => $LANG10[9], 'field' => 'hits'),
+    );
+    $data_arr = array();
+    $text_arr = array('has_menu'     =>  false,
+                      'title'        => $LANG10[7],
+    );
+
     for ($i = 0; $i < $nrows; $i++) {
         $A = DB_fetchArray($result);
-        $stat_templates->set_var ('item_url', COM_buildUrl ($_CONF['site_url']
-                                    . '/article.php?story=' . $A['sid']));
-        $stat_templates->set_var('item_text', stripslashes(str_replace('$','&#36;',$A['title'])));
-        $stat_templates->set_var('item_stat', $A['hits']);
-        $stat_templates->parse('stat_row','statrow',true); 
+        $A['title'] = stripslashes(str_replace('$','&#36;',$A['title']));
+        $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                  . "/article.php?story={$A['sid']}"). "\">{$A['title']}</a>";
+        $A['hits'] = COM_NumberFormat ($A['hits']);
+        $data_arr[$i] = $A;
+
     }
-    $stat_templates->parse('output','itemstats');
-    $display .= $stat_templates->finish($stat_templates->get_var('output'));
+    $display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
 } else {
+    $display .= COM_startBlock($LANG10[7]);
     $display .= $LANG10[10];
+    $display .= COM_endBlock();
 }
-	
-$display .= COM_endBlock();
-$stat_templates->set_var('stat_row','');
 
 // Top Ten Commented Stories
 
-$result = DB_query("SELECT sid,title,comments from {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW()) AND (comments > 0)" . COM_getPermSQL ('AND') . " ORDER BY comments desc LIMIT 10");
+$result = DB_query("SELECT sid,title,comments FROM {$_TABLES['stories']} WHERE (draft_flag = 0) AND (date <= NOW()) AND (comments > 0)" . COM_getPermSQL ('AND') . $topicsql . " ORDER BY comments DESC LIMIT 10");
 $nrows  = DB_numRows($result);
-$display .= COM_startBlock($LANG10[11]);
 if ($nrows > 0) {
-    $stat_templates->set_var('item_label',$LANG10[8]);
-    $stat_templates->set_var('stat_name',$LANG10[12]);
+    $header_arr = array(
+        array('text' => $LANG10[8], 'field' => 'sid'),
+        array('text' => $LANG10[12], 'field' => 'comments'),
+    );
+    $data_arr = array();
+    $text_arr = array('has_menu'     =>  false,
+                      'title'        => $LANG10[11],
+    );
     for ($i = 0; $i < $nrows; $i++) {
         $A = DB_fetchArray($result);	
-        $stat_templates->set_var ('item_url', COM_buildUrl ($_CONF['site_url']
-                                    . '/article.php?story=' . $A['sid']));
-        $stat_templates->set_var('item_text', stripslashes(str_replace('$','&#36;',$A['title'])));
-        $stat_templates->set_var('item_stat', $A['comments']);
-        $stat_templates->parse('stat_row','statrow',true); 
+        $A['title'] = stripslashes(str_replace('$','&#36;',$A['title']));
+        $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                  . "/article.php?story={$A['sid']}"). "\">{$A['title']}</a>";
+        $A['comments'] = COM_NumberFormat ($A['comments']);
+        $data_arr[$i] = $A;
     }
-    $stat_templates->parse('output','itemstats');
-    $display .= $stat_templates->finish($stat_templates->get_var('output'));
+    $display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
+
 } else {
+    $display .= COM_startBlock($LANG10[11]);
     $display .= $LANG10[13];
+    $display .= COM_endBlock();
+}
+
+// Top Ten Trackback Comments
+
+if ($_CONF['trackback_enabled'] || $_CONF['pingback_enabled']) {
+    $result = DB_query ("SELECT {$_TABLES['stories']}.sid,{$_TABLES['stories']}.title,COUNT(*) AS count FROM {$_TABLES['stories']},{$_TABLES['trackback']} AS t WHERE (draft_flag = 0) AND ({$_TABLES['stories']}.date <= NOW()) AND ({$_TABLES['stories']}.sid = t.sid) AND (t.type = 'article')" . COM_getPermSql ('AND') . $topicsql . " GROUP BY t.sid ORDER BY count DESC LIMIT 10");
+    $nrows = DB_numRows ($result);
+    if ($nrows > 0) {
+        $header_arr = array(
+            array('text' => $LANG10[8], 'field' => 'sid'),
+            array('text' => $LANG10[12], 'field' => 'count'),
+        );
+        $data_arr = array();
+        $text_arr = array('has_menu'     =>  false,
+                          'title'        => $LANG10[25],
+        );
+        for ($i = 0; $i < $nrows; $i++) {
+            $A = DB_fetchArray ($result);
+            $A['title'] = stripslashes(str_replace('$','&#36;',$A['title']));
+            $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                      . "/article.php?story={$A['sid']}"). "\">{$A['title']}</a>";
+            $A['count'] = COM_NumberFormat ($A['count']);
+            $data_arr[$i] = $A;
+        }
+        $display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
+
+    } else {
+        $display .= COM_startBlock ($LANG10[25]);
+        $display .= $LANG10[26];
+        $display .= COM_endBlock ();
+    }
 }
-$display .= COM_endBlock();
-$stat_templates->set_var('stat_row','');
 
 // Top Ten Emailed Stories
 
-$result = DB_query("SELECT sid,title,numemails FROM {$_TABLES["stories"]} WHERE (numemails > 0) AND (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND') . " ORDER BY numemails desc LIMIT 10");
+$result = DB_query("SELECT sid,title,numemails FROM {$_TABLES['stories']} WHERE (numemails > 0) AND (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND') . $topicsql . " ORDER BY numemails DESC LIMIT 10");
 $nrows = DB_numRows($result);
-$display .= COM_startBlock($LANG10[22]);
 
 if ($nrows > 0) {
-    $stat_templates->set_var('item_label',$LANG10[8]);
-    $stat_templates->set_var('stat_name',$LANG10[23]);
+    $header_arr = array(
+        array('text' => $LANG10[8], 'field' => 'sid'),
+        array('text' => $LANG10[23], 'field' => 'numemails'),
+    );
+    $data_arr = array();
+    $text_arr = array('has_menu'     =>  false,
+                      'title'        => $LANG10[22],
+    );
     for ($i = 0; $i < $nrows; $i++) {
         $A = DB_fetchArray($result);
-        $stat_templates->set_var ('item_url', COM_buildUrl ($_CONF['site_url']
-                                    . '/article.php?story=' . $A['sid']));
-        $stat_templates->set_var('item_text', stripslashes(str_replace('$','&#36;',$A['title'])));
-        $stat_templates->set_var('item_stat', $A['numemails']);
-        $stat_templates->parse('stat_row','statrow',true); 
+        $A['title'] = stripslashes(str_replace('$','&#36;',$A['title']));
+        $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                  . "/article.php?story={$A['sid']}"). "\">{$A['title']}</a>";
+        $A['numemails'] = COM_NumberFormat ($A['numemails']);
+        $data_arr[$i] = $A;
+
     }
-    $stat_templates->parse('output','itemstats');
-    $display .= $stat_templates->finish($stat_templates->get_var('output'));
+    $display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
 } else {
+    $display .= COM_startBlock($LANG10[22]);
     $display .= $LANG10[24];
+    $display .= COM_endBlock();
 }
-$display .= COM_endBlock();
-$stat_templates->set_var('stat_row','');
 
-// Top Ten Polls
+// Top Ten Events
 
-$result = DB_query("SELECT qid,question,voters from {$_TABLES['pollquestions']} WHERE (voters > 0)" . COM_getPermSQL ('AND') . " ORDER BY voters desc LIMIT 10");
+$result = DB_query("SELECT eid,title,hits from {$_TABLES['events']} WHERE (hits > 0)" . COM_getPermSQL ('AND') . " ORDER BY hits DESC LIMIT 10");
 $nrows  = DB_numRows($result);
-$display .= COM_startBlock($LANG10[14]);
-if ($nrows>0) {
-    $stat_templates->set_var('item_label',$LANG10[15]);
-    $stat_templates->set_var('stat_name',$LANG10[16]);
+if ($nrows > 0) {
+    $header_arr = array(
+        array('text' => $LANG10[29], 'field' => 'sid'),
+        array('text' => $LANG10[30], 'field' => 'hits'),
+    );
+    $data_arr = array();
+    $text_arr = array('has_menu'     =>  false,
+                      'title'        => $LANG10[28],
+    );
     for ($i = 0; $i < $nrows; $i++) {
         $A = DB_fetchArray($result);
-        $stat_templates->set_var ('item_url', $_CONF['site_url']
-                . '/pollbooth.php?qid=' . $A['qid'] . '&amp;aid=-1');
-        $stat_templates->set_var('item_text', $A['question']);
-        $stat_templates->set_var('item_stat', $A['voters']);
-        $stat_templates->parse('stat_row','statrow',true); 
+        $A['title'] = stripslashes(str_replace('$','&#36;',$A['title']));
+        $A['sid'] = "<a href=\"" . COM_buildUrl ($_CONF['site_url']
+                  . "/calendar_event.php?eid={$A['eid']}"). "\">{$A['title']}</a>";
+        $A['hits'] = COM_NumberFormat ($A['hits']);
+        $data_arr[$i] = $A;
     }
-    $stat_templates->parse('output','itemstats');
-    $display .= $stat_templates->finish($stat_templates->get_var('output'));
+    $display .= ADMIN_simpleList("", $header_arr, $text_arr, $data_arr);
 } else {
-    $display .= $LANG10[17];
+    $display .= COM_startBlock($LANG10[28]);
+    $display .= $LANG10[31];
+    $display .= COM_endBlock();
 }
 
-$display .= COM_endBlock();
-$stat_templates->set_var('stat_row','');
-
-// Top Ten Links
-
-$result = DB_query("SELECT lid,url,title,hits from {$_TABLES['links']} WHERE (hits > 0)" . COM_getPermSQL ('AND') . " ORDER BY hits desc LIMIT 10");
-$nrows  = DB_numRows($result);
-$display .= COM_startBlock($LANG10[18]);
-if ($nrows > 0) {
-    $stat_templates->set_var('item_label',$LANG10[19]);
-    $stat_templates->set_var('stat_name',$LANG10[20]);
-    for ($i = 0; $i < $nrows; $i++) {
-        $A = DB_fetchArray($result);
-        $stat_templates->set_var('item_url', COM_buildUrl ($_CONF['site_url']
-                . '/portal.php?what=link&amp;item=' . $A['lid']));
-        $stat_templates->set_var('item_text', stripslashes(str_replace('$','&#36;',$A['title'])));
-        $stat_templates->set_var('item_stat', $A['hits']);
-        $stat_templates->parse('stat_row','statrow',true); 
-    }
-    $stat_templates->parse('output','itemstats');
-    $display .= $stat_templates->finish($stat_templates->get_var('output'));
-} else {
-    $display .= $LANG10[21];
-}	
-$display .= COM_endBlock();
 
 // Now show stats for any plugins that want to be included
 $display .= PLG_getPluginStats(2);
diff -ruN 1.3.11sr1/submit.php 1.4.0sr5-1/submit.php
--- 1.3.11sr1/submit.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/submit.php	2006-08-08 02:53:59.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | submit.php                                                                |
 // |                                                                           |
-// | Let users submit stories, links, and events.                              |
+// | Let users submit stories, events and plugin stuff.                        |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: submit.php,v 1.80 2004/12/19 10:08:57 dhaun Exp $
+// $Id: submit.php,v 1.94.2.1 2006/05/28 07:56:36 dhaun Exp $
 
 require_once ('lib-common.php');
 require_once ($_CONF['path_system'] . 'lib-story.php');
@@ -47,9 +47,9 @@
 *
 * This is the submission it is modular to allow us to write as little as
 * possible.  It takes a type and formats a form for the user.  Currently the
-* types are link, story and event.  If no type is provided, Story is assumed.
+* types are story and event.  If no type is provided, Story is assumed.
 *
-* @param    string  $type   type of submission ('link', 'event', 'story')
+* @param    string  $type   type of submission ('event', 'story')
 * @param    string  $mode   calendar mode ('personal' or empty string)
 * @param    int     $month  month (for events)
 * @param    int     $day    day (for events)
@@ -98,10 +98,6 @@
                     . COM_endBlock();
 
             switch ($type) {
-                case 'link':
-                    $retval .= submitlink();
-                    break;
-
                 case 'event':
                     $retval .= submitevent($mode,$month,$day,$year,$hour);
                     break;
@@ -149,7 +145,8 @@
     $eventform->set_var('lang_addeventto', $LANG12[38]);
     $eventform->set_var('lang_mastercalendar', $LANG12[39]);
 
-    if ($_CONF['personalcalendars'] == 1 AND $_USER['uid'] > 1) {
+    if (($_CONF['personalcalendars'] == 1) &&
+            isset ($_USER['uid']) && $_USER['uid'] > 1) {
         $eventform->set_var('lang_personalcalendar', $LANG12[40]);
         if ($mode == 'personal') {
             $eventform->set_var('personal_option', '<option value="personal" selected="selected">' . $LANG12[40] . '</option>');
@@ -225,48 +222,16 @@
 }
 
 /**
-* Shows link submission form
-*
-*/
-function submitlink() 
-{
-    global $_CONF, $_TABLES, $LANG12;
-
-    $retval = COM_startBlock ($LANG12[5], 'submitlink.html');
-
-    $linkform = new Template($_CONF['path_layout'] . 'submit');
-    $linkform->set_file('linkform', 'submitlink.thtml');
-    $linkform->set_var('site_url', $_CONF['site_url']);
-    $linkform->set_var('layout_url', $_CONF['layout_url']);
-    $linkform->set_var('lang_title', $LANG12[10]);
-    $linkform->set_var('lang_link', $LANG12[11]);
-    $linkform->set_var('lang_category', $LANG12[17]);
-    $linkform->set_var('link_category_options',
-        COM_optionList($_TABLES['links'],'DISTINCT category,category', '', 0));
-    $linkform->set_var('lang_other', $LANG12[18]);
-    $linkform->set_var('lang_ifother', $LANG12[16]);
-    $linkform->set_var('lang_description', $LANG12[15]);
-    $linkform->set_var('lang_htmlnotallowed', $LANG12[35]);
-    $linkform->set_var('lang_submit', $LANG12[8]);
-    $linkform->set_var('max_url_length', 255);
-    $linkform->parse('theform', 'linkform');
-    $retval .= $linkform->finish($linkform->get_var('theform'));
-    $retval .= COM_endBlock();
-
-    return $retval;
-}
-
-/**
 * Shows the story submission form
 *
 */
 function submitstory($topic = '') 
 {
-    global $_CONF, $_TABLES, $_USER, $LANG12;
+    global $_CONF, $_TABLES, $_USER, $LANG12,$LANG24;
 
     $retval = '';
 
-    if ($_POST['mode'] == $LANG12[32]) { // preview
+    if (isset ($_POST['mode']) && ($_POST['mode'] == $LANG12[32])) { // preview
         $A = $_POST;
     } else {
         $A['sid'] = COM_makeSid();
@@ -282,6 +247,15 @@
         $A['postmode'] = $_CONF['postmode'];
     }
 
+    if (!empty ($topic)) {
+        $allowed = DB_getItem ($_TABLES['topics'], 'tid',
+            "tid = '" . addslashes ($topic) . "'" . COM_getTopicSql ('AND'));
+
+        if ($allowed != $topic) {
+            $topic = '';
+        }
+    }
+
     $title = '';
     $introtext = '';
 
@@ -306,17 +280,22 @@
         $A['introtext'] = str_replace('{','&#123;',$A['introtext']);
         $A['introtext'] = str_replace('}','&#125;',$A['introtext']);
 
-        $A['show_topic_icon'] = 1;
+        if (isset ($_CONF['show_topic_icon'])) {
+            $A['show_topic_icon'] = $_CONF['show_topic_icon'];
+        } else {
+            $A['show_topic_icon'] = 1;
+        }
         $A['hits'] = 0;
         $res = DB_query("SELECT username, fullname, photo FROM {$_TABLES['users']} WHERE uid = {$A['uid']}");
         $A += DB_fetchArray($res);
+        $A['tid'] = COM_applyFilter ($A['tid']);
         $res = DB_query("SELECT topic, imageurl FROM {$_TABLES['topics']} WHERE tid = '{$A['tid']}'");
         $A += DB_fetchArray($res);
         if ($A['postmode'] == 'plaintext') {
             $A['introtext'] = COM_makeClickableLinks ($A['introtext']);
         }
         $retval .= COM_startBlock($LANG12[32])
-                . STORY_renderArticle ($A, 'n')
+                . STORY_renderArticle ($A, 'p')
                 . COM_endBlock();
     }
 
@@ -326,8 +305,20 @@
     if (isset ($_CONF['advanced_editor']) && ($_CONF['advanced_editor'] == 1) &&
         file_exists ($_CONF['path_layout'] . 'submit/submitstory_advanced.thtml')) { 
         $storyform->set_file('storyform','submitstory_advanced.thtml');
+        $storyform->set_var ('change_editormode', 'onChange="change_editmode(this);"');
+        $storyform->set_var ('lang_expandhelp', $LANG24[67]);
+        $storyform->set_var ('lang_reducehelp', $LANG24[68]);
+        $storyform->set_var ('show_texteditor', 'none');
+        $storyform->set_var ('show_htmleditor', '');
     } else {
         $storyform->set_file('storyform','submitstory.thtml');
+        if ($A['postmode'] == 'html') {
+            $storyform->set_var ('show_texteditor', 'none');
+            $storyform->set_var ('show_htmleditor', '');
+        } else {
+            $storyform->set_var ('show_texteditor', '');
+            $storyform->set_var ('show_htmleditor', 'none');
+        }
     }
     $storyform->set_var ('site_url', $_CONF['site_url']);
     $storyform->set_var ('layout_url', $_CONF['layout_url']);
@@ -344,7 +335,7 @@
         $storyform->set_var('seperator', ' | ');
         $storyform->set_var('create_account','<a href="' . $_CONF['site_url'] . '/users.php?mode=new">' . $LANG12[53] . '</a>');
     }
-
+    
     $storyform->set_var('lang_title', $LANG12[10]);
     $storyform->set_var('story_title', htmlspecialchars ($title));
     $storyform->set_var('lang_topic', $LANG12[28]);
@@ -386,7 +377,7 @@
 function sendNotification ($table, $A)
 {
     global $_CONF, $_TABLES, $LANG01, $LANG02, $LANG06, $LANG08, $LANG09,
-           $LANG12, $LANG24, $LANG29, $LANG30;
+           $LANG12, $LANG24, $LANG29, $LANG30, $LANG_ADMIN;
 
     switch ($table) {
         case $_TABLES['storysubmission']:
@@ -404,7 +395,7 @@
             $mailbody = "$LANG08[31]: {$title}\n"
                       . "$LANG24[7]: {$storyauthor}\n"
                       . "$LANG08[32]: " . strftime ($_CONF['date']) . "\n"
-                      . "$LANG24[14]: {$topic}\n\n";
+                      . "{$LANG_ADMIN['topic']}: {$topic}\n\n";
 
             if ($_CONF['emailstorieslength'] > 0) {
                 if ($_CONF['emailstorieslength'] > 1) {
@@ -446,23 +437,6 @@
             }
             $mailsubject = $_CONF['site_name'] . ' ' . $LANG29[37];
             break;
-
-        case $_TABLES['linksubmission']:
-        case $_TABLES['links']:
-            $title = stripslashes ($A['title']);
-            $description = stripslashes ($A['description']);
-
-            $mailbody = "$LANG12[10]: $title\n"
-                      . "$LANG12[11]: <{$A['url']}>\n"
-                      . "$LANG12[17]: {$A['category']}\n\n"
-                      . $description . "\n\n";
-            if ($table == $_TABLES['linksubmission']) {
-                $mailbody .= "$LANG01[10] <{$_CONF['site_admin_url']}/moderation.php>\n\n";
-            } else {
-                $mailbody .= "$LANG06[1] <{$_CONF['site_url']}/links.php?category=" . urlencode ($A['category']) . ">\n\n";
-            }
-            $mailsubject = $_CONF['site_name'] . ' ' . $LANG29[36];
-            break;
     }
 
     $mailbody .= "\n------------------------------\n";
@@ -488,6 +462,14 @@
     $A['title'] = COM_stripslashes ($A['title']);
     $A['introtext'] = COM_stripslashes ($A['introtext']);
 
+    // pseudo-formatted story text for the spam check
+    $spamcheck = '<h1>' . $A['title'] . '</h1><p>' . $A['introtext'] . '</p>';
+    $result = PLG_checkforSpam ($spamcheck, $_CONF['spamx']);
+    if ($result > 0) {
+        COM_updateSpeedlimit ('submit');
+        COM_displayMessageAndAbort ($result, 'spamx', 403, 'Forbidden');
+    }
+
     $A['title'] = strip_tags (COM_checkWords ($A['title']));
     $A['title'] = addslashes (str_replace ('$', '&#36;', $A['title']));
 
@@ -530,7 +512,7 @@
         $related = addslashes (implode ("\n", STORY_extractLinks ($introtext)));
 
         $introtext = addslashes ($introtext);
-        DB_save ($_TABLES['stories'], 'sid,uid,tid,title,introtext,related,date,commentcode,postmode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon', "{$A['sid']},{$A['uid']},'{$A['tid']}','{$A['title']}','$introtext','{$related}',NOW(),{$_CONF['comment_code']},'{$A['postmode']}',{$A['uid']},{$T['group_id']},{$T['perm_owner']},{$T['perm_group']},{$T['perm_members']},{$T['perm_anon']}");
+        DB_save ($_TABLES['stories'], 'sid,uid,tid,title,introtext,related,date,commentcode,trackbackcode,postmode,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon', "{$A['sid']},{$A['uid']},'{$A['tid']}','{$A['title']}','$introtext','{$related}',NOW(),'{$_CONF['comment_code']}','{$_CONF['trackback_code']}','{$A['postmode']}',{$A['uid']},{$T['group_id']},{$T['perm_owner']},{$T['perm_group']},{$T['perm_members']},{$T['perm_anon']}");
 
         COM_rdfUpToDateCheck ();
         COM_olderStuff ();
@@ -548,84 +530,6 @@
 }
 
 /**
-* Saves a link submission
-*
-* @param    array   $A  Data for that submission
-* @return   string      HTML redirect
-*
-*/
-function savelink ($A)
-{
-    global $_CONF, $_TABLES, $_USER, $LANG12;
-
-    $retval = '';
-
-    $A['category'] = strip_tags (COM_stripslashes ($A['category']));
-    $A['categorydd'] = strip_tags (COM_stripslashes ($A['categorydd']));
-    if ($A['categorydd'] != $LANG12[18] && !empty ($A['categorydd'])) {
-        $A['category'] = $A['categorydd'];
-    } else if ($A['categorydd'] != $LANG12[18]) {
-        $retval .= COM_startBlock ($LANG12[20], '',
-                       COM_getBlockTemplate ('_msg_block', 'header'))
-                . $LANG12[21]
-                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
-                . submissionform ($type)
-                . COM_siteFooter ();
-
-        return $retval;
-    }
-    $A['category'] = addslashes ($A['category']);
-
-    $A['description'] = addslashes (htmlspecialchars (COM_checkWords ($A['description'])));
-    $A['title'] = addslashes (strip_tags (COM_checkWords ($A['title'])));
-
-    $A['url'] = strip_tags ($A['url']);
-    if (!empty ($A['url'])) {
-        $pos = strpos ($A['url'], ':');
-        if ($pos === false) {
-            $A['url'] = 'http://' . $A['url'];
-        } else {
-            $prot = substr ($A['url'], 0, $pos + 1);
-            if (($prot != 'http:') && ($prot != 'https:')) {
-                $A['url'] = 'http:' . substr ($A['url'], $pos + 1);
-            }
-        }
-        $A['url'] = addslashes ($A['url']);
-    }
-    $A['lid'] = addslashes (COM_makeSid ());
-    COM_updateSpeedlimit ('submit');
-
-    if (($_CONF['linksubmission'] == 1) && !SEC_hasRights ('link.submit')) {
-        $result = DB_save ($_TABLES['linksubmission'],
-                    'lid,category,url,description,title,date',
-                    "{$A['lid']},'{$A['category']}','{$A['url']}','{$A['description']}','{$A['title']}',NOW()");
-
-        if (isset ($_CONF['notification']) &&
-                in_array ('link', $_CONF['notification'])) {
-            sendNotification ($_TABLES['linksubmission'], $A);
-        }
-
-        $retval = COM_refresh ($_CONF['site_url'] . '/index.php?msg=3');
-    } else { // add link directly
-        if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
-            $owner_id = $_USER['uid'];
-        } else {
-            $owner_id = 1; // anonymous user
-        }
-        $result = DB_save ($_TABLES['links'], 'lid,category,url,description,title,date,owner_id', "{$A['lid']},'{$A['category']}','{$A['url']}','{$A['description']}','{$A['title']}',NOW(),$owner_id");
-        if (isset ($_CONF['notification']) &&
-                in_array ('link', $_CONF['notification'])) {
-            sendNotification ($_TABLES['links'], $A);
-        }
-        COM_rdfUpToDateCheck ();
-
-        $retval = COM_refresh ($_CONF['site_url'] . '/links.php');
-    }
-
-    return $retval;
-}
-
-/**
 * Saves an event submission
 *
 * @param    array   $A  Data for that submission
@@ -645,11 +549,13 @@
 
     if (empty ($A['title']) || empty ($A['start_month']) ||
             empty ($A['start_day']) || empty ($A['start_year'])) {
-        $retval .= COM_startBlock ($LANG12[22], '',
+        $retval .= COM_siteHeader ('menu', $LANG12[4])
+            . COM_startBlock ($LANG12[22], '',
                            COM_getBlockTemplate ('_msg_block', 'header'))
             . $LANG12[23]
             . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
-            . submissionform ($type)
+            . submissionform ('event',
+                    ($A['calendar_type'] == 'master') ? '' : 'personal')
             . COM_siteFooter ();
 
         return $retval;
@@ -669,6 +575,17 @@
                             $A['end_year'], $A['end_month'], $A['end_day']);
     }
 
+    // pseudo-formatted event description for the spam check
+    $spamcheck = '<p><a href="' . $A['url'] . '">' . $A['title'] . '</a><br>'
+               . $A['location'] . '<br>' . $A['address1'] . '<br>'
+               . $A['address2'] . '<br>' . $A['city'] . ', ' . $A['zipcode']
+               . '<br>' . $A['description'] . '</p>';
+    $result = PLG_checkforSpam ($spamcheck, $_CONF['spamx']);
+    if ($result > 0) {
+        COM_updateSpeedlimit ('submit');
+        COM_displayMessageAndAbort ($result, 'spamx', 403, 'Forbidden');
+    }
+
     $A['description'] = addslashes (htmlspecialchars (COM_checkWords ($A['description'])));
     $A['address1'] = addslashes (strip_tags (COM_checkWords ($A['address1'])));
     $A['address2'] = addslashes (strip_tags (COM_checkWords ($A['address2'])));
@@ -806,22 +723,6 @@
     }
 
     switch ($type) {
-    case 'link':
-        if (!empty ($A['title']) && !empty ($A['description']) &&
-                !empty ($A['url'])) {
-            $retval = savelink ($A);
-        } else {
-            $retval .= COM_startBlock ($LANG12[22], '',
-                               COM_getBlockTemplate ('_msg_block', 'header'))
-                . $LANG12[23]
-                . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
-                . submissionform($type)
-                . COM_siteFooter ();
-
-            return $retval; 
-        }
-        break;
-
     case 'event':
         $retval = saveevent ($A);
         break;
@@ -834,13 +735,17 @@
 
             // see if this is a submission that needs to be handled by a plugin
             // and should include its own redirect
-            if (!PLG_saveSubmission ($type, $A)) {
+            $retval = PLG_saveSubmission ($type, $A);
+
+            if (!retval) {
                 COM_errorLog("Could not save your submission. Bad type: $type");
+            } elseif (empty($retval)) {
+                // plugin should include its own redirect - but in case handle
+                // it here and redirect to the main page
+                return COM_refresh ($_CONF['site_url'] . '/index.php');
+            } else {
+              return $retval;
             }
-
-            // plugin should include its own redirect - but in case handle
-            // it here and redirect to the main page
-            return COM_refresh ($_CONF['site_url'] . '/index.php');
         }
 
         if (!empty ($A['title']) && !empty ($A['introtext'])) {
@@ -848,14 +753,13 @@
         } else {
             $retval .= COM_startBlock ($LANG12[22], '',
                                COM_getBlockTemplate ('_msg_block', 'header'))
-                . $LANG12[23]
+                . $LANG12[23] // return missing fields error
                 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
                 . submissionform($type)
                 . COM_siteFooter ();
         }
         break;
     }
-
     return $retval;
 }
 
@@ -871,7 +775,10 @@
     $type = COM_applyFilter ($_GET['type']);
 }
 
-$mode = COM_applyFilter ($_REQUEST['mode']);
+$mode = '';
+if (isset ($_REQUEST['mode'])) {
+    $mode = COM_applyFilter ($_REQUEST['mode']);
+}
 
 if (($mode == $LANG12[8]) && !empty ($LANG12[8])) { // submit
     if (empty ($_USER['username']) &&
@@ -900,14 +807,6 @@
    $display = saveevent ($_POST);
 } else {
     switch($type) {
-        case 'link':
-            if (SEC_hasRights ('link.edit')) {
-                echo COM_refresh ($_CONF['site_admin_url']
-                                  . '/link.php?mode=edit');
-                exit;
-            }
-            break;
-
         case 'event':
             if (SEC_hasRights('event.edit') && ($mode != 'personal')) {
                 if (isset ($_REQUEST['year'])) {
@@ -954,34 +853,48 @@
                     exit;
                 }
             } elseif (SEC_hasRights ('story.edit')) {
+                $topic = '';
+                if (isset ($_REQUEST['topic'])) {
+                    $topic = '&topic=' . $_REQUEST['topic'];
+                }
                 echo COM_refresh ($_CONF['site_admin_url']
-                     . '/story.php?mode=edit');
+                     . '/story.php?mode=edit' . $topic);
                 exit;
             }
             break;
     }
 
-    $year = COM_applyFilter ($_REQUEST['year'], true);
-    $month = COM_applyFilter ($_REQUEST['month'], true);
-    $day = COM_applyFilter ($_REQUEST['day'], true);
+    $year = 0;
+    if (isset ($_REQUEST['year'])) {
+        $year = COM_applyFilter ($_REQUEST['year'], true);
+    }
+    $month = 0;
+    if (isset ($_REQUEST['month'])) {
+        $month = COM_applyFilter ($_REQUEST['month'], true);
+    }
+    $day = 0;
+    if (isset ($_REQUEST['day'])) {
+        $day = COM_applyFilter ($_REQUEST['day'], true);
+    }
     if (isset ($_REQUEST['hour'])) {
         $hour = COM_applyFilter ($_REQUEST['hour'], true);
     } else {
         $hour = -1;
     }
-    $topic = COM_applyFilter ($_REQUEST['topic']);
+    $topic = '';
+    if (isset ($_REQUEST['topic'])) {
+        $topic = COM_applyFilter ($_REQUEST['topic']);
+    }
 
     switch ($type) {
         case 'event':
             $pagetitle = $LANG12[4];
             break;
-
-        case 'link':
-            $pagetitle = $LANG12[5];
+        case 'story':
+            $pagetitle = $LANG12[6];
             break;
-
         default:
-            $pagetitle = $LANG12[6];
+            $pagetitle = '';
             break;
     }
     $display .= COM_siteHeader ('menu', $pagetitle);
diff -ruN 1.3.11sr1/trackback.php 1.4.0sr5-1/trackback.php
--- 1.3.11sr1/trackback.php	1969-12-31 18:00:00.000000000 -0600
+++ 1.4.0sr5-1/trackback.php	2006-08-08 02:53:59.000000000 -0500
@@ -0,0 +1,93 @@
+<?php
+
+/* Reminder: always indent with 4 spaces (no tabs). */
+// +---------------------------------------------------------------------------+
+// | Geeklog 1.3                                                               |
+// +---------------------------------------------------------------------------+
+// | trackback.php                                                             |
+// |                                                                           |
+// | Handle trackback pings for stories and plugins.                           |
+// +---------------------------------------------------------------------------+
+// | Copyright (C) 2005 by the following authors:                              |
+// |                                                                           |
+// | Author: Dirk Haun - dirk AT haun-online DOT de                            |
+// +---------------------------------------------------------------------------+
+// |                                                                           |
+// | This program is free software; you can redistribute it and/or             |
+// | modify it under the terms of the GNU General Public License               |
+// | as published by the Free Software Foundation; either version 2            |
+// | of the License, or (at your option) any later version.                    |
+// |                                                                           |
+// | This program is distributed in the hope that it will be useful,           |
+// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
+// | GNU General Public License for more details.                              |
+// |                                                                           |
+// | You should have received a copy of the GNU General Public License         |
+// | along with this program; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
+// |                                                                           |
+// +---------------------------------------------------------------------------+
+// 
+// $Id: trackback.php,v 1.9 2005/12/17 16:34:28 dhaun Exp $
+
+require_once ('lib-common.php');
+require_once ($_CONF['path_system'] . 'lib-trackback.php');
+
+// Note: Error messages are hard-coded in English since there is no way of
+// knowing which language the sender of the trackback ping may prefer.
+$TRB_ERROR = array (
+    'not_enabled'       => 'Trackback not enabled.',
+    'illegal_request'   => 'Illegal request.',
+    'no_access'         => 'You do not have access to this entry.'
+);
+
+if (!$_CONF['trackback_enabled']) {
+    TRB_sendTrackbackResponse (1, $TRB_ERROR['not_enabled']);
+    exit;
+}
+
+if (isset ($_SERVER['REQUEST_METHOD'])) {
+    // Trackbacks are only allowed as POST requests
+    if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+        header ('Allow: POST');
+        COM_displayMessageAndAbort (75, '', 405, 'Method Not Allowed');
+    }
+}
+
+COM_setArgNames (array ('id', 'type'));
+$id = COM_applyFilter (COM_getArgument ('id'));
+$type = COM_applyFilter (COM_getArgument ('type'));
+
+if (empty ($id)) {
+    TRB_sendTrackbackResponse (1, $TRB_ERROR['illegal_request']);
+    exit;
+}
+
+if (empty ($type)) {
+    $type = 'article';
+}
+
+if ($type == 'article') {
+    // check if they have access to this story
+    $sid = addslashes ($id);
+    $result = DB_query("SELECT trackbackcode FROM {$_TABLES['stories']} WHERE (sid = '$sid') AND (date <= NOW()) AND (draft_flag = 0)" . COM_getPermSql ('AND') . COM_getTopicSql ('AND'));
+    if (DB_numRows ($result) == 1) {
+        $A = DB_fetchArray ($result);
+        if ($A['trackbackcode'] == 0) {
+            TRB_handleTrackbackPing ($id, $type);
+        } else {
+            TRB_sendTrackbackResponse (1, $TRB_ERROR['no_access']);
+        }
+    } else {
+        TRB_sendTrackbackResponse (1, $TRB_ERROR['no_access']);
+    }
+} else if (PLG_handlePingComment ($type, $id, 'acceptByID') === true) {
+    TRB_handleTrackbackPing ($id, $type);
+} else {
+    TRB_sendTrackbackResponse (1, $TRB_ERROR['no_access']);
+}
+
+// no output here
+
+?>
diff -ruN 1.3.11sr1/usersettings.php 1.4.0sr5-1/usersettings.php
--- 1.3.11sr1/usersettings.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/usersettings.php	2006-08-08 02:53:59.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | usersettings.php                                                          |
 // |                                                                           |
 // | Geeklog user settings page.                                               |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: usersettings.php,v 1.109 2004/12/15 15:08:21 dhaun Exp $
+// $Id: usersettings.php,v 1.123.2.1 2006/03/04 19:45:37 dhaun Exp $
 
 require_once ('lib-common.php');
 require_once ($_CONF['path_system'] . 'lib-user.php');
@@ -50,7 +50,7 @@
 * Shows the user's current settings
 *
 */
-function edituser() 
+function edituser()
 {
     global $_CONF, $_TABLES, $_USER, $LANG04;
 
@@ -71,6 +71,10 @@
     $preferences->set_var ('lang_username_text', $LANG04[87]);
     $preferences->set_var ('lang_password', $LANG04[4]);
     $preferences->set_var ('lang_password_text', $LANG04[35]);
+    $preferences->set_var ('lang_password_conf', $LANG04[108]);
+    $preferences->set_var ('lang_password_text_conf', $LANG04[109]);
+    $preferences->set_var ('lang_old_password', $LANG04[110]);
+    $preferences->set_var ('lang_old_password_text', $LANG04[111]);
     $preferences->set_var ('lang_cooktime', $LANG04[68]);
     $preferences->set_var ('lang_cooktime_text', $LANG04[69]);
     $preferences->set_var ('lang_email', $LANG04[5]);
@@ -120,33 +124,21 @@
     $preferences->set_var ('email_value', htmlspecialchars ($A['email']));
     $preferences->set_var ('homepage_value',
                            htmlspecialchars (COM_killJS ($A['homepage'])));
-    $preferences->set_var ('location_value', htmlspecialchars ($A['location']));
+    $preferences->set_var ('location_value',
+                           htmlspecialchars (strip_tags ($A['location'])));
     $preferences->set_var ('signature_value', htmlspecialchars ($A['sig']));
 
     if ($_CONF['allow_user_photo'] == 1) {
-        $stdLoc = true;
-        if (!strstr ($_CONF['path_images'], $_CONF['path_html'])) {
-            $stdLoc = false;
-        }
-        $photo = '';
-        if (!empty ($A['photo'])) {
-            if (!empty ($A['fullname'])) {
-                $alt = '[' . $A['fullname'] . ']';
-            } else {
-                $alt = '[' . $A['username'] . ']';
-            }
-            if ($stdLoc) {
-                $imgpath = substr ($_CONF['path_images'],
-                                   strlen ($_CONF['path_html']));
-                $photo .= '<br><img src="' . $_CONF['site_url'] . '/' . $imgpath
-                    . 'userphotos/' . $A['photo'] . '" alt="' . $alt . '">' . LB
-                    . '<br>' . $LANG04[79]
-                    . '&nbsp;<input type="checkbox" name="delete_photo">' . LB;
-            } else {
-                $photo .= '<br><img src="' . $_CONF['site_url']
-                   . '/getimage.php?mode=userphotos&amp;image=' . $A['photo']
-                   . '" alt="' . $alt . '">' . LB . '<br>' . $LANG04[79]
-                   . '&nbsp;<input type="checkbox" name="delete_photo">' . LB;
+        $photo = USER_getPhoto ($_USER['uid'], $A['photo'], $A['email'], -1);
+        if (empty ($photo)) {
+            $preferences->set_var ('display_photo', '');
+        } else {
+            if (empty ($A['photo'])) { // external avatar
+                $photo = '<br>' . $photo;
+            } else { // uploaded photo - add delete option
+                $photo = '<br>' . $photo . '<br>' . $LANG04[79]
+                       . '&nbsp;<input type="checkbox" name="delete_photo">'
+                       . LB;
             }
             $preferences->set_var ('display_photo', $photo);
         }
@@ -183,7 +175,7 @@
     // Call custom account form and edit function if enabled and exists
     if ($_CONF['custom_registration'] AND (function_exists(custom_useredit))) {
         $preferences->set_var ('customfields', custom_useredit($_USER['uid']) );
-    } 
+    }
 
     PLG_profileVariablesEdit ($_USER['uid'], $preferences);
 
@@ -294,7 +286,7 @@
 * Displays user preferences
 *
 */
-function editpreferences() 
+function editpreferences()
 {
     global $_TABLES, $_CONF, $LANG04, $_USER, $_GROUPS;
 
@@ -459,7 +451,7 @@
             $selection .= '<option value="' . $theme . '"';
             if ($usertheme == $theme) {
                 $selection .= ' selected="selected"';
-            } 
+            }
             $words = explode ('_', $theme);
             $bwords = array ();
             foreach ($words as $th) {
@@ -528,6 +520,7 @@
         $nrows = DB_numRows($query );
         $authors = explode(" ",$A['aids']);
 
+        $selauthors = '';
         for( $i = 0; $i < $nrows; $i++ ) {
             $B = DB_fetchArray($query);
             $selauthors .= '<option value="' . $B['uid'] . '"';
@@ -583,7 +576,7 @@
     if (!empty ($permissions)) {
         $whereblock .= $permissions . ' AND ';
     }
-    $whereblock .= "((type != 'layout' AND type != 'gldefault' AND is_enabled = 1) OR (type = 'gldefault' AND is_enabled = 1 AND name IN ('whats_new_block','poll_block','events_block','older_stories'))) ORDER BY onleft desc,blockorder,title";
+    $whereblock .= "((type != 'layout' AND type != 'gldefault' AND is_enabled = 1) OR (type = 'gldefault' AND is_enabled = 1 AND name IN ('whats_new_block','events_block','older_stories'))) ORDER BY onleft desc,blockorder,title";
     $preferences->set_var ('boxes_checklist', COM_checkList ($_TABLES['blocks'],
             'bid,title,type', $whereblock, $selectedblocks));
     $preferences->parse ('boxes_block', 'boxes', true);
@@ -774,9 +767,9 @@
 * @A        array       User's data
 *
 */
-function saveuser($A) 
+function saveuser($A)
 {
-    global $_CONF, $_TABLES, $_USER, $LANG24, $_US_VERBOSE;
+    global $_CONF, $_TABLES, $_USER, $LANG04, $LANG24, $_US_VERBOSE;
 
     if ($_US_VERBOSE) {
         COM_errorLog('**** Inside saveuser in usersettings.php ****', 1);
@@ -831,24 +824,46 @@
 
     // no need to filter the password as it's md5 encoded anyway
     if (!empty ($A['passwd'])) {
-        $passwd = md5 ($A['passwd']);
-        DB_change($_TABLES['users'], 'passwd', "$passwd", "uid", $_USER['uid']);
-        if ($A['cooktime'] > 0) {
-            $cooktime = $A['cooktime'];
-        } else {
-            $cooktime = -1000;
+            if (($A['passwd']==$A['passwd_conf']) 
+                AND (md5($A['old_passwd'])==$_USER['passwd'])) {
+                $passwd = md5 ($A['passwd']);
+                DB_change($_TABLES['users'], 'passwd', 
+                      "$passwd", "uid", $_USER['uid']);
+                if ($A['cooktime'] > 0) {
+                    $cooktime = $A['cooktime'];
+                } else {
+                    $cooktime = -1000;
+                }
+                setcookie ($_CONF['cookie_password'], $passwd, time() + $cooktime,
+                           $_CONF['cookie_path'], $_CONF['cookiedomain'],
+                           $_CONF['cookiesecure']);        
         }
-        setcookie ($_CONF['cookie_password'], $passwd, time() + $cooktime,
-                   $_CONF['cookie_path'], $_CONF['cookiedomain'],
-                   $_CONF['cookiesecure']);
+        elseif (md5($A['old_passwd'])!=$_USER['passwd']) {
+                return COM_refresh ($_CONF['site_url']
+                        . '/usersettings.php?mode=edit&msg=68');
+        }
+        elseif ($A['passwd']!=$A['passwd_conf']) {
+                return COM_refresh ($_CONF['site_url']
+                        . '/usersettings.php?mode=edit&msg=67');
+        }
+    }
+
+    // a quick spam check with the unfiltered field contents
+    $profile = '<h1>' . $LANG04[1] . ' ' . $_USER['username'] . '</h1>'
+             . '<p><a href="' . $A['homepage'] . '">' . $A['homepage']
+             . '</a><br>' . $A['location'] . '<br>' . $A['sig'] . '<br>'
+             . $A['about'] . '<br>' . $A['pgpkey'] . '</p>';
+    $result = PLG_checkforSpam ($profile, $_CONF['spamx']);
+    if ($result > 0) {
+        COM_displayMessageAndAbort ($result, 'spamx', 403, 'Forbidden');
     }
 
     $A['email'] = COM_applyFilter ($A['email']);
     $A['homepage'] = COM_applyFilter ($A['homepage']);
-    $A['location'] = COM_applyFilter ($A['location']);
 
     // basic filtering only
     $A['fullname'] = strip_tags (COM_stripslashes ($A['fullname']));
+    $A['location'] = strip_tags (COM_stripslashes ($A['location']));
     $A['sig'] = strip_tags (COM_stripslashes ($A['sig']));
     $A['about'] = strip_tags (COM_stripslashes ($A['about']));
     $A['pgpkey'] = strip_tags (COM_stripslashes ($A['pgpkey']));
@@ -872,11 +887,15 @@
         } else {
             setcookie ($_CONF['cookie_name'], $_USER['uid'],
                        time() + $A['cooktime'], $_CONF['cookie_path'],
-                       $_CONF['cookiedomain'], $_CONF['cookiesecure']);   
+                       $_CONF['cookiedomain'], $_CONF['cookiesecure']);
         }
 
         if ($_CONF['allow_user_photo'] == 1) {
-            $filename = handlePhotoUpload ($A['delete_photo']);
+            $delete_photo = '';
+            if (isset ($A['delete_photo'])) {
+                $delete_photo = $A['delete_photo'];
+            }
+            $filename = handlePhotoUpload ($delete_photo);
         }
 
         if (!empty ($A['homepage'])) {
@@ -890,11 +909,12 @@
                     $A['homepage'] = 'http:' . substr ($A['homepage'], $pos + 1);
                 }
             }
-            $A['homepage'] = addslashes ($A['homepage']); 
+            $A['homepage'] = addslashes ($A['homepage']);
         }
 
         $A['fullname'] = addslashes ($A['fullname']);
         $A['email'] = addslashes ($A['email']);
+        $A['location'] = addslashes ($A['location']);
         $A['sig'] = addslashes ($A['sig']);
         $A['about'] = addslashes ($A['about']);
         $A['pgpkey'] = addslashes ($A['pgpkey']);
@@ -930,7 +950,7 @@
 * @A        array       User's data to save
 *
 */
-function savepreferences($A) 
+function savepreferences($A)
 {
     global $_CONF, $_TABLES, $_USER;
 
@@ -1004,7 +1024,7 @@
                 }
             }
         }
-    } 
+    }
 
     $etids = '';
     if (sizeof ($ETIDS) > 0) {
@@ -1084,9 +1104,12 @@
     switch ($mode) {
     case 'edit':
         $display .= COM_siteHeader ('menu', $LANG04[16]);
-        $msg = COM_applyFilter ($_GET['msg'], true);
-        if ($msg > 0) {
-            $display .= COM_showMessage ($msg);
+        $msg = 0;
+        if (isset ($_GET['msg'])) {
+            $msg = COM_applyFilter ($_GET['msg'], true);
+            if ($msg > 0) {
+                $display .= COM_showMessage ($msg);
+            }
         }
         $display .= edituser();
         $display .= COM_siteFooter();
@@ -1137,9 +1160,12 @@
 
     default: // also if $mode == 'preferences' or 'comments'
         $display .= COM_siteHeader ('menu', $LANG01[49]);
-        $msg = COM_applyFilter ($_GET['msg'], true);
-        if ($msg > 0) {
-            $display .= COM_showMessage ($msg);
+        $msg = 0;
+        if (isset ($_GET['msg'])) {
+            $msg = COM_applyFilter ($_GET['msg'], true);
+            if ($msg > 0) {
+                $display .= COM_showMessage ($msg);
+            }
         }
         $display .= editpreferences();
         $display .= COM_siteFooter();
diff -ruN 1.3.11sr1/users.php 1.4.0sr5-1/users.php
--- 1.3.11sr1/users.php	2004-12-31 10:03:30.000000000 -0600
+++ 1.4.0sr5-1/users.php	2006-08-08 02:53:59.000000000 -0500
@@ -2,18 +2,18 @@
 
 /* Reminder: always indent with 4 spaces (no tabs). */
 // +---------------------------------------------------------------------------+
-// | Geeklog 1.3                                                               |
+// | Geeklog 1.4                                                               |
 // +---------------------------------------------------------------------------+
 // | users.php                                                                 |
 // |                                                                           |
 // | User authentication module.                                               |
 // +---------------------------------------------------------------------------+
-// | Copyright (C) 2000-2004 by the following authors:                         |
+// | Copyright (C) 2000-2006 by the following authors:                         |
 // |                                                                           |
-// | Authors: Tony Bibbs        - tony@tonybibbs.com                           |
-// |          Mark Limburg      - mlimburg@users.sourceforge.net               |
-// |          Jason Whittenburg - jwhitten@securitygeeks.com                   |
-// |          Dirk Haun         - dirk@haun-online.de                          |
+// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
+// |          Mark Limburg      - mlimburg AT users DOT sourceforge DOT net    |
+// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
+// |          Dirk Haun         - dirk AT haun-online DOT de                   |
 // +---------------------------------------------------------------------------+
 // |                                                                           |
 // | This program is free software; you can redistribute it and/or             |
@@ -32,7 +32,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: users.php,v 1.93 2004/10/23 10:23:01 dhaun Exp $
+// $Id: users.php,v 1.128.2.1 2006/03/04 19:45:37 dhaun Exp $
 
 /**
 * This file handles user authentication
@@ -55,7 +55,7 @@
 // to the script.  This will sometimes cause errors but it will allow you to see
 // the data being passed in a POST operation
 
-// echo COM_debug($HTTP_POST_VARS);
+// echo COM_debug($_POST);
 
 /**
 * Shows a profile for a user
@@ -69,10 +69,13 @@
 */
 function userprofile ($user, $msg = 0)
 {
-    global $_CONF, $_TABLES, $_USER, $LANG01, $LANG04, $LANG_LOGIN;
+    global $_CONF, $_TABLES, $_USER, $LANG01, $LANG04, $LANG09, $LANG_LOGIN;
+
+    $retval = '';
 
     if (empty ($_USER['username']) &&
         (($_CONF['loginrequired'] == 1) || ($_CONF['profileloginrequired'] == 1))) {
+        $retval .= COM_siteHeader ('menu');
         $retval .= COM_startBlock ($LANG_LOGIN[1], '',
                            COM_getBlockTemplate ('_msg_block', 'header'));
         $login = new Template($_CONF['path_layout'] . 'submit');
@@ -84,18 +87,17 @@
         $login->parse ('output', 'login');
         $retval .= $login->finish ($login->get_var('output'));
         $retval .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
- 
+        $retval .= COM_siteFooter ();
+
         return $retval;
     }
 
-    $retval = '';
-
-    $result = DB_query("SELECT username,fullname,regdate,homepage,about,location,pgpkey,photo FROM {$_TABLES['userinfo']},{$_TABLES["users"]} WHERE {$_TABLES['userinfo']}.uid = {$_TABLES['users']}.uid AND {$_TABLES['users']}.uid = $user");
-    $nrows = DB_numRows($result);
+    $result = DB_query ("SELECT username,fullname,regdate,homepage,about,location,pgpkey,photo,email FROM {$_TABLES['userinfo']},{$_TABLES['users']} WHERE {$_TABLES['userinfo']}.uid = {$_TABLES['users']}.uid AND {$_TABLES['users']}.uid = $user");
+    $nrows = DB_numRows ($result);
     if ($nrows == 0) { // no such user
         return COM_refresh ($_CONF['site_url'] . '/index.php');
     }
-    $A = DB_fetchArray($result);
+    $A = DB_fetchArray ($result);
 
     $retval .= COM_siteHeader ('menu', $LANG04[1] . ' ' . $A['username']);
     if ($msg > 0) {
@@ -103,53 +105,50 @@
     }
 
     // format date/time to user preference
-    $curtime = COM_getUserDateTimeFormat($A["regdate"]);
+    $curtime = COM_getUserDateTimeFormat ($A['regdate']);
     $A['regdate'] = $curtime[0];
 
-    $user_templates = new Template($_CONF['path_layout'] . 'users');
-    $user_templates->set_file(array('profile'=>'profile.thtml','row'=>'commentrow.thtml','strow'=>'storyrow.thtml'));
-    $user_templates->set_var('site_url', $_CONF['site_url']);
-    $user_templates->set_var('start_block_userprofile', COM_startBlock($LANG04[1] . ' ' . $A['username']));
-    $user_templates->set_var('end_block', COM_endBlock());
-    $user_templates->set_var('lang_username', $LANG04[2]);
-    $user_templates->set_var('username', $A['username']);
-    if (!empty($A['photo']) AND $_CONF['allow_user_photo'] == 1) {
-        if (strstr ($_CONF['path_images'], $_CONF['path_html'])) {
-            $imgpath = substr ($_CONF['path_images'],
-                               strlen ($_CONF['path_html']));
-            $user_templates->set_var ('user_photo', '<img src="'
-                . $_CONF['site_url'] . '/' . $imgpath . 'userphotos/'
-                . $A['photo'] . '" alt="">');
-        } else {
-            $user_templates->set_var ('user_photo', '<img src="' . $_CONF['site_url'] . '/getimage.php?mode=userphotos&amp;image=' . $A['photo'] . '" alt="">');
-        }
-    } else {
-        $user_templates->set_var('user_photo','');
-    }
-    $user_templates->set_var('user_fullname', $A['fullname']);
-    $user_templates->set_var('lang_membersince', $LANG04[67]);
-    $user_templates->set_var('user_regdate', $A['regdate']);
-    $user_templates->set_var('lang_email', $LANG04[5]);
-    $user_templates->set_var('user_id', $user);
-    $user_templates->set_var('lang_sendemail', $LANG04[81]);
-    $user_templates->set_var('lang_homepage', $LANG04[6]);
-    $user_templates->set_var('user_homepage', COM_killJS ($A['homepage']));
-    $user_templates->set_var('lang_location', $LANG04[106]);
-    $user_templates->set_var('user_location', $A['location']);
-    $user_templates->set_var('lang_bio', $LANG04[7]);
-    $user_templates->set_var('user_bio', nl2br(stripslashes($A['about']))); 
-    $user_templates->set_var('lang_pgpkey', $LANG04[8]);
-    $user_templates->set_var('user_pgp', nl2br($A['pgpkey']));
-    $user_templates->set_var('start_block_last10stories',
-            COM_startBlock($LANG04[82] . ' ' . $A['username']));
-    $user_templates->set_var('start_block_last10comments',
+    $user_templates = new Template ($_CONF['path_layout'] . 'users');
+    $user_templates->set_file (array ('profile' => 'profile.thtml',
+                                      'row'     => 'commentrow.thtml',
+                                      'strow'   => 'storyrow.thtml'));
+    $user_templates->set_var ('site_url', $_CONF['site_url']);
+    $user_templates->set_var ('start_block_userprofile',
+            COM_startBlock ($LANG04[1] . ' ' . $A['username']));
+    $user_templates->set_var ('end_block', COM_endBlock ());
+    $user_templates->set_var ('lang_username', $LANG04[2]);
+    $user_templates->set_var ('username', $A['username']);
+
+    $photo = USER_getPhoto ($user, $A['photo'], $A['email'], -1);
+    $user_templates->set_var ('user_photo', $photo);
+
+    $user_templates->set_var ('user_fullname', $A['fullname']);
+    $user_templates->set_var ('lang_membersince', $LANG04[67]);
+    $user_templates->set_var ('user_regdate', $A['regdate']);
+    $user_templates->set_var ('lang_email', $LANG04[5]);
+    $user_templates->set_var ('user_id', $user);
+    $user_templates->set_var ('lang_sendemail', $LANG04[81]);
+    $user_templates->set_var ('lang_homepage', $LANG04[6]);
+    $user_templates->set_var ('user_homepage', COM_killJS ($A['homepage']));
+    $user_templates->set_var ('lang_location', $LANG04[106]);
+    $user_templates->set_var ('user_location', strip_tags ($A['location']));
+    $user_templates->set_var ('lang_bio', $LANG04[7]);
+    $user_templates->set_var ('user_bio', nl2br (stripslashes ($A['about'])));
+    $user_templates->set_var ('lang_pgpkey', $LANG04[8]);
+    $user_templates->set_var ('user_pgp', nl2br ($A['pgpkey']));
+    $user_templates->set_var ('start_block_last10stories',
+            COM_startBlock ($LANG04[82] . ' ' . $A['username']));
+    $user_templates->set_var ('start_block_last10comments',
             COM_startBlock($LANG04[10] . ' ' . $A['username']));
-    $user_templates->set_var('start_block_postingstats',
-            COM_startBlock($LANG04[83] . ' ' . $A['username']));
+    $user_templates->set_var ('start_block_postingstats',
+            COM_startBlock ($LANG04[83] . ' ' . $A['username']));
+    $user_templates->set_var ('lang_title', $LANG09[16]);
+    $user_templates->set_var ('lang_date', $LANG09[17]);
+
     // for alternative layouts: use these as headlines instead of block titles
-    $user_templates->set_var('headline_last10stories', $LANG04[82]);
-    $user_templates->set_var('headline_last10comments', $LANG04[10]);
-    $user_templates->set_var('headline_postingstats', $LANG04[83]);
+    $user_templates->set_var ('headline_last10stories', $LANG04[82]);
+    $user_templates->set_var ('headline_last10comments', $LANG04[10]);
+    $user_templates->set_var ('headline_postingstats', $LANG04[83]);
 
     $result = DB_query ("SELECT tid FROM {$_TABLES['topics']}"
             . COM_getPermSQL ());
@@ -165,29 +164,32 @@
     if (sizeof ($tids) > 0) {
         $sql = "SELECT sid,title,UNIX_TIMESTAMP(date) AS unixdate FROM {$_TABLES['stories']} WHERE (uid = $user) AND (draft_flag = 0) AND (date <= NOW()) AND (tid IN ($topics))" . COM_getPermSQL ('AND');
         $sql .= " ORDER BY unixdate DESC LIMIT 10";
-        $result = DB_query($sql);
-        $nrows = DB_numRows($result);
+        $result = DB_query ($sql);
+        $nrows = DB_numRows ($result);
     } else {
         $nrows = 0;
     }
     if ($nrows > 0) {
-        for ($i = 1; $i <= $nrows; $i++) {
-            $C = DB_fetchArray($result);
-            $user_templates->set_var('row_number', $i . '.');
+        for ($i = 0; $i < $nrows; $i++) {
+            $C = DB_fetchArray ($result);
+            $user_templates->set_var ('cssid', ($i % 2) + 1);
+            $user_templates->set_var ('row_number', ($i + 1) . '.');
             $articleUrl = COM_buildUrl ($_CONF['site_url']
                                         . '/article.php?story=' . $C['sid']);
             $user_templates->set_var ('article_url', $articleUrl);
             $user_templates->set_var ('story_begin_href',
                                       '<a href="' . $articleUrl . '">');
             $C['title'] = str_replace ('$', '&#36;', $C['title']);
-            $user_templates->set_var('story_title', stripslashes($C['title']));
-            $user_templates->set_var('story_end_href', '</a>');
-            $storytime = COM_getUserDateTimeFormat($C['unixdate']);
-            $user_templates->set_var('story_date', $storytime[0]);
-            $user_templates->parse('story_row','strow',true);
+            $user_templates->set_var ('story_title',
+                                      stripslashes ($C['title']));
+            $user_templates->set_var ('story_end_href', '</a>');
+            $storytime = COM_getUserDateTimeFormat ($C['unixdate']);
+            $user_templates->set_var ('story_date', $storytime[0]);
+            $user_templates->parse ('story_row', 'strow', true);
         }
     } else {
-        $user_templates->set_var('story_row','<tr><td>' . $LANG01[37] . '</td></tr>');
+        $user_templates->set_var ('story_row',
+                                  '<tr><td>' . $LANG01[37] . '</td></tr>');
     }
 
     // list of last 10 comments by this user
@@ -203,20 +205,10 @@
         }
     }
 
-    // add all polls the current visitor has access to
-    $sql = "SELECT qid FROM {$_TABLES['pollquestions']}" . COM_getPermSQL ();
-    $result = DB_query($sql);
-    $numqids = DB_numRows($result);
-
-    for ($i = 1; $i <= $numqids; $i++) {
-        $Q = DB_fetchArray ($result);
-        $sidArray[] = $Q['qid'];
-    }
-
     $sidList = implode("', '",$sidArray);
     $sidList = "'$sidList'";
 
-    // then, find all comments by the user in those stories and polls
+    // then, find all comments by the user in those stories
     $sql = "SELECT sid,title,cid,UNIX_TIMESTAMP(date) AS unixdate FROM {$_TABLES['comments']} WHERE (uid = $user)";
 
     // SQL NOTE:  Using a HAVING clause is usually faster than a where if the
@@ -232,18 +224,20 @@
     $result = DB_query($sql);
     $nrows = DB_numRows($result);
     if ($nrows > 0) {
-        for ($i = 1; $i <= $nrows; $i++) {
-            $C = DB_fetchArray($result);
-            $user_templates->set_var('row_number', $i . '.');
+        for ($i = 0; $i < $nrows; $i++) {
+            $C = DB_fetchArray ($result);
+            $user_templates->set_var ('cssid', ($i % 2) + 1);
+            $user_templates->set_var ('row_number', ($i + 1) . '.');
             $user_templates->set_var ('comment_begin_href',
                     '<a href="' . $_CONF['site_url'] .
                     '/comment.php?mode=view&amp;cid=' . $C['cid']. '">');
-            $C['title'] = str_replace('$','&#36;',$C['title']);
-            $user_templates->set_var('comment_title', stripslashes($C['title']));
-            $user_templates->set_var('comment_end_href', '</a>');
-            $commenttime = COM_getUserDateTimeFormat($C['unixdate']);
-            $user_templates->set_var('comment_date', $commenttime[0]); 
-            $user_templates->parse('comment_row','row',true);
+            $C['title'] = str_replace ('$', '&#36;', $C['title']);
+            $user_templates->set_var ('comment_title',
+                                      stripslashes ($C['title']));
+            $user_templates->set_var ('comment_end_href', '</a>');
+            $commenttime = COM_getUserDateTimeFormat ($C['unixdate']);
+            $user_templates->set_var ('comment_date', $commenttime[0]);
+            $user_templates->parse ('comment_row', 'row', true);
         }
     } else {
         $user_templates->set_var('comment_row','<tr><td>' . $LANG01[29] . '</td></tr>');
@@ -251,28 +245,29 @@
 
     // posting stats for this user
     $user_templates->set_var ('lang_number_stories', $LANG04[84]);
-    $sql = "SELECT count(*) AS count FROM {$_TABLES['stories']} WHERE (uid = $user) AND (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND');
+    $sql = "SELECT COUNT(*) AS count FROM {$_TABLES['stories']} WHERE (uid = $user) AND (draft_flag = 0) AND (date <= NOW())" . COM_getPermSQL ('AND');
     $result = DB_query($sql);
     $N = DB_fetchArray ($result);
-    $user_templates->set_var('number_stories', $N['count']);
+    $user_templates->set_var ('number_stories', COM_numberFormat ($N['count']));
     $user_templates->set_var ('lang_number_comments', $LANG04[85]);
-    $sql = "SELECT count(*) AS count FROM {$_TABLES['comments']} WHERE (uid = $user)";
+    $sql = "SELECT COUNT(*) AS count FROM {$_TABLES['comments']} WHERE (uid = $user)";
     if (!empty ($sidList)) {
         $sql .= " AND (sid in ($sidList))";
     }
-    $result = DB_query($sql);
+    $result = DB_query ($sql);
     $N = DB_fetchArray ($result);
-    $user_templates->set_var('number_comments', $N['count']);
-    $user_templates->set_var ('lang_all_postings_by', $LANG04[86] . ' ' . $A['username']);
+    $user_templates->set_var ('number_comments', COM_numberFormat($N['count']));
+    $user_templates->set_var ('lang_all_postings_by',
+                              $LANG04[86] . ' ' . $A['username']);
 
     // Call custom registration function if enabled and exists
-    if ($_CONF['custom_registration'] AND (function_exists(custom_userdisplay)) ) {
-        $user_templates->set_var ('customfields', custom_userdisplay($user) );
+    if ($_CONF['custom_registration'] && function_exists ('custom_userdisplay') ) {
+        $user_templates->set_var ('customfields', custom_userdisplay ($user));
     }
     PLG_profileVariablesDisplay ($user, $user_templates);
 
-    $user_templates->parse('output', 'profile');
-    $retval .= $user_templates->finish($user_templates->get_var('output'));	
+    $user_templates->parse ('output', 'profile');
+    $retval .= $user_templates->finish ($user_templates->get_var ('output'));
 
     $retval .= PLG_profileBlocksDisplay ($user);
     $retval .= COM_siteFooter ();
@@ -290,27 +285,29 @@
 * @return   string      Optionally returns the HTML for the default form if the user info can't be found
 *
 */
-function emailpassword ($username, $msg = 0) 
+function emailpassword ($username, $msg = 0)
 {
     global $_CONF, $_TABLES, $LANG04;
 
     $retval = '';
 
     $username = addslashes ($username);
-    $result = DB_query ("SELECT uid,email FROM {$_TABLES['users']} WHERE username = '$username'");
+    // don't retrieve any remote users!
+    $result = DB_query ("SELECT uid,email,status FROM {$_TABLES['users']} WHERE username = '$username' AND ((remoteservice is null) OR (remoteservice = ''))");
     $nrows = DB_numRows ($result);
     if ($nrows == 1) {
         $A = DB_fetchArray ($result);
-        if (($_CONF['usersubmission'] == 1) && USER_isQueued ($A['uid'])) {
+        if (($_CONF['usersubmission'] == 1) && ($A['status'] == USER_ACCOUNT_AWAITING_APPROVAL))
+        {
             return COM_refresh ($_CONF['site_url'] . '/index.php?msg=48');
         }
 
-        USER_createAndSendPassword ($username, $A['email']);
+        USER_createAndSendPassword ($username, $A['email'], $A['uid']);
 
         if ($msg) {
             $retval = COM_refresh ("{$_CONF['site_url']}/index.php?msg=$msg");
         } else {
-            $retval = COM_refresh ("{$_CONF['site_url']}/index.php");
+            $retval = COM_refresh ("{$_CONF['site_url']}/index.php?msg=1");
         }
     } else {
         $retval = COM_siteHeader ('menu', $LANG04[17])
@@ -333,21 +330,22 @@
 {
     global $_CONF, $_TABLES, $LANG04;
 
-    $result = DB_query ("SELECT uid,email,passwd FROM {$_TABLES['users']} WHERE username = '$username'");
+    // no remote users!
+    $result = DB_query ("SELECT uid,email,passwd,status FROM {$_TABLES['users']} WHERE username = '$username' AND ((remoteservice IS NULL) OR (remoteservice=''))");
     $nrows = DB_numRows ($result);
     if ($nrows == 1) {
         $A = DB_fetchArray ($result);
-        if (($_CONF['usersubmission'] == 1) && ($A['passwd'] == md5 (''))) {
+        if (($_CONF['usersubmission'] == 1) && ($A['status'] == USER_ACCOUNT_AWAITING_APPROVAL)) {
             return COM_refresh ($_CONF['site_url'] . '/index.php?msg=48');
         }
         $reqid = substr (md5 (uniqid (rand (), 1)), 1, 16);
         DB_change ($_TABLES['users'], 'pwrequestid', "$reqid",
-                   'username', $username);
+                   'uid', $A['uid']);
 
         $mailtext = sprintf ($LANG04[88], $username);
         $mailtext .= $_CONF['site_url'] . '/users.php?mode=newpwd&uid=' . $A['uid'] . '&rid=' . $reqid . "\n\n";
         $mailtext .= $LANG04[89];
-        $mailtext .= "{$_CONF["site_name"]}\n";
+        $mailtext .= "{$_CONF['site_name']}\n";
         $mailtext .= "{$_CONF['site_url']}\n";
 
         $subject = $_CONF['site_name'] . ': ' . $LANG04[16];
@@ -392,6 +390,7 @@
     $pwform->set_var ('lang_explain', $LANG04[90]);
     $pwform->set_var ('lang_username', $LANG04[2]);
     $pwform->set_var ('lang_newpassword', $LANG04[4]);
+    $pwform->set_var ('lang_newpassword_conf', $LANG04[108]);
     $pwform->set_var ('lang_setnewpwd', $LANG04[91]);
 
     $retval = COM_startBlock ($LANG04[92]);
@@ -402,35 +401,6 @@
 }
 
 /**
-* Send an email notification when a new user registers with the site.
-*
-* @param username string      User name of the new user
-* @param email    string      Email address of the new user
-* @param uid      int         User id of the new user
-* @param queued   bool        true = user was added to user submission queue
-*
-*/
-function sendNotification ($username, $email, $uid, $queued = false)
-{
-    global $_CONF, $_TABLES, $LANG01, $LANG04, $LANG08, $LANG28, $LANG29;
-
-    $mailbody = "$LANG04[2]: $username\n"
-              . "$LANG04[5]: $email\n"
-              . "$LANG28[14]: " . strftime ($_CONF['date']) . "\n\n";
-    if ($queued) {
-        $mailbody .= "$LANG01[10] <{$_CONF['site_admin_url']}/moderation.php>\n\n";
-    } else {
-        $mailbody .= "$LANG29[4] <{$_CONF['site_url']}/users.php?mode=profile&uid={$uid}>\n\n";
-    }
-    $mailbody .= "\n------------------------------\n";
-    $mailbody .= "\n$LANG08[34]\n";
-    $mailbody .= "\n------------------------------\n";
-
-    $mailsubject = $_CONF['site_name'] . ' ' . $LANG29[40];
-    COM_mail ($_CONF['site_mail'], $mailsubject, $mailbody);
-}
-
-/**
 * Creates a user
 *
 * Creates a user with the give username and email address
@@ -440,7 +410,7 @@
 * @return   string      HTML for the form again if error occurs, otherwise nothing.
 *
 */
-function createuser($username,$email) 
+function createuser ($username, $email)
 {
     global $_CONF, $_TABLES, $LANG01, $LANG04;
 
@@ -454,21 +424,33 @@
         $ecount = DB_count ($_TABLES['users'], 'email', addslashes ($email));
 
         if ($ucount == 0 AND $ecount == 0) {
+
+            // For Geeklog, it would be okay to create this user now. But check
+            // with a custom userform first, if one exists.
+            if ($_CONF['custom_registration'] &&
+                    function_exists ('custom_usercheck')) {
+                $msg = custom_usercheck ($username, $email);
+                if (!empty ($msg)) {
+                    // no, it's not okay with the custom userform
+                    $retval = COM_siteHeader ('menu')
+                            . custom_userform ($msg)
+                            . COM_siteFooter ();
+
+                    return $retval;
+                }
+            }
+
             $uid = USER_createAccount ($username, $email);
 
-            $queueUser = USER_isQueued ($uid);
-            if ($queueUser) {
-                $msg = 48;
+            if (!$_CONF['usersubmission'] == 1)
+            {
+                $retval = emailpassword ($username, 1, $msg);
             } else {
-                emailpassword ($username, 1);
-                $msg = 1;
-            }
-            if (isset ($_CONF['notification']) &&
-                    in_array ('user', $_CONF['notification'])) {
-                sendNotification ($username, $email, $uid, $queueUser);
+                $retval = COM_refresh ($_CONF['site_url'] . '/index.php?msg=48');
             }
 
-            return COM_refresh($_CONF['site_url'] . '/index.php?msg=' . $msg);
+
+            return $retval;
         } else {
             $retval .= COM_siteHeader ('Menu');
             if ($_CONF['custom_registration'] &&
@@ -479,7 +461,9 @@
             }
             $retval .= COM_siteFooter ();
         }
-    } else {
+
+    } else { // invalid username or email address
+
         if (empty ($username)) {
             $msg = $LANG01[32]; // invalid username
         } else {
@@ -499,12 +483,12 @@
 
 /**
 * Shows the user login form after failed attempts to either login or access a page
-* requiring login. 
+* requiring login.
 *
 * @return   string      HTML for login form
 *
 */
-function loginform ($hide_forgotpw_link = false)
+function loginform ($hide_forgotpw_link = false, $statusmode=-1)
 {
     global $_CONF, $LANG04;
 
@@ -513,8 +497,22 @@
     $user_templates = new Template ($_CONF['path_layout'] . 'users');
     $user_templates->set_file('login', 'loginform.thtml');
     $user_templates->set_var('site_url', $_CONF['site_url']);
-    $user_templates->set_var('start_block_loginagain', COM_startBlock($LANG04[65]));
-    $user_templates->set_var('lang_message', $LANG04[66]);
+    if ($statusmode == 0) {
+        $user_templates->set_var('start_block_loginagain', COM_startBlock($LANG04[114]));
+        $user_templates->set_var('lang_message', $LANG04[115]);
+    } elseif ($statusmode == 2) {
+        $user_templates->set_var('start_block_loginagain', COM_startBlock($LANG04[116]));
+        $user_templates->set_var('lang_message', $LANG04[117]);
+    } else {
+        $user_templates->set_var('start_block_loginagain', COM_startBlock($LANG04[65]));
+        if ($_CONF['disable_new_user_registration']) {
+            $user_templates->set_var('lang_newreglink', '');
+        } else {
+            $user_templates->set_var('lang_newreglink', $LANG04[123]);
+        }
+        $user_templates->set_var('lang_message', $LANG04[66]);
+    }
+
     $user_templates->set_var('lang_username', $LANG04[2]);
     $user_templates->set_var('lang_password', $LANG04[4]);
     if ($hide_forgotpw_link) {
@@ -524,6 +522,30 @@
     }
     $user_templates->set_var('lang_login', $LANG04[80]);
     $user_templates->set_var('end_block', COM_endBlock());
+    if ($_CONF['remoteauthentication'] && !$_CONF['usersubmission']) {
+        /* Build select */
+        $select = '<select name="service"><option value="">' .
+                        $_CONF['site_name'] . '</option>';
+        if (is_dir($_CONF['path_system'].'classes/authentication/')) {
+
+            $folder = opendir( $_CONF['path_system'].'classes/authentication/' );
+            while (($filename = @readdir( $folder )) !== false) {
+                $strpos = strpos($filename, '.auth.class.php');
+                if ($strpos) {
+                    $service = substr($filename, 0, $strpos);
+                    $select .= '<option value="'.$service.'">'.$service.'</option>';
+                }
+            }
+        }
+        $select .= '</select>';
+        $user_templates->set_file('services', 'services.thtml');
+        $user_templates->set_var('lang_service', $LANG04[121]);
+        $user_templates->set_var('select_service', $select);
+        $user_templates->parse('output', 'services');
+        $user_templates->set_var('services', $user_templates->finish($user_templates->get_var('output')));
+    } else {
+        $user_templates->set_var('services', '');
+    }
     $user_templates->parse('output', 'login');
     $retval .= $user_templates->finish($user_templates->get_var('output'));
 
@@ -542,7 +564,7 @@
     global $LANG04, $_CONF;
 
     $retval = '';
-    
+
     if (!empty ($msg)) {
         $retval .= COM_startBlock ($LANG04[21], '',
                            COM_getBlockTemplate ('_msg_block', 'header'))
@@ -560,7 +582,7 @@
     $user_templates->set_var('lang_register', $LANG04[27]);
     $user_templates->set_var('end_block', COM_endBlock());
     $user_templates->parse('output', 'regform');
-    $retval .= $user_templates->finish($user_templates->get_var('output')); 
+    $retval .= $user_templates->finish($user_templates->get_var('output'));
 
     return $retval;
 }
@@ -624,14 +646,10 @@
 
 
 // MAIN
-if (isset ($HTTP_POST_VARS['mode'])) {
-    $mode = $HTTP_POST_VARS['mode'];
-}
-elseif (isset ($HTTP_GET_VARS['mode'])) {
-    $mode = $HTTP_GET_VARS['mode'];
-}
-else {
-    $mode = "";
+if (isset ($_REQUEST['mode'])) {
+    $mode = $_REQUEST['mode'];
+} else {
+    $mode = '';
 }
 
 $display = '';
@@ -645,15 +663,22 @@
     setcookie ($_CONF['cookie_session'], '', time() - 10000,
                $_CONF['cookie_path'], $_CONF['cookiedomain'],
                $_CONF['cookiesecure']);
-    setcookie ($_CONF['cookie_name'], '', time() - 10000, $_CONF['cookie_path'],
-               $_CONF['cookiedomain'], $_CONF['cookiesecure']);
+    setcookie ($_CONF['cookie_password'], '', time() - 10000,
+               $_CONF['cookie_path'], $_CONF['cookiedomain'],
+               $_CONF['cookiesecure']);
+    setcookie ($_CONF['cookie_name'], '', time() - 10000,
+               $_CONF['cookie_path'], $_CONF['cookiedomain'],
+               $_CONF['cookiesecure']);
     $display = COM_refresh($_CONF['site_url'] . '/index.php?msg=8');
     break;
 
 case 'profile':
-    $uid = COM_applyFilter ($HTTP_GET_VARS['uid'], true);
+    $uid = COM_applyFilter ($_GET['uid'], true);
     if (is_numeric ($uid) && ($uid > 0)) {
-        $msg = COM_applyFilter ($HTTP_GET_VARS['msg'], true);
+        $msg = 0;
+        if (isset ($_GET['msg'])) {
+            $msg = COM_applyFilter ($_GET['msg'], true);
+        }
         $display .= userprofile ($uid, $msg);
     } else {
         $display .= COM_refresh ($_CONF['site_url'] . '/index.php');
@@ -661,7 +686,7 @@
     break;
 
 case 'user':
-    $username = COM_applyFilter ($HTTP_GET_VARS['username']);
+    $username = COM_applyFilter ($_GET['username']);
     if (!empty ($username)) {
         $username = addslashes ($username);
         $uid = DB_getItem ($_TABLES['users'], 'uid', "username = '$username'");
@@ -676,8 +701,17 @@
     break;
 
 case 'create':
-    $display .= createuser (COM_applyFilter ($HTTP_POST_VARS['username']),
-                            COM_applyFilter ($HTTP_POST_VARS['email']));
+    if ($_CONF['disable_new_user_registration']) {
+        $display .= COM_siteHeader ('menu');
+        $display .= COM_startBlock ($LANG04[22], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'))
+                 . $LANG04[122]
+                 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
+        $display .= COM_siteFooter ();
+    } else {
+        $display .= createuser (COM_applyFilter ($_POST['username']),
+                                COM_applyFilter ($_POST['email']));
+    }
     break;
 
 case 'getpassword':
@@ -699,8 +733,8 @@
     break;
 
 case 'newpwd':
-    $uid = COM_applyFilter ($HTTP_GET_VARS['uid'], true);
-    $reqid = COM_applyFilter ($HTTP_GET_VARS['rid']);
+    $uid = COM_applyFilter ($_GET['uid'], true);
+    $reqid = COM_applyFilter ($_GET['rid']);
     if (!empty ($uid) && is_numeric ($uid) && ($uid > 0) &&
             !empty ($reqid) && (strlen ($reqid) == 16)) {
         $valid = DB_count ($_TABLES['users'], array ('uid', 'pwrequestid'),
@@ -722,24 +756,25 @@
     break;
 
 case 'setnewpwd':
-    if (empty ($HTTP_POST_VARS['passwd'])) {
+    if ( (empty ($_POST['passwd']))
+            or ($_POST['passwd'] != $_POST['passwd_conf']) ) {
         $display = COM_refresh ($_CONF['site_url']
-                 . '/users.php?mode=newpwd&uid=' . $HTTP_POST_VARS['uid']
-                 . '&rid=' . $HTTP_POST_VARS['rid']);
+                 . '/users.php?mode=newpwd&uid=' . $_POST['uid']
+                 . '&rid=' . $_POST['rid']);
     } else {
-        $uid = COM_applyFilter ($HTTP_POST_VARS['uid'], true);
-        $reqid = COM_applyFilter ($HTTP_POST_VARS['rid']);
+        $uid = COM_applyFilter ($_POST['uid'], true);
+        $reqid = COM_applyFilter ($_POST['rid']);
         if (!empty ($uid) && is_numeric ($uid) && ($uid > 0) &&
                 !empty ($reqid) && (strlen ($reqid) == 16)) {
             $valid = DB_count ($_TABLES['users'], array ('uid', 'pwrequestid'),
                                array ($uid, $reqid));
             if ($valid == 1) {
-                $passwd = md5 ($HTTP_POST_VARS['passwd']);
+                $passwd = md5 ($_POST['passwd']);
                 DB_change ($_TABLES['users'], 'passwd', "$passwd",
                            "uid", $uid);
                 DB_delete ($_TABLES['sessions'], 'uid', $uid);
                 DB_change ($_TABLES['users'], 'pwrequestid', "NULL",
-                           'username', $username);
+                           'uid', $uid);
                 $display = COM_refresh ($_CONF['site_url'] . '/users.php?msg=53');
             } else { // request invalid or expired
                 $display .= COM_siteHeader ('menu');
@@ -768,11 +803,11 @@
                  . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
                  . COM_siteFooter ();
     } else {
-        $username = COM_applyFilter ($HTTP_POST_VARS['username']);
-        $email = COM_applyFilter ($HTTP_POST_VARS['email']);
+        $username = COM_applyFilter ($_POST['username']);
+        $email = COM_applyFilter ($_POST['email']);
         if (empty ($username) && !empty ($email)) {
             $username = DB_getItem ($_TABLES['users'], 'username',
-                                    "email = '$email'");
+                                    "email = '$email' AND ((remoteservice IS NULL) OR (remoteservice = ''))");
         }
         if (!empty ($username)) {
             $display .= requestpassword ($username, 55);
@@ -785,41 +820,65 @@
 
 case 'new':
     $display .= COM_siteHeader ('menu', $LANG04[22]);
-    // Call custom registration and account record create function
-    // if enabled and exists
-    if ($_CONF['custom_registration'] AND (function_exists('custom_userform'))) {
-        $display .= custom_userform('new');
+    if ($_CONF['disable_new_user_registration']) {
+        $display .= COM_startBlock ($LANG04[22], '',
+                            COM_getBlockTemplate ('_msg_block', 'header'))
+                 . $LANG04[122]
+                 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'));
     } else {
-        $display .= newuserform();
-    }	
+        // Call custom registration and account record create function
+        // if enabled and exists
+        if ($_CONF['custom_registration'] AND (function_exists('custom_userform'))) {
+            $display .= custom_userform();
+        } else {
+            $display .= newuserform();
+        }
+    }
     $display .= COM_siteFooter();
     break;
 
 default:
-    if (isset ($HTTP_POST_VARS['loginname'])) {
-        $loginname = COM_applyFilter ($HTTP_POST_VARS['loginname']);
-    } else {
-        $loginname = COM_applyFilter ($HTTP_GET_VARS['loginname']);
-    }
-    if (isset ($HTTP_POST_VARS['passwd'])) {
-        $passwd = COM_applyFilter ($HTTP_POST_VARS['passwd']);
-    }
-    if (!empty($loginname) && !empty($passwd)) {
-        $mypasswd = COM_getPassword($loginname);
-    } else {
-        srand((double)microtime()*1000000);
-        $mypasswd = rand();
-    }
-    if (!empty ($passwd) && !empty ($mypasswd) && ($mypasswd == md5($passwd))) {
-        DB_change($_TABLES['users'],'pwrequestid',"NULL",'username',$loginname);
-        $userdata = SESS_getUserData($loginname);
+    // prevent dictionary attacks on passwords
+    COM_clearSpeedlimit($_CONF['login_speedlimit'], 'login');
+    if ( COM_checkSpeedlimit('login', $_CONF['login_attempts']) > 0 ) {
+        $retval .= COM_siteHeader()
+            . COM_startBlock ($LANG12[26], '', COM_getBlockTemplate ('_msg_block', 'header'))
+            . $LANG04[112]
+            . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
+            . COM_siteFooter ();
+        echo $retval;
+        exit();
+    }
+
+    $loginname = COM_applyFilter ($_POST['loginname']);
+    if (isset ($_POST['passwd'])) {
+        $passwd = $_POST['passwd'];
+    }
+    $service = '';
+    if (isset ($_POST['service'])) {
+        $service = COM_applyFilter($_POST['service']);
+    }
+    $uid = '';
+    if (!empty($loginname) && !empty($passwd) && empty($service)) {
+        $status = SEC_authenticate($loginname, $passwd, $uid);
+    } elseif(( $_CONF['usersubmission'] == 0) && $_CONF['remoteauthentication'] && ($service != '')) {
+        /* Distributed Authentication */
+        //pass $loginname by ref so we can change it ;-)
+        $status = SEC_remoteAuthentication($loginname, $passwd, $service, $uid);
+    } else {
+        $status = -1;
+    }
+
+    if ($status == USER_ACCOUNT_ACTIVE) { // logged in AOK.
+        DB_change($_TABLES['users'],'pwrequestid',"NULL",'uid',$uid);
+        $userdata = SESS_getUserDataFromId($uid);
         $_USER=$userdata;
-        $sessid = SESS_newSession($_USER['uid'], $HTTP_SERVER_VARS['REMOTE_ADDR'], $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
+        $sessid = SESS_newSession($_USER['uid'], $_SERVER['REMOTE_ADDR'], $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
         SESS_setSessionCookie($sessid, $_CONF['session_cookie_timeout'], $_CONF['cookie_session'], $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
         PLG_loginUser ($_USER['uid']);
 
         // Now that we handled session cookies, handle longterm cookie
-        if (!isset($HTTP_COOKIE_VARS[$_CONF['cookie_name']]) || !isset($HTTP_COOKIE_VARS['password'])) {
+        if (!isset($_COOKIE[$_CONF['cookie_name']]) || !isset($_COOKIE['password'])) {
             // Either their cookie expired or they are new
             $cooktime = COM_getUserCookieTimeout();
             if ($VERBOSE) {
@@ -838,21 +897,21 @@
                            $_CONF['cookiedomain'], $_CONF['cookiesecure']);
             }
         } else {
-            $userid = $HTTP_COOKIE_VARS[$_CONF['cookie_name']];
+            $userid = $_COOKIE[$_CONF['cookie_name']];
             if (empty ($userid) || ($userid == 'deleted')) {
                 unset ($userid);
             } else {
-                if ($VERBOSE) {
-                    COM_errorLog('NOW trying to set permanent cookie',1);
-                    COM_errorLog('Got '.$userid.' from perm cookie in users.php',1);
-                }
-                if ($userid) {
-                    $user_logged_in = 1;
+                $userid = COM_applyFilter ($userid, true);
+                if ($userid > 1) {
+                    if ($VERBOSE) {
+                        COM_errorLog ('NOW trying to set permanent cookie',1);
+                        COM_errorLog ('Got '.$userid.' from perm cookie in users.php',1);
+                    }
                     // Create new session
-                    $userdata = SESS_getUserDataFromId($userid);
+                    $userdata = SESS_getUserDataFromId ($userid);
                     $_USER = $userdata;
                     if ($VERBOSE) {
-                        COM_errorLog('Got '.$_USER['username'].' for the username in user.php',1);
+                        COM_errorLog ('Got '.$_USER['username'].' for the username in user.php',1);
                     }
                 }
             }
@@ -864,23 +923,24 @@
                    $_CONF['cookie_path'], $_CONF['cookiedomain'],
                    $_CONF['cookiesecure']);
 
-        if (!empty ($HTTP_SERVER_VARS['HTTP_REFERER']) && (strstr ($HTTP_SERVER_VARS['HTTP_REFERER'], '/users.php') === false)) {
+        if (!empty ($_SERVER['HTTP_REFERER']) && (strstr ($_SERVER['HTTP_REFERER'], '/users.php') === false)) {
             $indexMsg = $_CONF['site_url'] . '/index.php?msg=';
-            if (substr ($HTTP_SERVER_VARS['HTTP_REFERER'], 0, strlen ($indexMsg)) == $indexMsg) {
+            if (substr ($_SERVER['HTTP_REFERER'], 0, strlen ($indexMsg)) == $indexMsg) {
                 $display .= COM_refresh ($_CONF['site_url'] . '/index.php');
             } else {
-                $display .= COM_refresh ($HTTP_SERVER_VARS['HTTP_REFERER']);
+                $display .= COM_refresh ($_SERVER['HTTP_REFERER']);
             }
         } else {
             $display .= COM_refresh ($_CONF['site_url'] . '/index.php');
         }
     } else {
+        // On failed login attempt, update speed limit
+        COM_updateSpeedlimit('login');
+
         $display .= COM_siteHeader('menu');
 
-        if (isset ($HTTP_POST_VARS['msg'])) {
-            $msg = $HTTP_POST_VARS['msg'];
-        } else if (isset ($HTTP_GET_VARS['msg'])) {
-            $msg = $HTTP_GET_VARS['msg'];
+        if (isset ($_REQUEST['msg'])) {
+            $msg = COM_applyFilter ($_REQUEST['msg'], true);
         } else {
             $msg = 0;
         }
@@ -893,14 +953,28 @@
             // Got bad account info from registration process, show error
             // message and display form again
             if ($_CONF['custom_registration'] AND (function_exists(custom_userform))) {
-                $display .= custom_userform ('new');
+                $display .= custom_userform ();
             } else {
                 $display .= newuserform ();
             }
             break;
         default:
-            // Show login form
-            $display .= loginform();
+            // check to see if this was the last allowed attempt
+            if ( COM_checkSpeedlimit('login', $_CONF['login_attempts']) > 0 ) {
+                $retval .= COM_siteHeader()
+                         . COM_startBlock ($LANG04[113], '',
+                                           COM_getBlockTemplate ('_msg_block', 'header'))
+                         . $LANG04[112]
+                         . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer'))
+                         . COM_siteFooter ();
+                echo $retval;
+                exit();
+            } else { // Show login form
+                if( ($msg != 69) && ($msg != 70) )
+                {
+                    $display .= loginform(false, $status);
+                }
+            }
             break;
         }
 
